plexus-agent-config 0.0.7 → 0.0.8
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 +1 -1
- package/vendor/plexus-agent-config-core/dist/agents/adapters/codex.d.ts.map +1 -1
- package/vendor/plexus-agent-config-core/dist/agents/adapters/codex.js +23 -7
- package/vendor/plexus-agent-config-core/dist/agents/adapters/codex.js.map +1 -1
- package/vendor/plexus-agent-config-core/dist/agents/adapters/json-mcp.d.ts.map +1 -1
- package/vendor/plexus-agent-config-core/dist/agents/adapters/json-mcp.js +11 -3
- package/vendor/plexus-agent-config-core/dist/agents/adapters/json-mcp.js.map +1 -1
- package/vendor/plexus-agent-config-core/dist/agents/inspect.d.ts +2 -0
- package/vendor/plexus-agent-config-core/dist/agents/inspect.d.ts.map +1 -1
- package/vendor/plexus-agent-config-core/dist/agents/inspect.js +6 -1
- package/vendor/plexus-agent-config-core/dist/agents/inspect.js.map +1 -1
- package/vendor/plexus-agent-config-core/dist/import/from-agents.d.ts.map +1 -1
- package/vendor/plexus-agent-config-core/dist/import/from-agents.js +6 -18
- package/vendor/plexus-agent-config-core/dist/import/from-agents.js.map +1 -1
- package/vendor/plexus-agent-config-core/dist/store/paths.d.ts.map +1 -1
- package/vendor/plexus-agent-config-core/dist/store/paths.js +1 -2
- package/vendor/plexus-agent-config-core/dist/store/paths.js.map +1 -1
- package/vendor/plexus-agent-config-core/dist/store/skills.d.ts.map +1 -1
- package/vendor/plexus-agent-config-core/dist/store/skills.js +61 -9
- package/vendor/plexus-agent-config-core/dist/store/skills.js.map +1 -1
- package/vendor/plexus-agent-config-core/package.json +1 -1
- package/vendor/plexus-agent-config-web/.next/BUILD_ID +1 -1
- package/vendor/plexus-agent-config-web/.next/app-path-routes-manifest.json +7 -7
- package/vendor/plexus-agent-config-web/.next/build-manifest.json +2 -2
- package/vendor/plexus-agent-config-web/.next/prerender-manifest.json +3 -3
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.html +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/about/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/agents/[id]/page.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/api/debug/route.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/backups/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/debug/page.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/debug/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/mirror/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/rules/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/spread/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/app-paths-manifest.json +7 -7
- package/vendor/plexus-agent-config-web/.next/server/chunks/554.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/chunks/921.js +4 -4
- package/vendor/plexus-agent-config-web/.next/server/middleware-build-manifest.js +1 -1
- package/vendor/plexus-agent-config-web/.next/server/pages/500.html +1 -1
- package/vendor/plexus-agent-config-web/.next/server/server-reference-manifest.json +1 -1
- package/vendor/plexus-agent-config-web/.next/static/chunks/app/agents/[id]/page-e83c3c5de9ba09c2.js +1 -0
- package/vendor/plexus-agent-config-web/.next/static/chunks/app/{layout-31e6e6e2c4466423.js → layout-66bb77db982413d6.js} +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.d.ts.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.js +23 -7
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/adapters/codex.js.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.d.ts.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.js +11 -3
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/adapters/json-mcp.js.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/inspect.d.ts +2 -0
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/inspect.d.ts.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/inspect.js +6 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/agents/inspect.js.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/import/from-agents.d.ts.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/import/from-agents.js +6 -18
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/import/from-agents.js.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/store/paths.d.ts.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/store/paths.js +1 -2
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/store/paths.js.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/store/skills.d.ts.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/store/skills.js +61 -9
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/dist/store/skills.js.map +1 -1
- package/vendor/plexus-agent-config-web/node_modules/plexus-agent-config-core/package.json +1 -1
- package/vendor/plexus-agent-config-web/package.json +1 -1
- package/vendor/plexus-agent-config-web/.next/static/chunks/app/agents/[id]/page-02c1c68007fb9b26.js +0 -1
- /package/vendor/plexus-agent-config-web/.next/static/{03IYfj2PeWSkzrqtRyC0l → 3oZxRMzj6ZICuj5g2RZmX}/_buildManifest.js +0 -0
- /package/vendor/plexus-agent-config-web/.next/static/{03IYfj2PeWSkzrqtRyC0l → 3oZxRMzj6ZICuj5g2RZmX}/_ssgManifest.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
exports.id=921,exports.ids=[921],exports.modules={1871:(a,b,c)=>{"use strict";c.d(b,{A0:()=>e,s0:()=>f});var d=c(51455);async function e(a){await d.mkdir(a,{recursive:!0})}async function f(a){try{return await d.access(a),!0}catch{return!1}}},45628:(a,b,c)=>{"use strict";c.r(b),c.d(b,{AGENT_DISPLAY_NAMES:()=>d.kp,AGENT_PATHS:()=>d.R6,AGENT_ROOTS:()=>d.Qp,ALL_AGENTS:()=>d.dT,COLLISION_BACKUP_ROOT:()=>
|
|
2
|
-
${g.stringify(
|
|
1
|
+
exports.id=921,exports.ids=[921],exports.modules={1871:(a,b,c)=>{"use strict";c.d(b,{A0:()=>e,s0:()=>f});var d=c(51455);async function e(a){await d.mkdir(a,{recursive:!0})}async function f(a){try{return await d.access(a),!0}catch{return!1}}},45628:(a,b,c)=>{"use strict";c.r(b),c.d(b,{AGENT_DISPLAY_NAMES:()=>d.kp,AGENT_PATHS:()=>d.R6,AGENT_ROOTS:()=>d.Qp,ALL_AGENTS:()=>d.dT,COLLISION_BACKUP_ROOT:()=>aF.Rd,CustomAgentSchema:()=>M,LEGACY_RESIDUE_ROOT:()=>aF.Tz,PLEXUS_PATHS:()=>d.BF,PLEXUS_ROOT:()=>d.nV,SPREAD_AGENTS:()=>bo,__ALL_AGENTS:()=>bu,adapters:()=>ay,addCustomAgent:()=>U,applyImport:()=>bj,applyRulesToAgents:()=>aP,applySpread:()=>bn,cleanupLegacyResidue:()=>aF.P3,codexAdapter:()=>ap,collectDebugSnapshot:()=>bB,deleteSkill:()=>C,detachRulesFromAgent:()=>aR,detectAgents:()=>Y,ensureStoreScaffolding:()=>i,formatDebugSnapshot:()=>bF,getCustomAgent:()=>T,getEffectiveMcp:()=>bp,getEffectiveSkills:()=>bq,getRulesStatus:()=>aO,importRulesFromAgent:()=>aQ,inspectAgent:()=>aC,instructionsForAgent:()=>aB,isAgentInstalled:()=>aa,joinTeam:()=>bf,layerRoot:()=>j,listAgentCatalog:()=>ah,listBackups:()=>aF.Cw,listCustomAgents:()=>S,makeJsonMcpAdapter:()=>as,mergeMCP:()=>J,mergeSkills:()=>K,normalizeConfig:()=>m,parseSkillMarkdown:()=>y,previewImport:()=>bi,previewMerged:()=>aT,previewShareAll:()=>a7,previewSpread:()=>bm,pullTeam:()=>bg,quarantineCollision:()=>aF.quarantineCollision,readAllMCP:()=>s,readAllSkills:()=>D,readConfig:()=>n,readEffectiveRules:()=>H,readMCP:()=>q,readRules:()=>G,readSkills:()=>A,readTextFile:()=>aD,removeCustomAgent:()=>V,resolveSkillSourceDir:()=>E,restoreSnapshot:()=>aF.n5,rulesFile:()=>F,runShareAll:()=>ba,runSync:()=>aS,serializeSkillMarkdown:()=>z,snapshotAgentConfigs:()=>aF.RC,snapshotSingleFile:()=>aF.RV,teamStatus:()=>bh,toggleMcpAgent:()=>br,toggleSkillAgent:()=>bs,writeConfig:()=>o,writeMCP:()=>r,writePersonalRules:()=>I,writeSkill:()=>B,writeTextFile:()=>aE});var d=c(66882),e=c(51455),f=c(76760),g=c(12049),h=c(1871);async function i(){for(let a of(await (0,h.A0)(d.BF.root),["team","personal"])){let b="team"===a?d.BF.team:d.BF.personal;await (0,h.A0)(f.join(b,d.BF.mcpDirRel)),await (0,h.A0)(f.join(b,d.BF.skillsDirRel)),await (0,h.A0)(f.join(b,"rules"))}if(!await (0,h.s0)(d.BF.config)){let a={agents:Object.fromEntries(d.dT.map(a=>[a,!0])),syncStrategy:"symlink"};await e.writeFile(d.BF.config,g.stringify(a),"utf8")}}function j(a){return"team"===a?d.BF.team:d.BF.personal}function k(){return{agents:Object.fromEntries(d.dT.map(a=>[a,!0])),syncStrategy:"symlink"}}function l(a){return"object"==typeof a&&null!==a}function m(a){if(!l(a))throw Error("config must be an object");let b=k(),c=a.syncStrategy;if(void 0!==c&&"symlink"!==c&&"copy"!==c)throw Error("syncStrategy must be 'symlink' or 'copy'");let e={...b.agents};if(void 0!==a.agents){if(!l(a.agents))throw Error("agents must be an object");for(let b of d.dT){let c=a.agents[b];if(void 0!==c&&"boolean"!=typeof c)throw Error(`agents.${b} must be a boolean`);"boolean"==typeof c&&(e[b]=c)}}let f={agents:e,syncStrategy:"copy"===c?"copy":"symlink"};return"string"==typeof a.teamRepo&&a.teamRepo.trim()&&(f.teamRepo=a.teamRepo.trim()),f}async function n(){await i();let a=await e.readFile(d.BF.config,"utf8");try{return m(g.parse(a))}catch{return k()}}async function o(a){await i();let b=m(a),c=`${d.BF.config}.${process.pid}.${Date.now()}.tmp`;await e.writeFile(c,g.stringify(b),"utf8"),await e.rename(c,d.BF.config)}function p(a){return f.join(j(a),d.BF.mcpDirRel,"servers.yaml")}async function q(a){await i();let b=p(a);if(!await (0,h.s0)(b))return[];let c=await e.readFile(b,"utf8"),d=g.parse(c)??{};return(Array.isArray(d?.servers)?d.servers:[]).map(b=>({...b,layer:a}))}async function r(a,b){await i();let c=b.map(({layer:a,...b})=>b);await e.writeFile(p(a),g.stringify({servers:c}),"utf8")}async function s(){let[a,b]=await Promise.all([q("team"),q("personal")]);return[...a,...b]}function t(a){return f.join(j(a),d.BF.skillsDirRel)}let u=/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;function v(a){return Object.keys(a.frontmatter).length>0}function w(a){return"string"==typeof a&&a.trim()?a.trim():void 0}function x(a){let b=w(a);if(b)return b;if(!Array.isArray(a))return;let c=a.map(a=>w(a)).filter(a=>!!a);return c.length>0?c.join(" "):void 0}function y(a){let b=a.match(u);if(!b)return{frontmatter:{},body:a};try{return{frontmatter:g.parse(b[1])??{},body:b[2]}}catch{return{frontmatter:function(a){let b={};for(let c of a.split("\n")){let a=c.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);if(!a)continue;let[,d,e]=a;if(!d||void 0===e)continue;let f=e.trim();f&&(b[d]=f.replace(/^(['"])(.*)\1$/,"$2"))}return b}(b[1]),body:b[2]}}}function z(a){let b=y(a.body),c=v(b)?b.frontmatter:{},d=v(b)?b.body:a.body,e=w(a.name)??w(a.frontmatter?.name)??w(c.name)??a.id,f=x(c.description)??x(a.description)??x(a.frontmatter?.description)??e,h={...c,...a.frontmatter??{},name:e,description:f,plexus_id:a.id,plexus_enabled_agents:a.enabledAgents};return`---
|
|
2
|
+
${g.stringify(h).trim()}
|
|
3
3
|
---
|
|
4
|
-
${
|
|
5
|
-
`,"utf8")}async function P(){let{agents:a}=await N();return a}async function Q(a){return(await P()).find(b=>b.id===a)}async function R(a){var b;let c={...a,instructionFile:f.resolve((b=a.instructionFile).startsWith("~/")||"~"===b?f.join(process.env.HOME??"",b.slice(1)):b),createdAt:new Date().toISOString()},d=J.safeParse(c);if(!d.success)throw Error(`Invalid custom agent: ${d.error.errors.map(a=>a.message).join("; ")}`);if(M.has(d.data.id))throw Error(`Agent id '${d.data.id}' is reserved for a built-in agent.`);let e=await N();if(e.agents.some(a=>a.id===d.data.id))throw Error(`Custom agent '${d.data.id}' already exists.`);return e.agents.push(d.data),await O(e),d.data}async function S(a){let b=await N(),c=b.agents.length;return b.agents=b.agents.filter(b=>b.id!==a),b.agents.length!==c&&(await O(b),!0)}var T=c(73024),U=c(48161);function V(){return d.dT.map(a=>({id:a,displayName:d.kp[a],rootDir:d.Qp[a],installed:Z(a),capabilities:d.R6[a]}))}let W=U.homedir(),X={"claude-code":[],cursor:"darwin"===process.platform?["/Applications/Cursor.app",f.join(W,"Applications","Cursor.app")]:[],codex:"darwin"===process.platform?["/Applications/Codex.app",f.join(W,"Applications","Codex.app")]:[],"gemini-cli":[],"qwen-code":[],"factory-droid":[]},Y={"claude-code":["claude"],cursor:["cursor"],codex:["codex"],"gemini-cli":["gemini"],"qwen-code":["qwen"],"factory-droid":["factory-droid","droid"]};function Z(a){if("1"===process.env.PLEXUS_DETECT_CONFIG_ONLY){let b;return(b=d.R6[a],[d.Qp[a],b.mcpPath,b.skillsDir]).some(a=>(0,T.existsSync)(a))}return!!X[a].some(a=>(0,T.existsSync)(a))||Y[a].some(a=>(function(a){let b=process.env.PATH;if(!b)return!1;let c="win32"===process.platform?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let d of b.split(f.delimiter))if(d)for(let b of c){let c=f.join(d,`${a}${b}`);try{if((0,T.statSync)(c).isFile())return"win32"===process.platform||function(a){try{return(0,T.accessSync)(a,T.constants.X_OK),!0}catch{return!1}}(c)}catch{}}return!1})(a))}let $=U.homedir();function _(a){return!!a&&T.existsSync(a)}function aa(){return"darwin"===process.platform?f.join($,"Library","Application Support","Code","User"):"win32"===process.platform?f.join(process.env.APPDATA??$,"Code","User"):f.join($,".config","Code","User")}function ab(a){return f.join(aa(),"globalStorage",a)}function ac(){return"darwin"===process.platform?f.join($,"Library","Application Support","Zed"):f.join($,".config","zed")}let ad=[{id:"windsurf",displayName:"Windsurf Cascade",support:"manual",managed:!1,rootDir:f.join($,".codeium","windsurf"),mcpPath:f.join($,".codeium","windsurf","mcp_config.json"),instructionFile:f.join($,".codeium","windsurf","AGENTS.md"),note:"Catalog only for now. Windsurf uses its own Rules surface; add as custom if you want Plexus to track one instruction file."},{id:"kiro",displayName:"Kiro",support:"manual",managed:!1,rootDir:f.join($,".kiro"),mcpPath:f.join($,".kiro","settings","mcp.json"),instructionFile:f.join($,".kiro","steering","plexus.md"),note:"Catalog only for now. Kiro has user-level MCP and steering files, but Plexus does not write them yet."},{id:"vscode-copilot",displayName:"VS Code / GitHub Copilot",support:"manual",managed:!1,rootDir:aa(),mcpPath:f.join(aa(),"mcp.json"),instructionFile:f.join(aa(),"AGENTS.md"),note:"VS Code stores user MCP separately from repo instructions. Add as custom if you keep a user instruction file."},{id:"cline",displayName:"Cline",support:"manual",managed:!1,rootDir:ab("saoudrizwan.claude-dev"),instructionFile:f.join(ab("saoudrizwan.claude-dev"),"AGENTS.md"),note:"VS Code extension storage varies by editor profile; use custom paths if yours differs."},{id:"roo-code",displayName:"Roo Code",support:"manual",managed:!1,rootDir:ab("rooveterinaryinc.roo-cline"),instructionFile:f.join(ab("rooveterinaryinc.roo-cline"),"AGENTS.md"),note:"VS Code extension storage varies by editor profile; use custom paths if yours differs."},{id:"kilo-code",displayName:"Kilo Code",support:"manual",managed:!1,rootDir:f.join($,".config","kilo"),mcpPath:f.join($,".config","kilo","kilo.jsonc"),instructionFile:f.join($,".config","kilo","AGENTS.md"),note:"Kilo uses JSONC and extension/project scopes; catalog entry is manual until Plexus can round-trip JSONC."},{id:"continue",displayName:"Continue",support:"manual",managed:!1,rootDir:f.join($,".continue"),instructionFile:f.join($,".continue","AGENTS.md"),note:"Continue configuration is flexible and often project-specific; add a custom instruction file if you use one."},{id:"aider",displayName:"Aider",support:"instructions-only",managed:!1,instructionFile:f.join($,".aider.conf.yml"),note:"Aider is config-file based. Plexus can track a file, but does not translate MCP or skills for Aider."},{id:"amp",displayName:"Amp",support:"manual",managed:!1,rootDir:f.join($,".config","amp"),instructionFile:f.join($,".config","amp","AGENTS.md"),note:"Amp supports agent instruction files, but local config layout can vary."},{id:"openhands",displayName:"OpenHands",support:"manual",managed:!1,rootDir:f.join($,".openhands"),instructionFile:f.join($,".openhands","AGENTS.md"),note:"OpenHands is usually project/container configured. Use custom paths for your local setup."},{id:"zed-ai",displayName:"Zed AI",support:"manual",managed:!1,rootDir:ac(),instructionFile:f.join(ac(),"AGENTS.md"),note:"Catalog only. Zed and extension settings vary across platforms."}];function ae(){return[...d.dT.map(a=>{let b=d.R6[a];return{id:a,displayName:d.kp[a],support:"full",managed:!0,installed:Z(a),rootDir:d.Qp[a],mcpPath:b.mcpPath,skillsDir:b.skillsDir,note:"Built-in adapter. Plexus can sync Rules, MCP servers, and Skills."}}),...ad.map(a=>({...a,installed:_(a.mcpPath)||_(a.instructionFile)}))]}var af=c(69067);async function ag(a){await e.mkdir(a,{recursive:!0})}async function ah(a){try{return await e.access(a),!0}catch{return!1}}async function ai(a){try{return(await e.lstat(a)).isSymbolicLink()}catch{return!1}}async function aj(a,b,d){let g;if(await ag(f.dirname(b)),await ah(b))if(await ai(b))await e.unlink(b);else{let{quarantineCollision:a}=await Promise.resolve().then(c.bind(c,92071)),d=await a({agent:"unknown",sourcePath:b});d&&(g=d)}if("symlink"===d)try{let c=(await e.lstat(a)).isDirectory()?"dir":"file";return await e.symlink(a,b,c),{via:"symlink",backedUp:g}}catch{}return(await e.lstat(a)).isDirectory()?await e.cp(a,b,{recursive:!0}):await e.copyFile(a,b),{via:"copy",backedUp:g}}function ak(a){return{agent:a,applied:{mcp:0,skills:0},warnings:[],errors:[]}}async function al(a,b,c){await ag(f.dirname(b));let d=null;try{d=await e.lstat(b)}catch{}if(d)if(d.isSymbolicLink()){try{let c=await e.readlink(b);if((f.isAbsolute(c)?c:f.resolve(f.dirname(b),c))===f.resolve(a))return"symlink"}catch{}await e.unlink(b)}else await e.unlink(b);if("symlink"===c)try{return await e.symlink(a,b,"file"),"symlink"}catch{}return await e.copyFile(a,b),"copy"}let am={id:"codex",async apply(a){let b=ak("codex"),c=d.R6.codex;try{await ag(f.dirname(c.mcpPath));let d=a.mcp.filter(a=>a.enabledAgents.includes("codex")),g=new Set(d.map(a=>a.id)),h=new Set(a.mcp.filter(a=>!a.enabledAgents.includes("codex")).map(a=>a.id)),i={};try{let a=await e.readFile(c.mcpPath,"utf8");i=af.parse(a)}catch{}let j=i.mcp_servers??{},k={};for(let[a,b]of Object.entries(j))!h.has(a)&&(g.has(a)||(k[a]=b));let l={...k};for(let a of d)l[a.id]={command:a.command,...a.args?{args:a.args}:{},...a.env?{env:a.env}:{}};i.mcp_servers=l,await e.writeFile(c.mcpPath,af.stringify(i),"utf8"),b.applied.mcp=d.length}catch(a){b.errors.push(`Codex MCP write failed: ${a.message}`)}try{await ag(c.skillsDir);let d=a.skills.filter(a=>a.enabledAgents.includes("codex"));for(let b of new Set(a.skills.filter(a=>!a.enabledAgents.includes("codex")).map(a=>a.id))){let a=f.join(c.skillsDir,b);try{(await e.lstat(a)).isSymbolicLink()?await e.unlink(a):await e.rm(a,{recursive:!0,force:!0})}catch{}}for(let e of d){let d=a.skillSourcePaths.get(e.id);if(!d)continue;let g=f.join(c.skillsDir,e.id);try{await aj(d,g,a.syncStrategy),b.applied.skills+=1}catch(a){b.errors.push(`Skill ${e.id} sync failed: ${a.message}`)}}}catch(a){b.errors.push(`Codex skills sync failed: ${a.message}`)}return b}};function an(a){return{id:a,async apply(b){let c=ak(a),e=d.R6[a];if(e.mcp){let d=e.mcpFileMode??"shared";try{await ag(f.dirname(e.mcpPath));let g=b.mcp.filter(b=>b.enabledAgents.includes(a));"exclusive"===d?await aq(a,b.mcp,g,b.syncStrategy):await ap(e.mcpPath,b.mcp,g),c.applied.mcp=g.length}catch(a){c.errors.push(`MCP write failed: ${a.message}`)}}if(e.skills)try{await ag(e.skillsDir);let d=b.skills.filter(b=>b.enabledAgents.includes(a));for(let c of new Set(b.skills.filter(b=>!b.enabledAgents.includes(a)).map(a=>a.id))){let a=f.join(e.skillsDir,c);await ao(a)}for(let a of d){let d=b.skillSourcePaths.get(a.id);if(!d){c.warnings.push(`No source path for skill: ${a.id}`);continue}let g=f.join(e.skillsDir,a.id);try{await aj(d,g,b.syncStrategy),c.applied.skills+=1}catch(b){c.errors.push(`Skill ${a.id} sync failed: ${b.message}`)}}}catch(a){c.errors.push(`Skills sync failed: ${a.message}`)}return c}}}async function ao(a){try{(await e.lstat(a)).isSymbolicLink()?await e.unlink(a):await e.rm(a,{recursive:!0,force:!0})}catch{}}async function ap(a,b,c){c.map(a=>a.id);let d=new Set(b.map(a=>a.id)),f={};try{let b=await e.readFile(a,"utf8");f=JSON.parse(b)}catch{}let g=f.mcpServers??{},h={};for(let[a,b]of Object.entries(g))d.has(a)||(h[a]=b);let i={...h};for(let a of c)i[a.id]=ar(a);let j={...f,mcpServers:i};await e.writeFile(a,JSON.stringify(j,null,2),"utf8")}async function aq(a,b,c,g){let h=d.R6[a];await ag(d.BF.mcpCache);let i=f.join(d.BF.mcpCache,`${a}.json`),j=new Set(b.map(a=>a.id)),k={};try{let a=await e.readFile(h.mcpPath,"utf8");k=JSON.parse(a)}catch{}let l=k.mcpServers??{},m={};for(let[a,b]of Object.entries(l))j.has(a)||(m[a]=b);let n={...m};for(let a of c)n[a.id]=ar(a);await e.writeFile(i,JSON.stringify({mcpServers:n},null,2),"utf8"),await al(i,h.mcpPath,g)}function ar(a){return{...a.command?{command:a.command}:{},...a.args?{args:a.args}:{},...a.env?{env:a.env}:{},...a.url?{url:a.url}:{},...a.httpUrl?{httpUrl:a.httpUrl}:{},...a.headers?{headers:a.headers}:{}}}let as={"claude-code":an("claude-code"),cursor:an("cursor"),codex:am,"gemini-cli":an("gemini-cli"),"qwen-code":an("qwen-code"),"factory-droid":an("factory-droid")};async function at(a){let b={path:a,exists:!1,isSymlink:!1};try{let c=await e.lstat(a);if(b.exists=!0,b.isSymlink=c.isSymbolicLink(),b.isSymlink)try{let c=await e.readlink(a);b.linkTarget=f.isAbsolute(c)?c:f.resolve(f.dirname(a),c)}catch{}try{let c=await e.stat(a);b.size=c.size,b.mtime=c.mtime.toISOString()}catch{}}catch{}return b}async function au(a){if(!await (0,h.s0)(a))return[];try{let b=await e.readdir(a,{withFileTypes:!0}),c=[];for(let d of b){let b;if(d.name.startsWith(".")||d.name.includes(".plexus-backup-"))continue;let g=f.join(a,d.name),i=!1;try{if(i=(await e.lstat(g)).isSymbolicLink()){let a=await e.readlink(g);b=f.isAbsolute(a)?a:f.resolve(f.dirname(g),a)}}catch{continue}let j=f.join(g,"SKILL.md"),k=await (0,h.s0)(j);c.push({id:d.name,path:g,isSymlink:i,linkTarget:b,hasSkillMd:k})}return c.sort((a,b)=>a.id.localeCompare(b.id))}catch{return[]}}function av(a){let b=d.Qp[a];switch(a){case"claude-code":return[{label:"CLAUDE.md (user-level memory)",filename:"CLAUDE.md",abs:f.join(b,"CLAUDE.md")}];case"cursor":case"codex":case"factory-droid":return[{label:"AGENTS.md (user-level)",filename:"AGENTS.md",abs:f.join(b,"AGENTS.md")}];case"gemini-cli":return[{label:"GEMINI.md (user-level)",filename:"GEMINI.md",abs:f.join(b,"GEMINI.md")}];case"qwen-code":return[{label:"QWEN.md (user-level)",filename:"QWEN.md",abs:f.join(b,"QWEN.md")}]}}async function aw(a){let b=d.R6[a],c=d.Qp[a],e=Z(a),[f,g]=await Promise.all([at(b.mcpPath),at(b.skillsDir)]),h=b.skills?await au(b.skillsDir):[],i=[];for(let b of av(a))i.push({label:b.label,filename:b.filename,status:await at(b.abs)});return{id:a,displayName:d.kp[a],rootDir:c,installed:e,mcpFile:f,mcpFileMode:b.mcpFileMode??"shared",skillsDir:g,skills:h,instructionFiles:i}}async function ax(a){return e.readFile(a,"utf8")}async function ay(a,b){await e.mkdir(f.dirname(a),{recursive:!0}),await e.writeFile(a,b,"utf8")}var az=c(92071);async function aA(a){let b=d.R6[a];if(!await (0,h.s0)(b.mcpPath))return[];try{let a=await e.readFile(b.mcpPath,"utf8");if("json"===b.mcpFormat){let b=JSON.parse(a).mcpServers??{};return Object.entries(b).map(([a,b])=>{var c,d;return c=a,d=b,{id:c,command:String(d?.command??""),args:Array.isArray(d?.args)?d.args.map(String):void 0,env:aB(d?.env),url:"string"==typeof d?.url?d.url:void 0,httpUrl:"string"==typeof d?.httpUrl?d.httpUrl:void 0,headers:aB(d?.headers)}})}let c=af.parse(a).mcp_servers??{};return Object.entries(c).map(([a,b])=>({id:a,command:String(b?.command??""),args:Array.isArray(b?.args)?b.args.map(String):void 0,env:b?.env&&"object"==typeof b.env?b.env:void 0}))}catch{return[]}}function aB(a){if(!(!a||"object"!=typeof a||Array.isArray(a)))return Object.fromEntries(Object.entries(a).map(([a,b])=>[a,String(b)]))}async function aC(a){let b=d.R6[a];if(!await (0,h.s0)(b.skillsDir))return[];let c=f.resolve(d.BF.root)+f.sep;try{let g=await e.readdir(b.skillsDir,{withFileTypes:!0}),i=[];for(let j of g){let g=f.join(b.skillsDir,j.name);if(j.isSymbolicLink()){let a;try{let c=await e.readlink(g);a=f.resolve(f.isAbsolute(c)?c:f.join(b.skillsDir,c))}catch{continue}if(!(a===f.resolve(d.BF.root)||a.startsWith(c)))continue;try{if(!(await e.stat(g)).isDirectory())continue}catch{continue}}else if(!j.isDirectory())continue;let k=f.join(g,"SKILL.md");if(!await (0,h.s0)(k))continue;let l=await e.readFile(k,"utf8"),{frontmatter:m,body:n}=v(l);i.push({id:j.name,name:m.name??j.name,description:m.description??void 0,body:n,frontmatter:m,layer:"personal",enabledAgents:[a]})}return i}catch{return[]}}async function aD(a){let b=Object.fromEntries(d.dT.map(a=>[a,{mcp:0,skills:0}])),c=new Map,e=new Map;for(let a of d.dT){let d=await aA(a);for(let e of(b[a].mcp=d.length,d)){let b=c.get(e.id);b?b.sources.includes(a)||b.sources.push(a):c.set(e.id,{first:{command:e.command,args:e.args,env:e.env,url:e.url,httpUrl:e.httpUrl,headers:e.headers},sources:[a]})}let f=await aC(a);for(let c of(b[a].skills=f.length,f)){let b=e.get(c.id);b?b.sources.includes(a)||b.sources.push(a):e.set(c.id,{first:c,sources:[a]})}}let f=new Map(a.storeMcp.map(a=>[a.id,a])),g=new Map(a.storeSkills.map(a=>[a.id,a])),h=[];for(let[a,b]of c){let c=f.get(a);if(c){let d=b.sources.filter(a=>!c.enabledAgents.includes(a));if(0===d.length)continue;h.push({kind:"extend",id:a,displayName:a,agentsToAdd:d,currentAgents:c.enabledAgents})}else h.push({kind:"new",item:{id:a,command:b.first.command,args:b.first.args,env:b.first.env,url:b.first.url,httpUrl:b.first.httpUrl,headers:b.first.headers,layer:"personal",enabledAgents:[...b.sources]},sourceAgents:b.sources})}let i=[];for(let[a,b]of e){let c=g.get(a);if(c){let d=b.sources.filter(a=>!c.enabledAgents.includes(a));if(0===d.length)continue;i.push({kind:"extend",id:a,displayName:b.first.name,agentsToAdd:d,currentAgents:c.enabledAgents})}else i.push({kind:"new",item:{...b.first,enabledAgents:[...b.sources]},sourceAgents:b.sources})}return{mcp:h,skills:i,perAgent:b}}function aE(a){let[b]=av(a);if(!b)throw Error(`No instruction file target is configured for agent ${a}`);return b.abs}async function aF(a){try{let b=await e.readlink(a);return f.isAbsolute(b)?b:f.resolve(f.dirname(a),b)}catch{return}}async function aG(a,b,c,g,h){let i=aE(a),j={agent:a,displayName:d.kp[a],targetPath:i,installed:g,enabled:h,exists:!1,isSymlink:!1,inSync:!1};try{let a=await e.lstat(i);j.exists=!0,j.isSymlink=a.isSymbolicLink(),j.isSymlink&&(j.linkTarget=await aF(i))}catch{return j}if(!b||null===c)return j;if(j.isSymlink)return j.inSync=!!(j.linkTarget&&f.resolve(j.linkTarget)===f.resolve(b)),j;try{j.inSync=await e.readFile(i,"utf8")===c}catch{j.inSync=!1}return j}async function aH(a){let b;await (0,h.A0)(f.dirname(a.targetPath));try{if((await e.lstat(a.targetPath)).isSymbolicLink())await e.unlink(a.targetPath);else{let c=await (0,az.quarantineCollision)({agent:a.agent,sourcePath:a.targetPath});c&&(b=c)}}catch{}if("symlink"===a.strategy)try{return await e.symlink(a.sourcePath,a.targetPath,"file"),{via:"symlink",backedUp:b}}catch{}return await e.copyFile(a.sourcePath,a.targetPath),{via:"copy",backedUp:b}}async function aI(){let a=await E(),b=await n(),c=new Map(V().map(a=>[a.id,a.installed])),e=a?{exists:!0,layer:a.layer,path:a.path,content:a.content,updatedAt:a.updatedAt}:{exists:!1,layer:null,path:null,content:null};return{canonical:e,agents:await Promise.all(d.dT.map(a=>aG(a,e.path,e.content,c.get(a)??!1,!1!==b.agents[a])))}}async function aJ(a=d.dT){let b=await D("personal");if(!b){let a=await E();a&&(await F(a.content),b=await D("personal"))}if(!b)throw Error(`Cannot apply rules: personal canonical rules file does not exist at ${C("personal")}`);let c=await n(),f=new Map(V().map(a=>[a.id,a.installed])),g=[];for(let h of a){let a=aE(h);if(!f.get(h)){g.push({agent:h,targetPath:a,applied:!1,skipped:!0,reason:`${d.kp[h]} is not installed.`});continue}if(!1===c.agents[h]){g.push({agent:h,targetPath:a,applied:!1,skipped:!0,reason:`${d.kp[h]} is disabled in Plexus settings.`});continue}try{let d=null;try{await e.lstat(a),d=await (0,az.RV)(a,`Apply Plexus rules to ${h}`)}catch{}let f=await aH({agent:h,sourcePath:b.path,targetPath:a,strategy:c.syncStrategy});g.push({agent:h,targetPath:a,applied:!0,via:f.via,backedUp:f.backedUp,snapshotDir:d})}catch(b){g.push({agent:h,targetPath:a,applied:!1,error:b.message})}}return g}async function aK(a){let b,c=aE(a);try{b=await e.readFile(c,"utf8")}catch(b){throw Error(`Cannot import rules from ${a}: failed to read ${c}: ${b.message}`)}await F(b)}async function aL(a){let b=aE(a),c=await n(),g=V();if(!g.find(b=>b.id===a)?.installed)return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} is not installed.`};if(!1===c.agents[a])return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} is disabled in Plexus settings.`};try{let c;if(!(await e.lstat(b)).isSymbolicLink())return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} already has a local instruction file.`};let g=await D("personal");if(!g)return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:"No personal rules baseline exists for Plexus to detach from."};let h=await aF(b);if(!h||f.resolve(h)!==f.resolve(g.path))return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]}'s instruction file is a symlink, but Plexus does not own that link.`};try{c=await e.readFile(b,"utf8")}catch{c=g.content}let i=await (0,az.RV)(b,`Detach Plexus rules from ${a}`);return await e.unlink(b),await e.writeFile(b,c,"utf8"),{agent:a,targetPath:b,detached:!0,snapshotDir:i}}catch(c){if("ENOENT"===c.code)return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} has no instruction file to detach.`};return{agent:a,targetPath:b,detached:!1,error:c.message}}}async function aM(a){let b=new Date().toISOString(),c=await n(),e=V(),f=await (0,az.RC)({reason:a?`partial sync: ${a.join(",")}`:"full sync"}).catch(()=>void 0);await (0,az.P3)().catch(()=>void 0);let[g,h,i,j]=await Promise.all([q("team"),q("personal"),x("team"),x("personal")]),k=G(g,h),l=H(i,j),m=new Map;for(let a of l)m.set(a.id,B(a.layer,a.id));let o=(a&&a.length>0?a:d.dT).filter(a=>{let b=e.find(b=>b.id===a);return b?.installed&&!1!==c.agents[a]});return{results:await Promise.all(o.map(a=>as[a].apply({agentId:a,mcp:k,skills:l,skillSourcePaths:m,syncStrategy:c.syncStrategy??"symlink"}))),startedAt:b,finishedAt:new Date().toISOString(),backup:f?.dir}}async function aN(){let[a,b]=await Promise.all([s(),A()]);return{mcp:G(a.filter(a=>"team"===a.layer),a.filter(a=>"personal"===a.layer)),skills:H(b.filter(a=>"team"===a.layer),b.filter(a=>"personal"===a.layer))}}let aO=["codex","claude-code","cursor","gemini-cli","qwen-code","factory-droid"];async function aP(a){let b=await n(),c=V();return(a&&a.length>0?a:d.dT).filter(a=>{let d=c.find(b=>b.id===a);return d?.installed&&!1!==b.agents[a]})}function aQ(a,b){return{...a,enabledAgents:[...b]}}function aR(a){return[...new Set(a)].sort((a,b)=>aO.indexOf(a)-aO.indexOf(b)||a.localeCompare(b))}function aS(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(b&&"object"==typeof b){let c={};for(let d of Object.keys(b).sort()){let e=b[d];void 0!==e&&(c[d]=a(e))}return c}return b}(a))}function aT(a,b,c,d){let e=a.get(b.id)??{id:b.id,variants:[]},f=e.variants.find(a=>a.fingerprint===d);f?f.sources.includes(c)||f.sources.push(c):e.variants.push({item:b,sources:[c],fingerprint:d}),a.set(b.id,e)}function aU(a){return Math.min(...a.sources.map(a=>aO.indexOf(a)))}function aV(a,b){if(b){let c=a.find(a=>a.sources.includes(b));if(c)return c}let c=[...a].sort((a,b)=>b.sources.length-a.sources.length||aU(a)-aU(b)||a.fingerprint.localeCompare(b.fingerprint))[0];if(!c)throw Error("Cannot choose from an empty native config group");return c}async function aW(a){let b=[];for(let c of a){let[a]=av(c);if(a)try{let d=await e.readFile(a.abs,"utf8");if(0===d.trim().length)continue;b.push({agent:c,content:d,fingerprint:aS(d)})}catch{}}return b}function aX(a,b){if(b){let c=a.find(a=>a.agent===b);if(c)return c}return[...a].sort((a,b)=>aO.indexOf(a.agent)-aO.indexOf(b.agent)||a.agent.localeCompare(b.agent))[0]}async function aY(a){let b=new Map,c=new Map,d=await aW(a),e=[];for(let f of a){let[a,g]=await Promise.all([aA(f),aC(f)]);for(let c of a){let a={id:c.id,command:c.command,args:c.args,env:c.env,url:c.url,httpUrl:c.httpUrl,headers:c.headers,layer:"personal",enabledAgents:[f]};aT(b,a,f,aS({command:a.command,args:a.args??[],env:a.env??{},url:a.url??"",httpUrl:a.httpUrl??"",headers:a.headers??{}}))}for(let a of g){let b={...a,layer:"personal",enabledAgents:[f]};aT(c,b,f,function(a){let b=Object.fromEntries(Object.entries(a.frontmatter??{}).filter(([a])=>"plexus_enabled_agents"!==a&&"plexus_id"!==a));return aS({name:a.name,description:a.description??"",body:a.body,frontmatter:b})}(b))}let h=d.some(a=>a.agent===f);e.push({agent:f,mcp:a.length,skills:g.length,rules:h,total:a.length+g.length+ +!!h})}return{sourceSummaries:e,mcpGroups:b,skillGroups:c,rulesSources:d}}function aZ(a,b){let c=[];for(let d of a.values()){if(d.variants.length<=1)continue;let a=aV(d.variants,b);c.push({id:d.id,sources:aR(d.variants.flatMap(a=>a.sources)),preferredAgent:function(a,b){if(b&&a.sources.includes(b))return b;let[c]=aR(a.sources);if(!c)throw Error("Cannot summarize a native config variant with no sources");return c}(a,b)})}return c.sort((a,b)=>a.id.localeCompare(b.id))}function a$(a){return[...a.values()].filter(a=>1===a.variants.length).length}function a_(a,b,c){var d;let e=(d=b.sourceSummaries,[...d].filter(a=>a.total>0).sort((a,b)=>b.total-a.total||aO.indexOf(a.agent)-aO.indexOf(b.agent)||a.agent.localeCompare(b.agent))[0]?.agent),f=new Set(b.rulesSources.map(a=>a.fingerprint)),g=aX(b.rulesSources,c),h=aZ(b.mcpGroups,c),i=aZ(b.skillGroups,c),j=f.size>1;return{targetAgents:a,sources:b.sourceSummaries,recommendedPrimaryAgent:e,selectedPrimaryAgent:c,conflictCount:h.length+i.length+ +!!j,mcp:{safe:a$(b.mcpGroups),conflicts:h},skills:{safe:a$(b.skillGroups),conflicts:i},rules:{sources:aR(b.rulesSources.map(a=>a.agent)),conflict:j,preferredAgent:g?.agent}}}async function a0(a){let b=await aP(a?.only),c=await aY(b),d=a_(b,c,a?.preferredAgent),e=a?.preferredAgent??d.recommendedPrimaryAgent,f=a_(b,c,e);return{targetAgents:b,state:c,plan:f,primaryAgent:e}}async function a1(a){return(await a0(a)).plan}async function a2(a,b,c){if(0===a.length)return{imported:{mcpWritten:0,mcpExtended:0,skillsWritten:0,skillsExtended:0},mcpShared:0,skillsShared:0};let[d,e,f,g]=await Promise.all([q("team"),q("personal"),x("team"),x("personal")]),h=G(d,e),i=H(f,g),j=function(a,b,c){let d={mcpWritten:0,mcpExtended:0,skillsWritten:0,skillsExtended:0};for(let c of a.mcpGroups.keys())b.has(c)?d.mcpExtended+=1:d.mcpWritten+=1;for(let b of a.skillGroups.keys())c.has(b)?d.skillsExtended+=1:d.skillsWritten+=1;return d}(b,new Set(h.map(a=>a.id)),new Set(i.map(a=>a.id))),k=new Map;for(let b of h)k.set(b.id,aQ({...b,layer:"personal"},a));for(let d of b.mcpGroups.values()){if(k.has(d.id))continue;let b=aV(d.variants,c);k.set(d.id,aQ({...b.item,layer:"personal"},a))}let l=new Map;for(let b of i)l.set(b.id,aQ({...b,layer:"personal"},a));for(let d of b.skillGroups.values()){if(l.has(d.id))continue;let b=aV(d.variants,c);l.set(d.id,aQ({...b.item,layer:"personal"},a))}let m=[...k.values()].sort((a,b)=>a.id.localeCompare(b.id)),n=[...l.values()].sort((a,b)=>a.id.localeCompare(b.id));for(let a of(await r("personal",m),n))await y(a);return{imported:j,mcpShared:m.length,skillsShared:n.length}}async function a3(a,b){if(await D("personal"))return;let c=await E();if(c)return void await F(c.content);let d=aX(a.rulesSources,b);if(d)return await F(d.content),d.agent}async function a4(a){let b=Array.isArray(a)?{only:a}:a??{},c=new Date().toISOString(),{targetAgents:d,state:e,plan:f,primaryAgent:g}=await a0(b),[{imported:h,mcpShared:i,skillsShared:j},k]=await Promise.all([a2(d,e,g),a3(e,g)]),[l,m]=await Promise.all([aM(d),D("personal").then(a=>a?aJ(d):void 0)]);return{mode:"share-all",targetAgents:d,imported:h,shared:{mcp:i,skills:j},plan:f,preferredAgent:g,conflictsResolved:f.conflictCount,rules:m?{applied:m,importedFrom:k}:{applied:[],skipped:"No rules baseline exists yet. Add rules in the Rules page or keep an instruction file in one installed agent, then sync again."},results:l.results,startedAt:c,finishedAt:new Date().toISOString(),backup:l.backup}}var a5=c(31421);let a6=(0,c(57975).promisify)(a5.execFile);async function a7(a){return(0,h.s0)(`${a}/.git`)}async function a8(){let[a,b,c]=await Promise.all([q("team"),x("team"),D("team")]);return{mcp:a.length,skills:b.length,rules:null!==c}}async function a9(a){let b=d.BF.team;if(await (0,h.s0)(b)){if(await a7(b))try{let{stdout:c}=await a6("git",["-C",b,"remote","get-url","origin"]),d=c.trim();if(d!==a)return{ok:!1,message:`Team layer already subscribed to ${d}. Run 'plexus leave' first.`};await a6("git",["-C",b,"pull","--ff-only"]);let e=await n();return e.teamRepo=a,await o(e),{ok:!0,message:"Team layer refreshed."}}catch(a){return{ok:!1,message:`Git pull failed: ${a.message}`}}let c=`${b}.plexus-backup-${Date.now()}`;await e.rename(b,c)}try{await a6("git",["clone",a,b]);let c=await n();return c.teamRepo=a,await o(c),{ok:!0,message:`Cloned team repo to ${b}.`}}catch(a){return{ok:!1,message:`Git clone failed: ${a.message}`}}}async function ba(){let a=d.BF.team;if(!await a7(a))return{ok:!1,message:"Team layer is not a git repo. Run 'plexus join <url>' first."};try{return await a6("git",["-C",a,"pull","--ff-only"]),{ok:!0,message:"Team layer up-to-date."}}catch(a){return{ok:!1,message:`Git pull failed: ${a.message}`}}}async function bb(){let a=d.BF.team;if(!await a7(a))return{subscribed:!1};try{let b=(await a6("git",["-C",a,"remote","get-url","origin"])).stdout.trim(),c=0,d=0;try{await a6("git",["-C",a,"fetch","--quiet"]);let{stdout:b}=await a6("git",["-C",a,"rev-list","--left-right","--count","HEAD...@{upstream}"]),[e,f]=b.trim().split(/\s+/).map(a=>Number.parseInt(a,10));c=e||0,d=f||0}catch{}let e=await a8().catch(()=>void 0);return{subscribed:!0,repoUrl:b,hasUpstreamUpdate:d>0,ahead:c,behind:d,summary:e}}catch{return{subscribed:!1}}}async function bc(){let[a,b]=await Promise.all([s(),A()]);return aD({storeMcp:a,storeSkills:b})}async function bd(a){let b=a??await bc(),c=0,d=0,e=0,f=0;if(b.mcp.length>0){let a=await q("personal"),e=await q("team"),f=new Map(a.map(a=>[a.id,a])),g=new Map(e.map(a=>[a.id,a])),h=[...a],i=new Set;for(let a of b.mcp)if("new"===a.kind)h.push(a.item),i.add(a.item.id),c+=1;else{let b=f.get(a.id);if(b)b.enabledAgents=Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]));else{let b=g.get(a.id);b&&h.push({...b,layer:"personal",enabledAgents:Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]))})}d+=1}await r("personal",h)}if(b.skills.length>0){let a=await x("personal"),c=await x("team"),d=new Map(a.map(a=>[a.id,a])),g=new Map(c.map(a=>[a.id,a]));for(let a of b.skills)if("new"===a.kind)await y(a.item),e+=1;else{let b=d.get(a.id);if(b)await y({...b,enabledAgents:Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]))});else{let b=g.get(a.id);b&&await y({...b,layer:"personal",enabledAgents:Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]))})}f+=1}}return{mcpWritten:c,skillsWritten:e,mcpExtended:d,skillsExtended:f}}async function be(a){let b=new Map,c=G(await q("team"),await q("personal"));for(let d of c)d.enabledAgents.includes(a)&&b.set(d.id,d);for(let d of(await aD({storeMcp:c,storeSkills:[]})).mcp)"new"===d.kind&&d.sourceAgents.includes(a)&&(b.has(d.item.id)||b.set(d.item.id,{...d.item,enabledAgents:[a]}));return b}async function bf(a){let b=new Map,c=H(await x("team"),await x("personal"));for(let d of c)d.enabledAgents.includes(a)&&b.set(d.id,d);for(let d of(await aD({storeMcp:[],storeSkills:c})).skills)"new"===d.kind&&d.sourceAgents.includes(a)&&(b.has(d.item.id)||b.set(d.item.id,{...d.item,enabledAgents:[a]}));return b}async function bg(a,b){if(a===b)return{from:a,to:b,mcp:[],skills:[]};let[c,d,e,f,g,h]=await Promise.all([be(a),be(b),bf(a),bf(b),s(),A()]),i=new Set(g.map(a=>a.id)),j=new Set(h.map(a=>a.id)),k=[];for(let[a,b]of c)d.has(a)||k.push({item:b,inStore:i.has(a)});let l=[];for(let[a,b]of e)f.has(a)||l.push({item:b,inStore:j.has(a)});return{from:a,to:b,mcp:k,skills:l}}async function bh(a){let{from:b,to:c}=a;if(b===c)return{mcpAdded:0,skillsAdded:0};let d=await bg(b,c),e=new Set(a.mcpIds??d.mcp.map(a=>a.item.id)),f=new Set(a.skillIds??d.skills.map(a=>a.item.id)),g=0;if(e.size>0){let a=await q("personal"),b=await q("team"),f=new Map(a.map(a=>[a.id,a])),h=new Map(b.map(a=>[a.id,a])),i=[...a];for(let a of d.mcp){if(!e.has(a.item.id))continue;let b=f.get(a.item.id),d=h.get(a.item.id);b?b.enabledAgents.includes(c)||(b.enabledAgents=[...b.enabledAgents,c]):d?i.push({...d,layer:"personal",enabledAgents:Array.from(new Set([...d.enabledAgents,c]))}):i.push({...a.item,layer:"personal",enabledAgents:Array.from(new Set([...a.item.enabledAgents,c]))}),g+=1}await r("personal",i)}let h=0;if(f.size>0){let a=await x("personal"),b=await x("team"),e=new Map(a.map(a=>[a.id,a])),g=new Map(b.map(a=>[a.id,a]));for(let a of d.skills){if(!f.has(a.item.id))continue;let b=e.get(a.item.id),d=g.get(a.item.id);b?b.enabledAgents.includes(c)||await y({...b,enabledAgents:[...b.enabledAgents,c]}):d?await y({...d,layer:"personal",enabledAgents:Array.from(new Set([...d.enabledAgents,c]))}):await y({...a.item,layer:"personal",enabledAgents:Array.from(new Set([...a.item.enabledAgents,c]))}),h+=1}}let i=await n(),j=V().find(a=>a.id===c);if(!j?.installed||!1===i.agents[c])return{mcpAdded:g,skillsAdded:h};let k=G(await q("team"),await q("personal")),l=H(await x("team"),await x("personal")),m=new Map;for(let a of l)m.set(a.id,B(a.layer,a.id));let o=await (0,az.RC)({reason:`mirror ${b} to ${c}`});return{mcpAdded:g,skillsAdded:h,syncResult:await as[c].apply({agentId:c,mcp:k,skills:l,skillSourcePaths:m,syncStrategy:i.syncStrategy??"symlink"}),backup:o.dir}}let bi=d.dT;async function bj(){let[a,b]=await Promise.all([q("team"),q("personal")]),c=G(a,b),d=new Set(a.map(a=>a.id)),e=new Set(b.map(a=>a.id)),f=await aD({storeMcp:[],storeSkills:[]}),g=new Map;for(let a of f.mcp)"new"===a.kind&&g.set(a.item.id,{sources:a.sourceAgents,first:a.item});let h=new Set([...c.map(a=>a.id),...g.keys()]),i=[];for(let a of h){let b,f=c.find(b=>b.id===a),h=g.get(a),j=h?.sources??[],k=f?.enabledAgents??[],l=Array.from(new Set([...j,...k]));b=e.has(a)?"personal":d.has(a)?"team":"native";let m=f??h.first;i.push({id:a,command:m.command,args:m.args,env:m.env,authority:b,effectiveAgents:l,nativeAgents:j,enabledAgents:f?k:void 0})}return i.sort((a,b)=>a.id.localeCompare(b.id)),i}async function bk(){let[a,b]=await Promise.all([x("team"),x("personal")]),c=H(a,b),d=new Set(a.map(a=>a.id)),e=new Set(b.map(a=>a.id)),f=await aD({storeMcp:[],storeSkills:[]}),g=new Map;for(let a of f.skills)"new"===a.kind&&g.set(a.item.id,{sources:a.sourceAgents,first:a.item});let h=new Set([...c.map(a=>a.id),...g.keys()]),i=[];for(let a of h){let b,f=c.find(b=>b.id===a),h=g.get(a),j=h?.sources??[],k=f?.enabledAgents??[],l=Array.from(new Set([...j,...k]));b=e.has(a)?"personal":d.has(a)?"team":"native";let m=f??h.first;i.push({id:a,name:m.name,description:m.description,authority:b,effectiveAgents:l,nativeAgents:j,enabledAgents:f?k:void 0})}return i.sort((a,b)=>a.id.localeCompare(b.id)),i}async function bl(a){let b=await q("personal"),c=await q("team"),d=b.findIndex(b=>b.id===a.id),e=c.find(b=>b.id===a.id),f=[...b],g=[a.agent];if(d>=0){let b={...f[d]};a.enabled?b.enabledAgents.includes(a.agent)||(b.enabledAgents=[...b.enabledAgents,a.agent]):b.enabledAgents=b.enabledAgents.filter(b=>b!==a.agent),f[d]=b}else if(e){let b=a.enabled?Array.from(new Set([...e.enabledAgents,a.agent])):e.enabledAgents.filter(b=>b!==a.agent);f.push({...e,layer:"personal",enabledAgents:b})}else{let b=(await aD({storeMcp:[],storeSkills:[]})).mcp.find(b=>"new"===b.kind&&b.item.id===a.id);if(!b||"new"!==b.kind)return{ok:!1,message:`Item ${a.id} not found in any agent's native config`};let c=a.enabled?Array.from(new Set([...b.sourceAgents,a.agent])):b.sourceAgents.filter(b=>b!==a.agent);f.push({...b.item,layer:"personal",enabledAgents:c}),g=Array.from(new Set([...b.sourceAgents,a.agent]))}await r("personal",f);let h=await (0,az.RC)({reason:`toggleMcpAgent ${a.id} ${a.agent} ${a.enabled}`}).catch(()=>void 0),i=[];for(let a of g){let b=await bn(a);b&&i.push(b)}return{ok:!0,syncResult:i[0],message:h?.dir}}async function bm(a){let b=await x("personal"),c=await x("team"),d=b.find(b=>b.id===a.id),e=c.find(b=>b.id===a.id),f=[a.agent];if(d){let b=a.enabled?Array.from(new Set([...d.enabledAgents,a.agent])):d.enabledAgents.filter(b=>b!==a.agent);await y({...d,enabledAgents:b})}else if(e){let b=a.enabled?Array.from(new Set([...e.enabledAgents,a.agent])):e.enabledAgents.filter(b=>b!==a.agent);await y({...e,layer:"personal",enabledAgents:b})}else{let b=(await aD({storeMcp:[],storeSkills:[]})).skills.find(b=>"new"===b.kind&&b.item.id===a.id);if(!b||"new"!==b.kind)return{ok:!1,message:`Skill ${a.id} not found in any agent's native config`};let c=a.enabled?Array.from(new Set([...b.sourceAgents,a.agent])):b.sourceAgents.filter(b=>b!==a.agent);await y({...b.item,layer:"personal",enabledAgents:c}),f=Array.from(new Set([...b.sourceAgents,a.agent]))}let g=await (0,az.RC)({reason:`toggleSkillAgent ${a.id} ${a.agent} ${a.enabled}`}).catch(()=>void 0),h=[];for(let a of f){let b=await bn(a);b&&h.push(b)}return{ok:!0,syncResult:h[0],message:g?.dir}}async function bn(a){let b=await n(),c=V().find(b=>b.id===a);if(!c?.installed||!1===b.agents[a])return;let[d,e]=await Promise.all([q("team"),q("personal")]),[f,g]=await Promise.all([x("team"),x("personal")]),h=G(d,e),i=H(f,g),j=new Map;for(let a of i)j.set(a.id,B(a.layer,a.id));return as[a].apply({agentId:a,mcp:h,skills:i,skillSourcePaths:j,syncStrategy:b.syncStrategy??"symlink"})}let bo=d.dT,bp=U.homedir();function bq(a){return a===bp?"~":a.startsWith(`${bp}/`)?`~/${a.slice(bp.length+1)}`:a}async function br(a){let b,c={path:a,display:bq(a),exists:!1,kind:"missing"};try{b=await e.lstat(a)}catch{return c}if(c.exists=!0,b.isSymbolicLink()){c.kind="symlink";try{let b=await e.readlink(a);c.linkTarget=f.isAbsolute(b)?b:f.resolve(f.dirname(a),b),c.linkTargetExists=await (0,h.s0)(c.linkTarget)}catch{}try{let b=await e.stat(a);c.size=b.size,c.mtime=b.mtime.toISOString()}catch{}}else if(b.isDirectory()){c.kind="dir",c.mtime=b.mtime.toISOString();try{c.entryCount=(await e.readdir(a)).filter(a=>!a.startsWith(".")&&!a.includes(".plexus-backup-")).length}catch{}}else c.kind="file",c.size=b.size,c.mtime=b.mtime.toISOString();return c}async function bs(a){let b;if(!await (0,h.s0)(a))return[];try{b=await e.readdir(a)}catch{return[]}let c=b.filter(a=>!a.startsWith(".")&&!a.includes(".plexus-backup-")).sort(),d=[];for(let b of c)d.push(await br(f.join(a,b)));return d}async function bt(a){let b=d.R6[a],c=await br(d.Qp[a]),e=av(a)[0]?.abs??null,[f,g,h]=await Promise.all([br(b.mcpPath),e?br(e):Promise.resolve(null),br(b.skillsDir)]),i=b.skills?await bs(b.skillsDir):[];return{id:a,displayName:d.kp[a],installed:Z(a),mcpFileMode:b.mcpFileMode??"shared",root:c,mcpFile:f,instructionFile:g,skillsDir:h,skillEntries:i}}async function bu(){let a=f.join(d.BF.team,d.BF.mcpDirRel,"servers.yaml"),b=f.join(d.BF.personal,d.BF.mcpDirRel,"servers.yaml"),c=f.join(d.BF.team,d.BF.skillsDirRel),e=f.join(d.BF.personal,d.BF.skillsDirRel),[g,h,i,j,k,l,m,n,o,p,q]=await Promise.all([br(d.BF.root),br(d.BF.config),br(d.BF.team),br(d.BF.personal),br(d.BF.mcpCache),br(d.BF.backups),br(a),br(b),bs(c),bs(e),bs(d.BF.mcpCache)]),r=0;try{r=(await (0,az.Cw)()).length}catch{}return{root:g,config:h,team:i,personal:j,cacheMcp:k,backups:l,teamMcpServers:m,personalMcpServers:n,teamSkillEntries:o,personalSkillEntries:p,cacheMcpEntries:q,backupCount:r}}async function bv(){let a=await bu(),b=await Promise.all(d.dT.map(bt));return{generatedAt:new Date().toISOString(),host:{platform:process.platform,release:U.release(),node:process.version,home:bp},plexus:a,agents:b}}function bw(a){return null==a?"":a<1024?`${a} B`:a<1048576?`${(a/1024).toFixed(1)} KB`:`${(a/1024/1024).toFixed(2)} MB`}function bx(a,b){return a.length>=b?a:a+" ".repeat(b-a.length)}function by(a,b=0){let c=" ".repeat(b),d=bx(`${c}${a.display}`,56);if(!a.exists)return`${d} MISSING`;switch(a.kind){case"symlink":{let b=a.linkTarget?bq(a.linkTarget):"?",c=!1===a.linkTargetExists?" [DANGLING]":"",e=null!=a.size?` ${bw(a.size)} ${a.mtime??""}`:"";return`${d} LINK -> ${b}${c}${e}`.trimEnd()}case"dir":{let b=null!=a.entryCount?` (${a.entryCount} entries)`:"";return`${d} DIR${b}`}case"file":{let b=bw(a.size),c=a.mtime??"";return`${d} FILE ${bx(b,9)} ${c}`.trimEnd()}default:return`${d} MISSING`}}function bz(a,b){let c=[];for(let d of(c.push(`=== Plexus${b?` v${b}`:""} — Debug Snapshot ===`),c.push(`generated: ${a.generatedAt}`),c.push(`host: ${a.host.platform} ${a.host.release} node: ${a.host.node} home: ${a.host.home}`),c.push(""),c.push(function(a){let b=[];for(let c of(b.push("[Plexus Store]"),b.push(by(a.root)),b.push(by(a.config)),b.push(by(a.team)),b.push(by(a.teamMcpServers)),b.push(" team skills:"),0===a.teamSkillEntries.length&&b.push(" (empty)"),a.teamSkillEntries))b.push(by(c,4));for(let c of(b.push(by(a.personal)),b.push(by(a.personalMcpServers)),b.push(" personal skills:"),0===a.personalSkillEntries.length&&b.push(" (empty)"),a.personalSkillEntries))b.push(by(c,4));for(let c of(b.push(by(a.cacheMcp)),a.cacheMcpEntries))b.push(by(c,2));return b.push(by(a.backups)),b.push(` snapshots: ${a.backupCount} (ring buffer keeps 20)`),b.join("\n")}(a.plexus)),a.agents))c.push(""),c.push(function(a){let b=[`[Agent: ${a.displayName} (${a.id}) | mode=${a.mcpFileMode} | installed=${a.installed}]`];if(b.push(by(a.root)),b.push(by(a.mcpFile)),a.instructionFile&&b.push(by(a.instructionFile)),b.push(by(a.skillsDir)),0===a.skillEntries.length)b.push(" (no skill entries)");else for(let c of a.skillEntries)b.push(by(c,2));return b.join("\n")}(d));return c.push(""),c.join("\n")}},66882:(a,b,c)=>{"use strict";c.d(b,{BF:()=>h,Qp:()=>k,R6:()=>i,dT:()=>l,kp:()=>j,nV:()=>g});var d=c(48161),e=c(76760);let f=d.homedir();process.platform;let g=e.join(f,".config","plexus"),h={root:g,team:e.join(g,"team"),personal:e.join(g,"personal"),config:e.join(g,"config.yaml"),mcpDirRel:"mcp",skillsDirRel:"skills",mcpCache:e.join(g,".cache","mcp"),backups:e.join(g,"backups")},i={"claude-code":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".claude.json"),skillsDir:e.join(f,".claude","skills"),mcpFileMode:"shared"},cursor:{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".cursor","mcp.json"),skillsDir:e.join(f,".cursor","commands"),mcpFileMode:"exclusive"},codex:{mcp:!0,skills:!0,mcpFormat:"toml",mcpPath:e.join(f,".codex","config.toml"),skillsDir:e.join(f,".codex","skills"),mcpFileMode:"shared"},"gemini-cli":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".gemini","settings.json"),skillsDir:e.join(f,".gemini","skills"),mcpFileMode:"shared"},"qwen-code":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".qwen","settings.json"),skillsDir:e.join(f,".qwen","skills"),mcpFileMode:"shared"},"factory-droid":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".factory","mcp.json"),skillsDir:e.join(f,".factory","skills"),mcpFileMode:"exclusive"}},j={"claude-code":"Claude Code",cursor:"Cursor",codex:"Codex","gemini-cli":"Gemini CLI","qwen-code":"Qwen Code","factory-droid":"Factory Droid"},k={"claude-code":e.join(f,".claude"),cursor:e.join(f,".cursor"),codex:e.join(f,".codex"),"gemini-cli":e.join(f,".gemini"),"qwen-code":e.join(f,".qwen"),"factory-droid":e.join(f,".factory")},l=["claude-code","cursor","codex","gemini-cli","qwen-code","factory-droid"]},80408:()=>{},87032:()=>{},92071:(a,b,c)=>{"use strict";c.d(b,{Cw:()=>o,P3:()=>r,RC:()=>m,RV:()=>p,Rd:()=>i,Tz:()=>j,n5:()=>s,quarantineCollision:()=>q});var d=c(77598),e=c(51455),f=c(76760),g=c(1871),h=c(66882);let i=f.join(h.BF.backups,"_collisions"),j=f.join(h.BF.backups,"_legacy-residue"),k=/^\d{4}-\d{2}-\d{2}T/;async function l(){await (0,g.A0)(h.BF.backups);let a=new Date().toISOString().replace(/[:.]/g,"-");for(let b=0;b<1e3;b+=1){let c=0===b?a:`${a}-${String(b).padStart(3,"0")}`,d=f.join(h.BF.backups,c);try{return await e.mkdir(d,{recursive:!1}),{id:c,dir:d}}catch(a){if("EEXIST"!==a.code)throw a}}throw Error(`Could not allocate a unique backup directory for ${a}`)}async function m(a){let{id:b,dir:c}=await l();a?.reason&&await e.writeFile(f.join(c,"_reason.txt"),a.reason,"utf8").catch(()=>{});let d=[];for(let a of h.dT){let b,i=h.R6[a];if(!i.mcp||!await (0,g.s0)(i.mcpPath))continue;let j=!1;try{(j=(await e.lstat(i.mcpPath)).isSymbolicLink())&&(b=await e.readlink(i.mcpPath))}catch{continue}let k=f.extname(i.mcpPath)||".bak",l=`${a}-mcp${k}`,m=f.join(c,l);try{let c=await e.readFile(i.mcpPath);await e.writeFile(m,c),d.push({agent:a,backupPath:m,originalPath:i.mcpPath,wasSymlink:j,linkTarget:b})}catch{}}return await e.writeFile(f.join(c,"manifest.json"),JSON.stringify({id:b,createdAt:new Date().toISOString(),entries:d},null,2),"utf8"),await n(20),{dir:c,id:b,entries:d}}async function n(a){try{for(let b of(await e.readdir(h.BF.backups,{withFileTypes:!0})).filter(a=>a.isDirectory()&&k.test(a.name)).map(a=>a.name).sort().reverse().slice(a))await e.rm(f.join(h.BF.backups,b),{recursive:!0,force:!0})}catch{}}async function o(){try{let a=(await e.readdir(h.BF.backups,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),b=[];for(let c of a){let a=f.join(h.BF.backups,c);try{let c=await e.readFile(f.join(a,"manifest.json"),"utf8"),d=JSON.parse(c);b.push({dir:a,id:d.id,entries:d.entries})}catch{b.push({dir:a,id:c,entries:[]})}}return b}catch{return[]}}async function p(a,b){let c,h;if(!await (0,g.s0)(a))return null;let{id:i,dir:j}=await l();b&&await e.writeFile(f.join(j,"_reason.txt"),b,"utf8").catch(()=>{});let k=(c=f.parse(a),h=d.createHash("sha256").update(f.resolve(a)).digest("hex").slice(0,8),`${c.name}.${h}${c.ext||".bak"}`),m=f.join(j,k);try{let b=await e.readFile(a);return await e.writeFile(m,b),await e.writeFile(f.join(j,"manifest.json"),JSON.stringify({id:i,createdAt:new Date().toISOString(),entries:[{agent:null,backupPath:m,originalPath:a,wasSymlink:!1}]},null,2),"utf8"),await n(20),j}catch{return null}}async function q(a){if(!await (0,g.s0)(a.sourcePath))return null;let b=new Date().toISOString().replace(/[:.]/g,"-"),c=f.join(i,b,a.agent);await (0,g.A0)(c);let d=f.join(c,f.basename(a.sourcePath));try{return await e.rename(a.sourcePath,d),d}catch{try{return(await e.lstat(a.sourcePath)).isDirectory()?(await e.cp(a.sourcePath,d,{recursive:!0}),await e.rm(a.sourcePath,{recursive:!0,force:!0})):(await e.copyFile(a.sourcePath,d),await e.unlink(a.sourcePath)),d}catch{return null}}}async function r(){let a=[];for(let b of h.dT){let c,d=h.R6[b];if(d.skills&&await (0,g.s0)(d.skillsDir)){try{c=await e.readdir(d.skillsDir)}catch{continue}for(let h of c){if(!h.includes(".plexus-backup-"))continue;let c=f.join(d.skillsDir,h),i=new Date().toISOString().replace(/[:.]/g,"-"),k=f.join(j,i,b);await (0,g.A0)(k);let l=f.join(k,h);try{await e.rename(c,l),a.push({agent:b,from:c,to:l})}catch{}}}}return{moved:a}}async function s(a){let b=(await o()).find(b=>b.id===a);if(!b)return{restored:0,errors:[`No snapshot with id ${a}`]};let c=[],d=0;for(let a of b.entries)try{try{await e.unlink(a.originalPath)}catch{}let b=await e.readFile(a.backupPath);await (0,g.A0)(f.dirname(a.originalPath)),await e.writeFile(a.originalPath,b),d+=1}catch(b){c.push(`${a.agent}: ${b.message}`)}return{restored:d,errors:c}}}};
|
|
4
|
+
${d.trimStart()}`}async function A(a){await i();let b=t(a);if(!await (0,h.s0)(b))return[];let c=await e.readdir(b,{withFileTypes:!0}),g=[];for(let i of c){if(!i.isDirectory())continue;let c=f.join(b,i.name,"SKILL.md");if(!await (0,h.s0)(c))continue;let{frontmatter:j,body:k}=y(await e.readFile(c,"utf8")),l=y(k),m=v(l)?l.frontmatter:{},n=v(l)?l.body:k,o=Array.isArray(j.plexus_enabled_agents)?j.plexus_enabled_agents:d.dT,p=w(j.plexus_id)??i.name,q=w(j.name)??w(m.name)??i.name,r=x(m.description);g.push({id:p,name:q,description:r??x(j.description),body:n,frontmatter:{...m,...j},layer:a,enabledAgents:o.filter(a=>d.dT.includes(a))})}return g}async function B(a){await i();let b=t(a.layer),c=f.join(b,a.id);await (0,h.A0)(c),await e.writeFile(f.join(c,"SKILL.md"),z(a),"utf8")}async function C(a,b){let c=f.join(t(a),b);await (0,h.s0)(c)&&await e.rm(c,{recursive:!0,force:!0})}async function D(){let[a,b]=await Promise.all([A("team"),A("personal")]);return[...a,...b]}function E(a,b){return f.join(t(a),b)}function F(a){return f.join(j(a),"rules","global.md")}async function G(a){await i();let b=F(a);if(!await (0,h.s0)(b))return null;let c=await e.stat(b);return{layer:a,path:b,content:await e.readFile(b,"utf8"),updatedAt:c.mtime.toISOString()}}async function H(){return await G("personal")??await G("team")}async function I(a){await i();let b=F("personal");await (0,h.A0)(f.dirname(b)),await e.writeFile(b,a,"utf8")}function J(a,b){let c=new Map;for(let b of a)c.set(b.id,b);for(let a of b)c.set(a.id,a);return Array.from(c.values())}function K(a,b){let c=new Map;for(let b of a)c.set(b.id,b);for(let a of b)c.set(a.id,a);return Array.from(c.values())}var L=c(69127);let M=L.Ik({id:L.Yj().min(1).max(64).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,{message:"id must be lowercase alphanumeric with optional dashes"}),displayName:L.Yj().min(1).max(80),instructionFile:L.Yj().min(1),note:L.Yj().max(280).optional(),createdAt:L.Yj()}),N=L.Ik({agents:L.YO(M)}),O=f.join(d.BF.personal,"custom-agents.json"),P=new Set(d.dT);async function Q(){if(!await (0,h.s0)(O))return{agents:[]};try{let a=await e.readFile(O,"utf8"),b=N.safeParse(JSON.parse(a));if(!b.success)return{agents:[]};return b.data}catch{return{agents:[]}}}async function R(a){await e.mkdir(f.dirname(O),{recursive:!0}),await e.writeFile(O,`${JSON.stringify(a,null,2)}
|
|
5
|
+
`,"utf8")}async function S(){let{agents:a}=await Q();return a}async function T(a){return(await S()).find(b=>b.id===a)}async function U(a){var b;let c={...a,instructionFile:f.resolve((b=a.instructionFile).startsWith("~/")||"~"===b?f.join(process.env.HOME??"",b.slice(1)):b),createdAt:new Date().toISOString()},d=M.safeParse(c);if(!d.success)throw Error(`Invalid custom agent: ${d.error.errors.map(a=>a.message).join("; ")}`);if(P.has(d.data.id))throw Error(`Agent id '${d.data.id}' is reserved for a built-in agent.`);let e=await Q();if(e.agents.some(a=>a.id===d.data.id))throw Error(`Custom agent '${d.data.id}' already exists.`);return e.agents.push(d.data),await R(e),d.data}async function V(a){let b=await Q(),c=b.agents.length;return b.agents=b.agents.filter(b=>b.id!==a),b.agents.length!==c&&(await R(b),!0)}var W=c(73024),X=c(48161);function Y(){return d.dT.map(a=>({id:a,displayName:d.kp[a],rootDir:d.Qp[a],installed:aa(a),capabilities:d.R6[a]}))}let Z=X.homedir(),$={"claude-code":[],cursor:"darwin"===process.platform?["/Applications/Cursor.app",f.join(Z,"Applications","Cursor.app")]:[],codex:"darwin"===process.platform?["/Applications/Codex.app",f.join(Z,"Applications","Codex.app")]:[],"gemini-cli":[],"qwen-code":[],"factory-droid":[]},_={"claude-code":["claude"],cursor:["cursor"],codex:["codex"],"gemini-cli":["gemini"],"qwen-code":["qwen"],"factory-droid":["factory-droid","droid"]};function aa(a){if("1"===process.env.PLEXUS_DETECT_CONFIG_ONLY){let b;return(b=d.R6[a],[d.Qp[a],b.mcpPath,b.skillsDir]).some(a=>(0,W.existsSync)(a))}return!!$[a].some(a=>(0,W.existsSync)(a))||_[a].some(a=>(function(a){let b=process.env.PATH;if(!b)return!1;let c="win32"===process.platform?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let d of b.split(f.delimiter))if(d)for(let b of c){let c=f.join(d,`${a}${b}`);try{if((0,W.statSync)(c).isFile())return"win32"===process.platform||function(a){try{return(0,W.accessSync)(a,W.constants.X_OK),!0}catch{return!1}}(c)}catch{}}return!1})(a))}let ab=X.homedir();function ac(a){return!!a&&W.existsSync(a)}function ad(){return"darwin"===process.platform?f.join(ab,"Library","Application Support","Code","User"):"win32"===process.platform?f.join(process.env.APPDATA??ab,"Code","User"):f.join(ab,".config","Code","User")}function ae(a){return f.join(ad(),"globalStorage",a)}function af(){return"darwin"===process.platform?f.join(ab,"Library","Application Support","Zed"):f.join(ab,".config","zed")}let ag=[{id:"windsurf",displayName:"Windsurf Cascade",support:"manual",managed:!1,rootDir:f.join(ab,".codeium","windsurf"),mcpPath:f.join(ab,".codeium","windsurf","mcp_config.json"),instructionFile:f.join(ab,".codeium","windsurf","AGENTS.md"),note:"Catalog only for now. Windsurf uses its own Rules surface; add as custom if you want Plexus to track one instruction file."},{id:"kiro",displayName:"Kiro",support:"manual",managed:!1,rootDir:f.join(ab,".kiro"),mcpPath:f.join(ab,".kiro","settings","mcp.json"),instructionFile:f.join(ab,".kiro","steering","plexus.md"),note:"Catalog only for now. Kiro has user-level MCP and steering files, but Plexus does not write them yet."},{id:"vscode-copilot",displayName:"VS Code / GitHub Copilot",support:"manual",managed:!1,rootDir:ad(),mcpPath:f.join(ad(),"mcp.json"),instructionFile:f.join(ad(),"AGENTS.md"),note:"VS Code stores user MCP separately from repo instructions. Add as custom if you keep a user instruction file."},{id:"cline",displayName:"Cline",support:"manual",managed:!1,rootDir:ae("saoudrizwan.claude-dev"),instructionFile:f.join(ae("saoudrizwan.claude-dev"),"AGENTS.md"),note:"VS Code extension storage varies by editor profile; use custom paths if yours differs."},{id:"roo-code",displayName:"Roo Code",support:"manual",managed:!1,rootDir:ae("rooveterinaryinc.roo-cline"),instructionFile:f.join(ae("rooveterinaryinc.roo-cline"),"AGENTS.md"),note:"VS Code extension storage varies by editor profile; use custom paths if yours differs."},{id:"kilo-code",displayName:"Kilo Code",support:"manual",managed:!1,rootDir:f.join(ab,".config","kilo"),mcpPath:f.join(ab,".config","kilo","kilo.jsonc"),instructionFile:f.join(ab,".config","kilo","AGENTS.md"),note:"Kilo uses JSONC and extension/project scopes; catalog entry is manual until Plexus can round-trip JSONC."},{id:"continue",displayName:"Continue",support:"manual",managed:!1,rootDir:f.join(ab,".continue"),instructionFile:f.join(ab,".continue","AGENTS.md"),note:"Continue configuration is flexible and often project-specific; add a custom instruction file if you use one."},{id:"aider",displayName:"Aider",support:"instructions-only",managed:!1,instructionFile:f.join(ab,".aider.conf.yml"),note:"Aider is config-file based. Plexus can track a file, but does not translate MCP or skills for Aider."},{id:"amp",displayName:"Amp",support:"manual",managed:!1,rootDir:f.join(ab,".config","amp"),instructionFile:f.join(ab,".config","amp","AGENTS.md"),note:"Amp supports agent instruction files, but local config layout can vary."},{id:"openhands",displayName:"OpenHands",support:"manual",managed:!1,rootDir:f.join(ab,".openhands"),instructionFile:f.join(ab,".openhands","AGENTS.md"),note:"OpenHands is usually project/container configured. Use custom paths for your local setup."},{id:"zed-ai",displayName:"Zed AI",support:"manual",managed:!1,rootDir:af(),instructionFile:f.join(af(),"AGENTS.md"),note:"Catalog only. Zed and extension settings vary across platforms."}];function ah(){return[...d.dT.map(a=>{let b=d.R6[a];return{id:a,displayName:d.kp[a],support:"full",managed:!0,installed:aa(a),rootDir:d.Qp[a],mcpPath:b.mcpPath,skillsDir:b.skillsDir,note:"Built-in adapter. Plexus can sync Rules, MCP servers, and Skills."}}),...ag.map(a=>({...a,installed:ac(a.mcpPath)||ac(a.instructionFile)}))]}var ai=c(69067);async function aj(a){await e.mkdir(a,{recursive:!0})}async function ak(a){try{return await e.access(a),!0}catch{return!1}}async function al(a){try{return(await e.lstat(a)).isSymbolicLink()}catch{return!1}}async function am(a,b,d){let g;if(await aj(f.dirname(b)),await ak(b))if(await al(b))await e.unlink(b);else{let{quarantineCollision:a}=await Promise.resolve().then(c.bind(c,92071)),d=await a({agent:"unknown",sourcePath:b});d&&(g=d)}if("symlink"===d)try{let c=(await e.lstat(a)).isDirectory()?"dir":"file";return await e.symlink(a,b,c),{via:"symlink",backedUp:g}}catch{}return(await e.lstat(a)).isDirectory()?await e.cp(a,b,{recursive:!0}):await e.copyFile(a,b),{via:"copy",backedUp:g}}function an(a){return{agent:a,applied:{mcp:0,skills:0},warnings:[],errors:[]}}async function ao(a,b,c){await aj(f.dirname(b));let d=null;try{d=await e.lstat(b)}catch{}if(d)if(d.isSymbolicLink()){try{let c=await e.readlink(b);if((f.isAbsolute(c)?c:f.resolve(f.dirname(b),c))===f.resolve(a))return"symlink"}catch{}await e.unlink(b)}else await e.unlink(b);if("symlink"===c)try{return await e.symlink(a,b,"file"),"symlink"}catch{}return await e.copyFile(a,b),"copy"}let ap={id:"codex",async apply(a){let b=an("codex"),c=d.R6.codex;try{await aj(f.dirname(c.mcpPath));let d=a.mcp.filter(a=>a.enabledAgents.includes("codex")),h=d.filter(a=>aq(a));for(let a of d)aq(a)||b.warnings.push(`Skipping MCP ${a.id}: missing command or url`);let i=new Set(d.map(a=>a.id)),j=new Set(a.mcp.filter(a=>!a.enabledAgents.includes("codex")).map(a=>a.id)),k={};try{let a=await e.readFile(c.mcpPath,"utf8");k=ai.parse(a)}catch{}let l=k.mcp_servers??{},m={};for(let[a,b]of Object.entries(l))!j.has(a)&&(i.has(a)||(m[a]=b));let n={...m};for(let a of h){var g;n[a.id]={...(g=a).command.trim()?{command:g.command}:{},...g.args?{args:g.args}:{},...ar(g.env)?{env:g.env}:{},...g.url?.trim()||g.httpUrl?.trim()?{url:g.url?.trim()||g.httpUrl?.trim()}:{},...ar(g.headers)?{http_headers:g.headers}:{}}}k.mcp_servers=n,await e.writeFile(c.mcpPath,ai.stringify(k),"utf8"),b.applied.mcp=h.length}catch(a){b.errors.push(`Codex MCP write failed: ${a.message}`)}try{await aj(c.skillsDir);let d=a.skills.filter(a=>a.enabledAgents.includes("codex"));for(let b of new Set(a.skills.filter(a=>!a.enabledAgents.includes("codex")).map(a=>a.id))){let a=f.join(c.skillsDir,b);try{(await e.lstat(a)).isSymbolicLink()?await e.unlink(a):await e.rm(a,{recursive:!0,force:!0})}catch{}}for(let e of d){let d=a.skillSourcePaths.get(e.id);if(!d)continue;let g=f.join(c.skillsDir,e.id);try{await am(d,g,a.syncStrategy),b.applied.skills+=1}catch(a){b.errors.push(`Skill ${e.id} sync failed: ${a.message}`)}}}catch(a){b.errors.push(`Codex skills sync failed: ${a.message}`)}return b}};function aq(a){return!!(a.command.trim()||a.url?.trim()||a.httpUrl?.trim())}function ar(a){return!!(a&&Object.keys(a).length>0)}function as(a){return{id:a,async apply(b){let c=an(a),e=d.R6[a];if(e.mcp){let d=e.mcpFileMode??"shared";try{await aj(f.dirname(e.mcpPath));let g=b.mcp.filter(b=>b.enabledAgents.includes(a)),h=g.filter(a=>ax(a));for(let a of g)ax(a)||c.warnings.push(`Skipping MCP ${a.id}: missing command or url`);"exclusive"===d?await av(a,b.mcp,h,b.syncStrategy):await au(e.mcpPath,b.mcp,h),c.applied.mcp=h.length}catch(a){c.errors.push(`MCP write failed: ${a.message}`)}}if(e.skills)try{await aj(e.skillsDir);let d=b.skills.filter(b=>b.enabledAgents.includes(a));for(let c of new Set(b.skills.filter(b=>!b.enabledAgents.includes(a)).map(a=>a.id))){let a=f.join(e.skillsDir,c);await at(a)}for(let a of d){let d=b.skillSourcePaths.get(a.id);if(!d){c.warnings.push(`No source path for skill: ${a.id}`);continue}let g=f.join(e.skillsDir,a.id);try{await am(d,g,b.syncStrategy),c.applied.skills+=1}catch(b){c.errors.push(`Skill ${a.id} sync failed: ${b.message}`)}}}catch(a){c.errors.push(`Skills sync failed: ${a.message}`)}return c}}}async function at(a){try{(await e.lstat(a)).isSymbolicLink()?await e.unlink(a):await e.rm(a,{recursive:!0,force:!0})}catch{}}async function au(a,b,c){c.map(a=>a.id);let d=new Set(b.map(a=>a.id)),f={};try{let b=await e.readFile(a,"utf8");f=JSON.parse(b)}catch{}let g=f.mcpServers??{},h={};for(let[a,b]of Object.entries(g))d.has(a)||(h[a]=b);let i={...h};for(let a of c)i[a.id]=aw(a);let j={...f,mcpServers:i};await e.writeFile(a,JSON.stringify(j,null,2),"utf8")}async function av(a,b,c,g){let h=d.R6[a];await aj(d.BF.mcpCache);let i=f.join(d.BF.mcpCache,`${a}.json`),j=new Set(b.map(a=>a.id)),k={};try{let a=await e.readFile(h.mcpPath,"utf8");k=JSON.parse(a)}catch{}let l=k.mcpServers??{},m={};for(let[a,b]of Object.entries(l))j.has(a)||(m[a]=b);let n={...m};for(let a of c)n[a.id]=aw(a);await e.writeFile(i,JSON.stringify({mcpServers:n},null,2),"utf8"),await ao(i,h.mcpPath,g)}function aw(a){return{...a.command?{command:a.command}:{},...a.args?{args:a.args}:{},...a.env?{env:a.env}:{},...a.url?{url:a.url}:{},...a.httpUrl?{httpUrl:a.httpUrl}:{},...a.headers?{headers:a.headers}:{}}}function ax(a){return!!(a.command.trim()||a.url?.trim()||a.httpUrl?.trim())}let ay={"claude-code":as("claude-code"),cursor:as("cursor"),codex:ap,"gemini-cli":as("gemini-cli"),"qwen-code":as("qwen-code"),"factory-droid":as("factory-droid")};async function az(a){let b={path:a,exists:!1,isSymlink:!1};try{let c=await e.lstat(a);if(b.exists=!0,b.isSymlink=c.isSymbolicLink(),b.isSymlink)try{let c=await e.readlink(a);b.linkTarget=f.isAbsolute(c)?c:f.resolve(f.dirname(a),c)}catch{}try{let c=await e.stat(a);b.size=c.size,b.mtime=c.mtime.toISOString()}catch{}}catch{}return b}async function aA(a){if(!await (0,h.s0)(a))return[];try{let b=await e.readdir(a,{withFileTypes:!0}),c=[];for(let g of b){let b;if(g.name.startsWith(".")||g.name.includes(".plexus-backup-"))continue;let i=f.join(a,g.name),j=!1;try{if(j=(await e.lstat(i)).isSymbolicLink()){let a=await e.readlink(i);b=f.isAbsolute(a)?a:f.resolve(f.dirname(i),a)}}catch{continue}let k=f.join(i,"SKILL.md"),l=await (0,h.s0)(k);c.push({id:g.name,path:i,isSymlink:j,linkTarget:b,managedByPlexus:!!b&&function(a,b){let c=f.relative(f.resolve(b),f.resolve(a));return""===c||!c.startsWith("..")&&!f.isAbsolute(c)}(b,d.BF.root),hasSkillMd:l})}return c.sort((a,b)=>a.id.localeCompare(b.id))}catch{return[]}}function aB(a){let b=d.Qp[a];switch(a){case"claude-code":return[{label:"CLAUDE.md (user-level memory)",filename:"CLAUDE.md",abs:f.join(b,"CLAUDE.md")}];case"cursor":case"codex":case"factory-droid":return[{label:"AGENTS.md (user-level)",filename:"AGENTS.md",abs:f.join(b,"AGENTS.md")}];case"gemini-cli":return[{label:"GEMINI.md (user-level)",filename:"GEMINI.md",abs:f.join(b,"GEMINI.md")}];case"qwen-code":return[{label:"QWEN.md (user-level)",filename:"QWEN.md",abs:f.join(b,"QWEN.md")}]}}async function aC(a){let b=d.R6[a],c=d.Qp[a],e=aa(a),[f,g]=await Promise.all([az(b.mcpPath),az(b.skillsDir)]),h=b.skills?await aA(b.skillsDir):[],i=[];for(let b of aB(a))i.push({label:b.label,filename:b.filename,status:await az(b.abs)});return{id:a,displayName:d.kp[a],rootDir:c,installed:e,mcpFile:f,mcpFileMode:b.mcpFileMode??"shared",skillsDir:g,skills:h,instructionFiles:i}}async function aD(a){return e.readFile(a,"utf8")}async function aE(a,b){await e.mkdir(f.dirname(a),{recursive:!0}),await e.writeFile(a,b,"utf8")}var aF=c(92071);async function aG(a){let b=d.R6[a];if(!await (0,h.s0)(b.mcpPath))return[];try{let a=await e.readFile(b.mcpPath,"utf8");if("json"===b.mcpFormat){let b=JSON.parse(a).mcpServers??{};return Object.entries(b).map(([a,b])=>{var c,d;return c=a,d=b,{id:c,command:String(d?.command??""),args:Array.isArray(d?.args)?d.args.map(String):void 0,env:aH(d?.env),url:"string"==typeof d?.url?d.url:void 0,httpUrl:"string"==typeof d?.httpUrl?d.httpUrl:void 0,headers:aH(d?.headers)}})}let c=ai.parse(a).mcp_servers??{};return Object.entries(c).map(([a,b])=>({id:a,command:String(b?.command??""),args:Array.isArray(b?.args)?b.args.map(String):void 0,env:b?.env&&"object"==typeof b.env?b.env:void 0,url:"string"==typeof b?.url?b.url:void 0,httpUrl:"string"==typeof b?.httpUrl?b.httpUrl:void 0,headers:aH(b?.http_headers??b?.headers)}))}catch{return[]}}function aH(a){if(!(!a||"object"!=typeof a||Array.isArray(a)))return Object.fromEntries(Object.entries(a).map(([a,b])=>[a,String(b)]))}async function aI(a){let b=d.R6[a];if(!await (0,h.s0)(b.skillsDir))return[];try{let c=await e.readdir(b.skillsDir,{withFileTypes:!0}),d=[];for(let g of c){let c=f.join(b.skillsDir,g.name);if(g.isSymbolicLink())try{if(!(await e.stat(c)).isDirectory())continue}catch{continue}else if(!g.isDirectory())continue;let i=f.join(c,"SKILL.md");if(!await (0,h.s0)(i))continue;let j=await e.readFile(i,"utf8"),{frontmatter:k,body:l}=y(j);d.push({id:g.name,name:k.name??g.name,description:k.description??void 0,body:l,frontmatter:k,layer:"personal",enabledAgents:[a]})}return d}catch{return[]}}async function aJ(a){let b=Object.fromEntries(d.dT.map(a=>[a,{mcp:0,skills:0}])),c=new Map,e=new Map;for(let a of d.dT){let d=await aG(a);for(let e of(b[a].mcp=d.length,d)){let b=c.get(e.id);b?b.sources.includes(a)||b.sources.push(a):c.set(e.id,{first:{command:e.command,args:e.args,env:e.env,url:e.url,httpUrl:e.httpUrl,headers:e.headers},sources:[a]})}let f=await aI(a);for(let c of(b[a].skills=f.length,f)){let b=e.get(c.id);b?b.sources.includes(a)||b.sources.push(a):e.set(c.id,{first:c,sources:[a]})}}let f=new Map(a.storeMcp.map(a=>[a.id,a])),g=new Map(a.storeSkills.map(a=>[a.id,a])),h=[];for(let[a,b]of c){let c=f.get(a);if(c){let d=b.sources.filter(a=>!c.enabledAgents.includes(a));if(0===d.length)continue;h.push({kind:"extend",id:a,displayName:a,agentsToAdd:d,currentAgents:c.enabledAgents})}else h.push({kind:"new",item:{id:a,command:b.first.command,args:b.first.args,env:b.first.env,url:b.first.url,httpUrl:b.first.httpUrl,headers:b.first.headers,layer:"personal",enabledAgents:[...b.sources]},sourceAgents:b.sources})}let i=[];for(let[a,b]of e){let c=g.get(a);if(c){let d=b.sources.filter(a=>!c.enabledAgents.includes(a));if(0===d.length)continue;i.push({kind:"extend",id:a,displayName:b.first.name,agentsToAdd:d,currentAgents:c.enabledAgents})}else i.push({kind:"new",item:{...b.first,enabledAgents:[...b.sources]},sourceAgents:b.sources})}return{mcp:h,skills:i,perAgent:b}}function aK(a){let[b]=aB(a);if(!b)throw Error(`No instruction file target is configured for agent ${a}`);return b.abs}async function aL(a){try{let b=await e.readlink(a);return f.isAbsolute(b)?b:f.resolve(f.dirname(a),b)}catch{return}}async function aM(a,b,c,g,h){let i=aK(a),j={agent:a,displayName:d.kp[a],targetPath:i,installed:g,enabled:h,exists:!1,isSymlink:!1,inSync:!1};try{let a=await e.lstat(i);j.exists=!0,j.isSymlink=a.isSymbolicLink(),j.isSymlink&&(j.linkTarget=await aL(i))}catch{return j}if(!b||null===c)return j;if(j.isSymlink)return j.inSync=!!(j.linkTarget&&f.resolve(j.linkTarget)===f.resolve(b)),j;try{j.inSync=await e.readFile(i,"utf8")===c}catch{j.inSync=!1}return j}async function aN(a){let b;await (0,h.A0)(f.dirname(a.targetPath));try{if((await e.lstat(a.targetPath)).isSymbolicLink())await e.unlink(a.targetPath);else{let c=await (0,aF.quarantineCollision)({agent:a.agent,sourcePath:a.targetPath});c&&(b=c)}}catch{}if("symlink"===a.strategy)try{return await e.symlink(a.sourcePath,a.targetPath,"file"),{via:"symlink",backedUp:b}}catch{}return await e.copyFile(a.sourcePath,a.targetPath),{via:"copy",backedUp:b}}async function aO(){let a=await H(),b=await n(),c=new Map(Y().map(a=>[a.id,a.installed])),e=a?{exists:!0,layer:a.layer,path:a.path,content:a.content,updatedAt:a.updatedAt}:{exists:!1,layer:null,path:null,content:null};return{canonical:e,agents:await Promise.all(d.dT.map(a=>aM(a,e.path,e.content,c.get(a)??!1,!1!==b.agents[a])))}}async function aP(a=d.dT){let b=await G("personal");if(!b){let a=await H();a&&(await I(a.content),b=await G("personal"))}if(!b)throw Error(`Cannot apply rules: personal canonical rules file does not exist at ${F("personal")}`);let c=await n(),f=new Map(Y().map(a=>[a.id,a.installed])),g=[];for(let h of a){let a=aK(h);if(!f.get(h)){g.push({agent:h,targetPath:a,applied:!1,skipped:!0,reason:`${d.kp[h]} is not installed.`});continue}if(!1===c.agents[h]){g.push({agent:h,targetPath:a,applied:!1,skipped:!0,reason:`${d.kp[h]} is disabled in Plexus settings.`});continue}try{let d=null;try{await e.lstat(a),d=await (0,aF.RV)(a,`Apply Plexus rules to ${h}`)}catch{}let f=await aN({agent:h,sourcePath:b.path,targetPath:a,strategy:c.syncStrategy});g.push({agent:h,targetPath:a,applied:!0,via:f.via,backedUp:f.backedUp,snapshotDir:d})}catch(b){g.push({agent:h,targetPath:a,applied:!1,error:b.message})}}return g}async function aQ(a){let b,c=aK(a);try{b=await e.readFile(c,"utf8")}catch(b){throw Error(`Cannot import rules from ${a}: failed to read ${c}: ${b.message}`)}await I(b)}async function aR(a){let b=aK(a),c=await n(),g=Y();if(!g.find(b=>b.id===a)?.installed)return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} is not installed.`};if(!1===c.agents[a])return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} is disabled in Plexus settings.`};try{let c;if(!(await e.lstat(b)).isSymbolicLink())return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} already has a local instruction file.`};let g=await G("personal");if(!g)return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:"No personal rules baseline exists for Plexus to detach from."};let h=await aL(b);if(!h||f.resolve(h)!==f.resolve(g.path))return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]}'s instruction file is a symlink, but Plexus does not own that link.`};try{c=await e.readFile(b,"utf8")}catch{c=g.content}let i=await (0,aF.RV)(b,`Detach Plexus rules from ${a}`);return await e.unlink(b),await e.writeFile(b,c,"utf8"),{agent:a,targetPath:b,detached:!0,snapshotDir:i}}catch(c){if("ENOENT"===c.code)return{agent:a,targetPath:b,detached:!1,skipped:!0,reason:`${d.kp[a]} has no instruction file to detach.`};return{agent:a,targetPath:b,detached:!1,error:c.message}}}async function aS(a){let b=new Date().toISOString(),c=await n(),e=Y(),f=await (0,aF.RC)({reason:a?`partial sync: ${a.join(",")}`:"full sync"}).catch(()=>void 0);await (0,aF.P3)().catch(()=>void 0);let[g,h,i,j]=await Promise.all([q("team"),q("personal"),A("team"),A("personal")]),k=J(g,h),l=K(i,j),m=new Map;for(let a of l)m.set(a.id,E(a.layer,a.id));let o=(a&&a.length>0?a:d.dT).filter(a=>{let b=e.find(b=>b.id===a);return b?.installed&&!1!==c.agents[a]});return{results:await Promise.all(o.map(a=>ay[a].apply({agentId:a,mcp:k,skills:l,skillSourcePaths:m,syncStrategy:c.syncStrategy??"symlink"}))),startedAt:b,finishedAt:new Date().toISOString(),backup:f?.dir}}async function aT(){let[a,b]=await Promise.all([s(),D()]);return{mcp:J(a.filter(a=>"team"===a.layer),a.filter(a=>"personal"===a.layer)),skills:K(b.filter(a=>"team"===a.layer),b.filter(a=>"personal"===a.layer))}}let aU=["codex","claude-code","cursor","gemini-cli","qwen-code","factory-droid"];async function aV(a){let b=await n(),c=Y();return(a&&a.length>0?a:d.dT).filter(a=>{let d=c.find(b=>b.id===a);return d?.installed&&!1!==b.agents[a]})}function aW(a,b){return{...a,enabledAgents:[...b]}}function aX(a){return[...new Set(a)].sort((a,b)=>aU.indexOf(a)-aU.indexOf(b)||a.localeCompare(b))}function aY(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(b&&"object"==typeof b){let c={};for(let d of Object.keys(b).sort()){let e=b[d];void 0!==e&&(c[d]=a(e))}return c}return b}(a))}function aZ(a,b,c,d){let e=a.get(b.id)??{id:b.id,variants:[]},f=e.variants.find(a=>a.fingerprint===d);f?f.sources.includes(c)||f.sources.push(c):e.variants.push({item:b,sources:[c],fingerprint:d}),a.set(b.id,e)}function a$(a){return Math.min(...a.sources.map(a=>aU.indexOf(a)))}function a_(a,b){if(b){let c=a.find(a=>a.sources.includes(b));if(c)return c}let c=[...a].sort((a,b)=>b.sources.length-a.sources.length||a$(a)-a$(b)||a.fingerprint.localeCompare(b.fingerprint))[0];if(!c)throw Error("Cannot choose from an empty native config group");return c}async function a0(a){let b=[];for(let c of a){let[a]=aB(c);if(a)try{let d=await e.readFile(a.abs,"utf8");if(0===d.trim().length)continue;b.push({agent:c,content:d,fingerprint:aY(d)})}catch{}}return b}function a1(a,b){if(b){let c=a.find(a=>a.agent===b);if(c)return c}return[...a].sort((a,b)=>aU.indexOf(a.agent)-aU.indexOf(b.agent)||a.agent.localeCompare(b.agent))[0]}async function a2(a){let b=new Map,c=new Map,d=await a0(a),e=[];for(let f of a){let[a,g]=await Promise.all([aG(f),aI(f)]);for(let c of a){let a={id:c.id,command:c.command,args:c.args,env:c.env,url:c.url,httpUrl:c.httpUrl,headers:c.headers,layer:"personal",enabledAgents:[f]};aZ(b,a,f,aY({command:a.command,args:a.args??[],env:a.env??{},url:a.url??"",httpUrl:a.httpUrl??"",headers:a.headers??{}}))}for(let a of g){let b={...a,layer:"personal",enabledAgents:[f]};aZ(c,b,f,function(a){let b=Object.fromEntries(Object.entries(a.frontmatter??{}).filter(([a])=>"plexus_enabled_agents"!==a&&"plexus_id"!==a));return aY({name:a.name,description:a.description??"",body:a.body,frontmatter:b})}(b))}let h=d.some(a=>a.agent===f);e.push({agent:f,mcp:a.length,skills:g.length,rules:h,total:a.length+g.length+ +!!h})}return{sourceSummaries:e,mcpGroups:b,skillGroups:c,rulesSources:d}}function a3(a,b){let c=[];for(let d of a.values()){if(d.variants.length<=1)continue;let a=a_(d.variants,b);c.push({id:d.id,sources:aX(d.variants.flatMap(a=>a.sources)),preferredAgent:function(a,b){if(b&&a.sources.includes(b))return b;let[c]=aX(a.sources);if(!c)throw Error("Cannot summarize a native config variant with no sources");return c}(a,b)})}return c.sort((a,b)=>a.id.localeCompare(b.id))}function a4(a){return[...a.values()].filter(a=>1===a.variants.length).length}function a5(a,b,c){var d;let e=(d=b.sourceSummaries,[...d].filter(a=>a.total>0).sort((a,b)=>b.total-a.total||aU.indexOf(a.agent)-aU.indexOf(b.agent)||a.agent.localeCompare(b.agent))[0]?.agent),f=new Set(b.rulesSources.map(a=>a.fingerprint)),g=a1(b.rulesSources,c),h=a3(b.mcpGroups,c),i=a3(b.skillGroups,c),j=f.size>1;return{targetAgents:a,sources:b.sourceSummaries,recommendedPrimaryAgent:e,selectedPrimaryAgent:c,conflictCount:h.length+i.length+ +!!j,mcp:{safe:a4(b.mcpGroups),conflicts:h},skills:{safe:a4(b.skillGroups),conflicts:i},rules:{sources:aX(b.rulesSources.map(a=>a.agent)),conflict:j,preferredAgent:g?.agent}}}async function a6(a){let b=await aV(a?.only),c=await a2(b),d=a5(b,c,a?.preferredAgent),e=a?.preferredAgent??d.recommendedPrimaryAgent,f=a5(b,c,e);return{targetAgents:b,state:c,plan:f,primaryAgent:e}}async function a7(a){return(await a6(a)).plan}async function a8(a,b,c){if(0===a.length)return{imported:{mcpWritten:0,mcpExtended:0,skillsWritten:0,skillsExtended:0},mcpShared:0,skillsShared:0};let[d,e,f,g]=await Promise.all([q("team"),q("personal"),A("team"),A("personal")]),h=J(d,e),i=K(f,g),j=function(a,b,c){let d={mcpWritten:0,mcpExtended:0,skillsWritten:0,skillsExtended:0};for(let c of a.mcpGroups.keys())b.has(c)?d.mcpExtended+=1:d.mcpWritten+=1;for(let b of a.skillGroups.keys())c.has(b)?d.skillsExtended+=1:d.skillsWritten+=1;return d}(b,new Set(h.map(a=>a.id)),new Set(i.map(a=>a.id))),k=new Map;for(let b of h)k.set(b.id,aW({...b,layer:"personal"},a));for(let d of b.mcpGroups.values()){if(k.has(d.id))continue;let b=a_(d.variants,c);k.set(d.id,aW({...b.item,layer:"personal"},a))}let l=new Map;for(let b of i)l.set(b.id,aW({...b,layer:"personal"},a));for(let d of b.skillGroups.values()){if(l.has(d.id))continue;let b=a_(d.variants,c);l.set(d.id,aW({...b.item,layer:"personal"},a))}let m=[...k.values()].sort((a,b)=>a.id.localeCompare(b.id)),n=[...l.values()].sort((a,b)=>a.id.localeCompare(b.id));for(let a of(await r("personal",m),n))await B(a);return{imported:j,mcpShared:m.length,skillsShared:n.length}}async function a9(a,b){if(await G("personal"))return;let c=await H();if(c)return void await I(c.content);let d=a1(a.rulesSources,b);if(d)return await I(d.content),d.agent}async function ba(a){let b=Array.isArray(a)?{only:a}:a??{},c=new Date().toISOString(),{targetAgents:d,state:e,plan:f,primaryAgent:g}=await a6(b),[{imported:h,mcpShared:i,skillsShared:j},k]=await Promise.all([a8(d,e,g),a9(e,g)]),[l,m]=await Promise.all([aS(d),G("personal").then(a=>a?aP(d):void 0)]);return{mode:"share-all",targetAgents:d,imported:h,shared:{mcp:i,skills:j},plan:f,preferredAgent:g,conflictsResolved:f.conflictCount,rules:m?{applied:m,importedFrom:k}:{applied:[],skipped:"No rules baseline exists yet. Add rules in the Rules page or keep an instruction file in one installed agent, then sync again."},results:l.results,startedAt:c,finishedAt:new Date().toISOString(),backup:l.backup}}var bb=c(31421);let bc=(0,c(57975).promisify)(bb.execFile);async function bd(a){return(0,h.s0)(`${a}/.git`)}async function be(){let[a,b,c]=await Promise.all([q("team"),A("team"),G("team")]);return{mcp:a.length,skills:b.length,rules:null!==c}}async function bf(a){let b=d.BF.team;if(await (0,h.s0)(b)){if(await bd(b))try{let{stdout:c}=await bc("git",["-C",b,"remote","get-url","origin"]),d=c.trim();if(d!==a)return{ok:!1,message:`Team layer already subscribed to ${d}. Run 'plexus leave' first.`};await bc("git",["-C",b,"pull","--ff-only"]);let e=await n();return e.teamRepo=a,await o(e),{ok:!0,message:"Team layer refreshed."}}catch(a){return{ok:!1,message:`Git pull failed: ${a.message}`}}let c=`${b}.plexus-backup-${Date.now()}`;await e.rename(b,c)}try{await bc("git",["clone",a,b]);let c=await n();return c.teamRepo=a,await o(c),{ok:!0,message:`Cloned team repo to ${b}.`}}catch(a){return{ok:!1,message:`Git clone failed: ${a.message}`}}}async function bg(){let a=d.BF.team;if(!await bd(a))return{ok:!1,message:"Team layer is not a git repo. Run 'plexus join <url>' first."};try{return await bc("git",["-C",a,"pull","--ff-only"]),{ok:!0,message:"Team layer up-to-date."}}catch(a){return{ok:!1,message:`Git pull failed: ${a.message}`}}}async function bh(){let a=d.BF.team;if(!await bd(a))return{subscribed:!1};try{let b=(await bc("git",["-C",a,"remote","get-url","origin"])).stdout.trim(),c=0,d=0;try{await bc("git",["-C",a,"fetch","--quiet"]);let{stdout:b}=await bc("git",["-C",a,"rev-list","--left-right","--count","HEAD...@{upstream}"]),[e,f]=b.trim().split(/\s+/).map(a=>Number.parseInt(a,10));c=e||0,d=f||0}catch{}let e=await be().catch(()=>void 0);return{subscribed:!0,repoUrl:b,hasUpstreamUpdate:d>0,ahead:c,behind:d,summary:e}}catch{return{subscribed:!1}}}async function bi(){let[a,b]=await Promise.all([s(),D()]);return aJ({storeMcp:a,storeSkills:b})}async function bj(a){let b=a??await bi(),c=0,d=0,e=0,f=0;if(b.mcp.length>0){let a=await q("personal"),e=await q("team"),f=new Map(a.map(a=>[a.id,a])),g=new Map(e.map(a=>[a.id,a])),h=[...a],i=new Set;for(let a of b.mcp)if("new"===a.kind)h.push(a.item),i.add(a.item.id),c+=1;else{let b=f.get(a.id);if(b)b.enabledAgents=Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]));else{let b=g.get(a.id);b&&h.push({...b,layer:"personal",enabledAgents:Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]))})}d+=1}await r("personal",h)}if(b.skills.length>0){let a=await A("personal"),c=await A("team"),d=new Map(a.map(a=>[a.id,a])),g=new Map(c.map(a=>[a.id,a]));for(let a of b.skills)if("new"===a.kind)await B(a.item),e+=1;else{let b=d.get(a.id);if(b)await B({...b,enabledAgents:Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]))});else{let b=g.get(a.id);b&&await B({...b,layer:"personal",enabledAgents:Array.from(new Set([...b.enabledAgents,...a.agentsToAdd]))})}f+=1}}return{mcpWritten:c,skillsWritten:e,mcpExtended:d,skillsExtended:f}}async function bk(a){let b=new Map,c=J(await q("team"),await q("personal"));for(let d of c)d.enabledAgents.includes(a)&&b.set(d.id,d);for(let d of(await aJ({storeMcp:c,storeSkills:[]})).mcp)"new"===d.kind&&d.sourceAgents.includes(a)&&(b.has(d.item.id)||b.set(d.item.id,{...d.item,enabledAgents:[a]}));return b}async function bl(a){let b=new Map,c=K(await A("team"),await A("personal"));for(let d of c)d.enabledAgents.includes(a)&&b.set(d.id,d);for(let d of(await aJ({storeMcp:[],storeSkills:c})).skills)"new"===d.kind&&d.sourceAgents.includes(a)&&(b.has(d.item.id)||b.set(d.item.id,{...d.item,enabledAgents:[a]}));return b}async function bm(a,b){if(a===b)return{from:a,to:b,mcp:[],skills:[]};let[c,d,e,f,g,h]=await Promise.all([bk(a),bk(b),bl(a),bl(b),s(),D()]),i=new Set(g.map(a=>a.id)),j=new Set(h.map(a=>a.id)),k=[];for(let[a,b]of c)d.has(a)||k.push({item:b,inStore:i.has(a)});let l=[];for(let[a,b]of e)f.has(a)||l.push({item:b,inStore:j.has(a)});return{from:a,to:b,mcp:k,skills:l}}async function bn(a){let{from:b,to:c}=a;if(b===c)return{mcpAdded:0,skillsAdded:0};let d=await bm(b,c),e=new Set(a.mcpIds??d.mcp.map(a=>a.item.id)),f=new Set(a.skillIds??d.skills.map(a=>a.item.id)),g=0;if(e.size>0){let a=await q("personal"),b=await q("team"),f=new Map(a.map(a=>[a.id,a])),h=new Map(b.map(a=>[a.id,a])),i=[...a];for(let a of d.mcp){if(!e.has(a.item.id))continue;let b=f.get(a.item.id),d=h.get(a.item.id);b?b.enabledAgents.includes(c)||(b.enabledAgents=[...b.enabledAgents,c]):d?i.push({...d,layer:"personal",enabledAgents:Array.from(new Set([...d.enabledAgents,c]))}):i.push({...a.item,layer:"personal",enabledAgents:Array.from(new Set([...a.item.enabledAgents,c]))}),g+=1}await r("personal",i)}let h=0;if(f.size>0){let a=await A("personal"),b=await A("team"),e=new Map(a.map(a=>[a.id,a])),g=new Map(b.map(a=>[a.id,a]));for(let a of d.skills){if(!f.has(a.item.id))continue;let b=e.get(a.item.id),d=g.get(a.item.id);b?b.enabledAgents.includes(c)||await B({...b,enabledAgents:[...b.enabledAgents,c]}):d?await B({...d,layer:"personal",enabledAgents:Array.from(new Set([...d.enabledAgents,c]))}):await B({...a.item,layer:"personal",enabledAgents:Array.from(new Set([...a.item.enabledAgents,c]))}),h+=1}}let i=await n(),j=Y().find(a=>a.id===c);if(!j?.installed||!1===i.agents[c])return{mcpAdded:g,skillsAdded:h};let k=J(await q("team"),await q("personal")),l=K(await A("team"),await A("personal")),m=new Map;for(let a of l)m.set(a.id,E(a.layer,a.id));let o=await (0,aF.RC)({reason:`mirror ${b} to ${c}`});return{mcpAdded:g,skillsAdded:h,syncResult:await ay[c].apply({agentId:c,mcp:k,skills:l,skillSourcePaths:m,syncStrategy:i.syncStrategy??"symlink"}),backup:o.dir}}let bo=d.dT;async function bp(){let[a,b]=await Promise.all([q("team"),q("personal")]),c=J(a,b),d=new Set(a.map(a=>a.id)),e=new Set(b.map(a=>a.id)),f=await aJ({storeMcp:[],storeSkills:[]}),g=new Map;for(let a of f.mcp)"new"===a.kind&&g.set(a.item.id,{sources:a.sourceAgents,first:a.item});let h=new Set([...c.map(a=>a.id),...g.keys()]),i=[];for(let a of h){let b,f=c.find(b=>b.id===a),h=g.get(a),j=h?.sources??[],k=f?.enabledAgents??[],l=Array.from(new Set([...j,...k]));b=e.has(a)?"personal":d.has(a)?"team":"native";let m=f??h.first;i.push({id:a,command:m.command,args:m.args,env:m.env,authority:b,effectiveAgents:l,nativeAgents:j,enabledAgents:f?k:void 0})}return i.sort((a,b)=>a.id.localeCompare(b.id)),i}async function bq(){let[a,b]=await Promise.all([A("team"),A("personal")]),c=K(a,b),d=new Set(a.map(a=>a.id)),e=new Set(b.map(a=>a.id)),f=await aJ({storeMcp:[],storeSkills:[]}),g=new Map;for(let a of f.skills)"new"===a.kind&&g.set(a.item.id,{sources:a.sourceAgents,first:a.item});let h=new Set([...c.map(a=>a.id),...g.keys()]),i=[];for(let a of h){let b,f=c.find(b=>b.id===a),h=g.get(a),j=h?.sources??[],k=f?.enabledAgents??[],l=Array.from(new Set([...j,...k]));b=e.has(a)?"personal":d.has(a)?"team":"native";let m=f??h.first;i.push({id:a,name:m.name,description:m.description,authority:b,effectiveAgents:l,nativeAgents:j,enabledAgents:f?k:void 0})}return i.sort((a,b)=>a.id.localeCompare(b.id)),i}async function br(a){let b=await q("personal"),c=await q("team"),d=b.findIndex(b=>b.id===a.id),e=c.find(b=>b.id===a.id),f=[...b],g=[a.agent];if(d>=0){let b={...f[d]};a.enabled?b.enabledAgents.includes(a.agent)||(b.enabledAgents=[...b.enabledAgents,a.agent]):b.enabledAgents=b.enabledAgents.filter(b=>b!==a.agent),f[d]=b}else if(e){let b=a.enabled?Array.from(new Set([...e.enabledAgents,a.agent])):e.enabledAgents.filter(b=>b!==a.agent);f.push({...e,layer:"personal",enabledAgents:b})}else{let b=(await aJ({storeMcp:[],storeSkills:[]})).mcp.find(b=>"new"===b.kind&&b.item.id===a.id);if(!b||"new"!==b.kind)return{ok:!1,message:`Item ${a.id} not found in any agent's native config`};let c=a.enabled?Array.from(new Set([...b.sourceAgents,a.agent])):b.sourceAgents.filter(b=>b!==a.agent);f.push({...b.item,layer:"personal",enabledAgents:c}),g=Array.from(new Set([...b.sourceAgents,a.agent]))}await r("personal",f);let h=await (0,aF.RC)({reason:`toggleMcpAgent ${a.id} ${a.agent} ${a.enabled}`}).catch(()=>void 0),i=[];for(let a of g){let b=await bt(a);b&&i.push(b)}return{ok:!0,syncResult:i[0],message:h?.dir}}async function bs(a){let b=await A("personal"),c=await A("team"),d=b.find(b=>b.id===a.id),e=c.find(b=>b.id===a.id),f=[a.agent];if(d){let b=a.enabled?Array.from(new Set([...d.enabledAgents,a.agent])):d.enabledAgents.filter(b=>b!==a.agent);await B({...d,enabledAgents:b})}else if(e){let b=a.enabled?Array.from(new Set([...e.enabledAgents,a.agent])):e.enabledAgents.filter(b=>b!==a.agent);await B({...e,layer:"personal",enabledAgents:b})}else{let b=(await aJ({storeMcp:[],storeSkills:[]})).skills.find(b=>"new"===b.kind&&b.item.id===a.id);if(!b||"new"!==b.kind)return{ok:!1,message:`Skill ${a.id} not found in any agent's native config`};let c=a.enabled?Array.from(new Set([...b.sourceAgents,a.agent])):b.sourceAgents.filter(b=>b!==a.agent);await B({...b.item,layer:"personal",enabledAgents:c}),f=Array.from(new Set([...b.sourceAgents,a.agent]))}let g=await (0,aF.RC)({reason:`toggleSkillAgent ${a.id} ${a.agent} ${a.enabled}`}).catch(()=>void 0),h=[];for(let a of f){let b=await bt(a);b&&h.push(b)}return{ok:!0,syncResult:h[0],message:g?.dir}}async function bt(a){let b=await n(),c=Y().find(b=>b.id===a);if(!c?.installed||!1===b.agents[a])return;let[d,e]=await Promise.all([q("team"),q("personal")]),[f,g]=await Promise.all([A("team"),A("personal")]),h=J(d,e),i=K(f,g),j=new Map;for(let a of i)j.set(a.id,E(a.layer,a.id));return ay[a].apply({agentId:a,mcp:h,skills:i,skillSourcePaths:j,syncStrategy:b.syncStrategy??"symlink"})}let bu=d.dT,bv=X.homedir();function bw(a){return a===bv?"~":a.startsWith(`${bv}/`)?`~/${a.slice(bv.length+1)}`:a}async function bx(a){let b,c={path:a,display:bw(a),exists:!1,kind:"missing"};try{b=await e.lstat(a)}catch{return c}if(c.exists=!0,b.isSymbolicLink()){c.kind="symlink";try{let b=await e.readlink(a);c.linkTarget=f.isAbsolute(b)?b:f.resolve(f.dirname(a),b),c.linkTargetExists=await (0,h.s0)(c.linkTarget)}catch{}try{let b=await e.stat(a);c.size=b.size,c.mtime=b.mtime.toISOString()}catch{}}else if(b.isDirectory()){c.kind="dir",c.mtime=b.mtime.toISOString();try{c.entryCount=(await e.readdir(a)).filter(a=>!a.startsWith(".")&&!a.includes(".plexus-backup-")).length}catch{}}else c.kind="file",c.size=b.size,c.mtime=b.mtime.toISOString();return c}async function by(a){let b;if(!await (0,h.s0)(a))return[];try{b=await e.readdir(a)}catch{return[]}let c=b.filter(a=>!a.startsWith(".")&&!a.includes(".plexus-backup-")).sort(),d=[];for(let b of c)d.push(await bx(f.join(a,b)));return d}async function bz(a){let b=d.R6[a],c=await bx(d.Qp[a]),e=aB(a)[0]?.abs??null,[f,g,h]=await Promise.all([bx(b.mcpPath),e?bx(e):Promise.resolve(null),bx(b.skillsDir)]),i=b.skills?await by(b.skillsDir):[];return{id:a,displayName:d.kp[a],installed:aa(a),mcpFileMode:b.mcpFileMode??"shared",root:c,mcpFile:f,instructionFile:g,skillsDir:h,skillEntries:i}}async function bA(){let a=f.join(d.BF.team,d.BF.mcpDirRel,"servers.yaml"),b=f.join(d.BF.personal,d.BF.mcpDirRel,"servers.yaml"),c=f.join(d.BF.team,d.BF.skillsDirRel),e=f.join(d.BF.personal,d.BF.skillsDirRel),[g,h,i,j,k,l,m,n,o,p,q]=await Promise.all([bx(d.BF.root),bx(d.BF.config),bx(d.BF.team),bx(d.BF.personal),bx(d.BF.mcpCache),bx(d.BF.backups),bx(a),bx(b),by(c),by(e),by(d.BF.mcpCache)]),r=0;try{r=(await (0,aF.Cw)()).length}catch{}return{root:g,config:h,team:i,personal:j,cacheMcp:k,backups:l,teamMcpServers:m,personalMcpServers:n,teamSkillEntries:o,personalSkillEntries:p,cacheMcpEntries:q,backupCount:r}}async function bB(){let a=await bA(),b=await Promise.all(d.dT.map(bz));return{generatedAt:new Date().toISOString(),host:{platform:process.platform,release:X.release(),node:process.version,home:bv},plexus:a,agents:b}}function bC(a){return null==a?"":a<1024?`${a} B`:a<1048576?`${(a/1024).toFixed(1)} KB`:`${(a/1024/1024).toFixed(2)} MB`}function bD(a,b){return a.length>=b?a:a+" ".repeat(b-a.length)}function bE(a,b=0){let c=" ".repeat(b),d=bD(`${c}${a.display}`,56);if(!a.exists)return`${d} MISSING`;switch(a.kind){case"symlink":{let b=a.linkTarget?bw(a.linkTarget):"?",c=!1===a.linkTargetExists?" [DANGLING]":"",e=null!=a.size?` ${bC(a.size)} ${a.mtime??""}`:"";return`${d} LINK -> ${b}${c}${e}`.trimEnd()}case"dir":{let b=null!=a.entryCount?` (${a.entryCount} entries)`:"";return`${d} DIR${b}`}case"file":{let b=bC(a.size),c=a.mtime??"";return`${d} FILE ${bD(b,9)} ${c}`.trimEnd()}default:return`${d} MISSING`}}function bF(a,b){let c=[];for(let d of(c.push(`=== Plexus${b?` v${b}`:""} — Debug Snapshot ===`),c.push(`generated: ${a.generatedAt}`),c.push(`host: ${a.host.platform} ${a.host.release} node: ${a.host.node} home: ${a.host.home}`),c.push(""),c.push(function(a){let b=[];for(let c of(b.push("[Plexus Store]"),b.push(bE(a.root)),b.push(bE(a.config)),b.push(bE(a.team)),b.push(bE(a.teamMcpServers)),b.push(" team skills:"),0===a.teamSkillEntries.length&&b.push(" (empty)"),a.teamSkillEntries))b.push(bE(c,4));for(let c of(b.push(bE(a.personal)),b.push(bE(a.personalMcpServers)),b.push(" personal skills:"),0===a.personalSkillEntries.length&&b.push(" (empty)"),a.personalSkillEntries))b.push(bE(c,4));for(let c of(b.push(bE(a.cacheMcp)),a.cacheMcpEntries))b.push(bE(c,2));return b.push(bE(a.backups)),b.push(` snapshots: ${a.backupCount} (ring buffer keeps 20)`),b.join("\n")}(a.plexus)),a.agents))c.push(""),c.push(function(a){let b=[`[Agent: ${a.displayName} (${a.id}) | mode=${a.mcpFileMode} | installed=${a.installed}]`];if(b.push(bE(a.root)),b.push(bE(a.mcpFile)),a.instructionFile&&b.push(bE(a.instructionFile)),b.push(bE(a.skillsDir)),0===a.skillEntries.length)b.push(" (no skill entries)");else for(let c of a.skillEntries)b.push(bE(c,2));return b.join("\n")}(d));return c.push(""),c.join("\n")}},66882:(a,b,c)=>{"use strict";c.d(b,{BF:()=>h,Qp:()=>k,R6:()=>i,dT:()=>l,kp:()=>j,nV:()=>g});var d=c(48161),e=c(76760);let f=d.homedir();process.platform;let g=e.join(f,".config","plexus"),h={root:g,team:e.join(g,"team"),personal:e.join(g,"personal"),config:e.join(g,"config.yaml"),mcpDirRel:"mcp",skillsDirRel:"skills",mcpCache:e.join(g,".cache","mcp"),backups:e.join(g,"backups")},i={"claude-code":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".claude.json"),skillsDir:e.join(f,".claude","skills"),mcpFileMode:"shared"},cursor:{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".cursor","mcp.json"),skillsDir:e.join(f,".cursor","skills"),mcpFileMode:"exclusive"},codex:{mcp:!0,skills:!0,mcpFormat:"toml",mcpPath:e.join(f,".codex","config.toml"),skillsDir:e.join(f,".codex","skills"),mcpFileMode:"shared"},"gemini-cli":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".gemini","settings.json"),skillsDir:e.join(f,".gemini","skills"),mcpFileMode:"shared"},"qwen-code":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".qwen","settings.json"),skillsDir:e.join(f,".qwen","skills"),mcpFileMode:"shared"},"factory-droid":{mcp:!0,skills:!0,mcpFormat:"json",mcpPath:e.join(f,".factory","mcp.json"),skillsDir:e.join(f,".factory","skills"),mcpFileMode:"exclusive"}},j={"claude-code":"Claude Code",cursor:"Cursor",codex:"Codex","gemini-cli":"Gemini CLI","qwen-code":"Qwen Code","factory-droid":"Factory Droid"},k={"claude-code":e.join(f,".claude"),cursor:e.join(f,".cursor"),codex:e.join(f,".codex"),"gemini-cli":e.join(f,".gemini"),"qwen-code":e.join(f,".qwen"),"factory-droid":e.join(f,".factory")},l=["claude-code","cursor","codex","gemini-cli","qwen-code","factory-droid"]},80408:()=>{},87032:()=>{},92071:(a,b,c)=>{"use strict";c.d(b,{Cw:()=>o,P3:()=>r,RC:()=>m,RV:()=>p,Rd:()=>i,Tz:()=>j,n5:()=>s,quarantineCollision:()=>q});var d=c(77598),e=c(51455),f=c(76760),g=c(1871),h=c(66882);let i=f.join(h.BF.backups,"_collisions"),j=f.join(h.BF.backups,"_legacy-residue"),k=/^\d{4}-\d{2}-\d{2}T/;async function l(){await (0,g.A0)(h.BF.backups);let a=new Date().toISOString().replace(/[:.]/g,"-");for(let b=0;b<1e3;b+=1){let c=0===b?a:`${a}-${String(b).padStart(3,"0")}`,d=f.join(h.BF.backups,c);try{return await e.mkdir(d,{recursive:!1}),{id:c,dir:d}}catch(a){if("EEXIST"!==a.code)throw a}}throw Error(`Could not allocate a unique backup directory for ${a}`)}async function m(a){let{id:b,dir:c}=await l();a?.reason&&await e.writeFile(f.join(c,"_reason.txt"),a.reason,"utf8").catch(()=>{});let d=[];for(let a of h.dT){let b,i=h.R6[a];if(!i.mcp||!await (0,g.s0)(i.mcpPath))continue;let j=!1;try{(j=(await e.lstat(i.mcpPath)).isSymbolicLink())&&(b=await e.readlink(i.mcpPath))}catch{continue}let k=f.extname(i.mcpPath)||".bak",l=`${a}-mcp${k}`,m=f.join(c,l);try{let c=await e.readFile(i.mcpPath);await e.writeFile(m,c),d.push({agent:a,backupPath:m,originalPath:i.mcpPath,wasSymlink:j,linkTarget:b})}catch{}}return await e.writeFile(f.join(c,"manifest.json"),JSON.stringify({id:b,createdAt:new Date().toISOString(),entries:d},null,2),"utf8"),await n(20),{dir:c,id:b,entries:d}}async function n(a){try{for(let b of(await e.readdir(h.BF.backups,{withFileTypes:!0})).filter(a=>a.isDirectory()&&k.test(a.name)).map(a=>a.name).sort().reverse().slice(a))await e.rm(f.join(h.BF.backups,b),{recursive:!0,force:!0})}catch{}}async function o(){try{let a=(await e.readdir(h.BF.backups,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name).sort().reverse(),b=[];for(let c of a){let a=f.join(h.BF.backups,c);try{let c=await e.readFile(f.join(a,"manifest.json"),"utf8"),d=JSON.parse(c);b.push({dir:a,id:d.id,entries:d.entries})}catch{b.push({dir:a,id:c,entries:[]})}}return b}catch{return[]}}async function p(a,b){let c,h;if(!await (0,g.s0)(a))return null;let{id:i,dir:j}=await l();b&&await e.writeFile(f.join(j,"_reason.txt"),b,"utf8").catch(()=>{});let k=(c=f.parse(a),h=d.createHash("sha256").update(f.resolve(a)).digest("hex").slice(0,8),`${c.name}.${h}${c.ext||".bak"}`),m=f.join(j,k);try{let b=await e.readFile(a);return await e.writeFile(m,b),await e.writeFile(f.join(j,"manifest.json"),JSON.stringify({id:i,createdAt:new Date().toISOString(),entries:[{agent:null,backupPath:m,originalPath:a,wasSymlink:!1}]},null,2),"utf8"),await n(20),j}catch{return null}}async function q(a){if(!await (0,g.s0)(a.sourcePath))return null;let b=new Date().toISOString().replace(/[:.]/g,"-"),c=f.join(i,b,a.agent);await (0,g.A0)(c);let d=f.join(c,f.basename(a.sourcePath));try{return await e.rename(a.sourcePath,d),d}catch{try{return(await e.lstat(a.sourcePath)).isDirectory()?(await e.cp(a.sourcePath,d,{recursive:!0}),await e.rm(a.sourcePath,{recursive:!0,force:!0})):(await e.copyFile(a.sourcePath,d),await e.unlink(a.sourcePath)),d}catch{return null}}}async function r(){let a=[];for(let b of h.dT){let c,d=h.R6[b];if(d.skills&&await (0,g.s0)(d.skillsDir)){try{c=await e.readdir(d.skillsDir)}catch{continue}for(let h of c){if(!h.includes(".plexus-backup-"))continue;let c=f.join(d.skillsDir,h),i=new Date().toISOString().replace(/[:.]/g,"-"),k=f.join(j,i,b);await (0,g.A0)(k);let l=f.join(k,h);try{await e.rename(c,l),a.push({agent:b,from:c,to:l})}catch{}}}}return{moved:a}}async function s(a){let b=(await o()).find(b=>b.id===a);if(!b)return{restored:0,errors:[`No snapshot with id ${a}`]};let c=[],d=0;for(let a of b.entries)try{try{await e.unlink(a.originalPath)}catch{}let b=await e.readFile(a.backupPath);await (0,g.A0)(f.dirname(a.originalPath)),await e.writeFile(a.originalPath,b),d+=1}catch(b){c.push(`${a.agent}: ${b.message}`)}return{restored:d,errors:c}}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/3oZxRMzj6ZICuj5g2RZmX/_buildManifest.js","static/3oZxRMzj6ZICuj5g2RZmX/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-59c0cf3deef5f26f.js","static/chunks/87c73c54-f46fec743414da25.js","static/chunks/1968-5981314117a6ea1f.js","static/chunks/main-app-e8d8ab3098122763.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-59c0cf3deef5f26f.js"/><script src="/_next/static/chunks/87c73c54-f46fec743414da25.js" async=""></script><script src="/_next/static/chunks/1968-5981314117a6ea1f.js" async=""></script><script src="/_next/static/chunks/main-app-e8d8ab3098122763.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-59c0cf3deef5f26f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9630,[],\"\"]\n3:I[1380,[],\"\"]\n4:I[887,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[887,[],\"ViewportBoundary\"]\na:I[887,[],\"MetadataBoundary\"]\nc:I[5718,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-59c0cf3deef5f26f.js"/><script src="/_next/static/chunks/87c73c54-f46fec743414da25.js" async=""></script><script src="/_next/static/chunks/1968-5981314117a6ea1f.js" async=""></script><script src="/_next/static/chunks/main-app-e8d8ab3098122763.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-59c0cf3deef5f26f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9630,[],\"\"]\n3:I[1380,[],\"\"]\n4:I[887,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[887,[],\"ViewportBoundary\"]\na:I[887,[],\"MetadataBoundary\"]\nc:I[5718,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"3oZxRMzj6ZICuj5g2RZmX\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"PQg5A87PiScQfaQ2FEogPIDl2iHP55emg0G/cav4nqI="}
|
package/vendor/plexus-agent-config-web/.next/static/chunks/app/agents/[id]/page-e83c3c5de9ba09c2.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3969],{4641:(e,s,t)=>{"use strict";t.d(s,{AgentDetail:()=>F});var l=t(4568),r=t(7483),a=t(7943),n=t(1462),i=t(1065);let x={h1:({className:e,...s})=>(0,l.jsx)("h1",{className:(0,r.cn)("mt-0 mb-4 border-plexus-border border-b pb-3 text-2xl font-semibold tracking-normal text-plexus-text",e),...s}),h2:({className:e,...s})=>(0,l.jsx)("h2",{className:(0,r.cn)("mt-7 mb-3 text-xl font-semibold tracking-normal text-plexus-text",e),...s}),h3:({className:e,...s})=>(0,l.jsx)("h3",{className:(0,r.cn)("mt-6 mb-2 text-base font-semibold tracking-normal text-plexus-text",e),...s}),h4:({className:e,...s})=>(0,l.jsx)("h4",{className:(0,r.cn)("mt-5 mb-2 text-sm font-semibold tracking-normal text-plexus-text",e),...s}),p:({className:e,...s})=>(0,l.jsx)("p",{className:(0,r.cn)("my-3 leading-7 text-plexus-text-2",e),...s}),a:({className:e,...s})=>(0,l.jsx)("a",{className:(0,r.cn)("font-medium text-plexus-accent underline-offset-4 hover:underline",e),target:"_blank",rel:"noreferrer",...s}),ul:({className:e,...s})=>(0,l.jsx)("ul",{className:(0,r.cn)("my-3 list-disc space-y-1.5 pl-6 text-plexus-text-2",e),...s}),ol:({className:e,...s})=>(0,l.jsx)("ol",{className:(0,r.cn)("my-3 list-decimal space-y-1.5 pl-6 text-plexus-text-2",e),...s}),li:({className:e,...s})=>(0,l.jsx)("li",{className:(0,r.cn)("pl-1 leading-7",e),...s}),blockquote:({className:e,...s})=>(0,l.jsx)("blockquote",{className:(0,r.cn)("my-4 border-plexus-accent/40 border-l-2 bg-plexus-accent-faint/40 px-4 py-2 text-plexus-text-2",e),...s}),hr:({className:e,...s})=>(0,l.jsx)("hr",{className:(0,r.cn)("my-6 border-plexus-border",e),...s}),code:({className:e,...s})=>(0,l.jsx)("code",{className:(0,r.cn)("rounded-sm bg-plexus-surface-2 px-1.5 py-0.5 font-mono text-[0.88em] text-plexus-text",e),...s}),pre:({className:e,...s})=>(0,l.jsx)("pre",{className:(0,r.cn)("my-4 overflow-x-auto rounded-md border border-plexus-border bg-plexus-bg p-4 text-xs leading-6 text-plexus-text [&_code]:bg-transparent [&_code]:p-0",e),...s}),table:({className:e,...s})=>(0,l.jsx)("div",{className:"my-4 overflow-x-auto rounded-md border border-plexus-border",children:(0,l.jsx)("table",{className:(0,r.cn)("w-full border-collapse text-sm",e),...s})}),th:({className:e,...s})=>(0,l.jsx)("th",{className:(0,r.cn)("border-plexus-border border-b bg-plexus-surface-2 px-3 py-2 text-left font-semibold text-plexus-text",e),...s}),td:({className:e,...s})=>(0,l.jsx)("td",{className:(0,r.cn)("border-plexus-border border-t px-3 py-2 text-plexus-text-2",e),...s})};function c({content:e,className:s}){return e.trim()?(0,l.jsx)("div",{className:(0,r.cn)("min-w-0 text-sm",s),children:(0,l.jsx)(a.oz,{remarkPlugins:[i.A],rehypePlugins:[n.A],components:x,children:e})}):(0,l.jsx)("div",{className:(0,r.cn)("text-sm text-plexus-text-3",s),children:"Empty markdown file."})}var d=t(6197),o=t(7788),u=t(7294),p=t(4926),m=t(8564),h=t(6969),b=t(9250),f=t(5572),g=t(3932),j=t(1207),v=t(8874),N=t(5587),y=t.n(N),k=t(7620);function w(e){return null==e?"—":e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}function C(e,s=60){if(e.length<=s)return e;let t=Math.floor(s/2-2),l=Math.floor(s/2-2);return`${e.slice(0,t)}…${e.slice(e.length-l)}`}function F({data:e}){let s=e.skills.filter(e=>e.managedByPlexus).length,t=e.skills.length-s;return(0,l.jsxs)("div",{className:"space-y-8",children:[(0,l.jsxs)("section",{className:"space-y-3",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,l.jsx)("h2",{className:"plexus-eyebrow",children:"Instruction Files"}),(0,l.jsx)(o.Button,{asChild:!0,variant:"ghost",size:"sm",children:(0,l.jsxs)(y(),{href:"/rules",children:["Manage in Rules page ",(0,l.jsx)(p.A,{className:"h-3 w-3",strokeWidth:1.5})]})})]}),0===e.instructionFiles.length&&(0,l.jsxs)("div",{className:"text-sm text-plexus-text-3",children:["No conventional instruction file for ",e.displayName,"."]}),e.instructionFiles.length>0&&(0,l.jsxs)(u.Z,{className:"overflow-hidden",children:[e.instructionFiles.map(s=>(0,l.jsx)("div",{className:"border-b border-plexus-border/60 p-4 text-sm last:border-0",children:(0,l.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[(0,l.jsx)("span",{className:"font-semibold text-plexus-text",children:s.label}),s.status.exists?(0,l.jsx)(d.E,{variant:"synced",children:"exists"}):(0,l.jsx)(d.E,{variant:"native",children:"not yet created"})]}),(0,l.jsx)("code",{className:"mt-1 block truncate font-mono text-xs text-plexus-text-3",children:s.status.path})]}),(0,l.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:s.status.exists?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(S,{agentId:e.id,filePath:s.status.path,mode:"view",label:"View"}),(0,l.jsx)(S,{agentId:e.id,filePath:s.status.path,mode:"edit",label:"Edit"})]}):(0,l.jsx)(S,{agentId:e.id,filePath:s.status.path,mode:"edit",label:"Create",allowCreate:!0})})]})},s.status.path)),(0,l.jsx)("div",{className:"border-t border-plexus-border/60 bg-plexus-surface-2/40 px-4 py-3 text-xs text-plexus-text-3",children:"Use Rules to edit the shared baseline, import from this agent, or apply the baseline across all tools."})]})]}),(0,l.jsx)("section",{className:"space-y-3",children:(0,l.jsxs)("details",{className:"group",children:[(0,l.jsxs)("summary",{className:"flex cursor-pointer list-none items-center justify-between rounded-md border border-plexus-border bg-plexus-surface px-4 py-3 transition-colors hover:bg-plexus-surface-2/60",children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)(m.A,{className:"h-4 w-4 text-plexus-text-3 transition-transform group-open:rotate-90",strokeWidth:1.5}),(0,l.jsx)("span",{className:"plexus-eyebrow",children:"Skills"}),(0,l.jsx)("span",{className:"text-sm text-plexus-text-2",children:e.skills.length}),s>0&&(0,l.jsxs)(d.E,{variant:"synced",children:[s," Plexus-owned"]}),t>0&&(0,l.jsxs)(d.E,{variant:"divergent",children:[t," agent-local"]})]}),(0,l.jsxs)(y(),{href:"/skills",onClick:e=>e.stopPropagation(),className:"inline-flex items-center gap-1 text-xs text-plexus-accent hover:underline",children:["Manage in Skills page ",(0,l.jsx)(p.A,{className:"h-3 w-3",strokeWidth:1.5})]})]}),(0,l.jsxs)(u.Z,{className:"mt-2 overflow-hidden",children:[(0,l.jsxs)("div",{className:"grid grid-cols-[1fr_auto_auto] gap-x-4 border-b border-plexus-border px-4 py-3 text-[11px] uppercase tracking-[0.10em] text-plexus-text-3",children:[(0,l.jsx)("div",{children:"ID"}),(0,l.jsx)("div",{className:"text-right",children:"Owner"}),(0,l.jsx)("div",{className:"text-right",children:"Action"})]}),0===e.skills.length&&(0,l.jsx)("div",{className:"px-4 py-8 text-center text-sm text-plexus-text-3",children:"No skills installed for this agent."}),e.skills.slice(0,50).map(s=>(0,l.jsxs)("div",{className:"grid grid-cols-[1fr_auto_auto] gap-x-4 border-b border-plexus-border/60 px-4 py-2.5 text-sm last:border-0 hover:bg-plexus-surface-2/40",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"font-mono text-[13px] text-plexus-text",children:s.id}),(0,l.jsx)("div",{className:"mt-0.5 text-[10px] text-plexus-text-3",children:C(s.path,80)}),s.isSymlink&&s.linkTarget&&(0,l.jsxs)("div",{className:"mt-0.5 text-[10px] text-plexus-text-3",children:["→ ",C(s.linkTarget,80)]})]}),(0,l.jsx)("div",{className:"text-right",children:s.managedByPlexus?(0,l.jsx)(d.E,{variant:"synced",children:"Plexus-owned"}):s.isSymlink?(0,l.jsx)(d.E,{variant:"native",children:"external symlink"}):(0,l.jsx)(d.E,{variant:"divergent",children:"agent-local"})}),(0,l.jsx)("div",{className:"text-right",children:s.hasSkillMd&&(0,l.jsx)(S,{agentId:e.id,filePath:`${s.path}/SKILL.md`,mode:"view",label:"View"})})]},s.path)),e.skills.length>50&&(0,l.jsxs)("div",{className:"border-t border-plexus-border/60 px-4 py-2 text-center text-xs text-plexus-text-3",children:["… and ",e.skills.length-50," more (manage on the Skills page)"]})]})]})}),(0,l.jsx)("section",{className:"space-y-3",children:(0,l.jsxs)("details",{className:"group",children:[(0,l.jsxs)("summary",{className:"flex cursor-pointer list-none items-center justify-between rounded-md border border-plexus-border bg-plexus-surface px-4 py-3 transition-colors hover:bg-plexus-surface-2/60",children:[(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsx)(m.A,{className:"h-4 w-4 text-plexus-text-3 transition-transform group-open:rotate-90",strokeWidth:1.5}),(0,l.jsx)("span",{className:"plexus-eyebrow",children:"MCP File"}),(0,l.jsx)(d.E,{variant:"exclusive"===e.mcpFileMode?"synced":"divergent",title:"exclusive"===e.mcpFileMode?"Plexus owns this file end-to-end via a symlink.":"Shared file — Plexus only rewrites its own section.",children:e.mcpFileMode}),e.mcpFile.exists?e.mcpFile.isSymlink?(0,l.jsx)(d.E,{variant:"synced",children:"symlink"}):(0,l.jsx)(d.E,{variant:"native",children:"regular file"}):(0,l.jsx)(d.E,{variant:"native",children:"missing"})]}),(0,l.jsx)("span",{className:"text-xs text-plexus-text-3",children:w(e.mcpFile.size)})]}),(0,l.jsxs)(u.Z,{className:"mt-2 p-4 text-sm",children:[(0,l.jsx)("code",{className:"font-mono text-plexus-text-2",children:e.mcpFile.path}),e.mcpFile.isSymlink&&e.mcpFile.linkTarget&&(0,l.jsxs)("div",{className:"mt-2 text-xs text-plexus-text-3",children:[(0,l.jsx)("span",{className:"text-plexus-text",children:"→"})," ",(0,l.jsx)("code",{className:"font-mono",children:e.mcpFile.linkTarget})]}),(0,l.jsxs)("div",{className:"mt-3 flex gap-4 text-xs text-plexus-text-3",children:[(0,l.jsxs)("span",{children:["size: ",w(e.mcpFile.size)]}),(0,l.jsxs)("span",{children:["mtime: ",function(e){if(!e)return"—";let s=new Date(e);return Number.isNaN(s.getTime())?"—":`${s.toISOString().slice(0,19).replace("T"," ")} UTC`}(e.mcpFile.mtime)]})]}),(0,l.jsxs)("div",{className:"mt-4 flex gap-2",children:[(0,l.jsx)(o.Button,{asChild:!0,variant:"ghost",size:"sm",children:(0,l.jsxs)(y(),{href:"/mcp",children:["Edit MCP servers ",(0,l.jsx)(p.A,{className:"h-3.5 w-3.5",strokeWidth:1.5})]})}),e.mcpFile.exists&&(0,l.jsx)(S,{agentId:e.id,filePath:e.mcpFile.path,mode:"view",label:"View raw"})]})]})]})})]})}function S({agentId:e,filePath:s,label:t,mode:r,allowCreate:a}){let n="edit"===r,[i,x]=(0,k.useState)(!1),[u,p]=(0,k.useState)(!1),[m,N]=(0,k.useState)(""),[w,C]=(0,k.useState)(!1),[F,P]=(0,k.useState)(!1),[A,E]=(0,k.useState)(null),z=/\.(md|markdown)$/i.test(s);async function B(){P(!0),E(null);try{let t=await fetch(`/api/agent/${e}/file`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({path:s,content:m})}),l=await t.json();l.ok?(E(l.backup?`Saved. Backup: ${l.backup}`:"Saved."),setTimeout(()=>p(!1),700)):E(`Save failed: ${l.message}`)}finally{P(!1)}}(0,k.useEffect)(()=>{if(u&&!w){if(a){N(""),C(!0);return}fetch(`/api/agent/${e}/file?path=${encodeURIComponent(s)}`).then(e=>e.json()).then(e=>{e.ok?N(e.content):E(`Read failed: ${e.message}`),C(!0)})}},[u,e,s,w,a]);let W=t??(n?"Edit":"View");return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(o.Button,{variant:n?"secondary":"ghost",size:"sm",onClick:function(){n?x(!0):p(!0)},children:[n?(0,l.jsx)(h.A,{className:"h-3.5 w-3.5",strokeWidth:1.5}):(0,l.jsx)(b.A,{className:"h-3.5 w-3.5",strokeWidth:1.5}),W]}),i&&(0,l.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-6",children:[(0,l.jsx)("button",{type:"button","aria-label":"Close confirmation",className:"absolute inset-0 cursor-default bg-black/70",onClick:()=>x(!1)}),(0,l.jsxs)("div",{className:"relative z-10 w-full max-w-md cursor-default overflow-hidden rounded-md border border-plexus-border bg-plexus-surface text-left shadow-lg",children:[(0,l.jsxs)("div",{className:"flex items-start gap-3 border-b border-plexus-border px-5 py-4",children:[(0,l.jsx)("div",{className:"mt-0.5 rounded-md bg-amber-500/10 p-2 text-amber-400",children:(0,l.jsx)(f.A,{className:"h-4 w-4",strokeWidth:1.5})}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("div",{className:"text-sm font-semibold text-plexus-text",children:a?"About to create a live agent file":"About to edit a live agent file"}),(0,l.jsx)("code",{className:"mt-1 block break-all font-mono text-xs text-plexus-text-3",children:s})]}),(0,l.jsx)("button",{type:"button","aria-label":"Cancel",onClick:()=>x(!1),className:"text-plexus-text-3 hover:text-plexus-text",children:(0,l.jsx)(g.A,{className:"h-4 w-4",strokeWidth:1.5})})]}),(0,l.jsxs)("div",{className:"space-y-3 px-5 py-4 text-sm text-plexus-text-2",children:[(0,l.jsx)("p",{children:"Changes save directly to the file the agent reads — there is no staging step."}),(0,l.jsxs)("div",{className:"flex items-start gap-2 rounded-md border border-plexus-border bg-plexus-surface-2/60 px-3 py-2 text-xs",children:[(0,l.jsx)(j.A,{className:"mt-0.5 h-3.5 w-3.5 flex-shrink-0 text-plexus-accent",strokeWidth:1.5}),(0,l.jsxs)("span",{children:["Plexus will ",(0,l.jsx)("span",{className:"text-plexus-text",children:"automatically snapshot"})," the current contents before the first save. If anything goes wrong, restore it from the"," ",(0,l.jsx)(y(),{href:"/backups",className:"text-plexus-accent hover:underline",children:"Backups"})," ","page."]})]})]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-plexus-border bg-plexus-surface-2/40 px-5 py-3",children:[(0,l.jsx)(o.Button,{variant:"ghost",size:"sm",onClick:()=>x(!1),children:"Cancel"}),(0,l.jsxs)(o.Button,{variant:"primary",size:"sm",onClick:function(){x(!1),p(!0)},children:[(0,l.jsx)(h.A,{className:"h-3.5 w-3.5",strokeWidth:1.5}),a?"Create file":"Yes, edit"]})]})]})]}),u&&(0,l.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-6",children:[(0,l.jsx)("button",{type:"button","aria-label":"Close file viewer",className:"absolute inset-0 cursor-default bg-black/70",onClick:()=>p(!1)}),(0,l.jsxs)("div",{className:"relative z-10 flex h-[80vh] w-[80vw] max-w-5xl cursor-default flex-col overflow-hidden rounded-md border border-plexus-border bg-plexus-surface text-left shadow-lg",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between border-b border-plexus-border px-5 py-3",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[n?(0,l.jsx)(d.E,{variant:"divergent",children:"editing"}):(0,l.jsx)(d.E,{variant:"synced",children:"read only"}),(0,l.jsx)("code",{className:"font-mono text-xs text-plexus-text-3",children:s})]}),(0,l.jsx)("button",{type:"button","aria-label":"Close",onClick:()=>p(!1),className:"text-plexus-text-3 hover:text-plexus-text",children:(0,l.jsx)(g.A,{className:"h-4 w-4",strokeWidth:1.5})})]}),n&&(0,l.jsxs)("div",{className:"flex items-center gap-2 border-b border-plexus-border bg-amber-500/5 px-5 py-2 text-xs text-amber-400/90",children:[(0,l.jsx)(j.A,{className:"h-3.5 w-3.5 flex-shrink-0",strokeWidth:1.5}),(0,l.jsxs)("span",{children:["Auto-backup runs before save. Restore from"," ",(0,l.jsx)(y(),{href:"/backups",className:"underline",children:"/backups"})," ","any time."]})]}),A&&(0,l.jsx)("div",{className:"border-b border-plexus-border bg-plexus-surface-2 px-5 py-2 text-xs text-plexus-text-2",children:A}),(0,l.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden bg-plexus-bg",children:w?z?n?(0,l.jsxs)("div",{className:"grid h-full min-h-0 grid-cols-1 lg:grid-cols-2",children:[(0,l.jsxs)("div",{className:"flex min-h-0 flex-col border-plexus-border border-b lg:border-r lg:border-b-0",children:[(0,l.jsx)("div",{className:"border-plexus-border border-b bg-plexus-surface px-4 py-2 text-[11px] font-medium uppercase tracking-[0.12em] text-plexus-text-3",children:"Markdown"}),(0,l.jsx)("textarea",{className:"min-h-[260px] flex-1 resize-none bg-plexus-bg p-4 font-mono text-xs leading-6 text-plexus-text outline-none",value:m,onChange:e=>N(e.target.value),spellCheck:!1})]}),(0,l.jsxs)("div",{className:"flex min-h-0 flex-col",children:[(0,l.jsx)("div",{className:"border-plexus-border border-b bg-plexus-surface px-4 py-2 text-[11px] font-medium uppercase tracking-[0.12em] text-plexus-text-3",children:"Preview"}),(0,l.jsx)("div",{className:"min-h-0 flex-1 overflow-auto px-5 py-4",children:(0,l.jsx)(c,{content:m})})]})]}):(0,l.jsx)("div",{className:"h-full overflow-auto px-6 py-5",children:(0,l.jsx)(c,{content:m})}):(0,l.jsx)("textarea",{className:"h-full w-full resize-none bg-plexus-bg p-4 font-mono text-xs leading-6 text-plexus-text outline-none",value:m,readOnly:!n,onChange:e=>N(e.target.value),spellCheck:!1}):(0,l.jsxs)("div",{className:"flex h-full items-center justify-center gap-2 text-sm text-plexus-text-3",children:[(0,l.jsx)(v.A,{className:"h-4 w-4 animate-spin",strokeWidth:1.5}),"Loading file…"]})}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-plexus-border px-5 py-3",children:[(0,l.jsx)(o.Button,{variant:"ghost",size:"sm",onClick:()=>p(!1),children:"Close"}),n&&(0,l.jsxs)(o.Button,{variant:"primary",size:"sm",onClick:B,disabled:F,children:[F&&(0,l.jsx)(v.A,{className:"h-3.5 w-3.5 animate-spin",strokeWidth:1.5}),F?"Saving…":"Save"]})]})]})]})]})}},4980:(e,s,t)=>{Promise.resolve().then(t.bind(t,4641)),Promise.resolve().then(t.bind(t,4228)),Promise.resolve().then(t.t.bind(t,5587,23))},6197:(e,s,t)=>{"use strict";t.d(s,{E:()=>n,m:()=>i});var l=t(4568),r=t(7483);let a=(0,t(1397).F)("inline-flex items-center gap-1 rounded-sm px-2 h-5 text-[11px] font-medium tracking-[0.01em]",{variants:{variant:{team:"bg-plexus-info/15 text-plexus-info",personal:"bg-plexus-accent-faint text-plexus-accent",synced:"bg-plexus-ok/15 text-plexus-ok",divergent:"bg-plexus-warn/15 text-plexus-warn",native:"bg-plexus-text-3/15 text-plexus-text-3",beta:"bg-plexus-accent-faint text-plexus-accent border border-plexus-accent/25",danger:"bg-plexus-err/13 text-plexus-err",outline:"border border-plexus-border text-plexus-text-2"}},defaultVariants:{variant:"outline"}});function n({className:e,variant:s,...t}){return(0,l.jsx)("span",{className:(0,r.cn)(a({variant:s}),e),...t})}function i({className:e,tone:s="ok"}){return(0,l.jsx)("span",{className:(0,r.cn)("inline-block h-1.5 w-1.5 rounded-full",{ok:"bg-plexus-ok",warn:"bg-plexus-warn",err:"bg-plexus-err",info:"bg-plexus-info",accent:"bg-plexus-accent",mute:"bg-plexus-text-3"}[s],e)})}},7294:(e,s,t)=>{"use strict";t.d(s,{Z:()=>n});var l=t(4568),r=t(7483),a=t(7620);let n=(0,a.forwardRef)(({className:e,...s},t)=>(0,l.jsx)("div",{ref:t,className:(0,r.cn)("rounded-md border border-plexus-border bg-plexus-surface","transition-colors duration-plexus-normal ease-plexus-out",e),...s}));n.displayName="Card",(0,a.forwardRef)(({className:e,...s},t)=>(0,l.jsx)(n,{ref:t,className:(0,r.cn)("hover:border-plexus-border-strong hover:-translate-y-px",e),...s})).displayName="CardHover"},7483:(e,s,t)=>{"use strict";t.d(s,{cn:()=>a});var l=t(9917),r=t(2809);function a(...e){return(0,r.QP)((0,l.$)(e))}},7788:(e,s,t)=>{"use strict";t.d(s,{Button:()=>c});var l=t(4568),r=t(7483),a=t(8347),n=t(1397),i=t(7620);let x=(0,n.F)((0,r.cn)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded font-medium","transition-colors duration-plexus-normal ease-plexus-out","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-plexus-accent/50 focus-visible:ring-offset-1 focus-visible:ring-offset-plexus-bg","disabled:pointer-events-none disabled:opacity-50"),{variants:{variant:{primary:"bg-plexus-accent text-[#1a1a17] hover:bg-plexus-accent-2 border border-plexus-accent",secondary:"bg-plexus-surface-2 text-plexus-text border border-plexus-border hover:bg-plexus-surface hover:border-plexus-border-strong",ghost:"bg-transparent text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text border border-transparent",danger:"bg-transparent text-plexus-err border border-plexus-err/35 hover:bg-plexus-err/10","danger-solid":"bg-plexus-err text-white border border-plexus-err hover:bg-plexus-err/90"},size:{default:"h-9 px-3.5 text-sm",sm:"h-7 px-2.5 text-xs",lg:"h-10 px-4 text-sm",icon:"h-9 w-9 p-0"}},defaultVariants:{variant:"secondary",size:"default"}}),c=(0,i.forwardRef)(({className:e,variant:s,size:t,asChild:n=!1,type:i="button",...c},d)=>{let o=n?a.DX:"button";return(0,l.jsx)(o,{ref:d,type:n?void 0:i,className:(0,r.cn)(x({variant:s,size:t}),e),...c})});c.displayName="Button"}},e=>{e.O(0,[4399,5587,3090,587,1968,7358],()=>e(e.s=4980)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{572:(e,s,t)=>{"use strict";t.d(s,{ThemeProvider:()=>l});var r=t(4568),a=t(9227);function l({children:e}){return(0,r.jsx)(a.N,{attribute:"data-theme",defaultTheme:"light",enableSystem:!0,disableTransitionOnChange:!0,themes:["dark","light"],children:e})}},1107:(e,s,t)=>{"use strict";t.d(s,{AppSidebar:()=>w});var r=t(4568),a=t(6439),l=t(6197),n=t(7483),i=t(4435),o=t(6581),u=t(5830),x=t(1207),c=t(7939),p=t(2928),d=t(6706),b=t(6356),m=t(5885),h=t(5587),g=t.n(h),f=t(9748);let v={en:{tagline:"team agent config",workspace:"Workspace",configuration:"Configuration",dashboard:"Dashboard",rules:"Rules",mcp:"MCP Servers",skills:"Skills",mirror:"Mirror",backups:"Backups",debug:"Debug",team:"Team",settings:"Settings",poweredBy:"Powered by",idle:"Idle",runSync:"Run sync to see status"},zh:{tagline:"团队 AI Agent 配置",workspace:"工作区",configuration:"配置",dashboard:"仪表盘",rules:"规则",mcp:"MCP 服务",skills:"技能",mirror:"镜像同步",backups:"备份",debug:"调试",team:"团队",settings:"设置",poweredBy:"Powered by",idle:"空闲",runSync:"运行同步后查看状态"}};function k({className:e}){return(0,r.jsxs)("svg",{role:"img",viewBox:"0 0 24 24",className:e,fill:"currentColor",children:[(0,r.jsx)("title",{children:"GitHub"}),(0,r.jsx)("path",{d:"M12 .5C5.65.5.5 5.65.5 12c0 5.09 3.29 9.39 7.86 10.91.58.11.79-.25.79-.56v-2.14c-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.69-1.28-1.69-1.05-.72.08-.71.08-.71 1.16.08 1.77 1.19 1.77 1.19 1.03 1.76 2.7 1.25 3.36.96.1-.75.4-1.25.73-1.54-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.28 1.19-3.09-.12-.29-.52-1.46.11-3.04 0 0 .97-.31 3.16 1.18a10.9 10.9 0 0 1 5.75 0c2.19-1.49 3.16-1.18 3.16-1.18.63 1.58.23 2.75.11 3.04.74.81 1.19 1.83 1.19 3.09 0 4.42-2.69 5.4-5.25 5.69.41.36.78 1.06.78 2.14v3.16c0 .31.21.67.79.56A11.52 11.52 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"})]})}function w(){let e=(0,f.usePathname)(),{locale:s}=(0,a.o)(),t=v[s];return(0,r.jsxs)("aside",{className:"flex w-full shrink-0 flex-col border-plexus-border border-b bg-plexus-surface px-3 py-5 lg:sticky lg:top-0 lg:h-screen lg:w-[240px] lg:border-r lg:border-b-0",children:[(0,r.jsxs)("div",{className:"mb-6 px-2",children:[(0,r.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,r.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-full bg-plexus-accent"}),(0,r.jsx)("span",{className:"plexus-title",children:"Plexus"}),(0,r.jsxs)("span",{className:"font-mono text-[11px] text-plexus-text-3",children:["v","0.0.7"]})]}),(0,r.jsx)("div",{className:"mt-1 px-3 text-[12px] tracking-[0.02em] text-plexus-text-3",children:t.tagline})]}),[{group:t.workspace,items:[{href:"/",label:t.dashboard,icon:i.A},{href:"/rules",label:t.rules,icon:o.A},{href:"/mcp",label:t.mcp,icon:u.A},{href:"/skills",label:t.skills,icon:x.A},{href:"/mirror",label:t.mirror,icon:c.A}]},{group:t.configuration,items:[{href:"/backups",label:t.backups,icon:p.A},{href:"/debug",label:t.debug,icon:d.A},{href:"/team",label:t.team,icon:b.A,beta:!0},{href:"/settings",label:t.settings,icon:m.A}]}].map((s,t)=>(0,r.jsxs)("div",{className:(0,n.cn)("px-1",0===t?"mb-2":""),children:[t>0&&(0,r.jsx)("div",{className:"my-3.5 h-px bg-plexus-border"}),(0,r.jsx)("div",{className:"plexus-eyebrow mb-2 px-2",children:s.group}),(0,r.jsx)("div",{className:"flex flex-col gap-0.5",children:s.items.map(s=>{let t="/"===s.href?"/"===e:e===s.href||e.startsWith(`${s.href}/`),a=s.icon;return(0,r.jsxs)(g(),{href:s.href,className:(0,n.cn)("flex h-8 items-center gap-2.5 rounded-sm px-2.5 text-[13px]","transition-colors duration-plexus-fast ease-plexus-out",t?"bg-plexus-surface-2 text-plexus-text shadow-[inset_2px_0_0_var(--plexus-accent)]":"text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text"),children:[(0,r.jsx)(a,{className:"h-4 w-4 shrink-0",strokeWidth:1.5}),(0,r.jsx)("span",{children:s.label}),s.beta&&(0,r.jsx)(l.E,{variant:"beta",className:"ml-auto",children:"beta"})]},s.href)})})]},s.group)),(0,r.jsxs)("div",{className:"mt-auto border-t border-plexus-border px-3 pt-4",children:[(0,r.jsxs)("a",{href:"https://github.com/miniLV/Plexus",target:"_blank",rel:"noreferrer",className:"group mb-4 flex items-center gap-2.5 rounded-md border border-plexus-border bg-plexus-surface-2/70 px-2.5 py-2 shadow-[inset_0_1px_0_rgb(255_255_255/0.035)] transition-colors duration-plexus-fast ease-plexus-out hover:border-plexus-accent/45 hover:bg-plexus-surface-2",children:[(0,r.jsx)("span",{className:"grid h-7 w-7 shrink-0 place-items-center rounded-sm border border-plexus-border bg-plexus-bg text-plexus-text-2 transition-colors duration-plexus-fast ease-plexus-out group-hover:border-plexus-accent/40 group-hover:text-plexus-accent",children:(0,r.jsx)(k,{className:"h-4 w-4"})}),(0,r.jsxs)("span",{className:"min-w-0 leading-none",children:[(0,r.jsx)("span",{className:"block text-[9px] font-medium uppercase tracking-[0.14em] text-plexus-text-mute",children:t.poweredBy}),(0,r.jsx)("span",{className:"mt-1 block text-[13px] font-semibold tracking-[0.01em] text-plexus-text",children:"miniLV"})]})]}),(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,r.jsxs)("span",{className:"relative inline-flex h-1.5 w-1.5",children:[(0,r.jsx)("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-plexus-ok opacity-60"}),(0,r.jsx)("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-plexus-ok"})]}),(0,r.jsx)("span",{className:"text-sm font-medium text-plexus-text",children:t.idle})]}),(0,r.jsx)("div",{className:"text-[12px] tracking-[0.02em] text-plexus-text-3",children:t.runSync})]})]})}},1458:(e,s,t)=>{"use strict";t.d(s,{AppTopbar:()=>m});var r=t(4568),a=t(6439),l=t(7788),n=t(3913);function i(){let{locale:e,toggleLocale:s}=(0,a.o)();return(0,r.jsxs)(l.Button,{type:"button",variant:"ghost",size:"sm",onClick:s,title:"zh"===e?"Switch to English":"切换到中文",className:"h-9",children:[(0,r.jsx)(n.A,{className:"h-4 w-4",strokeWidth:1.5}),"zh"===e?"English":"中文"]})}var o=t(7483),u=t(9227),x=t(7620);function c({className:e}){let{resolvedTheme:s,setTheme:t}=(0,u.D)(),[a,l]=(0,x.useState)(!1);(0,x.useEffect)(()=>l(!0),[]);let n=a&&"light"===s;return(0,r.jsx)("button",{type:"button","aria-label":"Toggle theme",title:n?"Switch to dark":"Switch to light",onClick:()=>t(n?"dark":"light"),className:(0,o.cn)("relative h-7 w-14 rounded-full border border-plexus-border bg-plexus-surface-2","transition-colors duration-plexus-normal",e),children:(0,r.jsx)("span",{className:(0,o.cn)("absolute top-[2px] left-[2px] h-[22px] w-[22px] rounded-full bg-plexus-accent","transition-transform duration-plexus-normal ease-plexus-out",n&&"translate-x-7")})})}var p=t(8742),d=t(9748);let b={en:{workspace:"Workspace",configuration:"Configuration",dashboard:"Dashboard",rules:"Rules",mcp:"MCP Servers",skills:"Skills",mirror:"Mirror",backups:"Backups",debug:"Debug",team:"Team",settings:"Settings",agentDetail:"Agent detail",plexus:"Plexus",searchTitle:"Search (coming soon)",search:"Search..."},zh:{workspace:"工作区",configuration:"配置",dashboard:"仪表盘",rules:"规则",mcp:"MCP 服务",skills:"技能",mirror:"镜像同步",backups:"备份",debug:"调试",team:"团队",settings:"设置",agentDetail:"Agent 详情",plexus:"Plexus",searchTitle:"搜索(即将支持)",search:"搜索..."}};function m(){let e=(0,d.usePathname)(),{locale:s}=(0,a.o)(),t=b[s],{group:l,label:n}=function(e,s){let t={"/":s.dashboard,"/rules":s.rules,"/mcp":s.mcp,"/skills":s.skills,"/mirror":s.mirror,"/backups":s.backups,"/debug":s.debug,"/team":s.team,"/settings":s.settings};if("/"===e)return{group:s.workspace,label:s.dashboard};if(e.startsWith("/agents/"))return{group:`${s.workspace} / ${s.dashboard}`,label:s.agentDetail};let r=`/${e.split("/")[1]}`,a=t[r]??s.plexus;return{group:"/backups"===r||"/team"===r||"/settings"===r||"/debug"===r?s.configuration:s.workspace,label:a}}(e,t);return(0,r.jsxs)("header",{className:"flex min-h-[64px] shrink-0 flex-wrap items-center justify-between gap-3 border-b border-plexus-border px-4 py-3 lg:px-10",children:[(0,r.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-3 text-[12px] tracking-[0.02em] text-plexus-text-3",children:[l.split(" / ").map((e,s,t)=>(0,r.jsxs)("span",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{children:e}),s<t.length-1&&(0,r.jsx)("span",{children:"/"})]},`${e}-${s}`)),(0,r.jsx)("span",{children:"/"}),(0,r.jsx)("span",{className:"text-plexus-text-2",children:n})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2 lg:gap-3",children:[(0,r.jsxs)("button",{type:"button",className:"inline-flex h-9 items-center gap-2 rounded border border-transparent px-3 text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text",title:t.searchTitle,disabled:!0,children:[(0,r.jsx)(p.A,{className:"h-4 w-4",strokeWidth:1.5}),(0,r.jsx)("span",{className:"text-[12px] tracking-[0.02em] text-plexus-text-3",children:t.search}),(0,r.jsx)("span",{className:"ml-2 rounded border border-plexus-border bg-plexus-surface-2 px-1.5 py-0.5 font-mono text-[11px] text-plexus-text-mute",children:"⌘K"})]}),(0,r.jsx)(i,{}),(0,r.jsx)(c,{}),(0,r.jsx)("div",{className:"grid h-8 w-8 place-items-center rounded-full bg-plexus-accent-faint font-semibold text-plexus-accent",children:"M"})]})]})}},4309:(e,s,t)=>{Promise.resolve().then(t.bind(t,1107)),Promise.resolve().then(t.bind(t,1458)),Promise.resolve().then(t.bind(t,6439)),Promise.resolve().then(t.bind(t,572)),Promise.resolve().then(t.bind(t,4757)),Promise.resolve().then(t.t.bind(t,3597,23)),Promise.resolve().then(t.t.bind(t,6944,23))},4757:(e,s,t)=>{"use strict";t.d(s,{TooltipProvider:()=>i});var r=t(4568),a=t(7483),l=t(7257),n=t(7620);let i=l.Kq;l.bL,l.l9,(0,n.forwardRef)(({className:e,sideOffset:s=6,...t},n)=>(0,r.jsx)(l.ZL,{children:(0,r.jsx)(l.UC,{ref:n,sideOffset:s,className:(0,a.cn)("z-50 rounded-sm border border-plexus-border bg-plexus-surface-2","px-2 py-1 text-xs text-plexus-text shadow-sm","animate-in fade-in-0 zoom-in-95",e),...t})})).displayName=l.UC.displayName},6197:(e,s,t)=>{"use strict";t.d(s,{E:()=>n,m:()=>i});var r=t(4568),a=t(7483);let l=(0,t(1397).F)("inline-flex items-center gap-1 rounded-sm px-2 h-5 text-[11px] font-medium tracking-[0.01em]",{variants:{variant:{team:"bg-plexus-info/15 text-plexus-info",personal:"bg-plexus-accent-faint text-plexus-accent",synced:"bg-plexus-ok/15 text-plexus-ok",divergent:"bg-plexus-warn/15 text-plexus-warn",native:"bg-plexus-text-3/15 text-plexus-text-3",beta:"bg-plexus-accent-faint text-plexus-accent border border-plexus-accent/25",danger:"bg-plexus-err/13 text-plexus-err",outline:"border border-plexus-border text-plexus-text-2"}},defaultVariants:{variant:"outline"}});function n({className:e,variant:s,...t}){return(0,r.jsx)("span",{className:(0,a.cn)(l({variant:s}),e),...t})}function i({className:e,tone:s="ok"}){return(0,r.jsx)("span",{className:(0,a.cn)("inline-block h-1.5 w-1.5 rounded-full",{ok:"bg-plexus-ok",warn:"bg-plexus-warn",err:"bg-plexus-err",info:"bg-plexus-info",accent:"bg-plexus-accent",mute:"bg-plexus-text-3"}[s],e)})}},6439:(e,s,t)=>{"use strict";t.d(s,{LanguageProvider:()=>x,o:()=>c});var r=t(4568);let a="plexus.locale";function l(e){if(!e)return null;let s=e.toLowerCase();return"zh"===s||s.startsWith("zh-")?"zh":"en"===s||s.startsWith("en-")?"en":null}var n=t(9748),i=t(7620);let o=(0,i.createContext)(null);function u(e){window.localStorage.setItem(a,e),document.cookie=`plexus-locale=${e}; path=/; max-age=31536000; samesite=lax`}function x({children:e,initialLocale:s}){let t=(0,n.useRouter)(),[c,p]=(0,i.useState)(s);(0,i.useEffect)(()=>{var e;let r,n=l(window.localStorage.getItem(a))??s??(r=(Array.isArray(e=window.navigator.languages??window.navigator.language)?e.map((e,s)=>({value:e,q:1,index:s})):"string"==typeof e?e.split(",").map((e,s)=>{let[t="",...r]=e.trim().split(";"),a=r.find(e=>e.trim().startsWith("q=")),l=a?Number(a.trim().slice(2)):1;return{value:t,q:Number.isFinite(l)?l:1,index:s}}):[]).map(e=>({...e,locale:l(e.value)})).filter(e=>null!==e.locale).sort((e,s)=>s.q-e.q||e.index-s.index),r[0]?.locale??"en");if(n!==s){u(n),t.refresh();return}u(n),p(s)},[s,t]);let d=(0,i.useMemo)(()=>({locale:c,setLocale(e){u(e),t.refresh()},toggleLocale(){u("zh"===c?"en":"zh"),t.refresh()}}),[c,t]);return(0,r.jsx)(o.Provider,{value:d,children:e})}function c(){let e=(0,i.useContext)(o);if(!e)throw Error("useLanguage must be used inside LanguageProvider");return e}},6944:()=>{},7483:(e,s,t)=>{"use strict";t.d(s,{cn:()=>l});var r=t(9917),a=t(2809);function l(...e){return(0,a.QP)((0,r.$)(e))}},7788:(e,s,t)=>{"use strict";t.d(s,{Button:()=>u});var r=t(4568),a=t(7483),l=t(8347),n=t(1397),i=t(7620);let o=(0,n.F)((0,a.cn)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded font-medium","transition-colors duration-plexus-normal ease-plexus-out","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-plexus-accent/50 focus-visible:ring-offset-1 focus-visible:ring-offset-plexus-bg","disabled:pointer-events-none disabled:opacity-50"),{variants:{variant:{primary:"bg-plexus-accent text-[#1a1a17] hover:bg-plexus-accent-2 border border-plexus-accent",secondary:"bg-plexus-surface-2 text-plexus-text border border-plexus-border hover:bg-plexus-surface hover:border-plexus-border-strong",ghost:"bg-transparent text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text border border-transparent",danger:"bg-transparent text-plexus-err border border-plexus-err/35 hover:bg-plexus-err/10","danger-solid":"bg-plexus-err text-white border border-plexus-err hover:bg-plexus-err/90"},size:{default:"h-9 px-3.5 text-sm",sm:"h-7 px-2.5 text-xs",lg:"h-10 px-4 text-sm",icon:"h-9 w-9 p-0"}},defaultVariants:{variant:"secondary",size:"default"}}),u=(0,i.forwardRef)(({className:e,variant:s,size:t,asChild:n=!1,type:i="button",...u},x)=>{let c=n?l.DX:"button";return(0,r.jsx)(c,{ref:x,type:n?void 0:i,className:(0,a.cn)(o({variant:s,size:t}),e),...u})});u.displayName="Button"}},e=>{e.O(0,[2380,4399,5587,3051,626,587,1968,7358],()=>e(e.s=4309)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{572:(e,s,t)=>{"use strict";t.d(s,{ThemeProvider:()=>l});var r=t(4568),a=t(9227);function l({children:e}){return(0,r.jsx)(a.N,{attribute:"data-theme",defaultTheme:"light",enableSystem:!0,disableTransitionOnChange:!0,themes:["dark","light"],children:e})}},1107:(e,s,t)=>{"use strict";t.d(s,{AppSidebar:()=>w});var r=t(4568),a=t(6439),l=t(6197),n=t(7483),i=t(4435),o=t(6581),u=t(5830),x=t(1207),c=t(7939),p=t(2928),d=t(6706),b=t(6356),m=t(5885),h=t(5587),g=t.n(h),f=t(9748);let v={en:{tagline:"team agent config",workspace:"Workspace",configuration:"Configuration",dashboard:"Dashboard",rules:"Rules",mcp:"MCP Servers",skills:"Skills",mirror:"Mirror",backups:"Backups",debug:"Debug",team:"Team",settings:"Settings",poweredBy:"Powered by",idle:"Idle",runSync:"Run sync to see status"},zh:{tagline:"团队 AI Agent 配置",workspace:"工作区",configuration:"配置",dashboard:"仪表盘",rules:"规则",mcp:"MCP 服务",skills:"技能",mirror:"镜像同步",backups:"备份",debug:"调试",team:"团队",settings:"设置",poweredBy:"Powered by",idle:"空闲",runSync:"运行同步后查看状态"}};function k({className:e}){return(0,r.jsxs)("svg",{role:"img",viewBox:"0 0 24 24",className:e,fill:"currentColor",children:[(0,r.jsx)("title",{children:"GitHub"}),(0,r.jsx)("path",{d:"M12 .5C5.65.5.5 5.65.5 12c0 5.09 3.29 9.39 7.86 10.91.58.11.79-.25.79-.56v-2.14c-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.69-1.28-1.69-1.05-.72.08-.71.08-.71 1.16.08 1.77 1.19 1.77 1.19 1.03 1.76 2.7 1.25 3.36.96.1-.75.4-1.25.73-1.54-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.28 1.19-3.09-.12-.29-.52-1.46.11-3.04 0 0 .97-.31 3.16 1.18a10.9 10.9 0 0 1 5.75 0c2.19-1.49 3.16-1.18 3.16-1.18.63 1.58.23 2.75.11 3.04.74.81 1.19 1.83 1.19 3.09 0 4.42-2.69 5.4-5.25 5.69.41.36.78 1.06.78 2.14v3.16c0 .31.21.67.79.56A11.52 11.52 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"})]})}function w(){let e=(0,f.usePathname)(),{locale:s}=(0,a.o)(),t=v[s];return(0,r.jsxs)("aside",{className:"flex w-full shrink-0 flex-col border-plexus-border border-b bg-plexus-surface px-3 py-5 lg:sticky lg:top-0 lg:h-screen lg:w-[240px] lg:border-r lg:border-b-0",children:[(0,r.jsxs)("div",{className:"mb-6 px-2",children:[(0,r.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,r.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-full bg-plexus-accent"}),(0,r.jsx)("span",{className:"plexus-title",children:"Plexus"}),(0,r.jsxs)("span",{className:"font-mono text-[11px] text-plexus-text-3",children:["v","0.0.8"]})]}),(0,r.jsx)("div",{className:"mt-1 px-3 text-[12px] tracking-[0.02em] text-plexus-text-3",children:t.tagline})]}),[{group:t.workspace,items:[{href:"/",label:t.dashboard,icon:i.A},{href:"/rules",label:t.rules,icon:o.A},{href:"/mcp",label:t.mcp,icon:u.A},{href:"/skills",label:t.skills,icon:x.A},{href:"/mirror",label:t.mirror,icon:c.A}]},{group:t.configuration,items:[{href:"/backups",label:t.backups,icon:p.A},{href:"/debug",label:t.debug,icon:d.A},{href:"/team",label:t.team,icon:b.A,beta:!0},{href:"/settings",label:t.settings,icon:m.A}]}].map((s,t)=>(0,r.jsxs)("div",{className:(0,n.cn)("px-1",0===t?"mb-2":""),children:[t>0&&(0,r.jsx)("div",{className:"my-3.5 h-px bg-plexus-border"}),(0,r.jsx)("div",{className:"plexus-eyebrow mb-2 px-2",children:s.group}),(0,r.jsx)("div",{className:"flex flex-col gap-0.5",children:s.items.map(s=>{let t="/"===s.href?"/"===e:e===s.href||e.startsWith(`${s.href}/`),a=s.icon;return(0,r.jsxs)(g(),{href:s.href,className:(0,n.cn)("flex h-8 items-center gap-2.5 rounded-sm px-2.5 text-[13px]","transition-colors duration-plexus-fast ease-plexus-out",t?"bg-plexus-surface-2 text-plexus-text shadow-[inset_2px_0_0_var(--plexus-accent)]":"text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text"),children:[(0,r.jsx)(a,{className:"h-4 w-4 shrink-0",strokeWidth:1.5}),(0,r.jsx)("span",{children:s.label}),s.beta&&(0,r.jsx)(l.E,{variant:"beta",className:"ml-auto",children:"beta"})]},s.href)})})]},s.group)),(0,r.jsxs)("div",{className:"mt-auto border-t border-plexus-border px-3 pt-4",children:[(0,r.jsxs)("a",{href:"https://github.com/miniLV/Plexus",target:"_blank",rel:"noreferrer",className:"group mb-4 flex items-center gap-2.5 rounded-md border border-plexus-border bg-plexus-surface-2/70 px-2.5 py-2 shadow-[inset_0_1px_0_rgb(255_255_255/0.035)] transition-colors duration-plexus-fast ease-plexus-out hover:border-plexus-accent/45 hover:bg-plexus-surface-2",children:[(0,r.jsx)("span",{className:"grid h-7 w-7 shrink-0 place-items-center rounded-sm border border-plexus-border bg-plexus-bg text-plexus-text-2 transition-colors duration-plexus-fast ease-plexus-out group-hover:border-plexus-accent/40 group-hover:text-plexus-accent",children:(0,r.jsx)(k,{className:"h-4 w-4"})}),(0,r.jsxs)("span",{className:"min-w-0 leading-none",children:[(0,r.jsx)("span",{className:"block text-[9px] font-medium uppercase tracking-[0.14em] text-plexus-text-mute",children:t.poweredBy}),(0,r.jsx)("span",{className:"mt-1 block text-[13px] font-semibold tracking-[0.01em] text-plexus-text",children:"miniLV"})]})]}),(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,r.jsxs)("span",{className:"relative inline-flex h-1.5 w-1.5",children:[(0,r.jsx)("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-plexus-ok opacity-60"}),(0,r.jsx)("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-plexus-ok"})]}),(0,r.jsx)("span",{className:"text-sm font-medium text-plexus-text",children:t.idle})]}),(0,r.jsx)("div",{className:"text-[12px] tracking-[0.02em] text-plexus-text-3",children:t.runSync})]})]})}},1458:(e,s,t)=>{"use strict";t.d(s,{AppTopbar:()=>m});var r=t(4568),a=t(6439),l=t(7788),n=t(3913);function i(){let{locale:e,toggleLocale:s}=(0,a.o)();return(0,r.jsxs)(l.Button,{type:"button",variant:"ghost",size:"sm",onClick:s,title:"zh"===e?"Switch to English":"切换到中文",className:"h-9",children:[(0,r.jsx)(n.A,{className:"h-4 w-4",strokeWidth:1.5}),"zh"===e?"English":"中文"]})}var o=t(7483),u=t(9227),x=t(7620);function c({className:e}){let{resolvedTheme:s,setTheme:t}=(0,u.D)(),[a,l]=(0,x.useState)(!1);(0,x.useEffect)(()=>l(!0),[]);let n=a&&"light"===s;return(0,r.jsx)("button",{type:"button","aria-label":"Toggle theme",title:n?"Switch to dark":"Switch to light",onClick:()=>t(n?"dark":"light"),className:(0,o.cn)("relative h-7 w-14 rounded-full border border-plexus-border bg-plexus-surface-2","transition-colors duration-plexus-normal",e),children:(0,r.jsx)("span",{className:(0,o.cn)("absolute top-[2px] left-[2px] h-[22px] w-[22px] rounded-full bg-plexus-accent","transition-transform duration-plexus-normal ease-plexus-out",n&&"translate-x-7")})})}var p=t(8742),d=t(9748);let b={en:{workspace:"Workspace",configuration:"Configuration",dashboard:"Dashboard",rules:"Rules",mcp:"MCP Servers",skills:"Skills",mirror:"Mirror",backups:"Backups",debug:"Debug",team:"Team",settings:"Settings",agentDetail:"Agent detail",plexus:"Plexus",searchTitle:"Search (coming soon)",search:"Search..."},zh:{workspace:"工作区",configuration:"配置",dashboard:"仪表盘",rules:"规则",mcp:"MCP 服务",skills:"技能",mirror:"镜像同步",backups:"备份",debug:"调试",team:"团队",settings:"设置",agentDetail:"Agent 详情",plexus:"Plexus",searchTitle:"搜索(即将支持)",search:"搜索..."}};function m(){let e=(0,d.usePathname)(),{locale:s}=(0,a.o)(),t=b[s],{group:l,label:n}=function(e,s){let t={"/":s.dashboard,"/rules":s.rules,"/mcp":s.mcp,"/skills":s.skills,"/mirror":s.mirror,"/backups":s.backups,"/debug":s.debug,"/team":s.team,"/settings":s.settings};if("/"===e)return{group:s.workspace,label:s.dashboard};if(e.startsWith("/agents/"))return{group:`${s.workspace} / ${s.dashboard}`,label:s.agentDetail};let r=`/${e.split("/")[1]}`,a=t[r]??s.plexus;return{group:"/backups"===r||"/team"===r||"/settings"===r||"/debug"===r?s.configuration:s.workspace,label:a}}(e,t);return(0,r.jsxs)("header",{className:"flex min-h-[64px] shrink-0 flex-wrap items-center justify-between gap-3 border-b border-plexus-border px-4 py-3 lg:px-10",children:[(0,r.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-3 text-[12px] tracking-[0.02em] text-plexus-text-3",children:[l.split(" / ").map((e,s,t)=>(0,r.jsxs)("span",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{children:e}),s<t.length-1&&(0,r.jsx)("span",{children:"/"})]},`${e}-${s}`)),(0,r.jsx)("span",{children:"/"}),(0,r.jsx)("span",{className:"text-plexus-text-2",children:n})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2 lg:gap-3",children:[(0,r.jsxs)("button",{type:"button",className:"inline-flex h-9 items-center gap-2 rounded border border-transparent px-3 text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text",title:t.searchTitle,disabled:!0,children:[(0,r.jsx)(p.A,{className:"h-4 w-4",strokeWidth:1.5}),(0,r.jsx)("span",{className:"text-[12px] tracking-[0.02em] text-plexus-text-3",children:t.search}),(0,r.jsx)("span",{className:"ml-2 rounded border border-plexus-border bg-plexus-surface-2 px-1.5 py-0.5 font-mono text-[11px] text-plexus-text-mute",children:"⌘K"})]}),(0,r.jsx)(i,{}),(0,r.jsx)(c,{}),(0,r.jsx)("div",{className:"grid h-8 w-8 place-items-center rounded-full bg-plexus-accent-faint font-semibold text-plexus-accent",children:"M"})]})]})}},4309:(e,s,t)=>{Promise.resolve().then(t.bind(t,1107)),Promise.resolve().then(t.bind(t,1458)),Promise.resolve().then(t.bind(t,6439)),Promise.resolve().then(t.bind(t,572)),Promise.resolve().then(t.bind(t,4757)),Promise.resolve().then(t.t.bind(t,3597,23)),Promise.resolve().then(t.t.bind(t,6944,23))},4757:(e,s,t)=>{"use strict";t.d(s,{TooltipProvider:()=>i});var r=t(4568),a=t(7483),l=t(7257),n=t(7620);let i=l.Kq;l.bL,l.l9,(0,n.forwardRef)(({className:e,sideOffset:s=6,...t},n)=>(0,r.jsx)(l.ZL,{children:(0,r.jsx)(l.UC,{ref:n,sideOffset:s,className:(0,a.cn)("z-50 rounded-sm border border-plexus-border bg-plexus-surface-2","px-2 py-1 text-xs text-plexus-text shadow-sm","animate-in fade-in-0 zoom-in-95",e),...t})})).displayName=l.UC.displayName},6197:(e,s,t)=>{"use strict";t.d(s,{E:()=>n,m:()=>i});var r=t(4568),a=t(7483);let l=(0,t(1397).F)("inline-flex items-center gap-1 rounded-sm px-2 h-5 text-[11px] font-medium tracking-[0.01em]",{variants:{variant:{team:"bg-plexus-info/15 text-plexus-info",personal:"bg-plexus-accent-faint text-plexus-accent",synced:"bg-plexus-ok/15 text-plexus-ok",divergent:"bg-plexus-warn/15 text-plexus-warn",native:"bg-plexus-text-3/15 text-plexus-text-3",beta:"bg-plexus-accent-faint text-plexus-accent border border-plexus-accent/25",danger:"bg-plexus-err/13 text-plexus-err",outline:"border border-plexus-border text-plexus-text-2"}},defaultVariants:{variant:"outline"}});function n({className:e,variant:s,...t}){return(0,r.jsx)("span",{className:(0,a.cn)(l({variant:s}),e),...t})}function i({className:e,tone:s="ok"}){return(0,r.jsx)("span",{className:(0,a.cn)("inline-block h-1.5 w-1.5 rounded-full",{ok:"bg-plexus-ok",warn:"bg-plexus-warn",err:"bg-plexus-err",info:"bg-plexus-info",accent:"bg-plexus-accent",mute:"bg-plexus-text-3"}[s],e)})}},6439:(e,s,t)=>{"use strict";t.d(s,{LanguageProvider:()=>x,o:()=>c});var r=t(4568);let a="plexus.locale";function l(e){if(!e)return null;let s=e.toLowerCase();return"zh"===s||s.startsWith("zh-")?"zh":"en"===s||s.startsWith("en-")?"en":null}var n=t(9748),i=t(7620);let o=(0,i.createContext)(null);function u(e){window.localStorage.setItem(a,e),document.cookie=`plexus-locale=${e}; path=/; max-age=31536000; samesite=lax`}function x({children:e,initialLocale:s}){let t=(0,n.useRouter)(),[c,p]=(0,i.useState)(s);(0,i.useEffect)(()=>{var e;let r,n=l(window.localStorage.getItem(a))??s??(r=(Array.isArray(e=window.navigator.languages??window.navigator.language)?e.map((e,s)=>({value:e,q:1,index:s})):"string"==typeof e?e.split(",").map((e,s)=>{let[t="",...r]=e.trim().split(";"),a=r.find(e=>e.trim().startsWith("q=")),l=a?Number(a.trim().slice(2)):1;return{value:t,q:Number.isFinite(l)?l:1,index:s}}):[]).map(e=>({...e,locale:l(e.value)})).filter(e=>null!==e.locale).sort((e,s)=>s.q-e.q||e.index-s.index),r[0]?.locale??"en");if(n!==s){u(n),t.refresh();return}u(n),p(s)},[s,t]);let d=(0,i.useMemo)(()=>({locale:c,setLocale(e){u(e),t.refresh()},toggleLocale(){u("zh"===c?"en":"zh"),t.refresh()}}),[c,t]);return(0,r.jsx)(o.Provider,{value:d,children:e})}function c(){let e=(0,i.useContext)(o);if(!e)throw Error("useLanguage must be used inside LanguageProvider");return e}},6944:()=>{},7483:(e,s,t)=>{"use strict";t.d(s,{cn:()=>l});var r=t(9917),a=t(2809);function l(...e){return(0,a.QP)((0,r.$)(e))}},7788:(e,s,t)=>{"use strict";t.d(s,{Button:()=>u});var r=t(4568),a=t(7483),l=t(8347),n=t(1397),i=t(7620);let o=(0,n.F)((0,a.cn)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded font-medium","transition-colors duration-plexus-normal ease-plexus-out","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-plexus-accent/50 focus-visible:ring-offset-1 focus-visible:ring-offset-plexus-bg","disabled:pointer-events-none disabled:opacity-50"),{variants:{variant:{primary:"bg-plexus-accent text-[#1a1a17] hover:bg-plexus-accent-2 border border-plexus-accent",secondary:"bg-plexus-surface-2 text-plexus-text border border-plexus-border hover:bg-plexus-surface hover:border-plexus-border-strong",ghost:"bg-transparent text-plexus-text-2 hover:bg-plexus-surface-2 hover:text-plexus-text border border-transparent",danger:"bg-transparent text-plexus-err border border-plexus-err/35 hover:bg-plexus-err/10","danger-solid":"bg-plexus-err text-white border border-plexus-err hover:bg-plexus-err/90"},size:{default:"h-9 px-3.5 text-sm",sm:"h-7 px-2.5 text-xs",lg:"h-10 px-4 text-sm",icon:"h-9 w-9 p-0"}},defaultVariants:{variant:"secondary",size:"default"}}),u=(0,i.forwardRef)(({className:e,variant:s,size:t,asChild:n=!1,type:i="button",...u},x)=>{let c=n?l.DX:"button";return(0,r.jsx)(c,{ref:x,type:n?void 0:i,className:(0,a.cn)(o({variant:s,size:t}),e),...u})});u.displayName="Button"}},e=>{e.O(0,[2380,4399,5587,3051,626,587,1968,7358],()=>e(e.s=4309)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/codex.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,YAAY,EAKlB,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/codex.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,YAAY,EAKlB,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,YAqF1B,CAAC"}
|
|
@@ -18,6 +18,11 @@ export const codexAdapter = {
|
|
|
18
18
|
try {
|
|
19
19
|
await ensureDir(path.dirname(caps.mcpPath));
|
|
20
20
|
const enabledForAgent = ctx.mcp.filter((s) => s.enabledAgents.includes("codex"));
|
|
21
|
+
const writableForAgent = enabledForAgent.filter((s) => hasMcpTransport(s));
|
|
22
|
+
for (const s of enabledForAgent) {
|
|
23
|
+
if (!hasMcpTransport(s))
|
|
24
|
+
result.warnings.push(`Skipping MCP ${s.id}: missing command or url`);
|
|
25
|
+
}
|
|
21
26
|
const enabledIds = new Set(enabledForAgent.map((s) => s.id));
|
|
22
27
|
const disabledManagedIds = new Set(ctx.mcp.filter((s) => !s.enabledAgents.includes("codex")).map((s) => s.id));
|
|
23
28
|
let existing = {};
|
|
@@ -38,16 +43,12 @@ export const codexAdapter = {
|
|
|
38
43
|
preserved[k] = v;
|
|
39
44
|
}
|
|
40
45
|
const nextServers = { ...preserved };
|
|
41
|
-
for (const s of
|
|
42
|
-
nextServers[s.id] =
|
|
43
|
-
command: s.command,
|
|
44
|
-
...(s.args ? { args: s.args } : {}),
|
|
45
|
-
...(s.env ? { env: s.env } : {}),
|
|
46
|
-
};
|
|
46
|
+
for (const s of writableForAgent) {
|
|
47
|
+
nextServers[s.id] = serializeCodexMcp(s);
|
|
47
48
|
}
|
|
48
49
|
existing.mcp_servers = nextServers;
|
|
49
50
|
await fs.writeFile(caps.mcpPath, TOML.stringify(existing), "utf8");
|
|
50
|
-
result.applied.mcp =
|
|
51
|
+
result.applied.mcp = writableForAgent.length;
|
|
51
52
|
}
|
|
52
53
|
catch (err) {
|
|
53
54
|
result.errors.push(`Codex MCP write failed: ${err.message}`);
|
|
@@ -93,4 +94,19 @@ export const codexAdapter = {
|
|
|
93
94
|
return result;
|
|
94
95
|
},
|
|
95
96
|
};
|
|
97
|
+
function hasMcpTransport(s) {
|
|
98
|
+
return Boolean(s.command.trim() || s.url?.trim() || s.httpUrl?.trim());
|
|
99
|
+
}
|
|
100
|
+
function hasEntries(value) {
|
|
101
|
+
return Boolean(value && Object.keys(value).length > 0);
|
|
102
|
+
}
|
|
103
|
+
function serializeCodexMcp(s) {
|
|
104
|
+
return {
|
|
105
|
+
...(s.command.trim() ? { command: s.command } : {}),
|
|
106
|
+
...(s.args ? { args: s.args } : {}),
|
|
107
|
+
...(hasEntries(s.env) ? { env: s.env } : {}),
|
|
108
|
+
...(s.url?.trim() || s.httpUrl?.trim() ? { url: s.url?.trim() || s.httpUrl?.trim() } : {}),
|
|
109
|
+
...(hasEntries(s.headers) ? { http_headers: s.headers } : {}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
96
112
|
//# sourceMappingURL=codex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/agents/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAGL,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,EAAE,EAAE,OAAO;IACX,KAAK,CAAC,KAAK,CAAC,GAAiB;QAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;QAE/B,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAE5C,MAAM,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACjF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAChC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3E,CAAC;YAEF,IAAI,QAAQ,GAAQ,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YACD,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAwB,CAAC;YAC5E,MAAM,SAAS,GAAwB,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrD,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBACxC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,yBAAyB;gBAC1D,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,MAAM,WAAW,GAAwB,EAAE,GAAG,SAAS,EAAE,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/agents/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAGL,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,EAAE,EAAE,OAAO;IACX,KAAK,CAAC,KAAK,CAAC,GAAiB;QAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;QAE/B,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAE5C,MAAM,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACjF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAChC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3E,CAAC;YAEF,IAAI,QAAQ,GAAQ,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YACD,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAwB,CAAC;YAC5E,MAAM,SAAS,GAAwB,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrD,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBACxC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,yBAAyB;gBAC1D,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,MAAM,WAAW,GAAwB,EAAE,GAAG,SAAS,EAAE,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBACjC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;YACnC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,MAAM,uBAAuB,GAAG,IAAI,GAAG,CACrC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9E,CAAC;YACF,KAAK,MAAM,EAAE,IAAI,uBAAuB,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC;oBACH,4EAA4E;oBAC5E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;wBACzB,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtD,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpD,IAAI,CAAC;oBACH,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC7D,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,iBAAkB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA8B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,CAAsD;IAC7E,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,UAAU,CAAC,KAAyC;IAC3D,OAAO,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,CAO1B;IACC,OAAO;QACL,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-mcp.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/json-mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"json-mcp.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/json-mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAmEjE"}
|