@geminilight/mindos 0.6.36 → 0.6.37
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/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +17 -17
- package/_standalone/.next/build-manifest.json +2 -2
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +1 -1
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +1 -1
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +1 -1
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +2 -2
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +17 -17
- package/_standalone/.next/server/chunks/4931.js +26 -26
- package/_standalone/.next/server/chunks/{9360.js → 912.js} +2 -2
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/app/{layout-d0f6dc4d3e6f0be4.js → layout-00844243aa76e1b6.js} +44 -44
- package/_standalone/.next/static/chunks/app/{page-404b0bfb5721b7f8.js → page-99cc295c70b85882.js} +2 -2
- package/_standalone/.next/static/chunks/app/trash/{page-a79804c1df44d3cc.js → page-83afad27eeceb4b3.js} +1 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/{page-d3aceca36a1a9eb2.js → page-725df5864296687f.js} +2 -2
- package/_standalone/.next/trace +53 -53
- package/_standalone/components/settings/UpdateTab.tsx +16 -0
- package/app/components/settings/UpdateTab.tsx +16 -0
- package/package.json +1 -1
- /package/_standalone/.next/static/{VWZDVb8DL1Pbykh9EOj_Y → krusEkNclII1OrOrikHPD}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{VWZDVb8DL1Pbykh9EOj_Y → krusEkNclII1OrOrikHPD}/_ssgManifest.js +0 -0
|
@@ -1,8 +1,46 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{2431:(e,t,s)=>{"use strict";s.d(t,{z:()=>a});var r=s(12115);let n="mindos:acp-detection";function a(){let e=(0,r.useRef)(function(){try{let e=sessionStorage.getItem(n);if(!e)return null;let t=JSON.parse(e);if("number"!=typeof t.ts||Date.now()-t.ts>18e5)return null;return t}catch{return null}}()),[t,s]=(0,r.useState)(e.current?.installed??[]),[a,o]=(0,r.useState)(e.current?.notInstalled??[]),[l,i]=(0,r.useState)(!e.current),[d,c]=(0,r.useState)(null),[u,m]=(0,r.useState)(0),x=(0,r.useRef)(!1),p=(0,r.useRef)(!1),h=(0,r.useCallback)(()=>{try{sessionStorage.removeItem(n)}catch{}e.current=null,p.current=!0,m(e=>e+1)},[]);return(0,r.useEffect)(()=>{let r=p.current;if(p.current=!1,e.current&&Date.now()-e.current.ts<3e5&&0===u||x.current)return;x.current=!0;let l=t.length>0||a.length>0;l||i(!0),c(null);let d=!1;return fetch(`/api/acp/detect${r?"?force=1":""}`).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(t=>{if(d)return;let r=t.installed??[],a=t.notInstalled??[];try{sessionStorage.setItem(n,JSON.stringify({installed:r,notInstalled:a,ts:Date.now()}))}catch{}e.current={installed:r,notInstalled:a,ts:Date.now()},s(r),o(a)}).catch(e=>{!d&&(l||c(e.message))}).finally(()=>{x.current=!1,d||i(!1)}),()=>{d=!0}},[u]),{installedAgents:t,notInstalledAgents:a,loading:l,error:d,refresh:h}}},10377:(e,t,s)=>{"use strict";s.d(t,{Z:()=>h});var r=s(12115);let n="mindos-pinned-files",a="mindos:pins-changed";function o(){try{let e=localStorage.getItem(n);return e?JSON.parse(e):[]}catch{return[]}}function l(){return c}let i=[];function d(){return i}let c=[],u=!1;function m(){u||(c=o(),u=!0)}function x(e){m();let t=t=>{t.key===n&&(c=o(),e())},s=()=>{c=o(),e()};return window.addEventListener("storage",t),window.addEventListener(a,s),()=>{window.removeEventListener("storage",t),window.removeEventListener(a,s)}}function p(e){c=e;try{localStorage.setItem(n,JSON.stringify(e))}catch{}window.dispatchEvent(new Event(a))}function h(){m();let e=(0,r.useSyncExternalStore)(x,l,d),t=(0,r.useCallback)(t=>e.includes(t),[e]),s=(0,r.useCallback)(e=>{let t=o(),s=t.indexOf(e);s>=0?t.splice(s,1):t.unshift(e),p(t)},[]);return{pinnedFiles:e,isPinned:t,togglePin:s,reorderPins:(0,r.useCallback)(e=>{p(e)},[]),removePin:(0,r.useCallback)(e=>{p(o().filter(t=>t!==e))},[])}}},16518:(e,t,s)=>{"use strict";s.d(t,{AI:()=>n,RS:()=>r});let r=["about-you","continued","daily","past-you","growth"],n={"about-you":"/echo/about-you",continued:"/echo/continued",daily:"/echo/daily","past-you":"/echo/past-you",growth:"/echo/growth"}},18847:(e,t,s)=>{"use strict";s.r(t),s.d(t,{AgentInspectorRenderer:()=>y});var r=s(95155),n=s(12115),a=s(73321),o=s(84980),l=s(3926),i=s(93631),d=s(68459),c=s(61878),u=s(10762),m=s(12651),x=s(13545),p=s(66088);function h(e){return/read|list|get|search/.test(e)?/search/.test(e)?"search":"read":/create/.test(e)?"create":/delete/.test(e)?"delete":/write|update|insert|append/.test(e)?"write":"other"}let g={read:{bg:"rgba(138,180,216,0.10)",text:"#8ab4d8",border:"rgba(138,180,216,0.25)"},write:{bg:"rgba(200,135,58,0.10)",text:"var(--amber)",border:"rgba(200,135,58,0.25)"},create:{bg:"rgba(122,173,128,0.10)",text:"var(--success)",border:"rgba(122,173,128,0.25)"},delete:{bg:"rgba(200,80,80,0.10)",text:"var(--error)",border:"rgba(200,80,80,0.25)"},search:{bg:"rgba(200,160,216,0.10)",text:"#c8a0d8",border:"rgba(200,160,216,0.25)"},other:{bg:"var(--muted)",text:"var(--muted-foreground)",border:"var(--border)"}};function f({kind:e,size:t=13}){return"read"===e?(0,r.jsx)(o.A,{size:t}):"write"===e?(0,r.jsx)(l.A,{size:t}):"create"===e?(0,r.jsx)(i.A,{size:t}):"delete"===e?(0,r.jsx)(d.A,{size:t}):"search"===e?(0,r.jsx)(c.A,{size:t}):(0,r.jsx)(u.A,{size:t})}function b(e){try{return new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return e}}function v({op:e}){var t,s;let o,l,i,d,c=(0,a.useRouter)(),[u,v]=(0,n.useState)(!1),j=h(e.tool),y=g[j],N="string"==typeof(t=e.params).path?t.path:null,k=e.tool.replace("mindos_","");return(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,overflow:"hidden",marginBottom:8},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",cursor:"pointer",userSelect:"none"},onClick:()=>v(e=>!e),children:[(0,r.jsxs)("span",{className:"font-display",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 8px",borderRadius:999,fontSize:"0.68rem",fontWeight:600,background:y.bg,color:y.text,border:`1px solid ${y.border}`,flexShrink:0},children:[(0,r.jsx)(f,{kind:j,size:10}),j]}),(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.78rem",color:"var(--foreground)",fontWeight:600,flexShrink:0},children:k}),N&&(0,r.jsx)("span",{style:{fontSize:"0.72rem",color:"var(--amber)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",cursor:"pointer"},onClick:e=>{e.stopPropagation(),c.push("/view/"+N.split("/").map(encodeURIComponent).join("/"))},title:N,className:"font-display",children:N}),(0,r.jsxs)("div",{style:{marginLeft:"auto",display:"flex",alignItems:"center",gap:8,flexShrink:0},children:["ok"===e.result?(0,r.jsx)(m.A,{size:13,style:{color:"var(--success)"}}):(0,r.jsx)(x.A,{size:13,style:{color:"var(--error)"}}),(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.68rem",color:"var(--muted-foreground)",opacity:.6},title:b(e.ts),children:(s=e.ts,l=Math.floor((o=Date.now()-new Date(s).getTime())/6e4),i=Math.floor(o/36e5),d=Math.floor(o/864e5),l<1?"just now":l<60?`${l}m ago`:i<24?`${i}h ago`:`${d}d ago`)}),(0,r.jsx)(p.A,{size:12,style:{color:"var(--muted-foreground)",transform:u?"rotate(180deg)":"none",transition:"transform .15s"}})]})]}),u&&(0,r.jsxs)("div",{style:{borderTop:"1px solid var(--border)",padding:"10px 14px",background:"var(--background)"},children:[(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:4,marginBottom:8*!!e.message},children:Object.entries(e.params).map(([e,t])=>(0,r.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"flex-start"},children:[(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.68rem",color:"var(--muted-foreground)",opacity:.7,flexShrink:0,minWidth:80},children:e}),(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.72rem",color:"var(--foreground)",wordBreak:"break-all",lineHeight:1.5},children:function(e,t=120){let s="string"==typeof e?e:JSON.stringify(e);return s.length>t?s.slice(0,t)+"…":s}(t)})]},e))}),e.message&&(0,r.jsx)("div",{className:"font-display",style:{marginTop:6,padding:"5px 9px",borderRadius:5,fontSize:"0.72rem",background:"error"===e.result?"rgba(200,80,80,0.08)":"rgba(122,173,128,0.08)",color:"error"===e.result?"var(--error)":"var(--success)",border:`1px solid ${"error"===e.result?"rgba(200,80,80,0.2)":"rgba(122,173,128,0.2)"}`},children:e.message}),(0,r.jsx)("div",{className:"font-display",style:{marginTop:6,fontSize:"0.65rem",color:"var(--muted-foreground)",opacity:.5},children:b(e.ts)})]})]})}let j=["all","write","create","delete","read","search"];function y({content:e}){let[t,s]=(0,n.useState)("all"),a=(0,n.useMemo)(()=>(function(e){try{let t=JSON.parse(e);if(Array.isArray(t.events))return t.events.filter(e=>!!e?.tool&&!!e?.ts).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())}catch{}return(function(e){let t=[];for(let s of e.split("\n")){let e=s.trim();if(!(!e||e.startsWith("#")||e.startsWith("//")))try{let s=JSON.parse(e);s.tool&&s.ts&&t.push(s)}catch{}}return t})(e).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())})(e),[e]),o=(0,n.useMemo)(()=>"all"===t?a:a.filter(e=>h(e.tool)===t),[a,t]),l=(0,n.useMemo)(()=>{let e={all:a.length};for(let t of a){let s=h(t.tool);e[s]=(e[s]??0)+1}return e},[a]);return 0===a.length?(0,r.jsxs)("div",{className:"font-display",style:{padding:"3rem 1rem",textAlign:"center",color:"var(--muted-foreground)",fontSize:12},children:[(0,r.jsx)(u.A,{size:28,style:{margin:"0 auto 10px",opacity:.3}}),(0,r.jsx)("p",{children:"No agent operations logged yet."}),(0,r.jsxs)("p",{style:{marginTop:6,opacity:.6,fontSize:11},children:["Agent writes appear here from ",(0,r.jsx)("code",{style:{background:"var(--muted)",padding:"1px 5px",borderRadius:4},children:".mindos/agent-audit-log.json"}),"."]})]}):(0,r.jsxs)("div",{style:{maxWidth:760,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsx)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:"1.2rem",flexWrap:"wrap"},children:j.map(e=>{let n=l[e]??0;if("all"!==e&&!n)return null;let a="all"!==e?g[e]:void 0,o=t===e;return(0,r.jsxs)("button",{onClick:()=>s(e),className:"font-display",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 10px",borderRadius:999,fontSize:"0.7rem",cursor:"pointer",border:"none",background:o?a?.bg??"var(--accent)":"var(--muted)",color:o?a?.text??"var(--foreground)":"var(--muted-foreground)",outline:o?`1px solid ${a?.border??"var(--border)"}`:"none",transition:"all .1s"},children:["all"!==e&&(0,r.jsx)(f,{kind:e,size:10}),e," ",(0,r.jsxs)("span",{style:{opacity:.6},children:["(",n,")"]})]},e)})}),(0,r.jsx)("div",{children:o.map((e,t)=>(0,r.jsx)(v,{op:e},t))})]})}},20555:(e,t,s)=>{"use strict";s.d(t,{LD:()=>r,LZ:()=>n,qQ:()=>a});let r=[{id:"c1",icon:"\uD83D\uDC64",category:"memory-sync",scenario:"first-day"},{id:"c2",icon:"\uD83D\uDCE5",category:"knowledge-management",scenario:"daily"},{id:"c3",icon:"\uD83D\uDD04",category:"memory-sync",scenario:"project"},{id:"c4",icon:"\uD83D\uDD01",category:"experience-evolution",scenario:"daily"},{id:"c5",icon:"\uD83D\uDCA1",category:"auto-execute",scenario:"daily"},{id:"c6",icon:"\uD83D\uDE80",category:"auto-execute",scenario:"project"},{id:"c7",icon:"\uD83D\uDD0D",category:"knowledge-management",scenario:"project"},{id:"c8",icon:"\uD83E\uDD1D",category:"human-insights",scenario:"daily"},{id:"c9",icon:"\uD83D\uDEE1️",category:"audit-control",scenario:"advanced"}],n=["knowledge-management","memory-sync","auto-execute","experience-evolution","human-insights","audit-control"],a=["first-day","daily","project","advanced"]},23451:(e,t,s)=>{"use strict";s.d(t,{i:()=>n});var r=s(9339);let n=(0,r.createServerReference)("4073229f21cf2b7673e9bd62939e2e2a92ee4c1d61",r.callServer,void 0,r.findSourceMapURL,"deleteFileAction")},23990:(e,t,s)=>{"use strict";s.d(t,{f:()=>n});var r=s(9339);let n=(0,r.createServerReference)("60b74fb91a59ee6786f3c8a956bf7246cc2f02c202",r.callServer,void 0,r.findSourceMapURL,"renameFileAction")},26490:(e,t,s)=>{"use strict";s.d(t,{default:()=>u});var r=s(95155),n=s(12115),a=s(94514),o=s(13545),l=s(68822),i=s(33210),d=s(4235);let c={success:(0,r.jsx)(a.A,{size:15,className:"text-success shrink-0"}),error:(0,r.jsx)(o.A,{size:15,className:"text-error shrink-0"}),info:(0,r.jsx)(l.A,{size:15,className:"text-muted-foreground shrink-0"})};function u(){let e=(0,n.useSyncExternalStore)(d.B1,d.dV,d.dV);return 0===e.length?null:(0,r.jsx)("div",{className:"fixed bottom-4 right-4 z-50 flex flex-col-reverse gap-2 pointer-events-none","aria-live":"polite",children:e.map(e=>(0,r.jsxs)("div",{className:"pointer-events-auto flex items-center gap-2.5 bg-card border border-border rounded-lg shadow-lg px-4 py-2.5 min-w-[180px] max-w-[320px] animate-in slide-in-from-right-4 fade-in duration-200",children:[c[e.type],(0,r.jsx)("span",{className:"text-sm text-foreground flex-1 truncate",children:e.message}),e.action&&(0,r.jsx)("button",{type:"button",onClick:()=>{e.action.onClick(),(0,d.X8)(e.id)},className:"shrink-0 px-2.5 py-1 rounded text-xs font-medium text-[var(--amber)] hover:bg-[var(--amber-dim)] transition-colors min-h-[28px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:e.action.label}),(0,r.jsx)("button",{type:"button",onClick:()=>(0,d.X8)(e.id),className:"shrink-0 p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","aria-label":e.action?.label?"Close":"Dismiss",children:(0,r.jsx)(i.A,{size:13})})]},e.id))})}},27318:(e,t,s)=>{"use strict";s.d(t,{KT:()=>c,NH:()=>d});var r=s(12115);let n={open:!1,initialMessage:"",source:"user",acpAgent:null},a=new Set;function o(){a.forEach(e=>e())}function l(e){return a.add(e),()=>{a.delete(e)}}function i(){return n}function d(e="",t="user",s=null){n={open:!0,initialMessage:e,source:t,acpAgent:s},o()}function c(){let e=(0,r.useSyncExternalStore)(l,i,i);return{open:e.open,initialMessage:e.initialMessage,source:e.source,acpAgent:e.acpAgent,openWith:(0,r.useCallback)((e,t="user",s=null)=>d(e,t,s),[]),close:(0,r.useCallback)(()=>void(n={open:!1,initialMessage:"",source:"user",acpAgent:null},o()),[])}}},27996:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var r=s(95155),n=s(12115),a=s(47650),o=s(94514),l=s(66088);function i(e){return"options"in e}function d({value:e,onChange:t,options:s,className:d="",size:c="md",placeholder:u}){let[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(-1),[g,f]=(0,n.useState)(null),b=(0,n.useRef)(null),v=(0,n.useRef)(null),j=(0,n.useMemo)(()=>(function(e){let t=[];for(let s of e)i(s)?t.push(...s.options):t.push(s);return t})(s),[s]),y=(0,n.useMemo)(()=>j.find(t=>t.value===e)??null,[j,e]),N=(0,n.useCallback)(()=>{x(!1),h(-1)},[]),k=(0,n.useCallback)(e=>{t(e),N()},[t,N]);(0,n.useEffect)(()=>{if(!m)return;let e=e=>{b.current&&!b.current.contains(e.target)&&v.current&&!v.current.contains(e.target)&&N()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[m,N]),(0,n.useEffect)(()=>{if(!m)return;let e=e=>{switch(e.key){case"Escape":e.preventDefault(),N(),b.current?.focus();break;case"ArrowDown":e.preventDefault(),h(e=>Math.min(e+1,j.length-1));break;case"ArrowUp":e.preventDefault(),h(e=>Math.max(e-1,0));break;case"Enter":e.preventDefault(),p>=0&&p<j.length&&(k(j[p].value),b.current?.focus())}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[m,N,p,j,k]),(0,n.useEffect)(()=>{if(!m||!v.current||p<0)return;let e=v.current.querySelector(`[data-idx="${p}"]`);e&&e.scrollIntoView({block:"nearest"})},[m,p]);let w=(0,n.useCallback)(()=>{if(!b.current)return;let e=b.current.getBoundingClientRect(),t="sm"===c?200:260,s=window.innerHeight-e.bottom,r=e.top;f({top:s<t+8&&r>s?e.top:e.bottom,left:e.left,width:e.width,flipUp:s<t+8&&r>s})},[c]);(0,n.useEffect)(()=>{if(!m)return void f(null);let t=j.findIndex(t=>t.value===e);return h(t>=0?t:0),w(),window.addEventListener("scroll",w,!0),window.addEventListener("resize",w),()=>{window.removeEventListener("scroll",w,!0),window.removeEventListener("resize",w)}},[m,j,e,w]);let S="sm"===c,C=S?`inline-flex items-center gap-1 appearance-none rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring transition-colors text-2xs px-1.5 py-0.5 pr-5 ${d}`:`w-full flex items-center gap-2 appearance-none rounded-lg border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring transition-colors text-sm px-3 py-2 pr-8 ${d}`,A=S?"w-full flex items-center gap-1.5 px-2 py-1 text-2xs text-left transition-colors cursor-pointer":"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left transition-colors cursor-pointer",z=-1;function E(t){let s=++z,n=t.value===e,a=s===p;return(0,r.jsxs)("button",{type:"button",role:"option","aria-selected":n,"data-idx":s,onClick:()=>k(t.value),onMouseEnter:()=>h(s),className:`${A} ${a?"bg-muted text-foreground":"text-foreground"}`,children:[t.icon,(0,r.jsx)("span",{className:"flex-1 truncate",children:t.label}),t.suffix,n&&(0,r.jsx)(o.A,{size:S?10:12,className:"shrink-0 text-[var(--amber)]"})]},t.value)}let $=m&&g&&(0,a.createPortal)((0,r.jsx)("div",{ref:v,className:S?"fixed z-[9999] overflow-y-auto rounded-md border border-border bg-card shadow-lg py-0.5":"fixed z-[9999] overflow-y-auto rounded-lg border border-border bg-card shadow-lg py-1",role:"listbox",style:{left:g.left,minWidth:g.width,maxHeight:S?200:260,...g.flipUp?{bottom:window.innerHeight-g.top+4}:{top:g.top+4}},children:s.map((e,t)=>i(e)?(0,r.jsxs)("div",{children:[t>0&&(0,r.jsx)("div",{className:"my-0.5 border-t border-border/50"}),(0,r.jsx)("div",{className:`py-1 text-2xs font-medium text-muted-foreground uppercase tracking-wider ${S?"px-2":"px-3"}`,children:e.label}),e.options.map(E)]},e.label):E(e))}),document.body);return(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{ref:b,type:"button",onClick:()=>x(e=>!e),"aria-haspopup":"listbox","aria-expanded":m,className:C,children:[y?.icon,(0,r.jsx)("span",{className:"flex-1 truncate text-left",children:y?.label??u??"—"}),y?.suffix,(0,r.jsx)(l.A,{size:S?12:14,className:`${S?"absolute right-1 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none":"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none"} transition-transform duration-150 ${m?"rotate-180":""}`})]}),$]})}},30864:(e,t,s)=>{"use strict";s.d(t,{default:()=>rU});var r=s(95155),n=s(73321),a=s(12115),o=s(98500),l=s.n(o),i=s(29857),d=s(61878),c=s(89363),u=s(33210),m=s(59511),x=s(47857),p=s(46029),h=s(49619),g=s(53961),f=s(34530),b=s(91958),v=s(41641),j=s(21362),y=s(61263),N=s(12651),k=s(62791),w=s(22356),S=s(31025),C=s(13545),A=s(15411),z=s(7915),E=s(6296),$=s(22164),T=s(20171);function R(e){if(!e)return"never";let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:`${Math.floor(t/864e5)}d ago`}function M({t:e,onInitComplete:t}){var s;let n=e.settings?.sync,[o,l]=(0,a.useState)(""),[i,d]=(0,a.useState)(""),[c,u]=(0,a.useState)("main"),[m,x]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),[g,f]=(0,a.useState)(""),b=o.trim()?(s=o.trim(),/^https:\/\/.+/.test(s)?"https":!!/^git@[\w.-]+:.+/.test(s)&&"ssh"):null,v="https"===b||"ssh"===b,j=async()=>{h(!0),f("");try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"init",remote:o.trim(),token:i.trim()||void 0,branch:c.trim()||"main"})}),t()}catch(e){f(e instanceof Error?e.message:"Connection failed")}finally{h(!1)}};return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("div",{className:"w-9 h-9 rounded-lg bg-muted flex items-center justify-center shrink-0",children:(0,r.jsx)(S.A,{size:18,className:"text-muted-foreground"})}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-sm font-medium text-foreground",children:n?.emptyTitle??"Cross-device Sync"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:n?.emptyDesc??"Automatically sync your knowledge base across devices via Git."})]})]}),(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground block",children:n?.remoteUrl??"Git Remote URL"}),(0,r.jsx)(T.pd,{type:"text",value:o,onChange:e=>{l(e.target.value),f("")},placeholder:"https://github.com/user/my-mind.git",className:`font-mono ${o.trim()&&!v?"border-destructive":""}`}),o.trim()&&!v&&(0,r.jsx)("p",{className:"text-xs text-destructive",children:n?.invalidUrl??"Invalid Git URL — use HTTPS (https://...) or SSH (git@...)"}),"ssh"===b&&(0,r.jsxs)("p",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:11,className:"shrink-0"}),n?.sshHint??"SSH URLs require SSH key configured on this machine. HTTPS with token recommended."]})]}),"https"===b&&(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsxs)("label",{className:"text-sm font-medium text-foreground block",children:[n?.accessToken??"Access Token"," ",(0,r.jsx)("span",{className:"text-muted-foreground font-normal",children:n?.optional??"(optional, for private repos)"})]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(T.pd,{type:m?"text":"password",value:i,onChange:e=>d(e.target.value),placeholder:"ghp_xxxxxxxxxxxx",className:"pr-9 font-mono"}),(0,r.jsx)("button",{type:"button",onClick:()=>x(!m),className:"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded hover:bg-muted text-muted-foreground transition-colors",children:m?(0,r.jsx)(A.A,{size:14}):(0,r.jsx)(z.A,{size:14})})]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:n?.tokenHint??"GitHub: Settings → Developer settings → Personal access tokens → repo scope"})]}),(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground block",children:n?.branchLabel??"Branch"}),(0,r.jsx)(T.pd,{type:"text",value:c,onChange:e=>u(e.target.value),placeholder:"main",className:"max-w-[200px] font-mono"})]}),(0,r.jsxs)(T.jn,{onClick:j,disabled:!v||p,className:"flex items-center gap-2",children:[p&&(0,r.jsx)(E.A,{size:14,className:"animate-spin"}),p?n?.connecting??"Connecting...":n?.connectButton??"Connect & Start Sync"]}),g&&(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs p-3 rounded-lg bg-destructive/10 text-destructive",role:"alert","aria-live":"polite",children:[(0,r.jsx)(C.A,{size:13,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:g})]}),(0,r.jsx)("div",{className:"grid grid-cols-2 gap-2 text-xs text-muted-foreground pt-2",children:[n?.featureAutoCommit??"Auto-commit on save",n?.featureAutoPull??"Auto-pull from remote",n?.featureConflict??"Conflict detection",n?.featureMultiDevice??"Works across devices"].map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)(N.A,{size:11,className:"text-success/60 shrink-0"}),(0,r.jsx)("span",{children:e})]},t))})]})}function I({t:e}){let[t,s]=(0,a.useState)(null),[n,o]=(0,a.useState)(!0),[l,i]=(0,a.useState)(!1),[d,c]=(0,a.useState)(!1),[u,m]=(0,a.useState)(null),x=(0,a.useCallback)(async()=>{try{let e=await (0,w.n)("/api/sync");s(e)}catch{s(null)}finally{o(!1)}},[]);(0,a.useEffect)(()=>{x()},[x]);let p=async()=>{i(!0),m(null);try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"now"})}),m({type:"success",text:"Sync complete"}),await x()}catch{m({type:"error",text:"Sync failed"})}finally{i(!1),setTimeout(()=>m(null),3e3)}},h=async()=>{if(!t)return;c(!0),m(null);let e=t.enabled?"off":"on";try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e})}),await x(),m({type:"success",text:t.enabled?"Auto-sync disabled":"Auto-sync enabled"})}catch{m({type:"error",text:"Failed to toggle sync"})}finally{c(!1),setTimeout(()=>m(null),3e3)}};if(n)return(0,r.jsx)("div",{className:"flex justify-center py-8",children:(0,r.jsx)(E.A,{size:18,className:"animate-spin text-muted-foreground"})});if(!t||!t.enabled)return(0,r.jsx)(M,{t:e,onInitComplete:x});let g=t.conflicts||[];return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)(T.eN,{children:"Sync"}),(0,r.jsxs)("div",{className:"space-y-2.5 text-sm",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Provider"}),(0,r.jsx)("span",{className:"font-mono text-sm",children:t.provider})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Remote"}),(0,r.jsx)("span",{className:"font-mono text-sm truncate",title:t.remote,children:t.remote})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Branch"}),(0,r.jsx)("span",{className:"font-mono text-sm",children:t.branch})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Last sync"}),(0,r.jsx)("span",{className:"text-sm",children:R(t.lastSync)})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Unpushed"}),(0,r.jsxs)("span",{className:"text-sm",children:[t.unpushed," commits"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Auto-sync"}),(0,r.jsxs)("span",{className:"text-sm",children:["commit: ",t.autoCommitInterval,"s, pull: ",Math.floor((t.autoPullInterval||300)/60),"min"]})]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2 pt-2",children:[(0,r.jsxs)("button",{type:"button",onClick:p,disabled:l,title:l?e.hints.syncInProgress:void 0,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:12,className:l?"animate-spin":""}),"Sync Now"]}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:d,title:d?e.hints.toggleInProgress:void 0,className:`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border transition-colors disabled:opacity-40 disabled:cursor-not-allowed ${t.enabled?"border-border text-muted-foreground hover:text-destructive hover:border-destructive/50":"border-success/30 text-success hover:bg-success/10"}`,children:t.enabled?"Disable Auto-sync":"Enable Auto-sync"})]}),u&&(0,r.jsx)("div",{className:"flex items-center gap-1.5 text-xs",role:"status","aria-live":"polite",children:"success"===u.type?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:13,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:u.text})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:13,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:u.text})]})}),g.length>0&&(0,r.jsxs)("div",{className:"pt-2 border-t border-border",children:[(0,r.jsxs)(T.eN,{children:["Conflicts (",g.length,")"]}),(0,r.jsx)("div",{className:"space-y-1.5",children:g.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs group",children:[(0,r.jsx)(C.A,{size:12,className:"text-error shrink-0"}),(0,r.jsx)("a",{href:`/view/${encodeURIComponent(e.file)}`,className:"font-mono truncate hover:text-foreground hover:underline transition-colors",title:`Open ${e.file}`,children:e.file}),(0,r.jsx)("a",{href:`/view/${encodeURIComponent(e.file+".sync-conflict")}`,className:"opacity-0 group-hover:opacity-100 transition-opacity shrink-0 text-muted-foreground hover:text-foreground",title:"View remote version (.sync-conflict)",children:(0,r.jsx)($.A,{size:11})}),(0,r.jsx)("span",{className:"text-muted-foreground shrink-0 ml-auto",children:R(e.time)})]},t))}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground mt-2",children:["Click a file to view your version. Hover and click ",(0,r.jsx)($.A,{size:10,className:"inline"})," to see the remote version."]})]}),t.lastError&&(0,r.jsx)("div",{className:"pt-2 border-t border-border",children:(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs text-destructive",children:[(0,r.jsx)(C.A,{size:12,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:t.lastError})]})})]})}function D(e,t){return t?"syncing":e&&e.enabled?e.lastError?"error":e.conflicts&&e.conflicts.length>0?"conflicts":parseInt(e.unpushed||"0",10)>0?"unpushed":"synced":"off"}let P={synced:"bg-success",unpushed:"bg-yellow-500",conflicts:"bg-error",error:"bg-error",off:"bg-muted-foreground/40",syncing:"bg-blue-500"};function L(){let[e,t]=(0,a.useState)(null),[s,r]=(0,a.useState)(!1),n=(0,a.useRef)(void 0),o=(0,a.useCallback)(async()=>{try{let e=await (0,w.n)("/api/sync");t(e)}catch{t(null)}finally{r(!0)}},[]);return(0,a.useEffect)(()=>{o();let e=()=>{n.current&&clearInterval(n.current),n.current=setInterval(o,3e4)},t=()=>{n.current&&clearInterval(n.current),n.current=void 0};e();let s=()=>{"visible"===document.visibilityState?(o(),e()):t()};return document.addEventListener("visibilitychange",s),()=>{t(),document.removeEventListener("visibilitychange",s)}},[o]),{status:e,loaded:s,fetchStatus:o}}function F(e){let[t,s]=(0,a.useState)(!1),[r,n]=(0,a.useState)(null),o=(0,a.useCallback)(async()=>{if(!t){s(!0),n(null);try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"now"})}),await e(),n("success")}catch{await e(),n("error")}finally{s(!1),setTimeout(()=>n(null),2500)}}},[t,e]);return{syncing:t,syncResult:r,syncNow:o}}function O(e,t,s){switch(e){case"syncing":{let e=s?.syncing??"Syncing...";return{label:e,tooltip:e}}case"synced":{let e=`${s?.synced??"Synced"} \xb7 ${R(t?.lastSync)}`;return{label:e,tooltip:e}}case"unpushed":{let e=parseInt(t?.unpushed||"0",10);return{label:`${e} ${s?.unpushed??"awaiting push"}`,tooltip:s?.unpushedHint??`${e} commit(s) not yet pushed to remote`}}case"conflicts":{let e=t?.conflicts?.length||0;return{label:`${e} ${s?.conflicts??"conflicts"}`,tooltip:s?.conflictsHint??`${e} file(s) have merge conflicts — resolve in Settings > Sync`}}case"error":return{label:s?.syncError??"Sync error",tooltip:t?.lastError||(s?.syncError??"Sync error")};default:{let e=s?.syncOff??"Sync off";return{label:e,tooltip:e}}}}function _({collapsed:e,onOpenSyncSettings:t}){let{status:s,loaded:n,fetchStatus:o}=L(),{syncing:l,syncResult:i,syncNow:d}=F(o),[c,u]=(0,a.useState)(null),m=(0,a.useRef)("off"),[x,p]=(0,a.useState)(()=>{try{return!!localStorage.getItem("sync-hint-dismissed")}catch(e){console.warn("[SyncStatusBar] localStorage read failed:",e)}return!1}),{t:h}=(0,y.Y)();if(!function(e){let[,t]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),6e4);return()=>clearInterval(e)},[6e4])}(0),(0,a.useEffect)(()=>{if(!n||l)return;let e=D(s,!1),t=m.current;if(t!==e){let s=h.sidebar?.sync;("error"===t||"conflicts"===t)&&"synced"===e&&(u(s?.syncRestored??"Sync restored"),setTimeout(()=>u(null),3e3)),m.current=e}},[s,n,l,h]),!n||e)return null;let g=D(s,l);if("off"===g){if(x)return null;let e=h.sidebar?.sync;return(0,r.jsxs)("div",{className:"hidden md:flex items-center justify-between px-4 py-1.5 border-t border-border text-xs text-muted-foreground shrink-0 animate-in fade-in duration-300",children:[(0,r.jsxs)("button",{onClick:t,className:"flex items-center gap-2 min-w-0 hover:text-foreground transition-colors truncate",title:e?.enableHint??"Set up cross-device sync",children:[(0,r.jsx)("span",{className:"w-2 h-2 rounded-full shrink-0 bg-muted-foreground/40"}),(0,r.jsxs)("span",{className:"truncate",children:[e?.enableSync??"Enable sync"," →"]})]}),(0,r.jsx)("button",{onClick:e=>{e.stopPropagation();try{localStorage.setItem("sync-hint-dismissed","1")}catch(e){console.warn("[SyncStatusBar] localStorage write dismissed:",e)}p(!0)},className:"p-1 rounded hover:bg-muted hover:text-foreground transition-colors shrink-0 ml-2 text-muted-foreground/50 hover:text-muted-foreground",title:"Dismiss",children:(0,r.jsx)("span",{className:"text-2xs",children:"✕"})})]})}let f=h.sidebar?.sync,{label:v,tooltip:j}=O(g,s,f);return(0,r.jsxs)("div",{className:"hidden md:flex items-center justify-between px-4 py-1.5 border-t border-border text-xs text-muted-foreground shrink-0 animate-in fade-in duration-300",children:[(0,r.jsxs)("button",{onClick:t,className:"flex items-center gap-2 min-w-0 hover:text-foreground transition-colors truncate",title:j,children:[(0,r.jsx)("span",{className:`w-2 h-2 rounded-full shrink-0 ${P[g]} ${"syncing"===g||"conflicts"===g?"animate-pulse":""}`}),(0,r.jsx)("span",{className:"truncate",children:c||v})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1 shrink-0 ml-2",children:[("success"===i||c)&&(0,r.jsx)(N.A,{size:12,className:"text-success animate-in fade-in duration-200"}),"error"===i&&(0,r.jsx)(k.A,{size:12,className:"text-error animate-in fade-in duration-200"}),(0,r.jsx)("button",{onClick:e=>{e.stopPropagation(),d()},disabled:l,className:"p-1 rounded hover:bg-muted hover:text-foreground transition-colors disabled:opacity-40",title:f?.syncNow??"Sync now",children:(0,r.jsx)(b.A,{size:12,className:l?"animate-spin":""})})]})]})}function W({status:e,syncing:t}){let s=D(e,t??!1);return"off"===s||"synced"===s?null:(0,r.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${P[s]} ${"conflicts"===s||"error"===s?"animate-pulse":""}`})}function U({id:e,className:t="w-8 h-4"}){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 80 40",fill:"none",className:`${t} text-[var(--amber)]`,"aria-hidden":"true",children:[(0,r.jsxs)("defs",{children:[(0,r.jsxs)("linearGradient",{id:`grad-human-${e}`,x1:"35",y1:"20",x2:"5",y2:"20",gradientUnits:"userSpaceOnUse",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"0.8"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"0.3"})]}),(0,r.jsxs)("linearGradient",{id:`grad-agent-${e}`,x1:"35",y1:"20",x2:"75",y2:"20",gradientUnits:"userSpaceOnUse",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"0.8"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"1"})]})]}),(0,r.jsx)("path",{d:"M35,20 C25,35 8,35 8,20 C8,5 25,5 35,20",stroke:`url(#grad-human-${e})`,strokeWidth:"3",strokeDasharray:"2 4",strokeLinecap:"round"}),(0,r.jsx)("path",{d:"M35,20 C45,2 75,2 75,20 C75,38 45,38 35,20",stroke:`url(#grad-agent-${e})`,strokeWidth:"4.5",strokeLinecap:"round"}),(0,r.jsx)("path",{d:"M35,17.5 Q35,20 37.5,20 Q35,20 35,22.5 Q35,20 32.5,20 Q35,20 35,17.5 Z",fill:"#FEF3C7"})]})}function B({icon:e,label:t,shortcut:s,active:n=!1,expanded:a,onClick:o,buttonRef:l,badge:i,walkthroughId:d}){return(0,r.jsxs)("button",{ref:l,onClick:o,"aria-pressed":n,"aria-label":t,title:a?void 0:s?`${t} (${s})`:t,"data-walkthrough":d,className:`
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{2431:(e,t,s)=>{"use strict";s.d(t,{z:()=>a});var r=s(12115);let n="mindos:acp-detection";function a(){let e=(0,r.useRef)(function(){try{let e=sessionStorage.getItem(n);if(!e)return null;let t=JSON.parse(e);if("number"!=typeof t.ts||Date.now()-t.ts>18e5)return null;return t}catch{return null}}()),[t,s]=(0,r.useState)(e.current?.installed??[]),[a,o]=(0,r.useState)(e.current?.notInstalled??[]),[l,i]=(0,r.useState)(!e.current),[d,c]=(0,r.useState)(null),[u,m]=(0,r.useState)(0),x=(0,r.useRef)(!1),p=(0,r.useRef)(!1),h=(0,r.useCallback)(()=>{try{sessionStorage.removeItem(n)}catch{}e.current=null,p.current=!0,m(e=>e+1)},[]);return(0,r.useEffect)(()=>{let r=p.current;if(p.current=!1,e.current&&Date.now()-e.current.ts<3e5&&0===u||x.current)return;x.current=!0;let l=t.length>0||a.length>0;l||i(!0),c(null);let d=!1;return fetch(`/api/acp/detect${r?"?force=1":""}`).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(t=>{if(d)return;let r=t.installed??[],a=t.notInstalled??[];try{sessionStorage.setItem(n,JSON.stringify({installed:r,notInstalled:a,ts:Date.now()}))}catch{}e.current={installed:r,notInstalled:a,ts:Date.now()},s(r),o(a)}).catch(e=>{!d&&(l||c(e.message))}).finally(()=>{x.current=!1,d||i(!1)}),()=>{d=!0}},[u]),{installedAgents:t,notInstalledAgents:a,loading:l,error:d,refresh:h}}},10377:(e,t,s)=>{"use strict";s.d(t,{Z:()=>h});var r=s(12115);let n="mindos-pinned-files",a="mindos:pins-changed";function o(){try{let e=localStorage.getItem(n);return e?JSON.parse(e):[]}catch{return[]}}function l(){return c}let i=[];function d(){return i}let c=[],u=!1;function m(){u||(c=o(),u=!0)}function x(e){m();let t=t=>{t.key===n&&(c=o(),e())},s=()=>{c=o(),e()};return window.addEventListener("storage",t),window.addEventListener(a,s),()=>{window.removeEventListener("storage",t),window.removeEventListener(a,s)}}function p(e){c=e;try{localStorage.setItem(n,JSON.stringify(e))}catch{}window.dispatchEvent(new Event(a))}function h(){m();let e=(0,r.useSyncExternalStore)(x,l,d),t=(0,r.useCallback)(t=>e.includes(t),[e]),s=(0,r.useCallback)(e=>{let t=o(),s=t.indexOf(e);s>=0?t.splice(s,1):t.unshift(e),p(t)},[]);return{pinnedFiles:e,isPinned:t,togglePin:s,reorderPins:(0,r.useCallback)(e=>{p(e)},[]),removePin:(0,r.useCallback)(e=>{p(o().filter(t=>t!==e))},[])}}},14399:(e,t,s)=>{"use strict";s.d(t,{D:()=>n});var r=s(9339);let n=(0,r.createServerReference)("00fc6dac25f9d4d84b473c074128f4bd4b9dbd8b91",r.callServer,void 0,r.findSourceMapURL,"scanExampleFilesAction")},16518:(e,t,s)=>{"use strict";s.d(t,{AI:()=>n,RS:()=>r});let r=["about-you","continued","daily","past-you","growth"],n={"about-you":"/echo/about-you",continued:"/echo/continued",daily:"/echo/daily","past-you":"/echo/past-you",growth:"/echo/growth"}},18847:(e,t,s)=>{"use strict";s.r(t),s.d(t,{AgentInspectorRenderer:()=>y});var r=s(95155),n=s(12115),a=s(73321),o=s(84980),l=s(3926),i=s(93631),d=s(68459),c=s(61878),u=s(10762),m=s(12651),x=s(13545),p=s(66088);function h(e){return/read|list|get|search/.test(e)?/search/.test(e)?"search":"read":/create/.test(e)?"create":/delete/.test(e)?"delete":/write|update|insert|append/.test(e)?"write":"other"}let g={read:{bg:"rgba(138,180,216,0.10)",text:"#8ab4d8",border:"rgba(138,180,216,0.25)"},write:{bg:"rgba(200,135,58,0.10)",text:"var(--amber)",border:"rgba(200,135,58,0.25)"},create:{bg:"rgba(122,173,128,0.10)",text:"var(--success)",border:"rgba(122,173,128,0.25)"},delete:{bg:"rgba(200,80,80,0.10)",text:"var(--error)",border:"rgba(200,80,80,0.25)"},search:{bg:"rgba(200,160,216,0.10)",text:"#c8a0d8",border:"rgba(200,160,216,0.25)"},other:{bg:"var(--muted)",text:"var(--muted-foreground)",border:"var(--border)"}};function f({kind:e,size:t=13}){return"read"===e?(0,r.jsx)(o.A,{size:t}):"write"===e?(0,r.jsx)(l.A,{size:t}):"create"===e?(0,r.jsx)(i.A,{size:t}):"delete"===e?(0,r.jsx)(d.A,{size:t}):"search"===e?(0,r.jsx)(c.A,{size:t}):(0,r.jsx)(u.A,{size:t})}function b(e){try{return new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return e}}function v({op:e}){var t,s;let o,l,i,d,c=(0,a.useRouter)(),[u,v]=(0,n.useState)(!1),j=h(e.tool),y=g[j],N="string"==typeof(t=e.params).path?t.path:null,k=e.tool.replace("mindos_","");return(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,overflow:"hidden",marginBottom:8},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",cursor:"pointer",userSelect:"none"},onClick:()=>v(e=>!e),children:[(0,r.jsxs)("span",{className:"font-display",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"2px 8px",borderRadius:999,fontSize:"0.68rem",fontWeight:600,background:y.bg,color:y.text,border:`1px solid ${y.border}`,flexShrink:0},children:[(0,r.jsx)(f,{kind:j,size:10}),j]}),(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.78rem",color:"var(--foreground)",fontWeight:600,flexShrink:0},children:k}),N&&(0,r.jsx)("span",{style:{fontSize:"0.72rem",color:"var(--amber)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",cursor:"pointer"},onClick:e=>{e.stopPropagation(),c.push("/view/"+N.split("/").map(encodeURIComponent).join("/"))},title:N,className:"font-display",children:N}),(0,r.jsxs)("div",{style:{marginLeft:"auto",display:"flex",alignItems:"center",gap:8,flexShrink:0},children:["ok"===e.result?(0,r.jsx)(m.A,{size:13,style:{color:"var(--success)"}}):(0,r.jsx)(x.A,{size:13,style:{color:"var(--error)"}}),(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.68rem",color:"var(--muted-foreground)",opacity:.6},title:b(e.ts),children:(s=e.ts,l=Math.floor((o=Date.now()-new Date(s).getTime())/6e4),i=Math.floor(o/36e5),d=Math.floor(o/864e5),l<1?"just now":l<60?`${l}m ago`:i<24?`${i}h ago`:`${d}d ago`)}),(0,r.jsx)(p.A,{size:12,style:{color:"var(--muted-foreground)",transform:u?"rotate(180deg)":"none",transition:"transform .15s"}})]})]}),u&&(0,r.jsxs)("div",{style:{borderTop:"1px solid var(--border)",padding:"10px 14px",background:"var(--background)"},children:[(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:4,marginBottom:8*!!e.message},children:Object.entries(e.params).map(([e,t])=>(0,r.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"flex-start"},children:[(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.68rem",color:"var(--muted-foreground)",opacity:.7,flexShrink:0,minWidth:80},children:e}),(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.72rem",color:"var(--foreground)",wordBreak:"break-all",lineHeight:1.5},children:function(e,t=120){let s="string"==typeof e?e:JSON.stringify(e);return s.length>t?s.slice(0,t)+"…":s}(t)})]},e))}),e.message&&(0,r.jsx)("div",{className:"font-display",style:{marginTop:6,padding:"5px 9px",borderRadius:5,fontSize:"0.72rem",background:"error"===e.result?"rgba(200,80,80,0.08)":"rgba(122,173,128,0.08)",color:"error"===e.result?"var(--error)":"var(--success)",border:`1px solid ${"error"===e.result?"rgba(200,80,80,0.2)":"rgba(122,173,128,0.2)"}`},children:e.message}),(0,r.jsx)("div",{className:"font-display",style:{marginTop:6,fontSize:"0.65rem",color:"var(--muted-foreground)",opacity:.5},children:b(e.ts)})]})]})}let j=["all","write","create","delete","read","search"];function y({content:e}){let[t,s]=(0,n.useState)("all"),a=(0,n.useMemo)(()=>(function(e){try{let t=JSON.parse(e);if(Array.isArray(t.events))return t.events.filter(e=>!!e?.tool&&!!e?.ts).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())}catch{}return(function(e){let t=[];for(let s of e.split("\n")){let e=s.trim();if(!(!e||e.startsWith("#")||e.startsWith("//")))try{let s=JSON.parse(e);s.tool&&s.ts&&t.push(s)}catch{}}return t})(e).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())})(e),[e]),o=(0,n.useMemo)(()=>"all"===t?a:a.filter(e=>h(e.tool)===t),[a,t]),l=(0,n.useMemo)(()=>{let e={all:a.length};for(let t of a){let s=h(t.tool);e[s]=(e[s]??0)+1}return e},[a]);return 0===a.length?(0,r.jsxs)("div",{className:"font-display",style:{padding:"3rem 1rem",textAlign:"center",color:"var(--muted-foreground)",fontSize:12},children:[(0,r.jsx)(u.A,{size:28,style:{margin:"0 auto 10px",opacity:.3}}),(0,r.jsx)("p",{children:"No agent operations logged yet."}),(0,r.jsxs)("p",{style:{marginTop:6,opacity:.6,fontSize:11},children:["Agent writes appear here from ",(0,r.jsx)("code",{style:{background:"var(--muted)",padding:"1px 5px",borderRadius:4},children:".mindos/agent-audit-log.json"}),"."]})]}):(0,r.jsxs)("div",{style:{maxWidth:760,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsx)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:"1.2rem",flexWrap:"wrap"},children:j.map(e=>{let n=l[e]??0;if("all"!==e&&!n)return null;let a="all"!==e?g[e]:void 0,o=t===e;return(0,r.jsxs)("button",{onClick:()=>s(e),className:"font-display",style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 10px",borderRadius:999,fontSize:"0.7rem",cursor:"pointer",border:"none",background:o?a?.bg??"var(--accent)":"var(--muted)",color:o?a?.text??"var(--foreground)":"var(--muted-foreground)",outline:o?`1px solid ${a?.border??"var(--border)"}`:"none",transition:"all .1s"},children:["all"!==e&&(0,r.jsx)(f,{kind:e,size:10}),e," ",(0,r.jsxs)("span",{style:{opacity:.6},children:["(",n,")"]})]},e)})}),(0,r.jsx)("div",{children:o.map((e,t)=>(0,r.jsx)(v,{op:e},t))})]})}},20555:(e,t,s)=>{"use strict";s.d(t,{LD:()=>r,LZ:()=>n,qQ:()=>a});let r=[{id:"c1",icon:"\uD83D\uDC64",category:"memory-sync",scenario:"first-day"},{id:"c2",icon:"\uD83D\uDCE5",category:"knowledge-management",scenario:"daily"},{id:"c3",icon:"\uD83D\uDD04",category:"memory-sync",scenario:"project"},{id:"c4",icon:"\uD83D\uDD01",category:"experience-evolution",scenario:"daily"},{id:"c5",icon:"\uD83D\uDCA1",category:"auto-execute",scenario:"daily"},{id:"c6",icon:"\uD83D\uDE80",category:"auto-execute",scenario:"project"},{id:"c7",icon:"\uD83D\uDD0D",category:"knowledge-management",scenario:"project"},{id:"c8",icon:"\uD83E\uDD1D",category:"human-insights",scenario:"daily"},{id:"c9",icon:"\uD83D\uDEE1️",category:"audit-control",scenario:"advanced"}],n=["knowledge-management","memory-sync","auto-execute","experience-evolution","human-insights","audit-control"],a=["first-day","daily","project","advanced"]},26490:(e,t,s)=>{"use strict";s.d(t,{default:()=>u});var r=s(95155),n=s(12115),a=s(94514),o=s(13545),l=s(68822),i=s(33210),d=s(4235);let c={success:(0,r.jsx)(a.A,{size:15,className:"text-success shrink-0"}),error:(0,r.jsx)(o.A,{size:15,className:"text-error shrink-0"}),info:(0,r.jsx)(l.A,{size:15,className:"text-muted-foreground shrink-0"})};function u(){let e=(0,n.useSyncExternalStore)(d.B1,d.dV,d.dV);return 0===e.length?null:(0,r.jsx)("div",{className:"fixed bottom-4 right-4 z-50 flex flex-col-reverse gap-2 pointer-events-none","aria-live":"polite",children:e.map(e=>(0,r.jsxs)("div",{className:"pointer-events-auto flex items-center gap-2.5 bg-card border border-border rounded-lg shadow-lg px-4 py-2.5 min-w-[180px] max-w-[320px] animate-in slide-in-from-right-4 fade-in duration-200",children:[c[e.type],(0,r.jsx)("span",{className:"text-sm text-foreground flex-1 truncate",children:e.message}),e.action&&(0,r.jsx)("button",{type:"button",onClick:()=>{e.action.onClick(),(0,d.X8)(e.id)},className:"shrink-0 px-2.5 py-1 rounded text-xs font-medium text-[var(--amber)] hover:bg-[var(--amber-dim)] transition-colors min-h-[28px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:e.action.label}),(0,r.jsx)("button",{type:"button",onClick:()=>(0,d.X8)(e.id),className:"shrink-0 p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","aria-label":e.action?.label?"Close":"Dismiss",children:(0,r.jsx)(i.A,{size:13})})]},e.id))})}},27318:(e,t,s)=>{"use strict";s.d(t,{KT:()=>c,NH:()=>d});var r=s(12115);let n={open:!1,initialMessage:"",source:"user",acpAgent:null},a=new Set;function o(){a.forEach(e=>e())}function l(e){return a.add(e),()=>{a.delete(e)}}function i(){return n}function d(e="",t="user",s=null){n={open:!0,initialMessage:e,source:t,acpAgent:s},o()}function c(){let e=(0,r.useSyncExternalStore)(l,i,i);return{open:e.open,initialMessage:e.initialMessage,source:e.source,acpAgent:e.acpAgent,openWith:(0,r.useCallback)((e,t="user",s=null)=>d(e,t,s),[]),close:(0,r.useCallback)(()=>void(n={open:!1,initialMessage:"",source:"user",acpAgent:null},o()),[])}}},27996:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var r=s(95155),n=s(12115),a=s(47650),o=s(94514),l=s(66088);function i(e){return"options"in e}function d({value:e,onChange:t,options:s,className:d="",size:c="md",placeholder:u}){let[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(-1),[g,f]=(0,n.useState)(null),b=(0,n.useRef)(null),v=(0,n.useRef)(null),j=(0,n.useMemo)(()=>(function(e){let t=[];for(let s of e)i(s)?t.push(...s.options):t.push(s);return t})(s),[s]),y=(0,n.useMemo)(()=>j.find(t=>t.value===e)??null,[j,e]),N=(0,n.useCallback)(()=>{x(!1),h(-1)},[]),k=(0,n.useCallback)(e=>{t(e),N()},[t,N]);(0,n.useEffect)(()=>{if(!m)return;let e=e=>{b.current&&!b.current.contains(e.target)&&v.current&&!v.current.contains(e.target)&&N()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[m,N]),(0,n.useEffect)(()=>{if(!m)return;let e=e=>{switch(e.key){case"Escape":e.preventDefault(),N(),b.current?.focus();break;case"ArrowDown":e.preventDefault(),h(e=>Math.min(e+1,j.length-1));break;case"ArrowUp":e.preventDefault(),h(e=>Math.max(e-1,0));break;case"Enter":e.preventDefault(),p>=0&&p<j.length&&(k(j[p].value),b.current?.focus())}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[m,N,p,j,k]),(0,n.useEffect)(()=>{if(!m||!v.current||p<0)return;let e=v.current.querySelector(`[data-idx="${p}"]`);e&&e.scrollIntoView({block:"nearest"})},[m,p]);let w=(0,n.useCallback)(()=>{if(!b.current)return;let e=b.current.getBoundingClientRect(),t="sm"===c?200:260,s=window.innerHeight-e.bottom,r=e.top;f({top:s<t+8&&r>s?e.top:e.bottom,left:e.left,width:e.width,flipUp:s<t+8&&r>s})},[c]);(0,n.useEffect)(()=>{if(!m)return void f(null);let t=j.findIndex(t=>t.value===e);return h(t>=0?t:0),w(),window.addEventListener("scroll",w,!0),window.addEventListener("resize",w),()=>{window.removeEventListener("scroll",w,!0),window.removeEventListener("resize",w)}},[m,j,e,w]);let S="sm"===c,C=S?`inline-flex items-center gap-1 appearance-none rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring transition-colors text-2xs px-1.5 py-0.5 pr-5 ${d}`:`w-full flex items-center gap-2 appearance-none rounded-lg border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring transition-colors text-sm px-3 py-2 pr-8 ${d}`,A=S?"w-full flex items-center gap-1.5 px-2 py-1 text-2xs text-left transition-colors cursor-pointer":"w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left transition-colors cursor-pointer",z=-1;function E(t){let s=++z,n=t.value===e,a=s===p;return(0,r.jsxs)("button",{type:"button",role:"option","aria-selected":n,"data-idx":s,onClick:()=>k(t.value),onMouseEnter:()=>h(s),className:`${A} ${a?"bg-muted text-foreground":"text-foreground"}`,children:[t.icon,(0,r.jsx)("span",{className:"flex-1 truncate",children:t.label}),t.suffix,n&&(0,r.jsx)(o.A,{size:S?10:12,className:"shrink-0 text-[var(--amber)]"})]},t.value)}let $=m&&g&&(0,a.createPortal)((0,r.jsx)("div",{ref:v,className:S?"fixed z-[9999] overflow-y-auto rounded-md border border-border bg-card shadow-lg py-0.5":"fixed z-[9999] overflow-y-auto rounded-lg border border-border bg-card shadow-lg py-1",role:"listbox",style:{left:g.left,minWidth:g.width,maxHeight:S?200:260,...g.flipUp?{bottom:window.innerHeight-g.top+4}:{top:g.top+4}},children:s.map((e,t)=>i(e)?(0,r.jsxs)("div",{children:[t>0&&(0,r.jsx)("div",{className:"my-0.5 border-t border-border/50"}),(0,r.jsx)("div",{className:`py-1 text-2xs font-medium text-muted-foreground uppercase tracking-wider ${S?"px-2":"px-3"}`,children:e.label}),e.options.map(E)]},e.label):E(e))}),document.body);return(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{ref:b,type:"button",onClick:()=>x(e=>!e),"aria-haspopup":"listbox","aria-expanded":m,className:C,children:[y?.icon,(0,r.jsx)("span",{className:"flex-1 truncate text-left",children:y?.label??u??"—"}),y?.suffix,(0,r.jsx)(l.A,{size:S?12:14,className:`${S?"absolute right-1 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none":"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none"} transition-transform duration-150 ${m?"rotate-180":""}`})]}),$]})}},30696:(e,t,s)=>{"use strict";s.d(t,{f:()=>n});var r=s(9339);let n=(0,r.createServerReference)("60da69695bdf2c59793c50230939dee8c6a0133865",r.callServer,void 0,r.findSourceMapURL,"renameFileAction")},33229:(e,t,s)=>{"use strict";s.d(t,{E:()=>n});var r=s(9339);let n=(0,r.createServerReference)("00fd7b1422cde1970543006a17cc5591788ae2cc74",r.callServer,void 0,r.findSourceMapURL,"cleanupExamplesAction")},35504:(e,t,s)=>{"use strict";s.r(t),s.d(t,{ConfigRenderer:()=>d});var r=s(95155),n=s(12115),a=s(6296),o=s(94514),l=s(33210),i=s(51914);function d({content:e,saveAction:t}){let s=(0,n.useMemo)(()=>{try{return JSON.parse(e)}catch{return null}},[e]),[d,c]=(0,n.useState)(s),[u,m]=(0,n.useState)(!1),[x,p]=(0,n.useState)(!1),[h,g]=(0,n.useState)(""),[f,b]=(0,n.useState)({});(0,n.useEffect)(()=>{c(s),g("")},[s]);let v=d??{},j=v.uiSchema?.sections??[],y=v.keySpecs??{},N=(0,n.useCallback)(async e=>{m(!0),p(!1),g("");try{await t(`${JSON.stringify(e,null,2)}
|
|
2
|
+
`),p(!0),setTimeout(()=>p(!1),1200)}catch(e){g(e instanceof Error?e.message:"Failed to save")}finally{m(!1)}},[t]),k=(0,n.useCallback)(async(e,t)=>{if(!d)return;let s=function(e,t,s){let r=t.split("."),n=structuredClone(e),a=n;for(let e=0;e<r.length-1;e++){let t=r[e],s=a[t];(!s||"object"!=typeof s||Array.isArray(s))&&(a[t]={}),a=a[t]}return a[r[r.length-1]]=s,n}(d,e,t);c(s),await N(s)},[d,N]);return s&&d?(0,r.jsxs)("div",{className:"max-w-3xl mx-auto flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-card px-4 py-2.5",children:[(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"CONFIG Control Panel"}),(0,r.jsxs)("div",{className:"text-xs flex items-center gap-2",children:[u&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 text-muted-foreground",children:[(0,r.jsx)(a.A,{size:12,className:"animate-spin"}),"Saving"]}),!u&&x&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",style:{color:"var(--success)"},children:[(0,r.jsx)(o.A,{size:12}),"Saved"]})]})]}),h&&(0,r.jsx)("div",{className:"rounded-lg border border-error/30 bg-error/10 px-3 py-2 text-xs text-error",children:h}),j.map(e=>(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4",children:[(0,r.jsxs)("div",{className:"mb-3",children:[(0,r.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:e.title}),e.description&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:e.description})]}),(0,r.jsx)("div",{className:"space-y-3",children:e.fields.map(e=>{let t=y[e]??{},s=function(e,t){let s=t.split("."),r=e;for(let e of s){if(!r||"object"!=typeof r||!(e in r))return null;r=r[e]}return r}(d,e),n=t.label||e;return(0,r.jsxs)("div",{className:"rounded-lg border border-border/80 bg-background px-3 py-2.5",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3 mb-1.5",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-foreground",children:n}),t.description&&(0,r.jsx)("div",{className:"text-xs text-muted-foreground mt-0.5",children:t.description})]}),"switch"===t.control&&"boolean"==typeof s&&(0,r.jsx)("button",{type:"button",onClick:()=>k(e,!s),className:"px-2.5 py-1 rounded-md text-xs font-medium",style:{background:s?"var(--amber)":"var(--muted)",color:s?"var(--amber-foreground)":"var(--muted-foreground)"},children:s?"ON":"OFF"})]}),"text"===t.control&&"string"==typeof s&&(0,r.jsx)("input",{defaultValue:s,onBlur:t=>k(e,t.target.value),className:"w-full px-2 py-1.5 text-sm bg-card border border-border rounded text-foreground"}),"number"===t.control&&"number"==typeof s&&(0,r.jsx)("input",{type:"number",defaultValue:s,min:t.constraints?.min,max:t.constraints?.max,onBlur:r=>{let n=Number(r.target.value),a=t.constraints?.min,o=t.constraints?.max,l=Number.isFinite(n)?n:s;"number"==typeof a&&l<a&&(l=a),"number"==typeof o&&l>o&&(l=o),k(e,l)},className:"w-full px-2 py-1.5 text-sm bg-card border border-border rounded text-foreground"}),"tag-list"===t.control&&Array.isArray(s)&&(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:s.map((t,n)=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded border border-border text-xs bg-muted text-foreground",children:[String(t),(0,r.jsx)("button",{type:"button",onClick:()=>k(e,s.filter((e,t)=>t!==n)),className:"text-muted-foreground hover:text-foreground",children:(0,r.jsx)(l.A,{size:11})})]},`${String(t)}-${n}`))}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{value:f[e]??"",onChange:t=>b(s=>({...s,[e]:t.target.value})),onKeyDown:t=>{if("Enter"!==t.key)return;t.preventDefault();let r=(f[e]??"").trim();r&&(k(e,[...s,r]),b(t=>({...t,[e]:""})))},className:"flex-1 px-2 py-1.5 text-sm bg-card border border-border rounded text-foreground",placeholder:"Add item"}),(0,r.jsxs)("button",{type:"button",onClick:()=>{let t=(f[e]??"").trim();t&&(k(e,[...s,t]),b(t=>({...t,[e]:""})))},className:"px-2.5 py-1.5 rounded-md text-xs bg-muted text-foreground inline-flex items-center gap-1",children:[(0,r.jsx)(i.A,{size:12})," Add"]})]})]})]},e)})})]},e.id))]}):(0,r.jsx)("div",{className:"rounded-xl border border-border p-4 text-sm text-error",children:"CONFIG.json parse failed. Please check JSON format."})}},39594:(e,t,s)=>{"use strict";s.r(t),s.d(t,{TimelineRenderer:()=>i});var r=s(95155),n=s(12115);let a=/(\d{4}[-/]\d{1,2}(?:[-/]\d{1,2})?|[A-Za-z]+ \d{4}|\d{4}年\d{1,2}月(?:\d{1,2}日)?)/;function o(e){return e.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,'<code class="font-display" style="font-size:0.85em;padding:1px 5px;border-radius:4px;background:var(--muted)">$1</code>').replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g,(e,t,s)=>`<span style="color:var(--amber);cursor:pointer" title="${t}">${s??t}</span>`).replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" style="color:var(--amber)">$1</a>')}let l=[{bg:"rgba(200,135,58,0.12)",text:"var(--amber)"},{bg:"rgba(122,173,128,0.12)",text:"var(--success)"},{bg:"rgba(138,180,216,0.12)",text:"#8ab4d8"},{bg:"rgba(200,160,216,0.12)",text:"#c8a0d8"}];function i({content:e}){let t=(0,n.useMemo)(()=>(function(e){let t=e.split("\n"),s=[],r=null,n=[],o=()=>{let e,t;if(!r)return;let a=n.join("\n").trim();r.body=a,r.tags=(e=[],(t=a.match(/#([\w\u4e00-\u9fff]+)/g))&&e.push(...t.map(e=>e.slice(1))),[...new Set(e)]),s.push(r),r=null,n=[]};for(let e of t)if(!/^# /.test(e)){if(/^## /.test(e)){o();let t=e.slice(3).trim();r={heading:t,date:function(e){let t=a.exec(e);if(!t)return null;let s=new Date(t[1].replace(/[/年月]/g,"-").replace("日",""));return isNaN(s.getTime())?null:s}(t),body:"",tags:[]};continue}r&&n.push(e)}return o(),s})(e),[e]);return 0===t.length?(0,r.jsxs)("div",{className:"font-display",style:{padding:"3rem 1rem",textAlign:"center",color:"var(--muted-foreground)",fontSize:13},children:["No timeline entries found. Add ",(0,r.jsx)("code",{style:{background:"var(--muted)",padding:"1px 6px",borderRadius:4},children:"## 2025-01-15"})," headings to create entries."]}):(0,r.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsx)("div",{style:{marginBottom:"1.5rem",display:"flex",alignItems:"center",gap:8},children:(0,r.jsxs)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:[t.length," ",1===t.length?"entry":"entries"]})}),(0,r.jsxs)("div",{style:{position:"relative",paddingLeft:28},children:[(0,r.jsx)("div",{style:{position:"absolute",left:6,top:8,bottom:8,width:1,background:"var(--border)"}}),t.map((e,t)=>(0,r.jsxs)("div",{style:{position:"relative",marginBottom:"1.5rem"},children:[(0,r.jsx)("div",{style:{position:"absolute",left:-22,top:10,width:9,height:9,borderRadius:"50%",background:e.date?"var(--amber)":"var(--border)",outline:e.date?"2px solid var(--amber-dim)":"none",zIndex:1}}),(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,padding:"14px 18px",transition:"border-color .15s"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12,flexWrap:"wrap",marginBottom:8},children:[(0,r.jsx)("span",{style:{fontWeight:600,fontSize:"0.9rem",color:"var(--foreground)"},children:e.heading}),e.date&&(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.7rem",color:"var(--muted-foreground)",opacity:.7,flexShrink:0},children:e.date.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})})]}),e.body&&(0,r.jsx)("div",{dangerouslySetInnerHTML:{__html:function(e){let t=e.split("\n"),s=[],r=!1,n=()=>{r&&(s.push("</ul>"),r=!1)};for(let e of t){let t=e.trimEnd();if(!t){n(),s.push("<br/>");continue}if(/^### /.test(t)){n(),s.push(`<h3 style="font-size:0.8rem;font-weight:600;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.06em;margin:.9em 0 .3em">${o(t.slice(4))}</h3>`);continue}if(/^- /.test(t)||/^\* /.test(t)){r||(s.push('<ul style="margin:.3em 0;padding-left:1.2em;list-style:disc">'),r=!0),s.push(`<li style="margin:.15em 0;font-size:.82rem;color:var(--foreground)">${o(t.slice(2))}</li>`);continue}if(/^\d+\. /.test(t)){r||(s.push('<ol style="margin:.3em 0;padding-left:1.2em">'),r=!0),s.push(`<li style="margin:.15em 0;font-size:.82rem;color:var(--foreground)">${o(t.replace(/^\d+\. /,""))}</li>`);continue}n(),s.push(`<p style="margin:.25em 0;font-size:.82rem;line-height:1.6;color:var(--foreground)">${o(t)}</p>`)}return n(),s.join("")}(e.body)}}),e.tags.length>0&&(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:5,marginTop:10},children:e.tags.map(e=>{let t=function(e){let t=0;for(let s=0;s<e.length;s++)t=31*t+e.charCodeAt(s)&65535;return l[t%l.length]}(e);return(0,r.jsxs)("span",{className:"font-display",style:{fontSize:"0.68rem",padding:"1px 8px",borderRadius:999,background:t.bg,color:t.text},children:["#",e]},e)})})]})]},t))]})]})}},40430:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var r=s(95155),n=s(12115),a=s(12651),o=s(6296),l=s(61263);let i="mindos_update_in_progress";function d(){let[e,t]=(0,n.useState)(!1),[s,d]=(0,n.useState)(!1),c=(0,n.useRef)(void 0),{locale:u}=(0,l.Y)(),m="zh"===u,x=(0,n.useCallback)(()=>{c.current=setInterval(async()=>{try{if((await fetch("/api/health",{signal:AbortSignal.timeout(3e3)})).ok){clearInterval(c.current),c.current=void 0;try{let e=localStorage.getItem(i);if(e){let{originalVer:t}=JSON.parse(e),s=await fetch("/api/update-check").then(e=>e.json());if(s.current&&s.current!==t){d(!0),localStorage.removeItem(i),localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),setTimeout(()=>window.location.reload(),1500);return}}}catch{}localStorage.removeItem(i),window.location.reload()}}catch{}},3e3)},[]);return((0,n.useEffect)(()=>{let e=()=>{localStorage.getItem(i)&&(t(!0),c.current||x())};e();let s=()=>e();return window.addEventListener("mindos:update-started",s),window.addEventListener("storage",s),()=>{clearInterval(c.current),c.current=void 0,window.removeEventListener("mindos:update-started",s),window.removeEventListener("storage",s)}},[x]),e)?(0,r.jsxs)("div",{style:{position:"fixed",inset:0,zIndex:99999,background:"rgba(0,0,0,0.7)",backdropFilter:"blur(8px)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",fontFamily:"system-ui, -apple-system, sans-serif"},children:[s?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.A,{size:32,style:{color:"var(--success)",marginBottom:12}}),(0,r.jsx)("div",{style:{color:"var(--foreground)",fontSize:18,fontWeight:600},children:m?"更新成功!":"Update Complete!"}),(0,r.jsx)("div",{style:{color:"var(--muted-foreground)",fontSize:13,marginTop:6},children:m?"正在刷新页面...":"Reloading..."})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.A,{size:32,style:{color:"var(--amber)",marginBottom:12,animation:"spin 1s linear infinite"}}),(0,r.jsx)("div",{style:{color:"var(--foreground)",fontSize:18,fontWeight:600},children:m?"MindOS 正在更新...":"MindOS is Updating..."}),(0,r.jsx)("div",{style:{color:"var(--muted-foreground)",fontSize:13,marginTop:6,textAlign:"center",maxWidth:300,lineHeight:1.5},children:m?"服务正在重启,请勿关闭此页面。完成后将自动刷新。":"The server is restarting. Please do not close this page. It will auto-reload when ready."})]}),(0,r.jsx)("style",{children:"@keyframes spin { to { transform: rotate(360deg) } }"})]}):null}},46838:(e,t,s)=>{"use strict";s.d(t,{$7:()=>o,MZ:()=>c,TS:()=>i,UG:()=>a,YB:()=>d,pl:()=>l});let r=[],n=new Set;function a(){try{let e=localStorage.getItem("mindos-disabled-renderers");n=new Set(e?JSON.parse(e):[])}catch{n=new Set}}function o(e,t){let s=r.find(t=>t.id===e);s?.core||(t?n.delete(e):n.add(e),localStorage.setItem("mindos-disabled-renderers",JSON.stringify([...n])))}function l(e){let t=r.find(t=>t.id===e);return!!t?.core||!n.has(e)}function i(e){r.find(t=>t.id===e.id)||r.push(e)}function d(e,t,s){if(s){let e=r.find(e=>e.id===s);return e&&l(e.id)?e:void 0}return r.find(s=>l(s.id)&&s.match({filePath:e,extension:t}))}function c(){return r.filter(e=>!e.appBuiltinFeature)}},48133:(e,t,s)=>{"use strict";s.r(t),s.d(t,{WorkflowYamlRenderer:()=>Z});var r=s(95155),n=s(12115),a=s(49387),o=s(20232),l=s(53961),i=s(13545),d=s(73620),c=s(42129),u=s(51914),m=s(6296),x=s(55243),p=s(12651),h=s(66088),g=s(9921),f=s(68459),b=s(1164),v=s(61878),j=s(33210),y=s(48368),N=s(38798),k=s(21362);function w({trigger:e,children:t,open:s,onClose:a}){let o=(0,n.useRef)(null);return(0,n.useEffect)(()=>{if(!s)return;let e=e=>{o.current&&!o.current.contains(e.target)&&a()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[s,a]),(0,r.jsxs)("div",{ref:o,className:"relative",children:[e,s&&(0,r.jsx)("div",{className:"absolute top-full left-0 mt-1 w-full min-w-[220px] max-h-[260px] overflow-y-auto bg-card border border-border rounded-lg shadow-lg z-50",children:t})]})}let S=null,C=!1,A=[];function z({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(""),[i,d]=(0,n.useState)(S??[]),[c,u]=(0,n.useState)("");(0,n.useEffect)(()=>{S?d(S):(A.push(d),C||(C=!0,fetch("/api/acp/registry").then(e=>e.json()).then(e=>{let t=(e.registry?.agents??[]).map(e=>({id:e.id,name:e.name||e.id}));S=t,A.forEach(e=>e(t)),A.length=0}).catch(()=>{S=[],A.forEach(e=>e([])),A.length=0})))},[]);let m=c?i.filter(e=>e.id.toLowerCase().includes(c.toLowerCase())||e.name.toLowerCase().includes(c.toLowerCase())):i,x=e=>{t(e),a(!1),u("")},p=e?i.find(t=>t.id===e)?.name||e:void 0;return(0,r.jsxs)(w,{open:s,onClose:()=>{a(!1),u("")},trigger:(0,r.jsxs)("button",{type:"button",onClick:()=>a(e=>!e),className:"w-full flex items-center justify-between px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)("span",{className:e?"text-foreground truncate":"text-muted-foreground",children:p||"MindOS"}),(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground shrink-0"})]}),children:[(0,r.jsx)("div",{className:"sticky top-0 bg-card border-b border-border px-2.5 py-1.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded border border-border bg-background",children:[(0,r.jsx)(v.A,{size:11,className:"text-muted-foreground shrink-0"}),(0,r.jsx)("input",{type:"text",value:c,onChange:e=>u(e.target.value),autoFocus:!0,placeholder:"Search agents...",className:"flex-1 text-xs bg-transparent text-foreground placeholder:text-muted-foreground focus:outline-none"})]})}),(0,r.jsxs)("button",{onClick:()=>x(void 0),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${!e?"text-[var(--amber)] font-medium":"text-foreground"}`,children:["MindOS ",(0,r.jsx)("span",{className:"text-muted-foreground/50 ml-1",children:"(default)"})]}),m.slice(0,30).map(t=>(0,r.jsxs)("button",{onClick:()=>x(t.id),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${e===t.id?"text-[var(--amber)] font-medium":"text-foreground"}`,children:[t.name," ",t.name!==t.id&&(0,r.jsxs)("span",{className:"text-muted-foreground/50 ml-1",children:["(",t.id,")"]})]},t.id)),0===i.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"Loading..."}),i.length>0&&0===m.length&&!c&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No ACP agents found"}),(0,r.jsx)("div",{className:"border-t border-border px-2.5 py-1.5",children:(0,r.jsx)("input",{type:"text",value:o,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&o.trim()&&(x(o.trim()),l(""))},placeholder:"Custom agent ID...",className:"w-full px-2 py-1 text-xs rounded border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})})]})}let E=[{group:"Anthropic",models:["claude-sonnet-4-6","claude-opus-4","claude-3.5-sonnet","claude-3.5-haiku"]},{group:"OpenAI",models:["gpt-4o","gpt-4o-mini","o3","o4-mini"]},{group:"Google",models:["gemini-2.5-pro","gemini-2.5-flash"]}];function $({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(""),i=e=>{t(e),a(!1)};return(0,r.jsxs)(w,{open:s,onClose:()=>a(!1),trigger:(0,r.jsxs)("button",{type:"button",onClick:()=>a(e=>!e),className:"w-full flex items-center justify-between px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)("span",{className:e?"text-foreground truncate":"text-muted-foreground",children:e||"Default model"}),e?(0,r.jsx)(j.A,{size:12,className:"text-muted-foreground shrink-0 hover:text-foreground cursor-pointer",onClick:e=>{e.stopPropagation(),i(void 0)}}):(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground shrink-0"})]}),children:[(0,r.jsx)("button",{onClick:()=>i(void 0),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${!e?"text-[var(--amber)] font-medium":"text-muted-foreground"}`,children:"(default)"}),E.map(t=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"px-3 py-1 text-2xs font-semibold text-muted-foreground/60 uppercase tracking-wide bg-muted/30",children:t.group}),t.models.map(t=>(0,r.jsx)("button",{onClick:()=>i(t),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${e===t?"text-[var(--amber)] font-medium":"text-foreground"}`,children:t},t))]},t.group)),(0,r.jsx)("div",{className:"border-t border-border px-2.5 py-1.5",children:(0,r.jsx)("input",{type:"text",value:o,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&o.trim()&&(i(o.trim()),l(""))},placeholder:"Custom model ID...",className:"w-full px-2 py-1 text-xs rounded border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})})]})}let T=null,R=!1,M=[];function I({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(T??[]),[i,d]=(0,n.useState)("");(0,n.useEffect)(()=>{T?l(T):(M.push(l),R||(R=!0,fetch("/api/skills").then(e=>e.json()).then(e=>{T=(e.skills??[]).map(e=>({name:e.name,description:e.description})),M.forEach(e=>e(T)),M.length=0}).catch(()=>{T=[],M.forEach(e=>e([])),M.length=0})))},[]);let c=i?o.filter(e=>e.name.toLowerCase().includes(i.toLowerCase())):o;return(0,r.jsxs)("div",{children:[e.length>0&&(0,r.jsx)("div",{className:"flex flex-wrap gap-1 mb-1.5",children:e.map(s=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 pl-2 pr-1 py-0.5 rounded-md text-2xs bg-[var(--amber)]/10 text-[var(--amber)] border border-[var(--amber)]/20",children:[s,(0,r.jsx)("button",{onClick:()=>t(e.filter(e=>e!==s)),className:"p-0.5 rounded hover:bg-[var(--amber)]/20 transition-colors",children:(0,r.jsx)(j.A,{size:10})})]},s))}),(0,r.jsxs)(w,{open:s,onClose:()=>{a(!1),d("")},trigger:(0,r.jsxs)("button",{type:"button",onClick:()=>a(e=>!e),className:"w-full flex items-center justify-between px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:0===e.length?"Add skills...":`${e.length} selected`}),(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground"})]}),children:[(0,r.jsx)("div",{className:"sticky top-0 bg-card border-b border-border px-2.5 py-1.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded border border-border bg-background",children:[(0,r.jsx)(v.A,{size:11,className:"text-muted-foreground shrink-0"}),(0,r.jsx)("input",{type:"text",value:i,onChange:e=>d(e.target.value),autoFocus:!0,placeholder:"Search skills...",className:"flex-1 text-xs bg-transparent text-foreground placeholder:text-muted-foreground focus:outline-none"})]})}),c.slice(0,60).map(s=>{let n=e.includes(s.name);return(0,r.jsxs)("button",{onClick:()=>{var r;return r=s.name,void(e.includes(r)?t(e.filter(e=>e!==r)):t([...e,r]))},className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors flex items-center gap-2 ${n?"bg-[var(--amber)]/5":""}`,children:[(0,r.jsx)("span",{className:`w-3.5 h-3.5 rounded border flex items-center justify-center shrink-0 transition-colors ${n?"bg-[var(--amber)] border-[var(--amber)] text-white":"border-border"}`,children:n&&(0,r.jsx)("span",{className:"text-[9px]",children:"✓"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("span",{className:"block truncate",children:s.name}),s.description&&(0,r.jsx)("span",{className:"block text-2xs text-muted-foreground truncate mt-0.5",children:s.description})]})]},s.name)}),0===o.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"Loading..."}),o.length>0&&0===c.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No skills found"})]})]})}function D({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(""),i=(0,n.useCallback)(s=>{let r=s.trim();r&&!e.includes(r)&&t([...e,r])},[e,t]),d=(0,n.useCallback)(e=>{e.preventDefault(),a(!1);let t=e.dataTransfer.getData("text/mindos-path");if(t)return void i(t);let s=e.dataTransfer.getData("text/plain");s&&i(s)},[i]),u=(0,n.useCallback)(e=>{e.preventDefault(),e.dataTransfer.dropEffect="copy",a(!0)},[]),m=(0,n.useCallback)(()=>a(!1),[]);return(0,r.jsxs)("div",{children:[e.length>0&&(0,r.jsx)("div",{className:"flex flex-col gap-1 mb-1.5",children:e.map(s=>(0,r.jsxs)("div",{className:"flex items-center gap-1.5 pl-2 pr-1 py-1 rounded-md text-2xs bg-muted/60 border border-border group",children:[(0,r.jsx)(y.A,{size:11,className:"text-muted-foreground shrink-0"}),(0,r.jsx)("span",{className:"text-foreground truncate flex-1",title:s,children:s}),(0,r.jsx)("button",{onClick:()=>t(e.filter(e=>e!==s)),className:"p-0.5 rounded hover:bg-[var(--error)]/10 text-muted-foreground hover:text-[var(--error)] opacity-0 group-hover:opacity-100 transition-all",children:(0,r.jsx)(j.A,{size:10})})]},s))}),(0,r.jsxs)("div",{onDrop:d,onDragOver:u,onDragLeave:m,className:`flex items-center gap-2 px-3 py-2.5 rounded-lg border-2 border-dashed transition-colors ${s?"border-[var(--amber)] bg-[var(--amber)]/5":"border-border hover:border-muted-foreground/30"}`,children:[(0,r.jsx)(c.A,{size:14,className:`shrink-0 ${s?"text-[var(--amber)]":"text-muted-foreground/40"}`}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground",children:"Drag files here from the sidebar"})]}),(0,r.jsx)("div",{className:"mt-1.5",children:(0,r.jsx)("input",{type:"text",value:o,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&o.trim()&&(i(o.trim()),l(""))},placeholder:"Or type a file path...",className:"w-full px-2.5 py-1 text-2xs rounded-md border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})})]})}async function P(e){try{let t=await fetch("/api/setup/ls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e||"~"})});if(!t.ok)return[];return(await t.json()).dirs??[]}catch{return[]}}function L({value:e,onChange:t}){let[s,a]=(0,n.useState)([]),[o,l]=(0,n.useState)(!1),[i,d]=(0,n.useState)(-1),u=(0,n.useRef)(!1),m=(0,n.useRef)(null),[x,p]=(0,n.useState)(!1),[h,g]=(0,n.useState)(e||"~"),[f,b]=(0,n.useState)([]),[v,j]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(u.current){u.current=!1;return}if(!e.trim()){a([]),l(!1);return}let t=setTimeout(async()=>{let t=function(e){let t=e.trim();if(!t)return"";if(t.endsWith("/")||t.endsWith("\\"))return t;let s=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return s>=0?t.slice(0,s+1):""}(e)||"~",s=await P(t);if(!s.length){a([]),l(!1);return}let r=t.includes("\\")?"\\":"/",n=t.endsWith("/")||t.endsWith("\\")?t:t+r,o=s.map(e=>n+e),i=e.endsWith("/")||e.endsWith("\\")?o:o.filter(t=>t.startsWith(e.trim()));a(i.slice(0,15)),l(i.length>0),d(-1)},300);return()=>clearTimeout(t)},[e]);let y=()=>{a([]),l(!1),d(-1)},S=e=>{u.current=!0,t(e),y(),m.current?.focus()},C=(0,n.useCallback)(async e=>{j(!0),b(await P(e)),j(!1)},[]);return(0,n.useEffect)(()=>{x&&C(h)},[x,h,C]),(0,r.jsxs)("div",{className:"relative flex gap-1.5",children:[(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.jsx)("input",{ref:m,type:"text",value:e,onChange:e=>{t(e.target.value),l(!0)},onKeyDown:e=>{o&&0!==s.length&&("ArrowDown"===e.key?(e.preventDefault(),d(e=>Math.min(e+1,s.length-1))):"ArrowUp"===e.key?(e.preventDefault(),d(e=>Math.max(e-1,-1))):"Enter"===e.key&&i>=0?(e.preventDefault(),S(s[i])):"Escape"===e.key?y():"Tab"===e.key&&i>=0&&(e.preventDefault(),S(s[i])))},onBlur:()=>setTimeout(y,150),onFocus:()=>s.length>0&&l(!0),placeholder:"~/projects/my-app",className:"w-full px-2.5 py-1.5 text-xs rounded-lg border border-border bg-background text-foreground font-mono placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"}),o&&s.length>0&&(0,r.jsx)("div",{role:"listbox",className:"absolute z-50 left-0 right-0 top-full mt-1 rounded-lg border border-border bg-card shadow-lg overflow-auto max-h-[200px]",children:s.map((e,t)=>(0,r.jsxs)("button",{type:"button",role:"option","aria-selected":t===i,onMouseDown:()=>S(e),className:`w-full text-left px-3 py-1.5 text-xs font-mono transition-colors flex items-center gap-1.5 ${t===i?"bg-muted text-foreground":"text-foreground hover:bg-muted/50"}`,children:[(0,r.jsx)(N.A,{size:11,className:"text-[var(--amber)] shrink-0"}),(0,r.jsx)("span",{className:"truncate",children:e})]},e))})]}),(0,r.jsxs)(w,{open:x,onClose:()=>p(!1),trigger:(0,r.jsx)("button",{type:"button",onClick:()=>{g(e||"~"),p(e=>!e)},className:"px-2 py-1.5 rounded-lg border border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground transition-colors",title:"Browse directories",children:(0,r.jsx)(c.A,{size:13})}),children:[(0,r.jsxs)("div",{className:"sticky top-0 bg-card border-b border-border px-2.5 py-2 flex items-center gap-1.5",children:[(0,r.jsx)("span",{className:"text-2xs font-mono text-muted-foreground truncate flex-1",title:h,children:h}),(0,r.jsx)("button",{onClick:()=>{t(h),p(!1)},className:"px-2 py-0.5 text-2xs rounded font-medium bg-[var(--amber)] text-[var(--amber-foreground)] shrink-0",children:"Select"})]}),"~"!==h&&(0,r.jsxs)("button",{onClick:()=>{let e=h.split("/");e.length<=1||(e.pop(),g(e.join("/")||"~"))},className:"w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors text-muted-foreground flex items-center gap-1.5",children:[(0,r.jsx)(N.A,{size:12,className:"shrink-0"})," .."]}),v&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"Loading..."}),!v&&0===f.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No subdirectories"}),f.map(e=>(0,r.jsxs)("button",{onClick:()=>{g("~"===h?`~/${e}`:`${h.replace(/\/+$/,"")}/${e}`)},className:"w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors text-foreground flex items-center gap-1.5",children:[(0,r.jsx)(N.A,{size:12,className:"text-[var(--amber)] shrink-0"}),(0,r.jsx)("span",{className:"truncate flex-1",children:e}),(0,r.jsx)(k.A,{size:10,className:"text-muted-foreground/40 shrink-0"})]},e))]})]})}function F({step:e,index:t,onChange:s,onDelete:a,onMoveUp:o,onMoveDown:l}){let[i,d]=(0,n.useState)(!e.prompt),[c,u]=(0,n.useState)(!1),m=t=>s({...e,...t}),x=e.skills?.length?e.skills:e.skill?[e.skill]:[],p=!!(e.agent||e.model||x.length||e.context?.length||e.description||e.timeout);return i?(0,r.jsxs)("div",{className:"rounded-lg border border-[var(--amber)]/20 bg-card overflow-hidden shadow-sm",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 bg-muted/20",children:[(0,r.jsx)("span",{className:`text-xs font-medium flex-1 truncate ${e.name?"text-foreground":"text-muted-foreground/50 italic"}`,children:e.name||"Untitled step"}),(0,r.jsxs)("div",{className:"flex items-center gap-0.5",children:[o&&(0,r.jsx)("button",{onClick:o,className:"p-1 rounded hover:bg-muted text-muted-foreground/50 hover:text-foreground transition-colors",title:"Move up",children:(0,r.jsx)(g.A,{size:12})}),l&&(0,r.jsx)("button",{onClick:l,className:"p-1 rounded hover:bg-muted text-muted-foreground/50 hover:text-foreground transition-colors",title:"Move down",children:(0,r.jsx)(h.A,{size:12})}),(0,r.jsx)("button",{onClick:a,className:"p-1 rounded hover:bg-[var(--error)]/10 text-muted-foreground/50 hover:text-[var(--error)] transition-colors",title:"Delete",children:(0,r.jsx)(f.A,{size:11})}),(0,r.jsx)("button",{onClick:()=>d(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground/50 transition-colors",title:"Collapse",children:(0,r.jsx)(g.A,{size:12})})]})]}),(0,r.jsxs)("div",{className:"px-3 py-3 space-y-3",children:[(0,r.jsx)("input",{type:"text",value:e.name,onChange:e=>m({name:e.target.value}),placeholder:"Step name...",autoFocus:!e.name,className:"w-full text-sm font-medium bg-transparent text-foreground placeholder:text-muted-foreground/30 focus:outline-none border-none p-0"}),(0,r.jsx)("textarea",{value:e.prompt,onChange:e=>m({prompt:e.target.value}),placeholder:"What should the AI do?",rows:3,className:"w-full px-3 py-2.5 text-sm rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground/40 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring resize-y leading-relaxed"}),(0,r.jsxs)("div",{className:`grid ${e.agent?"grid-cols-2":"grid-cols-1"} gap-2`,children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Agent"}),(0,r.jsx)(z,{value:e.agent,onChange:t=>m({agent:t,model:t?e.model:void 0})})]}),e.agent&&(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Model"}),(0,r.jsx)($,{value:e.model,onChange:e=>m({model:e})})]})]}),(0,r.jsxs)("button",{onClick:()=>u(e=>!e),className:`flex items-center gap-1.5 text-2xs transition-colors ${c||p?"text-muted-foreground":"text-muted-foreground/40 hover:text-muted-foreground"}`,children:[(0,r.jsx)(b.A,{size:11}),c?"Less options":"More options",!c&&p&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--amber)]"})]}),c&&(0,r.jsxs)("div",{className:"space-y-3 pt-1",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Skills"}),(0,r.jsx)(I,{value:x,onChange:e=>m({skills:e,skill:void 0})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Context files"}),(0,r.jsx)(D,{value:e.context??[],onChange:e=>m({context:e.length?e:void 0})})]}),(0,r.jsxs)("div",{className:"grid grid-cols-[1fr,auto] gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Description"}),(0,r.jsx)("input",{type:"text",value:e.description||"",onChange:e=>m({description:e.target.value||void 0}),placeholder:"Optional note...",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground placeholder:text-muted-foreground/30 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Timeout"}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("input",{type:"number",min:0,value:e.timeout||"",onChange:e=>m({timeout:e.target.value?Number(e.target.value):void 0}),placeholder:"120",className:"w-16 px-2 py-1.5 text-xs rounded-md border border-border bg-background text-foreground placeholder:text-muted-foreground/30 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/40",children:"s"})]})]})]})]})]})]}):(0,r.jsxs)("div",{className:"group flex items-start gap-2 px-3 py-2 rounded-lg hover:bg-muted/40 transition-colors cursor-pointer -ml-1",onClick:()=>d(!0),children:[(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("span",{className:`text-sm leading-tight block ${e.name?"text-foreground font-medium":"text-muted-foreground/50 italic"}`,children:e.name||"Untitled step"}),p&&(0,r.jsxs)("div",{className:"flex items-center gap-1 mt-1 flex-wrap",children:[e.agent&&(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded-full bg-muted text-muted-foreground",children:e.agent}),x.slice(0,2).map(e=>(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded-full bg-[var(--amber)]/8 text-[var(--amber)]",children:e},e)),x.length>2&&(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground/50",children:["+",x.length-2]}),e.context?.length?(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground/50",children:[e.context.length," files"]}):null]}),e.prompt&&(0,r.jsx)("p",{className:"text-2xs text-muted-foreground/50 mt-1 line-clamp-1 leading-relaxed",children:e.prompt})]}),(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground/30 mt-1 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity"})]})}function O({workflow:e,filePath:t,onChange:s,onSaved:a}){let[o,i]=(0,n.useState)(!1),[h,g]=(0,n.useState)(""),[f,b]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>b(!1),3e3);return()=>clearTimeout(e)},[f]);let v=t=>s({...e,...t}),j=(0,n.useCallback)((t,r)=>{let n=[...e.steps];n[t]=r,s({...e,steps:n})},[e,s]),y=(0,n.useCallback)(t=>{let r=e.steps[t];(!(r.name||r.prompt)||window.confirm(`Delete step "${r.name||"Untitled"}"?`))&&s({...e,steps:e.steps.filter((e,s)=>s!==t)})},[e,s]),N=(0,n.useCallback)(()=>{let t=e.steps.map(e=>e.id),r=e.steps.length+1,n={id:function(e,t){let s=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"step",r=s,n=2;for(;t.includes(r);)r=`${s}-${n}`,n++;return r}(`step-${r}`,t),name:`Step ${r}`,prompt:""};s({...e,steps:[...e.steps,n]})},[e,s]),k=(0,n.useCallback)((t,r)=>{if(r<0||r>=e.steps.length)return;let n=[...e.steps],[a]=n.splice(t,1);n.splice(r,0,a),s({...e,steps:n})},[e,s]),w=async()=>{i(!0),g(""),b(!1);try{let s,r=(s={title:e.title},e.description&&(s.description=e.description),e.workDir&&(s.workDir=e.workDir),e.skills?.length&&(s.skills=e.skills),e.tools?.length&&(s.tools=e.tools),s.steps=e.steps.map(e=>{let t={id:e.id,name:e.name};return e.description&&(t.description=e.description),e.agent&&(t.agent=e.agent),e.model&&(t.model=e.model),e.skill&&(t.skill=e.skill),e.skills?.length&&(t.skills=e.skills),e.tools?.length&&(t.tools=e.tools),e.context?.length&&(t.context=e.context),t.prompt=e.prompt,e.timeout&&(t.timeout=e.timeout),t}),d.Ay.dump(s,{lineWidth:-1,noRefs:!0,quotingType:'"',forceQuotes:!1})),n=await fetch("/api/file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:t,op:"save_file",content:r})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`Save failed (HTTP ${n.status})`)}b(!0),a?.()}catch(e){g(e instanceof Error?e.message:"Save failed")}finally{i(!1)}};(0,n.useEffect)(()=>{let t=t=>{(t.metaKey||t.ctrlKey)&&"s"===t.key&&(t.preventDefault(),!o&&e.title.trim()&&e.steps.length>0&&w())};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)});let S=!o&&!!e.title.trim()&&e.steps.length>0;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"space-y-3 mb-8",children:[(0,r.jsx)("input",{type:"text",value:e.title,onChange:e=>v({title:e.target.value}),placeholder:"Flow title...",className:"w-full text-lg font-semibold bg-transparent text-foreground placeholder:text-muted-foreground/40 focus:outline-none border-none p-0 leading-tight"}),(0,r.jsx)("input",{type:"text",value:e.description||"",onChange:e=>v({description:e.target.value||void 0}),placeholder:"Add a description...",className:"w-full text-sm bg-transparent text-muted-foreground placeholder:text-muted-foreground/30 focus:outline-none border-none p-0"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(c.A,{size:12,className:"text-muted-foreground/40 shrink-0"}),(0,r.jsx)(L,{value:e.workDir||"",onChange:e=>v({workDir:e||void 0})})]})]}),e.steps.length>0?(0,r.jsxs)("div",{className:"relative",children:[e.steps.length>1&&(0,r.jsx)("div",{className:"absolute left-[19px] top-6 bottom-16 w-px bg-border"}),(0,r.jsx)("div",{className:"flex flex-col gap-3 mb-5 relative",children:e.steps.map((t,s)=>(0,r.jsxs)("div",{className:"relative pl-11",children:[(0,r.jsx)("div",{className:"absolute left-[7px] top-3 w-[22px] h-[22px] rounded-full border-2 border-border bg-background z-10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"text-[10px] font-bold text-muted-foreground/60",children:s+1})}),(0,r.jsx)(F,{step:t,index:s,onChange:e=>j(s,e),onDelete:()=>y(s),onMoveUp:s>0?()=>k(s,s-1):void 0,onMoveDown:s<e.steps.length-1?()=>k(s,s+1):void 0})]},t.id))}),(0,r.jsxs)("div",{className:"relative pl-11",children:[(0,r.jsx)("div",{className:"absolute left-[7px] top-2.5 w-[22px] h-[22px] rounded-full border-2 border-dashed border-border bg-background z-10 flex items-center justify-center",children:(0,r.jsx)(u.A,{size:9,className:"text-muted-foreground/40"})}),(0,r.jsx)("button",{onClick:N,className:"w-full text-left px-3 py-2 rounded-lg text-xs text-muted-foreground/60 hover:text-muted-foreground hover:bg-muted/40 transition-colors",children:"Add step..."})]})]}):(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center py-16 text-center",children:[(0,r.jsx)("div",{className:"w-12 h-12 rounded-2xl bg-[var(--amber)]/8 flex items-center justify-center mb-4",children:(0,r.jsx)(l.A,{size:22,className:"text-[var(--amber)]/60"})}),(0,r.jsx)("p",{className:"text-sm font-medium text-foreground mb-1",children:"Build your flow"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground/60 mb-5 max-w-[240px]",children:"Each step is a task for an AI agent. Chain them together to automate complex workflows."}),(0,r.jsxs)("button",{onClick:N,className:"inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-xs font-medium bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-90 transition-opacity",children:[(0,r.jsx)(u.A,{size:12}),"Add first step"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 mt-8 pt-4 border-t border-border/50",children:[(0,r.jsxs)("button",{onClick:w,disabled:!S,title:e.title.trim()?0===e.steps.length?"Add at least one step":void 0:"Title is required",className:`flex items-center gap-1.5 px-4 py-2 rounded-lg text-xs font-medium transition-all disabled:opacity-40 disabled:cursor-not-allowed ${S?"bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-90":"bg-muted text-muted-foreground"}`,children:[o?(0,r.jsx)(m.A,{size:12,className:"animate-spin"}):(0,r.jsx)(x.A,{size:12}),o?"Saving...":"Save"]}),h&&(0,r.jsx)("span",{className:"text-xs text-[var(--error)]",children:h}),f&&!h&&(0,r.jsxs)("span",{className:"flex items-center gap-1 text-2xs text-[var(--success)]",children:[(0,r.jsx)(p.A,{size:11}),"Saved"]}),(0,r.jsx)("kbd",{className:"text-2xs text-muted-foreground/30 ml-auto font-mono",children:"Ctrl+S"})]})]})}var _=s(30125),W=s(62791),U=s(86901),B=s(21628),H=s(9199);let K=new Map;async function Y(e,t){if(K.has(e))return K.get(e);try{let s=await fetch("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"read",name:e}),signal:t});if(!s.ok)return K.set(e,null),null;let r=(await s.json()).content;return K.set(e,r??null),r??null}catch{return null}}async function J(e,t){try{let s=await fetch(`/api/acp/registry?agent=${encodeURIComponent(e)}`,{signal:t});if(!s.ok)return null;let r=await s.json();if(r.agent?.id)return{id:r.agent.id,name:r.agent.name||e};return null}catch{return null}}async function G(e,t,s,r,n){let a=function(e,t){let s=[];if(e.skills?.length)for(let t of e.skills)s.includes(t)||s.push(t);else e.skill&&s.push(e.skill);for(let e of t.skills??[])s.includes(e)||s.push(e);return s}(e,t),o=new Map;if(a.length>0)for(let[e,t]of(await Promise.all(a.map(async e=>{let t=await Y(e,n);return[e,t]}))))t&&o.set(e,t);let l=null;e.agent&&(l=await J(e.agent,n));let i={messages:[{role:"user",content:function(e,t,s){let r=t.steps.map((e,t)=>`${t+1}. ${e.name}`).join("\n"),n=e.skills?.length?e.skills[0]:e.skill,a="";if(s.size>0){let e=[];for(let[t,r]of s){let s=t===n;e.push(`### ${s?"[Primary] ":""}Skill: ${t}
|
|
3
|
+
|
|
4
|
+
${r}`)}a=`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
## Skill Reference
|
|
8
|
+
|
|
9
|
+
Follow the guidelines from these skills when executing this step:
|
|
10
|
+
|
|
11
|
+
${e.join("\n\n---\n\n")}`}return`You are executing step ${e.index+1} of a workflow: "${e.name}".
|
|
12
|
+
|
|
13
|
+
Context of the full workflow "${t.title}":
|
|
14
|
+
${r}
|
|
15
|
+
|
|
16
|
+
Current step instructions:
|
|
17
|
+
${e.prompt||"(No specific instructions — use common sense.)"}${a}
|
|
18
|
+
|
|
19
|
+
Execute concisely. Provide:
|
|
20
|
+
1. What you did / what the output is
|
|
21
|
+
2. Any decisions made
|
|
22
|
+
3. What the next step should watch out for
|
|
23
|
+
|
|
24
|
+
Be specific and actionable. Format in Markdown.`}(e,t,o)}],currentFile:s};l&&(i.selectedAcpAgent=l);let d=await fetch("/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),signal:n});if(!d.ok)throw Error(`Request failed (HTTP ${d.status})`);if(!d.body)throw Error("No response body");let c=d.body.getReader(),u=new TextDecoder,m="";for(;;){let{done:e,value:t}=await c.read();if(e)break;for(let e of u.decode(t,{stream:!0}).split("\n")){let t=e.match(/^data:(.+)$/);if(t){try{let e=JSON.parse(t[1]);if("text_delta"===e.type&&"string"==typeof e.delta)m+=e.delta,r(m);else if("thinking_delta"===e.type&&"string"==typeof e.delta)m+=e.delta,r(m);else if("error"===e.type&&e.message)throw Error(e.message)}catch{let t=e.match(/^0:"((?:[^"\\]|\\.)*)"$/);t&&r(m+=t[1].replace(/\\n/g,"\n").replace(/\\"/g,'"').replace(/\\\\/g,"\\"))}continue}let s=e.match(/^0:"((?:[^"\\]|\\.)*)"$/);s&&r(m+=s[1].replace(/\\n/g,"\n").replace(/\\"/g,'"').replace(/\\\\/g,"\\"))}}}function q(e){return e.steps.map((e,t)=>({...e,index:t,status:"pending",output:"",error:void 0}))}function V({status:e,index:t}){let s="w-[26px] h-[26px] rounded-full flex items-center justify-center shrink-0 transition-all";return"running"===e?(0,r.jsx)("div",{className:`${s} bg-[var(--amber)]/15 ring-2 ring-[var(--amber)]/30`,children:(0,r.jsx)(m.A,{size:12,className:"text-[var(--amber)] animate-spin"})}):"done"===e?(0,r.jsx)("div",{className:`${s} bg-[var(--success)]/15`,children:(0,r.jsx)(p.A,{size:13,className:"text-[var(--success)]"})}):"error"===e?(0,r.jsx)("div",{className:`${s} bg-[var(--error)]/15`,children:(0,r.jsx)(i.A,{size:13,className:"text-[var(--error)]"})}):"skipped"===e?(0,r.jsx)("div",{className:`${s} bg-muted/50`,children:(0,r.jsx)(_.A,{size:11,className:"text-muted-foreground/40"})}):(0,r.jsx)("div",{className:`${s} border-2 border-border bg-background`,children:(0,r.jsx)("span",{className:"text-[11px] font-bold text-muted-foreground/50",children:t+1})})}function Q({step:e,canRun:t,onRun:s,onSkip:a,onCancel:l}){let[d,c]=(0,n.useState)(!1),u=!!(e.output||e.error),m=e.skills?.length?e.skills:e.skill?[e.skill]:[];return"running"===e.status||e.status,(0,r.jsx)("div",{className:`transition-opacity ${"skipped"===e.status?"opacity-50":""}`,children:(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)(V,{status:e.status,index:e.index}),(0,r.jsxs)("div",{className:"flex-1 min-w-0 pt-0.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 justify-between",children:[(0,r.jsx)("span",{className:`text-sm font-medium truncate ${"done"===e.status?"text-foreground":"running"===e.status?"text-[var(--amber)]":"error"===e.status?"text-[var(--error)]":"text-foreground/70"}`,children:e.name}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0",children:[null!=e.durationMs&&("done"===e.status||"error"===e.status)&&(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/40 font-mono",children:function(e){if(e<1e3)return`${e}ms`;let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}(e.durationMs)}),"pending"===e.status&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("button",{onClick:s,disabled:!t,className:"flex items-center gap-1 px-2 py-0.5 rounded-md text-2xs font-medium transition-all disabled:opacity-30 bg-[var(--amber)] text-[var(--amber-foreground)]",children:[(0,r.jsx)(o.A,{size:9})," Run"]}),(0,r.jsx)("button",{onClick:a,className:"px-1.5 py-0.5 rounded-md text-2xs text-muted-foreground/50 hover:text-muted-foreground hover:bg-muted transition-colors",children:"Skip"})]}),"running"===e.status&&(0,r.jsxs)("button",{onClick:l,className:"flex items-center gap-1 px-2 py-0.5 rounded-md text-2xs text-[var(--error)]/70 hover:text-[var(--error)] hover:bg-[var(--error)]/10 transition-colors",children:[(0,r.jsx)(W.A,{size:9})," Stop"]}),u&&"running"!==e.status&&(0,r.jsx)("button",{onClick:()=>c(e=>!e),className:"p-0.5 rounded text-muted-foreground/30 hover:text-muted-foreground transition-colors",children:(0,r.jsx)(h.A,{size:12,className:`transition-transform ${d?"rotate-180":""}`})})]})]}),(e.agent||m.length>0)&&(0,r.jsxs)("div",{className:"flex gap-1 mt-0.5 flex-wrap",children:[e.agent&&(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/50",children:e.agent}),e.agent&&m.length>0&&(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/20",children:"/"}),m.map(e=>(0,r.jsx)("span",{className:"text-2xs text-[var(--amber)]/60",children:e},e))]}),(d||"running"===e.status)&&u&&(0,r.jsxs)("div",{className:"mt-2 rounded-lg overflow-hidden border border-border/50",children:[e.error&&(0,r.jsxs)("div",{className:"px-3 py-2.5 bg-[var(--error)]/5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1",children:[(0,r.jsx)(i.A,{size:10,className:"text-[var(--error)]"}),(0,r.jsx)("span",{className:"text-2xs font-medium text-[var(--error)]",children:"Error"})]}),(0,r.jsx)("div",{className:"text-xs text-[var(--error)]/80 whitespace-pre-wrap break-words leading-relaxed",children:e.error})]}),e.output&&(0,r.jsxs)("div",{className:"px-3 py-2.5 bg-muted/20",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5",children:[(0,r.jsx)(U.A,{size:10,className:"text-[var(--amber)]"}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/50 uppercase tracking-wider font-medium",children:"Output"}),"running"===e.status&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--amber)] animate-pulse"})]}),(0,r.jsx)("div",{className:"text-xs leading-relaxed text-foreground/80 whitespace-pre-wrap break-words",children:e.output})]})]})]})]})})}function X({workflow:e,filePath:t}){let[s,a]=(0,n.useState)(()=>q(e)),[o,l]=(0,n.useState)(!1),d=(0,n.useRef)(null);(0,n.useEffect)(()=>{a(q(e)),l(!1)},[e]);let u=(0,n.useCallback)(()=>{d.current?.abort(),d.current=null,l(!1),a(e=>e.map(e=>"running"===e.status?{...e,status:"error",error:"Cancelled"}:e))},[]),x=(0,n.useCallback)(async s=>{if(o)return;d.current?.abort();let r=new AbortController;d.current=r,l(!0);let n=Date.now();a(e=>e.map((e,t)=>t===s?{...e,status:"running",output:"",error:void 0,startedAt:new Date}:e));try{let o={...e.steps[s],index:s,status:"running",output:""};await G(o,e,t,e=>a(t=>t.map((t,r)=>r===s?{...t,output:e}:t)),r.signal);let l=Date.now()-n;a(e=>e.map((e,t)=>t===s?{...e,status:"done",completedAt:new Date,durationMs:l}:e))}catch(t){if(t instanceof Error&&"AbortError"===t.name)return;let e=Date.now()-n;a(r=>r.map((r,n)=>n===s?{...r,status:"error",error:t instanceof Error?t.message:String(t),durationMs:e}:r))}finally{l(!1)}},[o,e,t]),h=(0,n.useCallback)(e=>{a(t=>t.map((t,s)=>s===e?{...t,status:"skipped"}:t))},[]),g=(0,n.useCallback)(()=>{d.current?.abort(),d.current=null,l(!1),K.clear(),a(q(e))},[e]),f=s.filter(e=>"done"===e.status).length,b=s.length>0?Math.round(f/s.length*100):0,v=f===s.length&&s.length>0,j=s.findIndex(e=>"pending"===e.status),y=s.some(e=>"error"===e.status);return(0,r.jsxs)("div",{children:[(e.workDir||e.description)&&(0,r.jsxs)("div",{className:"flex items-center gap-3 mb-4 text-xs text-muted-foreground flex-wrap",children:[e.workDir&&(0,r.jsxs)("span",{className:"flex items-center gap-1.5 font-mono text-2xs bg-muted/50 px-2 py-0.5 rounded",children:[(0,r.jsx)(c.A,{size:10,className:"shrink-0"}),e.workDir]}),e.description&&(0,r.jsx)("span",{className:"leading-relaxed",children:e.description})]}),(0,r.jsxs)("div",{className:"mb-6",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,r.jsx)("div",{className:"flex items-center gap-2",children:v?(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-xs font-medium text-[var(--success)]",children:[(0,r.jsx)(p.A,{size:13}),"Complete"]}):y?(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-xs font-medium text-[var(--error)]",children:[(0,r.jsx)(i.A,{size:13}),f,"/",s.length," done"]}):(0,r.jsxs)("span",{className:"text-xs text-muted-foreground",children:[f,"/",s.length]})}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[j>=0&&(0,r.jsxs)("button",{onClick:()=>x(j),disabled:o,className:"flex items-center gap-1.5 px-3 py-1 rounded-md text-xs font-medium transition-all disabled:opacity-40 bg-[var(--amber)] text-[var(--amber-foreground)]",children:[o?(0,r.jsx)(m.A,{size:11,className:"animate-spin"}):(0,r.jsx)(B.A,{size:11}),o?"Running...":"Run next"]}),(0,r.jsxs)("button",{onClick:g,className:"flex items-center gap-1 px-2 py-1 rounded-md text-2xs text-muted-foreground/50 hover:text-muted-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(H.A,{size:10}),"Reset"]})]})]}),(0,r.jsx)("div",{className:"h-1 rounded-full bg-border/50 overflow-hidden",children:(0,r.jsx)("div",{className:`h-full rounded-full transition-all duration-500 ease-out ${v?"bg-[var(--success)]":y?"bg-[var(--error)]":"bg-[var(--amber)]"}`,style:{width:`${b}%`}})})]}),(0,r.jsxs)("div",{className:"relative",children:[s.length>1&&(0,r.jsx)("div",{className:"absolute left-[12px] top-5 bottom-5 w-px bg-border/50"}),(0,r.jsx)("div",{className:"flex flex-col gap-4",children:s.map((e,t)=>(0,r.jsx)(Q,{step:e,canRun:!o,onRun:()=>x(t),onSkip:()=>h(t),onCancel:u},e.id))})]})]})}function Z({filePath:e,content:t}){let s=(0,n.useMemo)(()=>(function(e){try{let t=d.Ay.load(e,{schema:d.Ay.JSON_SCHEMA});if(!t)return{workflow:null,errors:["File is empty"]};if("object"!=typeof t)return{workflow:null,errors:["Content is not valid YAML"]};let s=function(e){let t=[];if(!e||"object"!=typeof e)return{valid:!1,errors:["Must be a valid YAML object"]};if(e.title&&"string"==typeof e.title&&e.title.trim()||t.push("Missing required field 'title' (string)"),void 0!==e.description&&"string"!=typeof e.description&&t.push("'description' must be a string"),void 0!==e.skills&&(Array.isArray(e.skills)?e.skills.every(e=>"string"==typeof e)||t.push("'skills' must contain only strings"):t.push("'skills' must be an array of strings")),void 0!==e.tools&&(Array.isArray(e.tools)?e.tools.every(e=>"string"==typeof e)||t.push("'tools' must contain only strings"):t.push("'tools' must be an array of strings")),e.steps)if(Array.isArray(e.steps))if(0===e.steps.length)t.push("'steps' must have at least 1 step");else{let s=new Set;e.steps.forEach((e,r)=>{var n,a;let o,l,i=(n=e,a=r,o=[],l=`steps[${a}]`,n&&"object"==typeof n?(n.id&&"string"==typeof n.id&&n.id.trim()?/^[a-z0-9_-]+$/.test(n.id)||o.push(`${l}.id: '${n.id}' is invalid — use only lowercase letters, numbers, hyphens, underscores (e.g., 'run-tests')`):o.push(`${l}: missing required field 'id' (non-empty string)`),n.name&&"string"==typeof n.name&&n.name.trim()||o.push(`${l}: missing required field 'name' (non-empty string)`),void 0!==n.description&&"string"!=typeof n.description&&o.push(`${l}.description: must be a string`),void 0===n.agent||"string"==typeof n.agent&&n.agent.trim()||o.push(`${l}.agent: must be a non-empty string`),void 0===n.skill||"string"==typeof n.skill&&n.skill.trim()||o.push(`${l}.skill: must be a non-empty string`),void 0!==n.tools&&(Array.isArray(n.tools)?n.tools.every(e=>"string"==typeof e)||o.push(`${l}.tools: must contain only strings`):o.push(`${l}.tools: must be an array of strings`)),n.prompt&&"string"==typeof n.prompt&&n.prompt.trim()||o.push(`${l}: missing required field 'prompt' (non-empty string)`),void 0!==n.timeout&&("number"!=typeof n.timeout||n.timeout<=0)&&o.push(`${l}.timeout: must be a positive number (seconds)`)):o.push(`${l}: must be a valid object`),o);t.push(...i);let d=e?.id;"string"==typeof d&&d.trim()&&(s.has(d)&&t.push(`steps[${r}].id: duplicate id '${d}' (each step must have a unique id)`),s.add(d))})}else t.push("'steps' must be an array");else t.push("Missing required field 'steps' (array)");return{valid:0===t.length,errors:t}}(t);if(!s.valid)return{workflow:null,errors:s.errors};return{workflow:t,errors:[]}}catch(e){return{workflow:null,errors:[e instanceof Error?e.message:String(e)]}}})(t),[t]),[c,u]=(0,n.useState)("edit"),[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(()=>s.workflow?structuredClone(s.workflow):{title:"",description:"",steps:[]});(0,n.useRef)(t);let g=(0,n.useMemo)(()=>s.workflow??null,[s.workflow]),f=(0,n.useCallback)(e=>{h(e),x(!0)},[]),b=(0,n.useCallback)(()=>x(!1),[]),v=g??p,j=v.steps.length>0&&!!v.title,y=s.errors.length>0,N=v.title?0===v.steps.length?"Add at least one step":m?"Save changes first":void 0:"Add a title first",k=e=>{("run"!==e||j)&&u(e)};return(0,r.jsxs)("div",{className:"max-w-[720px] mx-auto py-8 px-2",children:[(0,r.jsxs)("div",{className:"mb-8",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1 p-0.5 rounded-lg bg-muted/50",children:[(0,r.jsxs)("button",{onClick:()=>k("edit"),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-all ${"edit"===c?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(a.A,{size:11}),"Edit"]}),(0,r.jsxs)("button",{onClick:()=>k("run"),disabled:!j,title:N,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-all disabled:opacity-30 disabled:cursor-not-allowed ${"run"===c?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(o.A,{size:11}),"Run"]})]}),p.steps.length>0&&(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground/60 font-mono",children:[p.steps.length," step",1!==p.steps.length?"s":""]})]}),(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)("div",{className:"mt-1 w-8 h-8 rounded-lg bg-[var(--amber)]/10 flex items-center justify-center shrink-0",children:(0,r.jsx)(l.A,{size:16,className:"text-[var(--amber)]"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsxs)("h1",{className:"text-lg font-semibold text-foreground truncate leading-tight",children:[p.title||"Untitled Flow",m&&(0,r.jsx)("span",{className:"text-[var(--amber)] ml-1.5 text-sm",title:"Unsaved changes",children:"*"})]}),p.description&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 line-clamp-1",children:p.description})]})]})]}),y&&"edit"===c&&(0,r.jsxs)("div",{className:"mb-5 px-3.5 py-3 rounded-lg bg-[var(--error)]/8 border border-[var(--error)]/20",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,r.jsx)(i.A,{size:13,className:"text-[var(--error)] shrink-0"}),(0,r.jsx)("span",{className:"text-xs font-medium text-[var(--error)]",children:"Parse issues found"})]}),(0,r.jsx)("ul",{className:"text-2xs text-[var(--error)]/70 pl-5 list-disc space-y-0.5",children:s.errors.slice(0,3).map((e,t)=>(0,r.jsx)("li",{children:e},t))})]}),"edit"===c?(0,r.jsx)(O,{workflow:p,filePath:e,onChange:f,onSaved:b}):(0,r.jsx)(X,{workflow:v,filePath:e})]})}},56406:(e,t,s)=>{"use strict";s.r(t),s.d(t,{SummaryRenderer:()=>x});var r=s(95155),n=s(12115),a=s(91958),o=s(86901),l=s(48368),i=s(84980),d=s(91337),c=s(22356);function u(e){let t=Date.now()-e,s=Math.floor(t/6e4),r=Math.floor(t/36e5),n=Math.floor(t/864e5);return s<1?"just now":s<60?`${s}m ago`:r<24?`${r}h ago`:`${n}d ago`}function m(e){return e.split("/").pop()?.replace(/\.(md|csv)$/,"")??e}function x({filePath:e}){let[t,s]=(0,n.useState)([]),[x,p]=(0,n.useState)(""),[h,g]=(0,n.useState)(!1),[f,b]=(0,n.useState)(""),[v,j]=(0,n.useState)(!1),y=(0,n.useRef)(null);async function N(){if(0===t.length)return;y.current?.abort();let e=new AbortController;y.current=e,p(""),b(""),g(!0),j(!1);let s=t.map(e=>e.path),r=t.map(e=>`- **${m(e.path)}** (${e.path}, modified ${u(e.mtime)})`).join("\n"),n=`You are summarizing recent changes in a personal knowledge base (MindOS).
|
|
25
|
+
|
|
26
|
+
The following files were recently modified:
|
|
27
|
+
${r}
|
|
28
|
+
|
|
29
|
+
Please provide a concise daily briefing in this format:
|
|
30
|
+
1. **Key changes**: What was added or updated in each file (1–2 sentences per file)
|
|
31
|
+
2. **Themes**: Any patterns or recurring topics across the changes
|
|
32
|
+
3. **Suggested next actions**: 2–3 actionable follow-ups based on the content
|
|
33
|
+
|
|
34
|
+
Be specific. Reference actual content from the files. Keep the total response under 300 words.`;try{let t=await fetch("/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({messages:[{role:"user",content:n}],attachedFiles:s}),signal:e.signal});if(!t.ok)throw Error(`HTTP ${t.status}`);if(!t.body)throw Error("No response body");let r=t.body.getReader(),a=new TextDecoder,o="";for(;;){let{done:e,value:t}=await r.read();if(e)break;for(let e of a.decode(t,{stream:!0}).split("\n")){let t=e.match(/^0:"((?:[^"\\]|\\.)*)"$/);t?o+=t[1].replace(/\\n/g,"\n").replace(/\\"/g,'"').replace(/\\\\/g,"\\"):!e||e.startsWith("d:")||e.startsWith("e:")||e.startsWith("0:")||(o+=e)}p(o)}j(!0)}catch(e){e instanceof Error&&"AbortError"!==e.name&&b(e.message||"Failed to generate summary")}finally{g(!1)}}return(0,n.useEffect)(()=>{(0,c.n)("/api/recent-files?limit=8").then(e=>s(e.filter(e=>e.path.endsWith(".md")))).catch(e=>{console.warn("[SummaryRenderer] fetch recent-files failed:",e)})},[e]),(0,n.useEffect)(()=>()=>{y.current?.abort()},[]),(0,r.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:"1.5rem",flexWrap:"wrap"},children:[(0,r.jsx)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:t.length>0?`${t.length} recently modified files`:"Loading recent files…"}),(0,r.jsxs)("button",{onClick:N,disabled:h||0===t.length,className:"font-display",style:{display:"flex",alignItems:"center",gap:6,padding:"5px 14px",borderRadius:7,fontSize:12,cursor:h||0===t.length?"not-allowed":"pointer",border:"none",background:h?"var(--muted)":"var(--amber)",color:h?"var(--muted-foreground)":"var(--amber-foreground)",opacity:0===t.length?.5:1,transition:"opacity .15s"},children:[h?(0,r.jsx)(a.A,{size:12,style:{animation:"spin 1s linear infinite"}}):(0,r.jsx)(o.A,{size:12}),h?"Generating…":v?"Regenerate":"Generate briefing"]})]}),t.length>0&&(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:"1.5rem"},children:t.map(e=>(0,r.jsxs)("a",{href:`/view/${(0,d.O0)(e.path)}`,className:"font-display",style:{display:"inline-flex",alignItems:"center",gap:5,padding:"3px 10px",borderRadius:999,fontSize:"0.7rem",background:"var(--muted)",color:"var(--muted-foreground)",textDecoration:"none",border:"1px solid var(--border)",transition:"color .15s"},onMouseEnter:e=>e.currentTarget.style.color="var(--foreground)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted-foreground)",title:e.path,children:[(0,r.jsx)(l.A,{size:10}),m(e.path),(0,r.jsxs)("span",{style:{opacity:.5},children:[(0,r.jsx)(i.A,{size:9,style:{display:"inline",marginLeft:2}})," ",u(e.mtime)]})]},e.path))}),f&&(0,r.jsx)("div",{className:"font-display",style:{padding:"10px 14px",borderRadius:8,background:"color-mix(in srgb, var(--error) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--error) 30%, transparent)",color:"var(--error)",fontSize:12,marginBottom:"1rem"},children:f}),x?(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,padding:"18px 20px",position:"relative"},children:[h&&(0,r.jsx)("div",{style:{position:"absolute",top:12,right:14,width:6,height:6,borderRadius:"50%",background:"var(--amber)",animation:"pulse 1.2s ease-in-out infinite"}}),(0,r.jsx)("div",{dangerouslySetInnerHTML:{__html:x.replace(/^### (.+)$/gm,'<h3 style="font-size:.8rem;font-weight:600;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.06em;margin:1em 0 .3em">$1</h3>').replace(/^## (.+)$/gm,'<h2 style="font-size:.9rem;font-weight:700;color:var(--foreground);margin:1.2em 0 .4em">$1</h2>').replace(/^# (.+)$/gm,'<h1 style="font-size:1rem;font-weight:700;color:var(--foreground);margin:1.2em 0 .4em">$1</h1>').replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,'<code class="font-display" style="font-size:.82em;padding:1px 5px;border-radius:4px;background:var(--muted)">$1</code>').replace(/^[-*] (.+)$/gm,'<li style="margin:.2em 0;padding-left:.3em">$1</li>').replace(/(<li[^>]*>.*<\/li>\n?)+/g,e=>`<ul style="margin:.4em 0;padding-left:1.4em;list-style:disc">${e}</ul>`).replace(/\n{2,}/g,'</p><p style="margin:.5em 0;font-size:.85rem;line-height:1.7;color:var(--foreground)">').replace(/^(?!<[hulo])(.+)$/gm,'<p style="margin:.5em 0;font-size:.85rem;line-height:1.7;color:var(--foreground)">$1</p>')}})]}):h||v||!(t.length>0)?null:(0,r.jsxs)("div",{style:{border:"1px dashed var(--border)",borderRadius:10,padding:"2.5rem 1.5rem",textAlign:"center",color:"var(--muted-foreground)"},children:[(0,r.jsx)(o.A,{size:28,style:{margin:"0 auto 10px",opacity:.3,color:"var(--amber)"}}),(0,r.jsxs)("p",{className:"font-display",style:{fontSize:12},children:["Click ",(0,r.jsx)("strong",{style:{color:"var(--foreground)"},children:"Generate briefing"})," to summarize recent changes with AI."]})]}),(0,r.jsx)("style",{children:`
|
|
35
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
36
|
+
@keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:.3; } }
|
|
37
|
+
`})]})}},66709:(e,t,s)=>{"use strict";s.d(t,{A:()=>u});var r=s(95155),n=s(12115),a=s(92451),o=s(33210),l=s(6296),i=s(13545),d=s(12651),c=s(61263);function u({open:e,onClose:t,onDiscover:s,discovering:u,error:m}){let{t:x}=(0,c.Y)(),p=x.panels.agents,[h,g]=(0,n.useState)(""),[f,b]=(0,n.useState)(null);if(!e)return null;let v=async()=>{if(!h.trim()||u)return;b(null);let e=await s(h.trim());e&&b(e)},j=()=>{g(""),b(null),t()};return(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:j,children:(0,r.jsxs)("div",{className:"bg-popover border border-border rounded-xl shadow-lg w-full max-w-md mx-4 p-5",onClick:e=>e.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":p.a2aDiscover,children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("h3",{className:"text-sm font-semibold text-foreground flex items-center gap-2",children:[(0,r.jsx)(a.A,{size:15,className:"text-muted-foreground"}),p.a2aDiscover]}),(0,r.jsx)("button",{type:"button",onClick:j,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Close",children:(0,r.jsx)(o.A,{size:14})})]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground mb-3",children:p.a2aDiscoverHint}),(0,r.jsxs)("div",{className:"flex gap-2 mb-4",children:[(0,r.jsx)("input",{type:"url",value:h,onChange:e=>g(e.target.value),onKeyDown:e=>{"Enter"===e.key&&v(),"Escape"===e.key&&t()},placeholder:p.a2aDiscoverPlaceholder,disabled:u,className:"flex-1 px-3 py-2 text-xs rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",autoFocus:!0}),(0,r.jsxs)("button",{type:"button",onClick:v,disabled:u||!h.trim(),className:"px-3 py-2 text-xs font-medium rounded-lg bg-foreground text-background hover:bg-foreground/90 disabled:opacity-50 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring flex items-center gap-1.5 shrink-0",children:[u&&(0,r.jsx)(l.A,{size:12,className:"animate-spin"}),u?p.a2aDiscovering:p.a2aDiscover]})]}),m&&!f&&(0,r.jsx)("div",{className:"rounded-lg border border-error/30 bg-error/5 px-3 py-2.5 mb-3",children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)(i.A,{size:14,className:"text-error mt-0.5 shrink-0"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-error",children:p.a2aDiscoverFailed}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground mt-0.5",children:p.a2aDiscoverFailedHint})]})]})}),f&&(0,r.jsx)("div",{className:"rounded-lg border border-success/30 bg-success/5 px-3 py-2.5",children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)(d.A,{size:14,className:"text-success mt-0.5 shrink-0"}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("p",{className:"text-xs font-medium text-success mb-1.5",children:p.a2aDiscoverSuccess}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsxs)("p",{className:"text-xs font-medium text-foreground truncate",title:f.card.name,children:[f.card.name,(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground ml-1.5",children:["v",f.card.version]})]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground truncate",title:f.card.description,children:f.card.description}),f.card.skills.length>0&&(0,r.jsxs)("div",{className:"mt-1.5",children:[(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground mb-1",children:[p.a2aSkills,":"]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1",children:f.card.skills.map(e=>(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded bg-muted/80 text-muted-foreground border border-border/50",title:e.description,children:e.name},e.id))})]}),(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground mt-1 truncate",title:f.endpoint,children:[p.a2aEndpoint,": ",f.endpoint]})]})]})]})})]})})}},66872:()=>{},68589:(e,t,s)=>{"use strict";s.d(t,{m:()=>n});let r=new Set(["write_file","create_file","batch_create_files","update_section","insert_after_heading","delete_file","rename_file","create_space"]);async function n(e,t,s){let n=e.getReader(),a=new TextDecoder,o="",l=[],i=new Map,d=null,c=null,u=Date.now();function m(){let e=l.map(e=>"text"===e.type?{type:"text",text:e.text}:"reasoning"===e.type?{type:"reasoning",text:e.text}:{...e});return{role:"assistant",content:e.filter(e=>"text"===e.type).map(e=>e.text).join(""),parts:e,timestamp:u}}try{for(;!s?.aborted;){let{done:e,value:s}=await n.read();if(e)break;let u=(o+=a.decode(s,{stream:!0})).split("\n");o=u.pop()??"";let x=!1;for(let e of u){let t,s=e.trim(),n=null;if(s.startsWith("data:")&&(n=s.slice(5).trim()),n){try{t=JSON.parse(n)}catch{continue}switch(t.type){case"text_delta":{let e=function(e){if(d===e){let e=l[l.length-1];if(e&&"text"===e.type)return e}let t={type:"text",text:""};return l.push(t),d=e,t}("text");e.text+=t.delta??"",x=!0;break}case"thinking_delta":c||(c={type:"reasoning",text:""},l.push(c),d=null),c.text+=t.delta??"",x=!0;break;case"tool_start":{let e=t.toolCallId,s=t.toolName,r=function(e,t){let s=i.get(e);return s||(s={type:"tool-call",toolCallId:e,toolName:t??"unknown",input:void 0,state:"pending"},i.set(e,s),l.push(s),d=null),s}(e,s);r.input=t.args,r.state="running",x=!0;break}case"tool_end":{let e=t.toolCallId,s=i.get(e);s&&(s.output=t.output??"",s.state=t.isError?"error":"done",x=!0,!t.isError&&r.has(s.toolName)&&window.dispatchEvent(new Event("mindos:files-changed")));break}case"error":{let e=t.message;l.push({type:"text",text:`
|
|
38
|
+
|
|
39
|
+
**Stream Error:** ${e}`}),d=null,x=!0}}}}x&&t(m())}}finally{n.releaseLock()}let x=!1;for(let e of i.values())("running"===e.state||"pending"===e.state)&&(e.state="error",e.output=e.output??"Stream ended before tool completed",x=!0);return x&&t(m()),m()}},68772:(e,t,s)=>{"use strict";s.d(t,{i:()=>n});var r=s(9339);let n=(0,r.createServerReference)("4042d9e369daa81edac87fb6c30f1494527b4f3b6c",r.callServer,void 0,r.findSourceMapURL,"deleteFileAction")},70620:(e,t,s)=>{"use strict";s.d(t,{A:()=>u});var r=s(95155),n=s(12115),a=s(47650),o=s(21362),l=s(38798),i=s(94514),d=s(66088),c=s(91337);function u({dirPaths:e,value:t,onChange:s,rootLabel:u="Root"}){let[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(t),[g,f]=(0,n.useState)(null),b=(0,n.useRef)(null),v=(0,n.useRef)(null);(0,n.useEffect)(()=>{h(t)},[t]);let j=(0,n.useCallback)(()=>{if(!b.current)return;let e=b.current.getBoundingClientRect(),t=window.innerHeight-e.bottom,s=e.top,r=t<208&&s>t;f({top:r?e.top:e.bottom,left:e.left,width:e.width,flipUp:r})},[]);(0,n.useEffect)(()=>m?(j(),window.addEventListener("scroll",j,!0),window.addEventListener("resize",j),()=>{window.removeEventListener("scroll",j,!0),window.removeEventListener("resize",j)}):void f(null),[m,j]);let y=(0,n.useCallback)(()=>x(!1),[]);(0,n.useEffect)(()=>{if(!m)return;let e=e=>{"Escape"===e.key&&(e.preventDefault(),y())},t=e=>{let t=e.target;b.current?.contains(t)||v.current?.contains(t)||y()};return document.addEventListener("keydown",e),document.addEventListener("mousedown",t),()=>{document.removeEventListener("keydown",e),document.removeEventListener("mousedown",t)}},[m,y]);let N=(0,n.useMemo)(()=>{let t=p?p+"/":"";return e.filter(e=>{if(!e.startsWith(t))return!1;let s=e.slice(t.length);return s.length>0&&!s.includes("/")}).sort()},[e,p]),k=(0,n.useMemo)(()=>p?p.split("/"):[],[p]),w=e=>{if(e<0)h(""),s("");else{let t=k.slice(0,e+1).join("/");h(t),s(t)}},S=t?t.split("/").map(e=>(0,c.vr)(e)).join(" / "):"/ "+u,C=m&&g&&(0,a.createPortal)((0,r.jsxs)("div",{ref:v,className:"fixed z-[9999] rounded-lg border border-[var(--amber)] bg-card shadow-lg overflow-hidden flex flex-col",style:{left:g.left,width:g.width,maxHeight:200,...g.flipUp?{bottom:window.innerHeight-g.top+4}:{top:g.top+4}},children:[(0,r.jsxs)("div",{className:"flex items-center gap-0.5 px-3 py-1.5 bg-muted/30 border-b border-border overflow-x-auto text-xs shrink-0",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>w(-1),className:`shrink-0 px-1.5 py-0.5 rounded transition-colors ${""===p?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:["/ ",u]}),k.map((e,t)=>(0,r.jsxs)("span",{className:"flex items-center gap-0.5 shrink-0",children:[(0,r.jsx)(o.A,{size:10,className:"text-muted-foreground/50"}),(0,r.jsx)("button",{type:"button",onClick:()=>w(t),className:`px-1.5 py-0.5 rounded transition-colors truncate max-w-[100px] ${t===k.length-1?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:e})]},t))]}),N.length>0?(0,r.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:N.map(t=>{let n=t.split("/").pop()||t,a=e.some(e=>e.startsWith(t+"/"));return(0,r.jsxs)("button",{type:"button",onClick:()=>{h(t),s(t)},className:"w-full flex items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-muted/60 transition-colors",children:[(0,r.jsx)(l.A,{size:12,className:"shrink-0 text-[var(--amber)]"}),(0,r.jsx)("span",{className:"flex-1 text-left truncate",children:n}),a&&(0,r.jsx)(o.A,{size:11,className:"shrink-0 text-muted-foreground/40"})]},t)})}):(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground/50 text-center",children:"—"}),(0,r.jsx)("button",{type:"button",onClick:y,className:"w-full py-1.5 flex items-center justify-center gap-1 text-xs font-medium text-[var(--amber)] border-t border-border hover:bg-muted/30 transition-colors shrink-0",children:(0,r.jsx)(i.A,{size:12})})]}),document.body);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("button",{ref:b,type:"button",onClick:()=>x(e=>!e),"aria-haspopup":"true","aria-expanded":m,className:`w-full flex items-center gap-2 px-3 py-2 text-sm rounded-lg border bg-background text-foreground transition-colors text-left focus-visible:ring-1 focus-visible:ring-ring outline-none ${m?"border-[var(--amber)]":"border-border hover:border-[var(--amber)]/40"}`,children:[(0,r.jsx)(l.A,{size:14,className:"shrink-0 text-[var(--amber)]"}),(0,r.jsx)("span",{className:"flex-1 truncate",children:S}),(0,r.jsx)(d.A,{size:14,className:`shrink-0 text-muted-foreground transition-transform duration-150 ${m?"rotate-180":""}`})]}),C]})}},74120:(e,t,s)=>{"use strict";s.d(t,{default:()=>rU});var r=s(95155),n=s(73321),a=s(12115),o=s(98500),l=s.n(o),i=s(29857),d=s(61878),c=s(89363),u=s(33210),m=s(59511),x=s(47857),p=s(46029),h=s(49619),g=s(53961),f=s(34530),b=s(91958),v=s(41641),j=s(21362),y=s(61263),N=s(12651),k=s(62791),w=s(22356),S=s(31025),C=s(13545),A=s(15411),z=s(7915),E=s(6296),$=s(22164),T=s(20171);function R(e){if(!e)return"never";let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:`${Math.floor(t/864e5)}d ago`}function M({t:e,onInitComplete:t}){var s;let n=e.settings?.sync,[o,l]=(0,a.useState)(""),[i,d]=(0,a.useState)(""),[c,u]=(0,a.useState)("main"),[m,x]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),[g,f]=(0,a.useState)(""),b=o.trim()?(s=o.trim(),/^https:\/\/.+/.test(s)?"https":!!/^git@[\w.-]+:.+/.test(s)&&"ssh"):null,v="https"===b||"ssh"===b,j=async()=>{h(!0),f("");try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"init",remote:o.trim(),token:i.trim()||void 0,branch:c.trim()||"main"})}),t()}catch(e){f(e instanceof Error?e.message:"Connection failed")}finally{h(!1)}};return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("div",{className:"w-9 h-9 rounded-lg bg-muted flex items-center justify-center shrink-0",children:(0,r.jsx)(S.A,{size:18,className:"text-muted-foreground"})}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-sm font-medium text-foreground",children:n?.emptyTitle??"Cross-device Sync"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:n?.emptyDesc??"Automatically sync your knowledge base across devices via Git."})]})]}),(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground block",children:n?.remoteUrl??"Git Remote URL"}),(0,r.jsx)(T.pd,{type:"text",value:o,onChange:e=>{l(e.target.value),f("")},placeholder:"https://github.com/user/my-mind.git",className:`font-mono ${o.trim()&&!v?"border-destructive":""}`}),o.trim()&&!v&&(0,r.jsx)("p",{className:"text-xs text-destructive",children:n?.invalidUrl??"Invalid Git URL — use HTTPS (https://...) or SSH (git@...)"}),"ssh"===b&&(0,r.jsxs)("p",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:11,className:"shrink-0"}),n?.sshHint??"SSH URLs require SSH key configured on this machine. HTTPS with token recommended."]})]}),"https"===b&&(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsxs)("label",{className:"text-sm font-medium text-foreground block",children:[n?.accessToken??"Access Token"," ",(0,r.jsx)("span",{className:"text-muted-foreground font-normal",children:n?.optional??"(optional, for private repos)"})]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(T.pd,{type:m?"text":"password",value:i,onChange:e=>d(e.target.value),placeholder:"ghp_xxxxxxxxxxxx",className:"pr-9 font-mono"}),(0,r.jsx)("button",{type:"button",onClick:()=>x(!m),className:"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded hover:bg-muted text-muted-foreground transition-colors",children:m?(0,r.jsx)(A.A,{size:14}):(0,r.jsx)(z.A,{size:14})})]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:n?.tokenHint??"GitHub: Settings → Developer settings → Personal access tokens → repo scope"})]}),(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground block",children:n?.branchLabel??"Branch"}),(0,r.jsx)(T.pd,{type:"text",value:c,onChange:e=>u(e.target.value),placeholder:"main",className:"max-w-[200px] font-mono"})]}),(0,r.jsxs)(T.jn,{onClick:j,disabled:!v||p,className:"flex items-center gap-2",children:[p&&(0,r.jsx)(E.A,{size:14,className:"animate-spin"}),p?n?.connecting??"Connecting...":n?.connectButton??"Connect & Start Sync"]}),g&&(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs p-3 rounded-lg bg-destructive/10 text-destructive",role:"alert","aria-live":"polite",children:[(0,r.jsx)(C.A,{size:13,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:g})]}),(0,r.jsx)("div",{className:"grid grid-cols-2 gap-2 text-xs text-muted-foreground pt-2",children:[n?.featureAutoCommit??"Auto-commit on save",n?.featureAutoPull??"Auto-pull from remote",n?.featureConflict??"Conflict detection",n?.featureMultiDevice??"Works across devices"].map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)(N.A,{size:11,className:"text-success/60 shrink-0"}),(0,r.jsx)("span",{children:e})]},t))})]})}function I({t:e}){let[t,s]=(0,a.useState)(null),[n,o]=(0,a.useState)(!0),[l,i]=(0,a.useState)(!1),[d,c]=(0,a.useState)(!1),[u,m]=(0,a.useState)(null),x=(0,a.useCallback)(async()=>{try{let e=await (0,w.n)("/api/sync");s(e)}catch{s(null)}finally{o(!1)}},[]);(0,a.useEffect)(()=>{x()},[x]);let p=async()=>{i(!0),m(null);try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"now"})}),m({type:"success",text:"Sync complete"}),await x()}catch{m({type:"error",text:"Sync failed"})}finally{i(!1),setTimeout(()=>m(null),3e3)}},h=async()=>{if(!t)return;c(!0),m(null);let e=t.enabled?"off":"on";try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e})}),await x(),m({type:"success",text:t.enabled?"Auto-sync disabled":"Auto-sync enabled"})}catch{m({type:"error",text:"Failed to toggle sync"})}finally{c(!1),setTimeout(()=>m(null),3e3)}};if(n)return(0,r.jsx)("div",{className:"flex justify-center py-8",children:(0,r.jsx)(E.A,{size:18,className:"animate-spin text-muted-foreground"})});if(!t||!t.enabled)return(0,r.jsx)(M,{t:e,onInitComplete:x});let g=t.conflicts||[];return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)(T.eN,{children:"Sync"}),(0,r.jsxs)("div",{className:"space-y-2.5 text-sm",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Provider"}),(0,r.jsx)("span",{className:"font-mono text-sm",children:t.provider})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Remote"}),(0,r.jsx)("span",{className:"font-mono text-sm truncate",title:t.remote,children:t.remote})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Branch"}),(0,r.jsx)("span",{className:"font-mono text-sm",children:t.branch})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Last sync"}),(0,r.jsx)("span",{className:"text-sm",children:R(t.lastSync)})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Unpushed"}),(0,r.jsxs)("span",{className:"text-sm",children:[t.unpushed," commits"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground w-24 shrink-0",children:"Auto-sync"}),(0,r.jsxs)("span",{className:"text-sm",children:["commit: ",t.autoCommitInterval,"s, pull: ",Math.floor((t.autoPullInterval||300)/60),"min"]})]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2 pt-2",children:[(0,r.jsxs)("button",{type:"button",onClick:p,disabled:l,title:l?e.hints.syncInProgress:void 0,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:12,className:l?"animate-spin":""}),"Sync Now"]}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:d,title:d?e.hints.toggleInProgress:void 0,className:`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border transition-colors disabled:opacity-40 disabled:cursor-not-allowed ${t.enabled?"border-border text-muted-foreground hover:text-destructive hover:border-destructive/50":"border-success/30 text-success hover:bg-success/10"}`,children:t.enabled?"Disable Auto-sync":"Enable Auto-sync"})]}),u&&(0,r.jsx)("div",{className:"flex items-center gap-1.5 text-xs",role:"status","aria-live":"polite",children:"success"===u.type?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:13,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:u.text})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:13,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:u.text})]})}),g.length>0&&(0,r.jsxs)("div",{className:"pt-2 border-t border-border",children:[(0,r.jsxs)(T.eN,{children:["Conflicts (",g.length,")"]}),(0,r.jsx)("div",{className:"space-y-1.5",children:g.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs group",children:[(0,r.jsx)(C.A,{size:12,className:"text-error shrink-0"}),(0,r.jsx)("a",{href:`/view/${encodeURIComponent(e.file)}`,className:"font-mono truncate hover:text-foreground hover:underline transition-colors",title:`Open ${e.file}`,children:e.file}),(0,r.jsx)("a",{href:`/view/${encodeURIComponent(e.file+".sync-conflict")}`,className:"opacity-0 group-hover:opacity-100 transition-opacity shrink-0 text-muted-foreground hover:text-foreground",title:"View remote version (.sync-conflict)",children:(0,r.jsx)($.A,{size:11})}),(0,r.jsx)("span",{className:"text-muted-foreground shrink-0 ml-auto",children:R(e.time)})]},t))}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground mt-2",children:["Click a file to view your version. Hover and click ",(0,r.jsx)($.A,{size:10,className:"inline"})," to see the remote version."]})]}),t.lastError&&(0,r.jsx)("div",{className:"pt-2 border-t border-border",children:(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs text-destructive",children:[(0,r.jsx)(C.A,{size:12,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:t.lastError})]})})]})}function D(e,t){return t?"syncing":e&&e.enabled?e.lastError?"error":e.conflicts&&e.conflicts.length>0?"conflicts":parseInt(e.unpushed||"0",10)>0?"unpushed":"synced":"off"}let P={synced:"bg-success",unpushed:"bg-yellow-500",conflicts:"bg-error",error:"bg-error",off:"bg-muted-foreground/40",syncing:"bg-blue-500"};function L(){let[e,t]=(0,a.useState)(null),[s,r]=(0,a.useState)(!1),n=(0,a.useRef)(void 0),o=(0,a.useCallback)(async()=>{try{let e=await (0,w.n)("/api/sync");t(e)}catch{t(null)}finally{r(!0)}},[]);return(0,a.useEffect)(()=>{o();let e=()=>{n.current&&clearInterval(n.current),n.current=setInterval(o,3e4)},t=()=>{n.current&&clearInterval(n.current),n.current=void 0};e();let s=()=>{"visible"===document.visibilityState?(o(),e()):t()};return document.addEventListener("visibilitychange",s),()=>{t(),document.removeEventListener("visibilitychange",s)}},[o]),{status:e,loaded:s,fetchStatus:o}}function F(e){let[t,s]=(0,a.useState)(!1),[r,n]=(0,a.useState)(null),o=(0,a.useCallback)(async()=>{if(!t){s(!0),n(null);try{await (0,w.n)("/api/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"now"})}),await e(),n("success")}catch{await e(),n("error")}finally{s(!1),setTimeout(()=>n(null),2500)}}},[t,e]);return{syncing:t,syncResult:r,syncNow:o}}function O(e,t,s){switch(e){case"syncing":{let e=s?.syncing??"Syncing...";return{label:e,tooltip:e}}case"synced":{let e=`${s?.synced??"Synced"} \xb7 ${R(t?.lastSync)}`;return{label:e,tooltip:e}}case"unpushed":{let e=parseInt(t?.unpushed||"0",10);return{label:`${e} ${s?.unpushed??"awaiting push"}`,tooltip:s?.unpushedHint??`${e} commit(s) not yet pushed to remote`}}case"conflicts":{let e=t?.conflicts?.length||0;return{label:`${e} ${s?.conflicts??"conflicts"}`,tooltip:s?.conflictsHint??`${e} file(s) have merge conflicts — resolve in Settings > Sync`}}case"error":return{label:s?.syncError??"Sync error",tooltip:t?.lastError||(s?.syncError??"Sync error")};default:{let e=s?.syncOff??"Sync off";return{label:e,tooltip:e}}}}function _({collapsed:e,onOpenSyncSettings:t}){let{status:s,loaded:n,fetchStatus:o}=L(),{syncing:l,syncResult:i,syncNow:d}=F(o),[c,u]=(0,a.useState)(null),m=(0,a.useRef)("off"),[x,p]=(0,a.useState)(()=>{try{return!!localStorage.getItem("sync-hint-dismissed")}catch(e){console.warn("[SyncStatusBar] localStorage read failed:",e)}return!1}),{t:h}=(0,y.Y)();if(!function(e){let[,t]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),6e4);return()=>clearInterval(e)},[6e4])}(0),(0,a.useEffect)(()=>{if(!n||l)return;let e=D(s,!1),t=m.current;if(t!==e){let s=h.sidebar?.sync;("error"===t||"conflicts"===t)&&"synced"===e&&(u(s?.syncRestored??"Sync restored"),setTimeout(()=>u(null),3e3)),m.current=e}},[s,n,l,h]),!n||e)return null;let g=D(s,l);if("off"===g){if(x)return null;let e=h.sidebar?.sync;return(0,r.jsxs)("div",{className:"hidden md:flex items-center justify-between px-4 py-1.5 border-t border-border text-xs text-muted-foreground shrink-0 animate-in fade-in duration-300",children:[(0,r.jsxs)("button",{onClick:t,className:"flex items-center gap-2 min-w-0 hover:text-foreground transition-colors truncate",title:e?.enableHint??"Set up cross-device sync",children:[(0,r.jsx)("span",{className:"w-2 h-2 rounded-full shrink-0 bg-muted-foreground/40"}),(0,r.jsxs)("span",{className:"truncate",children:[e?.enableSync??"Enable sync"," →"]})]}),(0,r.jsx)("button",{onClick:e=>{e.stopPropagation();try{localStorage.setItem("sync-hint-dismissed","1")}catch(e){console.warn("[SyncStatusBar] localStorage write dismissed:",e)}p(!0)},className:"p-1 rounded hover:bg-muted hover:text-foreground transition-colors shrink-0 ml-2 text-muted-foreground/50 hover:text-muted-foreground",title:"Dismiss",children:(0,r.jsx)("span",{className:"text-2xs",children:"✕"})})]})}let f=h.sidebar?.sync,{label:v,tooltip:j}=O(g,s,f);return(0,r.jsxs)("div",{className:"hidden md:flex items-center justify-between px-4 py-1.5 border-t border-border text-xs text-muted-foreground shrink-0 animate-in fade-in duration-300",children:[(0,r.jsxs)("button",{onClick:t,className:"flex items-center gap-2 min-w-0 hover:text-foreground transition-colors truncate",title:j,children:[(0,r.jsx)("span",{className:`w-2 h-2 rounded-full shrink-0 ${P[g]} ${"syncing"===g||"conflicts"===g?"animate-pulse":""}`}),(0,r.jsx)("span",{className:"truncate",children:c||v})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1 shrink-0 ml-2",children:[("success"===i||c)&&(0,r.jsx)(N.A,{size:12,className:"text-success animate-in fade-in duration-200"}),"error"===i&&(0,r.jsx)(k.A,{size:12,className:"text-error animate-in fade-in duration-200"}),(0,r.jsx)("button",{onClick:e=>{e.stopPropagation(),d()},disabled:l,className:"p-1 rounded hover:bg-muted hover:text-foreground transition-colors disabled:opacity-40",title:f?.syncNow??"Sync now",children:(0,r.jsx)(b.A,{size:12,className:l?"animate-spin":""})})]})]})}function W({status:e,syncing:t}){let s=D(e,t??!1);return"off"===s||"synced"===s?null:(0,r.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${P[s]} ${"conflicts"===s||"error"===s?"animate-pulse":""}`})}function U({id:e,className:t="w-8 h-4"}){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 80 40",fill:"none",className:`${t} text-[var(--amber)]`,"aria-hidden":"true",children:[(0,r.jsxs)("defs",{children:[(0,r.jsxs)("linearGradient",{id:`grad-human-${e}`,x1:"35",y1:"20",x2:"5",y2:"20",gradientUnits:"userSpaceOnUse",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"0.8"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"0.3"})]}),(0,r.jsxs)("linearGradient",{id:`grad-agent-${e}`,x1:"35",y1:"20",x2:"75",y2:"20",gradientUnits:"userSpaceOnUse",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"0.8"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"1"})]})]}),(0,r.jsx)("path",{d:"M35,20 C25,35 8,35 8,20 C8,5 25,5 35,20",stroke:`url(#grad-human-${e})`,strokeWidth:"3",strokeDasharray:"2 4",strokeLinecap:"round"}),(0,r.jsx)("path",{d:"M35,20 C45,2 75,2 75,20 C75,38 45,38 35,20",stroke:`url(#grad-agent-${e})`,strokeWidth:"4.5",strokeLinecap:"round"}),(0,r.jsx)("path",{d:"M35,17.5 Q35,20 37.5,20 Q35,20 35,22.5 Q35,20 32.5,20 Q35,20 35,17.5 Z",fill:"#FEF3C7"})]})}function B({icon:e,label:t,shortcut:s,active:n=!1,expanded:a,onClick:o,buttonRef:l,badge:i,walkthroughId:d}){return(0,r.jsxs)("button",{ref:l,onClick:o,"aria-pressed":n,"aria-label":t,title:a?void 0:s?`${t} (${s})`:t,"data-walkthrough":d,className:`
|
|
2
40
|
relative flex items-center ${a?"justify-start px-3 w-full":"justify-center w-10"} h-10 rounded-md transition-colors
|
|
3
41
|
${n?"text-[var(--amber)] bg-[var(--amber-dim)]":"text-muted-foreground hover:text-foreground hover:bg-muted"}
|
|
4
42
|
focus-visible:ring-2 focus-visible:ring-ring
|
|
5
|
-
`,children:[n&&(0,r.jsx)("span",{className:"absolute left-0 top-1/2 -translate-y-1/2 w-[2px] h-[18px] rounded-r-full bg-[var(--amber)]"}),(0,r.jsx)("span",{className:"shrink-0 flex items-center justify-center w-[18px]",children:e}),i,a&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"ml-2.5 text-sm whitespace-nowrap",children:t}),s&&(0,r.jsx)("span",{className:"ml-auto text-2xs text-muted-foreground/60 font-mono shrink-0",children:s})]})]})}function H({activePanel:e,onPanelChange:t,onEchoClick:s,onAgentsClick:n,onDiscoverClick:o,onWorkflowsClick:i,syncStatus:u,expanded:m,onExpandedChange:N,onSettingsClick:k,onSyncClick:w}){let S=(0,a.useRef)(0),C=(0,a.useRef)(null),{t:A}=(0,y.Y)(),[z,E]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=window.mindos;if(e?.checkUpdate){let t=e.checkUpdate.bind(e),s=setTimeout(async()=>{try{(await t()).available&&E(!0)}catch{}},1e4),r=e.onUpdateAvailable?.(()=>E(!0));return()=>{clearTimeout(s),r?.()}}let t=localStorage.getItem("mindos_update_dismissed"),s=localStorage.getItem("mindos_update_latest");s&&s!==t&&E(!0);let r=setTimeout(async()=>{try{let e=await fetch("/api/update-check");if(!e.ok)return;let t=await e.json();if(!t.hasUpdate){localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),E(!1);return}let s=localStorage.getItem("mindos_update_dismissed");if(t.latest===s)return;localStorage.setItem("mindos_update_latest",t.latest),E(!0)}catch{}},5e3),n=()=>E(!0),a=()=>E(!1);return window.addEventListener("mindos:update-available",n),window.addEventListener("mindos:update-dismissed",a),()=>{clearTimeout(r),window.removeEventListener("mindos:update-available",n),window.removeEventListener("mindos:update-dismissed",a)}},[]);let $=(0,a.useCallback)(e=>{let t=Date.now();t-S.current<300||(S.current=t,e())},[]),T=(0,a.useCallback)(s=>{$(()=>t(e===s?null:s))},[e,t,$]),R=D(u,!1),M=m?180:48,I="off"!==R&&"synced"!==R?(0,r.jsx)("span",{className:`absolute ${m?"left-[26px] top-1.5":"top-1.5 right-1.5"} w-2 h-2 rounded-full ${P[R]} ${"error"===R||"conflicts"===R?"animate-pulse":""}`}):void 0;return(0,r.jsxs)("aside",{className:"group hidden md:flex fixed top-0 left-0 h-screen z-[31] flex-col bg-background border-r border-border transition-[width] duration-200 ease-out",style:{width:`${M}px`},role:"toolbar","aria-label":"Navigation","aria-orientation":"vertical",children:[(0,r.jsxs)("div",{className:"flex flex-col h-full w-full overflow-hidden",children:[(0,r.jsxs)(l(),{href:"/",className:`flex items-center ${m?"px-3 gap-2":"justify-center"} w-full py-[13px] hover:opacity-80 transition-opacity`,"aria-label":"MindOS Home",children:[(0,r.jsx)(U,{id:"rail",className:"w-7 h-3.5 shrink-0"}),m&&(0,r.jsx)("span",{className:"text-sm font-semibold text-foreground font-display whitespace-nowrap",children:"MindOS"})]}),(0,r.jsx)("div",{className:`${m?"mx-3":"mx-auto w-6"} border-t border-border`}),(0,r.jsxs)("div",{className:`flex flex-col ${m?"px-1.5":"items-center"} gap-1 py-2`,children:[(0,r.jsx)(B,{icon:(0,r.jsx)(x.A,{size:18}),label:A.sidebar.files,active:"files"===e,expanded:m,onClick:()=>T("files"),walkthroughId:"files-panel"}),(0,r.jsx)(B,{icon:(0,r.jsx)(p.A,{size:18}),label:A.sidebar.echo,active:"echo"===e,expanded:m,onClick:()=>s?$(s):T("echo"),walkthroughId:"echo-panel"}),(0,r.jsx)(B,{icon:(0,r.jsx)(d.A,{size:18}),label:A.sidebar.searchTitle,shortcut:"⌘K",active:"search"===e,expanded:m,onClick:()=>T("search")}),(0,r.jsx)(B,{icon:(0,r.jsx)(h.A,{size:18}),label:A.sidebar.agents,active:"agents"===e,expanded:m,onClick:()=>n?$(n):T("agents"),walkthroughId:"agents-panel"}),(0,r.jsx)(B,{icon:(0,r.jsx)(g.A,{size:18}),label:A.sidebar.workflows??"Flows",active:"workflows"===e,expanded:m,onClick:()=>i?$(i):T("workflows")})]}),(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsx)("div",{className:`${m?"mx-3":"mx-auto w-6"} border-t border-border`}),(0,r.jsx)("div",{className:`flex flex-col ${m?"px-1.5":"items-center"} gap-1 py-2`,children:(0,r.jsx)(B,{icon:(0,r.jsx)(f.A,{size:18}),label:A.sidebar.discover,active:"discover"===e,expanded:m,onClick:()=>o?$(o):T("discover")})}),(0,r.jsx)("div",{className:`${m?"mx-3":"mx-auto w-6"} border-t border-border`}),(0,r.jsxs)("div",{className:`flex flex-col ${m?"px-1.5":"items-center"} gap-1 py-2`,children:[(0,r.jsx)(B,{icon:(0,r.jsx)(c.A,{size:18}),label:A.sidebar.settingsTitle,shortcut:"⌘,",expanded:m,onClick:()=>$(k),badge:z?(0,r.jsx)("span",{className:`absolute ${m?"left-[26px] top-1.5":"top-1.5 right-1.5"} w-2 h-2 rounded-full bg-error`}):void 0}),u?.enabled&&u?.remote&&"(not configured)"!==u.remote&&(0,r.jsx)(B,{icon:(0,r.jsx)(b.A,{size:18}),label:A.sidebar.syncLabel,expanded:m,buttonRef:C,badge:I,onClick:()=>$(()=>{let e=C.current?.getBoundingClientRect();e&&w(e)})})]})]}),(0,r.jsx)("button",{onClick:()=>N(!m),className:" absolute right-0 top-1/2 -translate-y-1/2 translate-x-1/2 z-[32] w-5 h-5 rounded-full bg-card border border-border shadow-sm flex items-center justify-center opacity-0 group-hover:opacity-100 hover:!opacity-100 transition-opacity duration-200 text-muted-foreground hover:text-foreground hover:bg-muted focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring ","aria-label":m?"Collapse sidebar":"Expand sidebar",title:m?"Collapse":"Expand",children:m?(0,r.jsx)(v.A,{size:10}):(0,r.jsx)(j.A,{size:10})})]})}var K=s(51914),Y=s(48368),J=s(33024),G=s(10579),q=s(38569),V=s(56563),Q=s(91337),X=s(33078),Z=s(94290),ee=s(997),et=s(67635),es=s(49387),er=s(68459),en=s(66088),ea=s(42129),eo=s(38798),el=s(60285),ei=s(9339);let ed=(0,ei.createServerReference)("40eda14de1188be17d9a6e955866239f752cff3040",ei.callServer,void 0,ei.findSourceMapURL,"convertToSpaceAction"),ec=(0,ei.createServerReference)("60b16d7dd01778049115dc295094455b238a5ea2ad",ei.callServer,void 0,ei.findSourceMapURL,"createFileAction"),eu=(0,ei.createServerReference)("602c4b24ec570b8c3f081c8aa2991adeb4227d9d83",ei.callServer,void 0,ei.findSourceMapURL,"renameSpaceAction");var em=s(23990);let ex=(0,ei.createServerReference)("4039519f96264ac66b9227cee32b1e9f655b519c96",ei.callServer,void 0,ei.findSourceMapURL,"deleteSpaceAction"),ep=(0,ei.createServerReference)("40c205144d3c7775242ad9dc8be4e6471678b08f6d",ei.callServer,void 0,ei.findSourceMapURL,"deleteFolderAction");var eh=s(45180),eg=s(23451),ef=s(4235),eb=s(39498),ev=s(10377);function ej(){window.dispatchEvent(new Event("mindos:files-changed"))}async function ey(e){try{await navigator.clipboard.writeText(e)}catch{}}let eN=new Set(["INSTRUCTION.md","README.md"]),ek="show-hidden-files";function ew(e){let t=t=>{t.key===ek&&e()},s=()=>e();return window.addEventListener("storage",t),window.addEventListener("mindos:hidden-files-changed",s),()=>{window.removeEventListener("storage",t),window.removeEventListener("mindos:hidden-files-changed",s)}}function eS(){return"true"===localStorage.getItem(ek)}function eC({x:e,y:t,onClose:s,menuHeight:n,children:o}){let l=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=e=>{l.current&&!l.current.contains(e.target)&&s()},t=e=>{"Escape"===e.key&&s()};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[s]);let i=Math.min(t,window.innerHeight-(n??160)),d=Math.min(e,window.innerWidth-200);return(0,r.jsx)("div",{ref:l,className:"fixed z-50 min-w-[180px] bg-card border border-border rounded-lg shadow-lg py-1",style:{top:i,left:d},children:o})}let eA="w-full flex items-center gap-2 px-3 py-2 text-sm text-foreground hover:bg-muted transition-colors text-left",ez="w-full flex items-center gap-2 px-3 py-2 text-sm text-error hover:bg-error/10 transition-colors text-left",eE="my-1 border-t border-border/50";function e$({x:e,y:t,node:s,onClose:a,onRename:o,onImport:l,onDelete:i}){let d=(0,n.useRouter)(),{t:c}=(0,y.Y)(),{isPinned:u,togglePin:x}=(0,ev.Z)(),p=u(s.path);return(0,r.jsxs)(eC,{x:e,y:t,onClose:a,children:[(0,r.jsxs)("button",{className:eA,onClick:()=>{x(s.path),a()},children:[(0,r.jsx)(Z.A,{size:14,className:`shrink-0 ${p?"fill-[var(--amber)] text-[var(--amber)]":""}`}),p?c.fileTree.removeFromFavorites:c.fileTree.pinToFavorites]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{d.push(`/view/${(0,Q.O0)(`${s.path}/INSTRUCTION.md`)}`),a()},children:[(0,r.jsx)(ee.A,{size:14,className:"shrink-0"})," ",c.fileTree.editRules]}),l&&(0,r.jsxs)("button",{className:eA,onClick:()=>{l(s.path),a()},children:[(0,r.jsx)(m.A,{size:14,className:"shrink-0"})," ",c.fileTree.importFile]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{ey(s.path),a()},children:[(0,r.jsx)(et.A,{size:14,className:"shrink-0"})," ",c.fileTree.copyPath]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{o(),a()},children:[(0,r.jsx)(es.A,{size:14,className:"shrink-0"})," ",c.fileTree.renameSpace]}),(0,r.jsx)("div",{className:eE}),(0,r.jsxs)("button",{className:ez,onClick:()=>{a(),i()},children:[(0,r.jsx)(er.A,{size:14,className:"shrink-0"}),c.fileTree.deleteSpace]})]})}function eT({x:e,y:t,node:s,onClose:o,onRename:l,onDelete:i}){let d=(0,n.useRouter)(),{t:c}=(0,y.Y)(),[u,m]=(0,a.useTransition)(),{isPinned:x,togglePin:p}=(0,ev.Z)(),h=x(s.path);return(0,r.jsxs)(eC,{x:e,y:t,onClose:o,menuHeight:180,children:[(0,r.jsxs)("button",{className:eA,onClick:()=>{p(s.path),o()},children:[(0,r.jsx)(Z.A,{size:14,className:`shrink-0 ${h?"fill-[var(--amber)] text-[var(--amber)]":""}`}),h?c.fileTree.removeFromFavorites:c.fileTree.pinToFavorites]}),(0,r.jsxs)("button",{className:eA,disabled:u,onClick:()=>{m(async()=>{(await ed(s.path)).success&&(d.refresh(),ej()),o()})},children:[(0,r.jsx)(J.A,{size:14,className:"shrink-0 text-[var(--amber)]"})," ",c.fileTree.convertToSpace]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{ey(s.path),o()},children:[(0,r.jsx)(et.A,{size:14,className:"shrink-0"})," ",c.fileTree.copyPath]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{l(),o()},children:[(0,r.jsx)(es.A,{size:14,className:"shrink-0"})," ",c.fileTree.rename]}),(0,r.jsx)("div",{className:eE}),(0,r.jsxs)("button",{className:ez,onClick:()=>{o(),i()},children:[(0,r.jsx)(er.A,{size:14,className:"shrink-0"}),c.fileTree.deleteFolder]})]})}function eR({dirPath:e,depth:t,onDone:s}){let[o,l]=(0,a.useState)(""),[i,d]=(0,a.useTransition)(),[c,u]=(0,a.useState)(""),m=(0,n.useRouter)(),{t:x}=(0,y.Y)(),p=(0,a.useRef)(null),h=(0,a.useCallback)(()=>{let t=o.trim();t?d(async()=>{let r=await ec(e,t);r.success&&r.filePath?(s(),m.push(`/view/${(0,Q.O0)(r.filePath)}`),m.refresh(),ej()):u(r.error||x.fileTree.failed)}):u(x.fileTree.enterFileName)},[o,e,s,m,x]);return(0,a.useEffect)(()=>{let e=e=>{p.current&&!p.current.contains(e.target)&&s()},t=setTimeout(()=>document.addEventListener("mousedown",e),0);return()=>{clearTimeout(t),document.removeEventListener("mousedown",e)}},[s]),(0,r.jsxs)("div",{ref:p,className:"px-2 pb-1",style:{paddingLeft:`${12*t+20}px`},children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("input",{autoFocus:!0,type:"text",value:o,onChange:e=>{l(e.target.value),u("")},onKeyDown:e=>{"Enter"===e.key&&h(),"Escape"===e.key&&s()},placeholder:"filename.md",className:" flex-1 bg-muted border border-border rounded px-2 py-1 text-xs text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring "}),i?(0,r.jsx)(E.A,{size:13,className:"text-muted-foreground animate-spin shrink-0"}):(0,r.jsx)("button",{onClick:h,className:"text-xs text-[var(--amber)] hover:text-foreground shrink-0 px-1",children:x.fileTree.create})]}),c&&(0,r.jsx)("p",{className:"text-xs text-error mt-0.5 px-1",children:c})]})}function eM({node:e,depth:t,currentPath:s,onNavigate:o,maxOpenDepth:l,onImport:i}){let d,c=(0,n.useRouter)(),u=s.startsWith(e.path+"/")||s===e.path,x=!!e.isSpace,[p,h]=(0,a.useState)(0===t||u),[g,f]=(0,a.useState)(!1),[b,v]=(0,a.useState)(!1),[j,N]=(0,a.useState)(e.name),[k,w]=(0,a.useTransition)(),S=(0,a.useRef)(null),C=(0,a.useRef)(null),[A,z]=(0,a.useState)(null),[$,T]=(0,a.useState)(!1),R=(0,a.useRef)(null),{t:M}=(0,y.Y)(),[I,D]=(0,a.useState)(null),[P,L]=(0,a.useTransition)(),F=(0,a.useCallback)(()=>h(e=>!e),[]),O=(0,a.useRef)(void 0);(0,a.useEffect)(()=>{if(null==l){O.current=l;return}O.current!==l&&(null===O.current||void 0===O.current?t>l&&h(!1):h(t<=l),O.current=l)},[l,t]),(0,a.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]);let _=(0,a.useCallback)(t=>{t?.preventDefault(),t?.stopPropagation(),C.current&&(clearTimeout(C.current),C.current=null),N(e.name),v(!0),setTimeout(()=>S.current?.select(),0)},[e.name]),W=(0,a.useCallback)(()=>{let t=j.trim();t&&t!==e.name?w(async()=>{let s=x?eu:em.f,r=await s(e.path,t);r.success&&r.newPath?(v(!1),c.push(`/view/${(0,Q.O0)(r.newPath)}`),c.refresh(),ej()):v(!1)}):v(!1)},[j,e.name,e.path,c,x]),U=(0,a.useCallback)(()=>{b||(C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{c.push(`/view/${(0,Q.O0)(e.path)}`),o?.(),C.current=null},180))},[b,c,e.path,o]),B=(0,a.useCallback)(e=>{e.stopPropagation(),F()},[F]),H=(0,a.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),z({x:e.clientX,y:e.clientY})},[]),G=x?function e(t){return"file"===t.type?+!eN.has(t.name):(t.children??[]).reduce((t,s)=>t+e(s),0)}(e):0;if(b)return(0,r.jsxs)("div",{className:"relative px-2 py-0.5",style:{paddingLeft:`${12*t+8}px`},children:[(0,r.jsx)("input",{ref:S,autoFocus:!0,value:j,onChange:e=>N(e.target.value),onKeyDown:e=>{"Enter"===e.key&&W(),"Escape"===e.key&&v(!1)},onBlur:W,className:"w-full bg-muted border border-border rounded px-2 py-0.5 text-xs text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"}),k&&(0,r.jsx)(E.A,{size:12,className:"absolute right-3 top-1/2 -translate-y-1/2 animate-spin text-muted-foreground"})]});let q=x&&0===t;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"relative group/dir flex items-center",onContextMenu:H,children:[(0,r.jsx)("button",{onClick:F,className:"shrink-0 p-1 rounded hover:bg-muted text-muted-foreground transition-colors",style:{marginLeft:`${12*t+4}px`},"aria-label":p?"Collapse":"Expand",children:(0,r.jsx)("span",{className:"block transition-transform duration-150",style:{transform:p?"rotate(0deg)":"rotate(-90deg)"},children:(0,r.jsx)(en.A,{size:13})})}),(0,r.jsxs)("button",{type:"button",onClick:U,onDoubleClick:B,className:`
|
|
43
|
+
`,children:[n&&(0,r.jsx)("span",{className:"absolute left-0 top-1/2 -translate-y-1/2 w-[2px] h-[18px] rounded-r-full bg-[var(--amber)]"}),(0,r.jsx)("span",{className:"shrink-0 flex items-center justify-center w-[18px]",children:e}),i,a&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"ml-2.5 text-sm whitespace-nowrap",children:t}),s&&(0,r.jsx)("span",{className:"ml-auto text-2xs text-muted-foreground/60 font-mono shrink-0",children:s})]})]})}function H({activePanel:e,onPanelChange:t,onEchoClick:s,onAgentsClick:n,onDiscoverClick:o,onWorkflowsClick:i,syncStatus:u,expanded:m,onExpandedChange:N,onSettingsClick:k,onSyncClick:w}){let S=(0,a.useRef)(0),C=(0,a.useRef)(null),{t:A}=(0,y.Y)(),[z,E]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let e=window.mindos;if(e?.checkUpdate){let t=e.checkUpdate.bind(e),s=setTimeout(async()=>{try{(await t()).available&&E(!0)}catch{}},1e4),r=e.onUpdateAvailable?.(()=>E(!0));return()=>{clearTimeout(s),r?.()}}let t=localStorage.getItem("mindos_update_dismissed"),s=localStorage.getItem("mindos_update_latest");s&&s!==t&&E(!0);let r=setTimeout(async()=>{try{let e=await fetch("/api/update-check");if(!e.ok)return;let t=await e.json();if(!t.hasUpdate){localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),E(!1);return}let s=localStorage.getItem("mindos_update_dismissed");if(t.latest===s)return;localStorage.setItem("mindos_update_latest",t.latest),E(!0)}catch{}},5e3),n=()=>E(!0),a=()=>E(!1);return window.addEventListener("mindos:update-available",n),window.addEventListener("mindos:update-dismissed",a),()=>{clearTimeout(r),window.removeEventListener("mindos:update-available",n),window.removeEventListener("mindos:update-dismissed",a)}},[]);let $=(0,a.useCallback)(e=>{let t=Date.now();t-S.current<300||(S.current=t,e())},[]),T=(0,a.useCallback)(s=>{$(()=>t(e===s?null:s))},[e,t,$]),R=D(u,!1),M=m?180:48,I="off"!==R&&"synced"!==R?(0,r.jsx)("span",{className:`absolute ${m?"left-[26px] top-1.5":"top-1.5 right-1.5"} w-2 h-2 rounded-full ${P[R]} ${"error"===R||"conflicts"===R?"animate-pulse":""}`}):void 0;return(0,r.jsxs)("aside",{className:"group hidden md:flex fixed top-0 left-0 h-screen z-[31] flex-col bg-background border-r border-border transition-[width] duration-200 ease-out",style:{width:`${M}px`},role:"toolbar","aria-label":"Navigation","aria-orientation":"vertical",children:[(0,r.jsxs)("div",{className:"flex flex-col h-full w-full overflow-hidden",children:[(0,r.jsxs)(l(),{href:"/",className:`flex items-center ${m?"px-3 gap-2":"justify-center"} w-full py-[13px] hover:opacity-80 transition-opacity`,"aria-label":"MindOS Home",children:[(0,r.jsx)(U,{id:"rail",className:"w-7 h-3.5 shrink-0"}),m&&(0,r.jsx)("span",{className:"text-sm font-semibold text-foreground font-display whitespace-nowrap",children:"MindOS"})]}),(0,r.jsx)("div",{className:`${m?"mx-3":"mx-auto w-6"} border-t border-border`}),(0,r.jsxs)("div",{className:`flex flex-col ${m?"px-1.5":"items-center"} gap-1 py-2`,children:[(0,r.jsx)(B,{icon:(0,r.jsx)(x.A,{size:18}),label:A.sidebar.files,active:"files"===e,expanded:m,onClick:()=>T("files"),walkthroughId:"files-panel"}),(0,r.jsx)(B,{icon:(0,r.jsx)(p.A,{size:18}),label:A.sidebar.echo,active:"echo"===e,expanded:m,onClick:()=>s?$(s):T("echo"),walkthroughId:"echo-panel"}),(0,r.jsx)(B,{icon:(0,r.jsx)(d.A,{size:18}),label:A.sidebar.searchTitle,shortcut:"⌘K",active:"search"===e,expanded:m,onClick:()=>T("search")}),(0,r.jsx)(B,{icon:(0,r.jsx)(h.A,{size:18}),label:A.sidebar.agents,active:"agents"===e,expanded:m,onClick:()=>n?$(n):T("agents"),walkthroughId:"agents-panel"}),(0,r.jsx)(B,{icon:(0,r.jsx)(g.A,{size:18}),label:A.sidebar.workflows??"Flows",active:"workflows"===e,expanded:m,onClick:()=>i?$(i):T("workflows")})]}),(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsx)("div",{className:`${m?"mx-3":"mx-auto w-6"} border-t border-border`}),(0,r.jsx)("div",{className:`flex flex-col ${m?"px-1.5":"items-center"} gap-1 py-2`,children:(0,r.jsx)(B,{icon:(0,r.jsx)(f.A,{size:18}),label:A.sidebar.discover,active:"discover"===e,expanded:m,onClick:()=>o?$(o):T("discover")})}),(0,r.jsx)("div",{className:`${m?"mx-3":"mx-auto w-6"} border-t border-border`}),(0,r.jsxs)("div",{className:`flex flex-col ${m?"px-1.5":"items-center"} gap-1 py-2`,children:[(0,r.jsx)(B,{icon:(0,r.jsx)(c.A,{size:18}),label:A.sidebar.settingsTitle,shortcut:"⌘,",expanded:m,onClick:()=>$(k),badge:z?(0,r.jsx)("span",{className:`absolute ${m?"left-[26px] top-1.5":"top-1.5 right-1.5"} w-2 h-2 rounded-full bg-error`}):void 0}),u?.enabled&&u?.remote&&"(not configured)"!==u.remote&&(0,r.jsx)(B,{icon:(0,r.jsx)(b.A,{size:18}),label:A.sidebar.syncLabel,expanded:m,buttonRef:C,badge:I,onClick:()=>$(()=>{let e=C.current?.getBoundingClientRect();e&&w(e)})})]})]}),(0,r.jsx)("button",{onClick:()=>N(!m),className:" absolute right-0 top-1/2 -translate-y-1/2 translate-x-1/2 z-[32] w-5 h-5 rounded-full bg-card border border-border shadow-sm flex items-center justify-center opacity-0 group-hover:opacity-100 hover:!opacity-100 transition-opacity duration-200 text-muted-foreground hover:text-foreground hover:bg-muted focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring ","aria-label":m?"Collapse sidebar":"Expand sidebar",title:m?"Collapse":"Expand",children:m?(0,r.jsx)(v.A,{size:10}):(0,r.jsx)(j.A,{size:10})})]})}var K=s(51914),Y=s(48368),J=s(33024),G=s(10579),q=s(38569),V=s(56563),Q=s(91337),X=s(33078),Z=s(94290),ee=s(997),et=s(67635),es=s(49387),er=s(68459),en=s(66088),ea=s(42129),eo=s(38798),el=s(60285),ei=s(9339);let ed=(0,ei.createServerReference)("40e68696b4ae709673f5de29519dc0acc960433282",ei.callServer,void 0,ei.findSourceMapURL,"convertToSpaceAction"),ec=(0,ei.createServerReference)("606d5135587627708d675c3b594dfcbc2409f20b0d",ei.callServer,void 0,ei.findSourceMapURL,"createFileAction"),eu=(0,ei.createServerReference)("604b3c7cad50c8c3d1acbb57bd769c37487b3894d0",ei.callServer,void 0,ei.findSourceMapURL,"renameSpaceAction");var em=s(30696);let ex=(0,ei.createServerReference)("40636f90de556e5785cad5c4a71107c7d445b0e480",ei.callServer,void 0,ei.findSourceMapURL,"deleteSpaceAction"),ep=(0,ei.createServerReference)("4040d909d21f124baa8e546cc2d7ba3d14d373ffca",ei.callServer,void 0,ei.findSourceMapURL,"deleteFolderAction");var eh=s(93135),eg=s(68772),ef=s(4235),eb=s(39498),ev=s(10377);function ej(){window.dispatchEvent(new Event("mindos:files-changed"))}async function ey(e){try{await navigator.clipboard.writeText(e)}catch{}}let eN=new Set(["INSTRUCTION.md","README.md"]),ek="show-hidden-files";function ew(e){let t=t=>{t.key===ek&&e()},s=()=>e();return window.addEventListener("storage",t),window.addEventListener("mindos:hidden-files-changed",s),()=>{window.removeEventListener("storage",t),window.removeEventListener("mindos:hidden-files-changed",s)}}function eS(){return"true"===localStorage.getItem(ek)}function eC({x:e,y:t,onClose:s,menuHeight:n,children:o}){let l=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=e=>{l.current&&!l.current.contains(e.target)&&s()},t=e=>{"Escape"===e.key&&s()};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[s]);let i=Math.min(t,window.innerHeight-(n??160)),d=Math.min(e,window.innerWidth-200);return(0,r.jsx)("div",{ref:l,className:"fixed z-50 min-w-[180px] bg-card border border-border rounded-lg shadow-lg py-1",style:{top:i,left:d},children:o})}let eA="w-full flex items-center gap-2 px-3 py-2 text-sm text-foreground hover:bg-muted transition-colors text-left",ez="w-full flex items-center gap-2 px-3 py-2 text-sm text-error hover:bg-error/10 transition-colors text-left",eE="my-1 border-t border-border/50";function e$({x:e,y:t,node:s,onClose:a,onRename:o,onImport:l,onDelete:i}){let d=(0,n.useRouter)(),{t:c}=(0,y.Y)(),{isPinned:u,togglePin:x}=(0,ev.Z)(),p=u(s.path);return(0,r.jsxs)(eC,{x:e,y:t,onClose:a,children:[(0,r.jsxs)("button",{className:eA,onClick:()=>{x(s.path),a()},children:[(0,r.jsx)(Z.A,{size:14,className:`shrink-0 ${p?"fill-[var(--amber)] text-[var(--amber)]":""}`}),p?c.fileTree.removeFromFavorites:c.fileTree.pinToFavorites]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{d.push(`/view/${(0,Q.O0)(`${s.path}/INSTRUCTION.md`)}`),a()},children:[(0,r.jsx)(ee.A,{size:14,className:"shrink-0"})," ",c.fileTree.editRules]}),l&&(0,r.jsxs)("button",{className:eA,onClick:()=>{l(s.path),a()},children:[(0,r.jsx)(m.A,{size:14,className:"shrink-0"})," ",c.fileTree.importFile]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{ey(s.path),a()},children:[(0,r.jsx)(et.A,{size:14,className:"shrink-0"})," ",c.fileTree.copyPath]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{o(),a()},children:[(0,r.jsx)(es.A,{size:14,className:"shrink-0"})," ",c.fileTree.renameSpace]}),(0,r.jsx)("div",{className:eE}),(0,r.jsxs)("button",{className:ez,onClick:()=>{a(),i()},children:[(0,r.jsx)(er.A,{size:14,className:"shrink-0"}),c.fileTree.deleteSpace]})]})}function eT({x:e,y:t,node:s,onClose:o,onRename:l,onDelete:i}){let d=(0,n.useRouter)(),{t:c}=(0,y.Y)(),[u,m]=(0,a.useTransition)(),{isPinned:x,togglePin:p}=(0,ev.Z)(),h=x(s.path);return(0,r.jsxs)(eC,{x:e,y:t,onClose:o,menuHeight:180,children:[(0,r.jsxs)("button",{className:eA,onClick:()=>{p(s.path),o()},children:[(0,r.jsx)(Z.A,{size:14,className:`shrink-0 ${h?"fill-[var(--amber)] text-[var(--amber)]":""}`}),h?c.fileTree.removeFromFavorites:c.fileTree.pinToFavorites]}),(0,r.jsxs)("button",{className:eA,disabled:u,onClick:()=>{m(async()=>{(await ed(s.path)).success&&(d.refresh(),ej()),o()})},children:[(0,r.jsx)(J.A,{size:14,className:"shrink-0 text-[var(--amber)]"})," ",c.fileTree.convertToSpace]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{ey(s.path),o()},children:[(0,r.jsx)(et.A,{size:14,className:"shrink-0"})," ",c.fileTree.copyPath]}),(0,r.jsxs)("button",{className:eA,onClick:()=>{l(),o()},children:[(0,r.jsx)(es.A,{size:14,className:"shrink-0"})," ",c.fileTree.rename]}),(0,r.jsx)("div",{className:eE}),(0,r.jsxs)("button",{className:ez,onClick:()=>{o(),i()},children:[(0,r.jsx)(er.A,{size:14,className:"shrink-0"}),c.fileTree.deleteFolder]})]})}function eR({dirPath:e,depth:t,onDone:s}){let[o,l]=(0,a.useState)(""),[i,d]=(0,a.useTransition)(),[c,u]=(0,a.useState)(""),m=(0,n.useRouter)(),{t:x}=(0,y.Y)(),p=(0,a.useRef)(null),h=(0,a.useCallback)(()=>{let t=o.trim();t?d(async()=>{let r=await ec(e,t);r.success&&r.filePath?(s(),m.push(`/view/${(0,Q.O0)(r.filePath)}`),m.refresh(),ej()):u(r.error||x.fileTree.failed)}):u(x.fileTree.enterFileName)},[o,e,s,m,x]);return(0,a.useEffect)(()=>{let e=e=>{p.current&&!p.current.contains(e.target)&&s()},t=setTimeout(()=>document.addEventListener("mousedown",e),0);return()=>{clearTimeout(t),document.removeEventListener("mousedown",e)}},[s]),(0,r.jsxs)("div",{ref:p,className:"px-2 pb-1",style:{paddingLeft:`${12*t+20}px`},children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("input",{autoFocus:!0,type:"text",value:o,onChange:e=>{l(e.target.value),u("")},onKeyDown:e=>{"Enter"===e.key&&h(),"Escape"===e.key&&s()},placeholder:"filename.md",className:" flex-1 bg-muted border border-border rounded px-2 py-1 text-xs text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring "}),i?(0,r.jsx)(E.A,{size:13,className:"text-muted-foreground animate-spin shrink-0"}):(0,r.jsx)("button",{onClick:h,className:"text-xs text-[var(--amber)] hover:text-foreground shrink-0 px-1",children:x.fileTree.create})]}),c&&(0,r.jsx)("p",{className:"text-xs text-error mt-0.5 px-1",children:c})]})}function eM({node:e,depth:t,currentPath:s,onNavigate:o,maxOpenDepth:l,onImport:i}){let d,c=(0,n.useRouter)(),u=s.startsWith(e.path+"/")||s===e.path,x=!!e.isSpace,[p,h]=(0,a.useState)(0===t||u),[g,f]=(0,a.useState)(!1),[b,v]=(0,a.useState)(!1),[j,N]=(0,a.useState)(e.name),[k,w]=(0,a.useTransition)(),S=(0,a.useRef)(null),C=(0,a.useRef)(null),[A,z]=(0,a.useState)(null),[$,T]=(0,a.useState)(!1),R=(0,a.useRef)(null),{t:M}=(0,y.Y)(),[I,D]=(0,a.useState)(null),[P,L]=(0,a.useTransition)(),F=(0,a.useCallback)(()=>h(e=>!e),[]),O=(0,a.useRef)(void 0);(0,a.useEffect)(()=>{if(null==l){O.current=l;return}O.current!==l&&(null===O.current||void 0===O.current?t>l&&h(!1):h(t<=l),O.current=l)},[l,t]),(0,a.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]);let _=(0,a.useCallback)(t=>{t?.preventDefault(),t?.stopPropagation(),C.current&&(clearTimeout(C.current),C.current=null),N(e.name),v(!0),setTimeout(()=>S.current?.select(),0)},[e.name]),W=(0,a.useCallback)(()=>{let t=j.trim();t&&t!==e.name?w(async()=>{let s=x?eu:em.f,r=await s(e.path,t);r.success&&r.newPath?(v(!1),c.push(`/view/${(0,Q.O0)(r.newPath)}`),c.refresh(),ej()):v(!1)}):v(!1)},[j,e.name,e.path,c,x]),U=(0,a.useCallback)(()=>{b||(C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{c.push(`/view/${(0,Q.O0)(e.path)}`),o?.(),C.current=null},180))},[b,c,e.path,o]),B=(0,a.useCallback)(e=>{e.stopPropagation(),F()},[F]),H=(0,a.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),z({x:e.clientX,y:e.clientY})},[]),G=x?function e(t){return"file"===t.type?+!eN.has(t.name):(t.children??[]).reduce((t,s)=>t+e(s),0)}(e):0;if(b)return(0,r.jsxs)("div",{className:"relative px-2 py-0.5",style:{paddingLeft:`${12*t+8}px`},children:[(0,r.jsx)("input",{ref:S,autoFocus:!0,value:j,onChange:e=>N(e.target.value),onKeyDown:e=>{"Enter"===e.key&&W(),"Escape"===e.key&&v(!1)},onBlur:W,className:"w-full bg-muted border border-border rounded px-2 py-0.5 text-xs text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"}),k&&(0,r.jsx)(E.A,{size:12,className:"absolute right-3 top-1/2 -translate-y-1/2 animate-spin text-muted-foreground"})]});let q=x&&0===t;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"relative group/dir flex items-center",onContextMenu:H,children:[(0,r.jsx)("button",{onClick:F,className:"shrink-0 p-1 rounded hover:bg-muted text-muted-foreground transition-colors",style:{marginLeft:`${12*t+4}px`},"aria-label":p?"Collapse":"Expand",children:(0,r.jsx)("span",{className:"block transition-transform duration-150",style:{transform:p?"rotate(0deg)":"rotate(-90deg)"},children:(0,r.jsx)(en.A,{size:13})})}),(0,r.jsxs)("button",{type:"button",onClick:U,onDoubleClick:B,className:`
|
|
6
44
|
flex-1 flex items-center gap-1.5 px-1 py-1 rounded text-left min-w-0 pr-16
|
|
7
45
|
text-sm transition-colors duration-100
|
|
8
46
|
hover:bg-muted
|
|
@@ -60,7 +98,7 @@ ${t}`:`[PDF: ${e.name}] Could not extract readable text (possibly scanned/image
|
|
|
60
98
|
`,children:[".csv"===n?(0,r.jsx)(X.A,{size:14,className:"text-success shrink-0 mt-0.5"}):(0,r.jsx)(Y.A,{size:14,className:"text-muted-foreground shrink-0 mt-0.5"}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsxs)("div",{className:"flex items-baseline gap-2 flex-wrap",children:[(0,r.jsx)("span",{className:"text-sm text-foreground font-medium truncate",title:o,children:o}),i&&(0,r.jsx)("span",{className:"text-xs text-muted-foreground truncate",title:i,children:i})]}),e.snippet&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 line-clamp-2 leading-relaxed",title:e.snippet,children:function(e,t){if(!t.trim())return e;let s=t.trim().split(/\s+/).filter(Boolean).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),n=RegExp(`(${s.join("|")})`,"gi");return e.split(n).map((e,t)=>n.test(e)?(0,r.jsx)("mark",{className:"bg-yellow-300/40 text-foreground rounded-sm px-0.5",children:e},t):e)}(e.snippet,s)})]})]},e.path)})]}),l.length>0&&(0,r.jsxs)("div",{className:"hidden md:flex px-4 py-2 border-t border-border items-center gap-3 text-xs text-muted-foreground/60",children:[(0,r.jsxs)("span",{children:[(0,r.jsx)("kbd",{className:"font-mono",children:"↑↓"})," ",E.search.navigate]}),(0,r.jsxs)("span",{children:[(0,r.jsx)("kbd",{className:"font-mono",children:"↵"})," ",E.search.open]}),(0,r.jsxs)("span",{children:[(0,r.jsx)("kbd",{className:"font-mono",children:"ESC"})," ",E.search.close]})]})]}),"actions"===b&&(0,r.jsx)("div",{ref:C,className:"max-h-[50vh] md:max-h-80 overflow-y-auto flex-1 py-1",children:T.map((e,t)=>(0,r.jsxs)("button",{onClick:()=>e.execute(),onMouseEnter:()=>N(t),className:`
|
|
61
99
|
w-full px-4 py-2.5 flex items-center gap-3 text-left transition-colors duration-75
|
|
62
100
|
${t===j?"bg-muted":"hover:bg-muted/50"}
|
|
63
|
-
`,children:[(0,r.jsx)("span",{className:"text-muted-foreground shrink-0",children:e.icon}),(0,r.jsx)("span",{className:"text-sm text-foreground flex-1",children:e.label}),e.shortcut&&(0,r.jsx)("kbd",{className:"text-xs text-muted-foreground/60 font-mono border border-border rounded px-1.5 py-0.5",children:e.shortcut})]},e.id))})]})}):null}function sE({open:e,onClose:t,currentFile:s,initialMessage:n,initialAcpAgent:a,onFirstMessage:o,askMode:l,onModeSwitch:i}){let{t:d}=(0,y.Y)();return e?(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[10vh] modal-backdrop",onClick:e=>e.target===e.currentTarget&&t(),children:(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":d.ask.title,className:"w-full md:max-w-2xl md:mx-4 bg-card border-t md:border border-border rounded-t-2xl md:rounded-xl shadow-2xl flex flex-col h-[92vh] md:h-auto md:max-h-[75vh]",children:(0,r.jsx)(sh,{visible:e,variant:"modal",onClose:t,currentFile:s,initialMessage:n,initialAcpAgent:a,onFirstMessage:o,askMode:l,onModeSwitch:i})})}):null}var s$=s(68806),sT=s(6489);function sR({data:e,updateAi:t,updateAgent:s,t:n}){let o=e.envOverrides??{},l=e.envValues??{},i=e.ai.provider,[d,c]=(0,a.useState)({}),u=(0,a.useRef)(void 0),m=(0,a.useRef)(i);(0,a.useEffect)(()=>{m.current!==i&&(m.current=i,c({}),u.current&&(clearTimeout(u.current),u.current=void 0))},[i]),(0,a.useEffect)(()=>()=>{u.current&&clearTimeout(u.current)},[]),(0,a.useEffect)(()=>{let t=e.agent?.reconnectRetries??3;try{localStorage.setItem("mindos-reconnect-retries",String(t))}catch(e){console.warn("[AiTab] localStorage setItem reconnectRetries failed:",e)}},[e.agent?.reconnectRetries]);let x=(0,a.useCallback)(async t=>{let s=e.ai.providers?.[t]??{};c(e=>({...e,[t]:{state:"testing"}}));try{let e={provider:t};s.apiKey&&(e.apiKey=s.apiKey),s.model&&(e.model=s.model),"openai"===t&&s.baseUrl&&(e.baseUrl=s.baseUrl);let r=await fetch("/api/settings/test-key",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await r.json();n.ok?(c(e=>({...e,[t]:{state:"ok",latency:n.latency}})),u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{c(e=>({...e,[t]:{state:"idle"}}))},8e3)):c(e=>({...e,[t]:{state:"error",error:n.error,code:n.code}}))}catch{c(e=>({...e,[t]:{state:"error",code:"network_error",error:"Network error"}}))}},[e.ai.providers]),p=(0,a.useCallback)((s,r)=>{"apiKey"in r&&c(e=>({...e,[s]:{state:"idle"}})),t({providers:{...e.ai.providers,[s]:{...e.ai.providers?.[s],...r}}})},[e.ai.providers,t]),g=e.ai.providers?.anthropic??{apiKey:"",model:""},f=e.ai.providers?.openai??{apiKey:"",model:"",baseUrl:""},b="anthropic"===i?g.apiKey:f.apiKey,v="anthropic"===i?o.ANTHROPIC_API_KEY:o.OPENAI_API_KEY,j=(e,t,s)=>{let a=d[e]??{state:"idle"},o="testing"===a.state||!t&&!s;return(0,r.jsxs)("div",{className:"flex items-center gap-2 mt-1.5",children:[(0,r.jsx)("button",{type:"button",disabled:o,title:o?n.hints.testInProgressOrNoKey:void 0,onClick:()=>x(e),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:border-foreground/20 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:"testing"===a.state?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{size:12,className:"animate-spin"}),n.settings.ai.testKeyTesting]}):n.settings.ai.testKey}),"ok"===a.state&&null!=a.latency&&(0,r.jsx)("span",{className:"text-xs text-success",children:n.settings.ai.testKeyOk(a.latency)}),"error"===a.state&&(0,r.jsxs)("span",{className:"text-xs text-error",children:["✗ ",function(e,t){switch(t){case"auth_error":return e.settings.ai.testKeyAuthError;case"model_not_found":return e.settings.ai.testKeyModelNotFound;case"rate_limited":return e.settings.ai.testKeyRateLimited;case"network_error":return e.settings.ai.testKeyNetworkError;default:return e.settings.ai.testKeyUnknown}}(n,a.code)]})]})};return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(tk.A,{size:15}),title:n.settings.ai.provider,description:"anthropic"===i?"Anthropic Claude":"OpenAI / compatible",children:[(0,r.jsx)("div",{className:"flex gap-2",children:["anthropic","openai"].map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>t({provider:e}),className:`flex-1 flex items-center gap-2.5 px-3.5 py-2.5 rounded-lg border transition-all ${i===e?"border-[var(--amber)] bg-[var(--amber-subtle)] shadow-sm":"border-border/50 hover:border-border hover:bg-muted/30"}`,children:[(0,r.jsx)("span",{className:`text-sm font-medium ${i===e?"text-foreground":"text-muted-foreground"}`,children:"anthropic"===e?"Anthropic":"OpenAI"}),(0,r.jsx)(T.Bt,{overridden:o.AI_PROVIDER})]},e))}),"anthropic"===i?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.model," ",(0,r.jsx)(T.Bt,{overridden:o.ANTHROPIC_MODEL})]}),children:(0,r.jsx)(sM,{value:g.model,onChange:e=>{p("anthropic",{model:e})},placeholder:l.ANTHROPIC_MODEL||"claude-sonnet-4-6",provider:"anthropic",apiKey:g.apiKey,envKey:o.ANTHROPIC_API_KEY,t:n})}),(0,r.jsxs)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.apiKey," ",(0,r.jsx)(T.Bt,{overridden:o.ANTHROPIC_API_KEY})]}),hint:o.ANTHROPIC_API_KEY?n.settings.ai.envFieldNote("ANTHROPIC_API_KEY"):n.settings.ai.keyHint,children:[(0,r.jsx)(T.Ak,{value:g.apiKey,onChange:e=>{p("anthropic",{apiKey:e})}}),j("anthropic",!!g.apiKey,!!o.ANTHROPIC_API_KEY)]})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.model," ",(0,r.jsx)(T.Bt,{overridden:o.OPENAI_MODEL})]}),children:(0,r.jsx)(sM,{value:f.model,onChange:e=>{p("openai",{model:e})},placeholder:l.OPENAI_MODEL||"gpt-5.4",provider:"openai",apiKey:f.apiKey,envKey:o.OPENAI_API_KEY,baseUrl:f.baseUrl,t:n})}),(0,r.jsxs)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.apiKey," ",(0,r.jsx)(T.Bt,{overridden:o.OPENAI_API_KEY})]}),hint:o.OPENAI_API_KEY?n.settings.ai.envFieldNote("OPENAI_API_KEY"):n.settings.ai.keyHint,children:[(0,r.jsx)(T.Ak,{value:f.apiKey,onChange:e=>{p("openai",{apiKey:e})}}),j("openai",!!f.apiKey,!!o.OPENAI_API_KEY)]}),(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.baseUrl," ",(0,r.jsx)(T.Bt,{overridden:o.OPENAI_BASE_URL})]}),hint:n.settings.ai.baseUrlHint,children:(0,r.jsx)(T.pd,{value:f.baseUrl??"",onChange:e=>{p("openai",{baseUrl:e.target.value})},placeholder:l.OPENAI_BASE_URL||"https://api.openai.com/v1"})})]}),!b&&!v&&(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs text-destructive/80 bg-destructive/8 border border-destructive/20 rounded-lg px-3 py-2.5",children:[(0,r.jsx)(C.A,{size:13,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:n.settings.ai.noApiKey})]}),Object.values(o).some(Boolean)&&(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs text-[var(--amber)] bg-[var(--amber-subtle)] border border-[var(--amber)]/20 rounded-lg px-3 py-2.5",children:[(0,r.jsx)(C.A,{size:13,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:n.settings.ai.envHint})]})]}),(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(h.A,{size:15}),title:n.settings.agent.title,description:n.settings.agent.subtitle??"Configure how the AI agent operates",children:[(0,r.jsx)(T.pM,{label:n.settings.agent.maxSteps,hint:n.settings.agent.maxStepsHint,children:(0,r.jsxs)(T.l6,{value:String(e.agent?.maxSteps??20),onChange:e=>s({maxSteps:Number(e.target.value)}),className:"w-20",children:[(0,r.jsx)("option",{value:"5",children:"5"}),(0,r.jsx)("option",{value:"10",children:"10"}),(0,r.jsx)("option",{value:"15",children:"15"}),(0,r.jsx)("option",{value:"20",children:"20"}),(0,r.jsx)("option",{value:"25",children:"25"}),(0,r.jsx)("option",{value:"30",children:"30"})]})}),(0,r.jsx)(T.pM,{label:n.settings.agent.contextStrategy,hint:n.settings.agent.contextStrategyHint,children:(0,r.jsxs)(T.l6,{value:e.agent?.contextStrategy??"auto",onChange:e=>s({contextStrategy:e.target.value}),className:"w-24",children:[(0,r.jsx)("option",{value:"auto",children:n.settings.agent.contextStrategyAuto}),(0,r.jsx)("option",{value:"off",children:n.settings.agent.contextStrategyOff})]})}),(0,r.jsx)(T.pM,{label:n.settings.agent.reconnectRetries,hint:n.settings.agent.reconnectRetriesHint,children:(0,r.jsxs)(T.l6,{value:String(e.agent?.reconnectRetries??3),onChange:e=>{let t=Number(e.target.value);s({reconnectRetries:t});try{localStorage.setItem("mindos-reconnect-retries",String(t))}catch(e){console.warn("[AiTab] localStorage setItem reconnectRetries failed:",e)}},className:"w-20",children:[(0,r.jsx)("option",{value:"0",children:"Off"}),(0,r.jsx)("option",{value:"1",children:"1"}),(0,r.jsx)("option",{value:"2",children:"2"}),(0,r.jsx)("option",{value:"3",children:"3"}),(0,r.jsx)("option",{value:"5",children:"5"}),(0,r.jsx)("option",{value:"10",children:"10"})]})}),"anthropic"===i&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(T.pM,{label:n.settings.agent.thinking,hint:n.settings.agent.thinkingHint,children:(0,r.jsx)(T.lM,{checked:e.agent?.enableThinking??!1,onChange:()=>s({enableThinking:!e.agent?.enableThinking})})}),e.agent?.enableThinking&&(0,r.jsx)(T.D0,{label:n.settings.agent.thinkingBudget,hint:n.settings.agent.thinkingBudgetHint,children:(0,r.jsx)(T.pd,{type:"number",value:String(e.agent?.thinkingBudget??5e3),onChange:e=>{let t=parseInt(e.target.value,10);isNaN(t)||s({thinkingBudget:Math.max(1e3,Math.min(5e4,t))})},min:1e3,max:5e4,step:1e3})})]})]}),(0,r.jsx)(sI,{})]})}function sM({value:e,onChange:t,placeholder:s,provider:n,apiKey:o,envKey:l,baseUrl:i,t:d}){let[c,u]=(0,a.useState)(null),[m,x]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),[g,f]=(0,a.useState)(""),b=(0,a.useRef)(null),v=!!o||!!l,j=(0,a.useCallback)(async()=>{if(!m){x(!0),f("");try{let e={provider:n};o&&(e.apiKey=o),i&&(e.baseUrl=i);let t=await fetch("/api/settings/list-models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();s.ok&&Array.isArray(s.models)?(u(s.models),h(!0)):f(s.error||"Failed to fetch models")}catch{f("Network error")}finally{x(!1)}}},[n,o,i,m]);return(0,a.useEffect)(()=>{if(p)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){b.current&&!b.current.contains(e.target)&&h(!1)}},[p]),(0,r.jsxs)("div",{ref:b,className:"relative",children:[(0,r.jsxs)("div",{className:"flex gap-1.5",children:[(0,r.jsx)(T.pd,{value:e,onChange:e=>t(e.target.value),placeholder:s,className:"flex-1"}),(0,r.jsxs)("button",{type:"button",disabled:!v||m,onClick:j,title:d.settings.ai.listModels,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:border-foreground/20 transition-colors disabled:opacity-40 disabled:cursor-not-allowed shrink-0",children:[m?(0,r.jsx)(E.A,{size:12,className:"animate-spin"}):(0,r.jsx)(en.A,{size:12}),d.settings.ai.listModels]})]}),g&&(0,r.jsx)("p",{className:"text-xs text-error mt-1",children:g}),p&&c&&c.length>0&&(0,r.jsx)("div",{className:"absolute z-50 mt-1 w-full max-h-48 overflow-y-auto rounded-lg border border-border bg-popover shadow-lg",children:c.map(s=>(0,r.jsx)("button",{type:"button",className:`w-full text-left px-3 py-1.5 text-sm hover:bg-accent transition-colors ${s===e?"bg-accent/60 font-medium":""}`,onClick:()=>{t(s),h(!1)},children:s},s))}),p&&c&&0===c.length&&(0,r.jsx)("div",{className:"absolute z-50 mt-1 w-full rounded-lg border border-border bg-popover shadow-lg px-3 py-2 text-xs text-muted-foreground",children:d.settings.ai.noModelsFound})]})}function sI(){let{t:e}=(0,y.Y)(),[t,s]=(0,a.useState)("panel");return(0,a.useEffect)(()=>{try{let e=localStorage.getItem("ask-mode");"popup"===e&&s("popup")}catch(e){console.warn("[AiTab] localStorage getItem ask-mode failed:",e)}},[]),(0,r.jsx)(T.L7,{icon:(0,r.jsx)(sb.A,{size:15}),title:e.settings.askDisplayMode?.label??"Display Mode",description:e.settings.askDisplayMode?.hint??"Side panel stays docked on the right. Popup opens a floating dialog.",children:(0,r.jsxs)(T.l6,{value:t,onChange:e=>(e=>{s(e);try{localStorage.setItem("ask-mode",e)}catch(e){console.warn("[AiTab] localStorage setItem ask-mode failed:",e)}window.dispatchEvent(new StorageEvent("storage",{key:"ask-mode",newValue:e}))})(e.target.value),children:[(0,r.jsx)("option",{value:"panel",children:e.settings.askDisplayMode?.panel??"Side Panel"}),(0,r.jsx)("option",{value:"popup",children:e.settings.askDisplayMode?.popup??"Popup"})]})})}var sD=s(97810),sP=s(24338),sL=s(88833),sF=s(91405);let sO=[{value:"680px",label:"Narrow",width:42},{value:"780px",label:"Default",width:56},{value:"960px",label:"Wide",width:75},{value:"100%",label:"Full",width:100}],s_=[{value:"lora",label:"Lora",category:"Serif",style:{fontFamily:"Lora, Georgia, serif"}},{value:"ibm-plex-sans",label:"IBM Plex Sans",category:"Sans",style:{fontFamily:"'IBM Plex Sans', sans-serif"}},{value:"geist",label:"Geist",category:"Sans",style:{fontFamily:"var(--font-geist-sans), sans-serif"}},{value:"ibm-plex-mono",label:"IBM Plex Mono",category:"Mono",style:{fontFamily:"'IBM Plex Mono', monospace"}}];function sW({icon:e,label:t,children:s}){return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:e}),(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:t})]}),s]})}function sU({options:e,value:t,onChange:s}){return(0,r.jsx)("div",{className:"flex gap-2",children:e.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>s(e.value),className:`flex items-center gap-1.5 px-3.5 py-2 text-sm font-medium rounded-xl transition-all ${t===e.value?"bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm":"bg-muted/50 text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:[e.icon,e.label]},e.value))})}function sB({font:e,setFont:t,fontSize:s,setFontSize:n,contentWidth:o,setContentWidth:l,dark:i,setDark:d,locale:c,setLocale:u,t:m}){let[x,p]=(0,a.useState)(!1),[h,g]=(0,a.useState)(()=>localStorage.getItem("theme")??"system"),[f,b]=(0,a.useState)(()=>localStorage.getItem("locale")??"system"),v=m.settings.appearance;return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sD.A,{size:15}),title:v.readingTitle??"Reading",description:v.readingDesc??"Customize how your notes look",children:[(0,r.jsx)(sW,{icon:(0,r.jsx)(sP.A,{size:14}),label:v.readingFont,children:(0,r.jsx)("div",{className:"space-y-0.5",children:s_.map(s=>{let n=e===s.value;return(0,r.jsxs)("button",{type:"button",onClick:()=>t(s.value),className:`flex items-center gap-4 w-full px-3 py-2.5 rounded-lg transition-all text-left relative ${n?"bg-[var(--amber-subtle)]":"hover:bg-muted/50"}`,children:[n&&(0,r.jsx)("div",{className:"absolute left-0 top-2 bottom-2 w-[3px] rounded-r-full bg-[var(--amber)]"}),(0,r.jsx)("span",{className:`text-xl font-medium w-10 text-center shrink-0 ${n?"text-foreground":"text-muted-foreground/60"}`,style:{fontFamily:s.style.fontFamily},children:"Aa"}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,r.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,r.jsx)("span",{className:`text-sm font-medium ${n?"text-foreground":"text-muted-foreground"}`,style:{fontFamily:s.style.fontFamily},children:s.label}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground/50",children:s.category})]}),(0,r.jsx)("p",{className:`text-sm truncate mt-0.5 ${n?"text-muted-foreground":"text-muted-foreground/40"}`,style:{fontFamily:s.style.fontFamily},children:v.fontPreview})]})]},s.value)})})}),(0,r.jsx)(sW,{icon:(0,r.jsx)(sL.A,{size:14}),label:v.fontSize,children:(0,r.jsxs)("div",{className:"px-1",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"text-xs text-muted-foreground/60 shrink-0",style:{fontSize:"11px"},children:"A"}),(0,r.jsx)("input",{type:"range",min:14,max:17,step:1,value:parseInt(s),onChange:e=>n(`${e.target.value}px`),className:"flex-1 h-1.5 rounded-full appearance-none bg-muted cursor-pointer accent-[var(--amber)] [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-[var(--amber)] [&::-webkit-slider-thumb]:shadow-sm [&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:transition-transform [&::-webkit-slider-thumb]:hover:scale-110 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-[var(--amber)] [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:shadow-sm [&::-moz-range-thumb]:cursor-pointer"}),(0,r.jsx)("span",{className:"text-base text-muted-foreground/60 shrink-0",children:"A"})]}),(0,r.jsx)("div",{className:"text-center mt-1.5",children:(0,r.jsxs)("span",{className:"text-xs tabular-nums text-muted-foreground",children:[parseInt(s),"px"]})}),(0,r.jsx)("p",{className:"text-muted-foreground leading-relaxed mt-2 px-1",style:{fontSize:s,fontFamily:s_.find(t=>t.value===e)?.style.fontFamily},children:v.fontSizePreview})]})}),(0,r.jsx)(sW,{icon:(0,r.jsx)(sF.A,{size:14}),label:v.contentWidth,children:(0,r.jsx)("div",{className:"space-y-1",children:sO.map(e=>{let t=o===e.value;return(0,r.jsxs)("button",{type:"button",onClick:()=>l(e.value),className:`flex items-center gap-3 w-full px-3 py-2 rounded-lg transition-all ${t?"bg-[var(--amber-subtle)]":"hover:bg-muted/50"}`,children:[(0,r.jsx)("div",{className:"flex-1 h-2 rounded-full bg-muted/40 overflow-hidden",children:(0,r.jsx)("div",{className:`h-full rounded-full transition-all ${t?"bg-[var(--amber)]":"bg-muted-foreground/20"}`,style:{width:`${e.width}%`}})}),(0,r.jsx)("span",{className:`text-sm shrink-0 w-14 text-right ${t?"text-foreground font-medium":"text-muted-foreground"}`,children:e.label})]},e.value)})})})]}),(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sT.A,{size:15}),title:v.preferencesTitle??"Preferences",children:[(0,r.jsx)(sW,{icon:(0,r.jsx)(tp.A,{size:14}),label:v.colorTheme,children:(0,r.jsx)(sU,{options:[{value:"system",label:v.system,icon:(0,r.jsx)(sb.A,{size:14})},{value:"dark",label:v.dark,icon:(0,r.jsx)(sC.A,{size:14})},{value:"light",label:v.light,icon:(0,r.jsx)(tp.A,{size:14})}],value:h,onChange:e=>{g(e),localStorage.setItem("theme",e);let t="system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches:"dark"===e;d(t),document.documentElement.classList.toggle("dark",t)}})}),(0,r.jsx)(sW,{icon:(0,r.jsx)(eK.A,{size:14}),label:v.language,children:(0,r.jsx)(sU,{options:[{value:"system",label:v.system,icon:(0,r.jsx)(sb.A,{size:14})},{value:"en",label:"EN"},{value:"zh",label:"中文"}],value:f,onChange:e=>{b(e),localStorage.setItem("locale",e);let t="system"===e?navigator.language.startsWith("zh")?"zh":"en":e;u(t),document.cookie=`locale=${t};path=/;max-age=31536000;SameSite=Lax`}})})]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground/40 px-0.5",children:v.browserNote}),(0,r.jsxs)("div",{className:"border-t border-border pt-4",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>p(!x),className:"flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors",children:[x?(0,r.jsx)(en.A,{size:14}):(0,r.jsx)(j.A,{size:14}),m.settings.tabs.shortcuts]}),x&&(0,r.jsx)("div",{className:"mt-3 space-y-0.5",children:m.shortcuts.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center justify-between py-1.5 px-1",children:[(0,r.jsx)("span",{className:"text-sm text-foreground",children:e.description}),(0,r.jsx)("div",{className:"flex items-center gap-1",children:e.keys.map((e,t)=>(0,r.jsx)("kbd",{className:"px-1.5 py-0.5 text-2xs font-mono bg-muted border border-border rounded text-muted-foreground",children:e},t))})]},t))})]})]})}var sH=s(8195),sK=s(9114),sY=s(65576);function sJ(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:e<0x40000000?`${(e/1048576).toFixed(1)} MB`:`${(e/0x40000000).toFixed(2)} GB`}var sG=s(69335),sq=s(64576);function sV({data:e,setData:t,t:s}){let n=e.envOverrides??{},o=s.settings.knowledge,[l,i]=(0,a.useState)(()=>"true"===localStorage.getItem("show-hidden-files")),[d,c]=(0,a.useState)(null),[u,m]=(0,a.useState)(!1),[x,p]=(0,a.useState)(null);(0,a.useEffect)(()=>{(0,sG.D)().then(e=>c(e.files.length)).catch(e=>{console.warn("[KnowledgeTab] scanExampleFilesAction failed:",e)})},[]);let[h,g]=(0,a.useState)(null),[f,v]=(0,a.useState)(!1);(0,a.useEffect)(()=>{(0,w.n)("/api/setup").then(e=>{let t=e.guideState;t&&(g(t.active),v(!!t.dismissed))}).catch(e=>{console.error("Failed to fetch guide state:",e)})},[]);let j=(0,a.useCallback)(()=>{let e=!f;v(e);let t={dismissed:e};e||(t.active=!0),(0,w.n)("/api/setup",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({guideState:t})}).then(()=>window.dispatchEvent(new Event("guide-state-updated"))).catch(t=>{console.error("Failed to update guide state:",t),v(!e)})},[f]),y=(0,a.useCallback)(()=>{(0,w.n)("/api/setup",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({guideState:{active:!0,dismissed:!1,walkthroughStep:0,walkthroughDismissed:!1}})}).then(()=>{g(!0),v(!1),window.dispatchEvent(new Event("guide-state-updated"))}).catch(e=>console.error("Failed to restart walkthrough:",e))},[]),N=(0,a.useSyncExternalStore)(()=>()=>{},()=>`${window.location.protocol}//${window.location.hostname}`,()=>"http://localhost"),[k,S]=(0,a.useState)(!1),C="***set***"===e.webPassword,[A,z]=(0,a.useState)(!1),[$,R]=(0,a.useState)(null),[M,I]=(0,a.useState)(!1),[D,P]=(0,a.useState)(!1),L=!!e.authToken,F=$??e.authToken??"";async function O(){z(!0);try{let e=await (0,w.n)("/api/settings/reset-token",{method:"POST"});R(e.token),t(t=>t?{...t,authToken:e.token}:t)}finally{z(!1)}}async function _(){t(e=>e?{...e,authToken:""}:e),R(null)}return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sH.A,{size:15}),title:"Knowledge Base",description:o.sopRootHint,children:[(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[o.sopRoot," ",(0,r.jsx)(T.Bt,{overridden:n.MIND_ROOT})]}),hint:n.MIND_ROOT?o.envNote:o.sopRootHint,children:(0,r.jsx)(T.pd,{value:e.mindRoot,onChange:e=>t(t=>t?{...t,mindRoot:e.target.value}:t),placeholder:"/path/to/your/notes"})}),(0,r.jsx)(T.pM,{label:o.showHiddenFiles,hint:o.showHiddenFilesHint,children:(0,r.jsx)(T.lM,{checked:l,onChange:()=>{let e=!l;i(e),localStorage.setItem(ek,String(e)),window.dispatchEvent(new Event("mindos:hidden-files-changed"))}})}),null!==d&&d>0&&null===x&&(0,r.jsx)(T.pM,{label:o.cleanupExamples,hint:o.cleanupExamplesHint,children:(0,r.jsxs)("button",{onClick:()=>P(!0),disabled:u,title:u?s.hints.cleanupInProgress:void 0,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0 disabled:opacity-50",children:[u?(0,r.jsx)(E.A,{size:12,className:"animate-spin"}):(0,r.jsx)(er.A,{size:12}),o.cleanupExamplesButton,(0,r.jsx)("span",{className:"ml-1 tabular-nums text-2xs opacity-70",children:d})]})}),null!==x&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(e0.A,{size:14}),o.cleanupExamplesDone(x)]})]}),(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sK.A,{size:15}),title:"Security",children:[(0,r.jsx)(T.D0,{label:o.webPassword,hint:o.webPasswordHint,children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(T.pd,{type:k?"text":"password",value:C?"••••••••":e.webPassword??"",onChange:e=>t(t=>t?{...t,webPassword:e.target.value}:t),onFocus:()=>{C&&t(e=>e?{...e,webPassword:""}:e)},placeholder:"Leave empty to disable"}),(0,r.jsx)("button",{type:"button",onClick:()=>S(e=>!e),className:"px-3 py-2 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0",children:k?"Hide":"Show"})]})}),(0,r.jsx)(T.D0,{label:o.authToken,hint:L?o.authTokenHint:o.authTokenNone,children:(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 bg-background border border-border rounded-lg min-h-[38px]",children:[(0,r.jsx)("code",{className:"flex-1 text-xs font-mono text-foreground break-all select-all",children:F||(0,r.jsx)("span",{className:"text-muted-foreground italic",children:"— not set —"})}),F&&(0,r.jsx)("button",{type:"button",onClick:function(){let t=$??e.authToken??"";t&&(0,sj.l)(t).then(e=>{e&&ef.oR.copy()})},className:"shrink-0 p-1 rounded text-muted-foreground hover:text-foreground transition-colors",title:o.authTokenCopy,children:(0,r.jsx)(et.A,{size:13})})]}),e.mcpPort&&(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:[o.authTokenMcpPort,": ",(0,r.jsx)("code",{className:"font-mono",children:e.mcpPort}),F&&(0,r.jsxs)(r.Fragment,{children:[" \xa0\xb7\xa0 MCP URL: ",(0,r.jsx)("code",{className:"font-mono select-all",children:`${N}:${e.mcpPort}/mcp`})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsxs)("button",{type:"button",onClick:function(){I(!0)},disabled:A,title:A?s.hints.tokenResetInProgress:void 0,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:14,className:A?"animate-spin":""}),o.authTokenReset]}),L&&(0,r.jsxs)("button",{type:"button",onClick:_,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-destructive hover:border-destructive/50 transition-colors",children:[(0,r.jsx)(er.A,{size:14}),o.authTokenClear]})]}),$&&(0,r.jsx)("p",{className:"text-xs text-[var(--amber-text)]",children:"New token generated. Copy it now — it won't be shown in full again."})]})})]}),null!==h&&(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(tk.A,{size:15}),title:s.guide?.title??"Getting Started",children:[(0,r.jsx)(T.pM,{label:s.guide?.showGuide??"Show getting started guide",children:(0,r.jsx)(T.lM,{checked:!f,onChange:()=>j()})}),(0,r.jsxs)("button",{onClick:y,className:"flex items-center gap-1.5 mt-2 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(sS.A,{size:14}),o.restartWalkthrough??"Restart walkthrough"]})]}),(0,r.jsx)(sQ,{}),(0,r.jsx)(eb.TM,{open:M,title:o.authTokenReset??"Regenerate Token",message:o.authTokenResetConfirm,confirmLabel:o.authTokenReset??"Regenerate",cancelLabel:"Cancel",onConfirm:()=>{I(!1),O()},onCancel:()=>I(!1)}),(0,r.jsx)(eb.TM,{open:D,title:o.cleanupExamples??"Cleanup Examples",message:null!==d?o.cleanupExamplesConfirm(d):"",confirmLabel:o.cleanupExamplesButton??"Clean up",cancelLabel:"Cancel",variant:"destructive",onConfirm:async()=>{P(!1),m(!0);let e=await (0,sq.E)();m(!1),e.success&&(p(e.deleted),c(0))},onCancel:()=>P(!1)})]})}function sQ(){let[e,t]=(0,a.useState)(!1),[s,n]=(0,a.useState)(null),[o,l]=(0,a.useState)(!1),i=(0,a.useCallback)(async()=>{l(!0);try{let e=await (0,w.n)("/api/monitoring",{timeout:5e3});n(e)}catch{}l(!1)},[]),d=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{if(!e){d.current=!1;return}d.current||(i(),d.current=!0);let t=setInterval(i,1e4);return()=>clearInterval(t)},[e,i]),(0,r.jsxs)("div",{className:"border-t border-border pt-5",children:[(0,r.jsxs)("button",{onClick:()=>t(e=>!e),className:"flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors w-full",children:[e?(0,r.jsx)(en.A,{size:14}):(0,r.jsx)(j.A,{size:14}),(0,r.jsx)(sY.A,{size:12}),"System Monitoring",o&&(0,r.jsx)(E.A,{size:10,className:"animate-spin ml-1"})]}),e&&s&&(0,r.jsxs)("div",{className:"mt-3 grid grid-cols-2 gap-x-6 gap-y-2 text-xs",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Heap"}),(0,r.jsxs)("span",{className:"ml-2 tabular-nums",children:[sJ(s.system.memory.heapUsed)," / ",sJ(s.system.memory.heapTotal)]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"RSS"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:sJ(s.system.memory.rss)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Uptime"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:function(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let s=Math.floor(t/60);if(s<60)return`${s}m ${t%60}s`;let r=Math.floor(s/60);if(r<24)return`${r}h ${s%60}m`;let n=Math.floor(r/24);return`${n}d ${r%24}h`}(s.system.uptimeMs)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Node"}),(0,r.jsx)("span",{className:"ml-2",children:s.system.nodeVersion})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Requests"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:s.application.agentRequests})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Tool Calls"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:s.application.toolExecutions})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Tokens"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:(s.application.totalTokens.input+s.application.totalTokens.output).toLocaleString()})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Files"}),(0,r.jsxs)("span",{className:"ml-2 tabular-nums",children:[s.knowledgeBase.fileCount," (",sJ(s.knowledgeBase.totalSizeBytes),")"]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"MCP"}),(0,r.jsx)("span",{className:"ml-2",children:s.mcp.running?`Running :${s.mcp.port}`:"Stopped"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Errors"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:s.application.errors})]})]}),e&&!s&&!o&&(0,r.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"Failed to load monitoring data"})]})}var sX=s(27996);function sZ({agents:e,t,onRefresh:s}){let n=t.settings?.mcp,[o,l]=(0,a.useState)(new Set),[i,d]=(0,a.useState)("auto"),[c,u]=(0,a.useState)("http://localhost:8787/mcp"),[m,x]=(0,a.useState)(""),[p,h]=(0,a.useState)({}),[g,f]=(0,a.useState)(!1),[b,v]=(0,a.useState)(null),j=async()=>{if(0!==o.size){f(!0),v(null);try{let t={agents:[...o].map(t=>{let s=e.find(e=>e.key===t),r="auto"===i?s?.preferredTransport||"stdio":i;return{key:t,scope:p[t]||(s?.hasProjectScope?"project":"global"),transport:r}}),transport:i,..."http"===i?{url:c,token:m}:{},..."auto"===i?{url:c,token:m}:{}},r=await (0,w.n)("/api/mcp/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=r.results.filter(e=>"ok"===e.status).length,d=r.results.filter(e=>"error"===e.status);d.length>0?v({type:"error",text:d.map(e=>`${e.agent}: ${e.message}`).join("; ")}):v({type:"success",text:n?.installSuccess?n.installSuccess(a):`${a} agent(s) configured`}),l(new Set),s()}catch{v({type:"error",text:n?.installFailed??"Install failed"})}finally{f(!1),setTimeout(()=>v(null),4e3)}}},y="http"===i||"auto"===i&&[...o].some(t=>{let s=e.find(e=>e.key===t);return s?.preferredTransport==="http"});return(0,r.jsxs)("div",{className:"space-y-3 pt-2",children:[(0,r.jsx)("div",{className:"space-y-1",children:e.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-3 py-1.5 text-sm",children:[(0,r.jsx)("input",{type:"checkbox",checked:o.has(e.key),onChange:()=>{var t;return t=e.key,void l(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},className:"form-check"}),(0,r.jsx)("span",{className:"w-28 shrink-0 text-xs",children:e.name}),(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded font-mono bg-muted",children:"auto"===i?e.preferredTransport:i}),e.installed?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded bg-success/15 text-success font-mono",children:e.transport}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground",children:e.scope})]}):(0,r.jsx)("span",{className:"text-2xs text-muted-foreground",children:e.present?n?.detected??"Detected":n?.notFound??"Not found"}),o.has(e.key)&&e.hasProjectScope&&e.hasGlobalScope&&(0,r.jsx)(sX.A,{value:p[e.key]||"project",onChange:t=>h({...p,[e.key]:t}),size:"sm",className:"ml-auto",options:[{value:"project",label:n?.project??"Project"},{value:"global",label:n?.global??"Global"}]})]},e.key))}),(0,r.jsxs)("div",{className:"flex gap-2 text-xs pt-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>l(new Set(e.filter(e=>!e.installed&&e.present).map(e=>e.key))),className:"px-2.5 py-1 rounded-md border border-[var(--amber)] text-[var(--amber)] transition-colors hover:bg-muted/50",children:n?.selectDetected??"Select Detected"}),(0,r.jsx)("button",{type:"button",onClick:()=>l(new Set),className:"px-2.5 py-1 rounded-md border border-border text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",children:n?.clearSelection??"Clear"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-4 text-xs pt-1",children:[(0,r.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,r.jsx)("input",{type:"radio",name:"transport",checked:"auto"===i,onChange:()=>d("auto"),className:"form-radio"}),n?.transportAuto??"auto (recommended)"]}),(0,r.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,r.jsx)("input",{type:"radio",name:"transport",checked:"stdio"===i,onChange:()=>d("stdio"),className:"form-radio"}),n?.transportStdio??"stdio"]}),(0,r.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,r.jsx)("input",{type:"radio",name:"transport",checked:"http"===i,onChange:()=>d("http"),className:"form-radio"}),n?.transportHttp??"http"]})]}),y&&(0,r.jsxs)("div",{className:"space-y-2 pl-5 text-xs",children:[(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-muted-foreground",children:n?.httpUrl??"MCP URL"}),(0,r.jsx)("input",{type:"text",value:c,onChange:e=>u(e.target.value),className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background font-mono text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-muted-foreground",children:n?.httpToken??"Auth Token"}),(0,r.jsx)("input",{type:"password",value:m,onChange:e=>x(e.target.value),placeholder:"Bearer token",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background font-mono text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"})]})]}),(0,r.jsxs)("button",{onClick:j,disabled:0===o.size||g,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg transition-colors disabled:opacity-40 disabled:cursor-not-allowed bg-[var(--amber)] text-[var(--amber-foreground)]",children:[g&&(0,r.jsx)(E.A,{size:12,className:"animate-spin"}),g?n?.installing??"Installing...":n?.installSelected??"Install Selected"]}),b&&(0,r.jsx)("div",{className:"flex items-center gap-1.5 text-xs",role:"status",children:"success"===b.type?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:b.text})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:b.text})]})})]})}var s0=s(37206);let s1=(0,s0.default)(()=>Promise.all([s.e(3013),s.e(3637)]).then(s.bind(s,63637)),{loadableGenerated:{webpack:()=>[63637]},ssr:!1});function s2({skill:e,expanded:t,onExpand:s,onToggle:n,onDelete:a,onEditStart:o,onEditSave:l,onEditCancel:i,editing:d,editContent:c,setEditContent:u,editError:m,saving:x,fullContent:p,loadingContent:h,loadErrors:g,m:f}){return(0,r.jsxs)("div",{className:"border border-border rounded-lg overflow-hidden",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>s(e.name),children:[t?(0,r.jsx)(en.A,{size:12}):(0,r.jsx)(j.A,{size:12}),(0,r.jsx)("span",{className:"text-xs font-medium flex-1",children:e.name}),(0,r.jsx)("span",{className:`text-2xs px-1.5 py-0.5 rounded ${"builtin"===e.source?"bg-muted text-muted-foreground":"bg-[var(--amber-subtle)] text-[var(--amber-text)]"}`,children:"builtin"===e.source?f?.skillBuiltin??"Built-in":f?.skillUser??"Custom"}),(0,r.jsx)(T.lM,{size:"sm",checked:e.enabled,onClick:t=>{t.stopPropagation(),n(e.name,!e.enabled)}})]}),t&&(0,r.jsxs)("div",{className:"px-3 py-2 border-t border-border text-xs space-y-2 bg-muted/20",children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:e.description||"No description"}),(0,r.jsx)("p",{className:"text-muted-foreground font-mono text-2xs",children:e.path}),h===e.name?(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[(0,r.jsx)(E.A,{size:10,className:"animate-spin"}),(0,r.jsx)("span",{className:"text-2xs",children:"Loading..."})]}):p[e.name]?(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-2xs text-muted-foreground font-medium",children:f?.skillContent??"Content"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[e.editable&&d!==e.name&&(0,r.jsxs)("button",{onClick:()=>o(e.name),className:"flex items-center gap-1 text-2xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)(es.A,{size:10}),f?.editSkill??"Edit"]}),e.editable&&(0,r.jsxs)("button",{onClick:()=>a(e.name),className:"flex items-center gap-1 text-2xs text-destructive hover:underline",children:[(0,r.jsx)(er.A,{size:10}),f?.deleteSkill??"Delete"]})]})]}),d===e.name?(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("textarea",{value:c,onChange:e=>u(e.target.value),rows:Math.min(20,(c.match(/\n/g)||[]).length+3),className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring resize-y font-mono"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("button",{onClick:()=>l(e.name),disabled:x,className:"flex items-center gap-1 px-2.5 py-1 text-xs rounded-md disabled:opacity-40 disabled:cursor-not-allowed transition-colors bg-[var(--amber)] text-[var(--amber-foreground)]",children:[x&&(0,r.jsx)(E.A,{size:10,className:"animate-spin"}),f?.saveSkill??"Save"]}),(0,r.jsx)("button",{onClick:i,className:"px-2.5 py-1 text-xs rounded-md border border-border text-muted-foreground hover:text-foreground transition-colors",children:f?.cancelSkill??"Cancel"})]}),m&&(0,r.jsxs)("p",{className:"text-2xs text-destructive flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:10}),m]})]}):(0,r.jsx)("div",{className:"w-full rounded-md border border-border bg-background/50 max-h-[300px] overflow-y-auto px-2.5 py-1.5 text-xs [&_.prose]:max-w-none [&_.prose]:text-xs [&_h1]:text-sm [&_h2]:text-xs [&_h3]:text-xs [&_pre]:text-2xs [&_code]:text-2xs",children:(0,r.jsx)(s1,{content:function(e){if(!e.startsWith("---"))return e;let t=e.indexOf("\n---",3);return -1===t?e:e.slice(t+4).replace(/^\n+/,"")}(p[e.name])})})]}):g[e.name]?(0,r.jsxs)("p",{className:"text-2xs text-destructive flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:10}),g[e.name]]}):null]})]})}let s5=e=>`---
|
|
101
|
+
`,children:[(0,r.jsx)("span",{className:"text-muted-foreground shrink-0",children:e.icon}),(0,r.jsx)("span",{className:"text-sm text-foreground flex-1",children:e.label}),e.shortcut&&(0,r.jsx)("kbd",{className:"text-xs text-muted-foreground/60 font-mono border border-border rounded px-1.5 py-0.5",children:e.shortcut})]},e.id))})]})}):null}function sE({open:e,onClose:t,currentFile:s,initialMessage:n,initialAcpAgent:a,onFirstMessage:o,askMode:l,onModeSwitch:i}){let{t:d}=(0,y.Y)();return e?(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[10vh] modal-backdrop",onClick:e=>e.target===e.currentTarget&&t(),children:(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":d.ask.title,className:"w-full md:max-w-2xl md:mx-4 bg-card border-t md:border border-border rounded-t-2xl md:rounded-xl shadow-2xl flex flex-col h-[92vh] md:h-auto md:max-h-[75vh]",children:(0,r.jsx)(sh,{visible:e,variant:"modal",onClose:t,currentFile:s,initialMessage:n,initialAcpAgent:a,onFirstMessage:o,askMode:l,onModeSwitch:i})})}):null}var s$=s(68806),sT=s(6489);function sR({data:e,updateAi:t,updateAgent:s,t:n}){let o=e.envOverrides??{},l=e.envValues??{},i=e.ai.provider,[d,c]=(0,a.useState)({}),u=(0,a.useRef)(void 0),m=(0,a.useRef)(i);(0,a.useEffect)(()=>{m.current!==i&&(m.current=i,c({}),u.current&&(clearTimeout(u.current),u.current=void 0))},[i]),(0,a.useEffect)(()=>()=>{u.current&&clearTimeout(u.current)},[]),(0,a.useEffect)(()=>{let t=e.agent?.reconnectRetries??3;try{localStorage.setItem("mindos-reconnect-retries",String(t))}catch(e){console.warn("[AiTab] localStorage setItem reconnectRetries failed:",e)}},[e.agent?.reconnectRetries]);let x=(0,a.useCallback)(async t=>{let s=e.ai.providers?.[t]??{};c(e=>({...e,[t]:{state:"testing"}}));try{let e={provider:t};s.apiKey&&(e.apiKey=s.apiKey),s.model&&(e.model=s.model),"openai"===t&&s.baseUrl&&(e.baseUrl=s.baseUrl);let r=await fetch("/api/settings/test-key",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await r.json();n.ok?(c(e=>({...e,[t]:{state:"ok",latency:n.latency}})),u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{c(e=>({...e,[t]:{state:"idle"}}))},8e3)):c(e=>({...e,[t]:{state:"error",error:n.error,code:n.code}}))}catch{c(e=>({...e,[t]:{state:"error",code:"network_error",error:"Network error"}}))}},[e.ai.providers]),p=(0,a.useCallback)((s,r)=>{"apiKey"in r&&c(e=>({...e,[s]:{state:"idle"}})),t({providers:{...e.ai.providers,[s]:{...e.ai.providers?.[s],...r}}})},[e.ai.providers,t]),g=e.ai.providers?.anthropic??{apiKey:"",model:""},f=e.ai.providers?.openai??{apiKey:"",model:"",baseUrl:""},b="anthropic"===i?g.apiKey:f.apiKey,v="anthropic"===i?o.ANTHROPIC_API_KEY:o.OPENAI_API_KEY,j=(e,t,s)=>{let a=d[e]??{state:"idle"},o="testing"===a.state||!t&&!s;return(0,r.jsxs)("div",{className:"flex items-center gap-2 mt-1.5",children:[(0,r.jsx)("button",{type:"button",disabled:o,title:o?n.hints.testInProgressOrNoKey:void 0,onClick:()=>x(e),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:border-foreground/20 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:"testing"===a.state?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{size:12,className:"animate-spin"}),n.settings.ai.testKeyTesting]}):n.settings.ai.testKey}),"ok"===a.state&&null!=a.latency&&(0,r.jsx)("span",{className:"text-xs text-success",children:n.settings.ai.testKeyOk(a.latency)}),"error"===a.state&&(0,r.jsxs)("span",{className:"text-xs text-error",children:["✗ ",function(e,t){switch(t){case"auth_error":return e.settings.ai.testKeyAuthError;case"model_not_found":return e.settings.ai.testKeyModelNotFound;case"rate_limited":return e.settings.ai.testKeyRateLimited;case"network_error":return e.settings.ai.testKeyNetworkError;default:return e.settings.ai.testKeyUnknown}}(n,a.code)]})]})};return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(tk.A,{size:15}),title:n.settings.ai.provider,description:"anthropic"===i?"Anthropic Claude":"OpenAI / compatible",children:[(0,r.jsx)("div",{className:"flex gap-2",children:["anthropic","openai"].map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>t({provider:e}),className:`flex-1 flex items-center gap-2.5 px-3.5 py-2.5 rounded-lg border transition-all ${i===e?"border-[var(--amber)] bg-[var(--amber-subtle)] shadow-sm":"border-border/50 hover:border-border hover:bg-muted/30"}`,children:[(0,r.jsx)("span",{className:`text-sm font-medium ${i===e?"text-foreground":"text-muted-foreground"}`,children:"anthropic"===e?"Anthropic":"OpenAI"}),(0,r.jsx)(T.Bt,{overridden:o.AI_PROVIDER})]},e))}),"anthropic"===i?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.model," ",(0,r.jsx)(T.Bt,{overridden:o.ANTHROPIC_MODEL})]}),children:(0,r.jsx)(sM,{value:g.model,onChange:e=>{p("anthropic",{model:e})},placeholder:l.ANTHROPIC_MODEL||"claude-sonnet-4-6",provider:"anthropic",apiKey:g.apiKey,envKey:o.ANTHROPIC_API_KEY,t:n})}),(0,r.jsxs)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.apiKey," ",(0,r.jsx)(T.Bt,{overridden:o.ANTHROPIC_API_KEY})]}),hint:o.ANTHROPIC_API_KEY?n.settings.ai.envFieldNote("ANTHROPIC_API_KEY"):n.settings.ai.keyHint,children:[(0,r.jsx)(T.Ak,{value:g.apiKey,onChange:e=>{p("anthropic",{apiKey:e})}}),j("anthropic",!!g.apiKey,!!o.ANTHROPIC_API_KEY)]})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.model," ",(0,r.jsx)(T.Bt,{overridden:o.OPENAI_MODEL})]}),children:(0,r.jsx)(sM,{value:f.model,onChange:e=>{p("openai",{model:e})},placeholder:l.OPENAI_MODEL||"gpt-5.4",provider:"openai",apiKey:f.apiKey,envKey:o.OPENAI_API_KEY,baseUrl:f.baseUrl,t:n})}),(0,r.jsxs)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.apiKey," ",(0,r.jsx)(T.Bt,{overridden:o.OPENAI_API_KEY})]}),hint:o.OPENAI_API_KEY?n.settings.ai.envFieldNote("OPENAI_API_KEY"):n.settings.ai.keyHint,children:[(0,r.jsx)(T.Ak,{value:f.apiKey,onChange:e=>{p("openai",{apiKey:e})}}),j("openai",!!f.apiKey,!!o.OPENAI_API_KEY)]}),(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[n.settings.ai.baseUrl," ",(0,r.jsx)(T.Bt,{overridden:o.OPENAI_BASE_URL})]}),hint:n.settings.ai.baseUrlHint,children:(0,r.jsx)(T.pd,{value:f.baseUrl??"",onChange:e=>{p("openai",{baseUrl:e.target.value})},placeholder:l.OPENAI_BASE_URL||"https://api.openai.com/v1"})})]}),!b&&!v&&(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs text-destructive/80 bg-destructive/8 border border-destructive/20 rounded-lg px-3 py-2.5",children:[(0,r.jsx)(C.A,{size:13,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:n.settings.ai.noApiKey})]}),Object.values(o).some(Boolean)&&(0,r.jsxs)("div",{className:"flex items-start gap-2 text-xs text-[var(--amber)] bg-[var(--amber-subtle)] border border-[var(--amber)]/20 rounded-lg px-3 py-2.5",children:[(0,r.jsx)(C.A,{size:13,className:"shrink-0 mt-0.5"}),(0,r.jsx)("span",{children:n.settings.ai.envHint})]})]}),(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(h.A,{size:15}),title:n.settings.agent.title,description:n.settings.agent.subtitle??"Configure how the AI agent operates",children:[(0,r.jsx)(T.pM,{label:n.settings.agent.maxSteps,hint:n.settings.agent.maxStepsHint,children:(0,r.jsxs)(T.l6,{value:String(e.agent?.maxSteps??20),onChange:e=>s({maxSteps:Number(e.target.value)}),className:"w-20",children:[(0,r.jsx)("option",{value:"5",children:"5"}),(0,r.jsx)("option",{value:"10",children:"10"}),(0,r.jsx)("option",{value:"15",children:"15"}),(0,r.jsx)("option",{value:"20",children:"20"}),(0,r.jsx)("option",{value:"25",children:"25"}),(0,r.jsx)("option",{value:"30",children:"30"})]})}),(0,r.jsx)(T.pM,{label:n.settings.agent.contextStrategy,hint:n.settings.agent.contextStrategyHint,children:(0,r.jsxs)(T.l6,{value:e.agent?.contextStrategy??"auto",onChange:e=>s({contextStrategy:e.target.value}),className:"w-24",children:[(0,r.jsx)("option",{value:"auto",children:n.settings.agent.contextStrategyAuto}),(0,r.jsx)("option",{value:"off",children:n.settings.agent.contextStrategyOff})]})}),(0,r.jsx)(T.pM,{label:n.settings.agent.reconnectRetries,hint:n.settings.agent.reconnectRetriesHint,children:(0,r.jsxs)(T.l6,{value:String(e.agent?.reconnectRetries??3),onChange:e=>{let t=Number(e.target.value);s({reconnectRetries:t});try{localStorage.setItem("mindos-reconnect-retries",String(t))}catch(e){console.warn("[AiTab] localStorage setItem reconnectRetries failed:",e)}},className:"w-20",children:[(0,r.jsx)("option",{value:"0",children:"Off"}),(0,r.jsx)("option",{value:"1",children:"1"}),(0,r.jsx)("option",{value:"2",children:"2"}),(0,r.jsx)("option",{value:"3",children:"3"}),(0,r.jsx)("option",{value:"5",children:"5"}),(0,r.jsx)("option",{value:"10",children:"10"})]})}),"anthropic"===i&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(T.pM,{label:n.settings.agent.thinking,hint:n.settings.agent.thinkingHint,children:(0,r.jsx)(T.lM,{checked:e.agent?.enableThinking??!1,onChange:()=>s({enableThinking:!e.agent?.enableThinking})})}),e.agent?.enableThinking&&(0,r.jsx)(T.D0,{label:n.settings.agent.thinkingBudget,hint:n.settings.agent.thinkingBudgetHint,children:(0,r.jsx)(T.pd,{type:"number",value:String(e.agent?.thinkingBudget??5e3),onChange:e=>{let t=parseInt(e.target.value,10);isNaN(t)||s({thinkingBudget:Math.max(1e3,Math.min(5e4,t))})},min:1e3,max:5e4,step:1e3})})]})]}),(0,r.jsx)(sI,{})]})}function sM({value:e,onChange:t,placeholder:s,provider:n,apiKey:o,envKey:l,baseUrl:i,t:d}){let[c,u]=(0,a.useState)(null),[m,x]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),[g,f]=(0,a.useState)(""),b=(0,a.useRef)(null),v=!!o||!!l,j=(0,a.useCallback)(async()=>{if(!m){x(!0),f("");try{let e={provider:n};o&&(e.apiKey=o),i&&(e.baseUrl=i);let t=await fetch("/api/settings/list-models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();s.ok&&Array.isArray(s.models)?(u(s.models),h(!0)):f(s.error||"Failed to fetch models")}catch{f("Network error")}finally{x(!1)}}},[n,o,i,m]);return(0,a.useEffect)(()=>{if(p)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){b.current&&!b.current.contains(e.target)&&h(!1)}},[p]),(0,r.jsxs)("div",{ref:b,className:"relative",children:[(0,r.jsxs)("div",{className:"flex gap-1.5",children:[(0,r.jsx)(T.pd,{value:e,onChange:e=>t(e.target.value),placeholder:s,className:"flex-1"}),(0,r.jsxs)("button",{type:"button",disabled:!v||m,onClick:j,title:d.settings.ai.listModels,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:border-foreground/20 transition-colors disabled:opacity-40 disabled:cursor-not-allowed shrink-0",children:[m?(0,r.jsx)(E.A,{size:12,className:"animate-spin"}):(0,r.jsx)(en.A,{size:12}),d.settings.ai.listModels]})]}),g&&(0,r.jsx)("p",{className:"text-xs text-error mt-1",children:g}),p&&c&&c.length>0&&(0,r.jsx)("div",{className:"absolute z-50 mt-1 w-full max-h-48 overflow-y-auto rounded-lg border border-border bg-popover shadow-lg",children:c.map(s=>(0,r.jsx)("button",{type:"button",className:`w-full text-left px-3 py-1.5 text-sm hover:bg-accent transition-colors ${s===e?"bg-accent/60 font-medium":""}`,onClick:()=>{t(s),h(!1)},children:s},s))}),p&&c&&0===c.length&&(0,r.jsx)("div",{className:"absolute z-50 mt-1 w-full rounded-lg border border-border bg-popover shadow-lg px-3 py-2 text-xs text-muted-foreground",children:d.settings.ai.noModelsFound})]})}function sI(){let{t:e}=(0,y.Y)(),[t,s]=(0,a.useState)("panel");return(0,a.useEffect)(()=>{try{let e=localStorage.getItem("ask-mode");"popup"===e&&s("popup")}catch(e){console.warn("[AiTab] localStorage getItem ask-mode failed:",e)}},[]),(0,r.jsx)(T.L7,{icon:(0,r.jsx)(sb.A,{size:15}),title:e.settings.askDisplayMode?.label??"Display Mode",description:e.settings.askDisplayMode?.hint??"Side panel stays docked on the right. Popup opens a floating dialog.",children:(0,r.jsxs)(T.l6,{value:t,onChange:e=>(e=>{s(e);try{localStorage.setItem("ask-mode",e)}catch(e){console.warn("[AiTab] localStorage setItem ask-mode failed:",e)}window.dispatchEvent(new StorageEvent("storage",{key:"ask-mode",newValue:e}))})(e.target.value),children:[(0,r.jsx)("option",{value:"panel",children:e.settings.askDisplayMode?.panel??"Side Panel"}),(0,r.jsx)("option",{value:"popup",children:e.settings.askDisplayMode?.popup??"Popup"})]})})}var sD=s(97810),sP=s(24338),sL=s(88833),sF=s(91405);let sO=[{value:"680px",label:"Narrow",width:42},{value:"780px",label:"Default",width:56},{value:"960px",label:"Wide",width:75},{value:"100%",label:"Full",width:100}],s_=[{value:"lora",label:"Lora",category:"Serif",style:{fontFamily:"Lora, Georgia, serif"}},{value:"ibm-plex-sans",label:"IBM Plex Sans",category:"Sans",style:{fontFamily:"'IBM Plex Sans', sans-serif"}},{value:"geist",label:"Geist",category:"Sans",style:{fontFamily:"var(--font-geist-sans), sans-serif"}},{value:"ibm-plex-mono",label:"IBM Plex Mono",category:"Mono",style:{fontFamily:"'IBM Plex Mono', monospace"}}];function sW({icon:e,label:t,children:s}){return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:e}),(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:t})]}),s]})}function sU({options:e,value:t,onChange:s}){return(0,r.jsx)("div",{className:"flex gap-2",children:e.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>s(e.value),className:`flex items-center gap-1.5 px-3.5 py-2 text-sm font-medium rounded-xl transition-all ${t===e.value?"bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm":"bg-muted/50 text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:[e.icon,e.label]},e.value))})}function sB({font:e,setFont:t,fontSize:s,setFontSize:n,contentWidth:o,setContentWidth:l,dark:i,setDark:d,locale:c,setLocale:u,t:m}){let[x,p]=(0,a.useState)(!1),[h,g]=(0,a.useState)(()=>localStorage.getItem("theme")??"system"),[f,b]=(0,a.useState)(()=>localStorage.getItem("locale")??"system"),v=m.settings.appearance;return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sD.A,{size:15}),title:v.readingTitle??"Reading",description:v.readingDesc??"Customize how your notes look",children:[(0,r.jsx)(sW,{icon:(0,r.jsx)(sP.A,{size:14}),label:v.readingFont,children:(0,r.jsx)("div",{className:"space-y-0.5",children:s_.map(s=>{let n=e===s.value;return(0,r.jsxs)("button",{type:"button",onClick:()=>t(s.value),className:`flex items-center gap-4 w-full px-3 py-2.5 rounded-lg transition-all text-left relative ${n?"bg-[var(--amber-subtle)]":"hover:bg-muted/50"}`,children:[n&&(0,r.jsx)("div",{className:"absolute left-0 top-2 bottom-2 w-[3px] rounded-r-full bg-[var(--amber)]"}),(0,r.jsx)("span",{className:`text-xl font-medium w-10 text-center shrink-0 ${n?"text-foreground":"text-muted-foreground/60"}`,style:{fontFamily:s.style.fontFamily},children:"Aa"}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,r.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,r.jsx)("span",{className:`text-sm font-medium ${n?"text-foreground":"text-muted-foreground"}`,style:{fontFamily:s.style.fontFamily},children:s.label}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground/50",children:s.category})]}),(0,r.jsx)("p",{className:`text-sm truncate mt-0.5 ${n?"text-muted-foreground":"text-muted-foreground/40"}`,style:{fontFamily:s.style.fontFamily},children:v.fontPreview})]})]},s.value)})})}),(0,r.jsx)(sW,{icon:(0,r.jsx)(sL.A,{size:14}),label:v.fontSize,children:(0,r.jsxs)("div",{className:"px-1",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"text-xs text-muted-foreground/60 shrink-0",style:{fontSize:"11px"},children:"A"}),(0,r.jsx)("input",{type:"range",min:14,max:17,step:1,value:parseInt(s),onChange:e=>n(`${e.target.value}px`),className:"flex-1 h-1.5 rounded-full appearance-none bg-muted cursor-pointer accent-[var(--amber)] [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-[var(--amber)] [&::-webkit-slider-thumb]:shadow-sm [&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:transition-transform [&::-webkit-slider-thumb]:hover:scale-110 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-[var(--amber)] [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:shadow-sm [&::-moz-range-thumb]:cursor-pointer"}),(0,r.jsx)("span",{className:"text-base text-muted-foreground/60 shrink-0",children:"A"})]}),(0,r.jsx)("div",{className:"text-center mt-1.5",children:(0,r.jsxs)("span",{className:"text-xs tabular-nums text-muted-foreground",children:[parseInt(s),"px"]})}),(0,r.jsx)("p",{className:"text-muted-foreground leading-relaxed mt-2 px-1",style:{fontSize:s,fontFamily:s_.find(t=>t.value===e)?.style.fontFamily},children:v.fontSizePreview})]})}),(0,r.jsx)(sW,{icon:(0,r.jsx)(sF.A,{size:14}),label:v.contentWidth,children:(0,r.jsx)("div",{className:"space-y-1",children:sO.map(e=>{let t=o===e.value;return(0,r.jsxs)("button",{type:"button",onClick:()=>l(e.value),className:`flex items-center gap-3 w-full px-3 py-2 rounded-lg transition-all ${t?"bg-[var(--amber-subtle)]":"hover:bg-muted/50"}`,children:[(0,r.jsx)("div",{className:"flex-1 h-2 rounded-full bg-muted/40 overflow-hidden",children:(0,r.jsx)("div",{className:`h-full rounded-full transition-all ${t?"bg-[var(--amber)]":"bg-muted-foreground/20"}`,style:{width:`${e.width}%`}})}),(0,r.jsx)("span",{className:`text-sm shrink-0 w-14 text-right ${t?"text-foreground font-medium":"text-muted-foreground"}`,children:e.label})]},e.value)})})})]}),(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sT.A,{size:15}),title:v.preferencesTitle??"Preferences",children:[(0,r.jsx)(sW,{icon:(0,r.jsx)(tp.A,{size:14}),label:v.colorTheme,children:(0,r.jsx)(sU,{options:[{value:"system",label:v.system,icon:(0,r.jsx)(sb.A,{size:14})},{value:"dark",label:v.dark,icon:(0,r.jsx)(sC.A,{size:14})},{value:"light",label:v.light,icon:(0,r.jsx)(tp.A,{size:14})}],value:h,onChange:e=>{g(e),localStorage.setItem("theme",e);let t="system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches:"dark"===e;d(t),document.documentElement.classList.toggle("dark",t)}})}),(0,r.jsx)(sW,{icon:(0,r.jsx)(eK.A,{size:14}),label:v.language,children:(0,r.jsx)(sU,{options:[{value:"system",label:v.system,icon:(0,r.jsx)(sb.A,{size:14})},{value:"en",label:"EN"},{value:"zh",label:"中文"}],value:f,onChange:e=>{b(e),localStorage.setItem("locale",e);let t="system"===e?navigator.language.startsWith("zh")?"zh":"en":e;u(t),document.cookie=`locale=${t};path=/;max-age=31536000;SameSite=Lax`}})})]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground/40 px-0.5",children:v.browserNote}),(0,r.jsxs)("div",{className:"border-t border-border pt-4",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>p(!x),className:"flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors",children:[x?(0,r.jsx)(en.A,{size:14}):(0,r.jsx)(j.A,{size:14}),m.settings.tabs.shortcuts]}),x&&(0,r.jsx)("div",{className:"mt-3 space-y-0.5",children:m.shortcuts.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center justify-between py-1.5 px-1",children:[(0,r.jsx)("span",{className:"text-sm text-foreground",children:e.description}),(0,r.jsx)("div",{className:"flex items-center gap-1",children:e.keys.map((e,t)=>(0,r.jsx)("kbd",{className:"px-1.5 py-0.5 text-2xs font-mono bg-muted border border-border rounded text-muted-foreground",children:e},t))})]},t))})]})]})}var sH=s(8195),sK=s(9114),sY=s(65576);function sJ(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:e<0x40000000?`${(e/1048576).toFixed(1)} MB`:`${(e/0x40000000).toFixed(2)} GB`}var sG=s(14399),sq=s(33229);function sV({data:e,setData:t,t:s}){let n=e.envOverrides??{},o=s.settings.knowledge,[l,i]=(0,a.useState)(()=>"true"===localStorage.getItem("show-hidden-files")),[d,c]=(0,a.useState)(null),[u,m]=(0,a.useState)(!1),[x,p]=(0,a.useState)(null);(0,a.useEffect)(()=>{(0,sG.D)().then(e=>c(e.files.length)).catch(e=>{console.warn("[KnowledgeTab] scanExampleFilesAction failed:",e)})},[]);let[h,g]=(0,a.useState)(null),[f,v]=(0,a.useState)(!1);(0,a.useEffect)(()=>{(0,w.n)("/api/setup").then(e=>{let t=e.guideState;t&&(g(t.active),v(!!t.dismissed))}).catch(e=>{console.error("Failed to fetch guide state:",e)})},[]);let j=(0,a.useCallback)(()=>{let e=!f;v(e);let t={dismissed:e};e||(t.active=!0),(0,w.n)("/api/setup",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({guideState:t})}).then(()=>window.dispatchEvent(new Event("guide-state-updated"))).catch(t=>{console.error("Failed to update guide state:",t),v(!e)})},[f]),y=(0,a.useCallback)(()=>{(0,w.n)("/api/setup",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({guideState:{active:!0,dismissed:!1,walkthroughStep:0,walkthroughDismissed:!1}})}).then(()=>{g(!0),v(!1),window.dispatchEvent(new Event("guide-state-updated"))}).catch(e=>console.error("Failed to restart walkthrough:",e))},[]),N=(0,a.useSyncExternalStore)(()=>()=>{},()=>`${window.location.protocol}//${window.location.hostname}`,()=>"http://localhost"),[k,S]=(0,a.useState)(!1),C="***set***"===e.webPassword,[A,z]=(0,a.useState)(!1),[$,R]=(0,a.useState)(null),[M,I]=(0,a.useState)(!1),[D,P]=(0,a.useState)(!1),L=!!e.authToken,F=$??e.authToken??"";async function O(){z(!0);try{let e=await (0,w.n)("/api/settings/reset-token",{method:"POST"});R(e.token),t(t=>t?{...t,authToken:e.token}:t)}finally{z(!1)}}async function _(){t(e=>e?{...e,authToken:""}:e),R(null)}return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sH.A,{size:15}),title:"Knowledge Base",description:o.sopRootHint,children:[(0,r.jsx)(T.D0,{label:(0,r.jsxs)(r.Fragment,{children:[o.sopRoot," ",(0,r.jsx)(T.Bt,{overridden:n.MIND_ROOT})]}),hint:n.MIND_ROOT?o.envNote:o.sopRootHint,children:(0,r.jsx)(T.pd,{value:e.mindRoot,onChange:e=>t(t=>t?{...t,mindRoot:e.target.value}:t),placeholder:"/path/to/your/notes"})}),(0,r.jsx)(T.pM,{label:o.showHiddenFiles,hint:o.showHiddenFilesHint,children:(0,r.jsx)(T.lM,{checked:l,onChange:()=>{let e=!l;i(e),localStorage.setItem(ek,String(e)),window.dispatchEvent(new Event("mindos:hidden-files-changed"))}})}),null!==d&&d>0&&null===x&&(0,r.jsx)(T.pM,{label:o.cleanupExamples,hint:o.cleanupExamplesHint,children:(0,r.jsxs)("button",{onClick:()=>P(!0),disabled:u,title:u?s.hints.cleanupInProgress:void 0,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0 disabled:opacity-50",children:[u?(0,r.jsx)(E.A,{size:12,className:"animate-spin"}):(0,r.jsx)(er.A,{size:12}),o.cleanupExamplesButton,(0,r.jsx)("span",{className:"ml-1 tabular-nums text-2xs opacity-70",children:d})]})}),null!==x&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(e0.A,{size:14}),o.cleanupExamplesDone(x)]})]}),(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(sK.A,{size:15}),title:"Security",children:[(0,r.jsx)(T.D0,{label:o.webPassword,hint:o.webPasswordHint,children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(T.pd,{type:k?"text":"password",value:C?"••••••••":e.webPassword??"",onChange:e=>t(t=>t?{...t,webPassword:e.target.value}:t),onFocus:()=>{C&&t(e=>e?{...e,webPassword:""}:e)},placeholder:"Leave empty to disable"}),(0,r.jsx)("button",{type:"button",onClick:()=>S(e=>!e),className:"px-3 py-2 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0",children:k?"Hide":"Show"})]})}),(0,r.jsx)(T.D0,{label:o.authToken,hint:L?o.authTokenHint:o.authTokenNone,children:(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 bg-background border border-border rounded-lg min-h-[38px]",children:[(0,r.jsx)("code",{className:"flex-1 text-xs font-mono text-foreground break-all select-all",children:F||(0,r.jsx)("span",{className:"text-muted-foreground italic",children:"— not set —"})}),F&&(0,r.jsx)("button",{type:"button",onClick:function(){let t=$??e.authToken??"";t&&(0,sj.l)(t).then(e=>{e&&ef.oR.copy()})},className:"shrink-0 p-1 rounded text-muted-foreground hover:text-foreground transition-colors",title:o.authTokenCopy,children:(0,r.jsx)(et.A,{size:13})})]}),e.mcpPort&&(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:[o.authTokenMcpPort,": ",(0,r.jsx)("code",{className:"font-mono",children:e.mcpPort}),F&&(0,r.jsxs)(r.Fragment,{children:[" \xa0\xb7\xa0 MCP URL: ",(0,r.jsx)("code",{className:"font-mono select-all",children:`${N}:${e.mcpPort}/mcp`})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsxs)("button",{type:"button",onClick:function(){I(!0)},disabled:A,title:A?s.hints.tokenResetInProgress:void 0,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:14,className:A?"animate-spin":""}),o.authTokenReset]}),L&&(0,r.jsxs)("button",{type:"button",onClick:_,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-destructive hover:border-destructive/50 transition-colors",children:[(0,r.jsx)(er.A,{size:14}),o.authTokenClear]})]}),$&&(0,r.jsx)("p",{className:"text-xs text-[var(--amber-text)]",children:"New token generated. Copy it now — it won't be shown in full again."})]})})]}),null!==h&&(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(tk.A,{size:15}),title:s.guide?.title??"Getting Started",children:[(0,r.jsx)(T.pM,{label:s.guide?.showGuide??"Show getting started guide",children:(0,r.jsx)(T.lM,{checked:!f,onChange:()=>j()})}),(0,r.jsxs)("button",{onClick:y,className:"flex items-center gap-1.5 mt-2 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(sS.A,{size:14}),o.restartWalkthrough??"Restart walkthrough"]})]}),(0,r.jsx)(sQ,{}),(0,r.jsx)(eb.TM,{open:M,title:o.authTokenReset??"Regenerate Token",message:o.authTokenResetConfirm,confirmLabel:o.authTokenReset??"Regenerate",cancelLabel:"Cancel",onConfirm:()=>{I(!1),O()},onCancel:()=>I(!1)}),(0,r.jsx)(eb.TM,{open:D,title:o.cleanupExamples??"Cleanup Examples",message:null!==d?o.cleanupExamplesConfirm(d):"",confirmLabel:o.cleanupExamplesButton??"Clean up",cancelLabel:"Cancel",variant:"destructive",onConfirm:async()=>{P(!1),m(!0);let e=await (0,sq.E)();m(!1),e.success&&(p(e.deleted),c(0))},onCancel:()=>P(!1)})]})}function sQ(){let[e,t]=(0,a.useState)(!1),[s,n]=(0,a.useState)(null),[o,l]=(0,a.useState)(!1),i=(0,a.useCallback)(async()=>{l(!0);try{let e=await (0,w.n)("/api/monitoring",{timeout:5e3});n(e)}catch{}l(!1)},[]),d=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{if(!e){d.current=!1;return}d.current||(i(),d.current=!0);let t=setInterval(i,1e4);return()=>clearInterval(t)},[e,i]),(0,r.jsxs)("div",{className:"border-t border-border pt-5",children:[(0,r.jsxs)("button",{onClick:()=>t(e=>!e),className:"flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors w-full",children:[e?(0,r.jsx)(en.A,{size:14}):(0,r.jsx)(j.A,{size:14}),(0,r.jsx)(sY.A,{size:12}),"System Monitoring",o&&(0,r.jsx)(E.A,{size:10,className:"animate-spin ml-1"})]}),e&&s&&(0,r.jsxs)("div",{className:"mt-3 grid grid-cols-2 gap-x-6 gap-y-2 text-xs",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Heap"}),(0,r.jsxs)("span",{className:"ml-2 tabular-nums",children:[sJ(s.system.memory.heapUsed)," / ",sJ(s.system.memory.heapTotal)]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"RSS"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:sJ(s.system.memory.rss)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Uptime"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:function(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let s=Math.floor(t/60);if(s<60)return`${s}m ${t%60}s`;let r=Math.floor(s/60);if(r<24)return`${r}h ${s%60}m`;let n=Math.floor(r/24);return`${n}d ${r%24}h`}(s.system.uptimeMs)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Node"}),(0,r.jsx)("span",{className:"ml-2",children:s.system.nodeVersion})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Requests"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:s.application.agentRequests})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Tool Calls"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:s.application.toolExecutions})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Tokens"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:(s.application.totalTokens.input+s.application.totalTokens.output).toLocaleString()})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Files"}),(0,r.jsxs)("span",{className:"ml-2 tabular-nums",children:[s.knowledgeBase.fileCount," (",sJ(s.knowledgeBase.totalSizeBytes),")"]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"MCP"}),(0,r.jsx)("span",{className:"ml-2",children:s.mcp.running?`Running :${s.mcp.port}`:"Stopped"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"Errors"}),(0,r.jsx)("span",{className:"ml-2 tabular-nums",children:s.application.errors})]})]}),e&&!s&&!o&&(0,r.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"Failed to load monitoring data"})]})}var sX=s(27996);function sZ({agents:e,t,onRefresh:s}){let n=t.settings?.mcp,[o,l]=(0,a.useState)(new Set),[i,d]=(0,a.useState)("auto"),[c,u]=(0,a.useState)("http://localhost:8787/mcp"),[m,x]=(0,a.useState)(""),[p,h]=(0,a.useState)({}),[g,f]=(0,a.useState)(!1),[b,v]=(0,a.useState)(null),j=async()=>{if(0!==o.size){f(!0),v(null);try{let t={agents:[...o].map(t=>{let s=e.find(e=>e.key===t),r="auto"===i?s?.preferredTransport||"stdio":i;return{key:t,scope:p[t]||(s?.hasProjectScope?"project":"global"),transport:r}}),transport:i,..."http"===i?{url:c,token:m}:{},..."auto"===i?{url:c,token:m}:{}},r=await (0,w.n)("/api/mcp/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=r.results.filter(e=>"ok"===e.status).length,d=r.results.filter(e=>"error"===e.status);d.length>0?v({type:"error",text:d.map(e=>`${e.agent}: ${e.message}`).join("; ")}):v({type:"success",text:n?.installSuccess?n.installSuccess(a):`${a} agent(s) configured`}),l(new Set),s()}catch{v({type:"error",text:n?.installFailed??"Install failed"})}finally{f(!1),setTimeout(()=>v(null),4e3)}}},y="http"===i||"auto"===i&&[...o].some(t=>{let s=e.find(e=>e.key===t);return s?.preferredTransport==="http"});return(0,r.jsxs)("div",{className:"space-y-3 pt-2",children:[(0,r.jsx)("div",{className:"space-y-1",children:e.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-3 py-1.5 text-sm",children:[(0,r.jsx)("input",{type:"checkbox",checked:o.has(e.key),onChange:()=>{var t;return t=e.key,void l(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},className:"form-check"}),(0,r.jsx)("span",{className:"w-28 shrink-0 text-xs",children:e.name}),(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded font-mono bg-muted",children:"auto"===i?e.preferredTransport:i}),e.installed?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded bg-success/15 text-success font-mono",children:e.transport}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground",children:e.scope})]}):(0,r.jsx)("span",{className:"text-2xs text-muted-foreground",children:e.present?n?.detected??"Detected":n?.notFound??"Not found"}),o.has(e.key)&&e.hasProjectScope&&e.hasGlobalScope&&(0,r.jsx)(sX.A,{value:p[e.key]||"project",onChange:t=>h({...p,[e.key]:t}),size:"sm",className:"ml-auto",options:[{value:"project",label:n?.project??"Project"},{value:"global",label:n?.global??"Global"}]})]},e.key))}),(0,r.jsxs)("div",{className:"flex gap-2 text-xs pt-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>l(new Set(e.filter(e=>!e.installed&&e.present).map(e=>e.key))),className:"px-2.5 py-1 rounded-md border border-[var(--amber)] text-[var(--amber)] transition-colors hover:bg-muted/50",children:n?.selectDetected??"Select Detected"}),(0,r.jsx)("button",{type:"button",onClick:()=>l(new Set),className:"px-2.5 py-1 rounded-md border border-border text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground",children:n?.clearSelection??"Clear"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-4 text-xs pt-1",children:[(0,r.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,r.jsx)("input",{type:"radio",name:"transport",checked:"auto"===i,onChange:()=>d("auto"),className:"form-radio"}),n?.transportAuto??"auto (recommended)"]}),(0,r.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,r.jsx)("input",{type:"radio",name:"transport",checked:"stdio"===i,onChange:()=>d("stdio"),className:"form-radio"}),n?.transportStdio??"stdio"]}),(0,r.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,r.jsx)("input",{type:"radio",name:"transport",checked:"http"===i,onChange:()=>d("http"),className:"form-radio"}),n?.transportHttp??"http"]})]}),y&&(0,r.jsxs)("div",{className:"space-y-2 pl-5 text-xs",children:[(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-muted-foreground",children:n?.httpUrl??"MCP URL"}),(0,r.jsx)("input",{type:"text",value:c,onChange:e=>u(e.target.value),className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background font-mono text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-muted-foreground",children:n?.httpToken??"Auth Token"}),(0,r.jsx)("input",{type:"password",value:m,onChange:e=>x(e.target.value),placeholder:"Bearer token",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background font-mono text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"})]})]}),(0,r.jsxs)("button",{onClick:j,disabled:0===o.size||g,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg transition-colors disabled:opacity-40 disabled:cursor-not-allowed bg-[var(--amber)] text-[var(--amber-foreground)]",children:[g&&(0,r.jsx)(E.A,{size:12,className:"animate-spin"}),g?n?.installing??"Installing...":n?.installSelected??"Install Selected"]}),b&&(0,r.jsx)("div",{className:"flex items-center gap-1.5 text-xs",role:"status",children:"success"===b.type?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:b.text})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:b.text})]})})]})}var s0=s(37206);let s1=(0,s0.default)(()=>Promise.all([s.e(3013),s.e(3637)]).then(s.bind(s,63637)),{loadableGenerated:{webpack:()=>[63637]},ssr:!1});function s2({skill:e,expanded:t,onExpand:s,onToggle:n,onDelete:a,onEditStart:o,onEditSave:l,onEditCancel:i,editing:d,editContent:c,setEditContent:u,editError:m,saving:x,fullContent:p,loadingContent:h,loadErrors:g,m:f}){return(0,r.jsxs)("div",{className:"border border-border rounded-lg overflow-hidden",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>s(e.name),children:[t?(0,r.jsx)(en.A,{size:12}):(0,r.jsx)(j.A,{size:12}),(0,r.jsx)("span",{className:"text-xs font-medium flex-1",children:e.name}),(0,r.jsx)("span",{className:`text-2xs px-1.5 py-0.5 rounded ${"builtin"===e.source?"bg-muted text-muted-foreground":"bg-[var(--amber-subtle)] text-[var(--amber-text)]"}`,children:"builtin"===e.source?f?.skillBuiltin??"Built-in":f?.skillUser??"Custom"}),(0,r.jsx)(T.lM,{size:"sm",checked:e.enabled,onClick:t=>{t.stopPropagation(),n(e.name,!e.enabled)}})]}),t&&(0,r.jsxs)("div",{className:"px-3 py-2 border-t border-border text-xs space-y-2 bg-muted/20",children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:e.description||"No description"}),(0,r.jsx)("p",{className:"text-muted-foreground font-mono text-2xs",children:e.path}),h===e.name?(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[(0,r.jsx)(E.A,{size:10,className:"animate-spin"}),(0,r.jsx)("span",{className:"text-2xs",children:"Loading..."})]}):p[e.name]?(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-2xs text-muted-foreground font-medium",children:f?.skillContent??"Content"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[e.editable&&d!==e.name&&(0,r.jsxs)("button",{onClick:()=>o(e.name),className:"flex items-center gap-1 text-2xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)(es.A,{size:10}),f?.editSkill??"Edit"]}),e.editable&&(0,r.jsxs)("button",{onClick:()=>a(e.name),className:"flex items-center gap-1 text-2xs text-destructive hover:underline",children:[(0,r.jsx)(er.A,{size:10}),f?.deleteSkill??"Delete"]})]})]}),d===e.name?(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("textarea",{value:c,onChange:e=>u(e.target.value),rows:Math.min(20,(c.match(/\n/g)||[]).length+3),className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring resize-y font-mono"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("button",{onClick:()=>l(e.name),disabled:x,className:"flex items-center gap-1 px-2.5 py-1 text-xs rounded-md disabled:opacity-40 disabled:cursor-not-allowed transition-colors bg-[var(--amber)] text-[var(--amber-foreground)]",children:[x&&(0,r.jsx)(E.A,{size:10,className:"animate-spin"}),f?.saveSkill??"Save"]}),(0,r.jsx)("button",{onClick:i,className:"px-2.5 py-1 text-xs rounded-md border border-border text-muted-foreground hover:text-foreground transition-colors",children:f?.cancelSkill??"Cancel"})]}),m&&(0,r.jsxs)("p",{className:"text-2xs text-destructive flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:10}),m]})]}):(0,r.jsx)("div",{className:"w-full rounded-md border border-border bg-background/50 max-h-[300px] overflow-y-auto px-2.5 py-1.5 text-xs [&_.prose]:max-w-none [&_.prose]:text-xs [&_h1]:text-sm [&_h2]:text-xs [&_h3]:text-xs [&_pre]:text-2xs [&_code]:text-2xs",children:(0,r.jsx)(s1,{content:function(e){if(!e.startsWith("---"))return e;let t=e.indexOf("\n---",3);return -1===t?e:e.slice(t+4).replace(/^\n+/,"")}(p[e.name])})})]}):g[e.name]?(0,r.jsxs)("p",{className:"text-2xs text-destructive flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:10}),g[e.name]]}):null]})]})}let s5=e=>`---
|
|
64
102
|
name: ${e}
|
|
65
103
|
description: >
|
|
66
104
|
Describe WHEN the agent should use this
|
|
@@ -107,12 +145,12 @@ description: >
|
|
|
107
145
|
|
|
108
146
|
## Rollback
|
|
109
147
|
<!-- What to do on failure -->
|
|
110
|
-
`};function s4({onSave:e,onCancel:t,saving:s,error:n,m:o}){let[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[m,x]=(0,a.useState)("general"),p=(e,t)=>(s3[t||m]||s3.general)(e||"my-skill");return(0,r.jsxs)("div",{className:"border border-border rounded-lg p-3 space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-xs font-medium",children:o?.addSkill??"+ Add Skill"}),(0,r.jsx)("button",{onClick:t,className:"p-0.5 rounded hover:bg-muted text-muted-foreground",children:(0,r.jsx)(u.A,{size:12})})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-2xs text-muted-foreground",children:o?.skillName??"Name"}),(0,r.jsx)("input",{type:"text",value:l,onChange:e=>{let t,s;return t=e.target.value.toLowerCase().replace(/[^a-z0-9-]/g,""),s=p(l||"my-skill"),void((!d||d===s)&&c(p(t||"my-skill")),i(t))},placeholder:"my-skill",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background font-mono text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-2xs text-muted-foreground",children:o?.skillTemplate??"Template"}),(0,r.jsx)("div",{className:"flex rounded-md border border-border overflow-hidden w-fit",children:["general","tool-use","workflow"].map((e,t)=>(0,r.jsx)("button",{onClick:()=>{let t;return t=p(l||"my-skill",m),void(x(e),(!d||d===t)&&c(p(l||"my-skill",e)))},className:`px-2.5 py-1 text-xs transition-colors ${t>0?"border-l border-border":""} ${m===e?"bg-[var(--amber-subtle)] text-[var(--amber-text)] font-medium":"text-muted-foreground hover:bg-muted"}`,children:"general"===e?o?.skillTemplateGeneral??"General":"tool-use"===e?o?.skillTemplateToolUse??"Tool-use":o?.skillTemplateWorkflow??"Workflow"},e))})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-2xs text-muted-foreground",children:o?.skillContent??"Content"}),(0,r.jsx)("textarea",{value:d||p(l||"my-skill"),onChange:e=>c(e.target.value),rows:16,placeholder:"Skill instructions (markdown)...",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring resize-y font-mono"})]}),n&&(0,r.jsxs)("p",{className:"text-2xs text-destructive flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:10}),n]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("button",{onClick:()=>e(l.trim(),d||p(l.trim()||"my-skill")),disabled:!l.trim()||s,className:"flex items-center gap-1 px-2.5 py-1 text-xs rounded-md disabled:opacity-40 disabled:cursor-not-allowed transition-colors bg-[var(--amber)] text-[var(--amber-foreground)]",children:[s&&(0,r.jsx)(E.A,{size:10,className:"animate-spin"}),o?.saveSkill??"Save"]}),(0,r.jsx)("button",{onClick:t,className:"px-2.5 py-1 text-xs rounded-md border border-border text-muted-foreground hover:text-foreground transition-colors",children:o?.cancelSkill??"Cancel"})]})]})}function s6({t:e}){let t,s,n=e.settings?.mcp,o=(0,eY.cd)(),[l,i]=(0,a.useState)([]),[c,m]=(0,a.useState)(!0),[x,p]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[v,y]=(0,a.useState)(""),[N,k]=(0,a.useState)(""),[S,C]=(0,a.useState)(!1),[A,z]=(0,a.useState)(null),[$,T]=(0,a.useState)(""),[R,M]=(0,a.useState)(""),[I,D]=(0,a.useState)({}),[P,L]=(0,a.useState)(null),[F,O]=(0,a.useState)({}),[_,W]=(0,a.useState)(!1),[U,B]=(0,a.useState)(null),H=(0,a.useCallback)(async()=>{try{let e=await (0,w.n)("/api/skills");i(e.skills),O({})}catch(t){let e=t instanceof Error?t.message:"Failed to load skills";console.error("fetchSkills error:",e),O(t=>({...t,_root:e}))}m(!1)},[]);(0,a.useEffect)(()=>{H()},[H]);let Y=(0,a.useMemo)(()=>{if(!N)return l;let e=N.toLowerCase();return l.filter(t=>t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e))},[l,N]),J=(0,a.useMemo)(()=>Y.filter(e=>"user"===e.source),[Y]),G=(0,a.useMemo)(()=>Y.filter(e=>"builtin"===e.source),[Y]),q=async(e,t)=>{if(o){await o.toggleSkill(e,t),i(s=>s.map(s=>s.name===e?{...s,enabled:t}:s));return}try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"toggle",name:e,enabled:t})}),i(s=>s.map(s=>s.name===e?{...s,enabled:t}:s)),O(t=>{let s={...t};return delete s[e],s})}catch(s){let t=s instanceof Error?s.message:"Failed to toggle skill";console.error("handleToggle error:",t),O(s=>({...s,[e]:t}))}},V=e=>{B(e)},Q=async e=>{try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",name:e})}),D(t=>{let s={...t};return delete s[e],s}),A===e&&z(null),x===e&&p(null),O(t=>{let s={...t};return delete s[e],s}),H(),window.dispatchEvent(new Event("mindos:skills-changed"))}catch(s){let t=s instanceof Error?s.message:"Failed to delete skill";console.error("handleDelete error:",t),O(s=>({...s,[e]:t}))}},X=async e=>{if(!I[e]){L(e);try{let t=await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"read",name:e})});D(s=>({...s,[e]:t.content})),O(t=>{let s={...t};return delete s[e],s})}catch(t){O(s=>({...s,[e]:t instanceof Error?t.message:"Failed to load skill content"}))}finally{L(null)}}},Z=e=>{let t=x===e?null:e;p(t),t&&X(e),A&&A!==e&&z(null)},ee=e=>{z(e),T(I[e]||""),M("")},et=async e=>{b(!0),M("");try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"update",name:e,content:$})}),D(t=>({...t,[e]:$})),z(null),H(),window.dispatchEvent(new Event("mindos:skills-changed"))}catch(e){M(e instanceof Error?e.message:"Failed to save skill")}finally{b(!1)}},es=()=>{z(null),T(""),M("")},er=async(e,t)=>{if(e){b(!0),y("");try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create",name:e,content:t})}),g(!1),H(),window.dispatchEvent(new Event("mindos:skills-changed"))}catch(e){y(e instanceof Error?e.message:"Failed to create skill")}finally{b(!1)}}};return c?(0,r.jsx)("div",{className:"flex justify-center py-4",children:(0,r.jsx)(E.A,{size:16,className:"animate-spin text-muted-foreground"})}):(0,r.jsxs)("div",{className:"space-y-3 pt-2",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(d.A,{size:12,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground"}),(0,r.jsx)("input",{type:"text",value:N,onChange:e=>k(e.target.value),placeholder:n?.searchSkills??"Search skills...",className:"w-full pl-7 pr-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"}),N&&(0,r.jsx)("button",{onClick:()=>k(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",children:(0,r.jsx)(u.A,{size:10})})]}),(t=l.find(e=>"mindos"===e.name)?.enabled??!0?"en":"zh",s=async e=>{if(e!==t&&!_){W(!0);try{"en"===e?(await q("mindos",!0),await q("mindos-zh",!1)):(await q("mindos-zh",!0),await q("mindos",!1))}catch(e){console.error("Lang switch failed:",e)}finally{W(!1)}}},(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:n?.skillLanguage??"Skill Language"}),(0,r.jsxs)("div",{className:"flex rounded-md border border-border overflow-hidden",children:[(0,r.jsx)("button",{onClick:()=>s("en"),disabled:_,className:`px-2.5 py-1 text-xs transition-colors disabled:opacity-50 disabled:cursor-not-allowed ${"en"===t?"bg-[var(--amber-subtle)] text-[var(--amber-text)] font-medium":"text-muted-foreground hover:bg-muted"}`,children:n?.skillLangEn??"English"}),(0,r.jsx)("button",{onClick:()=>s("zh"),disabled:_,className:`px-2.5 py-1 text-xs transition-colors disabled:opacity-50 disabled:cursor-not-allowed border-l border-border ${"zh"===t?"bg-[var(--amber-subtle)] text-[var(--amber-text)] font-medium":"text-muted-foreground hover:bg-muted"}`,children:n?.skillLangZh??"中文"})]})]})),0===Y.length&&N&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground text-center py-3",children:n?.noSkillsMatch?n.noSkillsMatch(N):`No skills match "${N}"`}),J.length>0&&(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("div",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground",children:(0,r.jsxs)("span",{children:[n?.customGroup??"Custom"," (",J.length,")"]})}),(0,r.jsx)("div",{className:"space-y-1.5",children:J.map(e=>(0,r.jsx)(s2,{skill:e,expanded:x===e.name,onExpand:Z,onToggle:q,onDelete:V,onEditStart:ee,onEditSave:et,onEditCancel:es,editing:A,editContent:$,setEditContent:T,editError:R,saving:f,fullContent:I,loadingContent:P,loadErrors:F,m:n},e.name))})]}),G.length>0&&(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground cursor-pointer hover:text-foreground transition-colors",onClick:()=>C(!S),children:[S?(0,r.jsx)(j.A,{size:12}):(0,r.jsx)(en.A,{size:12}),(0,r.jsxs)("span",{children:[n?.builtinGroup??"Built-in"," (",G.length,")"]})]}),!S&&(0,r.jsx)("div",{className:"space-y-1.5",children:G.map(e=>(0,r.jsx)(s2,{skill:e,expanded:x===e.name,onExpand:Z,onToggle:q,onDelete:V,onEditStart:ee,onEditSave:et,onEditCancel:es,editing:A,editContent:$,setEditContent:T,editError:R,saving:f,fullContent:I,loadingContent:P,loadErrors:F,m:n},e.name))})]}),h?(0,r.jsx)(s4,{onSave:er,onCancel:()=>{g(!1),y("")},saving:f,error:v,m:n}):(0,r.jsxs)("button",{onClick:()=>g(!0),className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)(K.A,{size:12}),n?.addSkill??"+ Add Skill"]}),(0,r.jsx)(s8,{agents:o?.agents??[],skillName:l.find(e=>"mindos"===e.name)?.enabled??!0?"mindos":"mindos-zh",m:n}),(0,r.jsx)(eb.TM,{open:!!U,title:"Delete skill?",message:U?n?.skillDeleteConfirm?.(U)??`Delete skill "${U}"?`:"",confirmLabel:"Delete",cancelLabel:"Cancel",variant:"destructive",onConfirm:async()=>{B(null),await Q(U)},onCancel:()=>B(null)})]})}function s8({agents:e,skillName:t,m:s}){let[n,o]=(0,a.useState)("claude-code"),l=`npx skills add GeminiLight/MindOS --skill ${t} -a ${n} -g -y`,i=`~/.agents/skills/${t}/SKILL.md`,d=async()=>{await (0,sj.l)(l)&&ef.oR.copy()},c=e.filter(e=>e.present&&e.installed),u=e.filter(e=>e.present&&!e.installed),m=e.filter(e=>!e.present);return(0,r.jsxs)("div",{className:"border-t border-border pt-3 mt-3 space-y-2.5",children:[(0,r.jsx)("p",{className:"text-2xs font-medium text-muted-foreground",children:s?.cliInstallHint??"Install via CLI:"}),(0,r.jsx)(sX.A,{value:n,onChange:o,size:"sm",options:[...c.length>0?[{label:s?.connectedGroup??"Connected",options:c.map(e=>({value:e.key,label:e.name}))}]:[],...u.length>0?[{label:s?.detectedGroup??"Detected",options:u.map(e=>({value:e.key,label:e.name}))}]:[],...m.length>0?[{label:s?.notFoundGroup??"Not Installed",options:m.map(e=>({value:e.key,label:e.name}))}]:[]]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("code",{className:"flex-1 text-[10px] font-mono bg-muted/50 border border-border rounded-lg px-2.5 py-2 text-muted-foreground select-all overflow-x-auto whitespace-nowrap",children:l}),(0,r.jsx)("button",{onClick:d,className:"p-1.5 rounded-md border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0",children:(0,r.jsx)(et.A,{size:11})})]}),(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground",children:[s?.skillPathHint??"Skill files installed at:"," ",(0,r.jsx)("code",{className:"font-mono text-[10px] bg-muted px-1 py-0.5 rounded",children:i})]})]})}function s9({t:e}){let t=(0,eY.cd)(),s=e.settings?.mcp,[n,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)("stdio"),u=(0,a.useRef)(void 0);if((0,a.useEffect)(()=>()=>clearInterval(u.current),[]),!t||t.loading)return(0,r.jsx)("div",{className:"flex justify-center py-8",children:(0,r.jsx)(E.A,{size:18,className:"animate-spin text-muted-foreground"})});let m=t.agents.filter(e=>e.present&&e.installed),x=t.agents.filter(e=>e.present&&!e.installed),p=t.agents.filter(e=>!e.present),h=l||(t.agents[0]?.key??""),g=t.agents.find(e=>e.key===h);return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)(s7,{status:t.status,restarting:n,onRestart:async()=>{o(!0);try{await (0,w.n)("/api/mcp/restart",{method:"POST"})}catch(e){console.error("[McpTab] Restart request failed:",e),o(!1);return}let e=Date.now()+6e4;clearInterval(u.current),u.current=setInterval(async()=>{if(Date.now()>e){clearInterval(u.current),o(!1),console.warn("[McpTab] MCP restart timed out after 60s");return}try{(await (0,w.n)("/api/mcp/status",{timeout:3e3})).running&&(clearInterval(u.current),o(!1),t.refresh())}catch(e){console.warn("[McpTab] Status poll attempt failed:",e)}},3e3)},onRefresh:t.refresh,m:s}),t.agents.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3",children:"MCP"}),(0,r.jsx)(re,{connectedAgents:m,detectedAgents:x,notFoundAgents:p,currentAgent:g??null,mcpStatus:t.status,selectedAgent:h,onSelectAgent:e=>i(e),transport:d,onTransportChange:c,onCopy:async e=>{await (0,sj.l)(e)&&ef.oR.copy()},m:s})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3",children:s?.skillsTitle??"Skills"}),(0,r.jsx)(s6,{t:e})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3",children:s?.agentsTitle??"Agent Configuration"}),(0,r.jsx)(sZ,{agents:t.agents,t:e,onRefresh:t.refresh})]})]})}function s7({status:e,restarting:t,onRestart:s,onRefresh:n,m:a}){return e?(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 flex items-center justify-between",children:[(0,r.jsx)("div",{className:"flex items-center gap-2.5 text-sm",children:t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{size:12,className:"animate-spin text-[var(--amber)]"}),(0,r.jsx)("span",{className:"text-[var(--amber)]",children:a?.restarting??"Restarting..."})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${e.running?"bg-success":"bg-muted-foreground"}`}),(0,r.jsx)("span",{className:"text-foreground font-medium",children:e.running?a?.running??"Running":a?.stopped??"Stopped"}),e.running&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground",children:e.endpoint}),(0,r.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,r.jsxs)("span",{className:"text-muted-foreground",children:[e.toolCount," tools"]})]})]})}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[!e.running&&!t&&(0,r.jsxs)("button",{onClick:s,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(sS.A,{size:14})," ",a?.restart??"Restart"]}),(0,r.jsx)("button",{onClick:n,className:"p-1.5 rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:(0,r.jsx)(b.A,{size:14})})]})]}):null}function re({connectedAgents:e,detectedAgents:t,notFoundAgents:s,currentAgent:n,mcpStatus:o,selectedAgent:l,onSelectAgent:i,transport:d,onTransportChange:c,onCopy:u,m}){let x=(0,a.useMemo)(()=>n?(0,sv.$k)(n,o,d):null,[n,o,d]);return(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[(0,r.jsx)(sX.A,{value:l,onChange:i,options:[...e.length>0?[{label:m?.connectedGroup??"Connected",options:e.map(e=>({value:e.key,label:`${e.name} — ${e.transport??"stdio"} \xb7 ${e.scope??"global"}`}))}]:[],...t.length>0?[{label:m?.detectedGroup??"Detected (not configured)",options:t.map(e=>({value:e.key,label:`${e.name} — ${m?.notConfigured??"not configured"}`}))}]:[],...s.length>0?[{label:m?.notFoundGroup??"Not Installed",options:s.map(e=>({value:e.key,label:e.name}))}]:[]]}),n&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[n.present&&n.installed?(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-2xs font-medium bg-success/10 text-success",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-success inline-block"}),m?.tagConnected??"Connected"]}):n.present&&!n.installed?(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-2xs font-medium bg-[var(--amber-subtle)] text-[var(--amber-text)]",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--amber)] inline-block"}),m?.tagDetected??"Detected — not configured"]}):(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-2xs font-medium bg-muted text-muted-foreground",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-muted-foreground inline-block"}),m?.tagNotInstalled??"Not installed"]}),n.transport&&(0,r.jsx)("span",{className:"px-1.5 py-0.5 rounded text-2xs bg-muted text-muted-foreground",children:n.transport}),n.scope&&(0,r.jsx)("span",{className:"px-1.5 py-0.5 rounded text-2xs bg-muted text-muted-foreground",children:n.scope})]}),(0,r.jsxs)("div",{className:"flex items-center rounded-lg border border-border overflow-hidden w-fit",children:[(0,r.jsxs)("button",{onClick:()=>c("stdio"),className:`flex items-center gap-1.5 px-3 py-1.5 text-sm transition-colors ${"stdio"===d?"bg-muted text-foreground font-medium":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(sb.A,{size:14})," ",m?.transportLocal??"Local (stdio)"]}),(0,r.jsxs)("button",{onClick:()=>c("http"),className:`flex items-center gap-1.5 px-3 py-1.5 text-sm transition-colors ${"http"===d?"bg-muted text-foreground font-medium":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(eK.A,{size:14})," ",m?.transportRemote??"Remote (HTTP)"]})]}),"http"===d&&o&&!o.authConfigured&&(0,r.jsxs)("p",{className:"flex items-center gap-1.5 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(C.A,{size:12}),m?.noAuthWarning??"Auth not configured. Run `mindos token` to set up."]}),x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("pre",{className:"text-[11px] font-mono bg-muted/50 border border-border rounded-lg p-3 overflow-x-auto whitespace-pre select-all max-h-[240px] overflow-y-auto",children:x.displaySnippet}),(0,r.jsxs)("div",{className:"flex items-center gap-3 text-sm",children:[(0,r.jsxs)("button",{onClick:()=>u(x.snippet),className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0",children:[(0,r.jsx)(et.A,{size:14}),m?.copyConfig??"Copy config"]}),(0,r.jsx)("span",{className:"text-muted-foreground",children:"→"}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground truncate text-2xs",children:x.path})]})]})]})]})}var rt=s(16950);function rs(){let e=window;return e.mindos?.checkUpdate?e.mindos:null}let rr="https://github.com/GeminiLight/MindOS/releases",rn="mindos_update_in_progress",ra={downloading:{en:"Downloading update",zh:"下载更新"},skills:{en:"Updating skills",zh:"更新 Skills"},rebuilding:{en:"Rebuilding app",zh:"重新构建应用"},restarting:{en:"Restarting server",zh:"重启服务"}};function ro({status:e}){switch(e){case"done":return(0,r.jsx)(N.A,{size:14,className:"text-success shrink-0"});case"running":return(0,r.jsx)(E.A,{size:14,className:"animate-spin shrink-0 text-[var(--amber)]"});case"failed":return(0,r.jsx)(C.A,{size:14,className:"text-destructive shrink-0"});default:return(0,r.jsx)(rt.A,{size:14,className:"text-muted-foreground/40 shrink-0"})}}function rl(){let{t:e}=(0,y.Y)(),t=e.settings.update,s=rs(),[n,o]=(0,a.useState)("idle"),[l,i]=(0,a.useState)(!1),[d,c]=(0,a.useState)(null),[u,m]=(0,a.useState)(""),[x,p]=(0,a.useState)(0),[h,g]=(0,a.useState)("");(0,a.useEffect)(()=>{s.getAppInfo?.().then(e=>{e?.version&&m(e.version)}).catch(e=>{console.warn("[UpdateTab] getAppInfo failed:",e)}),f();let e=[];return s.onUpdateProgress&&e.push(s.onUpdateProgress(e=>p(Math.round(e.percent)))),s.onUpdateReady&&e.push(s.onUpdateReady(()=>o("ready"))),()=>e.forEach(e=>e())},[]);let f=async()=>{o("checking"),g("");try{let e=await s.checkUpdate();i(e.available),e.version&&c(e.version),o("idle")}catch{o("error"),g(t?.error??"Failed to check for updates.")}},v=async()=>{o("downloading"),p(0);try{await s.installUpdate()}catch{o("error"),g("Update failed. Please try again.")}};return(0,r.jsx)("div",{className:"space-y-6",children:(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(sb.A,{size:14,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:"MindOS Desktop"})]}),u&&(0,r.jsxs)("span",{className:"text-xs font-mono text-muted-foreground",children:["v",u]})]}),"checking"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,r.jsx)(E.A,{size:13,className:"animate-spin"}),t?.checking??"Checking for updates..."]}),"idle"===n&&!l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),t?.upToDate??"You're up to date"]}),"idle"===n&&l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(e9.A,{size:13}),d?`Update available: v${d}`:"Update available"]}),"downloading"===n&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-foreground",children:[(0,r.jsx)(E.A,{size:13,className:"animate-spin text-[var(--amber)]"}),t?.desktopDownloading??"Downloading update..."]}),(0,r.jsx)("div",{className:"h-1 rounded-full bg-muted overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full bg-[var(--amber)] transition-all duration-300",style:{width:`${Math.max(x,3)}%`}})})]}),"ready"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),t?.desktopReady??"Update downloaded. Restart to apply."]}),"error"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive",children:[(0,r.jsx)(C.A,{size:13}),h]}),(0,r.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[(0,r.jsxs)("button",{onClick:f,disabled:"checking"===n||"downloading"===n,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:14,className:"checking"===n?"animate-spin":""}),t?.checkButton??"Check for Updates"]}),"idle"===n&&l&&(0,r.jsxs)("button",{onClick:v,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(e9.A,{size:14}),d?`Update to v${d}`:"Update"]}),"ready"===n&&(0,r.jsxs)("button",{onClick:async()=>{try{await s.installUpdate()}catch{o("error"),g(t?.error??"Failed to install update. Please try again.")}},className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(b.A,{size:14}),t?.desktopRestart??"Restart Now"]})]}),(0,r.jsxs)("div",{className:"border-t border-border/50 pt-3 space-y-2",children:[(0,r.jsxs)("a",{href:rr,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)($.A,{size:12}),t?.releaseNotes??"View release notes"]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground/60",children:t?.desktopHint??"Updates are delivered through the Desktop app auto-updater."})]})]})})}function ri(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>{t(!!rs())},[]),e)?(0,r.jsx)(rl,{}):(0,r.jsx)(rd,{})}function rd(){let{t:e,locale:t}=(0,y.Y)(),s=e.settings.update,[n,o]=(0,a.useState)(null),[l,i]=(0,a.useState)("idle"),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)([]),[x,p]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),f=(0,a.useRef)(void 0),v=(0,a.useRef)(void 0),j=(0,a.useRef)(""),k=(0,a.useCallback)(async()=>{i("checking"),c("");try{let e=await (0,w.n)("/api/update-check");if(o(e),j.current||(j.current=e.current),e.hasUpdate){let t=localStorage.getItem("mindos_update_dismissed");localStorage.setItem("mindos_update_latest",e.latest),window.dispatchEvent(new Event(e.latest===t?"mindos:update-dismissed":"mindos:update-available"))}else localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),window.dispatchEvent(new Event("mindos:update-dismissed"));i("idle")}catch{i("error"),c(s?.error??"Failed to check for updates.")}},[s]),S=(0,a.useCallback)(()=>{clearInterval(f.current),clearTimeout(v.current)},[]),A=(0,a.useCallback)(e=>{S(),o(e),i("updated"),localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),localStorage.removeItem(rn),window.dispatchEvent(new Event("mindos:update-dismissed")),setTimeout(()=>window.location.reload(),2e3)},[S]),z=(0,a.useCallback)(()=>{f.current=setInterval(async()=>{try{let e=await (0,w.n)("/api/update-status",{timeout:5e3});if(g(!1),e.stages?.length>0&&m(e.stages),"failed"===e.stage){S(),localStorage.removeItem(rn),p(e.error||"Update failed"),i("error");return}if("done"===e.stage)try{let e=await (0,w.n)("/api/update-check");if(e.current!==j.current)return void A(e)}catch{}}catch{g(!0);try{let e=await (0,w.n)("/api/update-check",{timeout:5e3});e.current&&e.current!==j.current&&(m(e=>e.map(e=>({...e,status:"done"}))),A(e))}catch{}}},3e3),v.current=setTimeout(()=>{S(),localStorage.removeItem(rn),i("timeout")},3e5)},[S,A]);(0,a.useEffect)(()=>{let e=localStorage.getItem(rn);if(e)try{let{originalVer:t}=JSON.parse(e);j.current=t,i("updating"),g(!0),m([{id:"downloading",status:"done"},{id:"skills",status:"done"},{id:"rebuilding",status:"done"},{id:"restarting",status:"running"}]),z()}catch{localStorage.removeItem(rn),k()}else k()},[]),(0,a.useEffect)(()=>S,[S]);let T=(0,a.useCallback)(async()=>{i("updating"),c(""),p(null),g(!1),m([{id:"downloading",status:"pending"},{id:"skills",status:"pending"},{id:"rebuilding",status:"pending"},{id:"restarting",status:"pending"}]),localStorage.setItem(rn,JSON.stringify({originalVer:j.current||n?.current,startedAt:Date.now()})),window.dispatchEvent(new Event("mindos:update-started"));try{await (0,w.n)("/api/update",{method:"POST"})}catch(e){if(e instanceof w.h){localStorage.removeItem(rn),p(e.message||"Update failed"),i("error");return}}z()},[z,n]),R=(0,a.useCallback)(()=>{p(null),T()},[T]),M="zh"===t?"zh":"en",I=u.filter(e=>"done"===e.status).length,D=u.length>0?Math.round(I/u.length*100):0;return(0,r.jsx)("div",{className:"space-y-6",children:(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:"MindOS"}),n&&(0,r.jsxs)("span",{className:"text-xs font-mono text-muted-foreground",children:["v",n.current]})]}),"checking"===l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,r.jsx)(E.A,{size:13,className:"animate-spin"}),s?.checking??"Checking for updates..."]}),"idle"===l&&n&&!n.hasUpdate&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),s?.upToDate??"You're up to date"]}),"idle"===l&&n?.hasUpdate&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(e9.A,{size:13}),s?.available?s.available(n.current,n.latest):`Update available: v${n.current} → v${n.latest}`]}),"updating"===l&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"space-y-1.5",children:u.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,r.jsx)(ro,{status:e.status}),(0,r.jsx)("span",{className:"pending"===e.status?"text-muted-foreground/50":"running"===e.status?"text-foreground":"text-muted-foreground",children:ra[e.id]?.[M]??e.id})]},e.id))}),(0,r.jsx)("div",{className:"h-1 rounded-full bg-muted overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full bg-[var(--amber)] transition-all duration-500 ease-out",style:{width:`${Math.max(D,5)}%`}})}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground",children:h?s?.serverRestarting??"Server is restarting, please wait...":s?.updatingHint??"This may take 1–3 minutes. Do not close this page."})]}),"updated"===l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),s?.updated??"Updated successfully! Reloading..."]}),"timeout"===l&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(C.A,{size:13}),s?.timeout??"Update may still be in progress."]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground",children:s?.timeoutHint??"The server may need more time to rebuild. Try refreshing."}),(0,r.jsxs)("button",{onClick:()=>window.location.reload(),className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(b.A,{size:12}),s?.refreshButton??"Refresh Page"]})]}),"error"===l&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive",children:[(0,r.jsx)(C.A,{size:13}),x||d]}),x&&(0,r.jsxs)("button",{onClick:R,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(b.A,{size:12}),s?.retryButton??"Retry Update"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[(0,r.jsxs)("button",{onClick:k,disabled:"checking"===l||"updating"===l,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:14,className:"checking"===l?"animate-spin":""}),s?.checkButton??"Check for Updates"]}),n?.hasUpdate&&"updating"!==l&&"updated"!==l&&(0,r.jsxs)("button",{onClick:T,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(e9.A,{size:14}),s?.updateButton?s.updateButton(n.latest):`Update to v${n.latest}`]})]}),(0,r.jsxs)("div",{className:"border-t border-border/50 pt-3 space-y-2",children:[(0,r.jsxs)("a",{href:rr,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)($.A,{size:12}),s?.releaseNotes??"View release notes"]}),(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground/60",children:[s?.hint??"Updates are installed via npm. Equivalent to running"," ",(0,r.jsx)("code",{className:"font-mono bg-muted px-1 py-0.5 rounded",children:"mindos update"})," ",s?.inTerminal??"in your terminal."]})]})]})})}function rc(){let e=window;return e.mindos?.uninstallApp?e.mindos:null}function ru(){let{t:e}=(0,y.Y)(),t=e.settings.uninstall,s=!!rc(),[n,o]=(0,a.useState)("idle"),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(!0),[u,m]=(0,a.useState)(!0),x=async()=>{o("running"),i("");try{if(await (0,w.n)("/api/uninstall",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({removeConfig:d})}),s&&u){let e=rc();if(e?.uninstallApp){let t=await e.uninstallApp();if(!t.ok)throw Error(t.error||"Failed to remove app");o("success");return}}o("success")}catch(e){i(e instanceof Error?e.message:String(e)),o("error")}},p=({checked:e,onChange:t,label:s,desc:n,disabled:a})=>(0,r.jsxs)("label",{className:`flex items-start gap-2.5 p-2.5 rounded bg-muted/30 cursor-pointer select-none ${a?"opacity-50 cursor-not-allowed":"hover:bg-muted/50"}`,children:[(0,r.jsx)("input",{type:"checkbox",checked:e,onChange:e=>!a&&t(e.target.checked),disabled:a,className:"mt-0.5 form-check"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium text-foreground",children:s}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:n})]})]});return(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(er.A,{size:15}),title:t.title,description:s?t.descDesktop:t.descCli,children:[(0,r.jsxs)("div",{className:"flex gap-2.5 p-3 rounded-md bg-muted/50 border border-border",children:[(0,r.jsx)(tr.A,{size:14,className:"text-success shrink-0 mt-0.5"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground leading-relaxed",children:t.kbSafe})]}),"idle"===n||"confirming"===n?(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(p,{checked:!0,disabled:!0,label:t.stopServices,desc:t.stopServicesDesc,onChange:()=>{}}),(0,r.jsx)(p,{checked:d,onChange:c,label:t.removeConfig,desc:t.removeConfigDesc}),!s&&(0,r.jsx)(p,{checked:!0,disabled:!0,label:t.removeNpm,desc:t.removeNpmDesc,onChange:()=>{}}),s&&(0,r.jsx)(p,{checked:u,onChange:m,label:t.removeApp,desc:t.removeAppDesc})]}):null,"idle"===n&&(0,r.jsxs)("button",{onClick:()=>o("confirming"),className:"px-3.5 py-2 text-sm font-medium rounded-lg bg-error/10 text-error border border-error/20 hover:bg-error/20 transition-colors focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-40 disabled:cursor-not-allowed",children:[(0,r.jsx)(er.A,{size:12,className:"inline mr-1.5 -mt-px"}),t.confirmButton]}),"confirming"===n&&(0,r.jsxs)("div",{className:"p-3 rounded-md border border-error/30 bg-error/5 space-y-2.5",children:[(0,r.jsx)("p",{className:"text-xs font-medium text-error",children:t.confirmTitle}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{onClick:x,className:"px-3.5 py-2 text-sm font-medium rounded-lg bg-error text-white hover:bg-error/90 transition-colors focus-visible:ring-1 focus-visible:ring-ring",children:t.confirmButton}),(0,r.jsx)("button",{onClick:()=>o("idle"),className:"px-3.5 py-2 text-sm font-medium rounded-lg bg-muted text-foreground hover:bg-muted/80 transition-colors focus-visible:ring-1 focus-visible:ring-ring",children:t.cancelButton})]})]}),"running"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 py-2",children:[(0,r.jsx)(E.A,{size:14,className:"animate-spin text-muted-foreground"}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:t.running})]}),"success"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 py-2",children:[(0,r.jsx)(N.A,{size:14,className:"text-success"}),(0,r.jsx)("span",{className:"text-xs text-success font-medium",children:s&&u?t.successDesktop:t.success})]}),"error"===n&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(ty.A,{size:14,className:"text-error"}),(0,r.jsx)("span",{className:"text-xs text-error font-medium",children:t.error})]}),l&&(0,r.jsx)("p",{className:"text-[11px] text-muted-foreground font-mono",children:l}),(0,r.jsx)("button",{onClick:()=>o("idle"),className:"px-3 py-1.5 text-xs font-medium rounded-md bg-muted text-foreground hover:bg-muted/80 transition-colors focus-visible:ring-1 focus-visible:ring-ring",children:t.cancelButton})]})]})}function rm({visible:e,initialTab:t,variant:s,onClose:o}){let[l,i]=(0,a.useState)("ai"),[d,m]=(0,a.useState)(null),[x,p]=(0,a.useState)(!1),[h,g]=(0,a.useState)("idle"),{t:f,locale:v,setLocale:j}=(0,y.Y)(),k=(0,n.useRouter)(),S=(0,a.useRef)(void 0),A=(0,a.useRef)(!1),[z,$]=(0,a.useState)("lora"),[T,R]=(0,a.useState)("15px"),[M,D]=(0,a.useState)("780px"),[P,L]=(0,a.useState)(!0),[F,O]=(0,a.useState)(()=>{let e=localStorage.getItem("mindos_update_dismissed"),t=localStorage.getItem("mindos_update_latest");return!!t&&t!==e});(0,a.useEffect)(()=>{let e=()=>O(!0),t=()=>O(!1);return window.addEventListener("mindos:update-available",e),window.addEventListener("mindos:update-dismissed",t),()=>{window.removeEventListener("mindos:update-available",e),window.removeEventListener("mindos:update-dismissed",t)}},[]);let _="panel"===s,W=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(_?e&&!W.current:e){(0,w.n)("/api/settings").then(e=>{m(e),A.current=!0}).catch(()=>g("load-error")),$(localStorage.getItem("prose-font")??"lora"),R(localStorage.getItem("prose-font-size")??"15px"),D(localStorage.getItem("content-width")??"780px");let e=localStorage.getItem("theme");L(e?"dark"===e:window.matchMedia("(prefers-color-scheme: dark)").matches),g("idle")}e||(A.current=!1),W.current=e},[e,_]),(0,a.useEffect)(()=>{e&&t&&i(t)},[e,t]),(0,a.useEffect)(()=>{document.documentElement.style.setProperty("--prose-font-override",{lora:"'Lora', Georgia, serif","ibm-plex-sans":"'IBM Plex Sans', sans-serif",geist:"var(--font-geist-sans), sans-serif","ibm-plex-mono":"'IBM Plex Mono', monospace"}[z]??""),localStorage.setItem("prose-font",z)},[z]),(0,a.useEffect)(()=>{document.documentElement.style.setProperty("--prose-font-size-override",T),localStorage.setItem("prose-font-size",T)},[T]),(0,a.useEffect)(()=>{document.documentElement.style.setProperty("--content-width-override",M),localStorage.setItem("content-width",M)},[M]),(0,a.useEffect)(()=>{if("modal"!==s||!e||!o)return;let t=e=>{"Escape"===e.key&&o()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,e,o]);let U=(0,a.useCallback)(async e=>{p(!0);try{await (0,w.n)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ai:e.ai,agent:e.agent,mindRoot:e.mindRoot,webPassword:e.webPassword,authToken:e.authToken})}),g("saved"),setTimeout(()=>g("idle"),2500)}catch{g("error"),setTimeout(()=>g("idle"),2500)}finally{p(!1)}},[]);(0,a.useEffect)(()=>{if(d&&A.current)return clearTimeout(S.current),S.current=setTimeout(()=>U(d),800),()=>clearTimeout(S.current)},[d,U]);let B=(0,a.useCallback)(e=>{m(t=>t?{...t,ai:{...t.ai,...e}}:t)},[]),H=(0,a.useCallback)(e=>{m(t=>t?{...t,agent:{...t.agent??{},...e}}:t)},[]),K=(0,a.useCallback)(async()=>{if(!d)return;let e={provider:"anthropic",providers:{anthropic:{apiKey:"",model:""},openai:{apiKey:"",model:"",baseUrl:""}}};m(t=>t?{...t,ai:e}:t),setTimeout(()=>{(0,w.n)("/api/settings").then(e=>{m(e)}).catch(()=>g("error"))},1300)},[d]),Y=d?.envOverrides??{},J=_?12:13,G=[{id:"ai",label:f.settings.tabs.ai,icon:(0,r.jsx)(tk.A,{size:J})},{id:"mcp",label:f.settings.tabs.mcp??"MCP & Skills",icon:(0,r.jsx)(s$.A,{size:J})},{id:"knowledge",label:f.settings.tabs.knowledge,icon:(0,r.jsx)(c.A,{size:J})},{id:"appearance",label:f.settings.tabs.appearance,icon:(0,r.jsx)(sT.A,{size:J})},{id:"sync",label:f.settings.tabs.sync??"Sync",icon:(0,r.jsx)(b.A,{size:J})},{id:"update",label:f.settings.tabs.update??"Update",icon:(0,r.jsx)(e9.A,{size:J}),badge:F},{id:"uninstall",label:f.settings.tabs.uninstall??"Uninstall",icon:(0,r.jsx)(er.A,{size:J})}],q=G.find(e=>e.id===l)?.label??"",V=()=>(0,r.jsx)("div",{className:`flex-1 overflow-y-auto min-h-0 ${_?"px-4 py-4 space-y-4":"px-5 py-5 space-y-5"}`,children:"load-error"===h&&("ai"===l||"knowledge"===l)?(0,r.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-center",children:[(0,r.jsx)(C.A,{size:_?18:20,className:"text-destructive"}),(0,r.jsx)("p",{className:`${_?"text-xs":"text-sm"} text-destructive font-medium`,children:"Failed to load settings"}),!_&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Check that the server is running and AUTH_TOKEN is configured correctly."})]}):d||"appearance"===l||"mcp"===l||"sync"===l||"update"===l||"uninstall"===l?(0,r.jsxs)(r.Fragment,{children:["ai"===l&&d?.ai&&(0,r.jsx)(sR,{data:d,updateAi:B,updateAgent:H,t:f}),"appearance"===l&&(0,r.jsx)(sB,{font:z,setFont:$,fontSize:T,setFontSize:R,contentWidth:M,setContentWidth:D,dark:P,setDark:L,locale:v,setLocale:j,t:f}),"knowledge"===l&&d&&(0,r.jsx)(sV,{data:d,setData:m,t:f}),"sync"===l&&(0,r.jsx)(I,{t:f}),"mcp"===l&&(0,r.jsx)(s9,{t:f}),"update"===l&&(0,r.jsx)(ri,{}),"uninstall"===l&&(0,r.jsx)(ru,{})]}):(0,r.jsx)("div",{className:"flex justify-center py-8",children:(0,r.jsx)(E.A,{size:_?16:18,className:"animate-spin text-muted-foreground"})})}),Q=()=>"ai"===l||"knowledge"===l?(0,r.jsxs)("div",{className:`${_?"px-4 py-2":"px-5 py-2.5"} border-t border-border shrink-0 flex items-center justify-between`,children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:["ai"===l&&Object.values(Y).some(Boolean)&&(0,r.jsxs)("button",{onClick:K,disabled:x||!d,className:`flex items-center gap-1.5 ${_?"px-2.5 py-1 text-xs rounded-md":"px-3 py-1.5 text-sm rounded-lg"} border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[(0,r.jsx)(sS.A,{size:_?12:13}),f.settings.ai.restoreFromEnv]}),"knowledge"===l&&(0,r.jsxs)("a",{href:"/setup?force=1",className:`flex items-center gap-1.5 ${_?"px-2.5 py-1 text-xs rounded-md":"px-3 py-1.5 text-sm rounded-lg"} border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,r.jsx)(sS.A,{size:_?12:13}),f.settings.reconfigure]})]}),!_&&(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",role:"status","aria-live":"polite",children:[x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{size:12,className:"animate-spin text-muted-foreground"}),(0,r.jsxs)("span",{className:"text-muted-foreground",children:[f.settings.save,"..."]})]}),"saved"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:f.settings.saved})]}),"error"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:f.settings.saveFailed})]})]})]}):null;return _?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border shrink-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[(0,r.jsx)(c.A,{size:14,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider font-display",children:"Settings"})]}),(0,r.jsx)("div",{className:"flex items-center gap-1.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px]",role:"status","aria-live":"polite",children:[x&&(0,r.jsx)(E.A,{size:10,className:"animate-spin text-muted-foreground"}),"saved"===h&&(0,r.jsx)(N.A,{size:10,className:"text-success"}),"error"===h&&(0,r.jsx)(C.A,{size:10,className:"text-destructive"})]})})]}),(0,r.jsx)("div",{className:"flex border-b border-border px-3 shrink-0 overflow-x-auto scrollbar-none gap-0",children:G.map(e=>(0,r.jsxs)("button",{onClick:()=>i(e.id),className:`flex items-center gap-1 px-2 py-2 text-xs font-medium transition-colors border-b-2 -mb-px whitespace-nowrap ${l===e.id?"border-[var(--amber)] text-foreground":"border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.icon,e.label,e.badge&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-error shrink-0"})]},e.id))}),V(),Q()]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex flex-col h-full md:hidden",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border shrink-0",children:[(0,r.jsx)("div",{className:"flex justify-center pt-2 pb-0 absolute top-0 left-1/2 -translate-x-1/2",children:(0,r.jsx)("div",{className:"w-8 h-1 rounded-full bg-muted-foreground/20"})}),(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[(0,r.jsx)(c.A,{size:15,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"font-display",children:f.settings.title})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px]",role:"status","aria-live":"polite",children:[x&&(0,r.jsx)(E.A,{size:12,className:"animate-spin text-muted-foreground"}),"saved"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:f.settings.saved})]}),"error"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:f.settings.saveFailed})]})]}),o&&(0,r.jsx)("button",{onClick:o,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:15})})]})]}),(0,r.jsxs)("div",{className:"flex border-b border-border px-4 shrink-0 overflow-x-auto scrollbar-none gap-0",children:[G.map(e=>(0,r.jsxs)("button",{onClick:()=>i(e.id),className:`flex items-center gap-1.5 px-3 py-2.5 text-sm font-medium transition-colors border-b-2 -mb-px whitespace-nowrap ${l===e.id?"border-[var(--amber)] text-foreground":"border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.icon,e.label,e.badge&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-error shrink-0"})]},e.id)),(0,r.jsxs)("button",{onClick:()=>{o?.(),k.push("/help")},className:"flex items-center gap-1.5 px-3 py-2.5 text-sm font-medium transition-colors border-b-2 -mb-px whitespace-nowrap border-transparent text-muted-foreground hover:text-foreground",children:[(0,r.jsx)(sA.A,{size:J}),f.sidebar.help]})]}),V(),Q()]}),(0,r.jsxs)("div",{className:"hidden md:flex flex-row h-full min-h-0",children:[(0,r.jsxs)("div",{className:"w-[180px] shrink-0 border-r border-border flex flex-col",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-border",children:[(0,r.jsx)(c.A,{size:15,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"text-sm font-medium font-display text-foreground",children:f.settings.title})]}),(0,r.jsx)("nav",{className:"flex-1 overflow-y-auto py-1.5",children:G.map(e=>(0,r.jsxs)("button",{onClick:()=>i(e.id),className:`flex items-center gap-2 w-full px-4 py-2 text-sm font-medium transition-colors relative ${l===e.id?"text-foreground bg-muted":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[l===e.id&&(0,r.jsx)("div",{className:"absolute left-0 top-1 bottom-1 w-[3px] rounded-r-full bg-[var(--amber)]"}),e.icon,e.label,e.badge&&(0,r.jsx)("span",{className:"ml-auto w-1.5 h-1.5 rounded-full bg-error shrink-0"})]},e.id))}),(0,r.jsx)("div",{className:"shrink-0 border-t border-border px-4 py-2",children:(0,r.jsxs)("button",{onClick:()=>{o?.(),k.push("/help")},className:"flex items-center gap-2 w-full px-0 py-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)(sA.A,{size:13}),f.sidebar.help]})})]}),(0,r.jsxs)("div",{className:"flex-1 flex flex-col min-w-0 min-h-0",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border shrink-0",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-foreground font-display",children:q}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px]",role:"status","aria-live":"polite",children:[x&&(0,r.jsx)(E.A,{size:12,className:"animate-spin text-muted-foreground"}),"saved"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:f.settings.saved})]}),"error"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:f.settings.saveFailed})]})]}),o&&(0,r.jsx)("button",{onClick:o,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:15})})]})]}),V(),Q()]})]})]})}function rx({open:e,onClose:t,initialTab:s}){return e?(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[10vh] modal-backdrop",onClick:e=>e.target===e.currentTarget&&t(),children:(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Settings",className:"w-full md:max-w-3xl md:mx-4 bg-card border-t md:border border-border rounded-t-2xl md:rounded-xl shadow-2xl flex flex-col h-[88vh] md:h-[80vh] md:max-h-[85vh]",children:(0,r.jsx)(rm,{visible:e,variant:"modal",onClose:t,initialTab:s})})}):null}function rp(){let[e,t]=(0,a.useState)(!1),{t:s}=(0,y.Y)(),n=s.shortcutPanel,o="u">typeof navigator&&/Mac|iPhone|iPad/.test(navigator.userAgent)?"⌘":"Ctrl",l=(0,a.useMemo)(()=>[{keys:`${o} K`,label:n.toggleSearch,section:n.navigation},{keys:`${o} /`,label:n.toggleAskAI,section:n.navigation},{keys:`${o} ,`,label:n.openSettings,section:n.navigation},{keys:`${o} ?`,label:n.keyboardShortcuts,section:n.navigation},{keys:"Esc",label:n.closePanel,section:n.panelsSection},{keys:`${o} S`,label:n.saveFile,section:n.editor},{keys:`${o} Z`,label:n.undo,section:n.editor},{keys:`${o} Shift Z`,label:n.redo,section:n.editor}],[o,n]);if((0,a.useEffect)(()=>{let s=s=>{(s.metaKey||s.ctrlKey)&&s.shiftKey&&"/"===s.key&&(s.preventDefault(),t(e=>!e)),"Escape"===s.key&&e&&t(!1)};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[e]),!e)return null;let i=[...new Set(l.map(e=>e.section))];return(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center modal-backdrop",onClick:e=>e.target===e.currentTarget&&t(!1),children:(0,r.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":n.title,className:"w-full max-w-md mx-4 bg-card border border-border rounded-xl shadow-2xl overflow-hidden",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-5 py-3.5 border-b border-border",children:[(0,r.jsx)("span",{className:"text-sm font-medium font-display text-foreground",children:n.title}),(0,r.jsx)("button",{onClick:()=>t(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:15})})]}),(0,r.jsx)("div",{className:"px-5 py-4 space-y-4 max-h-[60vh] overflow-y-auto",children:i.map(e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-2",children:e}),(0,r.jsx)("div",{className:"space-y-1",children:l.filter(t=>t.section===e).map(e=>(0,r.jsxs)("div",{className:"flex items-center justify-between py-1.5",children:[(0,r.jsx)("span",{className:"text-xs text-foreground",children:e.label}),(0,r.jsx)("div",{className:"flex items-center gap-1",children:e.keys.split(" ").map((e,t)=>(0,r.jsx)("kbd",{className:"px-1.5 py-0.5 text-2xs rounded border border-border bg-muted text-muted-foreground font-mono min-w-[24px] text-center",children:e},t))})]},e.keys))})]},e))}),(0,r.jsx)("div",{className:"px-5 py-2.5 border-t border-border",children:(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground/60",children:["Press ",(0,r.jsx)("kbd",{className:"px-1 py-0.5 text-2xs rounded border border-border bg-muted font-mono",children:o}),(0,r.jsx)("kbd",{className:"px-1 py-0.5 text-2xs rounded border border-border bg-muted font-mono ml-0.5",children:"?"})," ",n.toggleHint]})})]})})}function rh(){let[e,t]=(0,a.useState)(0),[s,o]=(0,a.useState)(null),[i,d]=(0,a.useState)(!1),c=(0,a.useRef)(0),[m,x]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),g=(0,n.usePathname)(),{t:f}=(0,y.Y)();(0,a.useEffect)(()=>{let e=!0,s=async()=>{try{let s=await (0,w.n)("/api/changes?op=summary");e&&t(s.unreadCount)}catch{e&&t(0)}};s();let r=setInterval(()=>void s(),15e3);return()=>{e=!1,clearInterval(r)}},[]),(0,a.useEffect)(()=>{e>c.current&&i&&d(!1),c.current=e},[e,i]);let b=(0,a.useMemo)(()=>!(e<=0||g?.startsWith("/changes"))&&(null===s||!(e<=s))&&!i,[s,g,e,i]);async function v(){try{await (0,w.n)("/api/changes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({op:"mark_seen"})})}catch{}finally{t(0),o(0)}}return((0,a.useEffect)(()=>{if(!b)return;let e=setTimeout(()=>d(!0),1e4);return()=>clearTimeout(e)},[b]),(0,a.useEffect)(()=>{if(b){x(!0);let e=requestAnimationFrame(()=>h(!0));return()=>cancelAnimationFrame(e)}h(!1);let e=setTimeout(()=>x(!1),160);return()=>clearTimeout(e)},[b]),m)?(0,r.jsx)("div",{className:`fixed right-3 top-[60px] md:right-6 md:top-4 z-30 transition-all duration-150 ease-out ${p?"opacity-100 translate-y-0 scale-100":"opacity-0 -translate-y-2 scale-[0.98] pointer-events-none"}`,children:(0,r.jsx)("div",{className:"rounded-2xl border bg-card/95 backdrop-blur px-3 py-2.5 shadow-lg min-w-[260px] max-w-[350px]",style:{borderColor:"color-mix(in srgb, var(--amber) 45%, var(--border))",boxShadow:"0 12px 28px color-mix(in srgb, var(--amber) 14%, rgba(0,0,0,.24))"},children:(0,r.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,r.jsx)("span",{className:"inline-flex h-7 w-7 items-center justify-center rounded-full text-[var(--amber)] bg-[var(--amber-subtle)]",children:(0,r.jsx)(eV.A,{size:14})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("p",{className:"text-xs text-foreground font-display whitespace-nowrap",children:f.changes.unreadBanner(e)}),(0,r.jsxs)("div",{className:"mt-1 flex items-center gap-1.5",children:[(0,r.jsx)(l(),{href:"/changes",className:"inline-flex items-center rounded-md px-2.5 py-1 text-xs font-medium bg-[var(--amber)] text-white focus-visible:ring-2 focus-visible:ring-ring hover:opacity-90",children:f.changes.reviewNow}),(0,r.jsx)("button",{type:"button",onClick:()=>void v(),className:"inline-flex items-center rounded-md px-2 py-1 text-xs font-medium bg-muted text-muted-foreground hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:f.changes.markAllRead})]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>o(e),"aria-label":f.changes.dismiss,className:"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-muted/60 focus-visible:ring-2 focus-visible:ring-ring",children:(0,r.jsx)(u.A,{size:14})})]})})}):null}var rg=s(55711);let rf=(0,ei.createServerReference)("70e64c21da7696435710381375e61f8dcb722299f1",ei.callServer,void 0,ei.findSourceMapURL,"revertSpaceInitAction");function rb(){let[e,t]=(0,a.useState)(null),[s,o]=(0,a.useState)(!1),[l,i]=(0,a.useTransition)(),d=(0,n.useRouter)(),{t:c}=(0,y.Y)(),m=(0,a.useCallback)(()=>{o(!1),setTimeout(()=>t(null),200)},[]),x=(0,a.useCallback)(e=>{let s=e.detail;"working"===s.state?(t(s),requestAnimationFrame(()=>o(!0))):"done"===s.state?(t(e=>e?{...e,state:"done"}:null),d.refresh()):m()},[d,m]);(0,a.useEffect)(()=>(window.addEventListener("mindos:ai-init",x),()=>window.removeEventListener("mindos:ai-init",x)),[x]);let p=(0,a.useCallback)(()=>{e&&(m(),d.push(`/view/${(0,Q.O0)(e.spacePath+"/")}`))},[e,m,d]),h=(0,a.useCallback)(()=>{e&&i(async()=>{await rf(e.spacePath,e.spaceName,e.description),t(e=>e?{...e,state:"reverted"}:null),d.refresh(),window.dispatchEvent(new Event("mindos:files-changed")),setTimeout(m,2e3)})},[e,d,m]),g=(0,a.useCallback)(()=>{m()},[m]);if(!e)return null;let f=c.home,{state:b}=e,v="done"===b,j="reverted"===b;return(0,r.jsx)("div",{className:`fixed bottom-6 left-1/2 z-50 -translate-x-1/2 transition-all duration-200 ease-out ${s?"opacity-100 translate-y-0 scale-100":"opacity-0 translate-y-3 scale-[0.96] pointer-events-none"}`,children:(0,r.jsxs)("div",{className:"flex items-center gap-2.5 rounded-full border bg-card/95 backdrop-blur py-2 shadow-lg",style:{borderColor:"color-mix(in srgb, var(--amber) 40%, var(--border))",boxShadow:"0 8px 24px color-mix(in srgb, var(--amber) 12%, rgba(0,0,0,.2))",paddingLeft:"0.75rem",paddingRight:v?"0.5rem":"1rem"},children:[(0,r.jsx)("span",{className:`inline-flex h-6 w-6 items-center justify-center rounded-full shrink-0 ${j?"text-muted-foreground bg-muted":"text-[var(--amber)] bg-[var(--amber-subtle)]"} ${"working"===b?"animate-pulse":""}`,children:j?(0,r.jsx)(rg.A,{size:12}):v?(0,r.jsx)(e0.A,{size:13,strokeWidth:2.5}):(0,r.jsx)(tk.A,{size:13})}),(0,r.jsx)("span",{className:"text-xs text-foreground whitespace-nowrap select-none font-medium",children:j?f.aiInitReverted(e.spaceName):v?f.aiInitReady(e.spaceName):(0,r.jsxs)(r.Fragment,{children:[f.aiInitGenerating(e.spaceName),(0,r.jsx)(rv,{})]})}),v&&(0,r.jsxs)("div",{className:"flex items-center gap-1 ml-1",children:[(0,r.jsx)("button",{type:"button",onClick:p,className:"px-2.5 py-1 rounded-full text-2xs font-medium bg-[var(--amber)] text-white hover:opacity-90 transition-opacity focus-visible:ring-2 focus-visible:ring-ring",children:f.aiInitReview}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:l,className:"px-2.5 py-1 rounded-full text-2xs font-medium bg-muted text-muted-foreground hover:text-foreground transition-colors focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:f.aiInitDiscard}),(0,r.jsx)("button",{type:"button",onClick:g,"aria-label":"Accept",className:"ml-0.5 inline-flex h-5 w-5 items-center justify-center rounded-full text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-colors focus-visible:ring-2 focus-visible:ring-ring",children:(0,r.jsx)(u.A,{size:12})})]})]})})}function rv(){return(0,r.jsxs)("span",{className:"inline-flex gap-[2px] items-end h-[1em] ml-px",children:[(0,r.jsx)("span",{className:"w-[3px] h-[3px] rounded-full bg-muted-foreground animate-[dotBounce_1.2s_0ms_infinite]"}),(0,r.jsx)("span",{className:"w-[3px] h-[3px] rounded-full bg-muted-foreground animate-[dotBounce_1.2s_200ms_infinite]"}),(0,r.jsx)("span",{className:"w-[3px] h-[3px] rounded-full bg-muted-foreground animate-[dotBounce_1.2s_400ms_infinite]"}),(0,r.jsx)("style",{children:`
|
|
148
|
+
`};function s4({onSave:e,onCancel:t,saving:s,error:n,m:o}){let[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[m,x]=(0,a.useState)("general"),p=(e,t)=>(s3[t||m]||s3.general)(e||"my-skill");return(0,r.jsxs)("div",{className:"border border-border rounded-lg p-3 space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-xs font-medium",children:o?.addSkill??"+ Add Skill"}),(0,r.jsx)("button",{onClick:t,className:"p-0.5 rounded hover:bg-muted text-muted-foreground",children:(0,r.jsx)(u.A,{size:12})})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-2xs text-muted-foreground",children:o?.skillName??"Name"}),(0,r.jsx)("input",{type:"text",value:l,onChange:e=>{let t,s;return t=e.target.value.toLowerCase().replace(/[^a-z0-9-]/g,""),s=p(l||"my-skill"),void((!d||d===s)&&c(p(t||"my-skill")),i(t))},placeholder:"my-skill",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background font-mono text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-2xs text-muted-foreground",children:o?.skillTemplate??"Template"}),(0,r.jsx)("div",{className:"flex rounded-md border border-border overflow-hidden w-fit",children:["general","tool-use","workflow"].map((e,t)=>(0,r.jsx)("button",{onClick:()=>{let t;return t=p(l||"my-skill",m),void(x(e),(!d||d===t)&&c(p(l||"my-skill",e)))},className:`px-2.5 py-1 text-xs transition-colors ${t>0?"border-l border-border":""} ${m===e?"bg-[var(--amber-subtle)] text-[var(--amber-text)] font-medium":"text-muted-foreground hover:bg-muted"}`,children:"general"===e?o?.skillTemplateGeneral??"General":"tool-use"===e?o?.skillTemplateToolUse??"Tool-use":o?.skillTemplateWorkflow??"Workflow"},e))})]}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("label",{className:"text-2xs text-muted-foreground",children:o?.skillContent??"Content"}),(0,r.jsx)("textarea",{value:d||p(l||"my-skill"),onChange:e=>c(e.target.value),rows:16,placeholder:"Skill instructions (markdown)...",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring resize-y font-mono"})]}),n&&(0,r.jsxs)("p",{className:"text-2xs text-destructive flex items-center gap-1",children:[(0,r.jsx)(C.A,{size:10}),n]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("button",{onClick:()=>e(l.trim(),d||p(l.trim()||"my-skill")),disabled:!l.trim()||s,className:"flex items-center gap-1 px-2.5 py-1 text-xs rounded-md disabled:opacity-40 disabled:cursor-not-allowed transition-colors bg-[var(--amber)] text-[var(--amber-foreground)]",children:[s&&(0,r.jsx)(E.A,{size:10,className:"animate-spin"}),o?.saveSkill??"Save"]}),(0,r.jsx)("button",{onClick:t,className:"px-2.5 py-1 text-xs rounded-md border border-border text-muted-foreground hover:text-foreground transition-colors",children:o?.cancelSkill??"Cancel"})]})]})}function s6({t:e}){let t,s,n=e.settings?.mcp,o=(0,eY.cd)(),[l,i]=(0,a.useState)([]),[c,m]=(0,a.useState)(!0),[x,p]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),[f,b]=(0,a.useState)(!1),[v,y]=(0,a.useState)(""),[N,k]=(0,a.useState)(""),[S,C]=(0,a.useState)(!1),[A,z]=(0,a.useState)(null),[$,T]=(0,a.useState)(""),[R,M]=(0,a.useState)(""),[I,D]=(0,a.useState)({}),[P,L]=(0,a.useState)(null),[F,O]=(0,a.useState)({}),[_,W]=(0,a.useState)(!1),[U,B]=(0,a.useState)(null),H=(0,a.useCallback)(async()=>{try{let e=await (0,w.n)("/api/skills");i(e.skills),O({})}catch(t){let e=t instanceof Error?t.message:"Failed to load skills";console.error("fetchSkills error:",e),O(t=>({...t,_root:e}))}m(!1)},[]);(0,a.useEffect)(()=>{H()},[H]);let Y=(0,a.useMemo)(()=>{if(!N)return l;let e=N.toLowerCase();return l.filter(t=>t.name.toLowerCase().includes(e)||t.description.toLowerCase().includes(e))},[l,N]),J=(0,a.useMemo)(()=>Y.filter(e=>"user"===e.source),[Y]),G=(0,a.useMemo)(()=>Y.filter(e=>"builtin"===e.source),[Y]),q=async(e,t)=>{if(o){await o.toggleSkill(e,t),i(s=>s.map(s=>s.name===e?{...s,enabled:t}:s));return}try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"toggle",name:e,enabled:t})}),i(s=>s.map(s=>s.name===e?{...s,enabled:t}:s)),O(t=>{let s={...t};return delete s[e],s})}catch(s){let t=s instanceof Error?s.message:"Failed to toggle skill";console.error("handleToggle error:",t),O(s=>({...s,[e]:t}))}},V=e=>{B(e)},Q=async e=>{try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",name:e})}),D(t=>{let s={...t};return delete s[e],s}),A===e&&z(null),x===e&&p(null),O(t=>{let s={...t};return delete s[e],s}),H(),window.dispatchEvent(new Event("mindos:skills-changed"))}catch(s){let t=s instanceof Error?s.message:"Failed to delete skill";console.error("handleDelete error:",t),O(s=>({...s,[e]:t}))}},X=async e=>{if(!I[e]){L(e);try{let t=await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"read",name:e})});D(s=>({...s,[e]:t.content})),O(t=>{let s={...t};return delete s[e],s})}catch(t){O(s=>({...s,[e]:t instanceof Error?t.message:"Failed to load skill content"}))}finally{L(null)}}},Z=e=>{let t=x===e?null:e;p(t),t&&X(e),A&&A!==e&&z(null)},ee=e=>{z(e),T(I[e]||""),M("")},et=async e=>{b(!0),M("");try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"update",name:e,content:$})}),D(t=>({...t,[e]:$})),z(null),H(),window.dispatchEvent(new Event("mindos:skills-changed"))}catch(e){M(e instanceof Error?e.message:"Failed to save skill")}finally{b(!1)}},es=()=>{z(null),T(""),M("")},er=async(e,t)=>{if(e){b(!0),y("");try{await (0,w.n)("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create",name:e,content:t})}),g(!1),H(),window.dispatchEvent(new Event("mindos:skills-changed"))}catch(e){y(e instanceof Error?e.message:"Failed to create skill")}finally{b(!1)}}};return c?(0,r.jsx)("div",{className:"flex justify-center py-4",children:(0,r.jsx)(E.A,{size:16,className:"animate-spin text-muted-foreground"})}):(0,r.jsxs)("div",{className:"space-y-3 pt-2",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(d.A,{size:12,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground"}),(0,r.jsx)("input",{type:"text",value:N,onChange:e=>k(e.target.value),placeholder:n?.searchSkills??"Search skills...",className:"w-full pl-7 pr-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring"}),N&&(0,r.jsx)("button",{onClick:()=>k(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",children:(0,r.jsx)(u.A,{size:10})})]}),(t=l.find(e=>"mindos"===e.name)?.enabled??!0?"en":"zh",s=async e=>{if(e!==t&&!_){W(!0);try{"en"===e?(await q("mindos",!0),await q("mindos-zh",!1)):(await q("mindos-zh",!0),await q("mindos",!1))}catch(e){console.error("Lang switch failed:",e)}finally{W(!1)}}},(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:n?.skillLanguage??"Skill Language"}),(0,r.jsxs)("div",{className:"flex rounded-md border border-border overflow-hidden",children:[(0,r.jsx)("button",{onClick:()=>s("en"),disabled:_,className:`px-2.5 py-1 text-xs transition-colors disabled:opacity-50 disabled:cursor-not-allowed ${"en"===t?"bg-[var(--amber-subtle)] text-[var(--amber-text)] font-medium":"text-muted-foreground hover:bg-muted"}`,children:n?.skillLangEn??"English"}),(0,r.jsx)("button",{onClick:()=>s("zh"),disabled:_,className:`px-2.5 py-1 text-xs transition-colors disabled:opacity-50 disabled:cursor-not-allowed border-l border-border ${"zh"===t?"bg-[var(--amber-subtle)] text-[var(--amber-text)] font-medium":"text-muted-foreground hover:bg-muted"}`,children:n?.skillLangZh??"中文"})]})]})),0===Y.length&&N&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground text-center py-3",children:n?.noSkillsMatch?n.noSkillsMatch(N):`No skills match "${N}"`}),J.length>0&&(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsx)("div",{className:"flex items-center gap-2 text-xs font-medium text-muted-foreground",children:(0,r.jsxs)("span",{children:[n?.customGroup??"Custom"," (",J.length,")"]})}),(0,r.jsx)("div",{className:"space-y-1.5",children:J.map(e=>(0,r.jsx)(s2,{skill:e,expanded:x===e.name,onExpand:Z,onToggle:q,onDelete:V,onEditStart:ee,onEditSave:et,onEditCancel:es,editing:A,editContent:$,setEditContent:T,editError:R,saving:f,fullContent:I,loadingContent:P,loadErrors:F,m:n},e.name))})]}),G.length>0&&(0,r.jsxs)("div",{className:"space-y-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground cursor-pointer hover:text-foreground transition-colors",onClick:()=>C(!S),children:[S?(0,r.jsx)(j.A,{size:12}):(0,r.jsx)(en.A,{size:12}),(0,r.jsxs)("span",{children:[n?.builtinGroup??"Built-in"," (",G.length,")"]})]}),!S&&(0,r.jsx)("div",{className:"space-y-1.5",children:G.map(e=>(0,r.jsx)(s2,{skill:e,expanded:x===e.name,onExpand:Z,onToggle:q,onDelete:V,onEditStart:ee,onEditSave:et,onEditCancel:es,editing:A,editContent:$,setEditContent:T,editError:R,saving:f,fullContent:I,loadingContent:P,loadErrors:F,m:n},e.name))})]}),h?(0,r.jsx)(s4,{onSave:er,onCancel:()=>{g(!1),y("")},saving:f,error:v,m:n}):(0,r.jsxs)("button",{onClick:()=>g(!0),className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)(K.A,{size:12}),n?.addSkill??"+ Add Skill"]}),(0,r.jsx)(s8,{agents:o?.agents??[],skillName:l.find(e=>"mindos"===e.name)?.enabled??!0?"mindos":"mindos-zh",m:n}),(0,r.jsx)(eb.TM,{open:!!U,title:"Delete skill?",message:U?n?.skillDeleteConfirm?.(U)??`Delete skill "${U}"?`:"",confirmLabel:"Delete",cancelLabel:"Cancel",variant:"destructive",onConfirm:async()=>{B(null),await Q(U)},onCancel:()=>B(null)})]})}function s8({agents:e,skillName:t,m:s}){let[n,o]=(0,a.useState)("claude-code"),l=`npx skills add GeminiLight/MindOS --skill ${t} -a ${n} -g -y`,i=`~/.agents/skills/${t}/SKILL.md`,d=async()=>{await (0,sj.l)(l)&&ef.oR.copy()},c=e.filter(e=>e.present&&e.installed),u=e.filter(e=>e.present&&!e.installed),m=e.filter(e=>!e.present);return(0,r.jsxs)("div",{className:"border-t border-border pt-3 mt-3 space-y-2.5",children:[(0,r.jsx)("p",{className:"text-2xs font-medium text-muted-foreground",children:s?.cliInstallHint??"Install via CLI:"}),(0,r.jsx)(sX.A,{value:n,onChange:o,size:"sm",options:[...c.length>0?[{label:s?.connectedGroup??"Connected",options:c.map(e=>({value:e.key,label:e.name}))}]:[],...u.length>0?[{label:s?.detectedGroup??"Detected",options:u.map(e=>({value:e.key,label:e.name}))}]:[],...m.length>0?[{label:s?.notFoundGroup??"Not Installed",options:m.map(e=>({value:e.key,label:e.name}))}]:[]]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("code",{className:"flex-1 text-[10px] font-mono bg-muted/50 border border-border rounded-lg px-2.5 py-2 text-muted-foreground select-all overflow-x-auto whitespace-nowrap",children:l}),(0,r.jsx)("button",{onClick:d,className:"p-1.5 rounded-md border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0",children:(0,r.jsx)(et.A,{size:11})})]}),(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground",children:[s?.skillPathHint??"Skill files installed at:"," ",(0,r.jsx)("code",{className:"font-mono text-[10px] bg-muted px-1 py-0.5 rounded",children:i})]})]})}function s9({t:e}){let t=(0,eY.cd)(),s=e.settings?.mcp,[n,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)("stdio"),u=(0,a.useRef)(void 0);if((0,a.useEffect)(()=>()=>clearInterval(u.current),[]),!t||t.loading)return(0,r.jsx)("div",{className:"flex justify-center py-8",children:(0,r.jsx)(E.A,{size:18,className:"animate-spin text-muted-foreground"})});let m=t.agents.filter(e=>e.present&&e.installed),x=t.agents.filter(e=>e.present&&!e.installed),p=t.agents.filter(e=>!e.present),h=l||(t.agents[0]?.key??""),g=t.agents.find(e=>e.key===h);return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)(s7,{status:t.status,restarting:n,onRestart:async()=>{o(!0);try{await (0,w.n)("/api/mcp/restart",{method:"POST"})}catch(e){console.error("[McpTab] Restart request failed:",e),o(!1);return}let e=Date.now()+6e4;clearInterval(u.current),u.current=setInterval(async()=>{if(Date.now()>e){clearInterval(u.current),o(!1),console.warn("[McpTab] MCP restart timed out after 60s");return}try{(await (0,w.n)("/api/mcp/status",{timeout:3e3})).running&&(clearInterval(u.current),o(!1),t.refresh())}catch(e){console.warn("[McpTab] Status poll attempt failed:",e)}},3e3)},onRefresh:t.refresh,m:s}),t.agents.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3",children:"MCP"}),(0,r.jsx)(re,{connectedAgents:m,detectedAgents:x,notFoundAgents:p,currentAgent:g??null,mcpStatus:t.status,selectedAgent:h,onSelectAgent:e=>i(e),transport:d,onTransportChange:c,onCopy:async e=>{await (0,sj.l)(e)&&ef.oR.copy()},m:s})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3",children:s?.skillsTitle??"Skills"}),(0,r.jsx)(s6,{t:e})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider mb-3",children:s?.agentsTitle??"Agent Configuration"}),(0,r.jsx)(sZ,{agents:t.agents,t:e,onRefresh:t.refresh})]})]})}function s7({status:e,restarting:t,onRestart:s,onRefresh:n,m:a}){return e?(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 flex items-center justify-between",children:[(0,r.jsx)("div",{className:"flex items-center gap-2.5 text-sm",children:t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{size:12,className:"animate-spin text-[var(--amber)]"}),(0,r.jsx)("span",{className:"text-[var(--amber)]",children:a?.restarting??"Restarting..."})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${e.running?"bg-success":"bg-muted-foreground"}`}),(0,r.jsx)("span",{className:"text-foreground font-medium",children:e.running?a?.running??"Running":a?.stopped??"Stopped"}),e.running&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground",children:e.endpoint}),(0,r.jsx)("span",{className:"text-muted-foreground",children:"\xb7"}),(0,r.jsxs)("span",{className:"text-muted-foreground",children:[e.toolCount," tools"]})]})]})}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[!e.running&&!t&&(0,r.jsxs)("button",{onClick:s,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(sS.A,{size:14})," ",a?.restart??"Restart"]}),(0,r.jsx)("button",{onClick:n,className:"p-1.5 rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:(0,r.jsx)(b.A,{size:14})})]})]}):null}function re({connectedAgents:e,detectedAgents:t,notFoundAgents:s,currentAgent:n,mcpStatus:o,selectedAgent:l,onSelectAgent:i,transport:d,onTransportChange:c,onCopy:u,m}){let x=(0,a.useMemo)(()=>n?(0,sv.$k)(n,o,d):null,[n,o,d]);return(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[(0,r.jsx)(sX.A,{value:l,onChange:i,options:[...e.length>0?[{label:m?.connectedGroup??"Connected",options:e.map(e=>({value:e.key,label:`${e.name} — ${e.transport??"stdio"} \xb7 ${e.scope??"global"}`}))}]:[],...t.length>0?[{label:m?.detectedGroup??"Detected (not configured)",options:t.map(e=>({value:e.key,label:`${e.name} — ${m?.notConfigured??"not configured"}`}))}]:[],...s.length>0?[{label:m?.notFoundGroup??"Not Installed",options:s.map(e=>({value:e.key,label:e.name}))}]:[]]}),n&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[n.present&&n.installed?(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-2xs font-medium bg-success/10 text-success",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-success inline-block"}),m?.tagConnected??"Connected"]}):n.present&&!n.installed?(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-2xs font-medium bg-[var(--amber-subtle)] text-[var(--amber-text)]",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--amber)] inline-block"}),m?.tagDetected??"Detected — not configured"]}):(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-2xs font-medium bg-muted text-muted-foreground",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-muted-foreground inline-block"}),m?.tagNotInstalled??"Not installed"]}),n.transport&&(0,r.jsx)("span",{className:"px-1.5 py-0.5 rounded text-2xs bg-muted text-muted-foreground",children:n.transport}),n.scope&&(0,r.jsx)("span",{className:"px-1.5 py-0.5 rounded text-2xs bg-muted text-muted-foreground",children:n.scope})]}),(0,r.jsxs)("div",{className:"flex items-center rounded-lg border border-border overflow-hidden w-fit",children:[(0,r.jsxs)("button",{onClick:()=>c("stdio"),className:`flex items-center gap-1.5 px-3 py-1.5 text-sm transition-colors ${"stdio"===d?"bg-muted text-foreground font-medium":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(sb.A,{size:14})," ",m?.transportLocal??"Local (stdio)"]}),(0,r.jsxs)("button",{onClick:()=>c("http"),className:`flex items-center gap-1.5 px-3 py-1.5 text-sm transition-colors ${"http"===d?"bg-muted text-foreground font-medium":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(eK.A,{size:14})," ",m?.transportRemote??"Remote (HTTP)"]})]}),"http"===d&&o&&!o.authConfigured&&(0,r.jsxs)("p",{className:"flex items-center gap-1.5 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(C.A,{size:12}),m?.noAuthWarning??"Auth not configured. Run `mindos token` to set up."]}),x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("pre",{className:"text-[11px] font-mono bg-muted/50 border border-border rounded-lg p-3 overflow-x-auto whitespace-pre select-all max-h-[240px] overflow-y-auto",children:x.displaySnippet}),(0,r.jsxs)("div",{className:"flex items-center gap-3 text-sm",children:[(0,r.jsxs)("button",{onClick:()=>u(x.snippet),className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors shrink-0",children:[(0,r.jsx)(et.A,{size:14}),m?.copyConfig??"Copy config"]}),(0,r.jsx)("span",{className:"text-muted-foreground",children:"→"}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground truncate text-2xs",children:x.path})]})]})]})]})}var rt=s(16950);function rs(){let e=window;return e.mindos?.checkUpdate?e.mindos:null}let rr="https://github.com/GeminiLight/MindOS/releases",rn="mindos_update_in_progress",ra={downloading:{en:"Downloading update",zh:"下载更新"},skills:{en:"Updating skills",zh:"更新 Skills"},rebuilding:{en:"Rebuilding app",zh:"重新构建应用"},restarting:{en:"Restarting server",zh:"重启服务"}};function ro({status:e}){switch(e){case"done":return(0,r.jsx)(N.A,{size:14,className:"text-success shrink-0"});case"running":return(0,r.jsx)(E.A,{size:14,className:"animate-spin shrink-0 text-[var(--amber)]"});case"failed":return(0,r.jsx)(C.A,{size:14,className:"text-destructive shrink-0"});default:return(0,r.jsx)(rt.A,{size:14,className:"text-muted-foreground/40 shrink-0"})}}function rl(){let{t:e}=(0,y.Y)(),t=e.settings.update,s=rs(),[n,o]=(0,a.useState)("idle"),[l,i]=(0,a.useState)(!1),[d,c]=(0,a.useState)(null),[u,m]=(0,a.useState)(""),[x,p]=(0,a.useState)(0),[h,g]=(0,a.useState)("");(0,a.useEffect)(()=>{s.getAppInfo?.().then(e=>{e?.version&&m(e.version)}).catch(e=>{console.warn("[UpdateTab] getAppInfo failed:",e)}),f();let e=[];return s.onUpdateAvailable&&e.push(s.onUpdateAvailable(e=>{i(!0),e?.version&&c(e.version),o(e=>"checking"===e?"idle":e)})),s.onUpdateProgress&&e.push(s.onUpdateProgress(e=>p(Math.round(e.percent)))),s.onUpdateReady&&e.push(s.onUpdateReady(()=>o("ready"))),s.onUpdateError&&e.push(s.onUpdateError(e=>{o("error"),g(e?.message||"Update failed. Please try again.")})),()=>e.forEach(e=>e())},[]);let f=async()=>{o("checking"),g("");try{let e=await s.checkUpdate();i(e.available),e.version&&c(e.version),o("idle")}catch{o("error"),g(t?.error??"Failed to check for updates.")}},v=async()=>{o("downloading"),p(0);try{await s.installUpdate()}catch{o("error"),g("Update failed. Please try again.")}};return(0,r.jsx)("div",{className:"space-y-6",children:(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(sb.A,{size:14,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:"MindOS Desktop"})]}),u&&(0,r.jsxs)("span",{className:"text-xs font-mono text-muted-foreground",children:["v",u]})]}),"checking"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,r.jsx)(E.A,{size:13,className:"animate-spin"}),t?.checking??"Checking for updates..."]}),"idle"===n&&!l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),t?.upToDate??"You're up to date"]}),"idle"===n&&l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(e9.A,{size:13}),d?`Update available: v${d}`:"Update available"]}),"downloading"===n&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-foreground",children:[(0,r.jsx)(E.A,{size:13,className:"animate-spin text-[var(--amber)]"}),t?.desktopDownloading??"Downloading update..."]}),(0,r.jsx)("div",{className:"h-1 rounded-full bg-muted overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full bg-[var(--amber)] transition-all duration-300",style:{width:`${Math.max(x,3)}%`}})})]}),"ready"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),t?.desktopReady??"Update downloaded. Restart to apply."]}),"error"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive",children:[(0,r.jsx)(C.A,{size:13}),h]}),(0,r.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[(0,r.jsxs)("button",{onClick:f,disabled:"checking"===n||"downloading"===n,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:14,className:"checking"===n?"animate-spin":""}),t?.checkButton??"Check for Updates"]}),"idle"===n&&l&&(0,r.jsxs)("button",{onClick:v,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(e9.A,{size:14}),d?`Update to v${d}`:"Update"]}),"ready"===n&&(0,r.jsxs)("button",{onClick:async()=>{try{await s.installUpdate()}catch{o("error"),g(t?.error??"Failed to install update. Please try again.")}},className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(b.A,{size:14}),t?.desktopRestart??"Restart Now"]})]}),(0,r.jsxs)("div",{className:"border-t border-border/50 pt-3 space-y-2",children:[(0,r.jsxs)("a",{href:rr,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)($.A,{size:12}),t?.releaseNotes??"View release notes"]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground/60",children:t?.desktopHint??"Updates are delivered through the Desktop app auto-updater."})]})]})})}function ri(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>{t(!!rs())},[]),e)?(0,r.jsx)(rl,{}):(0,r.jsx)(rd,{})}function rd(){let{t:e,locale:t}=(0,y.Y)(),s=e.settings.update,[n,o]=(0,a.useState)(null),[l,i]=(0,a.useState)("idle"),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)([]),[x,p]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),f=(0,a.useRef)(void 0),v=(0,a.useRef)(void 0),j=(0,a.useRef)(""),k=(0,a.useCallback)(async()=>{i("checking"),c("");try{let e=await (0,w.n)("/api/update-check");if(o(e),j.current||(j.current=e.current),e.hasUpdate){let t=localStorage.getItem("mindos_update_dismissed");localStorage.setItem("mindos_update_latest",e.latest),window.dispatchEvent(new Event(e.latest===t?"mindos:update-dismissed":"mindos:update-available"))}else localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),window.dispatchEvent(new Event("mindos:update-dismissed"));i("idle")}catch{i("error"),c(s?.error??"Failed to check for updates.")}},[s]),S=(0,a.useCallback)(()=>{clearInterval(f.current),clearTimeout(v.current)},[]),A=(0,a.useCallback)(e=>{S(),o(e),i("updated"),localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),localStorage.removeItem(rn),window.dispatchEvent(new Event("mindos:update-dismissed")),setTimeout(()=>window.location.reload(),2e3)},[S]),z=(0,a.useCallback)(()=>{f.current=setInterval(async()=>{try{let e=await (0,w.n)("/api/update-status",{timeout:5e3});if(g(!1),e.stages?.length>0&&m(e.stages),"failed"===e.stage){S(),localStorage.removeItem(rn),p(e.error||"Update failed"),i("error");return}if("done"===e.stage)try{let e=await (0,w.n)("/api/update-check");if(e.current!==j.current)return void A(e)}catch{}}catch{g(!0);try{let e=await (0,w.n)("/api/update-check",{timeout:5e3});e.current&&e.current!==j.current&&(m(e=>e.map(e=>({...e,status:"done"}))),A(e))}catch{}}},3e3),v.current=setTimeout(()=>{S(),localStorage.removeItem(rn),i("timeout")},3e5)},[S,A]);(0,a.useEffect)(()=>{let e=localStorage.getItem(rn);if(e)try{let{originalVer:t}=JSON.parse(e);j.current=t,i("updating"),g(!0),m([{id:"downloading",status:"done"},{id:"skills",status:"done"},{id:"rebuilding",status:"done"},{id:"restarting",status:"running"}]),z()}catch{localStorage.removeItem(rn),k()}else k()},[]),(0,a.useEffect)(()=>S,[S]);let T=(0,a.useCallback)(async()=>{i("updating"),c(""),p(null),g(!1),m([{id:"downloading",status:"pending"},{id:"skills",status:"pending"},{id:"rebuilding",status:"pending"},{id:"restarting",status:"pending"}]),localStorage.setItem(rn,JSON.stringify({originalVer:j.current||n?.current,startedAt:Date.now()})),window.dispatchEvent(new Event("mindos:update-started"));try{await (0,w.n)("/api/update",{method:"POST"})}catch(e){if(e instanceof w.h){localStorage.removeItem(rn),p(e.message||"Update failed"),i("error");return}}z()},[z,n]),R=(0,a.useCallback)(()=>{p(null),T()},[T]),M="zh"===t?"zh":"en",I=u.filter(e=>"done"===e.status).length,D=u.length>0?Math.round(I/u.length*100):0;return(0,r.jsx)("div",{className:"space-y-6",children:(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:"MindOS"}),n&&(0,r.jsxs)("span",{className:"text-xs font-mono text-muted-foreground",children:["v",n.current]})]}),"checking"===l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,r.jsx)(E.A,{size:13,className:"animate-spin"}),s?.checking??"Checking for updates..."]}),"idle"===l&&n&&!n.hasUpdate&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),s?.upToDate??"You're up to date"]}),"idle"===l&&n?.hasUpdate&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(e9.A,{size:13}),s?.available?s.available(n.current,n.latest):`Update available: v${n.current} → v${n.latest}`]}),"updating"===l&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"space-y-1.5",children:u.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,r.jsx)(ro,{status:e.status}),(0,r.jsx)("span",{className:"pending"===e.status?"text-muted-foreground/50":"running"===e.status?"text-foreground":"text-muted-foreground",children:ra[e.id]?.[M]??e.id})]},e.id))}),(0,r.jsx)("div",{className:"h-1 rounded-full bg-muted overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full bg-[var(--amber)] transition-all duration-500 ease-out",style:{width:`${Math.max(D,5)}%`}})}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground",children:h?s?.serverRestarting??"Server is restarting, please wait...":s?.updatingHint??"This may take 1–3 minutes. Do not close this page."})]}),"updated"===l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-success",children:[(0,r.jsx)(N.A,{size:13}),s?.updated??"Updated successfully! Reloading..."]}),"timeout"===l&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--amber-text)]",children:[(0,r.jsx)(C.A,{size:13}),s?.timeout??"Update may still be in progress."]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground",children:s?.timeoutHint??"The server may need more time to rebuild. Try refreshing."}),(0,r.jsxs)("button",{onClick:()=>window.location.reload(),className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(b.A,{size:12}),s?.refreshButton??"Refresh Page"]})]}),"error"===l&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive",children:[(0,r.jsx)(C.A,{size:13}),x||d]}),x&&(0,r.jsxs)("button",{onClick:R,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(b.A,{size:12}),s?.retryButton??"Retry Update"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[(0,r.jsxs)("button",{onClick:k,disabled:"checking"===l||"updating"===l,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[(0,r.jsx)(b.A,{size:14,className:"checking"===l?"animate-spin":""}),s?.checkButton??"Check for Updates"]}),n?.hasUpdate&&"updating"!==l&&"updated"!==l&&(0,r.jsxs)("button",{onClick:T,className:"flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-lg font-medium text-[var(--amber-foreground)] bg-[var(--amber)] transition-colors",children:[(0,r.jsx)(e9.A,{size:14}),s?.updateButton?s.updateButton(n.latest):`Update to v${n.latest}`]})]}),(0,r.jsxs)("div",{className:"border-t border-border/50 pt-3 space-y-2",children:[(0,r.jsxs)("a",{href:rr,target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)($.A,{size:12}),s?.releaseNotes??"View release notes"]}),(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground/60",children:[s?.hint??"Updates are installed via npm. Equivalent to running"," ",(0,r.jsx)("code",{className:"font-mono bg-muted px-1 py-0.5 rounded",children:"mindos update"})," ",s?.inTerminal??"in your terminal."]})]})]})})}function rc(){let e=window;return e.mindos?.uninstallApp?e.mindos:null}function ru(){let{t:e}=(0,y.Y)(),t=e.settings.uninstall,s=!!rc(),[n,o]=(0,a.useState)("idle"),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(!0),[u,m]=(0,a.useState)(!0),x=async()=>{o("running"),i("");try{if(await (0,w.n)("/api/uninstall",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({removeConfig:d})}),s&&u){let e=rc();if(e?.uninstallApp){let t=await e.uninstallApp();if(!t.ok)throw Error(t.error||"Failed to remove app");o("success");return}}o("success")}catch(e){i(e instanceof Error?e.message:String(e)),o("error")}},p=({checked:e,onChange:t,label:s,desc:n,disabled:a})=>(0,r.jsxs)("label",{className:`flex items-start gap-2.5 p-2.5 rounded bg-muted/30 cursor-pointer select-none ${a?"opacity-50 cursor-not-allowed":"hover:bg-muted/50"}`,children:[(0,r.jsx)("input",{type:"checkbox",checked:e,onChange:e=>!a&&t(e.target.checked),disabled:a,className:"mt-0.5 form-check"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium text-foreground",children:s}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:n})]})]});return(0,r.jsxs)(T.L7,{icon:(0,r.jsx)(er.A,{size:15}),title:t.title,description:s?t.descDesktop:t.descCli,children:[(0,r.jsxs)("div",{className:"flex gap-2.5 p-3 rounded-md bg-muted/50 border border-border",children:[(0,r.jsx)(tr.A,{size:14,className:"text-success shrink-0 mt-0.5"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground leading-relaxed",children:t.kbSafe})]}),"idle"===n||"confirming"===n?(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(p,{checked:!0,disabled:!0,label:t.stopServices,desc:t.stopServicesDesc,onChange:()=>{}}),(0,r.jsx)(p,{checked:d,onChange:c,label:t.removeConfig,desc:t.removeConfigDesc}),!s&&(0,r.jsx)(p,{checked:!0,disabled:!0,label:t.removeNpm,desc:t.removeNpmDesc,onChange:()=>{}}),s&&(0,r.jsx)(p,{checked:u,onChange:m,label:t.removeApp,desc:t.removeAppDesc})]}):null,"idle"===n&&(0,r.jsxs)("button",{onClick:()=>o("confirming"),className:"px-3.5 py-2 text-sm font-medium rounded-lg bg-error/10 text-error border border-error/20 hover:bg-error/20 transition-colors focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-40 disabled:cursor-not-allowed",children:[(0,r.jsx)(er.A,{size:12,className:"inline mr-1.5 -mt-px"}),t.confirmButton]}),"confirming"===n&&(0,r.jsxs)("div",{className:"p-3 rounded-md border border-error/30 bg-error/5 space-y-2.5",children:[(0,r.jsx)("p",{className:"text-xs font-medium text-error",children:t.confirmTitle}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{onClick:x,className:"px-3.5 py-2 text-sm font-medium rounded-lg bg-error text-white hover:bg-error/90 transition-colors focus-visible:ring-1 focus-visible:ring-ring",children:t.confirmButton}),(0,r.jsx)("button",{onClick:()=>o("idle"),className:"px-3.5 py-2 text-sm font-medium rounded-lg bg-muted text-foreground hover:bg-muted/80 transition-colors focus-visible:ring-1 focus-visible:ring-ring",children:t.cancelButton})]})]}),"running"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 py-2",children:[(0,r.jsx)(E.A,{size:14,className:"animate-spin text-muted-foreground"}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:t.running})]}),"success"===n&&(0,r.jsxs)("div",{className:"flex items-center gap-2 py-2",children:[(0,r.jsx)(N.A,{size:14,className:"text-success"}),(0,r.jsx)("span",{className:"text-xs text-success font-medium",children:s&&u?t.successDesktop:t.success})]}),"error"===n&&(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(ty.A,{size:14,className:"text-error"}),(0,r.jsx)("span",{className:"text-xs text-error font-medium",children:t.error})]}),l&&(0,r.jsx)("p",{className:"text-[11px] text-muted-foreground font-mono",children:l}),(0,r.jsx)("button",{onClick:()=>o("idle"),className:"px-3 py-1.5 text-xs font-medium rounded-md bg-muted text-foreground hover:bg-muted/80 transition-colors focus-visible:ring-1 focus-visible:ring-ring",children:t.cancelButton})]})]})}function rm({visible:e,initialTab:t,variant:s,onClose:o}){let[l,i]=(0,a.useState)("ai"),[d,m]=(0,a.useState)(null),[x,p]=(0,a.useState)(!1),[h,g]=(0,a.useState)("idle"),{t:f,locale:v,setLocale:j}=(0,y.Y)(),k=(0,n.useRouter)(),S=(0,a.useRef)(void 0),A=(0,a.useRef)(!1),[z,$]=(0,a.useState)("lora"),[T,R]=(0,a.useState)("15px"),[M,D]=(0,a.useState)("780px"),[P,L]=(0,a.useState)(!0),[F,O]=(0,a.useState)(()=>{let e=localStorage.getItem("mindos_update_dismissed"),t=localStorage.getItem("mindos_update_latest");return!!t&&t!==e});(0,a.useEffect)(()=>{let e=()=>O(!0),t=()=>O(!1);return window.addEventListener("mindos:update-available",e),window.addEventListener("mindos:update-dismissed",t),()=>{window.removeEventListener("mindos:update-available",e),window.removeEventListener("mindos:update-dismissed",t)}},[]);let _="panel"===s,W=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(_?e&&!W.current:e){(0,w.n)("/api/settings").then(e=>{m(e),A.current=!0}).catch(()=>g("load-error")),$(localStorage.getItem("prose-font")??"lora"),R(localStorage.getItem("prose-font-size")??"15px"),D(localStorage.getItem("content-width")??"780px");let e=localStorage.getItem("theme");L(e?"dark"===e:window.matchMedia("(prefers-color-scheme: dark)").matches),g("idle")}e||(A.current=!1),W.current=e},[e,_]),(0,a.useEffect)(()=>{e&&t&&i(t)},[e,t]),(0,a.useEffect)(()=>{document.documentElement.style.setProperty("--prose-font-override",{lora:"'Lora', Georgia, serif","ibm-plex-sans":"'IBM Plex Sans', sans-serif",geist:"var(--font-geist-sans), sans-serif","ibm-plex-mono":"'IBM Plex Mono', monospace"}[z]??""),localStorage.setItem("prose-font",z)},[z]),(0,a.useEffect)(()=>{document.documentElement.style.setProperty("--prose-font-size-override",T),localStorage.setItem("prose-font-size",T)},[T]),(0,a.useEffect)(()=>{document.documentElement.style.setProperty("--content-width-override",M),localStorage.setItem("content-width",M)},[M]),(0,a.useEffect)(()=>{if("modal"!==s||!e||!o)return;let t=e=>{"Escape"===e.key&&o()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,e,o]);let U=(0,a.useCallback)(async e=>{p(!0);try{await (0,w.n)("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ai:e.ai,agent:e.agent,mindRoot:e.mindRoot,webPassword:e.webPassword,authToken:e.authToken})}),g("saved"),setTimeout(()=>g("idle"),2500)}catch{g("error"),setTimeout(()=>g("idle"),2500)}finally{p(!1)}},[]);(0,a.useEffect)(()=>{if(d&&A.current)return clearTimeout(S.current),S.current=setTimeout(()=>U(d),800),()=>clearTimeout(S.current)},[d,U]);let B=(0,a.useCallback)(e=>{m(t=>t?{...t,ai:{...t.ai,...e}}:t)},[]),H=(0,a.useCallback)(e=>{m(t=>t?{...t,agent:{...t.agent??{},...e}}:t)},[]),K=(0,a.useCallback)(async()=>{if(!d)return;let e={provider:"anthropic",providers:{anthropic:{apiKey:"",model:""},openai:{apiKey:"",model:"",baseUrl:""}}};m(t=>t?{...t,ai:e}:t),setTimeout(()=>{(0,w.n)("/api/settings").then(e=>{m(e)}).catch(()=>g("error"))},1300)},[d]),Y=d?.envOverrides??{},J=_?12:13,G=[{id:"ai",label:f.settings.tabs.ai,icon:(0,r.jsx)(tk.A,{size:J})},{id:"mcp",label:f.settings.tabs.mcp??"MCP & Skills",icon:(0,r.jsx)(s$.A,{size:J})},{id:"knowledge",label:f.settings.tabs.knowledge,icon:(0,r.jsx)(c.A,{size:J})},{id:"appearance",label:f.settings.tabs.appearance,icon:(0,r.jsx)(sT.A,{size:J})},{id:"sync",label:f.settings.tabs.sync??"Sync",icon:(0,r.jsx)(b.A,{size:J})},{id:"update",label:f.settings.tabs.update??"Update",icon:(0,r.jsx)(e9.A,{size:J}),badge:F},{id:"uninstall",label:f.settings.tabs.uninstall??"Uninstall",icon:(0,r.jsx)(er.A,{size:J})}],q=G.find(e=>e.id===l)?.label??"",V=()=>(0,r.jsx)("div",{className:`flex-1 overflow-y-auto min-h-0 ${_?"px-4 py-4 space-y-4":"px-5 py-5 space-y-5"}`,children:"load-error"===h&&("ai"===l||"knowledge"===l)?(0,r.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-center",children:[(0,r.jsx)(C.A,{size:_?18:20,className:"text-destructive"}),(0,r.jsx)("p",{className:`${_?"text-xs":"text-sm"} text-destructive font-medium`,children:"Failed to load settings"}),!_&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Check that the server is running and AUTH_TOKEN is configured correctly."})]}):d||"appearance"===l||"mcp"===l||"sync"===l||"update"===l||"uninstall"===l?(0,r.jsxs)(r.Fragment,{children:["ai"===l&&d?.ai&&(0,r.jsx)(sR,{data:d,updateAi:B,updateAgent:H,t:f}),"appearance"===l&&(0,r.jsx)(sB,{font:z,setFont:$,fontSize:T,setFontSize:R,contentWidth:M,setContentWidth:D,dark:P,setDark:L,locale:v,setLocale:j,t:f}),"knowledge"===l&&d&&(0,r.jsx)(sV,{data:d,setData:m,t:f}),"sync"===l&&(0,r.jsx)(I,{t:f}),"mcp"===l&&(0,r.jsx)(s9,{t:f}),"update"===l&&(0,r.jsx)(ri,{}),"uninstall"===l&&(0,r.jsx)(ru,{})]}):(0,r.jsx)("div",{className:"flex justify-center py-8",children:(0,r.jsx)(E.A,{size:_?16:18,className:"animate-spin text-muted-foreground"})})}),Q=()=>"ai"===l||"knowledge"===l?(0,r.jsxs)("div",{className:`${_?"px-4 py-2":"px-5 py-2.5"} border-t border-border shrink-0 flex items-center justify-between`,children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:["ai"===l&&Object.values(Y).some(Boolean)&&(0,r.jsxs)("button",{onClick:K,disabled:x||!d,className:`flex items-center gap-1.5 ${_?"px-2.5 py-1 text-xs rounded-md":"px-3 py-1.5 text-sm rounded-lg"} border border-border text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[(0,r.jsx)(sS.A,{size:_?12:13}),f.settings.ai.restoreFromEnv]}),"knowledge"===l&&(0,r.jsxs)("a",{href:"/setup?force=1",className:`flex items-center gap-1.5 ${_?"px-2.5 py-1 text-xs rounded-md":"px-3 py-1.5 text-sm rounded-lg"} border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,r.jsx)(sS.A,{size:_?12:13}),f.settings.reconfigure]})]}),!_&&(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",role:"status","aria-live":"polite",children:[x&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{size:12,className:"animate-spin text-muted-foreground"}),(0,r.jsxs)("span",{className:"text-muted-foreground",children:[f.settings.save,"..."]})]}),"saved"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:f.settings.saved})]}),"error"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:f.settings.saveFailed})]})]})]}):null;return _?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border shrink-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[(0,r.jsx)(c.A,{size:14,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider font-display",children:"Settings"})]}),(0,r.jsx)("div",{className:"flex items-center gap-1.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px]",role:"status","aria-live":"polite",children:[x&&(0,r.jsx)(E.A,{size:10,className:"animate-spin text-muted-foreground"}),"saved"===h&&(0,r.jsx)(N.A,{size:10,className:"text-success"}),"error"===h&&(0,r.jsx)(C.A,{size:10,className:"text-destructive"})]})})]}),(0,r.jsx)("div",{className:"flex border-b border-border px-3 shrink-0 overflow-x-auto scrollbar-none gap-0",children:G.map(e=>(0,r.jsxs)("button",{onClick:()=>i(e.id),className:`flex items-center gap-1 px-2 py-2 text-xs font-medium transition-colors border-b-2 -mb-px whitespace-nowrap ${l===e.id?"border-[var(--amber)] text-foreground":"border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.icon,e.label,e.badge&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-error shrink-0"})]},e.id))}),V(),Q()]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex flex-col h-full md:hidden",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border shrink-0",children:[(0,r.jsx)("div",{className:"flex justify-center pt-2 pb-0 absolute top-0 left-1/2 -translate-x-1/2",children:(0,r.jsx)("div",{className:"w-8 h-1 rounded-full bg-muted-foreground/20"})}),(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[(0,r.jsx)(c.A,{size:15,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"font-display",children:f.settings.title})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px]",role:"status","aria-live":"polite",children:[x&&(0,r.jsx)(E.A,{size:12,className:"animate-spin text-muted-foreground"}),"saved"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:f.settings.saved})]}),"error"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:f.settings.saveFailed})]})]}),o&&(0,r.jsx)("button",{onClick:o,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:15})})]})]}),(0,r.jsxs)("div",{className:"flex border-b border-border px-4 shrink-0 overflow-x-auto scrollbar-none gap-0",children:[G.map(e=>(0,r.jsxs)("button",{onClick:()=>i(e.id),className:`flex items-center gap-1.5 px-3 py-2.5 text-sm font-medium transition-colors border-b-2 -mb-px whitespace-nowrap ${l===e.id?"border-[var(--amber)] text-foreground":"border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.icon,e.label,e.badge&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-error shrink-0"})]},e.id)),(0,r.jsxs)("button",{onClick:()=>{o?.(),k.push("/help")},className:"flex items-center gap-1.5 px-3 py-2.5 text-sm font-medium transition-colors border-b-2 -mb-px whitespace-nowrap border-transparent text-muted-foreground hover:text-foreground",children:[(0,r.jsx)(sA.A,{size:J}),f.sidebar.help]})]}),V(),Q()]}),(0,r.jsxs)("div",{className:"hidden md:flex flex-row h-full min-h-0",children:[(0,r.jsxs)("div",{className:"w-[180px] shrink-0 border-r border-border flex flex-col",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-border",children:[(0,r.jsx)(c.A,{size:15,className:"text-muted-foreground"}),(0,r.jsx)("span",{className:"text-sm font-medium font-display text-foreground",children:f.settings.title})]}),(0,r.jsx)("nav",{className:"flex-1 overflow-y-auto py-1.5",children:G.map(e=>(0,r.jsxs)("button",{onClick:()=>i(e.id),className:`flex items-center gap-2 w-full px-4 py-2 text-sm font-medium transition-colors relative ${l===e.id?"text-foreground bg-muted":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[l===e.id&&(0,r.jsx)("div",{className:"absolute left-0 top-1 bottom-1 w-[3px] rounded-r-full bg-[var(--amber)]"}),e.icon,e.label,e.badge&&(0,r.jsx)("span",{className:"ml-auto w-1.5 h-1.5 rounded-full bg-error shrink-0"})]},e.id))}),(0,r.jsx)("div",{className:"shrink-0 border-t border-border px-4 py-2",children:(0,r.jsxs)("button",{onClick:()=>{o?.(),k.push("/help")},className:"flex items-center gap-2 w-full px-0 py-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,r.jsx)(sA.A,{size:13}),f.sidebar.help]})})]}),(0,r.jsxs)("div",{className:"flex-1 flex flex-col min-w-0 min-h-0",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border shrink-0",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-foreground font-display",children:q}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 text-[10px]",role:"status","aria-live":"polite",children:[x&&(0,r.jsx)(E.A,{size:12,className:"animate-spin text-muted-foreground"}),"saved"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N.A,{size:12,className:"text-success"}),(0,r.jsx)("span",{className:"text-success",children:f.settings.saved})]}),"error"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:12,className:"text-destructive"}),(0,r.jsx)("span",{className:"text-destructive",children:f.settings.saveFailed})]})]}),o&&(0,r.jsx)("button",{onClick:o,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:15})})]})]}),V(),Q()]})]})]})}function rx({open:e,onClose:t,initialTab:s}){return e?(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[10vh] modal-backdrop",onClick:e=>e.target===e.currentTarget&&t(),children:(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Settings",className:"w-full md:max-w-3xl md:mx-4 bg-card border-t md:border border-border rounded-t-2xl md:rounded-xl shadow-2xl flex flex-col h-[88vh] md:h-[80vh] md:max-h-[85vh]",children:(0,r.jsx)(rm,{visible:e,variant:"modal",onClose:t,initialTab:s})})}):null}function rp(){let[e,t]=(0,a.useState)(!1),{t:s}=(0,y.Y)(),n=s.shortcutPanel,o="u">typeof navigator&&/Mac|iPhone|iPad/.test(navigator.userAgent)?"⌘":"Ctrl",l=(0,a.useMemo)(()=>[{keys:`${o} K`,label:n.toggleSearch,section:n.navigation},{keys:`${o} /`,label:n.toggleAskAI,section:n.navigation},{keys:`${o} ,`,label:n.openSettings,section:n.navigation},{keys:`${o} ?`,label:n.keyboardShortcuts,section:n.navigation},{keys:"Esc",label:n.closePanel,section:n.panelsSection},{keys:`${o} S`,label:n.saveFile,section:n.editor},{keys:`${o} Z`,label:n.undo,section:n.editor},{keys:`${o} Shift Z`,label:n.redo,section:n.editor}],[o,n]);if((0,a.useEffect)(()=>{let s=s=>{(s.metaKey||s.ctrlKey)&&s.shiftKey&&"/"===s.key&&(s.preventDefault(),t(e=>!e)),"Escape"===s.key&&e&&t(!1)};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[e]),!e)return null;let i=[...new Set(l.map(e=>e.section))];return(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center modal-backdrop",onClick:e=>e.target===e.currentTarget&&t(!1),children:(0,r.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":n.title,className:"w-full max-w-md mx-4 bg-card border border-border rounded-xl shadow-2xl overflow-hidden",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-5 py-3.5 border-b border-border",children:[(0,r.jsx)("span",{className:"text-sm font-medium font-display text-foreground",children:n.title}),(0,r.jsx)("button",{onClick:()=>t(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:15})})]}),(0,r.jsx)("div",{className:"px-5 py-4 space-y-4 max-h-[60vh] overflow-y-auto",children:i.map(e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-2",children:e}),(0,r.jsx)("div",{className:"space-y-1",children:l.filter(t=>t.section===e).map(e=>(0,r.jsxs)("div",{className:"flex items-center justify-between py-1.5",children:[(0,r.jsx)("span",{className:"text-xs text-foreground",children:e.label}),(0,r.jsx)("div",{className:"flex items-center gap-1",children:e.keys.split(" ").map((e,t)=>(0,r.jsx)("kbd",{className:"px-1.5 py-0.5 text-2xs rounded border border-border bg-muted text-muted-foreground font-mono min-w-[24px] text-center",children:e},t))})]},e.keys))})]},e))}),(0,r.jsx)("div",{className:"px-5 py-2.5 border-t border-border",children:(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground/60",children:["Press ",(0,r.jsx)("kbd",{className:"px-1 py-0.5 text-2xs rounded border border-border bg-muted font-mono",children:o}),(0,r.jsx)("kbd",{className:"px-1 py-0.5 text-2xs rounded border border-border bg-muted font-mono ml-0.5",children:"?"})," ",n.toggleHint]})})]})})}function rh(){let[e,t]=(0,a.useState)(0),[s,o]=(0,a.useState)(null),[i,d]=(0,a.useState)(!1),c=(0,a.useRef)(0),[m,x]=(0,a.useState)(!1),[p,h]=(0,a.useState)(!1),g=(0,n.usePathname)(),{t:f}=(0,y.Y)();(0,a.useEffect)(()=>{let e=!0,s=async()=>{try{let s=await (0,w.n)("/api/changes?op=summary");e&&t(s.unreadCount)}catch{e&&t(0)}};s();let r=setInterval(()=>void s(),15e3);return()=>{e=!1,clearInterval(r)}},[]),(0,a.useEffect)(()=>{e>c.current&&i&&d(!1),c.current=e},[e,i]);let b=(0,a.useMemo)(()=>!(e<=0||g?.startsWith("/changes"))&&(null===s||!(e<=s))&&!i,[s,g,e,i]);async function v(){try{await (0,w.n)("/api/changes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({op:"mark_seen"})})}catch{}finally{t(0),o(0)}}return((0,a.useEffect)(()=>{if(!b)return;let e=setTimeout(()=>d(!0),1e4);return()=>clearTimeout(e)},[b]),(0,a.useEffect)(()=>{if(b){x(!0);let e=requestAnimationFrame(()=>h(!0));return()=>cancelAnimationFrame(e)}h(!1);let e=setTimeout(()=>x(!1),160);return()=>clearTimeout(e)},[b]),m)?(0,r.jsx)("div",{className:`fixed right-3 top-[60px] md:right-6 md:top-4 z-30 transition-all duration-150 ease-out ${p?"opacity-100 translate-y-0 scale-100":"opacity-0 -translate-y-2 scale-[0.98] pointer-events-none"}`,children:(0,r.jsx)("div",{className:"rounded-2xl border bg-card/95 backdrop-blur px-3 py-2.5 shadow-lg min-w-[260px] max-w-[350px]",style:{borderColor:"color-mix(in srgb, var(--amber) 45%, var(--border))",boxShadow:"0 12px 28px color-mix(in srgb, var(--amber) 14%, rgba(0,0,0,.24))"},children:(0,r.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,r.jsx)("span",{className:"inline-flex h-7 w-7 items-center justify-center rounded-full text-[var(--amber)] bg-[var(--amber-subtle)]",children:(0,r.jsx)(eV.A,{size:14})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("p",{className:"text-xs text-foreground font-display whitespace-nowrap",children:f.changes.unreadBanner(e)}),(0,r.jsxs)("div",{className:"mt-1 flex items-center gap-1.5",children:[(0,r.jsx)(l(),{href:"/changes",className:"inline-flex items-center rounded-md px-2.5 py-1 text-xs font-medium bg-[var(--amber)] text-white focus-visible:ring-2 focus-visible:ring-ring hover:opacity-90",children:f.changes.reviewNow}),(0,r.jsx)("button",{type:"button",onClick:()=>void v(),className:"inline-flex items-center rounded-md px-2 py-1 text-xs font-medium bg-muted text-muted-foreground hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:f.changes.markAllRead})]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>o(e),"aria-label":f.changes.dismiss,className:"inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-muted/60 focus-visible:ring-2 focus-visible:ring-ring",children:(0,r.jsx)(u.A,{size:14})})]})})}):null}var rg=s(55711);let rf=(0,ei.createServerReference)("70dda7e9d10dfe6bc17f30ecdfbb5cd71bc0b43ae0",ei.callServer,void 0,ei.findSourceMapURL,"revertSpaceInitAction");function rb(){let[e,t]=(0,a.useState)(null),[s,o]=(0,a.useState)(!1),[l,i]=(0,a.useTransition)(),d=(0,n.useRouter)(),{t:c}=(0,y.Y)(),m=(0,a.useCallback)(()=>{o(!1),setTimeout(()=>t(null),200)},[]),x=(0,a.useCallback)(e=>{let s=e.detail;"working"===s.state?(t(s),requestAnimationFrame(()=>o(!0))):"done"===s.state?(t(e=>e?{...e,state:"done"}:null),d.refresh()):m()},[d,m]);(0,a.useEffect)(()=>(window.addEventListener("mindos:ai-init",x),()=>window.removeEventListener("mindos:ai-init",x)),[x]);let p=(0,a.useCallback)(()=>{e&&(m(),d.push(`/view/${(0,Q.O0)(e.spacePath+"/")}`))},[e,m,d]),h=(0,a.useCallback)(()=>{e&&i(async()=>{await rf(e.spacePath,e.spaceName,e.description),t(e=>e?{...e,state:"reverted"}:null),d.refresh(),window.dispatchEvent(new Event("mindos:files-changed")),setTimeout(m,2e3)})},[e,d,m]),g=(0,a.useCallback)(()=>{m()},[m]);if(!e)return null;let f=c.home,{state:b}=e,v="done"===b,j="reverted"===b;return(0,r.jsx)("div",{className:`fixed bottom-6 left-1/2 z-50 -translate-x-1/2 transition-all duration-200 ease-out ${s?"opacity-100 translate-y-0 scale-100":"opacity-0 translate-y-3 scale-[0.96] pointer-events-none"}`,children:(0,r.jsxs)("div",{className:"flex items-center gap-2.5 rounded-full border bg-card/95 backdrop-blur py-2 shadow-lg",style:{borderColor:"color-mix(in srgb, var(--amber) 40%, var(--border))",boxShadow:"0 8px 24px color-mix(in srgb, var(--amber) 12%, rgba(0,0,0,.2))",paddingLeft:"0.75rem",paddingRight:v?"0.5rem":"1rem"},children:[(0,r.jsx)("span",{className:`inline-flex h-6 w-6 items-center justify-center rounded-full shrink-0 ${j?"text-muted-foreground bg-muted":"text-[var(--amber)] bg-[var(--amber-subtle)]"} ${"working"===b?"animate-pulse":""}`,children:j?(0,r.jsx)(rg.A,{size:12}):v?(0,r.jsx)(e0.A,{size:13,strokeWidth:2.5}):(0,r.jsx)(tk.A,{size:13})}),(0,r.jsx)("span",{className:"text-xs text-foreground whitespace-nowrap select-none font-medium",children:j?f.aiInitReverted(e.spaceName):v?f.aiInitReady(e.spaceName):(0,r.jsxs)(r.Fragment,{children:[f.aiInitGenerating(e.spaceName),(0,r.jsx)(rv,{})]})}),v&&(0,r.jsxs)("div",{className:"flex items-center gap-1 ml-1",children:[(0,r.jsx)("button",{type:"button",onClick:p,className:"px-2.5 py-1 rounded-full text-2xs font-medium bg-[var(--amber)] text-white hover:opacity-90 transition-opacity focus-visible:ring-2 focus-visible:ring-ring",children:f.aiInitReview}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:l,className:"px-2.5 py-1 rounded-full text-2xs font-medium bg-muted text-muted-foreground hover:text-foreground transition-colors focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:f.aiInitDiscard}),(0,r.jsx)("button",{type:"button",onClick:g,"aria-label":"Accept",className:"ml-0.5 inline-flex h-5 w-5 items-center justify-center rounded-full text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-colors focus-visible:ring-2 focus-visible:ring-ring",children:(0,r.jsx)(u.A,{size:12})})]})]})})}function rv(){return(0,r.jsxs)("span",{className:"inline-flex gap-[2px] items-end h-[1em] ml-px",children:[(0,r.jsx)("span",{className:"w-[3px] h-[3px] rounded-full bg-muted-foreground animate-[dotBounce_1.2s_0ms_infinite]"}),(0,r.jsx)("span",{className:"w-[3px] h-[3px] rounded-full bg-muted-foreground animate-[dotBounce_1.2s_200ms_infinite]"}),(0,r.jsx)("span",{className:"w-[3px] h-[3px] rounded-full bg-muted-foreground animate-[dotBounce_1.2s_400ms_infinite]"}),(0,r.jsx)("style",{children:`
|
|
111
149
|
@keyframes dotBounce {
|
|
112
150
|
0%, 60%, 100% { opacity: 0.25; transform: translateY(0); }
|
|
113
151
|
30% { opacity: 1; transform: translateY(-2px); }
|
|
114
152
|
}
|
|
115
|
-
`})]})}var rj=s(93631),ry=s(3926),rN=s(78916);let rk="mindos:organize-history";function rw(){try{let e=localStorage.getItem(rk);if(!e)return[];return JSON.parse(e)}catch{return[]}}function rS(e){try{localStorage.setItem(rk,JSON.stringify(e.slice(0,50)))}catch{}}function rC(e,t){let s=rw(),r=s.findIndex(t=>t.id===e);return r>=0&&(s[r]={...s[r],...t},rS(s)),s}let rA=0;function rz(e,t){let s=e.fileImport;if(!t)return s.organizeProcessing;switch(t.stage){case"connecting":return s.organizeConnecting;case"analyzing":return s.organizeAnalyzing;case"reading":return s.organizeReading(t.detail);case"thinking":return s.organizeThinking;case"writing":return s.organizeWriting(t.detail);default:return s.organizeProcessing}}function rE({aiOrganize:e,onDismiss:t,onCancel:s,onHistoryUpdate:o}){let{t:l}=(0,y.Y)(),i=(0,n.useRouter)(),d=l.fileImport,c="organizing"===e.phase,{elapsed:m,displayHint:x}=function(e,t){let[s,r]=(0,a.useState)(0),[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(Date.now());return(0,a.useEffect)(()=>{l.current=Date.now(),o(!1)},[t]),(0,a.useEffect)(()=>{if(!e){r(0),o(!1);return}let t=setInterval(()=>{r(e=>e+1),Date.now()-l.current>=5e3&&o(!0)},1e3);return()=>clearInterval(t)},[e]),{elapsed:s,displayHint:n?{stage:"thinking"}:t}}(c,e.stageHint),[p,h]=(0,a.useState)(!1),[g,f]=(0,a.useState)(!1),[b,v]=(0,a.useState)(!1),j=(0,a.useRef)(null),N=(0,a.useRef)(null),k="done"===e.phase,w="error"===e.phase,S=c||k||w,A=e.changes.filter(e=>e.ok&&!e.undone).length;(0,a.useEffect)(()=>{c&&(N.current=null)},[c]),(0,a.useEffect)(()=>{if(k&&!N.current){var t;let s,r=`org-${Date.now()}-${++rA}`;N.current=r,t={id:r,timestamp:Date.now(),sourceFiles:e.sourceFileNames,files:e.changes.map(e=>({action:e.action,path:e.path,ok:e.ok,undone:e.undone})),status:"completed"},(s=rw()).unshift(t),rS(s.slice(0,50)),o?.()}},[k,e.changes,e.sourceFileNames,o]);let z=(0,a.useCallback)(()=>{j.current&&clearTimeout(j.current),(k||w)&&(j.current=setTimeout(()=>{t()},18e4))},[k,w,t]);(0,a.useEffect)(()=>(z(),()=>{j.current&&clearTimeout(j.current)}),[z]);let T=(0,a.useCallback)(()=>{z()},[z]),R=(0,a.useCallback)(async t=>{T(),v(!0);let s=await e.undoOne(t);v(!1),s&&(window.dispatchEvent(new Event("mindos:files-changed")),setTimeout(()=>{if(N.current){let s=e.changes.map(e=>({action:e.action,path:e.path,ok:e.ok,undone:e.path===t||e.undone})),r=s.every(e=>!e.ok||e.undone);rC(N.current,{files:s,status:r?"undone":"partial"}),o?.()}},0))},[e,T,o]),M=(0,a.useCallback)(async()=>{T(),v(!0);let t=await e.undoAll();v(!1),t>0&&(window.dispatchEvent(new Event("mindos:files-changed")),N.current&&(rC(N.current,{files:e.changes.map(e=>({action:e.action,path:e.path,ok:e.ok,undone:!!e.ok||e.undone})),status:"undone"}),o?.()))},[e,T,o]),I=(0,a.useCallback)(e=>{T(),i.push(`/view/${(0,Q.O0)(e)}`)},[i,T]),D=(0,a.useCallback)(()=>{t()},[t]);if(!S)return null;function P(t,s){let n=t.undone,a=e.canUndo(t.path),o=t.path.split("/").pop()??t.path;return(0,r.jsxs)("div",{className:`flex items-center gap-2 px-3 py-2 rounded-md text-sm transition-colors ${n?"bg-muted/30 opacity-50":"bg-muted/50"}`,children:[n?(0,r.jsx)(rg.A,{size:14,className:"text-muted-foreground shrink-0"}):"create"===t.action?(0,r.jsx)(rj.A,{size:14,className:"text-success shrink-0"}):(0,r.jsx)(ry.A,{size:14,className:"text-[var(--amber)] shrink-0"}),(0,r.jsx)("span",{className:`truncate flex-1 ${n?"line-through text-muted-foreground":"text-foreground"}`,children:o}),n?(0,r.jsx)("span",{className:"text-xs text-muted-foreground shrink-0",children:d.organizeUndone}):(0,r.jsx)("span",{className:`text-xs shrink-0 ${t.ok?"text-muted-foreground":"text-error"}`,children:t.ok?"create"===t.action?d.organizeCreated:d.organizeUpdated:d.organizeFailed}),a&&(0,r.jsx)("button",{type:"button",onClick:()=>R(t.path),disabled:b,className:"text-2xs text-muted-foreground/60 hover:text-foreground transition-colors shrink-0 px-1 disabled:opacity-40",title:d.organizeUndoOne,children:(0,r.jsx)(rg.A,{size:12})}),t.ok&&!t.undone&&(0,r.jsx)("button",{type:"button",onClick:()=>I(t.path),className:"text-2xs text-muted-foreground/60 hover:text-[var(--amber)] transition-colors shrink-0 px-1",title:d.organizeViewFile,children:(0,r.jsx)($.A,{size:12})})]},`${t.path}-${s}`)}function L(){return(0,r.jsxs)("div",{className:"flex items-center justify-end gap-3 px-4 py-3 border-t border-border",children:[k&&e.hasAnyUndoable&&(0,r.jsxs)("button",{onClick:M,disabled:b,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors px-2 py-1.5 disabled:opacity-50",children:[b?(0,r.jsx)(E.A,{size:12,className:"animate-spin"}):(0,r.jsx)(rg.A,{size:12}),d.organizeUndoAll]}),(0,r.jsxs)("button",{onClick:D,className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-90 transition-all",children:[(0,r.jsx)(e0.A,{size:12}),d.organizeDone]})]})}return g?(0,r.jsx)("div",{className:"fixed inset-0 z-50 overlay-backdrop flex items-center justify-center p-4",onClick:e=>{e.target===e.currentTarget&&f(!1)},children:(0,r.jsxs)("div",{className:"w-full max-w-xl max-h-[80vh] flex flex-col bg-card rounded-xl shadow-xl border border-border animate-in fade-in-0 zoom-in-95 duration-200",onClick:T,role:"dialog","aria-modal":"true","aria-label":d.organizeDetailTitle,children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-5 pt-5 pb-3 shrink-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[c?(0,r.jsxs)("div",{className:"relative shrink-0",children:[(0,r.jsx)(tk.A,{size:16,className:"text-[var(--amber)]"}),(0,r.jsx)(E.A,{size:10,className:"absolute -bottom-0.5 -right-0.5 text-[var(--amber)] animate-spin"})]}):k?(0,r.jsx)(e0.A,{size:16,className:"text-success"}):(0,r.jsx)(C.A,{size:16,className:"text-error"}),(0,r.jsx)("h2",{className:"text-base font-semibold text-foreground",children:d.organizeDetailTitle}),c&&(0,r.jsx)("span",{className:"text-xs text-muted-foreground/60 tabular-nums",children:d.organizeElapsed(m)})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>f(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:d.organizeMinimizeModal,children:(0,r.jsx)(eP.A,{size:14})}),(0,r.jsx)("button",{type:"button",onClick:D,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:14})})]})]}),(0,r.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto px-5 pb-2 space-y-4",children:[c&&(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2.5 rounded-lg bg-[var(--amber-subtle)] border border-[var(--amber-dim)]",children:[(0,r.jsx)(E.A,{size:14,className:"text-[var(--amber)] animate-spin shrink-0"}),(0,r.jsx)("span",{className:"text-xs text-foreground",children:rz(l,x)})]}),e.sourceFileNames.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d.organizeSourceFiles}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.sourceFileNames.map((e,t)=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-1 rounded-md bg-muted/60 text-xs text-foreground",children:[(0,r.jsx)(rN.A,{size:11,className:"text-muted-foreground shrink-0"}),e]},t))})]}),(e.summary||c)&&(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d.organizeSummaryLabel}),(0,r.jsx)("div",{className:"px-3 py-2.5 rounded-lg bg-muted/30 border border-border text-sm text-foreground leading-relaxed whitespace-pre-wrap",children:e.summary||d.organizeNoSummary})]}),e.changes.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d.organizeChangesLabel(e.changes.length)}),(0,r.jsx)("div",{className:"space-y-0.5",children:e.changes.map((e,t)=>P(e,t))})]}),w&&(0,r.jsx)("div",{className:"px-3 py-2.5 rounded-lg bg-error/5 border border-error/20 text-xs text-error",children:e.error})]}),(k||w)&&L()]})}):p&&(k||w)?(0,r.jsxs)("div",{className:"fixed bottom-4 left-1/2 -translate-x-1/2 z-50 w-[420px] max-w-[calc(100vw-2rem)] bg-card border border-border rounded-xl shadow-xl animate-in fade-in-0 slide-in-from-bottom-2 duration-200",onClick:T,children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[k?(0,r.jsx)(e0.A,{size:14,className:"text-success"}):(0,r.jsx)(C.A,{size:14,className:"text-error"}),(0,r.jsx)("span",{className:"text-xs font-medium text-foreground",children:k?d.organizeReviewTitle:d.organizeErrorTitle})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>{h(!1),f(!0)},className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:d.organizeDetailTitle,children:(0,r.jsx)(eL.A,{size:13})}),(0,r.jsx)("button",{type:"button",onClick:()=>h(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(en.A,{size:14})})]})]}),k&&(0,r.jsx)("div",{className:"max-h-[240px] overflow-y-auto p-2 space-y-0.5",children:e.changes.map((e,t)=>P(e,t))}),w&&(0,r.jsx)("div",{className:"p-4 text-center",children:(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:e.error})}),L()]}):(0,r.jsx)("div",{className:"fixed bottom-4 left-1/2 -translate-x-1/2 z-50 flex items-center gap-3 bg-card border border-border rounded-xl shadow-lg px-4 py-3 max-w-md animate-in fade-in-0 slide-in-from-bottom-2 duration-200",onClick:T,children:k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e0.A,{size:16,className:"text-success shrink-0"}),(0,r.jsx)("span",{className:"text-xs text-foreground truncate",children:d.organizeReviewDesc(A)}),e.changes.length>0&&(0,r.jsxs)("button",{type:"button",onClick:()=>{h(!0),T()},className:"flex items-center gap-1 text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors shrink-0",children:[(0,r.jsx)(en.A,{size:12,className:"rotate-180"}),d.organizeExpand]}),(0,r.jsxs)("button",{type:"button",onClick:D,className:"flex items-center gap-1 text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors shrink-0",children:[(0,r.jsx)(e0.A,{size:12}),d.organizeDone]})]}):w?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:16,className:"text-error shrink-0"}),(0,r.jsx)("span",{className:"text-xs text-foreground truncate",children:d.organizeError}),(0,r.jsx)("button",{type:"button",onClick:()=>{h(!0),T()},className:"text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors shrink-0",children:d.organizeExpand}),(0,r.jsx)("button",{type:"button",onClick:D,className:"text-muted-foreground/50 hover:text-muted-foreground transition-colors shrink-0",children:(0,r.jsx)(u.A,{size:14})})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"relative shrink-0",children:[(0,r.jsx)(tk.A,{size:16,className:"text-[var(--amber)]"}),(0,r.jsx)(E.A,{size:10,className:"absolute -bottom-0.5 -right-0.5 text-[var(--amber)] animate-spin"})]}),(0,r.jsx)("span",{className:"text-xs text-foreground truncate",children:rz(l,x)}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground/60 tabular-nums shrink-0",children:d.organizeElapsed(m)}),(0,r.jsx)("button",{type:"button",onClick:()=>{f(!0),T()},className:"text-muted-foreground/50 hover:text-muted-foreground transition-colors shrink-0",title:d.organizeDetailTitle,children:(0,r.jsx)(eL.A,{size:13})}),(0,r.jsx)("button",{type:"button",onClick:D,className:"text-muted-foreground/50 hover:text-muted-foreground transition-colors shrink-0",children:(0,r.jsx)(u.A,{size:14})})]})})}let r$=(0,ei.createServerReference)("70d315f76e02c47c4819cca810a1ff5d1d8d865616",ei.callServer,void 0,ei.findSourceMapURL,"createSpaceAction");var rT=s(70620);function rR({t:e,dirPaths:t}){let s=(0,n.useRouter)(),[o,l]=(0,a.useState)(!1),[i,d]=(0,a.useState)(""),[c,m]=(0,a.useState)(""),[x,p]=(0,a.useState)(""),[h,g]=(0,a.useState)(!1),[f,b]=(0,a.useState)(""),[v,j]=(0,a.useState)(""),[y,N]=(0,a.useState)(null),[k,S]=(0,a.useState)(!0),C=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=()=>{l(!0),b(""),j(""),setTimeout(()=>C.current?.focus(),80)};return window.addEventListener("mindos:create-space",e),()=>window.removeEventListener("mindos:create-space",e)},[]),(0,a.useEffect)(()=>{o&&null===y&&(0,w.n)("/api/settings").then(e=>{let t=e.ai?.provider??"",s=(e.ai?.providers??{})[t],r=!!s?.apiKey;N(r),S(r)}).catch(()=>{N(!1),S(!1)})},[o,y]);let A=(0,a.useCallback)(()=>{l(!1),d(""),m(""),p(""),b(""),j(""),N(null)},[]),z=(0,a.useCallback)(t=>t.includes("/")||t.includes("\\")?(j(e.home.spaceNameNoSlash??"Name cannot contain / or \\"),!1):(j(""),!0),[e]),$=(0,a.useMemo)(()=>{let e=i.trim();return e?(x?x+"/":"")+e+"/":""},[i,x]),T=(0,a.useCallback)(async()=>{if(!i.trim()||h||!z(i))return;g(!0),b("");let t=i.trim(),r=await r$(t,c,x);if(r.success){let e=r.path??t;if(k&&y){let s="zh"===document.documentElement.lang?`初始化新建的心智空间「${t}」,路径为「${e}/」。${c?`描述:「${c}」。`:""}两个文件均已存在模板,用 write_file 覆盖:
|
|
153
|
+
`})]})}var rj=s(93631),ry=s(3926),rN=s(78916);let rk="mindos:organize-history";function rw(){try{let e=localStorage.getItem(rk);if(!e)return[];return JSON.parse(e)}catch{return[]}}function rS(e){try{localStorage.setItem(rk,JSON.stringify(e.slice(0,50)))}catch{}}function rC(e,t){let s=rw(),r=s.findIndex(t=>t.id===e);return r>=0&&(s[r]={...s[r],...t},rS(s)),s}let rA=0;function rz(e,t){let s=e.fileImport;if(!t)return s.organizeProcessing;switch(t.stage){case"connecting":return s.organizeConnecting;case"analyzing":return s.organizeAnalyzing;case"reading":return s.organizeReading(t.detail);case"thinking":return s.organizeThinking;case"writing":return s.organizeWriting(t.detail);default:return s.organizeProcessing}}function rE({aiOrganize:e,onDismiss:t,onCancel:s,onHistoryUpdate:o}){let{t:l}=(0,y.Y)(),i=(0,n.useRouter)(),d=l.fileImport,c="organizing"===e.phase,{elapsed:m,displayHint:x}=function(e,t){let[s,r]=(0,a.useState)(0),[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(Date.now());return(0,a.useEffect)(()=>{l.current=Date.now(),o(!1)},[t]),(0,a.useEffect)(()=>{if(!e){r(0),o(!1);return}let t=setInterval(()=>{r(e=>e+1),Date.now()-l.current>=5e3&&o(!0)},1e3);return()=>clearInterval(t)},[e]),{elapsed:s,displayHint:n?{stage:"thinking"}:t}}(c,e.stageHint),[p,h]=(0,a.useState)(!1),[g,f]=(0,a.useState)(!1),[b,v]=(0,a.useState)(!1),j=(0,a.useRef)(null),N=(0,a.useRef)(null),k="done"===e.phase,w="error"===e.phase,S=c||k||w,A=e.changes.filter(e=>e.ok&&!e.undone).length;(0,a.useEffect)(()=>{c&&(N.current=null)},[c]),(0,a.useEffect)(()=>{if(k&&!N.current){var t;let s,r=`org-${Date.now()}-${++rA}`;N.current=r,t={id:r,timestamp:Date.now(),sourceFiles:e.sourceFileNames,files:e.changes.map(e=>({action:e.action,path:e.path,ok:e.ok,undone:e.undone})),status:"completed"},(s=rw()).unshift(t),rS(s.slice(0,50)),o?.()}},[k,e.changes,e.sourceFileNames,o]);let z=(0,a.useCallback)(()=>{j.current&&clearTimeout(j.current),(k||w)&&(j.current=setTimeout(()=>{t()},18e4))},[k,w,t]);(0,a.useEffect)(()=>(z(),()=>{j.current&&clearTimeout(j.current)}),[z]);let T=(0,a.useCallback)(()=>{z()},[z]),R=(0,a.useCallback)(async t=>{T(),v(!0);let s=await e.undoOne(t);v(!1),s&&(window.dispatchEvent(new Event("mindos:files-changed")),setTimeout(()=>{if(N.current){let s=e.changes.map(e=>({action:e.action,path:e.path,ok:e.ok,undone:e.path===t||e.undone})),r=s.every(e=>!e.ok||e.undone);rC(N.current,{files:s,status:r?"undone":"partial"}),o?.()}},0))},[e,T,o]),M=(0,a.useCallback)(async()=>{T(),v(!0);let t=await e.undoAll();v(!1),t>0&&(window.dispatchEvent(new Event("mindos:files-changed")),N.current&&(rC(N.current,{files:e.changes.map(e=>({action:e.action,path:e.path,ok:e.ok,undone:!!e.ok||e.undone})),status:"undone"}),o?.()))},[e,T,o]),I=(0,a.useCallback)(e=>{T(),i.push(`/view/${(0,Q.O0)(e)}`)},[i,T]),D=(0,a.useCallback)(()=>{t()},[t]);if(!S)return null;function P(t,s){let n=t.undone,a=e.canUndo(t.path),o=t.path.split("/").pop()??t.path;return(0,r.jsxs)("div",{className:`flex items-center gap-2 px-3 py-2 rounded-md text-sm transition-colors ${n?"bg-muted/30 opacity-50":"bg-muted/50"}`,children:[n?(0,r.jsx)(rg.A,{size:14,className:"text-muted-foreground shrink-0"}):"create"===t.action?(0,r.jsx)(rj.A,{size:14,className:"text-success shrink-0"}):(0,r.jsx)(ry.A,{size:14,className:"text-[var(--amber)] shrink-0"}),(0,r.jsx)("span",{className:`truncate flex-1 ${n?"line-through text-muted-foreground":"text-foreground"}`,children:o}),n?(0,r.jsx)("span",{className:"text-xs text-muted-foreground shrink-0",children:d.organizeUndone}):(0,r.jsx)("span",{className:`text-xs shrink-0 ${t.ok?"text-muted-foreground":"text-error"}`,children:t.ok?"create"===t.action?d.organizeCreated:d.organizeUpdated:d.organizeFailed}),a&&(0,r.jsx)("button",{type:"button",onClick:()=>R(t.path),disabled:b,className:"text-2xs text-muted-foreground/60 hover:text-foreground transition-colors shrink-0 px-1 disabled:opacity-40",title:d.organizeUndoOne,children:(0,r.jsx)(rg.A,{size:12})}),t.ok&&!t.undone&&(0,r.jsx)("button",{type:"button",onClick:()=>I(t.path),className:"text-2xs text-muted-foreground/60 hover:text-[var(--amber)] transition-colors shrink-0 px-1",title:d.organizeViewFile,children:(0,r.jsx)($.A,{size:12})})]},`${t.path}-${s}`)}function L(){return(0,r.jsxs)("div",{className:"flex items-center justify-end gap-3 px-4 py-3 border-t border-border",children:[k&&e.hasAnyUndoable&&(0,r.jsxs)("button",{onClick:M,disabled:b,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors px-2 py-1.5 disabled:opacity-50",children:[b?(0,r.jsx)(E.A,{size:12,className:"animate-spin"}):(0,r.jsx)(rg.A,{size:12}),d.organizeUndoAll]}),(0,r.jsxs)("button",{onClick:D,className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-90 transition-all",children:[(0,r.jsx)(e0.A,{size:12}),d.organizeDone]})]})}return g?(0,r.jsx)("div",{className:"fixed inset-0 z-50 overlay-backdrop flex items-center justify-center p-4",onClick:e=>{e.target===e.currentTarget&&f(!1)},children:(0,r.jsxs)("div",{className:"w-full max-w-xl max-h-[80vh] flex flex-col bg-card rounded-xl shadow-xl border border-border animate-in fade-in-0 zoom-in-95 duration-200",onClick:T,role:"dialog","aria-modal":"true","aria-label":d.organizeDetailTitle,children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-5 pt-5 pb-3 shrink-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[c?(0,r.jsxs)("div",{className:"relative shrink-0",children:[(0,r.jsx)(tk.A,{size:16,className:"text-[var(--amber)]"}),(0,r.jsx)(E.A,{size:10,className:"absolute -bottom-0.5 -right-0.5 text-[var(--amber)] animate-spin"})]}):k?(0,r.jsx)(e0.A,{size:16,className:"text-success"}):(0,r.jsx)(C.A,{size:16,className:"text-error"}),(0,r.jsx)("h2",{className:"text-base font-semibold text-foreground",children:d.organizeDetailTitle}),c&&(0,r.jsx)("span",{className:"text-xs text-muted-foreground/60 tabular-nums",children:d.organizeElapsed(m)})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>f(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:d.organizeMinimizeModal,children:(0,r.jsx)(eP.A,{size:14})}),(0,r.jsx)("button",{type:"button",onClick:D,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(u.A,{size:14})})]})]}),(0,r.jsxs)("div",{className:"flex-1 min-h-0 overflow-y-auto px-5 pb-2 space-y-4",children:[c&&(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2.5 rounded-lg bg-[var(--amber-subtle)] border border-[var(--amber-dim)]",children:[(0,r.jsx)(E.A,{size:14,className:"text-[var(--amber)] animate-spin shrink-0"}),(0,r.jsx)("span",{className:"text-xs text-foreground",children:rz(l,x)})]}),e.sourceFileNames.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d.organizeSourceFiles}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.sourceFileNames.map((e,t)=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-1 rounded-md bg-muted/60 text-xs text-foreground",children:[(0,r.jsx)(rN.A,{size:11,className:"text-muted-foreground shrink-0"}),e]},t))})]}),(e.summary||c)&&(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d.organizeSummaryLabel}),(0,r.jsx)("div",{className:"px-3 py-2.5 rounded-lg bg-muted/30 border border-border text-sm text-foreground leading-relaxed whitespace-pre-wrap",children:e.summary||d.organizeNoSummary})]}),e.changes.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("h3",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d.organizeChangesLabel(e.changes.length)}),(0,r.jsx)("div",{className:"space-y-0.5",children:e.changes.map((e,t)=>P(e,t))})]}),w&&(0,r.jsx)("div",{className:"px-3 py-2.5 rounded-lg bg-error/5 border border-error/20 text-xs text-error",children:e.error})]}),(k||w)&&L()]})}):p&&(k||w)?(0,r.jsxs)("div",{className:"fixed bottom-4 left-1/2 -translate-x-1/2 z-50 w-[420px] max-w-[calc(100vw-2rem)] bg-card border border-border rounded-xl shadow-xl animate-in fade-in-0 slide-in-from-bottom-2 duration-200",onClick:T,children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[k?(0,r.jsx)(e0.A,{size:14,className:"text-success"}):(0,r.jsx)(C.A,{size:14,className:"text-error"}),(0,r.jsx)("span",{className:"text-xs font-medium text-foreground",children:k?d.organizeReviewTitle:d.organizeErrorTitle})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>{h(!1),f(!0)},className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:d.organizeDetailTitle,children:(0,r.jsx)(eL.A,{size:13})}),(0,r.jsx)("button",{type:"button",onClick:()=>h(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:(0,r.jsx)(en.A,{size:14})})]})]}),k&&(0,r.jsx)("div",{className:"max-h-[240px] overflow-y-auto p-2 space-y-0.5",children:e.changes.map((e,t)=>P(e,t))}),w&&(0,r.jsx)("div",{className:"p-4 text-center",children:(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:e.error})}),L()]}):(0,r.jsx)("div",{className:"fixed bottom-4 left-1/2 -translate-x-1/2 z-50 flex items-center gap-3 bg-card border border-border rounded-xl shadow-lg px-4 py-3 max-w-md animate-in fade-in-0 slide-in-from-bottom-2 duration-200",onClick:T,children:k?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e0.A,{size:16,className:"text-success shrink-0"}),(0,r.jsx)("span",{className:"text-xs text-foreground truncate",children:d.organizeReviewDesc(A)}),e.changes.length>0&&(0,r.jsxs)("button",{type:"button",onClick:()=>{h(!0),T()},className:"flex items-center gap-1 text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors shrink-0",children:[(0,r.jsx)(en.A,{size:12,className:"rotate-180"}),d.organizeExpand]}),(0,r.jsxs)("button",{type:"button",onClick:D,className:"flex items-center gap-1 text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors shrink-0",children:[(0,r.jsx)(e0.A,{size:12}),d.organizeDone]})]}):w?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(C.A,{size:16,className:"text-error shrink-0"}),(0,r.jsx)("span",{className:"text-xs text-foreground truncate",children:d.organizeError}),(0,r.jsx)("button",{type:"button",onClick:()=>{h(!0),T()},className:"text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors shrink-0",children:d.organizeExpand}),(0,r.jsx)("button",{type:"button",onClick:D,className:"text-muted-foreground/50 hover:text-muted-foreground transition-colors shrink-0",children:(0,r.jsx)(u.A,{size:14})})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"relative shrink-0",children:[(0,r.jsx)(tk.A,{size:16,className:"text-[var(--amber)]"}),(0,r.jsx)(E.A,{size:10,className:"absolute -bottom-0.5 -right-0.5 text-[var(--amber)] animate-spin"})]}),(0,r.jsx)("span",{className:"text-xs text-foreground truncate",children:rz(l,x)}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground/60 tabular-nums shrink-0",children:d.organizeElapsed(m)}),(0,r.jsx)("button",{type:"button",onClick:()=>{f(!0),T()},className:"text-muted-foreground/50 hover:text-muted-foreground transition-colors shrink-0",title:d.organizeDetailTitle,children:(0,r.jsx)(eL.A,{size:13})}),(0,r.jsx)("button",{type:"button",onClick:D,className:"text-muted-foreground/50 hover:text-muted-foreground transition-colors shrink-0",children:(0,r.jsx)(u.A,{size:14})})]})})}let r$=(0,ei.createServerReference)("7063ba55fdb14627e60c6c7ac263ec610076072615",ei.callServer,void 0,ei.findSourceMapURL,"createSpaceAction");var rT=s(70620);function rR({t:e,dirPaths:t}){let s=(0,n.useRouter)(),[o,l]=(0,a.useState)(!1),[i,d]=(0,a.useState)(""),[c,m]=(0,a.useState)(""),[x,p]=(0,a.useState)(""),[h,g]=(0,a.useState)(!1),[f,b]=(0,a.useState)(""),[v,j]=(0,a.useState)(""),[y,N]=(0,a.useState)(null),[k,S]=(0,a.useState)(!0),C=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=()=>{l(!0),b(""),j(""),setTimeout(()=>C.current?.focus(),80)};return window.addEventListener("mindos:create-space",e),()=>window.removeEventListener("mindos:create-space",e)},[]),(0,a.useEffect)(()=>{o&&null===y&&(0,w.n)("/api/settings").then(e=>{let t=e.ai?.provider??"",s=(e.ai?.providers??{})[t],r=!!s?.apiKey;N(r),S(r)}).catch(()=>{N(!1),S(!1)})},[o,y]);let A=(0,a.useCallback)(()=>{l(!1),d(""),m(""),p(""),b(""),j(""),N(null)},[]),z=(0,a.useCallback)(t=>t.includes("/")||t.includes("\\")?(j(e.home.spaceNameNoSlash??"Name cannot contain / or \\"),!1):(j(""),!0),[e]),$=(0,a.useMemo)(()=>{let e=i.trim();return e?(x?x+"/":"")+e+"/":""},[i,x]),T=(0,a.useCallback)(async()=>{if(!i.trim()||h||!z(i))return;g(!0),b("");let t=i.trim(),r=await r$(t,c,x);if(r.success){let e=r.path??t;if(k&&y){let s="zh"===document.documentElement.lang?`初始化新建的心智空间「${t}」,路径为「${e}/」。${c?`描述:「${c}」。`:""}两个文件均已存在模板,用 write_file 覆盖:
|
|
116
154
|
1. 「${e}/README.md」— 写入空间用途、结构概览、使用指南
|
|
117
155
|
2. 「${e}/INSTRUCTION.md」— 写入 AI Agent 在此空间中的行为规则和操作约定
|
|
118
156
|
|
|
@@ -132,42 +170,4 @@ Keep content concise and actionable. Write files directly using tools.`;window.d
|
|
|
132
170
|
padding-top: 0;
|
|
133
171
|
}
|
|
134
172
|
}
|
|
135
|
-
`})]})})})}function rU({fileTree:e,children:t}){return"/login"===(0,n.usePathname)()?(0,r.jsx)(r.Fragment,{children:t}):(0,r.jsx)(rW,{fileTree:e,children:t})}},35504:(e,t,s)=>{"use strict";s.r(t),s.d(t,{ConfigRenderer:()=>d});var r=s(95155),n=s(12115),a=s(6296),o=s(94514),l=s(33210),i=s(51914);function d({content:e,saveAction:t}){let s=(0,n.useMemo)(()=>{try{return JSON.parse(e)}catch{return null}},[e]),[d,c]=(0,n.useState)(s),[u,m]=(0,n.useState)(!1),[x,p]=(0,n.useState)(!1),[h,g]=(0,n.useState)(""),[f,b]=(0,n.useState)({});(0,n.useEffect)(()=>{c(s),g("")},[s]);let v=d??{},j=v.uiSchema?.sections??[],y=v.keySpecs??{},N=(0,n.useCallback)(async e=>{m(!0),p(!1),g("");try{await t(`${JSON.stringify(e,null,2)}
|
|
136
|
-
`),p(!0),setTimeout(()=>p(!1),1200)}catch(e){g(e instanceof Error?e.message:"Failed to save")}finally{m(!1)}},[t]),k=(0,n.useCallback)(async(e,t)=>{if(!d)return;let s=function(e,t,s){let r=t.split("."),n=structuredClone(e),a=n;for(let e=0;e<r.length-1;e++){let t=r[e],s=a[t];(!s||"object"!=typeof s||Array.isArray(s))&&(a[t]={}),a=a[t]}return a[r[r.length-1]]=s,n}(d,e,t);c(s),await N(s)},[d,N]);return s&&d?(0,r.jsxs)("div",{className:"max-w-3xl mx-auto flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-card px-4 py-2.5",children:[(0,r.jsx)("div",{className:"text-xs text-muted-foreground",children:"CONFIG Control Panel"}),(0,r.jsxs)("div",{className:"text-xs flex items-center gap-2",children:[u&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 text-muted-foreground",children:[(0,r.jsx)(a.A,{size:12,className:"animate-spin"}),"Saving"]}),!u&&x&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",style:{color:"var(--success)"},children:[(0,r.jsx)(o.A,{size:12}),"Saved"]})]})]}),h&&(0,r.jsx)("div",{className:"rounded-lg border border-error/30 bg-error/10 px-3 py-2 text-xs text-error",children:h}),j.map(e=>(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4",children:[(0,r.jsxs)("div",{className:"mb-3",children:[(0,r.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:e.title}),e.description&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:e.description})]}),(0,r.jsx)("div",{className:"space-y-3",children:e.fields.map(e=>{let t=y[e]??{},s=function(e,t){let s=t.split("."),r=e;for(let e of s){if(!r||"object"!=typeof r||!(e in r))return null;r=r[e]}return r}(d,e),n=t.label||e;return(0,r.jsxs)("div",{className:"rounded-lg border border-border/80 bg-background px-3 py-2.5",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-3 mb-1.5",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-foreground",children:n}),t.description&&(0,r.jsx)("div",{className:"text-xs text-muted-foreground mt-0.5",children:t.description})]}),"switch"===t.control&&"boolean"==typeof s&&(0,r.jsx)("button",{type:"button",onClick:()=>k(e,!s),className:"px-2.5 py-1 rounded-md text-xs font-medium",style:{background:s?"var(--amber)":"var(--muted)",color:s?"var(--amber-foreground)":"var(--muted-foreground)"},children:s?"ON":"OFF"})]}),"text"===t.control&&"string"==typeof s&&(0,r.jsx)("input",{defaultValue:s,onBlur:t=>k(e,t.target.value),className:"w-full px-2 py-1.5 text-sm bg-card border border-border rounded text-foreground"}),"number"===t.control&&"number"==typeof s&&(0,r.jsx)("input",{type:"number",defaultValue:s,min:t.constraints?.min,max:t.constraints?.max,onBlur:r=>{let n=Number(r.target.value),a=t.constraints?.min,o=t.constraints?.max,l=Number.isFinite(n)?n:s;"number"==typeof a&&l<a&&(l=a),"number"==typeof o&&l>o&&(l=o),k(e,l)},className:"w-full px-2 py-1.5 text-sm bg-card border border-border rounded text-foreground"}),"tag-list"===t.control&&Array.isArray(s)&&(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:s.map((t,n)=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded border border-border text-xs bg-muted text-foreground",children:[String(t),(0,r.jsx)("button",{type:"button",onClick:()=>k(e,s.filter((e,t)=>t!==n)),className:"text-muted-foreground hover:text-foreground",children:(0,r.jsx)(l.A,{size:11})})]},`${String(t)}-${n}`))}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{value:f[e]??"",onChange:t=>b(s=>({...s,[e]:t.target.value})),onKeyDown:t=>{if("Enter"!==t.key)return;t.preventDefault();let r=(f[e]??"").trim();r&&(k(e,[...s,r]),b(t=>({...t,[e]:""})))},className:"flex-1 px-2 py-1.5 text-sm bg-card border border-border rounded text-foreground",placeholder:"Add item"}),(0,r.jsxs)("button",{type:"button",onClick:()=>{let t=(f[e]??"").trim();t&&(k(e,[...s,t]),b(t=>({...t,[e]:""})))},className:"px-2.5 py-1.5 rounded-md text-xs bg-muted text-foreground inline-flex items-center gap-1",children:[(0,r.jsx)(i.A,{size:12})," Add"]})]})]})]},e)})})]},e.id))]}):(0,r.jsx)("div",{className:"rounded-xl border border-border p-4 text-sm text-error",children:"CONFIG.json parse failed. Please check JSON format."})}},39594:(e,t,s)=>{"use strict";s.r(t),s.d(t,{TimelineRenderer:()=>i});var r=s(95155),n=s(12115);let a=/(\d{4}[-/]\d{1,2}(?:[-/]\d{1,2})?|[A-Za-z]+ \d{4}|\d{4}年\d{1,2}月(?:\d{1,2}日)?)/;function o(e){return e.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,'<code class="font-display" style="font-size:0.85em;padding:1px 5px;border-radius:4px;background:var(--muted)">$1</code>').replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g,(e,t,s)=>`<span style="color:var(--amber);cursor:pointer" title="${t}">${s??t}</span>`).replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" style="color:var(--amber)">$1</a>')}let l=[{bg:"rgba(200,135,58,0.12)",text:"var(--amber)"},{bg:"rgba(122,173,128,0.12)",text:"var(--success)"},{bg:"rgba(138,180,216,0.12)",text:"#8ab4d8"},{bg:"rgba(200,160,216,0.12)",text:"#c8a0d8"}];function i({content:e}){let t=(0,n.useMemo)(()=>(function(e){let t=e.split("\n"),s=[],r=null,n=[],o=()=>{let e,t;if(!r)return;let a=n.join("\n").trim();r.body=a,r.tags=(e=[],(t=a.match(/#([\w\u4e00-\u9fff]+)/g))&&e.push(...t.map(e=>e.slice(1))),[...new Set(e)]),s.push(r),r=null,n=[]};for(let e of t)if(!/^# /.test(e)){if(/^## /.test(e)){o();let t=e.slice(3).trim();r={heading:t,date:function(e){let t=a.exec(e);if(!t)return null;let s=new Date(t[1].replace(/[/年月]/g,"-").replace("日",""));return isNaN(s.getTime())?null:s}(t),body:"",tags:[]};continue}r&&n.push(e)}return o(),s})(e),[e]);return 0===t.length?(0,r.jsxs)("div",{className:"font-display",style:{padding:"3rem 1rem",textAlign:"center",color:"var(--muted-foreground)",fontSize:13},children:["No timeline entries found. Add ",(0,r.jsx)("code",{style:{background:"var(--muted)",padding:"1px 6px",borderRadius:4},children:"## 2025-01-15"})," headings to create entries."]}):(0,r.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsx)("div",{style:{marginBottom:"1.5rem",display:"flex",alignItems:"center",gap:8},children:(0,r.jsxs)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:[t.length," ",1===t.length?"entry":"entries"]})}),(0,r.jsxs)("div",{style:{position:"relative",paddingLeft:28},children:[(0,r.jsx)("div",{style:{position:"absolute",left:6,top:8,bottom:8,width:1,background:"var(--border)"}}),t.map((e,t)=>(0,r.jsxs)("div",{style:{position:"relative",marginBottom:"1.5rem"},children:[(0,r.jsx)("div",{style:{position:"absolute",left:-22,top:10,width:9,height:9,borderRadius:"50%",background:e.date?"var(--amber)":"var(--border)",outline:e.date?"2px solid var(--amber-dim)":"none",zIndex:1}}),(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,padding:"14px 18px",transition:"border-color .15s"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12,flexWrap:"wrap",marginBottom:8},children:[(0,r.jsx)("span",{style:{fontWeight:600,fontSize:"0.9rem",color:"var(--foreground)"},children:e.heading}),e.date&&(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.7rem",color:"var(--muted-foreground)",opacity:.7,flexShrink:0},children:e.date.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})})]}),e.body&&(0,r.jsx)("div",{dangerouslySetInnerHTML:{__html:function(e){let t=e.split("\n"),s=[],r=!1,n=()=>{r&&(s.push("</ul>"),r=!1)};for(let e of t){let t=e.trimEnd();if(!t){n(),s.push("<br/>");continue}if(/^### /.test(t)){n(),s.push(`<h3 style="font-size:0.8rem;font-weight:600;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.06em;margin:.9em 0 .3em">${o(t.slice(4))}</h3>`);continue}if(/^- /.test(t)||/^\* /.test(t)){r||(s.push('<ul style="margin:.3em 0;padding-left:1.2em;list-style:disc">'),r=!0),s.push(`<li style="margin:.15em 0;font-size:.82rem;color:var(--foreground)">${o(t.slice(2))}</li>`);continue}if(/^\d+\. /.test(t)){r||(s.push('<ol style="margin:.3em 0;padding-left:1.2em">'),r=!0),s.push(`<li style="margin:.15em 0;font-size:.82rem;color:var(--foreground)">${o(t.replace(/^\d+\. /,""))}</li>`);continue}n(),s.push(`<p style="margin:.25em 0;font-size:.82rem;line-height:1.6;color:var(--foreground)">${o(t)}</p>`)}return n(),s.join("")}(e.body)}}),e.tags.length>0&&(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:5,marginTop:10},children:e.tags.map(e=>{let t=function(e){let t=0;for(let s=0;s<e.length;s++)t=31*t+e.charCodeAt(s)&65535;return l[t%l.length]}(e);return(0,r.jsxs)("span",{className:"font-display",style:{fontSize:"0.68rem",padding:"1px 8px",borderRadius:999,background:t.bg,color:t.text},children:["#",e]},e)})})]})]},t))]})]})}},40430:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var r=s(95155),n=s(12115),a=s(12651),o=s(6296),l=s(61263);let i="mindos_update_in_progress";function d(){let[e,t]=(0,n.useState)(!1),[s,d]=(0,n.useState)(!1),c=(0,n.useRef)(void 0),{locale:u}=(0,l.Y)(),m="zh"===u,x=(0,n.useCallback)(()=>{c.current=setInterval(async()=>{try{if((await fetch("/api/health",{signal:AbortSignal.timeout(3e3)})).ok){clearInterval(c.current),c.current=void 0;try{let e=localStorage.getItem(i);if(e){let{originalVer:t}=JSON.parse(e),s=await fetch("/api/update-check").then(e=>e.json());if(s.current&&s.current!==t){d(!0),localStorage.removeItem(i),localStorage.removeItem("mindos_update_latest"),localStorage.removeItem("mindos_update_dismissed"),setTimeout(()=>window.location.reload(),1500);return}}}catch{}localStorage.removeItem(i),window.location.reload()}}catch{}},3e3)},[]);return((0,n.useEffect)(()=>{let e=()=>{localStorage.getItem(i)&&(t(!0),c.current||x())};e();let s=()=>e();return window.addEventListener("mindos:update-started",s),window.addEventListener("storage",s),()=>{clearInterval(c.current),c.current=void 0,window.removeEventListener("mindos:update-started",s),window.removeEventListener("storage",s)}},[x]),e)?(0,r.jsxs)("div",{style:{position:"fixed",inset:0,zIndex:99999,background:"rgba(0,0,0,0.7)",backdropFilter:"blur(8px)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",fontFamily:"system-ui, -apple-system, sans-serif"},children:[s?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.A,{size:32,style:{color:"var(--success)",marginBottom:12}}),(0,r.jsx)("div",{style:{color:"var(--foreground)",fontSize:18,fontWeight:600},children:m?"更新成功!":"Update Complete!"}),(0,r.jsx)("div",{style:{color:"var(--muted-foreground)",fontSize:13,marginTop:6},children:m?"正在刷新页面...":"Reloading..."})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.A,{size:32,style:{color:"var(--amber)",marginBottom:12,animation:"spin 1s linear infinite"}}),(0,r.jsx)("div",{style:{color:"var(--foreground)",fontSize:18,fontWeight:600},children:m?"MindOS 正在更新...":"MindOS is Updating..."}),(0,r.jsx)("div",{style:{color:"var(--muted-foreground)",fontSize:13,marginTop:6,textAlign:"center",maxWidth:300,lineHeight:1.5},children:m?"服务正在重启,请勿关闭此页面。完成后将自动刷新。":"The server is restarting. Please do not close this page. It will auto-reload when ready."})]}),(0,r.jsx)("style",{children:"@keyframes spin { to { transform: rotate(360deg) } }"})]}):null}},45180:(e,t,s)=>{"use strict";s.d(t,{Y:()=>n});var r=s(9339);let n=(0,r.createServerReference)("406a760c80264be58d943201ebafe31465b27b61f1",r.callServer,void 0,r.findSourceMapURL,"undoDeleteAction")},46838:(e,t,s)=>{"use strict";s.d(t,{$7:()=>o,MZ:()=>c,TS:()=>i,UG:()=>a,YB:()=>d,pl:()=>l});let r=[],n=new Set;function a(){try{let e=localStorage.getItem("mindos-disabled-renderers");n=new Set(e?JSON.parse(e):[])}catch{n=new Set}}function o(e,t){let s=r.find(t=>t.id===e);s?.core||(t?n.delete(e):n.add(e),localStorage.setItem("mindos-disabled-renderers",JSON.stringify([...n])))}function l(e){let t=r.find(t=>t.id===e);return!!t?.core||!n.has(e)}function i(e){r.find(t=>t.id===e.id)||r.push(e)}function d(e,t,s){if(s){let e=r.find(e=>e.id===s);return e&&l(e.id)?e:void 0}return r.find(s=>l(s.id)&&s.match({filePath:e,extension:t}))}function c(){return r.filter(e=>!e.appBuiltinFeature)}},48133:(e,t,s)=>{"use strict";s.r(t),s.d(t,{WorkflowYamlRenderer:()=>Z});var r=s(95155),n=s(12115),a=s(49387),o=s(20232),l=s(53961),i=s(13545),d=s(73620),c=s(42129),u=s(51914),m=s(6296),x=s(55243),p=s(12651),h=s(66088),g=s(9921),f=s(68459),b=s(1164),v=s(61878),j=s(33210),y=s(48368),N=s(38798),k=s(21362);function w({trigger:e,children:t,open:s,onClose:a}){let o=(0,n.useRef)(null);return(0,n.useEffect)(()=>{if(!s)return;let e=e=>{o.current&&!o.current.contains(e.target)&&a()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[s,a]),(0,r.jsxs)("div",{ref:o,className:"relative",children:[e,s&&(0,r.jsx)("div",{className:"absolute top-full left-0 mt-1 w-full min-w-[220px] max-h-[260px] overflow-y-auto bg-card border border-border rounded-lg shadow-lg z-50",children:t})]})}let S=null,C=!1,A=[];function z({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(""),[i,d]=(0,n.useState)(S??[]),[c,u]=(0,n.useState)("");(0,n.useEffect)(()=>{S?d(S):(A.push(d),C||(C=!0,fetch("/api/acp/registry").then(e=>e.json()).then(e=>{let t=(e.registry?.agents??[]).map(e=>({id:e.id,name:e.name||e.id}));S=t,A.forEach(e=>e(t)),A.length=0}).catch(()=>{S=[],A.forEach(e=>e([])),A.length=0})))},[]);let m=c?i.filter(e=>e.id.toLowerCase().includes(c.toLowerCase())||e.name.toLowerCase().includes(c.toLowerCase())):i,x=e=>{t(e),a(!1),u("")},p=e?i.find(t=>t.id===e)?.name||e:void 0;return(0,r.jsxs)(w,{open:s,onClose:()=>{a(!1),u("")},trigger:(0,r.jsxs)("button",{type:"button",onClick:()=>a(e=>!e),className:"w-full flex items-center justify-between px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)("span",{className:e?"text-foreground truncate":"text-muted-foreground",children:p||"MindOS"}),(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground shrink-0"})]}),children:[(0,r.jsx)("div",{className:"sticky top-0 bg-card border-b border-border px-2.5 py-1.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded border border-border bg-background",children:[(0,r.jsx)(v.A,{size:11,className:"text-muted-foreground shrink-0"}),(0,r.jsx)("input",{type:"text",value:c,onChange:e=>u(e.target.value),autoFocus:!0,placeholder:"Search agents...",className:"flex-1 text-xs bg-transparent text-foreground placeholder:text-muted-foreground focus:outline-none"})]})}),(0,r.jsxs)("button",{onClick:()=>x(void 0),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${!e?"text-[var(--amber)] font-medium":"text-foreground"}`,children:["MindOS ",(0,r.jsx)("span",{className:"text-muted-foreground/50 ml-1",children:"(default)"})]}),m.slice(0,30).map(t=>(0,r.jsxs)("button",{onClick:()=>x(t.id),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${e===t.id?"text-[var(--amber)] font-medium":"text-foreground"}`,children:[t.name," ",t.name!==t.id&&(0,r.jsxs)("span",{className:"text-muted-foreground/50 ml-1",children:["(",t.id,")"]})]},t.id)),0===i.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"Loading..."}),i.length>0&&0===m.length&&!c&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No ACP agents found"}),(0,r.jsx)("div",{className:"border-t border-border px-2.5 py-1.5",children:(0,r.jsx)("input",{type:"text",value:o,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&o.trim()&&(x(o.trim()),l(""))},placeholder:"Custom agent ID...",className:"w-full px-2 py-1 text-xs rounded border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})})]})}let E=[{group:"Anthropic",models:["claude-sonnet-4-6","claude-opus-4","claude-3.5-sonnet","claude-3.5-haiku"]},{group:"OpenAI",models:["gpt-4o","gpt-4o-mini","o3","o4-mini"]},{group:"Google",models:["gemini-2.5-pro","gemini-2.5-flash"]}];function $({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(""),i=e=>{t(e),a(!1)};return(0,r.jsxs)(w,{open:s,onClose:()=>a(!1),trigger:(0,r.jsxs)("button",{type:"button",onClick:()=>a(e=>!e),className:"w-full flex items-center justify-between px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)("span",{className:e?"text-foreground truncate":"text-muted-foreground",children:e||"Default model"}),e?(0,r.jsx)(j.A,{size:12,className:"text-muted-foreground shrink-0 hover:text-foreground cursor-pointer",onClick:e=>{e.stopPropagation(),i(void 0)}}):(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground shrink-0"})]}),children:[(0,r.jsx)("button",{onClick:()=>i(void 0),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${!e?"text-[var(--amber)] font-medium":"text-muted-foreground"}`,children:"(default)"}),E.map(t=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"px-3 py-1 text-2xs font-semibold text-muted-foreground/60 uppercase tracking-wide bg-muted/30",children:t.group}),t.models.map(t=>(0,r.jsx)("button",{onClick:()=>i(t),className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors ${e===t?"text-[var(--amber)] font-medium":"text-foreground"}`,children:t},t))]},t.group)),(0,r.jsx)("div",{className:"border-t border-border px-2.5 py-1.5",children:(0,r.jsx)("input",{type:"text",value:o,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&o.trim()&&(i(o.trim()),l(""))},placeholder:"Custom model ID...",className:"w-full px-2 py-1 text-xs rounded border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})})]})}let T=null,R=!1,M=[];function I({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(T??[]),[i,d]=(0,n.useState)("");(0,n.useEffect)(()=>{T?l(T):(M.push(l),R||(R=!0,fetch("/api/skills").then(e=>e.json()).then(e=>{T=(e.skills??[]).map(e=>({name:e.name,description:e.description})),M.forEach(e=>e(T)),M.length=0}).catch(()=>{T=[],M.forEach(e=>e([])),M.length=0})))},[]);let c=i?o.filter(e=>e.name.toLowerCase().includes(i.toLowerCase())):o;return(0,r.jsxs)("div",{children:[e.length>0&&(0,r.jsx)("div",{className:"flex flex-wrap gap-1 mb-1.5",children:e.map(s=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 pl-2 pr-1 py-0.5 rounded-md text-2xs bg-[var(--amber)]/10 text-[var(--amber)] border border-[var(--amber)]/20",children:[s,(0,r.jsx)("button",{onClick:()=>t(e.filter(e=>e!==s)),className:"p-0.5 rounded hover:bg-[var(--amber)]/20 transition-colors",children:(0,r.jsx)(j.A,{size:10})})]},s))}),(0,r.jsxs)(w,{open:s,onClose:()=>{a(!1),d("")},trigger:(0,r.jsxs)("button",{type:"button",onClick:()=>a(e=>!e),className:"w-full flex items-center justify-between px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:0===e.length?"Add skills...":`${e.length} selected`}),(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground"})]}),children:[(0,r.jsx)("div",{className:"sticky top-0 bg-card border-b border-border px-2.5 py-1.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-1 rounded border border-border bg-background",children:[(0,r.jsx)(v.A,{size:11,className:"text-muted-foreground shrink-0"}),(0,r.jsx)("input",{type:"text",value:i,onChange:e=>d(e.target.value),autoFocus:!0,placeholder:"Search skills...",className:"flex-1 text-xs bg-transparent text-foreground placeholder:text-muted-foreground focus:outline-none"})]})}),c.slice(0,60).map(s=>{let n=e.includes(s.name);return(0,r.jsxs)("button",{onClick:()=>{var r;return r=s.name,void(e.includes(r)?t(e.filter(e=>e!==r)):t([...e,r]))},className:`w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors flex items-center gap-2 ${n?"bg-[var(--amber)]/5":""}`,children:[(0,r.jsx)("span",{className:`w-3.5 h-3.5 rounded border flex items-center justify-center shrink-0 transition-colors ${n?"bg-[var(--amber)] border-[var(--amber)] text-white":"border-border"}`,children:n&&(0,r.jsx)("span",{className:"text-[9px]",children:"✓"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("span",{className:"block truncate",children:s.name}),s.description&&(0,r.jsx)("span",{className:"block text-2xs text-muted-foreground truncate mt-0.5",children:s.description})]})]},s.name)}),0===o.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"Loading..."}),o.length>0&&0===c.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No skills found"})]})]})}function D({value:e,onChange:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(""),i=(0,n.useCallback)(s=>{let r=s.trim();r&&!e.includes(r)&&t([...e,r])},[e,t]),d=(0,n.useCallback)(e=>{e.preventDefault(),a(!1);let t=e.dataTransfer.getData("text/mindos-path");if(t)return void i(t);let s=e.dataTransfer.getData("text/plain");s&&i(s)},[i]),u=(0,n.useCallback)(e=>{e.preventDefault(),e.dataTransfer.dropEffect="copy",a(!0)},[]),m=(0,n.useCallback)(()=>a(!1),[]);return(0,r.jsxs)("div",{children:[e.length>0&&(0,r.jsx)("div",{className:"flex flex-col gap-1 mb-1.5",children:e.map(s=>(0,r.jsxs)("div",{className:"flex items-center gap-1.5 pl-2 pr-1 py-1 rounded-md text-2xs bg-muted/60 border border-border group",children:[(0,r.jsx)(y.A,{size:11,className:"text-muted-foreground shrink-0"}),(0,r.jsx)("span",{className:"text-foreground truncate flex-1",title:s,children:s}),(0,r.jsx)("button",{onClick:()=>t(e.filter(e=>e!==s)),className:"p-0.5 rounded hover:bg-[var(--error)]/10 text-muted-foreground hover:text-[var(--error)] opacity-0 group-hover:opacity-100 transition-all",children:(0,r.jsx)(j.A,{size:10})})]},s))}),(0,r.jsxs)("div",{onDrop:d,onDragOver:u,onDragLeave:m,className:`flex items-center gap-2 px-3 py-2.5 rounded-lg border-2 border-dashed transition-colors ${s?"border-[var(--amber)] bg-[var(--amber)]/5":"border-border hover:border-muted-foreground/30"}`,children:[(0,r.jsx)(c.A,{size:14,className:`shrink-0 ${s?"text-[var(--amber)]":"text-muted-foreground/40"}`}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground",children:"Drag files here from the sidebar"})]}),(0,r.jsx)("div",{className:"mt-1.5",children:(0,r.jsx)("input",{type:"text",value:o,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&o.trim()&&(i(o.trim()),l(""))},placeholder:"Or type a file path...",className:"w-full px-2.5 py-1 text-2xs rounded-md border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})})]})}async function P(e){try{let t=await fetch("/api/setup/ls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e||"~"})});if(!t.ok)return[];return(await t.json()).dirs??[]}catch{return[]}}function L({value:e,onChange:t}){let[s,a]=(0,n.useState)([]),[o,l]=(0,n.useState)(!1),[i,d]=(0,n.useState)(-1),u=(0,n.useRef)(!1),m=(0,n.useRef)(null),[x,p]=(0,n.useState)(!1),[h,g]=(0,n.useState)(e||"~"),[f,b]=(0,n.useState)([]),[v,j]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(u.current){u.current=!1;return}if(!e.trim()){a([]),l(!1);return}let t=setTimeout(async()=>{let t=function(e){let t=e.trim();if(!t)return"";if(t.endsWith("/")||t.endsWith("\\"))return t;let s=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"));return s>=0?t.slice(0,s+1):""}(e)||"~",s=await P(t);if(!s.length){a([]),l(!1);return}let r=t.includes("\\")?"\\":"/",n=t.endsWith("/")||t.endsWith("\\")?t:t+r,o=s.map(e=>n+e),i=e.endsWith("/")||e.endsWith("\\")?o:o.filter(t=>t.startsWith(e.trim()));a(i.slice(0,15)),l(i.length>0),d(-1)},300);return()=>clearTimeout(t)},[e]);let y=()=>{a([]),l(!1),d(-1)},S=e=>{u.current=!0,t(e),y(),m.current?.focus()},C=(0,n.useCallback)(async e=>{j(!0),b(await P(e)),j(!1)},[]);return(0,n.useEffect)(()=>{x&&C(h)},[x,h,C]),(0,r.jsxs)("div",{className:"relative flex gap-1.5",children:[(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.jsx)("input",{ref:m,type:"text",value:e,onChange:e=>{t(e.target.value),l(!0)},onKeyDown:e=>{o&&0!==s.length&&("ArrowDown"===e.key?(e.preventDefault(),d(e=>Math.min(e+1,s.length-1))):"ArrowUp"===e.key?(e.preventDefault(),d(e=>Math.max(e-1,-1))):"Enter"===e.key&&i>=0?(e.preventDefault(),S(s[i])):"Escape"===e.key?y():"Tab"===e.key&&i>=0&&(e.preventDefault(),S(s[i])))},onBlur:()=>setTimeout(y,150),onFocus:()=>s.length>0&&l(!0),placeholder:"~/projects/my-app",className:"w-full px-2.5 py-1.5 text-xs rounded-lg border border-border bg-background text-foreground font-mono placeholder:text-muted-foreground focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"}),o&&s.length>0&&(0,r.jsx)("div",{role:"listbox",className:"absolute z-50 left-0 right-0 top-full mt-1 rounded-lg border border-border bg-card shadow-lg overflow-auto max-h-[200px]",children:s.map((e,t)=>(0,r.jsxs)("button",{type:"button",role:"option","aria-selected":t===i,onMouseDown:()=>S(e),className:`w-full text-left px-3 py-1.5 text-xs font-mono transition-colors flex items-center gap-1.5 ${t===i?"bg-muted text-foreground":"text-foreground hover:bg-muted/50"}`,children:[(0,r.jsx)(N.A,{size:11,className:"text-[var(--amber)] shrink-0"}),(0,r.jsx)("span",{className:"truncate",children:e})]},e))})]}),(0,r.jsxs)(w,{open:x,onClose:()=>p(!1),trigger:(0,r.jsx)("button",{type:"button",onClick:()=>{g(e||"~"),p(e=>!e)},className:"px-2 py-1.5 rounded-lg border border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground transition-colors",title:"Browse directories",children:(0,r.jsx)(c.A,{size:13})}),children:[(0,r.jsxs)("div",{className:"sticky top-0 bg-card border-b border-border px-2.5 py-2 flex items-center gap-1.5",children:[(0,r.jsx)("span",{className:"text-2xs font-mono text-muted-foreground truncate flex-1",title:h,children:h}),(0,r.jsx)("button",{onClick:()=>{t(h),p(!1)},className:"px-2 py-0.5 text-2xs rounded font-medium bg-[var(--amber)] text-[var(--amber-foreground)] shrink-0",children:"Select"})]}),"~"!==h&&(0,r.jsxs)("button",{onClick:()=>{let e=h.split("/");e.length<=1||(e.pop(),g(e.join("/")||"~"))},className:"w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors text-muted-foreground flex items-center gap-1.5",children:[(0,r.jsx)(N.A,{size:12,className:"shrink-0"})," .."]}),v&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"Loading..."}),!v&&0===f.length&&(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No subdirectories"}),f.map(e=>(0,r.jsxs)("button",{onClick:()=>{g("~"===h?`~/${e}`:`${h.replace(/\/+$/,"")}/${e}`)},className:"w-full text-left px-3 py-1.5 text-xs hover:bg-muted transition-colors text-foreground flex items-center gap-1.5",children:[(0,r.jsx)(N.A,{size:12,className:"text-[var(--amber)] shrink-0"}),(0,r.jsx)("span",{className:"truncate flex-1",children:e}),(0,r.jsx)(k.A,{size:10,className:"text-muted-foreground/40 shrink-0"})]},e))]})]})}function F({step:e,index:t,onChange:s,onDelete:a,onMoveUp:o,onMoveDown:l}){let[i,d]=(0,n.useState)(!e.prompt),[c,u]=(0,n.useState)(!1),m=t=>s({...e,...t}),x=e.skills?.length?e.skills:e.skill?[e.skill]:[],p=!!(e.agent||e.model||x.length||e.context?.length||e.description||e.timeout);return i?(0,r.jsxs)("div",{className:"rounded-lg border border-[var(--amber)]/20 bg-card overflow-hidden shadow-sm",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 bg-muted/20",children:[(0,r.jsx)("span",{className:`text-xs font-medium flex-1 truncate ${e.name?"text-foreground":"text-muted-foreground/50 italic"}`,children:e.name||"Untitled step"}),(0,r.jsxs)("div",{className:"flex items-center gap-0.5",children:[o&&(0,r.jsx)("button",{onClick:o,className:"p-1 rounded hover:bg-muted text-muted-foreground/50 hover:text-foreground transition-colors",title:"Move up",children:(0,r.jsx)(g.A,{size:12})}),l&&(0,r.jsx)("button",{onClick:l,className:"p-1 rounded hover:bg-muted text-muted-foreground/50 hover:text-foreground transition-colors",title:"Move down",children:(0,r.jsx)(h.A,{size:12})}),(0,r.jsx)("button",{onClick:a,className:"p-1 rounded hover:bg-[var(--error)]/10 text-muted-foreground/50 hover:text-[var(--error)] transition-colors",title:"Delete",children:(0,r.jsx)(f.A,{size:11})}),(0,r.jsx)("button",{onClick:()=>d(!1),className:"p-1 rounded hover:bg-muted text-muted-foreground/50 transition-colors",title:"Collapse",children:(0,r.jsx)(g.A,{size:12})})]})]}),(0,r.jsxs)("div",{className:"px-3 py-3 space-y-3",children:[(0,r.jsx)("input",{type:"text",value:e.name,onChange:e=>m({name:e.target.value}),placeholder:"Step name...",autoFocus:!e.name,className:"w-full text-sm font-medium bg-transparent text-foreground placeholder:text-muted-foreground/30 focus:outline-none border-none p-0"}),(0,r.jsx)("textarea",{value:e.prompt,onChange:e=>m({prompt:e.target.value}),placeholder:"What should the AI do?",rows:3,className:"w-full px-3 py-2.5 text-sm rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground/40 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring resize-y leading-relaxed"}),(0,r.jsxs)("div",{className:`grid ${e.agent?"grid-cols-2":"grid-cols-1"} gap-2`,children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Agent"}),(0,r.jsx)(z,{value:e.agent,onChange:t=>m({agent:t,model:t?e.model:void 0})})]}),e.agent&&(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Model"}),(0,r.jsx)($,{value:e.model,onChange:e=>m({model:e})})]})]}),(0,r.jsxs)("button",{onClick:()=>u(e=>!e),className:`flex items-center gap-1.5 text-2xs transition-colors ${c||p?"text-muted-foreground":"text-muted-foreground/40 hover:text-muted-foreground"}`,children:[(0,r.jsx)(b.A,{size:11}),c?"Less options":"More options",!c&&p&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--amber)]"})]}),c&&(0,r.jsxs)("div",{className:"space-y-3 pt-1",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Skills"}),(0,r.jsx)(I,{value:x,onChange:e=>m({skills:e,skill:void 0})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Context files"}),(0,r.jsx)(D,{value:e.context??[],onChange:e=>m({context:e.length?e:void 0})})]}),(0,r.jsxs)("div",{className:"grid grid-cols-[1fr,auto] gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Description"}),(0,r.jsx)("input",{type:"text",value:e.description||"",onChange:e=>m({description:e.target.value||void 0}),placeholder:"Optional note...",className:"w-full px-2.5 py-1.5 text-xs rounded-md border border-border bg-background text-foreground placeholder:text-muted-foreground/30 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"block text-2xs text-muted-foreground/60 mb-1",children:"Timeout"}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("input",{type:"number",min:0,value:e.timeout||"",onChange:e=>m({timeout:e.target.value?Number(e.target.value):void 0}),placeholder:"120",className:"w-16 px-2 py-1.5 text-xs rounded-md border border-border bg-background text-foreground placeholder:text-muted-foreground/30 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/40",children:"s"})]})]})]})]})]})]}):(0,r.jsxs)("div",{className:"group flex items-start gap-2 px-3 py-2 rounded-lg hover:bg-muted/40 transition-colors cursor-pointer -ml-1",onClick:()=>d(!0),children:[(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("span",{className:`text-sm leading-tight block ${e.name?"text-foreground font-medium":"text-muted-foreground/50 italic"}`,children:e.name||"Untitled step"}),p&&(0,r.jsxs)("div",{className:"flex items-center gap-1 mt-1 flex-wrap",children:[e.agent&&(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded-full bg-muted text-muted-foreground",children:e.agent}),x.slice(0,2).map(e=>(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded-full bg-[var(--amber)]/8 text-[var(--amber)]",children:e},e)),x.length>2&&(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground/50",children:["+",x.length-2]}),e.context?.length?(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground/50",children:[e.context.length," files"]}):null]}),e.prompt&&(0,r.jsx)("p",{className:"text-2xs text-muted-foreground/50 mt-1 line-clamp-1 leading-relaxed",children:e.prompt})]}),(0,r.jsx)(h.A,{size:12,className:"text-muted-foreground/30 mt-1 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity"})]})}function O({workflow:e,filePath:t,onChange:s,onSaved:a}){let[o,i]=(0,n.useState)(!1),[h,g]=(0,n.useState)(""),[f,b]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>b(!1),3e3);return()=>clearTimeout(e)},[f]);let v=t=>s({...e,...t}),j=(0,n.useCallback)((t,r)=>{let n=[...e.steps];n[t]=r,s({...e,steps:n})},[e,s]),y=(0,n.useCallback)(t=>{let r=e.steps[t];(!(r.name||r.prompt)||window.confirm(`Delete step "${r.name||"Untitled"}"?`))&&s({...e,steps:e.steps.filter((e,s)=>s!==t)})},[e,s]),N=(0,n.useCallback)(()=>{let t=e.steps.map(e=>e.id),r=e.steps.length+1,n={id:function(e,t){let s=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"step",r=s,n=2;for(;t.includes(r);)r=`${s}-${n}`,n++;return r}(`step-${r}`,t),name:`Step ${r}`,prompt:""};s({...e,steps:[...e.steps,n]})},[e,s]),k=(0,n.useCallback)((t,r)=>{if(r<0||r>=e.steps.length)return;let n=[...e.steps],[a]=n.splice(t,1);n.splice(r,0,a),s({...e,steps:n})},[e,s]),w=async()=>{i(!0),g(""),b(!1);try{let s,r=(s={title:e.title},e.description&&(s.description=e.description),e.workDir&&(s.workDir=e.workDir),e.skills?.length&&(s.skills=e.skills),e.tools?.length&&(s.tools=e.tools),s.steps=e.steps.map(e=>{let t={id:e.id,name:e.name};return e.description&&(t.description=e.description),e.agent&&(t.agent=e.agent),e.model&&(t.model=e.model),e.skill&&(t.skill=e.skill),e.skills?.length&&(t.skills=e.skills),e.tools?.length&&(t.tools=e.tools),e.context?.length&&(t.context=e.context),t.prompt=e.prompt,e.timeout&&(t.timeout=e.timeout),t}),d.Ay.dump(s,{lineWidth:-1,noRefs:!0,quotingType:'"',forceQuotes:!1})),n=await fetch("/api/file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:t,op:"save_file",content:r})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`Save failed (HTTP ${n.status})`)}b(!0),a?.()}catch(e){g(e instanceof Error?e.message:"Save failed")}finally{i(!1)}};(0,n.useEffect)(()=>{let t=t=>{(t.metaKey||t.ctrlKey)&&"s"===t.key&&(t.preventDefault(),!o&&e.title.trim()&&e.steps.length>0&&w())};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)});let S=!o&&!!e.title.trim()&&e.steps.length>0;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"space-y-3 mb-8",children:[(0,r.jsx)("input",{type:"text",value:e.title,onChange:e=>v({title:e.target.value}),placeholder:"Flow title...",className:"w-full text-lg font-semibold bg-transparent text-foreground placeholder:text-muted-foreground/40 focus:outline-none border-none p-0 leading-tight"}),(0,r.jsx)("input",{type:"text",value:e.description||"",onChange:e=>v({description:e.target.value||void 0}),placeholder:"Add a description...",className:"w-full text-sm bg-transparent text-muted-foreground placeholder:text-muted-foreground/30 focus:outline-none border-none p-0"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(c.A,{size:12,className:"text-muted-foreground/40 shrink-0"}),(0,r.jsx)(L,{value:e.workDir||"",onChange:e=>v({workDir:e||void 0})})]})]}),e.steps.length>0?(0,r.jsxs)("div",{className:"relative",children:[e.steps.length>1&&(0,r.jsx)("div",{className:"absolute left-[19px] top-6 bottom-16 w-px bg-border"}),(0,r.jsx)("div",{className:"flex flex-col gap-3 mb-5 relative",children:e.steps.map((t,s)=>(0,r.jsxs)("div",{className:"relative pl-11",children:[(0,r.jsx)("div",{className:"absolute left-[7px] top-3 w-[22px] h-[22px] rounded-full border-2 border-border bg-background z-10 flex items-center justify-center",children:(0,r.jsx)("span",{className:"text-[10px] font-bold text-muted-foreground/60",children:s+1})}),(0,r.jsx)(F,{step:t,index:s,onChange:e=>j(s,e),onDelete:()=>y(s),onMoveUp:s>0?()=>k(s,s-1):void 0,onMoveDown:s<e.steps.length-1?()=>k(s,s+1):void 0})]},t.id))}),(0,r.jsxs)("div",{className:"relative pl-11",children:[(0,r.jsx)("div",{className:"absolute left-[7px] top-2.5 w-[22px] h-[22px] rounded-full border-2 border-dashed border-border bg-background z-10 flex items-center justify-center",children:(0,r.jsx)(u.A,{size:9,className:"text-muted-foreground/40"})}),(0,r.jsx)("button",{onClick:N,className:"w-full text-left px-3 py-2 rounded-lg text-xs text-muted-foreground/60 hover:text-muted-foreground hover:bg-muted/40 transition-colors",children:"Add step..."})]})]}):(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center py-16 text-center",children:[(0,r.jsx)("div",{className:"w-12 h-12 rounded-2xl bg-[var(--amber)]/8 flex items-center justify-center mb-4",children:(0,r.jsx)(l.A,{size:22,className:"text-[var(--amber)]/60"})}),(0,r.jsx)("p",{className:"text-sm font-medium text-foreground mb-1",children:"Build your flow"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground/60 mb-5 max-w-[240px]",children:"Each step is a task for an AI agent. Chain them together to automate complex workflows."}),(0,r.jsxs)("button",{onClick:N,className:"inline-flex items-center gap-1.5 px-4 py-2 rounded-lg text-xs font-medium bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-90 transition-opacity",children:[(0,r.jsx)(u.A,{size:12}),"Add first step"]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 mt-8 pt-4 border-t border-border/50",children:[(0,r.jsxs)("button",{onClick:w,disabled:!S,title:e.title.trim()?0===e.steps.length?"Add at least one step":void 0:"Title is required",className:`flex items-center gap-1.5 px-4 py-2 rounded-lg text-xs font-medium transition-all disabled:opacity-40 disabled:cursor-not-allowed ${S?"bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-90":"bg-muted text-muted-foreground"}`,children:[o?(0,r.jsx)(m.A,{size:12,className:"animate-spin"}):(0,r.jsx)(x.A,{size:12}),o?"Saving...":"Save"]}),h&&(0,r.jsx)("span",{className:"text-xs text-[var(--error)]",children:h}),f&&!h&&(0,r.jsxs)("span",{className:"flex items-center gap-1 text-2xs text-[var(--success)]",children:[(0,r.jsx)(p.A,{size:11}),"Saved"]}),(0,r.jsx)("kbd",{className:"text-2xs text-muted-foreground/30 ml-auto font-mono",children:"Ctrl+S"})]})]})}var _=s(30125),W=s(62791),U=s(86901),B=s(21628),H=s(9199);let K=new Map;async function Y(e,t){if(K.has(e))return K.get(e);try{let s=await fetch("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"read",name:e}),signal:t});if(!s.ok)return K.set(e,null),null;let r=(await s.json()).content;return K.set(e,r??null),r??null}catch{return null}}async function J(e,t){try{let s=await fetch(`/api/acp/registry?agent=${encodeURIComponent(e)}`,{signal:t});if(!s.ok)return null;let r=await s.json();if(r.agent?.id)return{id:r.agent.id,name:r.agent.name||e};return null}catch{return null}}async function G(e,t,s,r,n){let a=function(e,t){let s=[];if(e.skills?.length)for(let t of e.skills)s.includes(t)||s.push(t);else e.skill&&s.push(e.skill);for(let e of t.skills??[])s.includes(e)||s.push(e);return s}(e,t),o=new Map;if(a.length>0)for(let[e,t]of(await Promise.all(a.map(async e=>{let t=await Y(e,n);return[e,t]}))))t&&o.set(e,t);let l=null;e.agent&&(l=await J(e.agent,n));let i={messages:[{role:"user",content:function(e,t,s){let r=t.steps.map((e,t)=>`${t+1}. ${e.name}`).join("\n"),n=e.skills?.length?e.skills[0]:e.skill,a="";if(s.size>0){let e=[];for(let[t,r]of s){let s=t===n;e.push(`### ${s?"[Primary] ":""}Skill: ${t}
|
|
137
|
-
|
|
138
|
-
${r}`)}a=`
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
## Skill Reference
|
|
142
|
-
|
|
143
|
-
Follow the guidelines from these skills when executing this step:
|
|
144
|
-
|
|
145
|
-
${e.join("\n\n---\n\n")}`}return`You are executing step ${e.index+1} of a workflow: "${e.name}".
|
|
146
|
-
|
|
147
|
-
Context of the full workflow "${t.title}":
|
|
148
|
-
${r}
|
|
149
|
-
|
|
150
|
-
Current step instructions:
|
|
151
|
-
${e.prompt||"(No specific instructions — use common sense.)"}${a}
|
|
152
|
-
|
|
153
|
-
Execute concisely. Provide:
|
|
154
|
-
1. What you did / what the output is
|
|
155
|
-
2. Any decisions made
|
|
156
|
-
3. What the next step should watch out for
|
|
157
|
-
|
|
158
|
-
Be specific and actionable. Format in Markdown.`}(e,t,o)}],currentFile:s};l&&(i.selectedAcpAgent=l);let d=await fetch("/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),signal:n});if(!d.ok)throw Error(`Request failed (HTTP ${d.status})`);if(!d.body)throw Error("No response body");let c=d.body.getReader(),u=new TextDecoder,m="";for(;;){let{done:e,value:t}=await c.read();if(e)break;for(let e of u.decode(t,{stream:!0}).split("\n")){let t=e.match(/^data:(.+)$/);if(t){try{let e=JSON.parse(t[1]);if("text_delta"===e.type&&"string"==typeof e.delta)m+=e.delta,r(m);else if("thinking_delta"===e.type&&"string"==typeof e.delta)m+=e.delta,r(m);else if("error"===e.type&&e.message)throw Error(e.message)}catch{let t=e.match(/^0:"((?:[^"\\]|\\.)*)"$/);t&&r(m+=t[1].replace(/\\n/g,"\n").replace(/\\"/g,'"').replace(/\\\\/g,"\\"))}continue}let s=e.match(/^0:"((?:[^"\\]|\\.)*)"$/);s&&r(m+=s[1].replace(/\\n/g,"\n").replace(/\\"/g,'"').replace(/\\\\/g,"\\"))}}}function q(e){return e.steps.map((e,t)=>({...e,index:t,status:"pending",output:"",error:void 0}))}function V({status:e,index:t}){let s="w-[26px] h-[26px] rounded-full flex items-center justify-center shrink-0 transition-all";return"running"===e?(0,r.jsx)("div",{className:`${s} bg-[var(--amber)]/15 ring-2 ring-[var(--amber)]/30`,children:(0,r.jsx)(m.A,{size:12,className:"text-[var(--amber)] animate-spin"})}):"done"===e?(0,r.jsx)("div",{className:`${s} bg-[var(--success)]/15`,children:(0,r.jsx)(p.A,{size:13,className:"text-[var(--success)]"})}):"error"===e?(0,r.jsx)("div",{className:`${s} bg-[var(--error)]/15`,children:(0,r.jsx)(i.A,{size:13,className:"text-[var(--error)]"})}):"skipped"===e?(0,r.jsx)("div",{className:`${s} bg-muted/50`,children:(0,r.jsx)(_.A,{size:11,className:"text-muted-foreground/40"})}):(0,r.jsx)("div",{className:`${s} border-2 border-border bg-background`,children:(0,r.jsx)("span",{className:"text-[11px] font-bold text-muted-foreground/50",children:t+1})})}function Q({step:e,canRun:t,onRun:s,onSkip:a,onCancel:l}){let[d,c]=(0,n.useState)(!1),u=!!(e.output||e.error),m=e.skills?.length?e.skills:e.skill?[e.skill]:[];return"running"===e.status||e.status,(0,r.jsx)("div",{className:`transition-opacity ${"skipped"===e.status?"opacity-50":""}`,children:(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)(V,{status:e.status,index:e.index}),(0,r.jsxs)("div",{className:"flex-1 min-w-0 pt-0.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 justify-between",children:[(0,r.jsx)("span",{className:`text-sm font-medium truncate ${"done"===e.status?"text-foreground":"running"===e.status?"text-[var(--amber)]":"error"===e.status?"text-[var(--error)]":"text-foreground/70"}`,children:e.name}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0",children:[null!=e.durationMs&&("done"===e.status||"error"===e.status)&&(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/40 font-mono",children:function(e){if(e<1e3)return`${e}ms`;let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}(e.durationMs)}),"pending"===e.status&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("button",{onClick:s,disabled:!t,className:"flex items-center gap-1 px-2 py-0.5 rounded-md text-2xs font-medium transition-all disabled:opacity-30 bg-[var(--amber)] text-[var(--amber-foreground)]",children:[(0,r.jsx)(o.A,{size:9})," Run"]}),(0,r.jsx)("button",{onClick:a,className:"px-1.5 py-0.5 rounded-md text-2xs text-muted-foreground/50 hover:text-muted-foreground hover:bg-muted transition-colors",children:"Skip"})]}),"running"===e.status&&(0,r.jsxs)("button",{onClick:l,className:"flex items-center gap-1 px-2 py-0.5 rounded-md text-2xs text-[var(--error)]/70 hover:text-[var(--error)] hover:bg-[var(--error)]/10 transition-colors",children:[(0,r.jsx)(W.A,{size:9})," Stop"]}),u&&"running"!==e.status&&(0,r.jsx)("button",{onClick:()=>c(e=>!e),className:"p-0.5 rounded text-muted-foreground/30 hover:text-muted-foreground transition-colors",children:(0,r.jsx)(h.A,{size:12,className:`transition-transform ${d?"rotate-180":""}`})})]})]}),(e.agent||m.length>0)&&(0,r.jsxs)("div",{className:"flex gap-1 mt-0.5 flex-wrap",children:[e.agent&&(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/50",children:e.agent}),e.agent&&m.length>0&&(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/20",children:"/"}),m.map(e=>(0,r.jsx)("span",{className:"text-2xs text-[var(--amber)]/60",children:e},e))]}),(d||"running"===e.status)&&u&&(0,r.jsxs)("div",{className:"mt-2 rounded-lg overflow-hidden border border-border/50",children:[e.error&&(0,r.jsxs)("div",{className:"px-3 py-2.5 bg-[var(--error)]/5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1",children:[(0,r.jsx)(i.A,{size:10,className:"text-[var(--error)]"}),(0,r.jsx)("span",{className:"text-2xs font-medium text-[var(--error)]",children:"Error"})]}),(0,r.jsx)("div",{className:"text-xs text-[var(--error)]/80 whitespace-pre-wrap break-words leading-relaxed",children:e.error})]}),e.output&&(0,r.jsxs)("div",{className:"px-3 py-2.5 bg-muted/20",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5",children:[(0,r.jsx)(U.A,{size:10,className:"text-[var(--amber)]"}),(0,r.jsx)("span",{className:"text-2xs text-muted-foreground/50 uppercase tracking-wider font-medium",children:"Output"}),"running"===e.status&&(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full bg-[var(--amber)] animate-pulse"})]}),(0,r.jsx)("div",{className:"text-xs leading-relaxed text-foreground/80 whitespace-pre-wrap break-words",children:e.output})]})]})]})]})})}function X({workflow:e,filePath:t}){let[s,a]=(0,n.useState)(()=>q(e)),[o,l]=(0,n.useState)(!1),d=(0,n.useRef)(null);(0,n.useEffect)(()=>{a(q(e)),l(!1)},[e]);let u=(0,n.useCallback)(()=>{d.current?.abort(),d.current=null,l(!1),a(e=>e.map(e=>"running"===e.status?{...e,status:"error",error:"Cancelled"}:e))},[]),x=(0,n.useCallback)(async s=>{if(o)return;d.current?.abort();let r=new AbortController;d.current=r,l(!0);let n=Date.now();a(e=>e.map((e,t)=>t===s?{...e,status:"running",output:"",error:void 0,startedAt:new Date}:e));try{let o={...e.steps[s],index:s,status:"running",output:""};await G(o,e,t,e=>a(t=>t.map((t,r)=>r===s?{...t,output:e}:t)),r.signal);let l=Date.now()-n;a(e=>e.map((e,t)=>t===s?{...e,status:"done",completedAt:new Date,durationMs:l}:e))}catch(t){if(t instanceof Error&&"AbortError"===t.name)return;let e=Date.now()-n;a(r=>r.map((r,n)=>n===s?{...r,status:"error",error:t instanceof Error?t.message:String(t),durationMs:e}:r))}finally{l(!1)}},[o,e,t]),h=(0,n.useCallback)(e=>{a(t=>t.map((t,s)=>s===e?{...t,status:"skipped"}:t))},[]),g=(0,n.useCallback)(()=>{d.current?.abort(),d.current=null,l(!1),K.clear(),a(q(e))},[e]),f=s.filter(e=>"done"===e.status).length,b=s.length>0?Math.round(f/s.length*100):0,v=f===s.length&&s.length>0,j=s.findIndex(e=>"pending"===e.status),y=s.some(e=>"error"===e.status);return(0,r.jsxs)("div",{children:[(e.workDir||e.description)&&(0,r.jsxs)("div",{className:"flex items-center gap-3 mb-4 text-xs text-muted-foreground flex-wrap",children:[e.workDir&&(0,r.jsxs)("span",{className:"flex items-center gap-1.5 font-mono text-2xs bg-muted/50 px-2 py-0.5 rounded",children:[(0,r.jsx)(c.A,{size:10,className:"shrink-0"}),e.workDir]}),e.description&&(0,r.jsx)("span",{className:"leading-relaxed",children:e.description})]}),(0,r.jsxs)("div",{className:"mb-6",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,r.jsx)("div",{className:"flex items-center gap-2",children:v?(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-xs font-medium text-[var(--success)]",children:[(0,r.jsx)(p.A,{size:13}),"Complete"]}):y?(0,r.jsxs)("span",{className:"flex items-center gap-1.5 text-xs font-medium text-[var(--error)]",children:[(0,r.jsx)(i.A,{size:13}),f,"/",s.length," done"]}):(0,r.jsxs)("span",{className:"text-xs text-muted-foreground",children:[f,"/",s.length]})}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[j>=0&&(0,r.jsxs)("button",{onClick:()=>x(j),disabled:o,className:"flex items-center gap-1.5 px-3 py-1 rounded-md text-xs font-medium transition-all disabled:opacity-40 bg-[var(--amber)] text-[var(--amber-foreground)]",children:[o?(0,r.jsx)(m.A,{size:11,className:"animate-spin"}):(0,r.jsx)(B.A,{size:11}),o?"Running...":"Run next"]}),(0,r.jsxs)("button",{onClick:g,className:"flex items-center gap-1 px-2 py-1 rounded-md text-2xs text-muted-foreground/50 hover:text-muted-foreground hover:bg-muted transition-colors",children:[(0,r.jsx)(H.A,{size:10}),"Reset"]})]})]}),(0,r.jsx)("div",{className:"h-1 rounded-full bg-border/50 overflow-hidden",children:(0,r.jsx)("div",{className:`h-full rounded-full transition-all duration-500 ease-out ${v?"bg-[var(--success)]":y?"bg-[var(--error)]":"bg-[var(--amber)]"}`,style:{width:`${b}%`}})})]}),(0,r.jsxs)("div",{className:"relative",children:[s.length>1&&(0,r.jsx)("div",{className:"absolute left-[12px] top-5 bottom-5 w-px bg-border/50"}),(0,r.jsx)("div",{className:"flex flex-col gap-4",children:s.map((e,t)=>(0,r.jsx)(Q,{step:e,canRun:!o,onRun:()=>x(t),onSkip:()=>h(t),onCancel:u},e.id))})]})]})}function Z({filePath:e,content:t}){let s=(0,n.useMemo)(()=>(function(e){try{let t=d.Ay.load(e,{schema:d.Ay.JSON_SCHEMA});if(!t)return{workflow:null,errors:["File is empty"]};if("object"!=typeof t)return{workflow:null,errors:["Content is not valid YAML"]};let s=function(e){let t=[];if(!e||"object"!=typeof e)return{valid:!1,errors:["Must be a valid YAML object"]};if(e.title&&"string"==typeof e.title&&e.title.trim()||t.push("Missing required field 'title' (string)"),void 0!==e.description&&"string"!=typeof e.description&&t.push("'description' must be a string"),void 0!==e.skills&&(Array.isArray(e.skills)?e.skills.every(e=>"string"==typeof e)||t.push("'skills' must contain only strings"):t.push("'skills' must be an array of strings")),void 0!==e.tools&&(Array.isArray(e.tools)?e.tools.every(e=>"string"==typeof e)||t.push("'tools' must contain only strings"):t.push("'tools' must be an array of strings")),e.steps)if(Array.isArray(e.steps))if(0===e.steps.length)t.push("'steps' must have at least 1 step");else{let s=new Set;e.steps.forEach((e,r)=>{var n,a;let o,l,i=(n=e,a=r,o=[],l=`steps[${a}]`,n&&"object"==typeof n?(n.id&&"string"==typeof n.id&&n.id.trim()?/^[a-z0-9_-]+$/.test(n.id)||o.push(`${l}.id: '${n.id}' is invalid — use only lowercase letters, numbers, hyphens, underscores (e.g., 'run-tests')`):o.push(`${l}: missing required field 'id' (non-empty string)`),n.name&&"string"==typeof n.name&&n.name.trim()||o.push(`${l}: missing required field 'name' (non-empty string)`),void 0!==n.description&&"string"!=typeof n.description&&o.push(`${l}.description: must be a string`),void 0===n.agent||"string"==typeof n.agent&&n.agent.trim()||o.push(`${l}.agent: must be a non-empty string`),void 0===n.skill||"string"==typeof n.skill&&n.skill.trim()||o.push(`${l}.skill: must be a non-empty string`),void 0!==n.tools&&(Array.isArray(n.tools)?n.tools.every(e=>"string"==typeof e)||o.push(`${l}.tools: must contain only strings`):o.push(`${l}.tools: must be an array of strings`)),n.prompt&&"string"==typeof n.prompt&&n.prompt.trim()||o.push(`${l}: missing required field 'prompt' (non-empty string)`),void 0!==n.timeout&&("number"!=typeof n.timeout||n.timeout<=0)&&o.push(`${l}.timeout: must be a positive number (seconds)`)):o.push(`${l}: must be a valid object`),o);t.push(...i);let d=e?.id;"string"==typeof d&&d.trim()&&(s.has(d)&&t.push(`steps[${r}].id: duplicate id '${d}' (each step must have a unique id)`),s.add(d))})}else t.push("'steps' must be an array");else t.push("Missing required field 'steps' (array)");return{valid:0===t.length,errors:t}}(t);if(!s.valid)return{workflow:null,errors:s.errors};return{workflow:t,errors:[]}}catch(e){return{workflow:null,errors:[e instanceof Error?e.message:String(e)]}}})(t),[t]),[c,u]=(0,n.useState)("edit"),[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(()=>s.workflow?structuredClone(s.workflow):{title:"",description:"",steps:[]});(0,n.useRef)(t);let g=(0,n.useMemo)(()=>s.workflow??null,[s.workflow]),f=(0,n.useCallback)(e=>{h(e),x(!0)},[]),b=(0,n.useCallback)(()=>x(!1),[]),v=g??p,j=v.steps.length>0&&!!v.title,y=s.errors.length>0,N=v.title?0===v.steps.length?"Add at least one step":m?"Save changes first":void 0:"Add a title first",k=e=>{("run"!==e||j)&&u(e)};return(0,r.jsxs)("div",{className:"max-w-[720px] mx-auto py-8 px-2",children:[(0,r.jsxs)("div",{className:"mb-8",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1 p-0.5 rounded-lg bg-muted/50",children:[(0,r.jsxs)("button",{onClick:()=>k("edit"),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-all ${"edit"===c?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(a.A,{size:11}),"Edit"]}),(0,r.jsxs)("button",{onClick:()=>k("run"),disabled:!j,title:N,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-all disabled:opacity-30 disabled:cursor-not-allowed ${"run"===c?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[(0,r.jsx)(o.A,{size:11}),"Run"]})]}),p.steps.length>0&&(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground/60 font-mono",children:[p.steps.length," step",1!==p.steps.length?"s":""]})]}),(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)("div",{className:"mt-1 w-8 h-8 rounded-lg bg-[var(--amber)]/10 flex items-center justify-center shrink-0",children:(0,r.jsx)(l.A,{size:16,className:"text-[var(--amber)]"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsxs)("h1",{className:"text-lg font-semibold text-foreground truncate leading-tight",children:[p.title||"Untitled Flow",m&&(0,r.jsx)("span",{className:"text-[var(--amber)] ml-1.5 text-sm",title:"Unsaved changes",children:"*"})]}),p.description&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5 line-clamp-1",children:p.description})]})]})]}),y&&"edit"===c&&(0,r.jsxs)("div",{className:"mb-5 px-3.5 py-3 rounded-lg bg-[var(--error)]/8 border border-[var(--error)]/20",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,r.jsx)(i.A,{size:13,className:"text-[var(--error)] shrink-0"}),(0,r.jsx)("span",{className:"text-xs font-medium text-[var(--error)]",children:"Parse issues found"})]}),(0,r.jsx)("ul",{className:"text-2xs text-[var(--error)]/70 pl-5 list-disc space-y-0.5",children:s.errors.slice(0,3).map((e,t)=>(0,r.jsx)("li",{children:e},t))})]}),"edit"===c?(0,r.jsx)(O,{workflow:p,filePath:e,onChange:f,onSaved:b}):(0,r.jsx)(X,{workflow:v,filePath:e})]})}},56406:(e,t,s)=>{"use strict";s.r(t),s.d(t,{SummaryRenderer:()=>x});var r=s(95155),n=s(12115),a=s(91958),o=s(86901),l=s(48368),i=s(84980),d=s(91337),c=s(22356);function u(e){let t=Date.now()-e,s=Math.floor(t/6e4),r=Math.floor(t/36e5),n=Math.floor(t/864e5);return s<1?"just now":s<60?`${s}m ago`:r<24?`${r}h ago`:`${n}d ago`}function m(e){return e.split("/").pop()?.replace(/\.(md|csv)$/,"")??e}function x({filePath:e}){let[t,s]=(0,n.useState)([]),[x,p]=(0,n.useState)(""),[h,g]=(0,n.useState)(!1),[f,b]=(0,n.useState)(""),[v,j]=(0,n.useState)(!1),y=(0,n.useRef)(null);async function N(){if(0===t.length)return;y.current?.abort();let e=new AbortController;y.current=e,p(""),b(""),g(!0),j(!1);let s=t.map(e=>e.path),r=t.map(e=>`- **${m(e.path)}** (${e.path}, modified ${u(e.mtime)})`).join("\n"),n=`You are summarizing recent changes in a personal knowledge base (MindOS).
|
|
159
|
-
|
|
160
|
-
The following files were recently modified:
|
|
161
|
-
${r}
|
|
162
|
-
|
|
163
|
-
Please provide a concise daily briefing in this format:
|
|
164
|
-
1. **Key changes**: What was added or updated in each file (1–2 sentences per file)
|
|
165
|
-
2. **Themes**: Any patterns or recurring topics across the changes
|
|
166
|
-
3. **Suggested next actions**: 2–3 actionable follow-ups based on the content
|
|
167
|
-
|
|
168
|
-
Be specific. Reference actual content from the files. Keep the total response under 300 words.`;try{let t=await fetch("/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({messages:[{role:"user",content:n}],attachedFiles:s}),signal:e.signal});if(!t.ok)throw Error(`HTTP ${t.status}`);if(!t.body)throw Error("No response body");let r=t.body.getReader(),a=new TextDecoder,o="";for(;;){let{done:e,value:t}=await r.read();if(e)break;for(let e of a.decode(t,{stream:!0}).split("\n")){let t=e.match(/^0:"((?:[^"\\]|\\.)*)"$/);t?o+=t[1].replace(/\\n/g,"\n").replace(/\\"/g,'"').replace(/\\\\/g,"\\"):!e||e.startsWith("d:")||e.startsWith("e:")||e.startsWith("0:")||(o+=e)}p(o)}j(!0)}catch(e){e instanceof Error&&"AbortError"!==e.name&&b(e.message||"Failed to generate summary")}finally{g(!1)}}return(0,n.useEffect)(()=>{(0,c.n)("/api/recent-files?limit=8").then(e=>s(e.filter(e=>e.path.endsWith(".md")))).catch(e=>{console.warn("[SummaryRenderer] fetch recent-files failed:",e)})},[e]),(0,n.useEffect)(()=>()=>{y.current?.abort()},[]),(0,r.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:"1.5rem",flexWrap:"wrap"},children:[(0,r.jsx)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:t.length>0?`${t.length} recently modified files`:"Loading recent files…"}),(0,r.jsxs)("button",{onClick:N,disabled:h||0===t.length,className:"font-display",style:{display:"flex",alignItems:"center",gap:6,padding:"5px 14px",borderRadius:7,fontSize:12,cursor:h||0===t.length?"not-allowed":"pointer",border:"none",background:h?"var(--muted)":"var(--amber)",color:h?"var(--muted-foreground)":"var(--amber-foreground)",opacity:0===t.length?.5:1,transition:"opacity .15s"},children:[h?(0,r.jsx)(a.A,{size:12,style:{animation:"spin 1s linear infinite"}}):(0,r.jsx)(o.A,{size:12}),h?"Generating…":v?"Regenerate":"Generate briefing"]})]}),t.length>0&&(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:"1.5rem"},children:t.map(e=>(0,r.jsxs)("a",{href:`/view/${(0,d.O0)(e.path)}`,className:"font-display",style:{display:"inline-flex",alignItems:"center",gap:5,padding:"3px 10px",borderRadius:999,fontSize:"0.7rem",background:"var(--muted)",color:"var(--muted-foreground)",textDecoration:"none",border:"1px solid var(--border)",transition:"color .15s"},onMouseEnter:e=>e.currentTarget.style.color="var(--foreground)",onMouseLeave:e=>e.currentTarget.style.color="var(--muted-foreground)",title:e.path,children:[(0,r.jsx)(l.A,{size:10}),m(e.path),(0,r.jsxs)("span",{style:{opacity:.5},children:[(0,r.jsx)(i.A,{size:9,style:{display:"inline",marginLeft:2}})," ",u(e.mtime)]})]},e.path))}),f&&(0,r.jsx)("div",{className:"font-display",style:{padding:"10px 14px",borderRadius:8,background:"color-mix(in srgb, var(--error) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--error) 30%, transparent)",color:"var(--error)",fontSize:12,marginBottom:"1rem"},children:f}),x?(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,padding:"18px 20px",position:"relative"},children:[h&&(0,r.jsx)("div",{style:{position:"absolute",top:12,right:14,width:6,height:6,borderRadius:"50%",background:"var(--amber)",animation:"pulse 1.2s ease-in-out infinite"}}),(0,r.jsx)("div",{dangerouslySetInnerHTML:{__html:x.replace(/^### (.+)$/gm,'<h3 style="font-size:.8rem;font-weight:600;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.06em;margin:1em 0 .3em">$1</h3>').replace(/^## (.+)$/gm,'<h2 style="font-size:.9rem;font-weight:700;color:var(--foreground);margin:1.2em 0 .4em">$1</h2>').replace(/^# (.+)$/gm,'<h1 style="font-size:1rem;font-weight:700;color:var(--foreground);margin:1.2em 0 .4em">$1</h1>').replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,'<code class="font-display" style="font-size:.82em;padding:1px 5px;border-radius:4px;background:var(--muted)">$1</code>').replace(/^[-*] (.+)$/gm,'<li style="margin:.2em 0;padding-left:.3em">$1</li>').replace(/(<li[^>]*>.*<\/li>\n?)+/g,e=>`<ul style="margin:.4em 0;padding-left:1.4em;list-style:disc">${e}</ul>`).replace(/\n{2,}/g,'</p><p style="margin:.5em 0;font-size:.85rem;line-height:1.7;color:var(--foreground)">').replace(/^(?!<[hulo])(.+)$/gm,'<p style="margin:.5em 0;font-size:.85rem;line-height:1.7;color:var(--foreground)">$1</p>')}})]}):h||v||!(t.length>0)?null:(0,r.jsxs)("div",{style:{border:"1px dashed var(--border)",borderRadius:10,padding:"2.5rem 1.5rem",textAlign:"center",color:"var(--muted-foreground)"},children:[(0,r.jsx)(o.A,{size:28,style:{margin:"0 auto 10px",opacity:.3,color:"var(--amber)"}}),(0,r.jsxs)("p",{className:"font-display",style:{fontSize:12},children:["Click ",(0,r.jsx)("strong",{style:{color:"var(--foreground)"},children:"Generate briefing"})," to summarize recent changes with AI."]})]}),(0,r.jsx)("style",{children:`
|
|
169
|
-
@keyframes spin { to { transform: rotate(360deg); } }
|
|
170
|
-
@keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:.3; } }
|
|
171
|
-
`})]})}},64576:(e,t,s)=>{"use strict";s.d(t,{E:()=>n});var r=s(9339);let n=(0,r.createServerReference)("0043ce6d8342976c485697a6a0f3dbb86877b6cd32",r.callServer,void 0,r.findSourceMapURL,"cleanupExamplesAction")},66709:(e,t,s)=>{"use strict";s.d(t,{A:()=>u});var r=s(95155),n=s(12115),a=s(92451),o=s(33210),l=s(6296),i=s(13545),d=s(12651),c=s(61263);function u({open:e,onClose:t,onDiscover:s,discovering:u,error:m}){let{t:x}=(0,c.Y)(),p=x.panels.agents,[h,g]=(0,n.useState)(""),[f,b]=(0,n.useState)(null);if(!e)return null;let v=async()=>{if(!h.trim()||u)return;b(null);let e=await s(h.trim());e&&b(e)},j=()=>{g(""),b(null),t()};return(0,r.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:j,children:(0,r.jsxs)("div",{className:"bg-popover border border-border rounded-xl shadow-lg w-full max-w-md mx-4 p-5",onClick:e=>e.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":p.a2aDiscover,children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("h3",{className:"text-sm font-semibold text-foreground flex items-center gap-2",children:[(0,r.jsx)(a.A,{size:15,className:"text-muted-foreground"}),p.a2aDiscover]}),(0,r.jsx)("button",{type:"button",onClick:j,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Close",children:(0,r.jsx)(o.A,{size:14})})]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground mb-3",children:p.a2aDiscoverHint}),(0,r.jsxs)("div",{className:"flex gap-2 mb-4",children:[(0,r.jsx)("input",{type:"url",value:h,onChange:e=>g(e.target.value),onKeyDown:e=>{"Enter"===e.key&&v(),"Escape"===e.key&&t()},placeholder:p.a2aDiscoverPlaceholder,disabled:u,className:"flex-1 px-3 py-2 text-xs rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",autoFocus:!0}),(0,r.jsxs)("button",{type:"button",onClick:v,disabled:u||!h.trim(),className:"px-3 py-2 text-xs font-medium rounded-lg bg-foreground text-background hover:bg-foreground/90 disabled:opacity-50 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring flex items-center gap-1.5 shrink-0",children:[u&&(0,r.jsx)(l.A,{size:12,className:"animate-spin"}),u?p.a2aDiscovering:p.a2aDiscover]})]}),m&&!f&&(0,r.jsx)("div",{className:"rounded-lg border border-error/30 bg-error/5 px-3 py-2.5 mb-3",children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)(i.A,{size:14,className:"text-error mt-0.5 shrink-0"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium text-error",children:p.a2aDiscoverFailed}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground mt-0.5",children:p.a2aDiscoverFailedHint})]})]})}),f&&(0,r.jsx)("div",{className:"rounded-lg border border-success/30 bg-success/5 px-3 py-2.5",children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)(d.A,{size:14,className:"text-success mt-0.5 shrink-0"}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("p",{className:"text-xs font-medium text-success mb-1.5",children:p.a2aDiscoverSuccess}),(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsxs)("p",{className:"text-xs font-medium text-foreground truncate",title:f.card.name,children:[f.card.name,(0,r.jsxs)("span",{className:"text-2xs text-muted-foreground ml-1.5",children:["v",f.card.version]})]}),(0,r.jsx)("p",{className:"text-2xs text-muted-foreground truncate",title:f.card.description,children:f.card.description}),f.card.skills.length>0&&(0,r.jsxs)("div",{className:"mt-1.5",children:[(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground mb-1",children:[p.a2aSkills,":"]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1",children:f.card.skills.map(e=>(0,r.jsx)("span",{className:"text-2xs px-1.5 py-0.5 rounded bg-muted/80 text-muted-foreground border border-border/50",title:e.description,children:e.name},e.id))})]}),(0,r.jsxs)("p",{className:"text-2xs text-muted-foreground mt-1 truncate",title:f.endpoint,children:[p.a2aEndpoint,": ",f.endpoint]})]})]})]})})]})})}},66872:()=>{},68589:(e,t,s)=>{"use strict";s.d(t,{m:()=>n});let r=new Set(["write_file","create_file","batch_create_files","update_section","insert_after_heading","delete_file","rename_file","create_space"]);async function n(e,t,s){let n=e.getReader(),a=new TextDecoder,o="",l=[],i=new Map,d=null,c=null,u=Date.now();function m(){let e=l.map(e=>"text"===e.type?{type:"text",text:e.text}:"reasoning"===e.type?{type:"reasoning",text:e.text}:{...e});return{role:"assistant",content:e.filter(e=>"text"===e.type).map(e=>e.text).join(""),parts:e,timestamp:u}}try{for(;!s?.aborted;){let{done:e,value:s}=await n.read();if(e)break;let u=(o+=a.decode(s,{stream:!0})).split("\n");o=u.pop()??"";let x=!1;for(let e of u){let t,s=e.trim(),n=null;if(s.startsWith("data:")&&(n=s.slice(5).trim()),n){try{t=JSON.parse(n)}catch{continue}switch(t.type){case"text_delta":{let e=function(e){if(d===e){let e=l[l.length-1];if(e&&"text"===e.type)return e}let t={type:"text",text:""};return l.push(t),d=e,t}("text");e.text+=t.delta??"",x=!0;break}case"thinking_delta":c||(c={type:"reasoning",text:""},l.push(c),d=null),c.text+=t.delta??"",x=!0;break;case"tool_start":{let e=t.toolCallId,s=t.toolName,r=function(e,t){let s=i.get(e);return s||(s={type:"tool-call",toolCallId:e,toolName:t??"unknown",input:void 0,state:"pending"},i.set(e,s),l.push(s),d=null),s}(e,s);r.input=t.args,r.state="running",x=!0;break}case"tool_end":{let e=t.toolCallId,s=i.get(e);s&&(s.output=t.output??"",s.state=t.isError?"error":"done",x=!0,!t.isError&&r.has(s.toolName)&&window.dispatchEvent(new Event("mindos:files-changed")));break}case"error":{let e=t.message;l.push({type:"text",text:`
|
|
172
|
-
|
|
173
|
-
**Stream Error:** ${e}`}),d=null,x=!0}}}}x&&t(m())}}finally{n.releaseLock()}let x=!1;for(let e of i.values())("running"===e.state||"pending"===e.state)&&(e.state="error",e.output=e.output??"Stream ended before tool completed",x=!0);return x&&t(m()),m()}},69335:(e,t,s)=>{"use strict";s.d(t,{D:()=>n});var r=s(9339);let n=(0,r.createServerReference)("00b827eab44f7ab7cb36667578f653c98c3eeeba57",r.callServer,void 0,r.findSourceMapURL,"scanExampleFilesAction")},70620:(e,t,s)=>{"use strict";s.d(t,{A:()=>u});var r=s(95155),n=s(12115),a=s(47650),o=s(21362),l=s(38798),i=s(94514),d=s(66088),c=s(91337);function u({dirPaths:e,value:t,onChange:s,rootLabel:u="Root"}){let[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(t),[g,f]=(0,n.useState)(null),b=(0,n.useRef)(null),v=(0,n.useRef)(null);(0,n.useEffect)(()=>{h(t)},[t]);let j=(0,n.useCallback)(()=>{if(!b.current)return;let e=b.current.getBoundingClientRect(),t=window.innerHeight-e.bottom,s=e.top,r=t<208&&s>t;f({top:r?e.top:e.bottom,left:e.left,width:e.width,flipUp:r})},[]);(0,n.useEffect)(()=>m?(j(),window.addEventListener("scroll",j,!0),window.addEventListener("resize",j),()=>{window.removeEventListener("scroll",j,!0),window.removeEventListener("resize",j)}):void f(null),[m,j]);let y=(0,n.useCallback)(()=>x(!1),[]);(0,n.useEffect)(()=>{if(!m)return;let e=e=>{"Escape"===e.key&&(e.preventDefault(),y())},t=e=>{let t=e.target;b.current?.contains(t)||v.current?.contains(t)||y()};return document.addEventListener("keydown",e),document.addEventListener("mousedown",t),()=>{document.removeEventListener("keydown",e),document.removeEventListener("mousedown",t)}},[m,y]);let N=(0,n.useMemo)(()=>{let t=p?p+"/":"";return e.filter(e=>{if(!e.startsWith(t))return!1;let s=e.slice(t.length);return s.length>0&&!s.includes("/")}).sort()},[e,p]),k=(0,n.useMemo)(()=>p?p.split("/"):[],[p]),w=e=>{if(e<0)h(""),s("");else{let t=k.slice(0,e+1).join("/");h(t),s(t)}},S=t?t.split("/").map(e=>(0,c.vr)(e)).join(" / "):"/ "+u,C=m&&g&&(0,a.createPortal)((0,r.jsxs)("div",{ref:v,className:"fixed z-[9999] rounded-lg border border-[var(--amber)] bg-card shadow-lg overflow-hidden flex flex-col",style:{left:g.left,width:g.width,maxHeight:200,...g.flipUp?{bottom:window.innerHeight-g.top+4}:{top:g.top+4}},children:[(0,r.jsxs)("div",{className:"flex items-center gap-0.5 px-3 py-1.5 bg-muted/30 border-b border-border overflow-x-auto text-xs shrink-0",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>w(-1),className:`shrink-0 px-1.5 py-0.5 rounded transition-colors ${""===p?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:["/ ",u]}),k.map((e,t)=>(0,r.jsxs)("span",{className:"flex items-center gap-0.5 shrink-0",children:[(0,r.jsx)(o.A,{size:10,className:"text-muted-foreground/50"}),(0,r.jsx)("button",{type:"button",onClick:()=>w(t),className:`px-1.5 py-0.5 rounded transition-colors truncate max-w-[100px] ${t===k.length-1?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:e})]},t))]}),N.length>0?(0,r.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:N.map(t=>{let n=t.split("/").pop()||t,a=e.some(e=>e.startsWith(t+"/"));return(0,r.jsxs)("button",{type:"button",onClick:()=>{h(t),s(t)},className:"w-full flex items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-muted/60 transition-colors",children:[(0,r.jsx)(l.A,{size:12,className:"shrink-0 text-[var(--amber)]"}),(0,r.jsx)("span",{className:"flex-1 text-left truncate",children:n}),a&&(0,r.jsx)(o.A,{size:11,className:"shrink-0 text-muted-foreground/40"})]},t)})}):(0,r.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground/50 text-center",children:"—"}),(0,r.jsx)("button",{type:"button",onClick:y,className:"w-full py-1.5 flex items-center justify-center gap-1 text-xs font-medium text-[var(--amber)] border-t border-border hover:bg-muted/30 transition-colors shrink-0",children:(0,r.jsx)(i.A,{size:12})})]}),document.body);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("button",{ref:b,type:"button",onClick:()=>x(e=>!e),"aria-haspopup":"true","aria-expanded":m,className:`w-full flex items-center gap-2 px-3 py-2 text-sm rounded-lg border bg-background text-foreground transition-colors text-left focus-visible:ring-1 focus-visible:ring-ring outline-none ${m?"border-[var(--amber)]":"border-border hover:border-[var(--amber)]/40"}`,children:[(0,r.jsx)(l.A,{size:14,className:"shrink-0 text-[var(--amber)]"}),(0,r.jsx)("span",{className:"flex-1 truncate",children:S}),(0,r.jsx)(d.A,{size:14,className:`shrink-0 text-muted-foreground transition-transform duration-150 ${m?"rotate-180":""}`})]}),C]})}},76449:(e,t,s)=>{"use strict";s.d(t,{g:()=>r});let r=[{anchor:"files-panel",position:"right"},{anchor:"ask-button",position:"right"},{anchor:"agents-panel",position:"right"},{anchor:"echo-panel",position:"right"}]},77148:(e,t,s)=>{"use strict";s.d(t,{Un:()=>a});var r=s(12115);let n="mindos-renderer-state-change";function a(e,t,s){let a=`mindos-renderer:${e}:${t}`,o=(0,r.useRef)({key:a,raw:null,parsed:s});return o.current.key!==a&&(o.current={key:a,raw:null,parsed:s}),[(0,r.useSyncExternalStore)(e=>{let t=()=>e();return window.addEventListener("storage",t),window.addEventListener(n,t),()=>{window.removeEventListener("storage",t),window.removeEventListener(n,t)}},()=>{try{let e=localStorage.getItem(a);if(e===o.current.raw)return o.current.parsed;if(null===e)return o.current={key:a,raw:null,parsed:s},s;let t=JSON.parse(e);return o.current={key:a,raw:e,parsed:t},t}catch{return s}},()=>s),(0,r.useCallback)(e=>{try{let t=(()=>{try{let e=localStorage.getItem(a);return null!==e?JSON.parse(e):s}catch{return s}})(),r="function"==typeof e?e(t):e,n=JSON.stringify(r);localStorage.setItem(a,n),o.current={key:a,raw:n,parsed:r}}catch{}window.dispatchEvent(new Event(n))},[a,s])]}},86343:(e,t,s)=>{"use strict";s.d(t,{default:()=>a});var r=s(95155),n=s(12115);class a extends n.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error("[ErrorBoundary]",e,t.componentStack)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,r.jsx)("div",{className:"flex items-center justify-center min-h-[50vh] px-4",children:(0,r.jsxs)("div",{className:"text-center max-w-md",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-foreground mb-2",children:"Something went wrong"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:this.state.error?.message||"An unexpected error occurred."}),(0,r.jsx)("button",{onClick:()=>this.setState({hasError:!1,error:void 0}),className:"px-4 py-2 text-sm rounded-lg border border-border hover:bg-muted transition-colors",children:"Try again"})]})}):this.props.children}}},87500:(e,t,s)=>{"use strict";s.r(t),s.d(t,{TodoRenderer:()=>y});var r=s(95155),n=s(12115),a=s(51914),o=s(36201),l=s(66088),i=s(21362),d=s(58515),c=s(68459);let u=/^#{1,6}\s+(.+)/,m=/^(\s*)- \[([ xX])\]\s+(.*)$/;function x(e,t){let s=[...e];return t(s),s.join("\n")}let p={TODAY:{dot:"bg-red-400",label:"text-red-400"},Workflows:{dot:"bg-amber-400",label:"text-amber-400"},Backlog:{dot:"bg-blue-400",label:"text-blue-400"},Maintenance:{dot:"bg-zinc-400",label:"text-zinc-400"}};function h(e){return e.reduce((e,t)=>e+ +!!t.checked+h(t.children),0)}function g(e){return e.reduce((e,t)=>e+1+g(t.children),0)}function f({text:e,checked:t,onRename:s}){let[a,o]=(0,n.useState)(!1),[l,i]=(0,n.useState)(e),d=(0,n.useRef)(null);function c(){let t=l.trim();t&&t!==e?s(t):i(e),o(!1)}return((0,n.useEffect)(()=>{i(e)},[e]),(0,n.useEffect)(()=>{a&&d.current?.select()},[a]),a)?(0,r.jsx)("input",{ref:d,value:l,onChange:e=>i(e.target.value),onBlur:c,onKeyDown:t=>{"Enter"===t.key&&c(),"Escape"===t.key&&(i(e),o(!1))},className:"flex-1 bg-transparent border-b text-sm leading-relaxed outline-none min-w-0",style:{borderColor:"var(--amber)",color:"var(--foreground)"},onClick:e=>e.stopPropagation()}):(0,r.jsx)("span",{className:`flex-1 text-sm leading-relaxed cursor-text min-w-0 ${t?"line-through text-muted-foreground":"text-foreground"}`,onDoubleClick:()=>o(!0),title:"Double-click to edit",children:e})}function b({onAdd:e}){let[t,s]=(0,n.useState)(!1),[l,i]=(0,n.useState)(""),d=(0,n.useRef)(null);function c(){let t=l.trim();t&&e(t),i(""),s(!1)}return((0,n.useEffect)(()=>{t&&d.current?.focus()},[t]),t)?(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 mt-1",children:[(0,r.jsx)("span",{className:"w-[13px] shrink-0"}),(0,r.jsx)("span",{className:"shrink-0",style:{color:"var(--muted-foreground)"},children:(0,r.jsx)(o.A,{size:15})}),(0,r.jsx)("input",{ref:d,value:l,onChange:e=>i(e.target.value),onBlur:c,onKeyDown:e=>{"Enter"===e.key&&c(),"Escape"===e.key&&(i(""),s(!1))},placeholder:"New item…",className:"flex-1 bg-transparent border-b text-sm outline-none",style:{borderColor:"var(--amber)",color:"var(--foreground)"}})]}):(0,r.jsxs)("button",{onClick:()=>s(!0),className:"flex items-center gap-1.5 w-full px-3 py-1.5 rounded-lg text-xs transition-colors hover:bg-muted/60 mt-1",style:{color:"var(--muted-foreground)"},children:[(0,r.jsx)(a.A,{size:12}),(0,r.jsx)("span",{children:"Add item"})]})}function v({item:e,depth:t,onToggle:s,onRename:a,onDelete:u}){let[m,x]=(0,n.useState)(!0),p=e.children.length>0;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:`group flex items-center gap-2 py-1.5 px-2 rounded-lg transition-colors hover:bg-muted/60 ${e.checked?"opacity-50":""}`,style:{paddingLeft:`${8+20*t}px`},children:[p?(0,r.jsx)("button",{onClick:()=>x(e=>!e),className:"shrink-0 text-muted-foreground hover:text-foreground transition-colors",children:m?(0,r.jsx)(l.A,{size:13}):(0,r.jsx)(i.A,{size:13})}):(0,r.jsx)("span",{className:"w-[13px] shrink-0"}),(0,r.jsx)("button",{onClick:()=>s(e.lineIndex,!e.checked),className:"shrink-0 transition-colors",style:{color:e.checked?"var(--amber)":"var(--muted-foreground)"},children:e.checked?(0,r.jsx)(d.A,{size:15}):(0,r.jsx)(o.A,{size:15})}),(0,r.jsx)(f,{text:e.text,checked:e.checked,onRename:t=>a(e.lineIndex,t)}),(0,r.jsx)("button",{onClick:()=>u(e.lineIndex),className:"shrink-0 opacity-0 group-hover:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/10",style:{color:"var(--muted-foreground)"},title:"Delete item",children:(0,r.jsx)(c.A,{size:12})})]}),p&&m&&(0,r.jsx)("div",{children:e.children.map(e=>(0,r.jsx)(v,{item:e,depth:t+1,onToggle:s,onRename:a,onDelete:u},e.id))})]})}function j({name:e,meta:t,onToggle:s,onRename:a,onDelete:o,onAdd:d}){let c,[u,m]=(0,n.useState)(!1),x=(c=Object.keys(p).find(t=>e.includes(t)))?p[c]:{dot:"bg-zinc-500",label:"text-zinc-400"},{items:f,lastLineIndex:j}=t,y=h(f),N=g(f);return(0,r.jsxs)("div",{className:"border border-border rounded-xl overflow-hidden bg-card",children:[(0,r.jsxs)("button",{onClick:()=>m(e=>!e),className:"w-full flex items-center justify-between px-4 py-3 hover:bg-muted/40 transition-colors",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:`w-2 h-2 rounded-full shrink-0 ${x.dot}`}),(0,r.jsx)("span",{className:`text-xs font-semibold uppercase tracking-wider ${x.label} font-display`,children:e}),(0,r.jsxs)("span",{className:"text-xs text-muted-foreground",children:[y,"/",N]})]}),u?(0,r.jsx)(i.A,{size:14,className:"text-muted-foreground"}):(0,r.jsx)(l.A,{size:14,className:"text-muted-foreground"})]}),(0,r.jsx)("div",{className:"h-0.5 bg-muted mx-4",children:(0,r.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:N?`${y/N*100}%`:"0%",background:"var(--amber)"}})}),!u&&(0,r.jsxs)("div",{className:"px-2 py-2",children:[f.map(e=>(0,r.jsx)(v,{item:e,depth:0,onToggle:s,onRename:a,onDelete:o},e.id)),0===f.length&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground px-4 py-2",children:"No items"}),(0,r.jsx)(b,{onAdd:e=>d(j,e)})]})]})}function y({content:e,saveAction:t}){let[s,a]=(0,n.useState)(e),{sections:o,lines:l}=(0,n.useMemo)(()=>{let e,t,r,n;return e=s.split("\n"),t="General",r={},n=[],e.forEach((e,s)=>{let a=e.match(u);if(a){t=a[1].replace(/^[^\w\s]+\s*/,"").trim();return}let o=e.match(m);if(!o)return;let[,l,i,d]=o,c=Math.floor(l.length/2),x="x"===i.toLowerCase(),p={id:`${s}`,text:d.replace(/\*\*(.*?)\*\*/g,"$1").trim(),checked:x,indent:c,lineIndex:s,section:t,children:[]};for(;n.length>0&&n[n.length-1].indent>=c;)n.pop();r[t]||(r[t]={items:[],lastLineIndex:-1}),n.length>0?n[n.length-1].children.push(p):r[t].items.push(p),r[t].lastLineIndex=Math.max(r[t].lastLineIndex,s),n.push(p)}),{sections:r,lines:e}},[s]),i=(0,n.useMemo)(()=>Object.values(o).reduce((e,t)=>e+h(t.items),0),[o]),d=(0,n.useMemo)(()=>Object.values(o).reduce((e,t)=>e+g(t.items),0),[o]),c=(0,n.useCallback)(async e=>{a(e),await t(e)},[t]),p=(0,n.useCallback)(async(e,t)=>{await c(x(l,s=>{s[e]=t?s[e].replace(/- \[ \]/,"- [x]"):s[e].replace(/- \[[xX]\]/,"- [ ]")}))},[l,c]),f=(0,n.useCallback)(async(e,t)=>{await c(x(l,s=>{s[e]=s[e].replace(/(- \[[ xX]\]\s*)(.*)$/,`$1${t}`)}))},[l,c]),b=(0,n.useCallback)(async e=>{await c(x(l,t=>{t.splice(e,1)}))},[l,c]),v=(0,n.useCallback)(async(e,t)=>{await c(x(l,s=>{let r=e<0?s.length:e+1;s.splice(r,0,`- [ ] ${t}`)}))},[l,c]),y=Object.entries(o);return(0,r.jsxs)("div",{className:"max-w-[900px] mx-auto xl:mr-[220px] px-0 py-2",children:[(0,r.jsxs)("div",{className:"mb-6",children:[(0,r.jsxs)("p",{className:"text-xs text-muted-foreground font-display",children:[i," / ",d," completed"]}),(0,r.jsx)("div",{className:"mt-1.5 w-48 h-1.5 bg-muted rounded-full overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:d?`${i/d*100}%`:"0%",background:"var(--amber)"}})})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[y.map(([e,t])=>(0,r.jsx)(j,{name:e,meta:t,onToggle:p,onRename:f,onDelete:b,onAdd:v},e)),0===y.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No TODO items found in this file."})]})]})}},88946:(e,t,s)=>{"use strict";s.r(t),s.d(t,{BacklinksRenderer:()=>m});var r=s(95155),n=s(12115),a=s(73321),o=s(48368),l=s(22164),i=s(91337),d=s(22356);function c(e){return e.split("/").pop()?.replace(/\.md$/,"")??e}function u({text:e}){let t=e.split(/(\[\[[^\]]+\]\]|\[[^\]]+\]\([^)]+\))/g);return(0,r.jsx)("span",{children:t.map((e,t)=>/^\[\[/.test(e)||/^\[/.test(e)?(0,r.jsx)("span",{style:{color:"var(--amber)",fontWeight:500},children:e},t):(0,r.jsx)("span",{children:e},t))})}function m({filePath:e}){let t=(0,a.useRouter)(),[s,m]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0);if((0,n.useEffect)(()=>{p(!0),(0,d.n)(`/api/backlinks?path=${encodeURIComponent(e)}`).then(e=>{m(e),p(!1)}).catch(()=>p(!1))},[e]),x)return(0,r.jsx)("div",{className:"font-display",style:{padding:"3rem 1rem",textAlign:"center",fontSize:12,color:"var(--muted-foreground)"},children:"Scanning backlinks…"});let h=s??[];return(0,r.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsx)("div",{style:{marginBottom:"1.5rem",display:"flex",alignItems:"center",gap:8},children:(0,r.jsx)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:0===h.length?"No backlinks found":`${h.length} file${1===h.length?"":"s"} link here`})}),0===h.length?(0,r.jsxs)("div",{style:{border:"1px dashed var(--border)",borderRadius:10,padding:"2.5rem 1.5rem",textAlign:"center",color:"var(--muted-foreground)",fontSize:13},children:[(0,r.jsx)(o.A,{size:28,style:{margin:"0 auto 10px",opacity:.3}}),(0,r.jsxs)("p",{className:"font-display",style:{fontSize:12},children:["No other files link to ",(0,r.jsx)("strong",{style:{color:"var(--foreground)"},children:c(e)})," yet."]})]}):(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:h.map(({filePath:e,snippets:s})=>{let n,a=c(e),d=(n=e.split("/")).length>1?n.slice(0,-1).join("/"):"";return(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,overflow:"hidden",cursor:"pointer",transition:"border-color .15s"},onClick:()=>t.push("/view/"+(0,i.O0)(e)),onMouseEnter:e=>e.currentTarget.style.borderColor="rgba(200,135,58,0.4)",onMouseLeave:e=>e.currentTarget.style.borderColor="var(--border)",children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 14px",borderBottom:s.length>0?"1px solid var(--border)":"none",background:"var(--muted)"},children:[(0,r.jsx)(o.A,{size:13,style:{color:"var(--muted-foreground)",flexShrink:0}}),(0,r.jsx)("span",{style:{fontWeight:600,fontSize:"0.85rem",color:"var(--foreground)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a}),d&&(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.68rem",color:"var(--muted-foreground)",opacity:.6,flexShrink:0},children:d}),(0,r.jsx)(l.A,{size:11,style:{color:"var(--muted-foreground)",opacity:.5,flexShrink:0}})]}),s.map((e,t)=>(0,r.jsx)("div",{style:{padding:"8px 14px",borderBottom:t<s.length-1?"1px solid var(--border)":"none",background:"var(--background)"},children:e.split("\n").map((e,t)=>(0,r.jsx)("div",{className:"font-display",style:{fontSize:"0.72rem",color:"var(--muted-foreground)",lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:(0,r.jsx)(u,{text:e})},t))},t))]},e)})})]})}},91337:(e,t,s)=>{"use strict";s.d(t,{IX:()=>i,KW:()=>l,O0:()=>o,cn:()=>a,vr:()=>d});var r=s(29722),n=s(622);function a(...e){return(0,n.QP)((0,r.$)(e))}function o(e){return e.split("/").map(encodeURIComponent).join("/")}function l(e,t){let s=Date.now()-e,r=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return r<1?t.justNow:r<60?t.minutesAgo(r):n<24?t.hoursAgo(n):a<7?t.daysAgo(a):new Date(e).toLocaleDateString()}function i(e){let t=e.match(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]+/u);return t?.[0]??""}function d(e){return e.replace(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}\s]+/u,"")||e}},91459:(e,t,s)=>{"use strict";s.d(t,{TooltipProvider:()=>a});var r=s(95155),n=s(32727);function a({delay:e=0,...t}){return(0,r.jsx)(n.B,{"data-slot":"tooltip-provider",delay:e,...t})}},92306:(e,t,s)=>{"use strict";s.r(t),s.d(t,{CsvRenderer:()=>z});var r=s(95155),n=s(12115),a=s(18837),o=s(37595),l=s(8434),i=s(1164),d=s(59386),c=s.n(d);function u(e,t){return c().unparse([e,...t])}let m=[{bg:"rgba(200,135,58,0.12)",text:"var(--amber)"},{bg:"rgba(122,173,128,0.12)",text:"var(--success)"},{bg:"rgba(138,180,216,0.12)",text:"#8ab4d8"},{bg:"rgba(200,160,216,0.12)",text:"#c8a0d8"},{bg:"rgba(200,96,96,0.12)",text:"#c86060"},{bg:"rgba(150,150,150,0.12)",text:"var(--muted-foreground)"}];function x(e){let t=0;for(let s=0;s<e.length;s++)t=31*t+e.charCodeAt(s)&65535;return m[t%m.length]}var p=s(77148),h=s(9921),g=s(66088),f=s(68459),b=s(51914);function v({value:e,onCommit:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(e),i=(0,n.useRef)(null);function d(){a(!1),o!==e?t(o):l(e)}return((0,n.useEffect)(()=>{l(e)},[e]),(0,n.useEffect)(()=>{s&&i.current?.select()},[s]),s)?(0,r.jsx)("input",{ref:i,value:o,onChange:e=>l(e.target.value),onBlur:d,onKeyDown:t=>{"Enter"===t.key&&d(),"Escape"===t.key&&(l(e),a(!1))},className:"w-full bg-transparent outline-none text-sm",onClick:e=>e.stopPropagation(),style:{color:"var(--foreground)",borderBottom:"1px solid var(--amber)",minWidth:60}}):(0,r.jsx)("div",{className:"truncate text-sm cursor-text",style:{color:"var(--foreground)",minWidth:60},onClick:()=>a(!0),title:e,children:e||(0,r.jsx)("span",{style:{color:"var(--muted-foreground)",opacity:.3},children:"—"})})}function j({headers:e,visibleIndices:t,onAdd:s,onCancel:a}){let[o,l]=(0,n.useState)(()=>Array(e.length).fill(""));return(0,r.jsxs)("tr",{style:{background:"color-mix(in srgb, var(--amber) 6%, transparent)",borderTop:"1px solid var(--amber)"},children:[t.map((t,n)=>(0,r.jsx)("td",{className:"px-3 py-2",style:{borderBottom:"1px solid var(--border)"},children:(0,r.jsx)("input",{autoFocus:0===n,value:o[t],onChange:e=>{var s;return s=e.target.value,void l(e=>{let r=[...e];return r[t]=s,r})},onKeyDown:e=>{"Enter"===e.key&&s(o),"Escape"===e.key&&a()},placeholder:e[t],className:"w-full bg-transparent outline-none text-sm placeholder:opacity-30",style:{color:"var(--foreground)",borderBottom:"1px solid var(--border)"}})},t)),(0,r.jsx)("td",{className:"px-2 py-2",style:{borderBottom:"1px solid var(--border)"}})]})}function y({headers:e,rows:t,cfg:s,saveAction:a}){let[o,l]=(0,n.useState)(t),[i,d]=(0,n.useState)(!1);(0,n.useEffect)(()=>{l(t)},[t]);let c=(0,n.useMemo)(()=>e.map((e,t)=>t).filter(t=>!s.hiddenFields.includes(e[t])),[e,s.hiddenFields]),m=e.indexOf(s.sortField),x=(0,n.useMemo)(()=>{let e=[...o];return m>=0&&e.sort((e,t)=>{let r=e[m]??"",n=t[m]??"",a=parseFloat(r),o=parseFloat(n),l=isNaN(a)||isNaN(o)?r.localeCompare(n):a-o;return"asc"===s.sortDir?l:-l}),e},[o,m,s.sortDir]),p=e.indexOf(s.groupField),y=(0,n.useMemo)(()=>{if(p<0)return[{key:null,rows:x.map(e=>({row:e,orig:e}))}];let e=new Map;for(let t of x){let s=t[p]||"(empty)";e.has(s)||e.set(s,[]),e.get(s).push(t)}return[...e.entries()].map(([e,t])=>({key:e,rows:t.map(e=>({row:e,orig:e}))}))},[x,p]);async function N(t,s,r){let n=o.map(e=>e===t?e.map((e,t)=>t===s?r:e):e);l(n),await a(u(e,n))}async function k(t){let s=o.filter(e=>e!==t);l(s),await a(u(e,s))}async function w(t){let s=[...o,t];l(s),d(!1),await a(u(e,s))}let S={borderBottom:"1px solid var(--border)",fontSize:"0.72rem",letterSpacing:"0.05em",textTransform:"uppercase",color:"var(--muted-foreground)",fontWeight:600},C=0;return(0,r.jsxs)("div",{className:"rounded-xl overflow-hidden border",style:{borderColor:"var(--border)"},children:[(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"min-w-full text-sm border-collapse",children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{style:{background:"var(--muted)"},children:[c.map(t=>(0,r.jsx)("th",{className:"px-4 py-2.5 text-left whitespace-nowrap",style:S,children:(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[e[t],s.sortField===e[t]&&("asc"===s.sortDir?(0,r.jsx)(h.A,{size:10,style:{color:"var(--amber)"}}):(0,r.jsx)(g.A,{size:10,style:{color:"var(--amber)"}}))]})},t)),(0,r.jsx)("th",{className:"w-8",style:{...S,background:"var(--muted)"}})]})}),(0,r.jsxs)("tbody",{children:[y.map((e,t)=>(0,r.jsxs)(n.Fragment,{children:[null!==e.key&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:c.length+1,className:"px-4 py-1.5",style:{background:"var(--accent)",borderBottom:"1px solid var(--border)",borderTop:"1px solid var(--border)"},children:(0,r.jsxs)("span",{className:"text-xs font-semibold font-display",style:{color:"var(--muted-foreground)"},children:[e.key," \xb7 ",e.rows.length]})})},`grp-${e.key}`),e.rows.map(({row:e,orig:t})=>{let s=C++;return(0,r.jsxs)("tr",{className:"group transition-colors",style:{background:s%2==0?"var(--background)":"var(--card)"},onMouseEnter:e=>e.currentTarget.style.background="var(--muted)",onMouseLeave:e=>e.currentTarget.style.background=s%2==0?"var(--background)":"var(--card)",children:[c.map(s=>(0,r.jsx)("td",{className:"px-4 py-2 max-w-xs",style:{borderBottom:"1px solid var(--border)"},children:(0,r.jsx)(v,{value:e[s]??"",onCommit:e=>N(t,s,e)})},s)),(0,r.jsx)("td",{className:"px-2 py-2",style:{borderBottom:"1px solid var(--border)"},children:(0,r.jsx)("button",{onClick:()=>k(t),className:"opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded hover:bg-destructive/10",style:{color:"var(--muted-foreground)"},children:(0,r.jsx)(f.A,{size:12})})})]},s)})]},e.key??`section-${t}`)),i&&(0,r.jsx)(j,{headers:e,visibleIndices:c,onAdd:w,onCancel:()=>d(!1)})]})]})}),(0,r.jsxs)("div",{className:"px-4 py-2 flex items-center justify-between",style:{background:"var(--muted)",borderTop:"1px solid var(--border)"},children:[(0,r.jsxs)("span",{className:"text-xs font-display",style:{color:"var(--muted-foreground)"},children:[o.length," rows \xb7 ",e.length," cols"]}),i?(0,r.jsx)("button",{onClick:()=>d(!1),className:"text-xs px-2.5 py-1 rounded-md",style:{color:"var(--muted-foreground)"},children:"Cancel"}):(0,r.jsxs)("button",{onClick:()=>d(!0),className:"flex items-center gap-1 text-xs px-2.5 py-1 rounded-md",style:{color:"var(--amber)",background:"var(--amber-dim)"},children:[(0,r.jsx)(b.A,{size:12})," Add row"]})]})]})}function N({headers:e,rows:t,cfg:s}){let n=e.indexOf(s.titleField),a=e.indexOf(s.descField),o=e.indexOf(s.tagField);return(0,r.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:t.map((t,s)=>{let l=n>=0?t[n]:t[0]??"",i=a>=0?t[a]:"",d=o>=0?t[o]:"",c=d?x(d):null;return(0,r.jsxs)("div",{className:"rounded-xl border p-4 flex flex-col gap-2 hover:bg-muted/50 transition-colors",style:{borderColor:"var(--border)",background:"var(--card)"},children:[d&&c&&(0,r.jsx)("span",{className:"self-start text-xs px-2 py-0.5 rounded-full font-medium",style:{background:c.bg,color:c.text},children:d}),(0,r.jsx)("p",{className:"text-sm font-semibold leading-snug",style:{color:"var(--foreground)"},children:l}),i&&(0,r.jsx)("p",{className:"text-xs leading-relaxed line-clamp-3",style:{color:"var(--muted-foreground)"},children:i}),(0,r.jsx)("div",{className:"mt-1 flex flex-col gap-0.5",children:e.map((e,s)=>{if(s===n||s===a||s===o)return null;let l=t[s];return l?(0,r.jsxs)("div",{className:"flex items-baseline gap-1.5 text-xs",children:[(0,r.jsx)("span",{className:"font-display",style:{color:"var(--muted-foreground)",opacity:.6,fontSize:"0.68rem"},children:e}),(0,r.jsx)("span",{className:"truncate",style:{color:"var(--muted-foreground)"},children:l})]},s):null})})]},s)})})}function k({headers:e,rows:t,cfg:s,saveAction:a}){let[o,l]=(0,n.useState)(t),[i,d]=(0,n.useState)(null),[c,m]=(0,n.useState)(""),[p,h]=(0,n.useState)(!1);(0,n.useEffect)(()=>{l(t)},[t]);let g=e.indexOf(s.groupField),f=e.indexOf(s.titleField),v=e.indexOf(s.descField),{groups:j,groupKeys:y}=(0,n.useMemo)(()=>{let e=new Map;return o.forEach((t,s)=>{let r=(g>=0?t[g]:"")||"(empty)";e.has(r)||e.set(r,[]),e.get(r).push({row:t,origIdx:s})}),{groups:e,groupKeys:[...e.keys()]}},[o,g]);async function N(t,s){let r=o.map((e,r)=>{if(r!==t)return e;let n=[...e];return g>=0&&(n[g]=s),n});l(r),await a(u(e,r))}function k({group:t}){let s=j.get(t)??[],n=x(t),a=i===t;return(0,r.jsxs)("div",{className:"flex-shrink-0 w-64 flex flex-col gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-1 py-1.5",children:[(0,r.jsx)("span",{className:"w-2.5 h-2.5 rounded-full shrink-0",style:{background:n.text}}),(0,r.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider truncate font-display",style:{color:n.text},children:t}),(0,r.jsx)("span",{className:"text-xs ml-auto shrink-0",style:{color:"var(--muted-foreground)",opacity:.5},children:s.length})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-2 rounded-xl p-1.5 min-h-[80px] transition-colors",style:{background:a?"var(--amber-dim)":"var(--muted)",border:`1px solid ${a?"var(--amber)":"transparent"}`},onDragOver:e=>{e.preventDefault(),d(t)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||d(null)},onDrop:e=>{d(null);let s=parseInt(e.dataTransfer.getData("origIdx"));isNaN(s)||N(s,t)},children:[s.map(({row:t,origIdx:s})=>{let n=f>=0?t[f]:t[0]??"",a=v>=0?t[v]:"";return(0,r.jsxs)("div",{draggable:!0,onDragStart:e=>{e.dataTransfer.setData("origIdx",String(s)),d(null)},onDragEnd:()=>d(null),className:"rounded-lg border p-3 flex flex-col gap-1.5 cursor-grab active:cursor-grabbing hover:bg-muted/50 transition-colors",style:{borderColor:"var(--border)",background:"var(--card)"},children:[(0,r.jsx)("p",{className:"text-sm font-medium leading-snug",style:{color:"var(--foreground)"},children:n}),a&&(0,r.jsx)("p",{className:"text-xs leading-relaxed line-clamp-2",style:{color:"var(--muted-foreground)"},children:a}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1 mt-0.5",children:e.map((e,s)=>{if(s===g||s===f||s===v)return null;let n=t[s];return n?(0,r.jsxs)("span",{className:"text-2xs px-1.5 py-0.5 rounded font-display",style:{background:"var(--muted)",color:"var(--muted-foreground)"},children:[e,": ",n]},s):null})})]},s)}),0===s.length&&(0,r.jsx)("div",{className:"flex items-center justify-center h-12",children:(0,r.jsx)("span",{className:"text-xs",style:{color:"var(--muted-foreground)",opacity:.4},children:"Drop here"})})]})]})}return(0,r.jsxs)("div",{className:"flex gap-3 overflow-x-auto pb-3 items-start",children:[y.map(e=>(0,r.jsx)(k,{group:e},e)),(0,r.jsx)("div",{className:"flex-shrink-0 w-64",children:p?(0,r.jsxs)("div",{className:"rounded-xl border p-3 flex flex-col gap-2",style:{borderColor:"var(--border)",background:"var(--card)"},children:[(0,r.jsx)("input",{autoFocus:!0,value:c,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"===e.key&&c.trim()&&(m(""),h(!1)),"Escape"===e.key&&(m(""),h(!1))},placeholder:"Column name…",className:"text-xs bg-transparent outline-none w-full font-display",style:{color:"var(--foreground)",borderBottom:"1px solid var(--amber)"}}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{onClick:()=>{m(""),h(!1)},className:"text-xs px-2 py-1 rounded font-display",style:{background:"var(--amber)",color:"var(--amber-foreground)"},children:"Create"}),(0,r.jsx)("button",{onClick:()=>{m(""),h(!1)},className:"text-xs px-2 py-1 rounded font-display",style:{color:"var(--muted-foreground)"},children:"Cancel"})]})]}):(0,r.jsxs)("button",{onClick:()=>h(!0),className:"flex items-center gap-1.5 text-xs px-3 py-2 rounded-xl border border-dashed w-full transition-colors hover:bg-muted font-display",style:{borderColor:"var(--border)",color:"var(--muted-foreground)"},children:[(0,r.jsx)(b.A,{size:12})," Add column"]})})]})}var w=s(33210),S=s(27996);function C({headers:e,cfg:t,view:s,onClose:n,onChange:a}){let o={color:"var(--muted-foreground)",fontSize:"0.72rem"};function l({label:t,value:s,onChange:n}){return(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"font-display",style:o,children:t}),(0,r.jsx)(S.A,{value:s,onChange:n,size:"sm",options:[{value:"",label:"— none —"},...e.map(e=>({value:e,label:e}))]})]})}return(0,r.jsxs)("div",{className:"absolute right-0 top-10 z-20 w-72 rounded-xl border shadow-xl p-4 flex flex-col gap-3",style:{background:"var(--card)",borderColor:"var(--border)"},children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("span",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:[s," settings"]}),(0,r.jsx)("button",{onClick:n,style:{color:"var(--muted-foreground)"},children:(0,r.jsx)(w.A,{size:13})})]}),"table"===s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"h-px",style:{background:"var(--border)"}}),(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:"Sort"}),(0,r.jsx)(l,{label:"Sort by",value:t.table.sortField,onChange:e=>a({...t,table:{...t.table,sortField:e}})}),(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("span",{style:o,children:"Direction"}),(0,r.jsx)("div",{className:"flex rounded overflow-hidden border",style:{borderColor:"var(--border)"},children:["asc","desc"].map(e=>(0,r.jsx)("button",{onClick:()=>a({...t,table:{...t.table,sortDir:e}}),className:"px-3 py-1 text-xs transition-colors font-display",style:{fontSize:"0.72rem",background:t.table.sortDir===e?"var(--amber)":"var(--background)",color:t.table.sortDir===e?"var(--amber-foreground)":"var(--muted-foreground)"},children:e},e))})]}),(0,r.jsx)("div",{className:"h-px",style:{background:"var(--border)"}}),(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:"Group"}),(0,r.jsx)(l,{label:"Group by",value:t.table.groupField,onChange:e=>a({...t,table:{...t.table,groupField:e}})}),(0,r.jsx)("div",{className:"h-px",style:{background:"var(--border)"}}),(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:"Columns"}),(0,r.jsx)("div",{className:"flex flex-col gap-1.5",children:e.map(e=>{let s=t.table.hiddenFields.includes(e);return(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{style:o,children:e}),(0,r.jsx)("button",{onClick:()=>{let r=s?t.table.hiddenFields.filter(t=>t!==e):[...t.table.hiddenFields,e];a({...t,table:{...t.table,hiddenFields:r}})},className:"text-xs px-2 py-0.5 rounded transition-colors font-display",style:{background:s?"var(--muted)":"var(--amber-dim)",color:s?"var(--muted-foreground)":"var(--amber)"},children:s?"Hidden":"Visible"})]},e)})})]}),"gallery"===s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l,{label:"Title",value:t.gallery.titleField,onChange:e=>a({...t,gallery:{...t.gallery,titleField:e}})}),(0,r.jsx)(l,{label:"Description",value:t.gallery.descField,onChange:e=>a({...t,gallery:{...t.gallery,descField:e}})}),(0,r.jsx)(l,{label:"Tag / Badge",value:t.gallery.tagField,onChange:e=>a({...t,gallery:{...t.gallery,tagField:e}})})]}),"board"===s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l,{label:"Group by",value:t.board.groupField,onChange:e=>a({...t,board:{...t.board,groupField:e}})}),(0,r.jsx)(l,{label:"Card title",value:t.board.titleField,onChange:e=>a({...t,board:{...t.board,titleField:e}})}),(0,r.jsx)(l,{label:"Card desc",value:t.board.descField,onChange:e=>a({...t,board:{...t.board,descField:e}})})]})]})}let A=[{id:"table",icon:(0,r.jsx)(a.A,{size:13}),label:"Table"},{id:"gallery",icon:(0,r.jsx)(o.A,{size:13}),label:"Gallery"},{id:"board",icon:(0,r.jsx)(l.A,{size:13}),label:"Board"}];function z({filePath:e,content:t,saveAction:s}){let{headers:a,rows:o}=(0,n.useMemo)(()=>{let e;return{headers:(e=c().parse(t,{skipEmptyLines:!0}).data)[0]??[],rows:e.slice(1)}},[t]),l=(0,n.useMemo)(()=>({activeView:"table",table:{sortField:"",sortDir:"asc",groupField:"",hiddenFields:[]},gallery:{titleField:a[0]??"",descField:a[1]??"",tagField:a[2]??""},board:{groupField:a[a.length-1]??"",titleField:a[0]??"",descField:a[1]??""}}),[a]),[d,u]=(0,p.Un)("csv",e,l),[m,x]=(0,n.useState)(!1),h=(0,n.useCallback)(e=>{u(e)},[u]),g=d.activeView;return(0,r.jsxs)("div",{className:"max-w-[1100px] mx-auto px-0 py-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-4 relative",children:[(0,r.jsx)("div",{className:"flex items-center gap-0.5 p-1 rounded-lg",style:{background:"var(--muted)"},children:A.map(e=>(0,r.jsxs)("button",{onClick:()=>h({...d,activeView:e.id}),className:"flex items-center gap-1.5 px-3 py-1.5 rounded text-xs font-medium transition-colors font-display",style:{background:g===e.id?"var(--card)":"transparent",color:g===e.id?"var(--foreground)":"var(--muted-foreground)",boxShadow:g===e.id?"0 1px 3px rgba(0,0,0,0.1)":"none"},children:[e.icon,e.label]},e.id))}),(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsxs)("span",{className:"text-xs font-display",style:{color:"var(--muted-foreground)",opacity:.5},children:[o.length," rows"]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("button",{onClick:()=>x(e=>!e),className:"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-xs transition-colors",style:{background:m?"var(--accent)":"var(--muted)",color:m?"var(--foreground)":"var(--muted-foreground)"},title:"View settings",children:(0,r.jsx)(i.A,{size:13})}),m&&(0,r.jsx)(C,{headers:a,cfg:d,view:g,onClose:()=>x(!1),onChange:h})]})]}),"table"===g&&(0,r.jsx)(y,{headers:a,rows:o,cfg:d.table,saveAction:s}),"gallery"===g&&(0,r.jsx)(N,{headers:a,rows:o,cfg:d.gallery}),"board"===g&&(0,r.jsx)(k,{headers:a,rows:o,cfg:d.board,saveAction:s})]})}},92524:(e,t,s)=>{"use strict";s.d(t,{default:()=>n});var r=s(12115);function n(){return(0,r.useEffect)(()=>{!("u">typeof navigator&&/electron/i.test(navigator.userAgent))&&"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(e=>{console.warn("[SW] Registration failed:",e)})},[]),null}},92950:(e,t,s)=>{"use strict";s.r(t),s.d(t,{GraphRenderer:()=>c});var r=s(95155),n=s(12115),a=s(73321),o=s(81750),l=s(61278);s(53255);var i=s(22356);let d=(0,n.memo)(function({data:e}){let t=(0,a.useRouter)(),{label:s,id:i,isCurrent:d,isOrphan:c,size:u=1}=e,m=(0,n.useCallback)(()=>{let e=i.split("/").map(encodeURIComponent).join("/");t.push("/view/"+e)},[i,t]),x=.8+Math.min(.1*u,1.2);return(0,r.jsxs)("div",{onClick:m,title:i,className:"group font-display",style:{fontSize:10*x,padding:`${4*x}px ${12*x}px`,borderRadius:999,cursor:"pointer",userSelect:"none",whiteSpace:"nowrap",maxWidth:240,overflow:"hidden",textOverflow:"ellipsis",opacity:c?.4:1,background:d?"var(--amber)":"var(--card)",color:d?"var(--amber-foreground)":"var(--foreground)",border:`1.5px solid ${d?"var(--amber)":"var(--border)"}`,boxShadow:d?"0 0 20px var(--amber-dim), 0 0 0 2px var(--amber-dim)":"0 2px 4px rgba(0,0,0,0.1)",transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",zIndex:d?10:1},onMouseEnter:e=>{d||(e.currentTarget.style.borderColor="var(--amber)",e.currentTarget.style.background="var(--accent)")},onMouseLeave:e=>{d||(e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--card)")},children:[(0,r.jsx)(o.h7,{type:"target",position:l.yX.Top,style:{opacity:0}}),s,(0,r.jsx)(o.h7,{type:"source",position:l.yX.Bottom,style:{opacity:0}})]})});function c({filePath:e}){let[t,s]=(0,n.useState)(null),[a,l]=(0,n.useState)(!0),[c,u]=(0,n.useState)("local"),[m,x]=(0,n.useState)(!1);(0,n.useEffect)(()=>{x(!0)},[]),(0,n.useEffect)(()=>{(0,i.n)("/api/graph").then(e=>{s(e),l(!1)}).catch(()=>l(!1))},[]);let p=(0,n.useMemo)(()=>{if(!t)return new Map;let e=new Map;for(let s of t.edges)e.set(s.source,(e.get(s.source)||0)+1),e.set(s.target,(e.get(s.target)||0)+1);return e},[t]),h=(0,n.useMemo)(()=>{if(!t)return null;let e=new Map;for(let s of t.edges)e.has(s.source)||e.set(s.source,new Set),e.has(s.target)||e.set(s.target,new Set),e.get(s.source).add(s.target),e.get(s.target).add(s.source);return e},[t]),{filteredNodes:g,filteredEdges:f}=(0,n.useMemo)(()=>{let s,r;if(!t)return{filteredNodes:[],filteredEdges:[]};if("global"===c)s=t.nodes,r=t.edges;else{let n=new Set,a=[{id:e,depth:0}];for(n.add(e);a.length>0;){let{id:e,depth:t}=a.shift();if(!(t>=2))for(let s of h?.get(e)??new Set)n.has(s)||(n.add(s),a.push({id:s,depth:t+1}))}let o=new Set((s=t.nodes.filter(e=>n.has(e.id))).map(e=>e.id));r=t.edges.filter(e=>o.has(e.source)&&o.has(e.target))}return{filteredNodes:s,filteredEdges:r}},[t,c,e,h]),b=(0,n.useMemo)(()=>{let e=new Set;for(let t of f)e.add(t.source),e.add(t.target);return e},[f]),{rfNodes:v,rfEdges:j}=(0,n.useMemo)(()=>{if(0===g.length)return{rfNodes:[],rfEdges:[]};let t=function(e,t,s){let r=e.length;if(0===r)return{};let n=(void 0)??(r>100?80:150),a=.6*Math.sqrt(108e4/Math.max(r,1)),o={};e.forEach((e,t)=>{let s=2*Math.PI*t/r,n=360*Math.random();o[e]={x:600+Math.cos(s)*n,y:450+Math.sin(s)*n}});let l={};for(let s=0;s<n;s++){let i=120*(1-s/n);for(let t of e)l[t]={x:0,y:0};for(let t=0;t<r;t++)for(let s=t+1;s<r;s++){let r=e[t],n=e[s],i=o[r].x-o[n].x,d=o[r].y-o[n].y,c=Math.sqrt(i*i+d*d||.01),u=a*a/c;l[r].x+=i/c*u,l[r].y+=d/c*u,l[n].x-=i/c*u,l[n].y-=d/c*u}for(let e of t){let t=e.source,s=e.target;if(!o[t]||!o[s])continue;let r=o[t].x-o[s].x,n=o[t].y-o[s].y,i=Math.sqrt(r*r+n*n||.01),d=i*i/a;l[t].x-=r/i*d,l[t].y-=n/i*d,l[s].x+=r/i*d,l[s].y+=n/i*d}for(let t of e){let e=o[t].x-600,s=o[t].y-450,r=Math.sqrt(e*e+s*s)||.01,n=.05*r;l[t].x-=e/r*n,l[t].y-=s/r*n}for(let t of e){let e=l[t],s=Math.sqrt(e.x*e.x+e.y*e.y)||.01;o[t].x+=e.x/s*Math.min(s,i),o[t].y+=e.y/s*Math.min(s,i),o[t].x=Math.max(0,Math.min(1200,o[t].x)),o[t].y=Math.max(0,Math.min(900,o[t].y))}}return o}(g.map(e=>e.id),f);return{rfNodes:g.map(s=>({id:s.id,type:"wiki",position:t[s.id]??{x:0,y:0},data:{label:s.label,id:s.id,isCurrent:s.id===e,isOrphan:!b.has(s.id),size:p.get(s.id)||1}})),rfEdges:f.map((t,s)=>{let r=t.source===e||t.target===e;return{id:`e-${s}`,source:t.source,target:t.target,type:"default",markerEnd:{type:"arrowclosed",color:r?"var(--amber)":"var(--border)"},style:{stroke:r?"var(--amber)":"var(--border)",strokeWidth:r?1.5:1,opacity:r?.8:.4},animated:r}})}},[g,f,e,b,p]),y=(0,n.useMemo)(()=>({wiki:d}),[]);return!m||a?(0,r.jsx)("div",{style:{width:"100%",height:"calc(100vh - 160px)",minHeight:400,borderRadius:12,background:"var(--muted)",border:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,r.jsx)("span",{className:"font-display",style:{color:"var(--muted-foreground)",fontSize:12},children:a?"Building graph…":"Loading…"})}):(0,r.jsxs)("div",{style:{width:"100%",position:"relative",zIndex:0},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:10,flexWrap:"wrap"},children:[(0,r.jsxs)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:[g.length," nodes \xb7 ",f.length," edges"]}),(0,r.jsx)("div",{style:{display:"flex",gap:2,padding:3,borderRadius:8,background:"var(--muted)"},children:[{id:"local",label:"Local"},{id:"global",label:"Global"}].map(e=>(0,r.jsx)("button",{onClick:()=>u(e.id),className:"font-display",style:{padding:"3px 12px",borderRadius:5,fontSize:11,cursor:"pointer",border:"none",outline:"none",background:c===e.id?"var(--card)":"transparent",color:c===e.id?"var(--foreground)":"var(--muted-foreground)",boxShadow:c===e.id?"0 1px 3px rgba(0,0,0,0.1)":"none",transition:"all 0.1s"},children:e.label},e.id))})]}),(0,r.jsx)("div",{style:{width:"100%",height:"calc(100vh - 160px)",minHeight:400},children:(0,r.jsxs)(o.Gc,{nodes:v,edges:j,nodeTypes:y,fitView:!0,fitViewOptions:{padding:.15},proOptions:{hideAttribution:!0},style:{background:"var(--background)",borderRadius:12,border:"1px solid var(--border)"},children:[(0,r.jsx)(o.VS,{color:"var(--border)",gap:24,size:1,variant:o._5.Dots}),(0,r.jsx)(o.H2,{showInteractive:!1}),(0,r.jsx)(o.of,{nodeColor:e=>e.data?.isCurrent?"var(--amber)":"var(--muted-foreground)"})]})})]})}},97089:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,66872,23)),Promise.resolve().then(s.bind(s,92524)),Promise.resolve().then(s.bind(s,86343)),Promise.resolve().then(s.bind(s,18847)),Promise.resolve().then(s.bind(s,88946)),Promise.resolve().then(s.bind(s,35504)),Promise.resolve().then(s.bind(s,92306)),Promise.resolve().then(s.bind(s,92950)),Promise.resolve().then(s.bind(s,56406)),Promise.resolve().then(s.bind(s,39594)),Promise.resolve().then(s.bind(s,87500)),Promise.resolve().then(s.bind(s,48133)),Promise.resolve().then(s.bind(s,30864)),Promise.resolve().then(s.bind(s,26490)),Promise.resolve().then(s.bind(s,91459)),Promise.resolve().then(s.bind(s,40430)),Promise.resolve().then(s.bind(s,61263)),Promise.resolve().then(s.t.bind(s,13524,23)),Promise.resolve().then(s.t.bind(s,89846,23)),Promise.resolve().then(s.t.bind(s,377,23)),Promise.resolve().then(s.t.bind(s,83284,23)),Promise.resolve().then(s.t.bind(s,75282,23))}},e=>{e.O(0,[7513,1151,3862,9602,8409,9286,1038,275,5681,1263,9670,8441,3794,7358],()=>e(e.s=97089)),_N_E=e.O()}]);
|
|
173
|
+
`})]})})})}function rU({fileTree:e,children:t}){return"/login"===(0,n.usePathname)()?(0,r.jsx)(r.Fragment,{children:t}):(0,r.jsx)(rW,{fileTree:e,children:t})}},76449:(e,t,s)=>{"use strict";s.d(t,{g:()=>r});let r=[{anchor:"files-panel",position:"right"},{anchor:"ask-button",position:"right"},{anchor:"agents-panel",position:"right"},{anchor:"echo-panel",position:"right"}]},77148:(e,t,s)=>{"use strict";s.d(t,{Un:()=>a});var r=s(12115);let n="mindos-renderer-state-change";function a(e,t,s){let a=`mindos-renderer:${e}:${t}`,o=(0,r.useRef)({key:a,raw:null,parsed:s});return o.current.key!==a&&(o.current={key:a,raw:null,parsed:s}),[(0,r.useSyncExternalStore)(e=>{let t=()=>e();return window.addEventListener("storage",t),window.addEventListener(n,t),()=>{window.removeEventListener("storage",t),window.removeEventListener(n,t)}},()=>{try{let e=localStorage.getItem(a);if(e===o.current.raw)return o.current.parsed;if(null===e)return o.current={key:a,raw:null,parsed:s},s;let t=JSON.parse(e);return o.current={key:a,raw:e,parsed:t},t}catch{return s}},()=>s),(0,r.useCallback)(e=>{try{let t=(()=>{try{let e=localStorage.getItem(a);return null!==e?JSON.parse(e):s}catch{return s}})(),r="function"==typeof e?e(t):e,n=JSON.stringify(r);localStorage.setItem(a,n),o.current={key:a,raw:n,parsed:r}}catch{}window.dispatchEvent(new Event(n))},[a,s])]}},86343:(e,t,s)=>{"use strict";s.d(t,{default:()=>a});var r=s(95155),n=s(12115);class a extends n.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error("[ErrorBoundary]",e,t.componentStack)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,r.jsx)("div",{className:"flex items-center justify-center min-h-[50vh] px-4",children:(0,r.jsxs)("div",{className:"text-center max-w-md",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-foreground mb-2",children:"Something went wrong"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:this.state.error?.message||"An unexpected error occurred."}),(0,r.jsx)("button",{onClick:()=>this.setState({hasError:!1,error:void 0}),className:"px-4 py-2 text-sm rounded-lg border border-border hover:bg-muted transition-colors",children:"Try again"})]})}):this.props.children}}},87500:(e,t,s)=>{"use strict";s.r(t),s.d(t,{TodoRenderer:()=>y});var r=s(95155),n=s(12115),a=s(51914),o=s(36201),l=s(66088),i=s(21362),d=s(58515),c=s(68459);let u=/^#{1,6}\s+(.+)/,m=/^(\s*)- \[([ xX])\]\s+(.*)$/;function x(e,t){let s=[...e];return t(s),s.join("\n")}let p={TODAY:{dot:"bg-red-400",label:"text-red-400"},Workflows:{dot:"bg-amber-400",label:"text-amber-400"},Backlog:{dot:"bg-blue-400",label:"text-blue-400"},Maintenance:{dot:"bg-zinc-400",label:"text-zinc-400"}};function h(e){return e.reduce((e,t)=>e+ +!!t.checked+h(t.children),0)}function g(e){return e.reduce((e,t)=>e+1+g(t.children),0)}function f({text:e,checked:t,onRename:s}){let[a,o]=(0,n.useState)(!1),[l,i]=(0,n.useState)(e),d=(0,n.useRef)(null);function c(){let t=l.trim();t&&t!==e?s(t):i(e),o(!1)}return((0,n.useEffect)(()=>{i(e)},[e]),(0,n.useEffect)(()=>{a&&d.current?.select()},[a]),a)?(0,r.jsx)("input",{ref:d,value:l,onChange:e=>i(e.target.value),onBlur:c,onKeyDown:t=>{"Enter"===t.key&&c(),"Escape"===t.key&&(i(e),o(!1))},className:"flex-1 bg-transparent border-b text-sm leading-relaxed outline-none min-w-0",style:{borderColor:"var(--amber)",color:"var(--foreground)"},onClick:e=>e.stopPropagation()}):(0,r.jsx)("span",{className:`flex-1 text-sm leading-relaxed cursor-text min-w-0 ${t?"line-through text-muted-foreground":"text-foreground"}`,onDoubleClick:()=>o(!0),title:"Double-click to edit",children:e})}function b({onAdd:e}){let[t,s]=(0,n.useState)(!1),[l,i]=(0,n.useState)(""),d=(0,n.useRef)(null);function c(){let t=l.trim();t&&e(t),i(""),s(!1)}return((0,n.useEffect)(()=>{t&&d.current?.focus()},[t]),t)?(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 mt-1",children:[(0,r.jsx)("span",{className:"w-[13px] shrink-0"}),(0,r.jsx)("span",{className:"shrink-0",style:{color:"var(--muted-foreground)"},children:(0,r.jsx)(o.A,{size:15})}),(0,r.jsx)("input",{ref:d,value:l,onChange:e=>i(e.target.value),onBlur:c,onKeyDown:e=>{"Enter"===e.key&&c(),"Escape"===e.key&&(i(""),s(!1))},placeholder:"New item…",className:"flex-1 bg-transparent border-b text-sm outline-none",style:{borderColor:"var(--amber)",color:"var(--foreground)"}})]}):(0,r.jsxs)("button",{onClick:()=>s(!0),className:"flex items-center gap-1.5 w-full px-3 py-1.5 rounded-lg text-xs transition-colors hover:bg-muted/60 mt-1",style:{color:"var(--muted-foreground)"},children:[(0,r.jsx)(a.A,{size:12}),(0,r.jsx)("span",{children:"Add item"})]})}function v({item:e,depth:t,onToggle:s,onRename:a,onDelete:u}){let[m,x]=(0,n.useState)(!0),p=e.children.length>0;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:`group flex items-center gap-2 py-1.5 px-2 rounded-lg transition-colors hover:bg-muted/60 ${e.checked?"opacity-50":""}`,style:{paddingLeft:`${8+20*t}px`},children:[p?(0,r.jsx)("button",{onClick:()=>x(e=>!e),className:"shrink-0 text-muted-foreground hover:text-foreground transition-colors",children:m?(0,r.jsx)(l.A,{size:13}):(0,r.jsx)(i.A,{size:13})}):(0,r.jsx)("span",{className:"w-[13px] shrink-0"}),(0,r.jsx)("button",{onClick:()=>s(e.lineIndex,!e.checked),className:"shrink-0 transition-colors",style:{color:e.checked?"var(--amber)":"var(--muted-foreground)"},children:e.checked?(0,r.jsx)(d.A,{size:15}):(0,r.jsx)(o.A,{size:15})}),(0,r.jsx)(f,{text:e.text,checked:e.checked,onRename:t=>a(e.lineIndex,t)}),(0,r.jsx)("button",{onClick:()=>u(e.lineIndex),className:"shrink-0 opacity-0 group-hover:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/10",style:{color:"var(--muted-foreground)"},title:"Delete item",children:(0,r.jsx)(c.A,{size:12})})]}),p&&m&&(0,r.jsx)("div",{children:e.children.map(e=>(0,r.jsx)(v,{item:e,depth:t+1,onToggle:s,onRename:a,onDelete:u},e.id))})]})}function j({name:e,meta:t,onToggle:s,onRename:a,onDelete:o,onAdd:d}){let c,[u,m]=(0,n.useState)(!1),x=(c=Object.keys(p).find(t=>e.includes(t)))?p[c]:{dot:"bg-zinc-500",label:"text-zinc-400"},{items:f,lastLineIndex:j}=t,y=h(f),N=g(f);return(0,r.jsxs)("div",{className:"border border-border rounded-xl overflow-hidden bg-card",children:[(0,r.jsxs)("button",{onClick:()=>m(e=>!e),className:"w-full flex items-center justify-between px-4 py-3 hover:bg-muted/40 transition-colors",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:`w-2 h-2 rounded-full shrink-0 ${x.dot}`}),(0,r.jsx)("span",{className:`text-xs font-semibold uppercase tracking-wider ${x.label} font-display`,children:e}),(0,r.jsxs)("span",{className:"text-xs text-muted-foreground",children:[y,"/",N]})]}),u?(0,r.jsx)(i.A,{size:14,className:"text-muted-foreground"}):(0,r.jsx)(l.A,{size:14,className:"text-muted-foreground"})]}),(0,r.jsx)("div",{className:"h-0.5 bg-muted mx-4",children:(0,r.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:N?`${y/N*100}%`:"0%",background:"var(--amber)"}})}),!u&&(0,r.jsxs)("div",{className:"px-2 py-2",children:[f.map(e=>(0,r.jsx)(v,{item:e,depth:0,onToggle:s,onRename:a,onDelete:o},e.id)),0===f.length&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground px-4 py-2",children:"No items"}),(0,r.jsx)(b,{onAdd:e=>d(j,e)})]})]})}function y({content:e,saveAction:t}){let[s,a]=(0,n.useState)(e),{sections:o,lines:l}=(0,n.useMemo)(()=>{let e,t,r,n;return e=s.split("\n"),t="General",r={},n=[],e.forEach((e,s)=>{let a=e.match(u);if(a){t=a[1].replace(/^[^\w\s]+\s*/,"").trim();return}let o=e.match(m);if(!o)return;let[,l,i,d]=o,c=Math.floor(l.length/2),x="x"===i.toLowerCase(),p={id:`${s}`,text:d.replace(/\*\*(.*?)\*\*/g,"$1").trim(),checked:x,indent:c,lineIndex:s,section:t,children:[]};for(;n.length>0&&n[n.length-1].indent>=c;)n.pop();r[t]||(r[t]={items:[],lastLineIndex:-1}),n.length>0?n[n.length-1].children.push(p):r[t].items.push(p),r[t].lastLineIndex=Math.max(r[t].lastLineIndex,s),n.push(p)}),{sections:r,lines:e}},[s]),i=(0,n.useMemo)(()=>Object.values(o).reduce((e,t)=>e+h(t.items),0),[o]),d=(0,n.useMemo)(()=>Object.values(o).reduce((e,t)=>e+g(t.items),0),[o]),c=(0,n.useCallback)(async e=>{a(e),await t(e)},[t]),p=(0,n.useCallback)(async(e,t)=>{await c(x(l,s=>{s[e]=t?s[e].replace(/- \[ \]/,"- [x]"):s[e].replace(/- \[[xX]\]/,"- [ ]")}))},[l,c]),f=(0,n.useCallback)(async(e,t)=>{await c(x(l,s=>{s[e]=s[e].replace(/(- \[[ xX]\]\s*)(.*)$/,`$1${t}`)}))},[l,c]),b=(0,n.useCallback)(async e=>{await c(x(l,t=>{t.splice(e,1)}))},[l,c]),v=(0,n.useCallback)(async(e,t)=>{await c(x(l,s=>{let r=e<0?s.length:e+1;s.splice(r,0,`- [ ] ${t}`)}))},[l,c]),y=Object.entries(o);return(0,r.jsxs)("div",{className:"max-w-[900px] mx-auto xl:mr-[220px] px-0 py-2",children:[(0,r.jsxs)("div",{className:"mb-6",children:[(0,r.jsxs)("p",{className:"text-xs text-muted-foreground font-display",children:[i," / ",d," completed"]}),(0,r.jsx)("div",{className:"mt-1.5 w-48 h-1.5 bg-muted rounded-full overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full transition-all duration-500",style:{width:d?`${i/d*100}%`:"0%",background:"var(--amber)"}})})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[y.map(([e,t])=>(0,r.jsx)(j,{name:e,meta:t,onToggle:p,onRename:f,onDelete:b,onAdd:v},e)),0===y.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No TODO items found in this file."})]})]})}},88946:(e,t,s)=>{"use strict";s.r(t),s.d(t,{BacklinksRenderer:()=>m});var r=s(95155),n=s(12115),a=s(73321),o=s(48368),l=s(22164),i=s(91337),d=s(22356);function c(e){return e.split("/").pop()?.replace(/\.md$/,"")??e}function u({text:e}){let t=e.split(/(\[\[[^\]]+\]\]|\[[^\]]+\]\([^)]+\))/g);return(0,r.jsx)("span",{children:t.map((e,t)=>/^\[\[/.test(e)||/^\[/.test(e)?(0,r.jsx)("span",{style:{color:"var(--amber)",fontWeight:500},children:e},t):(0,r.jsx)("span",{children:e},t))})}function m({filePath:e}){let t=(0,a.useRouter)(),[s,m]=(0,n.useState)(null),[x,p]=(0,n.useState)(!0);if((0,n.useEffect)(()=>{p(!0),(0,d.n)(`/api/backlinks?path=${encodeURIComponent(e)}`).then(e=>{m(e),p(!1)}).catch(()=>p(!1))},[e]),x)return(0,r.jsx)("div",{className:"font-display",style:{padding:"3rem 1rem",textAlign:"center",fontSize:12,color:"var(--muted-foreground)"},children:"Scanning backlinks…"});let h=s??[];return(0,r.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"1.5rem 0"},children:[(0,r.jsx)("div",{style:{marginBottom:"1.5rem",display:"flex",alignItems:"center",gap:8},children:(0,r.jsx)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:0===h.length?"No backlinks found":`${h.length} file${1===h.length?"":"s"} link here`})}),0===h.length?(0,r.jsxs)("div",{style:{border:"1px dashed var(--border)",borderRadius:10,padding:"2.5rem 1.5rem",textAlign:"center",color:"var(--muted-foreground)",fontSize:13},children:[(0,r.jsx)(o.A,{size:28,style:{margin:"0 auto 10px",opacity:.3}}),(0,r.jsxs)("p",{className:"font-display",style:{fontSize:12},children:["No other files link to ",(0,r.jsx)("strong",{style:{color:"var(--foreground)"},children:c(e)})," yet."]})]}):(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:h.map(({filePath:e,snippets:s})=>{let n,a=c(e),d=(n=e.split("/")).length>1?n.slice(0,-1).join("/"):"";return(0,r.jsxs)("div",{style:{background:"var(--card)",border:"1px solid var(--border)",borderRadius:10,overflow:"hidden",cursor:"pointer",transition:"border-color .15s"},onClick:()=>t.push("/view/"+(0,i.O0)(e)),onMouseEnter:e=>e.currentTarget.style.borderColor="rgba(200,135,58,0.4)",onMouseLeave:e=>e.currentTarget.style.borderColor="var(--border)",children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 14px",borderBottom:s.length>0?"1px solid var(--border)":"none",background:"var(--muted)"},children:[(0,r.jsx)(o.A,{size:13,style:{color:"var(--muted-foreground)",flexShrink:0}}),(0,r.jsx)("span",{style:{fontWeight:600,fontSize:"0.85rem",color:"var(--foreground)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a}),d&&(0,r.jsx)("span",{className:"font-display",style:{fontSize:"0.68rem",color:"var(--muted-foreground)",opacity:.6,flexShrink:0},children:d}),(0,r.jsx)(l.A,{size:11,style:{color:"var(--muted-foreground)",opacity:.5,flexShrink:0}})]}),s.map((e,t)=>(0,r.jsx)("div",{style:{padding:"8px 14px",borderBottom:t<s.length-1?"1px solid var(--border)":"none",background:"var(--background)"},children:e.split("\n").map((e,t)=>(0,r.jsx)("div",{className:"font-display",style:{fontSize:"0.72rem",color:"var(--muted-foreground)",lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:(0,r.jsx)(u,{text:e})},t))},t))]},e)})})]})}},91337:(e,t,s)=>{"use strict";s.d(t,{IX:()=>i,KW:()=>l,O0:()=>o,cn:()=>a,vr:()=>d});var r=s(29722),n=s(622);function a(...e){return(0,n.QP)((0,r.$)(e))}function o(e){return e.split("/").map(encodeURIComponent).join("/")}function l(e,t){let s=Date.now()-e,r=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return r<1?t.justNow:r<60?t.minutesAgo(r):n<24?t.hoursAgo(n):a<7?t.daysAgo(a):new Date(e).toLocaleDateString()}function i(e){let t=e.match(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}]+/u);return t?.[0]??""}function d(e){return e.replace(/^[\p{Emoji_Presentation}\p{Extended_Pictographic}\s]+/u,"")||e}},91459:(e,t,s)=>{"use strict";s.d(t,{TooltipProvider:()=>a});var r=s(95155),n=s(32727);function a({delay:e=0,...t}){return(0,r.jsx)(n.B,{"data-slot":"tooltip-provider",delay:e,...t})}},92306:(e,t,s)=>{"use strict";s.r(t),s.d(t,{CsvRenderer:()=>z});var r=s(95155),n=s(12115),a=s(18837),o=s(37595),l=s(8434),i=s(1164),d=s(59386),c=s.n(d);function u(e,t){return c().unparse([e,...t])}let m=[{bg:"rgba(200,135,58,0.12)",text:"var(--amber)"},{bg:"rgba(122,173,128,0.12)",text:"var(--success)"},{bg:"rgba(138,180,216,0.12)",text:"#8ab4d8"},{bg:"rgba(200,160,216,0.12)",text:"#c8a0d8"},{bg:"rgba(200,96,96,0.12)",text:"#c86060"},{bg:"rgba(150,150,150,0.12)",text:"var(--muted-foreground)"}];function x(e){let t=0;for(let s=0;s<e.length;s++)t=31*t+e.charCodeAt(s)&65535;return m[t%m.length]}var p=s(77148),h=s(9921),g=s(66088),f=s(68459),b=s(51914);function v({value:e,onCommit:t}){let[s,a]=(0,n.useState)(!1),[o,l]=(0,n.useState)(e),i=(0,n.useRef)(null);function d(){a(!1),o!==e?t(o):l(e)}return((0,n.useEffect)(()=>{l(e)},[e]),(0,n.useEffect)(()=>{s&&i.current?.select()},[s]),s)?(0,r.jsx)("input",{ref:i,value:o,onChange:e=>l(e.target.value),onBlur:d,onKeyDown:t=>{"Enter"===t.key&&d(),"Escape"===t.key&&(l(e),a(!1))},className:"w-full bg-transparent outline-none text-sm",onClick:e=>e.stopPropagation(),style:{color:"var(--foreground)",borderBottom:"1px solid var(--amber)",minWidth:60}}):(0,r.jsx)("div",{className:"truncate text-sm cursor-text",style:{color:"var(--foreground)",minWidth:60},onClick:()=>a(!0),title:e,children:e||(0,r.jsx)("span",{style:{color:"var(--muted-foreground)",opacity:.3},children:"—"})})}function j({headers:e,visibleIndices:t,onAdd:s,onCancel:a}){let[o,l]=(0,n.useState)(()=>Array(e.length).fill(""));return(0,r.jsxs)("tr",{style:{background:"color-mix(in srgb, var(--amber) 6%, transparent)",borderTop:"1px solid var(--amber)"},children:[t.map((t,n)=>(0,r.jsx)("td",{className:"px-3 py-2",style:{borderBottom:"1px solid var(--border)"},children:(0,r.jsx)("input",{autoFocus:0===n,value:o[t],onChange:e=>{var s;return s=e.target.value,void l(e=>{let r=[...e];return r[t]=s,r})},onKeyDown:e=>{"Enter"===e.key&&s(o),"Escape"===e.key&&a()},placeholder:e[t],className:"w-full bg-transparent outline-none text-sm placeholder:opacity-30",style:{color:"var(--foreground)",borderBottom:"1px solid var(--border)"}})},t)),(0,r.jsx)("td",{className:"px-2 py-2",style:{borderBottom:"1px solid var(--border)"}})]})}function y({headers:e,rows:t,cfg:s,saveAction:a}){let[o,l]=(0,n.useState)(t),[i,d]=(0,n.useState)(!1);(0,n.useEffect)(()=>{l(t)},[t]);let c=(0,n.useMemo)(()=>e.map((e,t)=>t).filter(t=>!s.hiddenFields.includes(e[t])),[e,s.hiddenFields]),m=e.indexOf(s.sortField),x=(0,n.useMemo)(()=>{let e=[...o];return m>=0&&e.sort((e,t)=>{let r=e[m]??"",n=t[m]??"",a=parseFloat(r),o=parseFloat(n),l=isNaN(a)||isNaN(o)?r.localeCompare(n):a-o;return"asc"===s.sortDir?l:-l}),e},[o,m,s.sortDir]),p=e.indexOf(s.groupField),y=(0,n.useMemo)(()=>{if(p<0)return[{key:null,rows:x.map(e=>({row:e,orig:e}))}];let e=new Map;for(let t of x){let s=t[p]||"(empty)";e.has(s)||e.set(s,[]),e.get(s).push(t)}return[...e.entries()].map(([e,t])=>({key:e,rows:t.map(e=>({row:e,orig:e}))}))},[x,p]);async function N(t,s,r){let n=o.map(e=>e===t?e.map((e,t)=>t===s?r:e):e);l(n),await a(u(e,n))}async function k(t){let s=o.filter(e=>e!==t);l(s),await a(u(e,s))}async function w(t){let s=[...o,t];l(s),d(!1),await a(u(e,s))}let S={borderBottom:"1px solid var(--border)",fontSize:"0.72rem",letterSpacing:"0.05em",textTransform:"uppercase",color:"var(--muted-foreground)",fontWeight:600},C=0;return(0,r.jsxs)("div",{className:"rounded-xl overflow-hidden border",style:{borderColor:"var(--border)"},children:[(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"min-w-full text-sm border-collapse",children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{style:{background:"var(--muted)"},children:[c.map(t=>(0,r.jsx)("th",{className:"px-4 py-2.5 text-left whitespace-nowrap",style:S,children:(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[e[t],s.sortField===e[t]&&("asc"===s.sortDir?(0,r.jsx)(h.A,{size:10,style:{color:"var(--amber)"}}):(0,r.jsx)(g.A,{size:10,style:{color:"var(--amber)"}}))]})},t)),(0,r.jsx)("th",{className:"w-8",style:{...S,background:"var(--muted)"}})]})}),(0,r.jsxs)("tbody",{children:[y.map((e,t)=>(0,r.jsxs)(n.Fragment,{children:[null!==e.key&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:c.length+1,className:"px-4 py-1.5",style:{background:"var(--accent)",borderBottom:"1px solid var(--border)",borderTop:"1px solid var(--border)"},children:(0,r.jsxs)("span",{className:"text-xs font-semibold font-display",style:{color:"var(--muted-foreground)"},children:[e.key," \xb7 ",e.rows.length]})})},`grp-${e.key}`),e.rows.map(({row:e,orig:t})=>{let s=C++;return(0,r.jsxs)("tr",{className:"group transition-colors",style:{background:s%2==0?"var(--background)":"var(--card)"},onMouseEnter:e=>e.currentTarget.style.background="var(--muted)",onMouseLeave:e=>e.currentTarget.style.background=s%2==0?"var(--background)":"var(--card)",children:[c.map(s=>(0,r.jsx)("td",{className:"px-4 py-2 max-w-xs",style:{borderBottom:"1px solid var(--border)"},children:(0,r.jsx)(v,{value:e[s]??"",onCommit:e=>N(t,s,e)})},s)),(0,r.jsx)("td",{className:"px-2 py-2",style:{borderBottom:"1px solid var(--border)"},children:(0,r.jsx)("button",{onClick:()=>k(t),className:"opacity-0 group-hover:opacity-100 transition-opacity p-1 rounded hover:bg-destructive/10",style:{color:"var(--muted-foreground)"},children:(0,r.jsx)(f.A,{size:12})})})]},s)})]},e.key??`section-${t}`)),i&&(0,r.jsx)(j,{headers:e,visibleIndices:c,onAdd:w,onCancel:()=>d(!1)})]})]})}),(0,r.jsxs)("div",{className:"px-4 py-2 flex items-center justify-between",style:{background:"var(--muted)",borderTop:"1px solid var(--border)"},children:[(0,r.jsxs)("span",{className:"text-xs font-display",style:{color:"var(--muted-foreground)"},children:[o.length," rows \xb7 ",e.length," cols"]}),i?(0,r.jsx)("button",{onClick:()=>d(!1),className:"text-xs px-2.5 py-1 rounded-md",style:{color:"var(--muted-foreground)"},children:"Cancel"}):(0,r.jsxs)("button",{onClick:()=>d(!0),className:"flex items-center gap-1 text-xs px-2.5 py-1 rounded-md",style:{color:"var(--amber)",background:"var(--amber-dim)"},children:[(0,r.jsx)(b.A,{size:12})," Add row"]})]})]})}function N({headers:e,rows:t,cfg:s}){let n=e.indexOf(s.titleField),a=e.indexOf(s.descField),o=e.indexOf(s.tagField);return(0,r.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:t.map((t,s)=>{let l=n>=0?t[n]:t[0]??"",i=a>=0?t[a]:"",d=o>=0?t[o]:"",c=d?x(d):null;return(0,r.jsxs)("div",{className:"rounded-xl border p-4 flex flex-col gap-2 hover:bg-muted/50 transition-colors",style:{borderColor:"var(--border)",background:"var(--card)"},children:[d&&c&&(0,r.jsx)("span",{className:"self-start text-xs px-2 py-0.5 rounded-full font-medium",style:{background:c.bg,color:c.text},children:d}),(0,r.jsx)("p",{className:"text-sm font-semibold leading-snug",style:{color:"var(--foreground)"},children:l}),i&&(0,r.jsx)("p",{className:"text-xs leading-relaxed line-clamp-3",style:{color:"var(--muted-foreground)"},children:i}),(0,r.jsx)("div",{className:"mt-1 flex flex-col gap-0.5",children:e.map((e,s)=>{if(s===n||s===a||s===o)return null;let l=t[s];return l?(0,r.jsxs)("div",{className:"flex items-baseline gap-1.5 text-xs",children:[(0,r.jsx)("span",{className:"font-display",style:{color:"var(--muted-foreground)",opacity:.6,fontSize:"0.68rem"},children:e}),(0,r.jsx)("span",{className:"truncate",style:{color:"var(--muted-foreground)"},children:l})]},s):null})})]},s)})})}function k({headers:e,rows:t,cfg:s,saveAction:a}){let[o,l]=(0,n.useState)(t),[i,d]=(0,n.useState)(null),[c,m]=(0,n.useState)(""),[p,h]=(0,n.useState)(!1);(0,n.useEffect)(()=>{l(t)},[t]);let g=e.indexOf(s.groupField),f=e.indexOf(s.titleField),v=e.indexOf(s.descField),{groups:j,groupKeys:y}=(0,n.useMemo)(()=>{let e=new Map;return o.forEach((t,s)=>{let r=(g>=0?t[g]:"")||"(empty)";e.has(r)||e.set(r,[]),e.get(r).push({row:t,origIdx:s})}),{groups:e,groupKeys:[...e.keys()]}},[o,g]);async function N(t,s){let r=o.map((e,r)=>{if(r!==t)return e;let n=[...e];return g>=0&&(n[g]=s),n});l(r),await a(u(e,r))}function k({group:t}){let s=j.get(t)??[],n=x(t),a=i===t;return(0,r.jsxs)("div",{className:"flex-shrink-0 w-64 flex flex-col gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-1 py-1.5",children:[(0,r.jsx)("span",{className:"w-2.5 h-2.5 rounded-full shrink-0",style:{background:n.text}}),(0,r.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider truncate font-display",style:{color:n.text},children:t}),(0,r.jsx)("span",{className:"text-xs ml-auto shrink-0",style:{color:"var(--muted-foreground)",opacity:.5},children:s.length})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-2 rounded-xl p-1.5 min-h-[80px] transition-colors",style:{background:a?"var(--amber-dim)":"var(--muted)",border:`1px solid ${a?"var(--amber)":"transparent"}`},onDragOver:e=>{e.preventDefault(),d(t)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||d(null)},onDrop:e=>{d(null);let s=parseInt(e.dataTransfer.getData("origIdx"));isNaN(s)||N(s,t)},children:[s.map(({row:t,origIdx:s})=>{let n=f>=0?t[f]:t[0]??"",a=v>=0?t[v]:"";return(0,r.jsxs)("div",{draggable:!0,onDragStart:e=>{e.dataTransfer.setData("origIdx",String(s)),d(null)},onDragEnd:()=>d(null),className:"rounded-lg border p-3 flex flex-col gap-1.5 cursor-grab active:cursor-grabbing hover:bg-muted/50 transition-colors",style:{borderColor:"var(--border)",background:"var(--card)"},children:[(0,r.jsx)("p",{className:"text-sm font-medium leading-snug",style:{color:"var(--foreground)"},children:n}),a&&(0,r.jsx)("p",{className:"text-xs leading-relaxed line-clamp-2",style:{color:"var(--muted-foreground)"},children:a}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1 mt-0.5",children:e.map((e,s)=>{if(s===g||s===f||s===v)return null;let n=t[s];return n?(0,r.jsxs)("span",{className:"text-2xs px-1.5 py-0.5 rounded font-display",style:{background:"var(--muted)",color:"var(--muted-foreground)"},children:[e,": ",n]},s):null})})]},s)}),0===s.length&&(0,r.jsx)("div",{className:"flex items-center justify-center h-12",children:(0,r.jsx)("span",{className:"text-xs",style:{color:"var(--muted-foreground)",opacity:.4},children:"Drop here"})})]})]})}return(0,r.jsxs)("div",{className:"flex gap-3 overflow-x-auto pb-3 items-start",children:[y.map(e=>(0,r.jsx)(k,{group:e},e)),(0,r.jsx)("div",{className:"flex-shrink-0 w-64",children:p?(0,r.jsxs)("div",{className:"rounded-xl border p-3 flex flex-col gap-2",style:{borderColor:"var(--border)",background:"var(--card)"},children:[(0,r.jsx)("input",{autoFocus:!0,value:c,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"===e.key&&c.trim()&&(m(""),h(!1)),"Escape"===e.key&&(m(""),h(!1))},placeholder:"Column name…",className:"text-xs bg-transparent outline-none w-full font-display",style:{color:"var(--foreground)",borderBottom:"1px solid var(--amber)"}}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{onClick:()=>{m(""),h(!1)},className:"text-xs px-2 py-1 rounded font-display",style:{background:"var(--amber)",color:"var(--amber-foreground)"},children:"Create"}),(0,r.jsx)("button",{onClick:()=>{m(""),h(!1)},className:"text-xs px-2 py-1 rounded font-display",style:{color:"var(--muted-foreground)"},children:"Cancel"})]})]}):(0,r.jsxs)("button",{onClick:()=>h(!0),className:"flex items-center gap-1.5 text-xs px-3 py-2 rounded-xl border border-dashed w-full transition-colors hover:bg-muted font-display",style:{borderColor:"var(--border)",color:"var(--muted-foreground)"},children:[(0,r.jsx)(b.A,{size:12})," Add column"]})})]})}var w=s(33210),S=s(27996);function C({headers:e,cfg:t,view:s,onClose:n,onChange:a}){let o={color:"var(--muted-foreground)",fontSize:"0.72rem"};function l({label:t,value:s,onChange:n}){return(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"font-display",style:o,children:t}),(0,r.jsx)(S.A,{value:s,onChange:n,size:"sm",options:[{value:"",label:"— none —"},...e.map(e=>({value:e,label:e}))]})]})}return(0,r.jsxs)("div",{className:"absolute right-0 top-10 z-20 w-72 rounded-xl border shadow-xl p-4 flex flex-col gap-3",style:{background:"var(--card)",borderColor:"var(--border)"},children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("span",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:[s," settings"]}),(0,r.jsx)("button",{onClick:n,style:{color:"var(--muted-foreground)"},children:(0,r.jsx)(w.A,{size:13})})]}),"table"===s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"h-px",style:{background:"var(--border)"}}),(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:"Sort"}),(0,r.jsx)(l,{label:"Sort by",value:t.table.sortField,onChange:e=>a({...t,table:{...t.table,sortField:e}})}),(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("span",{style:o,children:"Direction"}),(0,r.jsx)("div",{className:"flex rounded overflow-hidden border",style:{borderColor:"var(--border)"},children:["asc","desc"].map(e=>(0,r.jsx)("button",{onClick:()=>a({...t,table:{...t.table,sortDir:e}}),className:"px-3 py-1 text-xs transition-colors font-display",style:{fontSize:"0.72rem",background:t.table.sortDir===e?"var(--amber)":"var(--background)",color:t.table.sortDir===e?"var(--amber-foreground)":"var(--muted-foreground)"},children:e},e))})]}),(0,r.jsx)("div",{className:"h-px",style:{background:"var(--border)"}}),(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:"Group"}),(0,r.jsx)(l,{label:"Group by",value:t.table.groupField,onChange:e=>a({...t,table:{...t.table,groupField:e}})}),(0,r.jsx)("div",{className:"h-px",style:{background:"var(--border)"}}),(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wider",style:o,children:"Columns"}),(0,r.jsx)("div",{className:"flex flex-col gap-1.5",children:e.map(e=>{let s=t.table.hiddenFields.includes(e);return(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{style:o,children:e}),(0,r.jsx)("button",{onClick:()=>{let r=s?t.table.hiddenFields.filter(t=>t!==e):[...t.table.hiddenFields,e];a({...t,table:{...t.table,hiddenFields:r}})},className:"text-xs px-2 py-0.5 rounded transition-colors font-display",style:{background:s?"var(--muted)":"var(--amber-dim)",color:s?"var(--muted-foreground)":"var(--amber)"},children:s?"Hidden":"Visible"})]},e)})})]}),"gallery"===s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l,{label:"Title",value:t.gallery.titleField,onChange:e=>a({...t,gallery:{...t.gallery,titleField:e}})}),(0,r.jsx)(l,{label:"Description",value:t.gallery.descField,onChange:e=>a({...t,gallery:{...t.gallery,descField:e}})}),(0,r.jsx)(l,{label:"Tag / Badge",value:t.gallery.tagField,onChange:e=>a({...t,gallery:{...t.gallery,tagField:e}})})]}),"board"===s&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l,{label:"Group by",value:t.board.groupField,onChange:e=>a({...t,board:{...t.board,groupField:e}})}),(0,r.jsx)(l,{label:"Card title",value:t.board.titleField,onChange:e=>a({...t,board:{...t.board,titleField:e}})}),(0,r.jsx)(l,{label:"Card desc",value:t.board.descField,onChange:e=>a({...t,board:{...t.board,descField:e}})})]})]})}let A=[{id:"table",icon:(0,r.jsx)(a.A,{size:13}),label:"Table"},{id:"gallery",icon:(0,r.jsx)(o.A,{size:13}),label:"Gallery"},{id:"board",icon:(0,r.jsx)(l.A,{size:13}),label:"Board"}];function z({filePath:e,content:t,saveAction:s}){let{headers:a,rows:o}=(0,n.useMemo)(()=>{let e;return{headers:(e=c().parse(t,{skipEmptyLines:!0}).data)[0]??[],rows:e.slice(1)}},[t]),l=(0,n.useMemo)(()=>({activeView:"table",table:{sortField:"",sortDir:"asc",groupField:"",hiddenFields:[]},gallery:{titleField:a[0]??"",descField:a[1]??"",tagField:a[2]??""},board:{groupField:a[a.length-1]??"",titleField:a[0]??"",descField:a[1]??""}}),[a]),[d,u]=(0,p.Un)("csv",e,l),[m,x]=(0,n.useState)(!1),h=(0,n.useCallback)(e=>{u(e)},[u]),g=d.activeView;return(0,r.jsxs)("div",{className:"max-w-[1100px] mx-auto px-0 py-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-4 relative",children:[(0,r.jsx)("div",{className:"flex items-center gap-0.5 p-1 rounded-lg",style:{background:"var(--muted)"},children:A.map(e=>(0,r.jsxs)("button",{onClick:()=>h({...d,activeView:e.id}),className:"flex items-center gap-1.5 px-3 py-1.5 rounded text-xs font-medium transition-colors font-display",style:{background:g===e.id?"var(--card)":"transparent",color:g===e.id?"var(--foreground)":"var(--muted-foreground)",boxShadow:g===e.id?"0 1px 3px rgba(0,0,0,0.1)":"none"},children:[e.icon,e.label]},e.id))}),(0,r.jsx)("div",{className:"flex-1"}),(0,r.jsxs)("span",{className:"text-xs font-display",style:{color:"var(--muted-foreground)",opacity:.5},children:[o.length," rows"]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("button",{onClick:()=>x(e=>!e),className:"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-xs transition-colors",style:{background:m?"var(--accent)":"var(--muted)",color:m?"var(--foreground)":"var(--muted-foreground)"},title:"View settings",children:(0,r.jsx)(i.A,{size:13})}),m&&(0,r.jsx)(C,{headers:a,cfg:d,view:g,onClose:()=>x(!1),onChange:h})]})]}),"table"===g&&(0,r.jsx)(y,{headers:a,rows:o,cfg:d.table,saveAction:s}),"gallery"===g&&(0,r.jsx)(N,{headers:a,rows:o,cfg:d.gallery}),"board"===g&&(0,r.jsx)(k,{headers:a,rows:o,cfg:d.board,saveAction:s})]})}},92524:(e,t,s)=>{"use strict";s.d(t,{default:()=>n});var r=s(12115);function n(){return(0,r.useEffect)(()=>{!("u">typeof navigator&&/electron/i.test(navigator.userAgent))&&"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(e=>{console.warn("[SW] Registration failed:",e)})},[]),null}},92950:(e,t,s)=>{"use strict";s.r(t),s.d(t,{GraphRenderer:()=>c});var r=s(95155),n=s(12115),a=s(73321),o=s(81750),l=s(61278);s(53255);var i=s(22356);let d=(0,n.memo)(function({data:e}){let t=(0,a.useRouter)(),{label:s,id:i,isCurrent:d,isOrphan:c,size:u=1}=e,m=(0,n.useCallback)(()=>{let e=i.split("/").map(encodeURIComponent).join("/");t.push("/view/"+e)},[i,t]),x=.8+Math.min(.1*u,1.2);return(0,r.jsxs)("div",{onClick:m,title:i,className:"group font-display",style:{fontSize:10*x,padding:`${4*x}px ${12*x}px`,borderRadius:999,cursor:"pointer",userSelect:"none",whiteSpace:"nowrap",maxWidth:240,overflow:"hidden",textOverflow:"ellipsis",opacity:c?.4:1,background:d?"var(--amber)":"var(--card)",color:d?"var(--amber-foreground)":"var(--foreground)",border:`1.5px solid ${d?"var(--amber)":"var(--border)"}`,boxShadow:d?"0 0 20px var(--amber-dim), 0 0 0 2px var(--amber-dim)":"0 2px 4px rgba(0,0,0,0.1)",transition:"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)",zIndex:d?10:1},onMouseEnter:e=>{d||(e.currentTarget.style.borderColor="var(--amber)",e.currentTarget.style.background="var(--accent)")},onMouseLeave:e=>{d||(e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--card)")},children:[(0,r.jsx)(o.h7,{type:"target",position:l.yX.Top,style:{opacity:0}}),s,(0,r.jsx)(o.h7,{type:"source",position:l.yX.Bottom,style:{opacity:0}})]})});function c({filePath:e}){let[t,s]=(0,n.useState)(null),[a,l]=(0,n.useState)(!0),[c,u]=(0,n.useState)("local"),[m,x]=(0,n.useState)(!1);(0,n.useEffect)(()=>{x(!0)},[]),(0,n.useEffect)(()=>{(0,i.n)("/api/graph").then(e=>{s(e),l(!1)}).catch(()=>l(!1))},[]);let p=(0,n.useMemo)(()=>{if(!t)return new Map;let e=new Map;for(let s of t.edges)e.set(s.source,(e.get(s.source)||0)+1),e.set(s.target,(e.get(s.target)||0)+1);return e},[t]),h=(0,n.useMemo)(()=>{if(!t)return null;let e=new Map;for(let s of t.edges)e.has(s.source)||e.set(s.source,new Set),e.has(s.target)||e.set(s.target,new Set),e.get(s.source).add(s.target),e.get(s.target).add(s.source);return e},[t]),{filteredNodes:g,filteredEdges:f}=(0,n.useMemo)(()=>{let s,r;if(!t)return{filteredNodes:[],filteredEdges:[]};if("global"===c)s=t.nodes,r=t.edges;else{let n=new Set,a=[{id:e,depth:0}];for(n.add(e);a.length>0;){let{id:e,depth:t}=a.shift();if(!(t>=2))for(let s of h?.get(e)??new Set)n.has(s)||(n.add(s),a.push({id:s,depth:t+1}))}let o=new Set((s=t.nodes.filter(e=>n.has(e.id))).map(e=>e.id));r=t.edges.filter(e=>o.has(e.source)&&o.has(e.target))}return{filteredNodes:s,filteredEdges:r}},[t,c,e,h]),b=(0,n.useMemo)(()=>{let e=new Set;for(let t of f)e.add(t.source),e.add(t.target);return e},[f]),{rfNodes:v,rfEdges:j}=(0,n.useMemo)(()=>{if(0===g.length)return{rfNodes:[],rfEdges:[]};let t=function(e,t,s){let r=e.length;if(0===r)return{};let n=(void 0)??(r>100?80:150),a=.6*Math.sqrt(108e4/Math.max(r,1)),o={};e.forEach((e,t)=>{let s=2*Math.PI*t/r,n=360*Math.random();o[e]={x:600+Math.cos(s)*n,y:450+Math.sin(s)*n}});let l={};for(let s=0;s<n;s++){let i=120*(1-s/n);for(let t of e)l[t]={x:0,y:0};for(let t=0;t<r;t++)for(let s=t+1;s<r;s++){let r=e[t],n=e[s],i=o[r].x-o[n].x,d=o[r].y-o[n].y,c=Math.sqrt(i*i+d*d||.01),u=a*a/c;l[r].x+=i/c*u,l[r].y+=d/c*u,l[n].x-=i/c*u,l[n].y-=d/c*u}for(let e of t){let t=e.source,s=e.target;if(!o[t]||!o[s])continue;let r=o[t].x-o[s].x,n=o[t].y-o[s].y,i=Math.sqrt(r*r+n*n||.01),d=i*i/a;l[t].x-=r/i*d,l[t].y-=n/i*d,l[s].x+=r/i*d,l[s].y+=n/i*d}for(let t of e){let e=o[t].x-600,s=o[t].y-450,r=Math.sqrt(e*e+s*s)||.01,n=.05*r;l[t].x-=e/r*n,l[t].y-=s/r*n}for(let t of e){let e=l[t],s=Math.sqrt(e.x*e.x+e.y*e.y)||.01;o[t].x+=e.x/s*Math.min(s,i),o[t].y+=e.y/s*Math.min(s,i),o[t].x=Math.max(0,Math.min(1200,o[t].x)),o[t].y=Math.max(0,Math.min(900,o[t].y))}}return o}(g.map(e=>e.id),f);return{rfNodes:g.map(s=>({id:s.id,type:"wiki",position:t[s.id]??{x:0,y:0},data:{label:s.label,id:s.id,isCurrent:s.id===e,isOrphan:!b.has(s.id),size:p.get(s.id)||1}})),rfEdges:f.map((t,s)=>{let r=t.source===e||t.target===e;return{id:`e-${s}`,source:t.source,target:t.target,type:"default",markerEnd:{type:"arrowclosed",color:r?"var(--amber)":"var(--border)"},style:{stroke:r?"var(--amber)":"var(--border)",strokeWidth:r?1.5:1,opacity:r?.8:.4},animated:r}})}},[g,f,e,b,p]),y=(0,n.useMemo)(()=>({wiki:d}),[]);return!m||a?(0,r.jsx)("div",{style:{width:"100%",height:"calc(100vh - 160px)",minHeight:400,borderRadius:12,background:"var(--muted)",border:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,r.jsx)("span",{className:"font-display",style:{color:"var(--muted-foreground)",fontSize:12},children:a?"Building graph…":"Loading…"})}):(0,r.jsxs)("div",{style:{width:"100%",position:"relative",zIndex:0},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:10,flexWrap:"wrap"},children:[(0,r.jsxs)("span",{className:"font-display",style:{fontSize:11,color:"var(--muted-foreground)"},children:[g.length," nodes \xb7 ",f.length," edges"]}),(0,r.jsx)("div",{style:{display:"flex",gap:2,padding:3,borderRadius:8,background:"var(--muted)"},children:[{id:"local",label:"Local"},{id:"global",label:"Global"}].map(e=>(0,r.jsx)("button",{onClick:()=>u(e.id),className:"font-display",style:{padding:"3px 12px",borderRadius:5,fontSize:11,cursor:"pointer",border:"none",outline:"none",background:c===e.id?"var(--card)":"transparent",color:c===e.id?"var(--foreground)":"var(--muted-foreground)",boxShadow:c===e.id?"0 1px 3px rgba(0,0,0,0.1)":"none",transition:"all 0.1s"},children:e.label},e.id))})]}),(0,r.jsx)("div",{style:{width:"100%",height:"calc(100vh - 160px)",minHeight:400},children:(0,r.jsxs)(o.Gc,{nodes:v,edges:j,nodeTypes:y,fitView:!0,fitViewOptions:{padding:.15},proOptions:{hideAttribution:!0},style:{background:"var(--background)",borderRadius:12,border:"1px solid var(--border)"},children:[(0,r.jsx)(o.VS,{color:"var(--border)",gap:24,size:1,variant:o._5.Dots}),(0,r.jsx)(o.H2,{showInteractive:!1}),(0,r.jsx)(o.of,{nodeColor:e=>e.data?.isCurrent?"var(--amber)":"var(--muted-foreground)"})]})})]})}},93135:(e,t,s)=>{"use strict";s.d(t,{Y:()=>n});var r=s(9339);let n=(0,r.createServerReference)("40f46780604bc79f0aa53b130de4a8a76348af0fee",r.callServer,void 0,r.findSourceMapURL,"undoDeleteAction")},97089:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,66872,23)),Promise.resolve().then(s.bind(s,92524)),Promise.resolve().then(s.bind(s,86343)),Promise.resolve().then(s.bind(s,18847)),Promise.resolve().then(s.bind(s,88946)),Promise.resolve().then(s.bind(s,35504)),Promise.resolve().then(s.bind(s,92306)),Promise.resolve().then(s.bind(s,92950)),Promise.resolve().then(s.bind(s,56406)),Promise.resolve().then(s.bind(s,39594)),Promise.resolve().then(s.bind(s,87500)),Promise.resolve().then(s.bind(s,48133)),Promise.resolve().then(s.bind(s,74120)),Promise.resolve().then(s.bind(s,26490)),Promise.resolve().then(s.bind(s,91459)),Promise.resolve().then(s.bind(s,40430)),Promise.resolve().then(s.bind(s,61263)),Promise.resolve().then(s.t.bind(s,13524,23)),Promise.resolve().then(s.t.bind(s,89846,23)),Promise.resolve().then(s.t.bind(s,377,23)),Promise.resolve().then(s.t.bind(s,83284,23)),Promise.resolve().then(s.t.bind(s,75282,23))}},e=>{e.O(0,[7513,1151,3862,9602,8409,9286,1038,275,5681,1263,9670,8441,3794,7358],()=>e(e.s=97089)),_N_E=e.O()}]);
|