coder-config 0.49.4-beta → 0.49.5-beta
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/lib/constants.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coder-config",
|
|
3
|
-
"version": "0.49.
|
|
3
|
+
"version": "0.49.5-beta",
|
|
4
4
|
"description": "Configuration manager for AI coding tools - Claude Code, Gemini CLI, Codex CLI, Antigravity. Manage MCPs, rules, permissions, memory, and workstreams.",
|
|
5
5
|
"author": "regression.io",
|
|
6
6
|
"main": "config-loader.js",
|
|
@@ -3731,5 +3731,5 @@ Happy coding.
|
|
|
3731
3731
|
input=$(cat)
|
|
3732
3732
|
MODEL=$(echo "$input" | jq -r '.model.display_name // "?"')
|
|
3733
3733
|
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
|
|
3734
|
-
echo "* $MODEL $
|
|
3734
|
+
echo "* $MODEL $PCT% ctx"
|
|
3735
3735
|
`;function ZW(){const[e,r]=_.useState([]),[s,n]=_.useState("disabled"),[o,c]=_.useState(QW),[u,l]=_.useState(!0),[d,f]=_.useState(!1);_.useEffect(()=>{m()},[]);const m=async()=>{try{l(!0);const[j,S]=await Promise.all([me.getStatuslinePresets(),me.getCurrentStatusline()]);r(j.presets||[]),n(S.presetId||"disabled"),S.presetId==="custom"&&S.scriptContent&&c(S.scriptContent)}catch(j){q.error("Failed to load statuslines: "+j.message)}finally{l(!1)}},h=async j=>{if(j.id!=="custom"){f(!0);try{await me.setStatusline(j.id),n(j.id),q.success(j.id==="disabled"?"Statusline disabled":`Applied "${j.name}"`)}catch(S){q.error("Failed to apply: "+S.message)}finally{f(!1)}}},x=async()=>{f(!0);try{await me.setStatusline("custom",o),n("custom"),q.success("Custom script applied")}catch(j){q.error("Failed to apply: "+j.message)}finally{f(!1)}};if(u)return t.jsx("div",{className:"flex items-center justify-center h-64",children:t.jsx(Qe,{className:"w-8 h-8 animate-spin text-indigo-600"})});const w=XW(e);return t.jsxs("div",{className:"space-y-6",children:[t.jsxs("div",{className:"bg-white dark:bg-slate-950 rounded-xl border border-gray-200 dark:border-slate-800 p-6 shadow-sm",children:[t.jsxs("h2",{className:"text-lg font-semibold text-gray-900 dark:text-white flex items-center gap-2",children:[t.jsx(Ut,{className:"w-5 h-5 text-indigo-500"}),"Statusline"]}),t.jsxs("p",{className:"text-sm text-gray-500 dark:text-slate-400 mt-1",children:["Claude Code runs a shell script after each response and displays the output in the status bar. Scripts receive JSON session data via stdin. Requires"," ",t.jsx("code",{className:"bg-gray-100 dark:bg-slate-800 px-1 rounded text-xs",children:"jq"}),"."]}),t.jsx("p",{className:"text-xs text-amber-600 dark:text-amber-400 mt-2",children:"⚡ Changes apply to the next interaction in your Claude Code session (no restart needed)."})]}),JW.filter(j=>w[j]).map(j=>t.jsxs("div",{children:[t.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-slate-500 mb-3 px-1",children:j}),t.jsx("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3",children:w[j].map(S=>{const v=s===S.id,y=S.id==="custom",g=S.id==="disabled";return t.jsxs("div",{onClick:()=>!y&&h(S),className:["rounded-xl border p-4 transition-all",y?"cursor-default":"cursor-pointer hover:border-indigo-400 dark:hover:border-indigo-500",v?"border-indigo-500 bg-indigo-50 dark:bg-indigo-950/40 shadow-sm":"border-gray-200 dark:border-slate-800 bg-white dark:bg-slate-950"].join(" "),children:[t.jsxs("div",{className:"flex items-start justify-between gap-2",children:[t.jsxs("div",{className:"flex-1 min-w-0",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-sm font-medium text-gray-900 dark:text-white truncate",children:S.name}),v&&t.jsx(Rt,{className:"w-4 h-4 text-indigo-500 shrink-0"})]}),t.jsx("p",{className:"text-xs text-gray-500 dark:text-slate-400 mt-0.5",children:S.description})]}),y&&t.jsx(sl,{className:"w-4 h-4 text-gray-400 shrink-0 mt-0.5"})]}),!y&&!g&&S.preview&&t.jsx("div",{className:"mt-3 px-2 py-1.5 bg-gray-950 dark:bg-black rounded font-mono text-[11px] border border-gray-800 whitespace-pre text-gray-300 truncate",children:S.preview}),g&&t.jsx("div",{className:"mt-3 px-2 py-1.5 bg-gray-950 dark:bg-black rounded font-mono text-[11px] border border-gray-800 text-gray-600 italic",children:"(no status bar)"}),y&&t.jsxs("div",{className:"mt-3 space-y-2",onClick:b=>b.stopPropagation(),children:[t.jsx(ht,{value:o,onChange:b=>c(b.target.value),className:"font-mono text-xs h-40 resize-y bg-gray-950 dark:bg-black text-green-400 border-gray-800 placeholder:text-gray-600",spellCheck:!1}),t.jsxs(se,{size:"sm",className:"w-full",onClick:x,disabled:d||!o.trim(),children:[d&&s==="custom"?t.jsx(Qe,{className:"w-3 h-3 animate-spin mr-1"}):null,"Apply Custom Script"]})]})]},S.id)})})]},j)),t.jsxs("div",{className:"bg-gray-50 dark:bg-slate-900 rounded-lg p-4 border border-transparent dark:border-slate-800 space-y-2",children:[t.jsx("h4",{className:"text-sm font-medium text-gray-900 dark:text-white",children:"How it works"}),t.jsxs("p",{className:"text-xs text-gray-600 dark:text-slate-400",children:["Scripts are saved to ",t.jsx("code",{className:"bg-gray-100 dark:bg-slate-800 px-1 rounded",children:"~/.claude/statuslines/"})," and referenced in ",t.jsx("code",{className:"bg-gray-100 dark:bg-slate-800 px-1 rounded",children:"~/.claude/settings.json"})," as"," ",t.jsx("code",{className:"bg-gray-100 dark:bg-slate-800 px-1 rounded",children:"statusLine.command"}),". Claude Code pipes JSON session data to the script on each turn."]}),t.jsxs("p",{className:"text-xs text-gray-500 dark:text-slate-500",children:["Test a script manually:"," ",t.jsx("code",{className:"bg-gray-100 dark:bg-slate-800 px-1 rounded font-mono",children:`echo '{"model":{"display_name":"opus-4-6"},"context_window":{"used_percentage":37}}' | ~/.claude/statuslines/full.sh`})]})]})]})}const eU=[{id:"projects",label:"All Projects",icon:$n,section:"Projects"},{id:"explorer",label:"Project Explorer",icon:Ji,section:"Projects"},{id:"workstreams",label:"Workstreams",icon:mC,section:"Projects"},{id:"registry",label:"MCP Registry",icon:Kn,section:"Tools"},{id:"plugins",label:"Plugins",icon:Fo,section:"Tools"},{id:"memory",label:"Memory",icon:Lo,section:"Tools"},{id:"claude-settings",label:"Claude Code",icon:Xn,section:"Configuration",tool:"claude"},{id:"gemini-settings",label:"Gemini CLI",icon:Ut,section:"Configuration",tool:"gemini"},{id:"codex-settings",label:"Codex CLI",icon:Ut,section:"Configuration",isNew:!0,tool:"codex"},{id:"antigravity-settings",label:"Antigravity",icon:Ac,section:"Configuration",tool:"antigravity"},{id:"create-mcp",label:"Create MCP",icon:Hr,section:"Developer"},{id:"loops",label:"Ralph Loops",icon:pc,section:"Developer",isNew:!0},{id:"statuslines",label:"Statusline",icon:BM,section:"System",isNew:!0},{id:"sessions",label:"Sessions",icon:bs,section:"System"},{id:"preferences",label:"Preferences",icon:pC,section:"System"},{id:"tutorial",label:"Tutorial",icon:Eu,section:"Help"},{id:"docs",label:"Docs & Help",icon:Do,section:"Help"}],j_=(e,r)=>{try{const s=localStorage.getItem(`claude-config-${e}`);return s?JSON.parse(s):r}catch{return r}},tU=(e,r)=>{try{localStorage.setItem(`claude-config-${e}`,JSON.stringify(r))}catch{}};function rU(){const{projects:e,activeProject:r,fetch:s,setActive:n}=Rx(),{appConfig:o,version:c,fetch:u,checkVersion:l}=Mw(),[d,f]=_.useState(()=>j_("currentView","explorer")),[m,h]=_.useState(!0),[x,w]=_.useState({dir:"",subprojects:[],hierarchy:[]}),[j,S]=_.useState([]),[v,y]=_.useState({mcpServers:{}}),[g,b]=_.useState([]),[k,N]=_.useState([]),[P,A]=_.useState(null),[E,M]=_.useState(null),[D,O]=_.useState(!1),[z,U]=_.useState({title:"",type:""}),[J,W]=_.useState(""),[$,Y]=_.useState(""),K=_.useRef({}),[L,T]=_.useState(null),[B,G]=_.useState(!1),[F,re]=_.useState(!1),[de,ue]=_.useState(null),[X,H]=_.useState(!1),oe=_.useRef(null);_.useEffect(()=>{tU("currentView",d)},[d]);const ie=_.useCallback(async()=>{try{const[pe,be,De,fe,Se]=await Promise.all([me.getProject(),me.getConfigs(),me.getRegistry(),me.getRules(),me.getCommands()]);w(pe),S(be),y(De),b(fe),N(Se),be.length>0&&!P&&A(be[be.length-1])}catch(pe){q.error("Failed to load data: "+pe.message)}finally{h(!1)}},[P]),Z=_.useCallback(async(pe=!1)=>{try{const be=await s(),De=be==null?void 0:be.find(fe=>fe.isActive);if(pe&&De){const fe=await me.getSubprojects(De.path);ue({dir:De.path,subprojects:fe.subprojects||[]})}pe&&!De&&(j_("currentView",null)||f("projects"))}catch{console.log("Projects API not available")}},[s]),le=async pe=>{try{const be=await n(pe);be.success?(w({dir:be.dir,hierarchy:be.hierarchy,subprojects:be.subprojects}),ue({dir:be.dir,subprojects:be.subprojects}),await ie(),q.success(`Switched to ${be.project.name}`)):q.error(be.error||"Failed to switch project")}catch(be){q.error("Failed to switch project: "+be.message)}},ee=()=>{s()};_.useEffect(()=>{ie(),Z(!0),(async()=>{try{const[be]=await Promise.all([l(),u()]);!oe.current&&(be!=null&&be.installedVersion)&&(oe.current=be.installedVersion);const De=Mw.getState().appConfig;if(be!=null&&be.updateAvailable&&(be==null?void 0:be.updateMethod)==="npm")if(De!=null&&De.autoUpdate){q.info(`Auto-updating to v${be.latestVersion}...`),G(!0);const fe=await me.performUpdate({updateMethod:be.updateMethod,targetVersion:be.latestVersion,channel:be.channel});if(fe.success){q.success(`Updated to v${fe.newVersion}! Restarting server...`);try{await me.restartServer()}catch{}let Se=0;const Te=setInterval(async()=>{Se++;try{await me.checkVersion(),clearInterval(Te),q.success("Server restarted! Reloading..."),setTimeout(()=>window.location.reload(),500)}catch{Se>30&&(clearInterval(Te),q.info("Server restarting. Please refresh the page."),G(!1))}},500)}else q.error("Auto-update failed: "+fe.error),G(!1),T(be)}else T(be)}catch{}})()},[]),_.useEffect(()=>{const be=setInterval(async()=>{if(oe.current)try{const De=await me.checkVersion();De!=null&&De.installedVersion&&De.installedVersion!==oe.current&&(console.log(`[stale-ui] Server updated to v${De.installedVersion}, refreshing...`),window.location.reload())}catch{}},3e4);return()=>clearInterval(be)},[]);const _e=(pe,be)=>{if(!pe||!be)return!1;const De=Te=>Te.split(".").map(He=>parseInt(He,10)||0),fe=De(pe),Se=De(be);for(let Te=0;Te<Math.max(fe.length,Se.length);Te++){if((fe[Te]||0)>(Se[Te]||0))return!0;if((fe[Te]||0)<(Se[Te]||0))return!1}return!1},Fe=async(pe,be="npm",De)=>{G(!0);const fe=await me.performUpdate({updateMethod:be,targetVersion:pe,channel:De});if(fe.success){q.success(`Updated to v${fe.newVersion}! Restarting server...`),T(null);try{await me.restartServer()}catch{}let Se=0;const Te=setInterval(async()=>{Se++;try{await me.checkVersion(),clearInterval(Te),q.success("Server restarted! Reloading..."),setTimeout(()=>window.location.reload(),500)}catch{Se>30&&(clearInterval(Te),q.info("Server restarting. Please refresh the page."),G(!1))}},500);return!0}else return q.error("Update failed: "+fe.error),G(!1),!1},he=async()=>{H(!0);try{const pe=await me.checkVersion(),be=pe==null?void 0:pe.installedVersion,De=pe==null?void 0:pe.latestVersion;if(be&&oe.current&&be!==oe.current){q.info(`Refreshing to v${be}...`),setTimeout(()=>window.location.reload(),500);return}_e(De,be)&&(o!=null&&o.autoUpdate?(H(!1),q.info(`Auto-updating to v${De}...`),await Fe(De,(pe==null?void 0:pe.updateMethod)||"npm",pe==null?void 0:pe.channel)):(T({...pe,updateAvailable:!0}),q.info(`Update available: v${De}`)))}catch{q.error("Failed to check for updates")}finally{H(!1)}},we=async()=>{if(L!=null&&L.updateAvailable){G(!0);try{const pe=await me.performUpdate({updateMethod:L.updateMethod,sourcePath:L.sourcePath,targetVersion:L.latestVersion,channel:L.channel});if(pe.success){q.success(`Updated to v${pe.newVersion}! Restarting server...`),T(null),setVersion(pe.newVersion);try{await me.restartServer()}catch{}let be=0;const De=setInterval(async()=>{be++;try{await me.checkVersion(),clearInterval(De),q.success("Server restarted! Reloading..."),setTimeout(()=>window.location.reload(),500)}catch{be>30&&(clearInterval(De),q.info("Server restarting. Please refresh the page."),G(!1))}},500)}else q.error("Update failed: "+pe.error),G(!1)}catch(pe){q.error("Update failed: "+pe.message),G(!1)}}};_.useEffect(()=>{const pe=async()=>{try{const{hashes:De}=await me.getFileHashes(),fe=K.current,Se=Object.keys(De).some(He=>fe[He]!==De[He])||Object.keys(fe).some(He=>!De[He]),Te=fe.__subprojects__!==De.__subprojects__;if(Se&&Object.keys(fe).length>0&&(await ie(),Te&&de))try{const He=await me.getSubprojects(de.dir);ue(Ye=>({...Ye,subprojects:He.subprojects||[]}))}catch{}K.current=De}catch{}},be=setInterval(pe,2e3);return pe(),()=>clearInterval(be)},[ie,de]);const Oe=new Set;j.forEach(pe=>{var be,De;(((be=pe.config)==null?void 0:be.include)||[]).forEach(fe=>Oe.add(fe)),Object.keys(((De=pe.config)==null?void 0:De.mcpServers)||{}).forEach(fe=>Oe.add(fe))});const $e={mcps:Oe.size,rules:g.length,commands:k.length},Ke=async()=>{try{const pe=await me.applyConfig(x.dir);if(pe.tools){const be=Object.entries(pe.tools).filter(([,De])=>De).map(([De])=>De==="claude"?"Claude Code":"Antigravity");be.length>0?q.success(`Config applied to: ${be.join(", ")}`):q.warning("No tools were updated")}else q.success("Configuration applied successfully!")}catch(pe){q.error("Failed to apply config: "+pe.message)}},xt=async()=>{h(!0),await ie(),q.success("Data refreshed")};if(m)return t.jsx("div",{className:"min-h-screen bg-background flex items-center justify-center",children:t.jsxs("div",{className:"flex flex-col items-center gap-4",children:[t.jsx(Qe,{className:"w-8 h-8 animate-spin text-primary"}),t.jsx("p",{className:"text-muted-foreground",children:"Loading configuration..."})]})});const Ce=()=>{switch(d){case"explorer":return t.jsx(A8,{project:x,onRefresh:ie});case"registry":return t.jsx(YH,{registry:v,searchQuery:J,setSearchQuery:W,onUpdate:ie});case"plugins":return t.jsx(SW,{});case"memory":return t.jsx(JH,{project:x,onUpdate:ie});case"create-mcp":return t.jsx(jH,{project:x});case"claude-settings":return t.jsx(uH,{});case"gemini-settings":return t.jsx(hH,{});case"codex-settings":return t.jsx(CH,{});case"antigravity-settings":return t.jsx(xH,{});case"statuslines":return t.jsx(ZW,{});case"sessions":return t.jsx(YW,{});case"preferences":return t.jsx(dH,{onConfigChange:()=>u()});case"projects":return t.jsx(tW,{onProjectSwitch:pe=>{w({dir:pe.dir,hierarchy:pe.hierarchy,subprojects:pe.subprojects}),ue({dir:pe.dir,subprojects:pe.subprojects}),ie(),Z()}});case"workstreams":return t.jsx(CW,{onWorkstreamChange:pe=>{q.success(`Switched to workstream: ${pe.name}`)}});case"loops":return t.jsx(kW,{activeProject:r});case"docs":return t.jsx(wW,{});case"tutorial":return t.jsx(KW,{});default:return null}};return t.jsxs("div",{className:"min-h-screen bg-background",children:[t.jsx("header",{className:"h-16 bg-card border-b border-border sticky top-0 z-50 shadow-sm",children:t.jsxs("div",{className:"h-full px-6 flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:"w-10 h-10 rounded-xl bg-gradient-to-br from-indigo-500 to-purple-600 flex items-center justify-center shadow-lg shadow-indigo-500/20",children:t.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 128 128",children:[t.jsx("circle",{cx:"64",cy:"64",r:"52",fill:"none",stroke:"white",strokeWidth:"10",strokeDasharray:"24 12"}),t.jsx("circle",{cx:"64",cy:"64",r:"28",fill:"white"}),t.jsx("circle",{cx:"64",cy:"64",r:"12",fill:"#7c3aed"})]})}),t.jsx("div",{children:t.jsxs("h1",{className:"text-xl font-bold text-foreground",children:["Coder ",t.jsx("span",{className:"text-primary",children:"Config"})]})}),L&&t.jsxs("button",{onClick:we,disabled:B,className:"ml-3 px-2.5 py-1 text-xs font-medium bg-green-100 text-green-700 hover:bg-green-200 rounded-full flex items-center gap-1.5 transition-colors disabled:opacity-50",children:[B?t.jsx(Qe,{className:"w-3 h-3 animate-spin"}):t.jsx(xi,{className:"w-3 h-3"}),B?"Updating...":`Update to v${L.latestVersion}`]})]}),t.jsx(jN,{orientation:"vertical",className:"h-6"}),t.jsx(T8,{projects:e,activeProject:r,onSwitch:le,onAddClick:()=>re(!0),onManageClick:()=>f("projects")})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(D8,{}),t.jsx(se,{variant:"ghost",size:"sm",onClick:xt,children:t.jsx(Mr,{className:"w-4 h-4"})}),t.jsxs(se,{onClick:Ke,variant:"ghost",size:"sm",className:"gap-2 text-muted-foreground hover:text-foreground",title:"Config auto-applies on save. Click to manually re-apply.",children:[t.jsx(Ac,{className:"w-4 h-4"}),"Re-apply"]})]})]})}),t.jsxs("div",{className:"flex",children:[t.jsxs("aside",{className:"w-64 h-[calc(100vh-64px)] border-r border-border bg-card sticky top-16 flex flex-col",children:[t.jsx(Js,{className:"flex-1 py-4",children:["Projects","Tools","Configuration","Developer","System","Help"].map(pe=>t.jsxs("div",{className:"mb-6",children:[t.jsx("h3",{className:"px-4 mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:pe}),t.jsx("div",{className:"space-y-0.5",children:eU.filter(be=>be.section===pe).filter(be=>{var De;return be.id!=="loops"||((De=o==null?void 0:o.experimental)==null?void 0:De.ralphLoops)}).filter(be=>!be.tool||((o==null?void 0:o.enabledTools)||["claude"]).includes(be.tool)).map(be=>{const De=be.icon,fe=d===be.id;return t.jsxs("button",{onClick:()=>f(be.id),className:`w-full flex items-center gap-3 px-4 py-2.5 text-sm transition-all duration-200 border-l-2 ${fe?"bg-accent border-primary text-primary font-medium":"border-transparent text-muted-foreground hover:text-foreground hover:bg-accent"}`,children:[t.jsx(De,{className:"w-4 h-4"}),t.jsx("span",{className:"flex-1 text-left",children:be.label}),be.badge&&t.jsx("span",{className:`text-xs px-2 py-0.5 rounded-full font-medium ${fe?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground"}`,children:$e[be.badge]}),be.isNew&&t.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded font-medium bg-green-500/20 text-green-600 dark:text-green-400",children:"new"})]},be.id)})})]},pe))}),t.jsx("div",{className:"px-4 py-3 border-t border-border",children:t.jsxs("button",{onClick:he,disabled:X,className:"text-xs text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1",title:"Check for updates",children:[X?t.jsx(Qe,{className:"w-3 h-3 animate-spin"}):null,c?`v${c}`:""]})})]}),t.jsx("main",{style:["explorer","docs","tutorial"].includes(d)?{}:{zoom:.9},className:Ne("flex-1 overflow-auto",["explorer","docs","tutorial"].includes(d)?"h-[calc(100vh-64px)]":"p-6"),children:t.jsx(T_,{mode:"wait",children:t.jsx(Oa.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.15},className:["explorer","docs","tutorial"].includes(d)?"h-full":"",children:Ce()},d)})})]}),t.jsx(_N,{open:F,onOpenChange:re,onAdded:ee}),t.jsx(R8,{onStartTutorial:()=>f("tutorial")})]})}function sU(){const[e,r]=_.useState(!1),[s,n]=_.useState(!1),[o,c]=_.useState(!1),u=_.useCallback(async()=>{n(!0);try{await me.restartServer(),q.info("Server restarting... page will reload."),setTimeout(()=>{window.location.reload()},2e3)}catch(d){q.error("Failed to restart: "+d.message),n(!1)}},[]),l=_.useCallback(()=>{c(!0),r(!1),q.dismiss("update-available")},[]);return _.useEffect(()=>{let d;const f=async()=>{try{const m=await me.getVersion();console.log("[Update Check]",m),m.needsRestart&&!o&&r(!0)}catch{}};return f(),d=setInterval(f,3e4),()=>clearInterval(d)},[o]),t.jsx(M8,{children:t.jsxs("div",{className:"min-h-screen bg-background",children:[e&&!s&&t.jsxs("div",{className:"fixed top-0 left-0 right-0 z-50 bg-blue-600 text-white px-4 py-2 flex items-center justify-center gap-2 shadow-lg cursor-pointer hover:bg-blue-700 transition-colors",onClick:u,children:[t.jsx(Mr,{className:"w-4 h-4"}),t.jsx("span",{className:"text-sm font-medium",children:"Update available — click to restart"}),t.jsx("button",{onClick:d=>{d.stopPropagation(),l()},className:"absolute right-3 p-1 hover:bg-blue-500 rounded",children:t.jsx(fi,{className:"w-4 h-4"})})]}),s&&t.jsxs("div",{className:"fixed top-0 left-0 right-0 z-50 bg-amber-600 text-white px-4 py-2 flex items-center justify-center gap-2",children:[t.jsx(Mr,{className:"w-4 h-4 animate-spin"}),t.jsx("span",{className:"text-sm font-medium",children:"Restarting server..."})]}),t.jsx(rU,{}),t.jsx(WP,{position:"bottom-right",richColors:!0})]})})}gP.createRoot(document.getElementById("root")).render(t.jsx(sU,{}));
|
package/ui/dist/index.html
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
<!-- PWA Manifest -->
|
|
21
21
|
<link rel="manifest" href="/manifest.json">
|
|
22
|
-
<script type="module" crossorigin src="/assets/index-
|
|
22
|
+
<script type="module" crossorigin src="/assets/index-RoUBBdnF.js"></script>
|
|
23
23
|
<link rel="stylesheet" crossorigin href="/assets/index-C0-_yjwc.css">
|
|
24
24
|
</head>
|
|
25
25
|
<body>
|