@microi.net/cli 5.7.4 → 5.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.mcp.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/README.md +71 -71
- package/assets/build-meta.json +7 -7
- package/cordis.patch.yml +2 -2
- package/package.json +1 -1
- package/scripts/mcp-server.js +101 -101
- package/scripts/microi-cli.js +2 -2
- package/scripts/microi-codex-broker.js +2 -2
- package/scripts/microi-codex-router.js +2 -2
- package/scripts/microi-skills.meta.json +219 -216
- package/skills/.microi-skills-version.json +6 -6
- package/skills/.progressive-disclosure-manifest.json +3566 -3566
- package/skills/ai-engine/SKILL.md +37 -37
- package/skills/ai-engine/references/ai-employees.md +6 -4
- package/skills/app-store/SKILL.md +253 -249
- package/skills/job-engine/SKILL.md +21 -20
- package/skills/message-notification/SKILL.md +156 -155
- package/skills/microi-ai-application/SKILL.md +7 -3
- package/skills/microi-client-frontend/SKILL.md +34 -32
- package/skills/microi-codex/SKILL.md +8 -8
- package/skills/microi-codex-installer/SKILL.md +5 -5
- package/skills/microi-microservice/SKILL.md +35 -34
- package/skills/module-engine/SKILL.md +59 -46
- package/skills/playwright-e2e/SKILL.md +3 -3
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-file-upload/SKILL.md +189 -182
- package/skills/v8-mq-mqtt/SKILL.md +2 -1
- package/skills/v8-tcp-integration/SKILL.md +2 -2
- package/skills/v8-workflow/SKILL.md +93 -66
- package/skills/v8-workflow/references/workflow-configuration.md +49 -0
- package/skills/workspace-conventions/SKILL.md +261 -261
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +208 -208
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +7 -7
package/scripts/microi-cli.js
CHANGED
|
@@ -1985,8 +1985,8 @@ ${ct}
|
|
|
1985
1985
|
`)}ensureJsConfig(e,t){let n=_.join(e,"jsconfig.json"),r=e,i=e,o;if(D.existsSync(n))try{o=JSON.parse(D.readFileSync(n,"utf-8"))}catch{o={}}else o={};let a=o.compilerOptions||{};a.target=a.target||"ES2020",a.module=a.module||"CommonJS",a.checkJs=!0;let c=_.relative(e,t),l=a.typeRoots||[];l.includes(`./${c}`)||l.push(`./${c}`),a.typeRoots=l,o.compilerOptions=a;let g=o.include||[],d=_.relative(e,r),u=_.relative(e,i),p=`${c}/**/*`;for(let f of[`${d}/**/*`,`${u}/**/*`,p])g.includes(f)||g.push(f);o.include=g;let m=o.exclude||[];m.includes("node_modules")||m.push("node_modules"),o.exclude=m,D.writeFileSync(n,JSON.stringify(o,null,2),"utf-8")}cleanup(){let e=I.getInstance(),t=e.getWorkspaceRoot();if(!t)return;let n=e.getSyncRootDir(),r=_.join(n,wt),i=_.join(r,Gt);D.existsSync(i)&&D.unlinkSync(i);let o=_.join(t,wt),a=_.join(o,Gt);if(D.existsSync(a)&&D.unlinkSync(a),_.resolve(n)!==_.resolve(t)){let c=_.join(t,Rn,In),l=_.join(t,_n),g=_.join(t,Mn),d=_.join(t,An),u=_.join(t,Nn,Fn),p=Xr.map(f=>_.join(t,f)),m=_.join(t,Zr);if(this.canRemoveGeneratedAiDoc(t,c))try{D.unlinkSync(c)}catch{}if(this.canRemoveGeneratedAiDoc(t,l))try{D.unlinkSync(l)}catch{}if(this.canRemoveGeneratedAiDoc(t,g))try{D.unlinkSync(g)}catch{}if(this.canRemoveGeneratedAiDoc(t,d))try{D.unlinkSync(d)}catch{}if(this.canRemoveGeneratedAiDoc(t,u))try{D.unlinkSync(u)}catch{}for(let f of p)if(this.canRemoveGeneratedAiDoc(t,f))try{D.unlinkSync(f)}catch{}if(this.canRemoveGeneratedAiDoc(t,m))try{D.unlinkSync(m)}catch{}}this.cleanupSchemaDocs(n)}cleanupSchemaDocs(e){try{for(let t of D.readdirSync(e)){if(t.startsWith(".")&&t!==Ke)continue;let n=_.join(e,t);if(t===Ke)try{D.unlinkSync(n)}catch{}else try{D.statSync(n).isDirectory()&&this.cleanupSchemaDocs(n)}catch{}}}catch{}}};function Nt(s,e){let t=i=>{if(!(!i||!/^\d+(?:\.\d+){2}$/.test(i)))return i.split(".").map(o=>Number(o))},n=t(s),r=t(e);if(!n||!r)return 0;for(let i=0;i<3;i+=1)if(n[i]!==r[i])return n[i]>r[i]?1:-1;return 0}function At(s){let e=s.env,t=String(e?.MICROI_TOOL_VERSION||"").trim();return/^\d+(?:\.\d+){2}$/.test(t)?t:""}function an(s){let e=s.env||{},t=s.headers||{},r=(o=>o.trim().replace(/\/+$/,"").toLowerCase())(String(e.MICROI_API_URL||s.url||"")),i=String(e.MICROI_OS_CLIENT||t["X-Microi-OsClient"]||"").trim().toLowerCase();return`${r}|${i}`}function ns(s,e,t){let n={...s},r={},i=new Set,o=[];for(let[c,l]of Object.entries(e)){let g=an(l),d=At(l),u=Object.entries(n).filter(([m,f])=>{if(!t.isManaged(m,f))return!1;let y=an(f);return m===c||g!=="|"&&y===g}),p=u.find(([,m])=>Nt(At(m),d)>0);if(p){let m=At(p[1]);for(let[f]of u)i.add(f);o.push({name:p[0],version:m});continue}r[c]=l}let a=new Set(Object.values(r).map(an).filter(c=>c!=="|"));for(let[c,l]of Object.entries(n)){if(!t.isManaged(c,l)||i.has(c))continue;if(Object.prototype.hasOwnProperty.call(r,c)){delete n[c];continue}let g=an(l);if(a.has(g)){delete n[c];continue}(t.removeManagedNotInNext||t.isStableName&&!t.isStableName(c))&&delete n[c]}return Object.assign(n,r),{servers:n,skippedNewerProviders:o}}var Zn=B(require("child_process")),K=B(require("fs")),rs=B(require("os")),G=B(require("path")),$e="microi-net",Ie="microi",Ae=`${Ie}@${$e}`,dn="@microi.net/cli",ss="@microi.net/codex-plugin",Ft="microi-official",cn=`${Ie}@${Ft}`;function Yn(s){return[s.stderr,s.stdout].filter(Boolean).join(`
|
|
1986
1986
|
`).trim()}function is(s,e,t=3e4){let n=Zn.spawnSync(s.command,[...s.prefixArgs,...e],{encoding:"utf8",windowsHide:!0,timeout:t,maxBuffer:16777216});return{status:typeof n.status=="number"?n.status:1,stdout:String(n.stdout||""),stderr:[n.error?.message,n.stderr].filter(Boolean).join(`
|
|
1987
1987
|
`)}}function Mi(s){let e=G.extname(s).toLowerCase();return e===".js"||e===".cjs"||e===".mjs"?{command:process.execPath,prefixArgs:[s],displayPath:s}:process.platform==="win32"&&(e===".cmd"||e===".bat")?{command:process.env.ComSpec||"cmd.exe",prefixArgs:["/d","/s","/c",s],displayPath:s}:{command:s,prefixArgs:[],displayPath:s}}function Ai(){let s=String(process.env.MICROI_CODEX_PATH||"").trim();if(s){let r=G.resolve(s);if(!K.existsSync(r))throw new Error(`MICROI_CODEX_PATH \u6307\u5411\u7684\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`);return[r]}let e=process.platform==="win32"?[["where.exe",["codex.exe"]],["where.exe",["codex"]]]:[["which",["codex"]]],t=[];for(let[r,i]of e){let o=Zn.spawnSync(r,i,{encoding:"utf8",windowsHide:!0,timeout:3e3});o.status===0&&t.push(...String(o.stdout||"").split(/\r?\n/).map(a=>a.trim()).filter(Boolean))}return process.platform!=="win32"&&t.push("codex"),[...new Map(t.map(r=>[process.platform==="win32"?r.toLowerCase():r,r])).values()].sort((r,i)=>{let o=G.extname(r).toLowerCase()===".exe"?0:1,a=G.extname(i).toLowerCase()===".exe"?0:1;return o-a})}function os(){for(let s of Ai()){if(G.isAbsolute(s)&&!K.existsSync(s))continue;let e=Mi(s),t=is(e,["--version"],5e3);if(t.status!==0)continue;let n=t.stdout.trim()||t.stderr.trim();if(/codex/i.test(n))return{...e,version:n}}}function Re(s,e,t=!1){let n=is(s,["-c",'model_reasoning_effort="high"',...e]);if(!t&&n.status!==0)throw new Error(`Codex CLI \u6267\u884C\u5931\u8D25\uFF1Acodex ${e.join(" ")}
|
|
1988
|
-
${Yn(n)}`.trim());return n}function Ni(s){let e=[];for(let t of s.split(/\r?\n/)){let n=t.trim().split(/\s{2,}/);n.length<2||n[0]==="MARKETPLACE"||e.push({name:n[0],root:n.slice(1).join(" ")})}return e}function Fi(s){let e=[];for(let t of s.split(/\r?\n/)){let n=t.trim().split(/\s{2,}/);if(n.length<2||n[0]==="PLUGIN"||!n[0].includes("@"))continue;let r=/^not installed$/i.test(n[1]||"");e.push({selector:n[0],status:n[1]||"",version:r?"":n[2]||"",pluginPath:r?n.slice(2).join(" "):n.slice(3).join(" ")})}return e}function Vi(){let e=[G.join(__dirname,"codex-marketplace.json"),G.resolve(__dirname,"..","..","codex","marketplace.npm.json")].find(t=>K.existsSync(t));if(!e)throw new Error("CLI \u7F3A\u5C11 codex-marketplace.json\uFF0C\u8BF7\u91CD\u65B0\u5B89\u88C5\u6700\u65B0\u7248 @microi.net/cli");return e}function Xn(s,e){let t=G.join(s,".codex-plugin","plugin.json"),n=G.join(s,"package.json"),r,i;try{r=JSON.parse(K.readFileSync(t,"utf8")),i=JSON.parse(K.readFileSync(n,"utf8"))}catch(o){throw new Error(`${e}\u8EAB\u4EFD\u6587\u4EF6\u65E0\u6CD5\u89E3\u6790\uFF1A${o instanceof Error?o.message:String(o)}`)}return{name:String(r.name||""),version:String(r.version||""),packageName:String(i.name||"")}}function xi(){let s=[G.resolve(__dirname,".."),G.resolve(__dirname,"..","..","plugins",Ie)];for(let e of s){if(!K.existsSync(G.join(e,".codex-plugin","plugin.json"))||!K.existsSync(G.join(e,"package.json")))continue;let t=Xn(e,"\u5185\u7F6E Microi
|
|
1989
|
-
`,expectedVersion:n.version,pluginRoot:n.root}}function $i(s,e){let t=`${s}.${process.pid}.${Date.now()}.tmp`;try{K.writeFileSync(t,e,"utf8"),K.renameSync(t,s)}finally{try{K.existsSync(t)&&K.unlinkSync(t)}catch{}}}function cs(){return G.resolve(process.env.CODEX_HOME||G.join(rs.homedir(),".codex"))}function Li(s,e,t){let n=G.resolve(s),r=G.resolve(e),i=G.relative(n,r);if(!i||!i.startsWith("..")&&!G.isAbsolute(i))throw new Error(`Codex \u63D2\u4EF6\u76EE\u6807\u76EE\u5F55\u4E0D\u80FD\u4F4D\u4E8E npm \u5305\u5185\u90E8\uFF1A${r}`);if(K.existsSync(r)){let d=Xn(r,"\u73B0\u6709 Microi
|
|
1988
|
+
${Yn(n)}`.trim());return n}function Ni(s){let e=[];for(let t of s.split(/\r?\n/)){let n=t.trim().split(/\s{2,}/);n.length<2||n[0]==="MARKETPLACE"||e.push({name:n[0],root:n.slice(1).join(" ")})}return e}function Fi(s){let e=[];for(let t of s.split(/\r?\n/)){let n=t.trim().split(/\s{2,}/);if(n.length<2||n[0]==="PLUGIN"||!n[0].includes("@"))continue;let r=/^not installed$/i.test(n[1]||"");e.push({selector:n[0],status:n[1]||"",version:r?"":n[2]||"",pluginPath:r?n.slice(2).join(" "):n.slice(3).join(" ")})}return e}function Vi(){let e=[G.join(__dirname,"codex-marketplace.json"),G.resolve(__dirname,"..","..","codex","marketplace.npm.json")].find(t=>K.existsSync(t));if(!e)throw new Error("CLI \u7F3A\u5C11 codex-marketplace.json\uFF0C\u8BF7\u91CD\u65B0\u5B89\u88C5\u6700\u65B0\u7248 @microi.net/cli");return e}function Xn(s,e){let t=G.join(s,".codex-plugin","plugin.json"),n=G.join(s,"package.json"),r,i;try{r=JSON.parse(K.readFileSync(t,"utf8")),i=JSON.parse(K.readFileSync(n,"utf8"))}catch(o){throw new Error(`${e}\u8EAB\u4EFD\u6587\u4EF6\u65E0\u6CD5\u89E3\u6790\uFF1A${o instanceof Error?o.message:String(o)}`)}return{name:String(r.name||""),version:String(r.version||""),packageName:String(i.name||"")}}function xi(){let s=[G.resolve(__dirname,".."),G.resolve(__dirname,"..","..","plugins",Ie)];for(let e of s){if(!K.existsSync(G.join(e,".codex-plugin","plugin.json"))||!K.existsSync(G.join(e,"package.json")))continue;let t=Xn(e,"\u5185\u7F6E Microi Agentx \u63D2\u4EF6");if(t.name===Ie&&t.packageName===dn&&t.version)return{root:e,version:t.version}}throw new Error("CLI \u7F3A\u5C11\u5B8C\u6574\u7684 Microi Agentx \u63D2\u4EF6\u6587\u4EF6\uFF0C\u8BF7\u91CD\u65B0\u5B89\u88C5\u6700\u65B0\u7248 @microi.net/cli")}function Oi(s){if(!s||s.name!==Ie)return!1;if(s.source?.source==="local")return String(s.source.path||"").replace(/\\/g,"/").replace(/^\.\//,"")==="plugins/microi";let e=[dn,ss];return s.source?.source==="npm"&&e.includes(s.source.package||"")}function as(){let s=K.readFileSync(Vi(),"utf8"),e;try{e=JSON.parse(s)}catch(r){throw new Error(`Codex marketplace \u6A21\u677F\u65E0\u6CD5\u89E3\u6790\uFF1A${r instanceof Error?r.message:String(r)}`)}let t=e.plugins?.find(r=>r.name===Ie);if(e.name!==$e||t?.source?.source!=="local"||String(t.source.path||"").replace(/\\/g,"/").replace(/^\.\//,"")!=="plugins/microi")throw new Error("Codex marketplace \u6A21\u677F\u8EAB\u4EFD\u4E0D\u5408\u6CD5\uFF0C\u62D2\u7EDD\u5199\u5165\u5168\u5C40\u914D\u7F6E");let n=xi();return{manifest:e,content:`${JSON.stringify(e,null,2)}
|
|
1989
|
+
`,expectedVersion:n.version,pluginRoot:n.root}}function $i(s,e){let t=`${s}.${process.pid}.${Date.now()}.tmp`;try{K.writeFileSync(t,e,"utf8"),K.renameSync(t,s)}finally{try{K.existsSync(t)&&K.unlinkSync(t)}catch{}}}function cs(){return G.resolve(process.env.CODEX_HOME||G.join(rs.homedir(),".codex"))}function Li(s,e,t){let n=G.resolve(s),r=G.resolve(e),i=G.relative(n,r);if(!i||!i.startsWith("..")&&!G.isAbsolute(i))throw new Error(`Codex \u63D2\u4EF6\u76EE\u6807\u76EE\u5F55\u4E0D\u80FD\u4F4D\u4E8E npm \u5305\u5185\u90E8\uFF1A${r}`);if(K.existsSync(r)){let d=Xn(r,"\u73B0\u6709 Microi Agentx \u63D2\u4EF6"),u=[dn,ss];if(d.name!==Ie||!u.includes(d.packageName))throw new Error(`\u76EE\u6807\u76EE\u5F55\u5305\u542B\u975E Microi \u7BA1\u7406\u7684\u63D2\u4EF6\uFF0C\u62D2\u7EDD\u8986\u76D6\uFF1A${r}`)}let o=G.dirname(r);K.mkdirSync(o,{recursive:!0});let a=`${process.pid}-${Date.now()}`,c=G.join(o,`.microi-staging-${a}`),l=G.join(o,`.microi-backup-${a}`),g=!1;try{K.cpSync(n,c,{recursive:!0,errorOnExist:!0});let d=Xn(c,"\u5F85\u5B89\u88C5 Microi Agentx \u63D2\u4EF6");if(d.name!==Ie||d.packageName!==dn||d.version!==t)throw new Error("\u5F85\u5B89\u88C5\u7684 Microi Agentx \u63D2\u4EF6\u8EAB\u4EFD\u6216\u7248\u672C\u4E0D\u4E00\u81F4");K.existsSync(r)&&(K.renameSync(r,l),g=!0),K.renameSync(c,r)}catch(d){if(!K.existsSync(r)&&g&&K.existsSync(l))try{K.renameSync(l,r)}catch{}throw d}finally{try{K.existsSync(c)&&K.rmSync(c,{recursive:!0,force:!0})}catch{}}try{K.existsSync(l)&&K.rmSync(l,{recursive:!0,force:!0})}catch{}}function Bi(s,e,t){let n=cs(),r=G.join(n,"microi-net-marketplace"),i=G.join(r,".agents","plugins","marketplace.json"),o=G.join(r,"plugins",Ie);if(K.mkdirSync(G.dirname(i),{recursive:!0}),K.existsSync(i)){let a;try{a=JSON.parse(K.readFileSync(i,"utf8"))}catch(l){throw new Error(`\u5DF2\u5B58\u5728\u7684 Microi marketplace \u65E0\u6CD5\u89E3\u6790\uFF0C\u5DF2\u4FDD\u7559\u539F\u6587\u4EF6\uFF1A${i}\uFF08${l instanceof Error?l.message:String(l)}\uFF09`)}let c=a.plugins?.find(l=>l.name===Ie);if(a.name!==$e||!Oi(c))throw new Error(`\u76EE\u6807\u76EE\u5F55\u5305\u542B\u975E Microi \u7BA1\u7406\u7684 marketplace\uFF0C\u62D2\u7EDD\u8986\u76D6\uFF1A${i}`)}return Li(e,o,t),(!K.existsSync(i)||K.readFileSync(i,"utf8")!==s)&&$i(i,s),r}function Ui(s){let e=s.trim();if(!e||/[\r\n]/.test(e))throw new Error("Codex marketplace source \u65E0\u6548");let t=G.resolve(e);if(K.existsSync(t))return t;if(G.isAbsolute(e)||e.startsWith("."))throw new Error(`Codex marketplace \u672C\u5730\u8DEF\u5F84\u4E0D\u5B58\u5728\uFF1A${t}`);return e}function ln(s,e){let t=Ni(Re(s,["plugin","marketplace","list"]).stdout),n=Fi(Re(s,["plugin","list"]).stdout),r=t.find(u=>u.name===$e),i=n.find(u=>u.selector===Ae),o=t.some(u=>u.name===Ft),a=n.some(u=>u.selector===cn&&/^installed\b/i.test(u.status)),c=!!(i&&/^installed\b/i.test(i.status)),l=!!(i&&/enabled/i.test(i.status)),g=!e||i?.version===e,d=c?l?g?"none":"update":"enable":"install";return{ok:c&&l&&g,codex:{found:!0,command:s.displayPath,version:s.version},marketplace:{name:$e,configured:!!r,root:r?.root||""},plugin:{selector:Ae,installed:c,enabled:l,version:i?.version||"",expectedVersion:e},legacy:{marketplaceConfigured:o,pluginInstalled:a},action:d}}function ls(){let{expectedVersion:s}=as(),e=os();return e?ln(e,s):{ok:!1,codex:{found:!1,command:"",version:""},marketplace:{name:$e,configured:!1,root:""},plugin:{selector:Ae,installed:!1,enabled:!1,version:"",expectedVersion:s},legacy:{marketplaceConfigured:!1,pluginInstalled:!1},action:"install-codex"}}function ds(s={}){let{content:e,expectedVersion:t,pluginRoot:n}=as(),r=os();if(!r)throw new Error("\u672A\u627E\u5230\u53EF\u6267\u884C\u7684 Codex CLI\u3002\u8BF7\u5148\u5B89\u88C5\u6216\u66F4\u65B0 Codex\uFF0C\u518D\u6267\u884C microi codex install --yes");K.mkdirSync(cs(),{recursive:!0});let i=ln(r,t);if(i.ok&&!s.force){i.legacy.pluginInstalled&&Re(r,["plugin","remove",cn]),i.legacy.marketplaceConfigured&&Re(r,["plugin","marketplace","remove",Ft]);let d=i.legacy.pluginInstalled||i.legacy.marketplaceConfigured;return{installed:!0,changed:d,selector:Ae,version:i.plugin.version,migratedFrom:d?Ft:void 0,restartRequired:d}}let o=s.marketplaceSource?Ui(s.marketplaceSource):Bi(e,n,t);i.marketplace.configured||Re(r,["plugin","marketplace","add",o]);let a=ln(r,t);if(!a.marketplace.configured)throw new Error(`Codex \u672A\u80FD\u6CE8\u518C marketplace ${$e}`);let c;s.force&&a.plugin.installed?(Re(r,["plugin","remove",Ae]),c=Re(r,["plugin","add",Ae],!0)):c=Re(r,["plugin","add",Ae],!0);let l=ln(r,t);if(!l.plugin.installed||!l.plugin.enabled){let d=s.force?"--force \u5DF2\u6267\u884C\u663E\u5F0F\u91CD\u88C5\uFF0C\u8BF7\u68C0\u67E5\u4E0A\u65B9\u9519\u8BEF\u540E\u91CD\u8BD5\u3002":"\u539F\u6709\u63D2\u4EF6\u672A\u88AB\u5220\u9664\u3002";throw new Error(`\u5B89\u88C5 ${Ae} \u5931\u8D25\uFF0C${d}${Yn(c)?`
|
|
1990
1990
|
${Yn(c)}`:""}`.trim())}if(l.plugin.version!==t)throw new Error(`\u5F53\u524D\u5DF2\u5B89\u88C5 ${l.plugin.version||"\u672A\u77E5\u7248\u672C"}\uFF0C\u76EE\u6807\u63D2\u4EF6\u5FEB\u7167\u4E3A ${t}\u3002\u8BF7\u4F7F\u7528 --force \u663E\u5F0F\u91CD\u88C5\u3002`);let g=i.legacy.pluginInstalled?cn:"";return i.legacy.pluginInstalled&&Re(r,["plugin","remove",cn]),i.legacy.marketplaceConfigured&&Re(r,["plugin","marketplace","remove",Ft]),{installed:!0,changed:!0,selector:Ae,version:l.plugin.version,marketplace:$e,marketplaceSource:o,migratedFrom:g||void 0,restartRequired:!0,next:"\u65B0\u5EFA Codex \u4EFB\u52A1\u6216\u91CD\u8F7D Codex\uFF0C\u4F7F\u63D2\u4EF6 Skills \u4E0E MCP \u751F\u6548\u3002"}}var nr=B(require("child_process")),ke=B(require("fs")),un=B(require("os")),Z=B(require("path")),Fe="@microi.net/cli",ji=["web","headless"],Ki="https://registry.npmjs.org/";function gn(s){try{let e=JSON.parse(ke.readFileSync(s,"utf8"));return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}catch{return}}function Ne(s){return s&&typeof s=="object"&&!Array.isArray(s)?s:void 0}function us(){let s=[Z.resolve(__dirname,".."),Z.resolve(__dirname,"..","..","plugins","microi")];for(let e of s){let t=gn(Z.join(e,"package.json")),n=Ne(t?.dsh),r=Ne(n?.bundle),i=String(r?.patch||""),o=String(t?.version||"");if(!(t?.name!==Fe||!o||i!=="./cordis.patch.yml")&&ke.existsSync(Z.join(e,"cordis.patch.yml")))return{root:e,version:o,patch:i}}throw new Error("CLI \u7F3A\u5C11\u5B8C\u6574\u7684 Microi DeepSeek Harness bundle\uFF0C\u8BF7\u91CD\u65B0\u5B89\u88C5\u6700\u65B0\u7248 @microi.net/cli")}function Hi(s){let e=Z.extname(s).toLowerCase();return e===".js"||e===".cjs"||e===".mjs"?{command:process.execPath,prefixArgs:[s],displayPath:s}:process.platform==="win32"&&(e===".cmd"||e===".bat")?{command:process.env.ComSpec||"cmd.exe",prefixArgs:["/d","/s","/c",s],displayPath:s}:{command:s,prefixArgs:[],displayPath:s}}function gs(s,e,t=3e4){let n=nr.spawnSync(s.command,[...s.prefixArgs,...e],{cwd:process.cwd(),encoding:"utf8",windowsHide:!0,timeout:t,maxBuffer:33554432,env:{...process.env}});return{status:typeof n.status=="number"?n.status:1,stdout:String(n.stdout||""),stderr:[n.error?.message,n.stderr].filter(Boolean).join(`
|
|
1991
1991
|
`)}}function Wi(){let s=String(process.env.MICROI_DSH_PATH||"").trim();if(s){let n=Z.resolve(s);if(!ke.existsSync(n))throw new Error(`MICROI_DSH_PATH \u6307\u5411\u7684\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${n}`);return[n]}let e=process.platform==="win32"?[["where.exe",["dsh.exe"]],["where.exe",["dsh.cmd"]],["where.exe",["dsh"]]]:[["which",["dsh"]]],t=[];for(let[n,r]of e){let i=nr.spawnSync(n,r,{encoding:"utf8",windowsHide:!0,timeout:3e3});i.status===0&&t.push(...String(i.stdout||"").split(/\r?\n/).map(o=>o.trim()).filter(Boolean))}return process.platform!=="win32"&&t.push("dsh"),[...new Map(t.map(n=>[process.platform==="win32"?n.toLowerCase():n,n])).values()]}function ps(){for(let s of Wi()){if(Z.isAbsolute(s)&&!ke.existsSync(s))continue;let e=Hi(s),t=gs(e,["--version"],5e3);if(t.status!==0)continue;let n=t.stdout.trim()||t.stderr.trim();if(n)return{...e,version:n}}}function Gi(s){return s==="~"?un.homedir():s.startsWith("~/")||s.startsWith("~\\")?Z.join(un.homedir(),s.slice(2)):s}function er(){let s=String(process.env.DSH_HOME||"").trim();return Z.resolve(Gi(s||Z.join(un.homedir(),".dsh")))}function zi(s){let e=s.trim();if(!e||e==="."||e===".."||e==="node_modules"||/[/\\]/.test(e))throw new Error(`DeepSeek Harness profile \u540D\u79F0\u65E0\u6548\uFF1A${JSON.stringify(s)}`);return e}function ms(s){return s?[zi(s)]:[...ji]}function Ji(s,e){if(!e)return;let t=Z.resolve(s,e),n=Z.relative(s,t);if(!(!n||n.startsWith("..")||Z.isAbsolute(n)))return t}function tr(s,e,t){let n=Z.join(s,"profiles",e),r=gn(Z.join(n,"package.json")),i=Ne(r?.dependencies),o=Ne(r?.dsh),a=Ne(o?.profile),c=Array.isArray(a?.bundles)?a?.bundles.map(String):[],l=Z.join(n,"node_modules","@microi.net","cli"),g=gn(Z.join(l,"package.json")),d=Ne(g?.dsh),u=Ne(d?.bundle),p=String(u?.patch||""),m=Ji(l,p),f=!!r,y=typeof i?.[Fe]=="string",S=g?.name===Fe,h=S?String(g?.version||""):"",C=c.includes(Fe),T=p==="./cordis.patch.yml"&&!!(m&&ke.existsSync(m)),b=h===t;return{profile:e,profileDir:n,initialized:f,dependencyDeclared:y,installed:S,active:C,installedVersion:h,expectedVersion:t,bundlePatch:p,bundlePatchExists:T,ok:f&&y&&S&&C&&T&&b,action:!S||!y?"install":!b||!T?"update":C?"none":"activate"}}function qi(s,e){let t=us(),n=er(),r=e.map(o=>tr(n,o,t.version)),i=s?r.some(o=>o.action==="install")?"install":r.some(o=>o.action==="update")?"update":r.some(o=>o.action==="activate")?"activate":"none":"install-dsh";return{ok:!!s&&r.every(o=>o.ok),dsh:{found:!!s,command:s?.displayPath||"",version:s?.version||"",home:n},package:{name:Fe,expectedVersion:t.version,bundlePatch:t.patch},profiles:r,action:i,requiresNewSession:i!=="none"&&i!=="install-dsh"}}function fs(s){return qi(ps(),ms(s))}function Qi(s){let e=Z.resolve(s);if(!ke.existsSync(e))throw new Error(`DeepSeek Harness bundle \u672C\u5730\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A${e}`);if(!ke.statSync(e).isDirectory()){if(!/\.(?:tgz|tar\.gz)$/i.test(e))throw new Error("DeepSeek Harness bundle --source \u53EA\u63A5\u53D7\u672C\u5730\u76EE\u5F55\u6216 .tgz/.tar.gz");return e}let t=[e,Z.join(e,"plugins","microi")];for(let n of t){let r=gn(Z.join(n,"package.json")),i=Ne(r?.dsh),o=Ne(i?.bundle);if(r?.name===Fe&&o?.patch==="./cordis.patch.yml"&&ke.existsSync(Z.join(n,"cordis.patch.yml")))return n}throw new Error(`\u672C\u5730\u6765\u6E90\u4E0D\u662F\u5B8C\u6574\u7684 ${Fe} DeepSeek Harness bundle\uFF1A${e}`)}function Yi(s){return[s.stderr,s.stdout].filter(Boolean).join(`
|
|
1992
1992
|
`).trim().slice(0,5e3)}function hs(s={}){let e=ps();if(!e)throw new Error("\u672A\u68C0\u6D4B\u5230 DeepSeek Harness dsh CLI\uFF1B\u8BF7\u5148\u6267\u884C npm install -g @deepseek-ai/dsh\uFF0C\u518D\u91CD\u8BD5 microi dsh install");let t=us(),n=ms(s.profile),r=s.source?Qi(s.source):"",i=r||`${Fe}@${t.version}`,o=[];for(let c of n){let l=tr(er(),c,t.version);if(l.ok&&!s.force){o.push({...l,changed:!1});continue}let g=["plugin","--profile",c,"add",i,"--save-exact",...r?[]:[`--registry=${Ki}`]],d=gs(e,g,5*6e4);if(d.status!==0)throw new Error(`DeepSeek Harness profile ${c} \u5B89\u88C5 Microi bundle \u5931\u8D25\uFF1A${Yi(d)||`exit ${d.status}`}`);let u=tr(er(),c,t.version);if(!u.ok)throw new Error(`DeepSeek Harness profile ${c} \u5B89\u88C5\u540E\u6821\u9A8C\u5931\u8D25\uFF08action=${u.action}\uFF0Cversion=${u.installedVersion||"missing"}\uFF09`);o.push({...u,changed:!0})}let a=o.some(c=>c.changed);return{ok:!0,package:`${Fe}@${t.version}`,source:i,profiles:o,requiresNewSession:a,message:a?"Microi\u543E\u7801\u5DF2\u5B89\u88C5\u4E3A DeepSeek Harness profile bundle\uFF1B\u8BF7\u65B0\u5EFA DSH \u4F1A\u8BDD\u52A0\u8F7D\u65B0\u589E MCP \u5DE5\u5177\uFF0C\u5F53\u524D\u4F1A\u8BDD\u4E0D\u4F1A\u88AB\u7EC8\u6B62\u3002":"DeepSeek Harness \u4E2D\u7684 Microi\u543E\u7801 bundle \u5DF2\u662F\u5F53\u524D\u7248\u672C\uFF0C\u65E0\u9700\u6539\u52A8\u3002"}}var pn=B(require("crypto")),$=B(require("fs")),Ot=B(require("os")),U=B(require("path"));function rr(s){return s.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").replace(/[^A-Za-z0-9_]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"").toLowerCase().slice(0,48)}function Ss(s){try{return rr(new URL(s.apiBaseUrl.trim().replace(/\/+$/,"")).host)}catch{return rr(s.apiBaseUrl)}}function ys(s){return rr(s.osClient||s.sysShortTitle||s.sysTitle||s.label||"")||Ss(s)||"default"}function lt(s){let e=new Map;for(let r of s){let i=ys(r);e.set(i,(e.get(i)||0)+1)}let t=new Set(Array.from(e).filter(([,r])=>r>1).map(([r])=>r)),n=new Set;return s.map(r=>{let i=Ss(r),o=ys(r),a=`microi_${o}`,c=t.has(o)&&i&&i!==o?`${a}_${i}`:a;n.has(c)&&i&&(c=`${a}_${i}`);let l=2;for(;n.has(c);)c=`${a}_${l++}`;return n.add(c),{profile:r,mcpName:c}})}var Vt="";function Le(){if(Vt)return Vt;try{let s=JSON.parse($.readFileSync(U.join(__dirname,"..","package.json"),"utf8"));Vt=/^\d+(?:\.\d+){2}$/.test(String(s.version||""))?String(s.version):"0.0.0"}catch{Vt="0.0.0"}return Vt}function Xi(s){return s.trim().replace(/\/+$/,"")}function Zi(){let s=`MCP:${Ot.hostname()||"Unknown"}`;return/^[\x20-\x7E]{1,128}$/.test(s)?s:`MCP-${pn.createHash("sha256").update(s).digest("hex").slice(0,16)}`}function ws(s){let e=U.basename(s).toLowerCase();return!!process.versions.electron||["code.exe","code - insiders.exe","cursor.exe","windsurf.exe","trae.exe","electron.exe"].includes(e)}function eo(){return{command:process.execPath,isElectron:ws(process.execPath)}}function to(s,e){let t=e.env;return/^microi(?:_|-|$)/i.test(s)||typeof t?.MICROI_API_URL=="string"}function Ts(s,e){let t=`${s}.${process.pid}.${Date.now()}.tmp`;try{$.writeFileSync(t,e,"utf8"),$.renameSync(t,s)}finally{try{$.existsSync(t)&&$.unlinkSync(t)}catch{}}}function _e(s,e){if($.existsSync(s)&&$.readFileSync(s).equals(e))return;$.mkdirSync(U.dirname(s),{recursive:!0});let t=`${process.pid}.${Date.now()}.${pn.randomBytes(4).toString("hex")}`,n=`${s}.${t}.stage`,r=`${s}.${t}.backup`,i=!1;try{$.writeFileSync(n,e),$.existsSync(s)&&($.renameSync(s,r),i=!0),$.renameSync(n,s),i&&$.rmSync(r,{force:!0})}catch(o){if(!$.existsSync(s)&&i&&$.existsSync(r))try{$.renameSync(r,s)}catch{}throw o}finally{try{$.existsSync(n)&&$.rmSync(n,{force:!0})}catch{}}}function no(){let s=Le();if(!/^\d+(?:\.\d+){2}$/.test(s))throw new Error(`CLI \u7248\u672C\u4E0D\u5408\u6CD5\uFF0C\u65E0\u6CD5\u521B\u5EFA MCP \u8FD0\u884C\u65F6\uFF1A${s}`);let e={launcher:U.join(__dirname,"microi-cli-mcp.js"),server:U.join(__dirname,"mcp-server.js"),adapter:U.join(__dirname,"mcp-codex-stdio-adapter.js"),router:U.join(__dirname,"microi-codex-router.js"),broker:U.join(__dirname,"microi-codex-broker.js"),cli:U.join(__dirname,"microi-cli.js"),trae:U.join(__dirname,"mcp-trae-windows-launcher.cmd")},t=Object.values(e).filter(u=>!$.existsSync(u));if(t.length>0)throw new Error(`CLI \u5B89\u88C5\u5305\u7F3A\u5C11\u5185\u7F6E MCP \u8FD0\u884C\u6587\u4EF6\uFF1A${t.join(", ")}`);let n=U.resolve(process.env.MICROI_RUNTIME_HOME||U.join(Ot.homedir(),".microi","runtime")),r=U.join(n,"versions"),i=U.join(r,s);$.mkdirSync(i,{recursive:!0}),_e(U.join(i,"microi-cli-mcp.js"),$.readFileSync(e.launcher)),_e(U.join(i,"mcp-server.js"),$.readFileSync(e.server)),_e(U.join(i,"microi-codex-router.js"),$.readFileSync(e.router)),_e(U.join(i,"microi-codex-broker.js"),$.readFileSync(e.broker)),_e(U.join(i,"microi-cli.js"),$.readFileSync(e.cli));let o=`#!/usr/bin/env node
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*
|
|
3
|
-
* Shared Microi
|
|
3
|
+
* Shared Microi Agentx MCP broker.
|
|
4
4
|
*
|
|
5
5
|
* Every Codex task still owns a tiny stdio router, but all routers for the same
|
|
6
6
|
* workspace and tool version share this broker. The broker owns at most one
|
|
@@ -92,7 +92,7 @@ function writeLeaseRecord(record, exclusive = false) {
|
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
const current = readLease();
|
|
95
|
-
if (!current || current.token !== ownerToken) throw new Error('Microi
|
|
95
|
+
if (!current || current.token !== ownerToken) throw new Error('Microi Agentx broker lease ownership changed');
|
|
96
96
|
const staged = `${leasePath}.${process.pid}.${Date.now()}.tmp`;
|
|
97
97
|
try {
|
|
98
98
|
fs.writeFileSync(staged, text, { encoding: 'utf8', mode: 0o600 });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*
|
|
3
|
-
* Microi
|
|
3
|
+
* Microi Agentx Plugin 多连接路由器。
|
|
4
4
|
*
|
|
5
5
|
* 它只负责发现 VS Code/CLI 共用的工作区配置、选择连接并把请求转发给
|
|
6
6
|
* 同一份 Microi MCP bundle。所有业务 schema、确认口令、审计和写后回读
|
|
@@ -444,7 +444,7 @@ async function callRouterTool(args) {
|
|
|
444
444
|
arguments: { action, params: args?.params || {} },
|
|
445
445
|
});
|
|
446
446
|
} catch (error) {
|
|
447
|
-
return resultText(`Microi
|
|
447
|
+
return resultText(`Microi Agentx 路由失败:${error instanceof Error ? error.message : String(error)}`, true);
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
450
|
|