cogpit 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/web/assets/{CommandPaletteHost-DfaMCzBW.js → CommandPaletteHost-DLho8Ydr.js} +1 -1
- package/dist/web/assets/{ConfigBrowser-CYyPu1XZ.js → ConfigBrowser-DcRITnFh.js} +1 -1
- package/dist/web/assets/{HighlightedEditor-D0E4fNIR.js → HighlightedEditor-DIp1oA0P.js} +1 -1
- package/dist/web/assets/{KeyboardShortcutsDialog-Cmk72Wcu.js → KeyboardShortcutsDialog-BbU77pdm.js} +1 -1
- package/dist/web/assets/{MobileFileChanges-B5e6WRrN.js → MobileFileChanges-GkG76Ztq.js} +1 -1
- package/dist/web/assets/{PreviewPanel-L5TxNJuc.js → PreviewPanel-B8DbD395.js} +1 -1
- package/dist/web/assets/{ProjectFilesPanel-9mVexNJQ.js → ProjectFilesPanel-nG1bZOL7.js} +1 -1
- package/dist/web/assets/{ProjectSwitcherModal-D37bS3Y8.js → ProjectSwitcherModal-HW-WAt1o.js} +1 -1
- package/dist/web/assets/{TerminalOutput-qo7CUaKh.js → TerminalOutput-Cpqldw8o.js} +1 -1
- package/dist/web/assets/{ThemeSelectorModal-DeKpqiLO.js → ThemeSelectorModal-BZ9ceBWr.js} +1 -1
- package/dist/web/assets/{WorkflowsPanel-Dvy1NPzW.js → WorkflowsPanel-DOOg6Hqp.js} +1 -1
- package/dist/web/assets/{WorktreePanel-DJdlsguj.js → WorktreePanel-JHMvhzQu.js} +1 -1
- package/dist/web/assets/index-9nniVy_T.js +157 -0
- package/dist/web/assets/index-BDtY-qce.css +1 -0
- package/dist/web/assets/{index-vzYZixNy.js → index-BhAAK3QZ.js} +1 -1
- package/dist/web/assets/{index-CyRmDc3P.js → index-D2-ty4Xm.js} +1 -1
- package/dist/web/assets/{index-aYw7Kb2u.js → index-De7cnbso.js} +1 -1
- package/dist/web/assets/{index-C1O8__7w.js → index-L4keTj_3.js} +1 -1
- package/dist/web/assets/vendor-ui-CKSkT7i9.js +912 -0
- package/dist/web/index.html +3 -3
- package/package.json +1 -1
- package/dist/web/assets/index-BnTYSkBh.css +0 -1
- package/dist/web/assets/index-CdXCbj1g.js +0 -157
- package/dist/web/assets/vendor-ui-CevbH8m5.js +0 -907
package/dist/cli.js
CHANGED
|
@@ -14560,7 +14560,7 @@ var init_package = __esm({
|
|
|
14560
14560
|
package_default = {
|
|
14561
14561
|
name: "cogpit",
|
|
14562
14562
|
private: true,
|
|
14563
|
-
version: "2.6.
|
|
14563
|
+
version: "2.6.1",
|
|
14564
14564
|
description: "Control center for Claude Code, OpenAI Codex, and GitHub Copilot CLI sessions",
|
|
14565
14565
|
license: "MIT",
|
|
14566
14566
|
author: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as oe,j as u,r as H}from"./vendor-react-gGw_S5I_.js";import{aj as h,ak as Q,al as le,O as re,J as ce,am as de,an as me,P as ue,C as he,N as ge,x as fe,ao as ve,ap as Y,aq as p,ar as we,as as Ce,at as je,au as Se,w as be}from"./index-CdXCbj1g.js";import{S as ye,l as Z,m as xe,P as Pe,L as Te,H as Oe,F as Ne,n as ke,d as ee,G as Ee,k as Fe,o as Ie,p as $e,q as Re,r as De,s as Ae,t as Le,u as te,v as He,w as Me,x as Be,K as qe,E as Ge,y as Ke,z as ze,A as ne,B as Ue,D as We,I as pe}from"./vendor-ui-CevbH8m5.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";function a(t,e,s,r,i,m,d){return{id:t,label:e,icon:r,run:i,shortcut:m,description:d,value:`${e} ${s}`}}function _(...t){return t.filter(e=>e!==!1&&e!==void 0)}function _e(t){const e=oe.c(40);let s,r,i,m,d,v,w,c,C,g,b,f,y,k,x;if(e[0]!==t){const $=_(a("home","Go to dashboard","home overview",Oe,t.onGoHome),a("mission-control",t.showMission?"Exit Mission Control":"Open Mission Control","live sessions blocked waiting answer everything at once",Te,t.onToggleMissionControl,h("missionControl")),a("new-session","Start a new session","project agent chat create",Pe,t.onNewSession,h("newSession")),t.onDuplicateSession&&a("duplicate-session","Duplicate this session","copy fork clone branch thread",xe,t.onDuplicateSession),t.canFocusComposer&&a("focus-composer","Focus message composer","chat prompt input",Z,t.onFocusComposer,h("focusComposer")),t.onFindInConversation&&a("find-in-conversation","Find in conversation","search text transcript turns matches",ye,t.onFindInConversation,h("findInConversation"))),F=(t.projects??[]).slice(0,8).map(n=>a(`project-${n.dirName}`,n.shortName,`${n.path} ${n.dirName} project workspace`,Ne,()=>{var l;return(l=t.onOpenProject)==null?void 0:l.call(t,n.dirName)},void 0,`${n.path} · ${n.sessionCount} session${n.sessionCount===1?"":"s"}`)),o=(t.recentSessions??[]).slice(0,10).map(n=>{const j=(n.aiTitle||n.name||n.slug||n.lastUserMessage||n.firstUserMessage||n.sessionId).replace(/\s+/g," ").trim().slice(0,160)||n.sessionId,K=[n.projectShortName,n.gitBranch].filter(Boolean).join(" · ");return a(`session-${n.dirName}-${n.fileName}`,j,`${n.projectShortName} ${n.cwd??""} ${n.gitBranch??""} ${n.sessionId} recent thread conversation`,Z,()=>{var B;return(B=t.onOpenSession)==null?void 0:B.call(t,n.dirName,n.fileName)},void 0,K)}),I=t.devices??[],P=I.length>1&&t.onSwitchDevice?I.slice(0,Q.length).map((n,l)=>a(`device-${n.id}`,n.isActive?`${n.name} (current)`:`Switch to ${n.name}`,`device machine host remote ${n.id}`,n.isLocal?ke:ee,()=>{var j;return(j=t.onSwitchDevice)==null?void 0:j.call(t,n.id)},h(Q[l]))):[],R=_(a("toggle-sidebar",t.showSidebar?"Hide session sidebar":"Show session sidebar","projects navigation panel",De,t.onToggleSidebar,h("toggleSidebar")),t.hasSession&&a("toggle-stats",t.showStats?"Hide session details":"Show session details","stats tokens usage panel",Re,t.onToggleStats,h("toggleStats")),t.onToggleProjectFiles&&a("project-files",t.showProjectFiles?"Close project files":"Open project files","browse edit save workspace source code",$e,t.onToggleProjectFiles,h("projectFiles")),t.onToggleBrowser&&a("toggle-browser",t.showBrowser?"Hide browser":"Show browser","web page live view browse panel",Ie,t.onToggleBrowser),t.hasFileChanges&&a("toggle-file-changes",t.showFileChanges?"Hide file changes":"Show file changes","diff edits review panel",Fe,t.onToggleFileChanges),t.supportsWorktrees&&t.canOpenTerminal&&a("toggle-worktrees",t.showWorktrees?"Hide worktrees":"Show worktrees","git branches panel",Ee,t.onToggleWorktrees)),D=_(t.onOpenProjectInEditor&&a("open-project-editor","Open project in editor","code cursor vscode zed workspace",We,t.onOpenProjectInEditor),t.onRevealProject&&a("reveal-project","Reveal project in file manager","finder explorer folder directory",Ue,t.onRevealProject),t.onCopyResumeCommand&&a("copy-resume-command","Copy resume command","cli claude codex copilot terminal clipboard continue session",ne,t.onCopyResumeCommand),t.onCopyProjectPath&&a("copy-project-path","Copy project path","workspace directory clipboard",ne,t.onCopyProjectPath),t.onOpenIntegratedTerminal&&a("integrated-terminal","New integrated terminal","embedded shell command line process panel",ze,t.onOpenIntegratedTerminal,h("newIntegratedTerminal")),t.canOpenTerminal&&a("terminal","Open in system terminal","external shell command line app",Ke,t.onOpenTerminal,h("systemTerminal")),t.onTogglePreview&&a("preview","Toggle development preview","browser localhost dev server website",Ge,t.onTogglePreview,h("preview")),t.onOpenKeyboardShortcuts&&a("keyboard-shortcuts","Customize keyboard shortcuts","keybindings hotkeys settings",qe,t.onOpenKeyboardShortcuts),t.onOpenConfig&&a("config",t.showConfig?"Close agent configuration":"Open agent configuration","skills commands claude settings files",Be,t.onOpenConfig),a("settings","Open Cogpit settings","preferences network",Me,t.onOpenSettings),a("theme","Change theme & chat width","appearance light dark oled width narrow wide",He,t.onOpenTheme,h("themeSelector")),a("expand","Expand all groups","conversation details",te,t.onExpandAll,h("expandAll")),a("expand-payloads","Expand all tool payloads","raw input result diff conversation details",te,t.onExpandToolPayloads,h("expandToolPayloads")),a("collapse","Collapse all","conversation groups payloads details",Le,t.onCollapseAll),t.onKillAll&&a("kill-all","Kill all agent processes","stop terminate halt everything runaway",Ae,t.onKillAll),t.onOpenDevices&&a("manage-devices","Manage devices…","remote machines hub hosts edit rename remove switch",pe,()=>{var n;return(n=t.onOpenDevices)==null?void 0:n.call(t,"manage")}),t.onOpenDevices&&a("add-device","Add device…","remote machine hub host connect pair new",ee,()=>{var n;return(n=t.onOpenDevices)==null?void 0:n.call(t,"add")})),A=[{value:"Navigation",items:$},...o.length>0?[{value:"Recent sessions",items:o}]:[],...F.length>0?[{value:"Projects",items:F}]:[],...P.length>0?[{value:"Devices",items:P}]:[],{value:"View",items:R},{value:"Tools",items:D}],E=function(l){t.onOpenChange(!1),l.run()};i=me,y=t.open,k=t.onOpenChange,x="Command palette",v="Search for a Cogpit action to run.",w="max-w-xl",r=ue,C="Search commands",g=!0,e[16]===Symbol.for("react.memo_cache_sentinel")?(b=u.jsx(he,{"aria-label":"Search commands",autoFocus:!0,placeholder:"Search commands..."}),e[16]=b):b=e[16],e[17]!==t.loadingNavigation?(f=t.loadingNavigation&&u.jsxs("div",{className:"motion-enter flex items-center gap-2 px-3 py-2 text-xs text-muted-foreground",role:"status",children:[u.jsx(le,{className:"size-3.5"}),"Loading projects and sessions..."]}),e[17]=t.loadingNavigation,e[18]=f):f=e[18],s=ge,m="max-h-[min(26rem,60vh)]",e[19]===Symbol.for("react.memo_cache_sentinel")?(d=u.jsx(fe,{children:"No matching actions."}),e[19]=d):d=e[19],c=A.map(n=>u.jsx(re,{heading:n.value,children:n.items.map(l=>{const j=l.icon;return u.jsxs(ce,{value:l.value,onSelect:()=>E(l),children:[u.jsx(j,{"aria-hidden":"true"}),u.jsxs("span",{className:"min-w-0 flex-1",children:[u.jsx("span",{className:"block truncate",children:l.label}),l.description&&u.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:l.description})]}),l.shortcut&&u.jsx(de,{children:l.shortcut})]},l.id)})},n.value)),e[0]=t,e[1]=s,e[2]=r,e[3]=i,e[4]=m,e[5]=d,e[6]=v,e[7]=w,e[8]=c,e[9]=C,e[10]=g,e[11]=b,e[12]=f,e[13]=y,e[14]=k,e[15]=x}else s=e[1],r=e[2],i=e[3],m=e[4],d=e[5],v=e[6],w=e[7],c=e[8],C=e[9],g=e[10],b=e[11],f=e[12],y=e[13],k=e[14],x=e[15];let T;e[20]!==s||e[21]!==m||e[22]!==d||e[23]!==c?(T=u.jsxs(s,{className:m,children:[d,c]}),e[20]=s,e[21]=m,e[22]=d,e[23]=c,e[24]=T):T=e[24];let O;e[25]!==r||e[26]!==T||e[27]!==C||e[28]!==g||e[29]!==b||e[30]!==f?(O=u.jsxs(r,{label:C,loop:g,children:[b,f,T]}),e[25]=r,e[26]=T,e[27]=C,e[28]=g,e[29]=b,e[30]=f,e[31]=O):O=e[31];let N;return e[32]!==i||e[33]!==v||e[34]!==w||e[35]!==O||e[36]!==y||e[37]!==k||e[38]!==x?(N=u.jsx(i,{open:y,onOpenChange:k,title:x,description:v,className:w,children:O}),e[32]=i,e[33]=v,e[34]=w,e[35]=O,e[36]=y,e[37]=k,e[38]=x,e[39]=N):N=e[39],N}async function ae(t,e){const s=await be(t,{signal:e});if(!s.ok)throw new Error(`Request failed (${s.status})`);const r=await s.json();return Array.isArray(r)?r:[]}function Ze(t){var V;const e=oe.c(48);let s,r,i,m,d,v;e[0]!==t?({open:i,currentProjectDirName:s,projectCwd:d,onProcessStarted:r,launchTerminalRequest:v,...m}=t,e[0]=t,e[1]=s,e[2]=r,e[3]=i,e[4]=m,e[5]=d,e[6]=v):(s=e[1],r=e[2],i=e[3],m=e[4],d=e[5],v=e[6]);const w=v===void 0?0:v,c=ve();let C;e[7]===Symbol.for("react.memo_cache_sentinel")?(C=[],e[7]=C):C=e[7];const[g,b]=H.useState(C);let f;e[8]===Symbol.for("react.memo_cache_sentinel")?(f=[],e[8]=f):f=e[8];const[y,k]=H.useState(f),[x,T]=H.useState(!1),O=H.useRef(0);let N,$;e[9]!==i?(N=()=>{if(!i)return;const S=new AbortController;return T(!0),Promise.allSettled([ae("/api/projects",S.signal),ae("/api/active-sessions?limit=12&perProject=3",S.signal)]).then(M=>{const[J,X]=M;S.signal.aborted||(b(J.status==="fulfilled"?J.value:[]),k(X.status==="fulfilled"?X.value:[]),T(!1))}),()=>S.abort()},$=[i],e[9]=i,e[10]=N,e[11]=$):(N=e[10],$=e[11]),H.useEffect(N,$);let F;e:{if(d){F=d;break e}if(!s){F=null;break e}let S;e[12]!==s||e[13]!==g?(S=((V=g.find(M=>M.dirName===s))==null?void 0:V.path)??null,e[12]=s,e[13]=g,e[14]=S):S=e[14],F=S}const o=F;let I;e[15]!==r||e[16]!==c||e[17]!==o?(I=()=>{if(!o)return;const S=c.spawnTerminal({cwd:o}),M=o.replace(/\/+$/,"").split("/").at(-1)||"Terminal";r({id:S,name:M,type:"terminal",status:"running",source:o})},e[15]=r,e[16]=c,e[17]=o,e[18]=I):I=e[18];const P=I;let R,D;e[19]!==P||e[20]!==w||e[21]!==c.status||e[22]!==o?(R=()=>{w<=O.current||!o||c.status!=="connected"||(O.current=w,P())},D=[P,w,c.status,o],e[19]=P,e[20]=w,e[21]=c.status,e[22]=o,e[23]=R,e[24]=D):(R=e[23],D=e[24]),H.useEffect(R,D);let A;e[25]!==s||e[26]!==o?(A={path:o,dirName:s},e[25]=s,e[26]=o,e[27]=A):A=e[27];const E=A;let n;e[28]!==E?(n=()=>Ce(E),e[28]=E,e[29]=n):n=e[29];const l=n;let j;e[30]!==E?(j=()=>je(E),e[30]=E,e[31]=j):j=e[31];const K=j,B=!Y()&&p("hostFiles"),se=p("hostFiles")&&(!Y()||we());let q;e[32]!==o?(q=()=>{o&&Se(o)},e[32]=o,e[33]=q):q=e[33];const ie=q;let L;e[34]!==P||e[35]!==c.status||e[36]!==o?(L=o&&c.status==="connected"&&p("terminal")?P:void 0,e[34]=P,e[35]=c.status,e[36]=o,e[37]=L):L=e[37];const z=o&&se?l:void 0,U=o&&B?K:void 0,W=o?ie:void 0;let G;return e[38]!==x||e[39]!==i||e[40]!==m||e[41]!==g||e[42]!==y||e[43]!==L||e[44]!==z||e[45]!==U||e[46]!==W?(G=u.jsx(_e,{...m,open:i,projects:g,recentSessions:y,loadingNavigation:x,onOpenIntegratedTerminal:L,onOpenProjectInEditor:z,onRevealProject:U,onCopyProjectPath:W}),e[38]=x,e[39]=i,e[40]=m,e[41]=g,e[42]=y,e[43]=L,e[44]=z,e[45]=U,e[46]=W,e[47]=G):G=e[47],G}export{Ze as CommandPaletteHost};
|
|
1
|
+
import{c as oe,j as u,r as H}from"./vendor-react-gGw_S5I_.js";import{aj as h,ak as Q,al as le,O as re,J as ce,am as de,an as me,P as ue,C as he,N as ge,x as fe,ao as ve,ap as Y,aq as p,ar as we,as as Ce,at as je,au as Se,w as be}from"./index-9nniVy_T.js";import{S as ye,l as Z,m as xe,P as Pe,L as Te,H as Oe,F as Ne,n as ke,d as ee,G as Ee,k as Fe,o as Ie,p as $e,q as Re,r as De,s as Ae,t as Le,u as te,v as He,w as Me,x as Be,K as qe,E as Ge,y as Ke,z as ze,A as ne,B as Ue,D as We,I as pe}from"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";function a(t,e,s,r,i,m,d){return{id:t,label:e,icon:r,run:i,shortcut:m,description:d,value:`${e} ${s}`}}function _(...t){return t.filter(e=>e!==!1&&e!==void 0)}function _e(t){const e=oe.c(40);let s,r,i,m,d,v,w,c,C,g,b,f,y,k,x;if(e[0]!==t){const $=_(a("home","Go to dashboard","home overview",Oe,t.onGoHome),a("mission-control",t.showMission?"Exit Mission Control":"Open Mission Control","live sessions blocked waiting answer everything at once",Te,t.onToggleMissionControl,h("missionControl")),a("new-session","Start a new session","project agent chat create",Pe,t.onNewSession,h("newSession")),t.onDuplicateSession&&a("duplicate-session","Duplicate this session","copy fork clone branch thread",xe,t.onDuplicateSession),t.canFocusComposer&&a("focus-composer","Focus message composer","chat prompt input",Z,t.onFocusComposer,h("focusComposer")),t.onFindInConversation&&a("find-in-conversation","Find in conversation","search text transcript turns matches",ye,t.onFindInConversation,h("findInConversation"))),F=(t.projects??[]).slice(0,8).map(n=>a(`project-${n.dirName}`,n.shortName,`${n.path} ${n.dirName} project workspace`,Ne,()=>{var l;return(l=t.onOpenProject)==null?void 0:l.call(t,n.dirName)},void 0,`${n.path} · ${n.sessionCount} session${n.sessionCount===1?"":"s"}`)),o=(t.recentSessions??[]).slice(0,10).map(n=>{const j=(n.aiTitle||n.name||n.slug||n.lastUserMessage||n.firstUserMessage||n.sessionId).replace(/\s+/g," ").trim().slice(0,160)||n.sessionId,K=[n.projectShortName,n.gitBranch].filter(Boolean).join(" · ");return a(`session-${n.dirName}-${n.fileName}`,j,`${n.projectShortName} ${n.cwd??""} ${n.gitBranch??""} ${n.sessionId} recent thread conversation`,Z,()=>{var B;return(B=t.onOpenSession)==null?void 0:B.call(t,n.dirName,n.fileName)},void 0,K)}),I=t.devices??[],P=I.length>1&&t.onSwitchDevice?I.slice(0,Q.length).map((n,l)=>a(`device-${n.id}`,n.isActive?`${n.name} (current)`:`Switch to ${n.name}`,`device machine host remote ${n.id}`,n.isLocal?ke:ee,()=>{var j;return(j=t.onSwitchDevice)==null?void 0:j.call(t,n.id)},h(Q[l]))):[],R=_(a("toggle-sidebar",t.showSidebar?"Hide session sidebar":"Show session sidebar","projects navigation panel",De,t.onToggleSidebar,h("toggleSidebar")),t.hasSession&&a("toggle-stats",t.showStats?"Hide session details":"Show session details","stats tokens usage panel",Re,t.onToggleStats,h("toggleStats")),t.onToggleProjectFiles&&a("project-files",t.showProjectFiles?"Close project files":"Open project files","browse edit save workspace source code",$e,t.onToggleProjectFiles,h("projectFiles")),t.onToggleBrowser&&a("toggle-browser",t.showBrowser?"Hide browser":"Show browser","web page live view browse panel",Ie,t.onToggleBrowser),t.hasFileChanges&&a("toggle-file-changes",t.showFileChanges?"Hide file changes":"Show file changes","diff edits review panel",Fe,t.onToggleFileChanges),t.supportsWorktrees&&t.canOpenTerminal&&a("toggle-worktrees",t.showWorktrees?"Hide worktrees":"Show worktrees","git branches panel",Ee,t.onToggleWorktrees)),D=_(t.onOpenProjectInEditor&&a("open-project-editor","Open project in editor","code cursor vscode zed workspace",We,t.onOpenProjectInEditor),t.onRevealProject&&a("reveal-project","Reveal project in file manager","finder explorer folder directory",Ue,t.onRevealProject),t.onCopyResumeCommand&&a("copy-resume-command","Copy resume command","cli claude codex copilot terminal clipboard continue session",ne,t.onCopyResumeCommand),t.onCopyProjectPath&&a("copy-project-path","Copy project path","workspace directory clipboard",ne,t.onCopyProjectPath),t.onOpenIntegratedTerminal&&a("integrated-terminal","New integrated terminal","embedded shell command line process panel",ze,t.onOpenIntegratedTerminal,h("newIntegratedTerminal")),t.canOpenTerminal&&a("terminal","Open in system terminal","external shell command line app",Ke,t.onOpenTerminal,h("systemTerminal")),t.onTogglePreview&&a("preview","Toggle development preview","browser localhost dev server website",Ge,t.onTogglePreview,h("preview")),t.onOpenKeyboardShortcuts&&a("keyboard-shortcuts","Customize keyboard shortcuts","keybindings hotkeys settings",qe,t.onOpenKeyboardShortcuts),t.onOpenConfig&&a("config",t.showConfig?"Close agent configuration":"Open agent configuration","skills commands claude settings files",Be,t.onOpenConfig),a("settings","Open Cogpit settings","preferences network",Me,t.onOpenSettings),a("theme","Change theme & chat width","appearance light dark oled width narrow wide",He,t.onOpenTheme,h("themeSelector")),a("expand","Expand all groups","conversation details",te,t.onExpandAll,h("expandAll")),a("expand-payloads","Expand all tool payloads","raw input result diff conversation details",te,t.onExpandToolPayloads,h("expandToolPayloads")),a("collapse","Collapse all","conversation groups payloads details",Le,t.onCollapseAll),t.onKillAll&&a("kill-all","Kill all agent processes","stop terminate halt everything runaway",Ae,t.onKillAll),t.onOpenDevices&&a("manage-devices","Manage devices…","remote machines hub hosts edit rename remove switch",pe,()=>{var n;return(n=t.onOpenDevices)==null?void 0:n.call(t,"manage")}),t.onOpenDevices&&a("add-device","Add device…","remote machine hub host connect pair new",ee,()=>{var n;return(n=t.onOpenDevices)==null?void 0:n.call(t,"add")})),A=[{value:"Navigation",items:$},...o.length>0?[{value:"Recent sessions",items:o}]:[],...F.length>0?[{value:"Projects",items:F}]:[],...P.length>0?[{value:"Devices",items:P}]:[],{value:"View",items:R},{value:"Tools",items:D}],E=function(l){t.onOpenChange(!1),l.run()};i=me,y=t.open,k=t.onOpenChange,x="Command palette",v="Search for a Cogpit action to run.",w="max-w-xl",r=ue,C="Search commands",g=!0,e[16]===Symbol.for("react.memo_cache_sentinel")?(b=u.jsx(he,{"aria-label":"Search commands",autoFocus:!0,placeholder:"Search commands..."}),e[16]=b):b=e[16],e[17]!==t.loadingNavigation?(f=t.loadingNavigation&&u.jsxs("div",{className:"motion-enter flex items-center gap-2 px-3 py-2 text-xs text-muted-foreground",role:"status",children:[u.jsx(le,{className:"size-3.5"}),"Loading projects and sessions..."]}),e[17]=t.loadingNavigation,e[18]=f):f=e[18],s=ge,m="max-h-[min(26rem,60vh)]",e[19]===Symbol.for("react.memo_cache_sentinel")?(d=u.jsx(fe,{children:"No matching actions."}),e[19]=d):d=e[19],c=A.map(n=>u.jsx(re,{heading:n.value,children:n.items.map(l=>{const j=l.icon;return u.jsxs(ce,{value:l.value,onSelect:()=>E(l),children:[u.jsx(j,{"aria-hidden":"true"}),u.jsxs("span",{className:"min-w-0 flex-1",children:[u.jsx("span",{className:"block truncate",children:l.label}),l.description&&u.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:l.description})]}),l.shortcut&&u.jsx(de,{children:l.shortcut})]},l.id)})},n.value)),e[0]=t,e[1]=s,e[2]=r,e[3]=i,e[4]=m,e[5]=d,e[6]=v,e[7]=w,e[8]=c,e[9]=C,e[10]=g,e[11]=b,e[12]=f,e[13]=y,e[14]=k,e[15]=x}else s=e[1],r=e[2],i=e[3],m=e[4],d=e[5],v=e[6],w=e[7],c=e[8],C=e[9],g=e[10],b=e[11],f=e[12],y=e[13],k=e[14],x=e[15];let T;e[20]!==s||e[21]!==m||e[22]!==d||e[23]!==c?(T=u.jsxs(s,{className:m,children:[d,c]}),e[20]=s,e[21]=m,e[22]=d,e[23]=c,e[24]=T):T=e[24];let O;e[25]!==r||e[26]!==T||e[27]!==C||e[28]!==g||e[29]!==b||e[30]!==f?(O=u.jsxs(r,{label:C,loop:g,children:[b,f,T]}),e[25]=r,e[26]=T,e[27]=C,e[28]=g,e[29]=b,e[30]=f,e[31]=O):O=e[31];let N;return e[32]!==i||e[33]!==v||e[34]!==w||e[35]!==O||e[36]!==y||e[37]!==k||e[38]!==x?(N=u.jsx(i,{open:y,onOpenChange:k,title:x,description:v,className:w,children:O}),e[32]=i,e[33]=v,e[34]=w,e[35]=O,e[36]=y,e[37]=k,e[38]=x,e[39]=N):N=e[39],N}async function ae(t,e){const s=await be(t,{signal:e});if(!s.ok)throw new Error(`Request failed (${s.status})`);const r=await s.json();return Array.isArray(r)?r:[]}function Ze(t){var V;const e=oe.c(48);let s,r,i,m,d,v;e[0]!==t?({open:i,currentProjectDirName:s,projectCwd:d,onProcessStarted:r,launchTerminalRequest:v,...m}=t,e[0]=t,e[1]=s,e[2]=r,e[3]=i,e[4]=m,e[5]=d,e[6]=v):(s=e[1],r=e[2],i=e[3],m=e[4],d=e[5],v=e[6]);const w=v===void 0?0:v,c=ve();let C;e[7]===Symbol.for("react.memo_cache_sentinel")?(C=[],e[7]=C):C=e[7];const[g,b]=H.useState(C);let f;e[8]===Symbol.for("react.memo_cache_sentinel")?(f=[],e[8]=f):f=e[8];const[y,k]=H.useState(f),[x,T]=H.useState(!1),O=H.useRef(0);let N,$;e[9]!==i?(N=()=>{if(!i)return;const S=new AbortController;return T(!0),Promise.allSettled([ae("/api/projects",S.signal),ae("/api/active-sessions?limit=12&perProject=3",S.signal)]).then(M=>{const[J,X]=M;S.signal.aborted||(b(J.status==="fulfilled"?J.value:[]),k(X.status==="fulfilled"?X.value:[]),T(!1))}),()=>S.abort()},$=[i],e[9]=i,e[10]=N,e[11]=$):(N=e[10],$=e[11]),H.useEffect(N,$);let F;e:{if(d){F=d;break e}if(!s){F=null;break e}let S;e[12]!==s||e[13]!==g?(S=((V=g.find(M=>M.dirName===s))==null?void 0:V.path)??null,e[12]=s,e[13]=g,e[14]=S):S=e[14],F=S}const o=F;let I;e[15]!==r||e[16]!==c||e[17]!==o?(I=()=>{if(!o)return;const S=c.spawnTerminal({cwd:o}),M=o.replace(/\/+$/,"").split("/").at(-1)||"Terminal";r({id:S,name:M,type:"terminal",status:"running",source:o})},e[15]=r,e[16]=c,e[17]=o,e[18]=I):I=e[18];const P=I;let R,D;e[19]!==P||e[20]!==w||e[21]!==c.status||e[22]!==o?(R=()=>{w<=O.current||!o||c.status!=="connected"||(O.current=w,P())},D=[P,w,c.status,o],e[19]=P,e[20]=w,e[21]=c.status,e[22]=o,e[23]=R,e[24]=D):(R=e[23],D=e[24]),H.useEffect(R,D);let A;e[25]!==s||e[26]!==o?(A={path:o,dirName:s},e[25]=s,e[26]=o,e[27]=A):A=e[27];const E=A;let n;e[28]!==E?(n=()=>Ce(E),e[28]=E,e[29]=n):n=e[29];const l=n;let j;e[30]!==E?(j=()=>je(E),e[30]=E,e[31]=j):j=e[31];const K=j,B=!Y()&&p("hostFiles"),se=p("hostFiles")&&(!Y()||we());let q;e[32]!==o?(q=()=>{o&&Se(o)},e[32]=o,e[33]=q):q=e[33];const ie=q;let L;e[34]!==P||e[35]!==c.status||e[36]!==o?(L=o&&c.status==="connected"&&p("terminal")?P:void 0,e[34]=P,e[35]=c.status,e[36]=o,e[37]=L):L=e[37];const z=o&&se?l:void 0,U=o&&B?K:void 0,W=o?ie:void 0;let G;return e[38]!==x||e[39]!==i||e[40]!==m||e[41]!==g||e[42]!==y||e[43]!==L||e[44]!==z||e[45]!==U||e[46]!==W?(G=u.jsx(_e,{...m,open:i,projects:g,recentSessions:y,loadingNavigation:x,onOpenIntegratedTerminal:L,onOpenProjectInEditor:z,onRevealProject:U,onCopyProjectPath:W}),e[38]=x,e[39]=i,e[40]=m,e[41]=g,e[42]=y,e[43]=L,e[44]=z,e[45]=U,e[46]=W,e[47]=G):G=e[47],G}export{Ze as CommandPaletteHost};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as F,j as t,r as o}from"./vendor-react-gGw_S5I_.js";import{b1 as je,b3 as be,_ as P,U as ye,V as Q,aW as q,Y as Ce,Z as X,a$ as se,B as z,w as L,b4 as ke,b5 as ve,b6 as Ne,b7 as Se,b8 as we,b9 as De,ba as V,bb as Te,bc as Z,bd as Ee,a4 as ee,a9 as ae,be as Re,aa as le,ab as ie,ad as re,ae as oe,af as ce,ag as de,ah as ue,al as Ie,E as Oe,y as ze,z as Ae,G as Le,H as $e,a3 as Be,m as Fe,I as te,n as Ge,W as Me,q as Pe,bf as Ue}from"./index-CdXCbj1g.js";import{aj as _e,z as Ve,h as He,a3 as Ke,ak as We,al as Ye,am as me,o as xe,an as Je,ao as Qe,U as H,X as K,P as qe,ap as fe,aq as Xe,j as Ze,a0 as et,S as tt}from"./vendor-ui-CevbH8m5.js";import{H as nt}from"./HighlightedEditor-D0E4fNIR.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";const st={agent:"bg-muted text-muted-foreground",skill:"bg-muted text-muted-foreground",command:"bg-muted text-muted-foreground",instructions:"bg-muted text-muted-foreground",settings:"bg-muted text-muted-foreground"},at={agents:{subdir:"agents",fileType:"agent"},skills:{subdir:"skills",fileType:"skill"},commands:{subdir:"commands",fileType:"command"}},ne=["instructions","agents","skills","commands","settings"],lt={instructions:{label:"Instructions",icon:We,color:"text-muted-foreground"},agents:{label:"Agents",icon:Ke,color:"text-muted-foreground"},skills:{label:"Skills",icon:He,color:"text-muted-foreground"},commands:{label:"Commands",icon:Ve,color:"text-muted-foreground"},settings:{label:"Settings",icon:_e,color:"text-muted-foreground"}};function W(l,e,i){const n=[];for(const s of l)s.type==="directory"&&s.children?n.push(...W(s.children,e,i)):s.type==="file"&&n.push({name:s.name,path:s.path,fileType:s.fileType||"unknown",description:s.description||"",scope:e,pluginName:i,readOnly:s.readOnly??e==="plugin",cli:s.cli,linkTarget:s.linkTarget});return n}function it(l){const e={instructions:[],agents:[],skills:[],commands:[],settings:[]};for(const i of l){const n=W(i.items,i.scope,i.pluginName);for(const s of n)switch(s.fileType){case"instructions":e.instructions.push(s);break;case"agent":e.agents.push(s);break;case"skill":e.skills.push(s);break;case"command":e.commands.push(s);break;case"settings":default:e.settings.push(s)}}return e}function he(l){const e=F.c(5),{scope:i,pluginName:n}=l;if(i==="plugin"&&n){let r;e[0]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx(Ye,{"data-icon":"inline-start",className:"size-3"}),e[0]=r):r=e[0];let u;return e[1]!==n?(u=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[r,n]}),e[1]=n,e[2]=u):u=e[2],u}if(i==="project"){let r;return e[3]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[t.jsx(me,{"data-icon":"inline-start",className:"size-3"}),"project"]}),e[3]=r):r=e[3],r}let s;return e[4]===Symbol.for("react.memo_cache_sentinel")?(s=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[t.jsx(xe,{"data-icon":"inline-start",className:"size-3"}),"global"]}),e[4]=s):s=e[4],s}const rt=Object.fromEntries(je().map(l=>[l.kind,be(l.kind)]));function pe(l){const e=F.c(10),{cli:i,variant:n}=l,s=n===void 0?"compact":n;if(!i)return null;if(i.length===0){let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=t.jsx(Je,{"data-icon":"inline-start",className:"size-3"}),e[0]=m):m=e[0];const c=s==="full"&&"unlinked";let d;return e[1]!==c?(d=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-warning",title:"Present in the shared source directory but not linked into any CLI",children:[m,c]}),e[1]=c,e[2]=d):d=e[2],d}let r;if(e[3]!==i||e[4]!==s){let m;e[6]!==s?(m=c=>{const d=rt[c];return t.jsx("span",{title:d.label,className:s==="full"?"flex h-5 items-center justify-center rounded border bg-muted px-1.5 text-xs font-medium text-muted-foreground":"flex size-5 items-center justify-center rounded border bg-muted text-xs font-medium text-muted-foreground",children:s==="full"?c:d.letter},c)},e[6]=s,e[7]=m):m=e[7],r=i.map(m),e[3]=i,e[4]=s,e[5]=r}else r=e[5];let u;return e[8]!==r?(u=t.jsx("span",{className:"flex items-center gap-0.5 shrink-0",children:r}),e[8]=r,e[9]=u):u=e[9],u}function ge(l){const e=F.c(10),{linkTarget:i,variant:n,className:s}=l,r=n===void 0?"compact":n;if(!i)return null;let u;e[0]!==s?(u=P("flex min-w-0 shrink-0 items-center gap-1 text-info",s),e[0]=s,e[1]=u):u=e[1];const m=`Symlink → ${i}`;let c;e[2]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx(Qe,{"data-icon":"inline-start",className:"size-3 shrink-0"}),e[2]=c):c=e[2];let d;e[3]!==i||e[4]!==r?(d=r==="full"&&t.jsxs("span",{className:"truncate font-mono text-xs",children:["→ ",i]}),e[3]=i,e[4]=r,e[5]=d):d=e[5];let g;return e[6]!==u||e[7]!==m||e[8]!==d?(g=t.jsxs("span",{className:u,title:m,children:[c,d]}),e[6]=u,e[7]=m,e[8]=d,e[9]=g):g=e[9],g}function ot({globalDir:l,projectDir:e,fileType:i,onCreated:n,onCancel:s}){const[r,u]=o.useState(""),[m,c]=o.useState(e?"project":"global"),[d,g]=o.useState(!1),N=o.useRef(null),k=o.useId();o.useEffect(()=>{var h;(h=N.current)==null||h.focus()},[]);const S=m==="project"&&e?e:l,f=!!l&&!!e;async function w(){if(!(!r.trim()||!S)){g(!0);try{const h=await L("/api/config-browser/create",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dir:S,fileType:i,name:r.trim()})});if(h.ok){const p=await h.json();n(p.path,i,m)}}finally{g(!1)}}}return t.jsxs(ye,{className:"gap-3 px-3 py-2",children:[f&&t.jsxs(Q,{children:[t.jsx(q,{children:"Scope"}),t.jsxs(Ce,{"aria-label":"File scope",value:[m],onValueChange:h=>{const p=h[0];(p==="global"||p==="project")&&c(p)},variant:"outline",size:"sm",spacing:0,className:"w-full",children:[t.jsxs(X,{value:"global",className:"flex-1",children:[t.jsx(xe,{"data-icon":"inline-start"}),"Global"]}),t.jsxs(X,{value:"project",className:"flex-1",children:[t.jsx(me,{"data-icon":"inline-start"}),"Project"]})]})]}),t.jsxs(Q,{children:[t.jsxs(q,{htmlFor:k,children:[i.charAt(0).toUpperCase()+i.slice(1)," name"]}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(se,{id:k,ref:N,type:"text",value:r,onChange:h=>u(h.target.value),onKeyDown:h=>{h.key==="Enter"&&w(),h.key==="Escape"&&s()},placeholder:`${i} name...`,className:"h-7 min-w-0 flex-1 text-xs",disabled:d}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":`Create ${i}`,onClick:()=>void w(),disabled:d||!r.trim()||!S,children:t.jsx(H,{"data-icon":"inline-start"})}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":"Cancel create",onClick:s,children:t.jsx(K,{"data-icon":"inline-start"})})]})]})]})}function ct(l){const e=F.c(50),{category:i,items:n,selectedPath:s,onSelect:r,onNewFile:u,onDeleteItem:m,onRenameItem:c,renamingPath:d,renameValue:g,onRenameValueChange:N,onRenameSubmit:k,onRenameCancel:S,creatingInCategory:f,onCreated:w,onCancelCreate:h}=l,p=lt[i],j=p.icon;if(n.length===0&&!u)return null;let D;e[0]!==p.color?(D=P("size-3.5",p.color),e[0]=p.color,e[1]=D):D=e[1];let T;e[2]!==j||e[3]!==D?(T=t.jsx(j,{"data-icon":"inline-start",className:D}),e[2]=j,e[3]=D,e[4]=T):T=e[4];let y;e[5]!==p.label?(y=t.jsx("span",{className:"flex-1 text-xs font-medium text-muted-foreground",children:p.label}),e[5]=p.label,e[6]=y):y=e[6];let R;e[7]!==n.length?(R=t.jsx("span",{className:"text-xs tabular-nums text-muted-foreground",children:n.length}),e[7]=n.length,e[8]=R):R=e[8];let C;e[9]!==i||e[10]!==u?(C=u&&t.jsxs(ke,{children:[t.jsx(ve,{render:t.jsx(z,{variant:"ghost",size:"icon-xs",className:"opacity-0 transition-opacity group-hover:opacity-100","aria-label":`New ${i.slice(0,-1)}`,onClick:u}),children:t.jsx(qe,{"data-icon":"inline-start"})}),t.jsxs(Ne,{children:["New ",i.slice(0,-1)]})]}),e[9]=i,e[10]=u,e[11]=C):C=e[11];let v;e[12]!==T||e[13]!==y||e[14]!==R||e[15]!==C?(v=t.jsxs("div",{className:"group flex h-8 items-center gap-1.5 px-3",children:[T,y,R,C]}),e[12]=T,e[13]=y,e[14]=R,e[15]=C,e[16]=v):v=e[16];let E;if(e[17]!==n||e[18]!==m||e[19]!==S||e[20]!==c||e[21]!==k||e[22]!==N||e[23]!==r||e[24]!==g||e[25]!==d||e[26]!==s){let B;e[28]!==m||e[29]!==S||e[30]!==c||e[31]!==k||e[32]!==N||e[33]!==r||e[34]!==g||e[35]!==d||e[36]!==s?(B=b=>{const U=s===b.path;if(d===b.path)return t.jsxs("div",{className:"flex items-center gap-1 border-l-2 border-foreground/30 bg-accent px-3 py-1",children:[t.jsx(se,{value:g,onChange:A=>N(A.target.value),onKeyDown:A=>{A.key==="Enter"&&k(),A.key==="Escape"&&S()},autoFocus:!0,className:"h-7 min-w-0 flex-1 text-xs"}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":"Save name",onClick:k,disabled:!g.trim(),children:t.jsx(H,{"data-icon":"inline-start"})}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":"Cancel rename",onClick:S,children:t.jsx(K,{"data-icon":"inline-start"})})]},b.path);const G=t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx("span",{className:"truncate text-sm",children:b.name}),t.jsx(ge,{linkTarget:b.linkTarget}),b.readOnly&&t.jsx(fe,{className:"size-2.5 shrink-0 text-muted-foreground/40"})]}),b.description&&t.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:b.description})]}),t.jsx(pe,{cli:b.cli}),t.jsx(he,{scope:b.scope,pluginName:b.pluginName})]}),M=P("flex w-full items-center gap-2 border-l-2 px-3 py-2 text-left text-sm transition-colors",U?"border-foreground/30 bg-accent text-accent-foreground":"border-transparent text-muted-foreground hover:bg-accent hover:text-foreground");return!m||!c?t.jsx("button",{type:"button",className:M,onClick:()=>r(b),children:G},b.path):t.jsxs(Se,{children:[t.jsx(we,{render:t.jsx("button",{type:"button",className:M,onClick:()=>r(b)}),children:G}),t.jsx(De,{className:"min-w-36",children:b.readOnly?t.jsx(V,{children:t.jsx(Te,{children:"Read-only file"})}):t.jsxs(t.Fragment,{children:[t.jsx(V,{children:t.jsx(Z,{onClick:()=>c(b),children:"Rename"})}),t.jsx(Ee,{}),t.jsx(V,{children:t.jsx(Z,{variant:"destructive",onClick:()=>m(b),children:"Delete"})})]})})]},b.path)},e[28]=m,e[29]=S,e[30]=c,e[31]=k,e[32]=N,e[33]=r,e[34]=g,e[35]=d,e[36]=s,e[37]=B):B=e[37],E=n.map(B),e[17]=n,e[18]=m,e[19]=S,e[20]=c,e[21]=k,e[22]=N,e[23]=r,e[24]=g,e[25]=d,e[26]=s,e[27]=E}else E=e[27];let I;e[38]!==f||e[39]!==n.length?(I=n.length===0&&!f&&t.jsx("p",{className:"px-3 py-1 text-xs text-muted-foreground",children:"None configured"}),e[38]=f,e[39]=n.length,e[40]=I):I=e[40];let O;e[41]!==f||e[42]!==h||e[43]!==w?(O=f&&t.jsx(ot,{globalDir:f.globalDir,projectDir:f.projectDir,fileType:f.fileType,onCreated:w,onCancel:h}),e[41]=f,e[42]=h,e[43]=w,e[44]=O):O=e[44];let $;return e[45]!==v||e[46]!==E||e[47]!==I||e[48]!==O?($=t.jsxs("section",{children:[v,E,I,O]}),e[45]=v,e[46]=E,e[47]=I,e[48]=O,e[49]=$):$=e[49],$}function dt({file:l,onDeleted:e,readOnly:i=!1}){const[n,s]=o.useState(null),[r,u]=o.useState(null),[m,c]=o.useState(!0),[d,g]=o.useState(!1),[N,k]=o.useState(!1),[S,f]=o.useState(!1),[w,h]=o.useState(!1),p=n!==null&&n!==r,j=i||l.readOnly;o.useEffect(()=>{c(!0),s(null),u(null),k(!1),f(!1),L(`/api/config-browser/file?path=${encodeURIComponent(l.path)}`).then(C=>C.json()).then(C=>{s(C.content??""),u(C.content??"")}).catch(()=>{s(""),u("")}).finally(()=>c(!1))},[l.path]);const D=o.useCallback(async()=>{if(!(!p||j)){g(!0);try{(await L("/api/config-browser/file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:l.path,content:n})})).ok&&(u(n),k(!0),setTimeout(()=>k(!1),2e3))}finally{g(!1)}}},[n,l.path,p,j]),T=o.useCallback(()=>{s(r)},[r]),y=o.useCallback(async()=>{if(!j){h(!0);try{(await L(`/api/config-browser/file?path=${encodeURIComponent(l.path)}`,{method:"DELETE"})).ok&&(f(!1),e())}catch{}finally{h(!1)}}},[l.path,j,e]);o.useEffect(()=>{function C(v){!j&&(v.metaKey||v.ctrlKey)&&v.key==="s"&&(v.preventDefault(),D())}return window.addEventListener("keydown",C),()=>window.removeEventListener("keydown",C)},[D,j]);function R(){return N?"Saved!":d?"Saving...":"Save"}return t.jsxs("div",{className:"flex flex-1 flex-col min-h-0 min-w-0",children:[t.jsxs("div",{className:"flex min-h-11 shrink-0 items-center gap-2 border-b bg-card px-4 py-2",children:[t.jsx(ee,{variant:"outline",className:P("h-5 text-xs",st[l.fileType]||"bg-muted text-muted-foreground"),children:l.fileType}),t.jsx(he,{scope:l.scope,pluginName:l.pluginName}),t.jsx(pe,{cli:l.cli,variant:"full"}),j&&t.jsxs(ee,{variant:"outline",className:"h-5 bg-muted text-xs text-muted-foreground",children:[t.jsx(fe,{"data-icon":"inline-start",className:"size-3"})," read-only"]}),p&&t.jsx("span",{className:"size-2 shrink-0 rounded-full bg-warning",title:"Unsaved changes"}),t.jsxs("div",{className:"flex items-center gap-2 ml-auto min-w-0",children:[t.jsx(ge,{linkTarget:l.linkTarget,variant:"full"}),t.jsx("span",{className:"truncate font-mono text-xs text-muted-foreground",title:l.path,children:l.path})]})]}),m?t.jsx("div",{className:"flex-1 flex items-center justify-center text-muted-foreground text-sm",children:"Loading..."}):t.jsxs("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col",children:[t.jsx(nt,{value:n??"",onChange:s,readOnly:j,filePath:l.path}),!j&&t.jsxs("div",{className:"flex shrink-0 items-center gap-2 border-t bg-card px-4 py-2",children:[t.jsxs(z,{size:"xs",onClick:D,disabled:!p||d,children:[t.jsx(H,{"data-icon":"inline-start"}),R()]}),t.jsxs(z,{variant:"outline",size:"xs",onClick:T,disabled:!p,children:[t.jsx(Xe,{"data-icon":"inline-start"}),"Discard"]}),t.jsx("div",{className:"flex-1"}),t.jsxs(ae,{open:S,onOpenChange:f,children:[t.jsxs(Re,{render:t.jsx(z,{variant:"outline",size:"xs"}),children:[t.jsx(Ze,{"data-icon":"inline-start"}),"Delete"]}),t.jsxs(le,{size:"sm",children:[t.jsxs(ie,{children:[t.jsx(re,{children:"Delete configuration file?"}),t.jsxs(oe,{children:['Delete "',l.name,'" permanently? This action cannot be undone.']})]}),t.jsxs(ce,{children:[t.jsx(de,{size:"sm",disabled:w,children:"Cancel"}),t.jsxs(ue,{variant:"destructive",size:"sm",disabled:w,onClick:()=>void y(),children:[w&&t.jsx(Ie,{"data-icon":"inline-start"}),w?"Deleting...":"Delete file"]})]})]})]})]})]})]})}function ut(){const l=F.c(1);let e;return l[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx(Oe,{className:"border-0",children:t.jsxs(ze,{children:[t.jsx(Ae,{variant:"icon",children:t.jsx(et,{})}),t.jsx(Le,{children:"Select a configuration file"}),t.jsx($e,{children:"Browse instructions, agents, skills, commands, and settings from the sidebar."})]})}),l[0]=e):e=l[0],e}function mt(l){return l.cli?l.cli.length>0?l.cli.join(" "):"unlinked":""}function xt(l,e){if(!e)return l;const i=e.toLowerCase();return l.filter(n=>[n.name,n.description,n.path,n.linkTarget??"",mt(n)].some(r=>r.toLowerCase().includes(i)))}const yt=o.memo(function({projectPath:e,initialFilePath:i}){var A,J;const n=Be("configWrite"),[s,r]=o.useState([]),[u,m]=o.useState(!0),[c,d]=o.useState(null),[g,N]=o.useState(null),[k,S]=o.useState(""),[f,w]=o.useState(null),[h,p]=o.useState(""),[j,D]=o.useState(null),T=o.useRef(!1),y=o.useCallback(async()=>{if(!n){r([]),d(null),m(!1);return}m(!0);try{const a=e?`/api/config-browser/tree?cwd=${encodeURIComponent(e)}`:"/api/config-browser/tree",x=await L(a);if(x.ok){const _=await x.json();r(_.sections||[])}}finally{m(!1)}},[n,e]);o.useEffect(()=>{y()},[y]),o.useEffect(()=>{if(!i||u||T.current)return;const a=s.flatMap(x=>W(x.items,x.scope,x.pluginName)).find(x=>x.path===i);a&&(d(a),T.current=!0)},[i,u,s]);const R=it(s),C=Object.fromEntries(ne.map(a=>[a,xt(R[a],k)])),v=(A=s.find(a=>a.scope==="global"))==null?void 0:A.baseDir,E=(J=s.find(a=>a.scope==="project"))==null?void 0:J.baseDir,I=o.useCallback(a=>{d(a),N(null)},[]),O=o.useCallback((a,x,_)=>{N(null),y(),d({path:a,name:a.split("/").pop()||"",fileType:x,readOnly:!1,scope:_,description:""})},[y]),$=o.useCallback(()=>{d(null),y()},[y]),B=o.useCallback(a=>{if(!n||!v&&!E)return;const x=at[a];x&&N({category:a,globalDir:v?`${v}/${x.subdir}`:null,projectDir:E?`${E}/${x.subdir}`:null,fileType:x.fileType})},[n,v,E]),b=o.useCallback(a=>{!n||a.readOnly||D(a)},[n]),U=o.useCallback(async()=>{if(!n||!j||j.readOnly)return;const a=j;D(null);try{(await L(`/api/config-browser/file?path=${encodeURIComponent(a.path)}`,{method:"DELETE"})).ok&&((c==null?void 0:c.path)===a.path&&d(null),y())}catch{}},[n,y,j,c]),Y=o.useCallback(a=>{if(!n||a.readOnly)return;const x=a.name==="SKILL.md"?a.path.split("/").slice(-2,-1)[0]||a.name:a.name.replace(/\.[^.]+$/,"");w(a),p(x)},[n]),G=o.useCallback(async()=>{if(!(!n||!f||!h.trim()))try{const a=await L("/api/config-browser/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldPath:f.path,newName:h.trim()})});if(a.ok){const x=await a.json();w(null),p(""),await y(),x.newPath&&d({...f,path:x.newPath,name:x.newPath.split("/").pop()||f.name})}}catch{}},[n,f,h,y]),M=o.useCallback(()=>{w(null),p("")},[]);return n?t.jsxs("div",{className:"flex flex-1 min-h-0 min-w-0",children:[t.jsxs("div",{className:"flex min-h-0 w-80 shrink-0 flex-col border-r bg-sidebar",children:[t.jsxs("div",{className:"flex h-11 items-center gap-2 border-b px-3",children:[t.jsx("span",{className:"text-sm font-medium text-foreground",children:"Configuration"}),e&&t.jsx("span",{className:"ml-auto truncate text-xs text-muted-foreground",title:e,children:e.split("/").pop()})]}),t.jsx("div",{className:"border-b p-2",children:t.jsxs(Fe,{children:[t.jsx(te,{children:t.jsx(tt,{"data-icon":"inline-start"})}),t.jsx(Ge,{value:k,onChange:a=>S(a.target.value),placeholder:"Search configuration"}),k&&t.jsx(te,{align:"inline-end",children:t.jsx(Me,{size:"icon-xs","aria-label":"Clear search",onClick:()=>S(""),children:t.jsx(K,{"data-icon":"inline-start"})})})]})}),t.jsx(Pe,{className:"flex-1",children:t.jsx("div",{className:"flex flex-col gap-1 py-2",children:u?t.jsx("div",{className:"flex flex-col gap-2 px-3 py-2","aria-label":"Loading configuration",children:Array.from({length:6},(a,x)=>t.jsx(Ue,{className:"h-8 w-full"},x))}):ne.map(a=>{const x=a==="agents"||a==="skills"||a==="commands";return t.jsx(ct,{category:a,items:C[a],selectedPath:(c==null?void 0:c.path)??null,onSelect:I,onNewFile:n&&x?()=>B(a):void 0,onDeleteItem:n?b:void 0,onRenameItem:n?Y:void 0,renamingPath:(f==null?void 0:f.path)??null,renameValue:h,onRenameValueChange:p,onRenameSubmit:G,onRenameCancel:M,creatingInCategory:n&&(g==null?void 0:g.category)===a?g:null,onCreated:O,onCancelCreate:()=>N(null)},a)})})})]}),c?t.jsx(dt,{file:c,onDeleted:$,readOnly:!n}):t.jsx(ut,{}),t.jsx(ae,{open:j!==null,onOpenChange:a=>{a||D(null)},children:t.jsxs(le,{size:"sm",children:[t.jsxs(ie,{children:[t.jsx(re,{children:"Delete configuration file?"}),t.jsxs(oe,{children:['Delete "',j==null?void 0:j.name,'" permanently? This action cannot be undone.']})]}),t.jsxs(ce,{children:[t.jsx(de,{size:"sm",children:"Cancel"}),t.jsx(ue,{variant:"destructive",size:"sm",onClick:()=>void U(),children:"Delete file"})]})]})})]}):t.jsx("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:"Server configuration is available to administrators only."})});export{yt as ConfigBrowser};
|
|
1
|
+
import{c as F,j as t,r as o}from"./vendor-react-gGw_S5I_.js";import{b1 as je,b3 as be,_ as P,U as ye,V as Q,aW as q,Y as Ce,Z as X,a$ as se,B as z,w as L,b4 as ke,b5 as ve,b6 as Ne,b7 as Se,b8 as we,b9 as De,ba as V,bb as Te,bc as Z,bd as Ee,a4 as ee,a9 as ae,be as Re,aa as le,ab as ie,ad as re,ae as oe,af as ce,ag as de,ah as ue,al as Ie,E as Oe,y as ze,z as Ae,G as Le,H as $e,a3 as Be,m as Fe,I as te,n as Ge,W as Me,q as Pe,bf as Ue}from"./index-9nniVy_T.js";import{aj as _e,z as Ve,h as He,a3 as Ke,ak as We,al as Ye,am as me,o as xe,an as Je,ao as Qe,U as H,X as K,P as qe,ap as fe,aq as Xe,j as Ze,a0 as et,S as tt}from"./vendor-ui-CKSkT7i9.js";import{H as nt}from"./HighlightedEditor-DIp1oA0P.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";const st={agent:"bg-muted text-muted-foreground",skill:"bg-muted text-muted-foreground",command:"bg-muted text-muted-foreground",instructions:"bg-muted text-muted-foreground",settings:"bg-muted text-muted-foreground"},at={agents:{subdir:"agents",fileType:"agent"},skills:{subdir:"skills",fileType:"skill"},commands:{subdir:"commands",fileType:"command"}},ne=["instructions","agents","skills","commands","settings"],lt={instructions:{label:"Instructions",icon:We,color:"text-muted-foreground"},agents:{label:"Agents",icon:Ke,color:"text-muted-foreground"},skills:{label:"Skills",icon:He,color:"text-muted-foreground"},commands:{label:"Commands",icon:Ve,color:"text-muted-foreground"},settings:{label:"Settings",icon:_e,color:"text-muted-foreground"}};function W(l,e,i){const n=[];for(const s of l)s.type==="directory"&&s.children?n.push(...W(s.children,e,i)):s.type==="file"&&n.push({name:s.name,path:s.path,fileType:s.fileType||"unknown",description:s.description||"",scope:e,pluginName:i,readOnly:s.readOnly??e==="plugin",cli:s.cli,linkTarget:s.linkTarget});return n}function it(l){const e={instructions:[],agents:[],skills:[],commands:[],settings:[]};for(const i of l){const n=W(i.items,i.scope,i.pluginName);for(const s of n)switch(s.fileType){case"instructions":e.instructions.push(s);break;case"agent":e.agents.push(s);break;case"skill":e.skills.push(s);break;case"command":e.commands.push(s);break;case"settings":default:e.settings.push(s)}}return e}function he(l){const e=F.c(5),{scope:i,pluginName:n}=l;if(i==="plugin"&&n){let r;e[0]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx(Ye,{"data-icon":"inline-start",className:"size-3"}),e[0]=r):r=e[0];let u;return e[1]!==n?(u=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[r,n]}),e[1]=n,e[2]=u):u=e[2],u}if(i==="project"){let r;return e[3]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[t.jsx(me,{"data-icon":"inline-start",className:"size-3"}),"project"]}),e[3]=r):r=e[3],r}let s;return e[4]===Symbol.for("react.memo_cache_sentinel")?(s=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-muted-foreground",children:[t.jsx(xe,{"data-icon":"inline-start",className:"size-3"}),"global"]}),e[4]=s):s=e[4],s}const rt=Object.fromEntries(je().map(l=>[l.kind,be(l.kind)]));function pe(l){const e=F.c(10),{cli:i,variant:n}=l,s=n===void 0?"compact":n;if(!i)return null;if(i.length===0){let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=t.jsx(Je,{"data-icon":"inline-start",className:"size-3"}),e[0]=m):m=e[0];const c=s==="full"&&"unlinked";let d;return e[1]!==c?(d=t.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-xs text-warning",title:"Present in the shared source directory but not linked into any CLI",children:[m,c]}),e[1]=c,e[2]=d):d=e[2],d}let r;if(e[3]!==i||e[4]!==s){let m;e[6]!==s?(m=c=>{const d=rt[c];return t.jsx("span",{title:d.label,className:s==="full"?"flex h-5 items-center justify-center rounded border bg-muted px-1.5 text-xs font-medium text-muted-foreground":"flex size-5 items-center justify-center rounded border bg-muted text-xs font-medium text-muted-foreground",children:s==="full"?c:d.letter},c)},e[6]=s,e[7]=m):m=e[7],r=i.map(m),e[3]=i,e[4]=s,e[5]=r}else r=e[5];let u;return e[8]!==r?(u=t.jsx("span",{className:"flex items-center gap-0.5 shrink-0",children:r}),e[8]=r,e[9]=u):u=e[9],u}function ge(l){const e=F.c(10),{linkTarget:i,variant:n,className:s}=l,r=n===void 0?"compact":n;if(!i)return null;let u;e[0]!==s?(u=P("flex min-w-0 shrink-0 items-center gap-1 text-info",s),e[0]=s,e[1]=u):u=e[1];const m=`Symlink → ${i}`;let c;e[2]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx(Qe,{"data-icon":"inline-start",className:"size-3 shrink-0"}),e[2]=c):c=e[2];let d;e[3]!==i||e[4]!==r?(d=r==="full"&&t.jsxs("span",{className:"truncate font-mono text-xs",children:["→ ",i]}),e[3]=i,e[4]=r,e[5]=d):d=e[5];let g;return e[6]!==u||e[7]!==m||e[8]!==d?(g=t.jsxs("span",{className:u,title:m,children:[c,d]}),e[6]=u,e[7]=m,e[8]=d,e[9]=g):g=e[9],g}function ot({globalDir:l,projectDir:e,fileType:i,onCreated:n,onCancel:s}){const[r,u]=o.useState(""),[m,c]=o.useState(e?"project":"global"),[d,g]=o.useState(!1),N=o.useRef(null),k=o.useId();o.useEffect(()=>{var h;(h=N.current)==null||h.focus()},[]);const S=m==="project"&&e?e:l,f=!!l&&!!e;async function w(){if(!(!r.trim()||!S)){g(!0);try{const h=await L("/api/config-browser/create",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dir:S,fileType:i,name:r.trim()})});if(h.ok){const p=await h.json();n(p.path,i,m)}}finally{g(!1)}}}return t.jsxs(ye,{className:"gap-3 px-3 py-2",children:[f&&t.jsxs(Q,{children:[t.jsx(q,{children:"Scope"}),t.jsxs(Ce,{"aria-label":"File scope",value:[m],onValueChange:h=>{const p=h[0];(p==="global"||p==="project")&&c(p)},variant:"outline",size:"sm",spacing:0,className:"w-full",children:[t.jsxs(X,{value:"global",className:"flex-1",children:[t.jsx(xe,{"data-icon":"inline-start"}),"Global"]}),t.jsxs(X,{value:"project",className:"flex-1",children:[t.jsx(me,{"data-icon":"inline-start"}),"Project"]})]})]}),t.jsxs(Q,{children:[t.jsxs(q,{htmlFor:k,children:[i.charAt(0).toUpperCase()+i.slice(1)," name"]}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(se,{id:k,ref:N,type:"text",value:r,onChange:h=>u(h.target.value),onKeyDown:h=>{h.key==="Enter"&&w(),h.key==="Escape"&&s()},placeholder:`${i} name...`,className:"h-7 min-w-0 flex-1 text-xs",disabled:d}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":`Create ${i}`,onClick:()=>void w(),disabled:d||!r.trim()||!S,children:t.jsx(H,{"data-icon":"inline-start"})}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":"Cancel create",onClick:s,children:t.jsx(K,{"data-icon":"inline-start"})})]})]})]})}function ct(l){const e=F.c(50),{category:i,items:n,selectedPath:s,onSelect:r,onNewFile:u,onDeleteItem:m,onRenameItem:c,renamingPath:d,renameValue:g,onRenameValueChange:N,onRenameSubmit:k,onRenameCancel:S,creatingInCategory:f,onCreated:w,onCancelCreate:h}=l,p=lt[i],j=p.icon;if(n.length===0&&!u)return null;let D;e[0]!==p.color?(D=P("size-3.5",p.color),e[0]=p.color,e[1]=D):D=e[1];let T;e[2]!==j||e[3]!==D?(T=t.jsx(j,{"data-icon":"inline-start",className:D}),e[2]=j,e[3]=D,e[4]=T):T=e[4];let y;e[5]!==p.label?(y=t.jsx("span",{className:"flex-1 text-xs font-medium text-muted-foreground",children:p.label}),e[5]=p.label,e[6]=y):y=e[6];let R;e[7]!==n.length?(R=t.jsx("span",{className:"text-xs tabular-nums text-muted-foreground",children:n.length}),e[7]=n.length,e[8]=R):R=e[8];let C;e[9]!==i||e[10]!==u?(C=u&&t.jsxs(ke,{children:[t.jsx(ve,{render:t.jsx(z,{variant:"ghost",size:"icon-xs",className:"opacity-0 transition-opacity group-hover:opacity-100","aria-label":`New ${i.slice(0,-1)}`,onClick:u}),children:t.jsx(qe,{"data-icon":"inline-start"})}),t.jsxs(Ne,{children:["New ",i.slice(0,-1)]})]}),e[9]=i,e[10]=u,e[11]=C):C=e[11];let v;e[12]!==T||e[13]!==y||e[14]!==R||e[15]!==C?(v=t.jsxs("div",{className:"group flex h-8 items-center gap-1.5 px-3",children:[T,y,R,C]}),e[12]=T,e[13]=y,e[14]=R,e[15]=C,e[16]=v):v=e[16];let E;if(e[17]!==n||e[18]!==m||e[19]!==S||e[20]!==c||e[21]!==k||e[22]!==N||e[23]!==r||e[24]!==g||e[25]!==d||e[26]!==s){let B;e[28]!==m||e[29]!==S||e[30]!==c||e[31]!==k||e[32]!==N||e[33]!==r||e[34]!==g||e[35]!==d||e[36]!==s?(B=b=>{const U=s===b.path;if(d===b.path)return t.jsxs("div",{className:"flex items-center gap-1 border-l-2 border-foreground/30 bg-accent px-3 py-1",children:[t.jsx(se,{value:g,onChange:A=>N(A.target.value),onKeyDown:A=>{A.key==="Enter"&&k(),A.key==="Escape"&&S()},autoFocus:!0,className:"h-7 min-w-0 flex-1 text-xs"}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":"Save name",onClick:k,disabled:!g.trim(),children:t.jsx(H,{"data-icon":"inline-start"})}),t.jsx(z,{variant:"ghost",size:"icon-xs","aria-label":"Cancel rename",onClick:S,children:t.jsx(K,{"data-icon":"inline-start"})})]},b.path);const G=t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx("span",{className:"truncate text-sm",children:b.name}),t.jsx(ge,{linkTarget:b.linkTarget}),b.readOnly&&t.jsx(fe,{className:"size-2.5 shrink-0 text-muted-foreground/40"})]}),b.description&&t.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:b.description})]}),t.jsx(pe,{cli:b.cli}),t.jsx(he,{scope:b.scope,pluginName:b.pluginName})]}),M=P("flex w-full items-center gap-2 border-l-2 px-3 py-2 text-left text-sm transition-colors",U?"border-foreground/30 bg-accent text-accent-foreground":"border-transparent text-muted-foreground hover:bg-accent hover:text-foreground");return!m||!c?t.jsx("button",{type:"button",className:M,onClick:()=>r(b),children:G},b.path):t.jsxs(Se,{children:[t.jsx(we,{render:t.jsx("button",{type:"button",className:M,onClick:()=>r(b)}),children:G}),t.jsx(De,{className:"min-w-36",children:b.readOnly?t.jsx(V,{children:t.jsx(Te,{children:"Read-only file"})}):t.jsxs(t.Fragment,{children:[t.jsx(V,{children:t.jsx(Z,{onClick:()=>c(b),children:"Rename"})}),t.jsx(Ee,{}),t.jsx(V,{children:t.jsx(Z,{variant:"destructive",onClick:()=>m(b),children:"Delete"})})]})})]},b.path)},e[28]=m,e[29]=S,e[30]=c,e[31]=k,e[32]=N,e[33]=r,e[34]=g,e[35]=d,e[36]=s,e[37]=B):B=e[37],E=n.map(B),e[17]=n,e[18]=m,e[19]=S,e[20]=c,e[21]=k,e[22]=N,e[23]=r,e[24]=g,e[25]=d,e[26]=s,e[27]=E}else E=e[27];let I;e[38]!==f||e[39]!==n.length?(I=n.length===0&&!f&&t.jsx("p",{className:"px-3 py-1 text-xs text-muted-foreground",children:"None configured"}),e[38]=f,e[39]=n.length,e[40]=I):I=e[40];let O;e[41]!==f||e[42]!==h||e[43]!==w?(O=f&&t.jsx(ot,{globalDir:f.globalDir,projectDir:f.projectDir,fileType:f.fileType,onCreated:w,onCancel:h}),e[41]=f,e[42]=h,e[43]=w,e[44]=O):O=e[44];let $;return e[45]!==v||e[46]!==E||e[47]!==I||e[48]!==O?($=t.jsxs("section",{children:[v,E,I,O]}),e[45]=v,e[46]=E,e[47]=I,e[48]=O,e[49]=$):$=e[49],$}function dt({file:l,onDeleted:e,readOnly:i=!1}){const[n,s]=o.useState(null),[r,u]=o.useState(null),[m,c]=o.useState(!0),[d,g]=o.useState(!1),[N,k]=o.useState(!1),[S,f]=o.useState(!1),[w,h]=o.useState(!1),p=n!==null&&n!==r,j=i||l.readOnly;o.useEffect(()=>{c(!0),s(null),u(null),k(!1),f(!1),L(`/api/config-browser/file?path=${encodeURIComponent(l.path)}`).then(C=>C.json()).then(C=>{s(C.content??""),u(C.content??"")}).catch(()=>{s(""),u("")}).finally(()=>c(!1))},[l.path]);const D=o.useCallback(async()=>{if(!(!p||j)){g(!0);try{(await L("/api/config-browser/file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:l.path,content:n})})).ok&&(u(n),k(!0),setTimeout(()=>k(!1),2e3))}finally{g(!1)}}},[n,l.path,p,j]),T=o.useCallback(()=>{s(r)},[r]),y=o.useCallback(async()=>{if(!j){h(!0);try{(await L(`/api/config-browser/file?path=${encodeURIComponent(l.path)}`,{method:"DELETE"})).ok&&(f(!1),e())}catch{}finally{h(!1)}}},[l.path,j,e]);o.useEffect(()=>{function C(v){!j&&(v.metaKey||v.ctrlKey)&&v.key==="s"&&(v.preventDefault(),D())}return window.addEventListener("keydown",C),()=>window.removeEventListener("keydown",C)},[D,j]);function R(){return N?"Saved!":d?"Saving...":"Save"}return t.jsxs("div",{className:"flex flex-1 flex-col min-h-0 min-w-0",children:[t.jsxs("div",{className:"flex min-h-11 shrink-0 items-center gap-2 border-b bg-card px-4 py-2",children:[t.jsx(ee,{variant:"outline",className:P("h-5 text-xs",st[l.fileType]||"bg-muted text-muted-foreground"),children:l.fileType}),t.jsx(he,{scope:l.scope,pluginName:l.pluginName}),t.jsx(pe,{cli:l.cli,variant:"full"}),j&&t.jsxs(ee,{variant:"outline",className:"h-5 bg-muted text-xs text-muted-foreground",children:[t.jsx(fe,{"data-icon":"inline-start",className:"size-3"})," read-only"]}),p&&t.jsx("span",{className:"size-2 shrink-0 rounded-full bg-warning",title:"Unsaved changes"}),t.jsxs("div",{className:"flex items-center gap-2 ml-auto min-w-0",children:[t.jsx(ge,{linkTarget:l.linkTarget,variant:"full"}),t.jsx("span",{className:"truncate font-mono text-xs text-muted-foreground",title:l.path,children:l.path})]})]}),m?t.jsx("div",{className:"flex-1 flex items-center justify-center text-muted-foreground text-sm",children:"Loading..."}):t.jsxs("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col",children:[t.jsx(nt,{value:n??"",onChange:s,readOnly:j,filePath:l.path}),!j&&t.jsxs("div",{className:"flex shrink-0 items-center gap-2 border-t bg-card px-4 py-2",children:[t.jsxs(z,{size:"xs",onClick:D,disabled:!p||d,children:[t.jsx(H,{"data-icon":"inline-start"}),R()]}),t.jsxs(z,{variant:"outline",size:"xs",onClick:T,disabled:!p,children:[t.jsx(Xe,{"data-icon":"inline-start"}),"Discard"]}),t.jsx("div",{className:"flex-1"}),t.jsxs(ae,{open:S,onOpenChange:f,children:[t.jsxs(Re,{render:t.jsx(z,{variant:"outline",size:"xs"}),children:[t.jsx(Ze,{"data-icon":"inline-start"}),"Delete"]}),t.jsxs(le,{size:"sm",children:[t.jsxs(ie,{children:[t.jsx(re,{children:"Delete configuration file?"}),t.jsxs(oe,{children:['Delete "',l.name,'" permanently? This action cannot be undone.']})]}),t.jsxs(ce,{children:[t.jsx(de,{size:"sm",disabled:w,children:"Cancel"}),t.jsxs(ue,{variant:"destructive",size:"sm",disabled:w,onClick:()=>void y(),children:[w&&t.jsx(Ie,{"data-icon":"inline-start"}),w?"Deleting...":"Delete file"]})]})]})]})]})]})]})}function ut(){const l=F.c(1);let e;return l[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx(Oe,{className:"border-0",children:t.jsxs(ze,{children:[t.jsx(Ae,{variant:"icon",children:t.jsx(et,{})}),t.jsx(Le,{children:"Select a configuration file"}),t.jsx($e,{children:"Browse instructions, agents, skills, commands, and settings from the sidebar."})]})}),l[0]=e):e=l[0],e}function mt(l){return l.cli?l.cli.length>0?l.cli.join(" "):"unlinked":""}function xt(l,e){if(!e)return l;const i=e.toLowerCase();return l.filter(n=>[n.name,n.description,n.path,n.linkTarget??"",mt(n)].some(r=>r.toLowerCase().includes(i)))}const yt=o.memo(function({projectPath:e,initialFilePath:i}){var A,J;const n=Be("configWrite"),[s,r]=o.useState([]),[u,m]=o.useState(!0),[c,d]=o.useState(null),[g,N]=o.useState(null),[k,S]=o.useState(""),[f,w]=o.useState(null),[h,p]=o.useState(""),[j,D]=o.useState(null),T=o.useRef(!1),y=o.useCallback(async()=>{if(!n){r([]),d(null),m(!1);return}m(!0);try{const a=e?`/api/config-browser/tree?cwd=${encodeURIComponent(e)}`:"/api/config-browser/tree",x=await L(a);if(x.ok){const _=await x.json();r(_.sections||[])}}finally{m(!1)}},[n,e]);o.useEffect(()=>{y()},[y]),o.useEffect(()=>{if(!i||u||T.current)return;const a=s.flatMap(x=>W(x.items,x.scope,x.pluginName)).find(x=>x.path===i);a&&(d(a),T.current=!0)},[i,u,s]);const R=it(s),C=Object.fromEntries(ne.map(a=>[a,xt(R[a],k)])),v=(A=s.find(a=>a.scope==="global"))==null?void 0:A.baseDir,E=(J=s.find(a=>a.scope==="project"))==null?void 0:J.baseDir,I=o.useCallback(a=>{d(a),N(null)},[]),O=o.useCallback((a,x,_)=>{N(null),y(),d({path:a,name:a.split("/").pop()||"",fileType:x,readOnly:!1,scope:_,description:""})},[y]),$=o.useCallback(()=>{d(null),y()},[y]),B=o.useCallback(a=>{if(!n||!v&&!E)return;const x=at[a];x&&N({category:a,globalDir:v?`${v}/${x.subdir}`:null,projectDir:E?`${E}/${x.subdir}`:null,fileType:x.fileType})},[n,v,E]),b=o.useCallback(a=>{!n||a.readOnly||D(a)},[n]),U=o.useCallback(async()=>{if(!n||!j||j.readOnly)return;const a=j;D(null);try{(await L(`/api/config-browser/file?path=${encodeURIComponent(a.path)}`,{method:"DELETE"})).ok&&((c==null?void 0:c.path)===a.path&&d(null),y())}catch{}},[n,y,j,c]),Y=o.useCallback(a=>{if(!n||a.readOnly)return;const x=a.name==="SKILL.md"?a.path.split("/").slice(-2,-1)[0]||a.name:a.name.replace(/\.[^.]+$/,"");w(a),p(x)},[n]),G=o.useCallback(async()=>{if(!(!n||!f||!h.trim()))try{const a=await L("/api/config-browser/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldPath:f.path,newName:h.trim()})});if(a.ok){const x=await a.json();w(null),p(""),await y(),x.newPath&&d({...f,path:x.newPath,name:x.newPath.split("/").pop()||f.name})}}catch{}},[n,f,h,y]),M=o.useCallback(()=>{w(null),p("")},[]);return n?t.jsxs("div",{className:"flex flex-1 min-h-0 min-w-0",children:[t.jsxs("div",{className:"flex min-h-0 w-80 shrink-0 flex-col border-r bg-sidebar",children:[t.jsxs("div",{className:"flex h-11 items-center gap-2 border-b px-3",children:[t.jsx("span",{className:"text-sm font-medium text-foreground",children:"Configuration"}),e&&t.jsx("span",{className:"ml-auto truncate text-xs text-muted-foreground",title:e,children:e.split("/").pop()})]}),t.jsx("div",{className:"border-b p-2",children:t.jsxs(Fe,{children:[t.jsx(te,{children:t.jsx(tt,{"data-icon":"inline-start"})}),t.jsx(Ge,{value:k,onChange:a=>S(a.target.value),placeholder:"Search configuration"}),k&&t.jsx(te,{align:"inline-end",children:t.jsx(Me,{size:"icon-xs","aria-label":"Clear search",onClick:()=>S(""),children:t.jsx(K,{"data-icon":"inline-start"})})})]})}),t.jsx(Pe,{className:"flex-1",children:t.jsx("div",{className:"flex flex-col gap-1 py-2",children:u?t.jsx("div",{className:"flex flex-col gap-2 px-3 py-2","aria-label":"Loading configuration",children:Array.from({length:6},(a,x)=>t.jsx(Ue,{className:"h-8 w-full"},x))}):ne.map(a=>{const x=a==="agents"||a==="skills"||a==="commands";return t.jsx(ct,{category:a,items:C[a],selectedPath:(c==null?void 0:c.path)??null,onSelect:I,onNewFile:n&&x?()=>B(a):void 0,onDeleteItem:n?b:void 0,onRenameItem:n?Y:void 0,renamingPath:(f==null?void 0:f.path)??null,renameValue:h,onRenameValueChange:p,onRenameSubmit:G,onRenameCancel:M,creatingInCategory:n&&(g==null?void 0:g.category)===a?g:null,onCreated:O,onCancelCreate:()=>N(null)},a)})})})]}),c?t.jsx(dt,{file:c,onDeleted:$,readOnly:!n}):t.jsx(ut,{}),t.jsx(ae,{open:j!==null,onOpenChange:a=>{a||D(null)},children:t.jsxs(le,{size:"sm",children:[t.jsxs(ie,{children:[t.jsx(re,{children:"Delete configuration file?"}),t.jsxs(oe,{children:['Delete "',j==null?void 0:j.name,'" permanently? This action cannot be undone.']})]}),t.jsxs(ce,{children:[t.jsx(de,{size:"sm",children:"Cancel"}),t.jsx(ue,{variant:"destructive",size:"sm",onClick:()=>void U(),children:"Delete file"})]})]})})]}):t.jsx("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:"Server configuration is available to administrators only."})});export{yt as ConfigBrowser};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as z,r as _,j as f}from"./vendor-react-gGw_S5I_.js";import{a0 as F,a1 as K,_ as A,a2 as O}from"./index-
|
|
1
|
+
import{c as z,r as _,j as f}from"./vendor-react-gGw_S5I_.js";import{a0 as F,a1 as K,_ as A,a2 as O}from"./index-9nniVy_T.js";const X=2e5;function Q(l){const e=z.c(35),{value:t,onChange:v,readOnly:u,filePath:y,ariaLabel:E,textareaRef:p,onKeyDown:L,onSelect:S}=l,h=F(),[d,I]=_.useState(null),m=_.useRef(null),x=_.useRef(null);let g;e[0]!==y?(g=K(y)??"markdown",e[0]=y,e[1]=g):g=e[1];const b=g,j=t.length>X;let k,R;e[2]!==h||e[3]!==b||e[4]!==j||e[5]!==t?(k=()=>{if(j){I(null);return}let r=!1;const M=setTimeout(()=>{O(t,b,h).then(P=>{r||I(P)})},80);return()=>{r=!0,clearTimeout(M)}},R=[t,b,h,j],e[2]=h,e[3]=b,e[4]=j,e[5]=t,e[6]=k,e[7]=R):(k=e[6],R=e[7]),_.useEffect(k,R);let T;e[8]===Symbol.for("react.memo_cache_sentinel")?(T=()=>{m.current&&x.current&&(x.current.scrollTop=m.current.scrollTop,x.current.scrollLeft=m.current.scrollLeft)},e[8]=T):T=e[8];const G=T;let w;e[9]!==p?(w=r=>{m.current=r,p&&(p.current=r)},e[9]=p,e[10]=w):w=e[10];const C=w,N=u&&"opacity-70";let n;e[11]!==N?(n=A("absolute inset-0 overflow-hidden font-mono text-[13px] leading-relaxed p-4 m-0 pointer-events-none whitespace-pre-wrap break-words",N),e[11]=N,e[12]=n):n=e[12];let s;e[13]!==d||e[14]!==t?(s=d?d.map($):f.jsx("code",{className:"text-foreground",children:t}),e[13]=d,e[14]=t,e[15]=s):s=e[15];let o;e[16]!==n||e[17]!==s?(o=f.jsx("pre",{ref:x,"aria-hidden":!0,className:n,children:s}),e[16]=n,e[17]=s,e[18]=o):o=e[18];let a;e[19]!==v?(a=r=>v(r.target.value),e[19]=v,e[20]=a):a=e[20];const D=u&&"cursor-default";let c;e[21]!==D?(c=A("absolute inset-0 w-full h-full resize-none bg-transparent font-mono text-[13px] leading-relaxed p-4 outline-none","text-transparent caret-foreground selection:bg-info/30","scrollbar-thin scrollbar-track-transparent scrollbar-thumb-border",D),e[21]=D,e[22]=c):c=e[22];let i;e[23]!==E||e[24]!==C||e[25]!==L||e[26]!==S||e[27]!==u||e[28]!==a||e[29]!==c||e[30]!==t?(i=f.jsx("textarea",{ref:C,"aria-label":E,value:t,onChange:a,onScroll:G,onKeyDown:L,onSelect:S,readOnly:u,spellCheck:!1,className:c,placeholder:"Empty file"}),e[23]=E,e[24]=C,e[25]=L,e[26]=S,e[27]=u,e[28]=a,e[29]=c,e[30]=t,e[31]=i):i=e[31];let H;return e[32]!==i||e[33]!==o?(H=f.jsxs("div",{className:"relative min-h-0 flex-1 bg-background",children:[o,i]}),e[32]=i,e[33]=o,e[34]=H):H=e[34],H}function $(l,e){return f.jsxs("span",{children:[l.map(q),`
|
|
2
2
|
`]},e)}function q(l,e){return f.jsx("span",{style:{color:l.color},children:l.content},e)}export{Q as H};
|
package/dist/web/assets/{KeyboardShortcutsDialog-Cmk72Wcu.js → KeyboardShortcutsDialog-BbU77pdm.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as q,j as t,r as k}from"./vendor-react-gGw_S5I_.js";import{D as F,g as $,K as T,e as Q,B as P,f as Y,r as _,h as H,i as M,j as U,k as J,l as V,I as W,m as X,n as Z,o as ee,A as te,p as se,q as ae,s as le,t as ne,u as re}from"./index-
|
|
1
|
+
import{c as q,j as t,r as k}from"./vendor-react-gGw_S5I_.js";import{D as F,g as $,K as T,e as Q,B as P,f as Y,r as _,h as H,i as M,j as U,k as J,l as V,I as W,m as X,n as Z,o as ee,A as te,p as se,q as ae,s as le,t as ne,u as re}from"./index-9nniVy_T.js";import{R as O,K as oe,S as ce}from"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";const ie=new Set(["Alt","Control","Meta","Shift"]);function fe(e){const s=q.c(6),{open:f,onOpenChange:l}=e,x=f?"open":"closed";let a;s[0]!==x?(a=t.jsx(de,{},x),s[0]=x,s[1]=a):a=s[1];let r;return s[2]!==l||s[3]!==f||s[4]!==a?(r=t.jsx(F,{open:f,onOpenChange:l,children:a}),s[2]=l,s[3]=f,s[4]=a,s[5]=r):r=s[5],r}function de(){const e=q.c(45),[s,f]=k.useState(""),[l,x]=k.useState(null),[a,r]=k.useState(null),[B,G]=k.useState($);let E,I;e[0]!==l?(E=()=>{if(!l)return;const D=l,A=function(n){if(n.key==="Escape"){n.preventDefault(),n.stopPropagation(),x(null),r(null);return}if(ie.has(n.key))return;n.preventDefault(),n.stopPropagation();const c=le(n),p=ne(c,D);if(p){r(`Already assigned to “${p.label}”.`);return}re(D,c),G($()),x(null),r(null)};return window.addEventListener("keydown",A,!0),()=>window.removeEventListener("keydown",A,!0)},I=[l],e[0]=l,e[1]=E,e[2]=I):(E=e[1],I=e[2]),k.useEffect(E,I);let g,j,d,y,b,N,S,w,m,u,h;if(e[3]!==B||e[4]!==a||e[5]!==s||e[6]!==l){const D=s.trim().toLowerCase(),A=D?T.filter(i=>`${i.label} ${i.description} ${i.group}`.toLowerCase().includes(D)):T;j=H,S="max-w-2xl gap-0 overflow-hidden p-0",w=!1,e[18]===Symbol.for("react.memo_cache_sentinel")?(m=t.jsxs(M,{className:"p-4 pb-3",children:[t.jsxs(U,{className:"flex items-center gap-2",children:[t.jsx(oe,{"data-icon":"inline-start","aria-hidden":"true",className:"size-4"}),"Keyboard shortcuts"]}),t.jsx(J,{children:"Click a shortcut, then press a new key combination. Changes are saved on this device."})]}),u=t.jsx(V,{}),e[18]=m,e[19]=u):(m=e[18],u=e[19]);let K;e[20]===Symbol.for("react.memo_cache_sentinel")?(K=t.jsx(W,{children:t.jsx(ce,{"data-icon":"inline-start","aria-hidden":"true"})}),e[20]=K):K=e[20];let n;e[21]===Symbol.for("react.memo_cache_sentinel")?(n=i=>f(i.target.value),e[21]=n):n=e[21];let c;e[22]!==s?(c=t.jsxs(X,{className:"flex-1",children:[K,t.jsx(Z,{"aria-label":"Search keyboard shortcuts",value:s,onChange:n,placeholder:"Search shortcuts…"})]}),e[22]=s,e[23]=c):c=e[23];let p;e[24]===Symbol.for("react.memo_cache_sentinel")?(p=t.jsxs(P,{variant:"outline",size:"sm",onClick:()=>{ee(),G($()),r(null)},children:[t.jsx(O,{"data-icon":"inline-start"}),"Reset all"]}),e[24]=p):p=e[24],e[25]!==c?(h=t.jsxs("div",{className:"flex items-center gap-2 p-3",children:[c,p]}),e[25]=c,e[26]=h):h=e[26],e[27]!==a?(d=a&&t.jsx(te,{variant:"destructive",className:"mx-3 mb-2 w-auto",children:t.jsxs(se,{children:[a," Press another shortcut or Esc to cancel."]})}),e[27]=a,e[28]=d):d=e[28],g=ae,N="h-[min(28rem,60vh)]",y="flex flex-col gap-4 px-3 pb-4",b=Q.map(i=>{const L=A.filter(o=>o.group===i);return L.length===0?null:t.jsxs("section",{className:"flex flex-col gap-1",children:[t.jsx("h3",{className:"px-2 py-1 text-xs font-medium text-muted-foreground",children:i}),L.map(o=>{const z=l===o.command;return t.jsxs("div",{className:"flex min-h-12 items-center gap-3 rounded-md px-2 py-1.5 hover:bg-accent",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-sm",children:o.label}),t.jsx("p",{className:"truncate text-xs text-muted-foreground",children:o.description})]}),t.jsx(P,{variant:z?"secondary":"outline",size:"sm",className:"min-w-28 font-mono text-xs",onClick:()=>{r(null),x(z?null:o.command)},"aria-label":`Change shortcut for ${o.label}`,children:z?"Press keys…":Y(B[o.command])}),t.jsx(P,{variant:"ghost",size:"icon-sm",onClick:()=>{_(o.command),G($()),r(null)},"aria-label":`Reset shortcut for ${o.label}`,children:t.jsx(O,{"data-icon":"inline-start"})})]},o.command)})]},i)}),e[3]=B,e[4]=a,e[5]=s,e[6]=l,e[7]=g,e[8]=j,e[9]=d,e[10]=y,e[11]=b,e[12]=N,e[13]=S,e[14]=w,e[15]=m,e[16]=u,e[17]=h}else g=e[7],j=e[8],d=e[9],y=e[10],b=e[11],N=e[12],S=e[13],w=e[14],m=e[15],u=e[16],h=e[17];let C;e[29]!==y||e[30]!==b?(C=t.jsx("div",{className:y,children:b}),e[29]=y,e[30]=b,e[31]=C):C=e[31];let v;e[32]!==g||e[33]!==C||e[34]!==N?(v=t.jsx(g,{className:N,children:C}),e[32]=g,e[33]=C,e[34]=N,e[35]=v):v=e[35];let R;return e[36]!==j||e[37]!==d||e[38]!==v||e[39]!==S||e[40]!==w||e[41]!==m||e[42]!==u||e[43]!==h?(R=t.jsxs(j,{className:S,showCloseButton:w,children:[m,u,h,d,v]}),e[36]=j,e[37]=d,e[38]=v,e[39]=S,e[40]=w,e[41]=m,e[42]=u,e[43]=h,e[44]=R):R=e[44],R}export{fe as KeyboardShortcutsDialog};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as x,c as d,j as s}from"./vendor-react-gGw_S5I_.js";import{S as p,a as f,b as j,c as g,F as C,d as S}from"./index-
|
|
1
|
+
import{r as x,c as d,j as s}from"./vendor-react-gGw_S5I_.js";import{S as p,a as f,b as j,c as g,F as C,d as S}from"./index-9nniVy_T.js";import"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";const E=x.memo(function(c){const e=d.c(10),{open:l,onClose:a,session:r,sessionChangeKey:h}=c;let i;e[0]!==a?(i=m=>{m||a()},e[0]=a,e[1]=i):i=e[1];let t;e[2]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsxs(p,{className:"shrink-0 px-4 py-3",children:[s.jsx(f,{children:"File changes"}),s.jsx(j,{className:"sr-only",children:"Review files changed in this session."})]}),e[2]=t):t=e[2];let n;e[3]!==r||e[4]!==h?(n=s.jsxs(g,{side:"bottom",className:"h-[72svh] max-h-[92svh] rounded-t-xl",children:[t,s.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:s.jsx(C,{session:r,sessionChangeKey:h})})]}),e[3]=r,e[4]=h,e[5]=n):n=e[5];let o;return e[6]!==l||e[7]!==i||e[8]!==n?(o=s.jsx(S,{open:l,onOpenChange:i,children:n}),e[6]=l,e[7]=i,e[8]=n,e[9]=o):o=e[9],o});export{E as MobileFileChanges};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as t}from"./vendor-react-gGw_S5I_.js";import{T as ae,B as g,l as K,U as ie,V as oe,m as le,n as ce,I as de,W as G,X as ue,Y as he,Z as pe,_ as me,E as fe,y as xe,z as we,G as ve,H as ge,$ as be,w as je,Q as b}from"./index-
|
|
1
|
+
import{r as n,j as t}from"./vendor-react-gGw_S5I_.js";import{T as ae,B as g,l as K,U as ie,V as oe,m as le,n as ce,I as de,W as G,X as ue,Y as he,Z as pe,_ as me,E as fe,y as xe,z as we,G as ve,H as ge,$ as be,w as je,Q as b}from"./index-9nniVy_T.js";import{E as H,X as ye,b as Se,c as Ie,d as Ne,M as ke,T as Ee,e as Me,f as Pe,Z as ze,g as Re}from"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";const W=360,Te=560,B="cogpit-preview-width",Y="cogpit-preview-viewport",_="cogpit-preview-zoom",k=.5,E=1.5,N=.1,h={responsive:{label:"Responsive",width:null,height:null,icon:Pe},phone:{label:"Phone",width:390,height:844,icon:Me},tablet:{label:"Tablet",width:768,height:1024,icon:Ee},desktop:{label:"Desktop",width:1280,height:800,icon:ke}};function Ce(){try{const s=Number(localStorage.getItem(B));if(Number.isFinite(s)&&s>=W)return s}catch{}return Te}function De(){try{const s=localStorage.getItem(Y);if(s&&s in h)return s}catch{}return"responsive"}function We(){try{const s=localStorage.getItem(_);if(s===null)return 1;const i=Number(s);if(Number.isFinite(i))return Math.min(E,Math.max(k,i))}catch{}return 1}function X(s){return be(`cogpit-preview-url:${s}`)}function V(s){const i=s.trim();if(!i||/^[a-z][a-z\d+.-]*:/i.test(i)&&!/^https?:\/\//i.test(i)&&!/^[^/]+:\d+(?:\/|$)/.test(i))return null;const j=/^https?:\/\//i.test(i)?i:`http://${i}`;try{const a=new URL(j);return a.protocol!=="http:"&&a.protocol!=="https:"?null:a.href}catch{return null}}function A(s,i){return`http://${i||"localhost"}:${s}/`}function Le({cwd:s,onClose:i}){const[M,j]=n.useState([]),[a,P]=n.useState(""),[$,y]=n.useState(""),[z,R]=n.useState(null),[Q,q]=n.useState(0),[J,T]=n.useState(!1),[S,ee]=n.useState(Ce),[l,te]=n.useState(De),[o,p]=n.useState(We),c=n.useRef(null),O=n.useRef(null),C=n.useRef(null),{activeDevice:m}=ae(),I=(m==null?void 0:m.host)??(window.location.hostname||"localhost"),re=m==null?void 0:m.id;n.useEffect(()=>{let e="";try{e=localStorage.getItem(X(s))??""}catch{}const r=e?V(e)??"":"";P(r),y(r),R(null)},[s,re]),n.useEffect(()=>{let e=!1;async function r(){try{const u=await je(`/api/background-tasks?cwd=${encodeURIComponent(s)}`);if(e||!u.ok)return;const x=await u.json(),f=Array.isArray(x)?x:[];j(f);const L=f.flatMap(w=>w.ports.filter(v=>w.portStatus[v])).at(0);if(L){const w=A(L,I);P(v=>v||w),y(v=>v||w)}}catch{e||j([])}}r();const d=window.setInterval(r,1e4);return()=>{e=!0,window.clearInterval(d)}},[s,I]),n.useEffect(()=>{if(a)try{localStorage.setItem(X(s),a)}catch{}},[s,a]),n.useEffect(()=>{try{localStorage.setItem(Y,l),localStorage.setItem(_,String(o))}catch{}},[l,o]);const Z=n.useMemo(()=>[...new Set(M.flatMap(e=>e.ports.filter(r=>e.portStatus[r])))].sort((e,r)=>e-r),[M]),U=n.useCallback(e=>{const r=V(e);if(!r){R("Enter a valid HTTP or HTTPS URL.");return}R(null),P(r),y(r),T(!0)},[]),D=n.useCallback(()=>{a&&(T(!0),q(e=>e+1))},[a]);n.useEffect(()=>{function e(r){var d,u,x;if((d=O.current)!=null&&d.contains(document.activeElement)){if(b("previewRefresh",r)){r.preventDefault(),D();return}if(b("previewFocusUrl",r)){r.preventDefault(),(u=C.current)==null||u.focus(),(x=C.current)==null||x.select();return}if(b("previewZoomIn",r)){r.preventDefault(),p(f=>Math.min(E,Number((f+N).toFixed(1))));return}if(b("previewZoomOut",r)){r.preventDefault(),p(f=>Math.max(k,Number((f-N).toFixed(1))));return}b("previewResetZoom",r)&&(r.preventDefault(),p(1))}}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[D]);const se=n.useCallback(e=>{e.preventDefault(),c.current={startX:e.clientX,startWidth:S,currentWidth:S},e.currentTarget.setPointerCapture(e.pointerId)},[S]),ne=n.useCallback(e=>{if(!c.current)return;const r=Math.max(W,window.innerWidth*.7),d=c.current.startWidth+(c.current.startX-e.clientX),u=Math.min(r,Math.max(W,d));c.current.currentWidth=u,ee(u)},[]),F=n.useCallback(()=>{if(!c.current)return;const e=c.current.currentWidth;c.current=null;try{localStorage.setItem(B,String(e))}catch{}},[]);return t.jsxs("aside",{ref:O,"aria-label":"Development preview",className:"view-transition-right-panel panel-enter-right relative flex min-h-0 shrink-0 flex-col border-l bg-background",style:{width:S},children:[t.jsx("div",{"aria-hidden":"true",className:"absolute inset-y-0 left-0 w-1 cursor-col-resize hover:bg-primary/30",onPointerDown:se,onPointerMove:ne,onPointerUp:F,onPointerCancel:F}),t.jsxs("div",{className:"flex h-10 shrink-0 items-center gap-2 px-3",children:[t.jsx(H,{"aria-hidden":"true",className:"size-4 text-muted-foreground"}),t.jsx("h2",{className:"text-sm font-medium",children:"Preview"}),t.jsx("span",{className:"flex-1"}),t.jsx(g,{variant:"ghost",size:"icon-sm",onClick:i,"aria-label":"Close preview",children:t.jsx(ye,{"data-icon":"inline-start"})})]}),t.jsx(K,{}),t.jsx("form",{className:"p-2",onSubmit:e=>{e.preventDefault(),U($)},children:t.jsx(ie,{className:"gap-2",children:t.jsxs(oe,{"data-invalid":!!z,children:[t.jsxs(le,{children:[t.jsx(ce,{ref:C,"aria-label":"Preview URL","aria-invalid":!!z,value:$,onChange:e=>y(e.target.value),placeholder:"localhost:3000",spellCheck:!1}),t.jsxs(de,{align:"inline-end",children:[t.jsx(G,{size:"icon-xs",disabled:!a,onClick:D,"aria-label":"Refresh preview",children:t.jsx(Se,{"data-icon":"inline-start",className:J?"animate-spin":void 0})}),t.jsx(G,{size:"icon-xs",disabled:!a,onClick:()=>window.open(a,"_blank","noopener,noreferrer"),"aria-label":"Open preview in browser",children:t.jsx(Ie,{"data-icon":"inline-start"})})]})]}),t.jsx(ue,{children:z})]})})}),Z.length>0&&t.jsxs("div",{className:"flex shrink-0 items-center gap-1 overflow-x-auto px-2 pb-2",children:[t.jsx(Ne,{"aria-hidden":"true",className:"size-3.5 shrink-0 text-muted-foreground"}),Z.map(e=>t.jsxs(g,{variant:"outline",size:"xs",className:"font-mono text-xs",onClick:()=>U(A(e,I)),"aria-label":`Open ${I}:${e} preview`,children:[":",e]},e))]}),t.jsxs("div",{className:"flex shrink-0 items-center justify-between gap-2 px-2 pb-2",children:[t.jsx(he,{"aria-label":"Preview viewport",value:[l],onValueChange:e=>{const r=e[0];r&&r in h&&te(r)},variant:"outline",size:"sm",spacing:0,children:Object.entries(h).map(([e,r])=>{const d=r.icon;return t.jsx(pe,{value:e,"aria-label":`${r.label} viewport`,title:r.width?`${r.label} · ${r.width}×${r.height}`:r.label,children:t.jsx(d,{})},e)})}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(g,{variant:"ghost",size:"icon-sm",disabled:o<=k,onClick:()=>p(e=>Math.max(k,Number((e-N).toFixed(1)))),"aria-label":"Zoom preview out",title:"Zoom out",children:t.jsx(ze,{"data-icon":"inline-start"})}),t.jsxs(g,{variant:"ghost",size:"sm",onClick:()=>p(1),"aria-label":"Reset preview zoom",children:[Math.round(o*100),"%"]}),t.jsx(g,{variant:"ghost",size:"icon-sm",disabled:o>=E,onClick:()=>p(e=>Math.min(E,Number((e+N).toFixed(1)))),"aria-label":"Zoom preview in",title:"Zoom in",children:t.jsx(Re,{"data-icon":"inline-start"})})]})]}),t.jsx(K,{}),t.jsx("div",{className:"min-h-0 flex-1 overflow-auto bg-muted/30 p-3",children:a?t.jsx("div",{className:me("relative mx-auto overflow-hidden bg-white ring-1 ring-border",l==="responsive"&&"size-full"),style:l==="responsive"?void 0:{width:h[l].width*o,height:h[l].height*o},children:t.jsx("iframe",{title:"Development preview",src:a,className:"block border-0 bg-white",style:l==="responsive"?{width:`${100/o}%`,height:`${100/o}%`,transform:`scale(${o})`,transformOrigin:"top left"}:{width:h[l].width,height:h[l].height,transform:`scale(${o})`,transformOrigin:"top left"},sandbox:"allow-downloads allow-forms allow-modals allow-popups allow-same-origin allow-scripts",referrerPolicy:"no-referrer",onLoad:()=>T(!1)},`${a}-${Q}`)}):t.jsx(fe,{className:"size-full",children:t.jsxs(xe,{children:[t.jsx(we,{variant:"icon",children:t.jsx(H,{})}),t.jsx(ve,{children:"No preview selected"}),t.jsx(ge,{children:"Start a local development server or enter its URL above. Detected ports appear automatically."})]})})})]})}export{Le as PreviewPanel,V as normalizePreviewUrl};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as a,j as t,c as Pe}from"./vendor-react-gGw_S5I_.js";import{E as V,y as Y,z as Q,G as q,H as J,w as ie,_ as we,aw as ut,al as ge,B as P,ax as Mt,ay as It,az as zt,aA as $t,l as xe,a4 as le,m as Ut,I as At,n as Pt,Y as rt,Z as me,q as Ot,aB as Gt,aC as Ht,aD as Wt,D as Kt,h as Bt,i as Xt,j as Vt,k as Yt,aE as Qt,aF as qt,a9 as Jt,aa as Zt,ab as _t,ad as es,ae as ts,af as ss,ag as ns,ah as as,Q as ls}from"./index-
|
|
1
|
+
import{r as a,j as t,c as Pe}from"./vendor-react-gGw_S5I_.js";import{E as V,y as Y,z as Q,G as q,H as J,w as ie,_ as we,aw as ut,al as ge,B as P,ax as Mt,ay as It,az as zt,aA as $t,l as xe,a4 as le,m as Ut,I as At,n as Pt,Y as rt,Z as me,q as Ot,aB as Gt,aC as Ht,aD as Wt,D as Kt,h as Bt,i as Xt,j as Vt,k as Yt,aE as Qt,aF as qt,a9 as Jt,aa as Zt,ab as _t,ad as es,ae as ts,af as ss,ag as ns,ah as as,Q as ls}from"./index-9nniVy_T.js";import{H as is}from"./HighlightedEditor-DIp1oA0P.js";import{N as je,p as Ue,F as rs,O as os,C as cs,X as ds,G as fs,S as us,b as ot,Q as ct,U as hs,k as ze}from"./vendor-ui-CKSkT7i9.js";import{M as xs}from"./vendor-markdown-BE1gYnO9.js";import"./vendor-shiki-DOn6sF-i.js";const ms=12,ht="h-6 w-full justify-start gap-1 rounded-none px-2 text-left font-normal";function Ce(n,e){return{paddingLeft:8+n*ms+(e?0:16)}}function ps(n){const e=n;return typeof e=="object"&&e!==null&&typeof e.name=="string"&&(e.type==="file"||e.type==="directory")}function gs(n){const e=n==null?void 0:n.entries;return Array.isArray(e)?e.filter(ps):[]}async function dt(n,e,i){try{const o=await ie(`/api/project-files/tree?cwd=${encodeURIComponent(n)}&dir=${encodeURIComponent(e)}${i?"&refresh=1":""}`);if(!o.ok){const p=await o.json().catch(()=>null),u=p==null?void 0:p.error;throw new Error(typeof u=="string"?u:"Unable to list directory")}const c=await o.json();return{status:"ready",entries:gs(c),scanLimited:c.scanLimited===!0}}catch(o){return{status:"error",message:o instanceof Error?o.message:"Unable to list directory"}}}function js(n){const e=n.split("/");return e.slice(0,-1).map((i,o)=>e.slice(0,o+1).join("/"))}function ws({cwd:n,selectedPath:e,onSelect:i,fileStatus:o,reloadToken:c}){const[p,u]=a.useState(()=>new Map),[S,j]=a.useState(()=>new Set),w=a.useRef(new Set),D=a.useRef(n);D.current=n;const x=a.useCallback(async m=>{if(w.current.has(m))return;w.current.add(m),u(b=>new Map(b).set(m,{status:"loading"}));const y=await dt(n,m,!1);w.current.delete(m),D.current===n&&u(b=>new Map(b).set(m,y))},[n]),f=a.useRef(null);a.useEffect(()=>{const m=f.current===n;f.current=n,m||j(new Set),u(new Map([["",{status:"loading"}]]));let y=!1;return dt(n,"",m).then(b=>{y||u(new Map([["",b]]))}),()=>{y=!0}},[n,c]),a.useEffect(()=>{if(!e)return;const m=js(e);m.length!==0&&j(y=>{if(m.every(R=>y.has(R)))return y;const b=new Set(y);for(const R of m)b.add(R);return b})},[e]);const N=a.useCallback(m=>{j(y=>{const b=new Set(y);return b.has(m)?b.delete(m):b.add(m),b})},[]),g=p.get(""),E=ys(g);return t.jsxs("div",{"aria-label":"Project file tree",className:"flex flex-col py-1",children:[E?t.jsx(V,{className:"min-h-48 rounded-none p-4",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(E.Icon,{})}),t.jsx(q,{children:E.title}),t.jsx(J,{children:E.description})]})}):t.jsx(xt,{directory:"",depth:0,state:g,directories:p,expanded:S,selectedPath:e,onSelect:i,onToggle:N,onLoad:x,fileStatus:o}),(g==null?void 0:g.status)==="ready"&&g.scanLimited&&t.jsx("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:"This project is too large to scan completely."})]})}function ys(n){return(n==null?void 0:n.status)==="error"?{Icon:je,title:"Could not load files",description:n.message}:(n==null?void 0:n.status)==="ready"&&n.entries.length===0?{Icon:Ue,title:"No files",description:"This project has no files to show."}:null}function xt(n){const e=Pe.c(22),{directory:i,depth:o,state:c,onLoad:p,...u}=n;let S,j;if(e[0]!==i||e[1]!==p||e[2]!==c?(S=()=>{c===void 0&&i!==""&&p(i)},j=[i,p,c],e[0]=i,e[1]=p,e[2]=c,e[3]=S,e[4]=j):(S=e[3],j=e[4]),a.useEffect(S,j),!c||c.status==="loading"){let x;e[5]!==o?(x=Ce(o,!1),e[5]=o,e[6]=x):x=e[6];let f;e[7]===Symbol.for("react.memo_cache_sentinel")?(f=t.jsx(ge,{className:"size-3"}),e[7]=f):f=e[7];const N=i===""&&"Loading files…";let g;return e[8]!==x||e[9]!==N?(g=t.jsxs("div",{role:"status",className:"flex h-6 items-center gap-2 text-xs text-muted-foreground",style:x,children:[f,N]}),e[8]=x,e[9]=N,e[10]=g):g=e[10],g}if(c.status==="error"){let x;e[11]!==o?(x=Ce(o,!1),e[11]=o,e[12]=x):x=e[12];let f;e[13]===Symbol.for("react.memo_cache_sentinel")?(f=t.jsx(je,{"aria-hidden":"true",className:"size-3 shrink-0"}),e[13]=f):f=e[13];let N;e[14]!==c.message?(N=t.jsx("span",{className:"truncate",children:c.message}),e[14]=c.message,e[15]=N):N=e[15];let g;return e[16]!==c.message||e[17]!==x||e[18]!==N?(g=t.jsxs("div",{role:"alert",className:"flex h-6 items-center gap-1.5 truncate text-xs text-destructive",style:x,title:c.message,children:[f,N]}),e[16]=c.message,e[17]=x,e[18]=N,e[19]=g):g=e[19],g}const w=c.entries.map(x=>{const f=i?`${i}/${x.name}`:x.name;return x.type==="directory"?t.jsx(vs,{path:f,name:x.name,depth:o,onLoad:p,...u},f):t.jsx(bs,{path:f,name:x.name,depth:o,selected:u.selectedPath===f,status:u.fileStatus(f),onSelect:u.onSelect},f)});let D;return e[20]!==w?(D=t.jsx(t.Fragment,{children:w}),e[20]=w,e[21]=D):D=e[21],D}function vs(n){const e=Pe.c(48);let i,o,c,p,u,S,j,w,D,x,f,N,g,E,m,y,b;e[0]!==n?({path:j,name:u,depth:p,...w}=n,S=w.expanded.has(j),i=S?rs:os,c=P,f="ghost",N="sm",g=S,E=ht,e[18]!==p?(m=Ce(p,!0),e[18]=p,e[19]=m):m=e[19],y=()=>w.onToggle(j),b=j,o=cs,D="true",x=we("size-3 shrink-0 text-muted-foreground transition-transform",S&&"rotate-90"),e[0]=n,e[1]=i,e[2]=o,e[3]=c,e[4]=p,e[5]=u,e[6]=S,e[7]=j,e[8]=w,e[9]=D,e[10]=x,e[11]=f,e[12]=N,e[13]=g,e[14]=E,e[15]=m,e[16]=y,e[17]=b):(i=e[1],o=e[2],c=e[3],p=e[4],u=e[5],S=e[6],j=e[7],w=e[8],D=e[9],x=e[10],f=e[11],N=e[12],g=e[13],E=e[14],m=e[15],y=e[16],b=e[17]);let R;e[20]!==o||e[21]!==D||e[22]!==x?(R=t.jsx(o,{"aria-hidden":D,className:x}),e[20]=o,e[21]=D,e[22]=x,e[23]=R):R=e[23];let F;e[24]!==i?(F=t.jsx(i,{"aria-hidden":"true",className:"size-3.5 shrink-0 text-muted-foreground"}),e[24]=i,e[25]=F):F=e[25];let T;e[26]!==u?(T=t.jsx("span",{className:"min-w-0 flex-1 truncate text-xs",children:u}),e[26]=u,e[27]=T):T=e[27];let L;e[28]!==c||e[29]!==R||e[30]!==F||e[31]!==T||e[32]!==f||e[33]!==N||e[34]!==g||e[35]!==E||e[36]!==m||e[37]!==y||e[38]!==b?(L=t.jsxs(c,{variant:f,size:N,"aria-expanded":g,className:E,style:m,onClick:y,title:b,children:[R,F,T]}),e[28]=c,e[29]=R,e[30]=F,e[31]=T,e[32]=f,e[33]=N,e[34]=g,e[35]=E,e[36]=m,e[37]=y,e[38]=b,e[39]=L):L=e[39];let M;e[40]!==p||e[41]!==S||e[42]!==j||e[43]!==w?(M=S&&t.jsx("div",{children:t.jsx(xt,{directory:j,depth:p+1,state:w.directories.get(j),...w})}),e[40]=p,e[41]=S,e[42]=j,e[43]=w,e[44]=M):M=e[44];let A;return e[45]!==L||e[46]!==M?(A=t.jsxs("div",{children:[L,M]}),e[45]=L,e[46]=M,e[47]=A):A=e[47],A}function bs(n){const e=Pe.c(28),{path:i,name:o,depth:c,selected:p,status:u,onSelect:S}=n,j=a.useRef(null);let w;e[0]!==i?(w=ut(i),e[0]=i,e[1]=w):w=e[1];const D=w;let x,f;e[2]!==p?(x=()=>{var M,A;p&&((A=(M=j.current)==null?void 0:M.scrollIntoView)==null||A.call(M,{block:"nearest"}))},f=[p],e[2]=p,e[3]=x,e[4]=f):(x=e[3],f=e[4]),a.useEffect(x,f);const N=p||void 0,g=p?"secondary":"ghost";let E;e[5]!==c?(E=Ce(c,!1),e[5]=c,e[6]=E):E=e[6];let m;e[7]!==S||e[8]!==i?(m=()=>S(i),e[7]=S,e[8]=i,e[9]=m):m=e[9];let y;e[10]!==D?(y=t.jsx(D,{"aria-hidden":"true",className:"size-3.5 shrink-0 text-muted-foreground"}),e[10]=D,e[11]=y):y=e[11];const b=u&&u.className;let R;e[12]!==b?(R=we("min-w-0 flex-1 truncate text-xs",b),e[12]=b,e[13]=R):R=e[13];let F;e[14]!==o||e[15]!==R?(F=t.jsx("span",{className:R,children:o}),e[14]=o,e[15]=R,e[16]=F):F=e[16];let T;e[17]!==u?(T=u&&t.jsx("span",{className:we("shrink-0 font-mono text-[10px]",u.className),title:u.label,children:u.code}),e[17]=u,e[18]=T):T=e[18];let L;return e[19]!==i||e[20]!==F||e[21]!==T||e[22]!==N||e[23]!==g||e[24]!==E||e[25]!==m||e[26]!==y?(L=t.jsxs(P,{ref:j,"aria-current":N,variant:g,size:"sm",className:ht,style:E,onClick:m,title:i,children:[y,F,T]}),e[19]=i,e[20]=F,e[21]=T,e[22]=N,e[23]=g,e[24]=E,e[25]=m,e[26]=y,e[27]=L):L=e[27],L}const Ae=520,Ns=760,mt="cogpit-project-files-width",Ss={"?":{label:"Untracked",className:"text-info"},A:{label:"Added",className:"text-success"},M:{label:"Modified",className:"text-warning"},D:{label:"Deleted",className:"text-destructive"},R:{label:"Renamed",className:"text-info"},C:{label:"Copied",className:"text-info"},U:{label:"Conflicted",className:"text-destructive"}};function $e(n){const e=n.workTreeStatus.trim()||n.indexStatus.trim();return Ss[e]??{label:"Changed",className:"text-muted-foreground"}}function Cs(n){return`${n.indexStatus}${n.workTreeStatus}`.trim()||"?"}const ks=new Set([".md",".mdx",".markdown"]);function ft(n){const e=n.lastIndexOf(".");return e!==-1&&ks.has(n.slice(e).toLowerCase())}function Es(n,e,i){if(!n||/^(?:[a-z]+:|\/|#)/i.test(n))return n;const o=i.includes("/")?i.slice(0,i.lastIndexOf("/")):"",c=[];for(const u of[...o.split("/"),...n.split("/")])u===".."?c.pop():u&&u!=="."&&c.push(u);const p=e.includes("\\")?"\\":"/";return[e.replace(/[\\/]+$/,""),...c].join(p)}function Ds(){try{const n=Number(localStorage.getItem(mt));if(Number.isFinite(n)&&n>=Ae)return n}catch{}return Ns}async function pe(n,e){try{const i=await n.json();if(i&&typeof i=="object"&&typeof i.error=="string")return i.error}catch{}return e}function Rs(n){return n<1024?`${n} B`:`${(n/1024).toFixed(n<10*1024?1:0)} KB`}function Fs(n,e){let i=0;for(let o=1;o<e;o+=1){const c=n.indexOf(`
|
|
2
2
|
`,i);if(c<0)return i;i=c+1}return i}function Us({cwd:n,onClose:e,onAddToPrompt:i,openRequest:o,embedded:c=!1}){const p=a.useRef(null),u=a.useRef(null),S=a.useRef(null),j=a.useRef(null),[w,D]=a.useState(Ds),x=a.useRef(w),[f,N]=a.useState(""),[g,E]=a.useState([]),[m,y]=a.useState(!0),[b,R]=a.useState(null),[F,T]=a.useState(0),[L,M]=a.useState(!1),[A,pt]=a.useState(0),ke=a.useRef(!1),[r,Oe]=a.useState(null),[I,Z]=a.useState(""),[gt,re]=a.useState(""),[O,oe]=a.useState(null),[jt,Ge]=a.useState(0),[K,He]=a.useState(!1),[_,We]=a.useState(!1),[Ke,ee]=a.useState(null),[wt,te]=a.useState(!1),[z,Ee]=a.useState("all"),[v,Be]=a.useState(null),[Xe,Ve]=a.useState(!1),[yt,Ye]=a.useState(null),[C,ce]=a.useState("edit"),[k,ye]=a.useState(null),[de,Qe]=a.useState(!1),[qe,De]=a.useState(null),[fe,B]=a.useState(null),[G,ve]=a.useState(null),[be,Re]=a.useState(""),[W,ue]=a.useState(null),$=r!==null&&I!==gt,U=a.useMemo(()=>new Map(((v==null?void 0:v.files)??[]).flatMap(s=>[[s.path,s],...s.originalPath?[[s.originalPath,s]]:[]])),[v==null?void 0:v.files]),se=a.useCallback(async()=>{Ve(!0),Ye(null);try{const s=await ie(`/api/git-status?cwd=${encodeURIComponent(n)}`);if(!s.ok)throw new Error(await pe(s,"Unable to read git status"));const l=await s.json();Be(l),l.isRepository||Ee("all")}catch(s){Be(null),Ee("all"),Ye(s instanceof Error?s.message:"Unable to read git status")}finally{Ve(!1)}},[n]);a.useEffect(()=>{se()},[se]);const Fe=z==="all"&&f.trim()==="";a.useEffect(()=>{if(Fe)return;const s=new AbortController,l=window.setTimeout(async()=>{y(!0),R(null);const d=ke.current;ke.current=!1;try{const h=await ie(`/api/project-files?cwd=${encodeURIComponent(n)}&q=${encodeURIComponent(f)}&limit=100${d?"&refresh=1":""}`,{signal:s.signal});if(!h.ok)throw new Error(await pe(h,"Unable to list project files"));const H=await h.json();if(s.signal.aborted)return;const lt=Mt(H),it=H.totalMatches;E(lt),T(typeof it=="number"?it:lt.length),M(H.scanLimited===!0)}catch(h){s.signal.aborted||(E([]),R(h instanceof Error?h.message:"Unable to list project files"))}finally{s.signal.aborted||y(!1)}},120);return()=>{window.clearTimeout(l),s.abort()}},[n,f,A,Fe]),a.useEffect(()=>{Oe(null),Z(""),re(""),oe(null),ee(null),B(null),ce("edit"),ye(null),De(null),ue(null)},[n]),a.useEffect(()=>{if(!$)return;const s=l=>l.preventDefault();return window.addEventListener("beforeunload",s),()=>window.removeEventListener("beforeunload",s)},[$]);const vt=a.useCallback((s,l)=>{const d=u.current;if(!d)return;if(!l||l<1){d.focus();return}const h=Fs(s,l);d.blur(),d.setSelectionRange(h,h),d.focus()},[]);a.useEffect(()=>{const s=S.current;!s||!u.current||(S.current=null,vt(s.text,s.line))});const ne=a.useCallback(async(s,l)=>{He(!0),ee(null),te(!1),B(null);try{const d=await ie(`/api/project-file?cwd=${encodeURIComponent(n)}&path=${encodeURIComponent(s)}`);if(!d.ok)throw new Error(await pe(d,"Unable to open file"));const h=await d.json();Z(h.content),re(h.content),oe(h.mtimeMs),Ge(h.size),S.current={text:h.content,line:l}}catch(d){Z(""),re(""),oe(null),ee(d instanceof Error?d.message:"Unable to open file")}finally{He(!1)}},[n]),ae=a.useCallback(async(s,l)=>{Qe(!0),De(null),ye(null);try{const d=l?`&originalPath=${encodeURIComponent(l)}`:"",h=await ie(`/api/git-diff?cwd=${encodeURIComponent(n)}&path=${encodeURIComponent(s)}${d}`);if(!h.ok)throw new Error(await pe(h,"Unable to diff file"));ye(await h.json())}catch(d){De(d instanceof Error?d.message:"Unable to diff file")}finally{Qe(!1)}},[n]),Ne=a.useCallback(({path:s,mode:l,line:d})=>{var h;if(Oe(s),l==="edit"){ce(ft(s)&&!d?"preview":"edit"),ne(s,d);return}ce(l),Z(""),re(""),oe(null),ee(null),te(!1),B(null),ae(s,(h=U.get(s))==null?void 0:h.originalPath)},[U,ae,ne]),Se=a.useCallback(s=>{if($){ue({type:"file",target:s});return}Ne(s)},[$,Ne]),Je=a.useCallback(s=>{if(s===r)return;const l=z==="changes"&&U.has(s)?"diff":"edit";Se({path:s,mode:l})},[U,z,Se,r]),Ze=a.useRef(0);a.useEffect(()=>{!o||o.token===Ze.current||(Ze.current=o.token,Se({path:o.file,mode:o.mode,line:o.line}))},[o,Se]);const bt=a.useCallback(()=>{var s;!r||C==="diff"||(ce("diff"),(k==null?void 0:k.path)!==r&&!de&&ae(r,(s=U.get(r))==null?void 0:s.originalPath))},[U,k==null?void 0:k.path,de,ae,r,C]),Nt=a.useCallback(s=>{!r||C===s||(ce(s),O===null&&!K&&ne(r))},[K,ne,O,r,C]),Te=a.useCallback(()=>{var s;if(r){if(C==="diff"){ae(r,(s=U.get(r))==null?void 0:s.originalPath);return}ne(r)}},[U,ae,ne,r,C]),St=a.useCallback(()=>{ke.current=!0,pt(s=>s+1),se(),C==="diff"&&Te()},[se,Te,C]),Le=a.useCallback(async()=>{if(!(!r||O===null||!$||_)){We(!0),ee(null),te(!1);try{const s=await ie("/api/project-file",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:n,path:r,content:I,expectedMtimeMs:O})});if(!s.ok)throw new Error(await pe(s,"Unable to save file"));const l=await s.json();re(I),oe(l.mtimeMs),Ge(l.size),te(!0),ye(null),se()}catch(s){ee(s instanceof Error?s.message:"Unable to save file")}finally{We(!1)}}},[I,n,$,se,O,_,r]);a.useEffect(()=>{function s(l){var d;(d=p.current)!=null&&d.contains(document.activeElement)&&ls("projectFileSave",l)&&(l.preventDefault(),Le())}return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[Le]);const Ct=a.useCallback(()=>{if($){ue({type:"close"});return}e()},[$,e]),kt=a.useCallback(()=>{if(!W)return;const s=W;if(ue(null),s.type==="file"){Ne(s.target);return}e()},[e,Ne,W]),Et=a.useCallback(s=>{if(s.key!=="Tab")return;s.preventDefault();const l=s.currentTarget,d=l.selectionStart,h=l.selectionEnd,H=`${I.slice(0,d)} ${I.slice(h)}`;Z(H),te(!1),B(null),requestAnimationFrame(()=>{l.selectionStart=d+2,l.selectionEnd=d+2})},[I]),Dt=a.useCallback(s=>{const l=s.currentTarget;if(l.selectionStart===l.selectionEnd){B(null);return}const d=I.slice(l.selectionStart,l.selectionEnd),h=I.slice(0,l.selectionStart).split(`
|
|
3
3
|
`).length,H=h+d.split(`
|
|
4
4
|
`).length-1;B({text:d,startLine:h,endLine:H})},[I]),Rt=a.useCallback(s=>{s.preventDefault(),j.current={startX:s.clientX,startWidth:w},s.currentTarget.setPointerCapture(s.pointerId)},[w]),Ft=a.useCallback(s=>{if(!j.current)return;const l=Math.max(Ae,window.innerWidth*.9),d=j.current.startWidth+(j.current.startX-s.clientX),h=Math.min(l,Math.max(Ae,d));x.current=h,D(h)},[]),_e=a.useCallback(()=>{if(j.current){j.current=null;try{localStorage.setItem(mt,String(x.current))}catch{}}},[]),Me=a.useMemo(()=>(r==null?void 0:r.split("/").at(-1))??null,[r]),he=r?U.get(r):void 0,et=r!==null&&ft(r),tt=a.useCallback(s=>{const l=U.get(s);return l?{code:Cs(l),...$e(l)}:null},[U]),Tt=a.useMemo(()=>({...It,img:s=>t.jsx(zt,{src:Es(s.src,n,r??""),alt:s.alt})}),[n,r]),Ie=a.useMemo(()=>k&&!k.binary&&!k.tooLarge?$t(k.original??"",k.current??""):null,[k]),X=a.useMemo(()=>{if(z==="all")return g;const s=f.trim().toLowerCase();return((v==null?void 0:v.files)??[]).map(l=>l.path).filter((l,d,h)=>h.indexOf(l)===d).filter(l=>!s||l.toLowerCase().includes(s)).sort((l,d)=>l.localeCompare(d))},[z,g,v==null?void 0:v.files,f]),st=a.useMemo(()=>r&&!X.includes(r)?[r,...X]:X,[X,r]),Lt=z==="changes"?Xe:m,nt=z==="changes"?yt:b,at=Xe;return t.jsxs("aside",{ref:p,"aria-label":"Project files",className:we("relative flex min-h-0 flex-col bg-background",c?"size-full":"view-transition-right-panel panel-enter-right shrink-0 border-l"),style:c?void 0:{width:w},children:[!c&&t.jsx("div",{"aria-hidden":"true",className:"absolute inset-y-0 left-0 w-1 cursor-col-resize hover:bg-accent",onPointerDown:Rt,onPointerMove:Ft,onPointerUp:_e,onPointerCancel:_e}),t.jsxs("div",{className:"flex h-10 shrink-0 items-center gap-2 px-3",children:[t.jsx(Ue,{"data-icon":"inline-start","aria-hidden":"true",className:"size-4 text-muted-foreground"}),t.jsx("h2",{className:"text-sm font-medium",children:"Project files"}),t.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground",title:n,children:n}),t.jsx(P,{variant:"ghost",size:"icon-sm",onClick:Ct,"aria-label":"Close project files",children:t.jsx(ds,{"data-icon":"inline-start"})})]}),t.jsx(xe,{}),(v==null?void 0:v.isRepository)&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex h-8 shrink-0 items-center gap-2 px-3 text-xs text-muted-foreground",children:[t.jsx(fs,{"data-icon":"inline-start","aria-hidden":"true",className:"size-3.5"}),t.jsx("span",{className:"max-w-40 truncate font-mono text-foreground",title:v.branch??"Detached HEAD",children:v.branch??"detached HEAD"}),v.upstream&&t.jsxs("span",{className:"truncate",children:["tracks ",v.upstream]}),(v.ahead??0)>0&&t.jsxs(le,{variant:"outline",children:["↑ ",v.ahead]}),(v.behind??0)>0&&t.jsxs(le,{variant:"outline",children:["↓ ",v.behind]}),t.jsx("span",{className:"flex-1"}),t.jsxs("span",{children:[v.files.length," changed"]})]}),t.jsx(xe,{})]}),t.jsxs("div",{className:"flex min-h-0 flex-1",children:[t.jsxs("section",{"aria-label":"File browser",className:"flex w-56 shrink-0 flex-col",children:[t.jsxs("div",{className:"flex flex-col gap-2 p-2",children:[t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsxs(Ut,{className:"min-w-0 flex-1",children:[t.jsx(At,{children:t.jsx(us,{"data-icon":"inline-start"})}),t.jsx(Pt,{"aria-label":"Search project files",value:f,onChange:s=>N(s.target.value),placeholder:"Filter files…",spellCheck:!1})]}),t.jsx(P,{variant:"ghost",size:"icon-sm",disabled:at,onClick:St,"aria-label":"Refresh files and git status",title:"Refresh files and git status",children:t.jsx(ot,{"data-icon":"inline-start",className:at?"animate-spin":void 0})})]}),(v==null?void 0:v.isRepository)&&t.jsxs(rt,{"aria-label":"File scope",value:[z],onValueChange:s=>{const l=s[0];(l==="all"||l==="changes")&&Ee(l)},variant:"outline",size:"sm",spacing:0,className:"w-full",children:[t.jsx(me,{value:"all",className:"flex-1",children:"All files"}),t.jsx(me,{value:"changes",className:"flex-1",children:"Changes"})]})]}),t.jsx(xe,{}),t.jsx(Ot,{className:"min-h-0 flex-1",children:Fe?t.jsx(ws,{cwd:n,selectedPath:r,onSelect:Je,fileStatus:tt,reloadToken:A}):Lt?t.jsxs("div",{className:"flex items-center justify-center gap-2 p-6 text-xs text-muted-foreground",role:"status",children:[t.jsx(ge,{}),"Loading files…"]}):nt?t.jsx(V,{className:"min-h-48 rounded-none p-4",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(je,{})}),t.jsx(q,{children:"Could not load files"}),t.jsx(J,{children:nt})]})}):st.length===0?t.jsx(V,{className:"min-h-48 rounded-none p-4",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(Ue,{})}),t.jsx(q,{children:z==="changes"?"No working-tree changes":"No matching files"}),t.jsx(J,{children:z==="changes"?"This project has no changed files matching the filter.":"Try a different path or filename."})]})}):t.jsxs("div",{className:"flex flex-col py-1",children:[st.map(s=>{const l=s.split("/").at(-1)??s,d=s.includes("/")?s.slice(0,s.lastIndexOf("/")):"",h=tt(s),H=ut(s);return t.jsxs(P,{variant:r===s?"secondary":"ghost",size:"sm",className:"h-auto w-full justify-start rounded-none px-2 py-1.5 text-left",onClick:()=>Je(s),title:s,children:[t.jsx(H,{"data-icon":"inline-start",className:"text-muted-foreground"}),t.jsxs("span",{className:"min-w-0 flex-1",children:[t.jsx("span",{className:"block truncate text-xs",children:l}),d&&t.jsx("span",{className:"block truncate font-mono text-xs text-muted-foreground",children:d})]}),h&&t.jsx(le,{variant:"outline",className:we("font-mono",h.className),title:h.label,children:h.code})]},s)}),z==="all"&&(F>X.length||L)&&t.jsxs("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:[F>X.length&&`Showing ${X.length} of ${F} matches. Type to narrow the list. `,L&&"This project is too large to scan completely."]})]})})]}),t.jsx(xe,{orientation:"vertical"}),t.jsx("section",{"aria-label":"File editor",className:"flex min-w-0 flex-1 flex-col",children:r?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex h-10 shrink-0 items-center gap-2 px-3",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-xs font-medium",title:r,children:Me}),t.jsx("p",{className:"truncate font-mono text-xs text-muted-foreground",children:r})]}),(he||C==="diff"||et)&&t.jsxs(rt,{"aria-label":"File view",value:[C],onValueChange:s=>{s[0]==="diff"?bt():(s[0]==="edit"||s[0]==="preview")&&Nt(s[0])},variant:"outline",size:"sm",spacing:0,children:[(he||C==="diff")&&t.jsx(me,{value:"diff",children:"Diff"}),et&&t.jsx(me,{value:"preview",children:"Preview"}),t.jsx(me,{value:"edit",children:"Edit"})]}),C==="diff"&&he&&t.jsx(le,{variant:"outline",className:$e(he).className,children:$e(he).label}),C==="diff"&&Ie&&t.jsx(Gt,{add:Ie.add,del:Ie.del}),C!=="diff"&&$&&t.jsx(le,{variant:"outline",children:"Unsaved"}),C!=="diff"&&!$&&wt&&t.jsx(le,{variant:"secondary",children:"Saved"}),C!=="diff"&&O!==null&&t.jsx("span",{className:"text-xs text-muted-foreground",children:Rs(jt)}),i&&t.jsxs(P,{variant:"outline",size:"sm",disabled:C==="diff"?de||k===null:K||O===null,onClick:()=>{fe?(Re(""),ve(fe)):i({path:r})},"aria-label":fe?"Add selected lines to prompt":"Reference file in prompt",title:fe?"Add selected lines to prompt":"Reference file in prompt",children:[t.jsx(ct,{"data-icon":"inline-start"}),fe?"Add selection":"Reference"]}),t.jsx(P,{variant:"ghost",size:"icon-sm",disabled:C==="diff"?de:K||_,onClick:Te,"aria-label":C==="diff"?"Reload diff":"Reload file",title:C==="diff"?"Reload diff":"Reload file",children:t.jsx(ot,{"data-icon":"inline-start"})}),C!=="diff"&&t.jsxs(P,{size:"sm",disabled:!$||K||_||O===null,onClick:()=>void Le(),children:[_?t.jsx(ge,{"data-icon":"inline-start"}):t.jsx(hs,{"data-icon":"inline-start"}),_?"Saving…":"Save"]})]}),t.jsx(xe,{}),C!=="diff"&&Ke&&t.jsxs("div",{role:"alert",className:"flex items-center gap-2 px-3 py-2 text-xs text-destructive",children:[t.jsx(je,{"data-icon":"inline-start","aria-hidden":"true",className:"size-4 shrink-0"}),t.jsx("span",{children:Ke})]}),C==="diff"?t.jsx("div",{className:"flex min-h-0 flex-1 flex-col",children:de?t.jsxs("div",{className:"flex size-full items-center justify-center gap-2 text-xs text-muted-foreground",role:"status",children:[t.jsx(ge,{}),"Loading diff…"]}):qe?t.jsx(V,{className:"rounded-none",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(je,{})}),t.jsx(q,{children:"Could not diff this file"}),t.jsx(J,{children:qe})]})}):k===null?null:k.binary||k.tooLarge?t.jsx(V,{className:"rounded-none",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(ze,{})}),t.jsx(q,{children:k.binary?"Binary file":"File is too large to diff"}),t.jsx(J,{children:k.binary?"Git tracks this change, but there is no text diff to show.":"Review this change in your editor instead."})]})}):k.original===k.current?t.jsx(V,{className:"rounded-none",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(ze,{})}),t.jsx(q,{children:"No content changes"}),t.jsx(J,{children:"This file matches the last commit — only its mode or index entry differs."})]})}):t.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:t.jsx(Ht,{oldString:k.original??"",newString:k.current??"",filePath:r,compact:!1,hideHeader:!0})})}):t.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[K&&t.jsxs("div",{className:"flex size-full items-center justify-center gap-2 text-xs text-muted-foreground",role:"status",children:[t.jsx(ge,{}),"Opening file…"]}),!K&&O!==null&&(C==="preview"?t.jsx("div",{"aria-label":`Preview of ${r}`,className:"min-h-0 flex-1 overflow-auto break-words px-6 py-4 text-sm",children:t.jsx(xs,{components:Tt,remarkPlugins:Wt,children:I})}):t.jsx(is,{textareaRef:u,ariaLabel:`Editing ${r}`,filePath:r,value:I,readOnly:!1,onChange:s=>{Z(s),te(!1),B(null)},onKeyDown:Et,onSelect:Dt}))]})]}):t.jsx(V,{className:"rounded-none",children:t.jsxs(Y,{children:[t.jsx(Q,{variant:"icon",children:t.jsx(ze,{})}),t.jsx(q,{children:"Select a file"}),t.jsx(J,{children:"Browse or filter project files, then open one to inspect and edit it."})]})})})]}),t.jsx(Kt,{open:G!==null,onOpenChange:s=>{s||ve(null)},children:t.jsxs(Bt,{children:[t.jsxs(Xt,{children:[t.jsx(Vt,{children:"Comment on selected lines"}),t.jsxs(Yt,{children:["Add a review instruction for ",r," lines ",G==null?void 0:G.startLine,"-",G==null?void 0:G.endLine,"."]})]}),t.jsxs("form",{className:"flex flex-col gap-4",onSubmit:s=>{s.preventDefault();const l=be.trim();!r||!G||!l||!i||(i({path:r,...G,comment:l}),ve(null),Re(""))},children:[t.jsx(Qt,{autoFocus:!0,"aria-label":"Review comment",value:be,onChange:s=>Re(s.target.value),placeholder:"Describe the change you want…",onKeyDown:s=>{var l;(s.metaKey||s.ctrlKey)&&s.key==="Enter"&&be.trim()&&(s.preventDefault(),(l=s.currentTarget.form)==null||l.requestSubmit())}}),t.jsxs(qt,{children:[t.jsx(P,{type:"button",variant:"outline",onClick:()=>ve(null),children:"Cancel"}),t.jsxs(P,{type:"submit",disabled:!be.trim(),children:[t.jsx(ct,{"data-icon":"inline-start"}),"Add to prompt"]})]})]})]})}),t.jsx(Jt,{open:W!==null,onOpenChange:s=>{s||ue(null)},children:t.jsxs(Zt,{size:"sm",children:[t.jsxs(_t,{children:[t.jsx(es,{children:"Discard unsaved changes?"}),t.jsx(ts,{children:(W==null?void 0:W.type)==="file"?`Your edits to ${Me??"this file"} will be lost when you open ${W.target.path}.`:`Your edits to ${Me??"this file"} will be lost when you close the file workspace.`})]}),t.jsxs(ss,{children:[t.jsx(ns,{size:"sm",children:"Keep editing"}),t.jsx(as,{variant:"destructive",size:"sm",onClick:kt,children:"Discard changes"})]})]})})]})}export{Us as ProjectFilesPanel};
|
package/dist/web/assets/{ProjectSwitcherModal-D37bS3Y8.js → ProjectSwitcherModal-HW-WAt1o.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as U,r as A,j as t}from"./vendor-react-gGw_S5I_.js";import{v as X,w as Y,i as Z,j as _,k as ee,C as te,x as se,E as ae,y as ne,z as ie,G as oe,H as le,J as q,L as re,M as J,N as de,O as ce,h as me,P as he,D as ue,Q as fe,R as xe}from"./index-
|
|
1
|
+
import{c as U,r as A,j as t}from"./vendor-react-gGw_S5I_.js";import{v as X,w as Y,i as Z,j as _,k as ee,C as te,x as se,E as ae,y as ne,z as ie,G as oe,H as le,J as q,L as re,M as J,N as de,O as ce,h as me,P as he,D as ue,Q as fe,R as xe}from"./index-9nniVy_T.js";import{F as Q,a as pe}from"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";function ve(v){const e=U.c(56),{open:l,onClose:n,onNewSession:c,onNewFolder:H,defaultAgentKind:O,currentProjectDirName:u,currentProjectCwd:m}=v;let S;e[0]===Symbol.for("react.memo_cache_sentinel")?(S=[],e[0]=S):S=e[0];const[o,K]=A.useState(S),[r,W]=A.useState("");let P,D;e[1]!==l?(P=()=>{l&&(W(""),Y("/api/projects").then(Ne).then(s=>K(s)).catch(()=>K([])))},D=[l],e[1]=l,e[2]=P,e[3]=D):(P=e[2],D=e[3]),A.useEffect(P,D);let E,F;e[4]!==m||e[5]!==u||e[6]!==n||e[7]!==c||e[8]!==l||e[9]!==o?(E=()=>{if(!l)return;const s=function(h){var y;if(fe("newSession",h)&&u){h.preventDefault();const V=m?xe(o,m,"claude")??((y=o.find(B=>B.path===m))==null?void 0:y.dirName)??u:u;c(V,m??void 0),n()}};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},F=[l,o,u,m,c,n],e[4]=m,e[5]=u,e[6]=n,e[7]=c,e[8]=l,e[9]=o,e[10]=E,e[11]=F):(E=e[10],F=e[11]),A.useEffect(E,F);const{names:d}=X();let R;e:{if(!r){R=o;break e}let s;if(e[12]!==r||e[13]!==d||e[14]!==o){const a=r.toLowerCase();s=o.filter(h=>{var y;return h.path.toLowerCase().includes(a)||h.shortName.toLowerCase().includes(a)||h.dirName.toLowerCase().includes(a)||((y=d[h.dirName])==null?void 0:y.toLowerCase().includes(a))}),e[12]=r,e[13]=d,e[14]=o,e[15]=s}else s=e[15];R=s}const T=R;let i,f,b;e[16]!==r?(i=r.trim(),f=i.replace(/[\\/]+$/,"")||i,b=i.startsWith("/")||/^[a-z]:[\\/]/i.test(i)||i.startsWith("\\\\"),e[16]=r,e[17]=i,e[18]=f,e[19]=b):(i=e[17],f=e[18],b=e[19]);const G=b;let L;e[20]!==G||e[21]!==f||e[22]!==o?(L=G&&!o.some(s=>(s.path.replace(/[\\/]+$/,"")||s.path)===f),e[20]=G,e[21]=f,e[22]=o,e[23]=L):L=e[23];const I=L;let k;e[24]!==n||e[25]!==c?(k=s=>{c(s.dirName,s.path),n()},e[24]=n,e[25]=c,e[26]=k):k=e[26];const g=k;let x;e[27]!==n?(x=s=>{s||n()},e[27]=n,e[28]=x):x=e[28];let z;e[29]===Symbol.for("react.memo_cache_sentinel")?(z=t.jsxs(Z,{className:"sr-only",children:[t.jsx(_,{children:"Start a session"}),t.jsx(ee,{children:"Choose a project or enter an absolute folder path."})]}),e[29]=z):z=e[29];let p;e[30]!==r?(p=t.jsx(te,{autoFocus:!0,placeholder:"Search projects or paste an absolute path...",value:r,onValueChange:W}),e[30]=r,e[31]=p):p=e[31];let M;e[32]===Symbol.for("react.memo_cache_sentinel")?(M=t.jsx(se,{className:"py-0",children:t.jsx(ae,{className:"border-0 py-8",children:t.jsxs(ne,{children:[t.jsx(ie,{variant:"icon",children:t.jsx(Q,{})}),t.jsx(oe,{children:"No projects found"}),t.jsx(le,{children:"Try another name or paste an absolute path."})]})})}),e[32]=M):M=e[32];let N;e[33]!==I||e[34]!==O||e[35]!==i||e[36]!==n||e[37]!==H?(N=I&&t.jsxs(q,{value:`folder:${i}`,className:"motion-list-item h-auto gap-3 px-3 py-2.5",onSelect:()=>{H(i),n()},children:[t.jsx(pe,{"data-icon":"inline-start",className:"size-4 shrink-0 text-foreground"}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"text-sm font-medium",children:"Start in this folder"}),t.jsxs("div",{className:"truncate text-xs text-muted-foreground",children:[i," · ",re(O)]})]})]}),e[33]=I,e[34]=O,e[35]=i,e[36]=n,e[37]=H,e[38]=N):N=e[38];let j;if(e[39]!==T||e[40]!==g||e[41]!==d){let s;e[43]!==g||e[44]!==d?(s=a=>t.jsxs(q,{value:`project:${a.dirName}`,className:"motion-list-item h-auto gap-3 px-3 py-2.5",onSelect:()=>g(a),children:[t.jsx(Q,{"data-icon":"inline-start",className:"size-4 shrink-0 text-muted-foreground"}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"truncate text-sm font-medium",children:d[a.dirName]||J(a.path)}),t.jsxs("div",{className:"text-xs text-muted-foreground",children:[d[a.dirName]&&t.jsx("span",{className:"mr-1.5",children:J(a.path)}),a.sessionCount," session",a.sessionCount!==1?"s":"",a.lastModified&&t.jsxs(t.Fragment,{children:[" · ",new Date(a.lastModified).toLocaleDateString()]})]})]})]},a.dirName),e[43]=g,e[44]=d,e[45]=s):s=e[45],j=T.map(s),e[39]=T,e[40]=g,e[41]=d,e[42]=j}else j=e[42];let w;e[46]!==N||e[47]!==j?(w=t.jsxs(de,{className:"max-h-80 p-1",children:[M,t.jsxs(ce,{className:"p-0",children:[N,j]})]}),e[46]=N,e[47]=j,e[48]=w):w=e[48];let C;e[49]!==p||e[50]!==w?(C=t.jsxs(me,{className:"max-w-md gap-0 overflow-hidden p-0",children:[z,t.jsxs(he,{shouldFilter:!1,className:"rounded-none p-0",children:[p,w]})]}),e[49]=p,e[50]=w,e[51]=C):C=e[51];let $;return e[52]!==l||e[53]!==x||e[54]!==C?($=t.jsx(ue,{open:l,onOpenChange:x,children:C}),e[52]=l,e[53]=x,e[54]=C,e[55]=$):$=e[55],$}function Ne(v){return v.ok?v.json():[]}export{ve as ProjectSwitcherModal};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as Ce,j as Rt}from"./vendor-react-gGw_S5I_.js";import{ao as jr,Q as as,B as Gr}from"./index-
|
|
1
|
+
import{r as Ce,j as Rt}from"./vendor-react-gGw_S5I_.js";import{ao as jr,Q as as,B as Gr}from"./index-9nniVy_T.js";import{a6 as Jr}from"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";/**
|
|
2
2
|
* Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.
|
|
3
3
|
* @license MIT
|
|
4
4
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as O,r as g,j as n}from"./vendor-react-gGw_S5I_.js";import{av as W,Z as $,i as K,j as L,k as U,Y as H,h as Z,D as q}from"./index-
|
|
1
|
+
import{c as O,r as g,j as n}from"./vendor-react-gGw_S5I_.js";import{av as W,Z as $,i as K,j as L,k as U,Y as H,h as Z,D as q}from"./index-9nniVy_T.js";import{J as B,v as Q}from"./vendor-ui-CKSkT7i9.js";import"./vendor-shiki-DOn6sF-i.js";import"./vendor-markdown-BE1gYnO9.js";const I=[{id:"narrow",name:"Narrow",css:"44rem"},{id:"medium",name:"Medium",css:"56rem"},{id:"wide",name:"Wide",css:"64rem"},{id:"full",name:"Full",css:"100%"}],Y="cogpit-chat-width",R="medium";function V(){try{const s=localStorage.getItem(Y);if(I.some(e=>e.id===s))return s}catch{}return R}let _=typeof window>"u"?R:V();const M=new Set;function J(s){if(typeof document>"u")return;const e=I.find(t=>t.id===s)??I[1];document.documentElement.style.setProperty("--chat-width",e.css)}J(_);function X(){return _}function ee(s){_=s;try{localStorage.setItem(Y,s)}catch{}J(s),M.forEach(e=>e())}function te(s){return M.add(s),()=>M.delete(s)}function se(){const s=O.c(2),e=g.useSyncExternalStore(te,X,ae);let t;return s[0]!==e?(t=[e,ee],s[0]=e,s[1]=t):t=s[1],t}function ae(){return R}function de(s){const e=O.c(42),{open:t,onClose:r,currentTheme:l,onSelectTheme:k,onPreviewTheme:i}=s,[x,P]=g.useState(0),[z,A]=se();let j,w;e[0]!==l||e[1]!==t?(j=()=>{if(t){const a=W.findIndex(D=>D.id===l);P(a>=0?a:0)}},w=[t,l],e[0]=l,e[1]=t,e[2]=j,e[3]=w):(j=e[2],w=e[3]),g.useEffect(j,w);let N,b;e[4]!==i||e[5]!==t||e[6]!==x?(N=()=>{t&&i(W[x].id)},b=[x,t,i],e[4]=i,e[5]=t,e[6]=x,e[7]=N,e[8]=b):(N=e[7],b=e[8]),g.useEffect(N,b);let v,S;e[9]!==i||e[10]!==t?(v=()=>{t||i(null)},S=[t,i],e[9]=i,e[10]=t,e[11]=v,e[12]=S):(v=e[11],S=e[12]),g.useEffect(v,S);let y;e[13]!==r||e[14]!==k?(y=a=>{k(a.id),r()},e[13]=r,e[14]=k,e[15]=y):y=e[15];const F=y;let o;e[16]!==r?(o=a=>{a||r()},e[16]=r,e[17]=o):o=e[17];let C;e[18]===Symbol.for("react.memo_cache_sentinel")?(C=n.jsxs(K,{className:"border-b p-4 pr-12",children:[n.jsxs(L,{className:"flex items-center gap-2 text-sm",children:[n.jsx(Q,{"data-icon":"inline-start",className:"size-4 text-muted-foreground"}),"Appearance"]}),n.jsx(U,{children:"Preview a color theme and set the chat width."})]}),e[18]=C):C=e[18];const G=W[x];let c;e[19]!==G.id?(c=[G.id],e[19]=G.id,e[20]=c):c=e[20];let d;e[21]!==l||e[22]!==F?(d=W.map((a,D)=>n.jsxs($,{value:a.id,className:"h-auto w-full justify-start gap-3 px-3 py-2.5 text-left text-muted-foreground data-pressed:bg-accent data-pressed:text-accent-foreground",onClick:()=>F(a),onMouseEnter:()=>P(D),onFocus:()=>P(D),children:[n.jsx("div",{className:"flex gap-1",children:a.swatches.map(ne)}),n.jsx("span",{className:"flex-1 text-sm font-medium",children:a.name}),l===a.id&&n.jsx(B,{"data-icon":"inline-end",className:"size-4 shrink-0 text-foreground"})]},a.id)),e[21]=l,e[22]=F,e[23]=d):d=e[23];let m;e[24]!==c||e[25]!==d?(m=n.jsx(H,{"aria-label":"Theme",orientation:"vertical",value:c,className:"w-full items-stretch p-1",children:d}),e[24]=c,e[25]=d,e[26]=m):m=e[26];let E;e[27]===Symbol.for("react.memo_cache_sentinel")?(E=n.jsx("div",{className:"px-1 pb-2 text-xs font-medium text-muted-foreground",children:"Chat width"}),e[27]=E):E=e[27];let f;e[28]!==z?(f=[z],e[28]=z,e[29]=f):f=e[29];let u;e[30]!==A?(u=I.map(a=>n.jsx($,{value:a.id,className:"flex-1 text-xs text-muted-foreground data-pressed:bg-accent data-pressed:text-accent-foreground",onClick:()=>A(a.id),children:a.name},a.id)),e[30]=A,e[31]=u):u=e[31];let h;e[32]!==f||e[33]!==u?(h=n.jsxs("div",{className:"border-t p-3",children:[E,n.jsx(H,{"aria-label":"Chat width",value:f,className:"w-full items-stretch gap-1",children:u})]}),e[32]=f,e[33]=u,e[34]=h):h=e[34];let p;e[35]!==m||e[36]!==h?(p=n.jsxs(Z,{className:"max-w-sm gap-0 overflow-hidden p-0",children:[C,m,h]}),e[35]=m,e[36]=h,e[37]=p):p=e[37];let T;return e[38]!==t||e[39]!==p||e[40]!==o?(T=n.jsx(q,{open:t,onOpenChange:o,children:p}),e[38]=t,e[39]=p,e[40]=o,e[41]=T):T=e[41],T}function ne(s,e){return n.jsx("div",{className:"size-4 rounded-full border",style:{backgroundColor:s}},e)}export{de as ThemeSelectorModal};
|