crewly 1.4.57 → 1.4.58

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.
@@ -379,7 +379,7 @@ This will create milestone directories and detailed task files in .crewly/tasks/
379
379
  📋 ${nr} steps sent to ${et.name}
380
380
  ⏱️ Final step in ${Ar} minutes
381
381
 
382
- 🔍 Monitor ${ct.name}'s terminal for progress.`,"Build Specs Started");const Yr=setInterval(()=>{ae(zr=>{if(!zr.isActive)return zr;const Qr=new Date,jr=zr.steps.map(Fr=>Fr.status==="pending"&&Fr.scheduledAt&&Qr>=Fr.scheduledAt?{...Fr,status:"scheduled"}:Fr);return jr.every(Fr=>Fr.status==="scheduled")?(clearInterval(Yr),{...zr,steps:jr}):{...zr,steps:jr}})},3e4),Cs=at.reduce((zr,Qr)=>zr+Qr.delayMinutes,0);setTimeout(()=>{clearInterval(Yr)},(Cs+5)*6e4)}else throw new Error("Some Build Specs steps failed to schedule")}catch(_t){console.error("Error building specs:",_t),a("Failed to build specs: "+(_t instanceof Error?_t.message:"Unknown error"))}};if(fe.loading)return i.jsxDEV("div",{className:"flex items-center justify-center min-h-[400px]",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("div",{className:"w-12 h-12 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4 mx-auto"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1337,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading project..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1338,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1336,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1335,columnNumber:7},globalThis);if(fe.error||!fe.project)return i.jsxDEV("div",{className:"max-w-4xl mx-auto px-6 py-16",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("h2",{className:"text-2xl font-bold mb-4",children:"Error Loading Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1348,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:fe.error||"Project not found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1349,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1347,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1346,columnNumber:7},globalThis);const{project:Tt,assignedTeams:Pt,tickets:Se}=fe;return i.jsxDEV("div",{className:"max-w-7xl mx-auto px-6 py-8",children:[i.jsxDEV("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between gap-4 mb-8",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("div",{className:"flex items-center gap-3 text-sm text-text-secondary-dark mb-1",children:[i.jsxDEV(Ob,{to:"/projects",className:"hover:text-primary",children:"Projects"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1363,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark",children:"/"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1364,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-text-primary-dark",children:Tt.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1365,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1362,columnNumber:11},globalThis),i.jsxDEV("h1",{className:"text-3xl font-bold tracking-tight mb-2",children:Tt.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1367,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("span",{className:"flex items-center gap-1 text-sm text-text-secondary-dark",children:[i.jsxDEV(ol,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1370,columnNumber:15},globalThis),Tt.path]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1369,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"secondary",size:"sm",icon:xx,onClick:Mr,title:"Open project folder in Finder",children:"Open in Finder"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1373,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1368,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1361,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[Tt.status==="active"?i.jsxDEV(ur,{variant:"warning",icon:qV,onClick:dt,disabled:fe.loading,title:"Stop project and cancel scheduled messages",children:"Stop Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1388,columnNumber:13},globalThis):i.jsxDEV(ur,{variant:"primary",icon:Xp,onClick:Fe,disabled:fe.loading||Pt.length===0,loading:fe.loading,title:Pt.length===0?"Assign a team before starting the project":"Start project with assigned teams",children:fe.loading?"Starting...":"Start Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1398,columnNumber:13},globalThis),i.jsxDEV(Sx,{align:"bottom-right",items:[{label:"Assign Team",onClick:Me},...y==="tasks"?[{label:"Create Task",onClick:()=>Ce(!0)},{label:"Create Milestone",onClick:()=>Xe(!0)}]:[],{label:"Delete Project",onClick:it,danger:!0}]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1410,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1385,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1360,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex gap-1 mb-6 border-b border-border-dark",children:[i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="detail"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("detail"),children:[i.jsxDEV(Xk,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1448,columnNumber:11},globalThis),"Detail"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1440,columnNumber:9},globalThis),i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="editor"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("editor"),children:[i.jsxDEV(ol,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1459,columnNumber:11},globalThis),"Editor"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1451,columnNumber:9},globalThis),i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="tasks"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("tasks"),children:[i.jsxDEV(hX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1470,columnNumber:11},globalThis),"Tasks (",Se.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1462,columnNumber:9},globalThis),i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="teams"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("teams"),children:[i.jsxDEV(ZV,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1481,columnNumber:11},globalThis),"Teams (",Pt.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1473,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1439,columnNumber:7},globalThis),i.jsxDEV("div",{children:y==="detail"?i.jsxDEV(KJ,{project:Tt,onAddGoal:bt,onEditGoal:Mt,onAddUserJourney:Yt,onEditUserJourney:Pr,onBuildSpecs:Tr,onBuildTasks:ps,buildSpecsWorkflow:se,alignmentStatus:ce,onContinueWithMisalignment:J,onViewAlignment:de,selectedBuildSpecsTeam:ie,setSelectedBuildSpecsTeam:De,selectedBuildTasksTeam:Te,setSelectedBuildTasksTeam:Re,availableTeams:pe,onCreateSpecsTasks:Ze,onCreateDevTasks:Pe,onCreateE2ETasks:ot},Tt.updatedAt,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1489,columnNumber:11},globalThis):y==="editor"?i.jsxDEV(ZJ,{project:Tt,selectedFile:N,onFileSelect:j,setIsMarkdownEditorOpen:T},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1512,columnNumber:11},globalThis):y==="tasks"?i.jsxDEV("div",{children:[re.length>0&&i.jsxDEV("div",{className:"mb-4",children:[i.jsxDEV("button",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark hover:text-primary mb-2",onClick:()=>Ge(!ze),children:[i.jsxDEV("svg",{className:`w-4 h-4 transition-transform ${ze?"rotate-90":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1528,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1527,columnNumber:19},globalThis),"Task Flow (",re.length," active)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1523,columnNumber:17},globalThis),ze&&i.jsxDEV("div",{className:"rounded-lg border border-border-dark bg-surface-dark p-3",children:i.jsxDEV(E6,{tasks:re},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1534,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1533,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1522,columnNumber:15},globalThis),i.jsxDEV(qJ,{project:Tt,tickets:Se,onTicketsUpdate:()=>Ve(Tt.id),onCreateSpecsTasks:Ze,onCreateDevTasks:Pe,onCreateE2ETasks:ot,loading:fe.loading,onTaskClick:be,onTaskAssign:Ee,onTaskUnblock:ke,taskAssignmentLoading:te,taskUnblockLoading:q},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1540,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1519,columnNumber:11},globalThis):i.jsxDEV(YJ,{assignedTeams:Pt,onUnassignTeam:Ke,openTerminalWithSession:r,onAssignTeam:Me,projectName:Tt.name,onViewTeam:Ne=>t(`/teams/${Ne}`),onEditTeam:Ne=>t(`/teams/${Ne}?edit=true`)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1556,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1487,columnNumber:7},globalThis),b&&i.jsxDEV(xJ,{project:Tt,onClose:()=>x(!1),onAssignmentComplete:st},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1570,columnNumber:9},globalThis),D&&i.jsxDEV(WJ,{projectPath:Tt.path,onClose:()=>T(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1579,columnNumber:9},globalThis),i.jsxDEV(NJ,{isOpen:O,onClose:()=>{H(!1),le(null)},task:Y,onAssign:Ee,taskAssignmentLoading:te},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1586,columnNumber:7},globalThis),S&&i.jsxDEV(PT,{isOpen:S,onClose:()=>k(!1),title:"Add Project Goal",subtitle:"Define your project's main objective and success criteria",onSubmit:Ne=>{Ne.preventDefault(),jt()},submitText:"Save Goal",size:"md",children:i.jsxDEV(OT,{children:[i.jsxDEV(Ur,{htmlFor:"goal-content",required:!0,children:"Project Goal"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1609,columnNumber:13},globalThis),i.jsxDEV(of,{id:"goal-content",value:M,onChange:Ne=>R(Ne.target.value),placeholder:"Describe your project's main objective, success criteria, and key outcomes...",rows:8,required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1612,columnNumber:13},globalThis),i.jsxDEV(HR,{children:"Define what you want to achieve with this project. Be specific about goals, target users, and success metrics."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1620,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1608,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1599,columnNumber:9},globalThis),U&&i.jsxDEV(PT,{isOpen:U,onClose:()=>F(!1),title:"Add User Journey",subtitle:"Map out how users will interact with your solution",onSubmit:Ne=>{Ne.preventDefault(),dr()},submitText:"Save User Journey",size:"md",children:i.jsxDEV(OT,{children:[i.jsxDEV(Ur,{htmlFor:"journey-content",required:!0,children:"User Journey"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1639,columnNumber:13},globalThis),i.jsxDEV(of,{id:"journey-content",value:L,onChange:Ne=>B(Ne.target.value),placeholder:"Describe your users' journey from discovery to success. Include user personas, key interactions, pain points, and desired outcomes...",rows:8,required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1642,columnNumber:13},globalThis),i.jsxDEV(HR,{children:"Map out how users will interact with your solution. Include user types, main flows, and critical touchpoints."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1650,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1638,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1629,columnNumber:9},globalThis),i.jsxDEV(c,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1658,columnNumber:7},globalThis),i.jsxDEV(h,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1659,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1358,columnNumber:5},globalThis)},Lh="/api/settings/roles";class d${async listRoles(){const e=await ar.get(Lh);if(!e.data.success||!e.data.data)throw new Error(e.data.error||"Failed to get roles");return e.data.data}async getRole(e){const t=await ar.get(`${Lh}/${e}`);if(!t.data.success||!t.data.data)throw new Error(t.data.error||"Role not found");return t.data.data}async createRole(e){const t=await ar.post(Lh,e);if(!t.data.success||!t.data.data)throw new Error(t.data.error||"Failed to create role");return t.data.data}async updateRole(e,t){const r=await ar.put(`${Lh}/${e}`,t);if(!r.data.success||!r.data.data)throw new Error(r.data.error||"Failed to update role");return r.data.data}async deleteRole(e){const t=await ar.delete(`${Lh}/${e}`);if(!t.data.success)throw new Error(t.data.error||"Failed to delete role")}async assignSkills(e,t){const r=await ar.post(`${Lh}/${e}/skills`,{skillIds:t});if(!r.data.success||!r.data.data)throw new Error(r.data.error||"Failed to assign skills");return r.data.data}async removeSkills(e,t){const r=await ar.delete(`${Lh}/${e}/skills`,{data:{skillIds:t}});if(!r.data.success||!r.data.data)throw new Error(r.data.error||"Failed to remove skills");return r.data.data}async setDefaultRole(e){const t=await ar.post(`${Lh}/${e}/default`);if(!t.data.success||!t.data.data)throw new Error(t.data.error||"Failed to set default role");return t.data.data}async refreshFromDisk(){const e=await ar.post(`${Lh}/refresh`);if(!e.data.success)throw new Error(e.data.error||"Failed to refresh roles")}}const Xh=new d$;function _6(){const[s,e]=V.useState(null),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async()=>{r(!0),o(null);try{const y=await Xh.listRoles();e(y)}catch(y){o(y instanceof Error?y.message:"Failed to load roles")}finally{r(!1)}},[]),c=V.useCallback(async y=>{await Xh.createRole(y),await a()},[a]),u=V.useCallback(async(y,v)=>{await Xh.updateRole(y,v),await a()},[a]),d=V.useCallback(async y=>{await Xh.deleteRole(y),await a()},[a]),h=V.useCallback(async()=>{await a()},[a]),f=V.useCallback(async()=>{r(!0),o(null);try{await Xh.refreshFromDisk();const y=await Xh.listRoles();e(y)}catch(y){o(y instanceof Error?y.message:"Failed to refresh roles from disk")}finally{r(!1)}},[]);return V.useEffect(()=>{a()},[a]),{roles:s,isLoading:t,error:n,createRole:c,updateRole:u,deleteRole:d,refreshRoles:h,refreshFromDisk:f}}function k6(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async()=>{r(!0),o(null);try{const u=await fetch("/api/projects");if(!u.ok)throw new Error(`Failed to fetch projects: ${u.statusText}`);const d=await u.json(),h=d.success?d.data||[]:d||[];e(Array.isArray(h)?h:[])}catch(u){const d=u instanceof Error?u.message:"Failed to fetch projects";o(d),e([])}finally{r(!1)}},[]);V.useEffect(()=>{a()},[a]);const c=V.useMemo(()=>s.map(u=>({id:u.id,name:u.name,path:u.path})),[s]);return{projects:s,projectOptions:c,isLoading:t,error:n,refetch:a}}const m$="/api";function h$(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async u=>{r(!0),o(null);try{const d=await ar.get(`${m$}/teams`,{signal:u});d.data.success?e(d.data.data||[]):o(d.data.error||"Failed to load teams")}catch(d){if(ar.isCancel(d))return;const h=d instanceof Error?d.message:"Failed to load teams";o(h),console.error("useTeams: Failed to fetch teams:",d)}finally{r(!1)}},[]);V.useEffect(()=>{const u=new AbortController;return a(u.signal),()=>{u.abort()}},[a]);const c=V.useCallback(async()=>{await a()},[a]);return{teams:s,loading:t,error:n,refresh:c}}const qp="/api/skills";async function f$(s){const e=new URLSearchParams;s!=null&&s.category&&e.set("category",s.category),s!=null&&s.roleId&&e.set("roleId",s.roleId),s!=null&&s.search&&e.set("search",s.search);const t=e.toString()?`${qp}?${e}`:qp,r=await fetch(t);if(!r.ok)throw new Error(`Failed to fetch skills: ${r.statusText}`);const n=await r.json();return n.data||n}async function p$(s){const e=await fetch(`${qp}/${s}`);if(!e.ok)throw e.status===404?new Error(`Skill not found: ${s}`):new Error(`Failed to fetch skill: ${e.statusText}`);const t=await e.json();return t.data||t}async function y$(s){const e=await fetch(qp,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!e.ok){const r=await e.text();throw new Error(`Failed to create skill: ${r}`)}const t=await e.json();return t.data||t}async function g$(s,e){const t=await fetch(`${qp}/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){const n=await t.text();throw new Error(`Failed to update skill: ${n}`)}const r=await t.json();return r.data||r}async function b$(s){const e=await fetch(`${qp}/${s}`,{method:"DELETE"});if(!e.ok)throw new Error(`Failed to delete skill: ${e.statusText}`)}async function v$(s,e){const t=await fetch(`${qp}/${s}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e})});if(!t.ok){const n=await t.text();throw new Error(`Failed to execute skill: ${n}`)}const r=await t.json();return r.data||r}async function w$(){const s=await fetch(`${qp}/refresh`,{method:"POST"});if(!s.ok){const e=await s.text();throw new Error(`Failed to refresh skills: ${e}`)}}function hA(s={}){const{category:e,roleId:t,search:r,fetchOnMount:n=!0}=s,[o,a]=V.useState([]),[c,u]=V.useState(null),[d,h]=V.useState(n),[f,y]=V.useState(null),v=V.useCallback(async(k=!1)=>{h(!0),y(null);try{k&&await w$();const U={};e&&(U.category=e),t&&(U.roleId=t),r&&(U.search=r);const F=await f$(U);a(F)}catch(U){const F=U instanceof Error?U.message:"Failed to load skills";y(F),console.error("useSkills: Failed to fetch skills:",U)}finally{h(!1)}},[e,t,r]),N=V.useCallback(async k=>{try{const U=await p$(k);u(U)}catch(U){const F=U instanceof Error?U.message:"Failed to load skill";y(F),console.error("useSkills: Failed to select skill:",U)}},[]),j=V.useCallback(()=>{u(null)},[]),b=V.useCallback(async k=>{const U=await y$(k);return await v(),U},[v]),x=V.useCallback(async(k,U)=>{const F=await g$(k,U);return await v(),(c==null?void 0:c.id)===k&&u(F),F},[v,c==null?void 0:c.id]),D=V.useCallback(async k=>{await b$(k),await v(),(c==null?void 0:c.id)===k&&u(null)},[v,c==null?void 0:c.id]),T=V.useCallback(async(k,U)=>v$(k,U),[]),S=V.useCallback(async()=>{await v(!0)},[v]);return V.useEffect(()=>{n&&v(!1)},[n,v]),{skills:o,selectedSkill:c,loading:d,error:f,refresh:S,selectSkill:N,clearSelection:j,create:b,update:x,remove:D,execute:T}}const Y0=[3825546,9058911,6261306,9068346,6240906,3836511],ix={day:{background:15267068,fog:15267068,wallColor:16119287,floorColor:9079434,ambientIntensity:.7,sunIntensity:1.2},night:{background:657938,fog:657938,wallColor:1710623,floorColor:1710624,ambientIntensity:.15,sunIntensity:0}},tr={ZONE:{WIDTH:10,DEPTH:7,ZONES_PER_ROW:3,START_X:-14,START_Z:8,GAP_X:4,GAP_Z:3},WORKSTATION_POSITIONS:[{x:-3,z:1.5},{x:3,z:1.5},{x:-3,z:-1},{x:3,z:-1}],CAMERA:{DEFAULT_POSITION:{x:-28,y:22,z:-18},FOV:60,NEAR:.1,FAR:150,LOOK_SENSITIVITY:.002,MIN_PITCH:-Math.PI/2+.1,MAX_PITCH:Math.PI/2-.1,MOVE_SPEED:15,ZOOM_SPEED:.5,MOUSE_SENSITIVITY:.005,TOUCH_SENSITIVITY:.008},AGENT:{ROBOT_SCALE:.5,WORKSTATION_OFFSET:.8,ANIMATION_FADE_DURATION:.5},WALLS:{HEIGHT:12,THICKNESS:.3,BACK_X:-32,LEFT_Z:-22,RIGHT_Z:22,FRONT_X:32},BREAK_ROOM:{POSITION:{x:-26,y:0,z:-14}},POKER_TABLE:{POSITION:{x:26,y:0,z:-14}},STAGE:{POSITION:{x:26,y:0,z:4},WIDTH:8,DEPTH:5,HEIGHT:.4,ROTATION:-Math.PI/2,AUDIENCE_POSITIONS:[{x:18,z:2},{x:18,z:6},{x:20,z:0},{x:20,z:4},{x:20,z:8}]},LOUNGE:{POSITION:{x:-26,y:0,z:14},COUCH_POSITIONS:[{x:-2,z:0,rotation:Math.PI/2},{x:2,z:0,rotation:-Math.PI/2}]},KITCHEN:{POSITION:{x:-27,y:0,z:3},SEAT_POSITIONS:[{x:-1,z:1.8,rotation:Math.PI},{x:0,z:1.8,rotation:Math.PI},{x:1,z:1.8,rotation:Math.PI},{x:-.5,z:-1.8,rotation:0},{x:.5,z:-1.8,rotation:0}]},ANIMATION:{FOCUS_DURATION:1500,BOSS_MODE_INTERVAL:8e3},API:{POLL_INTERVAL:5e3,USAGE_POLL_INTERVAL:3e4},MOVEMENT:{ARRIVAL_DISTANCE:.5,STUCK_THRESHOLD:.01,STUCK_MIN_DISTANCE:2,ROTATION_LERP_SPEED:5,ANIMATION_FADE_DURATION:.3,COUCH_SEAT_HEIGHT:.35},CIRCLE_INDICATOR:{RADIUS_DEFAULT:.7,RADIUS_ACTIVE:.85,SEGMENTS:32,Y_OFFSET:.1},PICKLEBALL:{POSITION:{x:-18,y:0,z:42}},GOLF:{POSITION:{x:18,y:0,z:42}},OUTDOOR_BENCH:{POSITIONS:[{x:-4,z:30,rotation:Math.PI/2},{x:4,z:30,rotation:-Math.PI/2},{x:-4,z:36,rotation:Math.PI/2},{x:4,z:36,rotation:-Math.PI/2}]},NPC_IDS:{STEVE_JOBS:"steve-jobs-npc",SUNDAR_PICHAI:"sundar-pichai-npc",ELON_MUSK:"elon-musk-npc",MARK_ZUCKERBERG:"mark-zuckerberg-npc",JENSEN_HUANG:"jensen-huang-npc",STEVE_HUANG:"steve-huang-npc"}},dn={ROBOT:"/models/employees/robot/RobotExpressive.glb",COW:"/models/employees/cow/cow-fixed.glb?v=3",HORSE:"/models/employees/horse/horse-fixed.glb",TIGER:"/models/employees/tiger/tiger-fixed.glb",RABBIT:"/models/employees/rabbit/rabbit-fixed.glb",STEVE_JOBS:"/models/guests/stevejobs/model.glb",SUNDAR_PICHAI:"/models/guests/sundarpichai/model.glb",ELON_MUSK:"/models/guests/elonmusk/model.glb",MARK_ZUCKERBERG:"/models/guests/markzuckerberg/model.glb",JENSEN_HUANG:"/models/guests/jensenhuang/model.glb?v=2",STEVE_HUANG:"/models/guests/stevehuang/model.glb?v=2",CYBERTRUCK:"/models/objects/cybertruck/model.glb",PUPPY:"/models/pets/puppy/model.glb",ROBOTIC_DOG:"/models/pets/roboticdog/original.glb",SHIBA_INU:"/models/pets/shibainu/model.glb",BULLDOG:"/models/pets/bulldog/model.glb"},x$=["development","management","quality","design","sales","support","automation"],h5={development:"Development",management:"Management",quality:"Quality",design:"Design",sales:"Sales",support:"Support",automation:"Automation"},pP=["gemini","anthropic","openai"],C6=["claude-code","gemini-cli","codex-cli","crewly-agent"],NT={"claude-code":"Claude Code","gemini-cli":"Gemini CLI","codex-cli":"Codex CLI","crewly-agent":"Crewly Agent"},N$=["development","design","communication","research","content-creation","automation","analysis","integration","management","monitoring","memory","system","task-management","quality"];function A6(s){return{development:"Development",design:"Design",communication:"Communication",research:"Research","content-creation":"Content Creation",automation:"Automation",analysis:"Analysis",integration:"Integration",management:"Management",monitoring:"Monitoring",memory:"Memory",system:"System","task-management":"Task Management",quality:"Quality"}[s]||s}function D$(s){return{"claude-skill":"Claude Skill","web-page":"Web Page"}[s]||s}const lV=[{id:"google/gemini-3-flash-preview",label:"Gemini 3 Flash (Preview)"},{id:"google/gemini-2.5-flash-preview-05-20",label:"Gemini 2.5 Flash"},{id:"anthropic/claude-sonnet-4-20250514",label:"Claude Sonnet 4"},{id:"anthropic/claude-haiku-4-20250514",label:"Claude Haiku 4"},{id:"openai/gpt-4o",label:"GPT-4o"},{id:"openai/gpt-4o-mini",label:"GPT-4o Mini"},{id:"ollama/llama3",label:"Llama 3 (Ollama)"}],M6=({isOpen:s,onClose:e,onSubmit:t,team:r})=>{const{showWarning:n,AlertComponent:o}=ny(),{roles:a,isLoading:c}=_6(),{projects:u,isLoading:d}=k6(),{teams:h,loading:f}=h$(),{skills:y,loading:v}=hA(),[N,j]=V.useState({name:"",projectPath:"",parentTeamId:""}),[b,x]=V.useState([]),[D,T]=V.useState({hierarchical:!1,leaderId:null,leaderIds:[]}),[S,k]=V.useState(!1),[U,F]=V.useState({}),[M,R]=V.useState({}),L=(a||[]).map(ee=>({key:ee.name,displayName:ee.displayName,promptFile:`${ee.name}-prompt.md`,description:ee.description||"",category:ee.category,hidden:!1,isDefault:ee.isDefault})),B=V.useCallback(async ee=>{if(M[ee])return M[ee];try{const ce=await Xh.getRole(ee);return R(G=>({...G,[ee]:ce})),ce}catch(ce){return console.error("Failed to fetch role details:",ce),null}},[M]),O=ee=>{F(ce=>({...ce,[ee]:!ce[ee]}))},H=(ee,ce)=>{x(G=>G.map(ie=>{if(ie.id!==ee)return ie;const De=ie.skillOverrides||[],Te=De.includes(ce);return{...ie,skillOverrides:Te?De.filter(Re=>Re!==ce):[...De,ce]}}))},Y=(ee,ce)=>{x(G=>G.map(ie=>{if(ie.id!==ee)return ie;const De=ie.excludedRoleSkills||[],Te=De.includes(ce);return{...ie,excludedRoleSkills:Te?De.filter(Re=>Re!==ce):[...De,ce]}}))},le=ee=>{const ce=te(ee.role),G=ee.excludedRoleSkills||[];return ce.filter(ie=>!G.includes(ie))},te=ee=>{const ce=M[ee];return(ce==null?void 0:ce.assignedSkills)||[]},ne=ee=>y.find(ce=>ce.id===ee);V.useEffect(()=>{var ee;if(r&&(j({name:r.name||"",projectPath:((ee=r.projectIds)==null?void 0:ee[0])||r.projectPath||"",parentTeamId:r.parentTeamId||""}),T({hierarchical:r.hierarchical||!1,leaderId:r.leaderId||null,leaderIds:r.leaderIds||(r.leaderId?[r.leaderId]:[])}),r.members&&Array.isArray(r.members))){const ce=r.members.map((G,ie)=>({...G,runtimeType:G.runtimeType||"claude-code",avatar:G.avatar||X[ie%X.length],skillOverrides:G.skillOverrides||[],excludedRoleSkills:G.excludedRoleSkills||[]}));x(ce),ce.forEach(G=>{G.role&&B(G.role)})}},[r,B]),V.useEffect(()=>{if(L.length>0&&b.length===0&&!r){const ce=L.filter(G=>G.isDefault).map((G,ie)=>({id:(ie+1).toString(),name:G.displayName,role:G.key,systemPrompt:`Load from ${G.promptFile}`,runtimeType:"claude-code",avatar:X[ie%X.length],skillOverrides:[],excludedRoleSkills:[]}));ce.length>0&&(x(ce),ce.forEach(G=>{B(G.role)}))}},[L,b.length,r,B]);const q=ee=>{const{name:ce,value:G}=ee.target;j(ie=>({...ie,[ce]:G}))},Z=(ee,ce,G)=>{x(ie=>ie.map(De=>{if(De.id===ee){const Te={...De,[ce]:G};if(ce==="role"){const Re=L.find(pe=>pe.key===G);Re&&(Te.systemPrompt=`Load from ${Re.promptFile}`),Te.skillOverrides=[],Te.excludedRoleSkills=[],B(G)}return Te}return De}))},X=["https://picsum.photos/seed/1/64","https://picsum.photos/seed/2/64","https://picsum.photos/seed/3/64","https://picsum.photos/seed/4/64","https://picsum.photos/seed/5/64","https://picsum.photos/seed/6/64"],z=()=>{const ee=(Math.max(...b.map(ie=>parseInt(ie.id)))+1).toString(),ce=L.find(ie=>ie.key==="fullstack-dev"),G={id:ee,name:"Fullstack Developer",role:"fullstack-dev",systemPrompt:ce?`Load from ${ce.promptFile}`:"Default fullstack developer prompt",runtimeType:"claude-code",avatar:X[b.length%X.length],skillOverrides:[],excludedRoleSkills:[]};x(ie=>[...ie,G]),B("fullstack-dev")},se=ee=>{b.length>1&&x(ce=>ce.filter(G=>G.id!==ee))},ae=async ee=>{if(ee.preventDefault(),!(!N.name.trim()||b.length===0)){for(const ce of b)if(!ce.name.trim()){n("All team members must have a name");return}k(!0);try{const ce=u.find(ie=>ie.id===N.projectPath),G={...N,members:b.map(ie=>({name:ie.name,role:ie.role,systemPrompt:ie.systemPrompt,runtimeType:ie.runtimeType,avatar:ie.avatar,skillOverrides:ie.skillOverrides||[],excludedRoleSkills:ie.excludedRoleSkills||[]})),projectIds:N.projectPath?[N.projectPath]:[],projectPath:ce?ce.path:void 0,parentTeamId:N.parentTeamId||null,hierarchical:D.hierarchical,leaderId:D.hierarchical?D.leaderId:void 0,leaderIds:D.hierarchical?D.leaderIds:void 0};await t(G)}catch(ce){console.error("Error submitting team:",ce)}finally{k(!1)}}},fe=ee=>{ee.preventDefault(),ae(ee)};return s?i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:e,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-2xl m-4",onClick:ee=>ee.stopPropagation(),children:[i.jsxDEV("div",{className:"p-6",children:[i.jsxDEV("div",{className:"flex items-start justify-between",children:[i.jsxDEV("div",{children:[i.jsxDEV("h3",{className:"text-xl font-semibold text-text-primary-dark",children:r?"Edit Team":"Create New Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:348,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:r?"Modify team configuration and members":"Configure the details for your new AI agent team."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:351,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:347,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:e,className:"w-8 h-8 -mt-1 -mr-1 rounded-lg hover:bg-background-dark flex items-center justify-center text-text-secondary-dark hover:text-text-primary-dark",children:i.jsxDEV("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:360,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:359,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:355,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:346,columnNumber:13},globalThis),i.jsxDEV("form",{onSubmit:fe,className:"mt-6 space-y-6 max-h-[60vh] overflow-y-auto pr-2",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"team-name",children:"Team Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:366,columnNumber:17},globalThis),i.jsxDEV(en,{id:"team-name",type:"text",value:N.name,onChange:q,name:"name",placeholder:"e.g., Frontend Wizards",required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:367,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:365,columnNumber:15},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"project-assignment",children:"Assigned Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:379,columnNumber:17},globalThis),i.jsxDEV(pc,{id:"project-assignment",value:N.projectPath||"",onChange:q,name:"projectPath",children:[i.jsxDEV("option",{value:"",children:"No project assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:386,columnNumber:19},globalThis),u.map(ee=>i.jsxDEV("option",{value:ee.id,children:ee.name},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:388,columnNumber:21},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:380,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Optionally assign a project for this team to work on"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:391,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:378,columnNumber:15},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"parent-team",children:"Parent Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:397,columnNumber:17},globalThis),i.jsxDEV(pc,{id:"parent-team",value:N.parentTeamId||"",onChange:q,name:"parentTeamId",children:[i.jsxDEV("option",{value:"",children:"None (Independent Team)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:404,columnNumber:19},globalThis),h.filter(ee=>ee.id!==(r==null?void 0:r.id)&&ee.id!=="orchestrator").map(ee=>i.jsxDEV("option",{value:ee.id,children:ee.name},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:408,columnNumber:23},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:398,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Optionally link this team under a parent team for organization"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:411,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:396,columnNumber:15},globalThis),i.jsxDEV(S6,{config:D,onChange:T,members:b},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:416,columnNumber:15},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{children:"Team Members"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:423,columnNumber:17},globalThis),i.jsxDEV("div",{className:"space-y-4",children:[b.map((ee,ce)=>{var G,ie,De,Te;return i.jsxDEV("div",{className:"p-4 border border-border-dark rounded-lg space-y-4 bg-background-dark/50",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{children:"Avatar"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:428,columnNumber:25},globalThis),i.jsxDEV("div",{className:"flex items-center gap-4",children:[i.jsxDEV("img",{src:ee.avatar||X[0],alt:"Selected Avatar",className:"w-12 h-12 rounded-full ring-2 ring-primary/50"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:430,columnNumber:27},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-2 flex-1",children:X.map(Re=>i.jsxDEV("img",{src:Re,alt:"Avatar option",onClick:()=>Z(ee.id,"avatar",Re),className:`w-9 h-9 rounded-full cursor-pointer transition-all ${ee.avatar===Re?"ring-2 ring-primary":"ring-2 ring-transparent hover:ring-primary/50"}`},Re,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:437,columnNumber:31},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:435,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:429,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:427,columnNumber:23},globalThis),i.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`member-name-${ce}`,children:"Agent Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:450,columnNumber:27},globalThis),i.jsxDEV(en,{id:`member-name-${ce}`,type:"text",value:ee.name,onChange:Re=>Z(ee.id,"name",Re.target.value),placeholder:"e.g., Agent Smith",required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:451,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:449,columnNumber:25},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`member-role-${ce}`,children:"Role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:461,columnNumber:27},globalThis),i.jsxDEV(pc,{id:`member-role-${ce}`,value:ee.role,onChange:Re=>Z(ee.id,"role",Re.target.value),required:!0,children:[i.jsxDEV("option",{value:"",children:"Select role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:468,columnNumber:29},globalThis),L.filter(Re=>!Re.hidden).map(Re=>i.jsxDEV("option",{value:Re.key,children:Re.displayName},Re.key,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:470,columnNumber:31},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:462,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:460,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:448,columnNumber:23},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`runtime-type-${ce}`,children:"Runtime Type"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:476,columnNumber:25},globalThis),i.jsxDEV(pc,{id:`runtime-type-${ce}`,value:ee.runtimeType,onChange:Re=>Z(ee.id,"runtimeType",Re.target.value),required:!0,children:[i.jsxDEV("option",{value:"claude-code",children:"Claude CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:483,columnNumber:27},globalThis),i.jsxDEV("option",{value:"gemini-cli",children:"Gemini CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:484,columnNumber:27},globalThis),i.jsxDEV("option",{value:"codex-cli",children:"Codex CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:485,columnNumber:27},globalThis),i.jsxDEV("option",{value:"crewly-agent",children:"Crewly Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:486,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:477,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:475,columnNumber:23},globalThis),ee.runtimeType==="crewly-agent"&&i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`model-id-${ce}`,children:"AI Model"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:493,columnNumber:27},globalThis),i.jsxDEV(pc,{id:`model-id-${ce}`,value:ee.modelId||"",onChange:Re=>Z(ee.id,"modelId",Re.target.value),children:[i.jsxDEV("option",{value:"",children:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:499,columnNumber:29},globalThis),lV.map(Re=>i.jsxDEV("option",{value:Re.id,children:Re.label},Re.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:501,columnNumber:31},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:494,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:492,columnNumber:25},globalThis),ee.role&&i.jsxDEV("div",{className:"border-t border-border-dark pt-3",children:[i.jsxDEV("button",{type:"button",onClick:()=>O(ee.id),className:"flex items-center gap-2 text-sm font-medium text-text-primary-dark hover:text-primary w-full",children:[U[ee.id]?i.jsxDEV(uf,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:516,columnNumber:31},globalThis):i.jsxDEV(nf,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:518,columnNumber:31},globalThis),i.jsxDEV("span",{children:"Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:520,columnNumber:29},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark ml-1",children:["(",le(ee).length," from role",(((G=ee.excludedRoleSkills)==null?void 0:G.length)||0)>0&&` - ${(ie=ee.excludedRoleSkills)==null?void 0:ie.length} excluded`,(((De=ee.skillOverrides)==null?void 0:De.length)||0)>0&&` + ${(Te=ee.skillOverrides)==null?void 0:Te.length} additional`,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:521,columnNumber:29},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:510,columnNumber:27},globalThis),U[ee.id]&&i.jsxDEV("div",{className:"mt-3 space-y-2",children:[te(ee.role).length>0&&i.jsxDEV("div",{className:"space-y-1",children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark font-medium uppercase tracking-wide",children:["From Role ",i.jsxDEV("span",{className:"font-normal",children:"(click to exclude for this member)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:534,columnNumber:47},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:533,columnNumber:35},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:te(ee.role).map(Re=>{var ve;const pe=ne(Re),$e=(ve=ee.excludedRoleSkills)==null?void 0:ve.includes(Re);return i.jsxDEV("button",{type:"button",onClick:()=>Y(ee.id,Re),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors cursor-pointer ${$e?"bg-rose-500/10 border-rose-500/30 text-rose-400 hover:bg-rose-500/20":"bg-primary/10 border-primary/30 text-primary hover:bg-primary/20"}`,title:$e?`Click to re-enable "${(pe==null?void 0:pe.name)||Re}" for this member`:`Click to exclude "${(pe==null?void 0:pe.name)||Re}" for this member`,children:[$e?i.jsxDEV(jn,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:552,columnNumber:57},globalThis):i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:552,columnNumber:85},globalThis),(pe==null?void 0:pe.name)||Re]},Re,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:541,columnNumber:41},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:536,columnNumber:35},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:532,columnNumber:33},globalThis),i.jsxDEV("div",{className:"space-y-1",children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark font-medium uppercase tracking-wide",children:"Additional Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:563,columnNumber:33},globalThis),v?i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"Loading skills..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:567,columnNumber:35},globalThis):i.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:[y.filter(Re=>!te(ee.role).includes(Re.id)).map(Re=>{var $e;const pe=($e=ee.skillOverrides)==null?void 0:$e.includes(Re.id);return i.jsxDEV("button",{type:"button",onClick:()=>H(ee.id,Re.id),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors ${pe?"bg-emerald-500/10 border-emerald-500/30 text-emerald-400":"bg-background-dark border-border-dark text-text-secondary-dark hover:border-primary/50 hover:text-text-primary-dark"}`,title:Re.description,children:[pe?i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:587,columnNumber:47},globalThis):i.jsxDEV(tl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:589,columnNumber:47},globalThis),Re.name]},Re.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:575,columnNumber:43},globalThis)}),y.filter(Re=>!te(ee.role).includes(Re.id)).length===0&&i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"No additional skills available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:596,columnNumber:39},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:569,columnNumber:35},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:562,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:529,columnNumber:29},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:509,columnNumber:25},globalThis),i.jsxDEV("div",{className:"flex justify-end",children:i.jsxDEV("button",{type:"button",onClick:()=>se(ee.id),className:"text-text-secondary-dark hover:text-red-500 h-auto p-0 text-sm flex items-center gap-1",children:[i.jsxDEV("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:613,columnNumber:29},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:612,columnNumber:27},globalThis),"Delete Member"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:607,columnNumber:25},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:606,columnNumber:23},globalThis)]},ee.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:426,columnNumber:21},globalThis)}),i.jsxDEV("button",{type:"button",onClick:z,className:"w-full flex items-center justify-center gap-2 py-2 border-2 border-dashed border-border-dark rounded-lg text-text-secondary-dark hover:text-primary hover:border-primary transition-colors",children:[i.jsxDEV("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6m0 0v6m0-6h6m-6 0H6"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:626,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:625,columnNumber:21},globalThis),i.jsxDEV("span",{children:"Add Team Member"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:628,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:620,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:424,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:422,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:364,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:345,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark px-6 py-4 rounded-b-xl border-t border-border-dark flex justify-end gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:e,type:"button",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:635,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"primary",type:"submit",onClick:fe,disabled:!N.name.trim()||b.length===0||S||c||d||f,children:S?i.jsxDEV("div",{className:"animate-spin rounded-full h-4 w-4 border-2 border-current border-t-transparent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:645,columnNumber:17},globalThis):i.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[i.jsxDEV("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:r?"M5 13l4 4L19 7":"M12 6v6m0 0v6m0-6h6m-6 0H6"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:649,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:648,columnNumber:19},globalThis),r?"Save Changes":"Create Team"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:647,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:638,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:634,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:344,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:343,columnNumber:7},globalThis),i.jsxDEV(o,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:658,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:342,columnNumber:5},globalThis):null},T$=({member:s,teamId:e,onClose:t})=>{const[r,n]=V.useState(null),[o,a]=V.useState(!1),[c,u]=V.useState(null),[d,h]=V.useState(!1),[f,y]=V.useState(null),[v,N]=V.useState(!1),[j,b]=V.useState("prompt"),x=V.useRef(null);V.useEffect(()=>(D(),()=>{S()}),[s.id,e]);const D=async()=>{if(!s.sessionName){u("No active session for this team member");return}try{a(!0),u(null),or.isConnected()||await or.connect(),T(),or.subscribeToSession(s.sessionName),await k()}catch(B){console.error("Error initializing terminal:",B),u("Failed to connect to terminal"),N(!1)}finally{a(!1)}},T=()=>{if(!s.sessionName)return;const B=te=>{te.sessionName===s.sessionName&&(n(ne=>({...ne,memberId:s.id,memberName:s.name,sessionName:s.sessionName,output:te.content,timestamp:te.timestamp})),setTimeout(()=>{x.current&&(x.current.scrollTop=x.current.scrollHeight)},10))},O=te=>{te.sessionName===s.sessionName&&(n({memberId:s.id,memberName:s.name,sessionName:s.sessionName,output:te.content,timestamp:te.timestamp}),N(!0),u(null))},H=te=>{te.sessionName===s.sessionName&&(console.log("Successfully subscribed to session:",te.sessionName),N(!0),u(null))},Y=te=>{te.sessionName===s.sessionName&&(console.error("WebSocket error for session:",te),u(te.error||"WebSocket error occurred"),N(!1))},le=()=>{N(!0)};return or.on("terminal_output",B),or.on("initial_terminal_state",O),or.on("subscription_confirmed",H),or.on("error",Y),or.on("connected",le),()=>{or.off("terminal_output",B),or.off("initial_terminal_state",O),or.off("subscription_confirmed",H),or.off("error",Y),or.off("connected",le)}},S=()=>{f&&clearInterval(f),s.sessionName&&or.isConnected()&&or.unsubscribeFromSession(s.sessionName)};V.useEffect(()=>{if(d){const B=setInterval(()=>{k()},15e3);y(B)}else f&&(clearInterval(f),y(null));return()=>{f&&clearInterval(f)}},[d]);const k=async()=>{if(!s.sessionName){u("No active session for this team member");return}a(!0),u(null);try{const B=await fetch(`/api/teams/${e}/members/${s.id}/session?lines=100`);if(B.ok){const O=await B.json();O.success?n(O.data):u(O.error||"Failed to fetch session data")}else{const O=await B.json();u(O.error||"Failed to fetch session data")}}catch(B){u("Network error while fetching session data"),console.error("Error fetching session data:",B)}finally{a(!1)}},U=B=>{B.target===B.currentTarget&&t()},F=B=>({orchestrator:"#8b5cf6",pm:"#3b82f6",developer:"#10b981",qa:"#f59e0b",tester:"#ef4444",designer:"#ec4899"})[B]||"#6b7280",M=B=>({inactive:"#6b7280",activating:"#f59e0b",active:"#059669"})[B]||"#6b7280",R=B=>({idle:"#6b7280",in_progress:"#10b981"})[B]||"#6b7280",L=B=>new Date(B).toLocaleString();return i.jsxDEV("div",{className:"modal-overlay",onClick:U,children:i.jsxDEV("div",{className:"modal-content member-modal-content",children:[i.jsxDEV("div",{className:"modal-header",children:[i.jsxDEV("div",{className:"member-header-info",children:[i.jsxDEV("h2",{children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:260,columnNumber:13},globalThis),i.jsxDEV("div",{className:"member-badges",children:[i.jsxDEV("span",{className:"role-badge",style:{backgroundColor:F(s.role)},children:s.role},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:262,columnNumber:15},globalThis),i.jsxDEV("span",{className:"status-badge",style:{backgroundColor:M(s.agentStatus)},children:["Agent: ",s.agentStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:268,columnNumber:15},globalThis),i.jsxDEV("span",{className:"status-badge",style:{backgroundColor:R(s.workingStatus)},children:["Work: ",s.workingStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:274,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:261,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:259,columnNumber:11},globalThis),i.jsxDEV("button",{className:"close-button",onClick:t,children:"×"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:282,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:258,columnNumber:9},globalThis),i.jsxDEV("div",{className:"member-tabs",children:[i.jsxDEV("button",{className:`tab-button ${j==="prompt"?"active":""}`,onClick:()=>b("prompt"),children:"System Prompt"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:287,columnNumber:11},globalThis),i.jsxDEV("button",{className:`tab-button ${j==="terminal"?"active":""}`,onClick:()=>b("terminal"),children:"Terminal Output"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:293,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:286,columnNumber:9},globalThis),i.jsxDEV("div",{className:"member-modal-body",children:[j==="prompt"&&i.jsxDEV("div",{className:"system-prompt-panel",children:i.jsxDEV("div",{className:"system-prompt-content",children:i.jsxDEV("pre",{className:"system-prompt-text",children:s.systemPrompt},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:306,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:305,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:304,columnNumber:13},globalThis),j==="terminal"&&i.jsxDEV("div",{className:"terminal-panel",children:[i.jsxDEV("div",{className:"terminal-header",children:[i.jsxDEV("div",{className:"terminal-header-left",children:s.sessionName&&i.jsxDEV("span",{className:"session-name",children:["Session: ",s.sessionName]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:319,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:317,columnNumber:17},globalThis),i.jsxDEV("div",{className:"terminal-controls",children:[i.jsxDEV("div",{className:"connection-status",children:i.jsxDEV("span",{className:`status-indicator ${v?"connected":"disconnected"}`,children:v?"🟢 Live":"🔴 Offline"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:324,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:323,columnNumber:19},globalThis),i.jsxDEV("label",{className:"auto-refresh-toggle",children:[i.jsxDEV("input",{type:"checkbox",checked:d,onChange:B=>h(B.target.checked),disabled:v},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:329,columnNumber:21},globalThis),"Auto-refresh (fallback)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:328,columnNumber:19},globalThis),i.jsxDEV(ur,{className:"refresh-button",onClick:k,disabled:o||v,variant:"secondary",size:"sm",children:o?"Loading...":"Manual Refresh"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:337,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:322,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:316,columnNumber:15},globalThis),i.jsxDEV("div",{className:"terminal-output",children:[o&&!r&&i.jsxDEV("div",{className:"loading-state",children:[i.jsxDEV("div",{className:"loading-spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:352,columnNumber:21},globalThis),i.jsxDEV("p",{children:"Loading session data..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:353,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:351,columnNumber:19},globalThis),c&&i.jsxDEV("div",{className:"error-state",children:[i.jsxDEV("p",{children:["Error: ",c]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:359,columnNumber:21},globalThis),i.jsxDEV(ur,{onClick:k,className:"retry-button",variant:"outline",size:"sm",children:"Retry"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:360,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:358,columnNumber:19},globalThis),r&&i.jsxDEV("div",{className:"session-data",children:[i.jsxDEV("div",{className:"session-meta",children:i.jsxDEV("span",{children:["Last updated: ",L(r.timestamp)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:369,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:368,columnNumber:21},globalThis),i.jsxDEV("pre",{className:"terminal-content",ref:x,children:r.output||"No output available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:371,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:367,columnNumber:19},globalThis),!o&&!c&&!r&&i.jsxDEV("div",{className:"empty-state",children:i.jsxDEV("p",{children:"No session data available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:379,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:378,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:349,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:315,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:301,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:257,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:256,columnNumber:5},globalThis)},j$=({team:s,onClick:e,onViewTeam:t,onEditTeam:r,onDeleteTeam:n,projectName:o})=>{var u;const a=s.members||[],c=a.some(d=>d.agentStatus==="active");return i.jsxDEV("div",{className:"flex items-center justify-between p-4 bg-surface-dark rounded-lg border border-border-dark hover:bg-background-dark hover:border-primary/50 transition-colors group",children:[i.jsxDEV("div",{className:"flex items-center gap-4 flex-grow cursor-pointer",onClick:e,children:[i.jsxDEV("div",{className:"p-3 bg-background-dark rounded-lg border border-transparent group-hover:border-primary/20 transition-colors",children:i.jsxDEV(ei,{className:"text-text-secondary-dark group-hover:text-primary transition-colors"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:34,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:33,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{children:[i.jsxDEV("p",{className:"font-semibold text-text-primary-dark",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:38,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:o||(((u=s.projectIds)==null?void 0:u.length)>0?s.projectIds.join(", "):"No Project")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:39,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:37,columnNumber:11},globalThis),c&&i.jsxDEV("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-green-500/10 text-green-400",children:"Active"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:42,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:36,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:29,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-6",children:[i.jsxDEV("div",{className:"hidden md:flex -space-x-2",children:[a.slice(0,4).map((d,h)=>i.jsxDEV(y6,{name:d.name,avatar:d.avatar,size:"sm",className:"border-2 border-surface-dark"},d.id||h,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:51,columnNumber:13},globalThis)),a.length>4&&i.jsxDEV("div",{className:"w-8 h-8 rounded-full border-2 border-surface-dark bg-background-dark flex items-center justify-center text-xs font-medium text-text-secondary-dark",children:["+",a.length-4]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:60,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:49,columnNumber:9},globalThis),i.jsxDEV("div",{className:"hidden sm:flex items-center gap-2 text-sm text-text-secondary-dark w-28",children:[i.jsxDEV(ei,{className:"text-base"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:66,columnNumber:11},globalThis),i.jsxDEV("span",{children:[a.length," Members"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:67,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:65,columnNumber:9},globalThis),i.jsxDEV("div",{onClick:d=>d.preventDefault(),children:i.jsxDEV(Sx,{align:"bottom-right",items:[...t?[{label:"View Team",onClick:()=>t(s.id)}]:[],...r?[{label:"Edit Team",onClick:()=>r(s.id)}]:[],...n?[{label:"Delete Team",danger:!0,onClick:()=>n(s.id)}]:[]]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:70,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:69,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:48,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:28,columnNumber:5},globalThis)},yP="https://api.crewlyai.com/api",Db="crewly_cloud_token",S$="https://crewlyai.com/cloud/auth";function E$(s){const e=s||`${window.location.origin}/auth/callback`;return`${S$}?redirect=${encodeURIComponent(e)}`}const gP=3e4,_$=3e5,k$=2;function C$(s,e,t,r){const[n,o]=V.useState([]),[a,c]=V.useState(!1),[u,d]=V.useState(null),h=V.useRef(null),f=V.useRef(!0),y=V.useRef(0),v=V.useRef(s),N=V.useRef(t),j=V.useRef(r),b=V.useRef(e);v.current=s,N.current=t,j.current=r,b.current=e;const x=V.useCallback(()=>y.current===0?gP:Math.min(gP*Math.pow(k$,y.current),_$),[]),D=V.useCallback(()=>{if(!f.current||!b.current)return;h.current&&clearTimeout(h.current);const k=x();h.current=setTimeout(()=>{T()},k)},[x]),T=V.useCallback(async()=>{const k=v.current;if(!k||!f.current)return;const U={"Content-Type":"application/json",Authorization:`Bearer ${k}`};try{await fetch(`${yP}/devices/heartbeat`,{method:"POST",headers:U,body:JSON.stringify({deviceName:j.current,teams:N.current})});const M=await(await fetch(`${yP}/devices`,{headers:U})).json();f.current&&M.success&&(o(M.data||[]),d(null),y.current=0)}catch(F){f.current&&(y.current=Math.min(y.current+1,10),d(F instanceof Error?F.message:"Heartbeat failed"))}D()},[D]),S=V.useCallback(async()=>{c(!0),y.current=0,await T(),f.current&&c(!1)},[T]);return V.useEffect(()=>{if(f.current=!0,!e||!s){o([]),y.current=0;return}return c(!0),T().finally(()=>{f.current&&c(!1)}),()=>{f.current=!1,h.current&&(clearTimeout(h.current),h.current=null)}},[e,s,T]),{devices:n,isLoading:a,error:u,refresh:S}}function A$(){const[s,e]=V.useState(null),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),u=V.useRef(!0),d=V.useCallback(async()=>{try{const v=await ss.getCloudStatus();u.current&&(e(v),c(null))}catch{u.current&&e({connected:!1,tier:null,cloudUrl:null,status:"disconnected"})}},[]);V.useEffect(()=>(u.current=!0,(async()=>{await d(),u.current&&r(!1)})(),()=>{u.current=!1}),[d]);const h=V.useCallback(async(v,N)=>{o(!0),c(null);try{const j=await ss.connectToCloud(v,N);return u.current&&e({connected:j.connected,tier:j.tier,cloudUrl:j.cloudUrl,status:"connected"}),!0}catch(j){return u.current&&c(j instanceof Error?j.message:"Connection failed"),!1}finally{u.current&&o(!1)}},[]),f=V.useCallback(async()=>{o(!0),c(null);try{return await ss.disconnectFromCloud(),u.current&&e({connected:!1,tier:null,cloudUrl:null,status:"disconnected"}),!0}catch(v){return u.current&&c(v instanceof Error?v.message:"Disconnect failed"),!1}finally{u.current&&o(!1)}},[]),y=V.useCallback(async()=>{await d()},[d]);return{isConnected:(s==null?void 0:s.connected)??!1,tier:(s==null?void 0:s.tier)??null,isLoading:t,isActioning:n,error:a,connect:h,disconnect:f,refresh:y}}const bP=["https://picsum.photos/seed/1/64","https://picsum.photos/seed/2/64","https://picsum.photos/seed/3/64","https://picsum.photos/seed/4/64","https://picsum.photos/seed/5/64","https://picsum.photos/seed/6/64"];function U6(s){return s.map((e,t)=>({...e,avatar:e.avatar||bP[t%bP.length]}))}const M$=()=>{const s=Sm(),[e,t]=V.useState([]),[r,n]=V.useState(""),[o,a]=V.useState("all"),[c,u]=V.useState(!1),[d,h]=V.useState(null),[f,y]=V.useState(""),[v,N]=V.useState(!0),[j,b]=V.useState("grid"),[x,D]=V.useState([]),{showError:T,AlertComponent:S}=ny(),k=Object.fromEntries(x.map(ee=>[ee.id,ee.name])),[U,F]=V.useState("all"),{isConnected:M,tier:R}=A$(),{getAccessToken:L}=X9(),B=M&&R==="pro"?L():null,O=V.useMemo(()=>e.map(ee=>({id:ee.id,name:ee.name,memberCount:ee.members.length})),[e]),H=M&&R==="pro",{devices:Y,isLoading:le,refresh:te}=C$(B,H,O,typeof window<"u"&&window.location.hostname||"My Device"),ne=V.useMemo(()=>{let ee=e;return r&&(ee=ee.filter(ce=>{var G;return ce.name.toLowerCase().includes(r.toLowerCase())||ce.description&&ce.description.toLowerCase().includes(r.toLowerCase())||((G=ce.projectIds)==null?void 0:G.length)>0&&ce.projectIds.some(ie=>ie.toLowerCase().includes(r.toLowerCase()))||ce.members.some(ie=>ie.name.toLowerCase().includes(r.toLowerCase())||ie.role.toLowerCase().includes(r.toLowerCase()))})),o!=="all"&&(ee=ee.filter(ce=>o==="active"?ce.members.some(G=>G.agentStatus==="active"):o==="inactive"?ce.members.every(G=>G.agentStatus==="inactive"):!0)),U!=="all"&&(ee=ee.filter(ce=>{var G;return(G=ce.projectIds)==null?void 0:G.includes(U)})),ee=ee.filter(ce=>!ce.parentTeamId),ee},[e,r,o,U]),q=V.useMemo(()=>{const ee=new Map;for(const ce of e)ce.parentTeamId&&ee.set(ce.parentTeamId,(ee.get(ce.parentTeamId)||0)+1);return ee},[e]),Z=V.useCallback(ee=>{t(ce=>ce.map(G=>G.id===ee.teamId?{...G,members:G.members.map(ie=>ie.id===ee.memberId||ie.sessionName===ee.sessionName?{...ie,agentStatus:ee.agentStatus}:ie)}:G))},[]);V.useEffect(()=>{z(),X()},[]),V.useEffect(()=>(or.on("team_member_status_changed",Z),()=>{or.off("team_member_status_changed",Z)}),[Z]);const X=async()=>{try{const ee=await ss.getProjects();D(ee.map(ce=>({id:ce.id,name:ce.name})))}catch(ee){Lp(ee,{context:"Loading projects for filter"})}},z=async()=>{try{const ce=(await ss.getTeams()).map(G=>({...G,members:U6(G.members)}));t(ce)}catch(ee){Lp(ee,{context:"fetchTeams"}),t([])}finally{N(!1)}},se=async ee=>{try{const ce=await fetch("/api/teams",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)});if(ce.ok){const G=await ce.json(),ie=G.success?G.data:G;ie&&(t(De=>[...De,ie]),u(!1))}else{const G=await ce.json();T("Error creating team: "+(G.error||"Unknown error"))}}catch(ce){Lp(ce,{context:"handleCreateTeam"}),T("Error creating team: "+(ce instanceof Error?ce.message:"Unknown error"))}},ae=ee=>{s(`/teams/${ee.id}`)},fe=()=>{h(null),y("")};return v?i.jsxDEV("div",{className:"flex items-center justify-center min-h-[400px]",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("div",{className:"w-12 h-12 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4 mx-auto"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:214,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading teams..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:215,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:213,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:212,columnNumber:7},globalThis):i.jsxDEV("div",{className:"max-w-7xl mx-auto",children:[i.jsxDEV("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between gap-4 mb-8",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-3xl font-bold tracking-tight",children:"Teams"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:225,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Manage and organize your development teams"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:226,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:224,columnNumber:9},globalThis),i.jsxDEV("button",{className:"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors flex items-center gap-2",onClick:()=>u(!0),children:[i.jsxDEV(tl,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:233,columnNumber:11},globalThis),"New Team"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:229,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:223,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-center gap-4 mb-3",children:i.jsxDEV("div",{className:"relative flex-grow w-full md:w-auto",children:i.jsxDEV("input",{type:"text",placeholder:"Search teams...",value:r,onChange:ee=>n(ee.target.value),className:"w-full bg-surface-dark border border-border-dark rounded-lg px-4 py-2.5 text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-colors"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:241,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:240,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:239,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-center justify-between gap-4 mb-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Status:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:254,columnNumber:11},globalThis),i.jsxDEV("button",{className:`chip ${o==="all"?"chip--active":""}`,onClick:()=>a("all"),children:"All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:255,columnNumber:11},globalThis),i.jsxDEV("button",{className:`chip ${o==="active"?"chip--active":""}`,onClick:()=>a("active"),children:"Active"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:256,columnNumber:11},globalThis),i.jsxDEV("button",{className:`chip ${o==="inactive"?"chip--active":""}`,onClick:()=>a("inactive"),children:"Inactive"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:257,columnNumber:11},globalThis),i.jsxDEV("span",{className:"ml-2 text-sm text-text-secondary-dark",children:"Project:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:258,columnNumber:11},globalThis),i.jsxDEV("select",{value:U,onChange:ee=>F(ee.target.value),className:"bg-surface-dark border border-border-dark rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",children:[i.jsxDEV("option",{value:"all",children:"All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:264,columnNumber:13},globalThis),x.map(ee=>i.jsxDEV("option",{value:ee.id,children:ee.name},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:266,columnNumber:15},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:259,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:253,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("button",{onClick:()=>b("grid"),className:`inline-flex items-center justify-center w-9 h-9 rounded-lg border border-border-dark ${j==="grid"?"bg-primary/10 text-primary":"text-text-secondary-dark hover:text-text-primary-dark hover:border-primary/50"}`,title:"Grid view",children:i.jsxDEV(vX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:276,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:271,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>b("list"),className:`inline-flex items-center justify-center w-9 h-9 rounded-lg border border-border-dark ${j==="list"?"bg-primary/10 text-primary":"text-text-secondary-dark hover:text-text-primary-dark hover:border-primary/50"}`,title:"List view",children:i.jsxDEV(DX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:283,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:278,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:270,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:252,columnNumber:7},globalThis),H&&i.jsxDEV("div",{className:"mb-8",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(sy,{className:"w-4 h-4 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:293,columnNumber:15},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide",children:["Online Devices (",Y.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:294,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:292,columnNumber:13},globalThis),i.jsxDEV("button",{onClick:te,className:"p-1.5 text-text-secondary-dark hover:text-text-primary-dark rounded-lg hover:bg-surface-dark transition-colors",title:"Refresh devices",children:i.jsxDEV(il,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:303,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:298,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:291,columnNumber:11},globalThis),le?i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6 text-center",children:[i.jsxDEV("div",{className:"w-5 h-5 border-2 border-primary/20 border-t-primary rounded-full animate-spin mx-auto mb-2"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:309,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"Discovering devices..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:310,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:308,columnNumber:13},globalThis):Y.length===0?i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6 text-center",children:[i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"No other devices online"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:314,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark/70 mt-1",children:"Other Pro users will appear here when they are online"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:315,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:313,columnNumber:13},globalThis):i.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:Y.map(ee=>i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-4",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-2",children:[i.jsxDEV("span",{className:"w-2 h-2 rounded-full bg-emerald-400 animate-pulse"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:327,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark truncate",children:ee.deviceName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:328,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:326,columnNumber:19},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-3 font-mono truncate",children:ee.email},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:332,columnNumber:19},globalThis),ee.teams.length>0&&i.jsxDEV("div",{className:"space-y-1.5",children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark/70 uppercase tracking-wide",children:["Teams (",ee.teams.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:337,columnNumber:23},globalThis),ee.teams.map(ce=>i.jsxDEV("div",{className:"flex items-center justify-between text-xs bg-background-dark rounded px-2 py-1.5",children:[i.jsxDEV("span",{className:"text-text-primary-dark truncate",children:ce.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:345,columnNumber:27},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark ml-2 shrink-0",children:[ce.memberCount," member",ce.memberCount!==1?"s":""]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:346,columnNumber:27},globalThis)]},ce.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:341,columnNumber:25},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:336,columnNumber:21},globalThis)]},ee.deviceId,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:322,columnNumber:17},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:320,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:290,columnNumber:9},globalThis),ne.length>0&&i.jsxDEV(i.Fragment,{children:j==="grid"?i.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6",children:[ne.map(ee=>{var ce;return i.jsxDEV(g6,{team:ee,projectName:((ce=ee.projectIds)==null?void 0:ce.length)>0?k[ee.projectIds[0]]:void 0,subTeamCount:q.get(ee.id),onClick:()=>ae(ee),onViewTeam:G=>s(`/teams/${G}`),onEditTeam:G=>s(`/teams/${G}?edit=true`)},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:366,columnNumber:17},globalThis)}),i.jsxDEV("div",{onClick:()=>u(!0),className:"flex items-center justify-center p-5 rounded-xl border-2 border-dashed border-border-dark hover:border-primary transition-colors cursor-pointer text-text-secondary-dark hover:text-primary",children:[i.jsxDEV(tl,{className:"mr-2 w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:380,columnNumber:17},globalThis),i.jsxDEV("span",{children:"Create New Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:381,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:376,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:364,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-4",children:[ne.map(ee=>{var ce;return i.jsxDEV(j$,{team:ee,projectName:((ce=ee.projectIds)==null?void 0:ce.length)>0?k[ee.projectIds[0]]:void 0,onClick:()=>ae(ee),onViewTeam:G=>s(`/teams/${G}`),onEditTeam:G=>s(`/teams/${G}?edit=true`),onDeleteTeam:async G=>{if(window.confirm("Are you sure you want to delete this team?"))try{await ss.deleteTeam(G),t(ie=>ie.filter(De=>De.id!==G))}catch(ie){T("Failed to delete team: "+(ie instanceof Error?ie.message:"Unknown error"))}}},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:387,columnNumber:17},globalThis)}),i.jsxDEV("div",{onClick:()=>u(!0),className:"flex items-center justify-center p-4 rounded-lg border-2 border-dashed border-border-dark hover:border-primary transition-colors cursor-pointer text-text-secondary-dark hover:text-primary",children:[i.jsxDEV(tl,{className:"mr-2 w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:410,columnNumber:17},globalThis),i.jsxDEV("span",{children:"Create New Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:411,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:406,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:385,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:362,columnNumber:9},globalThis),ne.length===0&&!v&&i.jsxDEV("div",{className:"text-center py-16",children:[i.jsxDEV("h3",{className:"text-lg font-semibold mb-2",children:"No teams found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:420,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-6",children:r||o!=="all"?"Try adjusting your search or filters":"Create your first team to get started"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:421,columnNumber:11},globalThis),!r&&o==="all"&&i.jsxDEV("button",{className:"bg-primary text-white px-6 py-3 rounded-lg hover:bg-primary/90 transition-colors inline-flex items-center gap-2",onClick:()=>u(!0),children:[i.jsxDEV(tl,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:431,columnNumber:15},globalThis),"Create Team"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:427,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:419,columnNumber:9},globalThis),i.jsxDEV(M6,{isOpen:c,onClose:()=>u(!1),onSubmit:se},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:438,columnNumber:7},globalThis),d&&f&&i.jsxDEV(T$,{member:d,teamId:f,onClose:fe},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:445,columnNumber:9},globalThis),i.jsxDEV(S,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:451,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:222,columnNumber:5},globalThis)},U$=({isOpen:s,onClose:e,onStartTeam:t,team:r,loading:n})=>{var x,D;const{showWarning:o,AlertComponent:a}=ny(),[c,u]=V.useState(""),[d,h]=V.useState([]),[f,y]=V.useState(!1),v=((x=r==null?void 0:r.projectIds)==null?void 0:x.length)>0;V.useEffect(()=>{s&&(N(),v&&u(r.projectIds[0]))},[s,v,r==null?void 0:r.projectIds]);const N=async()=>{y(!0);try{const T=await fetch("/api/projects");if(T.ok){const S=await T.json(),k=S.success?S.data||[]:S||[];h(Array.isArray(k)?k:[])}}catch(T){console.error("Error fetching projects:",T),h([])}finally{y(!1)}},j=T=>{if(T.preventDefault(),!v&&!c){o("Please select a project");return}const S=v?r.projectIds[0]:c;t(S),e()},b=()=>{if(!v)return"";const T=d.find(S=>{var k;return S.id===((k=r.projectIds)==null?void 0:k[0])});return T?T.name:"Unknown Project"};return i.jsxDEV(i.Fragment,{children:[i.jsxDEV(PT,{isOpen:s,onClose:e,title:"Start Team",subtitle:`Configure settings for ${(r==null?void 0:r.name)||"team"}`,size:"xl",onSubmit:j,submitText:n?"Starting...":"Proceed",submitDisabled:n||!v&&!c,loading:n,children:[i.jsxDEV($X,{title:"Project Assignment",description:v?void 0:"Select which project this team will work on",children:v?i.jsxDEV("div",{className:"form-info-box form-info-box--success",children:i.jsxDEV("div",{className:"form-info-content",children:[i.jsxDEV("strong",{children:"Already assigned to:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:101,columnNumber:8},globalThis)," ",b()]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:100,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:99,columnNumber:6},globalThis):i.jsxDEV(OT,{children:[i.jsxDEV(Ur,{htmlFor:"project-select",required:!0,children:"Select Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:106,columnNumber:7},globalThis),i.jsxDEV(QX,{id:"project-select",value:c,onChange:u,placeholder:"Choose a project...",loading:f,required:!0,options:d.map(T=>({value:T.id,label:`${T.name} (${T.path})`}))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:109,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:105,columnNumber:6},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:92,columnNumber:4},globalThis),i.jsxDEV("div",{className:"form-info-box form-info-box--info",children:[i.jsxDEV("div",{className:"form-info-header",children:i.jsxDEV("h4",{children:["Team: ",r==null?void 0:r.name]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:127,columnNumber:6},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:126,columnNumber:5},globalThis),i.jsxDEV("div",{className:"form-info-content",children:[i.jsxDEV("div",{children:["Members: ",((D=r==null?void 0:r.members)==null?void 0:D.length)||0]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:130,columnNumber:6},globalThis),i.jsxDEV("div",{children:["Status: ",(r==null?void 0:r.status)||"idle"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:131,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:129,columnNumber:5},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:125,columnNumber:4},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:81,columnNumber:3},globalThis),i.jsxDEV(a,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:135,columnNumber:3},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:80,columnNumber:3},globalThis)},R$=({team:s,teamStatus:e,orchestratorSessionActive:t,onStartTeam:r,onStopTeam:n,onViewTerminal:o,onDeleteTeam:a,onEditTeam:c,isStoppingTeam:u=!1,isStartingTeam:d=!1})=>{const h=(s==null?void 0:s.id)==="orchestrator"||(s==null?void 0:s.name)==="Orchestrator Team";return((s==null?void 0:s.members)||[]).filter(y=>y.agentStatus==="active"||y.sessionName).length,i.jsxDEV("div",{className:"page-header",children:[i.jsxDEV("div",{className:"header-info",children:i.jsxDEV("div",{className:"flex items-center gap-3 mb-1",children:i.jsxDEV("h1",{className:"page-title mb-0",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:27,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:26,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:25,columnNumber:7},globalThis),i.jsxDEV("div",{className:"header-controls",children:[e==="idle"&&!d?i.jsxDEV(ur,{variant:"success",onClick:r,icon:Xp,children:h?"Start Orchestrator":"Start Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:32,columnNumber:11},globalThis):d?i.jsxDEV(ur,{variant:"success",loading:!0,disabled:!0,children:"Starting..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:36,columnNumber:11},globalThis):i.jsxDEV(ur,{variant:"danger",onClick:n,icon:qV,loading:u,children:u?"Stopping...":h?"Stop Orchestrator":"Stop Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:40,columnNumber:11},globalThis),h&&e==="active"&&i.jsxDEV(ur,{variant:"primary",onClick:o,icon:qk,children:"View Terminal"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:50,columnNumber:11},globalThis),!h&&i.jsxDEV(Sx,{align:"bottom-right",items:[{label:"Edit Team",onClick:c},{label:"Delete Team",danger:!0,onClick:a}]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:56,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:30,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:24,columnNumber:5},globalThis)},V$=({member:s,teamId:e,onStart:t,onStop:r,onViewTerminal:n,onViewAgent:o,isStartingTeam:a})=>{const[c,u]=V.useState(!1),[d,h]=V.useState(!1),f=s.agentStatus==="active",y=s.agentStatus==="started",v=s.agentStatus==="starting"||s.agentStatus==="activating",N=f||y||v,j=v||c||a&&!f&&!y,b=c||d||a&&!f&&!y;let x="Inactive",D="bg-gray-500/10 text-gray-300";d?(x="Stopping...",D="bg-orange-500/10 text-orange-400"):s.agentStatus==="suspended"?(x="Suspended",D="bg-purple-500/10 text-purple-400"):f?(x="Active",D="bg-emerald-500/10 text-emerald-400"):y?(x="Started",D="bg-blue-500/10 text-blue-400"):j&&(x="Starting...",D="bg-yellow-500/10 text-yellow-400");const T=async U=>{if(U.stopPropagation(),t&&!b){u(!0);try{await t(s.id)}finally{u(!1)}}},S=async U=>{if(U.stopPropagation(),r&&!b){h(!0);try{await r(s.id)}finally{h(!1)}}},k=s.avatar;return i.jsxDEV("div",{className:"member-row",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"w-10 h-10 rounded-full bg-background-dark border border-border-dark flex items-center justify-center overflow-hidden",children:k?k.startsWith("http")||k.startsWith("data:")?i.jsxDEV("img",{src:k,alt:s.name,className:"w-full h-full object-cover"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:83,columnNumber:15},globalThis):i.jsxDEV("span",{className:"text-sm",children:k},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:85,columnNumber:15},globalThis):i.jsxDEV("span",{className:"text-sm",children:s.name.charAt(0).toUpperCase()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:88,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:80,columnNumber:9},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"font-semibold",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:92,columnNumber:11},globalThis),i.jsxDEV("div",{className:"text-sm text-text-secondary-dark",children:["Session: ",s.sessionName||"Inactive"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:93,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:91,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:79,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("span",{className:`px-3 py-1 rounded-full text-sm font-medium flex items-center gap-2 ${D}`,children:[b&&i.jsxDEV(ef,{className:"w-3 h-3 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:98,columnNumber:25},globalThis),x]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:97,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[(f||y||v||d)&&!c?i.jsxDEV("button",{className:`w-9 h-9 rounded-full flex items-center justify-center transition-colors ${b?"opacity-50 cursor-not-allowed":"hover:bg-red-500/20 hover:text-red-400"}`,title:"Stop",onClick:S,disabled:b,children:d?i.jsxDEV(ef,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:114,columnNumber:17},globalThis):i.jsxDEV(qV,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:116,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:103,columnNumber:13},globalThis):i.jsxDEV("button",{className:`w-9 h-9 rounded-full flex items-center justify-center transition-colors ${b?"opacity-50 cursor-not-allowed":"hover:bg-green-500/20 hover:text-green-400"}`,title:"Start",onClick:T,disabled:b,children:c?i.jsxDEV(ef,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:131,columnNumber:17},globalThis):i.jsxDEV(Xp,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:133,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:120,columnNumber:13},globalThis),i.jsxDEV(Sx,{align:"bottom-right",buttonClassName:"w-9 h-9 rounded-full hover:bg-primary/20 hover:text-primary flex items-center justify-center transition-colors",items:[...o?[{label:N?"View Agent":"Edit Agent",onClick:()=>o(s)}]:[],...N&&s.sessionName&&n?[{label:"View Terminal",onClick:()=>n(s)}]:[]]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:137,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:101,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:96,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:78,columnNumber:5},globalThis)},F$=({team:s,teamId:e,onUpdateMember:t,onDeleteMember:r,onStartMember:n,onStopMember:o,onViewTerminal:a,onViewAgent:c,isStartingTeam:u})=>{var d,h;return i.jsxDEV("div",{className:"space-y-4",children:[(d=s==null?void 0:s.members)==null?void 0:d.map(f=>i.jsxDEV(V$,{member:f,teamId:e,onStart:n,onStop:o,onViewTerminal:a,onViewAgent:c,isStartingTeam:u},f.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:19,columnNumber:9},globalThis)),!((h=s==null?void 0:s.members)!=null&&h.length)&&i.jsxDEV("div",{className:"empty-state",children:i.jsxDEV("p",{children:"No team members yet. Add members to get started."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:32,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:31,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:17,columnNumber:5},globalThis)},I$=({team:s,teamId:e,projectName:t,onUpdateMember:r,onDeleteMember:n,onStartMember:o,onStopMember:a,onProjectChange:c,onViewTerminal:u,onViewAgent:d,isStartingTeam:h})=>{var D,T;const[f,y]=V.useState(!1),[v,N]=V.useState(((D=s==null?void 0:s.projectIds)==null?void 0:D[0])||""),{projectOptions:j}=k6(),b=(s==null?void 0:s.id)==="orchestrator"||(s==null?void 0:s.name)==="Orchestrator Team";V.useEffect(()=>{var S;N(((S=s==null?void 0:s.projectIds)==null?void 0:S[0])||"")},[s==null?void 0:s.projectIds]);const x=S=>{N(S),c&&c(S||null),y(!1)};return i.jsxDEV("div",{className:`grid grid-cols-1 ${b?"":"lg:grid-cols-3"} gap-6`,children:[i.jsxDEV("div",{className:b?"":"lg:col-span-2",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:i.jsxDEV("h3",{className:"text-xl font-semibold",children:b?"Orchestrator":`Team Members (${((T=s.members)==null?void 0:T.length)||0})`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:90,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:89,columnNumber:9},globalThis),i.jsxDEV(F$,{team:s,teamId:e,onUpdateMember:r,onDeleteMember:n,onStartMember:o,onStopMember:a,onViewTerminal:u,onViewAgent:d,isStartingTeam:h},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:94,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:88,columnNumber:7},globalThis),!b&&i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl p-6",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[i.jsxDEV("h4",{className:"text-lg font-semibold",children:"Assigned Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:111,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>y(!f),className:"p-1.5 hover:bg-background-dark rounded-lg transition-colors text-text-secondary-dark hover:text-primary",title:"Change project",children:i.jsxDEV(AX,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:117,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:112,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:110,columnNumber:13},globalThis),f?i.jsxDEV("div",{className:"space-y-3",children:[i.jsxDEV(pc,{value:v,onChange:S=>x(S.target.value),children:[i.jsxDEV("option",{value:"",children:"No project assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:126,columnNumber:19},globalThis),j.map(S=>i.jsxDEV("option",{value:S.id,children:S.name},S.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:128,columnNumber:21},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:122,columnNumber:17},globalThis),i.jsxDEV("button",{onClick:()=>y(!1),className:"text-sm text-text-secondary-dark hover:text-primary",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:131,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:121,columnNumber:15},globalThis):i.jsxDEV("div",{className:"flex items-center gap-3 cursor-pointer hover:bg-background-dark/50 -mx-3 px-3 py-2 rounded-lg transition-colors",onClick:()=>y(!0),title:"Click to change project",children:[i.jsxDEV(ol,{className:"h-5 w-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:144,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("div",{className:"font-semibold text-white",children:t||"No Project Assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:146,columnNumber:19},globalThis),!t&&i.jsxDEV("div",{className:"text-sm text-text-secondary-dark",children:"Click to assign a project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:148,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:145,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:139,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:109,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl p-5",children:[i.jsxDEV("h4",{className:"text-lg font-semibold mb-3",children:"Recent Activity"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:155,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"No recent activity."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:156,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:154,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:108,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:87,columnNumber:5},globalThis)},L$=({member:s,onClose:e,isEditable:t=!1,onSave:r})=>{var T;const[n,o]=V.useState(null),[a,c]=V.useState(!0),[u,d]=V.useState([]),[h,f]=V.useState(s.runtimeType||"claude-code"),[y,v]=V.useState(s.modelId||""),{skills:N}=hA();V.useEffect(()=>{(async()=>{if(s.role)try{const k=await Xh.getRole(s.role);o(k)}catch(k){console.error("Failed to fetch role details:",k)}finally{c(!1)}else c(!1)})()},[s.role]),V.useEffect(()=>{var F;if(!n&&!((F=s.skillOverrides)!=null&&F.length))return;const k=[...((n==null?void 0:n.assignedSkills)||[]).filter(M=>{var R;return!((R=s.excludedRoleSkills)!=null&&R.includes(M))}),...s.skillOverrides||[]];if(k.length===0)return;const U=k.map(M=>{const R=N.find(L=>L.id===M);return{id:M,name:(R==null?void 0:R.name)||M}});d(U)},[n,s.skillOverrides,s.excludedRoleSkills,a,N]);const j=S=>u.find(k=>k.id===S),b=()=>{const S=((n==null?void 0:n.assignedSkills)||[]).filter(U=>{var F;return!((F=s.excludedRoleSkills)!=null&&F.includes(U))}),k=s.skillOverrides||[];return[...new Set([...S,...k])]},x=S=>{S.target===S.currentTarget&&e()},D=(S,k)=>{const U=j(S),F=(U==null?void 0:U.name)||S,M="inline-flex items-center gap-1.5 px-2.5 py-1 text-sm rounded-md",R=k==="role"?"bg-primary/10 text-primary":"bg-emerald-500/10 text-emerald-400";return i.jsxDEV("div",{children:i.jsxDEV("span",{className:`${M} ${R}`,children:[i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:136,columnNumber:11},globalThis),F]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:135,columnNumber:9},globalThis)},S,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:134,columnNumber:7},globalThis)};return i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:x,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-lg m-4",onClick:S=>S.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between p-6 border-b border-border-dark",children:[i.jsxDEV("div",{className:"flex items-center gap-4",children:[i.jsxDEV("div",{className:"w-12 h-12 rounded-full bg-background-dark border border-border-dark flex items-center justify-center overflow-hidden",children:s.avatar?s.avatar.startsWith("http")||s.avatar.startsWith("data:")?i.jsxDEV("img",{src:s.avatar,alt:s.name,className:"w-full h-full object-cover"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:158,columnNumber:19},globalThis):i.jsxDEV("span",{className:"text-lg",children:s.avatar},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:160,columnNumber:19},globalThis):i.jsxDEV(Nx,{className:"w-6 h-6 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:163,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:155,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold text-text-primary-dark",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:167,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:t?"Edit Agent":"Agent Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:168,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:166,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:154,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:e,className:"w-8 h-8 rounded-lg hover:bg-background-dark flex items-center justify-center text-text-secondary-dark hover:text-text-primary-dark",children:i.jsxDEV(jn,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:175,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:171,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:153,columnNumber:9},globalThis),i.jsxDEV("div",{className:"p-6 space-y-6",children:[i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:[i.jsxDEV(dX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:184,columnNumber:15},globalThis),"Role"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:183,columnNumber:13},globalThis),a?i.jsxDEV("div",{className:"animate-pulse",children:[i.jsxDEV("div",{className:"h-6 bg-background-dark rounded w-32 mb-2"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:189,columnNumber:17},globalThis),i.jsxDEV("div",{className:"h-4 bg-background-dark rounded w-full"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:190,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:188,columnNumber:15},globalThis):n?i.jsxDEV("div",{className:"bg-background-dark/50 rounded-lg p-4",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-2",children:[i.jsxDEV("span",{className:"font-semibold text-text-primary-dark",children:n.displayName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:195,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-xs px-2 py-0.5 rounded-full bg-primary/10 text-primary",children:h5[n.category]||n.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:196,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:194,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:n.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:200,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:193,columnNumber:15},globalThis):i.jsxDEV("p",{className:"text-sm text-text-secondary-dark italic",children:"No role assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:203,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:182,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:[i.jsxDEV(a9,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:210,columnNumber:15},globalThis),"Skills"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:209,columnNumber:13},globalThis),a?i.jsxDEV("div",{className:"animate-pulse flex flex-wrap gap-2",children:[i.jsxDEV("div",{className:"h-7 bg-background-dark rounded-md w-24"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:215,columnNumber:17},globalThis),i.jsxDEV("div",{className:"h-7 bg-background-dark rounded-md w-32"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:216,columnNumber:17},globalThis),i.jsxDEV("div",{className:"h-7 bg-background-dark rounded-md w-28"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:217,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:214,columnNumber:15},globalThis):i.jsxDEV("div",{className:"space-y-3",children:[(n==null?void 0:n.assignedSkills)&&n.assignedSkills.length>0&&i.jsxDEV("div",{children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-2",children:"From Role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:224,columnNumber:21},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-2",children:n.assignedSkills.filter(S=>{var k;return!((k=s.excludedRoleSkills)!=null&&k.includes(S))}).map(S=>D(S,"role"))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:225,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:223,columnNumber:19},globalThis),s.skillOverrides&&s.skillOverrides.length>0&&i.jsxDEV("div",{children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-2",children:"Additional Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:238,columnNumber:21},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-2",children:s.skillOverrides.map(S=>D(S,"additional"))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:239,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:237,columnNumber:19},globalThis),b().length===0&&i.jsxDEV("p",{className:"text-sm text-text-secondary-dark italic",children:"No skills assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:249,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:220,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:208,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:"Runtime"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:257,columnNumber:13},globalThis),t?i.jsxDEV("select",{value:h,onChange:S=>f(S.target.value),className:"w-full bg-background-dark border border-border-dark rounded-lg px-4 py-2 text-sm text-text-primary-dark focus:outline-none focus:border-primary",children:[i.jsxDEV("option",{value:"claude-code",children:"Claude CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:266,columnNumber:17},globalThis),i.jsxDEV("option",{value:"gemini-cli",children:"Gemini CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:267,columnNumber:17},globalThis),i.jsxDEV("option",{value:"codex-cli",children:"Codex CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:268,columnNumber:17},globalThis),i.jsxDEV("option",{value:"crewly-agent",children:"Crewly Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:269,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:261,columnNumber:15},globalThis):i.jsxDEV("div",{className:"bg-background-dark/50 rounded-lg px-4 py-2",children:i.jsxDEV("span",{className:"text-sm text-text-primary-dark",children:s.runtimeType==="claude-code"?"Claude CLI":s.runtimeType==="gemini-cli"?"Gemini CLI":s.runtimeType==="codex-cli"?"Codex CLI":s.runtimeType==="crewly-agent"?"Crewly Agent":s.runtimeType||"Claude CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:273,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:272,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:256,columnNumber:11},globalThis),h==="crewly-agent"&&i.jsxDEV("div",{className:"mt-4",children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:"AI Model"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:287,columnNumber:15},globalThis),t?i.jsxDEV("select",{value:y,onChange:S=>v(S.target.value),className:"w-full bg-background-dark border border-border-dark rounded-lg px-4 py-2 text-sm text-text-primary-dark focus:outline-none focus:border-primary",children:[i.jsxDEV("option",{value:"",children:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:296,columnNumber:19},globalThis),lV.map(S=>i.jsxDEV("option",{value:S.id,children:S.label},S.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:298,columnNumber:21},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:291,columnNumber:17},globalThis):i.jsxDEV("div",{className:"bg-background-dark/50 rounded-lg px-4 py-2",children:i.jsxDEV("span",{className:"text-sm text-text-primary-dark",children:s.modelId?((T=lV.find(S=>S.id===s.modelId))==null?void 0:T.label)||s.modelId:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:303,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:302,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:286,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:180,columnNumber:9},globalThis),i.jsxDEV("div",{className:"px-6 py-4 border-t border-border-dark bg-background-dark rounded-b-xl",children:t?i.jsxDEV("div",{className:"flex gap-3",children:[i.jsxDEV("button",{onClick:e,className:"flex-1 px-4 py-2 border border-border-dark text-text-secondary-dark rounded-lg hover:bg-surface-dark transition-colors font-medium",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:318,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>{if(r){const S={runtimeType:h};h==="crewly-agent"&&(S.modelId=y||void 0),r(s.id,S)}e()},className:"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 transition-colors font-medium",children:"Save"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:324,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:317,columnNumber:13},globalThis):i.jsxDEV("button",{onClick:e,className:"w-full px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 transition-colors font-medium",children:"Close"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:343,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:315,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:148,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:144,columnNumber:5},globalThis)},P$=50;let O$=0;function f_(){return`feed-${Date.now()}-${++O$}`}function B$(s=P$){const[e,t]=V.useState([]),r=V.useRef(s);r.current=s;const n=V.useCallback(a=>{t(c=>{const u=[a,...c];return u.length>r.current?u.slice(0,r.current):u})},[]),o=V.useCallback(()=>t([]),[]);return V.useEffect(()=>{const a=y=>{const v=y.name||y.sessionName||"Agent",N=y.agentStatus||y.workingStatus||"unknown",j=N==="error"?"error":"agent_status";n({id:f_(),type:j,source:v,title:`${v} is now ${N}`,detail:y.role?`Role: ${y.role}`:void 0,timestamp:new Date().toISOString(),agentStatus:y.agentStatus})},c=y=>{const v=y.agentStatus||y.status||(y.running?"active":"inactive");n({id:f_(),type:"system",source:"Orchestrator",title:`Orchestrator is now ${v}`,timestamp:new Date().toISOString(),agentStatus:v})},u=y=>v=>{const N=y.replace("queue:","").replace(/_/g," ");n({id:f_(),type:y.includes("failed")?"error":"message",source:v.sessionName||"Queue",title:`Message ${N}`,detail:v.snippet?v.snippet.slice(0,120):void 0,timestamp:new Date().toISOString()})},d=y=>{if(y.members)for(const v of y.members)v.agentStatus&&n({id:f_(),type:"task_update",source:v.name||v.sessionName||"Agent",title:v.currentTask?`Working on: ${v.currentTask}`:`Status: ${v.agentStatus}`,timestamp:new Date().toISOString(),agentStatus:v.agentStatus})};or.on("team_member_status_changed",a),or.on("orchestrator_status_changed",c),or.on("team_activity_updated",d);const f=["queue:message_enqueued","queue:message_processing","queue:message_completed","queue:message_failed"].map(y=>{const v=u(y);return or.on(y,v),{name:y,handler:v}});return()=>{or.off("team_member_status_changed",a),or.off("orchestrator_status_changed",c),or.off("team_activity_updated",d);for(const{name:y,handler:v}of f)or.off(y,v)}},[n]),{events:e,clearEvents:o}}const H$={agent_status:"bg-emerald-400",task_update:"bg-blue-400",message:"bg-violet-400",system:"bg-amber-400",error:"bg-red-400"},z$={agent_status:"Agent",task_update:"Task",message:"Message",system:"System",error:"Error"};function G$(s){try{return new Date(s).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}}const W$=({event:s})=>{const e=s.agentStatus==="active"||s.agentStatus==="busy",t=H$[s.type]||"bg-gray-400";return i.jsxDEV("div",{className:"feed-entry flex items-start gap-3 px-4 py-2.5 border-b border-[var(--color-border)] hover:bg-[var(--color-bg-hover)] transition-colors","data-testid":"feed-entry",children:[i.jsxDEV("span",{className:`mt-1.5 h-2 w-2 shrink-0 rounded-full ${t} ${e?"feed-pulse":""}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:65,columnNumber:4},globalThis),i.jsxDEV("div",{className:"min-w-0 flex-1",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-xs font-medium text-[var(--color-text-secondary)] uppercase tracking-wide",children:z$[s.type]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:72,columnNumber:6},globalThis),i.jsxDEV("span",{className:"text-xs text-[var(--color-text-muted)]",children:G$(s.timestamp)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:75,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:71,columnNumber:5},globalThis),i.jsxDEV("p",{className:"text-sm text-[var(--color-text-primary)] truncate",children:s.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:79,columnNumber:5},globalThis),s.detail&&i.jsxDEV("p",{className:"text-xs text-[var(--color-text-muted)] truncate mt-0.5",children:s.detail},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:83,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:70,columnNumber:4},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:60,columnNumber:3},globalThis)},K$=()=>i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-12 text-[var(--color-text-muted)]",children:[i.jsxDEV("svg",{className:"h-10 w-10 mb-3 opacity-40",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13 10V3L4 14h7v7l9-11h-7z"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:103,columnNumber:4},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:97,columnNumber:3},globalThis),i.jsxDEV("p",{className:"text-sm",children:"Waiting for live events…"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:110,columnNumber:3},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:96,columnNumber:2},globalThis),X$=({maxEvents:s=50,className:e=""})=>{const{events:t,clearEvents:r}=B$(s),n=V.useRef(null);return V.useEffect(()=>{n.current&&(n.current.scrollTop=0)},[t.length]),i.jsxDEV("div",{className:`flex flex-col rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] overflow-hidden ${e}`,"data-testid":"execution-feed",children:[i.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--color-border)]",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"h-2 w-2 rounded-full bg-emerald-400 feed-pulse"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:147,columnNumber:6},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--color-text-primary)]",children:"Execution Feed"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:148,columnNumber:6},globalThis),t.length>0&&i.jsxDEV("span",{className:"text-xs text-[var(--color-text-muted)]",children:["(",t.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:152,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:146,columnNumber:5},globalThis),t.length>0&&i.jsxDEV("button",{onClick:r,className:"text-xs text-[var(--color-text-muted)] hover:text-[var(--color-text-secondary)] transition-colors","data-testid":"feed-clear",children:"Clear"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:158,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:145,columnNumber:4},globalThis),i.jsxDEV("div",{ref:n,className:"feed-scroll flex-1 overflow-y-auto",children:t.length===0?i.jsxDEV(K$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:174,columnNumber:6},globalThis):t.map(o=>i.jsxDEV(W$,{event:o},o.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:177,columnNumber:7},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:169,columnNumber:4},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:140,columnNumber:3},globalThis)},q$=()=>{const{id:s}=PB(),e=Sm(),{openTerminalWithSession:t}=fj(),[r,n]=V.useState(null),[o,a]=V.useState(!0),[c,u]=V.useState(!1),[d,h]=V.useState(!1),[f,y]=V.useState(!1),[v,N]=V.useState(!1),[j,b]=V.useState(null),[x,D]=V.useState(!1),[T,S]=V.useState(!1),[k,U]=V.useState(null),[F,M]=V.useState(null),[R,L]=V.useState([]),{showSuccess:B,showError:O,showWarning:H,AlertComponent:Y}=ny(),{showConfirm:le,ConfirmComponent:te}=uj(),ne=V.useCallback(re=>{re.teamId===s&&n(Ae=>Ae&&{...Ae,members:Ae.members.map(ze=>ze.id===re.memberId||ze.sessionName===re.sessionName?{...ze,agentStatus:re.agentStatus}:ze)})},[s]),q=V.useCallback(re=>{(s==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team")&&u(re.agentStatus==="active")},[s,r==null?void 0:r.name]);V.useEffect(()=>{s&&(X(),(s==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team")&&z())},[s,r==null?void 0:r.name]),V.useEffect(()=>(or.on("team_member_status_changed",ne),or.on("orchestrator_status_changed",q),()=>{or.off("team_member_status_changed",ne),or.off("orchestrator_status_changed",q)}),[ne,q]),V.useEffect(()=>{var re;((re=r==null?void 0:r.projectIds)==null?void 0:re.length)>0?se(r.projectIds[0]):(U(null),M(null))},[r==null?void 0:r.projectIds]),V.useEffect(()=>{s&&Z()},[s]);const Z=async()=>{try{const Ae=(await ss.getTeams()).filter(ze=>ze.parentTeamId===s);L(Ae)}catch(re){console.error("Error fetching sub-teams:",re),L([])}},X=async()=>{try{const re=await fetch(`/api/teams/${s}`);if(re.ok){const Ae=await re.json();if(Ae.success&&Ae.data){const ze={...Ae.data,members:U6(Ae.data.members)};n(ze)}}}catch(re){console.error("Error fetching team data:",re)}finally{a(!1)}},z=async()=>{try{const re=await fetch("/api/terminal/sessions");if(re.ok){const Ae=await re.json();if(Ae.success&&Ae.data){const ze=Ae.data.some(Ge=>Ge.sessionName==="crewly-orc");u(ze)}}}catch(re){console.error("Error checking orchestrator session:",re),u(!1)}},se=async re=>{try{const Ae=await fetch("/api/projects");if(Ae.ok){const ze=await Ae.json(),Qe=(ze.success?ze.data||[]:ze||[]).find(oe=>oe.id===re);U(Qe?Qe.name:re),M(Qe?Qe.path:null)}else U(re),M(null)}catch(Ae){console.error("Error fetching project data:",Ae),U(re),M(null)}},ae=async()=>{if((r==null?void 0:r.id)==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team"){D(!0);try{const Ae=await ss.setupOrchestrator();Ae.success?(X(),B(Ae.message||"Orchestrator started successfully!")):O(Ae.error||"Failed to start orchestrator")}catch(Ae){console.error("Error starting orchestrator:",Ae),O("Error starting orchestrator. Please try again.")}finally{D(!1)}return}h(!0)},fe=async re=>{D(!0);try{const Ae=await fetch(`/api/teams/${s}/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:re})}),ze=await Ae.json();Ae.ok?(h(!1),X(),B(ze.message||"Team started successfully!")):O(ze.error||"Failed to start team")}catch(Ae){console.error("Error starting team:",Ae),O("Error starting team. Please try again.")}finally{D(!1)}},ee=()=>{y(!0)},ce=async re=>{if(r)try{const Ae=await fetch(`/api/teams/${r.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(re)});if(Ae.ok)X(),y(!1);else{const ze=await Ae.json();O(ze.error||"Failed to update team")}}catch(Ae){console.error("Error updating team:",Ae),O("Failed to update team")}},G=async()=>{S(!0);try{if((r==null?void 0:r.id)==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team"){const re=await fetch("/api/orchestrator/stop",{method:"POST",headers:{"Content-Type":"application/json"}});if(re.ok)X(),z();else{const Ae=await re.json();O(Ae.error||"Failed to stop orchestrator")}}else(await fetch(`/api/teams/${s}/stop`,{method:"POST"})).ok&&X()}catch(re){console.error("Error stopping team:",re)}finally{S(!1)}},ie=async()=>{if(!r)return;if(r.id==="orchestrator"||r.name==="Orchestrator Team"){H("The Orchestrator Team cannot be deleted as it is required for system operations.");return}const re=async()=>{try{await fetch(`/api/teams/${s}/stop`,{method:"POST"});const Ae=await fetch(`/api/teams/${s}`,{method:"DELETE",headers:{"Content-Type":"application/json"}});if(Ae.ok)e("/teams");else{const ze=await Ae.text();O("Failed to delete team: "+ze)}}catch(Ae){console.error("Error deleting team:",Ae),O("Failed to delete team: "+(Ae instanceof Error?Ae.message:"Unknown error"))}};le(`Are you sure you want to delete team "${r.name}"?
382
+ 🔍 Monitor ${ct.name}'s terminal for progress.`,"Build Specs Started");const Yr=setInterval(()=>{ae(zr=>{if(!zr.isActive)return zr;const Qr=new Date,jr=zr.steps.map(Fr=>Fr.status==="pending"&&Fr.scheduledAt&&Qr>=Fr.scheduledAt?{...Fr,status:"scheduled"}:Fr);return jr.every(Fr=>Fr.status==="scheduled")?(clearInterval(Yr),{...zr,steps:jr}):{...zr,steps:jr}})},3e4),Cs=at.reduce((zr,Qr)=>zr+Qr.delayMinutes,0);setTimeout(()=>{clearInterval(Yr)},(Cs+5)*6e4)}else throw new Error("Some Build Specs steps failed to schedule")}catch(_t){console.error("Error building specs:",_t),a("Failed to build specs: "+(_t instanceof Error?_t.message:"Unknown error"))}};if(fe.loading)return i.jsxDEV("div",{className:"flex items-center justify-center min-h-[400px]",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("div",{className:"w-12 h-12 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4 mx-auto"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1337,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading project..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1338,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1336,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1335,columnNumber:7},globalThis);if(fe.error||!fe.project)return i.jsxDEV("div",{className:"max-w-4xl mx-auto px-6 py-16",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("h2",{className:"text-2xl font-bold mb-4",children:"Error Loading Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1348,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:fe.error||"Project not found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1349,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1347,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1346,columnNumber:7},globalThis);const{project:Tt,assignedTeams:Pt,tickets:Se}=fe;return i.jsxDEV("div",{className:"max-w-7xl mx-auto px-6 py-8",children:[i.jsxDEV("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between gap-4 mb-8",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("div",{className:"flex items-center gap-3 text-sm text-text-secondary-dark mb-1",children:[i.jsxDEV(Ob,{to:"/projects",className:"hover:text-primary",children:"Projects"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1363,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark",children:"/"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1364,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-text-primary-dark",children:Tt.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1365,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1362,columnNumber:11},globalThis),i.jsxDEV("h1",{className:"text-3xl font-bold tracking-tight mb-2",children:Tt.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1367,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("span",{className:"flex items-center gap-1 text-sm text-text-secondary-dark",children:[i.jsxDEV(ol,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1370,columnNumber:15},globalThis),Tt.path]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1369,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"secondary",size:"sm",icon:xx,onClick:Mr,title:"Open project folder in Finder",children:"Open in Finder"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1373,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1368,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1361,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[Tt.status==="active"?i.jsxDEV(ur,{variant:"warning",icon:qV,onClick:dt,disabled:fe.loading,title:"Stop project and cancel scheduled messages",children:"Stop Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1388,columnNumber:13},globalThis):i.jsxDEV(ur,{variant:"primary",icon:Xp,onClick:Fe,disabled:fe.loading||Pt.length===0,loading:fe.loading,title:Pt.length===0?"Assign a team before starting the project":"Start project with assigned teams",children:fe.loading?"Starting...":"Start Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1398,columnNumber:13},globalThis),i.jsxDEV(Sx,{align:"bottom-right",items:[{label:"Assign Team",onClick:Me},...y==="tasks"?[{label:"Create Task",onClick:()=>Ce(!0)},{label:"Create Milestone",onClick:()=>Xe(!0)}]:[],{label:"Delete Project",onClick:it,danger:!0}]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1410,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1385,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1360,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex gap-1 mb-6 border-b border-border-dark",children:[i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="detail"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("detail"),children:[i.jsxDEV(Xk,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1448,columnNumber:11},globalThis),"Detail"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1440,columnNumber:9},globalThis),i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="editor"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("editor"),children:[i.jsxDEV(ol,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1459,columnNumber:11},globalThis),"Editor"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1451,columnNumber:9},globalThis),i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="tasks"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("tasks"),children:[i.jsxDEV(hX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1470,columnNumber:11},globalThis),"Tasks (",Se.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1462,columnNumber:9},globalThis),i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors border-b-2 ${y==="teams"?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>Qe("teams"),children:[i.jsxDEV(ZV,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1481,columnNumber:11},globalThis),"Teams (",Pt.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1473,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1439,columnNumber:7},globalThis),i.jsxDEV("div",{children:y==="detail"?i.jsxDEV(KJ,{project:Tt,onAddGoal:bt,onEditGoal:Mt,onAddUserJourney:Yt,onEditUserJourney:Pr,onBuildSpecs:Tr,onBuildTasks:ps,buildSpecsWorkflow:se,alignmentStatus:ce,onContinueWithMisalignment:J,onViewAlignment:de,selectedBuildSpecsTeam:ie,setSelectedBuildSpecsTeam:De,selectedBuildTasksTeam:Te,setSelectedBuildTasksTeam:Re,availableTeams:pe,onCreateSpecsTasks:Ze,onCreateDevTasks:Pe,onCreateE2ETasks:ot},Tt.updatedAt,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1489,columnNumber:11},globalThis):y==="editor"?i.jsxDEV(ZJ,{project:Tt,selectedFile:N,onFileSelect:j,setIsMarkdownEditorOpen:T},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1512,columnNumber:11},globalThis):y==="tasks"?i.jsxDEV("div",{children:[re.length>0&&i.jsxDEV("div",{className:"mb-4",children:[i.jsxDEV("button",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark hover:text-primary mb-2",onClick:()=>Ge(!ze),children:[i.jsxDEV("svg",{className:`w-4 h-4 transition-transform ${ze?"rotate-90":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1528,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1527,columnNumber:19},globalThis),"Task Flow (",re.length," active)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1523,columnNumber:17},globalThis),ze&&i.jsxDEV("div",{className:"rounded-lg border border-border-dark bg-surface-dark p-3",children:i.jsxDEV(E6,{tasks:re},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1534,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1533,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1522,columnNumber:15},globalThis),i.jsxDEV(qJ,{project:Tt,tickets:Se,onTicketsUpdate:()=>Ve(Tt.id),onCreateSpecsTasks:Ze,onCreateDevTasks:Pe,onCreateE2ETasks:ot,loading:fe.loading,onTaskClick:be,onTaskAssign:Ee,onTaskUnblock:ke,taskAssignmentLoading:te,taskUnblockLoading:q},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1540,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1519,columnNumber:11},globalThis):i.jsxDEV(YJ,{assignedTeams:Pt,onUnassignTeam:Ke,openTerminalWithSession:r,onAssignTeam:Me,projectName:Tt.name,onViewTeam:Ne=>t(`/teams/${Ne}`),onEditTeam:Ne=>t(`/teams/${Ne}?edit=true`)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1556,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1487,columnNumber:7},globalThis),b&&i.jsxDEV(xJ,{project:Tt,onClose:()=>x(!1),onAssignmentComplete:st},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1570,columnNumber:9},globalThis),D&&i.jsxDEV(WJ,{projectPath:Tt.path,onClose:()=>T(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1579,columnNumber:9},globalThis),i.jsxDEV(NJ,{isOpen:O,onClose:()=>{H(!1),le(null)},task:Y,onAssign:Ee,taskAssignmentLoading:te},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1586,columnNumber:7},globalThis),S&&i.jsxDEV(PT,{isOpen:S,onClose:()=>k(!1),title:"Add Project Goal",subtitle:"Define your project's main objective and success criteria",onSubmit:Ne=>{Ne.preventDefault(),jt()},submitText:"Save Goal",size:"md",children:i.jsxDEV(OT,{children:[i.jsxDEV(Ur,{htmlFor:"goal-content",required:!0,children:"Project Goal"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1609,columnNumber:13},globalThis),i.jsxDEV(of,{id:"goal-content",value:M,onChange:Ne=>R(Ne.target.value),placeholder:"Describe your project's main objective, success criteria, and key outcomes...",rows:8,required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1612,columnNumber:13},globalThis),i.jsxDEV(HR,{children:"Define what you want to achieve with this project. Be specific about goals, target users, and success metrics."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1620,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1608,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1599,columnNumber:9},globalThis),U&&i.jsxDEV(PT,{isOpen:U,onClose:()=>F(!1),title:"Add User Journey",subtitle:"Map out how users will interact with your solution",onSubmit:Ne=>{Ne.preventDefault(),dr()},submitText:"Save User Journey",size:"md",children:i.jsxDEV(OT,{children:[i.jsxDEV(Ur,{htmlFor:"journey-content",required:!0,children:"User Journey"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1639,columnNumber:13},globalThis),i.jsxDEV(of,{id:"journey-content",value:L,onChange:Ne=>B(Ne.target.value),placeholder:"Describe your users' journey from discovery to success. Include user personas, key interactions, pain points, and desired outcomes...",rows:8,required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1642,columnNumber:13},globalThis),i.jsxDEV(HR,{children:"Map out how users will interact with your solution. Include user types, main flows, and critical touchpoints."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1650,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1638,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1629,columnNumber:9},globalThis),i.jsxDEV(c,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1658,columnNumber:7},globalThis),i.jsxDEV(h,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1659,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/ProjectDetail.tsx",lineNumber:1358,columnNumber:5},globalThis)},Lh="/api/settings/roles";class d${async listRoles(){const e=await ar.get(Lh);if(!e.data.success||!e.data.data)throw new Error(e.data.error||"Failed to get roles");return e.data.data}async getRole(e){const t=await ar.get(`${Lh}/${e}`);if(!t.data.success||!t.data.data)throw new Error(t.data.error||"Role not found");return t.data.data}async createRole(e){const t=await ar.post(Lh,e);if(!t.data.success||!t.data.data)throw new Error(t.data.error||"Failed to create role");return t.data.data}async updateRole(e,t){const r=await ar.put(`${Lh}/${e}`,t);if(!r.data.success||!r.data.data)throw new Error(r.data.error||"Failed to update role");return r.data.data}async deleteRole(e){const t=await ar.delete(`${Lh}/${e}`);if(!t.data.success)throw new Error(t.data.error||"Failed to delete role")}async assignSkills(e,t){const r=await ar.post(`${Lh}/${e}/skills`,{skillIds:t});if(!r.data.success||!r.data.data)throw new Error(r.data.error||"Failed to assign skills");return r.data.data}async removeSkills(e,t){const r=await ar.delete(`${Lh}/${e}/skills`,{data:{skillIds:t}});if(!r.data.success||!r.data.data)throw new Error(r.data.error||"Failed to remove skills");return r.data.data}async setDefaultRole(e){const t=await ar.post(`${Lh}/${e}/default`);if(!t.data.success||!t.data.data)throw new Error(t.data.error||"Failed to set default role");return t.data.data}async refreshFromDisk(){const e=await ar.post(`${Lh}/refresh`);if(!e.data.success)throw new Error(e.data.error||"Failed to refresh roles")}}const Xh=new d$;function _6(){const[s,e]=V.useState(null),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async()=>{r(!0),o(null);try{const y=await Xh.listRoles();e(y)}catch(y){o(y instanceof Error?y.message:"Failed to load roles")}finally{r(!1)}},[]),c=V.useCallback(async y=>{await Xh.createRole(y),await a()},[a]),u=V.useCallback(async(y,v)=>{await Xh.updateRole(y,v),await a()},[a]),d=V.useCallback(async y=>{await Xh.deleteRole(y),await a()},[a]),h=V.useCallback(async()=>{await a()},[a]),f=V.useCallback(async()=>{r(!0),o(null);try{await Xh.refreshFromDisk();const y=await Xh.listRoles();e(y)}catch(y){o(y instanceof Error?y.message:"Failed to refresh roles from disk")}finally{r(!1)}},[]);return V.useEffect(()=>{a()},[a]),{roles:s,isLoading:t,error:n,createRole:c,updateRole:u,deleteRole:d,refreshRoles:h,refreshFromDisk:f}}function k6(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async()=>{r(!0),o(null);try{const u=await fetch("/api/projects");if(!u.ok)throw new Error(`Failed to fetch projects: ${u.statusText}`);const d=await u.json(),h=d.success?d.data||[]:d||[];e(Array.isArray(h)?h:[])}catch(u){const d=u instanceof Error?u.message:"Failed to fetch projects";o(d),e([])}finally{r(!1)}},[]);V.useEffect(()=>{a()},[a]);const c=V.useMemo(()=>s.map(u=>({id:u.id,name:u.name,path:u.path})),[s]);return{projects:s,projectOptions:c,isLoading:t,error:n,refetch:a}}const m$="/api";function h$(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async u=>{r(!0),o(null);try{const d=await ar.get(`${m$}/teams`,{signal:u});d.data.success?e(d.data.data||[]):o(d.data.error||"Failed to load teams")}catch(d){if(ar.isCancel(d))return;const h=d instanceof Error?d.message:"Failed to load teams";o(h),console.error("useTeams: Failed to fetch teams:",d)}finally{r(!1)}},[]);V.useEffect(()=>{const u=new AbortController;return a(u.signal),()=>{u.abort()}},[a]);const c=V.useCallback(async()=>{await a()},[a]);return{teams:s,loading:t,error:n,refresh:c}}const qp="/api/skills";async function f$(s){const e=new URLSearchParams;s!=null&&s.category&&e.set("category",s.category),s!=null&&s.roleId&&e.set("roleId",s.roleId),s!=null&&s.search&&e.set("search",s.search);const t=e.toString()?`${qp}?${e}`:qp,r=await fetch(t);if(!r.ok)throw new Error(`Failed to fetch skills: ${r.statusText}`);const n=await r.json();return n.data||n}async function p$(s){const e=await fetch(`${qp}/${s}`);if(!e.ok)throw e.status===404?new Error(`Skill not found: ${s}`):new Error(`Failed to fetch skill: ${e.statusText}`);const t=await e.json();return t.data||t}async function y$(s){const e=await fetch(qp,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!e.ok){const r=await e.text();throw new Error(`Failed to create skill: ${r}`)}const t=await e.json();return t.data||t}async function g$(s,e){const t=await fetch(`${qp}/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){const n=await t.text();throw new Error(`Failed to update skill: ${n}`)}const r=await t.json();return r.data||r}async function b$(s){const e=await fetch(`${qp}/${s}`,{method:"DELETE"});if(!e.ok)throw new Error(`Failed to delete skill: ${e.statusText}`)}async function v$(s,e){const t=await fetch(`${qp}/${s}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e})});if(!t.ok){const n=await t.text();throw new Error(`Failed to execute skill: ${n}`)}const r=await t.json();return r.data||r}async function w$(){const s=await fetch(`${qp}/refresh`,{method:"POST"});if(!s.ok){const e=await s.text();throw new Error(`Failed to refresh skills: ${e}`)}}function hA(s={}){const{category:e,roleId:t,search:r,fetchOnMount:n=!0}=s,[o,a]=V.useState([]),[c,u]=V.useState(null),[d,h]=V.useState(n),[f,y]=V.useState(null),v=V.useCallback(async(k=!1)=>{h(!0),y(null);try{k&&await w$();const U={};e&&(U.category=e),t&&(U.roleId=t),r&&(U.search=r);const F=await f$(U);a(F)}catch(U){const F=U instanceof Error?U.message:"Failed to load skills";y(F),console.error("useSkills: Failed to fetch skills:",U)}finally{h(!1)}},[e,t,r]),N=V.useCallback(async k=>{try{const U=await p$(k);u(U)}catch(U){const F=U instanceof Error?U.message:"Failed to load skill";y(F),console.error("useSkills: Failed to select skill:",U)}},[]),j=V.useCallback(()=>{u(null)},[]),b=V.useCallback(async k=>{const U=await y$(k);return await v(),U},[v]),x=V.useCallback(async(k,U)=>{const F=await g$(k,U);return await v(),(c==null?void 0:c.id)===k&&u(F),F},[v,c==null?void 0:c.id]),D=V.useCallback(async k=>{await b$(k),await v(),(c==null?void 0:c.id)===k&&u(null)},[v,c==null?void 0:c.id]),T=V.useCallback(async(k,U)=>v$(k,U),[]),S=V.useCallback(async()=>{await v(!0)},[v]);return V.useEffect(()=>{n&&v(!1)},[n,v]),{skills:o,selectedSkill:c,loading:d,error:f,refresh:S,selectSkill:N,clearSelection:j,create:b,update:x,remove:D,execute:T}}const Y0=[3825546,9058911,6261306,9068346,6240906,3836511],ix={day:{background:15267068,fog:15267068,wallColor:16119287,floorColor:9079434,ambientIntensity:.7,sunIntensity:1.2},night:{background:657938,fog:657938,wallColor:1710623,floorColor:1710624,ambientIntensity:.15,sunIntensity:0}},tr={ZONE:{WIDTH:10,DEPTH:7,ZONES_PER_ROW:3,START_X:-14,START_Z:8,GAP_X:4,GAP_Z:3},WORKSTATION_POSITIONS:[{x:-3,z:1.5},{x:3,z:1.5},{x:-3,z:-1},{x:3,z:-1}],CAMERA:{DEFAULT_POSITION:{x:-28,y:22,z:-18},FOV:60,NEAR:.1,FAR:150,LOOK_SENSITIVITY:.002,MIN_PITCH:-Math.PI/2+.1,MAX_PITCH:Math.PI/2-.1,MOVE_SPEED:15,ZOOM_SPEED:.5,MOUSE_SENSITIVITY:.005,TOUCH_SENSITIVITY:.008},AGENT:{ROBOT_SCALE:.5,WORKSTATION_OFFSET:.8,ANIMATION_FADE_DURATION:.5},WALLS:{HEIGHT:12,THICKNESS:.3,BACK_X:-32,LEFT_Z:-22,RIGHT_Z:22,FRONT_X:32},BREAK_ROOM:{POSITION:{x:-26,y:0,z:-14}},POKER_TABLE:{POSITION:{x:26,y:0,z:-14}},STAGE:{POSITION:{x:26,y:0,z:4},WIDTH:8,DEPTH:5,HEIGHT:.4,ROTATION:-Math.PI/2,AUDIENCE_POSITIONS:[{x:18,z:2},{x:18,z:6},{x:20,z:0},{x:20,z:4},{x:20,z:8}]},LOUNGE:{POSITION:{x:-26,y:0,z:14},COUCH_POSITIONS:[{x:-2,z:0,rotation:Math.PI/2},{x:2,z:0,rotation:-Math.PI/2}]},KITCHEN:{POSITION:{x:-27,y:0,z:3},SEAT_POSITIONS:[{x:-1,z:1.8,rotation:Math.PI},{x:0,z:1.8,rotation:Math.PI},{x:1,z:1.8,rotation:Math.PI},{x:-.5,z:-1.8,rotation:0},{x:.5,z:-1.8,rotation:0}]},ANIMATION:{FOCUS_DURATION:1500,BOSS_MODE_INTERVAL:8e3},API:{POLL_INTERVAL:5e3,USAGE_POLL_INTERVAL:3e4},MOVEMENT:{ARRIVAL_DISTANCE:.5,STUCK_THRESHOLD:.01,STUCK_MIN_DISTANCE:2,ROTATION_LERP_SPEED:5,ANIMATION_FADE_DURATION:.3,COUCH_SEAT_HEIGHT:.35},CIRCLE_INDICATOR:{RADIUS_DEFAULT:.7,RADIUS_ACTIVE:.85,SEGMENTS:32,Y_OFFSET:.1},PICKLEBALL:{POSITION:{x:-18,y:0,z:42}},GOLF:{POSITION:{x:18,y:0,z:42}},OUTDOOR_BENCH:{POSITIONS:[{x:-4,z:30,rotation:Math.PI/2},{x:4,z:30,rotation:-Math.PI/2},{x:-4,z:36,rotation:Math.PI/2},{x:4,z:36,rotation:-Math.PI/2}]},NPC_IDS:{STEVE_JOBS:"steve-jobs-npc",SUNDAR_PICHAI:"sundar-pichai-npc",ELON_MUSK:"elon-musk-npc",MARK_ZUCKERBERG:"mark-zuckerberg-npc",JENSEN_HUANG:"jensen-huang-npc",STEVE_HUANG:"steve-huang-npc"}},dn={ROBOT:"/models/employees/robot/RobotExpressive.glb",COW:"/models/employees/cow/cow-fixed.glb?v=3",HORSE:"/models/employees/horse/horse-fixed.glb",TIGER:"/models/employees/tiger/tiger-fixed.glb",RABBIT:"/models/employees/rabbit/rabbit-fixed.glb",STEVE_JOBS:"/models/guests/stevejobs/model.glb",SUNDAR_PICHAI:"/models/guests/sundarpichai/model.glb",ELON_MUSK:"/models/guests/elonmusk/model.glb",MARK_ZUCKERBERG:"/models/guests/markzuckerberg/model.glb",JENSEN_HUANG:"/models/guests/jensenhuang/model.glb?v=2",STEVE_HUANG:"/models/guests/stevehuang/model.glb?v=2",CYBERTRUCK:"/models/objects/cybertruck/model.glb",PUPPY:"/models/pets/puppy/model.glb",ROBOTIC_DOG:"/models/pets/roboticdog/original.glb",SHIBA_INU:"/models/pets/shibainu/model.glb",BULLDOG:"/models/pets/bulldog/model.glb"},x$=["development","management","quality","design","sales","support","automation"],h5={development:"Development",management:"Management",quality:"Quality",design:"Design",sales:"Sales",support:"Support",automation:"Automation"},pP=["gemini","anthropic","openai"],C6=["claude-code","gemini-cli","codex-cli","crewly-agent"],NT={"claude-code":"Claude Code","gemini-cli":"Gemini CLI","codex-cli":"Codex CLI","crewly-agent":"Crewly Agent"},N$=["development","design","communication","research","content-creation","automation","analysis","integration","management","monitoring","memory","system","task-management","quality"];function A6(s){return{development:"Development",design:"Design",communication:"Communication",research:"Research","content-creation":"Content Creation",automation:"Automation",analysis:"Analysis",integration:"Integration",management:"Management",monitoring:"Monitoring",memory:"Memory",system:"System","task-management":"Task Management",quality:"Quality"}[s]||s}function D$(s){return{"claude-skill":"Claude Skill","web-page":"Web Page"}[s]||s}const lV=[{id:"google/gemini-3-flash-preview",label:"Gemini 3 Flash (Preview)"},{id:"google/gemini-2.5-flash-preview-05-20",label:"Gemini 2.5 Flash"},{id:"anthropic/claude-sonnet-4-20250514",label:"Claude Sonnet 4"},{id:"anthropic/claude-haiku-4-20250514",label:"Claude Haiku 4"},{id:"openai/gpt-4o",label:"GPT-4o"},{id:"openai/gpt-4o-mini",label:"GPT-4o Mini"},{id:"ollama/llama3",label:"Llama 3 (Ollama)"}],M6=({isOpen:s,onClose:e,onSubmit:t,team:r})=>{const{showWarning:n,AlertComponent:o}=ny(),{roles:a,isLoading:c}=_6(),{projects:u,isLoading:d}=k6(),{teams:h,loading:f}=h$(),{skills:y,loading:v}=hA(),[N,j]=V.useState({name:"",projectPath:"",parentTeamId:""}),[b,x]=V.useState([]),[D,T]=V.useState({hierarchical:!1,leaderId:null,leaderIds:[]}),[S,k]=V.useState(!1),[U,F]=V.useState({}),[M,R]=V.useState({}),L=(a||[]).map(ee=>({key:ee.name,displayName:ee.displayName,promptFile:`${ee.name}-prompt.md`,description:ee.description||"",category:ee.category,hidden:!1,isDefault:ee.isDefault})),B=V.useCallback(async ee=>{if(M[ee])return M[ee];try{const ce=await Xh.getRole(ee);return R(G=>({...G,[ee]:ce})),ce}catch(ce){return console.error("Failed to fetch role details:",ce),null}},[M]),O=ee=>{F(ce=>({...ce,[ee]:!ce[ee]}))},H=(ee,ce)=>{x(G=>G.map(ie=>{if(ie.id!==ee)return ie;const De=ie.skillOverrides||[],Te=De.includes(ce);return{...ie,skillOverrides:Te?De.filter(Re=>Re!==ce):[...De,ce]}}))},Y=(ee,ce)=>{x(G=>G.map(ie=>{if(ie.id!==ee)return ie;const De=ie.excludedRoleSkills||[],Te=De.includes(ce);return{...ie,excludedRoleSkills:Te?De.filter(Re=>Re!==ce):[...De,ce]}}))},le=ee=>{const ce=te(ee.role),G=ee.excludedRoleSkills||[];return ce.filter(ie=>!G.includes(ie))},te=ee=>{const ce=M[ee];return(ce==null?void 0:ce.assignedSkills)||[]},ne=ee=>y.find(ce=>ce.id===ee);V.useEffect(()=>{var ee;if(r&&(j({name:r.name||"",projectPath:((ee=r.projectIds)==null?void 0:ee[0])||r.projectPath||"",parentTeamId:r.parentTeamId||""}),T({hierarchical:r.hierarchical||!1,leaderId:r.leaderId||null,leaderIds:r.leaderIds||(r.leaderId?[r.leaderId]:[])}),r.members&&Array.isArray(r.members))){const ce=r.members.map((G,ie)=>({...G,runtimeType:G.runtimeType||"claude-code",avatar:G.avatar||X[ie%X.length],skillOverrides:G.skillOverrides||[],excludedRoleSkills:G.excludedRoleSkills||[]}));x(ce),ce.forEach(G=>{G.role&&B(G.role)})}},[r,B]),V.useEffect(()=>{if(L.length>0&&b.length===0&&!r){const ce=L.filter(G=>G.isDefault).map((G,ie)=>({id:(ie+1).toString(),name:G.displayName,role:G.key,systemPrompt:`Load from ${G.promptFile}`,runtimeType:"claude-code",avatar:X[ie%X.length],skillOverrides:[],excludedRoleSkills:[]}));ce.length>0&&(x(ce),ce.forEach(G=>{B(G.role)}))}},[L,b.length,r,B]);const q=ee=>{const{name:ce,value:G}=ee.target;j(ie=>({...ie,[ce]:G}))},Z=(ee,ce,G)=>{x(ie=>ie.map(De=>{if(De.id===ee){const Te={...De,[ce]:G};if(ce==="role"){const Re=L.find(pe=>pe.key===G);Re&&(Te.systemPrompt=`Load from ${Re.promptFile}`),Te.skillOverrides=[],Te.excludedRoleSkills=[],B(G)}return Te}return De}))},X=["https://picsum.photos/seed/1/64","https://picsum.photos/seed/2/64","https://picsum.photos/seed/3/64","https://picsum.photos/seed/4/64","https://picsum.photos/seed/5/64","https://picsum.photos/seed/6/64"],z=()=>{const ee=(Math.max(...b.map(ie=>parseInt(ie.id)))+1).toString(),ce=L.find(ie=>ie.key==="fullstack-dev"),G={id:ee,name:"Fullstack Developer",role:"fullstack-dev",systemPrompt:ce?`Load from ${ce.promptFile}`:"Default fullstack developer prompt",runtimeType:"claude-code",avatar:X[b.length%X.length],skillOverrides:[],excludedRoleSkills:[]};x(ie=>[...ie,G]),B("fullstack-dev")},se=ee=>{b.length>1&&x(ce=>ce.filter(G=>G.id!==ee))},ae=async ee=>{if(ee.preventDefault(),!(!N.name.trim()||b.length===0)){for(const ce of b)if(!ce.name.trim()){n("All team members must have a name");return}k(!0);try{const ce=u.find(ie=>ie.id===N.projectPath),G={...N,members:b.map(ie=>({name:ie.name,role:ie.role,systemPrompt:ie.systemPrompt,runtimeType:ie.runtimeType,avatar:ie.avatar,skillOverrides:ie.skillOverrides||[],excludedRoleSkills:ie.excludedRoleSkills||[]})),projectIds:N.projectPath?[N.projectPath]:[],projectPath:ce?ce.path:void 0,parentTeamId:N.parentTeamId||null,hierarchical:D.hierarchical,leaderId:D.hierarchical?D.leaderId:void 0,leaderIds:D.hierarchical?D.leaderIds:void 0};await t(G)}catch(ce){console.error("Error submitting team:",ce)}finally{k(!1)}}},fe=ee=>{ee.preventDefault(),ae(ee)};return s?i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:e,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-2xl m-4",onClick:ee=>ee.stopPropagation(),children:[i.jsxDEV("div",{className:"p-6",children:[i.jsxDEV("div",{className:"flex items-start justify-between",children:[i.jsxDEV("div",{children:[i.jsxDEV("h3",{className:"text-xl font-semibold text-text-primary-dark",children:r?"Edit Team":"Create New Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:348,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:r?"Modify team configuration and members":"Configure the details for your new AI agent team."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:351,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:347,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:e,className:"w-8 h-8 -mt-1 -mr-1 rounded-lg hover:bg-background-dark flex items-center justify-center text-text-secondary-dark hover:text-text-primary-dark",children:i.jsxDEV("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:360,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:359,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:355,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:346,columnNumber:13},globalThis),i.jsxDEV("form",{onSubmit:fe,className:"mt-6 space-y-6 max-h-[60vh] overflow-y-auto pr-2",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"team-name",children:"Team Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:366,columnNumber:17},globalThis),i.jsxDEV(en,{id:"team-name",type:"text",value:N.name,onChange:q,name:"name",placeholder:"e.g., Frontend Wizards",required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:367,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:365,columnNumber:15},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"project-assignment",children:"Assigned Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:379,columnNumber:17},globalThis),i.jsxDEV(pc,{id:"project-assignment",value:N.projectPath||"",onChange:q,name:"projectPath",children:[i.jsxDEV("option",{value:"",children:"No project assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:386,columnNumber:19},globalThis),u.map(ee=>i.jsxDEV("option",{value:ee.id,children:ee.name},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:388,columnNumber:21},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:380,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Optionally assign a project for this team to work on"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:391,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:378,columnNumber:15},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"parent-team",children:"Parent Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:397,columnNumber:17},globalThis),i.jsxDEV(pc,{id:"parent-team",value:N.parentTeamId||"",onChange:q,name:"parentTeamId",children:[i.jsxDEV("option",{value:"",children:"None (Independent Team)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:404,columnNumber:19},globalThis),h.filter(ee=>ee.id!==(r==null?void 0:r.id)&&ee.id!=="orchestrator").map(ee=>i.jsxDEV("option",{value:ee.id,children:ee.name},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:408,columnNumber:23},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:398,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Optionally link this team under a parent team for organization"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:411,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:396,columnNumber:15},globalThis),i.jsxDEV(S6,{config:D,onChange:T,members:b},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:416,columnNumber:15},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{children:"Team Members"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:423,columnNumber:17},globalThis),i.jsxDEV("div",{className:"space-y-4",children:[b.map((ee,ce)=>{var G,ie,De,Te;return i.jsxDEV("div",{className:"p-4 border border-border-dark rounded-lg space-y-4 bg-background-dark/50",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{children:"Avatar"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:428,columnNumber:25},globalThis),i.jsxDEV("div",{className:"flex items-center gap-4",children:[i.jsxDEV("img",{src:ee.avatar||X[0],alt:"Selected Avatar",className:"w-12 h-12 rounded-full ring-2 ring-primary/50"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:430,columnNumber:27},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-2 flex-1",children:X.map(Re=>i.jsxDEV("img",{src:Re,alt:"Avatar option",onClick:()=>Z(ee.id,"avatar",Re),className:`w-9 h-9 rounded-full cursor-pointer transition-all ${ee.avatar===Re?"ring-2 ring-primary":"ring-2 ring-transparent hover:ring-primary/50"}`},Re,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:437,columnNumber:31},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:435,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:429,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:427,columnNumber:23},globalThis),i.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`member-name-${ce}`,children:"Agent Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:450,columnNumber:27},globalThis),i.jsxDEV(en,{id:`member-name-${ce}`,type:"text",value:ee.name,onChange:Re=>Z(ee.id,"name",Re.target.value),placeholder:"e.g., Agent Smith",required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:451,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:449,columnNumber:25},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`member-role-${ce}`,children:"Role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:461,columnNumber:27},globalThis),i.jsxDEV(pc,{id:`member-role-${ce}`,value:ee.role,onChange:Re=>Z(ee.id,"role",Re.target.value),required:!0,children:[i.jsxDEV("option",{value:"",children:"Select role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:468,columnNumber:29},globalThis),L.filter(Re=>!Re.hidden).map(Re=>i.jsxDEV("option",{value:Re.key,children:Re.displayName},Re.key,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:470,columnNumber:31},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:462,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:460,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:448,columnNumber:23},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`runtime-type-${ce}`,children:"Runtime Type"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:476,columnNumber:25},globalThis),i.jsxDEV(pc,{id:`runtime-type-${ce}`,value:ee.runtimeType,onChange:Re=>Z(ee.id,"runtimeType",Re.target.value),required:!0,children:[i.jsxDEV("option",{value:"claude-code",children:"Claude CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:483,columnNumber:27},globalThis),i.jsxDEV("option",{value:"gemini-cli",children:"Gemini CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:484,columnNumber:27},globalThis),i.jsxDEV("option",{value:"codex-cli",children:"Codex CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:485,columnNumber:27},globalThis),i.jsxDEV("option",{value:"crewly-agent",children:"Crewly Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:486,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:477,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:475,columnNumber:23},globalThis),ee.runtimeType==="crewly-agent"&&i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:`model-id-${ce}`,children:"AI Model"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:493,columnNumber:27},globalThis),i.jsxDEV(pc,{id:`model-id-${ce}`,value:ee.modelId||"",onChange:Re=>Z(ee.id,"modelId",Re.target.value),children:[i.jsxDEV("option",{value:"",children:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:499,columnNumber:29},globalThis),lV.map(Re=>i.jsxDEV("option",{value:Re.id,children:Re.label},Re.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:501,columnNumber:31},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:494,columnNumber:27},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:492,columnNumber:25},globalThis),ee.role&&i.jsxDEV("div",{className:"border-t border-border-dark pt-3",children:[i.jsxDEV("button",{type:"button",onClick:()=>O(ee.id),className:"flex items-center gap-2 text-sm font-medium text-text-primary-dark hover:text-primary w-full",children:[U[ee.id]?i.jsxDEV(uf,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:516,columnNumber:31},globalThis):i.jsxDEV(nf,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:518,columnNumber:31},globalThis),i.jsxDEV("span",{children:"Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:520,columnNumber:29},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark ml-1",children:["(",le(ee).length," from role",(((G=ee.excludedRoleSkills)==null?void 0:G.length)||0)>0&&` - ${(ie=ee.excludedRoleSkills)==null?void 0:ie.length} excluded`,(((De=ee.skillOverrides)==null?void 0:De.length)||0)>0&&` + ${(Te=ee.skillOverrides)==null?void 0:Te.length} additional`,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:521,columnNumber:29},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:510,columnNumber:27},globalThis),U[ee.id]&&i.jsxDEV("div",{className:"mt-3 space-y-2",children:[te(ee.role).length>0&&i.jsxDEV("div",{className:"space-y-1",children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark font-medium uppercase tracking-wide",children:["From Role ",i.jsxDEV("span",{className:"font-normal",children:"(click to exclude for this member)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:534,columnNumber:47},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:533,columnNumber:35},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:te(ee.role).map(Re=>{var ve;const pe=ne(Re),$e=(ve=ee.excludedRoleSkills)==null?void 0:ve.includes(Re);return i.jsxDEV("button",{type:"button",onClick:()=>Y(ee.id,Re),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors cursor-pointer ${$e?"bg-rose-500/10 border-rose-500/30 text-rose-400 hover:bg-rose-500/20":"bg-primary/10 border-primary/30 text-primary hover:bg-primary/20"}`,title:$e?`Click to re-enable "${(pe==null?void 0:pe.name)||Re}" for this member`:`Click to exclude "${(pe==null?void 0:pe.name)||Re}" for this member`,children:[$e?i.jsxDEV(jn,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:552,columnNumber:57},globalThis):i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:552,columnNumber:85},globalThis),(pe==null?void 0:pe.name)||Re]},Re,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:541,columnNumber:41},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:536,columnNumber:35},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:532,columnNumber:33},globalThis),i.jsxDEV("div",{className:"space-y-1",children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark font-medium uppercase tracking-wide",children:"Additional Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:563,columnNumber:33},globalThis),v?i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"Loading skills..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:567,columnNumber:35},globalThis):i.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:[y.filter(Re=>!te(ee.role).includes(Re.id)).map(Re=>{var $e;const pe=($e=ee.skillOverrides)==null?void 0:$e.includes(Re.id);return i.jsxDEV("button",{type:"button",onClick:()=>H(ee.id,Re.id),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border transition-colors ${pe?"bg-emerald-500/10 border-emerald-500/30 text-emerald-400":"bg-background-dark border-border-dark text-text-secondary-dark hover:border-primary/50 hover:text-text-primary-dark"}`,title:Re.description,children:[pe?i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:587,columnNumber:47},globalThis):i.jsxDEV(tl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:589,columnNumber:47},globalThis),Re.name]},Re.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:575,columnNumber:43},globalThis)}),y.filter(Re=>!te(ee.role).includes(Re.id)).length===0&&i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"No additional skills available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:596,columnNumber:39},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:569,columnNumber:35},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:562,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:529,columnNumber:29},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:509,columnNumber:25},globalThis),i.jsxDEV("div",{className:"flex justify-end",children:i.jsxDEV("button",{type:"button",onClick:()=>se(ee.id),className:"text-text-secondary-dark hover:text-red-500 h-auto p-0 text-sm flex items-center gap-1",children:[i.jsxDEV("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:613,columnNumber:29},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:612,columnNumber:27},globalThis),"Delete Member"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:607,columnNumber:25},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:606,columnNumber:23},globalThis)]},ee.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:426,columnNumber:21},globalThis)}),i.jsxDEV("button",{type:"button",onClick:z,className:"w-full flex items-center justify-center gap-2 py-2 border-2 border-dashed border-border-dark rounded-lg text-text-secondary-dark hover:text-primary hover:border-primary transition-colors",children:[i.jsxDEV("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6m0 0v6m0-6h6m-6 0H6"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:626,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:625,columnNumber:21},globalThis),i.jsxDEV("span",{children:"Add Team Member"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:628,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:620,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:424,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:422,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:364,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:345,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark px-6 py-4 rounded-b-xl border-t border-border-dark flex justify-end gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:e,type:"button",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:635,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"primary",type:"submit",onClick:fe,disabled:!N.name.trim()||b.length===0||S||c||d||f,children:S?i.jsxDEV("div",{className:"animate-spin rounded-full h-4 w-4 border-2 border-current border-t-transparent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:645,columnNumber:17},globalThis):i.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[i.jsxDEV("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:r?"M5 13l4 4L19 7":"M12 6v6m0 0v6m0-6h6m-6 0H6"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:649,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:648,columnNumber:19},globalThis),r?"Save Changes":"Create Team"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:647,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:638,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:634,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:344,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:343,columnNumber:7},globalThis),i.jsxDEV(o,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:658,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamModal.tsx",lineNumber:342,columnNumber:5},globalThis):null},T$=({member:s,teamId:e,onClose:t})=>{const[r,n]=V.useState(null),[o,a]=V.useState(!1),[c,u]=V.useState(null),[d,h]=V.useState(!1),[f,y]=V.useState(null),[v,N]=V.useState(!1),[j,b]=V.useState("prompt"),x=V.useRef(null);V.useEffect(()=>(D(),()=>{S()}),[s.id,e]);const D=async()=>{if(!s.sessionName){u("No active session for this team member");return}try{a(!0),u(null),or.isConnected()||await or.connect(),T(),or.subscribeToSession(s.sessionName),await k()}catch(B){console.error("Error initializing terminal:",B),u("Failed to connect to terminal"),N(!1)}finally{a(!1)}},T=()=>{if(!s.sessionName)return;const B=te=>{te.sessionName===s.sessionName&&(n(ne=>({...ne,memberId:s.id,memberName:s.name,sessionName:s.sessionName,output:te.content,timestamp:te.timestamp})),setTimeout(()=>{x.current&&(x.current.scrollTop=x.current.scrollHeight)},10))},O=te=>{te.sessionName===s.sessionName&&(n({memberId:s.id,memberName:s.name,sessionName:s.sessionName,output:te.content,timestamp:te.timestamp}),N(!0),u(null))},H=te=>{te.sessionName===s.sessionName&&(console.log("Successfully subscribed to session:",te.sessionName),N(!0),u(null))},Y=te=>{te.sessionName===s.sessionName&&(console.error("WebSocket error for session:",te),u(te.error||"WebSocket error occurred"),N(!1))},le=()=>{N(!0)};return or.on("terminal_output",B),or.on("initial_terminal_state",O),or.on("subscription_confirmed",H),or.on("error",Y),or.on("connected",le),()=>{or.off("terminal_output",B),or.off("initial_terminal_state",O),or.off("subscription_confirmed",H),or.off("error",Y),or.off("connected",le)}},S=()=>{f&&clearInterval(f),s.sessionName&&or.isConnected()&&or.unsubscribeFromSession(s.sessionName)};V.useEffect(()=>{if(d){const B=setInterval(()=>{k()},15e3);y(B)}else f&&(clearInterval(f),y(null));return()=>{f&&clearInterval(f)}},[d]);const k=async()=>{if(!s.sessionName){u("No active session for this team member");return}a(!0),u(null);try{const B=await fetch(`/api/teams/${e}/members/${s.id}/session?lines=100`);if(B.ok){const O=await B.json();O.success?n(O.data):u(O.error||"Failed to fetch session data")}else{const O=await B.json();u(O.error||"Failed to fetch session data")}}catch(B){u("Network error while fetching session data"),console.error("Error fetching session data:",B)}finally{a(!1)}},U=B=>{B.target===B.currentTarget&&t()},F=B=>({orchestrator:"#8b5cf6",pm:"#3b82f6",developer:"#10b981",qa:"#f59e0b",tester:"#ef4444",designer:"#ec4899"})[B]||"#6b7280",M=B=>({inactive:"#6b7280",activating:"#f59e0b",active:"#059669"})[B]||"#6b7280",R=B=>({idle:"#6b7280",in_progress:"#10b981"})[B]||"#6b7280",L=B=>new Date(B).toLocaleString();return i.jsxDEV("div",{className:"modal-overlay",onClick:U,children:i.jsxDEV("div",{className:"modal-content member-modal-content",children:[i.jsxDEV("div",{className:"modal-header",children:[i.jsxDEV("div",{className:"member-header-info",children:[i.jsxDEV("h2",{children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:260,columnNumber:13},globalThis),i.jsxDEV("div",{className:"member-badges",children:[i.jsxDEV("span",{className:"role-badge",style:{backgroundColor:F(s.role)},children:s.role},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:262,columnNumber:15},globalThis),i.jsxDEV("span",{className:"status-badge",style:{backgroundColor:M(s.agentStatus)},children:["Agent: ",s.agentStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:268,columnNumber:15},globalThis),i.jsxDEV("span",{className:"status-badge",style:{backgroundColor:R(s.workingStatus)},children:["Work: ",s.workingStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:274,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:261,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:259,columnNumber:11},globalThis),i.jsxDEV("button",{className:"close-button",onClick:t,children:"×"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:282,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:258,columnNumber:9},globalThis),i.jsxDEV("div",{className:"member-tabs",children:[i.jsxDEV("button",{className:`tab-button ${j==="prompt"?"active":""}`,onClick:()=>b("prompt"),children:"System Prompt"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:287,columnNumber:11},globalThis),i.jsxDEV("button",{className:`tab-button ${j==="terminal"?"active":""}`,onClick:()=>b("terminal"),children:"Terminal Output"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:293,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:286,columnNumber:9},globalThis),i.jsxDEV("div",{className:"member-modal-body",children:[j==="prompt"&&i.jsxDEV("div",{className:"system-prompt-panel",children:i.jsxDEV("div",{className:"system-prompt-content",children:i.jsxDEV("pre",{className:"system-prompt-text",children:s.systemPrompt},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:306,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:305,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:304,columnNumber:13},globalThis),j==="terminal"&&i.jsxDEV("div",{className:"terminal-panel",children:[i.jsxDEV("div",{className:"terminal-header",children:[i.jsxDEV("div",{className:"terminal-header-left",children:s.sessionName&&i.jsxDEV("span",{className:"session-name",children:["Session: ",s.sessionName]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:319,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:317,columnNumber:17},globalThis),i.jsxDEV("div",{className:"terminal-controls",children:[i.jsxDEV("div",{className:"connection-status",children:i.jsxDEV("span",{className:`status-indicator ${v?"connected":"disconnected"}`,children:v?"🟢 Live":"🔴 Offline"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:324,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:323,columnNumber:19},globalThis),i.jsxDEV("label",{className:"auto-refresh-toggle",children:[i.jsxDEV("input",{type:"checkbox",checked:d,onChange:B=>h(B.target.checked),disabled:v},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:329,columnNumber:21},globalThis),"Auto-refresh (fallback)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:328,columnNumber:19},globalThis),i.jsxDEV(ur,{className:"refresh-button",onClick:k,disabled:o||v,variant:"secondary",size:"sm",children:o?"Loading...":"Manual Refresh"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:337,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:322,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:316,columnNumber:15},globalThis),i.jsxDEV("div",{className:"terminal-output",children:[o&&!r&&i.jsxDEV("div",{className:"loading-state",children:[i.jsxDEV("div",{className:"loading-spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:352,columnNumber:21},globalThis),i.jsxDEV("p",{children:"Loading session data..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:353,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:351,columnNumber:19},globalThis),c&&i.jsxDEV("div",{className:"error-state",children:[i.jsxDEV("p",{children:["Error: ",c]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:359,columnNumber:21},globalThis),i.jsxDEV(ur,{onClick:k,className:"retry-button",variant:"outline",size:"sm",children:"Retry"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:360,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:358,columnNumber:19},globalThis),r&&i.jsxDEV("div",{className:"session-data",children:[i.jsxDEV("div",{className:"session-meta",children:i.jsxDEV("span",{children:["Last updated: ",L(r.timestamp)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:369,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:368,columnNumber:21},globalThis),i.jsxDEV("pre",{className:"terminal-content",ref:x,children:r.output||"No output available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:371,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:367,columnNumber:19},globalThis),!o&&!c&&!r&&i.jsxDEV("div",{className:"empty-state",children:i.jsxDEV("p",{children:"No session data available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:379,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:378,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:349,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:315,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:301,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:257,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Modals/TeamMemberModal.tsx",lineNumber:256,columnNumber:5},globalThis)},j$=({team:s,onClick:e,onViewTeam:t,onEditTeam:r,onDeleteTeam:n,projectName:o})=>{var u;const a=s.members||[],c=a.some(d=>d.agentStatus==="active");return i.jsxDEV("div",{className:"flex items-center justify-between p-4 bg-surface-dark rounded-lg border border-border-dark hover:bg-background-dark hover:border-primary/50 transition-colors group",children:[i.jsxDEV("div",{className:"flex items-center gap-4 flex-grow cursor-pointer",onClick:e,children:[i.jsxDEV("div",{className:"p-3 bg-background-dark rounded-lg border border-transparent group-hover:border-primary/20 transition-colors",children:i.jsxDEV(ei,{className:"text-text-secondary-dark group-hover:text-primary transition-colors"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:34,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:33,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{children:[i.jsxDEV("p",{className:"font-semibold text-text-primary-dark",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:38,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:o||(((u=s.projectIds)==null?void 0:u.length)>0?s.projectIds.join(", "):"No Project")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:39,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:37,columnNumber:11},globalThis),c&&i.jsxDEV("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-green-500/10 text-green-400",children:"Active"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:42,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:36,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:29,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-6",children:[i.jsxDEV("div",{className:"hidden md:flex -space-x-2",children:[a.slice(0,4).map((d,h)=>i.jsxDEV(y6,{name:d.name,avatar:d.avatar,size:"sm",className:"border-2 border-surface-dark"},d.id||h,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:51,columnNumber:13},globalThis)),a.length>4&&i.jsxDEV("div",{className:"w-8 h-8 rounded-full border-2 border-surface-dark bg-background-dark flex items-center justify-center text-xs font-medium text-text-secondary-dark",children:["+",a.length-4]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:60,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:49,columnNumber:9},globalThis),i.jsxDEV("div",{className:"hidden sm:flex items-center gap-2 text-sm text-text-secondary-dark w-28",children:[i.jsxDEV(ei,{className:"text-base"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:66,columnNumber:11},globalThis),i.jsxDEV("span",{children:[a.length," Members"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:67,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:65,columnNumber:9},globalThis),i.jsxDEV("div",{onClick:d=>d.preventDefault(),children:i.jsxDEV(Sx,{align:"bottom-right",items:[...t?[{label:"View Team",onClick:()=>t(s.id)}]:[],...r?[{label:"Edit Team",onClick:()=>r(s.id)}]:[],...n?[{label:"Delete Team",danger:!0,onClick:()=>n(s.id)}]:[]]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:70,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:69,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:48,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Teams/TeamListItem.tsx",lineNumber:28,columnNumber:5},globalThis)},yP="https://api.crewlyai.com/api",Db="crewly_cloud_token",S$="https://crewlyai.com/cloud/auth";function E$(s){const e=s||`${window.location.origin}/auth/callback`;return`${S$}?redirect=${encodeURIComponent(e)}`}const gP=3e4,_$=3e5,k$=2;function C$(s,e,t,r){const[n,o]=V.useState([]),[a,c]=V.useState(!1),[u,d]=V.useState(null),h=V.useRef(null),f=V.useRef(!0),y=V.useRef(0),v=V.useRef(null),N=V.useRef(!1),j=V.useRef(s),b=V.useRef(t),x=V.useRef(r),D=V.useRef(e);j.current=s,b.current=t,x.current=r,D.current=e;const T=V.useCallback(()=>y.current===0?gP:Math.min(gP*Math.pow(k$,y.current),_$),[]),S=V.useCallback(()=>{if(!f.current||!D.current)return;h.current&&clearTimeout(h.current);const M=T();h.current=setTimeout(()=>{U()},M)},[T]),k=V.useCallback(async()=>{var M;if(!N.current){N.current=!0;try{const L=await(await fetch("/api/cloud/device-id")).json();L.success&&((M=L.data)!=null&&M.deviceId)&&(v.current=L.data.deviceId)}catch{}}},[]),U=V.useCallback(async()=>{const M=j.current;if(!M||!f.current)return;await k();const R={"Content-Type":"application/json",Authorization:`Bearer ${M}`};try{const L={deviceName:x.current,teams:b.current};v.current&&(L.deviceId=v.current),await fetch(`${yP}/devices/heartbeat`,{method:"POST",headers:R,body:JSON.stringify(L)});const O=await(await fetch(`${yP}/devices`,{headers:R})).json();f.current&&O.success&&(o(O.data||[]),d(null),y.current=0)}catch(L){f.current&&(y.current=Math.min(y.current+1,10),d(L instanceof Error?L.message:"Heartbeat failed"))}S()},[S,k]),F=V.useCallback(async()=>{c(!0),y.current=0,await U(),f.current&&c(!1)},[U]);return V.useEffect(()=>{if(f.current=!0,!e||!s){o([]),y.current=0;return}return c(!0),U().finally(()=>{f.current&&c(!1)}),()=>{f.current=!1,h.current&&(clearTimeout(h.current),h.current=null)}},[e,s,U]),{devices:n,isLoading:a,error:u,refresh:F}}function A$(){const[s,e]=V.useState(null),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),u=V.useRef(!0),d=V.useCallback(async()=>{try{const v=await ss.getCloudStatus();u.current&&(e(v),c(null))}catch{u.current&&e({connected:!1,tier:null,cloudUrl:null,status:"disconnected"})}},[]);V.useEffect(()=>(u.current=!0,(async()=>{await d(),u.current&&r(!1)})(),()=>{u.current=!1}),[d]);const h=V.useCallback(async(v,N)=>{o(!0),c(null);try{const j=await ss.connectToCloud(v,N);return u.current&&e({connected:j.connected,tier:j.tier,cloudUrl:j.cloudUrl,status:"connected"}),!0}catch(j){return u.current&&c(j instanceof Error?j.message:"Connection failed"),!1}finally{u.current&&o(!1)}},[]),f=V.useCallback(async()=>{o(!0),c(null);try{return await ss.disconnectFromCloud(),u.current&&e({connected:!1,tier:null,cloudUrl:null,status:"disconnected"}),!0}catch(v){return u.current&&c(v instanceof Error?v.message:"Disconnect failed"),!1}finally{u.current&&o(!1)}},[]),y=V.useCallback(async()=>{await d()},[d]);return{isConnected:(s==null?void 0:s.connected)??!1,tier:(s==null?void 0:s.tier)??null,isLoading:t,isActioning:n,error:a,connect:h,disconnect:f,refresh:y}}const bP=["https://picsum.photos/seed/1/64","https://picsum.photos/seed/2/64","https://picsum.photos/seed/3/64","https://picsum.photos/seed/4/64","https://picsum.photos/seed/5/64","https://picsum.photos/seed/6/64"];function U6(s){return s.map((e,t)=>({...e,avatar:e.avatar||bP[t%bP.length]}))}const M$=()=>{const s=Sm(),[e,t]=V.useState([]),[r,n]=V.useState(""),[o,a]=V.useState("all"),[c,u]=V.useState(!1),[d,h]=V.useState(null),[f,y]=V.useState(""),[v,N]=V.useState(!0),[j,b]=V.useState("grid"),[x,D]=V.useState([]),{showError:T,AlertComponent:S}=ny(),k=Object.fromEntries(x.map(ee=>[ee.id,ee.name])),[U,F]=V.useState("all"),{isConnected:M,tier:R}=A$(),{getAccessToken:L}=X9(),B=M&&R==="pro"?L():null,O=V.useMemo(()=>e.map(ee=>({id:ee.id,name:ee.name,memberCount:ee.members.length})),[e]),H=M&&R==="pro",{devices:Y,isLoading:le,refresh:te}=C$(B,H,O,typeof window<"u"&&window.location.hostname||"My Device"),ne=V.useMemo(()=>{let ee=e;return r&&(ee=ee.filter(ce=>{var G;return ce.name.toLowerCase().includes(r.toLowerCase())||ce.description&&ce.description.toLowerCase().includes(r.toLowerCase())||((G=ce.projectIds)==null?void 0:G.length)>0&&ce.projectIds.some(ie=>ie.toLowerCase().includes(r.toLowerCase()))||ce.members.some(ie=>ie.name.toLowerCase().includes(r.toLowerCase())||ie.role.toLowerCase().includes(r.toLowerCase()))})),o!=="all"&&(ee=ee.filter(ce=>o==="active"?ce.members.some(G=>G.agentStatus==="active"):o==="inactive"?ce.members.every(G=>G.agentStatus==="inactive"):!0)),U!=="all"&&(ee=ee.filter(ce=>{var G;return(G=ce.projectIds)==null?void 0:G.includes(U)})),ee=ee.filter(ce=>!ce.parentTeamId),ee},[e,r,o,U]),q=V.useMemo(()=>{const ee=new Map;for(const ce of e)ce.parentTeamId&&ee.set(ce.parentTeamId,(ee.get(ce.parentTeamId)||0)+1);return ee},[e]),Z=V.useCallback(ee=>{t(ce=>ce.map(G=>G.id===ee.teamId?{...G,members:G.members.map(ie=>ie.id===ee.memberId||ie.sessionName===ee.sessionName?{...ie,agentStatus:ee.agentStatus}:ie)}:G))},[]);V.useEffect(()=>{z(),X()},[]),V.useEffect(()=>(or.on("team_member_status_changed",Z),()=>{or.off("team_member_status_changed",Z)}),[Z]);const X=async()=>{try{const ee=await ss.getProjects();D(ee.map(ce=>({id:ce.id,name:ce.name})))}catch(ee){Lp(ee,{context:"Loading projects for filter"})}},z=async()=>{try{const ce=(await ss.getTeams()).map(G=>({...G,members:U6(G.members)}));t(ce)}catch(ee){Lp(ee,{context:"fetchTeams"}),t([])}finally{N(!1)}},se=async ee=>{try{const ce=await fetch("/api/teams",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)});if(ce.ok){const G=await ce.json(),ie=G.success?G.data:G;ie&&(t(De=>[...De,ie]),u(!1))}else{const G=await ce.json();T("Error creating team: "+(G.error||"Unknown error"))}}catch(ce){Lp(ce,{context:"handleCreateTeam"}),T("Error creating team: "+(ce instanceof Error?ce.message:"Unknown error"))}},ae=ee=>{s(`/teams/${ee.id}`)},fe=()=>{h(null),y("")};return v?i.jsxDEV("div",{className:"flex items-center justify-center min-h-[400px]",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("div",{className:"w-12 h-12 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4 mx-auto"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:214,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading teams..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:215,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:213,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:212,columnNumber:7},globalThis):i.jsxDEV("div",{className:"max-w-7xl mx-auto",children:[i.jsxDEV("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between gap-4 mb-8",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-3xl font-bold tracking-tight",children:"Teams"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:225,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Manage and organize your development teams"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:226,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:224,columnNumber:9},globalThis),i.jsxDEV("button",{className:"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors flex items-center gap-2",onClick:()=>u(!0),children:[i.jsxDEV(tl,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:233,columnNumber:11},globalThis),"New Team"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:229,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:223,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-center gap-4 mb-3",children:i.jsxDEV("div",{className:"relative flex-grow w-full md:w-auto",children:i.jsxDEV("input",{type:"text",placeholder:"Search teams...",value:r,onChange:ee=>n(ee.target.value),className:"w-full bg-surface-dark border border-border-dark rounded-lg px-4 py-2.5 text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary transition-colors"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:241,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:240,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:239,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-center justify-between gap-4 mb-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Status:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:254,columnNumber:11},globalThis),i.jsxDEV("button",{className:`chip ${o==="all"?"chip--active":""}`,onClick:()=>a("all"),children:"All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:255,columnNumber:11},globalThis),i.jsxDEV("button",{className:`chip ${o==="active"?"chip--active":""}`,onClick:()=>a("active"),children:"Active"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:256,columnNumber:11},globalThis),i.jsxDEV("button",{className:`chip ${o==="inactive"?"chip--active":""}`,onClick:()=>a("inactive"),children:"Inactive"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:257,columnNumber:11},globalThis),i.jsxDEV("span",{className:"ml-2 text-sm text-text-secondary-dark",children:"Project:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:258,columnNumber:11},globalThis),i.jsxDEV("select",{value:U,onChange:ee=>F(ee.target.value),className:"bg-surface-dark border border-border-dark rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",children:[i.jsxDEV("option",{value:"all",children:"All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:264,columnNumber:13},globalThis),x.map(ee=>i.jsxDEV("option",{value:ee.id,children:ee.name},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:266,columnNumber:15},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:259,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:253,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("button",{onClick:()=>b("grid"),className:`inline-flex items-center justify-center w-9 h-9 rounded-lg border border-border-dark ${j==="grid"?"bg-primary/10 text-primary":"text-text-secondary-dark hover:text-text-primary-dark hover:border-primary/50"}`,title:"Grid view",children:i.jsxDEV(vX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:276,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:271,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>b("list"),className:`inline-flex items-center justify-center w-9 h-9 rounded-lg border border-border-dark ${j==="list"?"bg-primary/10 text-primary":"text-text-secondary-dark hover:text-text-primary-dark hover:border-primary/50"}`,title:"List view",children:i.jsxDEV(DX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:283,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:278,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:270,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:252,columnNumber:7},globalThis),H&&i.jsxDEV("div",{className:"mb-8",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(sy,{className:"w-4 h-4 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:293,columnNumber:15},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide",children:["Online Devices (",Y.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:294,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:292,columnNumber:13},globalThis),i.jsxDEV("button",{onClick:te,className:"p-1.5 text-text-secondary-dark hover:text-text-primary-dark rounded-lg hover:bg-surface-dark transition-colors",title:"Refresh devices",children:i.jsxDEV(il,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:303,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:298,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:291,columnNumber:11},globalThis),le?i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6 text-center",children:[i.jsxDEV("div",{className:"w-5 h-5 border-2 border-primary/20 border-t-primary rounded-full animate-spin mx-auto mb-2"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:309,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"Discovering devices..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:310,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:308,columnNumber:13},globalThis):Y.length===0?i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6 text-center",children:[i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"No other devices online"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:314,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark/70 mt-1",children:"Other Pro users will appear here when they are online"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:315,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:313,columnNumber:13},globalThis):i.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:Y.map(ee=>i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-4",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-2",children:[i.jsxDEV("span",{className:"w-2 h-2 rounded-full bg-emerald-400 animate-pulse"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:327,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark truncate",children:ee.deviceName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:328,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:326,columnNumber:19},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-3 font-mono truncate",children:ee.email},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:332,columnNumber:19},globalThis),ee.teams.length>0&&i.jsxDEV("div",{className:"space-y-1.5",children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark/70 uppercase tracking-wide",children:["Teams (",ee.teams.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:337,columnNumber:23},globalThis),ee.teams.map(ce=>i.jsxDEV("div",{className:"flex items-center justify-between text-xs bg-background-dark rounded px-2 py-1.5",children:[i.jsxDEV("span",{className:"text-text-primary-dark truncate",children:ce.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:345,columnNumber:27},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark ml-2 shrink-0",children:[ce.memberCount," member",ce.memberCount!==1?"s":""]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:346,columnNumber:27},globalThis)]},ce.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:341,columnNumber:25},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:336,columnNumber:21},globalThis)]},ee.deviceId,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:322,columnNumber:17},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:320,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:290,columnNumber:9},globalThis),ne.length>0&&i.jsxDEV(i.Fragment,{children:j==="grid"?i.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6",children:[ne.map(ee=>{var ce;return i.jsxDEV(g6,{team:ee,projectName:((ce=ee.projectIds)==null?void 0:ce.length)>0?k[ee.projectIds[0]]:void 0,subTeamCount:q.get(ee.id),onClick:()=>ae(ee),onViewTeam:G=>s(`/teams/${G}`),onEditTeam:G=>s(`/teams/${G}?edit=true`)},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:366,columnNumber:17},globalThis)}),i.jsxDEV("div",{onClick:()=>u(!0),className:"flex items-center justify-center p-5 rounded-xl border-2 border-dashed border-border-dark hover:border-primary transition-colors cursor-pointer text-text-secondary-dark hover:text-primary",children:[i.jsxDEV(tl,{className:"mr-2 w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:380,columnNumber:17},globalThis),i.jsxDEV("span",{children:"Create New Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:381,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:376,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:364,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-4",children:[ne.map(ee=>{var ce;return i.jsxDEV(j$,{team:ee,projectName:((ce=ee.projectIds)==null?void 0:ce.length)>0?k[ee.projectIds[0]]:void 0,onClick:()=>ae(ee),onViewTeam:G=>s(`/teams/${G}`),onEditTeam:G=>s(`/teams/${G}?edit=true`),onDeleteTeam:async G=>{if(window.confirm("Are you sure you want to delete this team?"))try{await ss.deleteTeam(G),t(ie=>ie.filter(De=>De.id!==G))}catch(ie){T("Failed to delete team: "+(ie instanceof Error?ie.message:"Unknown error"))}}},ee.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:387,columnNumber:17},globalThis)}),i.jsxDEV("div",{onClick:()=>u(!0),className:"flex items-center justify-center p-4 rounded-lg border-2 border-dashed border-border-dark hover:border-primary transition-colors cursor-pointer text-text-secondary-dark hover:text-primary",children:[i.jsxDEV(tl,{className:"mr-2 w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:410,columnNumber:17},globalThis),i.jsxDEV("span",{children:"Create New Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:411,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:406,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:385,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:362,columnNumber:9},globalThis),ne.length===0&&!v&&i.jsxDEV("div",{className:"text-center py-16",children:[i.jsxDEV("h3",{className:"text-lg font-semibold mb-2",children:"No teams found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:420,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-6",children:r||o!=="all"?"Try adjusting your search or filters":"Create your first team to get started"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:421,columnNumber:11},globalThis),!r&&o==="all"&&i.jsxDEV("button",{className:"bg-primary text-white px-6 py-3 rounded-lg hover:bg-primary/90 transition-colors inline-flex items-center gap-2",onClick:()=>u(!0),children:[i.jsxDEV(tl,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:431,columnNumber:15},globalThis),"Create Team"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:427,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:419,columnNumber:9},globalThis),i.jsxDEV(M6,{isOpen:c,onClose:()=>u(!1),onSubmit:se},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:438,columnNumber:7},globalThis),d&&f&&i.jsxDEV(T$,{member:d,teamId:f,onClose:fe},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:445,columnNumber:9},globalThis),i.jsxDEV(S,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:451,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Teams.tsx",lineNumber:222,columnNumber:5},globalThis)},U$=({isOpen:s,onClose:e,onStartTeam:t,team:r,loading:n})=>{var x,D;const{showWarning:o,AlertComponent:a}=ny(),[c,u]=V.useState(""),[d,h]=V.useState([]),[f,y]=V.useState(!1),v=((x=r==null?void 0:r.projectIds)==null?void 0:x.length)>0;V.useEffect(()=>{s&&(N(),v&&u(r.projectIds[0]))},[s,v,r==null?void 0:r.projectIds]);const N=async()=>{y(!0);try{const T=await fetch("/api/projects");if(T.ok){const S=await T.json(),k=S.success?S.data||[]:S||[];h(Array.isArray(k)?k:[])}}catch(T){console.error("Error fetching projects:",T),h([])}finally{y(!1)}},j=T=>{if(T.preventDefault(),!v&&!c){o("Please select a project");return}const S=v?r.projectIds[0]:c;t(S),e()},b=()=>{if(!v)return"";const T=d.find(S=>{var k;return S.id===((k=r.projectIds)==null?void 0:k[0])});return T?T.name:"Unknown Project"};return i.jsxDEV(i.Fragment,{children:[i.jsxDEV(PT,{isOpen:s,onClose:e,title:"Start Team",subtitle:`Configure settings for ${(r==null?void 0:r.name)||"team"}`,size:"xl",onSubmit:j,submitText:n?"Starting...":"Proceed",submitDisabled:n||!v&&!c,loading:n,children:[i.jsxDEV($X,{title:"Project Assignment",description:v?void 0:"Select which project this team will work on",children:v?i.jsxDEV("div",{className:"form-info-box form-info-box--success",children:i.jsxDEV("div",{className:"form-info-content",children:[i.jsxDEV("strong",{children:"Already assigned to:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:101,columnNumber:8},globalThis)," ",b()]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:100,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:99,columnNumber:6},globalThis):i.jsxDEV(OT,{children:[i.jsxDEV(Ur,{htmlFor:"project-select",required:!0,children:"Select Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:106,columnNumber:7},globalThis),i.jsxDEV(QX,{id:"project-select",value:c,onChange:u,placeholder:"Choose a project...",loading:f,required:!0,options:d.map(T=>({value:T.id,label:`${T.name} (${T.path})`}))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:109,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:105,columnNumber:6},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:92,columnNumber:4},globalThis),i.jsxDEV("div",{className:"form-info-box form-info-box--info",children:[i.jsxDEV("div",{className:"form-info-header",children:i.jsxDEV("h4",{children:["Team: ",r==null?void 0:r.name]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:127,columnNumber:6},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:126,columnNumber:5},globalThis),i.jsxDEV("div",{className:"form-info-content",children:[i.jsxDEV("div",{children:["Members: ",((D=r==null?void 0:r.members)==null?void 0:D.length)||0]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:130,columnNumber:6},globalThis),i.jsxDEV("div",{children:["Status: ",(r==null?void 0:r.status)||"idle"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:131,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:129,columnNumber:5},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:125,columnNumber:4},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:81,columnNumber:3},globalThis),i.jsxDEV(a,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:135,columnNumber:3},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/StartTeamModal.tsx",lineNumber:80,columnNumber:3},globalThis)},R$=({team:s,teamStatus:e,orchestratorSessionActive:t,onStartTeam:r,onStopTeam:n,onViewTerminal:o,onDeleteTeam:a,onEditTeam:c,isStoppingTeam:u=!1,isStartingTeam:d=!1})=>{const h=(s==null?void 0:s.id)==="orchestrator"||(s==null?void 0:s.name)==="Orchestrator Team";return((s==null?void 0:s.members)||[]).filter(y=>y.agentStatus==="active"||y.sessionName).length,i.jsxDEV("div",{className:"page-header",children:[i.jsxDEV("div",{className:"header-info",children:i.jsxDEV("div",{className:"flex items-center gap-3 mb-1",children:i.jsxDEV("h1",{className:"page-title mb-0",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:27,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:26,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:25,columnNumber:7},globalThis),i.jsxDEV("div",{className:"header-controls",children:[e==="idle"&&!d?i.jsxDEV(ur,{variant:"success",onClick:r,icon:Xp,children:h?"Start Orchestrator":"Start Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:32,columnNumber:11},globalThis):d?i.jsxDEV(ur,{variant:"success",loading:!0,disabled:!0,children:"Starting..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:36,columnNumber:11},globalThis):i.jsxDEV(ur,{variant:"danger",onClick:n,icon:qV,loading:u,children:u?"Stopping...":h?"Stop Orchestrator":"Stop Team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:40,columnNumber:11},globalThis),h&&e==="active"&&i.jsxDEV(ur,{variant:"primary",onClick:o,icon:qk,children:"View Terminal"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:50,columnNumber:11},globalThis),!h&&i.jsxDEV(Sx,{align:"bottom-right",items:[{label:"Edit Team",onClick:c},{label:"Delete Team",danger:!0,onClick:a}]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:56,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:30,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamHeader.tsx",lineNumber:24,columnNumber:5},globalThis)},V$=({member:s,teamId:e,onStart:t,onStop:r,onViewTerminal:n,onViewAgent:o,isStartingTeam:a})=>{const[c,u]=V.useState(!1),[d,h]=V.useState(!1),f=s.agentStatus==="active",y=s.agentStatus==="started",v=s.agentStatus==="starting"||s.agentStatus==="activating",N=f||y||v,j=v||c||a&&!f&&!y,b=c||d||a&&!f&&!y;let x="Inactive",D="bg-gray-500/10 text-gray-300";d?(x="Stopping...",D="bg-orange-500/10 text-orange-400"):s.agentStatus==="suspended"?(x="Suspended",D="bg-purple-500/10 text-purple-400"):f?(x="Active",D="bg-emerald-500/10 text-emerald-400"):y?(x="Started",D="bg-blue-500/10 text-blue-400"):j&&(x="Starting...",D="bg-yellow-500/10 text-yellow-400");const T=async U=>{if(U.stopPropagation(),t&&!b){u(!0);try{await t(s.id)}finally{u(!1)}}},S=async U=>{if(U.stopPropagation(),r&&!b){h(!0);try{await r(s.id)}finally{h(!1)}}},k=s.avatar;return i.jsxDEV("div",{className:"member-row",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"w-10 h-10 rounded-full bg-background-dark border border-border-dark flex items-center justify-center overflow-hidden",children:k?k.startsWith("http")||k.startsWith("data:")?i.jsxDEV("img",{src:k,alt:s.name,className:"w-full h-full object-cover"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:83,columnNumber:15},globalThis):i.jsxDEV("span",{className:"text-sm",children:k},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:85,columnNumber:15},globalThis):i.jsxDEV("span",{className:"text-sm",children:s.name.charAt(0).toUpperCase()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:88,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:80,columnNumber:9},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"font-semibold",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:92,columnNumber:11},globalThis),i.jsxDEV("div",{className:"text-sm text-text-secondary-dark",children:["Session: ",s.sessionName||"Inactive"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:93,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:91,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:79,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("span",{className:`px-3 py-1 rounded-full text-sm font-medium flex items-center gap-2 ${D}`,children:[b&&i.jsxDEV(ef,{className:"w-3 h-3 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:98,columnNumber:25},globalThis),x]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:97,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[(f||y||v||d)&&!c?i.jsxDEV("button",{className:`w-9 h-9 rounded-full flex items-center justify-center transition-colors ${b?"opacity-50 cursor-not-allowed":"hover:bg-red-500/20 hover:text-red-400"}`,title:"Stop",onClick:S,disabled:b,children:d?i.jsxDEV(ef,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:114,columnNumber:17},globalThis):i.jsxDEV(qV,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:116,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:103,columnNumber:13},globalThis):i.jsxDEV("button",{className:`w-9 h-9 rounded-full flex items-center justify-center transition-colors ${b?"opacity-50 cursor-not-allowed":"hover:bg-green-500/20 hover:text-green-400"}`,title:"Start",onClick:T,disabled:b,children:c?i.jsxDEV(ef,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:131,columnNumber:17},globalThis):i.jsxDEV(Xp,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:133,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:120,columnNumber:13},globalThis),i.jsxDEV(Sx,{align:"bottom-right",buttonClassName:"w-9 h-9 rounded-full hover:bg-primary/20 hover:text-primary flex items-center justify-center transition-colors",items:[...o?[{label:N?"View Agent":"Edit Agent",onClick:()=>o(s)}]:[],...N&&s.sessionName&&n?[{label:"View Terminal",onClick:()=>n(s)}]:[]]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:137,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:101,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:96,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamMemberRow.tsx",lineNumber:78,columnNumber:5},globalThis)},F$=({team:s,teamId:e,onUpdateMember:t,onDeleteMember:r,onStartMember:n,onStopMember:o,onViewTerminal:a,onViewAgent:c,isStartingTeam:u})=>{var d,h;return i.jsxDEV("div",{className:"space-y-4",children:[(d=s==null?void 0:s.members)==null?void 0:d.map(f=>i.jsxDEV(V$,{member:f,teamId:e,onStart:n,onStop:o,onViewTerminal:a,onViewAgent:c,isStartingTeam:u},f.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:19,columnNumber:9},globalThis)),!((h=s==null?void 0:s.members)!=null&&h.length)&&i.jsxDEV("div",{className:"empty-state",children:i.jsxDEV("p",{children:"No team members yet. Add members to get started."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:32,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:31,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/MembersList.tsx",lineNumber:17,columnNumber:5},globalThis)},I$=({team:s,teamId:e,projectName:t,onUpdateMember:r,onDeleteMember:n,onStartMember:o,onStopMember:a,onProjectChange:c,onViewTerminal:u,onViewAgent:d,isStartingTeam:h})=>{var D,T;const[f,y]=V.useState(!1),[v,N]=V.useState(((D=s==null?void 0:s.projectIds)==null?void 0:D[0])||""),{projectOptions:j}=k6(),b=(s==null?void 0:s.id)==="orchestrator"||(s==null?void 0:s.name)==="Orchestrator Team";V.useEffect(()=>{var S;N(((S=s==null?void 0:s.projectIds)==null?void 0:S[0])||"")},[s==null?void 0:s.projectIds]);const x=S=>{N(S),c&&c(S||null),y(!1)};return i.jsxDEV("div",{className:`grid grid-cols-1 ${b?"":"lg:grid-cols-3"} gap-6`,children:[i.jsxDEV("div",{className:b?"":"lg:col-span-2",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:i.jsxDEV("h3",{className:"text-xl font-semibold",children:b?"Orchestrator":`Team Members (${((T=s.members)==null?void 0:T.length)||0})`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:90,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:89,columnNumber:9},globalThis),i.jsxDEV(F$,{team:s,teamId:e,onUpdateMember:r,onDeleteMember:n,onStartMember:o,onStopMember:a,onViewTerminal:u,onViewAgent:d,isStartingTeam:h},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:94,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:88,columnNumber:7},globalThis),!b&&i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl p-6",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[i.jsxDEV("h4",{className:"text-lg font-semibold",children:"Assigned Project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:111,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>y(!f),className:"p-1.5 hover:bg-background-dark rounded-lg transition-colors text-text-secondary-dark hover:text-primary",title:"Change project",children:i.jsxDEV(AX,{className:"h-4 w-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:117,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:112,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:110,columnNumber:13},globalThis),f?i.jsxDEV("div",{className:"space-y-3",children:[i.jsxDEV(pc,{value:v,onChange:S=>x(S.target.value),children:[i.jsxDEV("option",{value:"",children:"No project assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:126,columnNumber:19},globalThis),j.map(S=>i.jsxDEV("option",{value:S.id,children:S.name},S.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:128,columnNumber:21},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:122,columnNumber:17},globalThis),i.jsxDEV("button",{onClick:()=>y(!1),className:"text-sm text-text-secondary-dark hover:text-primary",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:131,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:121,columnNumber:15},globalThis):i.jsxDEV("div",{className:"flex items-center gap-3 cursor-pointer hover:bg-background-dark/50 -mx-3 px-3 py-2 rounded-lg transition-colors",onClick:()=>y(!0),title:"Click to change project",children:[i.jsxDEV(ol,{className:"h-5 w-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:144,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("div",{className:"font-semibold text-white",children:t||"No Project Assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:146,columnNumber:19},globalThis),!t&&i.jsxDEV("div",{className:"text-sm text-text-secondary-dark",children:"Click to assign a project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:148,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:145,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:139,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:109,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl p-5",children:[i.jsxDEV("h4",{className:"text-lg font-semibold mb-3",children:"Recent Activity"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:155,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"No recent activity."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:156,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:154,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:108,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/TeamOverview.tsx",lineNumber:87,columnNumber:5},globalThis)},L$=({member:s,onClose:e,isEditable:t=!1,onSave:r})=>{var T;const[n,o]=V.useState(null),[a,c]=V.useState(!0),[u,d]=V.useState([]),[h,f]=V.useState(s.runtimeType||"claude-code"),[y,v]=V.useState(s.modelId||""),{skills:N}=hA();V.useEffect(()=>{(async()=>{if(s.role)try{const k=await Xh.getRole(s.role);o(k)}catch(k){console.error("Failed to fetch role details:",k)}finally{c(!1)}else c(!1)})()},[s.role]),V.useEffect(()=>{var F;if(!n&&!((F=s.skillOverrides)!=null&&F.length))return;const k=[...((n==null?void 0:n.assignedSkills)||[]).filter(M=>{var R;return!((R=s.excludedRoleSkills)!=null&&R.includes(M))}),...s.skillOverrides||[]];if(k.length===0)return;const U=k.map(M=>{const R=N.find(L=>L.id===M);return{id:M,name:(R==null?void 0:R.name)||M}});d(U)},[n,s.skillOverrides,s.excludedRoleSkills,a,N]);const j=S=>u.find(k=>k.id===S),b=()=>{const S=((n==null?void 0:n.assignedSkills)||[]).filter(U=>{var F;return!((F=s.excludedRoleSkills)!=null&&F.includes(U))}),k=s.skillOverrides||[];return[...new Set([...S,...k])]},x=S=>{S.target===S.currentTarget&&e()},D=(S,k)=>{const U=j(S),F=(U==null?void 0:U.name)||S,M="inline-flex items-center gap-1.5 px-2.5 py-1 text-sm rounded-md",R=k==="role"?"bg-primary/10 text-primary":"bg-emerald-500/10 text-emerald-400";return i.jsxDEV("div",{children:i.jsxDEV("span",{className:`${M} ${R}`,children:[i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:136,columnNumber:11},globalThis),F]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:135,columnNumber:9},globalThis)},S,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:134,columnNumber:7},globalThis)};return i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:x,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-lg m-4",onClick:S=>S.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between p-6 border-b border-border-dark",children:[i.jsxDEV("div",{className:"flex items-center gap-4",children:[i.jsxDEV("div",{className:"w-12 h-12 rounded-full bg-background-dark border border-border-dark flex items-center justify-center overflow-hidden",children:s.avatar?s.avatar.startsWith("http")||s.avatar.startsWith("data:")?i.jsxDEV("img",{src:s.avatar,alt:s.name,className:"w-full h-full object-cover"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:158,columnNumber:19},globalThis):i.jsxDEV("span",{className:"text-lg",children:s.avatar},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:160,columnNumber:19},globalThis):i.jsxDEV(Nx,{className:"w-6 h-6 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:163,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:155,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold text-text-primary-dark",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:167,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:t?"Edit Agent":"Agent Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:168,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:166,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:154,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:e,className:"w-8 h-8 rounded-lg hover:bg-background-dark flex items-center justify-center text-text-secondary-dark hover:text-text-primary-dark",children:i.jsxDEV(jn,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:175,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:171,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:153,columnNumber:9},globalThis),i.jsxDEV("div",{className:"p-6 space-y-6",children:[i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:[i.jsxDEV(dX,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:184,columnNumber:15},globalThis),"Role"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:183,columnNumber:13},globalThis),a?i.jsxDEV("div",{className:"animate-pulse",children:[i.jsxDEV("div",{className:"h-6 bg-background-dark rounded w-32 mb-2"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:189,columnNumber:17},globalThis),i.jsxDEV("div",{className:"h-4 bg-background-dark rounded w-full"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:190,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:188,columnNumber:15},globalThis):n?i.jsxDEV("div",{className:"bg-background-dark/50 rounded-lg p-4",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-2",children:[i.jsxDEV("span",{className:"font-semibold text-text-primary-dark",children:n.displayName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:195,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-xs px-2 py-0.5 rounded-full bg-primary/10 text-primary",children:h5[n.category]||n.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:196,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:194,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:n.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:200,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:193,columnNumber:15},globalThis):i.jsxDEV("p",{className:"text-sm text-text-secondary-dark italic",children:"No role assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:203,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:182,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:[i.jsxDEV(a9,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:210,columnNumber:15},globalThis),"Skills"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:209,columnNumber:13},globalThis),a?i.jsxDEV("div",{className:"animate-pulse flex flex-wrap gap-2",children:[i.jsxDEV("div",{className:"h-7 bg-background-dark rounded-md w-24"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:215,columnNumber:17},globalThis),i.jsxDEV("div",{className:"h-7 bg-background-dark rounded-md w-32"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:216,columnNumber:17},globalThis),i.jsxDEV("div",{className:"h-7 bg-background-dark rounded-md w-28"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:217,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:214,columnNumber:15},globalThis):i.jsxDEV("div",{className:"space-y-3",children:[(n==null?void 0:n.assignedSkills)&&n.assignedSkills.length>0&&i.jsxDEV("div",{children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-2",children:"From Role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:224,columnNumber:21},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-2",children:n.assignedSkills.filter(S=>{var k;return!((k=s.excludedRoleSkills)!=null&&k.includes(S))}).map(S=>D(S,"role"))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:225,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:223,columnNumber:19},globalThis),s.skillOverrides&&s.skillOverrides.length>0&&i.jsxDEV("div",{children:[i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-2",children:"Additional Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:238,columnNumber:21},globalThis),i.jsxDEV("div",{className:"flex flex-wrap gap-2",children:s.skillOverrides.map(S=>D(S,"additional"))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:239,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:237,columnNumber:19},globalThis),b().length===0&&i.jsxDEV("p",{className:"text-sm text-text-secondary-dark italic",children:"No skills assigned"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:249,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:220,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:208,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:"Runtime"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:257,columnNumber:13},globalThis),t?i.jsxDEV("select",{value:h,onChange:S=>f(S.target.value),className:"w-full bg-background-dark border border-border-dark rounded-lg px-4 py-2 text-sm text-text-primary-dark focus:outline-none focus:border-primary",children:[i.jsxDEV("option",{value:"claude-code",children:"Claude CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:266,columnNumber:17},globalThis),i.jsxDEV("option",{value:"gemini-cli",children:"Gemini CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:267,columnNumber:17},globalThis),i.jsxDEV("option",{value:"codex-cli",children:"Codex CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:268,columnNumber:17},globalThis),i.jsxDEV("option",{value:"crewly-agent",children:"Crewly Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:269,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:261,columnNumber:15},globalThis):i.jsxDEV("div",{className:"bg-background-dark/50 rounded-lg px-4 py-2",children:i.jsxDEV("span",{className:"text-sm text-text-primary-dark",children:s.runtimeType==="claude-code"?"Claude CLI":s.runtimeType==="gemini-cli"?"Gemini CLI":s.runtimeType==="codex-cli"?"Codex CLI":s.runtimeType==="crewly-agent"?"Crewly Agent":s.runtimeType||"Claude CLI"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:273,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:272,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:256,columnNumber:11},globalThis),h==="crewly-agent"&&i.jsxDEV("div",{className:"mt-4",children:[i.jsxDEV("div",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary-dark uppercase tracking-wide mb-3",children:"AI Model"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:287,columnNumber:15},globalThis),t?i.jsxDEV("select",{value:y,onChange:S=>v(S.target.value),className:"w-full bg-background-dark border border-border-dark rounded-lg px-4 py-2 text-sm text-text-primary-dark focus:outline-none focus:border-primary",children:[i.jsxDEV("option",{value:"",children:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:296,columnNumber:19},globalThis),lV.map(S=>i.jsxDEV("option",{value:S.id,children:S.label},S.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:298,columnNumber:21},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:291,columnNumber:17},globalThis):i.jsxDEV("div",{className:"bg-background-dark/50 rounded-lg px-4 py-2",children:i.jsxDEV("span",{className:"text-sm text-text-primary-dark",children:s.modelId?((T=lV.find(S=>S.id===s.modelId))==null?void 0:T.label)||s.modelId:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:303,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:302,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:286,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:180,columnNumber:9},globalThis),i.jsxDEV("div",{className:"px-6 py-4 border-t border-border-dark bg-background-dark rounded-b-xl",children:t?i.jsxDEV("div",{className:"flex gap-3",children:[i.jsxDEV("button",{onClick:e,className:"flex-1 px-4 py-2 border border-border-dark text-text-secondary-dark rounded-lg hover:bg-surface-dark transition-colors font-medium",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:318,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>{if(r){const S={runtimeType:h};h==="crewly-agent"&&(S.modelId=y||void 0),r(s.id,S)}e()},className:"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 transition-colors font-medium",children:"Save"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:324,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:317,columnNumber:13},globalThis):i.jsxDEV("button",{onClick:e,className:"w-full px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/90 transition-colors font-medium",children:"Close"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:343,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:315,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:148,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/TeamDetail/AgentDetailModal.tsx",lineNumber:144,columnNumber:5},globalThis)},P$=50;let O$=0;function f_(){return`feed-${Date.now()}-${++O$}`}function B$(s=P$){const[e,t]=V.useState([]),r=V.useRef(s);r.current=s;const n=V.useCallback(a=>{t(c=>{const u=[a,...c];return u.length>r.current?u.slice(0,r.current):u})},[]),o=V.useCallback(()=>t([]),[]);return V.useEffect(()=>{const a=y=>{const v=y.name||y.sessionName||"Agent",N=y.agentStatus||y.workingStatus||"unknown",j=N==="error"?"error":"agent_status";n({id:f_(),type:j,source:v,title:`${v} is now ${N}`,detail:y.role?`Role: ${y.role}`:void 0,timestamp:new Date().toISOString(),agentStatus:y.agentStatus})},c=y=>{const v=y.agentStatus||y.status||(y.running?"active":"inactive");n({id:f_(),type:"system",source:"Orchestrator",title:`Orchestrator is now ${v}`,timestamp:new Date().toISOString(),agentStatus:v})},u=y=>v=>{const N=y.replace("queue:","").replace(/_/g," ");n({id:f_(),type:y.includes("failed")?"error":"message",source:v.sessionName||"Queue",title:`Message ${N}`,detail:v.snippet?v.snippet.slice(0,120):void 0,timestamp:new Date().toISOString()})},d=y=>{if(y.members)for(const v of y.members)v.agentStatus&&n({id:f_(),type:"task_update",source:v.name||v.sessionName||"Agent",title:v.currentTask?`Working on: ${v.currentTask}`:`Status: ${v.agentStatus}`,timestamp:new Date().toISOString(),agentStatus:v.agentStatus})};or.on("team_member_status_changed",a),or.on("orchestrator_status_changed",c),or.on("team_activity_updated",d);const f=["queue:message_enqueued","queue:message_processing","queue:message_completed","queue:message_failed"].map(y=>{const v=u(y);return or.on(y,v),{name:y,handler:v}});return()=>{or.off("team_member_status_changed",a),or.off("orchestrator_status_changed",c),or.off("team_activity_updated",d);for(const{name:y,handler:v}of f)or.off(y,v)}},[n]),{events:e,clearEvents:o}}const H$={agent_status:"bg-emerald-400",task_update:"bg-blue-400",message:"bg-violet-400",system:"bg-amber-400",error:"bg-red-400"},z$={agent_status:"Agent",task_update:"Task",message:"Message",system:"System",error:"Error"};function G$(s){try{return new Date(s).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}}const W$=({event:s})=>{const e=s.agentStatus==="active"||s.agentStatus==="busy",t=H$[s.type]||"bg-gray-400";return i.jsxDEV("div",{className:"feed-entry flex items-start gap-3 px-4 py-2.5 border-b border-[var(--color-border)] hover:bg-[var(--color-bg-hover)] transition-colors","data-testid":"feed-entry",children:[i.jsxDEV("span",{className:`mt-1.5 h-2 w-2 shrink-0 rounded-full ${t} ${e?"feed-pulse":""}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:65,columnNumber:4},globalThis),i.jsxDEV("div",{className:"min-w-0 flex-1",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-xs font-medium text-[var(--color-text-secondary)] uppercase tracking-wide",children:z$[s.type]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:72,columnNumber:6},globalThis),i.jsxDEV("span",{className:"text-xs text-[var(--color-text-muted)]",children:G$(s.timestamp)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:75,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:71,columnNumber:5},globalThis),i.jsxDEV("p",{className:"text-sm text-[var(--color-text-primary)] truncate",children:s.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:79,columnNumber:5},globalThis),s.detail&&i.jsxDEV("p",{className:"text-xs text-[var(--color-text-muted)] truncate mt-0.5",children:s.detail},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:83,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:70,columnNumber:4},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:60,columnNumber:3},globalThis)},K$=()=>i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-12 text-[var(--color-text-muted)]",children:[i.jsxDEV("svg",{className:"h-10 w-10 mb-3 opacity-40",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:i.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M13 10V3L4 14h7v7l9-11h-7z"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:103,columnNumber:4},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:97,columnNumber:3},globalThis),i.jsxDEV("p",{className:"text-sm",children:"Waiting for live events…"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:110,columnNumber:3},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:96,columnNumber:2},globalThis),X$=({maxEvents:s=50,className:e=""})=>{const{events:t,clearEvents:r}=B$(s),n=V.useRef(null);return V.useEffect(()=>{n.current&&(n.current.scrollTop=0)},[t.length]),i.jsxDEV("div",{className:`flex flex-col rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] overflow-hidden ${e}`,"data-testid":"execution-feed",children:[i.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--color-border)]",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"h-2 w-2 rounded-full bg-emerald-400 feed-pulse"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:147,columnNumber:6},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-[var(--color-text-primary)]",children:"Execution Feed"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:148,columnNumber:6},globalThis),t.length>0&&i.jsxDEV("span",{className:"text-xs text-[var(--color-text-muted)]",children:["(",t.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:152,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:146,columnNumber:5},globalThis),t.length>0&&i.jsxDEV("button",{onClick:r,className:"text-xs text-[var(--color-text-muted)] hover:text-[var(--color-text-secondary)] transition-colors","data-testid":"feed-clear",children:"Clear"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:158,columnNumber:6},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:145,columnNumber:4},globalThis),i.jsxDEV("div",{ref:n,className:"feed-scroll flex-1 overflow-y-auto",children:t.length===0?i.jsxDEV(K$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:174,columnNumber:6},globalThis):t.map(o=>i.jsxDEV(W$,{event:o},o.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:177,columnNumber:7},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:169,columnNumber:4},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/ExecutionFeed/ExecutionFeed.tsx",lineNumber:140,columnNumber:3},globalThis)},q$=()=>{const{id:s}=PB(),e=Sm(),{openTerminalWithSession:t}=fj(),[r,n]=V.useState(null),[o,a]=V.useState(!0),[c,u]=V.useState(!1),[d,h]=V.useState(!1),[f,y]=V.useState(!1),[v,N]=V.useState(!1),[j,b]=V.useState(null),[x,D]=V.useState(!1),[T,S]=V.useState(!1),[k,U]=V.useState(null),[F,M]=V.useState(null),[R,L]=V.useState([]),{showSuccess:B,showError:O,showWarning:H,AlertComponent:Y}=ny(),{showConfirm:le,ConfirmComponent:te}=uj(),ne=V.useCallback(re=>{re.teamId===s&&n(Ae=>Ae&&{...Ae,members:Ae.members.map(ze=>ze.id===re.memberId||ze.sessionName===re.sessionName?{...ze,agentStatus:re.agentStatus}:ze)})},[s]),q=V.useCallback(re=>{(s==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team")&&u(re.agentStatus==="active")},[s,r==null?void 0:r.name]);V.useEffect(()=>{s&&(X(),(s==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team")&&z())},[s,r==null?void 0:r.name]),V.useEffect(()=>(or.on("team_member_status_changed",ne),or.on("orchestrator_status_changed",q),()=>{or.off("team_member_status_changed",ne),or.off("orchestrator_status_changed",q)}),[ne,q]),V.useEffect(()=>{var re;((re=r==null?void 0:r.projectIds)==null?void 0:re.length)>0?se(r.projectIds[0]):(U(null),M(null))},[r==null?void 0:r.projectIds]),V.useEffect(()=>{s&&Z()},[s]);const Z=async()=>{try{const Ae=(await ss.getTeams()).filter(ze=>ze.parentTeamId===s);L(Ae)}catch(re){console.error("Error fetching sub-teams:",re),L([])}},X=async()=>{try{const re=await fetch(`/api/teams/${s}`);if(re.ok){const Ae=await re.json();if(Ae.success&&Ae.data){const ze={...Ae.data,members:U6(Ae.data.members)};n(ze)}}}catch(re){console.error("Error fetching team data:",re)}finally{a(!1)}},z=async()=>{try{const re=await fetch("/api/terminal/sessions");if(re.ok){const Ae=await re.json();if(Ae.success&&Ae.data){const ze=Ae.data.some(Ge=>Ge.sessionName==="crewly-orc");u(ze)}}}catch(re){console.error("Error checking orchestrator session:",re),u(!1)}},se=async re=>{try{const Ae=await fetch("/api/projects");if(Ae.ok){const ze=await Ae.json(),Qe=(ze.success?ze.data||[]:ze||[]).find(oe=>oe.id===re);U(Qe?Qe.name:re),M(Qe?Qe.path:null)}else U(re),M(null)}catch(Ae){console.error("Error fetching project data:",Ae),U(re),M(null)}},ae=async()=>{if((r==null?void 0:r.id)==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team"){D(!0);try{const Ae=await ss.setupOrchestrator();Ae.success?(X(),B(Ae.message||"Orchestrator started successfully!")):O(Ae.error||"Failed to start orchestrator")}catch(Ae){console.error("Error starting orchestrator:",Ae),O("Error starting orchestrator. Please try again.")}finally{D(!1)}return}h(!0)},fe=async re=>{D(!0);try{const Ae=await fetch(`/api/teams/${s}/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:re})}),ze=await Ae.json();Ae.ok?(h(!1),X(),B(ze.message||"Team started successfully!")):O(ze.error||"Failed to start team")}catch(Ae){console.error("Error starting team:",Ae),O("Error starting team. Please try again.")}finally{D(!1)}},ee=()=>{y(!0)},ce=async re=>{if(r)try{const Ae=await fetch(`/api/teams/${r.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(re)});if(Ae.ok)X(),y(!1);else{const ze=await Ae.json();O(ze.error||"Failed to update team")}}catch(Ae){console.error("Error updating team:",Ae),O("Failed to update team")}},G=async()=>{S(!0);try{if((r==null?void 0:r.id)==="orchestrator"||(r==null?void 0:r.name)==="Orchestrator Team"){const re=await fetch("/api/orchestrator/stop",{method:"POST",headers:{"Content-Type":"application/json"}});if(re.ok)X(),z();else{const Ae=await re.json();O(Ae.error||"Failed to stop orchestrator")}}else(await fetch(`/api/teams/${s}/stop`,{method:"POST"})).ok&&X()}catch(re){console.error("Error stopping team:",re)}finally{S(!1)}},ie=async()=>{if(!r)return;if(r.id==="orchestrator"||r.name==="Orchestrator Team"){H("The Orchestrator Team cannot be deleted as it is required for system operations.");return}const re=async()=>{try{await fetch(`/api/teams/${s}/stop`,{method:"POST"});const Ae=await fetch(`/api/teams/${s}`,{method:"DELETE",headers:{"Content-Type":"application/json"}});if(Ae.ok)e("/teams");else{const ze=await Ae.text();O("Failed to delete team: "+ze)}}catch(Ae){console.error("Error deleting team:",Ae),O("Failed to delete team: "+(Ae instanceof Error?Ae.message:"Unknown error"))}};le(`Are you sure you want to delete team "${r.name}"?
383
383
 
384
384
  This will:
385
385
  • Delete the team and all its members
@@ -5209,7 +5209,7 @@ vTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;
5209
5209
 
5210
5210
  You are a...`,className:"font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:316,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Markdown supported. This prompt defines the agent's behavior."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:325,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:315,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:311,columnNumber:11},globalThis),i.jsxDEV("div",{className:"p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide",children:"Assigned Skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:333,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-2",children:[o==null?void 0:o.map(T=>i.jsxDEV("label",{className:`flex items-start gap-3 p-3 bg-background-dark border border-border-dark rounded-lg cursor-pointer hover:border-primary/50 transition-colors ${a.assignedSkills.includes(T.id)?"border-primary/50 bg-primary/5":""}`,children:[i.jsxDEV("input",{type:"checkbox",checked:a.assignedSkills.includes(T.id),onChange:()=>b(T.id),disabled:!1,className:"w-4 h-4 mt-0.5 rounded border-border-dark bg-background-dark text-primary focus:ring-primary focus:ring-offset-0 cursor-pointer"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:344,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark block",children:T.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:352,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark block mt-0.5",children:T.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:355,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:351,columnNumber:19},globalThis),a.assignedSkills.includes(T.id)&&i.jsxDEV(Mi,{className:"w-4 h-4 text-primary flex-shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:360,columnNumber:21},globalThis)]},T.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:338,columnNumber:17},globalThis)),(!o||o.length===0)&&i.jsxDEV("p",{className:"text-sm text-text-secondary-dark text-center py-6",children:"No skills available. Create skills in the Skills tab."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:365,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:336,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:332,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:224,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-dark bg-background-dark sticky bottom-0",children:[i.jsxDEV(ur,{variant:"secondary",onClick:e,type:"button",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:375,columnNumber:11},globalThis),i.jsxDEV(ur,{type:"submit",onClick:x,disabled:u,loading:u,children:u?"Saving...":y?"Create Role":"Save Changes"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:378,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:374,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:184,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RoleEditor.tsx",lineNumber:180,columnNumber:5},globalThis)},Whe={development:"bg-blue-500/15 text-blue-400",management:"bg-amber-500/15 text-amber-400",quality:"bg-emerald-500/15 text-emerald-400",design:"bg-pink-500/15 text-pink-400",sales:"bg-purple-500/15 text-purple-400",support:"bg-cyan-500/15 text-cyan-400",automation:"bg-orange-500/15 text-orange-400"},Khe=[{value:"",label:"All Categories"},{value:"development",label:"Development"},{value:"management",label:"Management"},{value:"quality",label:"Quality"},{value:"design",label:"Design"},{value:"sales",label:"Sales"},{value:"support",label:"Support"},{value:"automation",label:"Automation"}],Xhe=()=>{const{roles:s,isLoading:e,error:t,createRole:r,updateRole:n,deleteRole:o,refreshFromDisk:a}=_6(),[c,u]=V.useState(null),[d,h]=V.useState(!1),[f,y]=V.useState(!1),[v,N]=V.useState(""),[j,b]=V.useState(""),[x,D]=V.useState(!1),T=V.useMemo(()=>s?s.filter(R=>{if(j&&R.category!==j)return!1;if(v){const L=v.toLowerCase();return R.displayName.toLowerCase().includes(L)||R.description.toLowerCase().includes(L)||R.category.toLowerCase().includes(L)}return!0}):[],[s,v,j]),S=()=>{u(null),y(!0),h(!0)},k=R=>{u(R),y(!1),h(!0)},U=async(R,L)=>{if(L){window.alert("Built-in roles cannot be deleted");return}window.confirm("Are you sure you want to delete this role?")&&await o(R)},F=()=>{h(!1),u(null),y(!1)},M=async()=>{D(!0);try{await a()}finally{D(!1)}};return i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between gap-4",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Roles Management"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:146,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Create and manage AI agent roles"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:147,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:145,columnNumber:9},globalThis),i.jsxDEV(ur,{onClick:S,icon:tl,children:"New Role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:149,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:144,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-end gap-4",children:[i.jsxDEV("div",{className:"flex-1 w-full md:w-auto",children:[i.jsxDEV(Ur,{htmlFor:"category-filter",children:"Category"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:157,columnNumber:11},globalThis),i.jsxDEV(pc,{id:"category-filter",value:j,onChange:R=>b(R.target.value),children:Khe.map(R=>i.jsxDEV("option",{value:R.value,children:R.label},R.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:164,columnNumber:15},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:158,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:156,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex-1 w-full md:w-auto",children:[i.jsxDEV(Ur,{htmlFor:"search-filter",children:"Search"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:172,columnNumber:11},globalThis),i.jsxDEV(en,{id:"search-filter",type:"text",placeholder:"Search roles...",value:v,onChange:R=>N(R.target.value)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:173,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:171,columnNumber:9},globalThis),i.jsxDEV(ur,{variant:"secondary",onClick:M,disabled:e||x,icon:il,className:x?"animate-spin":"",children:x?"Refreshing...":"Refresh"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:182,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:155,columnNumber:7},globalThis),t&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("span",{children:["Error: ",t]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:196,columnNumber:11},globalThis),i.jsxDEV(ur,{variant:"outline",size:"sm",onClick:M,children:"Retry"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:197,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:195,columnNumber:9},globalThis),e&&T.length===0&&i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:206,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading roles..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:207,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:205,columnNumber:9},globalThis),!e&&T.length===0&&!t&&i.jsxDEV("div",{className:"text-center py-16",children:[i.jsxDEV("div",{className:"flex justify-center mb-4",children:i.jsxDEV(Nx,{className:"w-12 h-12 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:215,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:214,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-lg font-semibold mb-2",children:"No Roles Found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:217,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-6",children:v||j?"Try adjusting your filters":"Create your first role to get started"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:218,columnNumber:11},globalThis),!v&&!j&&i.jsxDEV(ur,{onClick:S,icon:tl,children:"Create Role"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:224,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:213,columnNumber:9},globalThis),T.length>0&&i.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:T.map(R=>i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-4 hover:border-primary/50 transition-colors flex flex-col",children:[i.jsxDEV("div",{className:"flex items-start justify-between gap-2 mb-3",children:[i.jsxDEV("h3",{className:"font-medium text-text-primary-dark",children:R.displayName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:241,columnNumber:17},globalThis),i.jsxDEV("span",{className:`text-xs font-medium px-2 py-0.5 rounded-full ${Whe[R.category]}`,children:h5[R.category]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:242,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:240,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark flex-grow mb-3 line-clamp-2",children:R.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:248,columnNumber:15},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:[R.skillCount," skills assigned"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:254,columnNumber:17},globalThis),R.isDefault&&i.jsxDEV("span",{className:"text-xs font-medium px-2 py-0.5 rounded-full bg-primary/15 text-primary",children:"Default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:258,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:253,columnNumber:15},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between pt-3 border-t border-border-dark mt-auto",children:[R.isBuiltin&&i.jsxDEV("span",{className:"text-xs text-text-secondary-dark italic",children:"Built-in"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:267,columnNumber:19},globalThis),!R.isBuiltin&&i.jsxDEV("span",{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:269,columnNumber:37},globalThis),i.jsxDEV("div",{className:"flex gap-2 ml-auto",children:[i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:()=>k(R.id),children:"Edit"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:271,columnNumber:19},globalThis),!R.isBuiltin&&i.jsxDEV(ur,{variant:"outline",size:"sm",onClick:()=>U(R.id,R.isBuiltin),className:"text-rose-400 hover:text-rose-300 hover:border-rose-400",icon:aj,children:"Delete"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:279,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:270,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:265,columnNumber:15},globalThis)]},R.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:235,columnNumber:13},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:233,columnNumber:9},globalThis),d&&i.jsxDEV(Ghe,{roleId:f?null:c,onClose:F,onSave:async R=>{f?await r(R):c&&await n(c,R)}},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:298,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/RolesTab.tsx",lineNumber:142,columnNumber:5},globalThis)},qhe=()=>[{value:"",label:"All Categories"},...N$.map(s=>({value:s,label:A6(s)}))],jH=qhe(),Zhe={development:"bg-blue-500/15 text-blue-400",design:"bg-pink-500/15 text-pink-400",communication:"bg-emerald-500/15 text-emerald-400",research:"bg-indigo-500/15 text-indigo-400","content-creation":"bg-amber-500/15 text-amber-400",automation:"bg-purple-500/15 text-purple-400",analysis:"bg-cyan-500/15 text-cyan-400",integration:"bg-rose-500/15 text-rose-400",management:"bg-orange-500/15 text-orange-400",monitoring:"bg-teal-500/15 text-teal-400",memory:"bg-violet-500/15 text-violet-400",system:"bg-slate-500/15 text-slate-400","task-management":"bg-sky-500/15 text-sky-400",quality:"bg-lime-500/15 text-lime-400"},Yhe={"claude-skill":"bg-purple-500/15 text-purple-400","web-page":"bg-blue-500/15 text-blue-400"},Jhe=()=>{var X;const{settings:s,updateSettings:e}=EF(),[t,r]=V.useState(null),[n,o]=V.useState(!1),[a,c]=V.useState("idle");V.useEffect(()=>{s&&(r(s.skills),o(!1))},[s]);const u=(z,se)=>{t&&(r({...t,[z]:se}),o(!0),c("idle"))},d=(z,se)=>{t&&(r({...t,browserProfile:{...t.browserProfile,[z]:se}}),o(!0),c("idle"))},h=async()=>{if(t){c("saving");try{await e({skills:t}),c("saved"),o(!1),setTimeout(()=>c("idle"),2e3)}catch{c("error")}}},[f,y]=V.useState(""),[v,N]=V.useState(""),[j,b]=V.useState(!1),[x,D]=V.useState(null),[T,S]=V.useState(null),k=V.useMemo(()=>({category:f||void 0,search:v||void 0}),[f,v]),{skills:U,loading:F,error:M,refresh:R,create:L,update:B,remove:O,selectSkill:H,selectedSkill:Y,clearSelection:le}=hA(k),te=V.useCallback(()=>{D(null),b(!0)},[]),ne=V.useCallback(async z=>{D(z),await H(z.id),b(!0)},[H]),q=V.useCallback(async z=>{try{x!=null&&x.id?await B(x.id,z):await L(z),b(!1),D(null)}catch(se){console.error("Failed to save skill:",se)}},[x,B,L]),Z=V.useCallback(async z=>{try{await O(z),S(null)}catch(se){console.error("Failed to delete skill:",se)}},[O]);return i.jsxDEV("div",{className:"space-y-6",children:[t&&i.jsxDEV("section",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-4",children:[i.jsxDEV(sy,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:228,columnNumber:13},globalThis),i.jsxDEV("h2",{className:"text-lg font-semibold",children:"Browser Automation"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:229,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:227,columnNumber:11},globalThis),i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"enableBrowserAutomation",className:"text-sm font-medium text-text-primary-dark cursor-pointer",children:"Enable Browser Automation"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:235,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-0.5",children:"Allow agents to use Playwright for browser tasks (navigate, click, screenshot, etc.)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:238,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:234,columnNumber:15},globalThis),i.jsxDEV("input",{type:"checkbox",id:"enableBrowserAutomation",checked:t.enableBrowserAutomation,onChange:z=>u("enableBrowserAutomation",z.target.checked),className:"w-5 h-5 rounded border-border-dark bg-background-dark text-primary focus:ring-primary focus:ring-offset-0 cursor-pointer"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:242,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:233,columnNumber:13},globalThis),t.enableBrowserAutomation&&t.browserProfile&&i.jsxDEV("div",{className:"pl-4 border-l-2 border-border-dark space-y-4",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"headless",className:"text-sm font-medium text-text-primary-dark cursor-pointer",children:"Headless Mode"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:255,columnNumber:21},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-0.5",children:"Run browser invisibly in the background (recommended)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:258,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:254,columnNumber:19},globalThis),i.jsxDEV("input",{type:"checkbox",id:"headless",checked:t.browserProfile.headless,onChange:z=>d("headless",z.target.checked),className:"w-5 h-5 rounded border-border-dark bg-background-dark text-primary focus:ring-primary focus:ring-offset-0 cursor-pointer"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:262,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:253,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"stealth",className:"text-sm font-medium text-text-primary-dark cursor-pointer",children:"Stealth Mode"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:273,columnNumber:21},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-0.5",children:"Use anti-detection features to avoid bot blocking (uses community fork)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:276,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:272,columnNumber:19},globalThis),i.jsxDEV("input",{type:"checkbox",id:"stealth",checked:t.browserProfile.stealth,onChange:z=>d("stealth",z.target.checked),className:"w-5 h-5 rounded border-border-dark bg-background-dark text-primary focus:ring-primary focus:ring-offset-0 cursor-pointer"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:280,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:271,columnNumber:17},globalThis),i.jsxDEV("div",{className:"grid grid-cols-2 gap-4",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"humanDelayMin",children:"Min Delay (ms)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:291,columnNumber:21},globalThis),i.jsxDEV(en,{id:"humanDelayMin",type:"number",min:0,max:t.browserProfile.humanDelayMaxMs,value:t.browserProfile.humanDelayMinMs,onChange:z=>d("humanDelayMinMs",parseInt(z.target.value,10)||0)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:292,columnNumber:21},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Minimum delay between actions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:300,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:290,columnNumber:19},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"humanDelayMax",children:"Max Delay (ms)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:303,columnNumber:21},globalThis),i.jsxDEV(en,{id:"humanDelayMax",type:"number",min:t.browserProfile.humanDelayMinMs,max:1e4,value:t.browserProfile.humanDelayMaxMs,onChange:z=>d("humanDelayMaxMs",parseInt(z.target.value,10)||0)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:304,columnNumber:21},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Maximum delay between actions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:312,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:302,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:289,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:252,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:232,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center justify-end gap-3 mt-6 pt-4 border-t border-border-dark",children:[a==="saved"&&i.jsxDEV("span",{className:"text-sm text-emerald-400 flex items-center gap-1",children:[i.jsxDEV(Mi,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:323,columnNumber:17},globalThis)," Saved"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:322,columnNumber:15},globalThis),a==="error"&&i.jsxDEV("span",{className:"text-sm text-rose-400 flex items-center gap-1",children:[i.jsxDEV(Rl,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:328,columnNumber:17},globalThis)," Save failed"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:327,columnNumber:15},globalThis),i.jsxDEV(ur,{onClick:h,disabled:!n||a==="saving",icon:ij,size:"sm",children:a==="saving"?"Saving...":"Save"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:331,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:320,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:226,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between gap-4",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Skills Management"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:346,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Create and manage AI agent skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:347,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:345,columnNumber:9},globalThis),i.jsxDEV(ur,{onClick:te,icon:tl,children:"New Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:349,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:344,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex flex-col md:flex-row items-end gap-4",children:[i.jsxDEV("div",{className:"flex-1 w-full md:w-auto",children:[i.jsxDEV(Ur,{htmlFor:"category-filter",children:"Category"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:357,columnNumber:11},globalThis),i.jsxDEV(pc,{id:"category-filter",value:f,onChange:z=>y(z.target.value),children:jH.map(z=>i.jsxDEV("option",{value:z.value,children:z.label},z.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:364,columnNumber:15},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:358,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:356,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex-1 w-full md:w-auto",children:[i.jsxDEV(Ur,{htmlFor:"search-filter",children:"Search"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:372,columnNumber:11},globalThis),i.jsxDEV(en,{id:"search-filter",type:"text",placeholder:"Search skills...",value:v,onChange:z=>N(z.target.value)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:373,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:371,columnNumber:9},globalThis),i.jsxDEV(ur,{variant:"secondary",onClick:R,disabled:F,icon:il,className:F?"animate-spin":"",children:F?"Refreshing...":"Refresh"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:382,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:355,columnNumber:7},globalThis),M&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("span",{children:["Error: ",M]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:396,columnNumber:11},globalThis),i.jsxDEV(ur,{variant:"outline",size:"sm",onClick:R,children:"Retry"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:397,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:395,columnNumber:9},globalThis),F&&U.length===0&&i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:406,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading skills..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:407,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:405,columnNumber:9},globalThis),!F&&U.length===0&&!M&&i.jsxDEV("div",{className:"text-center py-16",children:[i.jsxDEV("div",{className:"flex justify-center mb-4",children:i.jsxDEV(FX,{className:"w-12 h-12 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:415,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:414,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-lg font-semibold mb-2",children:"No Skills Found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:417,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-6",children:v||f?"Try adjusting your filters":"Create your first skill to get started"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:418,columnNumber:11},globalThis),!v&&!f&&i.jsxDEV(ur,{onClick:te,icon:tl,children:"Create Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:424,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:413,columnNumber:9},globalThis),U.length>0&&i.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:U.map(z=>i.jsxDEV(tfe,{skill:z,onEdit:()=>ne(z),onDelete:()=>S(z.id)},z.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:435,columnNumber:13},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:433,columnNumber:9},globalThis),j&&i.jsxDEV(rfe,{skill:Y||x,onSave:q,onClose:()=>{b(!1),D(null),le()}},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:447,columnNumber:9},globalThis),T&&i.jsxDEV(sfe,{skillId:T,skillName:((X=U.find(z=>z.id===T))==null?void 0:X.name)||"",onConfirm:()=>Z(T),onCancel:()=>S(null)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:460,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:223,columnNumber:5},globalThis)},$he=s=>{switch(s){case"claude-skill":return i.jsxDEV(RL,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:493,columnNumber:14},globalThis);case"web-page":return i.jsxDEV(ZB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:495,columnNumber:14},globalThis);default:return i.jsxDEV(RL,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:497,columnNumber:14},globalThis)}},Qhe=s=>{switch(s){case"warning":return i.jsxDEV(vc,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:507,columnNumber:14},globalThis);case"requirement":return i.jsxDEV(Rl,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:509,columnNumber:14},globalThis);case"info":default:return i.jsxDEV(Xk,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:512,columnNumber:14},globalThis)}},efe={info:{bg:"bg-blue-500/10",border:"border-blue-500/20",icon:"text-blue-400"},warning:{bg:"bg-amber-500/10",border:"border-amber-500/20",icon:"text-amber-400"},requirement:{bg:"bg-rose-500/10",border:"border-rose-500/20",icon:"text-rose-400"}},tfe=({skill:s,onEdit:e,onDelete:t})=>{const r=s.skillType||"claude-skill";return i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-4 hover:border-primary/50 transition-colors flex flex-col",children:[i.jsxDEV("div",{className:"flex items-start justify-between gap-2 mb-3",children:[i.jsxDEV("h3",{className:"font-medium text-text-primary-dark",children:s.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:535,columnNumber:9},globalThis),i.jsxDEV("span",{className:`text-xs font-medium px-2 py-0.5 rounded-full ${Zhe[s.category]}`,children:A6(s.category)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:536,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:534,columnNumber:7},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark flex-grow mb-3 line-clamp-2",children:s.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:542,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV("span",{className:`inline-flex items-center gap-1 text-xs font-medium px-2 py-0.5 rounded ${Yhe[r]}`,children:[$he(r),i.jsxDEV("span",{children:D$(r)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:550,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:548,columnNumber:9},globalThis),i.jsxDEV("span",{className:`text-xs font-medium px-2 py-0.5 rounded-full ${s.isEnabled?"bg-emerald-500/10 text-emerald-400":"bg-gray-500/10 text-gray-400"}`,children:s.isEnabled?"Enabled":"Disabled"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:552,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:547,columnNumber:7},globalThis),s.notices&&s.notices.length>0&&i.jsxDEV("div",{className:"space-y-2 mb-3",children:s.notices.map((n,o)=>{const a=efe[n.type];return i.jsxDEV("div",{className:`flex gap-2 p-2 rounded ${a.bg} border ${a.border}`,children:[i.jsxDEV("div",{className:`flex-shrink-0 ${a.icon}`,children:Qhe(n.type)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:568,columnNumber:17},globalThis),i.jsxDEV("div",{className:"text-xs space-y-0.5",children:[i.jsxDEV("span",{className:"font-medium text-text-primary-dark block",children:n.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:572,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark block",children:n.message},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:573,columnNumber:19},globalThis),n.link&&i.jsxDEV("a",{href:n.link,target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:[n.linkText||"Learn more",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:582,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:575,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:571,columnNumber:17},globalThis)]},o,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:567,columnNumber:15},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:563,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between pt-3 border-t border-border-dark mt-auto",children:[s.isBuiltin&&i.jsxDEV("span",{className:"text-xs text-text-secondary-dark italic",children:"Built-in"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:595,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex gap-1 ml-auto",children:[i.jsxDEV(wc,{icon:MX,onClick:e,variant:"ghost",size:"sm","aria-label":"Edit skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:598,columnNumber:11},globalThis),!s.isBuiltin&&i.jsxDEV(wc,{icon:aj,onClick:t,variant:"danger-ghost",size:"sm","aria-label":"Delete skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:606,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:597,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:593,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:532,columnNumber:5},globalThis)},rfe=({skill:s,onSave:e,onClose:t})=>{const r=(s==null?void 0:s.isBuiltin)??!1,[n,o]=V.useState({name:(s==null?void 0:s.name)||"",displayName:(s==null?void 0:s.name)||"",description:(s==null?void 0:s.description)||"",category:(s==null?void 0:s.category)||"development",promptContent:(s==null?void 0:s.promptContent)||"",triggers:[],tags:[]}),[a,c]=V.useState(!1),[u,d]=V.useState(null),h=async y=>{if(y.preventDefault(),d(null),!n.displayName.trim()){d("Display Name is required");return}if(!n.name.trim()){d("ID is required");return}if(!n.description.trim()){d("Description is required");return}c(!0);try{await e(n)}catch(v){d(v instanceof Error?v.message:"Failed to save skill")}finally{c(!1)}},f=y=>{y.target===y.currentTarget&&t()};return i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:f,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-lg m-4 max-h-[90vh] overflow-hidden flex flex-col",onClick:y=>y.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between p-6 border-b border-border-dark",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold text-text-primary-dark",children:s?"Edit Skill":"Create Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:709,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:s?"Modify skill configuration":"Configure a new skill for your agents"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:712,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:708,columnNumber:11},globalThis),i.jsxDEV(wc,{icon:jn,onClick:t,variant:"ghost","aria-label":"Close"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:716,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:707,columnNumber:9},globalThis),r&&s&&i.jsxDEV("div",{className:"mx-6 mt-4 bg-blue-500/10 border border-blue-500/30 text-blue-400 px-4 py-3 rounded-lg text-sm",children:[i.jsxDEV("strong",{children:"Built-in Skill:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:727,columnNumber:13},globalThis)," Changes will be saved as a user override. You can reset to defaults anytime."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:726,columnNumber:11},globalThis),u&&i.jsxDEV("div",{className:"mx-6 mt-4 bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg text-sm",children:u},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:733,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:h,className:"flex-1 overflow-y-auto p-6 space-y-4",children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"skill-display-name",required:!0,children:"Display Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:741,columnNumber:13},globalThis),i.jsxDEV(en,{id:"skill-display-name",type:"text",value:n.displayName,onChange:y=>o({...n,displayName:y.target.value}),placeholder:"Code Review",required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:742,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:740,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"skill-name",required:!0,children:"ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:753,columnNumber:13},globalThis),i.jsxDEV(en,{id:"skill-name",type:"text",value:n.name,onChange:y=>o({...n,name:y.target.value}),placeholder:"code-review",required:!0,disabled:!!s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:754,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Lowercase letters, numbers, and hyphens only"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:763,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:752,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"skill-description",required:!0,children:"Description"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:769,columnNumber:13},globalThis),i.jsxDEV(of,{id:"skill-description",value:n.description,onChange:y=>o({...n,description:y.target.value}),placeholder:"Describe what this skill does...",rows:3,required:!0},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:770,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:768,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"skill-category",children:"Category"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:781,columnNumber:13},globalThis),i.jsxDEV(pc,{id:"skill-category",value:n.category,onChange:y=>o({...n,category:y.target.value}),children:jH.filter(y=>y.value).map(y=>i.jsxDEV("option",{value:y.value,children:y.label},y.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:788,columnNumber:17},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:782,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:780,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"skill-prompt",children:"Instructions (Markdown)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:796,columnNumber:13},globalThis),i.jsxDEV(of,{id:"skill-prompt",value:n.promptContent,onChange:y=>o({...n,promptContent:y.target.value}),placeholder:`# Skill Instructions
5211
5211
 
5212
- Provide detailed instructions for this skill...`,rows:8,className:"font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:797,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:795,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:739,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-dark bg-background-dark",children:[i.jsxDEV(ur,{variant:"secondary",onClick:t,type:"button",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:810,columnNumber:11},globalThis),i.jsxDEV(ur,{type:"submit",onClick:h,disabled:a,loading:a,children:a?"Saving...":"Save Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:813,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:809,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:702,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:698,columnNumber:5},globalThis)},sfe=({skillName:s,onConfirm:e,onCancel:t})=>{const r=n=>{n.target===n.currentTarget&&t()};return i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:r,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-md m-4",onClick:n=>n.stopPropagation(),children:[i.jsxDEV("div",{className:"p-6 border-b border-border-dark",children:i.jsxDEV("h2",{className:"text-xl font-semibold text-text-primary-dark",children:"Delete Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:873,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:872,columnNumber:9},globalThis),i.jsxDEV("div",{className:"p-6",children:i.jsxDEV("p",{className:"text-text-secondary-dark",children:["Are you sure you want to delete ",i.jsxDEV("strong",{className:"text-text-primary-dark",children:s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:879,columnNumber:45},globalThis),"? This action cannot be undone."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:878,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:877,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-dark bg-background-dark rounded-b-xl",children:[i.jsxDEV(ur,{variant:"secondary",onClick:t,children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:886,columnNumber:11},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:e,children:"Delete"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:889,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:885,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:867,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:863,columnNumber:5},globalThis)},nfe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),h=V.useCallback(async()=>{var N,j,b,x,D,T,S;try{c(null);const U=await(await fetch("/api/slack/status")).json();U.success?e({connected:((N=U.data)==null?void 0:N.isConfigured)||!1,workspaceName:(j=U.data)==null?void 0:j.workspaceName,botName:(b=U.data)==null?void 0:b.botName,channels:(x=U.data)==null?void 0:x.channels,lastMessageAt:(D=U.data)==null?void 0:D.lastMessageAt,messagesSent:(T=U.data)==null?void 0:T.messagesSent,messagesReceived:(S=U.data)==null?void 0:S.messagesReceived}):e({connected:!1,error:U.error})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=N=>{const{name:j,value:b}=N.target;d(x=>({...x,[j]:b}))},y=async N=>{N.preventDefault(),o(!0),c(null);try{const j=await fetch("/api/slack/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({botToken:u.botToken,appToken:u.appToken,signingSecret:u.signingSecret,defaultChannelId:u.defaultChannel||void 0})}),b=await j.json();if(!j.ok||!b.success)throw new Error(b.error||"Connection failed");d({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),await h()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Slack")}finally{o(!1)}},v=async()=>{if(window.confirm("Are you sure you want to disconnect from Slack?"))try{c(null);const N=await fetch("/api/slack/disconnect",{method:"POST"}),j=await N.json();if(!N.ok||!j.success)throw new Error(j.error||"Disconnect failed");await h()}catch(N){c(N instanceof Error?N.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:168,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading Slack status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:169,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:167,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Slack Integration"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:178,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect Slack to communicate with the orchestrator from your phone or desktop Slack app."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:179,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:177,columnNumber:7},globalThis),a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:188,columnNumber:13},globalThis),i.jsxDEV("span",{children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:189,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:187,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:195,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:191,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:186,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:205,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium",children:"Connected to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:206,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:204,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:211,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-3",children:[s.workspaceName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Workspace"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:217,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.workspaceName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:218,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:216,columnNumber:17},globalThis),s.botName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:223,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:224,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:222,columnNumber:17},globalThis),s.channels&&s.channels.length>0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Channels"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:229,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.channels.join(", ")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:230,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:228,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:235,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:236,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:234,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:241,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:242,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:240,columnNumber:17},globalThis),s.lastMessageAt&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Last Activity"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:247,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:new Date(s.lastMessageAt).toLocaleString()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:248,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:246,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:214,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:210,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:h,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:258,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:v,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:261,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:257,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:202,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:271,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium",children:"Not connected to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:272,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:270,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Setup Instructions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:277,columnNumber:13},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-3 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Create a Slack App at"," ",i.jsxDEV("a",{href:"https://api.slack.com/apps",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["api.slack.com/apps",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:290,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:283,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:281,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Enable Socket Mode in your app settings and create an App Token (starts with xapp-)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:293,columnNumber:15},globalThis),i.jsxDEV("li",{children:["Add Bot Token Scopes under OAuth & Permissions:",i.jsxDEV("ul",{className:"list-disc list-inside ml-4 mt-1.5 space-y-1",children:[i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"chat:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:297,columnNumber:23},globalThis)," - Send messages"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:297,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"channels:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:298,columnNumber:23},globalThis)," - View channels"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:298,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"app_mentions:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:299,columnNumber:23},globalThis)," - Respond to mentions"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:299,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"im:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:300,columnNumber:23},globalThis),", ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"im:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:300,columnNumber:106},globalThis)," - Direct messages"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:300,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"files:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:301,columnNumber:23},globalThis)," - Receive images from Slack"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:301,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"files:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:302,columnNumber:23},globalThis)," - Upload images to Slack"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:302,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"reactions:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:303,columnNumber:23},globalThis)," - Typing/completion indicators (optional)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:303,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:296,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-amber-400/80 mt-1.5 ml-4",children:["Note: Adding ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1 py-0.5 rounded",children:"files:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:306,columnNumber:32},globalThis)," and ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1 py-0.5 rounded",children:"files:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:306,columnNumber:119},globalThis)," scopes requires reinstalling the app to your workspace."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:305,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:294,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Install the app to your workspace"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:309,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Copy the Bot Token (xoxb-...), App Token (xapp-...), and Signing Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:310,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:280,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:276,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:y,className:"bg-surface-dark border border-border-dark rounded-lg p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connect to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:316,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"botToken",required:!0,children:"Bot Token (xoxb-...)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:321,columnNumber:15},globalThis),i.jsxDEV(en,{id:"botToken",name:"botToken",type:"password",value:u.botToken,onChange:f,placeholder:"xoxb-your-bot-token",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:322,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:320,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"appToken",required:!0,children:"App Token (xapp-...)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:335,columnNumber:15},globalThis),i.jsxDEV(en,{id:"appToken",name:"appToken",type:"password",value:u.appToken,onChange:f,placeholder:"xapp-your-app-token",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:336,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:334,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"signingSecret",required:!0,children:"Signing Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:349,columnNumber:15},globalThis),i.jsxDEV(en,{id:"signingSecret",name:"signingSecret",type:"password",value:u.signingSecret,onChange:f,placeholder:"Your signing secret",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:350,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:348,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"defaultChannel",children:"Default Channel (optional)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:363,columnNumber:15},globalThis),i.jsxDEV(en,{id:"defaultChannel",name:"defaultChannel",type:"text",value:u.defaultChannel,onChange:f,placeholder:"C1234567890 or #crewly"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:364,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Channel ID or name where notifications will be sent by default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:372,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:362,columnNumber:13},globalThis),i.jsxDEV("div",{className:"pt-2",children:i.jsxDEV(ur,{type:"submit",disabled:n||!u.botToken||!u.appToken||!u.signingSecret,loading:n,fullWidth:!0,children:n?"Connecting...":"Connect to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:378,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:377,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:315,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:268,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:175,columnNumber:5},globalThis)},ofe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),u=V.useCallback(async()=>{var f,y,v,N,j,b;try{c(null);const D=await(await fetch("/api/whatsapp/status")).json();D.success?e({connected:((f=D.data)==null?void 0:f.isConfigured)||((y=D.data)==null?void 0:y.connected)||!1,phoneNumber:(v=D.data)==null?void 0:v.phoneNumber,qrCode:(N=D.data)==null?void 0:N.qrCode,messagesSent:(j=D.data)==null?void 0:j.messagesSent,messagesReceived:(b=D.data)==null?void 0:b.messagesReceived}):e({connected:!1,error:D.error})}catch{e({connected:!1,error:"Failed to fetch WhatsApp status"})}finally{r(!1)}},[]);V.useEffect(()=>{u()},[u]);const d=async()=>{var f;o(!0),c(null);try{const y=await fetch("/api/whatsapp/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),v=await y.json();if(!y.ok||!v.success)throw new Error(v.error||"Connection failed");(f=v.data)!=null&&f.qrCode&&e(N=>({...N,qrCode:v.data.qrCode})),await u()}catch(y){c(y instanceof Error?y.message:"Failed to connect WhatsApp")}finally{o(!1)}},h=async()=>{if(window.confirm("Are you sure you want to disconnect from WhatsApp?"))try{c(null);const f=await fetch("/api/whatsapp/disconnect",{method:"POST"}),y=await f.json();if(!f.ok||!y.success)throw new Error(y.error||"Disconnect failed");await u()}catch(f){c(f instanceof Error?f.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-8",children:[i.jsxDEV("div",{className:"w-8 h-8 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:142,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"Loading WhatsApp status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:143,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:141,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-5",children:[a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:154,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-sm",children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:155,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:153,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:161,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:157,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:152,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:171,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium text-sm",children:"Connected to WhatsApp"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:172,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:170,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:177,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-2",children:[s.phoneNumber&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Phone Number"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:183,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.phoneNumber},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:184,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:182,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:189,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:190,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:188,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:195,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:196,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:194,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:180,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:176,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:u,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:204,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:h,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:207,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:203,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:168,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-5",children:s.qrCode?i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-6 flex flex-col items-center gap-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide",children:"Scan QR Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:218,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark text-center max-w-sm",children:"Open WhatsApp on your phone, go to Settings > Linked Devices > Link a Device, then scan this QR code."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:221,columnNumber:15},globalThis),i.jsxDEV("div",{className:"bg-white p-4 rounded-lg",children:i.jsxDEV("img",{src:`https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(s.qrCode)}`,alt:"WhatsApp QR Code",className:"w-48 h-48","data-testid":"whatsapp-qr-code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:225,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:224,columnNumber:15},globalThis),i.jsxDEV(ur,{variant:"secondary",onClick:u,icon:il,children:"Refresh QR Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:232,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:217,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-4",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:240,columnNumber:17},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium text-sm",children:"Not connected to WhatsApp"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:241,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:239,columnNumber:15},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:"How to Connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:246,columnNumber:17},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:'Click "Connect WhatsApp" below to generate a QR code'},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:250,columnNumber:19},globalThis),i.jsxDEV("li",{children:"Open WhatsApp on your phone"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:251,columnNumber:19},globalThis),i.jsxDEV("li",{children:["Go to ",i.jsxDEV("strong",{children:"Settings"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:29},globalThis)," > ",i.jsxDEV("strong",{children:"Linked Devices"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:60},globalThis)," > ",i.jsxDEV("strong",{children:"Link a Device"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:97},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:19},globalThis),i.jsxDEV("li",{children:"Scan the QR code displayed here"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:253,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:249,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:245,columnNumber:15},globalThis),i.jsxDEV(ur,{onClick:d,disabled:n,loading:n,icon:WV,fullWidth:!0,children:n?"Initializing...":"Connect WhatsApp"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:257,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:238,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:214,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:149,columnNumber:5},globalThis)},ife=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState("pubsub"),[h,f]=V.useState("service_account"),[y,v]=V.useState(""),[N,j]=V.useState(""),[b,x]=V.useState(""),[D,T]=V.useState(""),[S,k]=V.useState(!1),[U,F]=V.useState(null),[M,R]=V.useState(!1),[L,B]=V.useState(null),[O,H]=V.useState(""),[Y,le]=V.useState(""),te=V.useRef(null),ne=V.useCallback(async()=>{var ee;try{c(null);const G=await(await fetch("/api/messengers/status")).json();if(G.success&&Array.isArray(G.data)){const ie=G.data.find(De=>De.platform==="google-chat");if(ie){let De=ie.details||{};if(ie.connected&&((ee=ie.details)==null?void 0:ee.mode)==="pubsub")try{const Re=await(await fetch("/api/messengers/google-chat/status")).json();Re.success&&(De={...De,...Re.data})}catch{}e({connected:ie.connected,mode:De.mode,authMode:De.authMode,serviceAccountEmail:De.serviceAccountEmail,pullActive:De.pullActive,pullPaused:De.pullPaused,subscriptionName:De.subscriptionName,projectId:De.projectId,consecutiveFailures:De.consecutiveFailures,lastPullAt:De.lastPullAt})}}}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{ne()},[ne]),V.useEffect(()=>(s.connected&&s.mode==="pubsub"&&(te.current=setInterval(()=>{ne()},1e4)),()=>{te.current&&(clearInterval(te.current),te.current=null)}),[s.connected,s.mode,ne]);const q=async ee=>{ee.preventDefault(),o(!0),c(null);try{let ce;u==="webhook"?ce={webhookUrl:y}:h==="adc"?(ce={authMode:"adc"},u==="pubsub"&&(ce.projectId=b,ce.subscriptionName=D),Y.trim()&&(ce.serviceAccountEmail=Y.trim())):u==="service-account"?ce={serviceAccountKey:N}:ce={serviceAccountKey:N,projectId:b,subscriptionName:D};const G=await fetch("/api/messengers/google-chat/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ce)}),ie=await G.json();if(!G.ok||!ie.success)throw new Error(ie.error||"Connection failed");v(""),j(""),x(""),T(""),le(""),await ne()}catch(ce){c(ce instanceof Error?ce.message:"Failed to connect")}finally{o(!1)}},Z=async()=>{if(window.confirm("Are you sure you want to disconnect from Google Chat?"))try{c(null);const ee=await fetch("/api/messengers/google-chat/disconnect",{method:"POST"}),ce=await ee.json();if(!ee.ok||!ce.success)throw new Error(ce.error||"Disconnect failed");await ne()}catch(ee){c(ee instanceof Error?ee.message:"Failed to disconnect")}},X=async()=>{k(!0),F(null);try{const ee=await fetch("/api/messengers/google-chat/pull",{method:"POST"}),ce=await ee.json();if(!ee.ok||!ce.success)throw new Error(ce.error||"Pull failed");const G=ce.messagesReceived||0;F(G>0?`Pulled ${G} message${G!==1?"s":""}`:"No new messages"),await ne()}catch(ee){F(ee instanceof Error?ee.message:"Pull failed")}finally{k(!1)}},z=async()=>{if(O.trim()){R(!0),B(null);try{const ee=await fetch("/api/messengers/google-chat/test-send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({space:O.trim(),text:"Test message from Crewly"})}),ce=await ee.json();if(!ee.ok||!ce.success)throw new Error(ce.error||"Test send failed");B("Message sent successfully")}catch(ee){B(ee instanceof Error?ee.message:"Test send failed")}finally{R(!1)}}},se=ee=>{switch(ee){case"webhook":return"Webhook";case"service-account":return"Service Account";case"pubsub":return"Pub/Sub (Bidirectional)";default:return"Unknown"}},ae=ee=>ee==="adc"?"Application Default Credentials":"Service Account Key",fe=()=>u==="webhook"?!!y:h==="adc"?u==="pubsub"?!!(b&&D):!0:u==="service-account"?!!N:!!(N&&b&&D);return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-8",children:[i.jsxDEV("div",{className:"w-8 h-8 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:305,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"Loading Google Chat status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:306,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:304,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-5",children:[a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:317,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-sm",children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:318,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:316,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:321,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:320,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:315,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:330,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium text-sm",children:"Connected to Google Chat"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:331,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:329,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:335,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-2",children:[i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Mode"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:340,columnNumber:17},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:se(s.mode)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:341,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:339,columnNumber:15},globalThis),(s.mode==="pubsub"||s.mode==="service-account")&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Auth"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:345,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:ae(s.authMode)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:346,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:344,columnNumber:17},globalThis),s.serviceAccountEmail&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Impersonating"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:351,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-mono truncate max-w-[280px]","data-testid":"sa-email-display",children:s.serviceAccountEmail},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:352,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:350,columnNumber:17},globalThis),s.mode==="pubsub"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Project ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:358,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-mono",children:s.projectId},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:359,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:357,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Subscription"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:362,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-mono text-text-secondary-dark/80 truncate max-w-[240px]",children:s.subscriptionName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:363,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:361,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Pull Loop"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:366,columnNumber:21},globalThis),i.jsxDEV("span",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:`w-2 h-2 rounded-full ${s.pullPaused?"bg-amber-400":s.pullActive?"bg-emerald-400 animate-pulse":"bg-gray-500"}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:368,columnNumber:23},globalThis),i.jsxDEV("span",{className:`text-sm font-medium ${s.pullPaused?"text-amber-400":s.pullActive?"text-emerald-400":"text-text-secondary-dark"}`,children:s.pullPaused?"Paused (errors)":s.pullActive?"Running":"Stopped"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:369,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:367,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:365,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Last Pull"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:375,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-mono","data-testid":"last-pull-at",children:s.lastPullAt?new Date(s.lastPullAt).toLocaleTimeString():"Never"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:376,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:374,columnNumber:19},globalThis),(s.consecutiveFailures??0)>0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Consecutive Failures"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:382,columnNumber:23},globalThis),i.jsxDEV("span",{className:"text-sm font-medium text-amber-400","data-testid":"consecutive-failures",children:s.consecutiveFailures},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:383,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:381,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:356,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:338,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:334,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[s.mode==="pubsub"&&i.jsxDEV(ur,{variant:"primary",onClick:X,disabled:S,loading:S,icon:GV,"data-testid":"pull-now-btn",children:S?"Pulling...":"Pull Now"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:393,columnNumber:15},globalThis),i.jsxDEV(ur,{variant:"secondary",onClick:ne,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:404,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:Z,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:407,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:391,columnNumber:11},globalThis),U&&i.jsxDEV("div",{className:`text-sm px-3 py-2 rounded-lg ${U.startsWith("Pulled")?"bg-emerald-500/10 text-emerald-400":U==="No new messages"?"bg-blue-500/10 text-blue-400":"bg-rose-500/10 text-rose-400"}`,"data-testid":"pull-result",children:U},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:414,columnNumber:13},globalThis),(s.mode==="pubsub"||s.mode==="service-account")&&i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-4 space-y-3",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide",children:"Test Send"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:426,columnNumber:15},globalThis),i.jsxDEV("div",{className:"flex items-end gap-2",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV(Ur,{htmlFor:"test-send-space",children:"Space Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:429,columnNumber:19},globalThis),i.jsxDEV(en,{id:"test-send-space",name:"testSendSpace",type:"text",value:O,onChange:ee=>H(ee.target.value),placeholder:"spaces/AAAA...",autoComplete:"off","data-testid":"test-send-space"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:430,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:428,columnNumber:17},globalThis),i.jsxDEV(ur,{variant:"primary",onClick:z,disabled:M||!O.trim(),loading:M,icon:t9,"data-testid":"test-send-btn",children:M?"Sending...":"Test Send"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:441,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:427,columnNumber:15},globalThis),L&&i.jsxDEV("div",{className:`text-sm px-3 py-2 rounded-lg ${L==="Message sent successfully"?"bg-emerald-500/10 text-emerald-400":"bg-rose-500/10 text-rose-400"}`,"data-testid":"test-send-result",children:L},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:453,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:425,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:328,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:467,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium text-sm",children:"Not connected to Google Chat"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:468,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:466,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("button",{className:`px-4 py-2 text-sm rounded-lg border transition-colors ${u==="pubsub"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>d("pubsub"),"data-testid":"mode-pubsub",children:"Pub/Sub (Recommended)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:473,columnNumber:13},globalThis),i.jsxDEV("button",{className:`px-4 py-2 text-sm rounded-lg border transition-colors ${u==="webhook"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>d("webhook"),"data-testid":"mode-webhook",children:"Webhook"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:484,columnNumber:13},globalThis),i.jsxDEV("button",{className:`px-4 py-2 text-sm rounded-lg border transition-colors ${u==="service-account"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>d("service-account"),"data-testid":"mode-service-account",children:"Service Account"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:495,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:472,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:u==="pubsub"?"Pub/Sub Setup (Bidirectional)":u==="webhook"?"Webhook Setup (Send-only)":"Service Account Setup (Send-only)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:510,columnNumber:13},globalThis),u==="pubsub"?i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Go to ",i.jsxDEV("strong",{children:"Google Cloud Console"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:517,columnNumber:27},globalThis)," > ",i.jsxDEV("strong",{children:"APIs & Services"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:517,columnNumber:70},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:517,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Enable the ",i.jsxDEV("strong",{children:"Google Chat API"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:518,columnNumber:32},globalThis)," and ",i.jsxDEV("strong",{children:"Cloud Pub/Sub API"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:518,columnNumber:69},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:518,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Create a ",i.jsxDEV("strong",{children:"Service Account"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:519,columnNumber:30},globalThis)," and download the JSON key"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:519,columnNumber:17},globalThis),i.jsxDEV("li",{children:["In the Chat API settings, create a ",i.jsxDEV("strong",{children:"Chat App"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:520,columnNumber:56},globalThis)," and select ",i.jsxDEV("strong",{children:"Cloud Pub/Sub"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:520,columnNumber:93},globalThis)," as the connection type"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:520,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Enter a ",i.jsxDEV("strong",{children:"Pub/Sub topic name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:521,columnNumber:29},globalThis)," (e.g., ",i.jsxDEV("code",{className:"bg-surface-dark px-1 rounded",children:"projects/my-project/topics/google-chat-events"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:521,columnNumber:72},globalThis),")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:521,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Create a ",i.jsxDEV("strong",{children:"Pub/Sub subscription"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:522,columnNumber:30},globalThis)," for that topic (pull mode)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:522,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Grant the service account ",i.jsxDEV("strong",{children:"Pub/Sub Subscriber"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:523,columnNumber:47},globalThis)," role on the subscription"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:523,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Fill in the details below"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:524,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:516,columnNumber:15},globalThis):u==="webhook"?i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:"Open your Google Chat space"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:528,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Click the space name > ",i.jsxDEV("strong",{children:"Apps & integrations"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:529,columnNumber:47},globalThis)," > ",i.jsxDEV("strong",{children:"Manage webhooks"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:529,columnNumber:89},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:529,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Create a new webhook and copy the URL"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:530,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Paste the webhook URL below"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:531,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:527,columnNumber:15},globalThis):i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Go to the ",i.jsxDEV("strong",{children:"Google Cloud Console"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:535,columnNumber:31},globalThis)," > ",i.jsxDEV("strong",{children:"APIs & Services"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:535,columnNumber:74},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:535,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Enable the ",i.jsxDEV("strong",{children:"Google Chat API"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:536,columnNumber:32},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:536,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Create a ",i.jsxDEV("strong",{children:"Service Account"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:537,columnNumber:30},globalThis)," and download the JSON key"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:537,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Grant the service account access to your Chat space"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:538,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Paste the JSON key contents below"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:539,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:534,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:509,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:q,className:"space-y-4",children:[u==="webhook"?i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-webhook",required:!0,children:"Webhook URL"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:548,columnNumber:17},globalThis),i.jsxDEV(en,{id:"gchat-webhook",name:"webhookUrl",type:"url",value:y,onChange:ee=>v(ee.target.value),placeholder:"https://chat.googleapis.com/v1/spaces/...",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:549,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:547,columnNumber:15},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{children:"Authentication Method"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:564,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex gap-2 mt-1",children:[i.jsxDEV("button",{type:"button",className:`px-3 py-1.5 text-xs rounded-lg border transition-colors ${h==="service_account"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>f("service_account"),"data-testid":"auth-service-account",children:"Service Account Key"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:566,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",className:`px-3 py-1.5 text-xs rounded-lg border transition-colors ${h==="adc"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>f("adc"),"data-testid":"auth-adc",children:"Application Default Credentials"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:578,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:565,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:563,columnNumber:17},globalThis),u==="pubsub"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-project-id",required:!0,children:"GCP Project ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:596,columnNumber:23},globalThis),i.jsxDEV(en,{id:"gchat-project-id",name:"projectId",type:"text",value:b,onChange:ee=>x(ee.target.value),placeholder:"my-gcp-project-id",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:597,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:595,columnNumber:21},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-subscription",required:!0,children:"Pub/Sub Subscription Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:609,columnNumber:23},globalThis),i.jsxDEV(en,{id:"gchat-subscription",name:"subscriptionName",type:"text",value:D,onChange:ee=>T(ee.target.value),placeholder:"google-chat-events-sub",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:610,columnNumber:23},globalThis),i.jsxDEV("p",{className:"mt-1 text-xs text-text-secondary-dark/70",children:"Just the subscription name, not the full resource path"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:620,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:608,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:594,columnNumber:19},globalThis),h==="adc"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"bg-blue-500/10 border border-blue-500/30 rounded-lg p-4",children:[i.jsxDEV("p",{className:"text-sm text-blue-300 mb-2",children:"Using Application Default Credentials from your local gcloud CLI."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:630,columnNumber:23},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-2",children:"Run this command if you haven't already:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:633,columnNumber:23},globalThis),i.jsxDEV("code",{className:"block bg-background-dark px-3 py-2 rounded text-xs text-text-primary-dark font-mono break-all",children:"gcloud auth application-default login --scopes=https://www.googleapis.com/auth/chat.bot,https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/cloud-platform"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:636,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:629,columnNumber:21},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-sa-email",children:"Service Account Email (for impersonation)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:641,columnNumber:23},globalThis),i.jsxDEV(en,{id:"gchat-sa-email",name:"serviceAccountEmail",type:"email",value:Y,onChange:ee=>le(ee.target.value),placeholder:"chatbot@project.iam.gserviceaccount.com",autoComplete:"off","data-testid":"sa-email-input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:642,columnNumber:23},globalThis),i.jsxDEV("p",{className:"mt-1 text-xs text-text-secondary-dark/70",children:"Required for sending messages. Your user needs the Service Account Token Creator IAM role."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:652,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:640,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:628,columnNumber:19},globalThis):i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-sa-key",required:!0,children:"Service Account Key (JSON)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:659,columnNumber:21},globalThis),i.jsxDEV("textarea",{id:"gchat-sa-key",name:"serviceAccountKey",value:N,onChange:ee=>j(ee.target.value),placeholder:'{"type": "service_account", "project_id": "...", ...}',required:!0,rows:6,className:"w-full px-3 py-2 bg-background-dark border border-border-dark rounded-lg text-sm text-text-primary-dark placeholder:text-text-secondary-dark/50 focus:outline-none focus:ring-2 focus:ring-primary/50 font-mono"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:660,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:658,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:561,columnNumber:15},globalThis),i.jsxDEV(ur,{type:"submit",disabled:n||!fe(),loading:n,fullWidth:!0,children:n?"Connecting...":"Connect Google Chat"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:675,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:545,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:465,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:312,columnNumber:5},globalThis)},afe="/api/messengers/status",lfe="/api/messengers/telegram/connect",cfe="/api/messengers/telegram/disconnect",ufe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState({botToken:"",allowedChats:""}),h=V.useCallback(async()=>{var N,j,b,x;try{c(null);const T=await(await fetch(afe)).json();if(T.success&&Array.isArray(T.data)){const S=T.data.find(k=>k.platform==="telegram");e(S?{connected:S.connected,botName:(N=S.details)==null?void 0:N.botName,botId:(j=S.details)==null?void 0:j.botId,messagesSent:(b=S.details)==null?void 0:b.messagesSent,messagesReceived:(x=S.details)==null?void 0:x.messagesReceived}:{connected:!1})}else e({connected:!1,error:T.error||"Failed to fetch status"})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=N=>{const{name:j,value:b}=N.target;d(x=>({...x,[j]:b}))},y=async N=>{N.preventDefault(),o(!0),c(null);try{const j={token:u.botToken};u.allowedChats.trim()&&(j.allowedChats=u.allowedChats.split(",").map(D=>D.trim()).filter(Boolean));const b=await fetch(lfe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)}),x=await b.json();if(!b.ok||!x.success)throw new Error(x.error||"Connection failed");d({botToken:"",allowedChats:""}),await h()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Telegram")}finally{o(!1)}},v=async()=>{if(window.confirm("Are you sure you want to disconnect from Telegram?"))try{c(null);const N=await fetch(cfe,{method:"POST"}),j=await N.json();if(!N.ok||!j.success)throw new Error(j.error||"Disconnect failed");await h()}catch(N){c(N instanceof Error?N.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:184,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading Telegram status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:185,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:183,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Telegram Integration"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:194,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect a Telegram bot to communicate with the orchestrator via Telegram."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:195,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:193,columnNumber:7},globalThis),a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:204,columnNumber:13},globalThis),i.jsxDEV("span",{children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:205,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:203,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1","aria-label":"×",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:208,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:207,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:202,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:217,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium",children:"Connected to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:218,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:216,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:222,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-3",children:[s.botName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:228,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:229,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:227,columnNumber:17},globalThis),s.botId&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:234,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botId},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:235,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:233,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:240,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:241,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:239,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:246,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:247,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:245,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:225,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:221,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:h,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:254,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:v,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:257,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:253,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:215,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:266,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium",children:"Not connected to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:267,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:265,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Setup Instructions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:271,columnNumber:13},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-3 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Open Telegram and search for"," ",i.jsxDEV("a",{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["@BotFather",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:284,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:277,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:275,columnNumber:15},globalThis),i.jsxDEV("li",{children:["Send ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"/newbot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:288,columnNumber:22},globalThis)," and follow the prompts to create a bot"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:287,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Copy the HTTP API token provided by BotFather"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:290,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Paste the token below and click Connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:291,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:274,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:270,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:y,className:"bg-surface-dark border border-border-dark rounded-lg p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connect to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:296,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"botToken",required:!0,children:"Bot Token"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:301,columnNumber:15},globalThis),i.jsxDEV(en,{id:"botToken",name:"botToken",type:"password",value:u.botToken,onChange:f,placeholder:"123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:302,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"The HTTP API token from @BotFather"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:312,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:300,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"allowedChats",children:"Allowed Chats (optional)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:318,columnNumber:15},globalThis),i.jsxDEV(en,{id:"allowedChats",name:"allowedChats",type:"text",value:u.allowedChats,onChange:f,placeholder:"-1001234567890, -1009876543210"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:319,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Comma-separated chat IDs to restrict the bot to specific groups"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:327,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:317,columnNumber:13},globalThis),i.jsxDEV("div",{className:"pt-2",children:i.jsxDEV(ur,{type:"submit",disabled:n||!u.botToken,loading:n,fullWidth:!0,children:n?"Connecting...":"Connect to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:333,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:332,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:295,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:264,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:191,columnNumber:5},globalThis)},dfe="/api/messengers/status",mfe="/api/messengers/discord/connect",hfe="/api/messengers/discord/disconnect",ffe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState({token:"",allowedChannels:""}),h=V.useCallback(async()=>{var N,j,b,x;try{c(null);const T=await(await fetch(dfe)).json();if(T.success&&Array.isArray(T.data)){const S=T.data.find(k=>k.platform==="discord");e(S?{connected:S.connected,botName:(N=S.details)==null?void 0:N.botName,botId:(j=S.details)==null?void 0:j.botId,messagesSent:(b=S.details)==null?void 0:b.messagesSent,messagesReceived:(x=S.details)==null?void 0:x.messagesReceived}:{connected:!1})}else e({connected:!1,error:T.error||"Failed to fetch status"})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=N=>{const{name:j,value:b}=N.target;d(x=>({...x,[j]:b}))},y=async N=>{N.preventDefault(),o(!0),c(null);try{const j={token:u.token};u.allowedChannels.trim()&&(j.allowedChannels=u.allowedChannels.split(",").map(D=>D.trim()).filter(Boolean));const b=await fetch(mfe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)}),x=await b.json();if(!b.ok||!x.success)throw new Error(x.error||"Connection failed");d({token:"",allowedChannels:""}),await h()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Discord")}finally{o(!1)}},v=async()=>{if(window.confirm("Are you sure you want to disconnect from Discord?"))try{c(null);const N=await fetch(hfe,{method:"POST"}),j=await N.json();if(!N.ok||!j.success)throw new Error(j.error||"Disconnect failed");await h()}catch(N){c(N instanceof Error?N.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:184,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading Discord status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:185,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:183,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Discord Integration"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:194,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect a Discord bot to communicate with the orchestrator via your Discord server."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:195,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:193,columnNumber:7},globalThis),a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:204,columnNumber:13},globalThis),i.jsxDEV("span",{children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:205,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:203,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1","aria-label":"×",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:208,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:207,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:202,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:217,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium",children:"Connected to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:218,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:216,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:222,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-3",children:[s.botName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:228,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:229,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:227,columnNumber:17},globalThis),s.botId&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:234,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botId},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:235,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:233,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:240,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:241,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:239,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:246,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:247,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:245,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:225,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:221,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:h,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:254,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:v,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:257,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:253,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:215,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:266,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium",children:"Not connected to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:267,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:265,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Setup Instructions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:271,columnNumber:13},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-3 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Go to the"," ",i.jsxDEV("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["Discord Developer Portal",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:284,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:277,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:275,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Create a New Application and navigate to the Bot section"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:287,columnNumber:15},globalThis),i.jsxDEV("li",{children:'Click "Reset Token" to generate a bot token and copy it'},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:288,columnNumber:15},globalThis),i.jsxDEV("li",{children:["Under OAuth2 → URL Generator, select the"," ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"bot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:291,columnNumber:17},globalThis)," scope and grant permissions:",i.jsxDEV("ul",{className:"list-disc list-inside ml-4 mt-1.5 space-y-1",children:[i.jsxDEV("li",{children:i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"Send Messages"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:293,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:293,columnNumber:19},globalThis),i.jsxDEV("li",{children:i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"Read Message History"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:294,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:294,columnNumber:19},globalThis),i.jsxDEV("li",{children:i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"Add Reactions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:295,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:295,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:292,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:289,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Use the generated URL to invite the bot to your server"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:298,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Paste the bot token below and click Connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:299,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:274,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:270,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:y,className:"bg-surface-dark border border-border-dark rounded-lg p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connect to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:304,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"token",required:!0,children:"Bot Token"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:309,columnNumber:15},globalThis),i.jsxDEV(en,{id:"token",name:"token",type:"password",value:u.token,onChange:f,placeholder:"MTEyMzQ1Njc4OTAxMjM0NTY3OC...",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:310,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"The bot token from Discord Developer Portal"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:320,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:308,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"allowedChannels",children:"Allowed Channels (optional)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:326,columnNumber:15},globalThis),i.jsxDEV(en,{id:"allowedChannels",name:"allowedChannels",type:"text",value:u.allowedChannels,onChange:f,placeholder:"1234567890123456789, 9876543210987654321"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:327,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Comma-separated channel IDs to restrict the bot to specific channels"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:335,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:325,columnNumber:13},globalThis),i.jsxDEV("div",{className:"pt-2",children:i.jsxDEV(ur,{type:"submit",disabled:n||!u.token,loading:n,fullWidth:!0,children:n?"Connecting...":"Connect to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:341,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:340,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:303,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:264,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:191,columnNumber:5},globalThis)},pfe=[{id:"slack",name:"Slack",description:"Connect your Slack workspace for team communication with the orchestrator.",icon:xX,available:!0,component:nfe},{id:"whatsapp",name:"WhatsApp",description:"Connect via WhatsApp Web to communicate with the orchestrator from your phone.",icon:UX,available:!0,component:ofe},{id:"discord",name:"Discord",description:"Connect a Discord bot to communicate with the orchestrator via Discord server.",icon:jX,available:!0,component:ffe},{id:"telegram",name:"Telegram",description:"Connect a Telegram bot for messaging the orchestrator via Telegram.",icon:t9,available:!0,component:ufe},{id:"google-chat",name:"Google Chat",description:"Connect Google Chat for workspace communication with the orchestrator.",icon:$B,available:!0,component:ife}],yfe=()=>{const[s,e]=V.useState(null),t=r=>{e(n=>n===r?null:r)};return i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Messaging Integrations"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:123,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect messaging platforms to communicate with the orchestrator from anywhere."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:124,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:122,columnNumber:7},globalThis),i.jsxDEV("div",{className:"space-y-3",children:pfe.map(r=>{const n=s===r.id,o=r.icon;return i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg overflow-hidden","data-testid":`platform-card-${r.id}`,children:[i.jsxDEV("button",{className:`w-full flex items-center gap-4 p-4 text-left transition-colors ${r.available?"hover:bg-background-dark cursor-pointer":"opacity-60 cursor-default"}`,onClick:()=>r.available&&t(r.id),disabled:!r.available,"data-testid":`platform-toggle-${r.id}`,children:[i.jsxDEV("div",{className:"flex items-center justify-center w-10 h-10 rounded-lg bg-background-dark border border-border-dark",children:i.jsxDEV(o,{className:"w-5 h-5 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:153,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:152,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-sm font-semibold",children:r.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:158,columnNumber:21},globalThis),!r.available&&i.jsxDEV("span",{className:"text-xs px-2 py-0.5 rounded-full bg-background-dark text-text-secondary-dark border border-border-dark",children:"Coming Soon"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:160,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:157,columnNumber:19},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-0.5 truncate",children:r.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:165,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:156,columnNumber:17},globalThis),r.available&&i.jsxDEV("div",{className:"text-text-secondary-dark",children:n?i.jsxDEV(uf,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:173,columnNumber:23},globalThis):i.jsxDEV(nf,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:175,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:171,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:142,columnNumber:15},globalThis),n&&r.component&&i.jsxDEV("div",{className:"border-t border-border-dark p-6","data-testid":`platform-content-${r.id}`,children:i.jsxDEV(r.component,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:184,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:183,columnNumber:17},globalThis)]},r.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:136,columnNumber:13},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:130,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:120,columnNumber:5},globalThis)},CR={gemini:"Google Gemini",anthropic:"Anthropic",openai:"OpenAI"},gB={gemini:"GOOGLE_GENERATIVE_AI_API_KEY",anthropic:"ANTHROPIC_API_KEY",openai:"OPENAI_API_KEY"},gfe=2e3,bfe=()=>{const{settings:s,updateSettings:e,isLoading:t,error:r}=EF(),[n,o]=V.useState({global:{},runtimeOverrides:{},skillOverrides:{}}),[a,c]=V.useState(!1),[u,d]=V.useState("idle"),[h,f]=V.useState(null),[y,v]=V.useState({}),[N,j]=V.useState({}),[b,x]=V.useState({}),[D,T]=V.useState({});V.useEffect(()=>{s!=null&&s.apiKeys&&(o(s.apiKeys),c(!1))},[s]);const S=V.useCallback((B,O)=>{o(H=>({...H,global:{...H.global,[B]:O}})),c(!0),d("idle"),j(H=>({...H,[`global-${B}`]:"idle"}))},[]),k=V.useCallback((B,O,H,Y)=>{o(le=>{var q,Z,X;const ne={...((Z=(q=le.runtimeOverrides)==null?void 0:q[B])==null?void 0:Z[O])??{key:"",source:"global"},[H]:Y};return{...le,runtimeOverrides:{...le.runtimeOverrides,[B]:{...(X=le.runtimeOverrides)==null?void 0:X[B],[O]:ne}}}}),c(!0),d("idle")},[]),U=async()=>{d("saving"),f(null);try{await e({apiKeys:n}),d("saved"),c(!1),setTimeout(()=>d("idle"),gfe)}catch(B){d("error"),f(B instanceof Error?B.message:"Failed to save")}},F=async(B,O,H)=>{if(!(!O||O.startsWith("••••"))){j(Y=>({...Y,[H]:"testing"})),x(Y=>({...Y,[H]:""}));try{const Y=await Z0.testApiKey(B,O);j(le=>({...le,[H]:Y.valid?"valid":"invalid"})),!Y.valid&&Y.error&&x(le=>({...le,[H]:Y.error}))}catch{j(Y=>({...Y,[H]:"invalid"})),x(Y=>({...Y,[H]:"Connection failed"}))}}},M=B=>{v(O=>({...O,[B]:!O[B]}))},R=B=>{T(O=>({...O,[B]:!O[B]}))},L=(B,O)=>{const H=N[O];return H==="testing"?i.jsxDEV("span",{className:"text-xs text-text-secondary-dark animate-pulse",children:"Testing..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:176,columnNumber:14},globalThis):H==="valid"?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-green-400",children:[i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:179,columnNumber:79},globalThis)," Valid"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:179,columnNumber:14},globalThis):H==="invalid"?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-red-400",children:[i.jsxDEV(Rl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:182,columnNumber:77},globalThis)," ",b[O]||"Invalid"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:182,columnNumber:14},globalThis):B&&!B.startsWith("••••")?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-green-400",children:[i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:185,columnNumber:79},globalThis)," Configured"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:185,columnNumber:14},globalThis):B&&B.startsWith("••••")?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-blue-400",children:[i.jsxDEV(BR,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:188,columnNumber:78},globalThis)," Saved"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:188,columnNumber:14},globalThis):i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-text-secondary-dark",children:[i.jsxDEV(Rl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:190,columnNumber:87},globalThis)," Not set"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:190,columnNumber:12},globalThis)};return t?i.jsxDEV("div",{className:"text-text-secondary-dark",children:"Loading settings..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:194,columnNumber:12},globalThis):r?i.jsxDEV("div",{className:"bg-red-900/20 border border-red-800 rounded-lg p-4",children:i.jsxDEV("p",{className:"text-red-400",children:r},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:200,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:199,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-8",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"API Keys"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:210,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Configure AI provider API keys. Keys are encrypted at rest and never logged."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:211,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:209,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex gap-2",children:i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:U,disabled:!a||u==="saving",children:u==="saving"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV(KV,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:223,columnNumber:17},globalThis)," Saving..."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:223,columnNumber:15},globalThis):u==="saved"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV(Mi,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:225,columnNumber:17},globalThis)," Saved"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:225,columnNumber:15},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV(ij,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:227,columnNumber:17},globalThis)," Save Changes"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:227,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:216,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:215,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:208,columnNumber:7},globalThis),u==="error"&&h&&i.jsxDEV("div",{className:"bg-red-900/20 border border-red-800 rounded-lg p-3",children:i.jsxDEV("p",{className:"text-sm text-red-400",children:h},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:235,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:234,columnNumber:9},globalThis),i.jsxDEV("section",{className:"bg-surface-dark rounded-lg border border-border-dark p-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-4",children:[i.jsxDEV(BR,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:242,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-lg font-medium",children:"Global API Keys"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:243,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:241,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-6",children:"These keys are used system-wide as defaults. Runtimes and skills can override them with their own keys."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:245,columnNumber:9},globalThis),i.jsxDEV("div",{className:"space-y-5",children:pP.map(B=>{const O=n.global[B]||"",H=`global-${B}`,Y=y[H];return i.jsxDEV("div",{className:"space-y-1",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV(Ur,{htmlFor:`global-${B}`,children:CR[B]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:258,columnNumber:19},globalThis),L(O,H)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:257,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("div",{className:"relative flex-1",children:[i.jsxDEV(en,{id:`global-${B}`,type:Y?"text":"password",value:O,onChange:le=>S(B,le.target.value),placeholder:`Enter ${gB[B]}`,className:"pr-10 font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:265,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>M(H),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-secondary-dark hover:text-text-primary-dark","aria-label":Y?"Hide key":"Show key",children:Y?i.jsxDEV(VL,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:279,columnNumber:36},globalThis):i.jsxDEV(OR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:279,columnNumber:69},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:273,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:264,columnNumber:19},globalThis),i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:()=>F(B,O,H),disabled:!O||O.startsWith("••••")||N[H]==="testing",children:[i.jsxDEV(xT,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:288,columnNumber:21},globalThis),"Test"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:282,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:263,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:["Env var: ",i.jsxDEV("code",{className:"bg-surface-dark px-1 rounded",children:gB[B]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:293,columnNumber:28},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:292,columnNumber:17},globalThis)]},B,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:256,columnNumber:15},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:249,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:240,columnNumber:7},globalThis),i.jsxDEV("section",{className:"bg-surface-dark rounded-lg border border-border-dark p-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-4",children:[i.jsxDEV(xT,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:304,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-lg font-medium",children:"Runtime Overrides"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:305,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:303,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-4",children:"Override global keys for specific AI runtimes. By default, runtimes use the global key."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:307,columnNumber:9},globalThis),i.jsxDEV("div",{className:"space-y-2",children:C6.map(B=>{const O=D[B];return i.jsxDEV("div",{className:"border border-border-dark rounded-lg",children:[i.jsxDEV("button",{type:"button",onClick:()=>R(B),className:"w-full flex items-center justify-between px-4 py-3 text-sm font-medium hover:bg-surface-dark/50 rounded-lg",children:[i.jsxDEV("span",{children:NT[B]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:322,columnNumber:19},globalThis),O?i.jsxDEV(uf,{className:"w-4 h-4 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:324,columnNumber:21},globalThis):i.jsxDEV(nf,{className:"w-4 h-4 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:326,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:317,columnNumber:17},globalThis),O&&i.jsxDEV("div",{className:"px-4 pb-4 space-y-4 border-t border-border-dark pt-4",children:pP.map(H=>{var q,Z;const Y=(Z=(q=n.runtimeOverrides)==null?void 0:q[B])==null?void 0:Z[H],le=(Y==null?void 0:Y.source)==="custom",te=le&&(Y==null?void 0:Y.key)||"",ne=`runtime-${B}-${H}`;return i.jsxDEV("div",{className:"space-y-2",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV(Ur,{htmlFor:`${B}-${H}-toggle`,children:CR[H]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:341,columnNumber:29},globalThis),i.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer text-sm",children:[i.jsxDEV("input",{id:`${B}-${H}-toggle`,type:"checkbox",checked:le,onChange:X=>k(B,H,"source",X.target.checked?"custom":"global"),className:"form-checkbox rounded border-border-dark bg-surface-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:345,columnNumber:31},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark",children:le?"Custom key":"Use global"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:355,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:344,columnNumber:29},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:340,columnNumber:27},globalThis),le&&i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("div",{className:"relative flex-1",children:[i.jsxDEV(en,{type:y[ne]?"text":"password",value:te,onChange:X=>k(B,H,"key",X.target.value),placeholder:`Custom ${CR[H]} key for ${NT[B]}`,className:"pr-10 font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:364,columnNumber:33},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>M(ne),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-secondary-dark hover:text-text-primary-dark",children:y[ne]?i.jsxDEV(VL,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:378,columnNumber:58},globalThis):i.jsxDEV(OR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:378,columnNumber:91},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:373,columnNumber:33},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:363,columnNumber:31},globalThis),i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:()=>F(H,te,ne),disabled:!te||te.startsWith("••••")||N[ne]==="testing",children:[i.jsxDEV(xT,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:387,columnNumber:33},globalThis),"Test"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:381,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:362,columnNumber:29},globalThis)]},H,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:339,columnNumber:25},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:331,columnNumber:19},globalThis)]},B,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:316,columnNumber:15},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:311,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:302,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:206,columnNumber:5},globalThis)},vfe=6,wfe=32,xfe="https://api.crewlyai.com",Nfe="/api/relay/connect";function Dfe(s=vfe){const e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=new Uint8Array(s);return crypto.getRandomValues(t),Array.from(t,r=>e[r%e.length]).join("")}function Tfe(s=wfe){const e=new Uint8Array(s);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}const jfe=({isOpen:s,onClose:e})=>{const[t,r]=V.useState(""),[n,o]=V.useState(""),[a,c]=V.useState("idle"),[u,d]=V.useState(""),[h,f]=V.useState(null),[y,v]=V.useState(!1);V.useEffect(()=>{if(!s){c("idle"),d(""),f(null),v(!1);return}const b=Dfe(),x=Tfe();r(b),o(x),(async()=>{c("connecting"),d("");const T=localStorage.getItem(Db)||"";try{const S=await fetch(Nfe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:xfe,pairingCode:b,role:"orchestrator",token:T,sharedSecret:x})}),k=await S.json();S.ok&&k.success?c("success"):(c("error"),d(k.error||"Failed to register with relay"))}catch{c("error"),d("Could not reach the server")}})()},[s]);const N=V.useCallback(async(b,x)=>{try{await navigator.clipboard.writeText(b),f(x),setTimeout(()=>f(null),2e3)}catch{}},[]);if(!s)return null;const j=JSON.stringify({pairingCode:t,sharedSecret:n});return i.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:b=>{b.target===b.currentTarget&&e()},role:"dialog","aria-modal":"true","aria-label":"Invite Device","data-testid":"invite-device-modal",children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-2xl w-full max-w-md mx-4",onClick:b=>b.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between px-5 py-4 border-b border-border-dark",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Invite Device"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:189,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:e,className:"p-1 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors","aria-label":"Close","data-testid":"invite-modal-close",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:196,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:190,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:188,columnNumber:9},globalThis),i.jsxDEV("div",{className:"px-5 py-4 space-y-4",children:[a==="connecting"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-text-secondary-dark","data-testid":"invite-connecting",children:[i.jsxDEV(ef,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:205,columnNumber:15},globalThis),"Registering with relay..."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:204,columnNumber:13},globalThis),a==="error"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-rose-400 bg-rose-500/10 border border-rose-500/20 rounded px-3 py-2","data-testid":"invite-error",children:[i.jsxDEV(Rl,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:212,columnNumber:15},globalThis),u]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:211,columnNumber:13},globalThis),a==="success"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-emerald-400 bg-emerald-500/10 border border-emerald-500/20 rounded px-3 py-2","data-testid":"invite-success",children:[i.jsxDEV(Mi,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:219,columnNumber:15},globalThis),"Waiting for device to join..."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:218,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Pairing Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:226,columnNumber:13},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("code",{className:"flex-1 px-3 py-2 text-lg font-mono font-bold tracking-widest text-text-primary-dark bg-background-dark border border-border-dark rounded-lg text-center select-all","data-testid":"invite-pairing-code",children:t},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:228,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>N(t,"code"),className:"p-2 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors","aria-label":"Copy pairing code","data-testid":"copy-pairing-code",children:h==="code"?i.jsxDEV(Mi,{className:"w-4 h-4 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:240,columnNumber:43},globalThis):i.jsxDEV(PR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:240,columnNumber:92},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:234,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:227,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:225,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Shared Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:247,columnNumber:13},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("code",{className:"flex-1 px-3 py-2 text-[11px] font-mono text-text-primary-dark bg-background-dark border border-border-dark rounded-lg break-all select-all","data-testid":"invite-shared-secret",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:249,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>N(n,"secret"),className:"p-2 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors shrink-0","aria-label":"Copy shared secret","data-testid":"copy-shared-secret",children:h==="secret"?i.jsxDEV(Mi,{className:"w-4 h-4 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:261,columnNumber:45},globalThis):i.jsxDEV(PR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:261,columnNumber:94},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:255,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:248,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:246,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("button",{onClick:()=>v(!y),className:"flex items-center gap-1.5 text-xs text-primary hover:text-primary/80 transition-colors","data-testid":"toggle-qr-code",children:[i.jsxDEV(WV,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:273,columnNumber:15},globalThis),y?"Hide QR Code":"Show QR Code"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:268,columnNumber:13},globalThis),y&&i.jsxDEV("div",{className:"mt-3 flex justify-center","data-testid":"qr-code-container",children:i.jsxDEV("div",{className:"p-3 bg-white rounded-lg",children:i.jsxDEV(JV,{value:j,size:160,level:"M"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:280,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:279,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:278,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:267,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-[11px] text-text-secondary-dark leading-relaxed",children:["Share the pairing code and secret with the device you want to connect. On the other device, click ",i.jsxDEV("strong",{children:"Join Relay"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:289,columnNumber:40},globalThis)," and enter these values."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:287,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:201,columnNumber:9},globalThis),i.jsxDEV("div",{className:"px-5 py-3 border-t border-border-dark flex justify-end",children:i.jsxDEV("button",{onClick:e,className:"px-4 py-1.5 text-xs font-medium text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors",children:"Done"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:295,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:294,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:183,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:175,columnNumber:5},globalThis)},Sfe="https://api.crewlyai.com",Efe="/api/relay/connect",_fe=({isOpen:s,onClose:e})=>{const[t,r]=V.useState(""),[n,o]=V.useState(""),[a,c]=V.useState("idle"),[u,d]=V.useState(""),h=V.useCallback(()=>{r(""),o(""),c("idle"),d(""),e()},[e]),f=V.useCallback(async v=>{v.preventDefault();const N=t.trim(),j=n.trim();if(!N||!j){c("error"),d("Both pairing code and shared secret are required");return}c("connecting"),d("");const b=localStorage.getItem(Db)||"";try{const x=await fetch(Efe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:Sfe,pairingCode:N,role:"agent",token:b,sharedSecret:j})}),D=await x.json();x.ok&&D.success?c("success"):(c("error"),d(D.error||"Failed to join relay"))}catch{c("error"),d("Could not reach the server")}},[t,n]);if(!s)return null;const y=a==="connecting";return i.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:v=>{v.target===v.currentTarget&&h()},role:"dialog","aria-modal":"true","aria-label":"Join Relay","data-testid":"join-relay-modal",children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-2xl w-full max-w-md mx-4",onClick:v=>v.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between px-5 py-4 border-b border-border-dark",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Join Relay"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:134,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:h,className:"p-1 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors","aria-label":"Close","data-testid":"join-modal-close",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:141,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:135,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:133,columnNumber:9},globalThis),i.jsxDEV("form",{onSubmit:f,className:"px-5 py-4 space-y-4",children:[a==="error"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-rose-400 bg-rose-500/10 border border-rose-500/20 rounded px-3 py-2","data-testid":"join-error",children:[i.jsxDEV(Rl,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:150,columnNumber:15},globalThis),u]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:149,columnNumber:13},globalThis),a==="success"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-emerald-400 bg-emerald-500/10 border border-emerald-500/20 rounded px-3 py-2","data-testid":"join-success",children:[i.jsxDEV(Mi,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:157,columnNumber:15},globalThis),"Connected to relay successfully!"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:156,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{htmlFor:"join-pairing-code",className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Pairing Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:164,columnNumber:13},globalThis),i.jsxDEV("input",{id:"join-pairing-code",type:"text",value:t,onChange:v=>r(v.target.value.toUpperCase()),placeholder:"e.g. A3BK7P",disabled:y||a==="success",className:"w-full px-3 py-2 text-sm font-mono tracking-wider text-text-primary-dark bg-background-dark border border-border-dark rounded-lg placeholder:text-text-secondary-dark/40 focus:outline-none focus:ring-1 focus:ring-primary/50 focus:border-primary/50 disabled:opacity-50",autoComplete:"off","data-testid":"join-pairing-code-input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:167,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:163,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{htmlFor:"join-shared-secret",className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Shared Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:182,columnNumber:13},globalThis),i.jsxDEV("input",{id:"join-shared-secret",type:"text",value:n,onChange:v=>o(v.target.value),placeholder:"64-character hex string",disabled:y||a==="success",className:"w-full px-3 py-2 text-xs font-mono text-text-primary-dark bg-background-dark border border-border-dark rounded-lg placeholder:text-text-secondary-dark/40 focus:outline-none focus:ring-1 focus:ring-primary/50 focus:border-primary/50 disabled:opacity-50",autoComplete:"off","data-testid":"join-shared-secret-input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:185,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:181,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-[11px] text-text-secondary-dark leading-relaxed",children:"Enter the pairing code and shared secret from the device that sent the invitation."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:199,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex justify-end gap-2 pt-2 border-t border-border-dark",children:[i.jsxDEV("button",{type:"button",onClick:h,className:"px-4 py-1.5 text-xs font-medium text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors",children:a==="success"?"Done":"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:205,columnNumber:13},globalThis),a!=="success"&&i.jsxDEV("button",{type:"submit",disabled:y||!t.trim()||!n.trim(),className:"flex items-center gap-1.5 px-4 py-1.5 text-xs font-medium text-white bg-primary rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"join-submit-button",children:[y&&i.jsxDEV(ef,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:219,columnNumber:34},globalThis),y?"Connecting...":"Join"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:213,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:204,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:146,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:128,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:120,columnNumber:5},globalThis)},kfe="/api/cloud/validate",Cfe="/api/cloud/status",Afe="/api/cloud/devices",Mfe="/api/relay/cloud-devices";function bB(s){const e=Date.now()-new Date(s).getTime(),t=Math.floor(e/1e3);return t<5?"Just now":t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}const Ufe={waiting:"Connecting",paired:"Connected",disconnected:"Offline",online:"Online",offline:"Offline"},Rfe={waiting:"bg-yellow-400",paired:"bg-emerald-400",disconnected:"bg-gray-500",online:"bg-emerald-400",offline:"bg-gray-500"},Vfe=({device:s})=>{const e=s.role==="orchestrator"?sy:WB,t=s.status||s.state||"disconnected",r=Rfe[t]??"bg-gray-500",n=Ufe[t]??t,o=s.name||s.deviceName||(s.sessionId?`${s.role||"device"} (${s.sessionId.slice(0,8)}...)`:s.deviceId||"Unknown");return i.jsxDEV("div",{"data-testid":`cloud-device-${s.sessionId||s.deviceId}`,className:`flex items-center justify-between p-3 rounded-lg border transition-colors ${s.isLocal?"border-primary/30 bg-primary/5":"border-border-dark bg-background-dark hover:border-border-dark/80"}`,children:[i.jsxDEV("div",{className:"flex items-center gap-3 min-w-0",children:[i.jsxDEV("div",{className:`p-1.5 rounded-md ${s.isLocal?"bg-primary/10":"bg-surface-dark"}`,children:i.jsxDEV(e,{className:`w-4 h-4 ${s.isLocal?"text-primary":"text-text-secondary-dark"}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:136,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:135,columnNumber:9},globalThis),i.jsxDEV("div",{className:"min-w-0",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark truncate",children:o},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:140,columnNumber:13},globalThis),s.isLocal&&i.jsxDEV("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary whitespace-nowrap",children:"This machine"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:144,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:139,columnNumber:11},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:s.lastHeartbeatAt?`Last seen: ${bB(s.lastHeartbeatAt)}`:`Registered: ${bB(s.registeredAt)}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:149,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:138,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:134,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-1.5 ml-3 whitespace-nowrap",children:[i.jsxDEV("span",{className:`h-2 w-2 rounded-full ${r}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:156,columnNumber:9},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:157,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:155,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:126,columnNumber:5},globalThis)},Ffe=()=>{const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),[a,c]=V.useState(!1),[u,d]=V.useState(null),h=V.useCallback(async()=>{var f;try{r(!0),o(null),c(!1),d(null);const y=await fetch(Afe),v=await y.json();if(y.ok&&v.success&&v.data){if(v.data.syncState&&d(v.data.syncState),v.data.devices&&v.data.devices.length>0){e(v.data.devices),v.data.tokenExpired&&c(!0);return}if(!v.data.syncState||v.data.syncState==="stopped")try{const N=await fetch(Mfe),j=await N.json();if(N.ok&&j.success&&((f=j.data)!=null&&f.devices)){e(j.data.devices),j.data.tokenExpired&&c(!0);return}}catch{}e(v.data.devices||[]),v.data.tokenExpired&&c(!0)}else o(v.error||"Failed to load devices")}catch{o("Could not reach the server")}finally{r(!1)}},[]);return V.useEffect(()=>{h()},[h]),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-5 space-y-3","data-testid":"cloud-device-list-section",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(i9,{className:"w-4 h-4 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:240,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Connected Devices"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:241,columnNumber:11},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:["(",s.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:242,columnNumber:11},globalThis),u&&i.jsxDEV("span",{"data-testid":"sync-state-badge",className:`text-[10px] font-medium px-1.5 py-0.5 rounded ${u==="syncing"?"bg-emerald-500/10 text-emerald-400":u==="error"?"bg-rose-500/10 text-rose-400":"bg-gray-500/10 text-gray-400"}`,children:u==="syncing"?"Sync Active":u==="error"?"Sync Error":"Sync Off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:246,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:239,columnNumber:9},globalThis),i.jsxDEV("button",{onClick:h,disabled:t,className:"p-1.5 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors disabled:opacity-50","aria-label":"Refresh devices","data-testid":"refresh-devices-button",children:i.jsxDEV(il,{className:`w-3.5 h-3.5 ${t?"animate-spin":""}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:267,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:260,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:238,columnNumber:7},globalThis),n&&i.jsxDEV("div",{className:"text-xs text-rose-400 bg-rose-500/10 border border-rose-500/20 rounded px-3 py-2",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:272,columnNumber:9},globalThis),a&&!n&&i.jsxDEV("div",{className:"text-xs text-amber-400 bg-amber-500/10 border border-amber-500/20 rounded px-3 py-2","data-testid":"token-expired-warning",children:"Cloud session expired. Please disconnect and sign in again to refresh your token."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:278,columnNumber:9},globalThis),!t&&!n&&!a&&s.length===0&&i.jsxDEV("div",{className:"text-center py-6",children:[i.jsxDEV(sy,{className:"w-8 h-8 text-text-secondary-dark/30 mx-auto mb-2"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:285,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"No devices connected yet"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:286,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-[11px] text-text-secondary-dark/60 mt-0.5",children:["Connect from another machine using ",i.jsxDEV("code",{className:"text-primary/80",children:"crewly cloud connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:288,columnNumber:48},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:287,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:284,columnNumber:9},globalThis),s.length>0&&i.jsxDEV("div",{className:"space-y-2",children:s.map(f=>i.jsxDEV(Vfe,{device:f},f.sessionId||f.deviceId||Math.random().toString(),!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:296,columnNumber:13},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:294,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:237,columnNumber:5},globalThis)},Ife=()=>{const[s,e]=V.useState(null),[t,r]=V.useState(!1),[n,o]=V.useState(null),[a,c]=V.useState(!0),[u,d]=V.useState(null),[h,f]=V.useState(!1),[y,v]=V.useState(!1),N=V.useCallback(async()=>{try{const S=await fetch(Cfe),k=await S.json();if(S.ok&&k.success&&k.data){const U=k.data,F=U.connectionStatus==="connected";return r(F),F&&o(U.tier??null),F}}catch{}return r(!1),o(null),!1},[]),j=V.useCallback(async()=>{const S=localStorage.getItem(Db);if(!S){c(!1);return}try{const k=await fetch(kfe,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${S}`}}),U=await k.json();k.ok&&U.success&&U.data?(e({id:U.data.id,email:U.data.email,plan:U.data.plan,name:U.data.name,avatar:U.data.avatar}),d(null)):(localStorage.removeItem(Db),e(null))}catch{d("Could not reach CrewlyAI Cloud. Check your internet connection.")}finally{c(!1)}},[]);V.useEffect(()=>{(async()=>{await N(),await j()})()},[N,j]);const b=()=>{const S=`${window.location.origin}/auth/callback`;window.location.href=E$(S)},x=V.useCallback(async S=>{try{const k=localStorage.getItem("crewly_refresh_token")||void 0;await fetch("/api/cloud/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:S,...k&&{refreshToken:k}})})}catch{}},[]);V.useEffect(()=>{const S=localStorage.getItem(Db);S&&s&&x(S)},[s,x]);const D=async()=>{localStorage.removeItem(Db),e(null),r(!1),o(null),d(null);try{await fetch("/api/cloud/disconnect",{method:"POST"})}catch{}},T=S=>{switch(S){case"pro":return"bg-indigo-500/10 text-indigo-400 border-indigo-500/30";case"enterprise":return"bg-amber-500/10 text-amber-400 border-amber-500/30";default:return"bg-gray-500/10 text-gray-400 border-gray-500/30"}};return a?i.jsxDEV("div",{className:"flex items-center justify-center py-12",children:i.jsxDEV("div",{className:"w-6 h-6 border-2 border-primary/20 border-t-primary rounded-full animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:483,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:482,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(LT,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:493,columnNumber:11},globalThis),"CrewlyAI Cloud"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:492,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect to CrewlyAI Cloud for device sync, remote access, and Pro features."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:496,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:491,columnNumber:7},globalThis),u&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg text-sm",children:u},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:502,columnNumber:9},globalThis),s||t?i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-5 space-y-4",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"w-10 h-10 bg-primary/10 rounded-full flex items-center justify-center",children:s!=null&&s.avatar?i.jsxDEV("img",{src:s.avatar,alt:s.name||s.email,className:"w-10 h-10 rounded-full"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:515,columnNumber:21},globalThis):i.jsxDEV(LT,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:521,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:513,columnNumber:17},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark",children:s?s.name||s.email:"CrewlyAI Cloud"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:526,columnNumber:21},globalThis),i.jsxDEV(Mi,{className:"w-4 h-4 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:529,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:525,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:s?s.email:"Connected via backend"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:531,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:524,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:512,columnNumber:15},globalThis),i.jsxDEV("span",{className:`px-2 py-0.5 text-xs font-medium rounded border ${T((s==null?void 0:s.plan)??n??"free")}`,children:((s==null?void 0:s.plan)??n??"free").charAt(0).toUpperCase()+((s==null?void 0:s.plan)??n??"free").slice(1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:537,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:511,columnNumber:13},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2 pt-2 border-t border-border-dark",children:[i.jsxDEV("button",{onClick:async()=>{await N(),await j()},className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors",children:[i.jsxDEV(il,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:547,columnNumber:17},globalThis),"Refresh"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:543,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:D,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary-dark hover:text-rose-400 rounded-md hover:bg-background-dark transition-colors",children:[i.jsxDEV(JB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:554,columnNumber:17},globalThis),"Disconnect"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:550,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:542,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:510,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2","data-testid":"relay-pairing-buttons",children:[i.jsxDEV("button",{onClick:()=>f(!0),className:"flex items-center gap-1.5 px-3 py-2 text-xs font-medium text-text-primary-dark bg-primary/10 border border-primary/20 rounded-lg hover:bg-primary/20 transition-colors","data-testid":"invite-device-button",children:[i.jsxDEV(ZV,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:567,columnNumber:15},globalThis),"Invite Device"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:562,columnNumber:13},globalThis),i.jsxDEV("button",{onClick:()=>v(!0),className:"flex items-center gap-1.5 px-3 py-2 text-xs font-medium text-text-primary-dark bg-surface-dark border border-border-dark rounded-lg hover:bg-background-dark transition-colors","data-testid":"join-relay-button",children:[i.jsxDEV(rA,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:575,columnNumber:15},globalThis),"Join Relay"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:570,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:561,columnNumber:11},globalThis),i.jsxDEV(Ffe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:581,columnNumber:11},globalThis),i.jsxDEV(jfe,{isOpen:h,onClose:()=>f(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:584,columnNumber:11},globalThis),i.jsxDEV(_fe,{isOpen:y,onClose:()=>v(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:585,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:509,columnNumber:9},globalThis):i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6 text-center space-y-4",children:[i.jsxDEV("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-primary/10",children:i.jsxDEV(xT,{className:"w-6 h-6 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:591,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:590,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Connect to CrewlyAI Cloud"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:595,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1 max-w-sm mx-auto",children:"Sign in with your CrewlyAI account to enable device sync, remote team access, and Pro features."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:598,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:594,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:b,className:"inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-white rounded-lg font-medium text-sm hover:bg-primary/90 transition-colors","data-testid":"cloud-sign-in-button",children:[i.jsxDEV(xx,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:609,columnNumber:13},globalThis),"Sign in with CrewlyAI"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:604,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:589,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:489,columnNumber:5},globalThis)},Lfe=new Set(["general","roles","skills","integrations","api-keys","cloud"]),Pfe=()=>{const[s]=eA(),e=s.get("tab"),t=e&&Lfe.has(e)?e:"general",[r,n]=V.useState(t),o=[{id:"general",label:"General",icon:r9},{id:"roles",label:"Roles",icon:Nx},{id:"skills",label:"Skills",icon:a9},{id:"integrations",label:"Integrations",icon:rA},{id:"api-keys",label:"API Keys",icon:BR},{id:"cloud",label:"Cloud",icon:LT}],a=()=>{switch(r){case"general":return i.jsxDEV(Hhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:62,columnNumber:16},globalThis);case"roles":return i.jsxDEV(Xhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:64,columnNumber:16},globalThis);case"skills":return i.jsxDEV(Jhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:66,columnNumber:16},globalThis);case"integrations":return i.jsxDEV(yfe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:68,columnNumber:16},globalThis);case"api-keys":return i.jsxDEV(bfe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:70,columnNumber:16},globalThis);case"cloud":return i.jsxDEV(Ife,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:72,columnNumber:16},globalThis);default:return null}};return i.jsxDEV("div",{className:"max-w-7xl mx-auto",children:[i.jsxDEV("div",{className:"mb-8",children:[i.jsxDEV("h1",{className:"text-3xl font-bold tracking-tight",children:"Settings"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:82,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Configure Crewly behavior and manage roles and skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:83,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:81,columnNumber:7},globalThis),i.jsxDEV("nav",{className:"flex gap-1 border-b border-border-dark mb-6",role:"tablist",children:o.map(c=>i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors -mb-px ${r===c.id?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark hover:bg-surface-dark"}`,onClick:()=>n(c.id),"aria-selected":r===c.id,role:"tab",id:`tab-${c.id}`,"aria-controls":`panel-${c.id}`,children:[i.jsxDEV(c.icon,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:104,columnNumber:13},globalThis),i.jsxDEV("span",{children:c.label},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:105,columnNumber:13},globalThis)]},c.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:91,columnNumber:11},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:89,columnNumber:7},globalThis),i.jsxDEV("main",{role:"tabpanel",id:`panel-${r}`,"aria-labelledby":`tab-${r}`,children:a()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:111,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:79,columnNumber:5},globalThis)},Wh="/api/chat";class Ofe{async parseResponse(e,t){const r=await e.text();if(!r)throw new Error(t);try{return JSON.parse(r)}catch{throw new Error(t)}}async sendMessage(e){const t=await fetch(`${Wh}/send`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await this.parseResponse(t,"Failed to send message");if(!r.success)throw new Error(r.error||"Failed to send message");return r.data}async getMessages(e,t,r){return(await this.getMessagesWithMeta(e,t,r)).messages}async getMessagesWithMeta(e,t,r){const n=new URLSearchParams({conversationId:e});t&&n.set("limit",t.toString()),r&&n.set("before",r);const o=await fetch(`${Wh}/messages?${n.toString()}`),a=await this.parseResponse(o,"Failed to load messages");if(!a.success)throw new Error(a.error||"Failed to load messages");return{messages:a.data,hasMore:a.hasMore??!1,totalCount:a.totalCount??a.data.length}}async getConversations(e=!1,t){const r=new URLSearchParams;e&&r.set("includeArchived","true"),t&&r.set("channelType",t);const n=r.toString(),o=await fetch(`${Wh}/conversations${n?"?"+n:""}`),a=await this.parseResponse(o,"Failed to load conversations");if(!a.success)throw new Error(a.error||"Failed to load conversations");return a.data}async getCurrentConversation(){const e=await fetch(`${Wh}/conversations/current`),t=await this.parseResponse(e,"Failed to load current conversation");if(!t.success)throw new Error(t.error||"Failed to load current conversation");return t.data}async createConversation(e){const t=await fetch(`${Wh}/conversations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:e})}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to create conversation");return r.data}async updateConversation(e,t){const r=await fetch(`${Wh}/conversations/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await this.parseResponse(r,"Request failed");if(!n.success)throw new Error(n.error||"Failed to update conversation");return n.data}async deleteConversation(e){const t=await fetch(`${Wh}/conversations/${e}`,{method:"DELETE"}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to delete conversation")}async archiveConversation(e){const t=await fetch(`${Wh}/conversations/${e}/archive`,{method:"PUT"}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to archive conversation")}async clearConversation(e){const t=await fetch(`${Wh}/conversations/${e}/clear`,{method:"POST"}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to clear conversation")}}const qu=new Ofe,SH=V.createContext(null),Bfe=({children:s})=>{const[e,t]=V.useState([]),[r,n]=V.useState(null),[o,a]=V.useState([]),[c,u]=V.useState(!0),[d,h]=V.useState(!1),[f,y]=V.useState(null),[v,N]=V.useState(!1),[j,b]=V.useState(null),[x,D]=V.useState(!1),[T,S]=V.useState(!1),k=V.useRef(null);V.useEffect(()=>{k.current=r},[r]);const U=V.useCallback(Z=>{let X;const z=Z;if(z&&typeof z=="object"&&("data"in z&&z.data&&typeof z.data=="object"?X=z.data:"id"in z&&(X=z)),!X||!X.id)return;const se=k.current;X.conversationId===(se==null?void 0:se.id)&&(a(ae=>ae.some(fe=>fe.id===X.id)?ae:[...ae,X]),N(!1)),t(ae=>ae.map(fe=>fe.id===X.conversationId?{...fe,lastMessage:{content:X.content.slice(0,100),timestamp:X.timestamp,from:X.from},messageCount:fe.messageCount+1,updatedAt:X.timestamp}:fe))},[]),F=V.useCallback(Z=>{const X=Z,z=X.data||X,se=k.current;z.conversationId===(se==null?void 0:se.id)&&N(z.isTyping??!1)},[]),M=V.useCallback(Z=>{let X;const z=Z;if(z&&typeof z=="object"&&("data"in z&&z.data&&typeof z.data=="object"?X=z.data:"id"in z&&(X=z)),!X||!X.id)return;t(ae=>{const fe=ae.findIndex(ee=>ee.id===X.id);if(fe>=0){const ee=[...ae];return ee[fe]=X,ee}return[X,...ae]});const se=k.current;(se==null?void 0:se.id)===X.id&&n(X)},[]);V.useEffect(()=>(or.on("chat_message",U),or.on("chat_typing",F),or.on("conversation_updated",M),or.subscribeToChat(),()=>{or.off("chat_message",U),or.off("chat_typing",F),or.off("conversation_updated",M),or.unsubscribeFromChat()}),[U,F,M]),V.useEffect(()=>{(async()=>{u(!0);try{const[X,z]=await Promise.all([qu.getConversations(),qu.getCurrentConversation()]);if(t(X),z){n(z);const se=await qu.getMessagesWithMeta(z.id);a(se.messages),D(se.hasMore)}}catch(X){y(X instanceof Error?X.message:"Failed to load chat")}finally{u(!1)}})()},[]);const R=V.useCallback(async Z=>{if(!(!Z.trim()||d)){h(!0),y(null);try{const X=await qu.sendMessage({content:Z,conversationId:r==null?void 0:r.id});a(z=>z.some(se=>se.id===X.message.id)?z:[...z,X.message]),r||(n(X.conversation),t(z=>[X.conversation,...z])),X.orchestrator&&!X.orchestrator.forwarded&&X.orchestrator.error&&y(X.orchestrator.error)}catch(X){y(X instanceof Error?X.message:"Failed to send message")}finally{h(!1)}}},[d,r]),L=V.useCallback(async Z=>{const X=e.find(z=>z.id===Z);if(X){n(X),u(!0),y(null);try{const z=await qu.getMessagesWithMeta(Z);a(z.messages),D(z.hasMore)}catch(z){y(z instanceof Error?z.message:"Failed to load messages")}finally{u(!1)}}},[e]),B=V.useCallback(async Z=>{const X=await qu.createConversation(Z);return t(z=>[X,...z]),n(X),a([]),X},[]),O=V.useCallback(async Z=>{if(await qu.deleteConversation(Z),t(X=>X.filter(z=>z.id!==Z)),(r==null?void 0:r.id)===Z){const X=e.filter(z=>z.id!==Z);X.length>0?await L(X[0].id):(n(null),a([]))}},[r,e,L]),H=V.useCallback(async Z=>{if(await qu.archiveConversation(Z),t(X=>X.filter(z=>z.id!==Z)),(r==null?void 0:r.id)===Z){const X=e.filter(z=>z.id!==Z);X.length>0?await L(X[0].id):(n(null),a([]))}},[r,e,L]),Y=V.useCallback(async Z=>{await qu.clearConversation(Z),(r==null?void 0:r.id)===Z&&a([])},[r]),le=V.useCallback(async()=>{if(!r)return;const Z=await qu.getMessagesWithMeta(r.id);a(Z.messages),D(Z.hasMore)},[r]),te=V.useCallback(async()=>{if(!(!r||!x||T)){S(!0);try{const Z=o[0];if(!Z)return;const X=await qu.getMessagesWithMeta(r.id,50,Z.timestamp);X.messages.length>0&&a(z=>{const se=new Set(z.map(fe=>fe.id));return[...X.messages.filter(fe=>!se.has(fe.id)),...z]}),D(X.hasMore)}catch(Z){y(Z instanceof Error?Z.message:"Failed to load older messages")}finally{S(!1)}}},[r,x,T,o]),ne=V.useCallback(()=>{y(null)},[]),q={conversations:e,currentConversation:r,messages:o,isLoading:c,isSending:d,error:f,isTyping:v,channelFilter:j,hasMoreMessages:x,isLoadingMore:T,sendMessage:R,selectConversation:L,createConversation:B,deleteConversation:O,archiveConversation:H,clearConversation:Y,refreshMessages:le,loadOlderMessages:te,clearError:ne,setChannelFilter:b};return i.jsxDEV(SH.Provider,{value:q,children:s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/contexts/ChatContext.tsx",lineNumber:486,columnNumber:10},globalThis)},_F=()=>{const s=V.useContext(SH);if(!s)throw new Error("useChat must be used within a ChatProvider");return s},FV={slack:{icon:"🔷",label:"Slack",className:"channel-slack"},crewly_chat:{icon:"💬",label:"Crewly",className:"channel-crewly"},telegram:{icon:"✉️",label:"Telegram",className:"channel-telegram"},api:{icon:"🔌",label:"API",className:"channel-api"}};const Hfe=[{key:null,label:"All"},...Object.entries(FV).map(([s,{icon:e,label:t}])=>({key:s,label:t,icon:e}))],zfe=({activeFilter:s,onFilterChange:e,conversations:t})=>{const r=new Map;r.set(null,t.length);for(const o of t){const a=o.channelType??"crewly_chat";r.set(a,(r.get(a)??0)+1)}const n=Hfe.filter(o=>o.key===null||(r.get(o.key)??0)>0);return i.jsxDEV("div",{className:"channel-filter-bar","data-testid":"channel-filter-bar",children:n.map(o=>{const a=r.get(o.key)??0,c=s===o.key;return i.jsxDEV("button",{className:`filter-chip ${c?"active":""}`,onClick:()=>e(o.key),"data-testid":`filter-chip-${o.key??"all"}`,"aria-pressed":c,children:[o.icon&&i.jsxDEV("span",{className:"filter-chip-icon","aria-hidden":"true",children:o.icon},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:93,columnNumber:15},globalThis),i.jsxDEV("span",{className:"filter-chip-label",children:o.label},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:97,columnNumber:13},globalThis),i.jsxDEV("span",{className:"filter-chip-count",children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:98,columnNumber:13},globalThis)]},o.key??"all",!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:85,columnNumber:11},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:79,columnNumber:5},globalThis)};const EH=({channelType:s,showLabel:e=!0})=>{const t=FV[s]??FV.crewly_chat;return i.jsxDEV("span",{className:`channel-badge ${t.className}`,"data-testid":"channel-badge",title:t.label,children:[i.jsxDEV("span",{className:"channel-badge-icon","aria-hidden":"true",children:t.icon},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelBadge.tsx",lineNumber:47,columnNumber:7},globalThis),e&&i.jsxDEV("span",{className:"channel-badge-label",children:t.label},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelBadge.tsx",lineNumber:50,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelBadge.tsx",lineNumber:42,columnNumber:5},globalThis)},hi={MINUTE:60*1e3,HOUR:60*60*1e3,DAY:24*60*60*1e3,WEEK:7*24*60*60*1e3,MONTH:30*24*60*60*1e3,YEAR:365*24*60*60*1e3};function _H(s,e=new Date){const t=typeof s=="string"?new Date(s):s,r=e.getTime()-t.getTime();if(r<0)return Gfe(Math.abs(r));if(r<hi.MINUTE)return"just now";if(r<hi.HOUR){const n=Math.floor(r/hi.MINUTE);return`${n} ${n===1?"minute":"minutes"} ago`}if(r<hi.DAY){const n=Math.floor(r/hi.HOUR);return`${n} ${n===1?"hour":"hours"} ago`}if(r<hi.DAY*2)return"Yesterday";if(r<hi.WEEK)return`${Math.floor(r/hi.DAY)} days ago`;if(r<hi.MONTH){const n=Math.floor(r/hi.WEEK);return`${n} ${n===1?"week":"weeks"} ago`}if(r<hi.YEAR){const n=Math.floor(r/hi.MONTH);return`${n} ${n===1?"month":"months"} ago`}return Wfe(t)}function Gfe(s){if(s<hi.MINUTE)return"in a moment";if(s<hi.HOUR){const t=Math.floor(s/hi.MINUTE);return`in ${t} ${t===1?"minute":"minutes"}`}if(s<hi.DAY){const t=Math.floor(s/hi.HOUR);return`in ${t} ${t===1?"hour":"hours"}`}return s<hi.DAY*2?"Tomorrow":`in ${Math.floor(s/hi.DAY)} days`}function Wfe(s,e={}){const t={month:"short",day:"numeric",year:"numeric",...e};return s.toLocaleDateString(void 0,t)}const Kfe=({conversation:s,isActive:e,onClick:t})=>{var c,u,d,h,f,y,v;const r=s.channelType??"crewly_chat",n=s.title||((u=(c=s.lastMessage)==null?void 0:c.content)==null?void 0:u.slice(0,60))||"New conversation",o=((d=s.lastMessage)==null?void 0:d.content)??"",a=((f=(h=s.lastMessage)==null?void 0:h.from)==null?void 0:f.name)??((v=(y=s.lastMessage)==null?void 0:y.from)==null?void 0:v.type)??"";return i.jsxDEV("button",{className:`thread-preview ${e?"active":""}`,onClick:t,"data-testid":"thread-preview","aria-pressed":e,children:[i.jsxDEV("div",{className:"thread-preview-header",children:[i.jsxDEV(EH,{channelType:r,showLabel:!1},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:56,columnNumber:9},globalThis),i.jsxDEV("span",{className:"thread-preview-title",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:57,columnNumber:9},globalThis),i.jsxDEV("span",{className:"thread-preview-time",children:_H(s.updatedAt)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:58,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:55,columnNumber:7},globalThis),i.jsxDEV("div",{className:"thread-preview-body",children:[a&&i.jsxDEV("span",{className:"thread-preview-sender",children:[a,": "]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:65,columnNumber:11},globalThis),i.jsxDEV("span",{className:"thread-preview-content",children:o.length>80?o.slice(0,77)+"...":o},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:67,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:63,columnNumber:7},globalThis),i.jsxDEV("div",{className:"thread-preview-footer",children:i.jsxDEV("span",{className:"thread-preview-count",children:[s.messageCount," ",s.messageCount===1?"message":"messages"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:73,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:72,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:49,columnNumber:5},globalThis)};const Xfe=({conversations:s,selectedConversationId:e,onSelectThread:t,channelFilter:r,onChannelFilterChange:n})=>{const a=[...r?s.filter(c=>(c.channelType??"crewly_chat")===r):s].sort((c,u)=>u.updatedAt.localeCompare(c.updatedAt));return i.jsxDEV("div",{className:"thread-list-panel","data-testid":"thread-list-panel",children:[i.jsxDEV(zfe,{activeFilter:r,onFilterChange:n,conversations:s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:63,columnNumber:7},globalThis),i.jsxDEV("div",{className:"thread-list-scroll",children:a.length===0?i.jsxDEV("div",{className:"thread-list-empty","data-testid":"thread-list-empty",children:i.jsxDEV("p",{children:r?"No conversations for this channel.":"No conversations yet."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:72,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:71,columnNumber:11},globalThis):a.map(c=>i.jsxDEV(Kfe,{conversation:c,isActive:c.id===e,onClick:()=>t(c.id)},c.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:80,columnNumber:13},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:69,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:62,columnNumber:5},globalThis)};function qfe(s){if(s.from.name)return s.from.name;switch(s.from.type){case"user":return"You";case"orchestrator":return"Orchestrator";case"agent":return s.from.role??"Agent";case"system":return"System";default:return"Unknown"}}function Zfe(s){switch(s.from.type){case"user":return"👤";case"orchestrator":return"🤖";case"agent":return"🔧";case"system":return"ℹ️";default:return"💬"}}function Yfe(s){return s.split(/(```[\s\S]*?```)/g).map((t,r)=>{if(t.startsWith("```")&&t.endsWith("```")){const n=t.slice(3,-3),o=n.indexOf(`
5213
- `),a=o>0?n.slice(0,o).trim():"",c=o>0?n.slice(o+1):n;return i.jsxDEV("pre",{className:"code-block","data-language":a,children:i.jsxDEV("code",{children:c},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:83,columnNumber:11},this)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:82,columnNumber:9},this)}return i.jsxDEV("span",{children:Jfe(t)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:90,columnNumber:7},this)})}function Jfe(s){return s.split(/(`[^`]+`)/g).map((t,r)=>{if(t.startsWith("`")&&t.endsWith("`"))return i.jsxDEV("code",{className:"inline-code",children:t.slice(1,-1)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:107,columnNumber:9},this);let n=t;const o=/\*\*([^*]+)\*\*/g,a=t.split(o);return a.length>1&&(n=a.map((c,u)=>u%2===1?i.jsxDEV("strong",{children:c},`bold-${r}-${u}`,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:122,columnNumber:11},this):c)),i.jsxDEV(pn.Fragment,{children:n},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:129,columnNumber:12},this)})}const $fe=({message:s})=>{var u,d,h;const[e,t]=V.useState(!1),r=s.from.type==="user",n=s.from.type==="system",o=!!((u=s.metadata)!=null&&u.rawOutput),a=()=>{var f;return e&&((f=s.metadata)!=null&&f.rawOutput)?i.jsxDEV("pre",{className:"raw-output","data-testid":"raw-output",children:s.metadata.rawOutput},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:159,columnNumber:9},globalThis):s.contentType==="code"||s.contentType==="markdown"||s.contentType==="text"?i.jsxDEV("div",{className:"formatted-content",children:Yfe(s.content)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:170,columnNumber:14},globalThis):i.jsxDEV("p",{children:s.content},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:173,columnNumber:12},globalThis)},c=["chat-message",s.from.type,r?"user-message":"",n?"system-message":"",s.status==="error"?"error-status":""].filter(Boolean).join(" ");return i.jsxDEV("div",{className:c,"data-testid":"chat-message",children:[i.jsxDEV("div",{className:"message-header",children:[i.jsxDEV("span",{className:"sender-icon","aria-hidden":"true",children:Zfe(s)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:189,columnNumber:9},globalThis),i.jsxDEV("span",{className:"sender-name",children:qfe(s)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:192,columnNumber:9},globalThis),i.jsxDEV("span",{className:"message-time",children:_H(s.timestamp)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:193,columnNumber:9},globalThis),o&&i.jsxDEV("button",{className:"toggle-raw-btn",onClick:()=>t(!e),title:e?"Show formatted":"Show raw output","aria-label":e?"Show formatted":"Show raw output","data-testid":"toggle-raw-button",children:e?"📝":"🔍"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:195,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:188,columnNumber:7},globalThis),i.jsxDEV("div",{className:"message-content",children:a()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:207,columnNumber:7},globalThis),((d=s.metadata)==null?void 0:d.skillUsed)&&i.jsxDEV("div",{className:"message-metadata",children:i.jsxDEV("span",{className:"skill-badge",children:["Skill: ",s.metadata.skillUsed]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:211,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:210,columnNumber:9},globalThis),((h=s.metadata)==null?void 0:h.taskCreated)&&i.jsxDEV("div",{className:"message-metadata",children:i.jsxDEV("span",{className:"task-badge",children:["Task created: ",s.metadata.taskCreated]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:217,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:216,columnNumber:9},globalThis),s.status==="error"&&i.jsxDEV("div",{className:"message-error",role:"alert",children:"Failed to deliver"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:224,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:187,columnNumber:5},globalThis)};const Qfe=({disabled:s=!1,disabledPlaceholder:e,placeholder:t})=>{const{sendMessage:r,isSending:n,error:o,clearError:a}=_F(),[c,u]=V.useState(""),d=V.useRef(null);V.useEffect(()=>{const N=d.current;N&&(N.style.height="auto",N.style.height=`${Math.min(N.scrollHeight,200)}px`)},[c]);const h=s||n,f=async()=>{if(!c.trim()||h)return;const N=c.trim();u(""),a(),d.current&&(d.current.style.height="auto"),await r(N)},y=N=>{N.key==="Enter"&&!N.shiftKey&&(N.preventDefault(),f())},v=N=>{u(N.target.value),o&&a()};return i.jsxDEV("div",{className:"chat-input-container","data-testid":"chat-input-container",children:[o&&i.jsxDEV("div",{className:"input-error",role:"alert","data-testid":"chat-input-error",children:[i.jsxDEV("span",{children:["Error: ",o]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:109,columnNumber:11},globalThis),i.jsxDEV("button",{className:"dismiss-error",onClick:a,"aria-label":"Dismiss error",children:"×"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:110,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:108,columnNumber:9},globalThis),i.jsxDEV("div",{className:"input-wrapper",children:[i.jsxDEV("textarea",{ref:d,value:c,onChange:v,onKeyDown:y,placeholder:s&&e?e:t??"Type a message... (Enter to send, Shift+Enter for new line)",disabled:h,rows:1,className:`message-input ${s?"disabled-offline":""}`,"data-testid":"chat-message-input","aria-label":"Message input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:121,columnNumber:9},globalThis),i.jsxDEV("button",{onClick:f,disabled:!c.trim()||h,className:"send-button",title:s?"Orchestrator offline":"Send message","data-testid":"chat-send-button","aria-label":n?"Sending message":s?"Orchestrator offline":"Send message",children:n?i.jsxDEV("span",{className:"sending-indicator","aria-hidden":"true",children:"⏳"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:147,columnNumber:13},globalThis):i.jsxDEV("span",{className:"send-icon","aria-hidden":"true",children:"➤"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:151,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:138,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:120,columnNumber:7},globalThis),i.jsxDEV("div",{className:"input-hints",children:[i.jsxDEV("span",{children:["Press ",i.jsxDEV("kbd",{children:"Enter"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:160,columnNumber:17},globalThis)," to send"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:159,columnNumber:9},globalThis),i.jsxDEV("span",{children:[i.jsxDEV("kbd",{children:"Shift"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:163,columnNumber:11},globalThis)," + ",i.jsxDEV("kbd",{children:"Enter"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:163,columnNumber:30},globalThis)," for new line"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:162,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:158,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:106,columnNumber:5},globalThis)};const epe=()=>i.jsxDEV("div",{className:"typing-indicator","data-testid":"typing-indicator",children:[i.jsxDEV("span",{className:"sender-icon","aria-hidden":"true",children:"🤖"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:26,columnNumber:7},globalThis),i.jsxDEV("span",{className:"sender-name",children:"Orchestrator"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:29,columnNumber:7},globalThis),i.jsxDEV("div",{className:"typing-dots","aria-label":"Orchestrator is typing",children:[i.jsxDEV("span",{className:"dot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:31,columnNumber:9},globalThis),i.jsxDEV("span",{className:"dot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:32,columnNumber:9},globalThis),i.jsxDEV("span",{className:"dot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:33,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:30,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:25,columnNumber:5},globalThis);const tpe=60;function rpe(s,e){return s.length<=e?s:s.slice(0,e)+"..."}function spe(s){const e=Date.now()-new Date(s).getTime(),t=Math.floor(e/1e3);if(t<60)return"just now";const r=Math.floor(t/60);return r<60?`${r}m ago`:`${Math.floor(r/60)}h ago`}const npe=()=>{const[s,e]=V.useState(null),[t,r]=V.useState([]),[n,o]=V.useState(!1),[a,c]=V.useState(new Set);V.useEffect(()=>{let U=!1;async function F(){try{const[M,R]=await Promise.all([ss.getQueueStatus(),ss.getPendingMessages()]);U||(e(M),r(R))}catch{}}return F(),()=>{U=!0}},[]);const u=V.useCallback(U=>{e(U)},[]),d=V.useCallback(U=>{r(F=>F.some(M=>M.id===U.id)?F:[...F,U])},[]),h=V.useCallback(U=>{r(F=>F.map(M=>M.id===U.id?{...M,status:"processing",processingStartedAt:U.processingStartedAt}:M))},[]),f=V.useCallback(U=>{r(F=>F.filter(M=>M.id!==U.id))},[]),y=V.useCallback(U=>{r(F=>F.filter(M=>M.id!==U.id))},[]),v=V.useCallback(U=>{r(F=>F.filter(M=>M.id!==U.id)),c(F=>{const M=new Set(F);return M.delete(U.id),M})},[]);V.useEffect(()=>(or.on("queue:status_update",u),or.on("queue:message_enqueued",d),or.on("queue:message_processing",h),or.on("queue:message_completed",f),or.on("queue:message_failed",y),or.on("queue:message_cancelled",v),()=>{or.off("queue:status_update",u),or.off("queue:message_enqueued",d),or.off("queue:message_processing",h),or.off("queue:message_completed",f),or.off("queue:message_failed",y),or.off("queue:message_cancelled",v)}),[u,d,h,f,y,v]);const N=async U=>{c(F=>new Set(F).add(U));try{await ss.cancelQueueMessage(U)}catch{c(F=>{const M=new Set(F);return M.delete(U),M})}},[j,b]=V.useState(!1),x=async()=>{b(!0);try{await ss.clearQueue(),r([]),e(null)}catch{}finally{b(!1)}},D=(s==null?void 0:s.pendingCount)??t.filter(U=>U.status==="pending").length,T=(s==null?void 0:s.isProcessing)??t.some(U=>U.status==="processing");if(D===0&&!T&&t.length===0)return null;const S=[];D>0&&S.push(`${D} queued`),T&&S.push("1 processing");const k=S.join(" · ");return i.jsxDEV("div",{className:"queue-status-bar","data-testid":"queue-status-bar",children:[i.jsxDEV("div",{className:"queue-status-summary",onClick:()=>o(!n),"data-testid":"queue-status-summary",role:"button",tabIndex:0,onKeyDown:U=>{(U.key==="Enter"||U.key===" ")&&(U.preventDefault(),o(!n))},children:[T&&i.jsxDEV("div",{className:"queue-spinner","data-testid":"queue-spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:248,columnNumber:26},globalThis),i.jsxDEV("span",{className:"queue-status-text",children:k},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:249,columnNumber:9},globalThis),i.jsxDEV("button",{className:"queue-clear-all-btn",onClick:U=>{U.stopPropagation(),x()},disabled:j,"data-testid":"queue-clear-all-btn",title:"Clear all queued messages",children:j?"Clearing...":"Clear All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:250,columnNumber:9},globalThis),i.jsxDEV("button",{className:`queue-toggle-btn${n?" expanded":""}`,"aria-label":n?"Collapse queue":"Expand queue",tabIndex:-1,children:"▼"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:262,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:235,columnNumber:7},globalThis),i.jsxDEV("div",{className:`queue-message-list${n?" expanded":""}`,"data-testid":"queue-message-list",children:t.map(U=>i.jsxDEV("div",{className:`queue-message-item${U.status==="processing"?" processing":""}`,"data-testid":"queue-message-item",children:[i.jsxDEV("div",{className:"queue-item-status",children:U.status==="processing"?i.jsxDEV("div",{className:"queue-spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:283,columnNumber:17},globalThis):i.jsxDEV("span",{"aria-label":"pending",children:"🕑"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:285,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:281,columnNumber:13},globalThis),i.jsxDEV("div",{className:"queue-item-content",children:[i.jsxDEV("p",{className:"queue-item-preview",children:rpe(U.content,tpe)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:290,columnNumber:15},globalThis),i.jsxDEV("div",{className:"queue-item-meta",children:[i.jsxDEV("span",{className:"queue-source-badge",children:U.source==="slack"?"slack":"web"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:292,columnNumber:17},globalThis),i.jsxDEV("span",{className:"queue-item-time",children:spe(U.enqueuedAt)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:293,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:291,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:289,columnNumber:13},globalThis),i.jsxDEV("button",{className:"queue-cancel-btn",onClick:()=>U.status==="processing"?x():N(U.id),disabled:a.has(U.id)||j,"data-testid":"queue-cancel-btn",children:a.has(U.id)||j?"Cancelling...":"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:297,columnNumber:13},globalThis)]},U.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:276,columnNumber:11},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:271,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:234,columnNumber:5},globalThis)};const ope=[/^[\s⏺❯▸▶►›»─━┄┅┈┉╌╍═│┃┆┇┊┋╎╏║┌┐└┘├┤┬┴┼╔╗╚╝╠╣╦╩╬╭╮╰╯\s]*$/,/bypass permissions on/i,/shift\+tab to cycle/i,/esc to interrupt/i,/^\s*▸▸\s/];function ipe(s){const e=s.trim();return e?ope.some(t=>t.test(e)):!0}function ape(s){return s.filter(e=>!(e.from.type!=="user"&&e.from.type!=="orchestrator"||ipe(e.content)))}const lpe=({conversation:s,onBack:e})=>{const{messages:t,isLoading:r,error:n,isTyping:o,hasMoreMessages:a,isLoadingMore:c,loadOlderMessages:u}=_F(),d=ape(t),{status:h,isLoading:f}=h6(),y=V.useRef(null),v=V.useRef(null),[N,j]=V.useState(!1),b=V.useCallback(()=>{requestAnimationFrame(()=>{var S;(S=v.current)==null||S.scrollIntoView({behavior:"auto"})})},[]);V.useEffect(()=>{b()},[d,o,b]);const x=V.useCallback(()=>{const S=y.current;if(!S)return;const k=S.scrollHeight-S.scrollTop-S.clientHeight;if(j(k>100),S.scrollTop<50&&a&&!c){const U=S.scrollHeight;u().then(()=>{requestAnimationFrame(()=>{const F=S.scrollHeight;S.scrollTop=F-U})})}},[a,c,u]),D=!f&&h&&!h.isActive,T=(s==null?void 0:s.channelType)??"crewly_chat";return s?r&&d.length===0?i.jsxDEV("div",{className:"thread-detail-panel loading","data-testid":"thread-detail-loading",children:i.jsxDEV("div",{className:"loading-spinner",children:[i.jsxDEV("div",{className:"spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:169,columnNumber:11},globalThis),i.jsxDEV("span",{children:"Loading messages..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:170,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:168,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:167,columnNumber:7},globalThis):n&&d.length===0?i.jsxDEV("div",{className:"thread-detail-panel error","data-testid":"thread-detail-error",children:i.jsxDEV("div",{className:"error-message",children:[i.jsxDEV("span",{className:"error-icon",children:"⚠️"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:181,columnNumber:11},globalThis),i.jsxDEV("p",{children:["Error: ",n]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:182,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>window.location.reload(),className:"retry-button",children:"Retry"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:183,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:180,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:179,columnNumber:7},globalThis):i.jsxDEV("div",{className:"thread-detail-panel","data-testid":"thread-detail-panel",children:[i.jsxDEV("header",{className:"thread-detail-header",children:[e&&i.jsxDEV("button",{className:"thread-detail-back",onClick:e,"aria-label":"Back to thread list","data-testid":"thread-detail-back",children:"←"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:198,columnNumber:11},globalThis),i.jsxDEV("div",{className:"thread-detail-header-info",children:[i.jsxDEV("h2",{children:s.title??"Chat with Orchestrator"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:208,columnNumber:11},globalThis),i.jsxDEV("div",{className:"thread-detail-header-meta",children:i.jsxDEV(EH,{channelType:T},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:210,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:209,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:207,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:196,columnNumber:7},globalThis),i.jsxDEV(npe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:215,columnNumber:7},globalThis),D&&i.jsxDEV("div",{className:"orchestrator-offline-banner","data-testid":"orchestrator-offline-banner",children:[i.jsxDEV("span",{className:"offline-icon","aria-hidden":"true",children:"⚠️"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:219,columnNumber:11},globalThis),i.jsxDEV("div",{className:"offline-content",children:[i.jsxDEV("strong",{children:"Orchestrator Offline"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:221,columnNumber:13},globalThis),i.jsxDEV("p",{children:(h==null?void 0:h.offlineMessage)||(h==null?void 0:h.message)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:222,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:220,columnNumber:11},globalThis),i.jsxDEV(Ob,{to:"/",className:"dashboard-link",children:"Go to Dashboard"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:224,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:218,columnNumber:9},globalThis),i.jsxDEV("div",{className:"messages-container",ref:y,onScroll:x,"data-testid":"messages-container",children:[c&&i.jsxDEV("div",{className:"load-more-spinner","data-testid":"load-more-spinner",children:[i.jsxDEV("div",{className:"spinner spinner-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:238,columnNumber:13},globalThis),i.jsxDEV("span",{children:"Loading older messages..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:239,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:237,columnNumber:11},globalThis),d.length===0?i.jsxDEV("div",{className:"empty-chat","data-testid":"empty-chat",children:i.jsxDEV("div",{className:"welcome-message",children:[i.jsxDEV("h3",{children:"Welcome to Crewly"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:246,columnNumber:15},globalThis),i.jsxDEV("p",{children:"Start a conversation with the Orchestrator."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:247,columnNumber:15},globalThis),i.jsxDEV("p",{children:"Try asking to:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:248,columnNumber:15},globalThis),i.jsxDEV("ul",{children:[i.jsxDEV("li",{children:"Create a new project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:250,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Assign a task to an agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:251,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Check project status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:252,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Configure a team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:253,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:249,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:245,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:244,columnNumber:11},globalThis):i.jsxDEV(i.Fragment,{children:d.map(S=>i.jsxDEV($fe,{message:S},S.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:260,columnNumber:15},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:258,columnNumber:11},globalThis),o&&i.jsxDEV(epe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:265,columnNumber:22},globalThis),i.jsxDEV("div",{ref:v,className:"messages-end"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:267,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:230,columnNumber:7},globalThis),N&&i.jsxDEV("button",{className:"scroll-to-bottom-btn",onClick:b,"aria-label":"Scroll to bottom","data-testid":"scroll-to-bottom",children:"↓"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:271,columnNumber:9},globalThis),i.jsxDEV(Qfe,{disabled:D,disabledPlaceholder:"Orchestrator is offline. Start it from the Dashboard to chat.",placeholder:"Reply in thread..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:281,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:195,columnNumber:5},globalThis):i.jsxDEV("div",{className:"thread-detail-panel empty","data-testid":"thread-detail-empty",children:i.jsxDEV("div",{className:"thread-detail-empty-state",children:[i.jsxDEV("h3",{children:"Select a thread"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:157,columnNumber:11},globalThis),i.jsxDEV("p",{children:"Choose a conversation from the list to view messages."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:158,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:156,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:155,columnNumber:7},globalThis)};const cpe=()=>{const{conversations:s,currentConversation:e,selectConversation:t,channelFilter:r,setChannelFilter:n}=_F(),[o,a]=V.useState("list"),c=V.useCallback(async d=>{await t(d),a("detail")},[t]),u=V.useCallback(()=>{a("list")},[]);return i.jsxDEV("div",{className:"chat-page thread-layout",children:[i.jsxDEV("header",{className:"chat-page-header",children:[i.jsxDEV("h1",{children:"Chat with Orchestrator"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:56,columnNumber:9},globalThis),i.jsxDEV("p",{children:"Communicate with the Crewly orchestrator to manage projects and teams"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:57,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:55,columnNumber:7},globalThis),i.jsxDEV("div",{className:"chat-page-content",children:[i.jsxDEV("aside",{className:`chat-page-sidebar ${o==="list"?"mobile-visible":"mobile-hidden"}`,children:i.jsxDEV(Xfe,{conversations:s,selectedConversationId:(e==null?void 0:e.id)??null,onSelectThread:c,channelFilter:r,onChannelFilterChange:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:64,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:61,columnNumber:9},globalThis),i.jsxDEV("main",{className:`chat-page-main ${o==="detail"?"mobile-visible":"mobile-hidden"}`,children:i.jsxDEV(lpe,{conversation:e,onBack:u},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:76,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:73,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:60,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:54,columnNumber:5},globalThis)},ev="/api/marketplace";async function upe(s){const e=new URLSearchParams;s!=null&&s.type&&e.set("type",s.type),s!=null&&s.search&&e.set("search",s.search),s!=null&&s.sort&&e.set("sort",s.sort);const t=e.toString(),r=`${ev}${t?`?${t}`:""}`;return(await ar.get(r)).data.data}async function dpe(s){return(await ar.post(`${ev}/${s}/install`)).data}async function mpe(s){return(await ar.post(`${ev}/${s}/uninstall`)).data}async function hpe(s){return(await ar.post(`${ev}/${s}/update`)).data}async function vB(){await ar.post(`${ev}/refresh`)}async function fpe(s){const e=s?`?status=${s}`:"";return(await ar.get(`${ev}/submissions${e}`)).data.data}async function ppe(s,e,t){return(await ar.post(`${ev}/submissions/${s}/review`,{action:e,notes:t})).data}const ype=4e3;function gpe(){const[s,e]=V.useState([]),t=V.useRef(0),r=V.useCallback((o,a="info")=>{const c=`toast-${++t.current}`,u={id:c,message:o,type:a};e(d=>[...d,u]),setTimeout(()=>{e(d=>d.filter(h=>h.id!==c))},ype)},[]),n=V.useCallback(o=>{e(a=>a.filter(c=>c.id!==o))},[]);return{toasts:s,addToast:r,dismissToast:n}}const bpe={success:"border-green-500 bg-green-500/10 text-green-300",error:"border-red-500 bg-red-500/10 text-red-300",info:"border-blue-500 bg-blue-500/10 text-blue-300"};function vpe({toasts:s,onDismiss:e}){return s.length===0?null:i.jsxDEV("div",{className:"fixed bottom-4 right-4 z-50 flex flex-col gap-2 max-w-sm",role:"log","aria-live":"polite",children:s.map(t=>i.jsxDEV("div",{"data-testid":`toast-${t.type}`,className:`flex items-center gap-3 px-4 py-3 rounded-lg border text-sm shadow-lg backdrop-blur-sm ${bpe[t.type]}`,children:[i.jsxDEV("span",{className:"flex-1",children:t.message},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:50,columnNumber:11},this),i.jsxDEV("button",{onClick:()=>e(t.id),className:"text-gray-400 hover:text-white transition-colors shrink-0","aria-label":"Dismiss notification",children:i.jsxDEV(jn,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:56,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:51,columnNumber:11},this)]},t.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:45,columnNumber:9},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:43,columnNumber:5},this)}const wpe=[{label:"All",value:"all"},{label:"Skills",value:"skill"},{label:"3D Models",value:"model"},{label:"Roles",value:"role"},{label:"MCP Tools",value:"mcp_tool"}],xpe=[{label:"Popular",value:"popular"},{label:"Highest Rated",value:"rating"},{label:"Newest",value:"newest"}];function Npe(s){return s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}const Dpe={skill:"bg-blue-500/20 text-blue-400",model:"bg-purple-500/20 text-purple-400",role:"bg-emerald-500/20 text-emerald-400",mcp_tool:"bg-orange-500/20 text-orange-400"};function Tpe(){const[s,e]=V.useState("browse"),[t,r]=V.useState([]),[n,o]=V.useState([]),[a,c]=V.useState(!0),[u,d]=V.useState("all"),[h,f]=V.useState(""),[y,v]=V.useState("popular"),[N,j]=V.useState(null),[b,x]=V.useState(null),{toasts:D,addToast:T,dismissToast:S}=gpe(),k=V.useCallback(async()=>{try{c(!0),x(null);const O=await upe({type:u==="all"?void 0:u,search:h||void 0,sort:y});r(O)}catch{x("Failed to load marketplace items")}finally{c(!1)}},[u,h,y]);V.useEffect(()=>{k()},[k]);const U=async O=>{j(O);try{const H=await dpe(O);T(H.message||`Installed ${O}`,H.success?"success":"error"),await k()}catch(H){const Y=H instanceof Error?H.message:"Install failed";T(Y,"error")}j(null)},F=async O=>{j(O);try{const H=await mpe(O);T(H.message||`Uninstalled ${O}`,H.success?"success":"error"),await k()}catch(H){const Y=H instanceof Error?H.message:"Uninstall failed";T(Y,"error")}j(null)},M=async O=>{j(O);try{const H=await hpe(O);T(H.message||`Updated ${O}`,H.success?"success":"error"),await k()}catch(H){const Y=H instanceof Error?H.message:"Update failed";T(Y,"error")}j(null)},R=async()=>{try{await vB(),T("Registry refreshed","success"),await k()}catch{T("Failed to refresh registry","error")}},L=V.useCallback(async()=>{try{c(!0),x(null);const O=await fpe();o(O)}catch{x("Failed to load submissions")}finally{c(!1)}},[]);V.useEffect(()=>{s==="submissions"&&L()},[s,L]);const B=async(O,H)=>{j(O);try{const Y=await ppe(O,H);T(Y.message||`${H==="approve"?"Approved":"Rejected"}`,Y.success?"success":"error"),await L(),H==="approve"&&await vB()}catch(Y){const le=Y instanceof Error?Y.message:"Review failed";T(le,"error")}j(null)};return i.jsxDEV("div",{className:"p-6 max-w-7xl mx-auto",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-6",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(n9,{className:"w-6 h-6 text-indigo-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:225,columnNumber:11},this),i.jsxDEV("h1",{className:"text-2xl font-bold text-white",children:"Marketplace"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:226,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:224,columnNumber:9},this),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("div",{className:"flex gap-1 bg-gray-900 rounded-lg p-1",role:"tablist","aria-label":"View mode",children:[i.jsxDEV("button",{onClick:()=>e("browse"),role:"tab","aria-selected":s==="browse",className:`flex items-center gap-1 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="browse"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(IL,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:238,columnNumber:15},this),"Browse"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:230,columnNumber:13},this),i.jsxDEV("button",{onClick:()=>e("submissions"),role:"tab","aria-selected":s==="submissions",className:`flex items-center gap-1 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="submissions"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(LX,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:249,columnNumber:15},this),"Submissions"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:241,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:229,columnNumber:11},this),i.jsxDEV("button",{onClick:R,className:"flex items-center gap-2 px-3 py-1.5 text-sm bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg transition-colors","aria-label":"Refresh marketplace",children:[i.jsxDEV(il,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:258,columnNumber:13},this),"Refresh"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:253,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:228,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:223,columnNumber:7},this),s==="browse"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4 mb-6",children:[i.jsxDEV("div",{className:"flex gap-1 bg-gray-900 rounded-lg p-1",role:"tablist","aria-label":"Filter by type",children:wpe.map(O=>i.jsxDEV("button",{onClick:()=>d(O.value),role:"tab","aria-selected":u===O.value,className:`px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${u===O.value?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:O.label},O.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:270,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:268,columnNumber:13},this),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"relative",children:[i.jsxDEV(XV,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:286,columnNumber:17},this),i.jsxDEV("input",{type:"text",placeholder:"Search...",value:h,onChange:O=>f(O.target.value),"aria-label":"Search marketplace",className:"bg-gray-900 border border-gray-700 rounded-lg pl-9 pr-3 py-1.5 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500 w-48"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:287,columnNumber:17},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:285,columnNumber:15},this),i.jsxDEV("select",{value:y,onChange:O=>v(O.target.value),"aria-label":"Sort by",className:"bg-gray-900 border border-gray-700 rounded-lg px-3 py-1.5 text-sm text-gray-200 focus:outline-none focus:border-indigo-500",children:xpe.map(O=>i.jsxDEV("option",{value:O.value,children:O.label},O.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:303,columnNumber:19},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:296,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:284,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:267,columnNumber:11},this),a?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",role:"status",children:"Loading marketplace..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:311,columnNumber:13},this):b?i.jsxDEV("div",{className:"text-center py-16 text-red-400",role:"alert",children:b},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:313,columnNumber:13},this):t.length===0?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",children:"No items found."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:315,columnNumber:13},this):i.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:t.map(O=>i.jsxDEV("div",{className:"bg-gray-900 border border-gray-800 rounded-xl p-5 hover:border-gray-700 transition-colors","data-testid":`marketplace-item-${O.id}`,children:[i.jsxDEV("div",{className:"flex items-start justify-between mb-3",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${Dpe[O.type]}`,children:O.type},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:327,columnNumber:23},this),i.jsxDEV("span",{className:"text-xs text-gray-500",children:["v",O.version]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:330,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:326,columnNumber:21},this),O.installStatus==="installed"&&i.jsxDEV(Mi,{className:"w-4 h-4 text-green-400","aria-label":"Installed"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:333,columnNumber:23},this),O.installStatus==="update_available"&&i.jsxDEV(ML,{className:"w-4 h-4 text-yellow-400","aria-label":"Update available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:336,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:325,columnNumber:19},this),i.jsxDEV("h3",{className:"text-base font-semibold text-white mb-1",children:O.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:341,columnNumber:19},this),i.jsxDEV("p",{className:"text-sm text-gray-400 mb-3 line-clamp-2",children:O.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:342,columnNumber:19},this),i.jsxDEV("div",{className:"flex items-center justify-between text-xs text-gray-500 mb-4",children:[i.jsxDEV("span",{children:["by ",O.author]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:346,columnNumber:21},this),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(RX,{className:"w-3 h-3 text-yellow-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:349,columnNumber:25},this),O.rating.toFixed(1)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:348,columnNumber:23},this),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(GV,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:353,columnNumber:25},this),Npe(O.downloads)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:352,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:347,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:345,columnNumber:19},this),i.jsxDEV("div",{className:"flex gap-2",children:[O.installStatus==="not_installed"&&i.jsxDEV("button",{onClick:()=>U(O.id),disabled:N===O.id,className:"flex-1 flex items-center justify-center gap-1 px-3 py-1.5 text-sm bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(IL,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:367,columnNumber:25},this),N===O.id?"Installing...":"Install"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:362,columnNumber:23},this),O.installStatus==="installed"&&i.jsxDEV("button",{onClick:()=>F(O.id),disabled:N===O.id,className:"flex-1 px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg disabled:opacity-50 transition-colors",children:N===O.id?"Removing...":"Uninstall"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:372,columnNumber:23},this),O.installStatus==="update_available"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("button",{onClick:()=>M(O.id),disabled:N===O.id,className:"flex-1 flex items-center justify-center gap-1 px-3 py-1.5 text-sm bg-yellow-600 hover:bg-yellow-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(ML,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:387,columnNumber:27},this),N===O.id?"Updating...":"Update"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:382,columnNumber:25},this),i.jsxDEV("button",{onClick:()=>F(O.id),disabled:N===O.id,className:"px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg disabled:opacity-50 transition-colors",children:"Remove"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:390,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:381,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:360,columnNumber:19},this)]},O.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:319,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:317,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:265,columnNumber:9},this),s==="submissions"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"mb-6",children:i.jsxDEV("p",{className:"text-sm text-gray-400",children:["Submit skills via CLI: ",i.jsxDEV("code",{className:"bg-gray-800 px-2 py-0.5 rounded text-xs text-gray-300",children:"crewly publish path/to/skill --submit"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:412,columnNumber:38},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:411,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:410,columnNumber:11},this),a?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",role:"status",children:"Loading submissions..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:418,columnNumber:13},this):b?i.jsxDEV("div",{className:"text-center py-16 text-red-400",role:"alert",children:b},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:420,columnNumber:13},this):n.length===0?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",children:"No submissions yet."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:422,columnNumber:13},this):i.jsxDEV("div",{className:"space-y-3",children:n.map(O=>i.jsxDEV("div",{className:"bg-gray-900 border border-gray-800 rounded-xl p-5 hover:border-gray-700 transition-colors","data-testid":`submission-${O.id}`,children:i.jsxDEV("div",{className:"flex items-start justify-between",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[i.jsxDEV("h3",{className:"text-base font-semibold text-white",children:O.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:434,columnNumber:25},this),i.jsxDEV("span",{className:"text-xs text-gray-500",children:["v",O.version]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:435,columnNumber:25},this),i.jsxDEV("span",{className:`flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium ${O.status==="pending"?"bg-yellow-500/20 text-yellow-400":O.status==="approved"?"bg-green-500/20 text-green-400":"bg-red-500/20 text-red-400"}`,children:[O.status==="pending"&&i.jsxDEV(eu,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:441,columnNumber:56},this),O.status==="approved"&&i.jsxDEV(Vl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:442,columnNumber:57},this),O.status==="rejected"&&i.jsxDEV(Zk,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:443,columnNumber:57},this),O.status]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:436,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:433,columnNumber:23},this),i.jsxDEV("p",{className:"text-sm text-gray-400 mb-2",children:O.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:447,columnNumber:23},this),i.jsxDEV("div",{className:"flex items-center gap-4 text-xs text-gray-500",children:[i.jsxDEV("span",{children:["by ",O.author]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:449,columnNumber:25},this),i.jsxDEV("span",{children:O.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:450,columnNumber:25},this),i.jsxDEV("span",{children:new Date(O.submittedAt).toLocaleDateString()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:451,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:448,columnNumber:23},this),O.reviewNotes&&i.jsxDEV("p",{className:"mt-2 text-xs text-gray-400 italic",children:["Review: ",O.reviewNotes]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:454,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:432,columnNumber:21},this),O.status==="pending"&&i.jsxDEV("div",{className:"flex gap-2 ml-4",children:[i.jsxDEV("button",{onClick:()=>B(O.id,"approve"),disabled:N===O.id,className:"flex items-center gap-1 px-3 py-1.5 text-sm bg-green-600 hover:bg-green-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(Vl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:464,columnNumber:27},this),N===O.id?"...":"Approve"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:459,columnNumber:25},this),i.jsxDEV("button",{onClick:()=>B(O.id,"reject"),disabled:N===O.id,className:"px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg disabled:opacity-50 transition-colors",children:"Reject"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:467,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:458,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:431,columnNumber:19},this)},O.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:426,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:424,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:408,columnNumber:9},this),i.jsxDEV(vpe,{toasts:D,onDismiss:S},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:484,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:221,columnNumber:5},this)}function jpe({scope:s,onScopeChange:e,projects:t,selectedProjectPath:r,onProjectChange:n}){return i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"flex gap-1 bg-gray-900 rounded-lg p-1",role:"tablist","aria-label":"Document scope",children:[i.jsxDEV("button",{role:"tab","aria-selected":s==="global",onClick:()=>e("global"),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="global"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(ZB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:50,columnNumber:11},this),"Global"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:42,columnNumber:9},this),i.jsxDEV("button",{role:"tab","aria-selected":s==="project",onClick:()=>e("project"),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="project"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(ol,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:61,columnNumber:11},this),"Project"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:53,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:41,columnNumber:7},this),s==="project"&&i.jsxDEV("select",{value:r||"",onChange:o=>n(o.target.value),"aria-label":"Select project",className:"bg-gray-900 border border-gray-700 rounded-lg px-3 py-1.5 text-sm text-gray-200 focus:outline-none focus:border-indigo-500",children:[i.jsxDEV("option",{value:"",disabled:!0,children:"Select a project..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:73,columnNumber:11},this),t.map(o=>i.jsxDEV("option",{value:o.path,children:o.name},o.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:75,columnNumber:13},this))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:40,columnNumber:5},this)}function Spe({categories:s,selectedCategory:e,onCategoryChange:t}){return i.jsxDEV("div",{className:"space-y-1",role:"listbox","aria-label":"Filter by category",children:[i.jsxDEV("button",{role:"option","aria-selected":e==="",onClick:()=>t(""),className:`w-full text-left px-3 py-2 rounded-lg text-sm transition-colors ${e===""?"bg-indigo-600/20 text-indigo-400 font-medium":"text-gray-400 hover:bg-gray-800 hover:text-gray-200"}`,children:"All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeCategoryFilter.tsx",lineNumber:32,columnNumber:7},this),s.map(r=>i.jsxDEV("button",{role:"option","aria-selected":e===r,onClick:()=>t(r),className:`w-full text-left px-3 py-2 rounded-lg text-sm transition-colors ${e===r?"bg-indigo-600/20 text-indigo-400 font-medium":"text-gray-400 hover:bg-gray-800 hover:text-gray-200"}`,children:r},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeCategoryFilter.tsx",lineNumber:45,columnNumber:9},this))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeCategoryFilter.tsx",lineNumber:31,columnNumber:5},this)}function Epe(s){try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch{return s}}function _pe({documents:s,loading:e,searchQuery:t,onSearchChange:r,selectedDocId:n,onSelectDocument:o}){return i.jsxDEV("div",{className:"flex flex-col h-full",children:[i.jsxDEV("div",{className:"relative mb-4",children:[i.jsxDEV(XV,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:64,columnNumber:9},this),i.jsxDEV("input",{type:"text",placeholder:"Search documents...",value:t,onChange:a=>r(a.target.value),"aria-label":"Search documents",className:"w-full bg-gray-900 border border-gray-700 rounded-lg pl-9 pr-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:65,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:63,columnNumber:7},this),e?i.jsxDEV("div",{className:"text-center py-8 text-gray-400",role:"status",children:"Loading documents..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:77,columnNumber:9},this):s.length===0?i.jsxDEV("div",{className:"text-center py-8 text-gray-500",children:[i.jsxDEV(X0,{className:"w-8 h-8 mx-auto mb-2 opacity-50"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:80,columnNumber:11},this),i.jsxDEV("p",{children:"No documents found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:81,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:79,columnNumber:9},this):i.jsxDEV("div",{className:"space-y-1 overflow-y-auto flex-1",children:s.map(a=>i.jsxDEV("button",{onClick:()=>o(a.id),className:`w-full text-left px-3 py-3 rounded-lg transition-colors ${n===a.id?"bg-indigo-600/20 border border-indigo-500/30":"hover:bg-gray-800 border border-transparent"}`,children:[i.jsxDEV("div",{className:"flex items-start justify-between gap-2",children:[i.jsxDEV("div",{className:"min-w-0 flex-1",children:[i.jsxDEV("h4",{className:"text-sm font-medium text-gray-200 truncate",children:a.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:97,columnNumber:19},this),i.jsxDEV("p",{className:"text-xs text-gray-500 mt-0.5 line-clamp-1",children:a.preview},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:98,columnNumber:19},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:96,columnNumber:17},this),i.jsxDEV("div",{className:"flex flex-col items-end flex-shrink-0",children:[i.jsxDEV("span",{className:"text-xs px-1.5 py-0.5 rounded bg-gray-800 text-gray-400",children:a.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:101,columnNumber:19},this),i.jsxDEV("span",{className:"text-xs text-gray-600 mt-1",children:Epe(a.updatedAt)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:104,columnNumber:19},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:100,columnNumber:17},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:95,columnNumber:15},this),a.tags.length>0&&i.jsxDEV("div",{className:"flex gap-1 mt-1.5 flex-wrap",children:[a.tags.slice(0,3).map(c=>i.jsxDEV("span",{className:"text-xs px-1.5 py-0.5 rounded bg-gray-900 text-gray-500",children:c},c,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:110,columnNumber:21},this)),a.tags.length>3&&i.jsxDEV("span",{className:"text-xs text-gray-600",children:["+",a.tags.length-3]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:115,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:108,columnNumber:17},this)]},a.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:86,columnNumber:13},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:84,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:61,columnNumber:5},this)}function kpe(s){try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}function Cpe({document:s,onEdit:e,onDelete:t}){return i.jsxDEV("div",{className:"h-full overflow-y-auto",children:[i.jsxDEV("div",{className:"flex items-start justify-between mb-4",children:[i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("h2",{className:"text-xl font-bold text-white mb-2",children:s.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:58,columnNumber:11},this),i.jsxDEV("div",{className:"flex items-center gap-4 text-xs text-gray-500",children:[i.jsxDEV("span",{className:"px-2 py-0.5 rounded bg-gray-800 text-gray-300",children:s.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:60,columnNumber:13},this),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(Nx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:62,columnNumber:15},this),s.createdBy]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:61,columnNumber:13},this),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(eu,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:66,columnNumber:15},this),kpe(s.updatedAt)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:65,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:59,columnNumber:11},this),s.tags.length>0&&i.jsxDEV("div",{className:"flex gap-1.5 mt-2 flex-wrap",children:s.tags.map(r=>i.jsxDEV("span",{className:"text-xs px-2 py-0.5 rounded-full bg-indigo-500/10 text-indigo-400",children:r},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:73,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:71,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:57,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-2 ml-4",children:[i.jsxDEV("button",{onClick:e,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg transition-colors","aria-label":"Edit document",children:[i.jsxDEV(QB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:86,columnNumber:13},this),"Edit"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:81,columnNumber:11},this),i.jsxDEV("button",{onClick:t,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg transition-colors","aria-label":"Delete document",children:[i.jsxDEV(aj,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:94,columnNumber:13},this),"Delete"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:89,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:80,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:56,columnNumber:7},this),i.jsxDEV("div",{className:"border-t border-gray-800 pt-4",children:i.jsxDEV("div",{className:"prose prose-invert prose-sm max-w-none whitespace-pre-wrap text-gray-300 leading-relaxed",children:s.content},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:102,columnNumber:9},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:101,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:54,columnNumber:5},this)}const Ape=["SOPs","Team Norms","Architecture","Onboarding","Runbooks","General"];function wB({document:s,categories:e,saving:t,onSave:r,onCancel:n}){const[o,a]=V.useState((s==null?void 0:s.title)||""),[c,u]=V.useState((s==null?void 0:s.content)||""),[d,h]=V.useState((s==null?void 0:s.category)||"General"),[f,y]=V.useState((s==null?void 0:s.tags.join(", "))||""),v=[...new Set([...Ape,...e])].sort(),N=b=>{b.preventDefault();const x=f.split(",").map(D=>D.trim()).filter(Boolean);r({title:o,content:c,category:d,tags:x})},j=o.trim().length>0&&c.trim().length>0;return i.jsxDEV("form",{onSubmit:N,className:"h-full flex flex-col",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[i.jsxDEV("h2",{className:"text-lg font-bold text-white",children:s?"Edit Document":"New Document"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:64,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("button",{type:"button",onClick:n,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg transition-colors",children:[i.jsxDEV(jn,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:73,columnNumber:13},this),"Cancel"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:68,columnNumber:11},this),i.jsxDEV("button",{type:"submit",disabled:!j||t,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(ij,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:81,columnNumber:13},this),t?"Saving...":"Save"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:76,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:63,columnNumber:7},this),i.jsxDEV("div",{className:"space-y-4 flex-1 flex flex-col",children:[i.jsxDEV("div",{children:[i.jsxDEV("label",{htmlFor:"doc-title",className:"block text-sm font-medium text-gray-300 mb-1",children:"Title"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:90,columnNumber:11},this),i.jsxDEV("input",{id:"doc-title",type:"text",value:o,onChange:b=>a(b.target.value),placeholder:"Document title",className:"w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500",maxLength:200},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:91,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:89,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-4",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"doc-category",className:"block text-sm font-medium text-gray-300 mb-1",children:"Category"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:105,columnNumber:13},this),i.jsxDEV("select",{id:"doc-category",value:d,onChange:b=>h(b.target.value),className:"w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 focus:outline-none focus:border-indigo-500",children:v.map(b=>i.jsxDEV("option",{value:b,children:b},b,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:113,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:106,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:104,columnNumber:11},this),i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"doc-tags",className:"block text-sm font-medium text-gray-300 mb-1",children:"Tags (comma-separated)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:118,columnNumber:13},this),i.jsxDEV("input",{id:"doc-tags",type:"text",value:f,onChange:b=>y(b.target.value),placeholder:"api, backend, auth",className:"w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:119,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:117,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:103,columnNumber:9},this),i.jsxDEV("div",{className:"flex-1 flex flex-col",children:[i.jsxDEV("label",{htmlFor:"doc-content",className:"block text-sm font-medium text-gray-300 mb-1",children:"Content (Markdown)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:132,columnNumber:11},this),i.jsxDEV("textarea",{id:"doc-content",value:c,onChange:b=>u(b.target.value),placeholder:"Write your document content in Markdown...",className:"flex-1 min-h-[200px] w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500 font-mono resize-none"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:133,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:131,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:87,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:62,columnNumber:5},this)}function Mpe(){const[s,e]=eA(),[t,r]=V.useState(s.get("project")?"project":"global"),[n,o]=V.useState([]),[a,c]=V.useState(""),[u,d]=V.useState([]),[h,f]=V.useState([]),[y,v]=V.useState(""),[N,j]=V.useState(""),[b,x]=V.useState(!0),[D,T]=V.useState("list"),[S,k]=V.useState(),[U,F]=V.useState(null),[M,R]=V.useState(!1),[L,B]=V.useState(null);V.useEffect(()=>{ss.getProjects().then(o).catch(()=>{})},[]),V.useEffect(()=>{const Z=s.get("project");if(Z&&n.length>0){const X=n.find(z=>z.id===Z);X&&(r("project"),c(X.path))}},[s,n]);const O=V.useCallback(async()=>{try{if(x(!0),B(null),t==="project"&&!a){d([]),f([]),x(!1);return}const[Z,X]=await Promise.all([ss.getKnowledgeDocuments(t,a||void 0,y||void 0,N||void 0),ss.getKnowledgeCategories(t,a||void 0)]);d(Z),f(X)}catch{B("Failed to load documents")}finally{x(!1)}},[t,a,y,N]);V.useEffect(()=>{O()},[O]);const H=Z=>{r(Z),k(void 0),F(null),T("list"),Z==="global"&&(c(""),e({}))},Y=Z=>{c(Z),k(void 0),F(null),T("list");const X=n.find(z=>z.path===Z);X&&e({project:X.id})},le=async Z=>{k(Z);try{const X=await ss.getKnowledgeDocument(Z,t,a||void 0);F(X),T("view")}catch{B("Failed to load document")}},te=()=>{k(void 0),F(null),T("create")},ne=async Z=>{R(!0);try{if(D==="create"){const X=await ss.createKnowledgeDocument({...Z,scope:t,projectPath:a||void 0});await O(),await le(X)}else U&&(await ss.updateKnowledgeDocument(U.id,{...Z,scope:t,projectPath:a||void 0}),await O(),await le(U.id))}catch{B("Failed to save document")}finally{R(!1)}},q=async()=>{if(U)try{await ss.deleteKnowledgeDocument(U.id,t,a||void 0),F(null),k(void 0),T("list"),await O()}catch{B("Failed to delete document")}};return i.jsxDEV("div",{className:"p-6 max-w-7xl mx-auto h-full flex flex-col",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-6",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(UL,{className:"w-6 h-6 text-indigo-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:207,columnNumber:11},this),i.jsxDEV("h1",{className:"text-2xl font-bold text-white",children:"Knowledge"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:208,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:206,columnNumber:9},this),i.jsxDEV(jpe,{scope:t,onScopeChange:H,projects:n,selectedProjectPath:a,onProjectChange:Y},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:210,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:205,columnNumber:7},this),L&&i.jsxDEV("div",{className:"mb-4 px-4 py-2 bg-red-900/20 border border-red-500/30 rounded-lg text-sm text-red-400",role:"alert",children:[L,i.jsxDEV("button",{onClick:()=>B(null),className:"ml-2 underline",children:"dismiss"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:222,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:220,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-6 flex-1 min-h-0",children:[i.jsxDEV("div",{className:"w-44 flex-shrink-0",children:[i.jsxDEV("div",{className:"mb-4",children:i.jsxDEV("button",{onClick:te,className:"w-full flex items-center justify-center gap-1.5 px-3 py-2 text-sm bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg transition-colors",children:[i.jsxDEV(tl,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:235,columnNumber:15},this),"New Document"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:231,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:230,columnNumber:11},this),i.jsxDEV(Spe,{categories:h,selectedCategory:y,onCategoryChange:v},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:239,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:229,columnNumber:9},this),i.jsxDEV("div",{className:"flex-1 min-w-0 flex gap-6",children:[i.jsxDEV("div",{className:`w-80 flex-shrink-0 ${D==="create"||D==="edit"?"hidden lg:block":""}`,children:i.jsxDEV(_pe,{documents:u,loading:b,searchQuery:N,onSearchChange:j,selectedDocId:S,onSelectDocument:le},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:250,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:249,columnNumber:11},this),i.jsxDEV("div",{className:"flex-1 min-w-0",children:[D==="view"&&U&&i.jsxDEV(Cpe,{document:U,onEdit:()=>T("edit"),onDelete:q},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:263,columnNumber:15},this),D==="edit"&&U&&i.jsxDEV(wB,{document:U,categories:h,saving:M,onSave:ne,onCancel:()=>T("view")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:270,columnNumber:15},this),D==="create"&&i.jsxDEV(wB,{document:null,categories:h,saving:M,onSave:ne,onCancel:()=>T("list")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:279,columnNumber:15},this),D==="list"&&!b&&i.jsxDEV("div",{className:"flex items-center justify-center h-full text-gray-500",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV(UL,{className:"w-12 h-12 mx-auto mb-3 opacity-30"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:290,columnNumber:19},this),i.jsxDEV("p",{children:"Select a document to view"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:291,columnNumber:19},this),i.jsxDEV("p",{className:"text-sm mt-1",children:"or create a new one"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:292,columnNumber:19},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:289,columnNumber:17},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:288,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:261,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:247,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:227,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:203,columnNumber:5},this)}const Upe="/api",Rpe=5e3;function Vpe(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useRef(!0),c=V.useCallback(async()=>{try{const h=await ar.get(`${Upe}/monitoring/pty-status`);if(!a.current)return;if(h.data.success&&Array.isArray(h.data.data)){const f=h.data.data.map(y=>({sessionName:y.sessionName||y.id||"unknown",agentName:y.agentName||y.name||y.sessionName||"Unknown Agent",role:y.role||"agent",agentStatus:y.agentStatus||y.status||"inactive",workingStatus:y.workingStatus||"idle",ptyPid:y.ptyPid??y.pid??null,memoryUsage:y.memoryUsage??null,uptimeSeconds:y.uptimeSeconds??null,fsScope:y.fsScope||"sandboxed",netScope:y.netScope||"localhost"}));e(f),o(null)}else e([])}catch{a.current&&(o("Failed to fetch PTY sessions"),e([]))}},[]);V.useEffect(()=>{a.current=!0,(async()=>{await c(),a.current&&r(!1)})();const f=setInterval(c,Rpe);return()=>{a.current=!1,clearInterval(f)}},[c]);const u={totalAgents:s.length,isolatedCount:s.length,sharedCount:0,status:(s.length>0,"healthy")},d=V.useCallback(async()=>{await c()},[c]);return{sessions:s,summary:u,loading:t,error:n,refresh:d}}const Fpe="/api",xB=[{id:"mock-1",timestamp:new Date(Date.now()-1e3*60*5).toISOString(),sessionName:"agent-sam",agentName:"Sam",toolName:"git push origin feat/auth",outcome:"approved",riskLevel:"medium"},{id:"mock-2",timestamp:new Date(Date.now()-1e3*60*10).toISOString(),sessionName:"agent-sam",agentName:"Sam",toolName:"npm install jsonwebtoken",outcome:"auto",riskLevel:"low"},{id:"mock-3",timestamp:new Date(Date.now()-1e3*60*15).toISOString(),sessionName:"agent-leo",agentName:"Leo",toolName:"rm -rf dist/",outcome:"denied",riskLevel:"high",reason:"Destructive operation on build directory"},{id:"mock-4",timestamp:new Date(Date.now()-1e3*60*20).toISOString(),sessionName:"agent-sam",agentName:"Sam",toolName:"git push --force main",outcome:"denied",riskLevel:"high",reason:"Force push to protected branch"},{id:"mock-5",timestamp:new Date(Date.now()-1e3*60*25).toISOString(),sessionName:"agent-ava",agentName:"Ava",toolName:"npx tailwindcss build",outcome:"auto",riskLevel:"low"},{id:"mock-6",timestamp:new Date(Date.now()-1e3*60*30).toISOString(),sessionName:"agent-leo",agentName:"Leo",toolName:'git commit -m "feat: ..."',outcome:"sop_block",riskLevel:"medium",reason:"Commit does not follow project SOP"}];function Ipe(s){switch(s){case"approved":return"approved";case"rejected":return"denied";case"denied":return"denied";case"auto":return"auto";case"sop_block":return"sop_block";default:return"auto"}}function Lpe(){const[s,e]=V.useState([]),[t,r]=V.useState({}),[n,o]=V.useState(!0),[a,c]=V.useState(null),u=V.useCallback(async y=>{try{const v=await ar.get(`${Fpe}/approvals/audit`,{signal:y});if(v.data.success&&Array.isArray(v.data.data)){const N=v.data.data.map(j=>({id:j.approvalId||j.id||`audit-${Date.now()}-${Math.random()}`,timestamp:j.timestamp,sessionName:j.sessionName||"",agentName:j.resolvedBy||j.agentName||j.sessionName||"Unknown",toolName:j.toolName||"",outcome:Ipe(j.action||j.outcome),riskLevel:j.riskLevel||"medium",reason:j.reason}));e(N),c(null)}else e(xB)}catch(v){if(ar.isCancel(v))return;e(xB),c(null)}finally{o(!1)}},[]);V.useEffect(()=>{const y=new AbortController;return u(y.signal),()=>y.abort()},[u]);const d=V.useMemo(()=>s.filter(y=>!(t.agent&&y.agentName.toLowerCase()!==t.agent.toLowerCase()||t.outcome&&y.outcome!==t.outcome)),[s,t]),h=V.useMemo(()=>{const y=new Date().toDateString(),v=s.filter(N=>new Date(N.timestamp).toDateString()===y);return{totalToday:v.length,deniedToday:v.filter(N=>N.outcome==="denied").length,bypassedToday:0,status:"enforced"}},[s]),f=V.useCallback(async()=>{o(!0),await u()},[u]);return{events:s,filteredEvents:d,summary:h,filter:t,setFilter:r,loading:n,error:a,refresh:f}}const Ppe="/api",NB=[{path:"~/.crewly/memory/",type:"Agent Memory",sizeBytes:12.4*1024*1024,isExternal:!1},{path:"~/.crewly/knowledge/",type:"Vector Store",sizeBytes:28.1*1024*1024,isExternal:!1},{path:"~/.crewly/sessions/",type:"PTY Logs",sizeBytes:7.7*1024*1024,isExternal:!1},{path:"~/.crewly/teams/",type:"Config",sizeBytes:.3*1024*1024,isExternal:!1},{path:"~/.crewly/projects/",type:"Metadata",sizeBytes:.1*1024*1024,isExternal:!1}];function IV(s){if(s===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.floor(Math.log(s)/Math.log(1024));return`${(s/Math.pow(1024,t)).toFixed(1)} ${e[t]}`}function Ope(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async d=>{try{const h=await ar.get(`${Ppe}/system/storage`,{signal:d});h.data.success&&Array.isArray(h.data.data)?(e(h.data.data),o(null)):e(NB)}catch(h){if(ar.isCancel(h))return;e(NB),o(null)}finally{r(!1)}},[]);V.useEffect(()=>{const d=new AbortController;return a(d.signal),()=>d.abort()},[a]);const c=V.useMemo(()=>({totalLocalBytes:s.filter(h=>!h.isExternal).reduce((h,f)=>h+f.sizeBytes,0),externalConnections:s.filter(h=>h.isExternal).length,cloudSync:"disabled",status:"secure",lastScan:new Date().toISOString()}),[s]),u=V.useCallback(async()=>{r(!0),await a()},[a]);return{entries:s,summary:c,loading:t,error:n,refresh:u}}const DB=["border-blue-500","border-purple-500","border-pink-500","border-cyan-500","border-amber-500"];function Bpe(s){if(s===null)return"N/A";const e=Math.floor(s/3600),t=Math.floor(s%3600/60);return`${e}h${t.toString().padStart(2,"0")}m`}function TB(s){return s===null?"N/A":`${Math.round(s/(1024*1024))}MB`}const kH=({sessions:s,loading:e})=>{const[t,r]=V.useState(!0),[n,o]=V.useState(null),a=()=>r(d=>!d),c=d=>{o(h=>h===d?null:d)},u=(d,h)=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),c(h))};return i.jsxDEV("section",{"aria-labelledby":"pty-map-heading",className:"border border-border-dark rounded-lg bg-surface-dark",children:[i.jsxDEV("button",{type:"button",onClick:a,className:"flex items-center justify-between w-full px-6 py-4 text-left","aria-expanded":t,"aria-controls":"pty-map-content",children:[i.jsxDEV("h2",{id:"pty-map-heading",className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(sy,{size:20,"aria-hidden":"true",className:"text-blue-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:91,columnNumber:11},globalThis),"PTY Isolation Map"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:90,columnNumber:9},globalThis),t?i.jsxDEV(tA,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:95,columnNumber:11},globalThis):i.jsxDEV(uf,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:97,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:83,columnNumber:7},globalThis),t&&i.jsxDEV("div",{id:"pty-map-content",className:"px-6 pb-6",children:e?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",role:"status",children:"Loading PTY sessions..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:105,columnNumber:13},globalThis):s.length===0?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",children:"No active agent sessions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:107,columnNumber:13},globalThis):i.jsxDEV("div",{role:"img","aria-label":`PTY isolation map showing ${s.length} isolated agent sessions with no lateral access between them`,children:[s.map((d,h)=>i.jsxDEV("div",{children:[i.jsxDEV("div",{role:"button",tabIndex:0,onClick:()=>c(d.sessionName),onKeyDown:f=>u(f,d.sessionName),className:`flex items-start gap-4 p-4 rounded-lg border-l-4 bg-zinc-900/50 cursor-pointer hover:bg-zinc-800/50 transition-colors ${DB[h%DB.length]}`,"aria-expanded":n===d.sessionName,"data-testid":`pty-node-${d.sessionName}`,children:[i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[i.jsxDEV("span",{className:"font-semibold text-text-primary-dark text-sm",children:d.agentName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:128,columnNumber:25},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:["(",d.role,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:131,columnNumber:25},globalThis),i.jsxDEV("span",{className:`inline-flex items-center gap-1 text-xs ${d.agentStatus==="active"?"text-emerald-400":"text-text-secondary-dark"}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full ${d.agentStatus==="active"?"bg-emerald-400 animate-pulse":"bg-zinc-500"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:137,columnNumber:27},globalThis),d.agentStatus==="active"?"Active":d.agentStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:132,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:127,columnNumber:23},globalThis),i.jsxDEV("div",{className:"text-xs text-text-secondary-dark",children:["working: ",d.workingStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:146,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:126,columnNumber:21},globalThis),i.jsxDEV("div",{className:"text-xs text-text-secondary-dark font-mono space-y-0.5 text-right flex-shrink-0",children:[i.jsxDEV("div",{children:["PTY pid:",d.ptyPid??"N/A"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:153,columnNumber:23},globalThis),i.jsxDEV("div",{children:["mem: ",TB(d.memoryUsage)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:154,columnNumber:23},globalThis),i.jsxDEV("div",{children:["uptime: ",Bpe(d.uptimeSeconds)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:155,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:152,columnNumber:21},globalThis),i.jsxDEV("div",{className:"text-xs text-text-secondary-dark font-mono space-y-0.5 text-right flex-shrink-0",children:[i.jsxDEV("div",{children:["fs: ",d.fsScope]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:160,columnNumber:23},globalThis),i.jsxDEV("div",{children:["net: ",d.netScope]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:161,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:159,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:116,columnNumber:19},globalThis),n===d.sessionName&&i.jsxDEV("div",{className:"ml-4 p-3 bg-zinc-900/30 rounded-b-lg border-l border-border-dark text-xs text-text-secondary-dark font-mono",children:[i.jsxDEV("div",{children:["Session: ",d.sessionName]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:168,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Process ID: ",d.ptyPid??"Not available"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:169,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Memory: ",TB(d.memoryUsage)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:170,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Filesystem: ",d.fsScope," (sandboxed)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:171,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Network: ",d.netScope," only"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:172,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:167,columnNumber:21},globalThis),h<s.length-1&&i.jsxDEV("div",{className:"flex items-center gap-2 py-2 pl-6","aria-hidden":"true",children:[i.jsxDEV("div",{className:"w-px h-4 bg-border-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:179,columnNumber:23},globalThis),i.jsxDEV(jn,{size:12,className:"text-red-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:180,columnNumber:23},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:"(no lateral access)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:181,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:178,columnNumber:21},globalThis)]},d.sessionName,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:114,columnNumber:17},globalThis)),i.jsxDEV("div",{className:"flex items-center gap-4 mt-4 pt-3 border-t border-border-dark text-xs text-text-secondary-dark",children:[i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-emerald-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:190,columnNumber:19},globalThis),"Active"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:189,columnNumber:17},globalThis),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-zinc-500","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:194,columnNumber:19},globalThis),"Inactive"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:193,columnNumber:17},globalThis),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(jn,{size:10,className:"text-red-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:198,columnNumber:19},globalThis),"No cross-session access"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:197,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:188,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:109,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:103,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:81,columnNumber:5},globalThis)};kH.displayName="PtyIsolationMap";const Dk={auto:{label:"Auto",className:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",icon:"✅"},approved:{label:"Approved",className:"bg-emerald-500/10 text-emerald-300 border-emerald-500/30",icon:"✅"},denied:{label:"Denied",className:"bg-red-500/10 text-red-400 border-red-500/20",icon:"🔴"},sop_block:{label:"SOP Block",className:"bg-amber-500/10 text-amber-400 border-amber-500/20",icon:"⚠️"}},jB=10;function Hpe(s){return new Date(s).toLocaleTimeString("en-US",{hour12:!1})}function zpe(s){const e=["Timestamp","Agent","Tool/Command","Outcome","Risk Level","Reason"],t=s.map(c=>[c.timestamp,c.agentName,c.toolName,c.outcome,c.riskLevel,c.reason||""]),r=[e.join(","),...t.map(c=>c.map(u=>`"${u}"`).join(","))].join(`
5214
- `),n=new Blob([r],{type:"text/csv"}),o=URL.createObjectURL(n),a=document.createElement("a");a.href=o,a.download=`approval-audit-${new Date().toISOString().split("T")[0]}.csv`,a.click(),URL.revokeObjectURL(o)}const CH=({events:s,filter:e,onFilterChange:t,loading:r})=>{const[n,o]=V.useState(!0),[a,c]=V.useState(!1),[u,d]=V.useState(jB),h=V.useMemo(()=>s.slice(0,u),[s,u]),f=V.useMemo(()=>Array.from(new Set(s.map(x=>x.agentName))),[s]),y=()=>o(x=>!x),v=x=>{t({...e,agent:x}),c(!1)},N=x=>{t({...e,outcome:x}),c(!1)},j=()=>{zpe(s)},b=()=>{d(x=>x+jB)};return i.jsxDEV("section",{"aria-labelledby":"audit-log-heading",className:"border border-border-dark rounded-lg bg-surface-dark",children:[i.jsxDEV("div",{className:"flex items-center justify-between px-6 py-4",children:[i.jsxDEV("button",{type:"button",onClick:y,className:"flex items-center gap-2 text-left flex-1","aria-expanded":n,"aria-controls":"audit-log-content",children:[i.jsxDEV("h2",{id:"audit-log-heading",className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(XB,{size:20,"aria-hidden":"true",className:"text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:138,columnNumber:13},globalThis),"Approval Audit Log"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:137,columnNumber:11},globalThis),n?i.jsxDEV(tA,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:142,columnNumber:13},globalThis):i.jsxDEV(uf,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:144,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:130,columnNumber:9},globalThis),n&&i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("div",{className:"relative",children:[i.jsxDEV("button",{type:"button",onClick:()=>c(x=>!x),className:"flex items-center gap-1 px-3 py-1.5 text-xs text-text-secondary-dark border border-border-dark rounded-md hover:bg-zinc-800 transition-colors","aria-label":"Filter events","data-testid":"filter-button",children:[i.jsxDEV(gX,{size:14,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:159,columnNumber:17},globalThis),"Filter",(e.agent||e.outcome)&&i.jsxDEV("span",{className:"ml-1 w-1.5 h-1.5 rounded-full bg-primary","aria-label":"Filter active"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:162,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:152,columnNumber:15},globalThis),a&&i.jsxDEV("div",{className:"absolute right-0 top-full mt-1 w-48 bg-zinc-800 border border-border-dark rounded-md shadow-lg z-10",role:"menu","data-testid":"filter-menu",children:[i.jsxDEV("div",{className:"p-2",children:[i.jsxDEV("div",{className:"text-xs font-semibold text-text-secondary-dark mb-1 px-2",children:"By Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:174,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>v(void 0),className:"w-full text-left px-2 py-1 text-xs text-text-primary-dark hover:bg-zinc-700 rounded",role:"menuitem",children:"All Agents"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:175,columnNumber:21},globalThis),f.map(x=>i.jsxDEV("button",{type:"button",onClick:()=>v(x),className:`w-full text-left px-2 py-1 text-xs hover:bg-zinc-700 rounded ${e.agent===x?"text-primary":"text-text-primary-dark"}`,role:"menuitem",children:x},x,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:184,columnNumber:23},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:173,columnNumber:19},globalThis),i.jsxDEV("div",{className:"border-t border-border-dark p-2",children:[i.jsxDEV("div",{className:"text-xs font-semibold text-text-secondary-dark mb-1 px-2",children:"By Outcome"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:198,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>N(void 0),className:"w-full text-left px-2 py-1 text-xs text-text-primary-dark hover:bg-zinc-700 rounded",role:"menuitem",children:"All Outcomes"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:199,columnNumber:21},globalThis),Object.keys(Dk).map(x=>i.jsxDEV("button",{type:"button",onClick:()=>N(x),className:`w-full text-left px-2 py-1 text-xs hover:bg-zinc-700 rounded ${e.outcome===x?"text-primary":"text-text-primary-dark"}`,role:"menuitem",children:[Dk[x].icon," ",Dk[x].label]},x,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:208,columnNumber:23},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:197,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:168,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:151,columnNumber:13},globalThis),i.jsxDEV("button",{type:"button",onClick:j,className:"flex items-center gap-1 px-3 py-1.5 text-xs text-text-secondary-dark border border-border-dark rounded-md hover:bg-zinc-800 transition-colors","aria-label":"Export as CSV","data-testid":"export-button",children:[i.jsxDEV(GV,{size:14,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:233,columnNumber:15},globalThis),"Export"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:226,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:149,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:129,columnNumber:7},globalThis),n&&i.jsxDEV("div",{id:"audit-log-content",className:"px-6 pb-6",children:r?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",role:"status",children:"Loading audit events..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:244,columnNumber:13},globalThis):s.length===0?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",children:"No approval events recorded"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:246,columnNumber:13},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"overflow-x-auto",children:i.jsxDEV("table",{className:"w-full text-sm",role:"table",children:[i.jsxDEV("thead",{children:i.jsxDEV("tr",{className:"border-b border-border-dark",children:[i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Time"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:254,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:255,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Tool / Command"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:256,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-right py-2 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Outcome"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:257,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:253,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:252,columnNumber:19},globalThis),i.jsxDEV("tbody",{children:h.map(x=>{const D=Dk[x.outcome];return i.jsxDEV("tr",{className:"border-b border-border-dark/50 hover:bg-zinc-800/30 transition-colors","data-testid":`audit-row-${x.id}`,children:[i.jsxDEV("td",{className:"py-2.5 pr-4 font-mono text-xs text-text-secondary-dark whitespace-nowrap",children:Hpe(x.timestamp)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:269,columnNumber:27},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 text-text-primary-dark whitespace-nowrap",children:x.agentName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:272,columnNumber:27},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 font-mono text-xs text-text-secondary-dark",children:[x.toolName,x.reason&&i.jsxDEV("span",{className:"block text-xs text-zinc-500 mt-0.5",title:x.reason,children:x.reason},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:278,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:275,columnNumber:27},globalThis),i.jsxDEV("td",{className:"py-2.5 text-right",children:i.jsxDEV("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border ${D.className}`,children:[i.jsxDEV("span",{"aria-hidden":"true",children:D.icon},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:287,columnNumber:31},globalThis),D.label]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:284,columnNumber:29},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:283,columnNumber:27},globalThis)]},x.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:264,columnNumber:25},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:260,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:251,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:250,columnNumber:15},globalThis),s.length>u&&i.jsxDEV("div",{className:"mt-3 text-center",children:i.jsxDEV("button",{type:"button",onClick:b,className:"text-xs text-primary hover:text-primary/80 transition-colors","data-testid":"load-more-button",children:["Showing ",u," of ",s.length," events — Load more"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:301,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:300,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:248,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:242,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:127,columnNumber:5},globalThis)};CH.displayName="ApprovalAuditLog";const AH=({entries:s,summary:e,loading:t})=>{const[r,n]=V.useState(!0),o=()=>n(u=>!u),a=e.status==="secure"?"text-emerald-400":"text-amber-400",c=e.status==="secure"?"SECURE":"WARNING";return i.jsxDEV("section",{"aria-labelledby":"sovereignty-heading",className:"border border-border-dark rounded-lg bg-surface-dark",children:[i.jsxDEV("div",{className:"flex items-center justify-between px-6 py-4",children:[i.jsxDEV("button",{type:"button",onClick:o,className:"flex items-center gap-2 text-left flex-1","aria-expanded":r,"aria-controls":"sovereignty-content",children:[i.jsxDEV("h2",{id:"sovereignty-heading",className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(yX,{size:20,"aria-hidden":"true",className:"text-purple-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:56,columnNumber:13},globalThis),"Data Sovereignty Report"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:55,columnNumber:11},globalThis),r?i.jsxDEV(tA,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:60,columnNumber:13},globalThis):i.jsxDEV(uf,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:62,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:48,columnNumber:9},globalThis),i.jsxDEV("span",{className:`text-xs font-medium uppercase tracking-wide ${a}`,"data-testid":"sovereignty-status",children:c},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:67,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:47,columnNumber:7},globalThis),r&&i.jsxDEV("div",{id:"sovereignty-content",className:"px-6 pb-6",children:t?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",role:"status",children:"Loading storage data..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:76,columnNumber:13},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"overflow-x-auto",children:i.jsxDEV("table",{className:"w-full text-sm",role:"table",children:[i.jsxDEV("thead",{children:i.jsxDEV("tr",{className:"border-b border-border-dark",children:[i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Storage Location"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:84,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Type"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:87,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-right py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Size"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:90,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-center py-2 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"External?"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:93,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:83,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:82,columnNumber:19},globalThis),i.jsxDEV("tbody",{children:s.map(u=>i.jsxDEV("tr",{className:"border-b border-border-dark/50","data-testid":`storage-row-${u.type.toLowerCase().replace(/\s+/g,"-")}`,children:[i.jsxDEV("td",{className:"py-2.5 pr-4 font-mono text-xs text-text-secondary-dark",children:u.path},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:105,columnNumber:25},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 text-text-primary-dark",children:u.type},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:108,columnNumber:25},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 text-right font-mono text-xs text-text-secondary-dark",children:IV(u.sizeBytes)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:111,columnNumber:25},globalThis),i.jsxDEV("td",{className:"py-2.5 text-center",children:u.isExternal?i.jsxDEV("span",{className:"text-red-400 text-xs font-medium","aria-label":"External: Yes",children:"Yes ❌"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:116,columnNumber:29},globalThis):i.jsxDEV("span",{className:"text-emerald-400 text-xs font-medium","aria-label":"External: No",children:"No ✅"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:118,columnNumber:29},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:114,columnNumber:25},globalThis)]},u.path,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:100,columnNumber:23},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:98,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:81,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:80,columnNumber:15},globalThis),i.jsxDEV("div",{className:"mt-4 pt-3 border-t border-border-dark space-y-1 text-sm text-text-secondary-dark",children:[i.jsxDEV("div",{children:["Total local storage:"," ",i.jsxDEV("span",{className:"text-text-primary-dark font-medium",children:IV(e.totalLocalBytes)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:131,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:129,columnNumber:17},globalThis),i.jsxDEV("div",{children:["External connections:"," ",i.jsxDEV("span",{className:"text-text-primary-dark font-medium",children:e.externalConnections},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:137,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:135,columnNumber:17},globalThis),i.jsxDEV("div",{children:["Cloud sync:"," ",i.jsxDEV("span",{className:"text-text-primary-dark font-medium capitalize",children:e.cloudSync},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:143,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:141,columnNumber:17},globalThis),i.jsxDEV("div",{className:"text-xs text-zinc-500",children:["Last scan: ",new Date(e.lastScan).toLocaleString()]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:147,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:128,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:78,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:74,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:45,columnNumber:5},globalThis)};AH.displayName="DataSovereigntyReport";const AR={healthy:"text-emerald-400",secure:"text-emerald-400",enforced:"text-emerald-400",warning:"text-amber-400",partial:"text-amber-400",error:"text-red-400",disabled:"text-red-400",compromised:"text-red-400"},MR={healthy:"HEALTHY",secure:"SECURE",enforced:"ENFORCED",warning:"WARNING",partial:"PARTIAL",error:"ERROR",disabled:"DISABLED",compromised:"COMPROMISED"},MH=()=>{const{sessions:s,summary:e,loading:t}=Vpe(),{filteredEvents:r,summary:n,filter:o,setFilter:a,loading:c}=Lpe(),{entries:u,summary:d,loading:h}=Ope();return i.jsxDEV("div",{className:"max-w-7xl mx-auto px-4 py-6 space-y-6",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(sA,{size:28,className:"text-emerald-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:73,columnNumber:9},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("h1",{className:"text-2xl font-bold text-text-primary-dark",children:"Security Overview"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:75,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"Your instance security posture at a glance"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:76,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:74,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:72,columnNumber:7},globalThis),i.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4","data-testid":"summary-cards",children:[i.jsxDEV("div",{className:"border border-border-dark rounded-lg bg-surface-dark p-6","data-testid":"card-pty",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV(sy,{size:18,className:"text-blue-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:87,columnNumber:13},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"PTY Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:88,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:86,columnNumber:11},globalThis),t?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm",role:"status",children:"Loading..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:91,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-1 text-sm",children:[i.jsxDEV("div",{className:"text-text-secondary-dark",children:[e.totalAgents," agents"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:94,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[e.isolatedCount," isolated"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:97,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[e.sharedCount," shared"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:100,columnNumber:15},globalThis),i.jsxDEV("div",{className:`text-xs font-medium uppercase tracking-wide mt-2 flex items-center gap-1 ${AR[e.status]}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full animate-pulse ${e.status==="healthy"?"bg-emerald-400":"bg-amber-400"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:104,columnNumber:17},globalThis),MR[e.status]]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:103,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:93,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:85,columnNumber:9},globalThis),i.jsxDEV("div",{className:"border border-border-dark rounded-lg bg-surface-dark p-6","data-testid":"card-storage",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV(wX,{size:18,className:"text-purple-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:114,columnNumber:13},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Storage"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:115,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:113,columnNumber:11},globalThis),h?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm",role:"status",children:"Loading..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:118,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-1 text-sm",children:[i.jsxDEV("div",{className:"text-text-secondary-dark",children:"Local DB"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:121,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:IV(d.totalLocalBytes)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:122,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[d.externalConnections," cloud"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:125,columnNumber:15},globalThis),i.jsxDEV("div",{className:`text-xs font-medium uppercase tracking-wide mt-2 flex items-center gap-1 ${AR[d.status]}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full animate-pulse ${d.status==="secure"?"bg-emerald-400":"bg-amber-400"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:129,columnNumber:17},globalThis),MR[d.status]]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:128,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:120,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:112,columnNumber:9},globalThis),i.jsxDEV("div",{className:"border border-border-dark rounded-lg bg-surface-dark p-6","data-testid":"card-approvals",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV(XB,{size:18,className:"text-emerald-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:139,columnNumber:13},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Approvals"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:140,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:138,columnNumber:11},globalThis),c?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm",role:"status",children:"Loading..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:143,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-1 text-sm",children:[i.jsxDEV("div",{className:"text-text-secondary-dark",children:[n.totalToday," today"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:146,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[n.deniedToday," denied"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:149,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[n.bypassedToday," bypassed"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:152,columnNumber:15},globalThis),i.jsxDEV("div",{className:`text-xs font-medium uppercase tracking-wide mt-2 flex items-center gap-1 ${AR[n.status]}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full animate-pulse ${n.status==="enforced"?"bg-emerald-400":"bg-amber-400"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:156,columnNumber:17},globalThis),MR[n.status]]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:155,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:145,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:137,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:83,columnNumber:7},globalThis),i.jsxDEV(kH,{sessions:s,loading:t},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:165,columnNumber:7},globalThis),i.jsxDEV(CH,{events:r,filter:o,onFilterChange:a,loading:c},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:168,columnNumber:7},globalThis),i.jsxDEV(AH,{entries:u,summary:d,loading:h},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:176,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:70,columnNumber:5},globalThis)};MH.displayName="SecurityOverview";const Gpe=()=>{const[s]=eA(),e=Sm();return V.useEffect(()=>{(async()=>{const r=s.get("token"),n=s.get("refreshToken"),o=s.get("error");if(r){localStorage.setItem(Db,r),n&&localStorage.setItem("crewly_refresh_token",n);try{await fetch("/api/cloud/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:r,refreshToken:n})})}catch{}}o?e("/settings?tab=cloud&error="+encodeURIComponent(o),{replace:!0}):e("/settings?tab=cloud",{replace:!0})})()},[s,e]),i.jsxDEV("div",{className:"min-h-screen flex items-center justify-center bg-background-dark",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("div",{className:"w-8 h-8 border-2 border-primary/20 border-t-primary rounded-full animate-spin mx-auto"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:63,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-4",children:"Completing sign-in..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:64,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:62,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:61,columnNumber:5},globalThis)};function Wpe(){return i.jsxDEV(qZ,{children:i.jsxDEV(rY,{children:i.jsxDEV(OX,{children:i.jsxDEV(qK,{children:i.jsxDEV(MK,{children:[i.jsxDEV(ja,{path:"/auth/callback",element:i.jsxDEV(Gpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:30,columnNumber:51},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:30,columnNumber:13},this),i.jsxDEV(ja,{path:"/",element:i.jsxDEV(fJ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:33,columnNumber:38},this),children:[i.jsxDEV(ja,{index:!0,element:i.jsxDEV(gJ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:34,columnNumber:37},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:34,columnNumber:15},this),i.jsxDEV(ja,{path:"projects",element:i.jsxDEV(wJ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:35,columnNumber:47},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:35,columnNumber:15},this),i.jsxDEV(ja,{path:"projects/:id",element:i.jsxDEV(u$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:36,columnNumber:51},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:36,columnNumber:15},this),i.jsxDEV(ja,{path:"teams",element:i.jsxDEV(M$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:37,columnNumber:44},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:37,columnNumber:15},this),i.jsxDEV(ja,{path:"teams/:id",element:i.jsxDEV(q$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:38,columnNumber:48},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:38,columnNumber:15},this),i.jsxDEV(ja,{path:"assignments",element:i.jsxDEV(tQ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:39,columnNumber:50},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:39,columnNumber:15},this),i.jsxDEV(ja,{path:"scheduled-checkins",element:i.jsxDEV(aQ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:40,columnNumber:57},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:40,columnNumber:15},this),i.jsxDEV(ja,{path:"factory",element:i.jsxDEV(Bhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:41,columnNumber:46},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:41,columnNumber:15},this),i.jsxDEV(ja,{path:"marketplace",element:i.jsxDEV(Tpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:42,columnNumber:50},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:42,columnNumber:15},this),i.jsxDEV(ja,{path:"knowledge",element:i.jsxDEV(Mpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:43,columnNumber:48},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:43,columnNumber:15},this),i.jsxDEV(ja,{path:"security",element:i.jsxDEV(MH,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:44,columnNumber:47},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:44,columnNumber:15},this),i.jsxDEV(ja,{path:"settings",element:i.jsxDEV(Pfe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:45,columnNumber:47},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:45,columnNumber:15},this),i.jsxDEV(ja,{path:"chat",element:i.jsxDEV(Bfe,{children:i.jsxDEV(cpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:50,columnNumber:21},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:49,columnNumber:19},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:46,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:33,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:28,columnNumber:11},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:27,columnNumber:9},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:26,columnNumber:7},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:25,columnNumber:5},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:24,columnNumber:5},this)}RR.createRoot(document.getElementById("root")).render(i.jsxDEV(pn.StrictMode,{children:i.jsxDEV(Wpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/main.tsx",lineNumber:13,columnNumber:5},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/main.tsx",lineNumber:12,columnNumber:3},globalThis));
5215
- //# sourceMappingURL=index-1b67fa33.js.map
5212
+ Provide detailed instructions for this skill...`,rows:8,className:"font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:797,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:795,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:739,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-dark bg-background-dark",children:[i.jsxDEV(ur,{variant:"secondary",onClick:t,type:"button",children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:810,columnNumber:11},globalThis),i.jsxDEV(ur,{type:"submit",onClick:h,disabled:a,loading:a,children:a?"Saving...":"Save Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:813,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:809,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:702,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:698,columnNumber:5},globalThis)},sfe=({skillName:s,onConfirm:e,onCancel:t})=>{const r=n=>{n.target===n.currentTarget&&t()};return i.jsxDEV("div",{className:"fixed inset-0 bg-background-dark/80 backdrop-blur-sm flex items-center justify-center z-50",onClick:r,children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-lg w-full max-w-md m-4",onClick:n=>n.stopPropagation(),children:[i.jsxDEV("div",{className:"p-6 border-b border-border-dark",children:i.jsxDEV("h2",{className:"text-xl font-semibold text-text-primary-dark",children:"Delete Skill"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:873,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:872,columnNumber:9},globalThis),i.jsxDEV("div",{className:"p-6",children:i.jsxDEV("p",{className:"text-text-secondary-dark",children:["Are you sure you want to delete ",i.jsxDEV("strong",{className:"text-text-primary-dark",children:s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:879,columnNumber:45},globalThis),"? This action cannot be undone."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:878,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:877,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-dark bg-background-dark rounded-b-xl",children:[i.jsxDEV(ur,{variant:"secondary",onClick:t,children:"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:886,columnNumber:11},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:e,children:"Delete"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:889,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:885,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:867,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SkillsTab.tsx",lineNumber:863,columnNumber:5},globalThis)},nfe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),h=V.useCallback(async()=>{var N,j,b,x,D,T,S;try{c(null);const U=await(await fetch("/api/slack/status")).json();U.success?e({connected:((N=U.data)==null?void 0:N.isConfigured)||!1,workspaceName:(j=U.data)==null?void 0:j.workspaceName,botName:(b=U.data)==null?void 0:b.botName,channels:(x=U.data)==null?void 0:x.channels,lastMessageAt:(D=U.data)==null?void 0:D.lastMessageAt,messagesSent:(T=U.data)==null?void 0:T.messagesSent,messagesReceived:(S=U.data)==null?void 0:S.messagesReceived}):e({connected:!1,error:U.error})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=N=>{const{name:j,value:b}=N.target;d(x=>({...x,[j]:b}))},y=async N=>{N.preventDefault(),o(!0),c(null);try{const j=await fetch("/api/slack/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({botToken:u.botToken,appToken:u.appToken,signingSecret:u.signingSecret,defaultChannelId:u.defaultChannel||void 0})}),b=await j.json();if(!j.ok||!b.success)throw new Error(b.error||"Connection failed");d({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),await h()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Slack")}finally{o(!1)}},v=async()=>{if(window.confirm("Are you sure you want to disconnect from Slack?"))try{c(null);const N=await fetch("/api/slack/disconnect",{method:"POST"}),j=await N.json();if(!N.ok||!j.success)throw new Error(j.error||"Disconnect failed");await h()}catch(N){c(N instanceof Error?N.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:168,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading Slack status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:169,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:167,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Slack Integration"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:178,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect Slack to communicate with the orchestrator from your phone or desktop Slack app."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:179,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:177,columnNumber:7},globalThis),a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:188,columnNumber:13},globalThis),i.jsxDEV("span",{children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:189,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:187,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:195,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:191,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:186,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:205,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium",children:"Connected to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:206,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:204,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:211,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-3",children:[s.workspaceName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Workspace"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:217,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.workspaceName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:218,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:216,columnNumber:17},globalThis),s.botName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:223,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:224,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:222,columnNumber:17},globalThis),s.channels&&s.channels.length>0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Channels"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:229,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.channels.join(", ")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:230,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:228,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:235,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:236,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:234,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:241,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:242,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:240,columnNumber:17},globalThis),s.lastMessageAt&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Last Activity"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:247,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:new Date(s.lastMessageAt).toLocaleString()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:248,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:246,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:214,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:210,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:h,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:258,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:v,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:261,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:257,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:202,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:271,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium",children:"Not connected to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:272,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:270,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Setup Instructions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:277,columnNumber:13},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-3 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Create a Slack App at"," ",i.jsxDEV("a",{href:"https://api.slack.com/apps",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["api.slack.com/apps",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:290,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:283,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:281,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Enable Socket Mode in your app settings and create an App Token (starts with xapp-)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:293,columnNumber:15},globalThis),i.jsxDEV("li",{children:["Add Bot Token Scopes under OAuth & Permissions:",i.jsxDEV("ul",{className:"list-disc list-inside ml-4 mt-1.5 space-y-1",children:[i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"chat:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:297,columnNumber:23},globalThis)," - Send messages"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:297,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"channels:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:298,columnNumber:23},globalThis)," - View channels"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:298,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"app_mentions:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:299,columnNumber:23},globalThis)," - Respond to mentions"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:299,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"im:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:300,columnNumber:23},globalThis),", ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"im:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:300,columnNumber:106},globalThis)," - Direct messages"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:300,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"files:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:301,columnNumber:23},globalThis)," - Receive images from Slack"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:301,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"files:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:302,columnNumber:23},globalThis)," - Upload images to Slack"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:302,columnNumber:19},globalThis),i.jsxDEV("li",{children:[i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"reactions:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:303,columnNumber:23},globalThis)," - Typing/completion indicators (optional)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:303,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:296,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-amber-400/80 mt-1.5 ml-4",children:["Note: Adding ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1 py-0.5 rounded",children:"files:read"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:306,columnNumber:32},globalThis)," and ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1 py-0.5 rounded",children:"files:write"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:306,columnNumber:119},globalThis)," scopes requires reinstalling the app to your workspace."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:305,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:294,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Install the app to your workspace"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:309,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Copy the Bot Token (xoxb-...), App Token (xapp-...), and Signing Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:310,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:280,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:276,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:y,className:"bg-surface-dark border border-border-dark rounded-lg p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connect to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:316,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"botToken",required:!0,children:"Bot Token (xoxb-...)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:321,columnNumber:15},globalThis),i.jsxDEV(en,{id:"botToken",name:"botToken",type:"password",value:u.botToken,onChange:f,placeholder:"xoxb-your-bot-token",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:322,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:320,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"appToken",required:!0,children:"App Token (xapp-...)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:335,columnNumber:15},globalThis),i.jsxDEV(en,{id:"appToken",name:"appToken",type:"password",value:u.appToken,onChange:f,placeholder:"xapp-your-app-token",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:336,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:334,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"signingSecret",required:!0,children:"Signing Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:349,columnNumber:15},globalThis),i.jsxDEV(en,{id:"signingSecret",name:"signingSecret",type:"password",value:u.signingSecret,onChange:f,placeholder:"Your signing secret",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:350,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:348,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"defaultChannel",children:"Default Channel (optional)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:363,columnNumber:15},globalThis),i.jsxDEV(en,{id:"defaultChannel",name:"defaultChannel",type:"text",value:u.defaultChannel,onChange:f,placeholder:"C1234567890 or #crewly"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:364,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Channel ID or name where notifications will be sent by default"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:372,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:362,columnNumber:13},globalThis),i.jsxDEV("div",{className:"pt-2",children:i.jsxDEV(ur,{type:"submit",disabled:n||!u.botToken||!u.appToken||!u.signingSecret,loading:n,fullWidth:!0,children:n?"Connecting...":"Connect to Slack"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:378,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:377,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:315,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:268,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/SlackTab.tsx",lineNumber:175,columnNumber:5},globalThis)},ofe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),u=V.useCallback(async()=>{var f,y,v,N,j,b;try{c(null);const D=await(await fetch("/api/whatsapp/status")).json();D.success?e({connected:((f=D.data)==null?void 0:f.isConfigured)||((y=D.data)==null?void 0:y.connected)||!1,phoneNumber:(v=D.data)==null?void 0:v.phoneNumber,qrCode:(N=D.data)==null?void 0:N.qrCode,messagesSent:(j=D.data)==null?void 0:j.messagesSent,messagesReceived:(b=D.data)==null?void 0:b.messagesReceived}):e({connected:!1,error:D.error})}catch{e({connected:!1,error:"Failed to fetch WhatsApp status"})}finally{r(!1)}},[]);V.useEffect(()=>{u()},[u]);const d=async()=>{var f;o(!0),c(null);try{const y=await fetch("/api/whatsapp/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),v=await y.json();if(!y.ok||!v.success)throw new Error(v.error||"Connection failed");(f=v.data)!=null&&f.qrCode&&e(N=>({...N,qrCode:v.data.qrCode})),await u()}catch(y){c(y instanceof Error?y.message:"Failed to connect WhatsApp")}finally{o(!1)}},h=async()=>{if(window.confirm("Are you sure you want to disconnect from WhatsApp?"))try{c(null);const f=await fetch("/api/whatsapp/disconnect",{method:"POST"}),y=await f.json();if(!f.ok||!y.success)throw new Error(y.error||"Disconnect failed");await u()}catch(f){c(f instanceof Error?f.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-8",children:[i.jsxDEV("div",{className:"w-8 h-8 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:142,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"Loading WhatsApp status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:143,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:141,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-5",children:[a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:154,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-sm",children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:155,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:153,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:161,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:157,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:152,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:171,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium text-sm",children:"Connected to WhatsApp"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:172,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:170,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:177,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-2",children:[s.phoneNumber&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Phone Number"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:183,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.phoneNumber},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:184,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:182,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:189,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:190,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:188,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:195,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:196,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:194,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:180,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:176,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:u,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:204,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:h,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:207,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:203,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:168,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-5",children:s.qrCode?i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-6 flex flex-col items-center gap-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide",children:"Scan QR Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:218,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark text-center max-w-sm",children:"Open WhatsApp on your phone, go to Settings > Linked Devices > Link a Device, then scan this QR code."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:221,columnNumber:15},globalThis),i.jsxDEV("div",{className:"bg-white p-4 rounded-lg",children:i.jsxDEV("img",{src:`https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(s.qrCode)}`,alt:"WhatsApp QR Code",className:"w-48 h-48","data-testid":"whatsapp-qr-code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:225,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:224,columnNumber:15},globalThis),i.jsxDEV(ur,{variant:"secondary",onClick:u,icon:il,children:"Refresh QR Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:232,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:217,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-4",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:240,columnNumber:17},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium text-sm",children:"Not connected to WhatsApp"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:241,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:239,columnNumber:15},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:"How to Connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:246,columnNumber:17},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:'Click "Connect WhatsApp" below to generate a QR code'},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:250,columnNumber:19},globalThis),i.jsxDEV("li",{children:"Open WhatsApp on your phone"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:251,columnNumber:19},globalThis),i.jsxDEV("li",{children:["Go to ",i.jsxDEV("strong",{children:"Settings"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:29},globalThis)," > ",i.jsxDEV("strong",{children:"Linked Devices"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:60},globalThis)," > ",i.jsxDEV("strong",{children:"Link a Device"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:97},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:252,columnNumber:19},globalThis),i.jsxDEV("li",{children:"Scan the QR code displayed here"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:253,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:249,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:245,columnNumber:15},globalThis),i.jsxDEV(ur,{onClick:d,disabled:n,loading:n,icon:WV,fullWidth:!0,children:n?"Initializing...":"Connect WhatsApp"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:257,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:238,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:214,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/WhatsAppTab.tsx",lineNumber:149,columnNumber:5},globalThis)},ife=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState("pubsub"),[h,f]=V.useState("service_account"),[y,v]=V.useState(""),[N,j]=V.useState(""),[b,x]=V.useState(""),[D,T]=V.useState(""),[S,k]=V.useState(!1),[U,F]=V.useState(null),[M,R]=V.useState(!1),[L,B]=V.useState(null),[O,H]=V.useState(""),[Y,le]=V.useState(""),te=V.useRef(null),ne=V.useCallback(async()=>{var ee;try{c(null);const G=await(await fetch("/api/messengers/status")).json();if(G.success&&Array.isArray(G.data)){const ie=G.data.find(De=>De.platform==="google-chat");if(ie){let De=ie.details||{};if(ie.connected&&((ee=ie.details)==null?void 0:ee.mode)==="pubsub")try{const Re=await(await fetch("/api/messengers/google-chat/status")).json();Re.success&&(De={...De,...Re.data})}catch{}e({connected:ie.connected,mode:De.mode,authMode:De.authMode,serviceAccountEmail:De.serviceAccountEmail,pullActive:De.pullActive,pullPaused:De.pullPaused,subscriptionName:De.subscriptionName,projectId:De.projectId,consecutiveFailures:De.consecutiveFailures,lastPullAt:De.lastPullAt})}}}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{ne()},[ne]),V.useEffect(()=>(s.connected&&s.mode==="pubsub"&&(te.current=setInterval(()=>{ne()},1e4)),()=>{te.current&&(clearInterval(te.current),te.current=null)}),[s.connected,s.mode,ne]);const q=async ee=>{ee.preventDefault(),o(!0),c(null);try{let ce;u==="webhook"?ce={webhookUrl:y}:h==="adc"?(ce={authMode:"adc"},u==="pubsub"&&(ce.projectId=b,ce.subscriptionName=D),Y.trim()&&(ce.serviceAccountEmail=Y.trim())):u==="service-account"?ce={serviceAccountKey:N}:ce={serviceAccountKey:N,projectId:b,subscriptionName:D};const G=await fetch("/api/messengers/google-chat/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ce)}),ie=await G.json();if(!G.ok||!ie.success)throw new Error(ie.error||"Connection failed");v(""),j(""),x(""),T(""),le(""),await ne()}catch(ce){c(ce instanceof Error?ce.message:"Failed to connect")}finally{o(!1)}},Z=async()=>{if(window.confirm("Are you sure you want to disconnect from Google Chat?"))try{c(null);const ee=await fetch("/api/messengers/google-chat/disconnect",{method:"POST"}),ce=await ee.json();if(!ee.ok||!ce.success)throw new Error(ce.error||"Disconnect failed");await ne()}catch(ee){c(ee instanceof Error?ee.message:"Failed to disconnect")}},X=async()=>{k(!0),F(null);try{const ee=await fetch("/api/messengers/google-chat/pull",{method:"POST"}),ce=await ee.json();if(!ee.ok||!ce.success)throw new Error(ce.error||"Pull failed");const G=ce.messagesReceived||0;F(G>0?`Pulled ${G} message${G!==1?"s":""}`:"No new messages"),await ne()}catch(ee){F(ee instanceof Error?ee.message:"Pull failed")}finally{k(!1)}},z=async()=>{if(O.trim()){R(!0),B(null);try{const ee=await fetch("/api/messengers/google-chat/test-send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({space:O.trim(),text:"Test message from Crewly"})}),ce=await ee.json();if(!ee.ok||!ce.success)throw new Error(ce.error||"Test send failed");B("Message sent successfully")}catch(ee){B(ee instanceof Error?ee.message:"Test send failed")}finally{R(!1)}}},se=ee=>{switch(ee){case"webhook":return"Webhook";case"service-account":return"Service Account";case"pubsub":return"Pub/Sub (Bidirectional)";default:return"Unknown"}},ae=ee=>ee==="adc"?"Application Default Credentials":"Service Account Key",fe=()=>u==="webhook"?!!y:h==="adc"?u==="pubsub"?!!(b&&D):!0:u==="service-account"?!!N:!!(N&&b&&D);return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-8",children:[i.jsxDEV("div",{className:"w-8 h-8 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:305,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"Loading Google Chat status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:306,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:304,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-5",children:[a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:317,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-sm",children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:318,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:316,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:321,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:320,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:315,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:330,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium text-sm",children:"Connected to Google Chat"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:331,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:329,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:335,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-2",children:[i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Mode"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:340,columnNumber:17},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:se(s.mode)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:341,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:339,columnNumber:15},globalThis),(s.mode==="pubsub"||s.mode==="service-account")&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Auth"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:345,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:ae(s.authMode)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:346,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:344,columnNumber:17},globalThis),s.serviceAccountEmail&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Impersonating"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:351,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-mono truncate max-w-[280px]","data-testid":"sa-email-display",children:s.serviceAccountEmail},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:352,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:350,columnNumber:17},globalThis),s.mode==="pubsub"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Project ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:358,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-mono",children:s.projectId},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:359,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:357,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Subscription"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:362,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-mono text-text-secondary-dark/80 truncate max-w-[240px]",children:s.subscriptionName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:363,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:361,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Pull Loop"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:366,columnNumber:21},globalThis),i.jsxDEV("span",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:`w-2 h-2 rounded-full ${s.pullPaused?"bg-amber-400":s.pullActive?"bg-emerald-400 animate-pulse":"bg-gray-500"}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:368,columnNumber:23},globalThis),i.jsxDEV("span",{className:`text-sm font-medium ${s.pullPaused?"text-amber-400":s.pullActive?"text-emerald-400":"text-text-secondary-dark"}`,children:s.pullPaused?"Paused (errors)":s.pullActive?"Running":"Stopped"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:369,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:367,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:365,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Last Pull"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:375,columnNumber:21},globalThis),i.jsxDEV("span",{className:"text-sm font-mono","data-testid":"last-pull-at",children:s.lastPullAt?new Date(s.lastPullAt).toLocaleTimeString():"Never"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:376,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:374,columnNumber:19},globalThis),(s.consecutiveFailures??0)>0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-t border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Consecutive Failures"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:382,columnNumber:23},globalThis),i.jsxDEV("span",{className:"text-sm font-medium text-amber-400","data-testid":"consecutive-failures",children:s.consecutiveFailures},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:383,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:381,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:356,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:338,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:334,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[s.mode==="pubsub"&&i.jsxDEV(ur,{variant:"primary",onClick:X,disabled:S,loading:S,icon:GV,"data-testid":"pull-now-btn",children:S?"Pulling...":"Pull Now"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:393,columnNumber:15},globalThis),i.jsxDEV(ur,{variant:"secondary",onClick:ne,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:404,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:Z,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:407,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:391,columnNumber:11},globalThis),U&&i.jsxDEV("div",{className:`text-sm px-3 py-2 rounded-lg ${U.startsWith("Pulled")?"bg-emerald-500/10 text-emerald-400":U==="No new messages"?"bg-blue-500/10 text-blue-400":"bg-rose-500/10 text-rose-400"}`,"data-testid":"pull-result",children:U},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:414,columnNumber:13},globalThis),(s.mode==="pubsub"||s.mode==="service-account")&&i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-4 space-y-3",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide",children:"Test Send"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:426,columnNumber:15},globalThis),i.jsxDEV("div",{className:"flex items-end gap-2",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV(Ur,{htmlFor:"test-send-space",children:"Space Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:429,columnNumber:19},globalThis),i.jsxDEV(en,{id:"test-send-space",name:"testSendSpace",type:"text",value:O,onChange:ee=>H(ee.target.value),placeholder:"spaces/AAAA...",autoComplete:"off","data-testid":"test-send-space"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:430,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:428,columnNumber:17},globalThis),i.jsxDEV(ur,{variant:"primary",onClick:z,disabled:M||!O.trim(),loading:M,icon:t9,"data-testid":"test-send-btn",children:M?"Sending...":"Test Send"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:441,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:427,columnNumber:15},globalThis),L&&i.jsxDEV("div",{className:`text-sm px-3 py-2 rounded-lg ${L==="Message sent successfully"?"bg-emerald-500/10 text-emerald-400":"bg-rose-500/10 text-rose-400"}`,"data-testid":"test-send-result",children:L},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:453,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:425,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:328,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-5",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:467,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium text-sm",children:"Not connected to Google Chat"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:468,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:466,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("button",{className:`px-4 py-2 text-sm rounded-lg border transition-colors ${u==="pubsub"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>d("pubsub"),"data-testid":"mode-pubsub",children:"Pub/Sub (Recommended)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:473,columnNumber:13},globalThis),i.jsxDEV("button",{className:`px-4 py-2 text-sm rounded-lg border transition-colors ${u==="webhook"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>d("webhook"),"data-testid":"mode-webhook",children:"Webhook"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:484,columnNumber:13},globalThis),i.jsxDEV("button",{className:`px-4 py-2 text-sm rounded-lg border transition-colors ${u==="service-account"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>d("service-account"),"data-testid":"mode-service-account",children:"Service Account"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:495,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:472,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-background-dark border border-border-dark rounded-lg p-5",children:[i.jsxDEV("h3",{className:"text-xs font-semibold text-text-secondary-dark uppercase tracking-wide mb-3",children:u==="pubsub"?"Pub/Sub Setup (Bidirectional)":u==="webhook"?"Webhook Setup (Send-only)":"Service Account Setup (Send-only)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:510,columnNumber:13},globalThis),u==="pubsub"?i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Go to ",i.jsxDEV("strong",{children:"Google Cloud Console"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:517,columnNumber:27},globalThis)," > ",i.jsxDEV("strong",{children:"APIs & Services"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:517,columnNumber:70},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:517,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Enable the ",i.jsxDEV("strong",{children:"Google Chat API"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:518,columnNumber:32},globalThis)," and ",i.jsxDEV("strong",{children:"Cloud Pub/Sub API"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:518,columnNumber:69},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:518,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Create a ",i.jsxDEV("strong",{children:"Service Account"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:519,columnNumber:30},globalThis)," and download the JSON key"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:519,columnNumber:17},globalThis),i.jsxDEV("li",{children:["In the Chat API settings, create a ",i.jsxDEV("strong",{children:"Chat App"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:520,columnNumber:56},globalThis)," and select ",i.jsxDEV("strong",{children:"Cloud Pub/Sub"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:520,columnNumber:93},globalThis)," as the connection type"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:520,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Enter a ",i.jsxDEV("strong",{children:"Pub/Sub topic name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:521,columnNumber:29},globalThis)," (e.g., ",i.jsxDEV("code",{className:"bg-surface-dark px-1 rounded",children:"projects/my-project/topics/google-chat-events"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:521,columnNumber:72},globalThis),")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:521,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Create a ",i.jsxDEV("strong",{children:"Pub/Sub subscription"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:522,columnNumber:30},globalThis)," for that topic (pull mode)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:522,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Grant the service account ",i.jsxDEV("strong",{children:"Pub/Sub Subscriber"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:523,columnNumber:47},globalThis)," role on the subscription"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:523,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Fill in the details below"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:524,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:516,columnNumber:15},globalThis):u==="webhook"?i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:"Open your Google Chat space"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:528,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Click the space name > ",i.jsxDEV("strong",{children:"Apps & integrations"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:529,columnNumber:47},globalThis)," > ",i.jsxDEV("strong",{children:"Manage webhooks"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:529,columnNumber:89},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:529,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Create a new webhook and copy the URL"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:530,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Paste the webhook URL below"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:531,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:527,columnNumber:15},globalThis):i.jsxDEV("ol",{className:"list-decimal list-inside space-y-2 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Go to the ",i.jsxDEV("strong",{children:"Google Cloud Console"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:535,columnNumber:31},globalThis)," > ",i.jsxDEV("strong",{children:"APIs & Services"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:535,columnNumber:74},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:535,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Enable the ",i.jsxDEV("strong",{children:"Google Chat API"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:536,columnNumber:32},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:536,columnNumber:17},globalThis),i.jsxDEV("li",{children:["Create a ",i.jsxDEV("strong",{children:"Service Account"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:537,columnNumber:30},globalThis)," and download the JSON key"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:537,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Grant the service account access to your Chat space"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:538,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Paste the JSON key contents below"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:539,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:534,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:509,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:q,className:"space-y-4",children:[u==="webhook"?i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-webhook",required:!0,children:"Webhook URL"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:548,columnNumber:17},globalThis),i.jsxDEV(en,{id:"gchat-webhook",name:"webhookUrl",type:"url",value:y,onChange:ee=>v(ee.target.value),placeholder:"https://chat.googleapis.com/v1/spaces/...",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:549,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:547,columnNumber:15},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{children:"Authentication Method"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:564,columnNumber:19},globalThis),i.jsxDEV("div",{className:"flex gap-2 mt-1",children:[i.jsxDEV("button",{type:"button",className:`px-3 py-1.5 text-xs rounded-lg border transition-colors ${h==="service_account"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>f("service_account"),"data-testid":"auth-service-account",children:"Service Account Key"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:566,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",className:`px-3 py-1.5 text-xs rounded-lg border transition-colors ${h==="adc"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>f("adc"),"data-testid":"auth-adc",children:"Application Default Credentials"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:578,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:565,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:563,columnNumber:17},globalThis),u==="pubsub"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-project-id",required:!0,children:"GCP Project ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:596,columnNumber:23},globalThis),i.jsxDEV(en,{id:"gchat-project-id",name:"projectId",type:"text",value:b,onChange:ee=>x(ee.target.value),placeholder:"my-gcp-project-id",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:597,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:595,columnNumber:21},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-subscription",required:!0,children:"Pub/Sub Subscription Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:609,columnNumber:23},globalThis),i.jsxDEV(en,{id:"gchat-subscription",name:"subscriptionName",type:"text",value:D,onChange:ee=>T(ee.target.value),placeholder:"google-chat-events-sub",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:610,columnNumber:23},globalThis),i.jsxDEV("p",{className:"mt-1 text-xs text-text-secondary-dark/70",children:"Just the subscription name, not the full resource path"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:620,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:608,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:594,columnNumber:19},globalThis),h==="adc"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"bg-blue-500/10 border border-blue-500/30 rounded-lg p-4",children:[i.jsxDEV("p",{className:"text-sm text-blue-300 mb-2",children:"Using Application Default Credentials from your local gcloud CLI."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:630,columnNumber:23},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mb-2",children:"Run this command if you haven't already:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:633,columnNumber:23},globalThis),i.jsxDEV("code",{className:"block bg-background-dark px-3 py-2 rounded text-xs text-text-primary-dark font-mono break-all",children:"gcloud auth application-default login --scopes=https://www.googleapis.com/auth/chat.bot,https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/cloud-platform"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:636,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:629,columnNumber:21},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-sa-email",children:"Service Account Email (for impersonation)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:641,columnNumber:23},globalThis),i.jsxDEV(en,{id:"gchat-sa-email",name:"serviceAccountEmail",type:"email",value:Y,onChange:ee=>le(ee.target.value),placeholder:"chatbot@project.iam.gserviceaccount.com",autoComplete:"off","data-testid":"sa-email-input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:642,columnNumber:23},globalThis),i.jsxDEV("p",{className:"mt-1 text-xs text-text-secondary-dark/70",children:"Required for sending messages. Your user needs the Service Account Token Creator IAM role."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:652,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:640,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:628,columnNumber:19},globalThis):i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"gchat-sa-key",required:!0,children:"Service Account Key (JSON)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:659,columnNumber:21},globalThis),i.jsxDEV("textarea",{id:"gchat-sa-key",name:"serviceAccountKey",value:N,onChange:ee=>j(ee.target.value),placeholder:'{"type": "service_account", "project_id": "...", ...}',required:!0,rows:6,className:"w-full px-3 py-2 bg-background-dark border border-border-dark rounded-lg text-sm text-text-primary-dark placeholder:text-text-secondary-dark/50 focus:outline-none focus:ring-2 focus:ring-primary/50 font-mono"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:660,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:658,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:561,columnNumber:15},globalThis),i.jsxDEV(ur,{type:"submit",disabled:n||!fe(),loading:n,fullWidth:!0,children:n?"Connecting...":"Connect Google Chat"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:675,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:545,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:465,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/GoogleChatTab.tsx",lineNumber:312,columnNumber:5},globalThis)},afe="/api/messengers/status",lfe="/api/messengers/telegram/connect",cfe="/api/messengers/telegram/disconnect",ufe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState({botToken:"",allowedChats:""}),h=V.useCallback(async()=>{var N,j,b,x;try{c(null);const T=await(await fetch(afe)).json();if(T.success&&Array.isArray(T.data)){const S=T.data.find(k=>k.platform==="telegram");e(S?{connected:S.connected,botName:(N=S.details)==null?void 0:N.botName,botId:(j=S.details)==null?void 0:j.botId,messagesSent:(b=S.details)==null?void 0:b.messagesSent,messagesReceived:(x=S.details)==null?void 0:x.messagesReceived}:{connected:!1})}else e({connected:!1,error:T.error||"Failed to fetch status"})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=N=>{const{name:j,value:b}=N.target;d(x=>({...x,[j]:b}))},y=async N=>{N.preventDefault(),o(!0),c(null);try{const j={token:u.botToken};u.allowedChats.trim()&&(j.allowedChats=u.allowedChats.split(",").map(D=>D.trim()).filter(Boolean));const b=await fetch(lfe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)}),x=await b.json();if(!b.ok||!x.success)throw new Error(x.error||"Connection failed");d({botToken:"",allowedChats:""}),await h()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Telegram")}finally{o(!1)}},v=async()=>{if(window.confirm("Are you sure you want to disconnect from Telegram?"))try{c(null);const N=await fetch(cfe,{method:"POST"}),j=await N.json();if(!N.ok||!j.success)throw new Error(j.error||"Disconnect failed");await h()}catch(N){c(N instanceof Error?N.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:184,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading Telegram status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:185,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:183,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Telegram Integration"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:194,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect a Telegram bot to communicate with the orchestrator via Telegram."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:195,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:193,columnNumber:7},globalThis),a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:204,columnNumber:13},globalThis),i.jsxDEV("span",{children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:205,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:203,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1","aria-label":"×",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:208,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:207,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:202,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:217,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium",children:"Connected to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:218,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:216,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:222,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-3",children:[s.botName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:228,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:229,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:227,columnNumber:17},globalThis),s.botId&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:234,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botId},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:235,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:233,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:240,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:241,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:239,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:246,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:247,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:245,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:225,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:221,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:h,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:254,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:v,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:257,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:253,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:215,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:266,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium",children:"Not connected to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:267,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:265,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Setup Instructions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:271,columnNumber:13},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-3 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Open Telegram and search for"," ",i.jsxDEV("a",{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["@BotFather",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:284,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:277,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:275,columnNumber:15},globalThis),i.jsxDEV("li",{children:["Send ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"/newbot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:288,columnNumber:22},globalThis)," and follow the prompts to create a bot"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:287,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Copy the HTTP API token provided by BotFather"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:290,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Paste the token below and click Connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:291,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:274,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:270,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:y,className:"bg-surface-dark border border-border-dark rounded-lg p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connect to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:296,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"botToken",required:!0,children:"Bot Token"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:301,columnNumber:15},globalThis),i.jsxDEV(en,{id:"botToken",name:"botToken",type:"password",value:u.botToken,onChange:f,placeholder:"123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:302,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"The HTTP API token from @BotFather"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:312,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:300,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"allowedChats",children:"Allowed Chats (optional)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:318,columnNumber:15},globalThis),i.jsxDEV(en,{id:"allowedChats",name:"allowedChats",type:"text",value:u.allowedChats,onChange:f,placeholder:"-1001234567890, -1009876543210"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:319,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Comma-separated chat IDs to restrict the bot to specific groups"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:327,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:317,columnNumber:13},globalThis),i.jsxDEV("div",{className:"pt-2",children:i.jsxDEV(ur,{type:"submit",disabled:n||!u.botToken,loading:n,fullWidth:!0,children:n?"Connecting...":"Connect to Telegram"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:333,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:332,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:295,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:264,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/TelegramTab.tsx",lineNumber:191,columnNumber:5},globalThis)},dfe="/api/messengers/status",mfe="/api/messengers/discord/connect",hfe="/api/messengers/discord/disconnect",ffe=()=>{const[s,e]=V.useState({connected:!1}),[t,r]=V.useState(!0),[n,o]=V.useState(!1),[a,c]=V.useState(null),[u,d]=V.useState({token:"",allowedChannels:""}),h=V.useCallback(async()=>{var N,j,b,x;try{c(null);const T=await(await fetch(dfe)).json();if(T.success&&Array.isArray(T.data)){const S=T.data.find(k=>k.platform==="discord");e(S?{connected:S.connected,botName:(N=S.details)==null?void 0:N.botName,botId:(j=S.details)==null?void 0:j.botId,messagesSent:(b=S.details)==null?void 0:b.messagesSent,messagesReceived:(x=S.details)==null?void 0:x.messagesReceived}:{connected:!1})}else e({connected:!1,error:T.error||"Failed to fetch status"})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=N=>{const{name:j,value:b}=N.target;d(x=>({...x,[j]:b}))},y=async N=>{N.preventDefault(),o(!0),c(null);try{const j={token:u.token};u.allowedChannels.trim()&&(j.allowedChannels=u.allowedChannels.split(",").map(D=>D.trim()).filter(Boolean));const b=await fetch(mfe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)}),x=await b.json();if(!b.ok||!x.success)throw new Error(x.error||"Connection failed");d({token:"",allowedChannels:""}),await h()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Discord")}finally{o(!1)}},v=async()=>{if(window.confirm("Are you sure you want to disconnect from Discord?"))try{c(null);const N=await fetch(hfe,{method:"POST"}),j=await N.json();if(!N.ok||!j.success)throw new Error(j.error||"Disconnect failed");await h()}catch(N){c(N instanceof Error?N.message:"Failed to disconnect")}};return t?i.jsxDEV("div",{className:"flex flex-col items-center justify-center py-16",children:[i.jsxDEV("div",{className:"w-10 h-10 border-4 border-primary/20 border-t-primary rounded-full animate-spin mb-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:184,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-text-secondary-dark",children:"Loading Discord status..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:185,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:183,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Discord Integration"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:194,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect a Discord bot to communicate with the orchestrator via your Discord server."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:195,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:193,columnNumber:7},globalThis),a&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(vc,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:204,columnNumber:13},globalThis),i.jsxDEV("span",{children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:205,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:203,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>c(null),className:"text-rose-400 hover:text-rose-300 p-1","aria-label":"×",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:208,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:207,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:202,columnNumber:9},globalThis),s.connected?i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-emerald-500/10 border border-emerald-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(Vl,{className:"w-5 h-5 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:217,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-emerald-400 font-medium",children:"Connected to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:218,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:216,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connection Details"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:222,columnNumber:13},globalThis),i.jsxDEV("div",{className:"space-y-3",children:[s.botName&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot Name"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:228,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:229,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:227,columnNumber:17},globalThis),s.botId&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Bot ID"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:234,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.botId},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:235,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:233,columnNumber:17},globalThis),s.messagesSent!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2 border-b border-border-dark",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Sent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:240,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesSent},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:241,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:239,columnNumber:17},globalThis),s.messagesReceived!==void 0&&i.jsxDEV("div",{className:"flex items-center justify-between py-2",children:[i.jsxDEV("span",{className:"text-sm text-text-secondary-dark",children:"Messages Received"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:246,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-sm font-medium",children:s.messagesReceived},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:247,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:245,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:225,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:221,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(ur,{variant:"secondary",onClick:h,icon:il,children:"Refresh Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:254,columnNumber:13},globalThis),i.jsxDEV(ur,{variant:"danger",onClick:v,icon:lj,children:"Disconnect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:257,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:253,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:215,columnNumber:9},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-lg p-4 flex items-center gap-3",children:[i.jsxDEV(vc,{className:"w-5 h-5 text-amber-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:266,columnNumber:13},globalThis),i.jsxDEV("span",{className:"text-amber-400 font-medium",children:"Not connected to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:267,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:265,columnNumber:11},globalThis),i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Setup Instructions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:271,columnNumber:13},globalThis),i.jsxDEV("ol",{className:"list-decimal list-inside space-y-3 text-sm text-text-secondary-dark",children:[i.jsxDEV("li",{children:["Go to the"," ",i.jsxDEV("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-1",children:["Discord Developer Portal",i.jsxDEV(xx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:284,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:277,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:275,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Create a New Application and navigate to the Bot section"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:287,columnNumber:15},globalThis),i.jsxDEV("li",{children:'Click "Reset Token" to generate a bot token and copy it'},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:288,columnNumber:15},globalThis),i.jsxDEV("li",{children:["Under OAuth2 → URL Generator, select the"," ",i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"bot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:291,columnNumber:17},globalThis)," scope and grant permissions:",i.jsxDEV("ul",{className:"list-disc list-inside ml-4 mt-1.5 space-y-1",children:[i.jsxDEV("li",{children:i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"Send Messages"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:293,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:293,columnNumber:19},globalThis),i.jsxDEV("li",{children:i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"Read Message History"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:294,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:294,columnNumber:19},globalThis),i.jsxDEV("li",{children:i.jsxDEV("code",{className:"text-xs bg-background-dark px-1.5 py-0.5 rounded",children:"Add Reactions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:295,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:295,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:292,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:289,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Use the generated URL to invite the bot to your server"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:298,columnNumber:15},globalThis),i.jsxDEV("li",{children:"Paste the bot token below and click Connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:299,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:274,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:270,columnNumber:11},globalThis),i.jsxDEV("form",{onSubmit:y,className:"bg-surface-dark border border-border-dark rounded-lg p-6 space-y-4",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-secondary-dark uppercase tracking-wide mb-4",children:"Connect to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:304,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"token",required:!0,children:"Bot Token"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:309,columnNumber:15},globalThis),i.jsxDEV(en,{id:"token",name:"token",type:"password",value:u.token,onChange:f,placeholder:"MTEyMzQ1Njc4OTAxMjM0NTY3OC...",required:!0,autoComplete:"off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:310,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"The bot token from Discord Developer Portal"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:320,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:308,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV(Ur,{htmlFor:"allowedChannels",children:"Allowed Channels (optional)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:326,columnNumber:15},globalThis),i.jsxDEV(en,{id:"allowedChannels",name:"allowedChannels",type:"text",value:u.allowedChannels,onChange:f,placeholder:"1234567890123456789, 9876543210987654321"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:327,columnNumber:15},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1",children:"Comma-separated channel IDs to restrict the bot to specific channels"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:335,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:325,columnNumber:13},globalThis),i.jsxDEV("div",{className:"pt-2",children:i.jsxDEV(ur,{type:"submit",disabled:n||!u.token,loading:n,fullWidth:!0,children:n?"Connecting...":"Connect to Discord"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:341,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:340,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:303,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:264,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/DiscordTab.tsx",lineNumber:191,columnNumber:5},globalThis)},pfe=[{id:"slack",name:"Slack",description:"Connect your Slack workspace for team communication with the orchestrator.",icon:xX,available:!0,component:nfe},{id:"whatsapp",name:"WhatsApp",description:"Connect via WhatsApp Web to communicate with the orchestrator from your phone.",icon:UX,available:!0,component:ofe},{id:"discord",name:"Discord",description:"Connect a Discord bot to communicate with the orchestrator via Discord server.",icon:jX,available:!0,component:ffe},{id:"telegram",name:"Telegram",description:"Connect a Telegram bot for messaging the orchestrator via Telegram.",icon:t9,available:!0,component:ufe},{id:"google-chat",name:"Google Chat",description:"Connect Google Chat for workspace communication with the orchestrator.",icon:$B,available:!0,component:ife}],yfe=()=>{const[s,e]=V.useState(null),t=r=>{e(n=>n===r?null:r)};return i.jsxDEV("div",{className:"space-y-6 max-w-3xl",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"Messaging Integrations"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:123,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect messaging platforms to communicate with the orchestrator from anywhere."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:124,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:122,columnNumber:7},globalThis),i.jsxDEV("div",{className:"space-y-3",children:pfe.map(r=>{const n=s===r.id,o=r.icon;return i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg overflow-hidden","data-testid":`platform-card-${r.id}`,children:[i.jsxDEV("button",{className:`w-full flex items-center gap-4 p-4 text-left transition-colors ${r.available?"hover:bg-background-dark cursor-pointer":"opacity-60 cursor-default"}`,onClick:()=>r.available&&t(r.id),disabled:!r.available,"data-testid":`platform-toggle-${r.id}`,children:[i.jsxDEV("div",{className:"flex items-center justify-center w-10 h-10 rounded-lg bg-background-dark border border-border-dark",children:i.jsxDEV(o,{className:"w-5 h-5 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:153,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:152,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-sm font-semibold",children:r.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:158,columnNumber:21},globalThis),!r.available&&i.jsxDEV("span",{className:"text-xs px-2 py-0.5 rounded-full bg-background-dark text-text-secondary-dark border border-border-dark",children:"Coming Soon"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:160,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:157,columnNumber:19},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-0.5 truncate",children:r.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:165,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:156,columnNumber:17},globalThis),r.available&&i.jsxDEV("div",{className:"text-text-secondary-dark",children:n?i.jsxDEV(uf,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:173,columnNumber:23},globalThis):i.jsxDEV(nf,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:175,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:171,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:142,columnNumber:15},globalThis),n&&r.component&&i.jsxDEV("div",{className:"border-t border-border-dark p-6","data-testid":`platform-content-${r.id}`,children:i.jsxDEV(r.component,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:184,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:183,columnNumber:17},globalThis)]},r.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:136,columnNumber:13},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:130,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:120,columnNumber:5},globalThis)},CR={gemini:"Google Gemini",anthropic:"Anthropic",openai:"OpenAI"},gB={gemini:"GOOGLE_GENERATIVE_AI_API_KEY",anthropic:"ANTHROPIC_API_KEY",openai:"OPENAI_API_KEY"},gfe=2e3,bfe=()=>{const{settings:s,updateSettings:e,isLoading:t,error:r}=EF(),[n,o]=V.useState({global:{},runtimeOverrides:{},skillOverrides:{}}),[a,c]=V.useState(!1),[u,d]=V.useState("idle"),[h,f]=V.useState(null),[y,v]=V.useState({}),[N,j]=V.useState({}),[b,x]=V.useState({}),[D,T]=V.useState({});V.useEffect(()=>{s!=null&&s.apiKeys&&(o(s.apiKeys),c(!1))},[s]);const S=V.useCallback((B,O)=>{o(H=>({...H,global:{...H.global,[B]:O}})),c(!0),d("idle"),j(H=>({...H,[`global-${B}`]:"idle"}))},[]),k=V.useCallback((B,O,H,Y)=>{o(le=>{var q,Z,X;const ne={...((Z=(q=le.runtimeOverrides)==null?void 0:q[B])==null?void 0:Z[O])??{key:"",source:"global"},[H]:Y};return{...le,runtimeOverrides:{...le.runtimeOverrides,[B]:{...(X=le.runtimeOverrides)==null?void 0:X[B],[O]:ne}}}}),c(!0),d("idle")},[]),U=async()=>{d("saving"),f(null);try{await e({apiKeys:n}),d("saved"),c(!1),setTimeout(()=>d("idle"),gfe)}catch(B){d("error"),f(B instanceof Error?B.message:"Failed to save")}},F=async(B,O,H)=>{if(!(!O||O.startsWith("••••"))){j(Y=>({...Y,[H]:"testing"})),x(Y=>({...Y,[H]:""}));try{const Y=await Z0.testApiKey(B,O);j(le=>({...le,[H]:Y.valid?"valid":"invalid"})),!Y.valid&&Y.error&&x(le=>({...le,[H]:Y.error}))}catch{j(Y=>({...Y,[H]:"invalid"})),x(Y=>({...Y,[H]:"Connection failed"}))}}},M=B=>{v(O=>({...O,[B]:!O[B]}))},R=B=>{T(O=>({...O,[B]:!O[B]}))},L=(B,O)=>{const H=N[O];return H==="testing"?i.jsxDEV("span",{className:"text-xs text-text-secondary-dark animate-pulse",children:"Testing..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:176,columnNumber:14},globalThis):H==="valid"?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-green-400",children:[i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:179,columnNumber:79},globalThis)," Valid"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:179,columnNumber:14},globalThis):H==="invalid"?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-red-400",children:[i.jsxDEV(Rl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:182,columnNumber:77},globalThis)," ",b[O]||"Invalid"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:182,columnNumber:14},globalThis):B&&!B.startsWith("••••")?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-green-400",children:[i.jsxDEV(Mi,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:185,columnNumber:79},globalThis)," Configured"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:185,columnNumber:14},globalThis):B&&B.startsWith("••••")?i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-blue-400",children:[i.jsxDEV(BR,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:188,columnNumber:78},globalThis)," Saved"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:188,columnNumber:14},globalThis):i.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-text-secondary-dark",children:[i.jsxDEV(Rl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:190,columnNumber:87},globalThis)," Not set"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:190,columnNumber:12},globalThis)};return t?i.jsxDEV("div",{className:"text-text-secondary-dark",children:"Loading settings..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:194,columnNumber:12},globalThis):r?i.jsxDEV("div",{className:"bg-red-900/20 border border-red-800 rounded-lg p-4",children:i.jsxDEV("p",{className:"text-red-400",children:r},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:200,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:199,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-8",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-xl font-semibold",children:"API Keys"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:210,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Configure AI provider API keys. Keys are encrypted at rest and never logged."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:211,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:209,columnNumber:9},globalThis),i.jsxDEV("div",{className:"flex gap-2",children:i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:U,disabled:!a||u==="saving",children:u==="saving"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV(KV,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:223,columnNumber:17},globalThis)," Saving..."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:223,columnNumber:15},globalThis):u==="saved"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV(Mi,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:225,columnNumber:17},globalThis)," Saved"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:225,columnNumber:15},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV(ij,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:227,columnNumber:17},globalThis)," Save Changes"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:227,columnNumber:15},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:216,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:215,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:208,columnNumber:7},globalThis),u==="error"&&h&&i.jsxDEV("div",{className:"bg-red-900/20 border border-red-800 rounded-lg p-3",children:i.jsxDEV("p",{className:"text-sm text-red-400",children:h},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:235,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:234,columnNumber:9},globalThis),i.jsxDEV("section",{className:"bg-surface-dark rounded-lg border border-border-dark p-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-4",children:[i.jsxDEV(BR,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:242,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-lg font-medium",children:"Global API Keys"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:243,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:241,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-6",children:"These keys are used system-wide as defaults. Runtimes and skills can override them with their own keys."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:245,columnNumber:9},globalThis),i.jsxDEV("div",{className:"space-y-5",children:pP.map(B=>{const O=n.global[B]||"",H=`global-${B}`,Y=y[H];return i.jsxDEV("div",{className:"space-y-1",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV(Ur,{htmlFor:`global-${B}`,children:CR[B]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:258,columnNumber:19},globalThis),L(O,H)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:257,columnNumber:17},globalThis),i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("div",{className:"relative flex-1",children:[i.jsxDEV(en,{id:`global-${B}`,type:Y?"text":"password",value:O,onChange:le=>S(B,le.target.value),placeholder:`Enter ${gB[B]}`,className:"pr-10 font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:265,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>M(H),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-secondary-dark hover:text-text-primary-dark","aria-label":Y?"Hide key":"Show key",children:Y?i.jsxDEV(VL,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:279,columnNumber:36},globalThis):i.jsxDEV(OR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:279,columnNumber:69},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:273,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:264,columnNumber:19},globalThis),i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:()=>F(B,O,H),disabled:!O||O.startsWith("••••")||N[H]==="testing",children:[i.jsxDEV(xT,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:288,columnNumber:21},globalThis),"Test"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:282,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:263,columnNumber:17},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:["Env var: ",i.jsxDEV("code",{className:"bg-surface-dark px-1 rounded",children:gB[B]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:293,columnNumber:28},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:292,columnNumber:17},globalThis)]},B,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:256,columnNumber:15},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:249,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:240,columnNumber:7},globalThis),i.jsxDEV("section",{className:"bg-surface-dark rounded-lg border border-border-dark p-6",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-4",children:[i.jsxDEV(xT,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:304,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-lg font-medium",children:"Runtime Overrides"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:305,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:303,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mb-4",children:"Override global keys for specific AI runtimes. By default, runtimes use the global key."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:307,columnNumber:9},globalThis),i.jsxDEV("div",{className:"space-y-2",children:C6.map(B=>{const O=D[B];return i.jsxDEV("div",{className:"border border-border-dark rounded-lg",children:[i.jsxDEV("button",{type:"button",onClick:()=>R(B),className:"w-full flex items-center justify-between px-4 py-3 text-sm font-medium hover:bg-surface-dark/50 rounded-lg",children:[i.jsxDEV("span",{children:NT[B]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:322,columnNumber:19},globalThis),O?i.jsxDEV(uf,{className:"w-4 h-4 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:324,columnNumber:21},globalThis):i.jsxDEV(nf,{className:"w-4 h-4 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:326,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:317,columnNumber:17},globalThis),O&&i.jsxDEV("div",{className:"px-4 pb-4 space-y-4 border-t border-border-dark pt-4",children:pP.map(H=>{var q,Z;const Y=(Z=(q=n.runtimeOverrides)==null?void 0:q[B])==null?void 0:Z[H],le=(Y==null?void 0:Y.source)==="custom",te=le&&(Y==null?void 0:Y.key)||"",ne=`runtime-${B}-${H}`;return i.jsxDEV("div",{className:"space-y-2",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV(Ur,{htmlFor:`${B}-${H}-toggle`,children:CR[H]},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:341,columnNumber:29},globalThis),i.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer text-sm",children:[i.jsxDEV("input",{id:`${B}-${H}-toggle`,type:"checkbox",checked:le,onChange:X=>k(B,H,"source",X.target.checked?"custom":"global"),className:"form-checkbox rounded border-border-dark bg-surface-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:345,columnNumber:31},globalThis),i.jsxDEV("span",{className:"text-text-secondary-dark",children:le?"Custom key":"Use global"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:355,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:344,columnNumber:29},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:340,columnNumber:27},globalThis),le&&i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("div",{className:"relative flex-1",children:[i.jsxDEV(en,{type:y[ne]?"text":"password",value:te,onChange:X=>k(B,H,"key",X.target.value),placeholder:`Custom ${CR[H]} key for ${NT[B]}`,className:"pr-10 font-mono text-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:364,columnNumber:33},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>M(ne),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-secondary-dark hover:text-text-primary-dark",children:y[ne]?i.jsxDEV(VL,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:378,columnNumber:58},globalThis):i.jsxDEV(OR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:378,columnNumber:91},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:373,columnNumber:33},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:363,columnNumber:31},globalThis),i.jsxDEV(ur,{variant:"secondary",size:"sm",onClick:()=>F(H,te,ne),disabled:!te||te.startsWith("••••")||N[ne]==="testing",children:[i.jsxDEV(xT,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:387,columnNumber:33},globalThis),"Test"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:381,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:362,columnNumber:29},globalThis)]},H,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:339,columnNumber:25},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:331,columnNumber:19},globalThis)]},B,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:316,columnNumber:15},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:311,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:302,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/ApiKeysTab.tsx",lineNumber:206,columnNumber:5},globalThis)},vfe=6,wfe=32,xfe="https://api.crewlyai.com",Nfe="/api/relay/connect";function Dfe(s=vfe){const e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=new Uint8Array(s);return crypto.getRandomValues(t),Array.from(t,r=>e[r%e.length]).join("")}function Tfe(s=wfe){const e=new Uint8Array(s);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}const jfe=({isOpen:s,onClose:e})=>{const[t,r]=V.useState(""),[n,o]=V.useState(""),[a,c]=V.useState("idle"),[u,d]=V.useState(""),[h,f]=V.useState(null),[y,v]=V.useState(!1);V.useEffect(()=>{if(!s){c("idle"),d(""),f(null),v(!1);return}const b=Dfe(),x=Tfe();r(b),o(x),(async()=>{c("connecting"),d("");const T=localStorage.getItem(Db)||"";try{const S=await fetch(Nfe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:xfe,pairingCode:b,role:"orchestrator",token:T,sharedSecret:x})}),k=await S.json();S.ok&&k.success?c("success"):(c("error"),d(k.error||"Failed to register with relay"))}catch{c("error"),d("Could not reach the server")}})()},[s]);const N=V.useCallback(async(b,x)=>{try{await navigator.clipboard.writeText(b),f(x),setTimeout(()=>f(null),2e3)}catch{}},[]);if(!s)return null;const j=JSON.stringify({pairingCode:t,sharedSecret:n});return i.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:b=>{b.target===b.currentTarget&&e()},role:"dialog","aria-modal":"true","aria-label":"Invite Device","data-testid":"invite-device-modal",children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-2xl w-full max-w-md mx-4",onClick:b=>b.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between px-5 py-4 border-b border-border-dark",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Invite Device"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:189,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:e,className:"p-1 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors","aria-label":"Close","data-testid":"invite-modal-close",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:196,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:190,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:188,columnNumber:9},globalThis),i.jsxDEV("div",{className:"px-5 py-4 space-y-4",children:[a==="connecting"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-text-secondary-dark","data-testid":"invite-connecting",children:[i.jsxDEV(ef,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:205,columnNumber:15},globalThis),"Registering with relay..."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:204,columnNumber:13},globalThis),a==="error"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-rose-400 bg-rose-500/10 border border-rose-500/20 rounded px-3 py-2","data-testid":"invite-error",children:[i.jsxDEV(Rl,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:212,columnNumber:15},globalThis),u]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:211,columnNumber:13},globalThis),a==="success"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-emerald-400 bg-emerald-500/10 border border-emerald-500/20 rounded px-3 py-2","data-testid":"invite-success",children:[i.jsxDEV(Mi,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:219,columnNumber:15},globalThis),"Waiting for device to join..."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:218,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Pairing Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:226,columnNumber:13},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("code",{className:"flex-1 px-3 py-2 text-lg font-mono font-bold tracking-widest text-text-primary-dark bg-background-dark border border-border-dark rounded-lg text-center select-all","data-testid":"invite-pairing-code",children:t},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:228,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>N(t,"code"),className:"p-2 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors","aria-label":"Copy pairing code","data-testid":"copy-pairing-code",children:h==="code"?i.jsxDEV(Mi,{className:"w-4 h-4 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:240,columnNumber:43},globalThis):i.jsxDEV(PR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:240,columnNumber:92},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:234,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:227,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:225,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Shared Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:247,columnNumber:13},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("code",{className:"flex-1 px-3 py-2 text-[11px] font-mono text-text-primary-dark bg-background-dark border border-border-dark rounded-lg break-all select-all","data-testid":"invite-shared-secret",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:249,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:()=>N(n,"secret"),className:"p-2 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors shrink-0","aria-label":"Copy shared secret","data-testid":"copy-shared-secret",children:h==="secret"?i.jsxDEV(Mi,{className:"w-4 h-4 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:261,columnNumber:45},globalThis):i.jsxDEV(PR,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:261,columnNumber:94},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:255,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:248,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:246,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("button",{onClick:()=>v(!y),className:"flex items-center gap-1.5 text-xs text-primary hover:text-primary/80 transition-colors","data-testid":"toggle-qr-code",children:[i.jsxDEV(WV,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:273,columnNumber:15},globalThis),y?"Hide QR Code":"Show QR Code"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:268,columnNumber:13},globalThis),y&&i.jsxDEV("div",{className:"mt-3 flex justify-center","data-testid":"qr-code-container",children:i.jsxDEV("div",{className:"p-3 bg-white rounded-lg",children:i.jsxDEV(JV,{value:j,size:160,level:"M"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:280,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:279,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:278,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:267,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-[11px] text-text-secondary-dark leading-relaxed",children:["Share the pairing code and secret with the device you want to connect. On the other device, click ",i.jsxDEV("strong",{children:"Join Relay"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:289,columnNumber:40},globalThis)," and enter these values."]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:287,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:201,columnNumber:9},globalThis),i.jsxDEV("div",{className:"px-5 py-3 border-t border-border-dark flex justify-end",children:i.jsxDEV("button",{onClick:e,className:"px-4 py-1.5 text-xs font-medium text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors",children:"Done"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:295,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:294,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:183,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/InviteDeviceModal.tsx",lineNumber:175,columnNumber:5},globalThis)},Sfe="https://api.crewlyai.com",Efe="/api/relay/connect",_fe=({isOpen:s,onClose:e})=>{const[t,r]=V.useState(""),[n,o]=V.useState(""),[a,c]=V.useState("idle"),[u,d]=V.useState(""),h=V.useCallback(()=>{r(""),o(""),c("idle"),d(""),e()},[e]),f=V.useCallback(async v=>{v.preventDefault();const N=t.trim(),j=n.trim();if(!N||!j){c("error"),d("Both pairing code and shared secret are required");return}c("connecting"),d("");const b=localStorage.getItem(Db)||"";try{const x=await fetch(Efe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:Sfe,pairingCode:N,role:"agent",token:b,sharedSecret:j})}),D=await x.json();x.ok&&D.success?c("success"):(c("error"),d(D.error||"Failed to join relay"))}catch{c("error"),d("Could not reach the server")}},[t,n]);if(!s)return null;const y=a==="connecting";return i.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:v=>{v.target===v.currentTarget&&h()},role:"dialog","aria-modal":"true","aria-label":"Join Relay","data-testid":"join-relay-modal",children:i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-xl shadow-2xl w-full max-w-md mx-4",onClick:v=>v.stopPropagation(),children:[i.jsxDEV("div",{className:"flex items-center justify-between px-5 py-4 border-b border-border-dark",children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Join Relay"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:134,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:h,className:"p-1 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors","aria-label":"Close","data-testid":"join-modal-close",children:i.jsxDEV(jn,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:141,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:135,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:133,columnNumber:9},globalThis),i.jsxDEV("form",{onSubmit:f,className:"px-5 py-4 space-y-4",children:[a==="error"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-rose-400 bg-rose-500/10 border border-rose-500/20 rounded px-3 py-2","data-testid":"join-error",children:[i.jsxDEV(Rl,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:150,columnNumber:15},globalThis),u]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:149,columnNumber:13},globalThis),a==="success"&&i.jsxDEV("div",{className:"flex items-center gap-2 text-xs text-emerald-400 bg-emerald-500/10 border border-emerald-500/20 rounded px-3 py-2","data-testid":"join-success",children:[i.jsxDEV(Mi,{className:"w-3.5 h-3.5 shrink-0"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:157,columnNumber:15},globalThis),"Connected to relay successfully!"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:156,columnNumber:13},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{htmlFor:"join-pairing-code",className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Pairing Code"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:164,columnNumber:13},globalThis),i.jsxDEV("input",{id:"join-pairing-code",type:"text",value:t,onChange:v=>r(v.target.value.toUpperCase()),placeholder:"e.g. A3BK7P",disabled:y||a==="success",className:"w-full px-3 py-2 text-sm font-mono tracking-wider text-text-primary-dark bg-background-dark border border-border-dark rounded-lg placeholder:text-text-secondary-dark/40 focus:outline-none focus:ring-1 focus:ring-primary/50 focus:border-primary/50 disabled:opacity-50",autoComplete:"off","data-testid":"join-pairing-code-input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:167,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:163,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("label",{htmlFor:"join-shared-secret",className:"block text-xs font-medium text-text-secondary-dark mb-1.5",children:"Shared Secret"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:182,columnNumber:13},globalThis),i.jsxDEV("input",{id:"join-shared-secret",type:"text",value:n,onChange:v=>o(v.target.value),placeholder:"64-character hex string",disabled:y||a==="success",className:"w-full px-3 py-2 text-xs font-mono text-text-primary-dark bg-background-dark border border-border-dark rounded-lg placeholder:text-text-secondary-dark/40 focus:outline-none focus:ring-1 focus:ring-primary/50 focus:border-primary/50 disabled:opacity-50",autoComplete:"off","data-testid":"join-shared-secret-input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:185,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:181,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-[11px] text-text-secondary-dark leading-relaxed",children:"Enter the pairing code and shared secret from the device that sent the invitation."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:199,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex justify-end gap-2 pt-2 border-t border-border-dark",children:[i.jsxDEV("button",{type:"button",onClick:h,className:"px-4 py-1.5 text-xs font-medium text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors",children:a==="success"?"Done":"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:205,columnNumber:13},globalThis),a!=="success"&&i.jsxDEV("button",{type:"submit",disabled:y||!t.trim()||!n.trim(),className:"flex items-center gap-1.5 px-4 py-1.5 text-xs font-medium text-white bg-primary rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"join-submit-button",children:[y&&i.jsxDEV(ef,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:219,columnNumber:34},globalThis),y?"Connecting...":"Join"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:213,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:204,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:146,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:128,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/JoinRelayModal.tsx",lineNumber:120,columnNumber:5},globalThis)},kfe="/api/cloud/validate",Cfe="/api/cloud/status",Afe="/api/cloud/devices",Mfe="/api/relay/cloud-devices";function bB(s){const e=Date.now()-new Date(s).getTime(),t=Math.floor(e/1e3);return t<5?"Just now":t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}const Ufe={waiting:"Connecting",paired:"Connected",disconnected:"Offline",online:"Online",offline:"Offline"},Rfe={waiting:"bg-yellow-400",paired:"bg-emerald-400",disconnected:"bg-gray-500",online:"bg-emerald-400",offline:"bg-gray-500"};function Vfe(s){const e=new Map;for(const t of s){const r=t.deviceId||t.sessionId;if(!r){e.set(`__unkeyed_${e.size}`,t);continue}const n=e.get(r);if(!n)e.set(r,t);else{const o=new Date(n.lastHeartbeatAt||n.registeredAt||"0").getTime(),a=new Date(t.lastHeartbeatAt||t.registeredAt||"0").getTime(),c=n.status==="online"||n.state==="paired"||n.state==="waiting",u=t.status==="online"||t.state==="paired"||t.state==="waiting";(a>o||u&&!c)&&e.set(r,t)}}return Array.from(e.values())}const Ffe=({device:s})=>{const e=s.role==="orchestrator"?sy:WB,t=s.status||s.state||"disconnected",r=Rfe[t]??"bg-gray-500",n=Ufe[t]??t,o=s.name||s.deviceName||(s.sessionId?`${s.role||"device"} (${s.sessionId.slice(0,8)}...)`:s.deviceId||"Unknown");return i.jsxDEV("div",{"data-testid":`cloud-device-${s.sessionId||s.deviceId}`,className:`flex items-center justify-between p-3 rounded-lg border transition-colors ${s.isLocal?"border-primary/30 bg-primary/5":"border-border-dark bg-background-dark hover:border-border-dark/80"}`,children:[i.jsxDEV("div",{className:"flex items-center gap-3 min-w-0",children:[i.jsxDEV("div",{className:`p-1.5 rounded-md ${s.isLocal?"bg-primary/10":"bg-surface-dark"}`,children:i.jsxDEV(e,{className:`w-4 h-4 ${s.isLocal?"text-primary":"text-text-secondary-dark"}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:173,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:172,columnNumber:9},globalThis),i.jsxDEV("div",{className:"min-w-0",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark truncate",children:o},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:177,columnNumber:13},globalThis),s.isLocal&&i.jsxDEV("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded bg-primary/10 text-primary whitespace-nowrap",children:"This machine"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:181,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:176,columnNumber:11},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:s.lastHeartbeatAt?`Last seen: ${bB(s.lastHeartbeatAt)}`:`Registered: ${bB(s.registeredAt)}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:186,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:175,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:171,columnNumber:7},globalThis),i.jsxDEV("div",{className:"flex items-center gap-1.5 ml-3 whitespace-nowrap",children:[i.jsxDEV("span",{className:`h-2 w-2 rounded-full ${r}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:193,columnNumber:9},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:194,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:192,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:163,columnNumber:5},globalThis)},Ife=()=>{const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),[a,c]=V.useState(!1),[u,d]=V.useState(null),h=V.useCallback(async()=>{var y;try{r(!0),o(null),c(!1),d(null);const v=await fetch(Afe),N=await v.json();if(v.ok&&N.success&&N.data){if(N.data.syncState&&d(N.data.syncState),N.data.devices&&N.data.devices.length>0){e(N.data.devices),N.data.tokenExpired&&c(!0);return}if(!N.data.syncState||N.data.syncState==="stopped")try{const j=await fetch(Mfe),b=await j.json();if(j.ok&&b.success&&((y=b.data)!=null&&y.devices)){e(b.data.devices),b.data.tokenExpired&&c(!0);return}}catch{}e(N.data.devices||[]),N.data.tokenExpired&&c(!0)}else o(N.error||"Failed to load devices")}catch{o("Could not reach the server")}finally{r(!1)}},[]);V.useEffect(()=>{h()},[h]);const f=V.useMemo(()=>Vfe(s),[s]);return i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-5 space-y-3","data-testid":"cloud-device-list-section",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV(i9,{className:"w-4 h-4 text-text-secondary-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:280,columnNumber:11},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Connected Devices"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:281,columnNumber:11},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:["(",f.length,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:282,columnNumber:11},globalThis),u&&i.jsxDEV("span",{"data-testid":"sync-state-badge",className:`text-[10px] font-medium px-1.5 py-0.5 rounded ${u==="syncing"?"bg-emerald-500/10 text-emerald-400":u==="error"?"bg-rose-500/10 text-rose-400":"bg-gray-500/10 text-gray-400"}`,children:u==="syncing"?"Sync Active":u==="error"?"Sync Error":"Sync Off"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:286,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:279,columnNumber:9},globalThis),i.jsxDEV("button",{onClick:h,disabled:t,className:"p-1.5 text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors disabled:opacity-50","aria-label":"Refresh devices","data-testid":"refresh-devices-button",children:i.jsxDEV(il,{className:`w-3.5 h-3.5 ${t?"animate-spin":""}`},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:307,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:300,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:278,columnNumber:7},globalThis),n&&i.jsxDEV("div",{className:"text-xs text-rose-400 bg-rose-500/10 border border-rose-500/20 rounded px-3 py-2",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:312,columnNumber:9},globalThis),a&&!n&&i.jsxDEV("div",{className:"text-xs text-amber-400 bg-amber-500/10 border border-amber-500/20 rounded px-3 py-2","data-testid":"token-expired-warning",children:"Cloud session expired. Please disconnect and sign in again to refresh your token."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:318,columnNumber:9},globalThis),!t&&!n&&!a&&f.length===0&&i.jsxDEV("div",{className:"text-center py-6",children:[i.jsxDEV(sy,{className:"w-8 h-8 text-text-secondary-dark/30 mx-auto mb-2"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:325,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark",children:"No devices connected yet"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:326,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-[11px] text-text-secondary-dark/60 mt-0.5",children:["Connect from another machine using ",i.jsxDEV("code",{className:"text-primary/80",children:"crewly cloud connect"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:328,columnNumber:48},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:327,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:324,columnNumber:9},globalThis),f.length>0&&i.jsxDEV("div",{className:"space-y-2",children:f.map(y=>i.jsxDEV(Ffe,{device:y},y.deviceId||y.sessionId||y.name||y.deviceName,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:336,columnNumber:13},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:334,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:277,columnNumber:5},globalThis)},Lfe=()=>{const[s,e]=V.useState(null),[t,r]=V.useState(!1),[n,o]=V.useState(null),[a,c]=V.useState(!0),[u,d]=V.useState(null),[h,f]=V.useState(!1),[y,v]=V.useState(!1),N=V.useCallback(async()=>{try{const S=await fetch(Cfe),k=await S.json();if(S.ok&&k.success&&k.data){const U=k.data,F=U.connectionStatus==="connected";return r(F),F&&o(U.tier??null),F}}catch{}return r(!1),o(null),!1},[]),j=V.useCallback(async()=>{const S=localStorage.getItem(Db);if(!S){c(!1);return}try{const k=await fetch(kfe,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${S}`}}),U=await k.json();k.ok&&U.success&&U.data?(e({id:U.data.id,email:U.data.email,plan:U.data.plan,name:U.data.name,avatar:U.data.avatar}),d(null)):(localStorage.removeItem(Db),e(null))}catch{d("Could not reach CrewlyAI Cloud. Check your internet connection.")}finally{c(!1)}},[]);V.useEffect(()=>{(async()=>{await N(),await j()})()},[N,j]);const b=()=>{const S=`${window.location.origin}/auth/callback`;window.location.href=E$(S)},x=V.useCallback(async S=>{try{const k=localStorage.getItem("crewly_refresh_token")||void 0;await fetch("/api/cloud/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:S,...k&&{refreshToken:k}})})}catch{}},[]);V.useEffect(()=>{const S=localStorage.getItem(Db);S&&s&&x(S)},[s,x]);const D=async()=>{localStorage.removeItem(Db),e(null),r(!1),o(null),d(null);try{await fetch("/api/cloud/disconnect",{method:"POST"})}catch{}},T=S=>{switch(S){case"pro":return"bg-indigo-500/10 text-indigo-400 border-indigo-500/30";case"enterprise":return"bg-amber-500/10 text-amber-400 border-amber-500/30";default:return"bg-gray-500/10 text-gray-400 border-gray-500/30"}};return a?i.jsxDEV("div",{className:"flex items-center justify-center py-12",children:i.jsxDEV("div",{className:"w-6 h-6 border-2 border-primary/20 border-t-primary rounded-full animate-spin"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:523,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:522,columnNumber:7},globalThis):i.jsxDEV("div",{className:"space-y-6",children:[i.jsxDEV("div",{children:[i.jsxDEV("h2",{className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(LT,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:533,columnNumber:11},globalThis),"CrewlyAI Cloud"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:532,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Connect to CrewlyAI Cloud for device sync, remote access, and Pro features."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:536,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:531,columnNumber:7},globalThis),u&&i.jsxDEV("div",{className:"bg-rose-500/10 border border-rose-500/30 text-rose-400 px-4 py-3 rounded-lg text-sm",children:u},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:542,columnNumber:9},globalThis),s||t?i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-5 space-y-4",children:[i.jsxDEV("div",{className:"flex items-center justify-between",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"w-10 h-10 bg-primary/10 rounded-full flex items-center justify-center",children:s!=null&&s.avatar?i.jsxDEV("img",{src:s.avatar,alt:s.name||s.email,className:"w-10 h-10 rounded-full"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:555,columnNumber:21},globalThis):i.jsxDEV(LT,{className:"w-5 h-5 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:561,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:553,columnNumber:17},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:"text-sm font-medium text-text-primary-dark",children:s?s.name||s.email:"CrewlyAI Cloud"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:566,columnNumber:21},globalThis),i.jsxDEV(Mi,{className:"w-4 h-4 text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:569,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:565,columnNumber:19},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:s?s.email:"Connected via backend"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:571,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:564,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:552,columnNumber:15},globalThis),i.jsxDEV("span",{className:`px-2 py-0.5 text-xs font-medium rounded border ${T((s==null?void 0:s.plan)??n??"free")}`,children:((s==null?void 0:s.plan)??n??"free").charAt(0).toUpperCase()+((s==null?void 0:s.plan)??n??"free").slice(1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:577,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:551,columnNumber:13},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2 pt-2 border-t border-border-dark",children:[i.jsxDEV("button",{onClick:async()=>{await N(),await j()},className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary-dark hover:text-text-primary-dark rounded-md hover:bg-background-dark transition-colors",children:[i.jsxDEV(il,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:587,columnNumber:17},globalThis),"Refresh"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:583,columnNumber:15},globalThis),i.jsxDEV("button",{onClick:D,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-secondary-dark hover:text-rose-400 rounded-md hover:bg-background-dark transition-colors",children:[i.jsxDEV(JB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:594,columnNumber:17},globalThis),"Disconnect"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:590,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:582,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:550,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2","data-testid":"relay-pairing-buttons",children:[i.jsxDEV("button",{onClick:()=>f(!0),className:"flex items-center gap-1.5 px-3 py-2 text-xs font-medium text-text-primary-dark bg-primary/10 border border-primary/20 rounded-lg hover:bg-primary/20 transition-colors","data-testid":"invite-device-button",children:[i.jsxDEV(ZV,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:607,columnNumber:15},globalThis),"Invite Device"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:602,columnNumber:13},globalThis),i.jsxDEV("button",{onClick:()=>v(!0),className:"flex items-center gap-1.5 px-3 py-2 text-xs font-medium text-text-primary-dark bg-surface-dark border border-border-dark rounded-lg hover:bg-background-dark transition-colors","data-testid":"join-relay-button",children:[i.jsxDEV(rA,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:615,columnNumber:15},globalThis),"Join Relay"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:610,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:601,columnNumber:11},globalThis),i.jsxDEV(Ife,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:621,columnNumber:11},globalThis),i.jsxDEV(jfe,{isOpen:h,onClose:()=>f(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:624,columnNumber:11},globalThis),i.jsxDEV(_fe,{isOpen:y,onClose:()=>v(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:625,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:549,columnNumber:9},globalThis):i.jsxDEV("div",{className:"bg-surface-dark border border-border-dark rounded-lg p-6 text-center space-y-4",children:[i.jsxDEV("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-primary/10",children:i.jsxDEV(xT,{className:"w-6 h-6 text-primary"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:631,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:630,columnNumber:11},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Connect to CrewlyAI Cloud"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:635,columnNumber:13},globalThis),i.jsxDEV("p",{className:"text-xs text-text-secondary-dark mt-1 max-w-sm mx-auto",children:"Sign in with your CrewlyAI account to enable device sync, remote team access, and Pro features."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:638,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:634,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:b,className:"inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-white rounded-lg font-medium text-sm hover:bg-primary/90 transition-colors","data-testid":"cloud-sign-in-button",children:[i.jsxDEV(xx,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:649,columnNumber:13},globalThis),"Sign in with CrewlyAI"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:644,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:629,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:529,columnNumber:5},globalThis)},Pfe=new Set(["general","roles","skills","integrations","api-keys","cloud"]),Ofe=()=>{const[s]=eA(),e=s.get("tab"),t=e&&Pfe.has(e)?e:"general",[r,n]=V.useState(t),o=[{id:"general",label:"General",icon:r9},{id:"roles",label:"Roles",icon:Nx},{id:"skills",label:"Skills",icon:a9},{id:"integrations",label:"Integrations",icon:rA},{id:"api-keys",label:"API Keys",icon:BR},{id:"cloud",label:"Cloud",icon:LT}],a=()=>{switch(r){case"general":return i.jsxDEV(Hhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:62,columnNumber:16},globalThis);case"roles":return i.jsxDEV(Xhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:64,columnNumber:16},globalThis);case"skills":return i.jsxDEV(Jhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:66,columnNumber:16},globalThis);case"integrations":return i.jsxDEV(yfe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:68,columnNumber:16},globalThis);case"api-keys":return i.jsxDEV(bfe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:70,columnNumber:16},globalThis);case"cloud":return i.jsxDEV(Lfe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:72,columnNumber:16},globalThis);default:return null}};return i.jsxDEV("div",{className:"max-w-7xl mx-auto",children:[i.jsxDEV("div",{className:"mb-8",children:[i.jsxDEV("h1",{className:"text-3xl font-bold tracking-tight",children:"Settings"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:82,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-1",children:"Configure Crewly behavior and manage roles and skills"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:83,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:81,columnNumber:7},globalThis),i.jsxDEV("nav",{className:"flex gap-1 border-b border-border-dark mb-6",role:"tablist",children:o.map(c=>i.jsxDEV("button",{className:`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors -mb-px ${r===c.id?"border-primary text-primary":"border-transparent text-text-secondary-dark hover:text-text-primary-dark hover:bg-surface-dark"}`,onClick:()=>n(c.id),"aria-selected":r===c.id,role:"tab",id:`tab-${c.id}`,"aria-controls":`panel-${c.id}`,children:[i.jsxDEV(c.icon,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:104,columnNumber:13},globalThis),i.jsxDEV("span",{children:c.label},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:105,columnNumber:13},globalThis)]},c.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:91,columnNumber:11},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:89,columnNumber:7},globalThis),i.jsxDEV("main",{role:"tabpanel",id:`panel-${r}`,"aria-labelledby":`tab-${r}`,children:a()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:111,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Settings.tsx",lineNumber:79,columnNumber:5},globalThis)},Wh="/api/chat";class Bfe{async parseResponse(e,t){const r=await e.text();if(!r)throw new Error(t);try{return JSON.parse(r)}catch{throw new Error(t)}}async sendMessage(e){const t=await fetch(`${Wh}/send`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await this.parseResponse(t,"Failed to send message");if(!r.success)throw new Error(r.error||"Failed to send message");return r.data}async getMessages(e,t,r){return(await this.getMessagesWithMeta(e,t,r)).messages}async getMessagesWithMeta(e,t,r){const n=new URLSearchParams({conversationId:e});t&&n.set("limit",t.toString()),r&&n.set("before",r);const o=await fetch(`${Wh}/messages?${n.toString()}`),a=await this.parseResponse(o,"Failed to load messages");if(!a.success)throw new Error(a.error||"Failed to load messages");return{messages:a.data,hasMore:a.hasMore??!1,totalCount:a.totalCount??a.data.length}}async getConversations(e=!1,t){const r=new URLSearchParams;e&&r.set("includeArchived","true"),t&&r.set("channelType",t);const n=r.toString(),o=await fetch(`${Wh}/conversations${n?"?"+n:""}`),a=await this.parseResponse(o,"Failed to load conversations");if(!a.success)throw new Error(a.error||"Failed to load conversations");return a.data}async getCurrentConversation(){const e=await fetch(`${Wh}/conversations/current`),t=await this.parseResponse(e,"Failed to load current conversation");if(!t.success)throw new Error(t.error||"Failed to load current conversation");return t.data}async createConversation(e){const t=await fetch(`${Wh}/conversations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:e})}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to create conversation");return r.data}async updateConversation(e,t){const r=await fetch(`${Wh}/conversations/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await this.parseResponse(r,"Request failed");if(!n.success)throw new Error(n.error||"Failed to update conversation");return n.data}async deleteConversation(e){const t=await fetch(`${Wh}/conversations/${e}`,{method:"DELETE"}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to delete conversation")}async archiveConversation(e){const t=await fetch(`${Wh}/conversations/${e}/archive`,{method:"PUT"}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to archive conversation")}async clearConversation(e){const t=await fetch(`${Wh}/conversations/${e}/clear`,{method:"POST"}),r=await this.parseResponse(t,"Request failed");if(!r.success)throw new Error(r.error||"Failed to clear conversation")}}const qu=new Bfe,SH=V.createContext(null),Hfe=({children:s})=>{const[e,t]=V.useState([]),[r,n]=V.useState(null),[o,a]=V.useState([]),[c,u]=V.useState(!0),[d,h]=V.useState(!1),[f,y]=V.useState(null),[v,N]=V.useState(!1),[j,b]=V.useState(null),[x,D]=V.useState(!1),[T,S]=V.useState(!1),k=V.useRef(null);V.useEffect(()=>{k.current=r},[r]);const U=V.useCallback(Z=>{let X;const z=Z;if(z&&typeof z=="object"&&("data"in z&&z.data&&typeof z.data=="object"?X=z.data:"id"in z&&(X=z)),!X||!X.id)return;const se=k.current;X.conversationId===(se==null?void 0:se.id)&&(a(ae=>ae.some(fe=>fe.id===X.id)?ae:[...ae,X]),N(!1)),t(ae=>ae.map(fe=>fe.id===X.conversationId?{...fe,lastMessage:{content:X.content.slice(0,100),timestamp:X.timestamp,from:X.from},messageCount:fe.messageCount+1,updatedAt:X.timestamp}:fe))},[]),F=V.useCallback(Z=>{const X=Z,z=X.data||X,se=k.current;z.conversationId===(se==null?void 0:se.id)&&N(z.isTyping??!1)},[]),M=V.useCallback(Z=>{let X;const z=Z;if(z&&typeof z=="object"&&("data"in z&&z.data&&typeof z.data=="object"?X=z.data:"id"in z&&(X=z)),!X||!X.id)return;t(ae=>{const fe=ae.findIndex(ee=>ee.id===X.id);if(fe>=0){const ee=[...ae];return ee[fe]=X,ee}return[X,...ae]});const se=k.current;(se==null?void 0:se.id)===X.id&&n(X)},[]);V.useEffect(()=>(or.on("chat_message",U),or.on("chat_typing",F),or.on("conversation_updated",M),or.subscribeToChat(),()=>{or.off("chat_message",U),or.off("chat_typing",F),or.off("conversation_updated",M),or.unsubscribeFromChat()}),[U,F,M]),V.useEffect(()=>{(async()=>{u(!0);try{const[X,z]=await Promise.all([qu.getConversations(),qu.getCurrentConversation()]);if(t(X),z){n(z);const se=await qu.getMessagesWithMeta(z.id);a(se.messages),D(se.hasMore)}}catch(X){y(X instanceof Error?X.message:"Failed to load chat")}finally{u(!1)}})()},[]);const R=V.useCallback(async Z=>{if(!(!Z.trim()||d)){h(!0),y(null);try{const X=await qu.sendMessage({content:Z,conversationId:r==null?void 0:r.id});a(z=>z.some(se=>se.id===X.message.id)?z:[...z,X.message]),r||(n(X.conversation),t(z=>[X.conversation,...z])),X.orchestrator&&!X.orchestrator.forwarded&&X.orchestrator.error&&y(X.orchestrator.error)}catch(X){y(X instanceof Error?X.message:"Failed to send message")}finally{h(!1)}}},[d,r]),L=V.useCallback(async Z=>{const X=e.find(z=>z.id===Z);if(X){n(X),u(!0),y(null);try{const z=await qu.getMessagesWithMeta(Z);a(z.messages),D(z.hasMore)}catch(z){y(z instanceof Error?z.message:"Failed to load messages")}finally{u(!1)}}},[e]),B=V.useCallback(async Z=>{const X=await qu.createConversation(Z);return t(z=>[X,...z]),n(X),a([]),X},[]),O=V.useCallback(async Z=>{if(await qu.deleteConversation(Z),t(X=>X.filter(z=>z.id!==Z)),(r==null?void 0:r.id)===Z){const X=e.filter(z=>z.id!==Z);X.length>0?await L(X[0].id):(n(null),a([]))}},[r,e,L]),H=V.useCallback(async Z=>{if(await qu.archiveConversation(Z),t(X=>X.filter(z=>z.id!==Z)),(r==null?void 0:r.id)===Z){const X=e.filter(z=>z.id!==Z);X.length>0?await L(X[0].id):(n(null),a([]))}},[r,e,L]),Y=V.useCallback(async Z=>{await qu.clearConversation(Z),(r==null?void 0:r.id)===Z&&a([])},[r]),le=V.useCallback(async()=>{if(!r)return;const Z=await qu.getMessagesWithMeta(r.id);a(Z.messages),D(Z.hasMore)},[r]),te=V.useCallback(async()=>{if(!(!r||!x||T)){S(!0);try{const Z=o[0];if(!Z)return;const X=await qu.getMessagesWithMeta(r.id,50,Z.timestamp);X.messages.length>0&&a(z=>{const se=new Set(z.map(fe=>fe.id));return[...X.messages.filter(fe=>!se.has(fe.id)),...z]}),D(X.hasMore)}catch(Z){y(Z instanceof Error?Z.message:"Failed to load older messages")}finally{S(!1)}}},[r,x,T,o]),ne=V.useCallback(()=>{y(null)},[]),q={conversations:e,currentConversation:r,messages:o,isLoading:c,isSending:d,error:f,isTyping:v,channelFilter:j,hasMoreMessages:x,isLoadingMore:T,sendMessage:R,selectConversation:L,createConversation:B,deleteConversation:O,archiveConversation:H,clearConversation:Y,refreshMessages:le,loadOlderMessages:te,clearError:ne,setChannelFilter:b};return i.jsxDEV(SH.Provider,{value:q,children:s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/contexts/ChatContext.tsx",lineNumber:486,columnNumber:10},globalThis)},_F=()=>{const s=V.useContext(SH);if(!s)throw new Error("useChat must be used within a ChatProvider");return s},FV={slack:{icon:"🔷",label:"Slack",className:"channel-slack"},crewly_chat:{icon:"💬",label:"Crewly",className:"channel-crewly"},telegram:{icon:"✉️",label:"Telegram",className:"channel-telegram"},api:{icon:"🔌",label:"API",className:"channel-api"}};const zfe=[{key:null,label:"All"},...Object.entries(FV).map(([s,{icon:e,label:t}])=>({key:s,label:t,icon:e}))],Gfe=({activeFilter:s,onFilterChange:e,conversations:t})=>{const r=new Map;r.set(null,t.length);for(const o of t){const a=o.channelType??"crewly_chat";r.set(a,(r.get(a)??0)+1)}const n=zfe.filter(o=>o.key===null||(r.get(o.key)??0)>0);return i.jsxDEV("div",{className:"channel-filter-bar","data-testid":"channel-filter-bar",children:n.map(o=>{const a=r.get(o.key)??0,c=s===o.key;return i.jsxDEV("button",{className:`filter-chip ${c?"active":""}`,onClick:()=>e(o.key),"data-testid":`filter-chip-${o.key??"all"}`,"aria-pressed":c,children:[o.icon&&i.jsxDEV("span",{className:"filter-chip-icon","aria-hidden":"true",children:o.icon},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:93,columnNumber:15},globalThis),i.jsxDEV("span",{className:"filter-chip-label",children:o.label},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:97,columnNumber:13},globalThis),i.jsxDEV("span",{className:"filter-chip-count",children:a},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:98,columnNumber:13},globalThis)]},o.key??"all",!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:85,columnNumber:11},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelFilterBar.tsx",lineNumber:79,columnNumber:5},globalThis)};const EH=({channelType:s,showLabel:e=!0})=>{const t=FV[s]??FV.crewly_chat;return i.jsxDEV("span",{className:`channel-badge ${t.className}`,"data-testid":"channel-badge",title:t.label,children:[i.jsxDEV("span",{className:"channel-badge-icon","aria-hidden":"true",children:t.icon},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelBadge.tsx",lineNumber:47,columnNumber:7},globalThis),e&&i.jsxDEV("span",{className:"channel-badge-label",children:t.label},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelBadge.tsx",lineNumber:50,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChannelBadge.tsx",lineNumber:42,columnNumber:5},globalThis)},hi={MINUTE:60*1e3,HOUR:60*60*1e3,DAY:24*60*60*1e3,WEEK:7*24*60*60*1e3,MONTH:30*24*60*60*1e3,YEAR:365*24*60*60*1e3};function _H(s,e=new Date){const t=typeof s=="string"?new Date(s):s,r=e.getTime()-t.getTime();if(r<0)return Wfe(Math.abs(r));if(r<hi.MINUTE)return"just now";if(r<hi.HOUR){const n=Math.floor(r/hi.MINUTE);return`${n} ${n===1?"minute":"minutes"} ago`}if(r<hi.DAY){const n=Math.floor(r/hi.HOUR);return`${n} ${n===1?"hour":"hours"} ago`}if(r<hi.DAY*2)return"Yesterday";if(r<hi.WEEK)return`${Math.floor(r/hi.DAY)} days ago`;if(r<hi.MONTH){const n=Math.floor(r/hi.WEEK);return`${n} ${n===1?"week":"weeks"} ago`}if(r<hi.YEAR){const n=Math.floor(r/hi.MONTH);return`${n} ${n===1?"month":"months"} ago`}return Kfe(t)}function Wfe(s){if(s<hi.MINUTE)return"in a moment";if(s<hi.HOUR){const t=Math.floor(s/hi.MINUTE);return`in ${t} ${t===1?"minute":"minutes"}`}if(s<hi.DAY){const t=Math.floor(s/hi.HOUR);return`in ${t} ${t===1?"hour":"hours"}`}return s<hi.DAY*2?"Tomorrow":`in ${Math.floor(s/hi.DAY)} days`}function Kfe(s,e={}){const t={month:"short",day:"numeric",year:"numeric",...e};return s.toLocaleDateString(void 0,t)}const Xfe=({conversation:s,isActive:e,onClick:t})=>{var c,u,d,h,f,y,v;const r=s.channelType??"crewly_chat",n=s.title||((u=(c=s.lastMessage)==null?void 0:c.content)==null?void 0:u.slice(0,60))||"New conversation",o=((d=s.lastMessage)==null?void 0:d.content)??"",a=((f=(h=s.lastMessage)==null?void 0:h.from)==null?void 0:f.name)??((v=(y=s.lastMessage)==null?void 0:y.from)==null?void 0:v.type)??"";return i.jsxDEV("button",{className:`thread-preview ${e?"active":""}`,onClick:t,"data-testid":"thread-preview","aria-pressed":e,children:[i.jsxDEV("div",{className:"thread-preview-header",children:[i.jsxDEV(EH,{channelType:r,showLabel:!1},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:56,columnNumber:9},globalThis),i.jsxDEV("span",{className:"thread-preview-title",children:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:57,columnNumber:9},globalThis),i.jsxDEV("span",{className:"thread-preview-time",children:_H(s.updatedAt)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:58,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:55,columnNumber:7},globalThis),i.jsxDEV("div",{className:"thread-preview-body",children:[a&&i.jsxDEV("span",{className:"thread-preview-sender",children:[a,": "]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:65,columnNumber:11},globalThis),i.jsxDEV("span",{className:"thread-preview-content",children:o.length>80?o.slice(0,77)+"...":o},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:67,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:63,columnNumber:7},globalThis),i.jsxDEV("div",{className:"thread-preview-footer",children:i.jsxDEV("span",{className:"thread-preview-count",children:[s.messageCount," ",s.messageCount===1?"message":"messages"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:73,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:72,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadPreview.tsx",lineNumber:49,columnNumber:5},globalThis)};const qfe=({conversations:s,selectedConversationId:e,onSelectThread:t,channelFilter:r,onChannelFilterChange:n})=>{const a=[...r?s.filter(c=>(c.channelType??"crewly_chat")===r):s].sort((c,u)=>u.updatedAt.localeCompare(c.updatedAt));return i.jsxDEV("div",{className:"thread-list-panel","data-testid":"thread-list-panel",children:[i.jsxDEV(Gfe,{activeFilter:r,onFilterChange:n,conversations:s},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:63,columnNumber:7},globalThis),i.jsxDEV("div",{className:"thread-list-scroll",children:a.length===0?i.jsxDEV("div",{className:"thread-list-empty","data-testid":"thread-list-empty",children:i.jsxDEV("p",{children:r?"No conversations for this channel.":"No conversations yet."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:72,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:71,columnNumber:11},globalThis):a.map(c=>i.jsxDEV(Xfe,{conversation:c,isActive:c.id===e,onClick:()=>t(c.id)},c.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:80,columnNumber:13},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:69,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadListPanel.tsx",lineNumber:62,columnNumber:5},globalThis)};function Zfe(s){if(s.from.name)return s.from.name;switch(s.from.type){case"user":return"You";case"orchestrator":return"Orchestrator";case"agent":return s.from.role??"Agent";case"system":return"System";default:return"Unknown"}}function Yfe(s){switch(s.from.type){case"user":return"👤";case"orchestrator":return"🤖";case"agent":return"🔧";case"system":return"ℹ️";default:return"💬"}}function Jfe(s){return s.split(/(```[\s\S]*?```)/g).map((t,r)=>{if(t.startsWith("```")&&t.endsWith("```")){const n=t.slice(3,-3),o=n.indexOf(`
5213
+ `),a=o>0?n.slice(0,o).trim():"",c=o>0?n.slice(o+1):n;return i.jsxDEV("pre",{className:"code-block","data-language":a,children:i.jsxDEV("code",{children:c},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:83,columnNumber:11},this)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:82,columnNumber:9},this)}return i.jsxDEV("span",{children:$fe(t)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:90,columnNumber:7},this)})}function $fe(s){return s.split(/(`[^`]+`)/g).map((t,r)=>{if(t.startsWith("`")&&t.endsWith("`"))return i.jsxDEV("code",{className:"inline-code",children:t.slice(1,-1)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:107,columnNumber:9},this);let n=t;const o=/\*\*([^*]+)\*\*/g,a=t.split(o);return a.length>1&&(n=a.map((c,u)=>u%2===1?i.jsxDEV("strong",{children:c},`bold-${r}-${u}`,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:122,columnNumber:11},this):c)),i.jsxDEV(pn.Fragment,{children:n},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:129,columnNumber:12},this)})}const Qfe=({message:s})=>{var u,d,h;const[e,t]=V.useState(!1),r=s.from.type==="user",n=s.from.type==="system",o=!!((u=s.metadata)!=null&&u.rawOutput),a=()=>{var f;return e&&((f=s.metadata)!=null&&f.rawOutput)?i.jsxDEV("pre",{className:"raw-output","data-testid":"raw-output",children:s.metadata.rawOutput},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:159,columnNumber:9},globalThis):s.contentType==="code"||s.contentType==="markdown"||s.contentType==="text"?i.jsxDEV("div",{className:"formatted-content",children:Jfe(s.content)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:170,columnNumber:14},globalThis):i.jsxDEV("p",{children:s.content},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:173,columnNumber:12},globalThis)},c=["chat-message",s.from.type,r?"user-message":"",n?"system-message":"",s.status==="error"?"error-status":""].filter(Boolean).join(" ");return i.jsxDEV("div",{className:c,"data-testid":"chat-message",children:[i.jsxDEV("div",{className:"message-header",children:[i.jsxDEV("span",{className:"sender-icon","aria-hidden":"true",children:Yfe(s)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:189,columnNumber:9},globalThis),i.jsxDEV("span",{className:"sender-name",children:Zfe(s)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:192,columnNumber:9},globalThis),i.jsxDEV("span",{className:"message-time",children:_H(s.timestamp)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:193,columnNumber:9},globalThis),o&&i.jsxDEV("button",{className:"toggle-raw-btn",onClick:()=>t(!e),title:e?"Show formatted":"Show raw output","aria-label":e?"Show formatted":"Show raw output","data-testid":"toggle-raw-button",children:e?"📝":"🔍"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:195,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:188,columnNumber:7},globalThis),i.jsxDEV("div",{className:"message-content",children:a()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:207,columnNumber:7},globalThis),((d=s.metadata)==null?void 0:d.skillUsed)&&i.jsxDEV("div",{className:"message-metadata",children:i.jsxDEV("span",{className:"skill-badge",children:["Skill: ",s.metadata.skillUsed]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:211,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:210,columnNumber:9},globalThis),((h=s.metadata)==null?void 0:h.taskCreated)&&i.jsxDEV("div",{className:"message-metadata",children:i.jsxDEV("span",{className:"task-badge",children:["Task created: ",s.metadata.taskCreated]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:217,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:216,columnNumber:9},globalThis),s.status==="error"&&i.jsxDEV("div",{className:"message-error",role:"alert",children:"Failed to deliver"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:224,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:187,columnNumber:5},globalThis)};const epe=({disabled:s=!1,disabledPlaceholder:e,placeholder:t})=>{const{sendMessage:r,isSending:n,error:o,clearError:a}=_F(),[c,u]=V.useState(""),d=V.useRef(null);V.useEffect(()=>{const N=d.current;N&&(N.style.height="auto",N.style.height=`${Math.min(N.scrollHeight,200)}px`)},[c]);const h=s||n,f=async()=>{if(!c.trim()||h)return;const N=c.trim();u(""),a(),d.current&&(d.current.style.height="auto"),await r(N)},y=N=>{N.key==="Enter"&&!N.shiftKey&&(N.preventDefault(),f())},v=N=>{u(N.target.value),o&&a()};return i.jsxDEV("div",{className:"chat-input-container","data-testid":"chat-input-container",children:[o&&i.jsxDEV("div",{className:"input-error",role:"alert","data-testid":"chat-input-error",children:[i.jsxDEV("span",{children:["Error: ",o]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:109,columnNumber:11},globalThis),i.jsxDEV("button",{className:"dismiss-error",onClick:a,"aria-label":"Dismiss error",children:"×"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:110,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:108,columnNumber:9},globalThis),i.jsxDEV("div",{className:"input-wrapper",children:[i.jsxDEV("textarea",{ref:d,value:c,onChange:v,onKeyDown:y,placeholder:s&&e?e:t??"Type a message... (Enter to send, Shift+Enter for new line)",disabled:h,rows:1,className:`message-input ${s?"disabled-offline":""}`,"data-testid":"chat-message-input","aria-label":"Message input"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:121,columnNumber:9},globalThis),i.jsxDEV("button",{onClick:f,disabled:!c.trim()||h,className:"send-button",title:s?"Orchestrator offline":"Send message","data-testid":"chat-send-button","aria-label":n?"Sending message":s?"Orchestrator offline":"Send message",children:n?i.jsxDEV("span",{className:"sending-indicator","aria-hidden":"true",children:"⏳"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:147,columnNumber:13},globalThis):i.jsxDEV("span",{className:"send-icon","aria-hidden":"true",children:"➤"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:151,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:138,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:120,columnNumber:7},globalThis),i.jsxDEV("div",{className:"input-hints",children:[i.jsxDEV("span",{children:["Press ",i.jsxDEV("kbd",{children:"Enter"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:160,columnNumber:17},globalThis)," to send"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:159,columnNumber:9},globalThis),i.jsxDEV("span",{children:[i.jsxDEV("kbd",{children:"Shift"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:163,columnNumber:11},globalThis)," + ",i.jsxDEV("kbd",{children:"Enter"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:163,columnNumber:30},globalThis)," for new line"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:162,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:158,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatInput.tsx",lineNumber:106,columnNumber:5},globalThis)};const tpe=()=>i.jsxDEV("div",{className:"typing-indicator","data-testid":"typing-indicator",children:[i.jsxDEV("span",{className:"sender-icon","aria-hidden":"true",children:"🤖"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:26,columnNumber:7},globalThis),i.jsxDEV("span",{className:"sender-name",children:"Orchestrator"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:29,columnNumber:7},globalThis),i.jsxDEV("div",{className:"typing-dots","aria-label":"Orchestrator is typing",children:[i.jsxDEV("span",{className:"dot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:31,columnNumber:9},globalThis),i.jsxDEV("span",{className:"dot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:32,columnNumber:9},globalThis),i.jsxDEV("span",{className:"dot"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:33,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:30,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/TypingIndicator.tsx",lineNumber:25,columnNumber:5},globalThis);const rpe=60;function spe(s,e){return s.length<=e?s:s.slice(0,e)+"..."}function npe(s){const e=Date.now()-new Date(s).getTime(),t=Math.floor(e/1e3);if(t<60)return"just now";const r=Math.floor(t/60);return r<60?`${r}m ago`:`${Math.floor(r/60)}h ago`}const ope=()=>{const[s,e]=V.useState(null),[t,r]=V.useState([]),[n,o]=V.useState(!1),[a,c]=V.useState(new Set);V.useEffect(()=>{let U=!1;async function F(){try{const[M,R]=await Promise.all([ss.getQueueStatus(),ss.getPendingMessages()]);U||(e(M),r(R))}catch{}}return F(),()=>{U=!0}},[]);const u=V.useCallback(U=>{e(U)},[]),d=V.useCallback(U=>{r(F=>F.some(M=>M.id===U.id)?F:[...F,U])},[]),h=V.useCallback(U=>{r(F=>F.map(M=>M.id===U.id?{...M,status:"processing",processingStartedAt:U.processingStartedAt}:M))},[]),f=V.useCallback(U=>{r(F=>F.filter(M=>M.id!==U.id))},[]),y=V.useCallback(U=>{r(F=>F.filter(M=>M.id!==U.id))},[]),v=V.useCallback(U=>{r(F=>F.filter(M=>M.id!==U.id)),c(F=>{const M=new Set(F);return M.delete(U.id),M})},[]);V.useEffect(()=>(or.on("queue:status_update",u),or.on("queue:message_enqueued",d),or.on("queue:message_processing",h),or.on("queue:message_completed",f),or.on("queue:message_failed",y),or.on("queue:message_cancelled",v),()=>{or.off("queue:status_update",u),or.off("queue:message_enqueued",d),or.off("queue:message_processing",h),or.off("queue:message_completed",f),or.off("queue:message_failed",y),or.off("queue:message_cancelled",v)}),[u,d,h,f,y,v]);const N=async U=>{c(F=>new Set(F).add(U));try{await ss.cancelQueueMessage(U)}catch{c(F=>{const M=new Set(F);return M.delete(U),M})}},[j,b]=V.useState(!1),x=async()=>{b(!0);try{await ss.clearQueue(),r([]),e(null)}catch{}finally{b(!1)}},D=(s==null?void 0:s.pendingCount)??t.filter(U=>U.status==="pending").length,T=(s==null?void 0:s.isProcessing)??t.some(U=>U.status==="processing");if(D===0&&!T&&t.length===0)return null;const S=[];D>0&&S.push(`${D} queued`),T&&S.push("1 processing");const k=S.join(" · ");return i.jsxDEV("div",{className:"queue-status-bar","data-testid":"queue-status-bar",children:[i.jsxDEV("div",{className:"queue-status-summary",onClick:()=>o(!n),"data-testid":"queue-status-summary",role:"button",tabIndex:0,onKeyDown:U=>{(U.key==="Enter"||U.key===" ")&&(U.preventDefault(),o(!n))},children:[T&&i.jsxDEV("div",{className:"queue-spinner","data-testid":"queue-spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:248,columnNumber:26},globalThis),i.jsxDEV("span",{className:"queue-status-text",children:k},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:249,columnNumber:9},globalThis),i.jsxDEV("button",{className:"queue-clear-all-btn",onClick:U=>{U.stopPropagation(),x()},disabled:j,"data-testid":"queue-clear-all-btn",title:"Clear all queued messages",children:j?"Clearing...":"Clear All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:250,columnNumber:9},globalThis),i.jsxDEV("button",{className:`queue-toggle-btn${n?" expanded":""}`,"aria-label":n?"Collapse queue":"Expand queue",tabIndex:-1,children:"▼"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:262,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:235,columnNumber:7},globalThis),i.jsxDEV("div",{className:`queue-message-list${n?" expanded":""}`,"data-testid":"queue-message-list",children:t.map(U=>i.jsxDEV("div",{className:`queue-message-item${U.status==="processing"?" processing":""}`,"data-testid":"queue-message-item",children:[i.jsxDEV("div",{className:"queue-item-status",children:U.status==="processing"?i.jsxDEV("div",{className:"queue-spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:283,columnNumber:17},globalThis):i.jsxDEV("span",{"aria-label":"pending",children:"🕑"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:285,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:281,columnNumber:13},globalThis),i.jsxDEV("div",{className:"queue-item-content",children:[i.jsxDEV("p",{className:"queue-item-preview",children:spe(U.content,rpe)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:290,columnNumber:15},globalThis),i.jsxDEV("div",{className:"queue-item-meta",children:[i.jsxDEV("span",{className:"queue-source-badge",children:U.source==="slack"?"slack":"web"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:292,columnNumber:17},globalThis),i.jsxDEV("span",{className:"queue-item-time",children:npe(U.enqueuedAt)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:293,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:291,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:289,columnNumber:13},globalThis),i.jsxDEV("button",{className:"queue-cancel-btn",onClick:()=>U.status==="processing"?x():N(U.id),disabled:a.has(U.id)||j,"data-testid":"queue-cancel-btn",children:a.has(U.id)||j?"Cancelling...":"Cancel"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:297,columnNumber:13},globalThis)]},U.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:276,columnNumber:11},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:271,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/QueueStatusBar.tsx",lineNumber:234,columnNumber:5},globalThis)};const ipe=[/^[\s⏺❯▸▶►›»─━┄┅┈┉╌╍═│┃┆┇┊┋╎╏║┌┐└┘├┤┬┴┼╔╗╚╝╠╣╦╩╬╭╮╰╯\s]*$/,/bypass permissions on/i,/shift\+tab to cycle/i,/esc to interrupt/i,/^\s*▸▸\s/];function ape(s){const e=s.trim();return e?ipe.some(t=>t.test(e)):!0}function lpe(s){return s.filter(e=>!(e.from.type!=="user"&&e.from.type!=="orchestrator"||ape(e.content)))}const cpe=({conversation:s,onBack:e})=>{const{messages:t,isLoading:r,error:n,isTyping:o,hasMoreMessages:a,isLoadingMore:c,loadOlderMessages:u}=_F(),d=lpe(t),{status:h,isLoading:f}=h6(),y=V.useRef(null),v=V.useRef(null),[N,j]=V.useState(!1),b=V.useCallback(()=>{requestAnimationFrame(()=>{var S;(S=v.current)==null||S.scrollIntoView({behavior:"auto"})})},[]);V.useEffect(()=>{b()},[d,o,b]);const x=V.useCallback(()=>{const S=y.current;if(!S)return;const k=S.scrollHeight-S.scrollTop-S.clientHeight;if(j(k>100),S.scrollTop<50&&a&&!c){const U=S.scrollHeight;u().then(()=>{requestAnimationFrame(()=>{const F=S.scrollHeight;S.scrollTop=F-U})})}},[a,c,u]),D=!f&&h&&!h.isActive,T=(s==null?void 0:s.channelType)??"crewly_chat";return s?r&&d.length===0?i.jsxDEV("div",{className:"thread-detail-panel loading","data-testid":"thread-detail-loading",children:i.jsxDEV("div",{className:"loading-spinner",children:[i.jsxDEV("div",{className:"spinner"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:169,columnNumber:11},globalThis),i.jsxDEV("span",{children:"Loading messages..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:170,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:168,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:167,columnNumber:7},globalThis):n&&d.length===0?i.jsxDEV("div",{className:"thread-detail-panel error","data-testid":"thread-detail-error",children:i.jsxDEV("div",{className:"error-message",children:[i.jsxDEV("span",{className:"error-icon",children:"⚠️"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:181,columnNumber:11},globalThis),i.jsxDEV("p",{children:["Error: ",n]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:182,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:()=>window.location.reload(),className:"retry-button",children:"Retry"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:183,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:180,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:179,columnNumber:7},globalThis):i.jsxDEV("div",{className:"thread-detail-panel","data-testid":"thread-detail-panel",children:[i.jsxDEV("header",{className:"thread-detail-header",children:[e&&i.jsxDEV("button",{className:"thread-detail-back",onClick:e,"aria-label":"Back to thread list","data-testid":"thread-detail-back",children:"←"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:198,columnNumber:11},globalThis),i.jsxDEV("div",{className:"thread-detail-header-info",children:[i.jsxDEV("h2",{children:s.title??"Chat with Orchestrator"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:208,columnNumber:11},globalThis),i.jsxDEV("div",{className:"thread-detail-header-meta",children:i.jsxDEV(EH,{channelType:T},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:210,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:209,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:207,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:196,columnNumber:7},globalThis),i.jsxDEV(ope,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:215,columnNumber:7},globalThis),D&&i.jsxDEV("div",{className:"orchestrator-offline-banner","data-testid":"orchestrator-offline-banner",children:[i.jsxDEV("span",{className:"offline-icon","aria-hidden":"true",children:"⚠️"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:219,columnNumber:11},globalThis),i.jsxDEV("div",{className:"offline-content",children:[i.jsxDEV("strong",{children:"Orchestrator Offline"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:221,columnNumber:13},globalThis),i.jsxDEV("p",{children:(h==null?void 0:h.offlineMessage)||(h==null?void 0:h.message)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:222,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:220,columnNumber:11},globalThis),i.jsxDEV(Ob,{to:"/",className:"dashboard-link",children:"Go to Dashboard"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:224,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:218,columnNumber:9},globalThis),i.jsxDEV("div",{className:"messages-container",ref:y,onScroll:x,"data-testid":"messages-container",children:[c&&i.jsxDEV("div",{className:"load-more-spinner","data-testid":"load-more-spinner",children:[i.jsxDEV("div",{className:"spinner spinner-sm"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:238,columnNumber:13},globalThis),i.jsxDEV("span",{children:"Loading older messages..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:239,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:237,columnNumber:11},globalThis),d.length===0?i.jsxDEV("div",{className:"empty-chat","data-testid":"empty-chat",children:i.jsxDEV("div",{className:"welcome-message",children:[i.jsxDEV("h3",{children:"Welcome to Crewly"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:246,columnNumber:15},globalThis),i.jsxDEV("p",{children:"Start a conversation with the Orchestrator."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:247,columnNumber:15},globalThis),i.jsxDEV("p",{children:"Try asking to:"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:248,columnNumber:15},globalThis),i.jsxDEV("ul",{children:[i.jsxDEV("li",{children:"Create a new project"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:250,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Assign a task to an agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:251,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Check project status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:252,columnNumber:17},globalThis),i.jsxDEV("li",{children:"Configure a team"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:253,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:249,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:245,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:244,columnNumber:11},globalThis):i.jsxDEV(i.Fragment,{children:d.map(S=>i.jsxDEV(Qfe,{message:S},S.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:260,columnNumber:15},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:258,columnNumber:11},globalThis),o&&i.jsxDEV(tpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:265,columnNumber:22},globalThis),i.jsxDEV("div",{ref:v,className:"messages-end"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:267,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:230,columnNumber:7},globalThis),N&&i.jsxDEV("button",{className:"scroll-to-bottom-btn",onClick:b,"aria-label":"Scroll to bottom","data-testid":"scroll-to-bottom",children:"↓"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:271,columnNumber:9},globalThis),i.jsxDEV(epe,{disabled:D,disabledPlaceholder:"Orchestrator is offline. Start it from the Dashboard to chat.",placeholder:"Reply in thread..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:281,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:195,columnNumber:5},globalThis):i.jsxDEV("div",{className:"thread-detail-panel empty","data-testid":"thread-detail-empty",children:i.jsxDEV("div",{className:"thread-detail-empty-state",children:[i.jsxDEV("h3",{children:"Select a thread"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:157,columnNumber:11},globalThis),i.jsxDEV("p",{children:"Choose a conversation from the list to view messages."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:158,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:156,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ThreadDetailPanel.tsx",lineNumber:155,columnNumber:7},globalThis)};const upe=()=>{const{conversations:s,currentConversation:e,selectConversation:t,channelFilter:r,setChannelFilter:n}=_F(),[o,a]=V.useState("list"),c=V.useCallback(async d=>{await t(d),a("detail")},[t]),u=V.useCallback(()=>{a("list")},[]);return i.jsxDEV("div",{className:"chat-page thread-layout",children:[i.jsxDEV("header",{className:"chat-page-header",children:[i.jsxDEV("h1",{children:"Chat with Orchestrator"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:56,columnNumber:9},globalThis),i.jsxDEV("p",{children:"Communicate with the Crewly orchestrator to manage projects and teams"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:57,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:55,columnNumber:7},globalThis),i.jsxDEV("div",{className:"chat-page-content",children:[i.jsxDEV("aside",{className:`chat-page-sidebar ${o==="list"?"mobile-visible":"mobile-hidden"}`,children:i.jsxDEV(qfe,{conversations:s,selectedConversationId:(e==null?void 0:e.id)??null,onSelectThread:c,channelFilter:r,onChannelFilterChange:n},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:64,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:61,columnNumber:9},globalThis),i.jsxDEV("main",{className:`chat-page-main ${o==="detail"?"mobile-visible":"mobile-hidden"}`,children:i.jsxDEV(cpe,{conversation:e,onBack:u},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:76,columnNumber:11},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:73,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:60,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Chat.tsx",lineNumber:54,columnNumber:5},globalThis)},ev="/api/marketplace";async function dpe(s){const e=new URLSearchParams;s!=null&&s.type&&e.set("type",s.type),s!=null&&s.search&&e.set("search",s.search),s!=null&&s.sort&&e.set("sort",s.sort);const t=e.toString(),r=`${ev}${t?`?${t}`:""}`;return(await ar.get(r)).data.data}async function mpe(s){return(await ar.post(`${ev}/${s}/install`)).data}async function hpe(s){return(await ar.post(`${ev}/${s}/uninstall`)).data}async function fpe(s){return(await ar.post(`${ev}/${s}/update`)).data}async function vB(){await ar.post(`${ev}/refresh`)}async function ppe(s){const e=s?`?status=${s}`:"";return(await ar.get(`${ev}/submissions${e}`)).data.data}async function ype(s,e,t){return(await ar.post(`${ev}/submissions/${s}/review`,{action:e,notes:t})).data}const gpe=4e3;function bpe(){const[s,e]=V.useState([]),t=V.useRef(0),r=V.useCallback((o,a="info")=>{const c=`toast-${++t.current}`,u={id:c,message:o,type:a};e(d=>[...d,u]),setTimeout(()=>{e(d=>d.filter(h=>h.id!==c))},gpe)},[]),n=V.useCallback(o=>{e(a=>a.filter(c=>c.id!==o))},[]);return{toasts:s,addToast:r,dismissToast:n}}const vpe={success:"border-green-500 bg-green-500/10 text-green-300",error:"border-red-500 bg-red-500/10 text-red-300",info:"border-blue-500 bg-blue-500/10 text-blue-300"};function wpe({toasts:s,onDismiss:e}){return s.length===0?null:i.jsxDEV("div",{className:"fixed bottom-4 right-4 z-50 flex flex-col gap-2 max-w-sm",role:"log","aria-live":"polite",children:s.map(t=>i.jsxDEV("div",{"data-testid":`toast-${t.type}`,className:`flex items-center gap-3 px-4 py-3 rounded-lg border text-sm shadow-lg backdrop-blur-sm ${vpe[t.type]}`,children:[i.jsxDEV("span",{className:"flex-1",children:t.message},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:50,columnNumber:11},this),i.jsxDEV("button",{onClick:()=>e(t.id),className:"text-gray-400 hover:text-white transition-colors shrink-0","aria-label":"Dismiss notification",children:i.jsxDEV(jn,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:56,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:51,columnNumber:11},this)]},t.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:45,columnNumber:9},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Toast.tsx",lineNumber:43,columnNumber:5},this)}const xpe=[{label:"All",value:"all"},{label:"Skills",value:"skill"},{label:"3D Models",value:"model"},{label:"Roles",value:"role"},{label:"MCP Tools",value:"mcp_tool"}],Npe=[{label:"Popular",value:"popular"},{label:"Highest Rated",value:"rating"},{label:"Newest",value:"newest"}];function Dpe(s){return s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}const Tpe={skill:"bg-blue-500/20 text-blue-400",model:"bg-purple-500/20 text-purple-400",role:"bg-emerald-500/20 text-emerald-400",mcp_tool:"bg-orange-500/20 text-orange-400"};function jpe(){const[s,e]=V.useState("browse"),[t,r]=V.useState([]),[n,o]=V.useState([]),[a,c]=V.useState(!0),[u,d]=V.useState("all"),[h,f]=V.useState(""),[y,v]=V.useState("popular"),[N,j]=V.useState(null),[b,x]=V.useState(null),{toasts:D,addToast:T,dismissToast:S}=bpe(),k=V.useCallback(async()=>{try{c(!0),x(null);const O=await dpe({type:u==="all"?void 0:u,search:h||void 0,sort:y});r(O)}catch{x("Failed to load marketplace items")}finally{c(!1)}},[u,h,y]);V.useEffect(()=>{k()},[k]);const U=async O=>{j(O);try{const H=await mpe(O);T(H.message||`Installed ${O}`,H.success?"success":"error"),await k()}catch(H){const Y=H instanceof Error?H.message:"Install failed";T(Y,"error")}j(null)},F=async O=>{j(O);try{const H=await hpe(O);T(H.message||`Uninstalled ${O}`,H.success?"success":"error"),await k()}catch(H){const Y=H instanceof Error?H.message:"Uninstall failed";T(Y,"error")}j(null)},M=async O=>{j(O);try{const H=await fpe(O);T(H.message||`Updated ${O}`,H.success?"success":"error"),await k()}catch(H){const Y=H instanceof Error?H.message:"Update failed";T(Y,"error")}j(null)},R=async()=>{try{await vB(),T("Registry refreshed","success"),await k()}catch{T("Failed to refresh registry","error")}},L=V.useCallback(async()=>{try{c(!0),x(null);const O=await ppe();o(O)}catch{x("Failed to load submissions")}finally{c(!1)}},[]);V.useEffect(()=>{s==="submissions"&&L()},[s,L]);const B=async(O,H)=>{j(O);try{const Y=await ype(O,H);T(Y.message||`${H==="approve"?"Approved":"Rejected"}`,Y.success?"success":"error"),await L(),H==="approve"&&await vB()}catch(Y){const le=Y instanceof Error?Y.message:"Review failed";T(le,"error")}j(null)};return i.jsxDEV("div",{className:"p-6 max-w-7xl mx-auto",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-6",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(n9,{className:"w-6 h-6 text-indigo-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:225,columnNumber:11},this),i.jsxDEV("h1",{className:"text-2xl font-bold text-white",children:"Marketplace"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:226,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:224,columnNumber:9},this),i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("div",{className:"flex gap-1 bg-gray-900 rounded-lg p-1",role:"tablist","aria-label":"View mode",children:[i.jsxDEV("button",{onClick:()=>e("browse"),role:"tab","aria-selected":s==="browse",className:`flex items-center gap-1 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="browse"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(IL,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:238,columnNumber:15},this),"Browse"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:230,columnNumber:13},this),i.jsxDEV("button",{onClick:()=>e("submissions"),role:"tab","aria-selected":s==="submissions",className:`flex items-center gap-1 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="submissions"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(LX,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:249,columnNumber:15},this),"Submissions"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:241,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:229,columnNumber:11},this),i.jsxDEV("button",{onClick:R,className:"flex items-center gap-2 px-3 py-1.5 text-sm bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg transition-colors","aria-label":"Refresh marketplace",children:[i.jsxDEV(il,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:258,columnNumber:13},this),"Refresh"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:253,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:228,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:223,columnNumber:7},this),s==="browse"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4 mb-6",children:[i.jsxDEV("div",{className:"flex gap-1 bg-gray-900 rounded-lg p-1",role:"tablist","aria-label":"Filter by type",children:xpe.map(O=>i.jsxDEV("button",{onClick:()=>d(O.value),role:"tab","aria-selected":u===O.value,className:`px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${u===O.value?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:O.label},O.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:270,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:268,columnNumber:13},this),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"relative",children:[i.jsxDEV(XV,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:286,columnNumber:17},this),i.jsxDEV("input",{type:"text",placeholder:"Search...",value:h,onChange:O=>f(O.target.value),"aria-label":"Search marketplace",className:"bg-gray-900 border border-gray-700 rounded-lg pl-9 pr-3 py-1.5 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500 w-48"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:287,columnNumber:17},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:285,columnNumber:15},this),i.jsxDEV("select",{value:y,onChange:O=>v(O.target.value),"aria-label":"Sort by",className:"bg-gray-900 border border-gray-700 rounded-lg px-3 py-1.5 text-sm text-gray-200 focus:outline-none focus:border-indigo-500",children:Npe.map(O=>i.jsxDEV("option",{value:O.value,children:O.label},O.value,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:303,columnNumber:19},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:296,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:284,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:267,columnNumber:11},this),a?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",role:"status",children:"Loading marketplace..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:311,columnNumber:13},this):b?i.jsxDEV("div",{className:"text-center py-16 text-red-400",role:"alert",children:b},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:313,columnNumber:13},this):t.length===0?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",children:"No items found."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:315,columnNumber:13},this):i.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:t.map(O=>i.jsxDEV("div",{className:"bg-gray-900 border border-gray-800 rounded-xl p-5 hover:border-gray-700 transition-colors","data-testid":`marketplace-item-${O.id}`,children:[i.jsxDEV("div",{className:"flex items-start justify-between mb-3",children:[i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${Tpe[O.type]}`,children:O.type},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:327,columnNumber:23},this),i.jsxDEV("span",{className:"text-xs text-gray-500",children:["v",O.version]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:330,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:326,columnNumber:21},this),O.installStatus==="installed"&&i.jsxDEV(Mi,{className:"w-4 h-4 text-green-400","aria-label":"Installed"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:333,columnNumber:23},this),O.installStatus==="update_available"&&i.jsxDEV(ML,{className:"w-4 h-4 text-yellow-400","aria-label":"Update available"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:336,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:325,columnNumber:19},this),i.jsxDEV("h3",{className:"text-base font-semibold text-white mb-1",children:O.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:341,columnNumber:19},this),i.jsxDEV("p",{className:"text-sm text-gray-400 mb-3 line-clamp-2",children:O.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:342,columnNumber:19},this),i.jsxDEV("div",{className:"flex items-center justify-between text-xs text-gray-500 mb-4",children:[i.jsxDEV("span",{children:["by ",O.author]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:346,columnNumber:21},this),i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(RX,{className:"w-3 h-3 text-yellow-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:349,columnNumber:25},this),O.rating.toFixed(1)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:348,columnNumber:23},this),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(GV,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:353,columnNumber:25},this),Dpe(O.downloads)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:352,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:347,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:345,columnNumber:19},this),i.jsxDEV("div",{className:"flex gap-2",children:[O.installStatus==="not_installed"&&i.jsxDEV("button",{onClick:()=>U(O.id),disabled:N===O.id,className:"flex-1 flex items-center justify-center gap-1 px-3 py-1.5 text-sm bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(IL,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:367,columnNumber:25},this),N===O.id?"Installing...":"Install"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:362,columnNumber:23},this),O.installStatus==="installed"&&i.jsxDEV("button",{onClick:()=>F(O.id),disabled:N===O.id,className:"flex-1 px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg disabled:opacity-50 transition-colors",children:N===O.id?"Removing...":"Uninstall"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:372,columnNumber:23},this),O.installStatus==="update_available"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("button",{onClick:()=>M(O.id),disabled:N===O.id,className:"flex-1 flex items-center justify-center gap-1 px-3 py-1.5 text-sm bg-yellow-600 hover:bg-yellow-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(ML,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:387,columnNumber:27},this),N===O.id?"Updating...":"Update"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:382,columnNumber:25},this),i.jsxDEV("button",{onClick:()=>F(O.id),disabled:N===O.id,className:"px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg disabled:opacity-50 transition-colors",children:"Remove"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:390,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:381,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:360,columnNumber:19},this)]},O.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:319,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:317,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:265,columnNumber:9},this),s==="submissions"&&i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"mb-6",children:i.jsxDEV("p",{className:"text-sm text-gray-400",children:["Submit skills via CLI: ",i.jsxDEV("code",{className:"bg-gray-800 px-2 py-0.5 rounded text-xs text-gray-300",children:"crewly publish path/to/skill --submit"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:412,columnNumber:38},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:411,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:410,columnNumber:11},this),a?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",role:"status",children:"Loading submissions..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:418,columnNumber:13},this):b?i.jsxDEV("div",{className:"text-center py-16 text-red-400",role:"alert",children:b},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:420,columnNumber:13},this):n.length===0?i.jsxDEV("div",{className:"text-center py-16 text-gray-400",children:"No submissions yet."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:422,columnNumber:13},this):i.jsxDEV("div",{className:"space-y-3",children:n.map(O=>i.jsxDEV("div",{className:"bg-gray-900 border border-gray-800 rounded-xl p-5 hover:border-gray-700 transition-colors","data-testid":`submission-${O.id}`,children:i.jsxDEV("div",{className:"flex items-start justify-between",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[i.jsxDEV("h3",{className:"text-base font-semibold text-white",children:O.name},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:434,columnNumber:25},this),i.jsxDEV("span",{className:"text-xs text-gray-500",children:["v",O.version]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:435,columnNumber:25},this),i.jsxDEV("span",{className:`flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium ${O.status==="pending"?"bg-yellow-500/20 text-yellow-400":O.status==="approved"?"bg-green-500/20 text-green-400":"bg-red-500/20 text-red-400"}`,children:[O.status==="pending"&&i.jsxDEV(eu,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:441,columnNumber:56},this),O.status==="approved"&&i.jsxDEV(Vl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:442,columnNumber:57},this),O.status==="rejected"&&i.jsxDEV(Zk,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:443,columnNumber:57},this),O.status]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:436,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:433,columnNumber:23},this),i.jsxDEV("p",{className:"text-sm text-gray-400 mb-2",children:O.description},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:447,columnNumber:23},this),i.jsxDEV("div",{className:"flex items-center gap-4 text-xs text-gray-500",children:[i.jsxDEV("span",{children:["by ",O.author]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:449,columnNumber:25},this),i.jsxDEV("span",{children:O.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:450,columnNumber:25},this),i.jsxDEV("span",{children:new Date(O.submittedAt).toLocaleDateString()},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:451,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:448,columnNumber:23},this),O.reviewNotes&&i.jsxDEV("p",{className:"mt-2 text-xs text-gray-400 italic",children:["Review: ",O.reviewNotes]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:454,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:432,columnNumber:21},this),O.status==="pending"&&i.jsxDEV("div",{className:"flex gap-2 ml-4",children:[i.jsxDEV("button",{onClick:()=>B(O.id,"approve"),disabled:N===O.id,className:"flex items-center gap-1 px-3 py-1.5 text-sm bg-green-600 hover:bg-green-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(Vl,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:464,columnNumber:27},this),N===O.id?"...":"Approve"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:459,columnNumber:25},this),i.jsxDEV("button",{onClick:()=>B(O.id,"reject"),disabled:N===O.id,className:"px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg disabled:opacity-50 transition-colors",children:"Reject"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:467,columnNumber:25},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:458,columnNumber:23},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:431,columnNumber:19},this)},O.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:426,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:424,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:408,columnNumber:9},this),i.jsxDEV(wpe,{toasts:D,onDismiss:S},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:484,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Marketplace.tsx",lineNumber:221,columnNumber:5},this)}function Spe({scope:s,onScopeChange:e,projects:t,selectedProjectPath:r,onProjectChange:n}){return i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV("div",{className:"flex gap-1 bg-gray-900 rounded-lg p-1",role:"tablist","aria-label":"Document scope",children:[i.jsxDEV("button",{role:"tab","aria-selected":s==="global",onClick:()=>e("global"),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="global"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(ZB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:50,columnNumber:11},this),"Global"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:42,columnNumber:9},this),i.jsxDEV("button",{role:"tab","aria-selected":s==="project",onClick:()=>e("project"),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${s==="project"?"bg-gray-800 text-white":"text-gray-400 hover:text-white"}`,children:[i.jsxDEV(ol,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:61,columnNumber:11},this),"Project"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:53,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:41,columnNumber:7},this),s==="project"&&i.jsxDEV("select",{value:r||"",onChange:o=>n(o.target.value),"aria-label":"Select project",className:"bg-gray-900 border border-gray-700 rounded-lg px-3 py-1.5 text-sm text-gray-200 focus:outline-none focus:border-indigo-500",children:[i.jsxDEV("option",{value:"",disabled:!0,children:"Select a project..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:73,columnNumber:11},this),t.map(o=>i.jsxDEV("option",{value:o.path,children:o.name},o.id,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:75,columnNumber:13},this))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeScopeToggle.tsx",lineNumber:40,columnNumber:5},this)}function Epe({categories:s,selectedCategory:e,onCategoryChange:t}){return i.jsxDEV("div",{className:"space-y-1",role:"listbox","aria-label":"Filter by category",children:[i.jsxDEV("button",{role:"option","aria-selected":e==="",onClick:()=>t(""),className:`w-full text-left px-3 py-2 rounded-lg text-sm transition-colors ${e===""?"bg-indigo-600/20 text-indigo-400 font-medium":"text-gray-400 hover:bg-gray-800 hover:text-gray-200"}`,children:"All"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeCategoryFilter.tsx",lineNumber:32,columnNumber:7},this),s.map(r=>i.jsxDEV("button",{role:"option","aria-selected":e===r,onClick:()=>t(r),className:`w-full text-left px-3 py-2 rounded-lg text-sm transition-colors ${e===r?"bg-indigo-600/20 text-indigo-400 font-medium":"text-gray-400 hover:bg-gray-800 hover:text-gray-200"}`,children:r},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeCategoryFilter.tsx",lineNumber:45,columnNumber:9},this))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeCategoryFilter.tsx",lineNumber:31,columnNumber:5},this)}function _pe(s){try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch{return s}}function kpe({documents:s,loading:e,searchQuery:t,onSearchChange:r,selectedDocId:n,onSelectDocument:o}){return i.jsxDEV("div",{className:"flex flex-col h-full",children:[i.jsxDEV("div",{className:"relative mb-4",children:[i.jsxDEV(XV,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:64,columnNumber:9},this),i.jsxDEV("input",{type:"text",placeholder:"Search documents...",value:t,onChange:a=>r(a.target.value),"aria-label":"Search documents",className:"w-full bg-gray-900 border border-gray-700 rounded-lg pl-9 pr-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:65,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:63,columnNumber:7},this),e?i.jsxDEV("div",{className:"text-center py-8 text-gray-400",role:"status",children:"Loading documents..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:77,columnNumber:9},this):s.length===0?i.jsxDEV("div",{className:"text-center py-8 text-gray-500",children:[i.jsxDEV(X0,{className:"w-8 h-8 mx-auto mb-2 opacity-50"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:80,columnNumber:11},this),i.jsxDEV("p",{children:"No documents found"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:81,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:79,columnNumber:9},this):i.jsxDEV("div",{className:"space-y-1 overflow-y-auto flex-1",children:s.map(a=>i.jsxDEV("button",{onClick:()=>o(a.id),className:`w-full text-left px-3 py-3 rounded-lg transition-colors ${n===a.id?"bg-indigo-600/20 border border-indigo-500/30":"hover:bg-gray-800 border border-transparent"}`,children:[i.jsxDEV("div",{className:"flex items-start justify-between gap-2",children:[i.jsxDEV("div",{className:"min-w-0 flex-1",children:[i.jsxDEV("h4",{className:"text-sm font-medium text-gray-200 truncate",children:a.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:97,columnNumber:19},this),i.jsxDEV("p",{className:"text-xs text-gray-500 mt-0.5 line-clamp-1",children:a.preview},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:98,columnNumber:19},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:96,columnNumber:17},this),i.jsxDEV("div",{className:"flex flex-col items-end flex-shrink-0",children:[i.jsxDEV("span",{className:"text-xs px-1.5 py-0.5 rounded bg-gray-800 text-gray-400",children:a.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:101,columnNumber:19},this),i.jsxDEV("span",{className:"text-xs text-gray-600 mt-1",children:_pe(a.updatedAt)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:104,columnNumber:19},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:100,columnNumber:17},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:95,columnNumber:15},this),a.tags.length>0&&i.jsxDEV("div",{className:"flex gap-1 mt-1.5 flex-wrap",children:[a.tags.slice(0,3).map(c=>i.jsxDEV("span",{className:"text-xs px-1.5 py-0.5 rounded bg-gray-900 text-gray-500",children:c},c,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:110,columnNumber:21},this)),a.tags.length>3&&i.jsxDEV("span",{className:"text-xs text-gray-600",children:["+",a.tags.length-3]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:115,columnNumber:21},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:108,columnNumber:17},this)]},a.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:86,columnNumber:13},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:84,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentList.tsx",lineNumber:61,columnNumber:5},this)}function Cpe(s){try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}function Ape({document:s,onEdit:e,onDelete:t}){return i.jsxDEV("div",{className:"h-full overflow-y-auto",children:[i.jsxDEV("div",{className:"flex items-start justify-between mb-4",children:[i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("h2",{className:"text-xl font-bold text-white mb-2",children:s.title},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:58,columnNumber:11},this),i.jsxDEV("div",{className:"flex items-center gap-4 text-xs text-gray-500",children:[i.jsxDEV("span",{className:"px-2 py-0.5 rounded bg-gray-800 text-gray-300",children:s.category},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:60,columnNumber:13},this),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(Nx,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:62,columnNumber:15},this),s.createdBy]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:61,columnNumber:13},this),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(eu,{className:"w-3 h-3"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:66,columnNumber:15},this),Cpe(s.updatedAt)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:65,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:59,columnNumber:11},this),s.tags.length>0&&i.jsxDEV("div",{className:"flex gap-1.5 mt-2 flex-wrap",children:s.tags.map(r=>i.jsxDEV("span",{className:"text-xs px-2 py-0.5 rounded-full bg-indigo-500/10 text-indigo-400",children:r},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:73,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:71,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:57,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-2 ml-4",children:[i.jsxDEV("button",{onClick:e,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg transition-colors","aria-label":"Edit document",children:[i.jsxDEV(QB,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:86,columnNumber:13},this),"Edit"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:81,columnNumber:11},this),i.jsxDEV("button",{onClick:t,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-800 hover:bg-red-900/50 text-gray-300 hover:text-red-300 rounded-lg transition-colors","aria-label":"Delete document",children:[i.jsxDEV(aj,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:94,columnNumber:13},this),"Delete"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:89,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:80,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:56,columnNumber:7},this),i.jsxDEV("div",{className:"border-t border-gray-800 pt-4",children:i.jsxDEV("div",{className:"prose prose-invert prose-sm max-w-none whitespace-pre-wrap text-gray-300 leading-relaxed",children:s.content},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:102,columnNumber:9},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:101,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentViewer.tsx",lineNumber:54,columnNumber:5},this)}const Mpe=["SOPs","Team Norms","Architecture","Onboarding","Runbooks","General"];function wB({document:s,categories:e,saving:t,onSave:r,onCancel:n}){const[o,a]=V.useState((s==null?void 0:s.title)||""),[c,u]=V.useState((s==null?void 0:s.content)||""),[d,h]=V.useState((s==null?void 0:s.category)||"General"),[f,y]=V.useState((s==null?void 0:s.tags.join(", "))||""),v=[...new Set([...Mpe,...e])].sort(),N=b=>{b.preventDefault();const x=f.split(",").map(D=>D.trim()).filter(Boolean);r({title:o,content:c,category:d,tags:x})},j=o.trim().length>0&&c.trim().length>0;return i.jsxDEV("form",{onSubmit:N,className:"h-full flex flex-col",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[i.jsxDEV("h2",{className:"text-lg font-bold text-white",children:s?"Edit Document":"New Document"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:64,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-2",children:[i.jsxDEV("button",{type:"button",onClick:n,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg transition-colors",children:[i.jsxDEV(jn,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:73,columnNumber:13},this),"Cancel"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:68,columnNumber:11},this),i.jsxDEV("button",{type:"submit",disabled:!j||t,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg disabled:opacity-50 transition-colors",children:[i.jsxDEV(ij,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:81,columnNumber:13},this),t?"Saving...":"Save"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:76,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:63,columnNumber:7},this),i.jsxDEV("div",{className:"space-y-4 flex-1 flex flex-col",children:[i.jsxDEV("div",{children:[i.jsxDEV("label",{htmlFor:"doc-title",className:"block text-sm font-medium text-gray-300 mb-1",children:"Title"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:90,columnNumber:11},this),i.jsxDEV("input",{id:"doc-title",type:"text",value:o,onChange:b=>a(b.target.value),placeholder:"Document title",className:"w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500",maxLength:200},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:91,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:89,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-4",children:[i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"doc-category",className:"block text-sm font-medium text-gray-300 mb-1",children:"Category"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:105,columnNumber:13},this),i.jsxDEV("select",{id:"doc-category",value:d,onChange:b=>h(b.target.value),className:"w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 focus:outline-none focus:border-indigo-500",children:v.map(b=>i.jsxDEV("option",{value:b,children:b},b,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:113,columnNumber:17},this))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:106,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:104,columnNumber:11},this),i.jsxDEV("div",{className:"flex-1",children:[i.jsxDEV("label",{htmlFor:"doc-tags",className:"block text-sm font-medium text-gray-300 mb-1",children:"Tags (comma-separated)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:118,columnNumber:13},this),i.jsxDEV("input",{id:"doc-tags",type:"text",value:f,onChange:b=>y(b.target.value),placeholder:"api, backend, auth",className:"w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:119,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:117,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:103,columnNumber:9},this),i.jsxDEV("div",{className:"flex-1 flex flex-col",children:[i.jsxDEV("label",{htmlFor:"doc-content",className:"block text-sm font-medium text-gray-300 mb-1",children:"Content (Markdown)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:132,columnNumber:11},this),i.jsxDEV("textarea",{id:"doc-content",value:c,onChange:b=>u(b.target.value),placeholder:"Write your document content in Markdown...",className:"flex-1 min-h-[200px] w-full bg-gray-900 border border-gray-700 rounded-lg px-3 py-2 text-sm text-gray-200 placeholder:text-gray-600 focus:outline-none focus:border-indigo-500 font-mono resize-none"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:133,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:131,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:87,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Knowledge/KnowledgeDocumentEditor.tsx",lineNumber:62,columnNumber:5},this)}function Upe(){const[s,e]=eA(),[t,r]=V.useState(s.get("project")?"project":"global"),[n,o]=V.useState([]),[a,c]=V.useState(""),[u,d]=V.useState([]),[h,f]=V.useState([]),[y,v]=V.useState(""),[N,j]=V.useState(""),[b,x]=V.useState(!0),[D,T]=V.useState("list"),[S,k]=V.useState(),[U,F]=V.useState(null),[M,R]=V.useState(!1),[L,B]=V.useState(null);V.useEffect(()=>{ss.getProjects().then(o).catch(()=>{})},[]),V.useEffect(()=>{const Z=s.get("project");if(Z&&n.length>0){const X=n.find(z=>z.id===Z);X&&(r("project"),c(X.path))}},[s,n]);const O=V.useCallback(async()=>{try{if(x(!0),B(null),t==="project"&&!a){d([]),f([]),x(!1);return}const[Z,X]=await Promise.all([ss.getKnowledgeDocuments(t,a||void 0,y||void 0,N||void 0),ss.getKnowledgeCategories(t,a||void 0)]);d(Z),f(X)}catch{B("Failed to load documents")}finally{x(!1)}},[t,a,y,N]);V.useEffect(()=>{O()},[O]);const H=Z=>{r(Z),k(void 0),F(null),T("list"),Z==="global"&&(c(""),e({}))},Y=Z=>{c(Z),k(void 0),F(null),T("list");const X=n.find(z=>z.path===Z);X&&e({project:X.id})},le=async Z=>{k(Z);try{const X=await ss.getKnowledgeDocument(Z,t,a||void 0);F(X),T("view")}catch{B("Failed to load document")}},te=()=>{k(void 0),F(null),T("create")},ne=async Z=>{R(!0);try{if(D==="create"){const X=await ss.createKnowledgeDocument({...Z,scope:t,projectPath:a||void 0});await O(),await le(X)}else U&&(await ss.updateKnowledgeDocument(U.id,{...Z,scope:t,projectPath:a||void 0}),await O(),await le(U.id))}catch{B("Failed to save document")}finally{R(!1)}},q=async()=>{if(U)try{await ss.deleteKnowledgeDocument(U.id,t,a||void 0),F(null),k(void 0),T("list"),await O()}catch{B("Failed to delete document")}};return i.jsxDEV("div",{className:"p-6 max-w-7xl mx-auto h-full flex flex-col",children:[i.jsxDEV("div",{className:"flex items-center justify-between mb-6",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(UL,{className:"w-6 h-6 text-indigo-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:207,columnNumber:11},this),i.jsxDEV("h1",{className:"text-2xl font-bold text-white",children:"Knowledge"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:208,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:206,columnNumber:9},this),i.jsxDEV(Spe,{scope:t,onScopeChange:H,projects:n,selectedProjectPath:a,onProjectChange:Y},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:210,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:205,columnNumber:7},this),L&&i.jsxDEV("div",{className:"mb-4 px-4 py-2 bg-red-900/20 border border-red-500/30 rounded-lg text-sm text-red-400",role:"alert",children:[L,i.jsxDEV("button",{onClick:()=>B(null),className:"ml-2 underline",children:"dismiss"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:222,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:220,columnNumber:9},this),i.jsxDEV("div",{className:"flex gap-6 flex-1 min-h-0",children:[i.jsxDEV("div",{className:"w-44 flex-shrink-0",children:[i.jsxDEV("div",{className:"mb-4",children:i.jsxDEV("button",{onClick:te,className:"w-full flex items-center justify-center gap-1.5 px-3 py-2 text-sm bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg transition-colors",children:[i.jsxDEV(tl,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:235,columnNumber:15},this),"New Document"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:231,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:230,columnNumber:11},this),i.jsxDEV(Epe,{categories:h,selectedCategory:y,onCategoryChange:v},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:239,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:229,columnNumber:9},this),i.jsxDEV("div",{className:"flex-1 min-w-0 flex gap-6",children:[i.jsxDEV("div",{className:`w-80 flex-shrink-0 ${D==="create"||D==="edit"?"hidden lg:block":""}`,children:i.jsxDEV(kpe,{documents:u,loading:b,searchQuery:N,onSearchChange:j,selectedDocId:S,onSelectDocument:le},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:250,columnNumber:13},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:249,columnNumber:11},this),i.jsxDEV("div",{className:"flex-1 min-w-0",children:[D==="view"&&U&&i.jsxDEV(Ape,{document:U,onEdit:()=>T("edit"),onDelete:q},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:263,columnNumber:15},this),D==="edit"&&U&&i.jsxDEV(wB,{document:U,categories:h,saving:M,onSave:ne,onCancel:()=>T("view")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:270,columnNumber:15},this),D==="create"&&i.jsxDEV(wB,{document:null,categories:h,saving:M,onSave:ne,onCancel:()=>T("list")},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:279,columnNumber:15},this),D==="list"&&!b&&i.jsxDEV("div",{className:"flex items-center justify-center h-full text-gray-500",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV(UL,{className:"w-12 h-12 mx-auto mb-3 opacity-30"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:290,columnNumber:19},this),i.jsxDEV("p",{children:"Select a document to view"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:291,columnNumber:19},this),i.jsxDEV("p",{className:"text-sm mt-1",children:"or create a new one"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:292,columnNumber:19},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:289,columnNumber:17},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:288,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:261,columnNumber:11},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:247,columnNumber:9},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:227,columnNumber:7},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/Knowledge.tsx",lineNumber:203,columnNumber:5},this)}const Rpe="/api",Vpe=5e3;function Fpe(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useRef(!0),c=V.useCallback(async()=>{try{const h=await ar.get(`${Rpe}/monitoring/pty-status`);if(!a.current)return;if(h.data.success&&Array.isArray(h.data.data)){const f=h.data.data.map(y=>({sessionName:y.sessionName||y.id||"unknown",agentName:y.agentName||y.name||y.sessionName||"Unknown Agent",role:y.role||"agent",agentStatus:y.agentStatus||y.status||"inactive",workingStatus:y.workingStatus||"idle",ptyPid:y.ptyPid??y.pid??null,memoryUsage:y.memoryUsage??null,uptimeSeconds:y.uptimeSeconds??null,fsScope:y.fsScope||"sandboxed",netScope:y.netScope||"localhost"}));e(f),o(null)}else e([])}catch{a.current&&(o("Failed to fetch PTY sessions"),e([]))}},[]);V.useEffect(()=>{a.current=!0,(async()=>{await c(),a.current&&r(!1)})();const f=setInterval(c,Vpe);return()=>{a.current=!1,clearInterval(f)}},[c]);const u={totalAgents:s.length,isolatedCount:s.length,sharedCount:0,status:(s.length>0,"healthy")},d=V.useCallback(async()=>{await c()},[c]);return{sessions:s,summary:u,loading:t,error:n,refresh:d}}const Ipe="/api",xB=[{id:"mock-1",timestamp:new Date(Date.now()-1e3*60*5).toISOString(),sessionName:"agent-sam",agentName:"Sam",toolName:"git push origin feat/auth",outcome:"approved",riskLevel:"medium"},{id:"mock-2",timestamp:new Date(Date.now()-1e3*60*10).toISOString(),sessionName:"agent-sam",agentName:"Sam",toolName:"npm install jsonwebtoken",outcome:"auto",riskLevel:"low"},{id:"mock-3",timestamp:new Date(Date.now()-1e3*60*15).toISOString(),sessionName:"agent-leo",agentName:"Leo",toolName:"rm -rf dist/",outcome:"denied",riskLevel:"high",reason:"Destructive operation on build directory"},{id:"mock-4",timestamp:new Date(Date.now()-1e3*60*20).toISOString(),sessionName:"agent-sam",agentName:"Sam",toolName:"git push --force main",outcome:"denied",riskLevel:"high",reason:"Force push to protected branch"},{id:"mock-5",timestamp:new Date(Date.now()-1e3*60*25).toISOString(),sessionName:"agent-ava",agentName:"Ava",toolName:"npx tailwindcss build",outcome:"auto",riskLevel:"low"},{id:"mock-6",timestamp:new Date(Date.now()-1e3*60*30).toISOString(),sessionName:"agent-leo",agentName:"Leo",toolName:'git commit -m "feat: ..."',outcome:"sop_block",riskLevel:"medium",reason:"Commit does not follow project SOP"}];function Lpe(s){switch(s){case"approved":return"approved";case"rejected":return"denied";case"denied":return"denied";case"auto":return"auto";case"sop_block":return"sop_block";default:return"auto"}}function Ppe(){const[s,e]=V.useState([]),[t,r]=V.useState({}),[n,o]=V.useState(!0),[a,c]=V.useState(null),u=V.useCallback(async y=>{try{const v=await ar.get(`${Ipe}/approvals/audit`,{signal:y});if(v.data.success&&Array.isArray(v.data.data)){const N=v.data.data.map(j=>({id:j.approvalId||j.id||`audit-${Date.now()}-${Math.random()}`,timestamp:j.timestamp,sessionName:j.sessionName||"",agentName:j.resolvedBy||j.agentName||j.sessionName||"Unknown",toolName:j.toolName||"",outcome:Lpe(j.action||j.outcome),riskLevel:j.riskLevel||"medium",reason:j.reason}));e(N),c(null)}else e(xB)}catch(v){if(ar.isCancel(v))return;e(xB),c(null)}finally{o(!1)}},[]);V.useEffect(()=>{const y=new AbortController;return u(y.signal),()=>y.abort()},[u]);const d=V.useMemo(()=>s.filter(y=>!(t.agent&&y.agentName.toLowerCase()!==t.agent.toLowerCase()||t.outcome&&y.outcome!==t.outcome)),[s,t]),h=V.useMemo(()=>{const y=new Date().toDateString(),v=s.filter(N=>new Date(N.timestamp).toDateString()===y);return{totalToday:v.length,deniedToday:v.filter(N=>N.outcome==="denied").length,bypassedToday:0,status:"enforced"}},[s]),f=V.useCallback(async()=>{o(!0),await u()},[u]);return{events:s,filteredEvents:d,summary:h,filter:t,setFilter:r,loading:n,error:a,refresh:f}}const Ope="/api",NB=[{path:"~/.crewly/memory/",type:"Agent Memory",sizeBytes:12.4*1024*1024,isExternal:!1},{path:"~/.crewly/knowledge/",type:"Vector Store",sizeBytes:28.1*1024*1024,isExternal:!1},{path:"~/.crewly/sessions/",type:"PTY Logs",sizeBytes:7.7*1024*1024,isExternal:!1},{path:"~/.crewly/teams/",type:"Config",sizeBytes:.3*1024*1024,isExternal:!1},{path:"~/.crewly/projects/",type:"Metadata",sizeBytes:.1*1024*1024,isExternal:!1}];function IV(s){if(s===0)return"0 B";const e=["B","KB","MB","GB"],t=Math.floor(Math.log(s)/Math.log(1024));return`${(s/Math.pow(1024,t)).toFixed(1)} ${e[t]}`}function Bpe(){const[s,e]=V.useState([]),[t,r]=V.useState(!0),[n,o]=V.useState(null),a=V.useCallback(async d=>{try{const h=await ar.get(`${Ope}/system/storage`,{signal:d});h.data.success&&Array.isArray(h.data.data)?(e(h.data.data),o(null)):e(NB)}catch(h){if(ar.isCancel(h))return;e(NB),o(null)}finally{r(!1)}},[]);V.useEffect(()=>{const d=new AbortController;return a(d.signal),()=>d.abort()},[a]);const c=V.useMemo(()=>({totalLocalBytes:s.filter(h=>!h.isExternal).reduce((h,f)=>h+f.sizeBytes,0),externalConnections:s.filter(h=>h.isExternal).length,cloudSync:"disabled",status:"secure",lastScan:new Date().toISOString()}),[s]),u=V.useCallback(async()=>{r(!0),await a()},[a]);return{entries:s,summary:c,loading:t,error:n,refresh:u}}const DB=["border-blue-500","border-purple-500","border-pink-500","border-cyan-500","border-amber-500"];function Hpe(s){if(s===null)return"N/A";const e=Math.floor(s/3600),t=Math.floor(s%3600/60);return`${e}h${t.toString().padStart(2,"0")}m`}function TB(s){return s===null?"N/A":`${Math.round(s/(1024*1024))}MB`}const kH=({sessions:s,loading:e})=>{const[t,r]=V.useState(!0),[n,o]=V.useState(null),a=()=>r(d=>!d),c=d=>{o(h=>h===d?null:d)},u=(d,h)=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),c(h))};return i.jsxDEV("section",{"aria-labelledby":"pty-map-heading",className:"border border-border-dark rounded-lg bg-surface-dark",children:[i.jsxDEV("button",{type:"button",onClick:a,className:"flex items-center justify-between w-full px-6 py-4 text-left","aria-expanded":t,"aria-controls":"pty-map-content",children:[i.jsxDEV("h2",{id:"pty-map-heading",className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(sy,{size:20,"aria-hidden":"true",className:"text-blue-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:91,columnNumber:11},globalThis),"PTY Isolation Map"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:90,columnNumber:9},globalThis),t?i.jsxDEV(tA,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:95,columnNumber:11},globalThis):i.jsxDEV(uf,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:97,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:83,columnNumber:7},globalThis),t&&i.jsxDEV("div",{id:"pty-map-content",className:"px-6 pb-6",children:e?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",role:"status",children:"Loading PTY sessions..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:105,columnNumber:13},globalThis):s.length===0?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",children:"No active agent sessions"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:107,columnNumber:13},globalThis):i.jsxDEV("div",{role:"img","aria-label":`PTY isolation map showing ${s.length} isolated agent sessions with no lateral access between them`,children:[s.map((d,h)=>i.jsxDEV("div",{children:[i.jsxDEV("div",{role:"button",tabIndex:0,onClick:()=>c(d.sessionName),onKeyDown:f=>u(f,d.sessionName),className:`flex items-start gap-4 p-4 rounded-lg border-l-4 bg-zinc-900/50 cursor-pointer hover:bg-zinc-800/50 transition-colors ${DB[h%DB.length]}`,"aria-expanded":n===d.sessionName,"data-testid":`pty-node-${d.sessionName}`,children:[i.jsxDEV("div",{className:"flex-1 min-w-0",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[i.jsxDEV("span",{className:"font-semibold text-text-primary-dark text-sm",children:d.agentName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:128,columnNumber:25},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:["(",d.role,")"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:131,columnNumber:25},globalThis),i.jsxDEV("span",{className:`inline-flex items-center gap-1 text-xs ${d.agentStatus==="active"?"text-emerald-400":"text-text-secondary-dark"}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full ${d.agentStatus==="active"?"bg-emerald-400 animate-pulse":"bg-zinc-500"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:137,columnNumber:27},globalThis),d.agentStatus==="active"?"Active":d.agentStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:132,columnNumber:25},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:127,columnNumber:23},globalThis),i.jsxDEV("div",{className:"text-xs text-text-secondary-dark",children:["working: ",d.workingStatus]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:146,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:126,columnNumber:21},globalThis),i.jsxDEV("div",{className:"text-xs text-text-secondary-dark font-mono space-y-0.5 text-right flex-shrink-0",children:[i.jsxDEV("div",{children:["PTY pid:",d.ptyPid??"N/A"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:153,columnNumber:23},globalThis),i.jsxDEV("div",{children:["mem: ",TB(d.memoryUsage)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:154,columnNumber:23},globalThis),i.jsxDEV("div",{children:["uptime: ",Hpe(d.uptimeSeconds)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:155,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:152,columnNumber:21},globalThis),i.jsxDEV("div",{className:"text-xs text-text-secondary-dark font-mono space-y-0.5 text-right flex-shrink-0",children:[i.jsxDEV("div",{children:["fs: ",d.fsScope]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:160,columnNumber:23},globalThis),i.jsxDEV("div",{children:["net: ",d.netScope]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:161,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:159,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:116,columnNumber:19},globalThis),n===d.sessionName&&i.jsxDEV("div",{className:"ml-4 p-3 bg-zinc-900/30 rounded-b-lg border-l border-border-dark text-xs text-text-secondary-dark font-mono",children:[i.jsxDEV("div",{children:["Session: ",d.sessionName]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:168,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Process ID: ",d.ptyPid??"Not available"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:169,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Memory: ",TB(d.memoryUsage)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:170,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Filesystem: ",d.fsScope," (sandboxed)"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:171,columnNumber:23},globalThis),i.jsxDEV("div",{children:["Network: ",d.netScope," only"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:172,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:167,columnNumber:21},globalThis),h<s.length-1&&i.jsxDEV("div",{className:"flex items-center gap-2 py-2 pl-6","aria-hidden":"true",children:[i.jsxDEV("div",{className:"w-px h-4 bg-border-dark"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:179,columnNumber:23},globalThis),i.jsxDEV(jn,{size:12,className:"text-red-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:180,columnNumber:23},globalThis),i.jsxDEV("span",{className:"text-xs text-text-secondary-dark",children:"(no lateral access)"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:181,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:178,columnNumber:21},globalThis)]},d.sessionName,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:114,columnNumber:17},globalThis)),i.jsxDEV("div",{className:"flex items-center gap-4 mt-4 pt-3 border-t border-border-dark text-xs text-text-secondary-dark",children:[i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-emerald-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:190,columnNumber:19},globalThis),"Active"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:189,columnNumber:17},globalThis),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-zinc-500","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:194,columnNumber:19},globalThis),"Inactive"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:193,columnNumber:17},globalThis),i.jsxDEV("span",{className:"flex items-center gap-1",children:[i.jsxDEV(jn,{size:10,className:"text-red-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:198,columnNumber:19},globalThis),"No cross-session access"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:197,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:188,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:109,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:103,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/PtyIsolationMap.tsx",lineNumber:81,columnNumber:5},globalThis)};kH.displayName="PtyIsolationMap";const Dk={auto:{label:"Auto",className:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",icon:"✅"},approved:{label:"Approved",className:"bg-emerald-500/10 text-emerald-300 border-emerald-500/30",icon:"✅"},denied:{label:"Denied",className:"bg-red-500/10 text-red-400 border-red-500/20",icon:"🔴"},sop_block:{label:"SOP Block",className:"bg-amber-500/10 text-amber-400 border-amber-500/20",icon:"⚠️"}},jB=10;function zpe(s){return new Date(s).toLocaleTimeString("en-US",{hour12:!1})}function Gpe(s){const e=["Timestamp","Agent","Tool/Command","Outcome","Risk Level","Reason"],t=s.map(c=>[c.timestamp,c.agentName,c.toolName,c.outcome,c.riskLevel,c.reason||""]),r=[e.join(","),...t.map(c=>c.map(u=>`"${u}"`).join(","))].join(`
5214
+ `),n=new Blob([r],{type:"text/csv"}),o=URL.createObjectURL(n),a=document.createElement("a");a.href=o,a.download=`approval-audit-${new Date().toISOString().split("T")[0]}.csv`,a.click(),URL.revokeObjectURL(o)}const CH=({events:s,filter:e,onFilterChange:t,loading:r})=>{const[n,o]=V.useState(!0),[a,c]=V.useState(!1),[u,d]=V.useState(jB),h=V.useMemo(()=>s.slice(0,u),[s,u]),f=V.useMemo(()=>Array.from(new Set(s.map(x=>x.agentName))),[s]),y=()=>o(x=>!x),v=x=>{t({...e,agent:x}),c(!1)},N=x=>{t({...e,outcome:x}),c(!1)},j=()=>{Gpe(s)},b=()=>{d(x=>x+jB)};return i.jsxDEV("section",{"aria-labelledby":"audit-log-heading",className:"border border-border-dark rounded-lg bg-surface-dark",children:[i.jsxDEV("div",{className:"flex items-center justify-between px-6 py-4",children:[i.jsxDEV("button",{type:"button",onClick:y,className:"flex items-center gap-2 text-left flex-1","aria-expanded":n,"aria-controls":"audit-log-content",children:[i.jsxDEV("h2",{id:"audit-log-heading",className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(XB,{size:20,"aria-hidden":"true",className:"text-emerald-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:138,columnNumber:13},globalThis),"Approval Audit Log"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:137,columnNumber:11},globalThis),n?i.jsxDEV(tA,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:142,columnNumber:13},globalThis):i.jsxDEV(uf,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:144,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:130,columnNumber:9},globalThis),n&&i.jsxDEV("div",{className:"flex items-center gap-2",children:[i.jsxDEV("div",{className:"relative",children:[i.jsxDEV("button",{type:"button",onClick:()=>c(x=>!x),className:"flex items-center gap-1 px-3 py-1.5 text-xs text-text-secondary-dark border border-border-dark rounded-md hover:bg-zinc-800 transition-colors","aria-label":"Filter events","data-testid":"filter-button",children:[i.jsxDEV(gX,{size:14,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:159,columnNumber:17},globalThis),"Filter",(e.agent||e.outcome)&&i.jsxDEV("span",{className:"ml-1 w-1.5 h-1.5 rounded-full bg-primary","aria-label":"Filter active"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:162,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:152,columnNumber:15},globalThis),a&&i.jsxDEV("div",{className:"absolute right-0 top-full mt-1 w-48 bg-zinc-800 border border-border-dark rounded-md shadow-lg z-10",role:"menu","data-testid":"filter-menu",children:[i.jsxDEV("div",{className:"p-2",children:[i.jsxDEV("div",{className:"text-xs font-semibold text-text-secondary-dark mb-1 px-2",children:"By Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:174,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>v(void 0),className:"w-full text-left px-2 py-1 text-xs text-text-primary-dark hover:bg-zinc-700 rounded",role:"menuitem",children:"All Agents"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:175,columnNumber:21},globalThis),f.map(x=>i.jsxDEV("button",{type:"button",onClick:()=>v(x),className:`w-full text-left px-2 py-1 text-xs hover:bg-zinc-700 rounded ${e.agent===x?"text-primary":"text-text-primary-dark"}`,role:"menuitem",children:x},x,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:184,columnNumber:23},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:173,columnNumber:19},globalThis),i.jsxDEV("div",{className:"border-t border-border-dark p-2",children:[i.jsxDEV("div",{className:"text-xs font-semibold text-text-secondary-dark mb-1 px-2",children:"By Outcome"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:198,columnNumber:21},globalThis),i.jsxDEV("button",{type:"button",onClick:()=>N(void 0),className:"w-full text-left px-2 py-1 text-xs text-text-primary-dark hover:bg-zinc-700 rounded",role:"menuitem",children:"All Outcomes"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:199,columnNumber:21},globalThis),Object.keys(Dk).map(x=>i.jsxDEV("button",{type:"button",onClick:()=>N(x),className:`w-full text-left px-2 py-1 text-xs hover:bg-zinc-700 rounded ${e.outcome===x?"text-primary":"text-text-primary-dark"}`,role:"menuitem",children:[Dk[x].icon," ",Dk[x].label]},x,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:208,columnNumber:23},globalThis))]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:197,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:168,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:151,columnNumber:13},globalThis),i.jsxDEV("button",{type:"button",onClick:j,className:"flex items-center gap-1 px-3 py-1.5 text-xs text-text-secondary-dark border border-border-dark rounded-md hover:bg-zinc-800 transition-colors","aria-label":"Export as CSV","data-testid":"export-button",children:[i.jsxDEV(GV,{size:14,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:233,columnNumber:15},globalThis),"Export"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:226,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:149,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:129,columnNumber:7},globalThis),n&&i.jsxDEV("div",{id:"audit-log-content",className:"px-6 pb-6",children:r?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",role:"status",children:"Loading audit events..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:244,columnNumber:13},globalThis):s.length===0?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",children:"No approval events recorded"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:246,columnNumber:13},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"overflow-x-auto",children:i.jsxDEV("table",{className:"w-full text-sm",role:"table",children:[i.jsxDEV("thead",{children:i.jsxDEV("tr",{className:"border-b border-border-dark",children:[i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Time"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:254,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Agent"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:255,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Tool / Command"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:256,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-right py-2 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Outcome"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:257,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:253,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:252,columnNumber:19},globalThis),i.jsxDEV("tbody",{children:h.map(x=>{const D=Dk[x.outcome];return i.jsxDEV("tr",{className:"border-b border-border-dark/50 hover:bg-zinc-800/30 transition-colors","data-testid":`audit-row-${x.id}`,children:[i.jsxDEV("td",{className:"py-2.5 pr-4 font-mono text-xs text-text-secondary-dark whitespace-nowrap",children:zpe(x.timestamp)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:269,columnNumber:27},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 text-text-primary-dark whitespace-nowrap",children:x.agentName},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:272,columnNumber:27},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 font-mono text-xs text-text-secondary-dark",children:[x.toolName,x.reason&&i.jsxDEV("span",{className:"block text-xs text-zinc-500 mt-0.5",title:x.reason,children:x.reason},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:278,columnNumber:31},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:275,columnNumber:27},globalThis),i.jsxDEV("td",{className:"py-2.5 text-right",children:i.jsxDEV("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border ${D.className}`,children:[i.jsxDEV("span",{"aria-hidden":"true",children:D.icon},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:287,columnNumber:31},globalThis),D.label]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:284,columnNumber:29},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:283,columnNumber:27},globalThis)]},x.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:264,columnNumber:25},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:260,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:251,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:250,columnNumber:15},globalThis),s.length>u&&i.jsxDEV("div",{className:"mt-3 text-center",children:i.jsxDEV("button",{type:"button",onClick:b,className:"text-xs text-primary hover:text-primary/80 transition-colors","data-testid":"load-more-button",children:["Showing ",u," of ",s.length," events — Load more"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:301,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:300,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:248,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:242,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/ApprovalAuditLog.tsx",lineNumber:127,columnNumber:5},globalThis)};CH.displayName="ApprovalAuditLog";const AH=({entries:s,summary:e,loading:t})=>{const[r,n]=V.useState(!0),o=()=>n(u=>!u),a=e.status==="secure"?"text-emerald-400":"text-amber-400",c=e.status==="secure"?"SECURE":"WARNING";return i.jsxDEV("section",{"aria-labelledby":"sovereignty-heading",className:"border border-border-dark rounded-lg bg-surface-dark",children:[i.jsxDEV("div",{className:"flex items-center justify-between px-6 py-4",children:[i.jsxDEV("button",{type:"button",onClick:o,className:"flex items-center gap-2 text-left flex-1","aria-expanded":r,"aria-controls":"sovereignty-content",children:[i.jsxDEV("h2",{id:"sovereignty-heading",className:"text-lg font-semibold text-text-primary-dark flex items-center gap-2",children:[i.jsxDEV(yX,{size:20,"aria-hidden":"true",className:"text-purple-400"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:56,columnNumber:13},globalThis),"Data Sovereignty Report"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:55,columnNumber:11},globalThis),r?i.jsxDEV(tA,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:60,columnNumber:13},globalThis):i.jsxDEV(uf,{size:20,className:"text-text-secondary-dark","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:62,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:48,columnNumber:9},globalThis),i.jsxDEV("span",{className:`text-xs font-medium uppercase tracking-wide ${a}`,"data-testid":"sovereignty-status",children:c},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:67,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:47,columnNumber:7},globalThis),r&&i.jsxDEV("div",{id:"sovereignty-content",className:"px-6 pb-6",children:t?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm py-4",role:"status",children:"Loading storage data..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:76,columnNumber:13},globalThis):i.jsxDEV(i.Fragment,{children:[i.jsxDEV("div",{className:"overflow-x-auto",children:i.jsxDEV("table",{className:"w-full text-sm",role:"table",children:[i.jsxDEV("thead",{children:i.jsxDEV("tr",{className:"border-b border-border-dark",children:[i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Storage Location"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:84,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-left py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Type"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:87,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-right py-2 pr-4 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"Size"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:90,columnNumber:23},globalThis),i.jsxDEV("th",{scope:"col",className:"text-center py-2 text-xs font-medium text-text-secondary-dark uppercase tracking-wide",children:"External?"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:93,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:83,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:82,columnNumber:19},globalThis),i.jsxDEV("tbody",{children:s.map(u=>i.jsxDEV("tr",{className:"border-b border-border-dark/50","data-testid":`storage-row-${u.type.toLowerCase().replace(/\s+/g,"-")}`,children:[i.jsxDEV("td",{className:"py-2.5 pr-4 font-mono text-xs text-text-secondary-dark",children:u.path},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:105,columnNumber:25},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 text-text-primary-dark",children:u.type},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:108,columnNumber:25},globalThis),i.jsxDEV("td",{className:"py-2.5 pr-4 text-right font-mono text-xs text-text-secondary-dark",children:IV(u.sizeBytes)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:111,columnNumber:25},globalThis),i.jsxDEV("td",{className:"py-2.5 text-center",children:u.isExternal?i.jsxDEV("span",{className:"text-red-400 text-xs font-medium","aria-label":"External: Yes",children:"Yes ❌"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:116,columnNumber:29},globalThis):i.jsxDEV("span",{className:"text-emerald-400 text-xs font-medium","aria-label":"External: No",children:"No ✅"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:118,columnNumber:29},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:114,columnNumber:25},globalThis)]},u.path,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:100,columnNumber:23},globalThis))},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:98,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:81,columnNumber:17},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:80,columnNumber:15},globalThis),i.jsxDEV("div",{className:"mt-4 pt-3 border-t border-border-dark space-y-1 text-sm text-text-secondary-dark",children:[i.jsxDEV("div",{children:["Total local storage:"," ",i.jsxDEV("span",{className:"text-text-primary-dark font-medium",children:IV(e.totalLocalBytes)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:131,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:129,columnNumber:17},globalThis),i.jsxDEV("div",{children:["External connections:"," ",i.jsxDEV("span",{className:"text-text-primary-dark font-medium",children:e.externalConnections},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:137,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:135,columnNumber:17},globalThis),i.jsxDEV("div",{children:["Cloud sync:"," ",i.jsxDEV("span",{className:"text-text-primary-dark font-medium capitalize",children:e.cloudSync},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:143,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:141,columnNumber:17},globalThis),i.jsxDEV("div",{className:"text-xs text-zinc-500",children:["Last scan: ",new Date(e.lastScan).toLocaleString()]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:147,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:128,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:78,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:74,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Security/DataSovereigntyReport.tsx",lineNumber:45,columnNumber:5},globalThis)};AH.displayName="DataSovereigntyReport";const AR={healthy:"text-emerald-400",secure:"text-emerald-400",enforced:"text-emerald-400",warning:"text-amber-400",partial:"text-amber-400",error:"text-red-400",disabled:"text-red-400",compromised:"text-red-400"},MR={healthy:"HEALTHY",secure:"SECURE",enforced:"ENFORCED",warning:"WARNING",partial:"PARTIAL",error:"ERROR",disabled:"DISABLED",compromised:"COMPROMISED"},MH=()=>{const{sessions:s,summary:e,loading:t}=Fpe(),{filteredEvents:r,summary:n,filter:o,setFilter:a,loading:c}=Ppe(),{entries:u,summary:d,loading:h}=Bpe();return i.jsxDEV("div",{className:"max-w-7xl mx-auto px-4 py-6 space-y-6",children:[i.jsxDEV("div",{className:"flex items-center gap-3",children:[i.jsxDEV(sA,{size:28,className:"text-emerald-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:73,columnNumber:9},globalThis),i.jsxDEV("div",{children:[i.jsxDEV("h1",{className:"text-2xl font-bold text-text-primary-dark",children:"Security Overview"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:75,columnNumber:11},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark",children:"Your instance security posture at a glance"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:76,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:74,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:72,columnNumber:7},globalThis),i.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4","data-testid":"summary-cards",children:[i.jsxDEV("div",{className:"border border-border-dark rounded-lg bg-surface-dark p-6","data-testid":"card-pty",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV(sy,{size:18,className:"text-blue-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:87,columnNumber:13},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"PTY Status"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:88,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:86,columnNumber:11},globalThis),t?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm",role:"status",children:"Loading..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:91,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-1 text-sm",children:[i.jsxDEV("div",{className:"text-text-secondary-dark",children:[e.totalAgents," agents"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:94,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[e.isolatedCount," isolated"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:97,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[e.sharedCount," shared"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:100,columnNumber:15},globalThis),i.jsxDEV("div",{className:`text-xs font-medium uppercase tracking-wide mt-2 flex items-center gap-1 ${AR[e.status]}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full animate-pulse ${e.status==="healthy"?"bg-emerald-400":"bg-amber-400"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:104,columnNumber:17},globalThis),MR[e.status]]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:103,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:93,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:85,columnNumber:9},globalThis),i.jsxDEV("div",{className:"border border-border-dark rounded-lg bg-surface-dark p-6","data-testid":"card-storage",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV(wX,{size:18,className:"text-purple-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:114,columnNumber:13},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Storage"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:115,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:113,columnNumber:11},globalThis),h?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm",role:"status",children:"Loading..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:118,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-1 text-sm",children:[i.jsxDEV("div",{className:"text-text-secondary-dark",children:"Local DB"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:121,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:IV(d.totalLocalBytes)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:122,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[d.externalConnections," cloud"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:125,columnNumber:15},globalThis),i.jsxDEV("div",{className:`text-xs font-medium uppercase tracking-wide mt-2 flex items-center gap-1 ${AR[d.status]}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full animate-pulse ${d.status==="secure"?"bg-emerald-400":"bg-amber-400"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:129,columnNumber:17},globalThis),MR[d.status]]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:128,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:120,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:112,columnNumber:9},globalThis),i.jsxDEV("div",{className:"border border-border-dark rounded-lg bg-surface-dark p-6","data-testid":"card-approvals",children:[i.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[i.jsxDEV(XB,{size:18,className:"text-emerald-400","aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:139,columnNumber:13},globalThis),i.jsxDEV("h3",{className:"text-sm font-semibold text-text-primary-dark",children:"Approvals"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:140,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:138,columnNumber:11},globalThis),c?i.jsxDEV("div",{className:"text-text-secondary-dark text-sm",role:"status",children:"Loading..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:143,columnNumber:13},globalThis):i.jsxDEV("div",{className:"space-y-1 text-sm",children:[i.jsxDEV("div",{className:"text-text-secondary-dark",children:[n.totalToday," today"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:146,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[n.deniedToday," denied"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:149,columnNumber:15},globalThis),i.jsxDEV("div",{className:"text-text-secondary-dark",children:[n.bypassedToday," bypassed"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:152,columnNumber:15},globalThis),i.jsxDEV("div",{className:`text-xs font-medium uppercase tracking-wide mt-2 flex items-center gap-1 ${AR[n.status]}`,children:[i.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full animate-pulse ${n.status==="enforced"?"bg-emerald-400":"bg-amber-400"}`,"aria-hidden":"true"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:156,columnNumber:17},globalThis),MR[n.status]]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:155,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:145,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:137,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:83,columnNumber:7},globalThis),i.jsxDEV(kH,{sessions:s,loading:t},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:165,columnNumber:7},globalThis),i.jsxDEV(CH,{events:r,filter:o,onFilterChange:a,loading:c},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:168,columnNumber:7},globalThis),i.jsxDEV(AH,{entries:u,summary:d,loading:h},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:176,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/SecurityOverview.tsx",lineNumber:70,columnNumber:5},globalThis)};MH.displayName="SecurityOverview";const Wpe=()=>{const[s]=eA(),e=Sm();return V.useEffect(()=>{(async()=>{const r=s.get("token"),n=s.get("refreshToken"),o=s.get("error");if(r){localStorage.setItem(Db,r),n&&localStorage.setItem("crewly_refresh_token",n);try{await fetch("/api/cloud/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:r,refreshToken:n})})}catch{}}o?e("/settings?tab=cloud&error="+encodeURIComponent(o),{replace:!0}):e("/settings?tab=cloud",{replace:!0})})()},[s,e]),i.jsxDEV("div",{className:"min-h-screen flex items-center justify-center bg-background-dark",children:i.jsxDEV("div",{className:"text-center",children:[i.jsxDEV("div",{className:"w-8 h-8 border-2 border-primary/20 border-t-primary rounded-full animate-spin mx-auto"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:63,columnNumber:9},globalThis),i.jsxDEV("p",{className:"text-sm text-text-secondary-dark mt-4",children:"Completing sign-in..."},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:64,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:62,columnNumber:7},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/pages/AuthCallback.tsx",lineNumber:61,columnNumber:5},globalThis)};function Kpe(){return i.jsxDEV(qZ,{children:i.jsxDEV(rY,{children:i.jsxDEV(OX,{children:i.jsxDEV(qK,{children:i.jsxDEV(MK,{children:[i.jsxDEV(ja,{path:"/auth/callback",element:i.jsxDEV(Wpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:30,columnNumber:51},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:30,columnNumber:13},this),i.jsxDEV(ja,{path:"/",element:i.jsxDEV(fJ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:33,columnNumber:38},this),children:[i.jsxDEV(ja,{index:!0,element:i.jsxDEV(gJ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:34,columnNumber:37},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:34,columnNumber:15},this),i.jsxDEV(ja,{path:"projects",element:i.jsxDEV(wJ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:35,columnNumber:47},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:35,columnNumber:15},this),i.jsxDEV(ja,{path:"projects/:id",element:i.jsxDEV(u$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:36,columnNumber:51},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:36,columnNumber:15},this),i.jsxDEV(ja,{path:"teams",element:i.jsxDEV(M$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:37,columnNumber:44},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:37,columnNumber:15},this),i.jsxDEV(ja,{path:"teams/:id",element:i.jsxDEV(q$,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:38,columnNumber:48},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:38,columnNumber:15},this),i.jsxDEV(ja,{path:"assignments",element:i.jsxDEV(tQ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:39,columnNumber:50},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:39,columnNumber:15},this),i.jsxDEV(ja,{path:"scheduled-checkins",element:i.jsxDEV(aQ,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:40,columnNumber:57},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:40,columnNumber:15},this),i.jsxDEV(ja,{path:"factory",element:i.jsxDEV(Bhe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:41,columnNumber:46},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:41,columnNumber:15},this),i.jsxDEV(ja,{path:"marketplace",element:i.jsxDEV(jpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:42,columnNumber:50},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:42,columnNumber:15},this),i.jsxDEV(ja,{path:"knowledge",element:i.jsxDEV(Upe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:43,columnNumber:48},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:43,columnNumber:15},this),i.jsxDEV(ja,{path:"security",element:i.jsxDEV(MH,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:44,columnNumber:47},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:44,columnNumber:15},this),i.jsxDEV(ja,{path:"settings",element:i.jsxDEV(Ofe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:45,columnNumber:47},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:45,columnNumber:15},this),i.jsxDEV(ja,{path:"chat",element:i.jsxDEV(Hfe,{children:i.jsxDEV(upe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:50,columnNumber:21},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:49,columnNumber:19},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:46,columnNumber:15},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:33,columnNumber:13},this)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:28,columnNumber:11},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:27,columnNumber:9},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:26,columnNumber:7},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:25,columnNumber:5},this)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/App.tsx",lineNumber:24,columnNumber:5},this)}RR.createRoot(document.getElementById("root")).render(i.jsxDEV(pn.StrictMode,{children:i.jsxDEV(Kpe,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/main.tsx",lineNumber:13,columnNumber:5},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/main.tsx",lineNumber:12,columnNumber:3},globalThis));
5215
+ //# sourceMappingURL=index-988e322e.js.map