@regression-io/claude-config 0.35.3 → 0.35.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regression-io/claude-config",
3
- "version": "0.35.3",
3
+ "version": "0.35.5",
4
4
  "description": "Configuration management UI for Claude Code and Antigravity - manage MCPs, rules, commands, memory, and project folders",
5
5
  "author": "regression.io",
6
6
  "main": "config-loader.js",
@@ -2193,7 +2193,7 @@ When reporting issues, include:
2193
2193
  - Node.js version (\`node --version\`)
2194
2194
  - Operating system
2195
2195
  - Error messages or logs
2196
- `}},dH={...Zz,...eH,...tH,...rH,...nH,...sH,...iH,...oH,...aH,...lH,...cH,...uH};function M2(e){let t=e.replace(/```(\w*)\n([\s\S]*?)```/g,(r,n,o)=>`<pre class="bg-zinc-900 text-zinc-100 p-4 rounded-lg overflow-x-auto my-4"><code class="text-sm">${o.replace(/</g,"&lt;").replace(/>/g,"&gt;").trim()}</code></pre>`);return t=t.replace(/(\|[^\n]+\|\n\|[-| :]+\|\n(?:\|[^\n]+\|\n?)+)/g,r=>{const n=r.trim().split(`
2196
+ `}},dH={...Zz,...eH,...tH,...rH,...nH,...sH,...iH,...oH,...aH,...lH,...cH,...uH};function M2(e){let t=e.replace(/```(\w*)\n([\s\S]*?)```/g,(r,n,o)=>`<pre class="bg-zinc-900 text-zinc-100 p-4 rounded-lg overflow-x-auto my-4"><code class="text-sm">${o.replace(/\\\`/g,"`").replace(/</g,"&lt;").replace(/>/g,"&gt;").trim()}</code></pre>`);return t=t.replace(/(\|[^\n]+\|\n\|[-| :]+\|\n(?:\|[^\n]+\|\n?)+)/g,r=>{const n=r.trim().split(`
2197
2197
  `);if(n.length<2)return r;const o=n[0].split("|").filter(u=>u.trim()).map(u=>`<th class="border border-border px-3 py-2 bg-muted font-semibold text-left">${u.trim()}</th>`).join(""),d=n.slice(2).map(u=>`<tr>${u.split("|").filter(c=>c.trim()).map(c=>`<td class="border border-border px-3 py-2">${c.trim()}</td>`).join("")}</tr>`).join("");return`<table class="w-full border-collapse border border-border my-4"><thead><tr>${o}</tr></thead><tbody>${d}</tbody></table>`}),t.replace(/^### (.*$)/gim,'<h3 class="text-lg font-semibold mt-6 mb-2 text-foreground">$1</h3>').replace(/^## (.*$)/gim,'<h2 class="text-xl font-semibold mt-8 mb-4 text-foreground">$1</h2>').replace(/^# (.*$)/gim,'<h1 class="text-2xl font-bold mb-6 text-foreground">$1</h1>').replace(/!\[([^\]]*)\]\(([^)]+)\)/g,'<img src="$2" alt="$1" class="rounded-lg shadow-lg my-4 max-w-full border border-border" />').replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`([^`]+)`/g,'<code class="bg-muted px-1.5 py-0.5 rounded text-sm font-mono">$1</code>').replace(/^- (.*$)/gim,'<li class="ml-4">$1</li>').replace(/(<li.*<\/li>\n?)+/g,'<ul class="list-disc my-2">$&</ul>').replace(/^\d+\. (.*$)/gim,'<li class="ml-4">$1</li>').replace(/\n\n/g,'</p><p class="my-3 text-foreground">').replace(/\n/g,"<br/>")}function hH(){const[e,t]=C.useState("installation"),[r,n]=C.useState({"getting-started":!0}),o=u=>{n(l=>({...l,[u]:!l[u]}))},d=dH[e];return s.jsxs("div",{className:"flex h-full",children:[s.jsxs("div",{className:"w-64 border-r border-border bg-muted/50 flex flex-col",children:[s.jsx("div",{className:"p-4 border-b border-border",children:s.jsxs("h2",{className:"font-semibold flex items-center gap-2 text-foreground",children:[s.jsx(Ti,{className:"w-5 h-5"}),"Documentation"]})}),s.jsx(_n,{className:"flex-1",children:s.jsx("div",{className:"p-2",children:Qz.map(u=>s.jsxs("div",{className:"mb-1",children:[s.jsxs("button",{className:Pe("w-full flex items-center gap-2 px-3 py-2 text-sm rounded-md hover:bg-accent text-left",(e===u.id||u.subsections.some(l=>l.id===e))&&"bg-accent"),onClick:()=>{u.subsections.length>0?(o(u.id),r[u.id]||t(u.subsections[0].id)):t(u.id)},children:[s.jsx(u.icon,{className:"w-4 h-4 text-muted-foreground"}),s.jsx("span",{className:"flex-1",children:u.title}),u.isNew&&s.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"}),u.subsections.length>0&&s.jsx(xs,{className:Pe("w-4 h-4 text-muted-foreground transition-transform",r[u.id]&&"rotate-90")})]}),u.subsections.length>0&&r[u.id]&&s.jsx("div",{className:"ml-6 mt-1 space-y-1",children:u.subsections.map(l=>s.jsx("button",{className:Pe("w-full text-left px-3 py-1.5 text-sm rounded-md hover:bg-accent text-foreground",e===l.id&&"bg-accent text-primary font-medium"),onClick:()=>t(l.id),children:l.title},l.id))})]},u.id))})})]}),s.jsx("div",{className:"flex-1 overflow-hidden",children:s.jsx(_n,{className:"h-full",children:s.jsx("div",{className:"max-w-3xl mx-auto p-8",children:d?s.jsx("div",{className:"prose prose-sm max-w-none",children:s.jsx("div",{dangerouslySetInnerHTML:{__html:M2(d.content)}})}):s.jsxs("div",{className:"text-center text-muted-foreground py-12",children:[s.jsx(Ti,{className:"w-12 h-12 mx-auto mb-4 opacity-50"}),s.jsx("p",{children:"Select a topic from the sidebar"})]})})})})]})}var fH={};const Pw={development:"bg-blue-100 text-blue-700 border-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:border-blue-800",productivity:"bg-green-100 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-400 dark:border-green-800",integration:"bg-purple-100 text-purple-700 border-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:border-purple-800",external:"bg-orange-100 text-orange-700 border-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:border-orange-800",lsp:"bg-cyan-100 text-cyan-700 border-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:border-cyan-800",default:"bg-gray-100 text-gray-700 border-gray-200 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700"};function pH(){var ae,ne,J,oe,we,Le,Ue;const[e,t]=C.useState(!0),[r,n]=C.useState({allPlugins:[],categories:[],marketplaces:[],enabledPlugins:null}),[o,d]=C.useState(""),[u,l]=C.useState([]),[c,f]=C.useState([]),[p,h]=C.useState(!0),[v,w]=C.useState(!0),[k,_]=C.useState(!0),[y,x]=C.useState(!0),[g,b]=C.useState("name"),[j,P]=C.useState(null),[A,E]=C.useState({open:!1,repo:""}),[N,L]=C.useState(!1),[O,B]=C.useState({open:!1,plugin:null}),[$,H]=C.useState(!1),q=async()=>{t(!0);try{const ee=await ke.getPlugins();n(ee)}catch(ee){re.error("Failed to load plugins: "+ee.message)}finally{t(!1)}};C.useEffect(()=>{q()},[]);const V=C.useMemo(()=>{let ee=r.allPlugins||[];if(o){const ue=o.toLowerCase();ee=ee.filter(Re=>{var ge,xe,Me;return((ge=Re.name)==null?void 0:ge.toLowerCase().includes(ue))||((xe=Re.description)==null?void 0:xe.toLowerCase().includes(ue))||((Me=Re.category)==null?void 0:Me.toLowerCase().includes(ue))})}return ee=ee.filter(ue=>!(ue.sourceType==="external"&&!v||ue.sourceType==="internal"&&!p)),ee=ee.filter(ue=>!(ue.installed&&!k||!ue.installed&&!y)),u.length>0&&(ee=ee.filter(ue=>u.includes(ue.category))),c.length>0&&(ee=ee.filter(ue=>c.includes(ue.marketplace))),ee.sort((ue,Re)=>{if(g==="installed"){if(ue.installed&&!Re.installed)return-1;if(!ue.installed&&Re.installed)return 1}if(g==="category"){const ge=(ue.category||"zzz").localeCompare(Re.category||"zzz");if(ge!==0)return ge}return ue.name.localeCompare(Re.name)}),ee},[r.allPlugins,o,v,p,k,y,u,c,g]),Y=ee=>{l(ue=>ue.includes(ee)?ue.filter(Re=>Re!==ee):[...ue,ee])},K=ee=>{f(ue=>ue.includes(ee)?ue.filter(Re=>Re!==ee):[...ue,ee])},U=async ee=>{P(ee);try{const ue=await ke.refreshMarketplace(ee);ue.success?(re.success(`Refreshed ${ee}`),await q()):re.error(ue.error||"Failed to refresh marketplace")}catch(ue){re.error("Failed to refresh: "+ue.message)}finally{P(null)}},D=async()=>{if(!A.repo.trim()){re.error("Please enter a repository URL");return}try{const ee=await ke.addMarketplace("",A.repo.trim());ee.success?(re.success("Marketplace added"),E({open:!1,repo:""}),await q()):re.error(ee.error||"Failed to add marketplace")}catch(ee){re.error("Failed to add marketplace: "+ee.message)}},M=async(ee,ue,Re)=>{H(!0);try{const ge=Re!==!0,xe=await ke.setPluginEnabled(ee,ue,ge);xe.success?(re.success(`Plugin ${ge?"enabled":"disabled"} for ${ee===fH.HOME?"~":ee}`),await q()):re.error(xe.error||"Failed to update plugin state")}catch(ge){re.error("Failed to update plugin: "+ge.message)}finally{H(!1)}},I=async(ee,ue)=>{H(!0);try{const Re=await ke.setPluginEnabled(ee,ue,null);Re.success?(re.success("Plugin override removed"),await q()):re.error(Re.error||"Failed to remove override")}catch(Re){re.error("Failed to update plugin: "+Re.message)}finally{H(!1)}},G=ee=>{B({open:!0,plugin:ee})},F=(r.allPlugins||[]).filter(ee=>ee.installed).length,ie=(r.allPlugins||[]).filter(ee=>!ee.installed).length,fe=(r.allPlugins||[]).filter(ee=>ee.sourceType==="internal").length,he=(r.allPlugins||[]).filter(ee=>ee.sourceType==="external").length,X=r.marketplaces||[],z=r.categories||[];return e?s.jsx("div",{className:"flex items-center justify-center h-64",children:s.jsx(dt,{className:"w-8 h-8 animate-spin text-primary"})}):s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"bg-indigo-50 dark:bg-indigo-950/30 border border-indigo-200 dark:border-indigo-800 rounded-lg p-4 flex items-start gap-3",children:[s.jsx(v1,{className:"w-5 h-5 text-indigo-600 dark:text-indigo-400 flex-shrink-0 mt-0.5"}),s.jsxs("div",{className:"text-sm text-indigo-800 dark:text-indigo-300",children:[s.jsx("p",{className:"font-medium",children:"Install plugins from Project Explorer"}),s.jsxs("p",{className:"text-indigo-600 dark:text-indigo-400 mt-1",children:["Use the ",s.jsx("kbd",{className:"px-1.5 py-0.5 bg-indigo-100 dark:bg-indigo-900 rounded text-xs",children:"+"}),' menu on any project and select "Install Plugins" to add plugins with project-level scope control.']})]})]}),s.jsxs("div",{className:"bg-white dark:bg-slate-950 rounded-xl border border-gray-200 dark:border-slate-800 overflow-hidden shadow-sm",children:[s.jsxs("div",{className:"p-5 border-b border-gray-200 dark:border-slate-700",children:[s.jsxs("div",{className:"flex items-center justify-between mb-4",children:[s.jsxs("h2",{className:"text-lg font-semibold text-gray-900 dark:text-white flex items-center gap-2",children:[s.jsx(Mi,{className:"w-5 h-5 text-indigo-600"}),"Plugin Directory",s.jsxs(st,{variant:"outline",className:"ml-2 font-normal",children:[V.length," of ",((ae=r.allPlugins)==null?void 0:ae.length)||0]})]}),s.jsx(de,{variant:"ghost",size:"sm",onClick:q,disabled:e,children:s.jsx(_r,{className:`w-4 h-4 ${e?"animate-spin":""}`})})]}),s.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(xl,{className:"w-4 h-4 absolute left-3 top-1/2 -translate-y-1/2 text-gray-400"}),s.jsx(ot,{value:o,onChange:ee=>d(ee.target.value),placeholder:"Search plugins...",className:"pl-9 bg-white dark:bg-slate-900 border-gray-300 dark:border-slate-700"})]}),s.jsxs(ni,{value:g,onValueChange:b,children:[s.jsx(ps,{className:"w-40",children:s.jsx(si,{placeholder:"Sort by"})}),s.jsxs(ms,{children:[s.jsx(Kt,{value:"name",children:"Name"}),s.jsx(Kt,{value:"installed",children:"Installed first"}),s.jsx(Kt,{value:"category",children:"Category"})]})]})]}),s.jsxs("div",{className:"flex items-center gap-4 flex-wrap",children:[s.jsxs(gs,{children:[s.jsx(vs,{asChild:!0,children:s.jsxs(de,{variant:"outline",size:"sm",className:"h-8 text-xs gap-1",children:[s.jsx(zc,{className:"w-3 h-3"}),"Marketplace",c.length>0&&s.jsx(st,{variant:"secondary",className:"ml-1 h-4 px-1 text-[10px]",children:c.length}),s.jsx(un,{className:"w-3 h-3 ml-1"})]})}),s.jsxs(Gn,{align:"start",className:"w-56",children:[s.jsx(Io,{className:"text-xs",children:"Filter by marketplace"}),s.jsx(dr,{}),X.length>0?X.map(ee=>s.jsx(al,{checked:c.includes(ee.name),onCheckedChange:()=>K(ee.name),children:ee.name},ee.name)):s.jsx("div",{className:"px-2 py-1.5 text-xs text-muted-foreground",children:"No marketplaces"}),s.jsx(dr,{}),s.jsxs(ft,{onClick:()=>L(!0),children:[s.jsx(Wn,{className:"w-3 h-3 mr-2"}),"Manage Marketplaces"]}),c.length>0&&s.jsxs(s.Fragment,{children:[s.jsx(dr,{}),s.jsx(ft,{onClick:()=>f([]),children:"Clear filters"})]})]})]}),s.jsxs(gs,{children:[s.jsx(vs,{asChild:!0,children:s.jsxs(de,{variant:"outline",size:"sm",className:"h-8 text-xs gap-1",children:[s.jsx(m1,{className:"w-3 h-3"}),"Category",u.length>0&&s.jsx(st,{variant:"secondary",className:"ml-1 h-4 px-1 text-[10px]",children:u.length}),s.jsx(un,{className:"w-3 h-3 ml-1"})]})}),s.jsxs(Gn,{align:"start",className:"w-48",children:[s.jsx(Io,{className:"text-xs",children:"Filter by category"}),s.jsx(dr,{}),z.map(ee=>s.jsx(al,{checked:u.includes(ee),onCheckedChange:()=>Y(ee),children:ee},ee)),u.length>0&&s.jsxs(s.Fragment,{children:[s.jsx(dr,{}),s.jsx(ft,{onClick:()=>l([]),children:"Clear filters"})]})]})]}),s.jsxs("div",{className:"flex items-center gap-4 text-xs",children:[s.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[s.jsx(pt,{checked:k,onCheckedChange:_,className:"h-4 w-7 data-[state=checked]:bg-green-600"}),s.jsxs("span",{className:"text-gray-600 dark:text-slate-400",children:["Installed (",F,")"]})]}),s.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[s.jsx(pt,{checked:y,onCheckedChange:x,className:"h-4 w-7 data-[state=checked]:bg-blue-600"}),s.jsxs("span",{className:"text-gray-600 dark:text-slate-400",children:["Available (",ie,")"]})]}),s.jsx("span",{className:"text-gray-300 dark:text-slate-600",children:"|"}),s.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[s.jsx(pt,{checked:p,onCheckedChange:h,className:"h-4 w-7 data-[state=checked]:bg-indigo-600"}),s.jsxs("span",{className:"text-gray-600 dark:text-slate-400 flex items-center gap-1",children:[s.jsx(h1,{className:"w-3 h-3"})," Anthropic (",fe,")"]})]}),s.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[s.jsx(pt,{checked:v,onCheckedChange:w,className:"h-4 w-7 data-[state=checked]:bg-orange-600"}),s.jsxs("span",{className:"text-gray-600 dark:text-slate-400 flex items-center gap-1",children:[s.jsx(Mo,{className:"w-3 h-3"})," Community (",he,")"]})]})]})]})]}),s.jsxs("div",{className:"p-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[V.map((ee,ue)=>{const Re=Pw[ee.category]||Pw.default,ge=ee.mcpServers?Object.keys(ee.mcpServers).length:0,xe=ee.lspServers?Object.keys(ee.lspServers).length:0,Me=`${ee.name}@${ee.marketplace}`,Ve=ee.enabledState,rt=(Ve==null?void 0:Ve.merged)===!0;return(Ve==null?void 0:Ve.merged)!==null&&(Ve==null||Ve.merged),s.jsxs(Pi.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{delay:Math.min(ue*.02,.3)},className:`rounded-lg border p-4 transition-all hover:shadow-md ${rt?"bg-emerald-50 border-emerald-200 dark:bg-emerald-950/20 dark:border-emerald-800":ee.installed?"bg-green-50 border-green-200 dark:bg-green-950/20 dark:border-green-800":"bg-white border-gray-200 dark:bg-slate-900 dark:border-slate-700"}`,children:[s.jsxs("div",{className:"flex items-start justify-between mb-2",children:[s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.jsx("h3",{className:"font-semibold text-gray-900 dark:text-white truncate",children:ee.name}),ee.sourceType==="external"&&s.jsx(Mo,{className:"w-3.5 h-3.5 text-orange-500 flex-shrink-0",title:"Community plugin"})]}),s.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[ee.installed&&s.jsxs(st,{variant:"outline",className:"text-green-600 border-green-300 dark:text-green-400 dark:border-green-700 text-[10px]",children:[s.jsx(rr,{className:"w-2.5 h-2.5 mr-0.5"}),"Installed"]}),rt&&s.jsxs(st,{variant:"outline",className:"text-emerald-600 border-emerald-300 dark:text-emerald-400 dark:border-emerald-700 text-[10px]",children:[s.jsx(Qy,{className:"w-2.5 h-2.5 mr-0.5"}),"Enabled"]})]})]}),s.jsxs("div",{className:"flex items-center gap-1",children:[ee.installed&&s.jsx(Ru,{children:s.jsxs(Xs,{children:[s.jsx(Js,{asChild:!0,children:s.jsx(de,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 opacity-60 hover:opacity-100",onClick:()=>G(ee),children:s.jsx(Wn,{className:"w-4 h-4"})})}),s.jsx(cs,{children:s.jsx("p",{children:"Configure per-directory"})})]})}),ee.homepage&&s.jsx(de,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 opacity-60 hover:opacity-100",onClick:()=>window.open(ee.homepage,"_blank"),children:s.jsx(su,{className:"w-4 h-4"})})]})]}),s.jsx("p",{className:"text-sm text-gray-600 dark:text-slate-400 mb-3 line-clamp-2",children:ee.description||"No description available"}),s.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-2",children:[ee.category&&s.jsx(st,{variant:"outline",className:`text-[10px] px-1.5 py-0 ${Re}`,children:ee.category}),ee.version&&s.jsxs("span",{className:"text-[10px] text-gray-400 dark:text-slate-500",children:["v",ee.version]})]}),(ge>0||xe>0||ee.commands)&&s.jsxs("div",{className:"flex items-center gap-3 text-[10px] text-gray-500 dark:text-slate-500 pt-2 border-t border-gray-100 dark:border-slate-800",children:[xe>0&&s.jsxs("span",{className:"flex items-center gap-1 bg-cyan-50 dark:bg-cyan-900/20 px-1.5 py-0.5 rounded",children:[s.jsx(Hn,{className:"w-3 h-3 text-cyan-600"}),xe," LSP"]}),ge>0&&s.jsxs("span",{className:"flex items-center gap-1 bg-blue-50 dark:bg-blue-900/20 px-1.5 py-0.5 rounded",children:[s.jsx(Di,{className:"w-3 h-3 text-blue-600"}),ge," MCP"]}),ee.commands&&s.jsxs("span",{className:"flex items-center gap-1 bg-green-50 dark:bg-green-900/20 px-1.5 py-0.5 rounded",children:[s.jsx(zt,{className:"w-3 h-3 text-green-600"}),"Commands"]})]})]},Me)}),V.length===0&&s.jsxs("div",{className:"col-span-full text-center py-12 text-gray-500 dark:text-slate-400",children:[s.jsx(Mi,{className:"w-12 h-12 mx-auto mb-3 opacity-30"}),s.jsx("p",{className:"font-medium",children:"No plugins found"}),s.jsx("p",{className:"text-sm mt-1",children:"Try adjusting your filters or search query"}),(u.length>0||c.length>0||o)&&s.jsx(de,{variant:"link",size:"sm",onClick:()=>{l([]),f([]),d("")},className:"mt-2",children:"Clear all filters"})]})]})]}),s.jsx(Tt,{open:A.open,onOpenChange:ee=>E({...A,open:ee}),children:s.jsxs(kt,{className:"max-w-lg",children:[s.jsxs(jt,{children:[s.jsxs(Nt,{className:"flex items-center gap-2",children:[s.jsx(zc,{className:"w-5 h-5 text-purple-600"}),"Add Plugin Marketplace"]}),s.jsx(fr,{children:"Add a marketplace from a GitHub repository URL or local path."})]}),s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{children:[s.jsx("label",{className:"text-sm font-medium text-gray-700 dark:text-slate-300",children:"Repository URL or Path"}),s.jsx(ot,{value:A.repo,onChange:ee=>E({...A,repo:ee.target.value}),placeholder:"owner/repo or full GitHub URL",className:"mt-1"}),s.jsx("p",{className:"text-xs text-gray-500 dark:text-slate-400 mt-2",children:"Supported formats:"}),s.jsxs("ul",{className:"text-xs text-gray-500 dark:text-slate-400 mt-1 space-y-1 ml-2",children:[s.jsxs("li",{children:[s.jsx("code",{className:"bg-gray-100 dark:bg-slate-700 px-1 rounded",children:"owner/repo"})," — GitHub shorthand"]}),s.jsxs("li",{children:[s.jsx("code",{className:"bg-gray-100 dark:bg-slate-700 px-1 rounded",children:"https://github.com/owner/repo"})," — Full URL"]}),s.jsxs("li",{children:[s.jsx("code",{className:"bg-gray-100 dark:bg-slate-700 px-1 rounded",children:"/local/path"})," — Local directory"]})]}),s.jsxs("p",{className:"text-xs text-gray-400 dark:text-slate-500 mt-2",children:["Search GitHub for ",s.jsx("code",{className:"bg-gray-100 dark:bg-slate-700 px-1 rounded",children:"claude-plugins"})," to find community marketplaces."]})]})}),s.jsxs(Dt,{children:[s.jsx(de,{variant:"ghost",onClick:()=>E({open:!1,repo:""}),children:"Cancel"}),s.jsxs(de,{onClick:D,className:"bg-purple-600 hover:bg-purple-700 text-white",children:[s.jsx(_t,{className:"w-4 h-4 mr-2"}),"Add Marketplace"]})]})]})}),s.jsx(Tt,{open:N,onOpenChange:L,children:s.jsxs(kt,{className:"max-w-2xl",children:[s.jsxs(jt,{children:[s.jsxs(Nt,{className:"flex items-center gap-2",children:[s.jsx(zc,{className:"w-5 h-5 text-purple-600"}),"Plugin Marketplaces",s.jsx(st,{variant:"outline",className:"ml-2 font-normal",children:X.length})]}),s.jsx(fr,{children:"Manage your plugin marketplaces. Add external marketplaces to discover more plugins."})]}),s.jsx("div",{className:"py-4",children:X.length>0?s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:X.map(ee=>{var Re,ge,xe;const ue=(((Re=ee.plugins)==null?void 0:Re.length)||0)+(((ge=ee.externalPlugins)==null?void 0:ge.length)||0);return s.jsxs("div",{className:"bg-purple-50 dark:bg-purple-950/20 rounded-lg border border-purple-200 dark:border-purple-800 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("h3",{className:"font-semibold text-purple-900 dark:text-purple-200",children:ee.name}),s.jsx(de,{variant:"ghost",size:"sm",onClick:()=>U(ee.name),disabled:j===ee.name,className:"h-7 w-7 p-0",children:s.jsx(_r,{className:`w-4 h-4 text-purple-600 dark:text-purple-400 ${j===ee.name?"animate-spin":""}`})})]}),s.jsx("p",{className:"text-sm text-purple-700 dark:text-purple-300 mb-2 truncate",children:typeof ee.source=="string"?ee.source:((xe=ee.source)==null?void 0:xe.repo)||"Unknown source"}),s.jsxs("div",{className:"flex items-center justify-between text-xs text-purple-600 dark:text-purple-400",children:[s.jsxs("span",{children:[ue," plugins"]}),ee.lastUpdated&&s.jsxs("span",{children:["Updated: ",new Date(ee.lastUpdated).toLocaleDateString()]})]})]},ee.name)})}):s.jsxs("div",{className:"text-center py-8 text-gray-500 dark:text-slate-400",children:[s.jsx(zc,{className:"w-12 h-12 mx-auto mb-3 opacity-30"}),s.jsx("p",{children:"No marketplaces configured."}),s.jsx("p",{className:"text-sm mt-1",children:"Add a marketplace to discover plugins."})]})}),s.jsxs(Dt,{children:[s.jsx(de,{variant:"outline",onClick:()=>L(!1),children:"Close"}),s.jsxs(de,{onClick:()=>{L(!1),E({open:!0,repo:""})},className:"bg-purple-600 hover:bg-purple-700 text-white",children:[s.jsx(_t,{className:"w-4 h-4 mr-2"}),"Add Marketplace"]})]})]})}),s.jsx(Tt,{open:O.open,onOpenChange:ee=>B({...O,open:ee}),children:s.jsxs(kt,{className:"max-w-lg",children:[s.jsxs(jt,{children:[s.jsxs(Nt,{className:"flex items-center gap-2",children:[s.jsx(qy,{className:"w-5 h-5 text-emerald-600"}),"Configure Plugin: ",(ne=O.plugin)==null?void 0:ne.name]}),s.jsx(fr,{children:"Enable or disable this plugin for specific directories. Child directories inherit parent settings unless overridden."})]}),s.jsxs("div",{className:"space-y-3 py-4 max-h-[400px] overflow-y-auto",children:[(we=(oe=(J=O.plugin)==null?void 0:J.enabledState)==null?void 0:oe.perDir)==null?void 0:we.map((ee,ue)=>{const Re=`${O.plugin.name}@${O.plugin.marketplace}`,ge=ee.enabled!==null&&ee.enabled!==void 0,xe=ee.enabled===!0,Me=ee.enabled===!1;let Ve=null;if(!ge&&ue>0)for(let rt=ue-1;rt>=0;rt--){const Lt=O.plugin.enabledState.perDir[rt];if(Lt.enabled!==null&&Lt.enabled!==void 0){Ve=Lt.enabled;break}}return s.jsxs("div",{className:`flex items-center justify-between p-3 rounded-lg border ${xe?"bg-emerald-50 border-emerald-200 dark:bg-emerald-950/30 dark:border-emerald-800":Me?"bg-red-50 border-red-200 dark:bg-red-950/30 dark:border-red-800":"bg-gray-50 border-gray-200 dark:bg-slate-800/50 dark:border-slate-700"}`,children:[s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("code",{className:"text-sm font-mono text-gray-700 dark:text-slate-300 truncate",children:ee.label}),!ge&&Ve!==null&&s.jsxs(st,{variant:"outline",className:"text-[10px] text-gray-500",children:["inherited: ",Ve?"on":"off"]})]}),ge&&s.jsx("p",{className:"text-[10px] text-gray-500 dark:text-slate-400 mt-0.5",children:xe?"Explicitly enabled":"Explicitly disabled"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[ge&&s.jsx(Ru,{children:s.jsxs(Xs,{children:[s.jsx(Js,{asChild:!0,children:s.jsx(de,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 text-gray-400 hover:text-gray-600",onClick:()=>I(ee.dir,Re),disabled:$,children:s.jsx(r5,{className:"w-4 h-4"})})}),s.jsx(cs,{children:s.jsx("p",{children:"Remove override (inherit from parent)"})})]})}),s.jsxs("div",{className:"flex items-center gap-1 border rounded-lg overflow-hidden",children:[s.jsx(de,{variant:xe?"default":"ghost",size:"sm",className:`h-7 px-2 rounded-none ${xe?"bg-emerald-600 hover:bg-emerald-700 text-white":""}`,onClick:()=>M(ee.dir,Re,!1),disabled:$||xe,children:s.jsx(Qy,{className:"w-3 h-3"})}),s.jsx(de,{variant:Me?"default":"ghost",size:"sm",className:`h-7 px-2 rounded-none ${Me?"bg-red-600 hover:bg-red-700 text-white":""}`,onClick:()=>M(ee.dir,Re,!0),disabled:$||Me,children:s.jsx(y5,{className:"w-3 h-3"})})]})]})]},ee.dir)}),(!((Ue=(Le=O.plugin)==null?void 0:Le.enabledState)!=null&&Ue.perDir)||O.plugin.enabledState.perDir.length===0)&&s.jsxs("div",{className:"text-center py-8 text-gray-500 dark:text-slate-400",children:[s.jsx(qy,{className:"w-12 h-12 mx-auto mb-3 opacity-30"}),s.jsx("p",{children:"No config hierarchy found."}),s.jsx("p",{className:"text-sm mt-1",children:"Create a .claude/mcps.json in your project first."})]})]}),s.jsx(Dt,{children:s.jsx(de,{variant:"ghost",onClick:()=>B({open:!1,plugin:null}),children:"Done"})})]})})]})}function mH({projects:e=[],onWorkstreamChange:t}){var Ce,Oe;const[r,n]=C.useState([]),[o,d]=C.useState(null),[u,l]=C.useState(!0),[c,f]=C.useState(null),[p,h]=C.useState(!1),[v,w]=C.useState(null),[k,_]=C.useState(!1),[y,x]=C.useState(null),[g,b]=C.useState(""),[j,P]=C.useState(""),[A,E]=C.useState([]),[N,L]=C.useState(!1),[O,B]=C.useState(!1),[$,H]=C.useState({isInstalled:!1,loading:!0}),[q,V]=C.useState(!1),[Y,K]=C.useState(null),[U,D]=C.useState([]),[M,I]=C.useState(!1),[G,F]=C.useState(()=>{try{return JSON.parse(localStorage.getItem("dismissedWorkstreamSuggestions")||"[]")}catch{return[]}}),[ie,fe]=C.useState(null),[he,X]=C.useState(!1);C.useEffect(()=>{ge(),z(),ae()},[]);const z=async()=>{try{const Z=await ke.getWorkstreamHookStatus();H({...Z,loading:!1})}catch(Z){H({isInstalled:!1,loading:!1,error:Z.message})}},ae=async()=>{try{I(!0);const[Z,ve,He]=await Promise.all([ke.getActivitySummary(),ke.getWorkstreamSuggestions(),ke.getSmartSyncStatus()]);K(Z),D(ve.suggestions||[]),fe(He)}catch(Z){console.log("Activity data not available:",Z.message)}finally{I(!1)}},ne=async Z=>{X(!0);try{const ve=await ke.smartSyncUpdateSettings({enabled:Z});ve.settings&&(fe(He=>({...He,...ve.settings})),re.success(Z?"Smart Sync enabled":"Smart Sync disabled"))}catch{re.error("Failed to update Smart Sync settings")}finally{X(!1)}},J=async Z=>{X(!0);try{const ve=await ke.smartSyncUpdateSettings({autoSwitchThreshold:Z});ve.settings&&(fe(He=>({...He,...ve.settings})),re.success(`Auto-switch threshold set to ${Z}%`))}catch{re.error("Failed to update threshold")}finally{X(!1)}},oe=Z=>{b(Z.name),E([...Z.projects]),P(`# Auto-generated workstream based on activity patterns
2198
2198
 
2199
2199
  These projects are frequently worked on together.`),h(!0)},we=Z=>{E(ve=>ve.filter(He=>He!==Z))},Le=Z=>{A.includes(Z)||E(ve=>[...ve,Z]),B(!1)},Ue=Z=>{const ve=Z.projects.sort().join("|"),He=[...G,ve];F(He),localStorage.setItem("dismissedWorkstreamSuggestions",JSON.stringify(He)),D(Ge=>Ge.filter(ct=>ct.projects.sort().join("|")!==ve)),re.success("Suggestion dismissed")},ee=U.filter(Z=>{const ve=Z.projects.sort().join("|");return!G.includes(ve)}),ue=async()=>{if(confirm("Clear activity data older than 30 days?"))try{const Z=await ke.clearActivity(30);Z.success&&(re.success(`Cleared ${Z.cleared} old entries`),ae())}catch(Z){re.error("Failed to clear activity: "+Z.message)}},Re=async()=>{V(!0);try{const Z=await ke.installWorkstreamHook();Z.success?(re.success(Z.message),H(ve=>({...ve,isInstalled:!0}))):re.error(Z.error||"Failed to install hook")}catch(Z){re.error("Failed to install hook: "+Z.message)}finally{V(!1)}},ge=async()=>{try{l(!0);const Z=await ke.getWorkstreams();n(Z.workstreams||[]),d(Z.activeId)}catch{re.error("Failed to load workstreams")}finally{l(!1)}},xe=async()=>{if(!g.trim()){re.error("Name is required");return}L(!0);try{const Z=await ke.createWorkstream(g.trim(),A,j);Z.success?(n(ve=>[...ve,Z.workstream]),o||d(Z.workstream.id),re.success(`Created workstream: ${g}`),h(!1),b(""),P(""),E([]),D(ve=>ve.filter(He=>He.name!==g.trim()))):re.error(Z.error||"Failed to create workstream")}catch(Z){re.error("Failed to create workstream: "+Z.message)}finally{L(!1)}},Me=async Z=>{try{const ve=await ke.setActiveWorkstream(Z.id);ve.success?(d(Z.id),re.success(`Switched to: ${Z.name}`),t==null||t(ve.workstream)):re.error(ve.error||"Failed to switch workstream")}catch(ve){re.error("Failed to switch workstream: "+ve.message)}},Ve=async Z=>{var ve;if(confirm(`Delete workstream "${Z.name}"?
@@ -2208,8 +2208,6 @@ Defaulting to \`null\`.`}var F2=L2,kH=O2;const $2=C.forwardRef(({className:e,val
2208
2208
 
2209
2209
  Think of Claude Config as your **control center** for Claude Code (and other AI coding tools). Instead of manually editing JSON files or remembering command-line flags, you get a friendly UI to manage everything.
2210
2210
 
2211
- ![Welcome to Claude Config](/tutorial/welcome-modal.png)
2212
-
2213
2211
  ### What can you do here?
2214
2212
 
2215
2213
  - **Register projects** you're working on
@@ -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-tKKSA-Bs.js"></script>
22
+ <script type="module" crossorigin src="/assets/index-CY-eKHdY.js"></script>
23
23
  <link rel="stylesheet" crossorigin href="/assets/index-D7ljoxN0.css">
24
24
  </head>
25
25
  <body>
Binary file