crewly 1.4.51 → 1.4.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/backend/src/constants.d.ts +8 -8
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +8 -8
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +2 -2
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +14 -3
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +75 -8
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
- package/dist/cli/backend/src/constants.d.ts +8 -8
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +8 -8
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/frontend/dist/assets/{index-ae0a93cb.js → index-d4b7d883.js} +2 -2
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -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:()=>v(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(vr,{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(vr,{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)},Wfe={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"},Kfe=[{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"}],Xfe=()=>{const{roles:s,isLoading:e,error:t,createRole:r,updateRole:n,deleteRole:o,refreshFromDisk:a}=_6(),[c,u]=F.useState(null),[d,f]=F.useState(!1),[m,y]=F.useState(!1),[b,N]=F.useState(""),[j,v]=F.useState(""),[x,D]=F.useState(!1),T=F.useMemo(()=>s?s.filter(R=>{if(j&&R.category!==j)return!1;if(b){const L=b.toLowerCase();return R.displayName.toLowerCase().includes(L)||R.description.toLowerCase().includes(L)||R.category.toLowerCase().includes(L)}return!0}):[],[s,b,j]),E=()=>{u(null),y(!0),f(!0)},k=R=>{u(R),y(!1),f(!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)},V=()=>{f(!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(vr,{onClick:E,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(Br,{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(fc,{id:"category-filter",value:j,onChange:R=>v(R.target.value),children:Kfe.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(Br,{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(pn,{id:"search-filter",type:"text",placeholder:"Search roles...",value:b,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(vr,{variant:"secondary",onClick:M,disabled:e||x,icon:gc,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(vr,{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(xx,{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:b||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),!b&&!j&&i.jsxDEV(vr,{onClick:E,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 ${Wfe[R.category]}`,children:fF[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(vr,{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(vr,{variant:"outline",size:"sm",onClick:()=>U(R.id,R.isBuiltin),className:"text-rose-400 hover:text-rose-300 hover:border-rose-400",icon:ij,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(Gfe,{roleId:m?null:c,onClose:V,onSave:async R=>{m?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)},qfe=()=>[{value:"",label:"All Categories"},...N$.map(s=>({value:s,label:A6(s)}))],jH=qfe(),Zfe={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"},Yfe={"claude-skill":"bg-purple-500/15 text-purple-400","web-page":"bg-blue-500/15 text-blue-400"},Jfe=()=>{var X;const{settings:s,updateSettings:e}=E5(),[t,r]=F.useState(null),[n,o]=F.useState(!1),[a,c]=F.useState("idle");F.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"))},f=async()=>{if(t){c("saving");try{await e({skills:t}),c("saved"),o(!1),setTimeout(()=>c("idle"),2e3)}catch{c("error")}}},[m,y]=F.useState(""),[b,N]=F.useState(""),[j,v]=F.useState(!1),[x,D]=F.useState(null),[T,E]=F.useState(null),k=F.useMemo(()=>({category:m||void 0,search:b||void 0}),[m,b]),{skills:U,loading:V,error:M,refresh:R,create:L,update:B,remove:O,selectSkill:H,selectedSkill:Y,clearSelection:le}=hA(k),te=F.useCallback(()=>{D(null),v(!0)},[]),ne=F.useCallback(async z=>{D(z),await H(z.id),v(!0)},[H]),q=F.useCallback(async z=>{try{x!=null&&x.id?await B(x.id,z):await L(z),v(!1),D(null)}catch(se){console.error("Failed to save skill:",se)}},[x,B,L]),Z=F.useCallback(async z=>{try{await O(z),E(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(Br,{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(pn,{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(Br,{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(pn,{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(Ul,{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(vr,{onClick:f,disabled:!n||a==="saving",icon:oj,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(vr,{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(Br,{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(fc,{id:"category-filter",value:m,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(Br,{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(pn,{id:"search-filter",type:"text",placeholder:"Search skills...",value:b,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(vr,{variant:"secondary",onClick:R,disabled:V,icon:gc,className:V?"animate-spin":"",children:V?"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(vr,{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),V&&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),!V&&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:b||m?"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),!b&&!m&&i.jsxDEV(vr,{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(tme,{skill:z,onEdit:()=>ne(z),onDelete:()=>E(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(rme,{skill:Y||x,onSave:q,onClose:()=>{v(!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(sme,{skillId:T,skillName:((X=U.find(z=>z.id===T))==null?void 0:X.name)||"",onConfirm:()=>Z(T),onCancel:()=>E(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)},$fe=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)}},Qfe=s=>{switch(s){case"warning":return i.jsxDEV(nm,{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(Ul,{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(Wk,{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)}},eme={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"}},tme=({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 ${Zfe[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 ${Yfe[r]}`,children:[$fe(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=eme[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:Qfe(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(eA,{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(bc,{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(bc,{icon:ij,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)},rme=({skill:s,onSave:e,onClose:t})=>{const r=(s==null?void 0:s.isBuiltin)??!1,[n,o]=F.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]=F.useState(!1),[u,d]=F.useState(null),f=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(b){d(b instanceof Error?b.message:"Failed to save skill")}finally{c(!1)}},m=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:m,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(bc,{icon:In,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:f,className:"flex-1 overflow-y-auto p-6 space-y-4",children:[i.jsxDEV("div",{children:[i.jsxDEV(Br,{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(pn,{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(Br,{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(pn,{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(Br,{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(im,{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(Br,{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(fc,{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(Br,{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(im,{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(vr,{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(vr,{type:"submit",onClick:f,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)},sme=({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(vr,{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(vr,{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)},nme=()=>{const[s,e]=F.useState({connected:!1}),[t,r]=F.useState(!0),[n,o]=F.useState(!1),[a,c]=F.useState(null),[u,d]=F.useState({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),f=F.useCallback(async()=>{var N,j,v,x,D,T,E;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:(v=U.data)==null?void 0:v.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:(E=U.data)==null?void 0:E.messagesReceived}):e({connected:!1,error:U.error})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);F.useEffect(()=>{f()},[f]);const m=N=>{const{name:j,value:v}=N.target;d(x=>({...x,[j]:v}))},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})}),v=await j.json();if(!j.ok||!v.success)throw new Error(v.error||"Connection failed");d({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),await f()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Slack")}finally{o(!1)}},b=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 f()}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(nm,{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(In,{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($c,{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(vr,{variant:"secondary",onClick:f,icon:gc,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(vr,{variant:"danger",onClick:b,icon:qV,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(nm,{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(eA,{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(Br,{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(pn,{id:"botToken",name:"botToken",type:"password",value:u.botToken,onChange:m,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(Br,{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(pn,{id:"appToken",name:"appToken",type:"password",value:u.appToken,onChange:m,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(Br,{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(pn,{id:"signingSecret",name:"signingSecret",type:"password",value:u.signingSecret,onChange:m,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(Br,{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(pn,{id:"defaultChannel",name:"defaultChannel",type:"text",value:u.defaultChannel,onChange:m,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(vr,{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)},ome=()=>{const[s,e]=F.useState({connected:!1}),[t,r]=F.useState(!0),[n,o]=F.useState(!1),[a,c]=F.useState(null),u=F.useCallback(async()=>{var m,y,b,N,j,v;try{c(null);const D=await(await fetch("/api/whatsapp/status")).json();D.success?e({connected:((m=D.data)==null?void 0:m.isConfigured)||((y=D.data)==null?void 0:y.connected)||!1,phoneNumber:(b=D.data)==null?void 0:b.phoneNumber,qrCode:(N=D.data)==null?void 0:N.qrCode,messagesSent:(j=D.data)==null?void 0:j.messagesSent,messagesReceived:(v=D.data)==null?void 0:v.messagesReceived}):e({connected:!1,error:D.error})}catch{e({connected:!1,error:"Failed to fetch WhatsApp status"})}finally{r(!1)}},[]);F.useEffect(()=>{u()},[u]);const d=async()=>{var m;o(!0),c(null);try{const y=await fetch("/api/whatsapp/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),b=await y.json();if(!y.ok||!b.success)throw new Error(b.error||"Connection failed");(m=b.data)!=null&&m.qrCode&&e(N=>({...N,qrCode:b.data.qrCode})),await u()}catch(y){c(y instanceof Error?y.message:"Failed to connect WhatsApp")}finally{o(!1)}},f=async()=>{if(window.confirm("Are you sure you want to disconnect from WhatsApp?"))try{c(null);const m=await fetch("/api/whatsapp/disconnect",{method:"POST"}),y=await m.json();if(!m.ok||!y.success)throw new Error(y.error||"Disconnect failed");await u()}catch(m){c(m instanceof Error?m.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(nm,{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(In,{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($c,{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(vr,{variant:"secondary",onClick:u,icon:gc,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(vr,{variant:"danger",onClick:f,icon:qV,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(vr,{variant:"secondary",onClick:u,icon:gc,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(nm,{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(vr,{onClick:d,disabled:n,loading:n,icon:GV,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)},ime=()=>{const[s,e]=F.useState({connected:!1}),[t,r]=F.useState(!0),[n,o]=F.useState(!1),[a,c]=F.useState(null),[u,d]=F.useState("pubsub"),[f,m]=F.useState("service_account"),[y,b]=F.useState(""),[N,j]=F.useState(""),[v,x]=F.useState(""),[D,T]=F.useState(""),[E,k]=F.useState(!1),[U,V]=F.useState(null),[M,R]=F.useState(!1),[L,B]=F.useState(null),[O,H]=F.useState(""),[Y,le]=F.useState(""),te=F.useRef(null),ne=F.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)}},[]);F.useEffect(()=>{ne()},[ne]),F.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}:f==="adc"?(ce={authMode:"adc"},u==="pubsub"&&(ce.projectId=v,ce.subscriptionName=D),Y.trim()&&(ce.serviceAccountEmail=Y.trim())):u==="service-account"?ce={serviceAccountKey:N}:ce={serviceAccountKey:N,projectId:v,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");b(""),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),V(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;V(G>0?`Pulled ${G} message${G!==1?"s":""}`:"No new messages"),await ne()}catch(ee){V(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",me=()=>u==="webhook"?!!y:f==="adc"?u==="pubsub"?!!(v&&D):!0:u==="service-account"?!!N:!!(N&&v&&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(nm,{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(In,{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($c,{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(vr,{variant:"primary",onClick:X,disabled:E,loading:E,icon:zV,"data-testid":"pull-now-btn",children:E?"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(vr,{variant:"secondary",onClick:ne,icon:gc,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(vr,{variant:"danger",onClick:Z,icon:qV,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(Br,{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(pn,{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(vr,{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(nm,{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(Br,{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(pn,{id:"gchat-webhook",name:"webhookUrl",type:"url",value:y,onChange:ee=>b(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(Br,{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 ${f==="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:()=>m("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 ${f==="adc"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>m("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(Br,{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(pn,{id:"gchat-project-id",name:"projectId",type:"text",value:v,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(Br,{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(pn,{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),f==="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(Br,{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(pn,{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(Br,{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(vr,{type:"submit",disabled:n||!me(),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)},ame=[{id:"slack",name:"Slack",description:"Connect your Slack workspace for team communication with the orchestrator.",icon:xX,available:!0,component:nme},{id:"whatsapp",name:"WhatsApp",description:"Connect via WhatsApp Web to communicate with the orchestrator from your phone.",icon:UX,available:!0,component:ome},{id:"discord",name:"Discord",description:"Connect a Discord bot to communicate with the orchestrator via Discord server.",icon:jX,available:!1},{id:"telegram",name:"Telegram",description:"Connect a Telegram bot for messaging the orchestrator via Telegram.",icon:t9,available:!1},{id:"google-chat",name:"Google Chat",description:"Connect Google Chat for workspace communication with the orchestrator.",icon:$B,available:!0,component:ime}],lme=()=>{const[s,e]=F.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:119,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:120,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:118,columnNumber:7},globalThis),i.jsxDEV("div",{className:"space-y-3",children:ame.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:149,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:148,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:154,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:156,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:153,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:161,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:152,columnNumber:17},globalThis),r.available&&i.jsxDEV("div",{className:"text-text-secondary-dark",children:n?i.jsxDEV(um,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:169,columnNumber:23},globalThis):i.jsxDEV(om,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:171,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:167,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:138,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:180,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:179,columnNumber:17},globalThis)]},r.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:132,columnNumber:13},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:126,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:116,columnNumber:5},globalThis)},kR={gemini:"Google Gemini",anthropic:"Anthropic",openai:"OpenAI"},gB={gemini:"GOOGLE_GENERATIVE_AI_API_KEY",anthropic:"ANTHROPIC_API_KEY",openai:"OPENAI_API_KEY"},cme=2e3,ume=()=>{const{settings:s,updateSettings:e,isLoading:t,error:r}=E5(),[n,o]=F.useState({global:{},runtimeOverrides:{},skillOverrides:{}}),[a,c]=F.useState(!1),[u,d]=F.useState("idle"),[f,m]=F.useState(null),[y,b]=F.useState({}),[N,j]=F.useState({}),[v,x]=F.useState({}),[D,T]=F.useState({});F.useEffect(()=>{s!=null&&s.apiKeys&&(o(s.apiKeys),c(!1))},[s]);const E=F.useCallback((B,O)=>{o(H=>({...H,global:{...H.global,[B]:O}})),c(!0),d("idle"),j(H=>({...H,[`global-${B}`]:"idle"}))},[]),k=F.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"),m(null);try{await e({apiKeys:n}),d("saved"),c(!1),setTimeout(()=>d("idle"),cme)}catch(B){d("error"),m(B instanceof Error?B.message:"Failed to save")}},V=async(B,O,H)=>{if(!(!O||O.startsWith("••••"))){j(Y=>({...Y,[H]:"testing"})),x(Y=>({...Y,[H]:""}));try{const Y=await Zw.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=>{b(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(Ul,{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)," ",v[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(OR,{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(Ul,{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(vr,{variant:"secondary",size:"sm",onClick:U,disabled:!a||u==="saving",children:u==="saving"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV(WV,{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(oj,{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"&&f&&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:f},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(OR,{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(Br,{htmlFor:`global-${B}`,children:kR[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(pn,{id:`global-${B}`,type:Y?"text":"password",value:O,onChange:le=>E(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(PR,{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(vr,{variant:"secondary",size:"sm",onClick:()=>V(B,O,H),disabled:!O||O.startsWith("••••")||N[H]==="testing",children:[i.jsxDEV(wT,{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(wT,{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:xT[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(um,{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(om,{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(Br,{htmlFor:`${B}-${H}-toggle`,children:kR[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(pn,{type:y[ne]?"text":"password",value:te,onChange:X=>k(B,H,"key",X.target.value),placeholder:`Custom ${kR[H]} key for ${xT[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(PR,{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(vr,{variant:"secondary",size:"sm",onClick:()=>V(H,te,ne),disabled:!te||te.startsWith("••••")||N[ne]==="testing",children:[i.jsxDEV(wT,{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)},dme=6,hme=32,fme="https://api.crewlyai.com",mme="/api/relay/connect";function pme(s=dme){const e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=new Uint8Array(s);return crypto.getRandomValues(t),Array.from(t,r=>e[r%e.length]).join("")}function yme(s=hme){const e=new Uint8Array(s);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}const gme=({isOpen:s,onClose:e})=>{const[t,r]=F.useState(""),[n,o]=F.useState(""),[a,c]=F.useState("idle"),[u,d]=F.useState(""),[f,m]=F.useState(null),[y,b]=F.useState(!1);F.useEffect(()=>{if(!s){c("idle"),d(""),m(null),b(!1);return}const v=pme(),x=yme();r(v),o(x),(async()=>{c("connecting"),d("");const T=localStorage.getItem(Db)||"";try{const E=await fetch(mme,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:fme,pairingCode:v,role:"orchestrator",token:T,sharedSecret:x})}),k=await E.json();E.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=F.useCallback(async(v,x)=>{try{await navigator.clipboard.writeText(v),m(x),setTimeout(()=>m(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:v=>{v.target===v.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: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:"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(In,{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(em,{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(Ul,{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:f==="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(LR,{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:f==="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(LR,{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:()=>b(!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(GV,{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)},bme="https://api.crewlyai.com",vme="/api/relay/connect",wme=({isOpen:s,onClose:e})=>{const[t,r]=F.useState(""),[n,o]=F.useState(""),[a,c]=F.useState("idle"),[u,d]=F.useState(""),f=F.useCallback(()=>{r(""),o(""),c("idle"),d(""),e()},[e]),m=F.useCallback(async b=>{b.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 v=localStorage.getItem(Db)||"";try{const x=await fetch(vme,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:bme,pairingCode:N,role:"agent",token:v,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:b=>{b.target===b.currentTarget&&f()},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: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:"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:f,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(In,{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:m,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(Ul,{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:b=>r(b.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:b=>o(b.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:f,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(em,{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)},xme="/api/cloud/validate",Nme="/api/cloud/status",Dme="/api/cloud/devices",Tme="/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 jme={waiting:"Connecting",paired:"Connected",disconnected:"Offline",online:"Online",offline:"Offline"},Sme={waiting:"bg-yellow-400",paired:"bg-emerald-400",disconnected:"bg-gray-500",online:"bg-emerald-400",offline:"bg-gray-500"},Eme=({device:s})=>{const e=s.role==="orchestrator"?sy:WB,t=s.status||s.state||"disconnected",r=Sme[t]??"bg-gray-500",n=jme[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)},_me=()=>{const[s,e]=F.useState([]),[t,r]=F.useState(!0),[n,o]=F.useState(null),[a,c]=F.useState(!1),[u,d]=F.useState(null),f=F.useCallback(async()=>{var m;try{r(!0),o(null),c(!1),d(null);const y=await fetch(Dme),b=await y.json();if(y.ok&&b.success&&b.data){if(b.data.syncState&&d(b.data.syncState),b.data.devices&&b.data.devices.length>0){e(b.data.devices),b.data.tokenExpired&&c(!0);return}if(!b.data.syncState||b.data.syncState==="stopped")try{const N=await fetch(Tme),j=await N.json();if(N.ok&&j.success&&((m=j.data)!=null&&m.devices)){e(j.data.devices),j.data.tokenExpired&&c(!0);return}}catch{}e(b.data.devices||[]),b.data.tokenExpired&&c(!0)}else o(b.error||"Failed to load devices")}catch{o("Could not reach the server")}finally{r(!1)}},[]);return F.useEffect(()=>{f()},[f]),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:f,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(gc,{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(m=>i.jsxDEV(Eme,{device:m},m.sessionId||m.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)},kme=()=>{const[s,e]=F.useState(null),[t,r]=F.useState(!1),[n,o]=F.useState(null),[a,c]=F.useState(!0),[u,d]=F.useState(null),[f,m]=F.useState(!1),[y,b]=F.useState(!1),N=F.useCallback(async()=>{try{const E=await fetch(Nme),k=await E.json();if(E.ok&&k.success&&k.data){const U=k.data,V=U.connectionStatus==="connected";return r(V),V&&o(U.tier??null),V}}catch{}return r(!1),o(null),!1},[]),j=F.useCallback(async()=>{const E=localStorage.getItem(Db);if(!E){c(!1);return}try{const k=await fetch(xme,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${E}`}}),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)}},[]);F.useEffect(()=>{(async()=>{await N(),await j()})()},[N,j]);const v=()=>{const E=`${window.location.origin}/auth/callback`;window.location.href=E$(E)},x=F.useCallback(async E=>{try{await fetch("/api/cloud/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:E})})}catch{}},[]);F.useEffect(()=>{const E=localStorage.getItem(Db);E&&s&&x(E)},[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=E=>{switch(E){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:480,columnNumber:9},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:479,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(IT,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:490,columnNumber:11},globalThis),"CrewlyAI Cloud"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:489,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:493,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:488,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:499,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:512,columnNumber:21},globalThis):i.jsxDEV(IT,{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:518,columnNumber:21},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:510,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:523,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:526,columnNumber:21},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:522,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:528,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:521,columnNumber:17},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:509,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:534,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:508,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(gc,{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:544,columnNumber:17},globalThis),"Refresh"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:540,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:551,columnNumber:17},globalThis),"Disconnect"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:547,columnNumber:15},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:539,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:507,columnNumber:11},globalThis),i.jsxDEV("div",{className:"flex items-center gap-2","data-testid":"relay-pairing-buttons",children:[i.jsxDEV("button",{onClick:()=>m(!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:564,columnNumber:15},globalThis),"Invite Device"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:559,columnNumber:13},globalThis),i.jsxDEV("button",{onClick:()=>b(!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(tA,{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:572,columnNumber:15},globalThis),"Join Relay"]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:567,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:558,columnNumber:11},globalThis),i.jsxDEV(_me,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:578,columnNumber:11},globalThis),i.jsxDEV(gme,{isOpen:f,onClose:()=>m(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:581,columnNumber:11},globalThis),i.jsxDEV(wme,{isOpen:y,onClose:()=>b(!1)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:582,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:506,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(wT,{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:588,columnNumber:13},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:587,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:592,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:595,columnNumber:13},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:591,columnNumber:11},globalThis),i.jsxDEV("button",{onClick:v,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(eA,{className:"w-4 h-4"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:606,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:601,columnNumber:11},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:586,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:486,columnNumber:5},globalThis)},Cme=new Set(["general","roles","skills","integrations","api-keys","cloud"]),Ame=()=>{const[s]=$C(),e=s.get("tab"),t=e&&Cme.has(e)?e:"general",[r,n]=F.useState(t),o=[{id:"general",label:"General",icon:r9},{id:"roles",label:"Roles",icon:xx},{id:"skills",label:"Skills",icon:a9},{id:"integrations",label:"Integrations",icon:tA},{id:"api-keys",label:"API Keys",icon:OR},{id:"cloud",label:"Cloud",icon:IT}],a=()=>{switch(r){case"general":return i.jsxDEV(Hfe,{},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(Xfe,{},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(Jfe,{},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(lme,{},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(ume,{},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(kme,{},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)},Wf="/api/chat";class Mme{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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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 Xu=new Mme,SH=F.createContext(null),Ume=({children:s})=>{const[e,t]=F.useState([]),[r,n]=F.useState(null),[o,a]=F.useState([]),[c,u]=F.useState(!0),[d,f]=F.useState(!1),[m,y]=F.useState(null),[b,N]=F.useState(!1),[j,v]=F.useState(null),[x,D]=F.useState(!1),[T,E]=F.useState(!1),k=F.useRef(null);F.useEffect(()=>{k.current=r},[r]);const U=F.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(me=>me.id===X.id)?ae:[...ae,X]),N(!1)),t(ae=>ae.map(me=>me.id===X.conversationId?{...me,lastMessage:{content:X.content.slice(0,100),timestamp:X.timestamp,from:X.from},messageCount:me.messageCount+1,updatedAt:X.timestamp}:me))},[]),V=F.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=F.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 me=ae.findIndex(ee=>ee.id===X.id);if(me>=0){const ee=[...ae];return ee[me]=X,ee}return[X,...ae]});const se=k.current;(se==null?void 0:se.id)===X.id&&n(X)},[]);F.useEffect(()=>(or.on("chat_message",U),or.on("chat_typing",V),or.on("conversation_updated",M),or.subscribeToChat(),()=>{or.off("chat_message",U),or.off("chat_typing",V),or.off("conversation_updated",M),or.unsubscribeFromChat()}),[U,V,M]),F.useEffect(()=>{(async()=>{u(!0);try{const[X,z]=await Promise.all([Xu.getConversations(),Xu.getCurrentConversation()]);if(t(X),z){n(z);const se=await Xu.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=F.useCallback(async Z=>{if(!(!Z.trim()||d)){f(!0),y(null);try{const X=await Xu.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{f(!1)}}},[d,r]),L=F.useCallback(async Z=>{const X=e.find(z=>z.id===Z);if(X){n(X),u(!0),y(null);try{const z=await Xu.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=F.useCallback(async Z=>{const X=await Xu.createConversation(Z);return t(z=>[X,...z]),n(X),a([]),X},[]),O=F.useCallback(async Z=>{if(await Xu.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=F.useCallback(async Z=>{if(await Xu.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=F.useCallback(async Z=>{await Xu.clearConversation(Z),(r==null?void 0:r.id)===Z&&a([])},[r]),le=F.useCallback(async()=>{if(!r)return;const Z=await Xu.getMessagesWithMeta(r.id);a(Z.messages),D(Z.hasMore)},[r]),te=F.useCallback(async()=>{if(!(!r||!x||T)){E(!0);try{const Z=o[0];if(!Z)return;const X=await Xu.getMessagesWithMeta(r.id,50,Z.timestamp);X.messages.length>0&&a(z=>{const se=new Set(z.map(me=>me.id));return[...X.messages.filter(me=>!se.has(me.id)),...z]}),D(X.hasMore)}catch(Z){y(Z instanceof Error?Z.message:"Failed to load older messages")}finally{E(!1)}}},[r,x,T,o]),ne=F.useCallback(()=>{y(null)},[]),q={conversations:e,currentConversation:r,messages:o,isLoading:c,isSending:d,error:m,isTyping:b,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:v};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)},_5=()=>{const s=F.useContext(SH);if(!s)throw new Error("useChat must be used within a ChatProvider");return s},VV={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 Rme=[{key:null,label:"All"},...Object.entries(VV).map(([s,{icon:e,label:t}])=>({key:s,label:t,icon:e}))],Vme=({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=Rme.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=VV[s]??VV.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)},fi={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 Fme(Math.abs(r));if(r<fi.MINUTE)return"just now";if(r<fi.HOUR){const n=Math.floor(r/fi.MINUTE);return`${n} ${n===1?"minute":"minutes"} ago`}if(r<fi.DAY){const n=Math.floor(r/fi.HOUR);return`${n} ${n===1?"hour":"hours"} ago`}if(r<fi.DAY*2)return"Yesterday";if(r<fi.WEEK)return`${Math.floor(r/fi.DAY)} days ago`;if(r<fi.MONTH){const n=Math.floor(r/fi.WEEK);return`${n} ${n===1?"week":"weeks"} ago`}if(r<fi.YEAR){const n=Math.floor(r/fi.MONTH);return`${n} ${n===1?"month":"months"} ago`}return Ime(t)}function Fme(s){if(s<fi.MINUTE)return"in a moment";if(s<fi.HOUR){const t=Math.floor(s/fi.MINUTE);return`in ${t} ${t===1?"minute":"minutes"}`}if(s<fi.DAY){const t=Math.floor(s/fi.HOUR);return`in ${t} ${t===1?"hour":"hours"}`}return s<fi.DAY*2?"Tomorrow":`in ${Math.floor(s/fi.DAY)} days`}function Ime(s,e={}){const t={month:"short",day:"numeric",year:"numeric",...e};return s.toLocaleDateString(void 0,t)}const Lme=({conversation:s,isActive:e,onClick:t})=>{var c,u,d,f,m,y,b;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=((m=(f=s.lastMessage)==null?void 0:f.from)==null?void 0:m.name)??((b=(y=s.lastMessage)==null?void 0:y.from)==null?void 0:b.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 Pme=({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(Vme,{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(Lme,{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 Ome(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 Bme(s){switch(s.from.type){case"user":return"👤";case"orchestrator":return"🤖";case"agent":return"🔧";case"system":return"ℹ️";default:return"💬"}}function Hme(s){return s.split(/(```[\s\S]*?```)/g).map((t,r)=>{if(t.startsWith("```")&&t.endsWith("```")){const n=t.slice(3,-3),o=n.indexOf(`
|
|
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(vr,{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(vr,{type:"submit",onClick:f,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)},sme=({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(vr,{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(vr,{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)},nme=()=>{const[s,e]=F.useState({connected:!1}),[t,r]=F.useState(!0),[n,o]=F.useState(!1),[a,c]=F.useState(null),[u,d]=F.useState({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),f=F.useCallback(async()=>{var N,j,v,x,D,T,E;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:(v=U.data)==null?void 0:v.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:(E=U.data)==null?void 0:E.messagesReceived}):e({connected:!1,error:U.error})}catch{e({connected:!1,error:"Failed to fetch status"})}finally{r(!1)}},[]);F.useEffect(()=>{f()},[f]);const m=N=>{const{name:j,value:v}=N.target;d(x=>({...x,[j]:v}))},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})}),v=await j.json();if(!j.ok||!v.success)throw new Error(v.error||"Connection failed");d({botToken:"",appToken:"",signingSecret:"",defaultChannel:""}),await f()}catch(j){c(j instanceof Error?j.message:"Failed to connect to Slack")}finally{o(!1)}},b=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 f()}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(nm,{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(In,{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($c,{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(vr,{variant:"secondary",onClick:f,icon:gc,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(vr,{variant:"danger",onClick:b,icon:qV,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(nm,{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(eA,{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(Br,{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(pn,{id:"botToken",name:"botToken",type:"password",value:u.botToken,onChange:m,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(Br,{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(pn,{id:"appToken",name:"appToken",type:"password",value:u.appToken,onChange:m,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(Br,{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(pn,{id:"signingSecret",name:"signingSecret",type:"password",value:u.signingSecret,onChange:m,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(Br,{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(pn,{id:"defaultChannel",name:"defaultChannel",type:"text",value:u.defaultChannel,onChange:m,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(vr,{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)},ome=()=>{const[s,e]=F.useState({connected:!1}),[t,r]=F.useState(!0),[n,o]=F.useState(!1),[a,c]=F.useState(null),u=F.useCallback(async()=>{var m,y,b,N,j,v;try{c(null);const D=await(await fetch("/api/whatsapp/status")).json();D.success?e({connected:((m=D.data)==null?void 0:m.isConfigured)||((y=D.data)==null?void 0:y.connected)||!1,phoneNumber:(b=D.data)==null?void 0:b.phoneNumber,qrCode:(N=D.data)==null?void 0:N.qrCode,messagesSent:(j=D.data)==null?void 0:j.messagesSent,messagesReceived:(v=D.data)==null?void 0:v.messagesReceived}):e({connected:!1,error:D.error})}catch{e({connected:!1,error:"Failed to fetch WhatsApp status"})}finally{r(!1)}},[]);F.useEffect(()=>{u()},[u]);const d=async()=>{var m;o(!0),c(null);try{const y=await fetch("/api/whatsapp/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),b=await y.json();if(!y.ok||!b.success)throw new Error(b.error||"Connection failed");(m=b.data)!=null&&m.qrCode&&e(N=>({...N,qrCode:b.data.qrCode})),await u()}catch(y){c(y instanceof Error?y.message:"Failed to connect WhatsApp")}finally{o(!1)}},f=async()=>{if(window.confirm("Are you sure you want to disconnect from WhatsApp?"))try{c(null);const m=await fetch("/api/whatsapp/disconnect",{method:"POST"}),y=await m.json();if(!m.ok||!y.success)throw new Error(y.error||"Disconnect failed");await u()}catch(m){c(m instanceof Error?m.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(nm,{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(In,{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($c,{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(vr,{variant:"secondary",onClick:u,icon:gc,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(vr,{variant:"danger",onClick:f,icon:qV,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(vr,{variant:"secondary",onClick:u,icon:gc,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(nm,{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(vr,{onClick:d,disabled:n,loading:n,icon:GV,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)},ime=()=>{const[s,e]=F.useState({connected:!1}),[t,r]=F.useState(!0),[n,o]=F.useState(!1),[a,c]=F.useState(null),[u,d]=F.useState("pubsub"),[f,m]=F.useState("service_account"),[y,b]=F.useState(""),[N,j]=F.useState(""),[v,x]=F.useState(""),[D,T]=F.useState(""),[E,k]=F.useState(!1),[U,V]=F.useState(null),[M,R]=F.useState(!1),[L,B]=F.useState(null),[O,H]=F.useState(""),[Y,le]=F.useState(""),te=F.useRef(null),ne=F.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)}},[]);F.useEffect(()=>{ne()},[ne]),F.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}:f==="adc"?(ce={authMode:"adc"},u==="pubsub"&&(ce.projectId=v,ce.subscriptionName=D),Y.trim()&&(ce.serviceAccountEmail=Y.trim())):u==="service-account"?ce={serviceAccountKey:N}:ce={serviceAccountKey:N,projectId:v,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");b(""),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),V(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;V(G>0?`Pulled ${G} message${G!==1?"s":""}`:"No new messages"),await ne()}catch(ee){V(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",me=()=>u==="webhook"?!!y:f==="adc"?u==="pubsub"?!!(v&&D):!0:u==="service-account"?!!N:!!(N&&v&&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(nm,{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(In,{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($c,{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(vr,{variant:"primary",onClick:X,disabled:E,loading:E,icon:zV,"data-testid":"pull-now-btn",children:E?"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(vr,{variant:"secondary",onClick:ne,icon:gc,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(vr,{variant:"danger",onClick:Z,icon:qV,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(Br,{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(pn,{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(vr,{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(nm,{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(Br,{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(pn,{id:"gchat-webhook",name:"webhookUrl",type:"url",value:y,onChange:ee=>b(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(Br,{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 ${f==="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:()=>m("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 ${f==="adc"?"bg-primary/10 border-primary text-primary":"bg-surface-dark border-border-dark text-text-secondary-dark hover:text-text-primary-dark"}`,onClick:()=>m("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(Br,{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(pn,{id:"gchat-project-id",name:"projectId",type:"text",value:v,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(Br,{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(pn,{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),f==="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(Br,{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(pn,{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(Br,{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(vr,{type:"submit",disabled:n||!me(),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)},ame=[{id:"slack",name:"Slack",description:"Connect your Slack workspace for team communication with the orchestrator.",icon:xX,available:!0,component:nme},{id:"whatsapp",name:"WhatsApp",description:"Connect via WhatsApp Web to communicate with the orchestrator from your phone.",icon:UX,available:!0,component:ome},{id:"discord",name:"Discord",description:"Connect a Discord bot to communicate with the orchestrator via Discord server.",icon:jX,available:!1},{id:"telegram",name:"Telegram",description:"Connect a Telegram bot for messaging the orchestrator via Telegram.",icon:t9,available:!1},{id:"google-chat",name:"Google Chat",description:"Connect Google Chat for workspace communication with the orchestrator.",icon:$B,available:!0,component:ime}],lme=()=>{const[s,e]=F.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:119,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:120,columnNumber:9},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:118,columnNumber:7},globalThis),i.jsxDEV("div",{className:"space-y-3",children:ame.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:149,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:148,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:154,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:156,columnNumber:23},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:153,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:161,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:152,columnNumber:17},globalThis),r.available&&i.jsxDEV("div",{className:"text-text-secondary-dark",children:n?i.jsxDEV(um,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:169,columnNumber:23},globalThis):i.jsxDEV(om,{className:"w-5 h-5"},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:171,columnNumber:23},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:167,columnNumber:19},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:138,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:180,columnNumber:19},globalThis)},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:179,columnNumber:17},globalThis)]},r.id,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:132,columnNumber:13},globalThis)})},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:126,columnNumber:7},globalThis)]},void 0,!0,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/IntegrationsTab.tsx",lineNumber:116,columnNumber:5},globalThis)},kR={gemini:"Google Gemini",anthropic:"Anthropic",openai:"OpenAI"},gB={gemini:"GOOGLE_GENERATIVE_AI_API_KEY",anthropic:"ANTHROPIC_API_KEY",openai:"OPENAI_API_KEY"},cme=2e3,ume=()=>{const{settings:s,updateSettings:e,isLoading:t,error:r}=E5(),[n,o]=F.useState({global:{},runtimeOverrides:{},skillOverrides:{}}),[a,c]=F.useState(!1),[u,d]=F.useState("idle"),[f,m]=F.useState(null),[y,b]=F.useState({}),[N,j]=F.useState({}),[v,x]=F.useState({}),[D,T]=F.useState({});F.useEffect(()=>{s!=null&&s.apiKeys&&(o(s.apiKeys),c(!1))},[s]);const E=F.useCallback((B,O)=>{o(H=>({...H,global:{...H.global,[B]:O}})),c(!0),d("idle"),j(H=>({...H,[`global-${B}`]:"idle"}))},[]),k=F.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"),m(null);try{await e({apiKeys:n}),d("saved"),c(!1),setTimeout(()=>d("idle"),cme)}catch(B){d("error"),m(B instanceof Error?B.message:"Failed to save")}},V=async(B,O,H)=>{if(!(!O||O.startsWith("••••"))){j(Y=>({...Y,[H]:"testing"})),x(Y=>({...Y,[H]:""}));try{const Y=await Zw.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=>{b(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(Ul,{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)," ",v[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(OR,{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(Ul,{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(vr,{variant:"secondary",size:"sm",onClick:U,disabled:!a||u==="saving",children:u==="saving"?i.jsxDEV(i.Fragment,{children:[i.jsxDEV(WV,{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(oj,{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"&&f&&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:f},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(OR,{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(Br,{htmlFor:`global-${B}`,children:kR[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(pn,{id:`global-${B}`,type:Y?"text":"password",value:O,onChange:le=>E(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(PR,{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(vr,{variant:"secondary",size:"sm",onClick:()=>V(B,O,H),disabled:!O||O.startsWith("••••")||N[H]==="testing",children:[i.jsxDEV(wT,{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(wT,{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:xT[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(um,{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(om,{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(Br,{htmlFor:`${B}-${H}-toggle`,children:kR[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(pn,{type:y[ne]?"text":"password",value:te,onChange:X=>k(B,H,"key",X.target.value),placeholder:`Custom ${kR[H]} key for ${xT[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(PR,{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(vr,{variant:"secondary",size:"sm",onClick:()=>V(H,te,ne),disabled:!te||te.startsWith("••••")||N[ne]==="testing",children:[i.jsxDEV(wT,{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)},dme=6,hme=32,fme="https://api.crewlyai.com",mme="/api/relay/connect";function pme(s=dme){const e="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",t=new Uint8Array(s);return crypto.getRandomValues(t),Array.from(t,r=>e[r%e.length]).join("")}function yme(s=hme){const e=new Uint8Array(s);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}const gme=({isOpen:s,onClose:e})=>{const[t,r]=F.useState(""),[n,o]=F.useState(""),[a,c]=F.useState("idle"),[u,d]=F.useState(""),[f,m]=F.useState(null),[y,b]=F.useState(!1);F.useEffect(()=>{if(!s){c("idle"),d(""),m(null),b(!1);return}const v=pme(),x=yme();r(v),o(x),(async()=>{c("connecting"),d("");const T=localStorage.getItem(Db)||"";try{const E=await fetch(mme,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:fme,pairingCode:v,role:"orchestrator",token:T,sharedSecret:x})}),k=await E.json();E.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=F.useCallback(async(v,x)=>{try{await navigator.clipboard.writeText(v),m(x),setTimeout(()=>m(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:v=>{v.target===v.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: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:"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(In,{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(em,{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(Ul,{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:f==="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(LR,{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:f==="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(LR,{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:()=>b(!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(GV,{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)},bme="https://api.crewlyai.com",vme="/api/relay/connect",wme=({isOpen:s,onClose:e})=>{const[t,r]=F.useState(""),[n,o]=F.useState(""),[a,c]=F.useState("idle"),[u,d]=F.useState(""),f=F.useCallback(()=>{r(""),o(""),c("idle"),d(""),e()},[e]),m=F.useCallback(async b=>{b.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 v=localStorage.getItem(Db)||"";try{const x=await fetch(vme,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiUrl:bme,pairingCode:N,role:"agent",token:v,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:b=>{b.target===b.currentTarget&&f()},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: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:"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:f,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(In,{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:m,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(Ul,{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:b=>r(b.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:b=>o(b.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:f,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(em,{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)},xme="/api/cloud/validate",Nme="/api/cloud/status",Dme="/api/cloud/devices",Tme="/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 jme={waiting:"Connecting",paired:"Connected",disconnected:"Offline",online:"Online",offline:"Offline"},Sme={waiting:"bg-yellow-400",paired:"bg-emerald-400",disconnected:"bg-gray-500",online:"bg-emerald-400",offline:"bg-gray-500"},Eme=({device:s})=>{const e=s.role==="orchestrator"?sy:WB,t=s.status||s.state||"disconnected",r=Sme[t]??"bg-gray-500",n=jme[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)},_me=()=>{const[s,e]=F.useState([]),[t,r]=F.useState(!0),[n,o]=F.useState(null),[a,c]=F.useState(!1),[u,d]=F.useState(null),f=F.useCallback(async()=>{var m;try{r(!0),o(null),c(!1),d(null);const y=await fetch(Dme),b=await y.json();if(y.ok&&b.success&&b.data){if(b.data.syncState&&d(b.data.syncState),b.data.devices&&b.data.devices.length>0){e(b.data.devices),b.data.tokenExpired&&c(!0);return}if(!b.data.syncState||b.data.syncState==="stopped")try{const N=await fetch(Tme),j=await N.json();if(N.ok&&j.success&&((m=j.data)!=null&&m.devices)){e(j.data.devices),j.data.tokenExpired&&c(!0);return}}catch{}e(b.data.devices||[]),b.data.tokenExpired&&c(!0)}else o(b.error||"Failed to load devices")}catch{o("Could not reach the server")}finally{r(!1)}},[]);return F.useEffect(()=>{f()},[f]),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:f,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(gc,{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(m=>i.jsxDEV(Eme,{device:m},m.sessionId||m.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)},kme=()=>{const[s,e]=F.useState(null),[t,r]=F.useState(!1),[n,o]=F.useState(null),[a,c]=F.useState(!0),[u,d]=F.useState(null),[f,m]=F.useState(!1),[y,b]=F.useState(!1),N=F.useCallback(async()=>{try{const E=await fetch(Nme),k=await E.json();if(E.ok&&k.success&&k.data){const U=k.data,V=U.connectionStatus==="connected";return r(V),V&&o(U.tier??null),V}}catch{}return r(!1),o(null),!1},[]),j=F.useCallback(async()=>{const E=localStorage.getItem(Db);if(!E){c(!1);return}try{const k=await fetch(xme,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${E}`}}),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)}},[]);F.useEffect(()=>{(async()=>{await N(),await j()})()},[N,j]);const v=()=>{const E=`${window.location.origin}/auth/callback`;window.location.href=E$(E)},x=F.useCallback(async E=>{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:E,...k&&{refreshToken:k}})})}catch{}},[]);F.useEffect(()=>{const E=localStorage.getItem(Db);E&&s&&x(E)},[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=E=>{switch(E){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(IT,{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(IT,{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(gc,{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:()=>m(!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:()=>b(!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(tA,{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(_me,{},void 0,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Settings/CloudTab.tsx",lineNumber:581,columnNumber:11},globalThis),i.jsxDEV(gme,{isOpen:f,onClose:()=>m(!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(wme,{isOpen:y,onClose:()=>b(!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(wT,{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:v,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(eA,{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)},Cme=new Set(["general","roles","skills","integrations","api-keys","cloud"]),Ame=()=>{const[s]=$C(),e=s.get("tab"),t=e&&Cme.has(e)?e:"general",[r,n]=F.useState(t),o=[{id:"general",label:"General",icon:r9},{id:"roles",label:"Roles",icon:xx},{id:"skills",label:"Skills",icon:a9},{id:"integrations",label:"Integrations",icon:tA},{id:"api-keys",label:"API Keys",icon:OR},{id:"cloud",label:"Cloud",icon:IT}],a=()=>{switch(r){case"general":return i.jsxDEV(Hfe,{},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(Xfe,{},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(Jfe,{},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(lme,{},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(ume,{},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(kme,{},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)},Wf="/api/chat";class Mme{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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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(`${Wf}/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 Xu=new Mme,SH=F.createContext(null),Ume=({children:s})=>{const[e,t]=F.useState([]),[r,n]=F.useState(null),[o,a]=F.useState([]),[c,u]=F.useState(!0),[d,f]=F.useState(!1),[m,y]=F.useState(null),[b,N]=F.useState(!1),[j,v]=F.useState(null),[x,D]=F.useState(!1),[T,E]=F.useState(!1),k=F.useRef(null);F.useEffect(()=>{k.current=r},[r]);const U=F.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(me=>me.id===X.id)?ae:[...ae,X]),N(!1)),t(ae=>ae.map(me=>me.id===X.conversationId?{...me,lastMessage:{content:X.content.slice(0,100),timestamp:X.timestamp,from:X.from},messageCount:me.messageCount+1,updatedAt:X.timestamp}:me))},[]),V=F.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=F.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 me=ae.findIndex(ee=>ee.id===X.id);if(me>=0){const ee=[...ae];return ee[me]=X,ee}return[X,...ae]});const se=k.current;(se==null?void 0:se.id)===X.id&&n(X)},[]);F.useEffect(()=>(or.on("chat_message",U),or.on("chat_typing",V),or.on("conversation_updated",M),or.subscribeToChat(),()=>{or.off("chat_message",U),or.off("chat_typing",V),or.off("conversation_updated",M),or.unsubscribeFromChat()}),[U,V,M]),F.useEffect(()=>{(async()=>{u(!0);try{const[X,z]=await Promise.all([Xu.getConversations(),Xu.getCurrentConversation()]);if(t(X),z){n(z);const se=await Xu.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=F.useCallback(async Z=>{if(!(!Z.trim()||d)){f(!0),y(null);try{const X=await Xu.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{f(!1)}}},[d,r]),L=F.useCallback(async Z=>{const X=e.find(z=>z.id===Z);if(X){n(X),u(!0),y(null);try{const z=await Xu.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=F.useCallback(async Z=>{const X=await Xu.createConversation(Z);return t(z=>[X,...z]),n(X),a([]),X},[]),O=F.useCallback(async Z=>{if(await Xu.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=F.useCallback(async Z=>{if(await Xu.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=F.useCallback(async Z=>{await Xu.clearConversation(Z),(r==null?void 0:r.id)===Z&&a([])},[r]),le=F.useCallback(async()=>{if(!r)return;const Z=await Xu.getMessagesWithMeta(r.id);a(Z.messages),D(Z.hasMore)},[r]),te=F.useCallback(async()=>{if(!(!r||!x||T)){E(!0);try{const Z=o[0];if(!Z)return;const X=await Xu.getMessagesWithMeta(r.id,50,Z.timestamp);X.messages.length>0&&a(z=>{const se=new Set(z.map(me=>me.id));return[...X.messages.filter(me=>!se.has(me.id)),...z]}),D(X.hasMore)}catch(Z){y(Z instanceof Error?Z.message:"Failed to load older messages")}finally{E(!1)}}},[r,x,T,o]),ne=F.useCallback(()=>{y(null)},[]),q={conversations:e,currentConversation:r,messages:o,isLoading:c,isSending:d,error:m,isTyping:b,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:v};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)},_5=()=>{const s=F.useContext(SH);if(!s)throw new Error("useChat must be used within a ChatProvider");return s},VV={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 Rme=[{key:null,label:"All"},...Object.entries(VV).map(([s,{icon:e,label:t}])=>({key:s,label:t,icon:e}))],Vme=({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=Rme.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=VV[s]??VV.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)},fi={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 Fme(Math.abs(r));if(r<fi.MINUTE)return"just now";if(r<fi.HOUR){const n=Math.floor(r/fi.MINUTE);return`${n} ${n===1?"minute":"minutes"} ago`}if(r<fi.DAY){const n=Math.floor(r/fi.HOUR);return`${n} ${n===1?"hour":"hours"} ago`}if(r<fi.DAY*2)return"Yesterday";if(r<fi.WEEK)return`${Math.floor(r/fi.DAY)} days ago`;if(r<fi.MONTH){const n=Math.floor(r/fi.WEEK);return`${n} ${n===1?"week":"weeks"} ago`}if(r<fi.YEAR){const n=Math.floor(r/fi.MONTH);return`${n} ${n===1?"month":"months"} ago`}return Ime(t)}function Fme(s){if(s<fi.MINUTE)return"in a moment";if(s<fi.HOUR){const t=Math.floor(s/fi.MINUTE);return`in ${t} ${t===1?"minute":"minutes"}`}if(s<fi.DAY){const t=Math.floor(s/fi.HOUR);return`in ${t} ${t===1?"hour":"hours"}`}return s<fi.DAY*2?"Tomorrow":`in ${Math.floor(s/fi.DAY)} days`}function Ime(s,e={}){const t={month:"short",day:"numeric",year:"numeric",...e};return s.toLocaleDateString(void 0,t)}const Lme=({conversation:s,isActive:e,onClick:t})=>{var c,u,d,f,m,y,b;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=((m=(f=s.lastMessage)==null?void 0:f.from)==null?void 0:m.name)??((b=(y=s.lastMessage)==null?void 0:y.from)==null?void 0:b.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 Pme=({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(Vme,{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(Lme,{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 Ome(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 Bme(s){switch(s.from.type){case"user":return"👤";case"orchestrator":return"🤖";case"agent":return"🔧";case"system":return"ℹ️";default:return"💬"}}function Hme(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
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:zme(t)},r,!1,{fileName:"/Users/yellowsunhy/Desktop/projects/crewly-projects/crewly/frontend/src/components/Chat/ChatMessage.tsx",lineNumber:90,columnNumber:7},this)})}function zme(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(mn.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 Gme=({message:s})=>{var u,d,f;const[e,t]=F.useState(!1),r=s.from.type==="user",n=s.from.type==="system",o=!!((u=s.metadata)!=null&&u.rawOutput),a=()=>{var m;return e&&((m=s.metadata)!=null&&m.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:Hme(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:Bme(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:Ome(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),((f=s.metadata)==null?void 0:f.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 Wme=({disabled:s=!1,disabledPlaceholder:e,placeholder:t})=>{const{sendMessage:r,isSending:n,error:o,clearError:a}=_5(),[c,u]=F.useState(""),d=F.useRef(null);F.useEffect(()=>{const N=d.current;N&&(N.style.height="auto",N.style.height=`${Math.min(N.scrollHeight,200)}px`)},[c]);const f=s||n,m=async()=>{if(!c.trim()||f)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(),m())},b=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:b,onKeyDown:y,placeholder:s&&e?e:t??"Type a message... (Enter to send, Shift+Enter for new line)",disabled:f,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:m,disabled:!c.trim()||f,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 Kme=()=>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 Xme=60;function qme(s,e){return s.length<=e?s:s.slice(0,e)+"..."}function Zme(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 Yme=()=>{const[s,e]=F.useState(null),[t,r]=F.useState([]),[n,o]=F.useState(!1),[a,c]=F.useState(new Set);F.useEffect(()=>{let U=!1;async function V(){try{const[M,R]=await Promise.all([ss.getQueueStatus(),ss.getPendingMessages()]);U||(e(M),r(R))}catch{}}return V(),()=>{U=!0}},[]);const u=F.useCallback(U=>{e(U)},[]),d=F.useCallback(U=>{r(V=>V.some(M=>M.id===U.id)?V:[...V,U])},[]),f=F.useCallback(U=>{r(V=>V.map(M=>M.id===U.id?{...M,status:"processing",processingStartedAt:U.processingStartedAt}:M))},[]),m=F.useCallback(U=>{r(V=>V.filter(M=>M.id!==U.id))},[]),y=F.useCallback(U=>{r(V=>V.filter(M=>M.id!==U.id))},[]),b=F.useCallback(U=>{r(V=>V.filter(M=>M.id!==U.id)),c(V=>{const M=new Set(V);return M.delete(U.id),M})},[]);F.useEffect(()=>(or.on("queue:status_update",u),or.on("queue:message_enqueued",d),or.on("queue:message_processing",f),or.on("queue:message_completed",m),or.on("queue:message_failed",y),or.on("queue:message_cancelled",b),()=>{or.off("queue:status_update",u),or.off("queue:message_enqueued",d),or.off("queue:message_processing",f),or.off("queue:message_completed",m),or.off("queue:message_failed",y),or.off("queue:message_cancelled",b)}),[u,d,f,m,y,b]);const N=async U=>{c(V=>new Set(V).add(U));try{await ss.cancelQueueMessage(U)}catch{c(V=>{const M=new Set(V);return M.delete(U),M})}},[j,v]=F.useState(!1),x=async()=>{v(!0);try{await ss.clearQueue(),r([]),e(null)}catch{}finally{v(!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 E=[];D>0&&E.push(`${D} queued`),T&&E.push("1 processing");const k=E.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:qme(U.content,Xme)},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:Zme(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 Jme=[/^[\s⏺❯▸▶►›»─━┄┅┈┉╌╍═│┃┆┇┊┋╎╏║┌┐└┘├┤┬┴┼╔╗╚╝╠╣╦╩╬╭╮╰╯\s]*$/,/bypass permissions on/i,/shift\+tab to cycle/i,/esc to interrupt/i,/^\s*▸▸\s/];function $me(s){const e=s.trim();return e?Jme.some(t=>t.test(e)):!0}function Qme(s){return s.filter(e=>!(e.from.type!=="user"&&e.from.type!=="orchestrator"||$me(e.content)))}const epe=({conversation:s,onBack:e})=>{const{messages:t,isLoading:r,error:n,isTyping:o,hasMoreMessages:a,isLoadingMore:c,loadOlderMessages:u}=_5(),d=Qme(t),{status:f,isLoading:m}=f6(),y=F.useRef(null),b=F.useRef(null),[N,j]=F.useState(!1),v=F.useCallback(()=>{requestAnimationFrame(()=>{var E;(E=b.current)==null||E.scrollIntoView({behavior:"auto"})})},[]);F.useEffect(()=>{v()},[d,o,v]);const x=F.useCallback(()=>{const E=y.current;if(!E)return;const k=E.scrollHeight-E.scrollTop-E.clientHeight;if(j(k>100),E.scrollTop<50&&a&&!c){const U=E.scrollHeight;u().then(()=>{requestAnimationFrame(()=>{const V=E.scrollHeight;E.scrollTop=V-U})})}},[a,c,u]),D=!m&&f&&!f.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(Yme,{},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:(f==null?void 0:f.offlineMessage)||(f==null?void 0:f.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(E=>i.jsxDEV(Gme,{message:E},E.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(Kme,{},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:b,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:v,"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(Wme,{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 tpe=()=>{const{conversations:s,currentConversation:e,selectConversation:t,channelFilter:r,setChannelFilter:n}=_5(),[o,a]=F.useState("list"),c=F.useCallback(async d=>{await t(d),a("detail")},[t]),u=F.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(Pme,{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(epe,{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 rpe(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 spe(s){return(await ar.post(`${ev}/${s}/install`)).data}async function npe(s){return(await ar.post(`${ev}/${s}/uninstall`)).data}async function ope(s){return(await ar.post(`${ev}/${s}/update`)).data}async function vB(){await ar.post(`${ev}/refresh`)}async function ipe(s){const e=s?`?status=${s}`:"";return(await ar.get(`${ev}/submissions${e}`)).data.data}async function ape(s,e,t){return(await ar.post(`${ev}/submissions/${s}/review`,{action:e,notes:t})).data}const lpe=4e3;function cpe(){const[s,e]=F.useState([]),t=F.useRef(0),r=F.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(f=>f.id!==c))},lpe)},[]),n=F.useCallback(o=>{e(a=>a.filter(c=>c.id!==o))},[]);return{toasts:s,addToast:r,dismissToast:n}}const upe={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 dpe({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 ${upe[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(In,{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 hpe=[{label:"All",value:"all"},{label:"Skills",value:"skill"},{label:"3D Models",value:"model"},{label:"Roles",value:"role"},{label:"MCP Tools",value:"mcp_tool"}],fpe=[{label:"Popular",value:"popular"},{label:"Highest Rated",value:"rating"},{label:"Newest",value:"newest"}];function mpe(s){return s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}const ppe={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 ype(){const[s,e]=F.useState("browse"),[t,r]=F.useState([]),[n,o]=F.useState([]),[a,c]=F.useState(!0),[u,d]=F.useState("all"),[f,m]=F.useState(""),[y,b]=F.useState("popular"),[N,j]=F.useState(null),[v,x]=F.useState(null),{toasts:D,addToast:T,dismissToast:E}=cpe(),k=F.useCallback(async()=>{try{c(!0),x(null);const O=await rpe({type:u==="all"?void 0:u,search:f||void 0,sort:y});r(O)}catch{x("Failed to load marketplace items")}finally{c(!1)}},[u,f,y]);F.useEffect(()=>{k()},[k]);const U=async O=>{j(O);try{const H=await spe(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)},V=async O=>{j(O);try{const H=await npe(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 ope(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=F.useCallback(async()=>{try{c(!0),x(null);const O=await ipe();o(O)}catch{x("Failed to load submissions")}finally{c(!1)}},[]);F.useEffect(()=>{s==="submissions"&&L()},[s,L]);const B=async(O,H)=>{j(O);try{const Y=await ape(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(gc,{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:hpe.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(KV,{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:f,onChange:O=>m(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=>b(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:fpe.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):v?i.jsxDEV("div",{className:"text-center py-16 text-red-400",role:"alert",children:v},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 ${ppe[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(zV,{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),mpe(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:()=>V(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:()=>V(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):v?i.jsxDEV("div",{className:"text-center py-16 text-red-400",role:"alert",children:v},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(Qc,{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($c,{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(Xk,{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($c,{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(dpe,{toasts:D,onDismiss:E},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 gpe({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 bpe({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 vpe(s){try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch{return s}}function wpe({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(KV,{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(Xw,{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:vpe(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 xpe(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 Npe({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(xx,{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(Qc,{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),xpe(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(ij,{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 Dpe=["SOPs","Team Norms","Architecture","Onboarding","Runbooks","General"];function wB({document:s,categories:e,saving:t,onSave:r,onCancel:n}){const[o,a]=F.useState((s==null?void 0:s.title)||""),[c,u]=F.useState((s==null?void 0:s.content)||""),[d,f]=F.useState((s==null?void 0:s.category)||"General"),[m,y]=F.useState((s==null?void 0:s.tags.join(", "))||""),b=[...new Set([...Dpe,...e])].sort(),N=v=>{v.preventDefault();const x=m.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(In,{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(oj,{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:v=>a(v.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:v=>f(v.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:b.map(v=>i.jsxDEV("option",{value:v,children:v},v,!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:m,onChange:v=>y(v.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:v=>u(v.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 Tpe(){const[s,e]=$C(),[t,r]=F.useState(s.get("project")?"project":"global"),[n,o]=F.useState([]),[a,c]=F.useState(""),[u,d]=F.useState([]),[f,m]=F.useState([]),[y,b]=F.useState(""),[N,j]=F.useState(""),[v,x]=F.useState(!0),[D,T]=F.useState("list"),[E,k]=F.useState(),[U,V]=F.useState(null),[M,R]=F.useState(!1),[L,B]=F.useState(null);F.useEffect(()=>{ss.getProjects().then(o).catch(()=>{})},[]),F.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=F.useCallback(async()=>{try{if(x(!0),B(null),t==="project"&&!a){d([]),m([]),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),m(X)}catch{B("Failed to load documents")}finally{x(!1)}},[t,a,y,N]);F.useEffect(()=>{O()},[O]);const H=Z=>{r(Z),k(void 0),V(null),T("list"),Z==="global"&&(c(""),e({}))},Y=Z=>{c(Z),k(void 0),V(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);V(X),T("view")}catch{B("Failed to load document")}},te=()=>{k(void 0),V(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),V(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(gpe,{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(bpe,{categories:f,selectedCategory:y,onCategoryChange:b},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(wpe,{documents:u,loading:v,searchQuery:N,onSearchChange:j,selectedDocId:E,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(Npe,{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:f,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:f,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"&&!v&&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 jpe="/api",Spe=5e3;function Epe(){const[s,e]=F.useState([]),[t,r]=F.useState(!0),[n,o]=F.useState(null),a=F.useRef(!0),c=F.useCallback(async()=>{try{const f=await ar.get(`${jpe}/monitoring/pty-status`);if(!a.current)return;if(f.data.success&&Array.isArray(f.data.data)){const m=f.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(m),o(null)}else e([])}catch{a.current&&(o("Failed to fetch PTY sessions"),e([]))}},[]);F.useEffect(()=>{a.current=!0,(async()=>{await c(),a.current&&r(!1)})();const m=setInterval(c,Spe);return()=>{a.current=!1,clearInterval(m)}},[c]);const u={totalAgents:s.length,isolatedCount:s.length,sharedCount:0,status:(s.length>0,"healthy")},d=F.useCallback(async()=>{await c()},[c]);return{sessions:s,summary:u,loading:t,error:n,refresh:d}}const _pe="/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 kpe(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 Cpe(){const[s,e]=F.useState([]),[t,r]=F.useState({}),[n,o]=F.useState(!0),[a,c]=F.useState(null),u=F.useCallback(async y=>{try{const b=await ar.get(`${_pe}/approvals/audit`,{signal:y});if(b.data.success&&Array.isArray(b.data.data)){const N=b.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:kpe(j.action||j.outcome),riskLevel:j.riskLevel||"medium",reason:j.reason}));e(N),c(null)}else e(xB)}catch(b){if(ar.isCancel(b))return;e(xB),c(null)}finally{o(!1)}},[]);F.useEffect(()=>{const y=new AbortController;return u(y.signal),()=>y.abort()},[u]);const d=F.useMemo(()=>s.filter(y=>!(t.agent&&y.agentName.toLowerCase()!==t.agent.toLowerCase()||t.outcome&&y.outcome!==t.outcome)),[s,t]),f=F.useMemo(()=>{const y=new Date().toDateString(),b=s.filter(N=>new Date(N.timestamp).toDateString()===y);return{totalToday:b.length,deniedToday:b.filter(N=>N.outcome==="denied").length,bypassedToday:0,status:"enforced"}},[s]),m=F.useCallback(async()=>{o(!0),await u()},[u]);return{events:s,filteredEvents:d,summary:f,filter:t,setFilter:r,loading:n,error:a,refresh:m}}const Ape="/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 FV(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 Mpe(){const[s,e]=F.useState([]),[t,r]=F.useState(!0),[n,o]=F.useState(null),a=F.useCallback(async d=>{try{const f=await ar.get(`${Ape}/system/storage`,{signal:d});f.data.success&&Array.isArray(f.data.data)?(e(f.data.data),o(null)):e(NB)}catch(f){if(ar.isCancel(f))return;e(NB),o(null)}finally{r(!1)}},[]);F.useEffect(()=>{const d=new AbortController;return a(d.signal),()=>d.abort()},[a]);const c=F.useMemo(()=>({totalLocalBytes:s.filter(f=>!f.isExternal).reduce((f,m)=>f+m.sizeBytes,0),externalConnections:s.filter(f=>f.isExternal).length,cloudSync:"disabled",status:"secure",lastScan:new Date().toISOString()}),[s]),u=F.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 Upe(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]=F.useState(!0),[n,o]=F.useState(null),a=()=>r(d=>!d),c=d=>{o(f=>f===d?null:d)},u=(d,f)=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),c(f))};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(QC,{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(um,{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,f)=>i.jsxDEV("div",{children:[i.jsxDEV("div",{role:"button",tabIndex:0,onClick:()=>c(d.sessionName),onKeyDown:m=>u(m,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[f%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: ",Upe(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),f<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(In,{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(In,{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 xk={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 Rpe(s){return new Date(s).toLocaleTimeString("en-US",{hour12:!1})}function Vpe(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
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]=F.useState(!0),[a,c]=F.useState(!1),[u,d]=F.useState(jB),f=F.useMemo(()=>s.slice(0,u),[s,u]),m=F.useMemo(()=>Array.from(new Set(s.map(x=>x.agentName))),[s]),y=()=>o(x=>!x),b=x=>{t({...e,agent:x}),c(!1)},N=x=>{t({...e,outcome:x}),c(!1)},j=()=>{Vpe(s)},v=()=>{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(QC,{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(um,{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:()=>b(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),m.map(x=>i.jsxDEV("button",{type:"button",onClick:()=>b(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(xk).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:[xk[x].icon," ",xk[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(zV,{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:f.map(x=>{const D=xk[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:Rpe(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:v,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]=F.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(QC,{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(um,{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:FV(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:FV(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 CR={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"},AR={healthy:"HEALTHY",secure:"SECURE",enforced:"ENFORCED",warning:"WARNING",partial:"PARTIAL",error:"ERROR",disabled:"DISABLED",compromised:"COMPROMISED"},MH=()=>{const{sessions:s,summary:e,loading:t}=Epe(),{filteredEvents:r,summary:n,filter:o,setFilter:a,loading:c}=Cpe(),{entries:u,summary:d,loading:f}=Mpe();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(rA,{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 ${CR[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),AR[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),f?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:FV(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 ${CR[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),AR[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 ${CR[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),AR[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:f},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 Fpe=()=>{const[s]=$C(),e=jh();return F.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 Ipe(){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(Fpe,{},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(mJ,{},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(Bfe,{},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(ype,{},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(Tpe,{},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(Ame,{},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(Ume,{children:i.jsxDEV(tpe,{},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)}UR.createRoot(document.getElementById("root")).render(i.jsxDEV(mn.StrictMode,{children:i.jsxDEV(Ipe,{},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-
|
|
5215
|
+
//# sourceMappingURL=index-d4b7d883.js.map
|