@luban-code/luban-code 1.100.4 → 1.100.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/dist/acp.js +115 -115
- package/dist/cli.js +123 -123
- package/dist/extension.js +128 -128
- package/package.json +1 -1
package/dist/extension.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*! Luban | Copyright 2026 eppen (liuhualiang) | SPDX-License-Identifier: Apache-2.0 */
|
|
2
2
|
var bT=Object.create;var ku=Object.defineProperty;var kT=Object.getOwnPropertyDescriptor;var xT=Object.getOwnPropertyNames;var vT=Object.getPrototypeOf,ST=Object.prototype.hasOwnProperty;var fo=(t,e)=>()=>(t&&(e=t(t=0)),e);var ne=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),_T=(t,e)=>{for(var n in e)ku(t,n,{get:e[n],enumerable:!0})},TT=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of xT(e))!ST.call(t,r)&&r!==n&&ku(t,r,{get:()=>e[r],enumerable:!(s=kT(e,r))||s.enumerable});return t};var ui=(t,e,n)=>(n=t!=null?bT(vT(t)):{},TT(e||!t||!t.__esModule?ku(n,"default",{value:t,enumerable:!0}):n,t));var vu=ne((p2,Cm)=>{function di(t){let e=String(t??"");return e===""?[]:e.split(`
|
|
3
3
|
`)}function xu(t){return(t||[]).join(`
|
|
4
|
-
`)}function MT(t,e){let n=t.length,s=e.length,r=s+1,o=new Int32Array((n+1)*r);for(let c=n-1;c>=0;c--){let u=c*r,d=(c+1)*r;for(let f=s-1;f>=0;f--)o[u+f]=t[c]===e[f]?o[d+f+1]+1:Math.max(o[d+f],o[u+f+1])}let i=[],a=0,l=0;for(;a<n&&l<s;)t[a]===e[l]?(i.push({t:" ",s:t[a]}),a++,l++):o[(a+1)*r+l]>=o[a*r+l+1]?(i.push({t:"-",s:t[a]}),a++):(i.push({t:"+",s:e[l]}),l++);for(;a<n;)i.push({t:"-",s:t[a++]});for(;l<s;)i.push({t:"+",s:e[l++]});return i}function CT(t,e,n){let s=0,r=0;for(let u=0;u<e;u++)t[u].t!=="+"&&s++,t[u].t!=="-"&&r++;let o=t.slice(e,n).map(function(u){return{t:u.t,s:u.s}}),i=0,a=0,l=0,c=0;for(let u of o)u.t!=="+"&&i++,u.t!=="-"&&a++,u.t==="+"&&l++,u.t==="-"&&c++;return{oldStart:s,oldLines:i,newStart:r,newLines:a,add:l,del:c,header:"@@ -"+(s+1)+","+i+" +"+(r+1)+","+a+" @@",lines:o}}function AT(t){let e=[];for(let r=0;r<t.length;r++)t[r].t!==" "&&e.push(r);let n=[],s=0;for(;s<e.length;){let r=e[s],o=r,i=s+1;for(;i<e.length&&e[i]-o-1<=2*3;)o=e[i],i++;s=i;let a=Math.max(0,r-3),l=Math.min(t.length,o+3+1);n.push(CT(t,a,l))}return n.forEach(function(r,o){r.id="h"+(o+1)}),n}function OT(t,e){let n=di(t),s=di(e),r=n.length,o=s.length,i=0;for(;i<r&&i<o&&n[i]===s[i];)i++;let a=0;for(;a<r-i&&a<o-i&&n[r-1-a]===s[o-1-a];)a++;let l=n.slice(i,r-a),c=s.slice(i,o-a);if(!l.length&&!c.length)return[];let u;l.length*c.length>1e6?u=l.map(function(f){return{t:"-",s:f}}).concat(c.map(function(f){return{t:"+",s:f}})):u=MT(l,c);let d=[];for(let f=0;f<i;f++)d.push({t:" ",s:n[f]});for(let f of u)d.push(f);for(let f=r-a;f<r;f++)d.push({t:" ",s:n[f]});return AT(d)}function ET(t){let e=0,n=0;for(let s of t||[])e+=s.add,n+=s.del;return{add:e,del:n,hunks:(t||[]).length}}function PT(t,e){let n=di(t),s=[];for(let r of e.lines)r.t!=="-"&&s.push(r.s);return xu(n.slice(0,e.oldStart).concat(s,n.slice(e.oldStart+e.oldLines)))}function jT(t,e){let n=di(t),s=[];for(let r of e.lines)r.t!=="+"&&s.push(r.s);return xu(n.slice(0,e.newStart).concat(s,n.slice(e.newStart+e.newLines)))}function IT(t,e){let n=[];for(let s of e.lines)s.t!=="+"&&n.push(s.s);return{start:e.newStart,end:e.newStart+e.newLines,lines:n}}function NT(t){let e=[],n=[],s=t.newStart,r=-1,o=null;for(let i of t.lines)i.t==="+"?(r<0&&(r=s),s++):i.t==="-"?(r>=0&&(e.push({start:r,count:s-r}),r=-1),o||(o={at:s,lines:[]},n.push(o)),o.lines.push(i.s)):(r>=0&&(e.push({start:r,count:s-r}),r=-1),o=null,s++);return r>=0&&e.push({start:r,count:s-r}),{add:e,del:n}}Cm.exports={CONTEXT:3,splitLines:di,joinLines:xu,computeHunks:OT,stats:ET,applyHunkToBaseline:PT,revertHunkText:jT,revertHunkEdit:IT,hunkRanges:NT}});var Fm=ne((h2,Nm)=>{var Xt=require("fs"),po=require("fs").promises,_u=require("path"),Em=500,Su=2e4,Am=2e4,FT=8e4,LT=4e3,DT=20,RT=40,Pm=50,$T=4,qT=5*1024*1024,BT={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},UT=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/;function
|
|
4
|
+
`)}function MT(t,e){let n=t.length,s=e.length,r=s+1,o=new Int32Array((n+1)*r);for(let c=n-1;c>=0;c--){let u=c*r,d=(c+1)*r;for(let f=s-1;f>=0;f--)o[u+f]=t[c]===e[f]?o[d+f+1]+1:Math.max(o[d+f],o[u+f+1])}let i=[],a=0,l=0;for(;a<n&&l<s;)t[a]===e[l]?(i.push({t:" ",s:t[a]}),a++,l++):o[(a+1)*r+l]>=o[a*r+l+1]?(i.push({t:"-",s:t[a]}),a++):(i.push({t:"+",s:e[l]}),l++);for(;a<n;)i.push({t:"-",s:t[a++]});for(;l<s;)i.push({t:"+",s:e[l++]});return i}function CT(t,e,n){let s=0,r=0;for(let u=0;u<e;u++)t[u].t!=="+"&&s++,t[u].t!=="-"&&r++;let o=t.slice(e,n).map(function(u){return{t:u.t,s:u.s}}),i=0,a=0,l=0,c=0;for(let u of o)u.t!=="+"&&i++,u.t!=="-"&&a++,u.t==="+"&&l++,u.t==="-"&&c++;return{oldStart:s,oldLines:i,newStart:r,newLines:a,add:l,del:c,header:"@@ -"+(s+1)+","+i+" +"+(r+1)+","+a+" @@",lines:o}}function AT(t){let e=[];for(let r=0;r<t.length;r++)t[r].t!==" "&&e.push(r);let n=[],s=0;for(;s<e.length;){let r=e[s],o=r,i=s+1;for(;i<e.length&&e[i]-o-1<=2*3;)o=e[i],i++;s=i;let a=Math.max(0,r-3),l=Math.min(t.length,o+3+1);n.push(CT(t,a,l))}return n.forEach(function(r,o){r.id="h"+(o+1)}),n}function OT(t,e){let n=di(t),s=di(e),r=n.length,o=s.length,i=0;for(;i<r&&i<o&&n[i]===s[i];)i++;let a=0;for(;a<r-i&&a<o-i&&n[r-1-a]===s[o-1-a];)a++;let l=n.slice(i,r-a),c=s.slice(i,o-a);if(!l.length&&!c.length)return[];let u;l.length*c.length>1e6?u=l.map(function(f){return{t:"-",s:f}}).concat(c.map(function(f){return{t:"+",s:f}})):u=MT(l,c);let d=[];for(let f=0;f<i;f++)d.push({t:" ",s:n[f]});for(let f of u)d.push(f);for(let f=r-a;f<r;f++)d.push({t:" ",s:n[f]});return AT(d)}function ET(t){let e=0,n=0;for(let s of t||[])e+=s.add,n+=s.del;return{add:e,del:n,hunks:(t||[]).length}}function PT(t,e){let n=di(t),s=[];for(let r of e.lines)r.t!=="-"&&s.push(r.s);return xu(n.slice(0,e.oldStart).concat(s,n.slice(e.oldStart+e.oldLines)))}function jT(t,e){let n=di(t),s=[];for(let r of e.lines)r.t!=="+"&&s.push(r.s);return xu(n.slice(0,e.newStart).concat(s,n.slice(e.newStart+e.newLines)))}function IT(t,e){let n=[];for(let s of e.lines)s.t!=="+"&&n.push(s.s);return{start:e.newStart,end:e.newStart+e.newLines,lines:n}}function NT(t){let e=[],n=[],s=t.newStart,r=-1,o=null;for(let i of t.lines)i.t==="+"?(r<0&&(r=s),s++):i.t==="-"?(r>=0&&(e.push({start:r,count:s-r}),r=-1),o||(o={at:s,lines:[]},n.push(o)),o.lines.push(i.s)):(r>=0&&(e.push({start:r,count:s-r}),r=-1),o=null,s++);return r>=0&&e.push({start:r,count:s-r}),{add:e,del:n}}Cm.exports={CONTEXT:3,splitLines:di,joinLines:xu,computeHunks:OT,stats:ET,applyHunkToBaseline:PT,revertHunkText:jT,revertHunkEdit:IT,hunkRanges:NT}});var Fm=ne((h2,Nm)=>{var Xt=require("fs"),po=require("fs").promises,_u=require("path"),Em=500,Su=2e4,Am=2e4,FT=8e4,LT=4e3,DT=20,RT=40,Pm=50,$T=4,qT=5*1024*1024,BT={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},UT=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/;function bs(t){return(t<10?"0":"")+t}function Tu(t){let e=t||new Date;return e.getFullYear()+bs(e.getMonth()+1)+bs(e.getDate())+"-"+bs(e.getHours())+bs(e.getMinutes())+bs(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Pe(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function WT(t){if(!Array.isArray(t)||!t.length)return;let e=[];for(let n of t.slice(0,$T)){if(!n||typeof n!="object")continue;let s=Pe(n.file,120),r=String(n.mime==null?"":n.mime),o=BT[r];if(!o||!UT.test(s)||s.slice(s.lastIndexOf(".")+1)!==o)continue;let i=Math.min(qT,Math.floor(Number(n.bytes)||0));i<=0||e.push({file:s,mime:r,bytes:i})}return e.length?e:void 0}function KT(t){let e=t?new Date(t):new Date;return isNaN(e.getTime())?"":bs(e.getMonth()+1)+"-"+bs(e.getDate())+" "+bs(e.getHours())+":"+bs(e.getMinutes())}var jm="\u65B0\u4F1A\u8BDD";function HT(t){typeof t=="string"&&t&&(jm=t)}function fi(t,e,n){for(let s of t||[])if(s&&s.t==="user"&&s.text){let r=String(s.text).replace(/\s+/g," ").trim();if(r)return r.length>40?r.slice(0,40)+"\u2026":r}return(n||jm)+" \xB7 "+KT(e)}var GT=40,zT={pending:1,in_progress:1,completed:1,cancelled:1},VT=4,JT=6;function Om(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,GT)){if(!n||typeof n!="object")continue;let s=Pe(n.id,64).trim(),r=Pe(n.content,200).trim();if(!s||!r)continue;let o=String(n.status==null?"pending":n.status).trim().toLowerCase();e.push({id:s,content:r,status:zT[o]?o:"pending"})}return e}function XT(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,JT)){if(!n||typeof n!="object")continue;let s=Pe(n.id,64).trim(),r=Pe(n.label,120).trim();if(!s||!r)continue;let o={id:s,label:r};n.recommended&&(o.recommended=!0),e.push(o)}return e}function YT(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,VT)){if(!n||typeof n!="object")continue;let s=Pe(n.id,64).trim(),r=Pe(n.prompt,240).trim(),o=XT(n.options);if(!s||!r||o.length<2)continue;let i={id:s,prompt:r,options:o};n.allow_multiple&&(i.allow_multiple=!0),e.push(i)}return e}function ZT(t,e){let n=t&&typeof t=="object"?t:{},s=Array.isArray(e)?e:[],r={};for(let o=0;o<s.length;o++){let i=s[o],a=Object.create(null);for(let c=0;c<i.options.length;c++)a[i.options[c].id]=1;let l=n[i.id];if(i.allow_multiple){let c=Array.isArray(l)?l:l==null||l===""?[]:[l],u=[],d=Object.create(null);for(let f=0;f<c.length;f++){let p=Pe(c[f],64).trim();!p||!a[p]||d[p]||(d[p]=1,u.push(p))}u.length&&(r[i.id]=u)}else{let c=Pe(Array.isArray(l)?l[0]:l,64).trim();c&&a[c]&&(r[i.id]=c)}}return r}function Im(t){let e=Object.assign({},t);if(e.t==="tool")return e.name=Pe(e.name,60),e.path=Pe(e.path,300),e.result=Pe(e.result,LT),e.ok=e.ok!==!1,e;if(e.t==="sources")return e.items=(e.items||[]).slice(0,DT).map(function(n){return{title:Pe(n&&n.title,200),url:Pe(n&&n.url,500),siteName:Pe(n&&n.siteName,80),date:Pe(n&&n.date,40)}}),e.query=Pe(e.query,200),e;if(e.t==="refs")return e.refs=(e.refs||[]).slice(0,RT).map(function(n){return{kind:n&&n.kind==="selection"?"selection":"file",path:Pe(n&&n.path,400),startLine:n&&n.startLine||0,endLine:n&&n.endLine||0,lines:n&&n.lines||0,truncated:!!(n&&n.truncated),omitted:!!(n&&n.omitted),label:Pe(n&&n.label,400)}}),e;if(e.t==="usage"){let n=function(r){return Math.max(0,Math.floor(Number(r)||0))},s=function(r){let o=Number(r);return isFinite(o)&&o>0?Math.min(1,Number(o.toFixed(3))):0};return e.requests=n(e.requests),e.promptTokens=n(e.promptTokens),e.completionTokens=n(e.completionTokens),e.totalTokens=n(e.totalTokens),e.cachedTokens=n(e.cachedTokens),e.contextTokens=n(e.contextTokens),e.window=n(e.window),e.hit=s(e.hit),e.percent=s(e.percent),e.estimated=!!e.estimated,e.model=Pe(e.model,120),delete e.prefixHint,e}if(e.t==="user"){e.text=Pe(e.text,Su),e.web=!!e.web,e.ctx!=null&&(e.ctx=Pe(e.ctx,FT)),e.exec&&(e.exec=!0);let n=WT(e.images);return n?e.images=n:delete e.images,e}if(e.t==="error")return e.message=Pe(e.message,2e3),e;if(e.t==="todos")return e.items=Om(e.items),e;if(e.t==="ask_question")return e.id=Pe(e.id,80),e.title=Pe(e.title,80),e.questions=YT(e.questions),e.answers=ZT(e.answers,e.questions),e;if(e.t==="plan"){e.planFile=Pe(e.planFile,1e3),typeof e.text=="string"&&(e.text=Pe(e.text,Su)),typeof e.think=="string"&&(e.think=Pe(e.think,Am));let n=Om(e.todos);return n.length?e.todos=n:delete e.todos,e}return typeof e.text=="string"&&(e.text=Pe(e.text,Su)),typeof e.think=="string"&&(e.think=Pe(e.think,Am)),e}function Mu(t){return{id:t.id,title:t.title||fi(t.items,t.createdAt),createdAt:t.createdAt||"",updatedAt:t.updatedAt||"",root:t.root||"",modelKey:t.modelKey||"",mode:t.mode||"",items:(t.items||[]).length,bytes:t.bytes||0}}function ze(t,e){this.dir=t,this.max=e&&e.max||Pm,this._listCache=null,this._listJson="",this._listMtime=0,this._wq=null,this._removed=new Set,this._syncGen=0,this._tmpSeq=0,this._cleanupTmp()}ze.prototype._cleanupTmp=function(){let t=[];try{t=Xt.readdirSync(this.dir)}catch{return 0}let e=0;for(let n of t){let s=/\.tmp-(\d+)-\d+$/.exec(n);if(!(!s||s[1]===String(process.pid)))try{Xt.unlinkSync(_u.join(this.dir,n)),e++}catch{}}return e};ze.prototype.setMax=function(t){let e=Number(t);return isFinite(e)&&e>=1&&(this.max=Math.floor(e)),this.max};ze.prototype.fileOf=function(t){return _u.join(this.dir,String(t)+".json")};ze.prototype.indexPath=function(){return _u.join(this.dir,"index.json")};ze.prototype._ensureDir=function(){Xt.mkdirSync(this.dir,{recursive:!0,mode:448})};ze.prototype._write=function(t,e){this._ensureDir();let n=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(Xt.writeFileSync(n,e,{mode:384}),Xt.existsSync(t))try{Xt.copyFileSync(t,t+".bak")}catch{}Xt.renameSync(n,t)};ze.prototype._writeAsync=async function(t,e,n){await po.mkdir(this.dir,{recursive:!0,mode:448});let s=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(await po.writeFile(s,e,{mode:384}),typeof n=="function"&&!n()){try{await po.unlink(s)}catch{}return!1}try{await po.access(t);try{await po.copyFile(t,t+".bak")}catch{}}catch{}return await po.rename(s,t),!0};ze.prototype._mtimeOf=function(t){try{return Xt.statSync(t).mtimeMs}catch{return 0}};ze.prototype._ids=function(){let t=[];try{t=Xt.readdirSync(this.dir)}catch{return[]}let e=[];for(let n of t)!/\.json$/.test(n)||n==="index.json"||e.push(n.slice(0,-5));return e};ze.prototype.rebuildIndex=function(){let t=[];for(let n of this._ids()){let s=this.load(n);s&&t.push(Mu(s))}t.sort(function(n,s){return String(s.updatedAt).localeCompare(String(n.updatedAt))});let e=JSON.stringify({v:1,sessions:t})+`
|
|
5
5
|
`;try{this._write(this.indexPath(),e),this._listJson=e,this._listMtime=this._mtimeOf(this.indexPath())}catch{}return this._listCache=t,t};ze.prototype.readIndex=function(){if(this._listCache&&this._mtimeOf(this.indexPath())===this._listMtime)return this._listCache;let t=null;try{let e=Xt.readFileSync(this.indexPath(),"utf8"),n=JSON.parse(e);Array.isArray(n)?t=n:n&&Array.isArray(n.sessions)&&(t=n.sessions),t&&(this._listJson=e,this._listMtime=this._mtimeOf(this.indexPath()))}catch{t=null}return t?(t=t.filter(function(e){return e&&e.id}),!t.length&&this._ids().length?this.rebuildIndex():(this._listCache=t,t)):this.rebuildIndex()};ze.prototype.writeIndex=function(t){let e=(t||[]).slice().sort(function(s,r){return String(r.updatedAt||"").localeCompare(String(s.updatedAt||""))}),n=JSON.stringify({v:1,sessions:e})+`
|
|
6
6
|
`;if(this._listCache=e,n===this._listJson)return e;try{this._write(this.indexPath(),n),this._listJson=n,this._listMtime=this._mtimeOf(this.indexPath())}catch{}return e};ze.prototype.list=function(t,e){let n=this.readIndex();return(!t||t==="all"?n:n.filter(function(r){return String(r.root||"")===String(e||"")})).slice().sort(function(r,o){return String(o.updatedAt||"").localeCompare(String(r.updatedAt||""))})};ze.prototype.create=function(t){let e=new Date;return{v:1,id:Tu(e),title:"",createdAt:e.toISOString(),updatedAt:e.toISOString(),root:String(t??""),modelKey:"",mode:"",items:[]}};ze.prototype.load=function(t){if(!/^[A-Za-z0-9_-]+$/.test(String(t||"")))return null;let e=null;try{e=JSON.parse(Xt.readFileSync(this.fileOf(t),"utf8"))}catch{e=null}if(!e)try{e=JSON.parse(Xt.readFileSync(this.fileOf(t)+".bak","utf8"))}catch{e=null}return!e||!e.id?null:(Array.isArray(e.items)||(e.items=[]),e.title||(e.title=fi(e.items,e.createdAt)),e)};ze.prototype._dropFiles=function(t){let e=this.fileOf(t);for(let n of[e,e+".bak",e+".tmp"])try{Xt.existsSync(n)&&Xt.unlinkSync(n)}catch{}};ze.prototype._prune=function(t){let e=(t||[]).slice().sort(function(r,o){return String(o.updatedAt||"").localeCompare(String(r.updatedAt||""))}),n=Math.max(1,this.max);if(e.length<=n)return e;let s=e.slice(0,n);for(let r of e.slice(n))this._dropFiles(r.id);return s};ze.prototype._prepare=function(t){if(!t||!t.id)throw new Error("session.id \u4E0D\u80FD\u4E3A\u7A7A");Array.isArray(t.items)||(t.items=[]),t.title||(t.title=fi(t.items,t.createdAt)),t.updatedAt=new Date().toISOString()};ze.prototype._updateList=function(t){let e=Mu(t),n=this.readIndex().filter(function(s){return s.id!==t.id});return n.push(e),this._listCache=this._prune(n),e};ze.prototype.save=function(t){this._prepare(t);let e=JSON.stringify(t)+`
|
|
7
7
|
`;return t.bytes=e.length,this._syncGen++,this._write(this.fileOf(t.id),e),this._updateList(t),this.writeIndex(this._listCache),t};ze.prototype.saveAsync=function(t){this._prepare(t),this._updateList(t);let e=this;return this._wq=(this._wq||Promise.resolve()).then(async function(){if(e._removed.has(t.id))return;let n=e._syncGen,s=JSON.stringify(t)+`
|
|
@@ -10,23 +10,23 @@ var bT=Object.create;var ku=Object.defineProperty;var kT=Object.getOwnPropertyDe
|
|
|
10
10
|
#selection mes-energy/doc/\u80FD\u8017\u6A21\u578B.md:1-20`},{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF0C\u5EFA\u8BAE\u6362\u53D8\u9891\u6CF5\u3002"},{t:"tool",name:"read_file",path:"mes-energy/doc/\u80FD\u8017\u6A21\u578B.md",result:"120 \u884C"}]},b:{id:"b",title:"AI \u53D1\u5C55\u5386\u7A0B",items:[{t:"user",text:"\u63CF\u8FF0AI\u7684\u53D1\u5C55\u5386\u7A0B"},{t:"text",text:"\u4ECE\u7B26\u53F7\u4E3B\u4E49\u5230\u6DF1\u5EA6\u5B66\u4E60\u2026"},{t:"error",message:"\u8BF7\u6C42\u8D85\u65F6\uFF08ETIMEDOUT\uFF09"}]},c:{id:"c",title:"\u7A7A\u4F1A\u8BDD",items:[]}},r=[{id:"a",title:"\u80FD\u8017\u62A5\u544A\u5206\u6790",updatedAt:"2026-11-01T00:00:00Z",items:3},{id:"b",title:"AI \u53D1\u5C55\u5386\u7A0B",updatedAt:"2026-10-31T00:00:00Z",items:3},{id:"c",title:"\u7A7A\u4F1A\u8BDD",updatedAt:"2026-10-30T00:00:00Z",items:0}],o=function(g){return s[g]||null};n("terms.split",JSON.stringify(pi(" Foo bar foo "))===JSON.stringify(["foo","bar"])),n("terms.empty",pi(" ").length===0),n("terms.cap",pi("a b c d e f g h",3).length===3);let i=an(r,"\u80FD\u8017\u6A21\u578B",{load:o});n("body.matched",i.results.length===1&&i.results[0].id==="a",JSON.stringify(i.results.map(function(g){return g.id}))),n("body.count",i.results[0]&&i.results[0].count===2,JSON.stringify(i.results[0])),n("body.snippetHasTerm",!!(i.results[0]&&i.results[0].snippet.indexOf("\u80FD\u8017\u6A21\u578B")>=0),i.results[0]&&i.results[0].snippet),n("scan.skipsEmpty",i.scanned===2,"scanned="+i.scanned),n("titleOnly.noBodyHit",an(r,"\u80FD\u8017\u62A5\u544A\u5206\u6790",{load:o}).results.length===0);let a=an(r,"etimedout",{load:o});n("body.errorItem",a.results.length===1&&a.results[0].id==="b"),n("body.snippet",a.results[0]&&a.results[0].snippet.indexOf("ETIMEDOUT")>=0,a.results[0]&&a.results[0].snippet);let l=an(r,"read_file",{load:o});n("body.toolName",l.results.length===1&&l.results[0].id==="a"&&l.results[0].count===1);let c=an(r,"#selection",{load:o});n("body.ctx",c.results.length===1&&c.results[0].id==="a");let u=an(r,"\u53D8\u9891\u6CF5 ETIMEDOUT",{load:o});n("and.crossSessionMiss",u.results.length===0,JSON.stringify(u.results));let d=an(r,"\u80FD\u8017 \u53D8\u9891\u6CF5",{load:o});n("and.crossItemHit",d.results.length===1&&d.results[0].id==="a",JSON.stringify(d.results.map(function(g){return g.id}))),n("and.countAnyTerm",d.results[0]&&d.results[0].count===3,JSON.stringify(d.results[0])),n("miss",an(r,"\u4E0D\u5B58\u5728\u7684\u8BCD",{load:o}).results.length===0),n("emptyQuery",an(r," ",{load:o}).results.length===0);let f=[];for(let g=0;g<5;g++)f.push({id:"m"+g,title:"T"+g,updatedAt:"2026-11-01T00:00:00Z",items:1}),s["m"+g]={id:"m"+g,title:"T"+g,items:[{t:"text",text:"\u5171\u540C\u5173\u952E\u8BCD "+g}]};let p=an(f,"\u5171\u540C\u5173\u952E\u8BCD",{load:o,maxSessions:3});n("cap.results",p.results.length===3,"n="+p.results.length),n("cap.truncated",p.truncated===!0);let h=[{id:"x",title:"X",updatedAt:"2026-11-02T00:00:00Z",items:2},{id:"y",title:"Y",updatedAt:"2026-11-01T00:00:00Z",items:2}];s.x={id:"x",title:"X",items:[{t:"text",text:"k"},{t:"text",text:"k"}]},s.y={id:"y",title:"Y",items:[{t:"text",text:"k"},{t:"text",text:"k"},{t:"text",text:"k"}]};let m=an(h,"k",{load:o});n("rank.countDesc",m.results[0].id==="y"&&m.results[1].id==="x",JSON.stringify(m.results.map(function(g){return g.id})));let y=an(r,"\u80FD\u8017",{load:function(g){if(g==="a")throw new Error("boom");return o(g)}});n("load.throwing",y.results.length===0&&y.ms>=0);let w=nl("x".repeat(300)+`
|
|
11
11
|
\u5173\u952E\u8BCD
|
|
12
12
|
`+"y".repeat(300),"\u5173\u952E\u8BCD",60);n("snippet.ellipsis",w.indexOf("\u2026")===0&&w.slice(-1)==="\u2026",w),n("snippet.flat",w.indexOf(`
|
|
13
|
-
`)<0),n("snippet.hasTerm",w.indexOf("\u5173\u952E\u8BCD")>=0),n("snippet.shortText",nl("\u77ED\u6587\u672C","\u77ED",60)==="\u77ED\u6587\u672C");let T=Au({items:[{t:"text",text:"k"},{t:"text",text:"k"},{t:"text",text:"k"}]},["k"],{maxItems:2,maxText:2e4,snippet:60});if(n("hits.capped",T.count===3&&T.hits.length===2,JSON.stringify(T)),e.length){console.error("session-search.js \u81EA\u6D4B\u5931\u8D25 "+e.length+" \u9879\uFF08\u901A\u8FC7 "+t+"\uFF09\uFF1A");for(let g of e)console.error(" - "+g);process.exit(1)}console.log("session-search.js \u81EA\u6D4B\u901A\u8FC7 "+t+" \u9879")}});var Hm=ne((g2,Km)=>{var sl={enabled:!0,maxTurns:8,maxChars:12e3,maxItemChars:6e3},Eu="\u2026[\u5DF2\u622A\u65AD]",Rm=2e4,$m=2e3,s1=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,r1={"image/png":1,"image/jpeg":1,"image/webp":1,"image/gif":1};function o1(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file),n=String(t.mime==null?"":t.mime);if(!s1.test(e)||e.length>120||!r1[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0?null:{file:e,mime:n,bytes:s}}function i1(t,e){let n=[];for(let s of Array.isArray(t)?t:[]){let r=o1(s);if(!r)continue;let o="";try{o=String(e(r)||"")}catch{o=""}o.indexOf("data:image/")===0&&n.push({type:"image_url",image_url:{url:o}})}return n}function ju(t){if(Array.isArray(t)){let e=0;for(let n of t)!n||typeof n!="object"||(n.type==="text"?e+=String(n.text==null?"":n.text).length:n.type==="image_url"&&(e+=$m));return e}return String(t??"").length}function
|
|
13
|
+
`)<0),n("snippet.hasTerm",w.indexOf("\u5173\u952E\u8BCD")>=0),n("snippet.shortText",nl("\u77ED\u6587\u672C","\u77ED",60)==="\u77ED\u6587\u672C");let T=Au({items:[{t:"text",text:"k"},{t:"text",text:"k"},{t:"text",text:"k"}]},["k"],{maxItems:2,maxText:2e4,snippet:60});if(n("hits.capped",T.count===3&&T.hits.length===2,JSON.stringify(T)),e.length){console.error("session-search.js \u81EA\u6D4B\u5931\u8D25 "+e.length+" \u9879\uFF08\u901A\u8FC7 "+t+"\uFF09\uFF1A");for(let g of e)console.error(" - "+g);process.exit(1)}console.log("session-search.js \u81EA\u6D4B\u901A\u8FC7 "+t+" \u9879")}});var Hm=ne((g2,Km)=>{var sl={enabled:!0,maxTurns:8,maxChars:12e3,maxItemChars:6e3},Eu="\u2026[\u5DF2\u622A\u65AD]",Rm=2e4,$m=2e3,s1=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,r1={"image/png":1,"image/jpeg":1,"image/webp":1,"image/gif":1};function o1(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file),n=String(t.mime==null?"":t.mime);if(!s1.test(e)||e.length>120||!r1[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0?null:{file:e,mime:n,bytes:s}}function i1(t,e){let n=[];for(let s of Array.isArray(t)?t:[]){let r=o1(s);if(!r)continue;let o="";try{o=String(e(r)||"")}catch{o=""}o.indexOf("data:image/")===0&&n.push({type:"image_url",image_url:{url:o}})}return n}function ju(t){if(Array.isArray(t)){let e=0;for(let n of t)!n||typeof n!="object"||(n.type==="text"?e+=String(n.text==null?"":n.text).length:n.type==="image_url"&&(e+=$m));return e}return String(t??"").length}function Ds(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Eu.length?n.slice(0,e):n.slice(0,e-Eu.length)+Eu:""}function Pu(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function a1(t){let e=t||{};return{enabled:e.enabled!==!1,maxTurns:Pu(e.maxTurns,sl.maxTurns),maxChars:Pu(e.maxChars,sl.maxChars),maxItemChars:Pu(e.maxItemChars,sl.maxItemChars),dropTailAssistant:!!e.dropTailAssistant,resolveImage:typeof e.resolveImage=="function"?e.resolveImage:function(){return""},spill:e.spill&&typeof e.spill=="object"?e.spill:null}}function qm(t){return!t||!t.t?"":t.t==="user"?"user":t.narr?"":t.t==="text"||t.t==="plan"?"assistant":""}function Bm(t){let e=0;for(let n of t||[])e+=ju(n&&n.content);return e}function l1(t){return t?t.ctx!=null&&t.ctx!==""?t.ctx:t.text:""}function Um(t,e,n){let s=typeof n=="function"?n:function(){return""},r=[];for(let o of t||[]){let i=qm(o);if(!i)continue;let a=o.ctx!=null&&o.ctx!=="",l=a?Math.max(e,Rm):e,c=Ds(a?o.ctx:o.text,l).trim(),u=i==="user"?i1(o.images,s):[],d=i==="user"?Math.max(e,Rm):e;if(u.length){let p=r[r.length-1];p&&p.role===i&&typeof p.content=="string"?p.content=[{type:"text",text:Ds(p.content+`
|
|
14
14
|
|
|
15
|
-
`+c,d)}].concat(u):r.push({role:i,content:c?[{type:"text",text:c}].concat(u):u});continue}if(!c)continue;let f=r[r.length-1];if(f&&f.role===i)if(Array.isArray(f.content)){let p=null;for(let h of f.content)if(h&&typeof h=="object"&&h.type==="text"){p=h;break}p?p.text=
|
|
15
|
+
`+c,d)}].concat(u):r.push({role:i,content:c?[{type:"text",text:c}].concat(u):u});continue}if(!c)continue;let f=r[r.length-1];if(f&&f.role===i)if(Array.isArray(f.content)){let p=null;for(let h of f.content)if(h&&typeof h=="object"&&h.type==="text"){p=h;break}p?p.text=Ds(p.text+`
|
|
16
16
|
|
|
17
|
-
`+c,d):f.content.unshift({type:"text",text:
|
|
17
|
+
`+c,d):f.content.unshift({type:"text",text:Ds(c,d)})}else f.content=Ds(f.content+`
|
|
18
18
|
|
|
19
|
-
`+c,d);else r.push({role:i,content:c})}return r}function Wm(t){let e=[],n=null;for(let s of t||[])s.role==="user"?(n=[s],e.push(n)):n&&s.role==="assistant"&&n.push(s);return e}function c1(t,e,n){let s=Bm(e);if(s<=n){for(let a of e)t.push({role:a.role,content:a.content});return{chars:s,dropped:0}}let r=n>0?n/s:0,o=0,i=0;for(let a of e){let l=Math.floor(ju(a.content)*r);if(l<=0){i++;continue}if(Array.isArray(a.content)){let u="",d=0;for(let h of a.content)!h||typeof h!="object"||(h.type==="text"?u+=String(h.text==null?"":h.text):h.type==="image_url"&&(d+=$m));if(l<=d){i++;continue}let f=[],p=
|
|
19
|
+
`+c,d);else r.push({role:i,content:c})}return r}function Wm(t){let e=[],n=null;for(let s of t||[])s.role==="user"?(n=[s],e.push(n)):n&&s.role==="assistant"&&n.push(s);return e}function c1(t,e,n){let s=Bm(e);if(s<=n){for(let a of e)t.push({role:a.role,content:a.content});return{chars:s,dropped:0}}let r=n>0?n/s:0,o=0,i=0;for(let a of e){let l=Math.floor(ju(a.content)*r);if(l<=0){i++;continue}if(Array.isArray(a.content)){let u="",d=0;for(let h of a.content)!h||typeof h!="object"||(h.type==="text"?u+=String(h.text==null?"":h.text):h.type==="image_url"&&(d+=$m));if(l<=d){i++;continue}let f=[],p=Ds(u,l-d);p&&f.push({type:"text",text:p});for(let h of a.content)h&&typeof h=="object"&&h.type==="image_url"&&f.push(h);t.push({role:a.role,content:f}),o+=ju(f);continue}let c=Ds(a.content,l);t.push({role:a.role,content:c}),o+=c.length}return{chars:o,dropped:i}}function u1(t){let e=[];for(let n of t||[]){if(!n||!n.role)continue;let s="";if(Array.isArray(n.content))for(let r of n.content)r&&typeof r=="object"&&r.type==="text"&&(s+=String(r.text==null?"":r.text));else s=String(n.content==null?"":n.content);s=s.replace(/\s+/g," ").trim(),s&&e.push({role:n.role,summary:s})}return e}function d1(t,e){let n=a1(e),s={messages:[],turns:0,chars:0,dropped:0,enabled:n.enabled,spilledTurns:0,spillDigest:"",spillIds:[]};if(!n.enabled)return s;let r=Um(t,n.maxItemChars,n.resolveImage);if(n.dropTailAssistant)for(;r.length&&r[r.length-1].role==="assistant";)r.pop();let o=Wm(r);if(!o.length)return s;let i=[],a=0,l=0,c=0;for(let m=o.length-1;m>=0;m--){if(i.length>=n.maxTurns){c=m+1;break}let y=o[m],w=Bm(y);if(!(i.length===0)&&a+w>n.maxChars){c=m+1;break}let g=[],v=c1(g,y,n.maxChars-a);a+=v.chars,l+=v.dropped,i.push(g),c=m}let u=[];for(let m=i.length-1;m>=0;m--)for(let y of i[m])u.push(y);let d=[],f=[],p=n.spill&&typeof n.spill=="object"?n.spill:null;for(let m=0;m<c;m++){let y=u1(o[m]);for(let w of y)d.push(w);if(p&&typeof p.put=="function"&&o[m]&&o[m].length)try{let w=typeof p.newId=="function"?p.newId():"sp_mem_"+m,T=o[m].map(function(g){let v=g.role||"",b=Array.isArray(g.content)?g.content.filter(function(S){return S&&S.type==="text"}).map(function(S){return S.text}).join(""):String(g.content==null?"":g.content);return v+": "+b}).join(`
|
|
20
20
|
|
|
21
21
|
`);p.put(w,T,{kind:"memory_turn",turnIndex:m}),f.push(w)}catch{}}let h="";if(d.length)if(p&&typeof p.memoryDigestBlock=="function")h=p.memoryDigestBlock(d);else{let m=["[\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\uFF08\u5B8C\u6574\u5BF9\u8BDD\u5DF2\u88C1\u51FA\u4E0A\u4E0B\u6587\uFF09]"];for(let y of d){let w=y.role==="assistant"?"\u52A9\u624B":y.role==="user"?"\u7528\u6237":y.role,T=String(y.summary||"").slice(0,160);T&&m.push("- "+w+"\uFF1A"+T)}h=m.join(`
|
|
22
22
|
`).slice(0,1200)}return{messages:u,turns:i.length,chars:a,dropped:l,enabled:!0,spilledTurns:c,spillDigest:h,spillIds:f}}function f1(t,e){let n=String(e??""),s=t||[];if(!n)return s;let r=s[s.length-1];return r&&r.role==="user"&&!Array.isArray(r.content)?r.content=String(r.content||"")+`
|
|
23
23
|
|
|
24
|
-
`+n:s.push({role:"user",content:n}),s}Km.exports={DEFAULTS:sl,build:d1,pushUser:f1,_clipText:
|
|
24
|
+
`+n:s.push({role:"user",content:n}),s}Km.exports={DEFAULTS:sl,build:d1,pushUser:f1,_clipText:Ds,_roleOf:qm,_textOf:l1,_flatten:Um,_groupTurns:Wm}});var Vm=ne((y2,zm)=>{var Nu=["<think>","<thinking>","[think]"],rl=["</think>","</thinking>","[/think]"],Gm=Math.max.apply(null,Nu.concat(rl).map(function(t){return t.length}))-1;function Iu(t,e){let n=null;for(let s of e){let r=t.indexOf(s);r>=0&&(!n||r<n.at)&&(n={at:r,tag:s})}return n}function p1(t){let e=t||{},n=e.startInThink===!0,s=n,r="",o="",i="",a="",l=n?"think":"answer",c=!n;function u(y){if(y&&(r+=y,e.onContent))try{e.onContent(y)}catch{}}function d(y){if(y&&(i+=y,e.onReasoning))try{e.onReasoning(y)}catch{}}function f(){if(!a)return;let y=a;a="",l==="think"?d(y):u(y)}function p(y){if(y==null||y==="")return;let w=String(y);for(o+=w,a+=w;a;){if(l==="think"){let b=Iu(a,rl);if(!b){let S=a.length-Gm;if(S<=0)return;d(a.slice(0,S)),a=a.slice(S);continue}d(a.slice(0,b.at)),a=a.slice(b.at+b.tag.length),l="answer",c=!1,s=!1;continue}if(!c){u(a),a="";return}let T=Iu(a,Nu),g=Iu(a,rl);if(!T&&!g){let b=a.length-Gm;if(b<=0)return;u(a.slice(0,b)),a=a.slice(b);continue}if(T&&(!g||T.at<=g.at)){let b=a.slice(0,T.at);b.trim()&&u(b),a=a.slice(T.at+T.tag.length),l="think",s=!1;continue}let v=r+a.slice(0,g.at);if(r="",i+=v,e.onSplit)try{e.onSplit(v)}catch{}a=a.slice(g.at+g.tag.length),c=!1,s=!1}}function h(y){y==null||y===""||(s&&(s=!1,l="answer",c=!1,f()),d(String(y)))}function m(){f()}return{pushContent:p,pushReasoning:h,end:m,get content(){return r},get reasoning(){return i},get rawContent(){return o}}}zm.exports={newParser:p1,OPEN_TAGS:Nu,CLOSE_TAGS:rl}});var Ru=ne((w2,ng)=>{var Rs={ratio:.35,minRatio:.2,maxRatio:1,keepTail:8,labelMax:60,omittedArgs:'{"_omitted":true}'},Fu="\u2026[\u5DF2\u622A\u65AD]",h1=2e3;function Ym(t){if(Array.isArray(t)){let e=0;for(let n of t)!n||typeof n!="object"||(n.type==="text"?e+=String(n.text==null?"":n.text).length:n.type==="image_url"&&(e+=h1));return e}return String(t??"").length}function m1(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Fu.length?n.slice(0,e):n.slice(0,e-Fu.length)+Fu:""}function Jm(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Zm(t){let e=Number(t);return!isFinite(e)||e<=0?Rs.ratio:Math.min(Rs.maxRatio,Math.max(Rs.minRatio,e))}function Lu(t){if(!t||typeof t!="object")return 0;let e=Ym(t.content);e+=String(t.tool_call_id==null?"":t.tool_call_id).length;let n=Array.isArray(t.tool_calls)?t.tool_calls:[];for(let s of n){let r=s&&s.function||{};e+=String(s&&s.id==null?"":s.id).length,e+=String(r.name==null?"":r.name).length,e+=String(r.arguments==null?"":r.arguments).length}return e}function Du(t){let e=0;for(let n of t||[])e+=Lu(n);return e}function g1(t){let e=Array.isArray(t)?t:[];if(!e.length)return 0;try{return String(JSON.stringify(e)).length}catch{return 0}}function y1(t,e){let n=Number(t);return!isFinite(n)||n<=0?0:Math.ceil(n*Zm(e))}function Qm(t){let e=t&&typeof t=="object"?t:{},n=["path","dir","command","query","url","name"];for(let s of n){let r=e[s];if(typeof r=="string"&&r.trim())return r.trim().slice(0,Rs.labelMax)}for(let s of Object.keys(e))if(typeof e[s]=="string"&&e[s].trim())return e[s].trim().slice(0,Rs.labelMax);return""}function ol(t){if(Array.isArray(t))return t.map(ol);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=ol(t[n]);return e}return t}function w1(t,e){let n=e;if(typeof n=="string")try{n=JSON.parse(n)}catch{n=n}try{return String(t??"")+"|"+JSON.stringify(ol(n??{}))}catch{return String(t??"")+"|"+String(n)}}function eg(t){let e=String(t??"");if(!e)return!0;try{let n=JSON.parse(e);return!!(n&&n._omitted===!0)}catch{return!1}}function tg(t){let e=new Map;for(let n of t||[]){let s=n&&Array.isArray(n.tool_calls)?n.tool_calls:[];for(let r of s){if(!r)continue;let o={};try{o=JSON.parse(r.function&&r.function.arguments||"{}")}catch{o={}}e.set(String(r.id||""),{name:String(r.function&&r.function.name||""),label:Qm(o)})}}return e}function b1(t,e){let n=t&&t.name||"\u5DE5\u5177",s=t&&t.label||"";return"[\u5DF2\u7701\u7565\uFF1A"+n+(s?" "+s:"")+"\uFF0C\u539F "+e+" \u5B57\u7B26]"}function k1(t){let e=t&&t.spill;return!e||typeof e!="object"||typeof e.put!="function"?null:e}function Xm(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Jm(n.keepTail,Rs.keepTail),o=Du(s),i=Math.max(0,s.length-r),a=tg(s),l=k1(n),c=0,u=0,d=0,f=[];for(let h=0;h<s.length;h++){let m=s[h];if(!m||typeof m!="object"){f.push(m);continue}if(h>=i){f.push(m);continue}let y=Object.assign({},m);if(m.role==="tool"){let w=String(m.content==null?"":m.content);if(w&&w.indexOf("[\u5DF2\u7701\u7565\uFF1A")!==0){let T=a.get(String(m.tool_call_id||"")),g=b1(T,w.length);if(l){let v=Jm(n.summaryMax,240),b=typeof l.summarize=="function"?l.summarize(w,v):w.replace(/\s+/g," ").trim().slice(0,v),S=typeof l.newId=="function"?l.newId():"sp_"+h;try{l.put(S,w,{kind:"tool",name:T&&T.name||"",label:T&&T.label||"",tool_call_id:String(m.tool_call_id||"")}),d++}catch{}g=typeof l.toolPlaceholder=="function"?l.toolPlaceholder(T,w.length,b,S):g.slice(0,-1)+"\uFF1B\u6458\u8981\uFF1A"+b+"\uFF1B\u5B8C\u6574\u7ED3\u679C id="+S+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}y.content=g,c++}}if(Array.isArray(m.tool_calls)&&m.tool_calls.length){let w=!1;y.tool_calls=m.tool_calls.map(function(T){if(!T||!T.function)return T;let g=String(T.function.arguments==null?"":T.function.arguments);if(eg(g))return T;w=!0;let v=Object.assign({},T.function,{arguments:Rs.omittedArgs});return Object.assign({},T,{function:v})}),w&&u++}f.push(y)}let p=Du(f);return{messages:f,beforeChars:o,afterChars:p,savedChars:o-p,omittedTools:c,omittedArgs:u,spilled:d,keptTail:Math.min(r,s.length)}}ng.exports={DEFAULTS:Rs,clipText:m1,contentChars:Ym,charsOfMessage:Lu,charsOf:Du,charsOfTools:g1,estimateTokens:y1,ratioOf:Zm,labelOf:Qm,canonical:ol,fingerprint:w1,compact:Xm,_charsOfMessage:Lu,_compact:Xm,_callMap:tg,_isOmittedArgs:eg}});var ug=ne((b2,Ku)=>{var ln=Ru(),ho=32768,Bu=16384,Uu=8192,$u="\u2026",sg={small:{desc:96,param:32},tiny:{desc:76,param:20}},x1={small:["run_command_start","run_command_poll","run_command_stop"],tiny:["run_command_start","run_command_poll","run_command_stop"]},yi={window:65536,tierFull:ho,tierMid:Bu,tierSmall:Uu,summaryReserve:240,summaryMax:220,keepRecent:2};function qu(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function il(t,e){let n=String(t??""),s=Number(e);return!isFinite(s)||s<=0?"":n.length<=s?n:s<=$u.length?n.slice(0,s):n.slice(0,s-$u.length)+$u}function Wu(t,e){let n=String(t??"").trim();if(!n)return"";let s=n.length;for(let l of["\u3002","\uFF1B",`
|
|
25
25
|
`]){let c=n.indexOf(l);c>0&&c<s&&(s=c+(l===`
|
|
26
|
-
`?0:1))}let r=/[.;]\s/.exec(n);r&&r.index>0&&r.index<s&&(s=r.index+1);let o=n.slice(0,s).trim(),a=o.replace(/[;,,、::]+$/,"")||o;return a.length>e?il(a,e):a}var v1={startLine:1,maxLines:1,contextLines:1,maxHits:1,maxFiles:1,maxResults:1,replace_all:1,merge:1,patterns:1,questions:1,options:1,pattern:1,patch:1,timeout_ms:1,need_content:1,wait_ms:1,tail_chars:1,maxDiags:1,todos:1,glob:0},rg=120;function og(t,e,n){if(!t||typeof t!="object")return t;let s=Object.assign({},t),r=t.properties;if(r&&typeof r=="object"){let o={};for(let i of Object.keys(r)){let a=r[i];if(!a||typeof a!="object"){o[i]=a;continue}let l=Object.assign({},a);n||v1[i]?l.description=Wu(a.description,e):delete l.description,o[i]=l}s.properties=o}return s}function mi(t,e){let n=Array.isArray(t)?t:[],s=sg[e];if(!s)return n;let r=x1[e]||[];return n.filter(function(o){return!(o&&o.function&&r.indexOf(o.function.name)>=0)}).map(function(o){if(!o||!o.function)return o;let i=o.function,a=String(i.name||"").indexOf("pl__")===0;return Object.assign({},o,{function:Object.assign({},i,{description:Wu(i.description,s.desc),parameters:og(i.parameters,a?Math.max(s.param,rg):s.param,a)})})})}function ig(t,e){let n=isFinite(t)&&t>0?Math.floor(t):yi.window,s=n>=ho?"full":n>=Bu?"mid":n>=Uu?"small":"tiny";return e==="off"?{window:n,tier:"full"}:(e==="on"&&(s==="full"||s==="mid")&&(s="small"),{window:n,tier:s})}function Rs(t,e){let s=ig(t,(e||{}).mode),r=s.window,o=s.tier;if(o==="full"||o==="mid"){let c=r>=ho?8e4:Math.max(2e3,Math.floor(r*.3)),u=r>=ho?4e4:Math.max(1500,Math.floor(c/2)),d=r>=ho?4e4:Math.max(2e3,Math.floor(r*.2));return{window:r,tier:o,compact:!1,dropAsyncCmd:!1,descCap:0,readMax:d,runMaxChars:8e3,searchFiles:20,searchCtxLines:1,grepHits:200,globFiles:200,listEntries:0,autoCtxChars:8e3,autoCtxLines:200,memoryTurns:8,memoryChars:12e3,keepTailSteps:[8,4,2,0],fpTotalLimit:4,summaryMaxTokens:2048,spillReadMax:8e3,refTotal:c,refPerFile:u}}let a=o==="tiny",l=a?Math.max(1200,Math.floor(r*.2)):Math.max(2e3,Math.floor(r*.25));return{window:r,tier:o,compact:!0,dropAsyncCmd:!0,descCap:sg[o].desc,readMax:a?Math.max(1e3,Math.floor(r*.12)):Math.max(1500,Math.floor(r*.15)),runMaxChars:a?Math.min(4e3,Math.max(2e3,Math.floor(r*.4))):Math.min(8e3,Math.max(3e3,Math.floor(r*.5))),searchFiles:a?6:12,searchCtxLines:a?0:1,grepHits:a?30:60,globFiles:a?40:80,listEntries:a?60:120,autoCtxChars:a?Math.max(1200,Math.floor(r*.22)):Math.floor(r*.28),autoCtxLines:a?40:80,memoryTurns:a?3:4,memoryChars:Math.max(1e3,Math.floor(r*.25)),keepTailSteps:a?[2,0]:[4,2,0],fpTotalLimit:6,summaryMaxTokens:a?768:1024,spillReadMax:Math.min(8e3,Math.max(2e3,Math.floor(r*.5))),refTotal:l,refPerFile:Math.max(800,Math.floor(l/2))}}function ag(t,e){return String(t??"").length+ln.charsOfTools(e)}function S1(t){let e=t&&t.function||{},n={};try{n=JSON.parse(e.arguments||"{}")}catch{n={}}let s=ln.labelOf(n);return String(e.name||"\u5DE5\u5177")+(s?" "+s:"")}function lg(t,e){let n=[],s=0;for(let i of t)for(let a of i){if(!a||a.role!=="assistant")continue;let l=Array.isArray(a.tool_calls)?a.tool_calls:[];for(let c of l)s++,n.push(S1(c));if(!l.length&&a.content){let c=String(a.content).replace(/\s+/g," ").trim();c&&n.push("\u8BF4\u660E\uFF1A"+il(c,40))}}if(!n.length)return"";let r=[];for(let i of n)r.indexOf(i)<0&&r.push(i);let o="[\u5DF2\u538B\u7F29\u66F4\u65E9 "+s+" \u6B65\u5DE5\u5177\u8C03\u7528\uFF0C\u6B63\u6587\u5DF2\u88C1\u51FA\u4E0A\u4E0B\u6587\uFF1B\u9700\u8981\u65F6\u91CD\u65B0\u8BFB\u53D6\u6587\u4EF6\u6216\u91CD\u8DD1\u547D\u4EE4]";return il(o+" \u5DF2\u6267\u884C\uFF1A"+r.slice(0,6).join("\u3001"),e)}function cg(t){let e=[],n=null;for(let s of t||[]){if(!s||typeof s!="object"){n=null;continue}if(s.role==="assistant"){n=[s],e.push(n);continue}if(s.role==="tool"&&n){n.push(s);continue}n=[s],e.push(n)}return e}function gi(t,e,n){let s=n||{},r=Array.isArray(t)?t:[],o=Number(e),i=ln.charsOf(r),a={ok:!0,messages:r.slice(),dropped:0,savedChars:0,summary:"",chars:i,beforeChars:i,minChars:0};if(!isFinite(o)||o<=0||i<=o)return a;let l=function(P){return{ok:!1,messages:r.slice(),dropped:0,savedChars:0,summary:"",chars:i,beforeChars:i,minChars:P}},c=0;for(;c<r.length&&r[c]&&r[c].role==="system";)c++;let u=r.slice(0,c),d=cg(r.slice(c));if(!d.length)return l(ln.charsOf(u));let f=-1;for(let P=r.length-1;P>=c;P--)if(r[P]&&r[P].role==="user"){f=P;break}let p=-1;if(f>=0){let P=c;for(let K=0;K<d.length;K++){let ae=P+d[K].length;if(f>=P&&f<ae){p=K;break}P=ae}}let h=qu(s.summaryReserve,yi.summaryReserve),m=qu(s.keepRecent,yi.keepRecent),y=ln.charsOf(u),w=p>=0?ln.charsOf(d[p]):0,T=y+w,g=function(P){let K=d.length,ae=0;for(let G=d.length-1;G>=0;G--){if(d[G].some(function(Se){return Se&&Se.role==="assistant"&&Array.isArray(Se.tool_calls)&&Se.tool_calls.length>0})){if(ae>=P)break;ae++}K=G}for(;K>0&&K<d.length&&d[K][0]&&d[K][0].role==="tool";)K--;let te={};for(let G=K;G<d.length;G++)te[G]=!0;p>=0&&(te[p]=!0);let Q=[];for(let G=0;G<d.length;G++)te[G]||Q.push({index:G,chars:ln.charsOf(d[G])});let he=y+w;for(let G=K;G<d.length;G++)G!==p&&(he+=ln.charsOf(d[G]));return{keepFrom:K,droppable:Q,fixed:he}},v=null;for(let P=m;P>=0;P--){let K=g(P);if(K.fixed+(K.droppable.length?h:0)<=o){v=K;break}}if(!v)return l(T);let b=v.droppable,S=v.fixed;if(!b.length)return l(S);let _=0;for(let P of b)_+=P.chars;let C=0;for(;C<b.length&&S+_+h>o;)_-=b[C].chars,C++;if(S+_+h>o)return l(S+_);let A={};for(let P=0;P<C;P++)A[b[P].index]=!0;let F=[],B=[];for(let P=0;P<d.length;P++)A[P]?F.push(d[P]):B.push(d[P]);let H=lg(F,qu(s.summaryMax,yi.summaryMax)),$=u.slice();H&&$.push({role:"assistant",content:H});for(let P of B)for(let K of P)$.push(K);let J=ln.charsOf($);return{ok:J<=o,messages:$,dropped:C,savedChars:i-J,summary:H,chars:J,beforeChars:i,minChars:S}}Ku.exports={DEFAULTS:yi,TIERS:{full:ho,mid:Bu,small:Uu},profile:Rs,tierOf:ig,compactTools:mi,fixedChars:ag,squeeze:gi,_firstSentence:Wu,_compactParams:og,_groupForSqueeze:cg,_summaryOf:lg,_clip:il};if(require.main===Ku){let t=0,e=[],n=function(_,C,A){if(C){t++;return}e.push(_+(A?" \u2192 "+A:""))};n("tier.4096",Rs(4096).tier==="tiny"),n("tier.8192",Rs(8192).tier==="small"),n("tier.16384",Rs(16384).tier==="mid"),n("tier.32768",Rs(32768).tier==="full"),n("tier.on",Rs(65536,{mode:"on"}).tier==="small"),n("tier.off",Rs(4096,{mode:"off"}).tier==="full");let s=[4096,8192,12288,16384,32768,65536],r=s.map(function(_){return Rs(_)}),o=!0;for(let _=1;_<r.length;_++)for(let C of["readMax","runMaxChars","searchFiles","grepHits","globFiles","autoCtxChars","memoryChars"])r[_][C]<r[_-1][C]&&(o=!1,e.push("mono."+C+"@"+s[_]));n("profile.monotonic",o);let i=[];for(let _=0;_<4;_++)i.push({type:"function",function:{name:"tool"+_,description:"\u7B2C\u4E00\u53E5\u8BF4\u660E\u3002".repeat(1)+"\u540E\u9762\u8FD8\u6709\u5F88\u957F\u7684\u8865\u5145\u8BF4\u660E\uFF0C".repeat(10),parameters:{type:"object",properties:{path:{type:"string",description:"\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u7684\u8DEF\u5F84\uFF0C\u4E5F\u53EF\u4EE5\u662F\u7EDD\u5BF9\u8DEF\u5F84"},startLine:{type:"number",description:"\u8D77\u59CB\u884C\u53F7\uFF08\u4ECE 1 \u5F00\u59CB\uFF09\uFF0C\u9ED8\u8BA4 1"}},required:["path"]}}});let a=ln.charsOfTools(i),l=ln.charsOfTools(mi(i,"small")),c=ln.charsOfTools(mi(i,"tiny"));n("compact.smallShrinks",l<a*.8,l+" / "+a),n("compact.tinyShrinks",c<=l);let u=mi(i,"small")[0].function;n("compact.firstSentence",u.description.length<=96&&u.description.indexOf("\u540E\u9762\u8FD8\u6709")<0,u.description),n("compact.keepsPath",u.parameters.properties.path.type==="string"),n("compact.dropsEasyParamDesc",!u.parameters.properties.path.description),n("compact.keepsHardParamDesc",!!u.parameters.properties.startLine.description),n("compact.originalUntouched",i[0].function.parameters.properties.path.description.length>0);let d={type:"function",function:{name:"pl__demo__say",description:"\u56DE\u663E\u4E00\u6BB5\u6587\u672C\uFF0C\u7528\u4E8E\u9A8C\u8BC1\u63D2\u4EF6\u901A\u8DEF".repeat(3),parameters:{type:"object",properties:{text:{type:"string",description:"\u8981\u56DE\u663E\u7684\u6587\u672C\u5185\u5BB9\uFF0C\u63D2\u4EF6\u539F\u6837\u8FD4\u56DE"},loud:{type:"boolean",description:"\u662F\u5426\u8F6C\u6210\u5927\u5199\u540E\u8FD4\u56DE"}},required:["text"]}}},f=mi([d],"small")[0].function;n("compact.pluginKeepsParamDesc",!!f.parameters.properties.text.description&&!!f.parameters.properties.loud.description,JSON.stringify(f.parameters.properties)),n("compact.pluginParamDescCapped",f.parameters.properties.text.description.length<=rg),n("compact.pluginKeepsRequired",f.parameters.required.length===1&&f.parameters.required[0]==="text"),n("compact.pluginToolDescStillCut",f.description.length<=96);let p=[{role:"system",content:"S".repeat(500)},{role:"user",content:"\u539F\u59CB\u95EE\u9898"}];for(let _=0;_<20;_++){let C="call_"+_;p.push({role:"assistant",content:"",tool_calls:[{id:C,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+_+".js"})}}]}),p.push({role:"tool",tool_call_id:C,content:"r".repeat(1e3)})}let h={role:"user",content:"\u6700\u540E\u7684\u95EE\u9898"};p.push(h);let m=ln.charsOf(p),y=gi(p,4e3),w=[];for(let _ of y.messages)for(let C of _.tool_calls||[])w.push(String(C.id));let T=y.messages.filter(function(_){return _.role==="tool"}).map(function(_){return String(_.tool_call_id)});n("squeeze.ok",y.ok,JSON.stringify({chars:y.chars,min:y.minChars})),n("squeeze.withinCap",y.chars<=4e3,String(y.chars)),n("squeeze.paired",w.length===T.length&&w.every(function(_){return T.indexOf(_)>=0})),n("squeeze.keepsSystem",y.messages[0]===p[0]),n("squeeze.keepsLastUser",y.messages[y.messages.length-1]===h),n("squeeze.hasSummary",y.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("squeeze.dropped",y.dropped>0&&y.savedChars>0),n("squeeze.noopWhenFits",gi(p,m+10).dropped===0),n("squeeze.tinyCapFails",gi(p,100).ok===!1);let g=[{role:"system",content:"S".repeat(500)},{role:"user",content:"\u8BFB\u8FD9\u4E9B\u6587\u4EF6\u5E76\u603B\u7ED3"}];for(let _=0;_<20;_++){let C="solo_"+_;g.push({role:"assistant",content:"",tool_calls:[{id:C,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"s"+_+".js"})}}]}),g.push({role:"tool",tool_call_id:C,content:"r".repeat(1e3)})}let v=gi(g,4e3,{keepRecent:2}),b=[];for(let _ of v.messages)for(let C of _.tool_calls||[])b.push(String(C.id));let S=v.messages.filter(function(_){return _.role==="tool"}).map(function(_){return String(_.tool_call_id)});if(n("squeeze.soloOk",v.ok&&v.chars<=4e3,JSON.stringify({ok:v.ok,chars:v.chars,min:v.minChars})),n("squeeze.soloPaired",b.length===S.length&&b.every(function(_){return S.indexOf(_)>=0})),n("squeeze.soloKeepsUser",v.messages.some(function(_){return _===g[1]})),n("squeeze.soloKeepsRecent",b.indexOf("solo_19")>=0&&b.indexOf("solo_0")<0),n("squeeze.soloSummary",v.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("fixedChars",ag("abc",i)===3+a),e.length){console.error("window.js \u81EA\u6D4B\u5931\u8D25 "+e.length+" \u9879\uFF08\u901A\u8FC7 "+t+"\uFF09\uFF1A");for(let _ of e)console.error(" - "+_);process.exit(1)}console.log("window.js \u81EA\u6D4B\u901A\u8FC7 "+t+" \u9879")}});var hg=ne((k2,pg)=>{var $s={summaryMax:240,digestItemMax:160,digestMax:1200,maxEntries:64,maxTotalChars:4e5,readMax:8e3,idPrefix:"sp_"},Hu="\u2026[\u5DF2\u622A\u65AD]";function wi(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function al(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Hu.length?n.slice(0,e):n.slice(0,e-Hu.length)+Hu:""}function dg(t,e){let n=wi(e,$s.summaryMax),s=String(t??"").replace(/\s+/g," ").trim();return al(s,n)}function fg(){return $s.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function _1(t,e,n,s){let r=t&&t.name||"\u5DE5\u5177",o=t&&t.label||"",i="[\u5DF2\u7701\u7565\uFF1A"+r+(o?" "+o:"")+"\uFF0C\u539F "+e+" \u5B57\u7B26",a=String(n??"").trim();a&&(i+="\uFF1B\u6458\u8981\uFF1A"+a);let l=String(s??"").trim();return l&&(i+="\uFF1B\u5B8C\u6574\u7ED3\u679C id="+l+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill"),i+"]"}function T1(t,e){let n=Array.isArray(t)?t:[];if(!n.length)return"";let s=wi(e,$s.digestMax),r=["[\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\uFF08\u5B8C\u6574\u5BF9\u8BDD\u5DF2\u88C1\u51FA\u4E0A\u4E0B\u6587\uFF1B\u9700\u8981\u7EC6\u8282\u65F6\u7ED3\u5408\u6458\u8981\u63D0\u95EE\u6216\u91CD\u8BFB\u6587\u4EF6\uFF09]"];for(let o of n){if(!o)continue;let i=o.role==="assistant"?"\u52A9\u624B":o.role==="user"?"\u7528\u6237":String(o.role||""),a=dg(o.summary||o.text||"",$s.digestItemMax);a&&r.push("- "+i+"\uFF1A"+a)}return r.length<=1?"":al(r.join(`
|
|
27
|
-
`),s)}function M1(t){let e=t||{},n=wi(e.maxEntries
|
|
26
|
+
`?0:1))}let r=/[.;]\s/.exec(n);r&&r.index>0&&r.index<s&&(s=r.index+1);let o=n.slice(0,s).trim(),a=o.replace(/[;,,、::]+$/,"")||o;return a.length>e?il(a,e):a}var v1={startLine:1,maxLines:1,contextLines:1,maxHits:1,maxFiles:1,maxResults:1,replace_all:1,merge:1,patterns:1,questions:1,options:1,pattern:1,patch:1,timeout_ms:1,need_content:1,wait_ms:1,tail_chars:1,maxDiags:1,todos:1,glob:0},rg=120;function og(t,e,n){if(!t||typeof t!="object")return t;let s=Object.assign({},t),r=t.properties;if(r&&typeof r=="object"){let o={};for(let i of Object.keys(r)){let a=r[i];if(!a||typeof a!="object"){o[i]=a;continue}let l=Object.assign({},a);n||v1[i]?l.description=Wu(a.description,e):delete l.description,o[i]=l}s.properties=o}return s}function mi(t,e){let n=Array.isArray(t)?t:[],s=sg[e];if(!s)return n;let r=x1[e]||[];return n.filter(function(o){return!(o&&o.function&&r.indexOf(o.function.name)>=0)}).map(function(o){if(!o||!o.function)return o;let i=o.function,a=String(i.name||"").indexOf("pl__")===0;return Object.assign({},o,{function:Object.assign({},i,{description:Wu(i.description,s.desc),parameters:og(i.parameters,a?Math.max(s.param,rg):s.param,a)})})})}function ig(t,e){let n=isFinite(t)&&t>0?Math.floor(t):yi.window,s=n>=ho?"full":n>=Bu?"mid":n>=Uu?"small":"tiny";return e==="off"?{window:n,tier:"full"}:(e==="on"&&(s==="full"||s==="mid")&&(s="small"),{window:n,tier:s})}function $s(t,e){let s=ig(t,(e||{}).mode),r=s.window,o=s.tier;if(o==="full"||o==="mid"){let c=r>=ho?8e4:Math.max(2e3,Math.floor(r*.3)),u=r>=ho?4e4:Math.max(1500,Math.floor(c/2)),d=r>=ho?4e4:Math.max(2e3,Math.floor(r*.2));return{window:r,tier:o,compact:!1,dropAsyncCmd:!1,descCap:0,readMax:d,runMaxChars:8e3,searchFiles:20,searchCtxLines:1,grepHits:200,globFiles:200,listEntries:0,autoCtxChars:8e3,autoCtxLines:200,memoryTurns:8,memoryChars:12e3,keepTailSteps:[8,4,2,0],fpTotalLimit:4,summaryMaxTokens:2048,spillReadMax:8e3,refTotal:c,refPerFile:u}}let a=o==="tiny",l=a?Math.max(1200,Math.floor(r*.2)):Math.max(2e3,Math.floor(r*.25));return{window:r,tier:o,compact:!0,dropAsyncCmd:!0,descCap:sg[o].desc,readMax:a?Math.max(1e3,Math.floor(r*.12)):Math.max(1500,Math.floor(r*.15)),runMaxChars:a?Math.min(4e3,Math.max(2e3,Math.floor(r*.4))):Math.min(8e3,Math.max(3e3,Math.floor(r*.5))),searchFiles:a?6:12,searchCtxLines:a?0:1,grepHits:a?30:60,globFiles:a?40:80,listEntries:a?60:120,autoCtxChars:a?Math.max(1200,Math.floor(r*.22)):Math.floor(r*.28),autoCtxLines:a?40:80,memoryTurns:a?3:4,memoryChars:Math.max(1e3,Math.floor(r*.25)),keepTailSteps:a?[2,0]:[4,2,0],fpTotalLimit:6,summaryMaxTokens:a?768:1024,spillReadMax:Math.min(8e3,Math.max(2e3,Math.floor(r*.5))),refTotal:l,refPerFile:Math.max(800,Math.floor(l/2))}}function ag(t,e){return String(t??"").length+ln.charsOfTools(e)}function S1(t){let e=t&&t.function||{},n={};try{n=JSON.parse(e.arguments||"{}")}catch{n={}}let s=ln.labelOf(n);return String(e.name||"\u5DE5\u5177")+(s?" "+s:"")}function lg(t,e){let n=[],s=0;for(let i of t)for(let a of i){if(!a||a.role!=="assistant")continue;let l=Array.isArray(a.tool_calls)?a.tool_calls:[];for(let c of l)s++,n.push(S1(c));if(!l.length&&a.content){let c=String(a.content).replace(/\s+/g," ").trim();c&&n.push("\u8BF4\u660E\uFF1A"+il(c,40))}}if(!n.length)return"";let r=[];for(let i of n)r.indexOf(i)<0&&r.push(i);let o="[\u5DF2\u538B\u7F29\u66F4\u65E9 "+s+" \u6B65\u5DE5\u5177\u8C03\u7528\uFF0C\u6B63\u6587\u5DF2\u88C1\u51FA\u4E0A\u4E0B\u6587\uFF1B\u9700\u8981\u65F6\u91CD\u65B0\u8BFB\u53D6\u6587\u4EF6\u6216\u91CD\u8DD1\u547D\u4EE4]";return il(o+" \u5DF2\u6267\u884C\uFF1A"+r.slice(0,6).join("\u3001"),e)}function cg(t){let e=[],n=null;for(let s of t||[]){if(!s||typeof s!="object"){n=null;continue}if(s.role==="assistant"){n=[s],e.push(n);continue}if(s.role==="tool"&&n){n.push(s);continue}n=[s],e.push(n)}return e}function gi(t,e,n){let s=n||{},r=Array.isArray(t)?t:[],o=Number(e),i=ln.charsOf(r),a={ok:!0,messages:r.slice(),dropped:0,savedChars:0,summary:"",chars:i,beforeChars:i,minChars:0};if(!isFinite(o)||o<=0||i<=o)return a;let l=function(P){return{ok:!1,messages:r.slice(),dropped:0,savedChars:0,summary:"",chars:i,beforeChars:i,minChars:P}},c=0;for(;c<r.length&&r[c]&&r[c].role==="system";)c++;let u=r.slice(0,c),d=cg(r.slice(c));if(!d.length)return l(ln.charsOf(u));let f=-1;for(let P=r.length-1;P>=c;P--)if(r[P]&&r[P].role==="user"){f=P;break}let p=-1;if(f>=0){let P=c;for(let K=0;K<d.length;K++){let ae=P+d[K].length;if(f>=P&&f<ae){p=K;break}P=ae}}let h=qu(s.summaryReserve,yi.summaryReserve),m=qu(s.keepRecent,yi.keepRecent),y=ln.charsOf(u),w=p>=0?ln.charsOf(d[p]):0,T=y+w,g=function(P){let K=d.length,ae=0;for(let G=d.length-1;G>=0;G--){if(d[G].some(function(Se){return Se&&Se.role==="assistant"&&Array.isArray(Se.tool_calls)&&Se.tool_calls.length>0})){if(ae>=P)break;ae++}K=G}for(;K>0&&K<d.length&&d[K][0]&&d[K][0].role==="tool";)K--;let te={};for(let G=K;G<d.length;G++)te[G]=!0;p>=0&&(te[p]=!0);let Q=[];for(let G=0;G<d.length;G++)te[G]||Q.push({index:G,chars:ln.charsOf(d[G])});let he=y+w;for(let G=K;G<d.length;G++)G!==p&&(he+=ln.charsOf(d[G]));return{keepFrom:K,droppable:Q,fixed:he}},v=null;for(let P=m;P>=0;P--){let K=g(P);if(K.fixed+(K.droppable.length?h:0)<=o){v=K;break}}if(!v)return l(T);let b=v.droppable,S=v.fixed;if(!b.length)return l(S);let _=0;for(let P of b)_+=P.chars;let C=0;for(;C<b.length&&S+_+h>o;)_-=b[C].chars,C++;if(S+_+h>o)return l(S+_);let A={};for(let P=0;P<C;P++)A[b[P].index]=!0;let F=[],B=[];for(let P=0;P<d.length;P++)A[P]?F.push(d[P]):B.push(d[P]);let H=lg(F,qu(s.summaryMax,yi.summaryMax)),$=u.slice();H&&$.push({role:"assistant",content:H});for(let P of B)for(let K of P)$.push(K);let J=ln.charsOf($);return{ok:J<=o,messages:$,dropped:C,savedChars:i-J,summary:H,chars:J,beforeChars:i,minChars:S}}Ku.exports={DEFAULTS:yi,TIERS:{full:ho,mid:Bu,small:Uu},profile:$s,tierOf:ig,compactTools:mi,fixedChars:ag,squeeze:gi,_firstSentence:Wu,_compactParams:og,_groupForSqueeze:cg,_summaryOf:lg,_clip:il};if(require.main===Ku){let t=0,e=[],n=function(_,C,A){if(C){t++;return}e.push(_+(A?" \u2192 "+A:""))};n("tier.4096",$s(4096).tier==="tiny"),n("tier.8192",$s(8192).tier==="small"),n("tier.16384",$s(16384).tier==="mid"),n("tier.32768",$s(32768).tier==="full"),n("tier.on",$s(65536,{mode:"on"}).tier==="small"),n("tier.off",$s(4096,{mode:"off"}).tier==="full");let s=[4096,8192,12288,16384,32768,65536],r=s.map(function(_){return $s(_)}),o=!0;for(let _=1;_<r.length;_++)for(let C of["readMax","runMaxChars","searchFiles","grepHits","globFiles","autoCtxChars","memoryChars"])r[_][C]<r[_-1][C]&&(o=!1,e.push("mono."+C+"@"+s[_]));n("profile.monotonic",o);let i=[];for(let _=0;_<4;_++)i.push({type:"function",function:{name:"tool"+_,description:"\u7B2C\u4E00\u53E5\u8BF4\u660E\u3002".repeat(1)+"\u540E\u9762\u8FD8\u6709\u5F88\u957F\u7684\u8865\u5145\u8BF4\u660E\uFF0C".repeat(10),parameters:{type:"object",properties:{path:{type:"string",description:"\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u7684\u8DEF\u5F84\uFF0C\u4E5F\u53EF\u4EE5\u662F\u7EDD\u5BF9\u8DEF\u5F84"},startLine:{type:"number",description:"\u8D77\u59CB\u884C\u53F7\uFF08\u4ECE 1 \u5F00\u59CB\uFF09\uFF0C\u9ED8\u8BA4 1"}},required:["path"]}}});let a=ln.charsOfTools(i),l=ln.charsOfTools(mi(i,"small")),c=ln.charsOfTools(mi(i,"tiny"));n("compact.smallShrinks",l<a*.8,l+" / "+a),n("compact.tinyShrinks",c<=l);let u=mi(i,"small")[0].function;n("compact.firstSentence",u.description.length<=96&&u.description.indexOf("\u540E\u9762\u8FD8\u6709")<0,u.description),n("compact.keepsPath",u.parameters.properties.path.type==="string"),n("compact.dropsEasyParamDesc",!u.parameters.properties.path.description),n("compact.keepsHardParamDesc",!!u.parameters.properties.startLine.description),n("compact.originalUntouched",i[0].function.parameters.properties.path.description.length>0);let d={type:"function",function:{name:"pl__demo__say",description:"\u56DE\u663E\u4E00\u6BB5\u6587\u672C\uFF0C\u7528\u4E8E\u9A8C\u8BC1\u63D2\u4EF6\u901A\u8DEF".repeat(3),parameters:{type:"object",properties:{text:{type:"string",description:"\u8981\u56DE\u663E\u7684\u6587\u672C\u5185\u5BB9\uFF0C\u63D2\u4EF6\u539F\u6837\u8FD4\u56DE"},loud:{type:"boolean",description:"\u662F\u5426\u8F6C\u6210\u5927\u5199\u540E\u8FD4\u56DE"}},required:["text"]}}},f=mi([d],"small")[0].function;n("compact.pluginKeepsParamDesc",!!f.parameters.properties.text.description&&!!f.parameters.properties.loud.description,JSON.stringify(f.parameters.properties)),n("compact.pluginParamDescCapped",f.parameters.properties.text.description.length<=rg),n("compact.pluginKeepsRequired",f.parameters.required.length===1&&f.parameters.required[0]==="text"),n("compact.pluginToolDescStillCut",f.description.length<=96);let p=[{role:"system",content:"S".repeat(500)},{role:"user",content:"\u539F\u59CB\u95EE\u9898"}];for(let _=0;_<20;_++){let C="call_"+_;p.push({role:"assistant",content:"",tool_calls:[{id:C,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+_+".js"})}}]}),p.push({role:"tool",tool_call_id:C,content:"r".repeat(1e3)})}let h={role:"user",content:"\u6700\u540E\u7684\u95EE\u9898"};p.push(h);let m=ln.charsOf(p),y=gi(p,4e3),w=[];for(let _ of y.messages)for(let C of _.tool_calls||[])w.push(String(C.id));let T=y.messages.filter(function(_){return _.role==="tool"}).map(function(_){return String(_.tool_call_id)});n("squeeze.ok",y.ok,JSON.stringify({chars:y.chars,min:y.minChars})),n("squeeze.withinCap",y.chars<=4e3,String(y.chars)),n("squeeze.paired",w.length===T.length&&w.every(function(_){return T.indexOf(_)>=0})),n("squeeze.keepsSystem",y.messages[0]===p[0]),n("squeeze.keepsLastUser",y.messages[y.messages.length-1]===h),n("squeeze.hasSummary",y.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("squeeze.dropped",y.dropped>0&&y.savedChars>0),n("squeeze.noopWhenFits",gi(p,m+10).dropped===0),n("squeeze.tinyCapFails",gi(p,100).ok===!1);let g=[{role:"system",content:"S".repeat(500)},{role:"user",content:"\u8BFB\u8FD9\u4E9B\u6587\u4EF6\u5E76\u603B\u7ED3"}];for(let _=0;_<20;_++){let C="solo_"+_;g.push({role:"assistant",content:"",tool_calls:[{id:C,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"s"+_+".js"})}}]}),g.push({role:"tool",tool_call_id:C,content:"r".repeat(1e3)})}let v=gi(g,4e3,{keepRecent:2}),b=[];for(let _ of v.messages)for(let C of _.tool_calls||[])b.push(String(C.id));let S=v.messages.filter(function(_){return _.role==="tool"}).map(function(_){return String(_.tool_call_id)});if(n("squeeze.soloOk",v.ok&&v.chars<=4e3,JSON.stringify({ok:v.ok,chars:v.chars,min:v.minChars})),n("squeeze.soloPaired",b.length===S.length&&b.every(function(_){return S.indexOf(_)>=0})),n("squeeze.soloKeepsUser",v.messages.some(function(_){return _===g[1]})),n("squeeze.soloKeepsRecent",b.indexOf("solo_19")>=0&&b.indexOf("solo_0")<0),n("squeeze.soloSummary",v.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("fixedChars",ag("abc",i)===3+a),e.length){console.error("window.js \u81EA\u6D4B\u5931\u8D25 "+e.length+" \u9879\uFF08\u901A\u8FC7 "+t+"\uFF09\uFF1A");for(let _ of e)console.error(" - "+_);process.exit(1)}console.log("window.js \u81EA\u6D4B\u901A\u8FC7 "+t+" \u9879")}});var hg=ne((k2,pg)=>{var qs={summaryMax:240,digestItemMax:160,digestMax:1200,maxEntries:64,maxTotalChars:4e5,readMax:8e3,idPrefix:"sp_"},Hu="\u2026[\u5DF2\u622A\u65AD]";function wi(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function al(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Hu.length?n.slice(0,e):n.slice(0,e-Hu.length)+Hu:""}function dg(t,e){let n=wi(e,qs.summaryMax),s=String(t??"").replace(/\s+/g," ").trim();return al(s,n)}function fg(){return qs.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function _1(t,e,n,s){let r=t&&t.name||"\u5DE5\u5177",o=t&&t.label||"",i="[\u5DF2\u7701\u7565\uFF1A"+r+(o?" "+o:"")+"\uFF0C\u539F "+e+" \u5B57\u7B26",a=String(n??"").trim();a&&(i+="\uFF1B\u6458\u8981\uFF1A"+a);let l=String(s??"").trim();return l&&(i+="\uFF1B\u5B8C\u6574\u7ED3\u679C id="+l+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill"),i+"]"}function T1(t,e){let n=Array.isArray(t)?t:[];if(!n.length)return"";let s=wi(e,qs.digestMax),r=["[\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\uFF08\u5B8C\u6574\u5BF9\u8BDD\u5DF2\u88C1\u51FA\u4E0A\u4E0B\u6587\uFF1B\u9700\u8981\u7EC6\u8282\u65F6\u7ED3\u5408\u6458\u8981\u63D0\u95EE\u6216\u91CD\u8BFB\u6587\u4EF6\uFF09]"];for(let o of n){if(!o)continue;let i=o.role==="assistant"?"\u52A9\u624B":o.role==="user"?"\u7528\u6237":String(o.role||""),a=dg(o.summary||o.text||"",qs.digestItemMax);a&&r.push("- "+i+"\uFF1A"+a)}return r.length<=1?"":al(r.join(`
|
|
27
|
+
`),s)}function M1(t){let e=t||{},n=wi(e.maxEntries,qs.maxEntries),s=wi(e.maxTotalChars,qs.maxTotalChars),r=new Map,o=0;function i(){let p=r.keys().next();if(p.done)return;let h=p.value,m=r.get(h);r.delete(h),m&&(o=Math.max(0,o-(m.chars||0)))}function a(p,h,m){let y=String(p??"").trim()||fg(),w=String(h??""),T=w.length;if(r.has(y)){let v=r.get(y);o=Math.max(0,o-(v&&v.chars||0)),r.delete(y)}for(;r.size>=n||o+T>s&&r.size>0;)i();for(;T>s&&r.size>0;)i();let g={id:y,content:w,chars:T,at:Date.now(),meta:m&&typeof m=="object"?m:{}};return r.set(y,g),o+=T,g}function l(p){let h=String(p??"").trim();return!h||!r.has(h)?null:r.get(h)}function c(p,h){let m=l(p);if(!m)return{ok:!1,error:"\u627E\u4E0D\u5230 spill id="+String(p||"")+"\uFF08\u53EF\u80FD\u5DF2\u6DD8\u6C70\u6216\u4ECE\u672A\u5199\u5165\uFF09"};let y=wi(h,qs.readMax),w=al(m.content,y),T=m.content.length>w.length;return{ok:!0,id:m.id,chars:m.chars,truncated:T,meta:m.meta,content:w}}function u(){r.clear(),o=0}function d(){return r.size}function f(){return{entries:r.size,totalChars:o,maxEntries:n,maxTotalChars:s}}return{put:a,get:l,read:c,clear:u,size:d,stats:f,_map:r}}pg.exports={DEFAULTS:qs,summarize:dg,newId:fg,toolPlaceholder:_1,memoryDigestBlock:T1,createStore:M1,clipText:al}});var wg=ne((x2,yg)=>{var{spawn:Gu,execFile:C1}=require("child_process"),bt={maxRunning:2,timeoutMsDefault:3e5,timeoutMsMax:6e5,timeoutMsMin:1e3,waitMsMax:15e3,tailCharsDefault:4e3,tailCharsMax:8e3,ringMaxBytes:256*1024,keepDoneMs:10*60*1e3,keepDoneMax:16,idPrefix:"job_"};function A1(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function zu(t,e,n){let s=Number(t);return isFinite(s)?Math.min(n,Math.max(e,Math.floor(s))):e}function gg(){return bt.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function Bs(t){return String(t??"").trim()||"_anon"}function ll(t,e){let n=Buffer.isBuffer(e)?e:Buffer.from(String(e??""),"utf8");if(n.length){for(t.chunks.push(n),t.ringBytes+=n.length;t.ringBytes>bt.ringMaxBytes&&t.chunks.length>1;){let s=t.chunks.shift();t.ringBytes-=s.length}if(t.ringBytes>bt.ringMaxBytes&&t.chunks.length===1){let s=t.chunks[0];t.chunks[0]=s.slice(s.length-bt.ringMaxBytes),t.ringBytes=t.chunks[0].length}}}function O1(t,e){let n=zu(e,1,bt.tailCharsMax),s=Buffer.concat(t.chunks||[]).toString("utf8");if(s.length<=n)return s||"(\u65E0\u8F93\u51FA)";let r=s.slice(s.length-n),o=r.charCodeAt(0);return o>=56320&&o<=57343&&(r=r.slice(1)),r}function mg(t,e){if(!t||t.killed)return;let n=t.pid;if(!n){try{t.kill("SIGTERM")}catch{}return}if(process.platform==="win32"){try{C1("taskkill",["/PID",String(n),"/T","/F"],{windowsHide:!0},function(){})}catch{try{t.kill()}catch{}}return}try{process.kill(-n,"SIGTERM")}catch{try{t.kill("SIGTERM")}catch{}}setTimeout(function(){try{process.kill(-n,"SIGKILL")}catch{try{t.killed||t.kill("SIGKILL")}catch{}}},1500)}function E1(t){let e=t||{},n=A1(e.maxRunning,bt.maxRunning)||bt.maxRunning,s=e.shell||(process.platform==="win32"?process.env.ComSpec||"cmd.exe":"/bin/bash"),r=typeof e.isDangerous=="function"?e.isDangerous:function(){return!1},o=new Map;function i(b){let S=Bs(b),_=o.get(S);return _||(_=new Map,o.set(S,_)),_}function a(b){let S=o.get(Bs(b));if(!S)return 0;let _=0;return S.forEach(function(C){C&&C.status==="running"&&_++}),_}function l(b,S){let _=String(S??"").trim();if(!_)return null;let C=o.get(Bs(b));return C&&C.get(_)||null}function c(b){let S=i(b),_=Date.now(),C=[];if(S.forEach(function(A,F){!A||A.status==="running"||(_-(A.endedAt||A.startedAt||0)>bt.keepDoneMs?S.delete(F):C.push(A))}),C.length>bt.keepDoneMax){C.sort(function(A,F){return(A.endedAt||0)-(F.endedAt||0)});for(let A=0;A<C.length-bt.keepDoneMax;A++)S.delete(C[A].id)}S.size===0&&o.delete(Bs(b))}function u(b,S,_){if(!b||b.status!=="running")return;b.status=S,b.code=typeof _=="number"?_:S==="exited"?0:-1,b.endedAt=Date.now(),b.timer&&(clearTimeout(b.timer),b.timer=null);let C=b.waiters||[];b.waiters=[];for(let A=0;A<C.length;A++)try{C[A]()}catch{}c(b.sessionId)}function d(b,S){if(!b)return{status:"missing",out_tail:"",elapsed_ms:0};let _=Date.now(),C=Math.max(0,_-(b.startedAt||_)),A=b.status==="running"&&b.deadline?Math.max(0,b.deadline-_):void 0,F={status:b.status,job_id:b.id,code:b.status==="running"?void 0:b.code,out_tail:O1(b,S??bt.tailCharsDefault),elapsed_ms:C,command:b.command};return A!=null&&(F.remaining_ms=A),F}function f(b,S,_){let C=String(S??""),A=_||{};if(!C.trim())return{ok:!1,error:"command \u4E3A\u7A7A"};if(r(C))return{ok:!1,error:"\u62D2\u7EDD\u6267\u884C\uFF1A\u547D\u4E2D\u5371\u9669\u547D\u4EE4\u9ED1\u540D\u5355 \u2192 "+C};if(a(b)>=n)return{ok:!1,error:"\u672C\u4F1A\u8BDD\u5DF2\u6709 "+n+" \u4E2A\u5F02\u6B65\u547D\u4EE4\u5728\u8DD1\uFF0C\u8BF7\u5148 run_command_poll / run_command_stop \u5176\u4E2D\u4E00\u4E2A\uFF0C\u518D start\uFF08\u4E0A\u9650 "+n+"\uFF09"};let F=zu(A.timeout_ms==null?bt.timeoutMsDefault:A.timeout_ms,bt.timeoutMsMin,bt.timeoutMsMax),B=String(A.cwd||A.root||process.cwd()),H=gg(),$=Date.now(),J=$+F,P={id:H,sessionId:Bs(b),command:C,status:"running",code:void 0,startedAt:$,endedAt:0,deadline:J,chunks:[],ringBytes:0,waiters:[],proc:null,timer:null,pid:0},K;try{let te=/bash(\.exe)?$/i.test(String(s));process.platform==="win32"&&!te?K=Gu(s,["/d","/s","/c",C],{cwd:B,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):process.platform==="win32"&&te?K=Gu(s,["-lc",C],{cwd:B,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):K=Gu(s,["-lc",C],{cwd:B,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),detached:!0,stdio:["ignore","pipe","pipe"]})}catch(te){return{ok:!1,error:"spawn \u5931\u8D25\uFF1A"+(te&&te.message?te.message:String(te))}}P.proc=K,P.pid=K.pid||0,i(b).set(H,P);let ae=function(te){ll(P,te)};return K.stdout&&K.stdout.on("data",ae),K.stderr&&K.stderr.on("data",function(te){ll(P,`
|
|
28
28
|
[stderr]
|
|
29
|
-
`),ll(P,te)}),K.on("error",function(te){ll(P,String(te&&te.message?te.message:te)),u(P,"exited",1)}),K.on("close",function(te,Q){if(P.status!=="running")return;u(P,"exited",typeof te=="number"?te:Q?1:0)}),P.timer=setTimeout(function(){P.status==="running"&&(mg(P.proc,s),u(P,"timeout",-1))},F),P.timer&&typeof P.timer.unref=="function"&&P.timer.unref(),{ok:!0,job_id:H,pid:P.pid||void 0,started_at:$,timeout_ms:F}}function p(b,S,_){let C=_||{},A=l(b,S);if(!A)return Promise.resolve({ok:!0,status:"missing",job_id:String(S||""),out_tail:"",elapsed_ms:0});let F=zu(C.wait_ms==null?0:C.wait_ms,0,bt.waitMsMax),B=C.tail_chars==null?bt.tailCharsDefault:C.tail_chars;return A.status!=="running"||F<=0?Promise.resolve(Object.assign({ok:!0},d(A,B))):new Promise(function(H){let $=!1,J=function(){if($)return;$=!0,clearTimeout(P);let K=A.waiters.indexOf(J);K>=0&&A.waiters.splice(K,1),H(Object.assign({ok:!0},d(A,B)))};A.waiters.push(J);let P=setTimeout(J,F);typeof P.unref=="function"&&P.unref()})}function h(b,S){let _=l(b,S);return _?_.status!=="running"?{ok:!0,status:"already_done",job_id:_.id,final_status:_.status,code:_.code}:(mg(_.proc,s),u(_,"stopped",-1),{ok:!0,status:"stopped",job_id:_.id}):{ok:!1,status:"missing",job_id:String(S||"")}}function m(b){let S=o.get(
|
|
29
|
+
`),ll(P,te)}),K.on("error",function(te){ll(P,String(te&&te.message?te.message:te)),u(P,"exited",1)}),K.on("close",function(te,Q){if(P.status!=="running")return;u(P,"exited",typeof te=="number"?te:Q?1:0)}),P.timer=setTimeout(function(){P.status==="running"&&(mg(P.proc,s),u(P,"timeout",-1))},F),P.timer&&typeof P.timer.unref=="function"&&P.timer.unref(),{ok:!0,job_id:H,pid:P.pid||void 0,started_at:$,timeout_ms:F}}function p(b,S,_){let C=_||{},A=l(b,S);if(!A)return Promise.resolve({ok:!0,status:"missing",job_id:String(S||""),out_tail:"",elapsed_ms:0});let F=zu(C.wait_ms==null?0:C.wait_ms,0,bt.waitMsMax),B=C.tail_chars==null?bt.tailCharsDefault:C.tail_chars;return A.status!=="running"||F<=0?Promise.resolve(Object.assign({ok:!0},d(A,B))):new Promise(function(H){let $=!1,J=function(){if($)return;$=!0,clearTimeout(P);let K=A.waiters.indexOf(J);K>=0&&A.waiters.splice(K,1),H(Object.assign({ok:!0},d(A,B)))};A.waiters.push(J);let P=setTimeout(J,F);typeof P.unref=="function"&&P.unref()})}function h(b,S){let _=l(b,S);return _?_.status!=="running"?{ok:!0,status:"already_done",job_id:_.id,final_status:_.status,code:_.code}:(mg(_.proc,s),u(_,"stopped",-1),{ok:!0,status:"stopped",job_id:_.id}):{ok:!1,status:"missing",job_id:String(S||"")}}function m(b){let S=o.get(Bs(b));if(!S)return{stopped:0};let _=0,C=[];S.forEach(function(A,F){A&&A.status==="running"&&C.push(F)});for(let A=0;A<C.length;A++){let F=h(b,C[A]);F&&F.status==="stopped"&&_++}return{stopped:_}}function y(){let b=0,S=[];o.forEach(function(_,C){S.push(C)});for(let _=0;_<S.length;_++)b+=m(S[_]).stopped;return{stopped:b}}function w(b){let S=m(b);return o.delete(Bs(b)),S}function T(b){return!b||!b.ok?"ERROR: "+(b&&b.error||"start \u5931\u8D25"):`ok=true
|
|
30
30
|
job_id=`+b.job_id+(b.pid?`
|
|
31
31
|
pid=`+b.pid:"")+`
|
|
32
32
|
started_at=`+b.started_at+`
|
|
@@ -39,14 +39,14 @@ job_id=`+(b.job_id||""):`ok=true
|
|
|
39
39
|
status=`+b.status+`
|
|
40
40
|
job_id=`+(b.job_id||"")+(b.final_status?`
|
|
41
41
|
final_status=`+b.final_status:"")+(b.code!=null?`
|
|
42
|
-
code=`+b.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:bt,maxRunning:n,start:f,poll:p,stop:h,stopAll:m,stopEverything:y,clearSession:w,runningCount:a,getJob:l,formatStartResult:T,formatPollResult:g,formatStopResult:v,_bySession:o,_snapshot:d}}yg.exports={DEFAULTS:bt,createRegistry:E1,newId:gg,sessKey:
|
|
43
|
-
`,
|
|
42
|
+
code=`+b.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:bt,maxRunning:n,start:f,poll:p,stop:h,stopAll:m,stopEverything:y,clearSession:w,runningCount:a,getJob:l,formatStartResult:T,formatPollResult:g,formatStopResult:v,_bySession:o,_snapshot:d}}yg.exports={DEFAULTS:bt,createRegistry:E1,newId:gg,sessKey:Bs}});var Ng=ne((v2,Ig)=>{var ss=require("fs"),Zu=require("os"),_t=require("path"),P1=require("crypto"),{spawn:j1}=require("child_process"),bg="2025-06-18",Vu=2e4,I1=6e4,N1=18e4,kg=8e3,F1=500,cl=64,L1=4096,D1=8*1024*1024,R1=20,X={root:"",version:"0",rec:function(){},servers:new Map,exposed:new Map,configPaths:[],configErrors:[],loaded:!1,starting:null};function $1(t){let e=t||{};e.root&&(X.root=String(e.root)),typeof e.rec=="function"&&(X.rec=e.rec),e.version&&(X.version=String(e.version))}function jt(t,e){try{X.rec(t,e)}catch{}}function Ju(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function q1(t){return P1.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function xg(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function vg(t,e){let n="mcp__"+Ju(t)+"__"+Ju(e);if(n.length>cl){let s="_"+q1(t+"/"+e);n=n.slice(0,cl-s.length)+s}return n}function Xu(){X.exposed.clear();for(let t of X.servers.values())if(t.state==="ready")for(let e of t.tools){let n=vg(t.name,e.name);if(X.exposed.has(n)){let s=2;for(;X.exposed.has(n+"_"+s);)s++;let r="_"+s;n=n.length+r.length>cl?n.slice(0,cl-r.length)+r:n+r}X.exposed.set(n,{server:t.name,tool:e.name,def:e})}}function Sg(){let t=process.env.LUBAN_MCP_CONFIG;if(t)return String(t).split(_t.delimiter).map(function(n){return n.trim()}).filter(Boolean);let e=[_t.join(Zu.homedir(),".luban","mcp.json")];return X.root&&e.push(_t.join(X.root,".luban","mcp.json")),e}function _g(){X.servers=new Map,X.exposed.clear(),X.configErrors=[];let t=Sg();X.configPaths=t;let e=new Map;for(let n of t){let s;try{s=JSON.parse(ss.readFileSync(n,"utf8"))}catch(o){if(o.code==="ENOENT")continue;X.configErrors.push(n+"\uFF1A"+o.message),jt("mcp_config_bad",{path:n,message:o.message});continue}let r=s&&(s.mcpServers||s.servers);if(!r||typeof r!="object"){X.configErrors.push(n+"\uFF1A\u7F3A\u5C11 mcpServers"),jt("mcp_config_bad",{path:n,message:"\u7F3A\u5C11 mcpServers"});continue}for(let o of Object.keys(r)){let i=r[o]||{};if(i.disabled===!0){e.delete(o);continue}e.set(o,{conf:i,source:n})}}for(let n of e){let s=n[0],r=n[1].conf;if(!r.command||typeof r.command!="string"){X.configErrors.push(s+"\uFF1A\u7F3A\u5C11 command"),jt("mcp_config_bad",{server:s,message:"\u7F3A\u5C11 command"});continue}if(r.args!==void 0&&!Array.isArray(r.args)){X.configErrors.push(s+"\uFF1Aargs \u5FC5\u987B\u662F\u6570\u7EC4"),jt("mcp_config_bad",{server:s,message:"args \u5FC5\u987B\u662F\u6570\u7EC4"});continue}if(r.planAllow!==void 0){let o=r.planAllow;(!Array.isArray(o)||o.some(function(i){return typeof i!="string"}))&&(X.configErrors.push(s+"\uFF1AplanAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"),jt("mcp_config_bad",{server:s,message:"planAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"}),r.planAllow=[])}X.servers.set(s,new Yu(s,r,n[1].source))}X.loaded=!0,jt("mcp_config_loaded",{paths:t,servers:Array.from(X.servers.keys()),errors:X.configErrors})}function Tg(){let t=process.env.LUBAN_MCP_CONFIG;return t?String(t).split(_t.delimiter).map(function(e){return e.trim()}).filter(Boolean):null}function B1(t){let e=Tg();if(e){let s=e.findIndex(function(r){return _t.resolve(r)===_t.resolve(t)});if(s===0)return"global";if(s>0)return"project"}let n=_t.join(Zu.homedir(),".luban","mcp.json");return _t.resolve(t)===_t.resolve(n)?"global":X.root&&_t.resolve(t)===_t.resolve(_t.join(X.root,".luban","mcp.json"))?"project":"custom"}function Mg(t){if(t!=="global"&&t!=="project")throw new Error("\u5199\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F global \u6216 project");let e=Tg();if(e&&e.length){if(t==="global"&&e[0])return e[0];if(t==="project"&&e[1])return e[1]}if(t==="global")return _t.join(Zu.homedir(),".luban","mcp.json");if(!X.root)throw new Error("\u5F53\u524D\u6CA1\u6709\u5DE5\u4F5C\u533A\uFF0C\u9879\u76EE\u7EA7 mcp.json \u65E0\u5904\u5B89\u653E");return _t.join(X.root,".luban","mcp.json")}function Cg(t){return t&&t.mcpServers&&typeof t.mcpServers=="object"&&!Array.isArray(t.mcpServers)?"mcpServers":t&&t.servers&&typeof t.servers=="object"&&!Array.isArray(t.servers)?"servers":"mcpServers"}function U1(){let t=Sg(),e=[],n=[],s=new Map,r=new Map;for(let i of t){let a={path:i,scope:B1(i),exists:!1,error:"",servers:[]},l=null;try{let c=ss.readFileSync(i,"utf8");a.exists=!0,l=JSON.parse(c)}catch(c){c.code!=="ENOENT"&&(a.error=c.message)}if(l&&typeof l=="object"){let c=l[Cg(l)];if(c&&typeof c=="object"&&!Array.isArray(c))for(let u of Object.keys(c)){let d=c[u]&&typeof c[u]=="object"&&!Array.isArray(c[u])?c[u]:{},f=d.disabled===!0;a.servers.push({name:u,disabled:f,command:d.command?String(d.command):""}),n.indexOf(u)<0&&n.push(u),f?(s.delete(u),r.set(u,i)):(s.set(u,{conf:d,source:i}),r.delete(u))}else a.exists&&(a.error="\u7F3A\u5C11 mcpServers")}e.push(a)}let o=[];for(let i of n){let a=s.get(i)||null,l=X.servers.get(i)||null,c=[],u=[];for(let d of e)for(let f of d.servers)f.name===i&&(f.disabled?u:c).push(d.path);o.push({name:i,enabled:!!a,state:l?l.state:a?"idle":"disabled",tools:l?l.tools.length:0,error:l?l.error:"",stderrTail:l?l.stderr.slice(-600):"",defs:c,disabledIn:u,disabledBy:r.get(i)||"",source:a?a.source:r.get(i)||"",command:a?String(a.conf.command||""):"",args:a&&Array.isArray(a.conf.args)?a.conf.args.map(String):[],timeoutMs:a&&Number(a.conf.timeoutMs)?Number(a.conf.timeoutMs):0,planAllow:a&&Array.isArray(a.conf.planAllow)?a.conf.planAllow.map(String):[]})}return{paths:e,servers:o}}function W1(t){let e=t||{},n=String(e.name||"").trim();if(!n)throw new Error("\u7F3A\u5C11 server \u540D\u5B57");if(typeof e.disabled!="boolean")throw new Error("disabled \u5FC5\u987B\u662F\u5E03\u5C14\u503C");let s=Mg(e.target),r=ss.existsSync(s)?ss.readFileSync(s,"utf8"):"",o;try{o=r.trim()?JSON.parse(r):{}}catch(f){throw new Error(s+" \u4E0D\u662F\u5408\u6CD5 JSON\uFF0C\u5148\u4FEE\u597D\u5B83\uFF1A"+f.message)}if(!o||typeof o!="object"||Array.isArray(o))throw new Error(s+" \u9876\u5C42\u5FC5\u987B\u662F\u5BF9\u8C61");let i=Cg(o);(!o[i]||typeof o[i]!="object"||Array.isArray(o[i]))&&(o[i]={});let a=o[i],l=a[n],c=!!l&&typeof l=="object"&&!Array.isArray(l),u=!1;e.disabled?c?l.disabled!==!0&&(l.disabled=!0,u=!0):(a[n]={disabled:!0},u=!0):c&&(Object.prototype.hasOwnProperty.call(l,"disabled")&&(delete l.disabled,u=!0),Object.keys(l).length||(delete a[n],u=!0));let d=!1;if(u){let f=Object.keys(o);if(f.length===1&&f[0]===i&&Object.keys(a).length===0)try{ss.existsSync(s)&&ss.unlinkSync(s),d=!ss.existsSync(s)}catch(h){jt("mcp_config_unlink_fail",{path:s,message:h.message})}if(!d){ss.mkdirSync(_t.dirname(s),{recursive:!0,mode:448});let h=JSON.stringify(o,null,2)+`
|
|
43
|
+
`,m=s+".tmp-"+process.pid+"-"+Date.now();ss.writeFileSync(m,h,"utf8"),ss.renameSync(m,s)}}return jt("mcp_config_write",{name:n,disabled:e.disabled,target:e.target,path:s,changed:u,removed:d}),{name:n,path:s,target:e.target,disabled:e.disabled,changed:u,removed:d}}var Yu=class{constructor(e,n,s){this.name=e,this.conf=n,this.source=s,this.child=null,this.buf="",this.stderr="",this.nextId=1,this.pending=new Map,this.state="idle",this.error="",this.tools=[],this.protocolVersion="",this.gen=0,this.connecting=null,this.relisted=null}spawnChild(){let e=this.conf,n=e.cwd?_t.resolve(X.root||process.cwd(),String(e.cwd)):X.root||process.cwd(),s=Object.assign({},process.env,e.env&&typeof e.env=="object"?e.env:{});return j1(String(e.command),Array.isArray(e.args)?e.args.map(String):[],{cwd:n,env:s,stdio:["pipe","pipe","pipe"],shell:!1})}write(e){let n=this.child;if(!n||!n.stdin||n.stdin.destroyed||n.exitCode!==null)throw new Error("MCP server\u300C"+this.name+"\u300D\u672A\u8FDE\u63A5");n.stdin.write(JSON.stringify(e)+`
|
|
44
44
|
`)}onStderr(e){this.stderr=(this.stderr+String(e)).slice(-L1)}onExit(e,n){if(e!==this.gen)return;let s=this.state==="ready";this.state="failed",this.error=n+(this.stderr?`
|
|
45
|
-
[stderr] `+this.stderr.trim():""),this.dropPending(n),this.child=null,s&&
|
|
46
|
-
`))>=0;){let s=this.buf.slice(0,n).replace(/\r$/,"").trim();if(this.buf=this.buf.slice(n+1),!s)continue;let r;try{r=JSON.parse(s)}catch{
|
|
45
|
+
[stderr] `+this.stderr.trim():""),this.dropPending(n),this.child=null,s&&jt("mcp_server_exit",{server:this.name,reason:n,stderr:this.stderr.slice(-600)})}onData(e){if(this.buf+=String(e),this.buf.length>D1){jt("mcp_line_overflow",{server:this.name,bytes:this.buf.length}),this.buf="";return}let n;for(;(n=this.buf.indexOf(`
|
|
46
|
+
`))>=0;){let s=this.buf.slice(0,n).replace(/\r$/,"").trim();if(this.buf=this.buf.slice(n+1),!s)continue;let r;try{r=JSON.parse(s)}catch{jt("mcp_bad_line",{server:this.name,head:s.slice(0,200)});continue}this.onMessage(r)}}respond(e,n,s){try{s?this.write({jsonrpc:"2.0",id:e,error:s}):this.write({jsonrpc:"2.0",id:e,result:n})}catch{}}onMessage(e){if(!e||typeof e!="object")return;if(e.method){if(e.id!==void 0&&e.id!==null){if(e.method==="ping"){this.respond(e.id,{});return}if(e.method==="roots/list"){let s=[];X.root&&s.push({uri:"file://"+encodeURI(X.root),name:_t.basename(X.root)||"workspace"}),this.respond(e.id,{roots:s});return}this.respond(e.id,null,{code:-32601,message:"Luban \u4E0D\u652F\u6301 "+e.method});return}if(e.method==="notifications/tools/list_changed"){let s=this;this.relisted||(this.relisted=this.loadTools().then(function(){jt("mcp_tools_changed",{server:s.name,tools:s.tools.length})}).catch(function(r){jt("mcp_tools_changed_failed",{server:s.name,message:r.message})}).then(function(){s.relisted=null}))}return}let n=this.pending.get(e.id);if(n)if(this.pending.delete(e.id),clearTimeout(n.timer),e.error){let s=e.error.code===void 0?"":" "+e.error.code;n.reject(new Error("MCP \u9519\u8BEF"+s+"\uFF1A"+(e.error.message||JSON.stringify(e.error))))}else n.resolve(e.result===void 0?{}:e.result)}request(e,n,s){let r=this;return new Promise(function(o,i){if(!r.child||r.child.exitCode!==null){i(new Error("MCP server\u300C"+r.name+"\u300D\u672A\u8FDE\u63A5"));return}let a=r.nextId++,l=s||Vu,c=setTimeout(function(){r.pending.has(a)&&(r.pending.delete(a),i(new Error("MCP \u8BF7\u6C42\u8D85\u65F6\uFF08"+l+"ms\uFF09\uFF1A"+e+" @ "+r.name)))},l);r.pending.set(a,{resolve:o,reject:i,timer:c});try{r.write({jsonrpc:"2.0",id:a,method:e,params:n||{}})}catch(u){clearTimeout(c),r.pending.delete(a),i(u)}})}async loadTools(){let e="",n=[];for(let s=0;s<R1;s++){let r=await this.request("tools/list",e?{cursor:e}:{},Vu),o=r&&r.tools||[];for(let i of o)i&&i.name&&n.push(i);if(e=r&&r.nextCursor,!e)break}return this.tools=n,Xu(),n}async connect(){if(this.connecting)return this.connecting;let e=this;this.connecting=async function(){e.dropPending("\u91CD\u65B0\u8FDE\u63A5"),e.gen++;let n=e.gen;e.stopChild(),e.state="connecting",e.error="",e.stderr="",e.tools=[],Xu();let s;try{s=e.spawnChild()}catch(r){throw e.state="failed",e.error="\u542F\u52A8\u5931\u8D25\uFF1A"+r.message,new Error("MCP server\u300C"+e.name+"\u300D\u542F\u52A8\u5931\u8D25\uFF1A"+r.message)}e.child=s,s.stdout&&s.stdout.setEncoding("utf8"),s.stderr&&s.stderr.setEncoding("utf8"),s.stdout.on("data",function(r){n===e.gen&&e.onData(r)}),s.stderr.on("data",function(r){n===e.gen&&e.onStderr(r)}),s.on("error",function(r){e.onExit(n,"\u8FDB\u7A0B\u9519\u8BEF\uFF1A"+r.message)}),s.on("exit",function(r,o){e.onExit(n,"\u8FDB\u7A0B\u9000\u51FA code="+r+(o?" signal="+o:""))});try{let r=await e.request("initialize",{protocolVersion:bg,capabilities:{tools:{}},clientInfo:{name:"luban",version:X.version}},Vu);e.protocolVersion=r&&r.protocolVersion||bg,e.write({jsonrpc:"2.0",method:"notifications/initialized",params:{}}),await e.loadTools(),e.state="ready",jt("mcp_ready",{server:e.name,tools:e.tools.length,protocol:e.protocolVersion,source:e.source})}catch(r){throw e.state="failed",e.error=String(r&&r.message||r),jt("mcp_failed",{server:e.name,error:e.error,stderr:e.stderr.slice(-600)}),e.stopChild(),new Error("MCP server\u300C"+e.name+"\u300D\u521D\u59CB\u5316\u5931\u8D25\uFF1A"+e.error)}return e}();try{return await this.connecting}finally{this.connecting=null}}async ensure(){return this.state==="ready"&&this.child&&this.child.exitCode===null?this:this.connect()}async call(e,n){let s=Number(this.conf.timeoutMs),r=Math.min(Math.max(isFinite(s)&&s>0?s:I1,1e3),N1),o=await this.request("tools/call",{name:e,arguments:n&&typeof n=="object"?n:{}},r);return Ag(o)}stopChild(){let e=this.child;if(!e)return;this.child=null;try{e.stdin&&!e.stdin.destroyed&&e.stdin.end()}catch{}try{e.kill("SIGTERM")}catch{}let n=setTimeout(function(){try{e.exitCode===null&&e.kill("SIGKILL")}catch{}},2e3);n.unref&&n.unref()}dropPending(e){for(let n of this.pending.values())clearTimeout(n.timer),n.reject(new Error("MCP server\u300C"+this.name+"\u300D"+e));this.pending.clear()}async stop(){this.gen++,this.state="stopped",this.dropPending("\u5DF2\u505C\u6B62"),this.stopChild(),this.tools=[]}};function Ag(t){let e=[],n=t&&Array.isArray(t.content)?t.content:[];for(let r of n)if(r)if(r.type==="text")e.push(String(r.text==null?"":r.text));else if(r.type==="resource"){let o=r.resource||{};o.text!=null?e.push("[resource "+(o.uri||"")+`]
|
|
47
47
|
`+o.text):e.push("[resource "+(o.uri||"")+" \xB7 "+(o.mimeType||"binary")+" \u5DF2\u7701\u7565]")}else r.type==="resource_link"?e.push("[resource_link "+(r.uri||"")+"] "+(r.name||"")):r.type==="image"?e.push("[image "+(r.mimeType||"")+" \u5DF2\u7701\u7565]"):r.type==="audio"?e.push("[audio "+(r.mimeType||"")+" \u5DF2\u7701\u7565]"):e.push("["+(r.type||"unknown")+" \u5185\u5BB9\u5DF2\u7701\u7565]");!e.length&&t&&t.structuredContent!=null&&e.push(JSON.stringify(t.structuredContent));let s=e.join(`
|
|
48
48
|
`).trim();return t&&t.isError&&(s="MCP \u5DE5\u5177\u8FD4\u56DE\u9519\u8BEF\uFF1A"+(s||"(\u65E0\u8F93\u51FA)")),s||(s="(\u65E0\u8F93\u51FA)"),s.length>kg?s.slice(0,kg)+`
|
|
49
|
-
\u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`:s}async function Qu(){if(X.starting)return X.starting;X.starting=async function(){_g();let t=[];for(let e of X.servers.values())t.push(e.connect().catch(function(){}));return await Promise.all(t),Xu(),jg()}();try{return await X.starting}finally{X.starting=null}}async function K1(){if(X.starting){try{await X.starting}catch{}return}X.loaded||await Qu()}async function H1(){return await Og(),Qu()}async function Og(){let t=Array.from(X.servers.values());X.servers=new Map,X.exposed.clear(),X.loaded=!1,await Promise.all(t.map(function(e){return e.stop()})),
|
|
49
|
+
\u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`:s}async function Qu(){if(X.starting)return X.starting;X.starting=async function(){_g();let t=[];for(let e of X.servers.values())t.push(e.connect().catch(function(){}));return await Promise.all(t),Xu(),jg()}();try{return await X.starting}finally{X.starting=null}}async function K1(){if(X.starting){try{await X.starting}catch{}return}X.loaded||await Qu()}async function H1(){return await Og(),Qu()}async function Og(){let t=Array.from(X.servers.values());X.servers=new Map,X.exposed.clear(),X.loaded=!1,await Promise.all(t.map(function(e){return e.stop()})),jt("mcp_stopped",{servers:t.length})}function G1(t){return X.exposed.has(String(t))}function ed(t){return X.exposed.get(String(t))||null}function z1(t){let e=t&&t.planAllow;return Array.isArray(e)?e:[]}function Eg(t,e){let n=e||{};return n.annotations&&n.annotations.readOnlyHint===!0?!0:z1(t).indexOf(n.name)>=0}function Pg(t){let e=ed(t);if(!e)return!1;let n=X.servers.get(e.server);if(!n)return!1;let s=n.tools.find(function(r){return r&&r.name===e.tool})||e.def;return Eg(n.conf,s)}function V1(t){let e=!!(t&&t.planOnly),n=[];for(let s of X.exposed){let r=s[0],o=s[1],i=o.def||{};if(e){let c=X.servers.get(o.server);if(!Eg(c&&c.conf,i))continue}let a=i.inputSchema&&typeof i.inputSchema=="object"?i.inputSchema:{type:"object",properties:{}},l=xg(i.description||i.title||"MCP \u5DE5\u5177 "+o.server+"/"+o.tool,F1);n.push({type:"function",function:{name:r,description:l+"\uFF08\u6765\u81EA MCP server\u300C"+o.server+"\u300D\uFF09",parameters:a}})}return n.sort(function(s,r){return s.function.name<r.function.name?-1:s.function.name>r.function.name?1:0}),n}function J1(){let t=[],e=[];for(let s of X.servers.values())s.state==="ready"&&s.tools.length?t.push("- "+s.name+"\uFF08"+s.tools.length+" \u4E2A\u5DE5\u5177\uFF09"):s.state==="failed"&&e.push("- "+s.name+"\uFF1A"+xg(s.error,200));let n=[];return t.length&&n.push(["\u5DF2\u8FDE\u63A5\u7684 MCP server\uFF1A",t.join(`
|
|
50
50
|
`),"MCP \u5DE5\u5177\u540D\u683C\u5F0F\u4E3A mcp__<server>__<tool>\uFF0C\u53C2\u6570\u6309\u5404\u81EA\u7684 schema \u4F20\uFF1B\u5DE5\u4F5C\u533A\u6587\u4EF6\u8BFB\u5199\u4ECD\u4F18\u5148\u7528\u5185\u7F6E\u6587\u4EF6\u5DE5\u5177\u3002"].join(`
|
|
51
51
|
`)),e.length&&n.push(`\u672A\u80FD\u8FDE\u63A5\u7684 MCP server\uFF08\u4E0D\u8981\u8C03\u7528\u5B83\u4EEC\u7684\u5DE5\u5177\uFF0C\u5931\u8D25\u539F\u56E0\u5982\u4E0B\uFF09\uFF1A
|
|
52
52
|
`+e.join(`
|
|
@@ -59,14 +59,14 @@ code=`+b.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:bt,maxRunning
|
|
|
59
59
|
\u2026[\u622A\u65AD]`:o;return"\u6280\u80FD "+n.name+" \xB7 "+ad(s)+`
|
|
60
60
|
\u6280\u80FD\u76EE\u5F55\uFF1A`+n.dir+`\uFF08\u6B63\u6587\u91CC\u7684\u8DEF\u5F84\u5360\u4F4D\u7B26\u5DF2\u66FF\u6362\u6210\u7EDD\u5BF9\u8DEF\u5F84\uFF09
|
|
61
61
|
|
|
62
|
-
`+a}function Qg(){return Ce.skills.map(function(t){return{name:t.name,description:t.description,parent:t.parent,childCount:t.childCount,dir:t.rel,base:t.base,file:t.fileRel,bytes:t.bytes}})}function OM(){return{count:Ce.skills.length,root:Ce.root,scannedAt:Ce.scannedAt,dirs:Ce.dirs.slice(),skills:Qg()}}ey.exports={configure:yM,refresh:Jg,ensure:ld,block:CM,read:AM,list:Qg,status:OM,find:Yg,frontmatter:id,_frontmatter:id,_scanDirs:Gg,_clipDesc:Xg,_markChildren:Vg,_substPaths:Zg,_signature:od,_state:Ce,_ttl:Kg}});var pd=ne((M2,fd)=>{var fl=require("fs"),
|
|
62
|
+
`+a}function Qg(){return Ce.skills.map(function(t){return{name:t.name,description:t.description,parent:t.parent,childCount:t.childCount,dir:t.rel,base:t.base,file:t.fileRel,bytes:t.bytes}})}function OM(){return{count:Ce.skills.length,root:Ce.root,scannedAt:Ce.scannedAt,dirs:Ce.dirs.slice(),skills:Qg()}}ey.exports={configure:yM,refresh:Jg,ensure:ld,block:CM,read:AM,list:Qg,status:OM,find:Yg,frontmatter:id,_frontmatter:id,_scanDirs:Gg,_clipDesc:Xg,_markChildren:Vg,_substPaths:Zg,_signature:od,_state:Ce,_ttl:Kg}});var pd=ne((M2,fd)=>{var fl=require("fs"),Us=require("path"),ry=new Set(Sr().SKIP_DIRS),EM=512*1024,PM=8e3,ty=400,jM=200,IM=2e3,NM=200,oy=2e3,ny=20;function go(t){let e=String(t??"").trim();if(!e)return null;let n=e.charAt(0)==="!"?e.slice(1):e,r=iy(n).map(function(o){let i="";for(let a=0;a<o.length;a++){let l=o.charAt(a);if(l==="*"){if(o.charAt(a+1)==="*"){let c=a;for(;o.charAt(c)==="*";)c++;o.charAt(c)==="/"?(i+="(?:.*/)?",a=c):(i+=".*",a=c-1);continue}i+="[^/]*";continue}if(l==="?"){i+="[^/]";continue}if(l==="["){let c=a+1;for((o.charAt(c)==="^"||o.charAt(c)==="!")&&c++,o.charAt(c)==="]"&&c++;c<o.length&&o.charAt(c)!=="]";)c++;if(c>=o.length){i+="\\[";continue}let u=o.slice(a+1,c);i+="["+u.replace(/\\/g,"\\\\")+"]",a=c;continue}i+=FM(l)}return new RegExp("^"+i+"$")}).filter(Boolean);return r.length?{res:r}:null}function iy(t){let e=t.indexOf("{");if(e<0)return[t];let n=0,s=-1;for(let c=e;c<t.length;c++){let u=t.charAt(c);if(u==="{")n++;else if(u==="}"&&(n--,n===0)){s=c;break}}if(s<0)return[t];let r=t.slice(0,e),o=t.slice(s+1),a=t.slice(e+1,s).split(","),l=[];for(let c of a)l.push.apply(l,iy(r+c+o));return l}function FM(t){return/[.*+?^${}()|[\]\\]/.test(t)?"\\"+t:t}function xs(t,e){if(!t)return!1;for(let n of t.res)if(n.test(e))return!0;return!1}function yo(t,e){if(!t)return e;let n=String(t).replace(/\/+$/,"");return n?n+"/"+e:e}function ay(t){let e=String(t??"");return e.length>ty?e.slice(0,ty)+"\u2026":e}function sy(t,e,n){let s=Math.max(0,e),r=Math.min(t.length,n),o=[];for(let i=s;i<r;i++)o.push({line:i+1,text:ay(t[i])});return o}function dd(t,e){let n=e||{},s=isFinite(n.maxDepth)?Math.min(Math.max(n.maxDepth,1),ny):ny,r=isFinite(n.cap)&&n.cap>0?n.cap:2e4,o=[],i=0,a=!1;return function l(c,u){if(u>s)return;let d=[];try{d=fl.readdirSync(Us.join(t,c),{withFileTypes:!0})}catch{return}d.sort(function(f,p){return f.name<p.name?-1:f.name>p.name?1:0});for(let f of d){if(!f.name)continue;let p=c?c+"/"+f.name:f.name;if(f.isDirectory()){if(f.name.charAt(0)==="."||ry.has(f.name))continue;if(l(p,u+1),o.length>=r){a=!0;return}continue}f.isFile()&&(i++,o.length<r?o.push(p):a=!0)}}("",0),{files:o,scanned:i,truncated:a}}function ks(t,e,n){let s=n||{},r=Array.isArray(e)?e:[e],o=[],i=[];for(let d of r){let f=String(d??"").trim();if(!f)continue;let p=go(f);p&&(f.charAt(0)==="!"?i:o).push(p)}if(!o.length)return{matches:[],scanned:0,truncated:!1,error:'glob \u9700\u8981 patterns\uFF08\u5982 "**/*.js"\uFF09'};let a=dl(s.maxFiles,1,oy,NM),l=s.prefix?String(s.prefix):"",c=dd(t,{maxDepth:s.maxDepth,cap:2e4}),u=[];for(let d of c.files){let f=!1;for(let w of o)if(xs(w,d)){f=!0;break}if(!f)continue;let p=!1;for(let w of i)if(xs(w,d)){p=!0;break}if(p)continue;let h=Us.join(t,d),m=0,y=0;try{let w=fl.statSync(h);m=w.size,y=w.mtimeMs}catch{}if(u.push({rel:yo(l,d),abs:h,size:m,mtimeMs:y}),u.length>=a)break}return u.sort(function(d,f){return f.mtimeMs-d.mtimeMs}),{matches:u,scanned:c.scanned,truncated:c.truncated||u.length>=a,pattern:r.join(" ")}}function ly(t,e){if(t.error)return"glob \u53C2\u6570\u6709\u8BEF\uFF1A"+t.error;if(!t.matches.length)return'glob "'+t.pattern+'" \u6CA1\u6709\u5339\u914D\u6587\u4EF6\uFF08\u626B\u63CF '+t.scanned+" \u4E2A\u6587\u4EF6\uFF09";let n=t.matches.map(function(r){return r.rel+" ("+r.size+"B)"}),s='glob "'+t.pattern+'" \u547D\u4E2D '+t.matches.length+` \u4E2A\u6587\u4EF6\uFF08\u6309\u6700\u8FD1\u6539\u52A8\u6392\u5E8F\uFF09
|
|
63
63
|
`+n.join(`
|
|
64
64
|
`);return t.truncated&&(s+=`
|
|
65
|
-
...[\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u53EF\u52A0 patterns \u6536\u7A84\u6216\u63D0\u9AD8 maxFiles]`),s}function Yt(t,e,n){let s=n||{},r=String(e??"");if(!r)return{hits:[],filesSearched:0,truncated:!1,error:"grep \u9700\u8981 pattern\uFF08\u6B63\u5219\uFF09"};let o;try{o=new RegExp(r,s.ignoreCase?"gi":"g")}catch(T){return{hits:[],filesSearched:0,truncated:!1,error:"\u6B63\u5219\u4E0D\u5408\u6CD5\uFF1A"+T.message}}let i=dl(s.maxHits,1,IM,jM),a=dl(s.maxFiles,1,oy,5e3),l=dl(s.contextLines,0,5,0),c=s.prefix?String(s.prefix):"",u=isFinite(s.budgetMs)&&s.budgetMs>0?Math.floor(s.budgetMs):PM,d=Date.now()+u,f=s.glob?go(s.glob):null,p=dd(t,{maxDepth:s.maxDepth,cap:2e4}),h=[],m=0,y=!1,w=!1;for(let T of p.files){if(h.length>=i){y=!0;break}if(Date.now()>d){y=!0,w=!0;break}if(f&&!
|
|
65
|
+
...[\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u53EF\u52A0 patterns \u6536\u7A84\u6216\u63D0\u9AD8 maxFiles]`),s}function Yt(t,e,n){let s=n||{},r=String(e??"");if(!r)return{hits:[],filesSearched:0,truncated:!1,error:"grep \u9700\u8981 pattern\uFF08\u6B63\u5219\uFF09"};let o;try{o=new RegExp(r,s.ignoreCase?"gi":"g")}catch(T){return{hits:[],filesSearched:0,truncated:!1,error:"\u6B63\u5219\u4E0D\u5408\u6CD5\uFF1A"+T.message}}let i=dl(s.maxHits,1,IM,jM),a=dl(s.maxFiles,1,oy,5e3),l=dl(s.contextLines,0,5,0),c=s.prefix?String(s.prefix):"",u=isFinite(s.budgetMs)&&s.budgetMs>0?Math.floor(s.budgetMs):PM,d=Date.now()+u,f=s.glob?go(s.glob):null,p=dd(t,{maxDepth:s.maxDepth,cap:2e4}),h=[],m=0,y=!1,w=!1;for(let T of p.files){if(h.length>=i){y=!0;break}if(Date.now()>d){y=!0,w=!0;break}if(f&&!xs(f,T))continue;if(m>=a){y=!0;break}let g=Us.join(t,T),v;try{v=fl.statSync(g)}catch{continue}if(!v.isFile()||v.size>EM)continue;let b;try{b=fl.readFileSync(g,"utf8")}catch{continue}if(LM(b))continue;m++;let S=b.split(`
|
|
66
66
|
`);for(let _=0;_<S.length;_++){o.lastIndex=0;let C=o.exec(S[_]);if(C&&(h.push({rel:yo(c,T),line:_+1,text:ay(S[_]),col:C.index+1,match:C[0],groups:C.slice(1),before:l>0?sy(S,_-l,_):[],after:l>0?sy(S,_+1,_+1+l):[]}),h.length>=i)){y=!0;break}}}return{hits:h,filesSearched:m,truncated:y,timedOut:w,contextLines:l,pattern:r}}function LM(t){let e=t.slice(0,8192);if(e.indexOf("\0")>=0)return!0;let n=0,s=Math.min(e.length,2048);for(let r=0;r<s;r++){let o=e.charCodeAt(r);(o<9||o>13&&o<32)&&n++}return s>0&&n/s>.3}function ud(t){if(t.error)return"grep \u53C2\u6570\u6709\u8BEF\uFF1A"+t.error;if(!t.hits.length)return'grep "'+t.pattern+'" \u6CA1\u6709\u547D\u4E2D\uFF08\u68C0\u7D22 '+t.filesSearched+" \u4E2A\u6587\u4EF6\uFF09";let e=[],n="",s=null;for(let o of t.hits){o.rel!==n&&(e.push(o.rel+":"),n=o.rel,s=new Set);let i=function(a,l,c){s.has(a)||(s.add(a),e.push((c?"":" ")+a+": "+l))};for(let a of o.before||[])i(a.line,a.text,!1);i(o.line,o.text,!0);for(let a of o.after||[])i(a.line,a.text,!1)}let r='grep "'+t.pattern+'" \u547D\u4E2D '+t.hits.length+" \u884C / "+t.filesSearched+" \u4E2A\u6587\u4EF6"+(t.contextLines?"\uFF08\u4E0A\u4E0B\u6587\u5404 "+t.contextLines+" \u884C\uFF0C\u65E0\u7F29\u8FDB\u524D\u7F00\u7684\u662F\u547D\u4E2D\u884C\uFF09":"")+`
|
|
67
67
|
`+e.join(`
|
|
68
68
|
`);return t.truncated&&(r+=`
|
|
69
|
-
...[`+(t.timedOut?"\u68C0\u7D22\u5DF2\u8FBE\u65F6\u95F4\u9884\u7B97":"\u547D\u4E2D\u5DF2\u8FBE\u4E0A\u9650 "+t.hits.length+" \u884C")+"\uFF0C\u5DF2\u622A\u65AD\uFF1B\u53EF\u6536\u7A84 pattern / dir / glob\uFF0C\u6216\u63D0\u9AD8 maxHits]"),r}function dl(t,e,n,s){let r=Math.floor(Number(t));return isFinite(r)?Math.min(Math.max(r,e),n):s}fd.exports={globToRegExp:go,globMatch:
|
|
69
|
+
...[`+(t.timedOut?"\u68C0\u7D22\u5DF2\u8FBE\u65F6\u95F4\u9884\u7B97":"\u547D\u4E2D\u5DF2\u8FBE\u4E0A\u9650 "+t.hits.length+" \u884C")+"\uFF0C\u5DF2\u622A\u65AD\uFF1B\u53EF\u6536\u7A84 pattern / dir / glob\uFF0C\u6216\u63D0\u9AD8 maxHits]"),r}function dl(t,e,n,s){let r=Math.floor(Number(t));return isFinite(r)?Math.min(Math.max(r,e),n):s}fd.exports={globToRegExp:go,globMatch:xs,walkFiles:dd,glob:ks,formatGlob:ly,grep:Yt,formatGrep:ud,outRel:yo,SKIP_DIRS:ry};require.main===fd&&DM();function DM(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Us.join(t.tmpdir(),"luban-fs-")),s=function(w,T){let g=Us.join(n,w);e.mkdirSync(Us.dirname(g),{recursive:!0}),e.writeFileSync(g,T)};s("a.js",`const foo1 = 1;
|
|
70
70
|
const foo2 = 2;
|
|
71
71
|
`),s("src/b.ts",`export function bar(x) { return foo1 + x; }
|
|
72
72
|
`),s("src/gen.js",`const generated = true;
|
|
@@ -75,8 +75,8 @@ foo(123) \u5728\u8FD9\u91CC
|
|
|
75
75
|
`),s("node_modules/dep/index.js",`const foo9 = 9;
|
|
76
76
|
`),s(".hidden/d.js",`const fooHidden = 1;
|
|
77
77
|
`),s("plain.txt",`foo(456)
|
|
78
|
-
`);let r=0,o=0,i=function(w,T,g){T?(r++,console.log(" ok "+w)):(o++,console.log(" FAIL "+w+(g?" :: "+g:"")))},a=
|
|
79
|
-
filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var Ty=ne((C2,_y)=>{var gd=require("fs"),uy=require("os"),
|
|
78
|
+
`);let r=0,o=0,i=function(w,T,g){T?(r++,console.log(" ok "+w)):(o++,console.log(" FAIL "+w+(g?" :: "+g:"")))},a=ks(n,"**/*.js");i("glob **/*.js \u547D\u4E2D a.js",a.matches.some(w=>w.rel==="a.js")),i("glob \u8DF3\u8FC7 node_modules",!a.matches.some(w=>w.rel.indexOf("node_modules")===0)),i("glob \u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55",!a.matches.some(w=>w.rel.indexOf(".hidden")===0)),a=ks(n,"src/**/*.ts"),i("glob src/**/*.ts \u53EA\u4E2D b.ts",a.matches.length===1&&a.matches[0].rel==="src/b.ts"),a=ks(n,"**/*.{md,txt}"),i("glob \u82B1\u62EC\u53F7 md+txt",a.matches.length===2),a=ks(n,["**/*.js","!src/**"]),i("glob \u53D6\u53CD\u6392\u9664 src/",a.matches.length===1&&a.matches[0].rel==="a.js",JSON.stringify(a.matches.map(w=>w.rel))),a=ks(n,["**/*.js","!**/gen.js"]),i("glob \u53D6\u53CD\u6392\u9664 gen.js",a.matches.length===1&&a.matches[0].rel==="a.js",JSON.stringify(a.matches.map(w=>w.rel))),a=ks(n,"**/b.?s"),i("glob ? \u5355\u5B57\u7B26",a.matches.length===1&&a.matches[0].rel==="src/b.ts");let l=Yt(n,"foo\\(\\d+\\)");i("grep \u6B63\u5219\u547D\u4E2D\u4E24\u5904",l.hits.length===2,JSON.stringify(l.hits.map(w=>w.rel+":"+w.line))),i("grep \u547D\u4E2D c.md \u4E0E plain.txt",l.hits.some(w=>w.rel==="src/deep/c.md")&&l.hits.some(w=>w.rel==="plain.txt")),l=Yt(n,"foo\\((\\d+)\\)"),i("grep \u6355\u83B7\u7EC4",l.hits.every(w=>/^\d+$/.test(w.groups[0])),JSON.stringify(l.hits.map(w=>w.groups[0]))),l=Yt(n,"FOO1",{ignoreCase:!0}),i("grep ignoreCase",l.hits.length===2&&l.hits.some(w=>w.rel==="a.js")),l=Yt(n,"foo1",{glob:"**/*.ts"}),i("grep glob \u8FC7\u6EE4\u53EA\u770B ts",l.hits.length===1&&l.hits[0].rel==="src/b.ts"),l=Yt(n,"foo9"),i("grep \u8DF3\u8FC7 node_modules",l.hits.length===0),l=Yt(n,"foo",{maxHits:3}),i("grep maxHits \u622A\u65AD",l.hits.length===3&&l.truncated===!0),l=Yt(n,"foo",{contextLines:1}),i("grep contextLines \u8BB0\u5F55",l.contextLines===1),i("grep \u4E0A\u4E0B\u6587\u884C\u5DF2\u53D6\u597D",l.hits[0].before.length+l.hits[0].after.length>0);let c=Yt(n,"bar",{contextLines:1}),u=ud(c);i("grep \u547D\u4E2D\u884C\u4E0D\u5E26\u7F29\u8FDB\u524D\u7F00",/^\d+: /m.test(u),u),i("grep \u4E0A\u4E0B\u6587\u884C\u5E26\u4E24\u7A7A\u683C\u524D\u7F00",/^ \d+: /m.test(u),u);let d=Yt(Us.join(n,"src"),"bar",{prefix:"src"});i("grep prefix \u8865\u56DE\u76EE\u5F55",d.hits[0]&&d.hits[0].rel==="src/b.ts",JSON.stringify(d.hits.map(w=>w.rel)));let f=ks(Us.join(n,"src"),"**/*.ts",{prefix:"src"});i("glob prefix \u8865\u56DE\u76EE\u5F55",f.matches[0]&&f.matches[0].rel==="src/b.ts",JSON.stringify(f.matches.map(w=>w.rel))),i("outRel \u7A7A\u524D\u7F00\u539F\u6837",yo("","a.js")==="a.js"),i("outRel \u53BB\u5C3E\u90E8\u659C\u6760",yo("src/","a.js")==="src/a.js"),i("outRel \u7EDD\u5BF9\u524D\u7F00",yo("/tmp/x","a.js")==="/tmp/x/a.js");let p=Yt(n,"foo",{budgetMs:1});i("grep \u65F6\u95F4\u9884\u7B97\u6536\u624B",p.timedOut===!0||p.hits.length>0),l=Yt(n,"("),i("grep \u975E\u6CD5\u6B63\u5219\u62A5\u9519",!!l.error),l=Yt(n,""),i("grep \u7A7A pattern \u62A5\u9519",!!l.error);let h=go("**/*.spec.ts");i("globToRegExp \u5339\u914D a/b/c.spec.ts",xs(h,"a/b/c.spec.ts")),i("globToRegExp \u4E0D\u5339\u914D a/b/c.ts",!xs(h,"a/b/c.ts"));let m=go("src/**");i("globToRegExp src/** \u5339\u914D src/x",xs(m,"src/x")),i("globToRegExp src/** \u4E0D\u5339\u914D srcx",!xs(m,"srcx"));let y=go("!src/**");i("globToRegExp \u5265\u6389\u524D\u5BFC ! \u540E\u5339\u914D src/x",xs(y,"src/x")),i("formatGlob \u7A7A\u7ED3\u679C",/没有匹配/.test(ly(ks(n,"**/*.zzz")))),i("formatGrep \u6709\u547D\u4E2D",/命中 \d+ 行/.test(ud(Yt(n,"foo1")))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
|
|
79
|
+
filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var Ty=ne((C2,_y)=>{var gd=require("fs"),uy=require("os"),It=require("path"),RM=cd(),dy=pd(),$M=100,vi=4e4,qM=6,fy=2e3,py=12e3,hy=2e3,BM=200,yd=/\.(md|mdc)$/i,my=Object.create(null);for(let t of Sr().SKIP_DIRS)my[t]=1;var se={root:"",rec:function(){},rules:[],dirs:[],scannedAt:"",scannedMs:0,enabled:!0,maxChars:py,indexMaxChars:hy};function UM(t){let e=t||{};e.root&&String(e.root)!==se.root&&(se.scannedMs=0),e.root&&(se.root=String(e.root)),typeof e.rec=="function"&&(se.rec=e.rec),typeof e.enabled=="boolean"&&(se.enabled=e.enabled);let n=Number(e.maxChars);isFinite(n)&&n>0&&(se.maxChars=Math.floor(n));let s=Number(e.indexMaxChars);isFinite(s)&&s>0&&(se.indexMaxChars=Math.floor(s))}function hd(t,e){try{se.rec(t,e)}catch{}}function md(t){return(t||[]).map(function(e){return e.name+""+e.tier+""+e.globs.join(",")+""+e.body.length+""+e.file}).join("")}function hl(){if(!se.root||se.scannedMs&&Date.now()-se.scannedMs<fy)return;let t=md(se.rules),e;try{e=ky(se.root,{quiet:!0})}catch(n){se.scannedMs=Date.now(),hd("rules_rescan_failed",{message:n.message});return}md(e)!==t&&hd("rules_changed",{count:e.length,always:e.filter(function(n){return n.tier==="always"}).length})}function pl(t){let e=String(t??"").replace(/\s+/g," ").trim();return(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))&&(e=e.slice(1,-1).trim()),e}function WM(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function KM(t){let e=se.root;if(e){let s=It.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!It.isAbsolute(s))return s.split(It.sep).join("/")}let n=uy.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(It.sep).join("/"):t.split(It.sep).join("/")}function gy(t){let e=t||se.root||process.cwd(),n=uy.homedir();return[{kind:"dir",dir:It.join(e,".luban","rules")},{kind:"dir",dir:It.join(e,".cursor","rules")},{kind:"file",file:It.join(e,"AGENTS.md"),agents:!0},{kind:"dir",dir:It.join(n,".luban","rules")}]}function yy(t,e,n){if(e>qM)return;let s;try{s=gd.readdirSync(t,{withFileTypes:!0})}catch{return}let r=s.map(function(o){return o}).sort(function(o,i){return o.name<i.name?-1:o.name>i.name?1:0});for(let o of r){let i=It.join(t,o.name);if(o.isDirectory()){if(my[o.name]||o.name.startsWith("."))continue;yy(i,e+1,n);continue}!o.isFile()||!yd.test(o.name)||n.push(i)}}function wd(t){return String(t??"").replace(/^---\r?\n[\s\S]*?\r?\n---[ \t]*\r?\n?/,"").trim()}function HM(t){let e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(String(t??""));return e?e[1]:""}function cy(t,e){let n=String(e??"").trim();n=n.replace(/^[-*+]\s+/,"").trim(),(n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'"))&&(n=n.slice(1,-1).trim()),n=n.replace(/^\[|\]$/g,"").trim(),!(!n||t.indexOf(n)>=0)&&t.push(n)}function wy(t){let e=[],n=HM(t).split(/\r?\n/),s=!1;for(let r=0;r<n.length;r++){let o=n[r];if(/^\s/.test(o)){if(!s)continue;let u=/^\s*-\s+(.+)$/.exec(o);u&&cy(e,u[1]);continue}let i=o.indexOf(":");if(i<=0)continue;let a=o.slice(0,i).trim().toLowerCase(),l=o.slice(i+1).trim();if(a!=="globs"){s=!1;continue}if(!l){s=!0;continue}s=!1;let c=l;c.startsWith("[")&&c.endsWith("]")&&(c=c.slice(1,-1));for(let u of c.split(","))cy(e,u)}return e}function GM(t){let e=wd(t),n=!1;for(let s of e.split(/\r?\n/)){let r=s.trim();if(r.startsWith("```")){n=!n;continue}if(!(n||!r)&&!(r.startsWith("#")||r.startsWith("|")||r.startsWith(">")))return r.replace(/^[-*+]\s+/,"")}return""}function by(t,e,n){if(n&&n.agents)return"always";let s=String(t.alwaysapply==null?"":t.alwaysapply).trim().toLowerCase();return s==="true"?"always":e.length?"conditional":s==="false"?"indexOnly":"always"}function zM(t,e){let n;try{n=gd.readFileSync(t,"utf8")}catch{return null}let s=n.length>vi;s&&(n=n.slice(0,vi));let r=RM.frontmatter(n),o=pl(r.name)||It.basename(t).replace(yd,"");if(!o)return null;let i=wy(n),a=by(r,i,e),l=wd(n),c=WM(pl(r.description||r.trigger||r.when_to_use||"")||GM(n),BM);return{name:o,description:c,globs:i,globsRe:i.map(function(u){return dy.globToRegExp(u)}).filter(Boolean),alwaysApply:a==="always",tier:a,file:t,rel:KM(t),chars:n.length,truncated:s,body:l,text:n}}function ky(t,e){let n=e||{};t&&(String(t)!==se.root&&(se.scannedMs=0),se.root=String(t));let s=gy(se.root);se.dirs=s.map(function(a){return a.kind==="dir"?a.dir:a.file});let r=[];for(let a of s)if(a.kind==="dir"){let l=[];yy(a.dir,0,l);for(let c of l)r.push({file:c,src:a})}else{let l;try{l=gd.statSync(a.file)}catch{continue}l.isFile()&&r.push({file:a.file,src:a})}let o=[],i=Object.create(null);for(let a of r){let l=zM(a.file,a.src);if(!l)continue;let c=l.name.toLowerCase();if(!i[c]&&(i[c]=!0,o.push(l),o.length>=$M))break}return o.sort(function(a,l){let c=a.name.toLowerCase(),u=l.name.toLowerCase();return c<u?-1:c>u?1:0}),se.rules=o,se.scannedAt=new Date().toISOString(),se.scannedMs=Date.now(),n.quiet||hd("rules_scanned",{count:o.length,root:se.root,always:o.filter(function(a){return a.tier==="always"}).length,conditional:o.filter(function(a){return a.tier==="conditional"}).length,names:o.slice(0,30).map(function(a){return a.name})}),o}function VM(){if(!se.enabled||(hl(),!se.rules.length))return"";let t=se.rules.filter(function(i){return i.tier==="always"}),e=se.rules.filter(function(i){return i.tier!=="always"}),n=[],s=0,r=[],o=[];for(let i of t){let a="### \u89C4\u5219 "+i.name+"\uFF08"+i.rel+"\uFF09",l=a.length+i.body.length+2;if(s+l>se.maxChars){o.push(i);continue}s+=l,r.push(a+`
|
|
80
80
|
`+(i.body||"(\u7A7A\u89C4\u5219)"))}if(r.length&&n.push(`\u9879\u76EE\u89C4\u5219\uFF08\u6765\u81EA .luban/rules\u3001.cursor/rules \u4E0E AGENTS.md\uFF0C\u5FC5\u987B\u9075\u5B88\uFF09\uFF1A
|
|
81
81
|
|
|
82
82
|
`+r.join(`
|
|
@@ -86,14 +86,14 @@ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var Ty=
|
|
|
86
86
|
`)+(l?`
|
|
87
87
|
- \u53E6\u6709 `+l+" \u6761\u89C4\u5219\u672A\u5217\u51FA\uFF08\u8D85\u51FA\u7D22\u5F15\u9884\u7B97\uFF09\uFF0C\u5DF2\u77E5\u540D\u5B57\u65F6\u53EF\u76F4\u63A5 read_rule":""))}return n.join(`
|
|
88
88
|
|
|
89
|
-
`)}function xy(t){let e=[];for(let n of t||[]){let s=String(n??"").trim();if(!s)continue;let r=s;if(
|
|
89
|
+
`)}function xy(t){let e=[];for(let n of t||[]){let s=String(n??"").trim();if(!s)continue;let r=s;if(It.isAbsolute(s)){if(se.root){let o=It.relative(se.root,s);r=!o.startsWith("..")&&!It.isAbsolute(o)?o:s}}else r=s.replace(/^\.\//,"");r=r.split(It.sep).join("/"),e.indexOf(r)<0&&e.push(r)}return e.sort()}function JM(t){if(!se.enabled)return"";let e=xy(t);if(!e.length)return"";hl();let n=se.rules.filter(function(l){return l.tier==="conditional"&&l.globsRe.length});if(!n.length)return"";let s=[];for(let l of n){let c=e.filter(function(u){return l.globsRe.some(function(d){return dy.globMatch(d,u)})});c.length&&s.push({rule:l,files:c})}if(!s.length)return"";let r=[],o=0,i=[],a=[];for(let l of s){let c="### \u89C4\u5219 "+l.rule.name+"\uFF08"+l.rule.rel+"\uFF09\u2014 \u56E0\u4E3A\u547D\u4E2D\uFF1A"+l.files.slice(0,6).join(", ")+(l.files.length>6?" \u7B49 "+l.files.length+" \u4E2A\u6587\u4EF6":""),u=c.length+l.rule.body.length+2;if(o+u>se.maxChars){a.push(l.rule);continue}o+=u,i.push(c+`
|
|
90
90
|
`+(l.rule.body||"(\u7A7A\u89C4\u5219)"))}return i.length&&r.push(`\u672C\u8F6E\u547D\u4E2D\u7684\u9879\u76EE\u89C4\u5219\uFF08\u56E0\u4E3A\u4E0B\u9762\u8FD9\u4E9B\u6587\u4EF6\u5728\u672C\u8F6E\u88AB\u5F15\u7528 / \u6539\u52A8\uFF0C\u89C4\u5219\u5168\u6587\u4E00\u5E76\u7ED9\u51FA\uFF09\uFF1A
|
|
91
91
|
|
|
92
92
|
`+i.join(`
|
|
93
93
|
|
|
94
94
|
`)),a.length&&r.push("\u53E6\u6709 "+a.length+" \u6761\u547D\u4E2D\u7684\u89C4\u5219\u8D85\u51FA\u9884\u7B97\u672A\u5C55\u5F00\uFF08"+a.map(function(l){return l.name}).join(" / ")+"\uFF09\uFF0C\u9700\u8981\u65F6\u7528 read_rule \u8BFB\u5168\u6587\u3002"),r.join(`
|
|
95
95
|
|
|
96
|
-
`)}function vy(t){let e=pl(t).toLowerCase();if(!e)return null;hl();let n=se.rules.find(function(s){return s.name.toLowerCase()===e});return n||(n=se.rules.find(function(s){return
|
|
96
|
+
`)}function vy(t){let e=pl(t).toLowerCase();if(!e)return null;hl();let n=se.rules.find(function(s){return s.name.toLowerCase()===e});return n||(n=se.rules.find(function(s){return It.basename(s.file).replace(yd,"").toLowerCase()===e}),n||null)}function XM(t){let e=vy(t);if(!e){let o=se.rules.map(function(i){return i.name}).join(", ")||"(\u65E0)";throw new Error("\u6CA1\u6709\u8FD9\u4E2A\u89C4\u5219: "+pl(t)+"\uFF08\u53EF\u7528: "+o+"\uFF09")}let n=String(e.text||""),r=n.length>vi?n.slice(0,vi)+`
|
|
97
97
|
\u2026[\u622A\u65AD]`:n;return"\u89C4\u5219 "+e.name+" \xB7 "+e.rel+`
|
|
98
98
|
\u6765\u6E90\uFF1A`+e.file+"\uFF08\u6863\u4F4D\uFF1A"+e.tier+(e.globs.length?"\uFF1Bglobs: "+e.globs.join(", "):"")+`\uFF09
|
|
99
99
|
|
|
@@ -106,29 +106,29 @@ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var Ty=
|
|
|
106
106
|
`+c.join(`
|
|
107
107
|
`),h=!1;if(f>0){let m="\uFF08\u5176\u4F59 "+f+" \u4E2A\u6587\u4EF6\u7701\u7565\uFF09";p.length+1+m.length<=i?p+=`
|
|
108
108
|
`+m:p=p.slice(0,Math.max(0,i-Ry.length))+Ry,h=!0}return{block:p,chars:p.length,files:o.length,omitted:f,truncated:h}}xd.exports={DEFAULT_MAX_CHARS:3e3,block:_r,_lineOf:$y};if(require.main===xd){let n=function(f,p){p?(t++,console.log(" \u2713 "+f)):(e++,console.log(" \u2717 "+f))};dC=n;let t=0,e=0,s=_r([]);n("\u7A7A\u8BB0\u5F55\u8FD4\u56DE\u7A7A\u5757",s.block===""&&s.files===0&&!s.truncated);let r=_r([{relPath:"src/a.js",isNew:!1,stats:{add:3,del:1,hunks:2}}]);n("\u5355\u6587\u4EF6\u6807\u9898",r.block.indexOf("[\u672C\u4F1A\u8BDD\u6539\u52A8] 1 \u4E2A\u6587\u4EF6\u5F85\u5BA1\u9605")===0),n("\u5355\u6587\u4EF6\u884C",r.block.indexOf("- src/a.js \xB7 +3 -1 \xB7 2 \u5757")>=0);let o=_r([{relPath:"z.js",isNew:!1,stats:{add:1,del:0,hunks:1}},{relPath:"a.js",isNew:!1,stats:{add:2,del:2,hunks:1}},{relPath:"m.js",isNew:!1,stats:{add:0,del:5,hunks:3}}]),i=o.block.indexOf("a.js"),a=o.block.indexOf("m.js"),l=o.block.indexOf("z.js");n("\u591A\u6587\u4EF6\u6309\u8DEF\u5F84\u6392\u5E8F",i>=0&&i<a&&a<l),n("\u591A\u6587\u4EF6\u6807\u9898\u8BA1\u6570",o.block.indexOf("[\u672C\u4F1A\u8BDD\u6539\u52A8] 3 \u4E2A\u6587\u4EF6\u5F85\u5BA1\u9605")===0);let c=_r([{relPath:"new.js",isNew:!0,stats:{add:40,del:0,hunks:1}}]);n("\u65B0\u5EFA\u6587\u4EF6\u5E26\u6807\u8BB0",c.block.indexOf("- new.js\uFF08\u65B0\u5EFA\uFF09 \xB7 +40 -0 \xB7 1 \u5757")>=0);let u=_r([{relPath:"a.js",isNew:!1,stats:{add:1,del:0,hunks:1}},{relPath:"b.js",isNew:!1,stats:{add:1,del:0,hunks:1}},{relPath:"c.js",isNew:!1,stats:{add:1,del:0,hunks:1}}],{maxChars:60});n("\u622A\u65AD\u6807\u8BB0",u.truncated===!0&&u.omitted>0),n("\u622A\u65AD\u540E\u957F\u5EA6\u4E0D\u8D85\u9884\u7B97",u.chars<=60),n("\u622A\u65AD\u540E\u4ECD\u542B\u6807\u9898",u.block.indexOf("[\u672C\u4F1A\u8BDD\u6539\u52A8] 3 \u4E2A\u6587\u4EF6\u5F85\u5BA1\u9605")===0);let d=_r([{relPath:"src\\a.js",isNew:!1,stats:{add:1,del:0,hunks:1}}]);n("\u53CD\u659C\u6760\u5F52\u4E00\u4E3A\u6B63\u659C\u6760",d.block.indexOf("- src/a.js \xB7 +1 -0 \xB7 1 \u5757")>=0),console.log(`
|
|
109
|
-
workset.js: `+t+" \u901A\u8FC7, "+e+" \u5931\u8D25"),process.exit(e?1:0)}var dC});var Yy=ne((P2,Xy)=>{var Tr=require("fs"),fC=require("path"),pC=Sr().SKIP_DIRS,
|
|
110
|
-
`),i=[];for(let d=0;d<o.length;d++){let f=o[d].toLowerCase(),p=0;for(let h of e)f.indexOf(h)>=0&&p++;p&&i.push({i:d,hit:p})}if(!i.length)return[];i.sort(function(d,f){return f.hit-d.hit||d.i-f.i});let a=i.slice(0,s.maxLinesPerFile).sort(function(d,f){return d.i-f.i}),l=Math.max(0,Math.floor(s.contextLines)||0),c=new Set,u=[];for(let d of a){let f=Math.max(0,d.i-l),p=Math.min(o.length-1,d.i+l);for(let h=f;h<=p;h++)c.has(h)||(c.add(h),u.push({no:h+1,text:bC(o[h],s.maxLineLen),match:h===d.i}))}return u}function kC(t,e,n){let s=Date.now(),r=Object.assign({},
|
|
109
|
+
workset.js: `+t+" \u901A\u8FC7, "+e+" \u5931\u8D25"),process.exit(e?1:0)}var dC});var Yy=ne((P2,Xy)=>{var Tr=require("fs"),fC=require("path"),pC=Sr().SKIP_DIRS,Ws={maxFiles:5e3,maxFileBytes:512*1024,maxTokensPerFile:800,maxGlobalTokens:2e5,maxResults:20,maxLinesPerFile:5,contextLines:1,maxLineLen:400,k1:1.2,b:.75,maxDepth:12,skipDirs:pC},By=new Set("the and for that with this from function return const let var true false null undefined import export class new typeof async await if else while switch case break continue try catch throw public private protected static void string number boolean object array any interface type enum require module exports default extends super this self none nil not but you are was were has have \u4E00\u4E2A \u6211\u4EEC \u53EF\u4EE5 \u8FD9\u4E2A \u90A3\u4E2A \u5C31\u662F \u4E0D\u662F \u6CA1\u6709 \u6216\u8005 \u6240\u4EE5 \u56E0\u4E3A \u4F46\u662F \u5982\u679C \u5DF2\u7ECF \u9700\u8981 \u4F7F\u7528 \u8FDB\u884C".split(/\s+/)),Uy=/[A-Za-z_$][A-Za-z0-9_$]*/g,Wy=/[\u4e00-\u9fff]+/g;function Ky(t){return String(t).replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").split(/[_\s$]+/)}function vd(t){let e=String(t??""),n=[],s;for(Uy.lastIndex=0;s=Uy.exec(e);){let r=s[0],o=r.toLowerCase();o.length>=2&&!By.has(o)&&n.push(o);for(let i of Ky(r)){let a=i.toLowerCase();a.length>=2&&a!==o&&!By.has(a)&&n.push(a)}}for(Wy.lastIndex=0;s=Wy.exec(e);){let r=s[0];if(r.length===1){n.push(r);continue}for(let o=0;o+2<=r.length;o++)n.push(r.slice(o,o+2))}return n}function Hy(t){let e=null;try{e=Tr.openSync(t,"r");let n=Buffer.alloc(4096),s=Tr.readSync(e,n,0,4096,0);return n.slice(0,s).indexOf(0)>=0}catch{return!0}finally{if(e!==null)try{Tr.closeSync(e)}catch{}}}function Gy(t,e){let n=Object.assign({},Ws,e||{}),s=new Set(n.skipDirs||Ws.skipDirs),r=[],o=!1;return function i(a,l,c){if(r.length>=n.maxFiles||c>n.maxDepth){r.length>=n.maxFiles&&(o=!0);return}let u=[];try{u=Tr.readdirSync(a,{withFileTypes:!0})}catch{return}u.sort(function(d,f){return d.name<f.name?-1:d.name>f.name?1:0});for(let d of u){if(r.length>=n.maxFiles){o=!0;return}if(!d.name||d.name.charAt(0)==="."||s.has(d.name))continue;let f=fC.join(a,d.name),p=l?l+"/"+d.name:d.name,h;try{h=Tr.statSync(f)}catch{continue}if(h.isDirectory()){i(f,p,c+1);continue}h.isFile()&&(h.size>n.maxFileBytes||h.size===0||r.push({rel:p,abs:f,mtimeMs:h.mtimeMs,size:h.size}))}}(t,"",0),{files:r,truncated:o}}function zy(t,e){let n=vd(t),s=new Map;for(let r of n)s.set(r,(s.get(r)||0)+1);if(s.size>e){let r=Array.from(s.entries()).sort(function(o,i){return i[1]-o[1]}).slice(0,e);return{tf:new Map(r),docLen:n.length}}return{tf:s,docLen:n.length}}var wo=new Map;function hC(){return{docs:new Map,inverted:new Map,df:new Map,avgLen:0,dirty:!1,builtAt:0}}function mC(t){let e=0;for(let n of t.values())e+=n.size;return e}function gC(t,e){let n=new Map,s=new Map,r=0;for(let i of t.docs){let a=i[0],l=i[1];for(let c of l.tf){let u=c[0],d=n.get(u);d||(d=new Map,n.set(u,d)),d.set(a,c[1]),r++}}for(let i of n)s.set(i[0],i[1].size);if(r>e){let i=Array.from(n.keys()).sort(function(a,l){return s.get(a)-s.get(l)});for(let a of i){if(r<=e)break;let l=n.get(a);r-=l.size,n.delete(a),s.delete(a)}}let o=0;for(let i of t.docs.values())o+=i.docLen;t.inverted=n,t.df=s,t.avgLen=t.docs.size?o/t.docs.size:0,t.dirty=!1,t.builtAt=Date.now(),t.truncatedPostings=r}function yC(t,e){let n=Object.assign({},Ws,e||{}),s=Gy(t,n),r=wo.get(t);r||(r=hC(),wo.set(t,r));let o=new Set,i=0;for(let a of s.files){o.add(a.rel);let l=r.docs.get(a.rel);if(l&&l.mtimeMs===a.mtimeMs&&l.size===a.size||Hy(a.abs))continue;let c;try{c=Tr.readFileSync(a.abs,"utf8")}catch{continue}let u=zy(c,n.maxTokensPerFile);r.docs.set(a.rel,{rel:a.rel,abs:a.abs,mtimeMs:a.mtimeMs,size:a.size,tf:u.tf,docLen:u.docLen}),i++}for(let a of Array.from(r.docs.keys()))o.has(a)||(r.docs.delete(a),i++);return(i||!r.builtAt)&&gC(r,n.maxGlobalTokens),{index:r,files:s.files.length,truncated:s.truncated,changed:i}}function wC(t,e){return Math.log(1+(e-t+.5)/(t+.5))}function Vy(t,e,n){let s=Object.assign({},Ws,n||{}),r=t.docs.size,o=t.avgLen||1,i=new Map;for(let a of e){let l=t.inverted.get(a);if(!l)continue;let c=wC(t.df.get(a)||0,r);for(let u of l){let d=u[0],f=u[1],p=t.docs.get(d);if(!p)continue;let h=1-s.b+s.b*(p.docLen/o),m=c*(f*(s.k1+1))/(f+s.k1*h);i.set(d,(i.get(d)||0)+m)}}return Array.from(i.entries()).sort(function(a,l){return l[1]-a[1]})}function bC(t,e){let n=String(t??"").replace(/\r$/,"");return n.length>e?n.slice(0,e)+"\u2026":n}function Jy(t,e,n){let s=Object.assign({},Ws,n||{}),r;try{r=Tr.readFileSync(t,"utf8")}catch{return[]}let o=r.split(`
|
|
110
|
+
`),i=[];for(let d=0;d<o.length;d++){let f=o[d].toLowerCase(),p=0;for(let h of e)f.indexOf(h)>=0&&p++;p&&i.push({i:d,hit:p})}if(!i.length)return[];i.sort(function(d,f){return f.hit-d.hit||d.i-f.i});let a=i.slice(0,s.maxLinesPerFile).sort(function(d,f){return d.i-f.i}),l=Math.max(0,Math.floor(s.contextLines)||0),c=new Set,u=[];for(let d of a){let f=Math.max(0,d.i-l),p=Math.min(o.length-1,d.i+l);for(let h=f;h<=p;h++)c.has(h)||(c.add(h),u.push({no:h+1,text:bC(o[h],s.maxLineLen),match:h===d.i}))}return u}function kC(t,e,n){let s=Date.now(),r=Object.assign({},Ws,n||{}),o=String(e??"").trim();if(!o)throw new Error("\u641C\u7D22\u8BCD\u4E3A\u7A7A");let i=Array.from(new Set(vd(o))).filter(function(p){return p.length>0});if(!i.length)throw new Error("\u641C\u7D22\u8BCD\u592A\u77ED\uFF08\u81F3\u5C11 2 \u4E2A\u5B57\u7B26\uFF0C\u4E14\u4E0D\u80FD\u662F\u5E38\u89C1\u505C\u7528\u8BCD\uFF09");let a=yC(t,r),l=Vy(a.index,i,r),c=String(r.prefix==null?"":r.prefix).replace(/^\/+/,"").replace(/\/+$/,""),u=c?l.filter(function(p){return p[0]===c||p[0].indexOf(c+"/")===0}):l,d=u.slice(0,Math.min(Math.max(1,Math.floor(r.maxResults)||20),100)),f=[];for(let p of d){let h=p[0],m=a.index.docs.get(h);if(!m)continue;let y=Jy(m.abs,i,r);y.length&&f.push({path:h,score:Number(p[1].toFixed(3)),lines:y})}return{query:o,tokens:i,files:a.files,changed:a.changed,indexed:a.index.docs.size,truncated:a.truncated,matched:u.length,hits:f,tookMs:Date.now()-s}}function xC(t,e){let n=Object.assign({},Ws,e||{}),s=t||{},r="\u626B\u63CF "+(s.files||0)+" \u4E2A\u6587\u4EF6\uFF08\u7D22\u5F15 "+(s.indexed||0)+`\uFF09
|
|
111
111
|
\u547D\u4E2D `+(s.hits?s.hits.length:0)+" \u4E2A\u6587\u4EF6"+(s.truncated?"\uFF08\u5DF2\u8FBE\u6587\u4EF6\u6570\u4E0A\u9650\uFF09":"")+" \xB7 \u7528\u65F6 "+(s.tookMs||0)+"ms";if(!s.hits||!s.hits.length)return r+`
|
|
112
112
|
\u6CA1\u6709\u547D\u4E2D\uFF1A\u6362\u4E2A\u66F4\u5177\u4F53\u7684\u6807\u8BC6\u7B26 / \u51FD\u6570\u540D / \u62A5\u9519\u539F\u6587\u518D\u8BD5`;let o=[r];for(let i of s.hits){o.push(""),o.push("--- "+i.path+"\uFF08score "+i.score+"\uFF09---");for(let a of i.lines)o.push((a.match?">":" ")+a.no+": "+a.text)}return o.join(`
|
|
113
|
-
`)}function vC(t){let e=wo.get(t);return e?{docs:e.docs.size,tokens:e.inverted.size,postings:mC(e.inverted),avgLen:Number(e.avgLen.toFixed(1)),builtAt:e.builtAt}:{docs:0,tokens:0,postings:0,avgLen:0,builtAt:0}}Xy.exports={DEFAULTS:
|
|
113
|
+
`)}function vC(t){let e=wo.get(t);return e?{docs:e.docs.size,tokens:e.inverted.size,postings:mC(e.inverted),avgLen:Number(e.avgLen.toFixed(1)),builtAt:e.builtAt}:{docs:0,tokens:0,postings:0,avgLen:0,builtAt:0}}Xy.exports={DEFAULTS:Ws,tokenize:vd,scanFiles:Gy,termFreq:zy,search:kC,format:xC,stats:vC,reset:function(t){t?wo.delete(t):wo.clear()},_CACHE:wo,_splitIdentifier:Ky,_looksBinary:Hy,_scoreFiles:Vy,_findLines:Jy}});var nw=ne((j2,tw)=>{var SC=require("path"),Ks={prefixLines:120,suffixLines:40,maxChars:6e3,maxCompletionChars:4e3,minOverlap:4},_C={js:"// ",mjs:"// ",cjs:"// ",jsx:"// ",ts:"// ",tsx:"// ",go:"// ",java:"// ",kt:"// ",c:"// ",h:"// ",cpp:"// ",hpp:"// ",cs:"// ",rs:"// ",swift:"// ",php:"// ",py:"# ",rb:"# ",sh:"# ",bash:"# ",zsh:"# ",yml:"# ",yaml:"# ",toml:"# ",sql:"-- "};function Zy(t){let e=SC.extname(String(t??"")).replace(".","").toLowerCase();return _C[e]||""}function Qy(t,e){let n=String(t).split(`
|
|
114
114
|
`);return n.length<=e?String(t):n.slice(n.length-e).join(`
|
|
115
115
|
`)}function ew(t,e){let n=String(t).split(`
|
|
116
116
|
`);return n.length<=e?String(t):n.slice(0,e).join(`
|
|
117
|
-
`)}function TC(t){let e=Object.assign({},
|
|
118
|
-
`)}return{prompt:l,suffix:c,offset:a,chars:l.length}}function MC(t,e,n){let s=Object.assign({},
|
|
119
|
-
`){n.push(s),s="";continue}if(a==="&"){let l=s.charAt(s.length-1),c=e[i+1];if(l===">"||c===">"){s+=a;continue}n.push(s),s="";continue}s+=a}return n.push(s),n.filter(function(i){return i.trim()!==""})}function cw(t){let e=String(t??""),n="",s="",r=!1;for(let o=0;o<e.length;o++){let i=e[o];if(r){r=!1,n+="Q";continue}if(i==="\\"&&s!=="'"){r=!0;continue}if(s){i===s&&(s="");continue}if(i==='"'||i==="'"){s=i,n+="Q";continue}n+=i}return n}function uw(t){let e=String(t??"");for(let n=0;n<e.length;n++){if(e[n]!==">")continue;let s=n+1;e[s]===">"&&s++;let r=s;for(;e[r]===" "||e[r]===" ";)r++;if(e[r]==="&"&&/[0-9]/.test(e.charAt(r+1))){n=r;continue}let o=/^\/dev\/(null|stdout|stderr|tty)/.exec(e.slice(r));if(o){n=r+o[0].length-1;continue}return e.slice(r).split(/[\s;|&]+/)[0]||"\uFF08\u672A\u6307\u5B9A\uFF09"}return""}function jC(t,e){if((t==="node"||t==="nodejs")&&e.length===2&&e[0]==="--check")return null;if(!e.length)return{reason:t+" \u4E0D\u5E26\u53C2\u6570\u4F1A\u8FDB\u5165\u4EA4\u4E92\u5F0F\u89E3\u91CA\u5668"};for(let n of e)if(!OC.has(n))return{reason:t+" \u5728 Plan \u6A21\u5F0F\u53EA\u5141\u8BB8\u67E5\u7248\u672C\uFF08"+n+" \u53EF\u80FD\u6267\u884C\u4EE3\u7801\u6216\u5199\u6587\u4EF6\uFF09"};return null}function IC(t){let e=0;for(;e<t.length;){let i=t[e];if(i==="-C"||i==="-c"||i==="--git-dir"||i==="--work-tree"||i==="--namespace"){e+=2;continue}if(/^--(git-dir|work-tree|namespace)=/.test(i)){e++;continue}if(/^--no-pager$/.test(i)||/^--paginate$/.test(i)){e++;continue}break}let n=t[e],s=t.slice(e+1);if(!n||/^-/.test(n))return t.some(function(a){return a==="--version"||a==="-v"||a==="--help"||a==="-h"})?null:{reason:"git \u7F3A\u5C11\u5B50\u547D\u4EE4"};if(rw.has(n))return null;if(!EC.has(n))return{reason:"git "+n+" \u4E0D\u5C5E\u4E8E\u53EA\u8BFB\u5B50\u547D\u4EE4\uFF08\u53EF\u7528\uFF1A"+Array.from(rw).slice(0,6).join(" / ")+" \u7B49\uFF09"};if(n==="stash")return s.length?s[0]==="list"||s[0]==="show"?null:{reason:"git stash "+s[0]+" \u4F1A\u6539\u52A8\u6682\u5B58\u533A"}:{reason:"git stash \u4E0D\u5E26\u53C2\u6570\u4F1A\u6682\u5B58\u6539\u52A8"};if(n==="remote")return!s.length||s[0]==="-v"||s[0]==="--verbose"||s[0]==="show"||s[0]==="get-url"?null:{reason:"git remote "+s[0]+" \u4F1A\u6539\u8FDC\u7AEF\u914D\u7F6E"};if(n==="config")return s.some(function(a){return a==="--get"||a==="--get-all"||a==="--get-regexp"||a==="--list"||a==="-l"})?null:{reason:"git config \u53EA\u5141\u8BB8\u8BFB\u53D6\uFF08\u52A0 --get / --list\uFF09"};if(n==="tag")return!s.length||s.some(function(l){return l==="-l"||l==="--list"})||s.every(function(l){return/^-/.test(l)})?null:{reason:"git tag <\u540D\u5B57> \u4F1A\u521B\u5EFA\u6807\u7B7E"};if(s.some(function(i){return ow.test(i)||/^-[dDmMcC]$/.test(i)}))return{reason:"git branch "+(s.find(function(i){return ow.test(i)||/^-[dDmMcC]$/.test(i)})||"")+" \u4F1A\u6539\u52A8\u5206\u652F"};let o=s.some(function(i){return/^-(a|r|v|vv|l|list)$/.test(i)||/^--(list|show-current|contains|merged|no-merged|sort|format|points-at)/.test(i)});return!s.length||o?null:{reason:"git branch <\u540D\u5B57> \u4F1A\u521B\u5EFA\u5206\u652F"}}function NC(t,e){let n=e.find(function(s){return!/^-/.test(s)});return n?iw.has(n)?null:{reason:t+" "+n+" \u4F1A\u5199\u6587\u4EF6\u6216\u6539\u4F9D\u8D56\uFF08Plan \u6A21\u5F0F\u53EA\u5141\u8BB8 "+Array.from(iw).slice(0,4).join(" / ")+" \u7B49\u67E5\u8BE2\u547D\u4EE4\uFF09"}:e.some(function(r){return r==="--version"||r==="-v"||r==="--help"||r==="-h"})||!e.length?null:{reason:t+" \u7684\u8FD9\u7EC4\u53C2\u6570\u65E0\u6CD5\u5224\u65AD\u662F\u5426\u53EA\u8BFB"}}function dw(t){let e=cw(t).trim();if(!e)return null;let n=uw(e);if(n)return{reason:"\u91CD\u5B9A\u5411\u4F1A\u5199\u6587\u4EF6\uFF08\u76EE\u6807\uFF1A"+n+"\uFF09",segment:t.trim()};let s=e.split(/\s+/).filter(Boolean),r=0;for(;s.length&&r++<6;){let l=Si(s[0]);if(!lw.has(l))break;s.shift();let c=0;for(;s.length&&c++<8;){let u=s[0];if(/^-/.test(u)){s.shift();continue}if(/^[A-Za-z_][A-Za-z0-9_]*=/.test(u)){s.shift();continue}if(l==="timeout"&&/^\d+(\.\d+)?[smhd]?$/.test(u)){s.shift();continue}break}}if(!s.length)return null;let o=Si(s[0]),i=s.slice(1),a=t.trim();if(CC.has(o))return{reason:o+" -c \u53EF\u4EE5\u6267\u884C\u4EFB\u610F\u547D\u4EE4\uFF0C\u65E0\u6CD5\u9010\u6761\u6821\u9A8C"};if(sw.has(o))return{reason:sw.get(o)};if(AC.has(o)){let l=jC(o,i);return l?{reason:l.reason}:null}if(o==="tar"&&!i.some(function(c){return c==="-t"||c==="--list"||/^-[a-zA-Z]*t[a-zA-Z]*$/.test(c)}))return{reason:"tar \u53EA\u6709 -t\uFF08\u5217\u8868\uFF09\u662F\u53EA\u8BFB\u7684\uFF0C\u89E3\u538B\u6216\u6253\u5305\u90FD\u4F1A\u5199\u6587\u4EF6"};if(o==="find"){let l=i.find(function(c){return/^-(delete|exec|execdir|ok|okdir|fprint|fprintf|fls)$/.test(c)});if(l)return{reason:"find "+l+" \u4F1A\u6267\u884C\u547D\u4EE4\u6216\u5199\u6587\u4EF6"}}if(o==="sed"){let l=i.find(function(c){return c==="--in-place"||/^--in-place=/.test(c)?!0:/^-[A-Za-z]+$/.test(c)&&/i/.test(c)});if(l)return{reason:"sed "+l+" \u4F1A\u76F4\u63A5\u6539\u6587\u4EF6"}}if(o==="sort"){let l=i.find(function(c){return c==="--output"||/^--output=/.test(c)||/^-o/.test(c)});if(l)return{reason:"sort "+l+" \u4F1A\u628A\u7ED3\u679C\u5199\u5230\u6587\u4EF6"}}if(o==="awk"||o==="gawk"||o==="mawk"){if(/\bsystem\s*\(/.test(a))return{reason:"awk system() \u4F1A\u6267\u884C\u5916\u90E8\u547D\u4EE4"};if(/\bprintf?\b[^;{}]*>/.test(a)||/\|\s*getline/.test(a))return{reason:"awk \u5728\u5F80\u6587\u4EF6\u5199\u6216\u6267\u884C\u7BA1\u9053\u547D\u4EE4"}}if(o==="curl"){let l=i.slice();for(let u=0;u<l.length;u++)/^(-o|--output)$/.test(l[u])&&/^\/dev\/(null|stdout|stderr)$/.test(l[u+1]||"")&&(l.splice(u,2),u--);let c=l.find(function(u){return!!(/^(-o|-O|-T|-d|-F|-c|--output|--remote-name|--upload-file|--data|--data-raw|--data-binary|--form|--cookie-jar)$/.test(u)||/^--(output|upload-file|data|data-raw|data-binary|form|cookie-jar)=/.test(u)||/^(-X|--request)$/.test(u))});if(c)return{reason:"curl "+c+" \u4F1A\u5199\u6587\u4EF6\u6216\u53D1\u5199\u8BF7\u6C42"}}if(o==="git"){let l=IC(i);if(l)return{reason:l.reason}}if(PC.has(o)){let l=NC(o,i);if(l)return{reason:l.reason}}return null}function FC(t){let e=String(t??"");if(!e.trim())return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};if(/\$\(|`|<\(|>\(/.test(e))return{ok:!1,reason:"\u547D\u4EE4\u66FF\u6362\uFF08$() \u53CD\u5F15\u53F7 <() >()\uFF09\u65E0\u6CD5\u9759\u6001\u6821\u9A8C"};let n=_d(e);if(!n.length)return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};for(let s of n){let r=dw(s);if(r)return{ok:!1,reason:r.reason,segment:r.segment||s.trim()}}return{ok:!0}}var LC=function(){try{return Sr().SKIP_DIRS}catch{return[]}}(),fw=Object.create(null);for(let t of LC)fw[String(t).toLowerCase()]=1;var pw=new Set(["cat","bat","less","more","head","tail","nl","strings","od","xxd","hexdump","grep","rg","ag","ack","find","findstr","where","which","ls","dir","tree","du","wc","stat","file","diff","comm","type","get-content","gc","cat","get-childitem","gci","select-string","sls"]),DC=new Set(["powershell","pwsh","cmd","command","bash","sh","zsh","dash","fish"]),RC=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob|g)$/i,$C=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob)=/i,qC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex|not)$/i,BC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex)=/i,UC=new RegExp("(?:^|[^A-Za-z0-9_-])("+Array.from(pw).join("|")+")(?![A-Za-z0-9_-])","i");function Sd(t){return String(t??"").replace(/^["']+/,"").replace(/["']+$/,"")}function WC(t){let e=Sd(t);if(!/[/\\]/.test(e))return"";let n=e.replace(/\\/g,"/").split("/");for(let s of n){let r=s.replace(/["']+$/,"").toLowerCase();if(r&&fw[r])return r}return""}function aw(t,e){let n=!1;for(let s of t){if(n){n=!1;continue}if($C.test(s))continue;if(RC.test(s)){n=!0;continue}if(e){if(BC.test(s))continue;if(qC.test(s)){n=!0;continue}}let r=WC(s);if(r)return r}return""}function KC(t){let e=String(t??"").trim();if(!e)return null;let n=e.split(/\s+/).filter(Boolean),s=0;for(;s<n.length;){let a=Sd(n[s]);if(/^-/.test(a)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(a)||/^\d+(\.\d+)?[smhd]?$/.test(a)){s++;continue}if(lw.has(Si(a))){s++;continue}break}if(s>=n.length)return null;let r=Si(Sd(n[s])).toLowerCase(),o=r==="find"||/(?:^|[^A-Za-z0-9_-])find(?![A-Za-z0-9_-])/i.test(e);if(DC.has(r)){if(!UC.test(e))return null;let a=aw(n.slice(s+1),o);return a?{seg:a,command:r}:null}if(!pw.has(r))return null;let i=aw(n.slice(s+1),o);return i?{seg:i,command:r}:null}function HC(t){let e=String(t??"");if(!e.trim())return null;for(let n of _d(e)){let s=KC(n);if(s)return{seg:s.seg,command:s.command,segment:n.trim()}}return null}hw.exports={check:FC,pathGuard:HC,_splitSegments:_d,_stripQuotes:cw,_redirectTarget:uw,_checkSegment:dw,_baseOf:Si}});var vw=ne((F2,Cd)=>{var
|
|
120
|
-
`),s=-1,r=-1;for(let c=0;c<n.length;c++){let u=n[c].trim();if(s<0&&u===gw){s=c;continue}if(u===yw){r=c;break}}if(s<0)return{ops:[],error:"\u7F3A\u5C11 "+gw+" \u8D77\u59CB\u6807\u8BB0"};if(r<0)return{ops:[],error:"\u7F3A\u5C11 "+yw+" \u7ED3\u675F\u6807\u8BB0"};let o=[],i=null,a=null,l=[];for(let c=s+1;c<r;c++){let u=n[c],d=u.trim();if(d.indexOf(ww)===0){let f=d.slice(ww.length).trim();if(!f){l.push("\u7B2C "+(c+1)+" \u884C\uFF1AAdd File \u7F3A\u5C11\u8DEF\u5F84");continue}i={type:"add",path:f,lines:[]},o.push(i),a="add";continue}if(d.indexOf(bw)===0){let f=d.slice(bw.length).trim();if(!f){l.push("\u7B2C "+(c+1)+" \u884C\uFF1AUpdate File \u7F3A\u5C11\u8DEF\u5F84");continue}i={type:"update",path:f,chunks:[]},o.push(i),a="update";continue}if(d.indexOf(kw)===0){let f=d.slice(kw.length).trim();if(!f){l.push("\u7B2C "+(c+1)+" \u884C\uFF1ADelete File \u7F3A\u5C11\u8DEF\u5F84");continue}i={type:"delete",path:f},o.push(i),a=null;continue}if(!i){d&&l.push("\u7B2C "+(c+1)+' \u884C\uFF1A\u51FA\u73B0\u65E0\u6CD5\u8BC6\u522B\u7684\u6307\u4EE4 "'+d+'"');continue}if(a==="add"){u.charAt(0)==="+"?i.lines.push(u.slice(1)):d===""?i.lines.push(""):l.push("\u7B2C "+(c+1)+' \u884C\uFF1AAdd File \u5185\u5BB9\u884C\u5E94\u4EE5 + \u5F00\u5934\uFF0C\u5F97\u5230 "'+u+'"');continue}if(a==="update"){if(d.indexOf(GC)===0){i.chunks.push({seq:[],del:[],add:[]});continue}let f=i.chunks.length?i.chunks[i.chunks.length-1]:null;if(!f){u.charAt(0)===" "?bo(i).seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(bo(i).seq.push({k:"del",v:u.slice(1)}),bo(i).del.push(u.slice(1))):u.charAt(0)==="+"?(bo(i).seq.push({k:"add",v:u.slice(1)}),bo(i).add.push(u.slice(1))):d===""?bo(i).seq.push({k:"ctx",v:""}):l.push("\u7B2C "+(c+1)+' \u884C\uFF1AUpdate File \u884C\u5E94\u4EE5\u7A7A\u683C / - / + \u5F00\u5934\uFF0C\u5F97\u5230 "'+u+'"');continue}u.charAt(0)===" "?f.seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(f.seq.push({k:"del",v:u.slice(1)}),f.del.push(u.slice(1))):u.charAt(0)==="+"?(f.seq.push({k:"add",v:u.slice(1)}),f.add.push(u.slice(1))):d===""?f.seq.push({k:"ctx",v:""}):l.push("\u7B2C "+(c+1)+' \u884C\uFF1AUpdate File \u884C\u5E94\u4EE5\u7A7A\u683C / - / + \u5F00\u5934\uFF0C\u5F97\u5230 "'+u+'"');continue}}return l.length?{ops:o,error:l.join("\uFF1B")}:o.length?{ops:o}:{ops:[],error:"Patch \u91CC\u6CA1\u6709\u4EFB\u4F55\u6587\u4EF6\u64CD\u4F5C"}}function bo(t){return t.chunks.length||t.chunks.push({context:[],del:[],add:[]}),t.chunks[t.chunks.length-1]}function
|
|
117
|
+
`)}function TC(t){let e=Object.assign({},Ks,t||{}),n=Number(e.maxChars)>0?Math.floor(Number(e.maxChars)):Ks.maxChars,s=Number(e.prefixLines)>0?Math.floor(Number(e.prefixLines)):Ks.prefixLines,r=Number(e.suffixLines)>=0?Math.floor(Number(e.suffixLines)):Ks.suffixLines,o=String(e.text==null?"":e.text),i=o.length,a=Math.floor(Number(e.offset)||0);a=Math.min(Math.max(a,0),i);let l=o.slice(0,a),c=o.slice(a);if(l=Qy(l,s),c=ew(c,r),l.length>n&&(l=l.slice(l.length-n)),!l.trim()){let u=Zy(e.path);u&&(l=u+String(e.path||"")+`
|
|
118
|
+
`)}return{prompt:l,suffix:c,offset:a,chars:l.length}}function MC(t,e,n){let s=Object.assign({},Ks,n||{}),r=String(t??"");if(!r)return"";let o=r.search(/\n[ \t]*\n/);o>=0&&(r=r.slice(0,o));let i=String(e??"");if(i){let l=Math.min(i.length,r.length,400);for(let c=l;c>=Math.max(1,Math.floor(s.minOverlap)||Ks.minOverlap);c--)if(r.endsWith(i.slice(0,c))){r=r.slice(0,r.length-c);break}}let a=Number(s.maxCompletionChars)>0?Number(s.maxCompletionChars):Ks.maxCompletionChars;return r.length>a&&(r=r.slice(0,a)),r}tw.exports={DEFAULTS:Ks,buildPrompt:TC,trimCompletion:MC,commentFor:Zy,_lastLines:Qy,_firstLines:ew}});var mw=ne((N2,hw)=>{var I2=require("path"),lw=new Set(["env","nohup","time","nice","ionice","command","xargs","watch","timeout","stdbuf","caffeinate"]),sw=new Map([["rm","rm \u4F1A\u5220\u9664\u6587\u4EF6"],["rmdir","rmdir \u4F1A\u5220\u9664\u76EE\u5F55"],["unlink","unlink \u4F1A\u5220\u9664\u6587\u4EF6"],["mv","mv \u4F1A\u79FB\u52A8\u6216\u8986\u76D6\u6587\u4EF6"],["cp","cp \u4F1A\u5199\u6587\u4EF6"],["ln","ln \u4F1A\u521B\u5EFA\u94FE\u63A5"],["touch","touch \u4F1A\u521B\u5EFA\u6587\u4EF6\u6216\u6539\u65F6\u95F4\u6233"],["mkdir","mkdir \u4F1A\u521B\u5EFA\u76EE\u5F55"],["mkfifo","mkfifo \u4F1A\u521B\u5EFA\u6587\u4EF6"],["chmod","chmod \u4F1A\u6539\u6743\u9650"],["chown","chown \u4F1A\u6539\u5C5E\u4E3B"],["chgrp","chgrp \u4F1A\u6539\u5C5E\u7EC4"],["chflags","chflags \u4F1A\u6539\u6587\u4EF6\u5C5E\u6027"],["setfacl","setfacl \u4F1A\u6539\u6743\u9650"],["dd","dd \u4F1A\u5199\u8BBE\u5907\u6216\u6587\u4EF6"],["tee","tee \u4F1A\u5199\u6587\u4EF6"],["truncate","truncate \u4F1A\u622A\u65AD\u6587\u4EF6"],["shred","shred \u4F1A\u9500\u6BC1\u6587\u4EF6"],["install","install \u4F1A\u590D\u5236\u6587\u4EF6"],["patch","patch \u4F1A\u6539\u6587\u4EF6"],["zip","zip \u4F1A\u5199\u538B\u7F29\u5305"],["unzip","unzip \u4F1A\u89E3\u538B\u5199\u6587\u4EF6"],["wget","wget \u9ED8\u8BA4\u4F1A\u628A\u54CD\u5E94\u5199\u5230\u6587\u4EF6"],["rsync","rsync \u4F1A\u5199\u6587\u4EF6"],["scp","scp \u4F1A\u5199\u6587\u4EF6"],["sftp","sftp \u4F1A\u5199\u6587\u4EF6"],["ssh","ssh \u4F1A\u5728\u8FDC\u7AEF\u6267\u884C\u4EFB\u610F\u547D\u4EE4"],["kill","kill \u4F1A\u7EC8\u6B62\u8FDB\u7A0B"],["pkill","pkill \u4F1A\u7EC8\u6B62\u8FDB\u7A0B"],["killall","killall \u4F1A\u7EC8\u6B62\u8FDB\u7A0B"],["sudo","sudo \u4F1A\u63D0\u6743"],["su","su \u4F1A\u5207\u6362\u7528\u6237"],["shutdown","shutdown \u4F1A\u5173\u673A"],["reboot","reboot \u4F1A\u91CD\u542F"],["halt","halt \u4F1A\u5173\u673A"],["poweroff","poweroff \u4F1A\u5173\u673A"],["mkfs","mkfs \u4F1A\u683C\u5F0F\u5316"],["diskutil","diskutil \u4F1A\u6539\u78C1\u76D8"],["launchctl","launchctl \u4F1A\u6539\u7CFB\u7EDF\u670D\u52A1"],["defaults","defaults \u4F1A\u6539\u7CFB\u7EDF\u504F\u597D"],["eval","eval \u4F1A\u6267\u884C\u62FC\u63A5\u51FA\u6765\u7684\u547D\u4EE4"],["source","source \u4F1A\u6267\u884C\u811A\u672C"],[".","source \u4F1A\u6267\u884C\u811A\u672C"],["exec","exec \u4F1A\u66FF\u6362\u5F53\u524D\u8FDB\u7A0B"],["npx","npx \u53EF\u80FD\u4E0B\u8F7D\u5E76\u6267\u884C\u4EFB\u610F\u5305"]]),CC=new Set(["sh","bash","zsh","dash","fish","csh","tcsh","ksh","ash","mksh"]),AC=new Set(["node","nodejs","python","python2","python3","ruby","perl","php","osascript","deno","bun","tsx","ts-node"]),OC=new Set(["-v","-V","--version","-h","--help","-?"]),rw=new Set(["status","log","show","diff","blame","grep","ls-files","ls-tree","rev-parse","describe","shortlog","cat-file","reflog","version","help","whatchanged"]),EC=new Set(["branch","tag","remote","stash","config"]),ow=/^(--set-upstream|--unset-upstream|--delete|--move|--copy|--edit-description|--set-url|--add|--remove|--prune|--update|--rename|--progress|--track|--no-track)/,PC=new Set(["npm","yarn","pnpm"]),iw=new Set(["ls","list","ll","la","view","info","outdated","why","ping","search","help"]);function Si(t){let e=String(t??"");if(!e||e===".")return e;let n=e.split("/");return n[n.length-1]||e}function _d(t){let e=String(t??""),n=[],s="",r="",o=!1;for(let i=0;i<e.length;i++){let a=e[i];if(o){s+=a,o=!1;continue}if(a==="\\"&&r!=="'"){s+=a,o=!0;continue}if(r){s+=a,a===r&&(r="");continue}if(a==='"'||a==="'"){r=a,s+=a;continue}if(a==="&"&&e[i+1]==="&"){n.push(s),s="",i++;continue}if(a==="|"&&e[i+1]==="|"){n.push(s),s="",i++;continue}if(a==="|"||a===";"||a===`
|
|
119
|
+
`){n.push(s),s="";continue}if(a==="&"){let l=s.charAt(s.length-1),c=e[i+1];if(l===">"||c===">"){s+=a;continue}n.push(s),s="";continue}s+=a}return n.push(s),n.filter(function(i){return i.trim()!==""})}function cw(t){let e=String(t??""),n="",s="",r=!1;for(let o=0;o<e.length;o++){let i=e[o];if(r){r=!1,n+="Q";continue}if(i==="\\"&&s!=="'"){r=!0;continue}if(s){i===s&&(s="");continue}if(i==='"'||i==="'"){s=i,n+="Q";continue}n+=i}return n}function uw(t){let e=String(t??"");for(let n=0;n<e.length;n++){if(e[n]!==">")continue;let s=n+1;e[s]===">"&&s++;let r=s;for(;e[r]===" "||e[r]===" ";)r++;if(e[r]==="&"&&/[0-9]/.test(e.charAt(r+1))){n=r;continue}let o=/^\/dev\/(null|stdout|stderr|tty)/.exec(e.slice(r));if(o){n=r+o[0].length-1;continue}return e.slice(r).split(/[\s;|&]+/)[0]||"\uFF08\u672A\u6307\u5B9A\uFF09"}return""}function jC(t,e){if((t==="node"||t==="nodejs")&&e.length===2&&e[0]==="--check")return null;if(!e.length)return{reason:t+" \u4E0D\u5E26\u53C2\u6570\u4F1A\u8FDB\u5165\u4EA4\u4E92\u5F0F\u89E3\u91CA\u5668"};for(let n of e)if(!OC.has(n))return{reason:t+" \u5728 Plan \u6A21\u5F0F\u53EA\u5141\u8BB8\u67E5\u7248\u672C\uFF08"+n+" \u53EF\u80FD\u6267\u884C\u4EE3\u7801\u6216\u5199\u6587\u4EF6\uFF09"};return null}function IC(t){let e=0;for(;e<t.length;){let i=t[e];if(i==="-C"||i==="-c"||i==="--git-dir"||i==="--work-tree"||i==="--namespace"){e+=2;continue}if(/^--(git-dir|work-tree|namespace)=/.test(i)){e++;continue}if(/^--no-pager$/.test(i)||/^--paginate$/.test(i)){e++;continue}break}let n=t[e],s=t.slice(e+1);if(!n||/^-/.test(n))return t.some(function(a){return a==="--version"||a==="-v"||a==="--help"||a==="-h"})?null:{reason:"git \u7F3A\u5C11\u5B50\u547D\u4EE4"};if(rw.has(n))return null;if(!EC.has(n))return{reason:"git "+n+" \u4E0D\u5C5E\u4E8E\u53EA\u8BFB\u5B50\u547D\u4EE4\uFF08\u53EF\u7528\uFF1A"+Array.from(rw).slice(0,6).join(" / ")+" \u7B49\uFF09"};if(n==="stash")return s.length?s[0]==="list"||s[0]==="show"?null:{reason:"git stash "+s[0]+" \u4F1A\u6539\u52A8\u6682\u5B58\u533A"}:{reason:"git stash \u4E0D\u5E26\u53C2\u6570\u4F1A\u6682\u5B58\u6539\u52A8"};if(n==="remote")return!s.length||s[0]==="-v"||s[0]==="--verbose"||s[0]==="show"||s[0]==="get-url"?null:{reason:"git remote "+s[0]+" \u4F1A\u6539\u8FDC\u7AEF\u914D\u7F6E"};if(n==="config")return s.some(function(a){return a==="--get"||a==="--get-all"||a==="--get-regexp"||a==="--list"||a==="-l"})?null:{reason:"git config \u53EA\u5141\u8BB8\u8BFB\u53D6\uFF08\u52A0 --get / --list\uFF09"};if(n==="tag")return!s.length||s.some(function(l){return l==="-l"||l==="--list"})||s.every(function(l){return/^-/.test(l)})?null:{reason:"git tag <\u540D\u5B57> \u4F1A\u521B\u5EFA\u6807\u7B7E"};if(s.some(function(i){return ow.test(i)||/^-[dDmMcC]$/.test(i)}))return{reason:"git branch "+(s.find(function(i){return ow.test(i)||/^-[dDmMcC]$/.test(i)})||"")+" \u4F1A\u6539\u52A8\u5206\u652F"};let o=s.some(function(i){return/^-(a|r|v|vv|l|list)$/.test(i)||/^--(list|show-current|contains|merged|no-merged|sort|format|points-at)/.test(i)});return!s.length||o?null:{reason:"git branch <\u540D\u5B57> \u4F1A\u521B\u5EFA\u5206\u652F"}}function NC(t,e){let n=e.find(function(s){return!/^-/.test(s)});return n?iw.has(n)?null:{reason:t+" "+n+" \u4F1A\u5199\u6587\u4EF6\u6216\u6539\u4F9D\u8D56\uFF08Plan \u6A21\u5F0F\u53EA\u5141\u8BB8 "+Array.from(iw).slice(0,4).join(" / ")+" \u7B49\u67E5\u8BE2\u547D\u4EE4\uFF09"}:e.some(function(r){return r==="--version"||r==="-v"||r==="--help"||r==="-h"})||!e.length?null:{reason:t+" \u7684\u8FD9\u7EC4\u53C2\u6570\u65E0\u6CD5\u5224\u65AD\u662F\u5426\u53EA\u8BFB"}}function dw(t){let e=cw(t).trim();if(!e)return null;let n=uw(e);if(n)return{reason:"\u91CD\u5B9A\u5411\u4F1A\u5199\u6587\u4EF6\uFF08\u76EE\u6807\uFF1A"+n+"\uFF09",segment:t.trim()};let s=e.split(/\s+/).filter(Boolean),r=0;for(;s.length&&r++<6;){let l=Si(s[0]);if(!lw.has(l))break;s.shift();let c=0;for(;s.length&&c++<8;){let u=s[0];if(/^-/.test(u)){s.shift();continue}if(/^[A-Za-z_][A-Za-z0-9_]*=/.test(u)){s.shift();continue}if(l==="timeout"&&/^\d+(\.\d+)?[smhd]?$/.test(u)){s.shift();continue}break}}if(!s.length)return null;let o=Si(s[0]),i=s.slice(1),a=t.trim();if(CC.has(o))return{reason:o+" -c \u53EF\u4EE5\u6267\u884C\u4EFB\u610F\u547D\u4EE4\uFF0C\u65E0\u6CD5\u9010\u6761\u6821\u9A8C"};if(sw.has(o))return{reason:sw.get(o)};if(AC.has(o)){let l=jC(o,i);return l?{reason:l.reason}:null}if(o==="tar"&&!i.some(function(c){return c==="-t"||c==="--list"||/^-[a-zA-Z]*t[a-zA-Z]*$/.test(c)}))return{reason:"tar \u53EA\u6709 -t\uFF08\u5217\u8868\uFF09\u662F\u53EA\u8BFB\u7684\uFF0C\u89E3\u538B\u6216\u6253\u5305\u90FD\u4F1A\u5199\u6587\u4EF6"};if(o==="find"){let l=i.find(function(c){return/^-(delete|exec|execdir|ok|okdir|fprint|fprintf|fls)$/.test(c)});if(l)return{reason:"find "+l+" \u4F1A\u6267\u884C\u547D\u4EE4\u6216\u5199\u6587\u4EF6"}}if(o==="sed"){let l=i.find(function(c){return c==="--in-place"||/^--in-place=/.test(c)?!0:/^-[A-Za-z]+$/.test(c)&&/i/.test(c)});if(l)return{reason:"sed "+l+" \u4F1A\u76F4\u63A5\u6539\u6587\u4EF6"}}if(o==="sort"){let l=i.find(function(c){return c==="--output"||/^--output=/.test(c)||/^-o/.test(c)});if(l)return{reason:"sort "+l+" \u4F1A\u628A\u7ED3\u679C\u5199\u5230\u6587\u4EF6"}}if(o==="awk"||o==="gawk"||o==="mawk"){if(/\bsystem\s*\(/.test(a))return{reason:"awk system() \u4F1A\u6267\u884C\u5916\u90E8\u547D\u4EE4"};if(/\bprintf?\b[^;{}]*>/.test(a)||/\|\s*getline/.test(a))return{reason:"awk \u5728\u5F80\u6587\u4EF6\u5199\u6216\u6267\u884C\u7BA1\u9053\u547D\u4EE4"}}if(o==="curl"){let l=i.slice();for(let u=0;u<l.length;u++)/^(-o|--output)$/.test(l[u])&&/^\/dev\/(null|stdout|stderr)$/.test(l[u+1]||"")&&(l.splice(u,2),u--);let c=l.find(function(u){return!!(/^(-o|-O|-T|-d|-F|-c|--output|--remote-name|--upload-file|--data|--data-raw|--data-binary|--form|--cookie-jar)$/.test(u)||/^--(output|upload-file|data|data-raw|data-binary|form|cookie-jar)=/.test(u)||/^(-X|--request)$/.test(u))});if(c)return{reason:"curl "+c+" \u4F1A\u5199\u6587\u4EF6\u6216\u53D1\u5199\u8BF7\u6C42"}}if(o==="git"){let l=IC(i);if(l)return{reason:l.reason}}if(PC.has(o)){let l=NC(o,i);if(l)return{reason:l.reason}}return null}function FC(t){let e=String(t??"");if(!e.trim())return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};if(/\$\(|`|<\(|>\(/.test(e))return{ok:!1,reason:"\u547D\u4EE4\u66FF\u6362\uFF08$() \u53CD\u5F15\u53F7 <() >()\uFF09\u65E0\u6CD5\u9759\u6001\u6821\u9A8C"};let n=_d(e);if(!n.length)return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};for(let s of n){let r=dw(s);if(r)return{ok:!1,reason:r.reason,segment:r.segment||s.trim()}}return{ok:!0}}var LC=function(){try{return Sr().SKIP_DIRS}catch{return[]}}(),fw=Object.create(null);for(let t of LC)fw[String(t).toLowerCase()]=1;var pw=new Set(["cat","bat","less","more","head","tail","nl","strings","od","xxd","hexdump","grep","rg","ag","ack","find","findstr","where","which","ls","dir","tree","du","wc","stat","file","diff","comm","type","get-content","gc","cat","get-childitem","gci","select-string","sls"]),DC=new Set(["powershell","pwsh","cmd","command","bash","sh","zsh","dash","fish"]),RC=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob|g)$/i,$C=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob)=/i,qC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex|not)$/i,BC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex)=/i,UC=new RegExp("(?:^|[^A-Za-z0-9_-])("+Array.from(pw).join("|")+")(?![A-Za-z0-9_-])","i");function Sd(t){return String(t??"").replace(/^["']+/,"").replace(/["']+$/,"")}function WC(t){let e=Sd(t);if(!/[/\\]/.test(e))return"";let n=e.replace(/\\/g,"/").split("/");for(let s of n){let r=s.replace(/["']+$/,"").toLowerCase();if(r&&fw[r])return r}return""}function aw(t,e){let n=!1;for(let s of t){if(n){n=!1;continue}if($C.test(s))continue;if(RC.test(s)){n=!0;continue}if(e){if(BC.test(s))continue;if(qC.test(s)){n=!0;continue}}let r=WC(s);if(r)return r}return""}function KC(t){let e=String(t??"").trim();if(!e)return null;let n=e.split(/\s+/).filter(Boolean),s=0;for(;s<n.length;){let a=Sd(n[s]);if(/^-/.test(a)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(a)||/^\d+(\.\d+)?[smhd]?$/.test(a)){s++;continue}if(lw.has(Si(a))){s++;continue}break}if(s>=n.length)return null;let r=Si(Sd(n[s])).toLowerCase(),o=r==="find"||/(?:^|[^A-Za-z0-9_-])find(?![A-Za-z0-9_-])/i.test(e);if(DC.has(r)){if(!UC.test(e))return null;let a=aw(n.slice(s+1),o);return a?{seg:a,command:r}:null}if(!pw.has(r))return null;let i=aw(n.slice(s+1),o);return i?{seg:i,command:r}:null}function HC(t){let e=String(t??"");if(!e.trim())return null;for(let n of _d(e)){let s=KC(n);if(s)return{seg:s.seg,command:s.command,segment:n.trim()}}return null}hw.exports={check:FC,pathGuard:HC,_splitSegments:_d,_stripQuotes:cw,_redirectTarget:uw,_checkSegment:dw,_baseOf:Si}});var vw=ne((F2,Cd)=>{var os=require("fs"),Hs=require("path"),gw="*** Begin Patch",yw="*** End Patch",ww="*** Add File:",bw="*** Update File:",kw="*** Delete File:",GC="@@";function cn(t){let n=String(t??"").split(`
|
|
120
|
+
`),s=-1,r=-1;for(let c=0;c<n.length;c++){let u=n[c].trim();if(s<0&&u===gw){s=c;continue}if(u===yw){r=c;break}}if(s<0)return{ops:[],error:"\u7F3A\u5C11 "+gw+" \u8D77\u59CB\u6807\u8BB0"};if(r<0)return{ops:[],error:"\u7F3A\u5C11 "+yw+" \u7ED3\u675F\u6807\u8BB0"};let o=[],i=null,a=null,l=[];for(let c=s+1;c<r;c++){let u=n[c],d=u.trim();if(d.indexOf(ww)===0){let f=d.slice(ww.length).trim();if(!f){l.push("\u7B2C "+(c+1)+" \u884C\uFF1AAdd File \u7F3A\u5C11\u8DEF\u5F84");continue}i={type:"add",path:f,lines:[]},o.push(i),a="add";continue}if(d.indexOf(bw)===0){let f=d.slice(bw.length).trim();if(!f){l.push("\u7B2C "+(c+1)+" \u884C\uFF1AUpdate File \u7F3A\u5C11\u8DEF\u5F84");continue}i={type:"update",path:f,chunks:[]},o.push(i),a="update";continue}if(d.indexOf(kw)===0){let f=d.slice(kw.length).trim();if(!f){l.push("\u7B2C "+(c+1)+" \u884C\uFF1ADelete File \u7F3A\u5C11\u8DEF\u5F84");continue}i={type:"delete",path:f},o.push(i),a=null;continue}if(!i){d&&l.push("\u7B2C "+(c+1)+' \u884C\uFF1A\u51FA\u73B0\u65E0\u6CD5\u8BC6\u522B\u7684\u6307\u4EE4 "'+d+'"');continue}if(a==="add"){u.charAt(0)==="+"?i.lines.push(u.slice(1)):d===""?i.lines.push(""):l.push("\u7B2C "+(c+1)+' \u884C\uFF1AAdd File \u5185\u5BB9\u884C\u5E94\u4EE5 + \u5F00\u5934\uFF0C\u5F97\u5230 "'+u+'"');continue}if(a==="update"){if(d.indexOf(GC)===0){i.chunks.push({seq:[],del:[],add:[]});continue}let f=i.chunks.length?i.chunks[i.chunks.length-1]:null;if(!f){u.charAt(0)===" "?bo(i).seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(bo(i).seq.push({k:"del",v:u.slice(1)}),bo(i).del.push(u.slice(1))):u.charAt(0)==="+"?(bo(i).seq.push({k:"add",v:u.slice(1)}),bo(i).add.push(u.slice(1))):d===""?bo(i).seq.push({k:"ctx",v:""}):l.push("\u7B2C "+(c+1)+' \u884C\uFF1AUpdate File \u884C\u5E94\u4EE5\u7A7A\u683C / - / + \u5F00\u5934\uFF0C\u5F97\u5230 "'+u+'"');continue}u.charAt(0)===" "?f.seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(f.seq.push({k:"del",v:u.slice(1)}),f.del.push(u.slice(1))):u.charAt(0)==="+"?(f.seq.push({k:"add",v:u.slice(1)}),f.add.push(u.slice(1))):d===""?f.seq.push({k:"ctx",v:""}):l.push("\u7B2C "+(c+1)+' \u884C\uFF1AUpdate File \u884C\u5E94\u4EE5\u7A7A\u683C / - / + \u5F00\u5934\uFF0C\u5F97\u5230 "'+u+'"');continue}}return l.length?{ops:o,error:l.join("\uFF1B")}:o.length?{ops:o}:{ops:[],error:"Patch \u91CC\u6CA1\u6709\u4EFB\u4F55\u6587\u4EF6\u64CD\u4F5C"}}function bo(t){return t.chunks.length||t.chunks.push({context:[],del:[],add:[]}),t.chunks[t.chunks.length-1]}function rs(t,e,n){if(e.error)return{ok:!1,error:e.error};let s=n||{},r=typeof s.resolve=="function"?s.resolve:function(l){return Hs.resolve(t,l)},o=e.ops,i=Object.create(null),a=[];for(let l of o){let c=l.path,u;try{u=r(c)}catch(d){return{ok:!1,error:d.message}}if(i[c])return{ok:!1,error:"\u8DEF\u5F84\u91CD\u590D\u51FA\u73B0\uFF1A"+c};if(i[c]=l.type,l.type==="add"){if(os.existsSync(u))return{ok:!1,error:"Add File \u4F46\u6587\u4EF6\u5DF2\u5B58\u5728\uFF1A"+c};a.push({type:"add",rel:c,abs:u,content:l.lines.join(`
|
|
121
121
|
`)+(l.lines.length?`
|
|
122
|
-
`:"")});continue}if(l.type==="delete"){if(!
|
|
122
|
+
`:"")});continue}if(l.type==="delete"){if(!os.existsSync(u))return{ok:!1,error:"Delete File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};if(!os.statSync(u).isFile())return{ok:!1,error:"Delete File \u76EE\u6807\u4E0D\u662F\u6587\u4EF6\uFF1A"+c};let d="";try{d=os.readFileSync(u,"utf8")}catch{d=""}a.push({type:"delete",rel:c,abs:u,before:d});continue}if(l.type==="update"){if(!os.existsSync(u))return{ok:!1,error:"Update File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};let d;try{d=os.readFileSync(u,"utf8")}catch(p){return{ok:!1,error:"\u8BFB\u53D6\u5931\u8D25 "+c+"\uFF1A"+p.message}}let f=xw(d,l.chunks);if(f.error)return{ok:!1,error:c+"\uFF1A"+f.error};a.push({type:"update",rel:c,abs:u,before:d,content:f.content,changed:f.changed});continue}}return{ok:!0,plan:a}}function xw(t,e){if(!e.length)return{error:"Update File \u6CA1\u6709\u4EFB\u4F55 @@ \u5757"};let n=t.split(`
|
|
123
123
|
`),s=0,r=0;for(let o=0;o<e.length;o++){let i=e[o];if(!i.seq.length)return{error:"\u7B2C "+(o+1)+" \u4E2A @@ \u5757\u4E3A\u7A7A"};let a=[];for(let f of i.seq)(f.k==="ctx"||f.k==="del")&&a.push(f.v);let l=zC(n,a,r);if(l<0)return{error:"\u7B2C "+(o+1)+" \u4E2A @@ \u5757\u7684\u4E0A\u4E0B\u6587\u5728\u6587\u4EF6\u91CC\u627E\u4E0D\u5230\uFF08anchor="+JSON.stringify(a.slice(0,3))+"\uFF09"};let c=[];for(let f of i.seq)(f.k==="ctx"||f.k==="add")&&c.push(f.v);let u=n.slice(0,l),d=n.slice(l+a.length);n=u.concat(c,d),r=l+c.length,(i.del.length||i.add.length)&&s++}return{content:n.join(`
|
|
124
|
-
`),changed:s}}function zC(t,e,n){if(!e.length)return n;let s=Math.max(0,n||0);e:for(let r=s;r<=t.length-e.length;r++){for(let o=0;o<e.length;o++)if(t[r+o]!==e[o])continue e;return r}return-1}function Td(t,e,n){let s=
|
|
124
|
+
`),changed:s}}function zC(t,e,n){if(!e.length)return n;let s=Math.max(0,n||0);e:for(let r=s;r<=t.length-e.length;r++){for(let o=0;o<e.length;o++)if(t[r+o]!==e[o])continue e;return r}return-1}function Td(t,e,n){let s=rs(t,e);if(!s.ok)return{ok:!1,error:s.error};let r=[];for(let o of s.plan)o.type==="add"?(os.mkdirSync(Hs.dirname(o.abs),{recursive:!0}),os.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"add"})):o.type==="update"?(os.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"update"})):o.type==="delete"&&(os.rmSync(o.abs,{force:!0}),r.push({rel:o.rel,action:"delete"}));return{ok:!0,results:r}}function Md(t){if(!t.ok)return"apply_patch \u5931\u8D25\uFF1A"+t.error;let e={add:0,update:0,delete:0},n=t.results.map(function(s){return e[s.action]++," "+s.action+" "+s.rel});return"apply_patch \u6210\u529F\uFF1A\u65B0\u589E "+e.add+" / \u4FEE\u6539 "+e.update+" / \u5220\u9664 "+e.delete+"\uFF0C\u5171 "+t.results.length+` \u4E2A\u6587\u4EF6
|
|
125
125
|
`+n.join(`
|
|
126
|
-
`)}Cd.exports={parsePatch:cn,validatePatch:
|
|
126
|
+
`)}Cd.exports={parsePatch:cn,validatePatch:rs,applyChunks:xw,applyPatch:Td,formatPatchResult:Md};require.main===Cd&&VC();function VC(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Hs.join(t.tmpdir(),"luban-patch-")),s=function(B,H){let $=Hs.join(n,B);e.mkdirSync(Hs.dirname($),{recursive:!0}),e.writeFileSync($,H)},r=function(B){return e.readFileSync(Hs.join(n,B),"utf8")};s("a.js",`const a = 1;
|
|
127
127
|
const b = 2;
|
|
128
128
|
const c = 3;
|
|
129
129
|
`),s("old.js",`legacy
|
|
130
130
|
`);let o=0,i=0,a=function(B,H,$){H?(o++,console.log(" ok "+B)):(i++,console.log(" FAIL "+B+($?" :: "+$:"")))},l=["*** Begin Patch","*** Add File: new.js","+const fresh = true;","+","+const two = 2;","*** Update File: a.js","@@"," const a = 1;","-const b = 2;","+const b = 20;"," const c = 3;","*** Delete File: old.js","*** End Patch"].join(`
|
|
131
|
-
`),c=cn(l);a("parse \u65E0\u9519\u8BEF",!c.error,c.error),a("parse \u4E09\u4E2A op",c.ops.length===3),a("add \u5185\u5BB9\u53BB\u524D\u7F00",c.ops[0].lines.join("|")==="const fresh = true;||const two = 2;");let u=
|
|
131
|
+
`),c=cn(l);a("parse \u65E0\u9519\u8BEF",!c.error,c.error),a("parse \u4E09\u4E2A op",c.ops.length===3),a("add \u5185\u5BB9\u53BB\u524D\u7F00",c.ops[0].lines.join("|")==="const fresh = true;||const two = 2;");let u=rs(n,c);a("validate \u901A\u8FC7",u.ok,u.error),a("update \u5185\u5BB9\u6B63\u786E",u.plan[1].content===`const a = 1;
|
|
132
132
|
const b = 20;
|
|
133
133
|
const c = 3;
|
|
134
134
|
`,JSON.stringify(u.plan[1]&&u.plan[1].content));let d=Td(n,c);a("apply \u6210\u529F",d.ok,d.error),a("add \u843D\u76D8",r("new.js")===`const fresh = true;
|
|
@@ -137,7 +137,7 @@ const two = 2;
|
|
|
137
137
|
`),a("update \u843D\u76D8",r("a.js")===`const a = 1;
|
|
138
138
|
const b = 20;
|
|
139
139
|
const c = 3;
|
|
140
|
-
`),a("delete \u843D\u76D8",!e.existsSync(
|
|
140
|
+
`),a("delete \u843D\u76D8",!e.existsSync(Hs.join(n,"old.js"))),s("multi.js",`l1
|
|
141
141
|
l2
|
|
142
142
|
l3
|
|
143
143
|
l4
|
|
@@ -151,30 +151,30 @@ L5
|
|
|
151
151
|
`,JSON.stringify(r("multi.js"))),s("ctx.js",`alpha
|
|
152
152
|
beta
|
|
153
153
|
`);let h=["*** Begin Patch","*** Update File: ctx.js","@@"," alpha","-gamma","+delta","*** End Patch"].join(`
|
|
154
|
-
`),m=
|
|
154
|
+
`),m=rs(n,cn(h));a("\u4E0A\u4E0B\u6587\u627E\u4E0D\u5230\u62A5\u9519",!m.ok&&/找不到/.test(m.error),m.error),a("\u5931\u8D25\u4E0D\u843D\u76D8",r("ctx.js")===`alpha
|
|
155
155
|
beta
|
|
156
|
-
`);let w=
|
|
156
|
+
`);let w=rs(n,cn(`*** Begin Patch
|
|
157
157
|
*** Add File: a.js
|
|
158
158
|
+x
|
|
159
|
-
*** End Patch`));a("Add \u5DF2\u5B58\u5728\u62A5\u9519",!w.ok&&/已存在/.test(w.error),w.error);let g=
|
|
159
|
+
*** End Patch`));a("Add \u5DF2\u5B58\u5728\u62A5\u9519",!w.ok&&/已存在/.test(w.error),w.error);let g=rs(n,cn(`*** Begin Patch
|
|
160
160
|
*** Delete File: nope.js
|
|
161
161
|
*** End Patch`));a("Delete \u4E0D\u5B58\u5728\u62A5\u9519",!g.ok&&/不存在/.test(g.error),g.error),a("\u7F3A Begin \u62A5\u9519",!!cn(`*** Add File: x
|
|
162
162
|
+y`).error),a("\u7F3A End \u62A5\u9519",!!cn(`*** Begin Patch
|
|
163
163
|
*** Add File: x
|
|
164
164
|
+y`).error),a("\u7A7A patch \u62A5\u9519",!!cn(`*** Begin Patch
|
|
165
|
-
*** End Patch`).error);let b=
|
|
165
|
+
*** End Patch`).error);let b=rs(n,cn("```patch\n*** Begin Patch\n*** Add File: fenced.js\n+ok\n*** End Patch\n```"));a("\u5BB9\u9519\u4EE3\u7801\u56F4\u680F",b.ok,b.error);let _=rs(n,cn(`*** Begin Patch
|
|
166
166
|
*** Add File: dup.js
|
|
167
167
|
+a
|
|
168
168
|
*** Add File: dup.js
|
|
169
169
|
+b
|
|
170
170
|
*** End Patch`));a("\u8DEF\u5F84\u91CD\u590D\u62A5\u9519",!_.ok&&/重复/.test(_.error),_.error),s("guard.js",`safe
|
|
171
|
-
`);let A=
|
|
171
|
+
`);let A=rs(n,cn(`*** Begin Patch
|
|
172
172
|
*** Update File: guard.js
|
|
173
173
|
@@
|
|
174
174
|
safe
|
|
175
175
|
*** Delete File: old2.js
|
|
176
|
-
*** End Patch`),{resolve:function(B){if(B==="old2.js")throw new Error("\u8DEF\u5F84\u8D8A\u754C\uFF1A"+B);return
|
|
177
|
-
`);let F=
|
|
176
|
+
*** End Patch`),{resolve:function(B){if(B==="old2.js")throw new Error("\u8DEF\u5F84\u8D8A\u754C\uFF1A"+B);return Hs.join(n,B)}});a("\u81EA\u5B9A\u4E49 resolve \u629B\u9519\u8F6C\u6210\u6821\u9A8C\u5931\u8D25",!A.ok&&/越界/.test(A.error),A.error),s("del.js",`keep me
|
|
177
|
+
`);let F=rs(n,cn(`*** Begin Patch
|
|
178
178
|
*** Delete File: del.js
|
|
179
179
|
*** End Patch`));a("delete \u5E26 before \u5907\u4EFD",F.ok&&F.plan[0].before===`keep me
|
|
180
180
|
`,JSON.stringify(F.plan[0]&&F.plan[0].before)),a("format \u6210\u529F",/成功/.test(Md(d))),a("format \u5931\u8D25",/失败/.test(Md({ok:!1,error:"x"}))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
|
|
@@ -182,15 +182,15 @@ patch selftest: `+o+" passed, "+i+" failed"),process.exit(i?1:0)}});var Tw=ne((L
|
|
|
182
182
|
`+o.join(`
|
|
183
183
|
`);return r.total>o.length&&(i+=`
|
|
184
184
|
...[\u8BCA\u65AD\u5DF2\u8FBE\u4E0A\u9650 `+o.length+" \u6761\uFF0C\u5DF2\u622A\u65AD\uFF1B\u5148\u4FEE error \u518D\u91CD\u8BFB]"),i}function Ad(t){return _i(t).error>0}Od.exports={normalizeDiag:ko,summarize:_i,formatLints:ml,hasErrors:Ad,SEVERITY:_w};require.main===Od&&JC();function JC(){let t=0,e=0,n=function(u,d,f){d?(t++,console.log(" ok "+u)):(e++,console.log(" FAIL "+u+(f?" :: "+f:"")))},s=function(u,d,f,p,h,m){return{severity:u,range:{start:{line:d,character:f},end:{line:d,character:f+3}},message:p,source:h,code:m}},r={"/a.js":[s(0,9,0,"Unexpected token '}'","eslint","E999"),s(1,2,4,"unused var","eslint")],"/b.ts":[s(0,0,0,"Type error","tsc","TS2345")],"/c.js":[s(2,4,1,"info thing"),s(3,5,1,"hint thing")]},o=_i(r);n("total 5",o.total===5,JSON.stringify(o)),n("error 2",o.error===2),n("warning 1",o.warning===1),n("files 3",o.files===3),n("error \u591A\u7684\u6587\u4EF6\u6392\u524D",o.byFile[0].file==="/a.js",JSON.stringify(o.byFile.map(u=>u.file)));let i=ko(s(0,9,0,"x"));n("\u884C\u53F7\u8F6C 1 \u57FA",i.line===10&&i.col===1,JSON.stringify(i));let a=ml(r);n("format \u542B error \u8BA1\u6570",/error 2/.test(a)),n("format \u542B\u6587\u4EF6:\u884C:\u5217",/\/a\.js:10:1/.test(a),a),n("format \u542B source",/\[eslint E999\]/.test(a)),n("error \u6392\u5728 warning \u524D",a.indexOf("ERROR")<a.indexOf("WARNING")),n("\u7A7A\u8BCA\u65AD\u63D0\u793A",/没有诊断/.test(ml({}))),n("\u7A7A\u8BCA\u65AD hasErrors false",Ad({})===!1),n("\u6709 error \u65F6 hasErrors true",Ad(r)===!0);let l={"/x.js":[]};for(let u=0;u<150;u++)l["/x.js"].push(s(1,u,0,"w"+u));let c=ml(l,{maxDiags:20});n("\u622A\u65AD\u5230 20 \u6761",(c.match(/^WARNING/gm)||[]).length===20,String((c.match(/^WARNING/gm)||[]).length)),n("\u622A\u65AD\u6709\u63D0\u793A",/已截断/.test(c)),n("normalize null \u5B89\u5168",ko(null)===null),n("normalize \u7F3A range \u5B89\u5168",ko({message:"x"}).severity==="error"),n("summarize undefined \u5B89\u5168",_i(void 0).total===0),console.log(`
|
|
185
|
-
lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var Ew=ne((D2,Ow)=>{var Ai=require("fs"),XC=require("path"),Mw=24,Cw=120,Mi=[{key:"today",label:"\u4ECA\u5929",days:1},{key:"7d",label:"\u8FD1 7 \u5929",days:7},{key:"30d",label:"\u8FD1 30 \u5929",days:30},{key:"all",label:"\u5168\u90E8",days:0}];function Ed(t){return(t<10?"0":"")+t}function Oi(t){let e=t instanceof Date?t:new Date(Number(t));return isNaN(e.getTime())?new Date:e}function bl(t){let e=Oi(t);return e.getFullYear()+"-"+Ed(e.getMonth()+1)+"-"+Ed(e.getDate())}function Ci(t){let e=Oi(t);return e.getFullYear()+"-"+Ed(e.getMonth()+1)}function xo(t){let e=Oi(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0).getTime()}function YC(t,e){let n=e==null?Date.now():Number(e),s=Mi.find(function(i){return i.key===String(t||"")})||Mi[1];if(!s.days)return{key:s.key,label:s.label,from:0,to:n,days:0};let r=Oi(n),o=new Date(r.getFullYear(),r.getMonth(),r.getDate()-(s.days-1),0,0,0,0).getTime();return{key:s.key,label:s.label,from:o,to:n,days:s.days}}function Pn(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function
|
|
185
|
+
lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var Ew=ne((D2,Ow)=>{var Ai=require("fs"),XC=require("path"),Mw=24,Cw=120,Mi=[{key:"today",label:"\u4ECA\u5929",days:1},{key:"7d",label:"\u8FD1 7 \u5929",days:7},{key:"30d",label:"\u8FD1 30 \u5929",days:30},{key:"all",label:"\u5168\u90E8",days:0}];function Ed(t){return(t<10?"0":"")+t}function Oi(t){let e=t instanceof Date?t:new Date(Number(t));return isNaN(e.getTime())?new Date:e}function bl(t){let e=Oi(t);return e.getFullYear()+"-"+Ed(e.getMonth()+1)+"-"+Ed(e.getDate())}function Ci(t){let e=Oi(t);return e.getFullYear()+"-"+Ed(e.getMonth()+1)}function xo(t){let e=Oi(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0).getTime()}function YC(t,e){let n=e==null?Date.now():Number(e),s=Mi.find(function(i){return i.key===String(t||"")})||Mi[1];if(!s.days)return{key:s.key,label:s.label,from:0,to:n,days:0};let r=Oi(n),o=new Date(r.getFullYear(),r.getMonth(),r.getDate()-(s.days-1),0,0,0,0).getTime();return{key:s.key,label:s.label,from:o,to:n,days:s.days}}function Pn(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function vs(t,e){let n=String(t??"");return n.length>e?n.slice(0,e):n}function gl(t){let e=Number(t);return!isFinite(e)||e<=0?0:Number(Math.min(1,e).toFixed(3))}function ZC(t,e,n){let s=t||{},r=e||{},o=function(){let f=Number(s.ts);if(isFinite(f)&&f>0)return Math.floor(f);let p=n==null?Date.now():Number(n);return isFinite(p)&&p>0?Math.floor(p):Date.now()}(),i=Pn(r.promptTokens),a=Pn(r.completionTokens),l=Pn(r.totalTokens)||i+a,c=Math.min(Pn(r.cachedTokens),i),u=Pn(r.contextTokens),d=Pn(r.window);return{v:1,at:new Date(o).toISOString(),ts:o,day:bl(o),provider:vs(s.provider,60),model:vs(s.model||r.model,120),modelKey:vs(s.modelKey,160),mode:vs(s.mode,20)||"agent",source:vs(s.source,20),session:vs(s.session,80),requests:Pn(r.requests),promptTokens:i,completionTokens:a,totalTokens:l,cachedTokens:c,contextTokens:u,window:d,hit:r.hit!=null?gl(r.hit):i>0?gl(c/i):0,percent:r.percent!=null?gl(r.percent):d>0?gl(u/d):0,estimated:!!r.estimated,partial:!!r.partial}}function Pd(t,e){return XC.join(t,e+".jsonl")}function QC(t){Ai.mkdirSync(t,{recursive:!0,mode:448})}function jd(t){let e=[];try{e=Ai.readdirSync(t)}catch{return[]}let n=[];for(let s of e)/^\d{4}-\d{2}\.jsonl$/.test(s)&&n.push(s.slice(0,-6));return n.sort(),n}function Aw(t,e){let n=function(){let r=Oi(e??Date.now());return new Date(r.getFullYear(),r.getMonth()-(Mw-1),1,0,0,0,0).getTime()}(),s=[];for(let r of jd(t)){let o=new Date(Number(r.slice(0,4)),Number(r.slice(5,7))-1,1,0,0,0,0).getTime();if(!(!isFinite(o)||o>=n))try{Ai.unlinkSync(Pd(t,r)),s.push(r)}catch{}}return s}function eA(t,e){if(!t)return{ok:!1,error:"dir \u4E0D\u80FD\u4E3A\u7A7A"};if(!e||!e.ts)return{ok:!1,error:"record \u7F3A\u5C11 ts"};try{QC(t);let n=Pd(t,Ci(e.ts));return Ai.appendFileSync(n,JSON.stringify(e)+`
|
|
186
186
|
`,{mode:384}),Aw(t,Math.max(Number(e.ts)||0,Date.now())),{ok:!0,file:n,month:Ci(e.ts)}}catch(n){return{ok:!1,error:String(n&&n.message||n)}}}function tA(t,e,n){let s=Number(e)>0?Number(e):0,r=Number(n)>0?Number(n):Date.now(),o=s>0?Ci(s):"",i=Ci(r),a=jd(t).filter(function(u){return o&&u<o?!1:u<=i}),l=[],c=0;for(let u of a){let d="";try{d=Ai.readFileSync(Pd(t,u),"utf8")}catch{continue}for(let f of d.split(`
|
|
187
|
-
`)){let p=f.trim();if(!p)continue;let h=null;try{h=JSON.parse(p)}catch{c++;continue}if(!h||!h.ts){c++;continue}let m=Number(h.ts);!isFinite(m)||m<s||m>r||l.push(h)}}return l.sort(function(u,d){return Number(u.ts)-Number(d.ts)}),{rows:l,files:a.map(function(u){return u+".jsonl"}),bad:c}}function Ti(){return{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0}}function yl(t,e){t.turns++,t.requests+=Pn(e.requests),t.promptTokens+=Pn(e.promptTokens),t.completionTokens+=Pn(e.completionTokens),t.totalTokens+=Pn(e.totalTokens),t.cachedTokens+=Pn(e.cachedTokens),e.estimated&&t.estimatedTurns++,e.partial&&t.partialTurns++}function wl(t){return t.hit=t.promptTokens>0?Number(Math.min(1,t.cachedTokens/t.promptTokens).toFixed(3)):0,t}function nA(t,e,n,s){let r=Object.keys(t).sort();if(!r.length)return[];let o=e>0?xo(e):xo(t[r[0]].ts),i=n>0?xo(n):xo(t[r[r.length-1]].ts),a=Math.round((i-o)/864e5)+1,l=s>0?Math.min(a,s):a;if(l>Cw)return r.map(function(u){return t[u]});let c=[];for(let u=0;u<l;u++){let d=new Date(o);d.setDate(d.getDate()+u);let f=bl(d.getTime());c.push(t[f]||Object.assign({day:f,ts:d.getTime()},Ti(),{hit:0,empty:!0}))}return c}function sA(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Ti(),o=Object.create(null),i=Object.create(null),a=Object.create(null);for(let d of s){yl(r,d);let f=String(d.modelKey||"")||String(d.provider||"")+"::"+String(d.model||"")||"\u672A\u77E5\u6A21\u578B";o[f]||(o[f]=Object.assign({key:f,provider:xs(d.provider,60),model:xs(d.model,120)||"\u672A\u77E5\u6A21\u578B"},Ti())),yl(o[f],d);let p=xs(d.mode,20)||"agent";i[p]||(i[p]=Object.assign({mode:p},Ti())),yl(i[p],d);let h=String(d.day||bl(d.ts));a[h]||(a[h]=Object.assign({day:h,ts:xo(d.ts)},Ti())),yl(a[h],d)}let l=Object.keys(o).map(function(d){let f=wl(o[d]);return f.share=r.totalTokens>0?Number((f.totalTokens/r.totalTokens).toFixed(3)):0,f}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.key).localeCompare(String(f.key))}),c=Object.keys(i).map(function(d){return wl(i[d])}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.mode).localeCompare(String(f.mode))}),u=nA(a,Number(n.from)||0,Number(n.to)||0,Number(n.days)||0).map(function(d){return d.empty?d:wl(d)});return s.length?Object.assign(wl(r),{byModel:l,byMode:c,byDay:u}):{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0,hit:0,byModel:[],byMode:[],byDay:[]}}function rA(t){let e=Mi.find(function(n){return n.key===String(t||"")});return e?e.label:Mi[1].label}Ow.exports={MONTHS_KEEP:Mw,MAX_FILL_DAYS:Cw,RANGES:Mi,dayOf:bl,monthOf:Ci,startOfDay:xo,rangeOf:YC,rangeLabel:rA,row:ZC,append:eA,read:tA,monthFiles:jd,prune:Aw,aggregate:sA}});var Fw=ne((R2,Nw)=>{var Bt=require("fs"),oA=require("os"),Hs=require("path"),kl=Hs.join(oA.homedir(),".luban","attachments"),iA=4,So=5*1024*1024,aA=Math.ceil(So*4/3)+64,lA=2e3,Id={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},Pw={png:"image/png",jpg:"image/jpeg",webp:"image/webp",gif:"image/gif"},cA=/^[A-Za-z0-9_-]+$/,Nd=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,uA=/^data:(image\/(?:png|jpeg|webp|gif));base64,([A-Za-z0-9+/=\s]+)$/;function Ei(t){return(t<10?"0":"")+t}function dA(t){let e=t||new Date;return e.getFullYear()+Ei(e.getMonth()+1)+Ei(e.getDate())+"-"+Ei(e.getHours())+Ei(e.getMinutes())+Ei(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function jw(t){let e=uA.exec(String(t??""));return e?{mime:e[1],b64:e[2].replace(/\s+/g,"")}:null}function Iw(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file);if(!Nd.test(e)||e.length>120)return null;let n=String(t.mime==null?"":t.mime);if(!Id[n]||e.slice(e.lastIndexOf(".")+1)!==Id[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0||s>So?null:{file:e,mime:n,bytes:s}}function vo(t){let e=String(t??"");return cA.test(e)?Hs.join(kl,e):""}function fA(t,e){let n=vo(t);if(!n)return null;let s=String(e??"");if(s.length>aA)return null;let r=jw(s);if(!r)return null;let o=Buffer.from(r.b64,"base64");if(!o.length||o.length>So)return null;let i=dA()+"."+Id[r.mime];try{Bt.mkdirSync(n,{recursive:!0,mode:448});let a=Hs.join(n,i),l=a+".tmp-"+Math.random().toString(36).slice(2,6);return Bt.writeFileSync(l,o,{mode:384}),Bt.renameSync(l,a),{file:i,mime:r.mime,bytes:o.length}}catch{return null}}function pA(t,e){let n=vo(t),s=Iw(e);if(!n||!s)return"";try{let r=Hs.join(n,s.file),o=Bt.statSync(r);return!o.isFile()||o.size<=0||o.size>So?"":"data:"+s.mime+";base64,"+Bt.readFileSync(r).toString("base64")}catch{return""}}function hA(t,e){let n=vo(t),s=String(e??"");if(!n)return{ok:!1,error:"bad_session"};if(!Nd.test(s)||s.length>120)return{ok:!1,error:"bad_file"};let r=Pw[s.slice(s.lastIndexOf(".")+1)]||"";if(!r)return{ok:!1,error:"bad_file"};try{let o=Hs.join(n,s),i=Bt.statSync(o);return!i.isFile()||i.size<=0?{ok:!1,error:"missing"}:i.size>So?{ok:!1,error:"too_large"}:{ok:!0,mime:r,dataUrl:"data:"+r+";base64,"+Bt.readFileSync(o).toString("base64")}}catch{return{ok:!1,error:"missing"}}}function mA(t){let e=vo(t);if(!e)return{removed:0};let n=0;try{n=Bt.readdirSync(e).length}catch{n=0}try{Bt.rmSync(e,{recursive:!0,force:!0})}catch{}return{removed:n}}function gA(t,e){let n=vo(t),s=vo(e);if(!n||!s||n===s)return{copied:0,failed:0};let r=[];try{r=Bt.readdirSync(n)}catch{return{copied:0,failed:0}}let o=0,i=0;try{Bt.mkdirSync(s,{recursive:!0,mode:448})}catch{return{copied:0,failed:0}}for(let a of r){let l=a.slice(a.lastIndexOf(".")+1);if(!Nd.test(a)||a.length>120||!Pw[l])continue;let c=Hs.join(n,a),u=Hs.join(s,a);try{Bt.copyFileSync(c,u);try{Bt.chmodSync(u,384)}catch{}o++}catch{i++}}return{copied:o,failed:i}}function yA(t){let e=t instanceof Set?t:new Set(t||[]),n=[];try{n=Bt.readdirSync(kl,{withFileTypes:!0})}catch{return{removed:0,kept:0}}let s=0,r=0;for(let o of n)if(o.isDirectory()){if(e.has(o.name)){r++;continue}try{Bt.rmSync(Hs.join(kl,o.name),{recursive:!0,force:!0}),s++}catch{r++}}return{removed:s,kept:r}}function wA(t,e){let n=(e||[]).filter(function(r){return typeof r=="string"&&r.indexOf("data:image/")===0});if(!n.length)return t;let s=[];t!=null&&t!==""&&s.push({type:"text",text:String(t)});for(let r of n)s.push({type:"image_url",image_url:{url:r}});return s}Nw.exports={ATTACH_DIR:kl,MAX_IMAGES:iA,MAX_BYTES:So,IMG_CHARS:lA,parseDataUrl:jw,validateEntry:Iw,saveImage:fA,readDataUrl:pA,readPreview:hA,removeSession:mA,copySession:gA,sweepOrphans:yA,toContent:wA}});var Yw=ne(($2,Xw)=>{var Gs=require("fs"),bA=require("net"),Lw=require("os"),vs=require("path"),kA=require("http"),Rw=require("crypto"),{spawn:xA,execSync:vA}=require("child_process"),$w=64*1024*1024,qw=25e3,ji=15e3,Fd=200;function Bw(){let t=process.env||{},e=[],n=function(s){s&&e.push(String(s))};if(process.platform==="win32"){let s=[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA,t.ProgramW6432];for(let r of s)n(r&&vs.join(r,"Google","Chrome","Application","chrome.exe")),n(r&&vs.join(r,"Microsoft","Edge","Application","msedge.exe")),n(r&&vs.join(r,"Chromium","Application","chrome.exe"))}else if(process.platform==="darwin")n("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),n("/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"),n("/Applications/Chromium.app/Contents/MacOS/Chromium"),n("/Applications/Brave Browser.app/Contents/MacOS/Brave Browser");else{let s=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","brave-browser"],r=String(t.PATH||"").split(vs.delimiter).filter(Boolean);for(let o of r)for(let i of s)n(vs.join(o,i))}return e}function Uw(t){let e=String(t||"");if(e.indexOf("/snap/")===0)return!0;try{let n=Gs.realpathSync(e);return n==="/usr/bin/snap"||/\/snapd\/snapd$/.test(n)}catch{return/\/bin\/snap$/.test(e)}}function Ww(t){return Uw(t)?vs.join(Lw.homedir(),"luban-browser"):Lw.tmpdir()}function Kw(t){let e=String(t??(process.env&&process.env.LUBAN_CHROME_PATH||"")).trim();if(e){try{if(Gs.existsSync(e))return{path:e,tried:[e]}}catch{}return{path:"",tried:[e]}}let n=Bw();for(let s of n)try{if(Gs.existsSync(s))return{path:s,tried:n}}catch{}return{path:"",tried:n}}function Hw(t,e){let n=Buffer.isBuffer(e)?e:Buffer.from(String(e??""),"utf8"),s=n.length,r;s<126?(r=Buffer.alloc(2),r[1]=128|s):s<65536?(r=Buffer.alloc(4),r[1]=254,r.writeUInt16BE(s,2)):(r=Buffer.alloc(10),r[1]=255,r.writeUInt32BE(Math.floor(s/4294967296),2),r.writeUInt32BE(s%4294967296,6)),r[0]=128|t&15;let o=Rw.randomBytes(4),i=Buffer.allocUnsafe(s);for(let a=0;a<s;a++)i[a]=n[a]^o[a%4];return Buffer.concat([r,o,i])}function Gw(t){let e=Buffer.isBuffer(t)?t:Buffer.alloc(0);if(e.length<2)return null;let n=(e[0]&128)!==0,s=e[0]&15,r=(e[1]&128)!==0,o=e[1]&127,i=2;if(o===126){if(e.length<4)return null;o=e.readUInt16BE(2),i=4}else if(o===127){if(e.length<10)return null;let u=e.readUInt32BE(2),d=e.readUInt32BE(6);o=u*4294967296+d,i=10}if(o>$w)throw new Error("WebSocket \u5E27\u8FC7\u5927\uFF08"+o+" \u5B57\u8282\uFF09");let a=r?4:0,l=i+a+o;if(e.length<l)return null;let c=e.subarray(i+a,l);if(r){let u=e.subarray(i,i+4),d=Buffer.allocUnsafe(o);for(let f=0;f<o;f++)d[f]=c[f]^u[f%4];c=d}return{fin:n,opcode:s,payload:c,rest:e.subarray(l)}}var Ld=class{constructor(e){this.socket=e,this.buf=Buffer.alloc(0),this.frag=[],this.fragOpcode=0,this.closed=!1,this.onmessage=null,this.onclose=null,e.on("data",n=>this._feed(n)),e.on("error",()=>this._closed()),e.on("close",()=>this._closed())}_closed(){if(!this.closed&&(this.closed=!0,typeof this.onclose=="function"))try{this.onclose()}catch{}}_feed(e){for(this.buf=this.buf.length?Buffer.concat([this.buf,e]):e;;){let n;try{n=Gw(this.buf)}catch{this.destroy();return}if(!n||(this.buf=n.rest,this._frame(n.fin,n.opcode,n.payload),this.closed))return}}_frame(e,n,s){if(n===9){this._write(10,s);return}if(n!==10){if(n===8){this.destroy();return}if(n===0){if(this.frag.push(s),!e)return;let r=Buffer.concat(this.frag),o=this.fragOpcode;if(this.frag=[],this.fragOpcode=0,o===1&&typeof this.onmessage=="function")try{this.onmessage(r.toString("utf8"))}catch{}return}if(!e){this.fragOpcode=n,this.frag=[s];return}if(n===1&&typeof this.onmessage=="function")try{this.onmessage(s.toString("utf8"))}catch{}}}_write(e,n){if(!(this.closed||!this.socket.writable))try{this.socket.write(Hw(e,n))}catch{this.destroy()}}send(e){this._write(1,Buffer.from(String(e??""),"utf8"))}destroy(){if(!this.closed){try{this.socket.destroy()}catch{}if(this.closed=!0,typeof this.onclose=="function")try{this.onclose()}catch{}}}};function SA(t,e){return new Promise(function(n,s){let r;try{r=new URL(String(t))}catch{s(new Error("WebSocket \u5730\u5740\u4E0D\u5408\u6CD5\uFF1A"+t));return}let o=Number(r.port)||(r.protocol==="wss:"?443:80),i=Rw.randomBytes(16).toString("base64"),a=bA.connect({host:r.hostname,port:o}),l=!1,c=setTimeout(function(){if(!l){l=!0;try{a.destroy()}catch{}s(new Error("\u8FDE\u63A5 CDP WebSocket \u8D85\u65F6\uFF08"+(e||ji)+"ms\uFF09"))}},e||ji),u=Buffer.alloc(0);a.on("connect",function(){let f=["GET "+(r.pathname+(r.search||""))+" HTTP/1.1","Host: "+r.hostname+":"+o,"Upgrade: websocket","Connection: Upgrade","Sec-WebSocket-Key: "+i,"Sec-WebSocket-Version: 13"];a.write(f.join(`\r
|
|
187
|
+
`)){let p=f.trim();if(!p)continue;let h=null;try{h=JSON.parse(p)}catch{c++;continue}if(!h||!h.ts){c++;continue}let m=Number(h.ts);!isFinite(m)||m<s||m>r||l.push(h)}}return l.sort(function(u,d){return Number(u.ts)-Number(d.ts)}),{rows:l,files:a.map(function(u){return u+".jsonl"}),bad:c}}function Ti(){return{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0}}function yl(t,e){t.turns++,t.requests+=Pn(e.requests),t.promptTokens+=Pn(e.promptTokens),t.completionTokens+=Pn(e.completionTokens),t.totalTokens+=Pn(e.totalTokens),t.cachedTokens+=Pn(e.cachedTokens),e.estimated&&t.estimatedTurns++,e.partial&&t.partialTurns++}function wl(t){return t.hit=t.promptTokens>0?Number(Math.min(1,t.cachedTokens/t.promptTokens).toFixed(3)):0,t}function nA(t,e,n,s){let r=Object.keys(t).sort();if(!r.length)return[];let o=e>0?xo(e):xo(t[r[0]].ts),i=n>0?xo(n):xo(t[r[r.length-1]].ts),a=Math.round((i-o)/864e5)+1,l=s>0?Math.min(a,s):a;if(l>Cw)return r.map(function(u){return t[u]});let c=[];for(let u=0;u<l;u++){let d=new Date(o);d.setDate(d.getDate()+u);let f=bl(d.getTime());c.push(t[f]||Object.assign({day:f,ts:d.getTime()},Ti(),{hit:0,empty:!0}))}return c}function sA(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Ti(),o=Object.create(null),i=Object.create(null),a=Object.create(null);for(let d of s){yl(r,d);let f=String(d.modelKey||"")||String(d.provider||"")+"::"+String(d.model||"")||"\u672A\u77E5\u6A21\u578B";o[f]||(o[f]=Object.assign({key:f,provider:vs(d.provider,60),model:vs(d.model,120)||"\u672A\u77E5\u6A21\u578B"},Ti())),yl(o[f],d);let p=vs(d.mode,20)||"agent";i[p]||(i[p]=Object.assign({mode:p},Ti())),yl(i[p],d);let h=String(d.day||bl(d.ts));a[h]||(a[h]=Object.assign({day:h,ts:xo(d.ts)},Ti())),yl(a[h],d)}let l=Object.keys(o).map(function(d){let f=wl(o[d]);return f.share=r.totalTokens>0?Number((f.totalTokens/r.totalTokens).toFixed(3)):0,f}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.key).localeCompare(String(f.key))}),c=Object.keys(i).map(function(d){return wl(i[d])}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.mode).localeCompare(String(f.mode))}),u=nA(a,Number(n.from)||0,Number(n.to)||0,Number(n.days)||0).map(function(d){return d.empty?d:wl(d)});return s.length?Object.assign(wl(r),{byModel:l,byMode:c,byDay:u}):{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0,hit:0,byModel:[],byMode:[],byDay:[]}}function rA(t){let e=Mi.find(function(n){return n.key===String(t||"")});return e?e.label:Mi[1].label}Ow.exports={MONTHS_KEEP:Mw,MAX_FILL_DAYS:Cw,RANGES:Mi,dayOf:bl,monthOf:Ci,startOfDay:xo,rangeOf:YC,rangeLabel:rA,row:ZC,append:eA,read:tA,monthFiles:jd,prune:Aw,aggregate:sA}});var Fw=ne((R2,Nw)=>{var Bt=require("fs"),oA=require("os"),Gs=require("path"),kl=Gs.join(oA.homedir(),".luban","attachments"),iA=4,So=5*1024*1024,aA=Math.ceil(So*4/3)+64,lA=2e3,Id={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},Pw={png:"image/png",jpg:"image/jpeg",webp:"image/webp",gif:"image/gif"},cA=/^[A-Za-z0-9_-]+$/,Nd=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,uA=/^data:(image\/(?:png|jpeg|webp|gif));base64,([A-Za-z0-9+/=\s]+)$/;function Ei(t){return(t<10?"0":"")+t}function dA(t){let e=t||new Date;return e.getFullYear()+Ei(e.getMonth()+1)+Ei(e.getDate())+"-"+Ei(e.getHours())+Ei(e.getMinutes())+Ei(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function jw(t){let e=uA.exec(String(t??""));return e?{mime:e[1],b64:e[2].replace(/\s+/g,"")}:null}function Iw(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file);if(!Nd.test(e)||e.length>120)return null;let n=String(t.mime==null?"":t.mime);if(!Id[n]||e.slice(e.lastIndexOf(".")+1)!==Id[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0||s>So?null:{file:e,mime:n,bytes:s}}function vo(t){let e=String(t??"");return cA.test(e)?Gs.join(kl,e):""}function fA(t,e){let n=vo(t);if(!n)return null;let s=String(e??"");if(s.length>aA)return null;let r=jw(s);if(!r)return null;let o=Buffer.from(r.b64,"base64");if(!o.length||o.length>So)return null;let i=dA()+"."+Id[r.mime];try{Bt.mkdirSync(n,{recursive:!0,mode:448});let a=Gs.join(n,i),l=a+".tmp-"+Math.random().toString(36).slice(2,6);return Bt.writeFileSync(l,o,{mode:384}),Bt.renameSync(l,a),{file:i,mime:r.mime,bytes:o.length}}catch{return null}}function pA(t,e){let n=vo(t),s=Iw(e);if(!n||!s)return"";try{let r=Gs.join(n,s.file),o=Bt.statSync(r);return!o.isFile()||o.size<=0||o.size>So?"":"data:"+s.mime+";base64,"+Bt.readFileSync(r).toString("base64")}catch{return""}}function hA(t,e){let n=vo(t),s=String(e??"");if(!n)return{ok:!1,error:"bad_session"};if(!Nd.test(s)||s.length>120)return{ok:!1,error:"bad_file"};let r=Pw[s.slice(s.lastIndexOf(".")+1)]||"";if(!r)return{ok:!1,error:"bad_file"};try{let o=Gs.join(n,s),i=Bt.statSync(o);return!i.isFile()||i.size<=0?{ok:!1,error:"missing"}:i.size>So?{ok:!1,error:"too_large"}:{ok:!0,mime:r,dataUrl:"data:"+r+";base64,"+Bt.readFileSync(o).toString("base64")}}catch{return{ok:!1,error:"missing"}}}function mA(t){let e=vo(t);if(!e)return{removed:0};let n=0;try{n=Bt.readdirSync(e).length}catch{n=0}try{Bt.rmSync(e,{recursive:!0,force:!0})}catch{}return{removed:n}}function gA(t,e){let n=vo(t),s=vo(e);if(!n||!s||n===s)return{copied:0,failed:0};let r=[];try{r=Bt.readdirSync(n)}catch{return{copied:0,failed:0}}let o=0,i=0;try{Bt.mkdirSync(s,{recursive:!0,mode:448})}catch{return{copied:0,failed:0}}for(let a of r){let l=a.slice(a.lastIndexOf(".")+1);if(!Nd.test(a)||a.length>120||!Pw[l])continue;let c=Gs.join(n,a),u=Gs.join(s,a);try{Bt.copyFileSync(c,u);try{Bt.chmodSync(u,384)}catch{}o++}catch{i++}}return{copied:o,failed:i}}function yA(t){let e=t instanceof Set?t:new Set(t||[]),n=[];try{n=Bt.readdirSync(kl,{withFileTypes:!0})}catch{return{removed:0,kept:0}}let s=0,r=0;for(let o of n)if(o.isDirectory()){if(e.has(o.name)){r++;continue}try{Bt.rmSync(Gs.join(kl,o.name),{recursive:!0,force:!0}),s++}catch{r++}}return{removed:s,kept:r}}function wA(t,e){let n=(e||[]).filter(function(r){return typeof r=="string"&&r.indexOf("data:image/")===0});if(!n.length)return t;let s=[];t!=null&&t!==""&&s.push({type:"text",text:String(t)});for(let r of n)s.push({type:"image_url",image_url:{url:r}});return s}Nw.exports={ATTACH_DIR:kl,MAX_IMAGES:iA,MAX_BYTES:So,IMG_CHARS:lA,parseDataUrl:jw,validateEntry:Iw,saveImage:fA,readDataUrl:pA,readPreview:hA,removeSession:mA,copySession:gA,sweepOrphans:yA,toContent:wA}});var Yw=ne(($2,Xw)=>{var zs=require("fs"),bA=require("net"),Lw=require("os"),Ss=require("path"),kA=require("http"),Rw=require("crypto"),{spawn:xA,execSync:vA}=require("child_process"),$w=64*1024*1024,qw=25e3,ji=15e3,Fd=200;function Bw(){let t=process.env||{},e=[],n=function(s){s&&e.push(String(s))};if(process.platform==="win32"){let s=[t.PROGRAMFILES,t["PROGRAMFILES(X86)"],t.LOCALAPPDATA,t.ProgramW6432];for(let r of s)n(r&&Ss.join(r,"Google","Chrome","Application","chrome.exe")),n(r&&Ss.join(r,"Microsoft","Edge","Application","msedge.exe")),n(r&&Ss.join(r,"Chromium","Application","chrome.exe"))}else if(process.platform==="darwin")n("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),n("/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"),n("/Applications/Chromium.app/Contents/MacOS/Chromium"),n("/Applications/Brave Browser.app/Contents/MacOS/Brave Browser");else{let s=["google-chrome","google-chrome-stable","chromium","chromium-browser","microsoft-edge","brave-browser"],r=String(t.PATH||"").split(Ss.delimiter).filter(Boolean);for(let o of r)for(let i of s)n(Ss.join(o,i))}return e}function Uw(t){let e=String(t||"");if(e.indexOf("/snap/")===0)return!0;try{let n=zs.realpathSync(e);return n==="/usr/bin/snap"||/\/snapd\/snapd$/.test(n)}catch{return/\/bin\/snap$/.test(e)}}function Ww(t){return Uw(t)?Ss.join(Lw.homedir(),"luban-browser"):Lw.tmpdir()}function Kw(t){let e=String(t??(process.env&&process.env.LUBAN_CHROME_PATH||"")).trim();if(e){try{if(zs.existsSync(e))return{path:e,tried:[e]}}catch{}return{path:"",tried:[e]}}let n=Bw();for(let s of n)try{if(zs.existsSync(s))return{path:s,tried:n}}catch{}return{path:"",tried:n}}function Hw(t,e){let n=Buffer.isBuffer(e)?e:Buffer.from(String(e??""),"utf8"),s=n.length,r;s<126?(r=Buffer.alloc(2),r[1]=128|s):s<65536?(r=Buffer.alloc(4),r[1]=254,r.writeUInt16BE(s,2)):(r=Buffer.alloc(10),r[1]=255,r.writeUInt32BE(Math.floor(s/4294967296),2),r.writeUInt32BE(s%4294967296,6)),r[0]=128|t&15;let o=Rw.randomBytes(4),i=Buffer.allocUnsafe(s);for(let a=0;a<s;a++)i[a]=n[a]^o[a%4];return Buffer.concat([r,o,i])}function Gw(t){let e=Buffer.isBuffer(t)?t:Buffer.alloc(0);if(e.length<2)return null;let n=(e[0]&128)!==0,s=e[0]&15,r=(e[1]&128)!==0,o=e[1]&127,i=2;if(o===126){if(e.length<4)return null;o=e.readUInt16BE(2),i=4}else if(o===127){if(e.length<10)return null;let u=e.readUInt32BE(2),d=e.readUInt32BE(6);o=u*4294967296+d,i=10}if(o>$w)throw new Error("WebSocket \u5E27\u8FC7\u5927\uFF08"+o+" \u5B57\u8282\uFF09");let a=r?4:0,l=i+a+o;if(e.length<l)return null;let c=e.subarray(i+a,l);if(r){let u=e.subarray(i,i+4),d=Buffer.allocUnsafe(o);for(let f=0;f<o;f++)d[f]=c[f]^u[f%4];c=d}return{fin:n,opcode:s,payload:c,rest:e.subarray(l)}}var Ld=class{constructor(e){this.socket=e,this.buf=Buffer.alloc(0),this.frag=[],this.fragOpcode=0,this.closed=!1,this.onmessage=null,this.onclose=null,e.on("data",n=>this._feed(n)),e.on("error",()=>this._closed()),e.on("close",()=>this._closed())}_closed(){if(!this.closed&&(this.closed=!0,typeof this.onclose=="function"))try{this.onclose()}catch{}}_feed(e){for(this.buf=this.buf.length?Buffer.concat([this.buf,e]):e;;){let n;try{n=Gw(this.buf)}catch{this.destroy();return}if(!n||(this.buf=n.rest,this._frame(n.fin,n.opcode,n.payload),this.closed))return}}_frame(e,n,s){if(n===9){this._write(10,s);return}if(n!==10){if(n===8){this.destroy();return}if(n===0){if(this.frag.push(s),!e)return;let r=Buffer.concat(this.frag),o=this.fragOpcode;if(this.frag=[],this.fragOpcode=0,o===1&&typeof this.onmessage=="function")try{this.onmessage(r.toString("utf8"))}catch{}return}if(!e){this.fragOpcode=n,this.frag=[s];return}if(n===1&&typeof this.onmessage=="function")try{this.onmessage(s.toString("utf8"))}catch{}}}_write(e,n){if(!(this.closed||!this.socket.writable))try{this.socket.write(Hw(e,n))}catch{this.destroy()}}send(e){this._write(1,Buffer.from(String(e??""),"utf8"))}destroy(){if(!this.closed){try{this.socket.destroy()}catch{}if(this.closed=!0,typeof this.onclose=="function")try{this.onclose()}catch{}}}};function SA(t,e){return new Promise(function(n,s){let r;try{r=new URL(String(t))}catch{s(new Error("WebSocket \u5730\u5740\u4E0D\u5408\u6CD5\uFF1A"+t));return}let o=Number(r.port)||(r.protocol==="wss:"?443:80),i=Rw.randomBytes(16).toString("base64"),a=bA.connect({host:r.hostname,port:o}),l=!1,c=setTimeout(function(){if(!l){l=!0;try{a.destroy()}catch{}s(new Error("\u8FDE\u63A5 CDP WebSocket \u8D85\u65F6\uFF08"+(e||ji)+"ms\uFF09"))}},e||ji),u=Buffer.alloc(0);a.on("connect",function(){let f=["GET "+(r.pathname+(r.search||""))+" HTTP/1.1","Host: "+r.hostname+":"+o,"Upgrade: websocket","Connection: Upgrade","Sec-WebSocket-Key: "+i,"Sec-WebSocket-Version: 13"];a.write(f.join(`\r
|
|
188
188
|
`)+`\r
|
|
189
189
|
\r
|
|
190
190
|
`)});let d=function(f){u=Buffer.concat([u,f]);let p=u.indexOf(`\r
|
|
191
191
|
\r
|
|
192
192
|
`);if(p<0){u.length>65536&&(l=!0,clearTimeout(c),a.destroy(),s(new Error("CDP \u63E1\u624B\u54CD\u5E94\u5F02\u5E38\uFF08\u5934\u90E8\u8FC7\u957F\uFF09")));return}a.removeListener("data",d);let h=u.slice(0,p).toString("utf8");if(h.indexOf(" 101 ")<0){l=!0,clearTimeout(c),a.destroy(),s(new Error("CDP WebSocket \u63E1\u624B\u88AB\u62D2\u7EDD\uFF1A"+h.split(`\r
|
|
193
|
-
`)[0]));return}l=!0,clearTimeout(c);let m=new Ld(a),y=u.slice(p+4);y.length&&m._feed(y),n(m)};a.on("data",d),a.on("error",function(f){l||(l=!0,clearTimeout(c),s(new Error("\u8FDE\u63A5 CDP \u5931\u8D25\uFF1A"+(f&&f.message?f.message:f))))})})}var Dd=class{constructor(e){this.ws=e,this.seq=0,this.pending=new Map,this.listeners=[];let n=this;e.onmessage=function(s){n._onText(s)},e.onclose=function(){n._failAll("CDP \u8FDE\u63A5\u5DF2\u65AD\u5F00")}}_onText(e){let n;try{n=JSON.parse(e)}catch{return}if(!(!n||typeof n!="object")){if(n.id!=null){let s=this.pending.get(n.id);if(!s)return;this.pending.delete(n.id),clearTimeout(s.timer),n.error?s.reject(new Error((n.error.message||"CDP \u8C03\u7528\u5931\u8D25")+" ("+n.method+")")):s.resolve(n.result||{});return}if(n.method)for(let s of this.listeners)try{s(n.method,n.params||{})}catch{}}}_failAll(e){for(let n of this.pending.values()){clearTimeout(n.timer);try{n.reject(new Error(e))}catch{}}this.pending.clear()}on(e){let n=this;return this.listeners.push(e),function(){let s=n.listeners.indexOf(e);s>=0&&n.listeners.splice(s,1)}}send(e,n,s){let r=++this.seq,o=this;return new Promise(function(i,a){if(o.ws.closed){a(new Error("CDP \u8FDE\u63A5\u5DF2\u65AD\u5F00"));return}let l=setTimeout(function(){o.pending.delete(r),a(new Error("CDP \u8C03\u7528\u8D85\u65F6\uFF1A"+e))},s||ji);o.pending.set(r,{resolve:i,reject:a,timer:l,method:e});try{o.ws.send(JSON.stringify({id:r,method:e,params:n||{}}))}catch(c){clearTimeout(l),o.pending.delete(r),a(c)}})}close(){try{this.ws.destroy()}catch{}}};function _A(t){let e=
|
|
193
|
+
`)[0]));return}l=!0,clearTimeout(c);let m=new Ld(a),y=u.slice(p+4);y.length&&m._feed(y),n(m)};a.on("data",d),a.on("error",function(f){l||(l=!0,clearTimeout(c),s(new Error("\u8FDE\u63A5 CDP \u5931\u8D25\uFF1A"+(f&&f.message?f.message:f))))})})}var Dd=class{constructor(e){this.ws=e,this.seq=0,this.pending=new Map,this.listeners=[];let n=this;e.onmessage=function(s){n._onText(s)},e.onclose=function(){n._failAll("CDP \u8FDE\u63A5\u5DF2\u65AD\u5F00")}}_onText(e){let n;try{n=JSON.parse(e)}catch{return}if(!(!n||typeof n!="object")){if(n.id!=null){let s=this.pending.get(n.id);if(!s)return;this.pending.delete(n.id),clearTimeout(s.timer),n.error?s.reject(new Error((n.error.message||"CDP \u8C03\u7528\u5931\u8D25")+" ("+n.method+")")):s.resolve(n.result||{});return}if(n.method)for(let s of this.listeners)try{s(n.method,n.params||{})}catch{}}}_failAll(e){for(let n of this.pending.values()){clearTimeout(n.timer);try{n.reject(new Error(e))}catch{}}this.pending.clear()}on(e){let n=this;return this.listeners.push(e),function(){let s=n.listeners.indexOf(e);s>=0&&n.listeners.splice(s,1)}}send(e,n,s){let r=++this.seq,o=this;return new Promise(function(i,a){if(o.ws.closed){a(new Error("CDP \u8FDE\u63A5\u5DF2\u65AD\u5F00"));return}let l=setTimeout(function(){o.pending.delete(r),a(new Error("CDP \u8C03\u7528\u8D85\u65F6\uFF1A"+e))},s||ji);o.pending.set(r,{resolve:i,reject:a,timer:l,method:e});try{o.ws.send(JSON.stringify({id:r,method:e,params:n||{}}))}catch(c){clearTimeout(l),o.pending.delete(r),a(c)}})}close(){try{this.ws.destroy()}catch{}}};function _A(t){let e=Ss.join(t,"DevToolsActivePort"),n="";try{n=zs.readFileSync(e,"utf8")}catch{return null}let s=String(n).split(/\r?\n/),r=Number(s[0]);return!isFinite(r)||r<=0?null:{port:r,browserPath:s[1]||""}}function Ut(t){return new Promise(function(e){setTimeout(e,t)})}function TA(t,e,n){return new Promise(function(s,r){let o=kA.request({host:"127.0.0.1",port:t,path:e,method:n||"GET",headers:{Host:"127.0.0.1:"+t,Accept:"application/json"},timeout:5e3},function(i){let a="";i.setEncoding("utf8"),i.on("data",function(l){a+=l}),i.on("end",function(){if(i.statusCode<200||i.statusCode>=300){r(new Error("CDP HTTP "+e+" \u8FD4\u56DE "+i.statusCode));return}try{s(JSON.parse(a||"{}"))}catch{r(new Error("CDP HTTP "+e+" \u8FD4\u56DE\u7684\u4E0D\u662F JSON"))}})});o.on("timeout",function(){o.destroy(new Error("CDP HTTP \u8D85\u65F6\uFF1A"+e))}),o.on("error",r),o.end()})}function Mr(t){if(!t||t.killed)return;let e=t.pid;try{if(process.platform==="win32")vA("taskkill /PID "+e+" /T /F",{stdio:"ignore",timeout:5e3});else try{process.kill(-e,"SIGKILL")}catch{try{t.kill("SIGKILL")}catch{}}}catch{}}function Pi(t){try{zs.rmSync(t,{recursive:!0,force:!0})}catch{}}var MA={StaticText:1,InlineTextBox:1,generic:1,none:1,RootWebArea:1},CA={ignored:1,presentation:1,LineBreak:1},Rd=class{constructor(e){this.proc=e.proc,this.dir=e.dir,this.exe=e.exe,this.port=e.port,this.cdp=e.cdp,this.width=e.width||1280,this.height=e.height||800,this.events=[],this.reqUrls=new Map,this.url="",this.title="",this.closed=!1,this._bindEvents()}_record(e){this.events.push(e),this.events.length>Fd&&this.events.splice(0,this.events.length-Fd)}resetEvents(){this.events.length=0,this.reqUrls.clear()}_bindEvents(){let e=this;this.cdp.on(function(n,s){if(n==="Runtime.consoleAPICalled"){let o=(Array.isArray(s.args)?s.args:[]).map(function(i){return!i||typeof i!="object"?"":i.value!==void 0?String(i.value):i.unserializableValue!=null?String(i.unserializableValue):String(i.description==null?i.type||"":i.description)}).join(" ");e._record({kind:"console",level:String(s.type||"log"),text:o.slice(0,2e3),at:Date.now()})}else if(n==="Runtime.exceptionThrown"){let r=s.exceptionDetails||{},o=r.exception||{},i=String(o.description||r.text||"\u672A\u6355\u83B7\u5F02\u5E38");e._record({kind:"console",level:"error",text:("\u672A\u6355\u83B7\u5F02\u5E38\uFF1A"+i).slice(0,2e3),at:Date.now()})}else if(n==="Log.entryAdded"){let r=s.entry||{};e._record({kind:"console",level:String(r.level||"info"),text:String(r.text||"").slice(0,2e3),url:String(r.url||""),at:Date.now()})}else if(n==="Network.requestWillBeSent"){let r=s.request||{};if(e.reqUrls.set(String(s.requestId||""),String(r.url||"")),e.reqUrls.size>500){let o=e.reqUrls.keys().next().value;e.reqUrls.delete(o)}}else if(n==="Network.responseReceived"){let r=s.response||{},o=Number(r.status);isFinite(o)&&o>=400&&e._record({kind:"network",level:"http",status:o,text:o+" "+String(r.url||""),at:Date.now()})}else if(n==="Network.loadingFailed"){if(s.canceled)return;let r=e.reqUrls.get(String(s.requestId||""))||"";e._record({kind:"network",level:"fail",text:String(s.errorText||"\u52A0\u8F7D\u5931\u8D25")+" "+r,at:Date.now()})}else n==="Page.frameNavigated"&&s.frame&&!s.frame.parentId&&(e.url=String(s.frame.url||e.url))})}async init(){await this.cdp.send("Page.enable"),await this.cdp.send("Runtime.enable"),await this.cdp.send("Network.enable"),await this.cdp.send("Log.enable").catch(function(){}),await this.cdp.send("Accessibility.enable").catch(function(){}),await this.setViewport(this.width,this.height)}async setViewport(e,n){let s=Math.max(320,Math.min(4096,Math.floor(Number(e)||this.width))),r=Math.max(240,Math.min(4096,Math.floor(Number(n)||this.height)));this.width=s,this.height=r,await this.cdp.send("Emulation.setDeviceMetricsOverride",{width:s,height:r,deviceScaleFactor:1,mobile:!1})}expectEvent(e,n){let s=this.cdp,r=!1,o=null,i=null;return{promise:new Promise(function(l){i=setTimeout(function(){r||(r=!0,o&&o(),l(!1))},n||ji),o=s.on(function(c){r||c!==e||(r=!0,clearTimeout(i),o&&o(),l(!0))})}),cancel:function(){r||(r=!0,i&&clearTimeout(i),o&&o())}}}waitEvent(e,n){return this.expectEvent(e,n).promise}async navigate(e){let n=Jw(e);this.resetEvents();let s=this.expectEvent("Page.loadEventFired",2e4),r;try{r=await this.cdp.send("Page.navigate",{url:n},2e4)}catch(l){throw s.cancel(),l}if(r&&r.errorText)throw s.cancel(),new Error("\u5BFC\u822A\u5931\u8D25\uFF1A"+r.errorText);let o=await s.promise,i=await this.pageInfo();this.url=i.url||n,this.title=i.title||"";let a=["\u5DF2\u6253\u5F00\uFF1A"+this.shortUrl()];return this.title&&a.push("\u6807\u9898\uFF1A"+this.title),o||a.push("\uFF08\u7B49\u5F85 load \u4E8B\u4EF6\u8D85\u65F6\uFF0C\u9875\u9762\u53EF\u80FD\u8FD8\u5728\u52A0\u8F7D\uFF1B\u53EF\u7528 snapshot \u518D\u770B\u4E00\u6B21\uFF09"),a.join(`
|
|
194
194
|
`)}shortUrl(){let e=String(this.url||"");return e.length>200?e.slice(0,200)+"\u2026":e}async pageInfo(){try{let e=await this.cdp.send("Runtime.evaluate",{expression:"({url: location.href, title: document.title})",returnByValue:!0},8e3),n=e&&e.result&&e.result.value||{};return{url:String(n.url||""),title:String(n.title||"")}}catch{return{url:this.url,title:this.title}}}async snapshot(e){let n=isFinite(Number(e))&&Number(e)>200?Math.min(2e4,Math.floor(Number(e))):6e3,s=await this.pageInfo();this.url=s.url||this.url,this.title=s.title||this.title;let r="",o=function(a){return String(a||"").split(`
|
|
195
195
|
`).filter(function(l){return l.trim()}).length};for(let a=0;a<2;a++){try{let l=await this.cdp.send("Accessibility.getFullAXTree",{},15e3);r=Vw(l&&l.nodes,n-600)}catch{r=""}if(o(r)>=3)break;a===0&&await Ut(250)}if(o(r)<3){let a=await this.visibleText(n-600);a.trim()&&(r=(r.trim()?r.trim()+`
|
|
196
196
|
|
|
@@ -204,14 +204,14 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var Ew=ne((D
|
|
|
204
204
|
`)}function Jw(t){let e=String(t??"").trim();if(!e)throw new Error("\u7F3A\u5C11 url \u53C2\u6570");if(/^(localhost|127\.0\.0\.1|\[::1\])(:\d+)?(\/|$)/i.test(e))return"http://"+e;if(/^[\w.-]+\.[a-z]{2,}(:\d+)?(\/|$)/i.test(e))return"https://"+e;if(!/^[a-z][a-z0-9+.-]*:/i.test(e))throw new Error("url \u5FC5\u987B\u662F\u5B8C\u6574\u5730\u5740\uFF08http:// / https:// / file:// / data:\uFF09\uFF1A"+e);let n=e.slice(0,e.indexOf(":")).toLowerCase();if((n==="javascript"||n==="chrome"||n==="chrome-extension"||n==="devtools"||n==="about")&&n!=="about")throw new Error("\u4E0D\u5141\u8BB8\u6253\u5F00 "+n+": \u9875\u9762");if(["http","https","file","data","about","blob"].indexOf(n)<0)throw new Error("\u4E0D\u652F\u6301\u7684\u534F\u8BAE\uFF1A"+n+"\uFF08\u53EA\u5141\u8BB8 http / https / file / data / about\uFF09");return e}async function AA(t){let e=t||{},n=Kw(e.exe);if(!n.path){let T=n.tried.slice(0,6).map(function(g){return" - "+g}).join(`
|
|
205
205
|
`);throw new Error(`\u6CA1\u627E\u5230 Chrome / Edge\u3002\u88C5\u4E0A Chrome\uFF0C\u6216\u5728\u8BBE\u7F6E\u91CC\u6307\u5B9A luban.browser.chromePath\u3002
|
|
206
206
|
\u5DF2\u5C1D\u8BD5\uFF1A
|
|
207
|
-
`+T)}let s=Ww(n.path);try{
|
|
208
|
-
\u6D4F\u89C8\u5668\u8F93\u51FA\uFF1A`+f.stderr.trim().slice(0,800):"";throw new Error("\u6D4F\u89C8\u5668\u542F\u52A8\u5931\u8D25\uFF08\u6CA1\u7B49\u5230\u8C03\u8BD5\u7AEF\u53E3\uFF09\u3002"+T)}u=f.port,r=f.dir||r;let p=null,h=Date.now()+1e4;for(;Date.now()<h;){let T=[];try{T=await TA(u,"/json/list")}catch{T=[]}if(Array.isArray(T)&&(p=T.find(function(g){return g&&g.type==="page"&&g.webSocketDebuggerUrl}),p))break;await Ut(200)}if(!p)throw Mr(c),Pi(r),new Error("\u6D4F\u89C8\u5668\u8D77\u6765\u4E86\uFF0C\u4F46\u6CA1\u627E\u5230\u53EF\u7528\u7684\u9875\u9762\uFF08/json/list \u4E3A\u7A7A\uFF09");let m;try{m=await SA(p.webSocketDebuggerUrl,15e3)}catch(T){throw Mr(c),Pi(r),T}let y=new Dd(m),w=new Rd({proc:c,dir:r,exe:n.path,port:u,cdp:y,width:o,height:i});try{await w.init()}catch(T){throw await w.close(),new Error("\u6D4F\u89C8\u5668\u5DF2\u542F\u52A8\uFF0C\u4F46\u521D\u59CB\u5316 CDP \u57DF\u5931\u8D25\uFF1A"+(T&&T.message?T.message:T))}return w}Xw.exports={findChrome:Kw,chromeCandidates:Bw,isSnapBinary:Uw,profileBaseDir:Ww,normalizeUrl:Jw,formatAxTree:Vw,clipText:zw,encodeFrame:Hw,decodeFrame:Gw,launch:AA,MAX_FRAME:$w,EVENTS_MAX:Fd,DEFAULT_TIMEOUT_MS:ji,LAUNCH_TIMEOUT_MS:qw}});var Co=ne((q2,Qd)=>{var V=require("fs"),
|
|
209
|
-
`),j.trustDirty=!1}catch(e){Wt("plugin_trust_save_failed",{message:e.message})}}function Ni(t){let e=[];(function s(r){let o;try{o=V.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of o){if(i.name==="node_modules"||i.name===".git")continue;let a=W.join(r,i.name);i.isDirectory()?s(a):i.isFile()&&e.push(a)}})(t),e.sort();let n=t0.createHash("sha1");for(let s of e){n.update(W.relative(t,s));try{n.update(V.readFileSync(s))}catch{}}return n.digest("hex")}function zd(t,e){return Gd(),j.trust.get(t)===e}function a0(t,e){Gd(),j.trust.set(t,e),j.trustDirty=!0,i0()}function $A(t,e){let n=String(e??"").trim();if(!n||n.length>64||/[;{}<>\\"']/.test(n)||/\/\*/.test(n))return"";if(qd[t]){let s=n.match(DA);if(!s)return"";let r=Number(s[1]),o=qd[t];return!isFinite(r)||r<o[0]||r>o[1]?"":s[2]?n:r+"px"}return IA.test(n)||NA.test(n)||FA.test(n)&&!LA.test(n)?n:""}function qA(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t.tokens&&typeof t.tokens=="object"&&!Array.isArray(t.tokens)?t.tokens:t,n=Object.create(null),s=[],r=0;for(let i of Object.keys(e)){if(r>=jA){s.push(i);continue}let a=String(i).replace(/^--/,"");if(PA.indexOf(a)<0&&!qd[a]){a!=="tokens"&&a!=="label"&&a!=="description"&&s.push(i);continue}let l=$A(a,e[i]);if(!l){s.push(i);continue}n[a]=l,r++}return r?{label:_l(typeof t.label=="string"?t.label.trim():"",40)||"",tokens:n,dropped:s}:{error:"theme.tokens \u91CC\u6CA1\u6709\u5408\u6CD5 token",dropped:s}}function
|
|
210
|
-
`)}catch{}}function HA(t){Gd(),j.trust.delete(W.resolve(t))&&(j.trustDirty=!0,i0())}function Vd(t){let e=W.resolve(String(t||""));if(!
|
|
211
|
-
\u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`),u}catch(a){let l=String(a&&a.message||a);throw Wt("plugin_call_failed",{plugin:s.plugin,tool:s.tool,message:l}),new Error("\u63D2\u4EF6\u5DE5\u5177 "+t+" \u5931\u8D25\uFF1A"+l)}finally{Wt("plugin_call",{plugin:s.plugin,tool:s.tool,ok:i,ms:Date.now()-o})}}function f0(){Fi();let t=[];for(let e of j.plugins.values()){let n=Js(e.dir);t.push({name:e.name,version:e.version,description:e.description,dir:e.dir,scope:n?n.scope:"",trusted:!0,readOnly:e.readOnly===!0,theme:Yd(e),tools:e.tools.map(function(s){return{name:s.name,readOnly:s.readOnly===!0}})})}return t}function VA(){return Fi(),j.pending.map(function(t){let e=Js(t.dir);return{name:t.name,version:t.version,description:t.description,dir:t.dir,scope:e?e.scope:"",trusted:!1,readOnly:t.readOnly===!0,theme:Yd(t),tools:t.tools.map(function(n){return{name:n.name,readOnly:n.readOnly===!0}})}})}function Kd(){let t=Mo(),e=[],n=[];for(let s of t.merged.values()){let r=s.manifest,o=Js(r.dir),i={name:r.name,version:r.version,description:r.description,dir:r.dir,scope:o?o.scope:"",readOnly:r.readOnly===!0,trusted:zd(r.dir,Ni(r.dir)),theme:Yd(r),tools:r.tools.map(function(a){return{name:a.name,readOnly:a.readOnly===!0}})};(i.trusted?e:n).push(i)}return e.sort(function(s,r){return s.name<r.name?-1:s.name>r.name?1:0}),n.sort(function(s,r){return s.name<r.name?-1:s.name>r.name?1:0}),{dirs:t.dirs,errors:t.errors,plugins:e,pending:n}}function Yd(t){if(!t||!t.theme)return null;let e=Object.keys(t.theme.tokens);return{label:t.theme.label||t.name,tokens:e.length,names:e,dropped:(t.theme.dropped||[]).length}}function Zd(){let t=Mo(),e=[];for(let n of t.merged.values()){let s=n.manifest;s.theme&&((s.theme.dropped||[]).length&&Wt("plugin_theme_token_dropped",{plugin:s.name,dropped:s.theme.dropped.slice(0,8)}),e.push({name:s.name,label:s.theme.label||s.name,description:s.description,dir:s.dir,tokens:Object.assign({},s.theme.tokens),dropped:(s.theme.dropped||[]).slice()}))}return e.sort(function(n,s){return n.name<s.name?-1:n.name>s.name?1:0}),e}function vl(t){let e=String(t??"").trim();if(!e)return null;let n=Zd();for(let s of n)if(s.name===e)return s;return null}function Hd(){return{root:j.root,enabled:j.enabled,dirs:j.dirs.slice(),globalDir:Li(),trashDir:Di(),errors:j.errors.slice(),scannedAt:j.scannedAt,plugins:f0(),pending:VA(),tools:Array.from(j.exposed.entries()).map(function(t){return{name:t[0],plugin:t[1].plugin,tool:t[1].tool,readOnly:t[1].readOnly===!0}})}}if(require.main===Qd){let t=require("assert"),e=V.promises;(async function(){let n=V.mkdtempSync(W.join(zs.tmpdir(),"luban-plugin-test-")),s=W.join(n,"proj"),r=W.join(n,"home",".luban","plugins"),o=W.join(s,".luban","plugins");V.mkdirSync(r,{recursive:!0}),V.mkdirSync(o,{recursive:!0});let i=zs.homedir;zs.homedir=function(){return W.join(n,"home")};let a=W.join(r,"demo");V.mkdirSync(a,{recursive:!0}),V.writeFileSync(W.join(a,"plugin.json"),JSON.stringify({name:"demo",version:"1.0.0",description:"\u6D4B\u8BD5\u63D2\u4EF6",readOnly:!0,tools:[{name:"echo",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),V.writeFileSync(W.join(a,"index.js"),'module.exports={tools:{echo:{handler:async(a)=>"echo:"+(a&&a.text||"")}}};');let l=W.join(o,"demo");V.mkdirSync(l,{recursive:!0}),V.writeFileSync(W.join(l,"plugin.json"),JSON.stringify({name:"demo",version:"2.0.0",readOnly:!1,tools:[{name:"boom",description:"\u629B\u9519",parameters:{type:"object",properties:{}}}]})),V.writeFileSync(W.join(l,"index.js"),'module.exports={tools:{boom:{handler:async()=>{throw new Error("\u70B8\u4E86")}}}};');let c=W.join(r,"bad");V.mkdirSync(c,{recursive:!0}),V.writeFileSync(W.join(c,"plugin.json"),"{ not json");let u=[],d=[];Cr({root:s,enabled:!0,rec:function(Me,Dt){u.push([Me,Dt])},confirm:async function(Me){return d.push(Me.name),!0}}),await jn(s);let f=Hd();t.strictEqual(f.plugins.length,1,"\u5E94\u6709 1 \u4E2A\u63D2\u4EF6\uFF08demo \u9879\u76EE\u7248\u8986\u76D6\u5BB6\u76EE\u5F55\u7248\uFF0Cbad \u6E05\u5355\u574F\u88AB\u8DF3\u8FC7\uFF09");let p=f.plugins.find(function(Me){return Me.name==="demo"});t.strictEqual(p.version,"2.0.0","\u9879\u76EE\u63D2\u4EF6\u8986\u76D6\u5BB6\u76EE\u5F55"),t.strictEqual(p.tools.length,1),t.strictEqual(p.tools[0].name,"boom"),t.strictEqual(f.errors.some(function(Me){return Me.indexOf("bad")===0}),!0,"\u574F\u6E05\u5355\u8981\u8BB0 error"),t.strictEqual(_o("pl__demo__boom"),!0),t.strictEqual(_o("pl__demo__echo"),!1,"\u88AB\u9879\u76EE\u8986\u76D6\u7684 echo \u4E0D\u8BE5\u51FA\u73B0"),t.strictEqual(d0("pl__demo__boom"),!1);let h=JSON.stringify(To({})),m=JSON.stringify(To({}));t.strictEqual(h,m,"\u4E24\u6B21 toolDefs \u9010\u5B57\u8282\u76F8\u540C"),t.strictEqual(To({planOnly:!0}).length,0,"\u975E\u53EA\u8BFB\u5DE5\u5177\u4E0D\u8FDB Plan");let y="";try{await Ii("pl__demo__boom",{},{root:s})}catch(Me){y=Me.message}t.ok(y.indexOf("\u70B8\u4E86")>=0,"\u629B\u9519\u8981\u5E26\u4E0A\u539F\u56E0\uFF0C\u5B9E\u9645: "+y);let w=W.join(r,"echo");V.mkdirSync(w,{recursive:!0}),V.writeFileSync(W.join(w,"plugin.json"),JSON.stringify({name:"echo",readOnly:!0,tools:[{name:"say",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),V.writeFileSync(W.join(w,"index.js"),'module.exports={tools:{say:{handler:async(a)=>"say:"+(a&&a.text||"")}}}'),j.scannedMs=0,await jn(s,{quiet:!0});let T=await Ii("pl__echo__say",{text:"hi"},{root:s});t.strictEqual(T,"say:hi","echo \u6B63\u5E38\u8FD4\u56DE\uFF0C\u5B9E\u9645: "+T);let g=W.join(r,"slow");V.mkdirSync(g,{recursive:!0}),V.writeFileSync(W.join(g,"plugin.json"),JSON.stringify({name:"slow",readOnly:!0,tools:[{name:"hang",description:"\u6302\u4F4F",parameters:{type:"object",properties:{}}}]})),V.writeFileSync(W.join(g,"index.js"),"module.exports={tools:{hang:{handler:()=>new Promise(()=>{})}}}"),Cr({timeoutMs:300}),j.scannedMs=0,await jn(s,{quiet:!0});let v="";try{await Ii("pl__slow__hang",{},{root:s})}catch(Me){v=Me.message}t.ok(v.indexOf("\u8D85\u65F6")>=0,"\u8981\u8D85\u65F6\uFF0C\u5B9E\u9645: "+v),Cr({timeoutMs:s0}),t.strictEqual(d.indexOf("demo")>=0,!0,"\u9996\u6B21\u8981\u786E\u8BA4 demo");let b=W.join(n,"home",".luban","plugins-trust.json");t.ok(V.existsSync(b),"\u4FE1\u4EFB\u8868\u8981\u843D\u76D8");let S=d.length;V.writeFileSync(W.join(w,"index.js"),'module.exports={tools:{say:{handler:async()=>"changed"}}}'),j.scannedMs=0,await jn(s,{quiet:!0}),t.ok(d.length>S,"\u5185\u5BB9\u53D8\u4E86\u8981\u91CD\u65B0\u786E\u8BA4"),Cr({confirm:async function(){return!1}}),j.trust=new Map,j.trustDirty=!0,j.disabled=new Set,j.scannedMs=0,await jn(s,{quiet:!0}),t.strictEqual(To({}).length,0,"\u5168\u62D2\u7EDD\u540E\u6E05\u5355\u4E3A\u7A7A"),t.ok(Hd().pending.length>0,"\u88AB\u62D2\u7684\u63D2\u4EF6\u8981\u8FDB pending"),Cr({enabled:!0,confirm:async function(){return!0}}),j.trust=new Map,j.disabled=new Set,j.scannedMs=0,await jn(s,{quiet:!0});let _=W.join(n,"downloads","pkgs","fresh");V.mkdirSync(_,{recursive:!0}),V.writeFileSync(W.join(_,"plugin.json"),JSON.stringify({name:"fresh",version:"3.1.0",readOnly:!0,tools:[{name:"ping",description:"ping",parameters:{type:"object",properties:{}}}]})),V.writeFileSync(W.join(_,"index.js"),'module.exports={tools:{ping:{handler:async()=>"pong"}}}'),V.mkdirSync(W.join(_,".git"),{recursive:!0}),V.writeFileSync(W.join(_,".git","HEAD"),"ref: refs/heads/main");let C=await xl(_,{trust:!0});t.strictEqual(C.ok,!0,"\u5B89\u88C5\u5E94\u6210\u529F\uFF1A"+JSON.stringify(C)),t.strictEqual(C.name,"fresh"),t.strictEqual(C.replaced,!1);let A=W.join(r,"fresh");t.strictEqual(V.existsSync(W.join(A,"plugin.json")),!0,"\u6587\u4EF6\u8981\u843D\u8FDB\u5168\u5C40\u63D2\u4EF6\u6839"),t.strictEqual(V.existsSync(W.join(A,".git")),!1,".git \u4E0D\u8BE5\u88AB\u590D\u5236"),t.strictEqual(_o("pl__fresh__ping"),!0,"\u88C5\u5B8C\u7ACB\u5373\u53EF\u7528\uFF08\u4FE1\u4EFB + \u91CD\u626B\uFF09"),t.strictEqual(await Ii("pl__fresh__ping",{},{root:s}),"pong");let F=await xl(_,{trust:!0});t.strictEqual(F.ok,!1,"\u540C\u540D\u4E0D\u5E26 replace \u5E94\u62D2\u7EDD"),t.strictEqual(F.code,"exists");let B=await xl(_,{trust:!0,replace:!0});t.strictEqual(B.ok,!0,"replace \u5E94\u6210\u529F"),t.strictEqual(B.replaced,!0);let H=Ud();t.ok(H.some(function(Me){return Me.why==="replaced-by-install"}),"\u65E7\u7248\u8981\u8FDB\u56DE\u6536\u7AD9");let $=await Bd("fresh");t.strictEqual($.ok,!0,"\u5378\u8F7D\u5E94\u6210\u529F\uFF1A"+JSON.stringify($)),t.strictEqual(V.existsSync(A),!1,"\u63D2\u4EF6\u76EE\u5F55\u8981\u79FB\u8D70"),t.strictEqual(_o("pl__fresh__ping"),!1,"\u5378\u8F7D\u540E\u5DE5\u5177\u6D88\u5931");let P=Ud().find(function(Me){return Me.name==="fresh"});t.ok(P,"\u56DE\u6536\u7AD9\u91CC\u5E94\u6709 fresh"),t.strictEqual(P.valid,!0,"\u56DE\u6536\u7AD9\u6761\u76EE\u5E94\u80FD\u89E3\u6790\u6E05\u5355"),t.strictEqual(P.version,"3.1.0"),t.strictEqual(P.from,A,"\u5143\u6570\u636E\u8981\u8BB0\u4F4F\u539F\u4F4D\u7F6E");let K=await Wd(P.entry);t.strictEqual(K.ok,!0,"\u8FD8\u539F\u5E94\u6210\u529F\uFF1A"+JSON.stringify(K)),t.strictEqual(K.dir,A,"\u8981\u8FD8\u539F\u56DE\u539F\u4F4D\u7F6E"),t.strictEqual(_o("pl__fresh__ping"),!0,"\u8FD8\u539F\u540E\u7ACB\u5373\u53EF\u7528");let ae=W.join(n,"outside");V.mkdirSync(ae,{recursive:!0}),V.writeFileSync(W.join(ae,"plugin.json"),JSON.stringify({name:"evil",tools:[{name:"x",description:"x"}]}));let te=await Bd(ae);t.strictEqual(te.ok,!1,"\u63D2\u4EF6\u6839\u4E4B\u5916\u7684\u76EE\u5F55\u5FC5\u987B\u62D2\u7EDD\u5378\u8F7D"),t.strictEqual(V.existsSync(ae),!0,"\u62D2\u7EDD\u540E\u76EE\u5F55\u8FD8\u5728");let Q=await Wd("../outside");t.strictEqual(Q.ok,!1,"\u5E26 / \u7684\u56DE\u6536\u7AD9\u6761\u76EE\u8981\u62D2\u7EDD"),V.writeFileSync(W.join(w,"index.js"),'module.exports={tools:{say:{handler:async()=>"dirty"}}}'),Cr({enabled:!1}),await jn(s,{quiet:!0}),t.strictEqual(To({}).length,0,"\u5173\u95ED\u540E\u6E05\u5355\u4E3A\u7A7A");let he=Kd();t.ok(he.plugins.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u5DF2\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+he.plugins.length),t.ok(he.pending.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+he.pending.length);let G=W.join(r,"theme-test");V.mkdirSync(G,{recursive:!0}),V.writeFileSync(W.join(G,"plugin.json"),JSON.stringify({name:"theme-test",version:"0.1.0",description:"\u53EA\u5E26\u4E3B\u9898\uFF0C\u6CA1\u6709\u5DE5\u5177",theme:{label:"\u6D4B\u8BD5\u914D\u8272",tokens:{bg:"#101014",fg:"rgb(240, 240, 245)",accent:"#ff5fa2",radius:"10","font-size":"15px",border:"red; } body { background: url(http://evil) }",surface:"url(http://evil/x.png)",width:"100px",link:"expression(alert(1))",ok:"$notacolor"}}}));let Se=Zd().find(function(Me){return Me.name==="theme-test"});t.ok(Se,"\u5E26 theme \u7684\u63D2\u4EF6\u8981\u51FA\u73B0\u5728 themes() \u91CC\uFF08enabled=false \u4E5F\u8981\u5728\uFF09"),t.strictEqual(Se.label,"\u6D4B\u8BD5\u914D\u8272"),t.strictEqual(Se.tokens.bg,"#101014"),t.strictEqual(Se.tokens.fg,"rgb(240, 240, 245)"),t.strictEqual(Se.tokens.radius,"10px","\u65E0\u5355\u4F4D\u5C3A\u5BF8\u8981\u8865 px"),t.strictEqual(Se.tokens["font-size"],"15px"),t.strictEqual(Se.tokens.border,void 0,"\u5E26\u5206\u53F7 / \u82B1\u62EC\u53F7\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.surface,void 0,"url() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.width,void 0,"\u767D\u540D\u5355\u4E4B\u5916\u7684 token \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.link,void 0,"expression() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.ok,void 0,"\u62FC\u4E0D\u6210\u989C\u8272 / \u5177\u540D\u8272\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.ok(Se.dropped.length>=5,"\u4E22\u5F03\u8981\u6709\u7559\u75D5\uFF0C\u5B9E\u9645: "+JSON.stringify(Se.dropped)),t.strictEqual(vl("theme-test").tokens.accent,"#ff5fa2","themeOf \u6309\u540D\u53D6\u5230 tokens"),t.strictEqual(vl("nope"),null,"\u4E0D\u5B58\u5728\u7684\u63D2\u4EF6\u540D\u56DE null"),t.strictEqual(vl(""),null,"\u7A7A\u540D\u56DE null");let yt=W.join(r,"theme-broken");V.mkdirSync(yt,{recursive:!0}),V.writeFileSync(W.join(yt,"plugin.json"),JSON.stringify({name:"theme-broken",theme:{tokens:{bg:"red;}",fg:"url(x)"}}}));let St=Kd();t.ok(St.errors.some(function(Me){return Me.indexOf("theme-broken")===0}),"\u5168\u975E\u6CD5 token \u7684\u4E3B\u9898\u63D2\u4EF6\u8981\u8BB0 error\uFF0C\u5B9E\u9645: "+JSON.stringify(St.errors)),t.strictEqual(St.plugins.concat(St.pending).some(function(Me){return Me.name==="theme-broken"}),!1,"\u574F\u4E3B\u9898\u63D2\u4EF6\u4E0D\u8BE5\u51FA\u73B0\u5728\u6E05\u5355\u91CC"),zs.homedir=i,V.rmSync(n,{recursive:!0,force:!0}),console.log("plugin.js \u81EA\u6D4B\u901A\u8FC7"),process.exit(0)})().catch(function(n){console.error("plugin.js \u81EA\u6D4B\u5931\u8D25\uFF1A",n),process.exit(1)})}Qd.exports={configure:Cr,refresh:jn,reload:UA,list:f0,status:Hd,toolDefs:To,hasTool:_o,findTool:Jd,readOnlyOf:d0,callTool:Ii,installFromDir:xl,uninstall:Bd,trashList:Ud,restoreFromTrash:Wd,trustDir:Vd,inventory:Kd,themes:Zd,themeOf:vl,scopeOf:Js,globalDir:Li,trashDir:Di,_cleanName:Ar,_exposedBase:r0,_parseManifest:Vs,_dirFingerprint:Ni,_scanRaw:Mo,_state:j,_ttl:n0}});var sf=ne((B2,x0)=>{"use strict";var $e=require("fs"),h0=require("os"),Ke=require("path"),Ri=ki(),m0="skills-trash",ef=".installed.json",g0={root:""};function JA(t){let e=t||{};e.root&&(g0.root=String(e.root))}function XA(){return Ke.resolve(g0.root||process.cwd())}function Ml(){return Ke.join(h0.homedir(),".luban","skills")}function Cl(){return Ke.join(h0.homedir(),".luban",m0)}function tf(t){return Ke.join(t||XA(),".luban","skills")}function y0(t){return t==="project"?tf():Ml()}function $i(t){let e=Ke.resolve(String(t||"")),n=[{scope:"global",base:Ml()},{scope:"project",base:tf()}];for(let s of n){let r=Ke.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!Ke.isAbsolute(r)&&r.indexOf(Ke.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function p0(){let t=new Date,e=function(n){return(n<10?"0":"")+n};return String(t.getFullYear())+e(t.getMonth()+1)+e(t.getDate())+"-"+e(t.getHours())+e(t.getMinutes())+e(t.getSeconds())}function Al(t,e){$e.mkdirSync(e,{recursive:!0});for(let n of $e.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=Ke.join(t,n.name),r=Ke.join(e,n.name);n.isDirectory()?Al(s,r):n.isFile()&&$e.copyFileSync(s,r)}}function Ol(t){try{let e=JSON.parse($e.readFileSync(Ke.join(t,ef),"utf8"));if(e&&typeof e=="object"&&e.skills&&typeof e.skills=="object")return e}catch{}return{version:1,skills:{}}}function nf(t,e){$e.mkdirSync(t,{recursive:!0}),$e.writeFileSync(Ke.join(t,ef),JSON.stringify(e,null,2)+`
|
|
207
|
+
`+T)}let s=Ww(n.path);try{zs.mkdirSync(s,{recursive:!0})}catch{}let r=zs.mkdtempSync(Ss.join(s,"luban-chrome-")),o=Math.max(320,Math.min(4096,Math.floor(Number(e.width)||1280))),i=Math.max(240,Math.min(4096,Math.floor(Number(e.height)||800))),a=e.headless===!1?"":"--headless=new",l=["--remote-debugging-port=0","--remote-allow-origins=*","--no-first-run","--no-default-browser-check","--disable-background-networking","--disable-component-update","--disable-sync","--disable-extensions","--disable-default-apps","--disable-dev-shm-usage","--disable-gpu","--window-size="+o+","+i];a&&l.push(a);let c=null,u=0,d=async function(T){let g=zs.mkdtempSync(Ss.join(s,"luban-chrome-"));c=xA(n.path,["--user-data-dir="+g].concat(T).concat(["about:blank"]),{stdio:["ignore","ignore","pipe"],windowsHide:!0,detached:process.platform!=="win32"});let v="";c.stderr&&(c.stderr.setEncoding("utf8"),c.stderr.on("data",function(_){v.length<4e3&&(v+=_)}));let b=!1;c.on("exit",function(){b=!0});let S=Date.now()+(e.timeoutMs||qw);for(;Date.now()<S&&!b;){let _=_A(g);if(_)return{port:_.port,stderr:v,dir:g};await Ut(200)}return Pi(g),{port:0,stderr:v,exited:b}},f=await d(l);if(!f.port&&a==="--headless=new"){Mr(c),await Ut(300);let T=l.filter(function(g){return g!=="--headless=new"}).concat(["--headless"]);f=await d(T)}if(!f.port&&/No usable sandbox|SUID sandbox/i.test(f.stderr||"")){Mr(c),await Ut(300);let T=l.concat(["--no-sandbox"]);if(f=await d(T),!f.port&&a==="--headless=new"){Mr(c),await Ut(300);let g=T.filter(function(v){return v!=="--headless=new"}).concat(["--headless"]);f=await d(g)}}if(!f.port){Mr(c),Pi(r);let T=f.stderr?`
|
|
208
|
+
\u6D4F\u89C8\u5668\u8F93\u51FA\uFF1A`+f.stderr.trim().slice(0,800):"";throw new Error("\u6D4F\u89C8\u5668\u542F\u52A8\u5931\u8D25\uFF08\u6CA1\u7B49\u5230\u8C03\u8BD5\u7AEF\u53E3\uFF09\u3002"+T)}u=f.port,r=f.dir||r;let p=null,h=Date.now()+1e4;for(;Date.now()<h;){let T=[];try{T=await TA(u,"/json/list")}catch{T=[]}if(Array.isArray(T)&&(p=T.find(function(g){return g&&g.type==="page"&&g.webSocketDebuggerUrl}),p))break;await Ut(200)}if(!p)throw Mr(c),Pi(r),new Error("\u6D4F\u89C8\u5668\u8D77\u6765\u4E86\uFF0C\u4F46\u6CA1\u627E\u5230\u53EF\u7528\u7684\u9875\u9762\uFF08/json/list \u4E3A\u7A7A\uFF09");let m;try{m=await SA(p.webSocketDebuggerUrl,15e3)}catch(T){throw Mr(c),Pi(r),T}let y=new Dd(m),w=new Rd({proc:c,dir:r,exe:n.path,port:u,cdp:y,width:o,height:i});try{await w.init()}catch(T){throw await w.close(),new Error("\u6D4F\u89C8\u5668\u5DF2\u542F\u52A8\uFF0C\u4F46\u521D\u59CB\u5316 CDP \u57DF\u5931\u8D25\uFF1A"+(T&&T.message?T.message:T))}return w}Xw.exports={findChrome:Kw,chromeCandidates:Bw,isSnapBinary:Uw,profileBaseDir:Ww,normalizeUrl:Jw,formatAxTree:Vw,clipText:zw,encodeFrame:Hw,decodeFrame:Gw,launch:AA,MAX_FRAME:$w,EVENTS_MAX:Fd,DEFAULT_TIMEOUT_MS:ji,LAUNCH_TIMEOUT_MS:qw}});var Co=ne((q2,Qd)=>{var V=require("fs"),Vs=require("os"),W=require("path"),t0=require("crypto"),n0=2e3,s0=6e4,OA=18e4,Zw=8e3,$d=500,Sl=64,EA=30,Qw=65536,PA=["bg","fg","panel","border","accent","accent-fg","muted","code-bg","surface","surface-2","hover","link","ok","warn","error"],qd={"radius-sm":[0,48],radius:[0,48],"radius-lg":[0,48],"font-size":[8,40]},jA=24,IA=/^#[0-9a-fA-F]{3,8}$/,NA=/^(?:rgb|rgba|hsl|hsla)\(\s*[-0-9.,%\s/]+\)$/,FA=/^[a-zA-Z]{3,22}$/,LA=/^(expression|url|var|env|attr|image|paint|element)$/i,DA=/^(0|0?\.\d+|[1-9]\d*(?:\.\d+)?)\s*(px|em|rem|%|pt)?$/,j={root:"",version:"0",rec:function(){},confirm:null,enabled:!1,maxTools:EA,timeoutMs:s0,plugins:new Map,exposed:new Map,disabled:new Set,pending:[],trust:null,trustLoaded:!1,trustDirty:!1,dirs:[],errors:[],scannedAt:"",scannedMs:0};function Cr(t){let e=t||{};if(e.root&&String(e.root)!==j.root&&(j.scannedMs=0),e.root&&(j.root=String(e.root)),typeof e.rec=="function"&&(j.rec=e.rec),typeof e.confirm=="function"&&(j.confirm=e.confirm),e.enabled!==void 0){let r=e.enabled===!0;!r&&j.enabled&&(j.plugins=new Map,j.exposed.clear(),j.dirs=[],j.errors=[],j.scannedMs=0),j.enabled=r}let n=Number(e.maxTools);if(isFinite(n)&&n>0){let r=Math.min(Math.floor(n),200);r!==j.maxTools&&(j.maxTools=r,j.scannedMs=0)}let s=Number(e.timeoutMs);isFinite(s)&&s>=1&&(j.timeoutMs=Math.min(Math.floor(s),OA))}function Wt(t,e){try{j.rec(t,e)}catch{}}function _l(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function Ar(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function RA(t){return t0.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function r0(t,e){let n="pl__"+Ar(t)+"__"+Ar(e);if(n.length>Sl){let s="_"+RA(t+"/"+e);n=n.slice(0,Sl-s.length)+s}return n}function o0(){return W.join(Vs.homedir(),".luban","plugins-trust.json")}function Gd(){if(j.trustLoaded)return;j.trustLoaded=!0,j.trust=new Map;let t;try{t=JSON.parse(V.readFileSync(o0(),"utf8"))}catch{return}if(!(!t||typeof t!="object"||!t.trusted||typeof t.trusted!="object"))for(let e of Object.keys(t.trusted)){let n=t.trusted[e];typeof n=="string"&&n&&j.trust.set(e,n)}}function i0(){if(!j.trustDirty||!j.trust)return;let t={trusted:{}};for(let[e,n]of j.trust)t.trusted[e]=n;try{let e=o0();V.mkdirSync(W.dirname(e),{recursive:!0}),V.writeFileSync(e,JSON.stringify(t,null,2)+`
|
|
209
|
+
`),j.trustDirty=!1}catch(e){Wt("plugin_trust_save_failed",{message:e.message})}}function Ni(t){let e=[];(function s(r){let o;try{o=V.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of o){if(i.name==="node_modules"||i.name===".git")continue;let a=W.join(r,i.name);i.isDirectory()?s(a):i.isFile()&&e.push(a)}})(t),e.sort();let n=t0.createHash("sha1");for(let s of e){n.update(W.relative(t,s));try{n.update(V.readFileSync(s))}catch{}}return n.digest("hex")}function zd(t,e){return Gd(),j.trust.get(t)===e}function a0(t,e){Gd(),j.trust.set(t,e),j.trustDirty=!0,i0()}function $A(t,e){let n=String(e??"").trim();if(!n||n.length>64||/[;{}<>\\"']/.test(n)||/\/\*/.test(n))return"";if(qd[t]){let s=n.match(DA);if(!s)return"";let r=Number(s[1]),o=qd[t];return!isFinite(r)||r<o[0]||r>o[1]?"":s[2]?n:r+"px"}return IA.test(n)||NA.test(n)||FA.test(n)&&!LA.test(n)?n:""}function qA(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t.tokens&&typeof t.tokens=="object"&&!Array.isArray(t.tokens)?t.tokens:t,n=Object.create(null),s=[],r=0;for(let i of Object.keys(e)){if(r>=jA){s.push(i);continue}let a=String(i).replace(/^--/,"");if(PA.indexOf(a)<0&&!qd[a]){a!=="tokens"&&a!=="label"&&a!=="description"&&s.push(i);continue}let l=$A(a,e[i]);if(!l){s.push(i);continue}n[a]=l,r++}return r?{label:_l(typeof t.label=="string"?t.label.trim():"",40)||"",tokens:n,dropped:s}:{error:"theme.tokens \u91CC\u6CA1\u6709\u5408\u6CD5 token",dropped:s}}function Js(t){let e=W.join(t,"plugin.json"),n;try{n=V.statSync(e)}catch{return{error:"\u7F3A\u5C11 plugin.json"}}if(!n.isFile())return{error:"plugin.json \u4E0D\u662F\u6587\u4EF6"};if(n.size>Qw)return{error:"plugin.json \u8D85\u8FC7 "+Qw+" \u5B57\u8282"};let s;try{s=JSON.parse(V.readFileSync(e,"utf8"))}catch(p){return{error:"plugin.json \u89E3\u6790\u5931\u8D25\uFF1A"+p.message}}if(!s||typeof s!="object")return{error:"plugin.json \u4E0D\u662F\u5BF9\u8C61"};let r=Ar(s.name||W.basename(t));if(!s.name||typeof s.name!="string")return{error:"\u7F3A\u5C11 name"};let o=typeof s.main=="string"&&s.main.trim()?s.main.trim():"index.js",i=W.resolve(t,o),a=W.relative(t,i);if(!a||a.startsWith("..")||W.isAbsolute(a))return{error:"main \u8D8A\u754C\uFF1A"+o};if(!/\.js$/i.test(i))return{error:"main \u5FC5\u987B\u662F .js \u6587\u4EF6\uFF1A"+o};let l=s.tools,c=qA(s.theme);if(c&&c.error)return{error:c.error};if(l!=null&&!Array.isArray(l))return{error:"tools \u5FC5\u987B\u662F\u6570\u7EC4"};if(!Array.isArray(l)&&!c)return{error:"\u7F3A\u5C11 tools \u6570\u7EC4"};let u=s.readOnly===!0,d=[],f=Object.create(null);for(let p of Array.isArray(l)?l:[]){if(!p||typeof p!="object")continue;let h=Ar(p.name);if(!p.name||typeof p.name!="string"||!h||f[h])continue;f[h]=!0;let m=p.parameters&&typeof p.parameters=="object"?p.parameters:{type:"object",properties:{}};d.push({name:h,description:_l(typeof p.description=="string"?p.description:"",$d),parameters:m,readOnly:p.readOnly===!0||p.readOnly!==!1&&u})}return!d.length&&!c?{error:"tools \u91CC\u6CA1\u6709\u5408\u6CD5\u5DE5\u5177"}:{name:r,version:typeof s.version=="string"?s.version:"",description:_l(typeof s.description=="string"?s.description:"",$d),main:o,mainAbs:i,dir:t,tools:d,readOnly:u,theme:c?{label:c.label,tokens:c.tokens,dropped:c.dropped||[]}:null}}function BA(t){let e=t||j.root||process.cwd(),n=Vs.homedir();return[W.join(n,".luban","plugins"),W.join(e,".luban","plugins")]}function l0(){j.exposed.clear();let t=[];for(let e of j.plugins.values())t.push(e.name);t.sort();for(let e of t){let n=j.plugins.get(e);for(let s of n.tools){if(j.exposed.size>=j.maxTools)return;let r=r0(n.name,s.name);if(j.exposed.has(r)){let o=2;for(;j.exposed.has(r+"_"+o);)o++;let i="_"+o;r=r.length+i.length>Sl?r.slice(0,Sl-i.length)+i:r+i}j.exposed.set(r,{plugin:n.name,tool:s.name,def:s,readOnly:s.readOnly===!0})}}}function Mo(){let t=BA(j.root),e=[],n=new Map;for(let s of t){let r;try{r=V.readdirSync(s,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=W.join(s,o.name),a=Js(i);if(a.error){e.push(o.name+"\uFF1A"+a.error),Wt("plugin_manifest_bad",{dir:i,message:a.error});continue}n.set(a.name,{manifest:a,source:s})}}return{dirs:t,errors:e,merged:n}}async function jn(t,e){let n=e||{};if(t&&(j.root=String(t)),!j.enabled)return j.plugins=new Map,j.exposed.clear(),j.dirs=[],j.errors=[],j.pending=[],j.scannedAt=new Date().toISOString(),j.scannedMs=Date.now(),[];let s=Mo(),r=s.dirs;j.dirs=r;let o=s.errors,i=s.merged,a=new Map,l=[];for(let[c,u]of i){let d=u.manifest,f=Ni(d.dir);if(zd(d.dir,f)){a.set(c,d);continue}if(j.disabled.has(d.dir)||typeof j.confirm!="function"){l.push(d),typeof j.confirm!="function"&&(o.push(c+"\uFF1A\u672A\u4FE1\u4EFB\u4E14\u65E0\u786E\u8BA4\u901A\u9053\uFF0C\u5DF2\u8DF3\u8FC7"),Wt("plugin_untrusted_skip",{plugin:c,dir:d.dir}));continue}let p=!1;try{p=await j.confirm({name:d.name,version:d.version,description:d.description,dir:d.dir,source:u.source,tools:d.tools.map(function(h){return h.name}),fingerprint:f})}catch{p=!1}p===!0?(a0(d.dir,f),a.set(c,d),Wt("plugin_trusted",{plugin:c,dir:d.dir})):(j.disabled.add(d.dir),l.push(d),Wt("plugin_rejected",{plugin:c,dir:d.dir}))}return j.plugins=a,j.pending=l,l0(),j.errors=o,j.scannedAt=new Date().toISOString(),j.scannedMs=Date.now(),n.quiet||Wt("plugins_scanned",{count:j.plugins.size,tools:j.exposed.size,root:j.root,names:Array.from(j.plugins.keys()),errors:o}),Array.from(j.plugins.values())}function Fi(){if(!j.enabled||!j.root){j.exposed.size&&(j.plugins=new Map,j.exposed.clear());return}if(j.scannedMs&&Date.now()-j.scannedMs<n0)return;let t=j.exposed.size,e=Mo().merged,n=new Map,s=[];for(let[r,o]of e){let i=o.manifest,a=Ni(i.dir);zd(i.dir,a)?n.set(r,i):s.push(i)}j.plugins=n,j.pending=s,l0(),j.scannedMs=Date.now(),j.scannedAt=new Date().toISOString(),j.exposed.size!==t&&Wt("plugins_changed",{count:j.plugins.size,tools:j.exposed.size})}function UA(t){let e=t||{};j.scannedMs=0,e.keepDisabled||(j.disabled=new Set);for(let n of j.plugins.values())try{delete require.cache[Xd(n)]}catch{}return jn(j.root)}var WA="plugins-trash";function Li(){return W.join(Vs.homedir(),".luban","plugins")}function Di(){return W.join(Vs.homedir(),".luban",WA)}function Xs(t){let e=W.resolve(String(t||"")),n=[{scope:"global",base:Li()},{scope:"project",base:W.join(W.resolve(j.root||process.cwd()),".luban","plugins")}];for(let s of n){let r=W.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!W.isAbsolute(r)&&r.indexOf(W.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function e0(){let t=new Date,e=function(n){return(n<10?"0":"")+n};return String(t.getFullYear())+e(t.getMonth()+1)+e(t.getDate())+"-"+e(t.getHours())+e(t.getMinutes())+e(t.getSeconds())}function Tl(t,e){V.mkdirSync(e,{recursive:!0});for(let n of V.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=W.join(t,n.name),r=W.join(e,n.name);n.isDirectory()?Tl(s,r):n.isFile()&&V.copyFileSync(s,r)}}function c0(t){try{let e=JSON.parse(V.readFileSync(t+".json","utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function KA(t,e){try{V.writeFileSync(t+".json",JSON.stringify(e,null,2)+`
|
|
210
|
+
`)}catch{}}function HA(t){Gd(),j.trust.delete(W.resolve(t))&&(j.trustDirty=!0,i0())}function Vd(t){let e=W.resolve(String(t||""));if(!Xs(e))throw new Error("\u62D2\u7EDD\u64CD\u4F5C\uFF1A\u4E0D\u5728\u63D2\u4EF6\u76EE\u5F55\u4E0B\u7684\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF1A"+e);let n=Js(e);if(n.error)throw new Error("\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u76EE\u5F55\uFF1A"+n.error);return a0(e,Ni(e)),j.disabled.delete(e),j.scannedMs=0,n}function u0(t,e){let n=W.resolve(t),s=Xs(n);if(!s)throw new Error("\u62D2\u7EDD\u64CD\u4F5C\uFF1A\u4E0D\u5728\u63D2\u4EF6\u76EE\u5F55\u4E0B\u7684\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF1A"+n);let r=Di();V.mkdirSync(r,{recursive:!0,mode:448});let o=Ar(s.name),i=o+"-"+e0(),a=2;for(;V.existsSync(W.join(r,i))||V.existsSync(W.join(r,i+".json"));)i=o+"-"+e0()+"-"+a,a++;let l=W.join(r,i);try{V.renameSync(n,l)}catch(c){if(c&&c.code==="EXDEV")Tl(n,l),V.rmSync(n,{recursive:!0,force:!0});else throw c}return KA(l,{name:s.name,from:n,scope:s.scope,at:new Date().toISOString(),why:e||""}),HA(n),j.scannedMs=0,i}async function xl(t,e){let n=e||{},s=W.resolve(String(t||"")),r;try{r=V.statSync(s)}catch{return{ok:!1,code:"missing",message:"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A"+s}}if(!r.isDirectory())return{ok:!1,code:"not-dir",message:"\u4E0D\u662F\u76EE\u5F55\uFF1A"+s};let o=Js(s);if(o.error)return{ok:!1,code:"bad-manifest",message:"\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u76EE\u5F55\uFF1A"+o.error};let i=n.target==="project"?"project":"global",a=i==="project"?W.join(W.resolve(j.root||process.cwd()),".luban","plugins"):Li(),l=W.join(a,o.name);if(W.resolve(s)===l)return{ok:!1,code:"same-dir",message:"\u6E90\u76EE\u5F55\u5C31\u662F\u63D2\u4EF6\u76EE\u5F55\u672C\u8EAB\uFF1A"+l};let c=!1;if(V.existsSync(l)){if(!n.replace)return{ok:!1,code:"exists",name:o.name,dir:l,message:"\u5DF2\u5B58\u5728\u540C\u540D\u63D2\u4EF6\uFF1A"+o.name};u0(l,"replaced-by-install"),c=!0}try{Tl(s,l)}catch(d){try{V.rmSync(l,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+d.message}}let u=Js(l);if(u.error){try{V.rmSync(l,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"bad-copy",message:"\u590D\u5236\u540E\u7684\u76EE\u5F55\u4E0D\u5B8C\u6574\uFF1A"+u.error}}if(n.trust)try{Vd(l)}catch(d){Wt("plugin_trust_failed",{dir:l,message:d.message})}return j.scannedMs=0,await jn(j.root,{quiet:!0}),Wt("plugin_installed",{name:u.name,dir:l,replaced:c,trust:!!n.trust}),{ok:!0,name:u.name,version:u.version,dir:l,scope:i,replaced:c,tools:u.tools.map(function(d){return d.name})}}async function Bd(t,e){let n=String(t||"").trim();if(!n)return{ok:!1,message:"\u7F3A\u5C11\u63D2\u4EF6\u540D"};let s=n.indexOf("/")>=0||n.indexOf("\\")>=0||/^[A-Za-z]:/.test(n),r="";if(s)r=W.resolve(n);else{let c=Mo().merged.get(n);if(!c)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1A"+n};r=c.manifest.dir}let o=Xs(r);if(!o)return{ok:!1,message:"\u62D2\u7EDD\u64CD\u4F5C\uFF1A\u4E0D\u5728\u63D2\u4EF6\u76EE\u5F55\u4E0B\u7684\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF1A"+r};let i=Js(r),a=i.error?o.name:i.name,l="";try{l=u0(r,e&&e.why||"uninstall")}catch(c){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+c.message}}if(!i.error)try{delete require.cache[Xd(i)]}catch{}return await jn(j.root,{quiet:!0}),Wt("plugin_uninstalled",{name:a,dir:r,trash:l}),{ok:!0,name:a,dir:r,trash:l}}function Ud(){let t=Di(),e;try{e=V.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=W.join(t,s.name),o=c0(r),i=Js(r),a=s.name.lastIndexOf("-");n.push({entry:s.name,name:i.error?String(o.name||(a>0?s.name.slice(0,a):s.name)):i.name,version:i.error?"":i.version,description:i.error?"":i.description,dir:r,from:String(o.from||""),scope:String(o.scope||""),why:String(o.why||""),at:String(o.at||""),valid:!i.error,error:i.error||""})}return n.sort(function(s,r){return s.at!==r.at?s.at<r.at?1:-1:s.entry<r.entry?1:s.entry>r.entry?-1:0}),n}async function Wd(t,e){let n=e||{},s=String(t||"").trim();if(!s||s.startsWith(".")||s.indexOf("/")>=0||s.indexOf("\\")>=0)return{ok:!1,message:"\u975E\u6CD5\u7684\u56DE\u6536\u7AD9\u6761\u76EE\uFF1A"+s};let r=W.join(Di(),s);if(!V.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o=c0(r),i=Js(r),a=i.error?String(o.name||s):i.name,l="",c=String(o.from||"");if(c){let u=W.resolve(c),d=W.dirname(u);V.existsSync(d)&&!V.existsSync(u)&&Xs(u)&&(l=u)}if(l||(l=W.join(Li(),Ar(a))),V.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u63D2\u4EF6\uFF1A"+l};V.mkdirSync(W.dirname(l),{recursive:!0});try{V.renameSync(r,l)}catch(u){if(u&&u.code==="EXDEV")Tl(r,l),V.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+u.message}}try{V.unlinkSync(r+".json")}catch{}if(n.trust!==!1)try{Vd(l)}catch(u){Wt("plugin_restore_trust_failed",{dir:l,message:u.message})}return await jn(j.root,{quiet:!0}),Wt("plugin_restored",{name:a,dir:l,from:s}),{ok:!0,name:a,dir:l}}function _o(t){return Fi(),j.exposed.has(String(t))}function Jd(t){return Fi(),j.exposed.get(String(t))||null}function d0(t){let e=Jd(t);return e?e.readOnly===!0:!1}function To(t){Fi();let e=!!(t&&t.planOnly),n=[];for(let s of j.exposed){let r=s[0],o=s[1];if(e&&o.readOnly!==!0)continue;let i=o.def||{},a=i.description||"\u63D2\u4EF6\u5DE5\u5177 "+o.plugin+"/"+o.tool;if(n.push({type:"function",function:{name:r,description:_l(a,$d)+"\uFF08\u6765\u81EA\u672C\u5730\u63D2\u4EF6\u300C"+o.plugin+"\u300D\uFF09",parameters:i.parameters||{type:"object",properties:{}}}}),n.length>=j.maxTools)break}return n.sort(function(s,r){return s.function.name<r.function.name?-1:s.function.name>r.function.name?1:0}),n}function Xd(t){let e=W.resolve(t.mainAbs);try{return V.realpathSync(e)}catch{return e}}function GA(t){let e=j.plugins.get(t.plugin);if(!e)throw new Error("\u63D2\u4EF6\u5DF2\u5378\u8F7D: "+t.plugin);let n=Xd(e),s;try{require.cache[n]&&delete require.cache[n],s=require(n)}catch(i){throw new Error("\u63D2\u4EF6\u300C"+t.plugin+"\u300D\u52A0\u8F7D\u5931\u8D25\uFF1A"+i.message)}if(!s||typeof s!="object")throw new Error("\u63D2\u4EF6\u300C"+t.plugin+"\u300D\u7684 main \u6CA1\u6709\u5BFC\u51FA\u5BF9\u8C61");let r=s.tools&&typeof s.tools=="object"?s.tools:null,o=r?r[t.tool]:null;if(o&&typeof o.handler=="function")return o.handler;if(o&&typeof o=="function")return o;if(typeof s.call=="function")return function(i,a){return s.call(t.tool,i,a)};throw new Error("\u63D2\u4EF6\u300C"+t.plugin+"\u300D\u6CA1\u6709\u5DE5\u5177 "+t.tool+" \u7684 handler\uFF08\u8981 exports.tools."+t.tool+".handler \u6216 exports.call\uFF09")}function zA(t,e,n){let s,r=new Promise(function(o,i){s=setTimeout(function(){i(new Error(n+" \u8D85\u65F6\uFF08"+e+"ms\uFF09"))},e)});return Promise.race([t,r]).finally(function(){clearTimeout(s)})}async function Ii(t,e,n){let s=Jd(t);if(!s)throw new Error("\u672A\u77E5\u63D2\u4EF6\u5DE5\u5177: "+t);let r=n||{},o=Date.now(),i=!1;try{let a=GA(s),l={root:r.root||j.root,sessionId:r.sessionId||"",mode:r.mode||"",signal:r.signal||null,log:typeof r.log=="function"?r.log:function(){}},c=await zA(Promise.resolve().then(function(){return a(e||{},l)}),j.timeoutMs,"\u63D2\u4EF6\u5DE5\u5177 "+t);i=!0;let u;return c==null?u="(\u65E0\u8F93\u51FA)":typeof c=="string"?u=c:u=JSON.stringify(c),u=u.trim()||"(\u65E0\u8F93\u51FA)",u.length>Zw&&(u=u.slice(0,Zw)+`
|
|
211
|
+
\u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`),u}catch(a){let l=String(a&&a.message||a);throw Wt("plugin_call_failed",{plugin:s.plugin,tool:s.tool,message:l}),new Error("\u63D2\u4EF6\u5DE5\u5177 "+t+" \u5931\u8D25\uFF1A"+l)}finally{Wt("plugin_call",{plugin:s.plugin,tool:s.tool,ok:i,ms:Date.now()-o})}}function f0(){Fi();let t=[];for(let e of j.plugins.values()){let n=Xs(e.dir);t.push({name:e.name,version:e.version,description:e.description,dir:e.dir,scope:n?n.scope:"",trusted:!0,readOnly:e.readOnly===!0,theme:Yd(e),tools:e.tools.map(function(s){return{name:s.name,readOnly:s.readOnly===!0}})})}return t}function VA(){return Fi(),j.pending.map(function(t){let e=Xs(t.dir);return{name:t.name,version:t.version,description:t.description,dir:t.dir,scope:e?e.scope:"",trusted:!1,readOnly:t.readOnly===!0,theme:Yd(t),tools:t.tools.map(function(n){return{name:n.name,readOnly:n.readOnly===!0}})}})}function Kd(){let t=Mo(),e=[],n=[];for(let s of t.merged.values()){let r=s.manifest,o=Xs(r.dir),i={name:r.name,version:r.version,description:r.description,dir:r.dir,scope:o?o.scope:"",readOnly:r.readOnly===!0,trusted:zd(r.dir,Ni(r.dir)),theme:Yd(r),tools:r.tools.map(function(a){return{name:a.name,readOnly:a.readOnly===!0}})};(i.trusted?e:n).push(i)}return e.sort(function(s,r){return s.name<r.name?-1:s.name>r.name?1:0}),n.sort(function(s,r){return s.name<r.name?-1:s.name>r.name?1:0}),{dirs:t.dirs,errors:t.errors,plugins:e,pending:n}}function Yd(t){if(!t||!t.theme)return null;let e=Object.keys(t.theme.tokens);return{label:t.theme.label||t.name,tokens:e.length,names:e,dropped:(t.theme.dropped||[]).length}}function Zd(){let t=Mo(),e=[];for(let n of t.merged.values()){let s=n.manifest;s.theme&&((s.theme.dropped||[]).length&&Wt("plugin_theme_token_dropped",{plugin:s.name,dropped:s.theme.dropped.slice(0,8)}),e.push({name:s.name,label:s.theme.label||s.name,description:s.description,dir:s.dir,tokens:Object.assign({},s.theme.tokens),dropped:(s.theme.dropped||[]).slice()}))}return e.sort(function(n,s){return n.name<s.name?-1:n.name>s.name?1:0}),e}function vl(t){let e=String(t??"").trim();if(!e)return null;let n=Zd();for(let s of n)if(s.name===e)return s;return null}function Hd(){return{root:j.root,enabled:j.enabled,dirs:j.dirs.slice(),globalDir:Li(),trashDir:Di(),errors:j.errors.slice(),scannedAt:j.scannedAt,plugins:f0(),pending:VA(),tools:Array.from(j.exposed.entries()).map(function(t){return{name:t[0],plugin:t[1].plugin,tool:t[1].tool,readOnly:t[1].readOnly===!0}})}}if(require.main===Qd){let t=require("assert"),e=V.promises;(async function(){let n=V.mkdtempSync(W.join(Vs.tmpdir(),"luban-plugin-test-")),s=W.join(n,"proj"),r=W.join(n,"home",".luban","plugins"),o=W.join(s,".luban","plugins");V.mkdirSync(r,{recursive:!0}),V.mkdirSync(o,{recursive:!0});let i=Vs.homedir;Vs.homedir=function(){return W.join(n,"home")};let a=W.join(r,"demo");V.mkdirSync(a,{recursive:!0}),V.writeFileSync(W.join(a,"plugin.json"),JSON.stringify({name:"demo",version:"1.0.0",description:"\u6D4B\u8BD5\u63D2\u4EF6",readOnly:!0,tools:[{name:"echo",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),V.writeFileSync(W.join(a,"index.js"),'module.exports={tools:{echo:{handler:async(a)=>"echo:"+(a&&a.text||"")}}};');let l=W.join(o,"demo");V.mkdirSync(l,{recursive:!0}),V.writeFileSync(W.join(l,"plugin.json"),JSON.stringify({name:"demo",version:"2.0.0",readOnly:!1,tools:[{name:"boom",description:"\u629B\u9519",parameters:{type:"object",properties:{}}}]})),V.writeFileSync(W.join(l,"index.js"),'module.exports={tools:{boom:{handler:async()=>{throw new Error("\u70B8\u4E86")}}}};');let c=W.join(r,"bad");V.mkdirSync(c,{recursive:!0}),V.writeFileSync(W.join(c,"plugin.json"),"{ not json");let u=[],d=[];Cr({root:s,enabled:!0,rec:function(Me,Rt){u.push([Me,Rt])},confirm:async function(Me){return d.push(Me.name),!0}}),await jn(s);let f=Hd();t.strictEqual(f.plugins.length,1,"\u5E94\u6709 1 \u4E2A\u63D2\u4EF6\uFF08demo \u9879\u76EE\u7248\u8986\u76D6\u5BB6\u76EE\u5F55\u7248\uFF0Cbad \u6E05\u5355\u574F\u88AB\u8DF3\u8FC7\uFF09");let p=f.plugins.find(function(Me){return Me.name==="demo"});t.strictEqual(p.version,"2.0.0","\u9879\u76EE\u63D2\u4EF6\u8986\u76D6\u5BB6\u76EE\u5F55"),t.strictEqual(p.tools.length,1),t.strictEqual(p.tools[0].name,"boom"),t.strictEqual(f.errors.some(function(Me){return Me.indexOf("bad")===0}),!0,"\u574F\u6E05\u5355\u8981\u8BB0 error"),t.strictEqual(_o("pl__demo__boom"),!0),t.strictEqual(_o("pl__demo__echo"),!1,"\u88AB\u9879\u76EE\u8986\u76D6\u7684 echo \u4E0D\u8BE5\u51FA\u73B0"),t.strictEqual(d0("pl__demo__boom"),!1);let h=JSON.stringify(To({})),m=JSON.stringify(To({}));t.strictEqual(h,m,"\u4E24\u6B21 toolDefs \u9010\u5B57\u8282\u76F8\u540C"),t.strictEqual(To({planOnly:!0}).length,0,"\u975E\u53EA\u8BFB\u5DE5\u5177\u4E0D\u8FDB Plan");let y="";try{await Ii("pl__demo__boom",{},{root:s})}catch(Me){y=Me.message}t.ok(y.indexOf("\u70B8\u4E86")>=0,"\u629B\u9519\u8981\u5E26\u4E0A\u539F\u56E0\uFF0C\u5B9E\u9645: "+y);let w=W.join(r,"echo");V.mkdirSync(w,{recursive:!0}),V.writeFileSync(W.join(w,"plugin.json"),JSON.stringify({name:"echo",readOnly:!0,tools:[{name:"say",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),V.writeFileSync(W.join(w,"index.js"),'module.exports={tools:{say:{handler:async(a)=>"say:"+(a&&a.text||"")}}}'),j.scannedMs=0,await jn(s,{quiet:!0});let T=await Ii("pl__echo__say",{text:"hi"},{root:s});t.strictEqual(T,"say:hi","echo \u6B63\u5E38\u8FD4\u56DE\uFF0C\u5B9E\u9645: "+T);let g=W.join(r,"slow");V.mkdirSync(g,{recursive:!0}),V.writeFileSync(W.join(g,"plugin.json"),JSON.stringify({name:"slow",readOnly:!0,tools:[{name:"hang",description:"\u6302\u4F4F",parameters:{type:"object",properties:{}}}]})),V.writeFileSync(W.join(g,"index.js"),"module.exports={tools:{hang:{handler:()=>new Promise(()=>{})}}}"),Cr({timeoutMs:300}),j.scannedMs=0,await jn(s,{quiet:!0});let v="";try{await Ii("pl__slow__hang",{},{root:s})}catch(Me){v=Me.message}t.ok(v.indexOf("\u8D85\u65F6")>=0,"\u8981\u8D85\u65F6\uFF0C\u5B9E\u9645: "+v),Cr({timeoutMs:s0}),t.strictEqual(d.indexOf("demo")>=0,!0,"\u9996\u6B21\u8981\u786E\u8BA4 demo");let b=W.join(n,"home",".luban","plugins-trust.json");t.ok(V.existsSync(b),"\u4FE1\u4EFB\u8868\u8981\u843D\u76D8");let S=d.length;V.writeFileSync(W.join(w,"index.js"),'module.exports={tools:{say:{handler:async()=>"changed"}}}'),j.scannedMs=0,await jn(s,{quiet:!0}),t.ok(d.length>S,"\u5185\u5BB9\u53D8\u4E86\u8981\u91CD\u65B0\u786E\u8BA4"),Cr({confirm:async function(){return!1}}),j.trust=new Map,j.trustDirty=!0,j.disabled=new Set,j.scannedMs=0,await jn(s,{quiet:!0}),t.strictEqual(To({}).length,0,"\u5168\u62D2\u7EDD\u540E\u6E05\u5355\u4E3A\u7A7A"),t.ok(Hd().pending.length>0,"\u88AB\u62D2\u7684\u63D2\u4EF6\u8981\u8FDB pending"),Cr({enabled:!0,confirm:async function(){return!0}}),j.trust=new Map,j.disabled=new Set,j.scannedMs=0,await jn(s,{quiet:!0});let _=W.join(n,"downloads","pkgs","fresh");V.mkdirSync(_,{recursive:!0}),V.writeFileSync(W.join(_,"plugin.json"),JSON.stringify({name:"fresh",version:"3.1.0",readOnly:!0,tools:[{name:"ping",description:"ping",parameters:{type:"object",properties:{}}}]})),V.writeFileSync(W.join(_,"index.js"),'module.exports={tools:{ping:{handler:async()=>"pong"}}}'),V.mkdirSync(W.join(_,".git"),{recursive:!0}),V.writeFileSync(W.join(_,".git","HEAD"),"ref: refs/heads/main");let C=await xl(_,{trust:!0});t.strictEqual(C.ok,!0,"\u5B89\u88C5\u5E94\u6210\u529F\uFF1A"+JSON.stringify(C)),t.strictEqual(C.name,"fresh"),t.strictEqual(C.replaced,!1);let A=W.join(r,"fresh");t.strictEqual(V.existsSync(W.join(A,"plugin.json")),!0,"\u6587\u4EF6\u8981\u843D\u8FDB\u5168\u5C40\u63D2\u4EF6\u6839"),t.strictEqual(V.existsSync(W.join(A,".git")),!1,".git \u4E0D\u8BE5\u88AB\u590D\u5236"),t.strictEqual(_o("pl__fresh__ping"),!0,"\u88C5\u5B8C\u7ACB\u5373\u53EF\u7528\uFF08\u4FE1\u4EFB + \u91CD\u626B\uFF09"),t.strictEqual(await Ii("pl__fresh__ping",{},{root:s}),"pong");let F=await xl(_,{trust:!0});t.strictEqual(F.ok,!1,"\u540C\u540D\u4E0D\u5E26 replace \u5E94\u62D2\u7EDD"),t.strictEqual(F.code,"exists");let B=await xl(_,{trust:!0,replace:!0});t.strictEqual(B.ok,!0,"replace \u5E94\u6210\u529F"),t.strictEqual(B.replaced,!0);let H=Ud();t.ok(H.some(function(Me){return Me.why==="replaced-by-install"}),"\u65E7\u7248\u8981\u8FDB\u56DE\u6536\u7AD9");let $=await Bd("fresh");t.strictEqual($.ok,!0,"\u5378\u8F7D\u5E94\u6210\u529F\uFF1A"+JSON.stringify($)),t.strictEqual(V.existsSync(A),!1,"\u63D2\u4EF6\u76EE\u5F55\u8981\u79FB\u8D70"),t.strictEqual(_o("pl__fresh__ping"),!1,"\u5378\u8F7D\u540E\u5DE5\u5177\u6D88\u5931");let P=Ud().find(function(Me){return Me.name==="fresh"});t.ok(P,"\u56DE\u6536\u7AD9\u91CC\u5E94\u6709 fresh"),t.strictEqual(P.valid,!0,"\u56DE\u6536\u7AD9\u6761\u76EE\u5E94\u80FD\u89E3\u6790\u6E05\u5355"),t.strictEqual(P.version,"3.1.0"),t.strictEqual(P.from,A,"\u5143\u6570\u636E\u8981\u8BB0\u4F4F\u539F\u4F4D\u7F6E");let K=await Wd(P.entry);t.strictEqual(K.ok,!0,"\u8FD8\u539F\u5E94\u6210\u529F\uFF1A"+JSON.stringify(K)),t.strictEqual(K.dir,A,"\u8981\u8FD8\u539F\u56DE\u539F\u4F4D\u7F6E"),t.strictEqual(_o("pl__fresh__ping"),!0,"\u8FD8\u539F\u540E\u7ACB\u5373\u53EF\u7528");let ae=W.join(n,"outside");V.mkdirSync(ae,{recursive:!0}),V.writeFileSync(W.join(ae,"plugin.json"),JSON.stringify({name:"evil",tools:[{name:"x",description:"x"}]}));let te=await Bd(ae);t.strictEqual(te.ok,!1,"\u63D2\u4EF6\u6839\u4E4B\u5916\u7684\u76EE\u5F55\u5FC5\u987B\u62D2\u7EDD\u5378\u8F7D"),t.strictEqual(V.existsSync(ae),!0,"\u62D2\u7EDD\u540E\u76EE\u5F55\u8FD8\u5728");let Q=await Wd("../outside");t.strictEqual(Q.ok,!1,"\u5E26 / \u7684\u56DE\u6536\u7AD9\u6761\u76EE\u8981\u62D2\u7EDD"),V.writeFileSync(W.join(w,"index.js"),'module.exports={tools:{say:{handler:async()=>"dirty"}}}'),Cr({enabled:!1}),await jn(s,{quiet:!0}),t.strictEqual(To({}).length,0,"\u5173\u95ED\u540E\u6E05\u5355\u4E3A\u7A7A");let he=Kd();t.ok(he.plugins.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u5DF2\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+he.plugins.length),t.ok(he.pending.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+he.pending.length);let G=W.join(r,"theme-test");V.mkdirSync(G,{recursive:!0}),V.writeFileSync(W.join(G,"plugin.json"),JSON.stringify({name:"theme-test",version:"0.1.0",description:"\u53EA\u5E26\u4E3B\u9898\uFF0C\u6CA1\u6709\u5DE5\u5177",theme:{label:"\u6D4B\u8BD5\u914D\u8272",tokens:{bg:"#101014",fg:"rgb(240, 240, 245)",accent:"#ff5fa2",radius:"10","font-size":"15px",border:"red; } body { background: url(http://evil) }",surface:"url(http://evil/x.png)",width:"100px",link:"expression(alert(1))",ok:"$notacolor"}}}));let Se=Zd().find(function(Me){return Me.name==="theme-test"});t.ok(Se,"\u5E26 theme \u7684\u63D2\u4EF6\u8981\u51FA\u73B0\u5728 themes() \u91CC\uFF08enabled=false \u4E5F\u8981\u5728\uFF09"),t.strictEqual(Se.label,"\u6D4B\u8BD5\u914D\u8272"),t.strictEqual(Se.tokens.bg,"#101014"),t.strictEqual(Se.tokens.fg,"rgb(240, 240, 245)"),t.strictEqual(Se.tokens.radius,"10px","\u65E0\u5355\u4F4D\u5C3A\u5BF8\u8981\u8865 px"),t.strictEqual(Se.tokens["font-size"],"15px"),t.strictEqual(Se.tokens.border,void 0,"\u5E26\u5206\u53F7 / \u82B1\u62EC\u53F7\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.surface,void 0,"url() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.width,void 0,"\u767D\u540D\u5355\u4E4B\u5916\u7684 token \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.link,void 0,"expression() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(Se.tokens.ok,void 0,"\u62FC\u4E0D\u6210\u989C\u8272 / \u5177\u540D\u8272\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.ok(Se.dropped.length>=5,"\u4E22\u5F03\u8981\u6709\u7559\u75D5\uFF0C\u5B9E\u9645: "+JSON.stringify(Se.dropped)),t.strictEqual(vl("theme-test").tokens.accent,"#ff5fa2","themeOf \u6309\u540D\u53D6\u5230 tokens"),t.strictEqual(vl("nope"),null,"\u4E0D\u5B58\u5728\u7684\u63D2\u4EF6\u540D\u56DE null"),t.strictEqual(vl(""),null,"\u7A7A\u540D\u56DE null");let yt=W.join(r,"theme-broken");V.mkdirSync(yt,{recursive:!0}),V.writeFileSync(W.join(yt,"plugin.json"),JSON.stringify({name:"theme-broken",theme:{tokens:{bg:"red;}",fg:"url(x)"}}}));let St=Kd();t.ok(St.errors.some(function(Me){return Me.indexOf("theme-broken")===0}),"\u5168\u975E\u6CD5 token \u7684\u4E3B\u9898\u63D2\u4EF6\u8981\u8BB0 error\uFF0C\u5B9E\u9645: "+JSON.stringify(St.errors)),t.strictEqual(St.plugins.concat(St.pending).some(function(Me){return Me.name==="theme-broken"}),!1,"\u574F\u4E3B\u9898\u63D2\u4EF6\u4E0D\u8BE5\u51FA\u73B0\u5728\u6E05\u5355\u91CC"),Vs.homedir=i,V.rmSync(n,{recursive:!0,force:!0}),console.log("plugin.js \u81EA\u6D4B\u901A\u8FC7"),process.exit(0)})().catch(function(n){console.error("plugin.js \u81EA\u6D4B\u5931\u8D25\uFF1A",n),process.exit(1)})}Qd.exports={configure:Cr,refresh:jn,reload:UA,list:f0,status:Hd,toolDefs:To,hasTool:_o,findTool:Jd,readOnlyOf:d0,callTool:Ii,installFromDir:xl,uninstall:Bd,trashList:Ud,restoreFromTrash:Wd,trustDir:Vd,inventory:Kd,themes:Zd,themeOf:vl,scopeOf:Xs,globalDir:Li,trashDir:Di,_cleanName:Ar,_exposedBase:r0,_parseManifest:Js,_dirFingerprint:Ni,_scanRaw:Mo,_state:j,_ttl:n0}});var sf=ne((B2,x0)=>{"use strict";var $e=require("fs"),h0=require("os"),Ke=require("path"),Ri=ki(),m0="skills-trash",ef=".installed.json",g0={root:""};function JA(t){let e=t||{};e.root&&(g0.root=String(e.root))}function XA(){return Ke.resolve(g0.root||process.cwd())}function Ml(){return Ke.join(h0.homedir(),".luban","skills")}function Cl(){return Ke.join(h0.homedir(),".luban",m0)}function tf(t){return Ke.join(t||XA(),".luban","skills")}function y0(t){return t==="project"?tf():Ml()}function $i(t){let e=Ke.resolve(String(t||"")),n=[{scope:"global",base:Ml()},{scope:"project",base:tf()}];for(let s of n){let r=Ke.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!Ke.isAbsolute(r)&&r.indexOf(Ke.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function p0(){let t=new Date,e=function(n){return(n<10?"0":"")+n};return String(t.getFullYear())+e(t.getMonth()+1)+e(t.getDate())+"-"+e(t.getHours())+e(t.getMinutes())+e(t.getSeconds())}function Al(t,e){$e.mkdirSync(e,{recursive:!0});for(let n of $e.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=Ke.join(t,n.name),r=Ke.join(e,n.name);n.isDirectory()?Al(s,r):n.isFile()&&$e.copyFileSync(s,r)}}function Ol(t){try{let e=JSON.parse($e.readFileSync(Ke.join(t,ef),"utf8"));if(e&&typeof e=="object"&&e.skills&&typeof e.skills=="object")return e}catch{}return{version:1,skills:{}}}function nf(t,e){$e.mkdirSync(t,{recursive:!0}),$e.writeFileSync(Ke.join(t,ef),JSON.stringify(e,null,2)+`
|
|
212
212
|
`)}function w0(){let t=[];for(let e of["global","project"]){let n=y0(e),s=Ol(n),r;try{r=$e.readdirSync(n,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=Ke.join(n,o.name),a=Ri.readSkillManifest(i);if(!a.ok)continue;let l=s.skills[o.name]||{};t.push({name:a.manifest.name,version:String(l.version||a.manifest.version||""),description:a.manifest.description,dir:i,scope:e,managed:!!s.skills[o.name],tag:String(l.tag||""),sourceSha256:String(l.sourceSha256||""),repo:String(l.repo||""),installedAt:String(l.installedAt||"")})}}return t}function b0(t){let e=String(t||"").trim();if(!e)return null;let n=w0();return n.find(function(s){return s.name===e&&s.scope==="project"})||n.find(function(s){return s.name===e})||null}function k0(t,e,n){let s=Ke.resolve(t),r=$i(s);if(!r)throw new Error("\u62D2\u7EDD\u64CD\u4F5C\uFF1A\u4E0D\u5728\u6280\u80FD\u76EE\u5F55\u4E0B\u7684\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF1A"+s);let o=Cl();$e.mkdirSync(o,{recursive:!0,mode:448});let i=r.name.replace(/[^a-z0-9._-]/gi,"_"),a=i+"-"+p0(),l=2;for(;$e.existsSync(Ke.join(o,a))||$e.existsSync(Ke.join(o,a+".json"));)a=i+"-"+p0()+"-"+l,l++;let c=Ke.join(o,a);try{$e.renameSync(s,c)}catch(u){if(u&&u.code==="EXDEV")Al(s,c),$e.rmSync(s,{recursive:!0,force:!0});else throw u}return $e.writeFileSync(c+".json",JSON.stringify(Object.assign({name:r.name,from:s,scope:r.scope,at:new Date().toISOString(),why:e||""},n||{}),null,2)+`
|
|
213
|
-
`),a}function YA(t,e){let n=e||{},s=Ke.resolve(String(t||"")),r;try{r=$e.statSync(s)}catch{return{ok:!1,code:"missing",message:"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A"+s}}if(!r.isDirectory())return{ok:!1,code:"not-dir",message:"\u4E0D\u662F\u76EE\u5F55\uFF1A"+s};let o=Ri.readSkillManifest(s);if(o.ok&&!/^[a-z0-9][a-z0-9-]{1,39}$/.test(o.manifest.name))return{ok:!1,code:"bad-name",message:"\u6280\u80FD\u540D\u4E0D\u80FD\u4F5C\u4E3A\u76EE\u5F55\u540D\uFF1A"+o.manifest.name};if(!o.ok)return{ok:!1,code:"bad-manifest",message:"\u4E0D\u662F\u5408\u6CD5\u7684\u6280\u80FD\u76EE\u5F55\uFF1A"+o.message};let i=o.manifest.name,a=n.target==="project"?"project":"global",l=y0(a),c=Ke.join(l,i);if(Ke.resolve(s)===c)return{ok:!1,code:"same-dir",message:"\u6E90\u76EE\u5F55\u5C31\u662F\u6280\u80FD\u76EE\u5F55\u672C\u8EAB\uFF1A"+c};let u=!1;if($e.existsSync(c)){if(!n.replace)return{ok:!1,code:"exists",name:i,dir:c,message:"\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+i};try{k0(c,"replaced-by-install")}catch(p){return{ok:!1,code:"trash-failed",message:"\u65E7\u7248\u672C\u79FB\u8FDB\u56DE\u6536\u7AD9\u5931\u8D25\uFF1A"+p.message}}u=!0}try{Al(s,c)}catch(p){try{$e.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+p.message}}let d=Ri.readSkillManifest(c);if(!d.ok){try{$e.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"bad-copy",message:"\u590D\u5236\u540E\u7684\u76EE\u5F55\u4E0D\u5B8C\u6574\uFF1A"+d.message}}let f=Ol(l);return f.skills[i]={version:String(n.version||d.manifest.version||""),tag:String(n.tag||""),sourceSha256:String(n.sourceSha256||""),repo:String(n.repo||""),installedAt:new Date().toISOString()},nf(l,f),{ok:!0,name:i,dir:c,scope:a,replaced:u,version:f.skills[i].version}}function ZA(t,e){let n=e||{},s=String(t||"").trim();if(!s)return{ok:!1,message:"\u7F3A\u5C11\u6280\u80FD\u540D"};let r=s.indexOf("/")>=0||s.indexOf("\\")>=0||/^[A-Za-z]:/.test(s),o="";if(r)o=Ke.resolve(s);else{let u=b0(s);if(!u)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u6280\u80FD\uFF1A"+s};o=u.dir}let i=$i(o);if(!i)return{ok:!1,message:"\u62D2\u7EDD\u64CD\u4F5C\uFF1A\u4E0D\u5728\u6280\u80FD\u76EE\u5F55\u4E0B\u7684\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF1A"+o};let a="";try{a=k0(o,n.why||"uninstall")}catch(u){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+u.message}}let l=i.base,c=Ol(l);return c.skills[i.name]&&(delete c.skills[i.name],nf(l,c)),{ok:!0,name:i.name,dir:o,trash:a}}function QA(){let t=Cl(),e;try{e=$e.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=Ke.join(t,s.name),o={};try{o=JSON.parse($e.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ri.readSkillManifest(r);n.push({entry:s.name,name:i.ok?i.manifest.name:String(o.name||""),description:i.ok?i.manifest.description:"",dir:r,from:String(o.from||""),scope:String(o.scope||""),why:String(o.why||""),at:String(o.at||""),valid:i.ok,error:i.ok?"":i.message})}return n.sort(function(s,r){return s.at!==r.at?s.at<r.at?1:-1:s.entry<r.entry?1:s.entry>r.entry?-1:0}),n}function eO(t,e){let n=e||{},s=String(t||"").trim();if(!s||s.startsWith(".")||s.indexOf("/")>=0||s.indexOf("\\")>=0)return{ok:!1,message:"\u975E\u6CD5\u7684\u56DE\u6536\u7AD9\u6761\u76EE\uFF1A"+s};let r=Ke.join(Cl(),s);if(!$e.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o={};try{o=JSON.parse($e.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ri.readSkillManifest(r),a=i.ok?i.manifest.name:String(o.name||"");if(!a)return{ok:!1,message:"\u56DE\u6536\u7AD9\u6761\u76EE\u91CC\u6CA1\u6709\u53EF\u7528\u7684 SKILL.md\uFF1A"+s};let l="",c=String(o.from||"");if(c){let d=Ke.resolve(c);$e.existsSync(Ke.dirname(d))&&!$e.existsSync(d)&&$i(d)&&(l=d)}if(l||(l=Ke.join(Ml(),a)),$e.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+l};$e.mkdirSync(Ke.dirname(l),{recursive:!0});try{$e.renameSync(r,l)}catch(d){if(d&&d.code==="EXDEV")Al(r,l),$e.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+d.message}}try{$e.rmSync(r+".json",{force:!0})}catch{}let u=$i(l);if(u){let d=Ol(u.base);d.skills[u.name]||(d.skills[u.name]={version:i.ok?i.manifest.version:"",tag:"",sourceSha256:"",repo:"",installedAt:new Date().toISOString()},nf(u.base,d))}return{ok:!0,name:a,dir:l,scope:u?u.scope:""}}x0.exports={TRASH_DIRNAME:m0,LIST_FILENAME:ef,configure:JA,globalDir:Ml,projectDir:tf,trashDir:Cl,scopeOf:$i,installed:w0,find:b0,installFromDir:YA,uninstall:ZA,trashList:QA,restoreFromTrash:eO}});var lf=ne((U2,af)=>{function Or(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e):n:""}function tO(t,e){if(!t||typeof t!="object")return null;let n=Or(t.id,64),s=Or(t.label!=null?t.label:t.text,120);if(!s)return null;n||(n="o"+(e+1));let r={id:n,label:s};return(t.recommended===!0||t.recommended==="true")&&(r.recommended=!0),r}function nO(t,e){if(!t||typeof t!="object")return null;let n=Or(t.id,64),s=Or(t.prompt!=null?t.prompt:t.question,240);if(!s)return null;n||(n="q"+(e+1));let r=Array.isArray(t.options)?t.options:[],o=[],i=Object.create(null);for(let a=0;a<r.length&&o.length<6;a++){let l=tO(r[a],a);l&&(i[l.id]||(i[l.id]=1,o.push(l)))}return o.length<2?null:{id:n,prompt:s,allow_multiple:!!(t.allow_multiple||t.allowMultiple),options:o}}function
|
|
214
|
-
`)}function of(t){let e=t&&t.questions||[];return e.length!==1?!0:!!e[0].allow_multiple}af.exports={MAX_QUESTIONS:4,MIN_OPTIONS:2,MAX_OPTIONS:6,normalize:
|
|
213
|
+
`),a}function YA(t,e){let n=e||{},s=Ke.resolve(String(t||"")),r;try{r=$e.statSync(s)}catch{return{ok:!1,code:"missing",message:"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A"+s}}if(!r.isDirectory())return{ok:!1,code:"not-dir",message:"\u4E0D\u662F\u76EE\u5F55\uFF1A"+s};let o=Ri.readSkillManifest(s);if(o.ok&&!/^[a-z0-9][a-z0-9-]{1,39}$/.test(o.manifest.name))return{ok:!1,code:"bad-name",message:"\u6280\u80FD\u540D\u4E0D\u80FD\u4F5C\u4E3A\u76EE\u5F55\u540D\uFF1A"+o.manifest.name};if(!o.ok)return{ok:!1,code:"bad-manifest",message:"\u4E0D\u662F\u5408\u6CD5\u7684\u6280\u80FD\u76EE\u5F55\uFF1A"+o.message};let i=o.manifest.name,a=n.target==="project"?"project":"global",l=y0(a),c=Ke.join(l,i);if(Ke.resolve(s)===c)return{ok:!1,code:"same-dir",message:"\u6E90\u76EE\u5F55\u5C31\u662F\u6280\u80FD\u76EE\u5F55\u672C\u8EAB\uFF1A"+c};let u=!1;if($e.existsSync(c)){if(!n.replace)return{ok:!1,code:"exists",name:i,dir:c,message:"\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+i};try{k0(c,"replaced-by-install")}catch(p){return{ok:!1,code:"trash-failed",message:"\u65E7\u7248\u672C\u79FB\u8FDB\u56DE\u6536\u7AD9\u5931\u8D25\uFF1A"+p.message}}u=!0}try{Al(s,c)}catch(p){try{$e.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+p.message}}let d=Ri.readSkillManifest(c);if(!d.ok){try{$e.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"bad-copy",message:"\u590D\u5236\u540E\u7684\u76EE\u5F55\u4E0D\u5B8C\u6574\uFF1A"+d.message}}let f=Ol(l);return f.skills[i]={version:String(n.version||d.manifest.version||""),tag:String(n.tag||""),sourceSha256:String(n.sourceSha256||""),repo:String(n.repo||""),installedAt:new Date().toISOString()},nf(l,f),{ok:!0,name:i,dir:c,scope:a,replaced:u,version:f.skills[i].version}}function ZA(t,e){let n=e||{},s=String(t||"").trim();if(!s)return{ok:!1,message:"\u7F3A\u5C11\u6280\u80FD\u540D"};let r=s.indexOf("/")>=0||s.indexOf("\\")>=0||/^[A-Za-z]:/.test(s),o="";if(r)o=Ke.resolve(s);else{let u=b0(s);if(!u)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u6280\u80FD\uFF1A"+s};o=u.dir}let i=$i(o);if(!i)return{ok:!1,message:"\u62D2\u7EDD\u64CD\u4F5C\uFF1A\u4E0D\u5728\u6280\u80FD\u76EE\u5F55\u4E0B\u7684\u4E00\u7EA7\u5B50\u76EE\u5F55\uFF1A"+o};let a="";try{a=k0(o,n.why||"uninstall")}catch(u){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+u.message}}let l=i.base,c=Ol(l);return c.skills[i.name]&&(delete c.skills[i.name],nf(l,c)),{ok:!0,name:i.name,dir:o,trash:a}}function QA(){let t=Cl(),e;try{e=$e.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=Ke.join(t,s.name),o={};try{o=JSON.parse($e.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ri.readSkillManifest(r);n.push({entry:s.name,name:i.ok?i.manifest.name:String(o.name||""),description:i.ok?i.manifest.description:"",dir:r,from:String(o.from||""),scope:String(o.scope||""),why:String(o.why||""),at:String(o.at||""),valid:i.ok,error:i.ok?"":i.message})}return n.sort(function(s,r){return s.at!==r.at?s.at<r.at?1:-1:s.entry<r.entry?1:s.entry>r.entry?-1:0}),n}function eO(t,e){let n=e||{},s=String(t||"").trim();if(!s||s.startsWith(".")||s.indexOf("/")>=0||s.indexOf("\\")>=0)return{ok:!1,message:"\u975E\u6CD5\u7684\u56DE\u6536\u7AD9\u6761\u76EE\uFF1A"+s};let r=Ke.join(Cl(),s);if(!$e.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o={};try{o=JSON.parse($e.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ri.readSkillManifest(r),a=i.ok?i.manifest.name:String(o.name||"");if(!a)return{ok:!1,message:"\u56DE\u6536\u7AD9\u6761\u76EE\u91CC\u6CA1\u6709\u53EF\u7528\u7684 SKILL.md\uFF1A"+s};let l="",c=String(o.from||"");if(c){let d=Ke.resolve(c);$e.existsSync(Ke.dirname(d))&&!$e.existsSync(d)&&$i(d)&&(l=d)}if(l||(l=Ke.join(Ml(),a)),$e.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+l};$e.mkdirSync(Ke.dirname(l),{recursive:!0});try{$e.renameSync(r,l)}catch(d){if(d&&d.code==="EXDEV")Al(r,l),$e.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+d.message}}try{$e.rmSync(r+".json",{force:!0})}catch{}let u=$i(l);if(u){let d=Ol(u.base);d.skills[u.name]||(d.skills[u.name]={version:i.ok?i.manifest.version:"",tag:"",sourceSha256:"",repo:"",installedAt:new Date().toISOString()},nf(u.base,d))}return{ok:!0,name:a,dir:l,scope:u?u.scope:""}}x0.exports={TRASH_DIRNAME:m0,LIST_FILENAME:ef,configure:JA,globalDir:Ml,projectDir:tf,trashDir:Cl,scopeOf:$i,installed:w0,find:b0,installFromDir:YA,uninstall:ZA,trashList:QA,restoreFromTrash:eO}});var lf=ne((U2,af)=>{function Or(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e):n:""}function tO(t,e){if(!t||typeof t!="object")return null;let n=Or(t.id,64),s=Or(t.label!=null?t.label:t.text,120);if(!s)return null;n||(n="o"+(e+1));let r={id:n,label:s};return(t.recommended===!0||t.recommended==="true")&&(r.recommended=!0),r}function nO(t,e){if(!t||typeof t!="object")return null;let n=Or(t.id,64),s=Or(t.prompt!=null?t.prompt:t.question,240);if(!s)return null;n||(n="q"+(e+1));let r=Array.isArray(t.options)?t.options:[],o=[],i=Object.create(null);for(let a=0;a<r.length&&o.length<6;a++){let l=tO(r[a],a);l&&(i[l.id]||(i[l.id]=1,o.push(l)))}return o.length<2?null:{id:n,prompt:s,allow_multiple:!!(t.allow_multiple||t.allowMultiple),options:o}}function Ys(t){let e=t&&typeof t=="object"?t:{},n=Or(e.title,80),s=Array.isArray(e.questions)?e.questions:[];if(!s.length)throw new Error("ask_question \u9700\u8981\u975E\u7A7A questions \u6570\u7EC4");let r=[],o=Object.create(null);for(let i=0;i<s.length&&r.length<4;i++){let a=nO(s[i],i);a&&(o[a.id]||(o[a.id]=1,r.push(a)))}if(!r.length)throw new Error("ask_question \u6CA1\u6709\u6709\u6548\u9898\u76EE\uFF08\u6BCF\u9898\u9700 prompt\uFF0C\u4E14 options 2~6 \u9879\uFF09");return{title:n,questions:r}}function rf(t,e){let n=t&&t.questions||[],s=e&&typeof e=="object"?e:{},r={};for(let o=0;o<n.length;o++){let i=n[o],a=Object.create(null);for(let c=0;c<i.options.length;c++)a[i.options[c].id]=i.options[c];let l=s[i.id];if(i.allow_multiple){let c=Array.isArray(l)?l:l==null||l===""?[]:[l],u=[],d=Object.create(null);for(let f=0;f<c.length;f++){let p=Or(c[f],64);!p||!a[p]||d[p]||(d[p]=1,u.push(p))}if(!u.length)throw new Error("\u9898\u76EE\u300C"+i.id+"\u300D\u9700\u8981\u81F3\u5C11\u9009\u4E00\u9879");r[i.id]=u}else{let c=Or(Array.isArray(l)?l[0]:l,64);if(!c||!a[c])throw new Error("\u9898\u76EE\u300C"+i.id+"\u300D\u9700\u8981\u9009\u62E9\u4E00\u4E2A\u6709\u6548\u9009\u9879");r[i.id]=c}}return r}function v0(t,e){for(let n=0;n<t.options.length;n++)if(t.options[n].id===e)return t.options[n].label;return e}function S0(t,e){let n=t&&t.questions||[],s=["\u7528\u6237\u56DE\u7B54\uFF1A"];t&&t.title&&s.unshift("\u63D0\u95EE\uFF1A"+t.title);for(let r=0;r<n.length;r++){let o=n[r],i=e[o.id],a;Array.isArray(i)?a=i.map(function(l){return l+"\uFF08"+v0(o,l)+"\uFF09"}).join("\u3001"):a=i+"\uFF08"+v0(o,i)+"\uFF09",s.push("- "+o.id+"\uFF08"+o.prompt+"\uFF09: "+a)}return s.join(`
|
|
214
|
+
`)}function of(t){let e=t&&t.questions||[];return e.length!==1?!0:!!e[0].allow_multiple}af.exports={MAX_QUESTIONS:4,MIN_OPTIONS:2,MAX_OPTIONS:6,normalize:Ys,normalizeAnswers:rf,formatAnswers:S0,needsConfirm:of};if(require.main===af){let t=function(s,r){if(!s)throw new Error(r||"assert failed")},e=0,n=function(s,r){try{r(),e++,console.log("ok "+s)}catch(o){console.error("FAIL "+s+": "+o.message),process.exitCode=1}};n("normalize basic",function(){let s=Ys({title:"\u65B9\u5411",questions:[{id:"q1",prompt:"\u8981\u4E0D\u8981\u8D85\u51FA\u5C04\u7A0B\u53D8\u6A59\uFF1F",options:[{id:"yes",label:"\u8981\u505A"},{id:"no",label:"\u4E0D\u505A"}]}]});t(s.title==="\u65B9\u5411","title"),t(s.questions.length===1&&s.questions[0].options.length===2,"q"),t(!of(s),"single select no confirm")}),n("normalize rejects empty / short options",function(){let s=!1;try{Ys({questions:[]})}catch{s=!0}t(s,"empty"),s=!1;try{Ys({questions:[{prompt:"x",options:[{id:"a",label:"A"}]}]})}catch{s=!0}t(s,"one option")}),n("normalize fills missing ids + caps",function(){let s=[];for(let o=0;o<8;o++)s.push({label:"L"+o});let r=Ys({questions:[{prompt:"P1",options:s},{prompt:"P2",options:[{label:"A"},{label:"B"}]},{prompt:"P3",options:[{label:"A"},{label:"B"}]},{prompt:"P4",options:[{label:"A"},{label:"B"}]},{prompt:"P5",options:[{label:"A"},{label:"B"}]}]});t(r.questions.length===4,"max q"),t(r.questions[0].options.length===6,"max opt"),t(r.questions[0].id==="q1","auto id")}),n("normalizeAnswers single + multi",function(){let s=Ys({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]},{id:"b",prompt:"\u591A\u9009",allow_multiple:!0,options:[{id:"p",label:"P"},{id:"q",label:"Q"}]}]});t(of(s),"confirm");let r=rf(s,{a:"x",b:["p","q"]});t(r.a==="x"&&r.b.length===2,JSON.stringify(r));let o=S0(s,r);t(o.indexOf("\u7528\u6237\u56DE\u7B54")>=0&&o.indexOf("x\uFF08X\uFF09")>=0,o)}),n("normalizeAnswers rejects bad",function(){let s=Ys({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),r=!1;try{rf(s,{a:"z"})}catch{r=!0}t(r,"bad id")}),n("normalize recommended flag",function(){let s=Ys({questions:[{id:"q1",prompt:"\u65B9\u5411",options:[{id:"yes",label:"\u8981\u505A",recommended:!0},{id:"no",label:"\u4E0D\u505A"}]}]});t(s.questions[0].options[0].recommended===!0,"rec"),t(!s.questions[0].options[1].recommended,"no rec")}),process.exitCode||console.log("ALL PASS pass="+e)}});var Pl=ne((W2,E0)=>{"use strict";var uf="\u73ED\u73ED",df="Banban",ff="\u5C0F\u6728\u5320",pf="\u5148\u91CF\u4E09\u904D\uFF0C\u518D\u4E0B\u4E00\u51FF",sO=[" _____"," / \\"," /_______\\"],rO=" \\_______/",oO=[" | |"," /| |\\"," \\|_____|/"," |_| |_|"],hf={idle:[" | o o |"," | . |"," | \\___/ |"],think:[" | o o |"," | . |"," | ___ |"],plan:[" | o o |"," | . |"," | --- |"],explore:[" | O o |"," | . |"," | \\_/ |"],work:[" | > < |"," | . |"," | ___ |"],done:[" | ^ ^ |"," | . |"," | \\___/ |"],tired:[" | - - |"," | . |"," | --- |"],error:[" | x x |"," | . |"," | ~~~ |"]},_0={idle:"(o o)",think:"(o.o)",plan:"[o o]",explore:"(o o)?",work:"(>_<)",done:"(^ ^)",tired:"(-_-)",error:"(x_x)"},cf=[{mood:"idle",when:"\u7A7A\u95F2",say:"\u7B49\u4F60\u6D3E\u6D3B\uFF1B\u53EA\u8BFB\uFF0C\u5148\u91CF\u5C3A\u5BF8"},{mood:"plan",when:"plan",say:"\u53EA\u753B\u7EBF\u4E0D\u52A8\u624B\uFF1A\u5199\u5DE5\u5177\u4F1A\u88AB\u53EA\u8BFB\u95F8\u95E8\u62E6\u4E0B"},{mood:"explore",when:"explore",say:"\u53EA\u8BFB\u8C03\u7814\uFF0C\u770B\u89C1\u4EC0\u4E48\u5148\u8BB0\u4E0B\u6765"},{mood:"work",when:"agent",say:"--apply \u5F00\u4E86\u5199\u6743\u9650\uFF0C\u4E0A\u51FF\u5B50"},{mood:"think",when:"\u601D\u8003\u4E2D",say:"\u6A21\u578B\u81EA\u5DF1\u5728\u60F3\uFF08\u53EA\u663E\u793A\u7D2F\u8BA1\u5B57\u6570\uFF09"},{mood:"done",when:"final",say:"\u5E72\u5B8C\u4E86\uFF0C\u62A5\u4E00\u53E5\u8F6E\u6570 / \u5DE5\u5177\u6570 / \u8017\u65F6"},{mood:"tired",when:"maxRounds / timeout",say:"\u6536\u5DE5\uFF1A\u8F6E\u6570\u6216\u5899\u949F\u5230\u9876\uFF0C\u6216\u7528\u6237\u53D6\u6D88"},{mood:"error",when:"\u62A5\u9519",say:"\u5DE5\u5177\u8FDE\u7EED\u5931\u8D25\uFF0C\u6216\u8FD9\u4E00\u8F6E\u76F4\u63A5\u70B8\u4E86"}];function El(t,e){let n=String(t??"");return n.length>=e?n:n+" ".repeat(e-n.length)}function iO(t){return t<4352?1:t<=4447||t>=11904&&t<=42191||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510?2:1}function T0(t){let e=String(t??""),n=0;for(let s=0;s<e.length;s++)n+=iO(e.charCodeAt(s));return n}function M0(t,e){let n=String(t??""),s=e-T0(n);return s>0?n+" ".repeat(s):n}function C0(t){return Object.prototype.hasOwnProperty.call(hf,t)?t:"idle"}function aO(t){let e=String(t||"");return e==="plan"?"plan":e==="explore"?"explore":"idle"}function lO(t){let e=String(t||"");return e==="final"?"done":"tired"}function mf(t){return sO.concat(hf[C0(t)],[rO])}function A0(t){return mf(t).concat(oO)}function O0(t){return _0[C0(t)]}function cO(t,e){let n=e||{},s=typeof t=="function"?t:function(a,l){return String(l)},r=mf(n.mood||"plan"),o={};o[2]=" "+s("bold",uf)+s("gray"," \xB7 "+ff+"\uFF08"+df+"\uFF09"),o[3]=" "+s("gray",pf),o[5]=" "+s("dim",String(n.tip||""));let i=[];for(let a=0;a<r.length;a++){let l=o[a];if(!l){i.push(s("cyan",r[a]));continue}i.push(s("cyan",El(r[a],12))+l)}return i}function uO(t){let e=typeof t=="function"?t:function(i,a){return String(a)},n=A0("idle"),s=[e("bold",uf+"\uFF08"+df+"\uFF09")+e("gray"," \xB7 "+ff),e("gray",pf),e("dim","Luban CLI \u7684\u642D\u6863\uFF1A\u53EA\u8BFB\u7684\u65F6\u5019\u753B\u7EBF\uFF0C--apply \u4E4B\u540E\u624D\u52A8\u51FF\u5B50\u3002")],r=[],o=Math.max(n.length,s.length);for(let i=0;i<o;i++){let a=n[i]||"",l=s[i]||"";if(!l){r.push(a?e("cyan",a):"");continue}r.push(e("cyan",El(a,14))+l)}r.push(""),r.push(e("bold"," \u8868\u60C5\uFF08\u6309 CLI \u72B6\u6001\u81EA\u52A8\u5207\u6362\uFF09"));for(let i=0;i<cf.length;i++){let a=cf[i];r.push(" "+e("cyan",El(O0(a.mood),9))+e("gray",M0(a.when,22))+a.say)}return r}E0.exports={NAME:uf,NAME_EN:df,KIND:ff,TAGLINE:pf,MOODS:hf,FACES:_0,NOTES:cf,padRight:El,padDisplay:M0,displayWidth:T0,moodForMode:aO,moodForStop:lO,portrait:mf,full:A0,face:O0,banner:cO,sheet:uO}});var j0=ne((P0,qi)=>{(function(t){"use strict";let e={js:"break case catch class const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield async await static get set of",ts:"break case catch class const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield async await static get set of interface type enum implements private protected public readonly abstract declare namespace as satisfies keyof infer never unknown any string number boolean object symbol bigint",python:"and as assert async await break class continue def del elif else except False finally for from global if import in is lambda None nonlocal not or pass raise return True try while with yield match case",json:"true false null",go:"break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var nil true false",rust:"as async await break const continue crate dyn else enum extern false fn for if impl in let loop match mod move mut pub ref return self Self static struct super trait true type unsafe use where while",sh:"if then else elif fi for while until do done case esac function return exit local export readonly shift",sql:"select from where insert into values update set delete create table drop alter add index join left right inner outer on group by order limit offset as and or not null primary key foreign references distinct"},n={};Object.keys(e).forEach(function(l){n[l]=new Set(e[l].split(/\s+/))});function s(l){let c=String(l||"").toLowerCase().trim();return c==="javascript"||c==="node"||c==="mjs"||c==="cjs"?"js":c==="typescript"?"ts":c==="py"||c==="python3"?"python":c==="golang"?"go":c==="rs"?"rust":c==="bash"||c==="shell"||c==="zsh"?"sh":c==="jsx"||c==="tsx"?c==="tsx"?"ts":"js":c}function r(l){let c=s(l);return n[c]?n[c]:n.js}function o(l,c){let u=r(c),d=s(c),f={kws:u,hashComment:d==="python"||d==="sh"||d==="ruby"||d==="yaml"||d==="toml",sql:d==="sql"},p=String(l??"").split(`
|
|
215
215
|
`),h=[];for(let m=0;m<p.length;m++)m>0&&h.push({k:"plain",s:`
|
|
216
216
|
`}),i(p[m],f,h);return h}function i(l,c,u){let d=l,f=0,p=d.length;for(;f<p;){let h=d.slice(f),m;if(c.hashComment&&h[0]==="#"){u.push({k:"com",s:h}),f=p;continue}if(!c.hashComment&&h.slice(0,2)==="//"){u.push({k:"com",s:h}),f=p;continue}if(h.slice(0,2)==="/*"){let y=d.indexOf("*/",f+2),w=y===-1?h:d.slice(f,y+2);u.push({k:"com",s:w}),f+=w.length;continue}if(c.sql&&/^--/.test(h)){u.push({k:"com",s:h}),f=p;continue}if(h[0]==='"'||h[0]==="'"||h[0]==="`"){let y=h[0],w=1;for(;w<h.length;){if(h[w]==="\\"){w+=2;continue}if(h[w]===y){w++;break}w++}let T=h.slice(0,Math.min(w,h.length));u.push({k:"str",s:T}),f+=T.length;continue}if(m=/^\d+(\.\d+)?([eE][+-]?\d+)?/.exec(h),m&&/[\s\)\}\],;:=+\-*/<>!&|]|^/.test(h[m[0].length]||" ")){let y=d[f-1];if(!y||!/[A-Za-z0-9_$]/.test(y)){u.push({k:"num",s:m[0]}),f+=m[0].length;continue}}if(m=/^[A-Za-z_$][A-Za-z0-9_$]*/.exec(h),m){let y=m[0],w=h.slice(y.length);c.kws.has(y)?u.push({k:"kw",s:y}):/^\s*\(/.test(w)?u.push({k:"fn",s:y}):u.push({k:"plain",s:y}),f+=y.length;continue}u.push({k:"plain",s:h[0]}),f++}}let a={highlight:o,normLang:s};typeof qi<"u"&&qi&&qi.exports&&(qi.exports=a),t&&(t.LubanHighlight=a)})(typeof globalThis<"u"?globalThis:P0)});var $0=ne((K2,R0)=>{"use strict";var dO=j0();function jl(t){let e=typeof t=="function"?t:function(n,s){return s};return{bold:function(n){return e("bold",n)},dim:function(n){return e("dim",n)},italic:function(n){return e("italic",n)},underline:function(n){return e("underline",n)},heading:function(n){return e("cyan",e("bold",n))},link:function(n){return e("blue",e("underline",n))},quote:function(n){return e("dim",n)},hr:function(n){return e("dim",n)},bullet:function(n){return e("cyan",n)},code:function(n){return e("inverse",n)},codeBorder:function(n){return e("dim",n)},kw:function(n){return e("magenta",n)},str:function(n){return e("green",n)},num:function(n){return e("yellow",n)},com:function(n){return e("gray",n)},fn:function(n){return e("blue",n)},plain:function(n){return n}}}function F0(t,e,n){let s=n||jl(null),r=dO.highlight(t,e),o="";for(let i of r)i.k==="kw"?o+=s.kw(i.s):i.k==="str"?o+=s.str(i.s):i.k==="num"?o+=s.num(i.s):i.k==="com"?o+=s.com(i.s):i.k==="fn"?o+=s.fn(i.s):o+=s.plain(i.s);return o}function Er(t,e){let n=e||jl(null),s=String(t),r=[];return s=s.replace(/`([^`]+)`/g,function(o,i){return r.push(i),"\0CODE"+(r.length-1)+"\0"}),s=s.replace(/\*\*([^*]+)\*\*/g,function(o,i){return n.bold(i)}),s=s.replace(/__([^_]+)__/g,function(o,i){return n.bold(i)}),s=s.replace(/(^|[\s(])\*([^*\n]+)\*(?=$|[\s.,;:!?)])/g,function(o,i,a){return i+n.italic(a)}),s=s.replace(/\[([^\]]+)\]\(([^)]+)\)/g,function(o,i,a){return n.link(i)+" "+n.dim("("+a+")")}),s=s.replace(/\u0000CODE(\d+)\u0000/g,function(o,i){return n.code(r[Number(i)])}),s}function I0(t){let e=String(t).trim();e.charAt(0)==="|"&&(e=e.slice(1)),e.charAt(e.length-1)==="|"&&e.charAt(e.length-2)!=="\\"&&(e=e.slice(0,-1));let n="\0";return e.replace(/\\\|/g,n).split("|").map(function(s){return s.split(n).join("|").trim()})}function L0(t){return/^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(String(t))}function fO(t,e){return e+1>=t.length||String(t[e]).indexOf("|")===-1?!1:L0(t[e+1])}function gf(t){let e=0;for(let n of String(t)){let s=n.codePointAt(0);s>=4352&&s<=4447||s>=11904&&s<=42191||s>=44032&&s<=55203||s>=63744&&s<=64255||s>=65072&&s<=65103||s>=65280&&s<=65376||s>=65504&&s<=65510||s>=131072&&s<=262141?e+=2:e+=1}return e}function pO(t,e){return t+" ".repeat(Math.max(0,e-gf(t)))}function D0(t,e,n){let s=I0(t[e]),r=[],o=e+2;for(;o<t.length;){let d=String(t[o]);if(/^\s*$/.test(d)||d.indexOf("|")===-1)break;r.push(I0(d)),o++}let i=s.length;for(r.forEach(function(d){d.length>i&&(i=d.length)});s.length<i;)s.push("");r.forEach(function(d){for(;d.length<i;)d.push("")});let a=[];for(let d=0;d<i;d++){let f=gf(s[d]);r.forEach(function(p){let h=gf(p[d]);h>f&&(f=h)}),a.push(f)}function l(d,f,p){return n.codeBorder(d+a.map(function(h){return f.repeat(h+2)}).join(f)+p)}function c(d,f){let p=d.map(function(h,m){let y=" "+pO(h,a[m])+" ";return f?n.bold(y):Er(y,n)});return n.codeBorder("\u2502")+p.join(n.codeBorder("\u2502"))+n.codeBorder("\u2502")}let u=[l("\u256D","\u2500","\u256E"),c(s,!0),l("\u251C","\u2500","\u2524")];return r.forEach(function(d){u.push(c(d,!1))}),u.push(l("\u2570","\u2500","\u256F")),{text:u.join(`
|
|
217
217
|
`),next:o}}function hO(t,e){let n=jl(e),r=String(t??"").split(`
|
|
@@ -224,31 +224,31 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var Ew=ne((D
|
|
|
224
224
|
`)}var Fl,nb,MO,kf,sb,CO,rb,xf,Z0,Q0,eb,tb,bf,AO,OO,EO,vf=fo(()=>{wf();Fl="\x1B",nb="\x9B",MO=39,kf="\x07",sb="[",CO="]",rb="m",xf=`${CO}8;;`,Z0=new RegExp(`(?:\\${sb}(?<code>\\d+)m|\\${xf}(?<uri>.*)${kf})`,"y"),Q0=t=>{if(t>=30&&t<=37||t>=90&&t<=97)return 39;if(t>=40&&t<=47||t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0},eb=t=>`${Fl}${sb}${t}${rb}`,tb=t=>`${Fl}${xf}${t}${kf}`,bf=(t,e,n)=>{let s=e[Symbol.iterator](),r=!1,o=!1,i=t.at(-1),a=i===void 0?0:ut(i),l=s.next(),c=s.next(),u=0;for(;!l.done;){let d=l.value,f=ut(d);a+f<=n?t[t.length-1]+=d:(t.push(d),a=0),(d===Fl||d===nb)&&(r=!0,o=e.startsWith(xf,u+1)),r?o?d===kf&&(r=!1,o=!1):d===rb&&(r=!1):(a+=f,a===n&&!c.done&&(t.push(""),a=0)),l=c,c=s.next(),u+=d.length}i=t.at(-1),!a&&i!==void 0&&i.length&&t.length>1&&(t[t.length-2]+=t.pop())},AO=t=>{let e=t.split(" "),n=e.length;for(;n&&!ut(e[n-1]);)n--;return n===e.length?t:e.slice(0,n).join(" ")+e.slice(n).join("")},OO=(t,e,n={})=>{if(n.trim!==!1&&t.trim()==="")return"";let s="",r,o,i=t.split(" "),a=[""],l=0;for(let d=0;d<i.length;d++){let f=i[d];if(n.trim!==!1){let h=a.at(-1)??"",m=h.trimStart();h.length!==m.length&&(a[a.length-1]=m,l=ut(m))}d!==0&&(l>=e&&(n.wordWrap===!1||n.trim===!1)&&(a.push(""),l=0),(l||n.trim===!1)&&(a[a.length-1]+=" ",l++));let p=ut(f);if(n.hard&&p>e){let h=e-l,m=1+Math.floor((p-h-1)/e);Math.floor((p-1)/e)<m&&a.push(""),bf(a,f,e),l=ut(a.at(-1)??"");continue}if(l+p>e&&l&&p){if(n.wordWrap===!1&&l<e){bf(a,f,e),l=ut(a.at(-1)??"");continue}a.push(""),l=0}if(l+p>e&&n.wordWrap===!1){bf(a,f,e),l=ut(a.at(-1)??"");continue}a[a.length-1]+=f,l+=p}n.trim!==!1&&(a=a.map(d=>AO(d)));let c=a.join(`
|
|
225
225
|
`),u=!1;for(let d=0;d<c.length;d++){let f=c[d];if(s+=f,u)u=!1;else if(u=f>="\uD800"&&f<="\uDBFF",u)continue;if(f===Fl||f===nb){Z0.lastIndex=d+1;let h=Z0.exec(c)?.groups;if(h?.code!==void 0){let m=Number.parseFloat(h.code);r=m===MO?void 0:m}else h?.uri!==void 0&&(o=h.uri.length===0?void 0:h.uri)}if(c[d+1]===`
|
|
226
226
|
`){o&&(s+=tb(""));let p=r?Q0(r):void 0;r&&p&&(s+=eb(p))}else f===`
|
|
227
|
-
`&&(r&&Q0(r)&&(s+=eb(r)),o&&(s+=tb(o)))}return s},EO=/\r?\n/});var Tf=ne((Q2,ob)=>{"use strict";var Sf="\x1B",nt=`${Sf}[`,PO="\x07",_f={to(t,e){return e?`${nt}${e+1};${t+1}H`:`${nt}${t+1}G`},move(t,e){let n="";return t<0?n+=`${nt}${-t}D`:t>0&&(n+=`${nt}${t}C`),e<0?n+=`${nt}${-e}A`:e>0&&(n+=`${nt}${e}B`),n},up:(t=1)=>`${nt}${t}A`,down:(t=1)=>`${nt}${t}B`,forward:(t=1)=>`${nt}${t}C`,backward:(t=1)=>`${nt}${t}D`,nextLine:(t=1)=>`${nt}E`.repeat(t),prevLine:(t=1)=>`${nt}F`.repeat(t),left:`${nt}G`,hide:`${nt}?25l`,show:`${nt}?25h`,save:`${Sf}7`,restore:`${Sf}8`},jO={up:(t=1)=>`${nt}S`.repeat(t),down:(t=1)=>`${nt}T`.repeat(t)},IO={screen:`${nt}2J`,up:(t=1)=>`${nt}1J`.repeat(t),down:(t=1)=>`${nt}J`.repeat(t),line:`${nt}2K`,lineEnd:`${nt}K`,lineStart:`${nt}1K`,lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?_f.up():"");return t&&(e+=_f.left),e}};ob.exports={cursor:_f,scroll:jO,erase:IO,beep:PO}});function
|
|
227
|
+
`&&(r&&Q0(r)&&(s+=eb(r)),o&&(s+=tb(o)))}return s},EO=/\r?\n/});var Tf=ne((Q2,ob)=>{"use strict";var Sf="\x1B",nt=`${Sf}[`,PO="\x07",_f={to(t,e){return e?`${nt}${e+1};${t+1}H`:`${nt}${t+1}G`},move(t,e){let n="";return t<0?n+=`${nt}${-t}D`:t>0&&(n+=`${nt}${t}C`),e<0?n+=`${nt}${-e}A`:e>0&&(n+=`${nt}${e}B`),n},up:(t=1)=>`${nt}${t}A`,down:(t=1)=>`${nt}${t}B`,forward:(t=1)=>`${nt}${t}C`,backward:(t=1)=>`${nt}${t}D`,nextLine:(t=1)=>`${nt}E`.repeat(t),prevLine:(t=1)=>`${nt}F`.repeat(t),left:`${nt}G`,hide:`${nt}?25l`,show:`${nt}?25h`,save:`${Sf}7`,restore:`${Sf}8`},jO={up:(t=1)=>`${nt}S`.repeat(t),down:(t=1)=>`${nt}T`.repeat(t)},IO={screen:`${nt}2J`,up:(t=1)=>`${nt}1J`.repeat(t),down:(t=1)=>`${nt}J`.repeat(t),line:`${nt}2K`,lineEnd:`${nt}K`,lineStart:`${nt}1K`,lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?_f.up():"");return t&&(e+=_f.left),e}};ob.exports={cursor:_f,scroll:jO,erase:IO,beep:PO}});function _s(t,e,n){if(!n.some(i=>!i.disabled))return t;let s=t+e,r=Math.max(n.length-1,0),o=s<0?r:s>r?0:s;return n[o]?.disabled?_s(o,e<0?-1:1,n):o}function Ll(t,e,n,s){let r=s.split(`
|
|
228
228
|
`),o=0,i=t;for(let l of r){if(i<=l.length)break;i-=l.length+1,o++}for(o=Math.max(0,Math.min(r.length-1,o+n)),i=Math.min(i,r[o].length)+e;i<0&&o>0;)o--,i+=r[o].length+1;for(;i>r[o].length&&o<r.length-1;)i-=r[o].length+1,o++;i=Math.max(0,Math.min(r[o].length,i));let a=0;for(let l=0;l<o;l++)a+=r[l].length+1;return a+i}function cb(t){if(t.aliases!==void 0){let e=t.aliases;for(let n in e){if(!Object.hasOwn(e,n))continue;let s=e[n];s===void 0||!ie.actions.has(s)||ie.aliases.has(n)||ie.aliases.set(n,s)}}if(t.messages!==void 0){let e=t.messages;e.cancel!==void 0&&(ie.messages.cancel=e.cancel),e.error!==void 0&&(ie.messages.error=e.error)}if(t.withGuide!==void 0&&(ie.withGuide=t.withGuide!==!1),t.accessible!==void 0&&(ie.accessible=t.accessible===!0),t.date!==void 0){let e=t.date;e.monthNames!==void 0&&(ie.date.monthNames=[...e.monthNames]),e.messages!==void 0&&(e.messages.required!==void 0&&(ie.date.messages.required=e.messages.required),e.messages.invalidMonth!==void 0&&(ie.date.messages.invalidMonth=e.messages.invalidMonth),e.messages.invalidDay!==void 0&&(ie.date.messages.invalidDay=e.messages.invalidDay),e.messages.afterMin!==void 0&&(ie.date.messages.afterMin=e.messages.afterMin),e.messages.beforeMax!==void 0&&(ie.date.messages.beforeMax=e.messages.beforeMax))}}function LO(t){if(t!==void 0)return t;if(ie.accessible!==void 0)return ie.accessible;let e=process.env.ACCESSIBLE;return e!==void 0&&e!==""&&e!=="0"&&e!=="false"}function Of(t,e){if(typeof t=="string")return ie.aliases.get(t)===e;for(let n of t)if(n!==void 0&&Of(n,e))return!0;return!1}function DO(t,e){if(t===e)return;let n=t.split(`
|
|
229
229
|
`),s=e.split(`
|
|
230
|
-
`),r=Math.max(n.length,s.length),o=[];for(let i=0;i<r;i++)n[i]!==s[i]&&o.push(i);return{lines:o,numLinesBefore:n.length,numLinesAfter:s.length,numLines:r}}function Hl(t){return t===Bi}function Dl(t,e){let n=t;n.isTTY&&n.setRawMode(e)}function ub({input:t=jr.stdin,output:e=jr.stdout,overwrite:n=!0,hideCursor:s=!0}={}){let r=
|
|
230
|
+
`),r=Math.max(n.length,s.length),o=[];for(let i=0;i<r;i++)n[i]!==s[i]&&o.push(i);return{lines:o,numLinesBefore:n.length,numLinesAfter:s.length,numLines:r}}function Hl(t){return t===Bi}function Dl(t,e){let n=t;n.isTTY&&n.setRawMode(e)}function ub({input:t=jr.stdin,output:e=jr.stdout,overwrite:n=!0,hideCursor:s=!0}={}){let r=Zs.createInterface({input:t,output:e,prompt:"",tabSize:1});Zs.emitKeypressEvents(t,r),t instanceof Cf.ReadStream&&t.isTTY&&t.setRawMode(!0);let o=(i,{name:a,sequence:l})=>{let c=String(i);if(Of([c,a,l],"cancel")){s&&e.write(Nt.cursor.show),process.exit(0);return}if(!n)return;Zs.moveCursor(e,a==="return"?0:-1,a==="return"?-1:0,()=>{Zs.clearLine(e,1,()=>{t.once("keypress",o)})})};return s&&e.write(Nt.cursor.hide),t.once("keypress",o),()=>{t.off("keypress",o),s&&e.write(Nt.cursor.show),t instanceof Cf.ReadStream&&t.isTTY&&!RO&&t.setRawMode(!1),r.terminal=!1,r.close()}}function it(t,e,n,s=n,r=n,o){let i=Ir(t??jr.stdout);return Hn(e,i-n.length,{hard:!0,trim:!1}).split(`
|
|
231
231
|
`).map((a,l,c)=>{let u=o?o(a,l):a;return l===0?`${s}${u}`:l===c.length-1?`${r}${u}`:`${n}${u}`}).join(`
|
|
232
|
-
`)}function Ui(t,e){if("~standard"in t){let n=t["~standard"].validate(e);return n instanceof Promise?n.then(s=>s.issues?.at(0)?.message):n.issues?.at(0)?.message}return t(e)}function $O(t,e){if(t===void 0||e.length===0)return 0;let n=e.findIndex(s=>s.value===t);return n!==-1?n:0}function qO(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function BO(t,e){if(e)return t?e:e[0]}function ib(t){return[...t].map(e=>UO[e])}function WO(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),n=[],s="/";for(let r of e)r.type==="literal"?s=r.value.trim()||r.value:(r.type==="year"||r.type==="month"||r.type==="day")&&n.push({type:r.type,len:r.type==="year"?4:2});return{segments:n,separator:s}}function Mf(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function Rl(t){return{year:Mf(t.year),month:Mf(t.month),day:Mf(t.day)}}function Af(t,e){return new Date(t||2001,e||1,0).getDate()}function db(t){let{year:e,month:n,day:s}=Rl(t);if(!e||e<0||e>9999||!n||n<1||n>12||!s||s<1)return;let r=new Date(Date.UTC(e,n-1,s));if(!(r.getUTCFullYear()!==e||r.getUTCMonth()!==n-1||r.getUTCDate()!==s))return{year:e,month:n,day:s}}function ab(t){let e=db(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function KO(t,e,n,s){let r=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,o=s?{year:s.getUTCFullYear(),month:s.getUTCMonth()+1,day:s.getUTCDate()}:null;return t==="year"?{min:r?.year??1,max:o?.year??9999}:t==="month"?{min:r&&e.year===r.year?r.month:1,max:o&&e.year===o.year?o.month:12}:{min:r&&e.year===r.year&&e.month===r.month?r.day:1,max:o&&e.year===o.year&&e.month===o.month?o.day:Af(e.year,e.month)}}var Pr,jr,
|
|
232
|
+
`)}function Ui(t,e){if("~standard"in t){let n=t["~standard"].validate(e);return n instanceof Promise?n.then(s=>s.issues?.at(0)?.message):n.issues?.at(0)?.message}return t(e)}function $O(t,e){if(t===void 0||e.length===0)return 0;let n=e.findIndex(s=>s.value===t);return n!==-1?n:0}function qO(t,e){return(e.label??String(e.value)).toLowerCase().includes(t.toLowerCase())}function BO(t,e){if(e)return t?e:e[0]}function ib(t){return[...t].map(e=>UO[e])}function WO(t){let e=new Intl.DateTimeFormat(t,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2e3,0,15)),n=[],s="/";for(let r of e)r.type==="literal"?s=r.value.trim()||r.value:(r.type==="year"||r.type==="month"||r.type==="day")&&n.push({type:r.type,len:r.type==="year"?4:2});return{segments:n,separator:s}}function Mf(t){return Number.parseInt((t||"0").replace(/_/g,"0"),10)||0}function Rl(t){return{year:Mf(t.year),month:Mf(t.month),day:Mf(t.day)}}function Af(t,e){return new Date(t||2001,e||1,0).getDate()}function db(t){let{year:e,month:n,day:s}=Rl(t);if(!e||e<0||e>9999||!n||n<1||n>12||!s||s<1)return;let r=new Date(Date.UTC(e,n-1,s));if(!(r.getUTCFullYear()!==e||r.getUTCMonth()!==n-1||r.getUTCDate()!==s))return{year:e,month:n,day:s}}function ab(t){let e=db(t);return e?new Date(Date.UTC(e.year,e.month-1,e.day)):void 0}function KO(t,e,n,s){let r=n?{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}:null,o=s?{year:s.getUTCFullYear(),month:s.getUTCMonth()+1,day:s.getUTCDate()}:null;return t==="year"?{min:r?.year??1,max:o?.year??9999}:t==="month"?{min:r&&e.year===r.year?r.month:1,max:o&&e.year===o.year?o.month:12}:{min:r&&e.year===r.year&&e.month===r.month?r.day:1,max:o&&e.year===o.year&&e.month===o.month?o.day:Af(e.year,e.month)}}var Pr,jr,Zs,lb,Nt,Cf,NO,FO,ie,RO,Bi,Ir,Ef,In,Pf,$l,UO,ql,fb,HO,Bl,Ul,pb,hb,Wl,Kl,jf=fo(()=>{Pr=require("node:util"),jr=require("node:process"),Zs=ui(require("node:readline"),1),lb=ui(require("node:readline"),1);vf();Nt=ui(Tf(),1),Cf=require("node:tty");NO=["up","down","left","right","space","enter","cancel"],FO=["January","February","March","April","May","June","July","August","September","October","November","December"],ie={actions:new Set(NO),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,accessible:void 0,date:{monthNames:[...FO],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:t=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:t=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};RO=globalThis.process.platform.startsWith("win"),Bi=Symbol("clack:cancel");Ir=t=>"columns"in t&&typeof t.columns=="number"?t.columns:80,Ef=t=>"rows"in t&&typeof t.rows=="number"?t.rows:20;In=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";get accessible(){return LO(this.opts.accessible)}constructor(e,n=!0){let{input:s=jr.stdin,output:r=jr.stdout,render:o,signal:i,...a}=e;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=o.bind(this),this._track=n,this._abortSignal=i,this.input=s,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(e,n){let s=this._subscribers.get(e)??[];s.push(n),this._subscribers.set(e,s)}on(e,n){this.setSubscriber(e,{cb:n})}once(e,n){this.setSubscriber(e,{cb:n,once:!0})}emit(e,...n){let s=this._subscribers.get(e)??[],r=[];for(let o of s)o.cb(...n),o.once&&r.push(()=>s.splice(s.indexOf(o),1));for(let o of r)o()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(Bi);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=lb.default.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Dl(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Nt.cursor.show),this.output.off("resize",this.render),Dl(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(Nt.cursor.show),this.output.off("resize",this.render),Dl(this.input,!1),e(Bi)})})}_isActionKey(e,n){return e===" "}_shouldSubmit(e,n){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,n){this.userInput=e??"",this.emit("userInput",this.userInput),n&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}async onKeypress(e,n){if(this.state!=="validating"){if(this._track&&n.name!=="return"&&(n.name&&this._isActionKey(e,n)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),n?.name&&(!this._track&&ie.aliases.has(n.name)&&this.emit("cursor",ie.aliases.get(n.name)),ie.actions.has(n.name)&&this.emit("cursor",n.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e,n),n?.name==="return"&&this._shouldSubmit(e,n)){if(this.opts.validate){let s=Ui(this.opts.validate,this.value),r;s instanceof Promise?(this.state="validating",this.render(),r=await s):r=s,r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Of([e,n?.name,n?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
233
233
|
`),Dl(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Hn(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
234
|
-
`).length-1;this.output.write(
|
|
235
|
-
`);this.output.write(a[i]),this._prevFrame=e,this.output.write(
|
|
234
|
+
`).length-1;this.output.write(Nt.cursor.move(-999,e*-1))}render(){let e=Hn(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(Nt.cursor.hide);else{let n=DO(this._prevFrame,e),s=Ef(this.output);if(this.restoreCursor(),n){let r=Math.max(0,n.numLinesAfter-s),o=Math.max(0,n.numLinesBefore-s),i=n.lines.find(a=>a>=r);if(i===void 0){this._prevFrame=e;return}if(n.lines.length===1){this.output.write(Nt.cursor.move(0,i-o)),this.output.write(Nt.erase.lines(1));let a=e.split(`
|
|
235
|
+
`);this.output.write(a[i]),this._prevFrame=e,this.output.write(Nt.cursor.move(0,a.length-i-1));return}else if(n.lines.length>1){if(r<o)i=r;else{let l=i-o;l>0&&this.output.write(Nt.cursor.move(0,l))}this.output.write(Nt.erase.down());let a=e.split(`
|
|
236
236
|
`).slice(i);this.output.write(a.join(`
|
|
237
|
-
`)),this._prevFrame=e;return}}this.output.write(
|
|
237
|
+
`)),this._prevFrame=e;return}}this.output.write(Nt.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};Pf=class extends In{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#t=0;#r="";#e;#i;#a;#n;get cursor(){return this.#t}get userInputWithCursor(){if(!this.userInput)return(0,Pr.styleText)(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let e=this.userInput.slice(0,this.cursor),n=this.userInput.slice(this.cursor,this.cursor+1),s=this.userInput.slice(this.cursor+1);return`${e}${(0,Pr.styleText)("inverse",n)}${s}`}get options(){return typeof this.#i=="function"?this.#i():this.#i}constructor(e){super(e),this.#i=e.options,this.#a=e.placeholder,this.#n=e.completeOnTab===!0;let n=this.options;this.filteredOptions=[...n],this.multiple=e.multiple===!0,this.#e=typeof e.options=="function"?e.filter:e.filter??qO;let s;if(e.initialValue&&Array.isArray(e.initialValue)?this.multiple?s=e.initialValue:s=e.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(s=[this.options[0]?.value]),s)for(let r of s){let o=n.findIndex(i=>i.value===r);o!==-1&&(this.toggleSelected(r),this.#t=o)}this.focusedValue=this.options[this.#t]?.value,this.on("key",(r,o)=>this.#s(r,o)),this.on("userInput",r=>this.#o(r))}_isActionKey(e,n){return e===" "||this.multiple&&this.isNavigating&&n.name==="space"&&e!==void 0&&e!==""}#s(e,n){let s=n.name==="up",r=n.name==="down",o=n.name==="return",i=this.userInput===""||this.userInput===" ",a=this.#a,l=this.options,c=a!==void 0&&a!==""&&l.some(u=>!u.disabled&&(this.#e?this.#e(a,u):!0));if(n.name==="tab"&&i&&c){this.userInput===" "&&this._clearUserInput(),this._setUserInput(a,!0),this.isNavigating=!1;return}if(n.name==="tab"&&this.#n&&!this.multiple&&this.focusedValue!==void 0){let u=String(this.focusedValue);this._clearUserInput(),this._setUserInput(u,!0),this.isNavigating=!1;return}s||r?(this.#t=_s(this.#t,s?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#t]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):o?this.value=BO(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(n.name==="tab"||this.isNavigating&&n.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(e){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(e)?this.selectedValues=this.selectedValues.filter(n=>n!==e):this.selectedValues=[...this.selectedValues,e]:this.selectedValues=[e])}#o(e){if(e!==this.#r){this.#r=e;let n=this.options;e&&this.#e?this.filteredOptions=n.filter(o=>this.#e?.(e,o)):this.filteredOptions=[...n];let s=$O(this.focusedValue,this.filteredOptions);this.#t=_s(s,0,this.filteredOptions);let r=this.filteredOptions[this.#t];r&&!r.disabled?this.focusedValue=r.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},$l=class extends In{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",n=>{this.output.write(Nt.cursor.move(0,-1)),this.value=n,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},UO={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};ql=class extends In{#t;#r;#e;#i;#a;#n={segmentIndex:0,positionInSegment:0};#s=!0;#o=null;inlineError="";get segmentCursor(){return{...this.#n}}get segmentValues(){return{...this.#e}}get segments(){return this.#t}get separator(){return this.#r}get formattedValue(){return this.#d(this.#e)}#d(e){return this.#t.map(n=>e[n.type]).join(this.#r)}#l(){this._setUserInput(this.#d(this.#e)),this._setValue(ab(this.#e)??void 0)}constructor(e){let n=e.format?{segments:ib(e.format),separator:e.separator??"/"}:WO(e.locale),s=e.separator??n.separator,r=e.format?ib(e.format):n.segments,o=e.initialValue??e.defaultValue,i=o?{year:String(o.getUTCFullYear()).padStart(4,"0"),month:String(o.getUTCMonth()+1).padStart(2,"0"),day:String(o.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},a=r.map(l=>i[l.type]).join(s);super({...e,initialUserInput:a},!1),this.#t=r,this.#r=s,this.#e=i,this.#i=e.minDate,this.#a=e.maxDate,this.#l(),this.on("cursor",l=>this.#h(l)),this.on("key",(l,c)=>this.#m(l,c)),this.on("finalize",()=>this.#g(e))}#c(){let e=Math.max(0,Math.min(this.#n.segmentIndex,this.#t.length-1)),n=this.#t[e];if(n)return this.#n.positionInSegment=Math.max(0,Math.min(this.#n.positionInSegment,n.len-1)),{segment:n,index:e}}#u(e){this.inlineError="",this.#o=null;let n=this.#c();n&&(this.#n.segmentIndex=Math.max(0,Math.min(this.#t.length-1,n.index+e)),this.#n.positionInSegment=0,this.#s=!0)}#f(e){let n=this.#c();if(!n)return;let{segment:s}=n,r=this.#e[s.type],o=!r||r.replace(/_/g,"")==="",i=Number.parseInt((r||"0").replace(/_/g,"0"),10)||0,a=KO(s.type,Rl(this.#e),this.#i,this.#a),l;o?l=e===1?a.min:a.max:l=Math.max(Math.min(a.max,i+e),a.min),this.#e={...this.#e,[s.type]:l.toString().padStart(s.len,"0")},this.#s=!0,this.#o=null,this.#l()}#h(e){if(e)switch(e){case"right":return this.#u(1);case"left":return this.#u(-1);case"up":return this.#f(1);case"down":return this.#f(-1)}}#m(e,n){if(n?.name==="backspace"||n?.sequence==="\x7F"||n?.sequence==="\b"||e==="\x7F"||e==="\b"){this.inlineError="";let s=this.#c();if(!s)return;if(!this.#e[s.segment.type].replace(/_/g,"")){this.#u(-1);return}this.#e[s.segment.type]="_".repeat(s.segment.len),this.#s=!0,this.#n.positionInSegment=0,this.#l();return}if(n?.name==="tab"){this.inlineError="";let s=this.#c();if(!s)return;let r=n.shift?-1:1,o=s.index+r;o>=0&&o<this.#t.length&&(this.#n.segmentIndex=o,this.#n.positionInSegment=0,this.#s=!0);return}if(e&&/^[0-9]$/.test(e)){let s=this.#c();if(!s)return;let{segment:r}=s,o=!this.#e[r.type].replace(/_/g,"");if(this.#s&&this.#o!==null&&!o){let p=this.#o+e,h={...this.#e,[r.type]:p},m=this.#p(h,r);if(m){this.inlineError=m,this.#o=null,this.#s=!1;return}this.inlineError="",this.#e[r.type]=p,this.#o=null,this.#s=!1,this.#l(),s.index<this.#t.length-1&&(this.#n.segmentIndex=s.index+1,this.#n.positionInSegment=0,this.#s=!0);return}this.#s&&!o&&(this.#e[r.type]="_".repeat(r.len),this.#n.positionInSegment=0),this.#s=!1,this.#o=null;let i=this.#e[r.type],a=i.indexOf("_"),l=a>=0?a:Math.min(this.#n.positionInSegment,r.len-1);if(l<0||l>=r.len)return;let c=i.slice(0,l)+e+i.slice(l+1),u=!1;if(l===0&&i==="__"&&(r.type==="month"||r.type==="day")){let p=Number.parseInt(e,10);c=`0${e}`,u=p<=(r.type==="month"?1:2)}if(r.type==="year"&&(c=(i.replace(/_/g,"")+e).padStart(r.len,"_")),!c.includes("_")){let p={...this.#e,[r.type]:c},h=this.#p(p,r);if(h){this.inlineError=h;return}}this.inlineError="",this.#e[r.type]=c;let d=c.includes("_")?void 0:db(this.#e);if(d){let{year:p,month:h}=d,m=Af(p,h);this.#e={year:String(Math.max(0,Math.min(9999,p))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,h))).padStart(2,"0"),day:String(Math.max(1,Math.min(m,d.day))).padStart(2,"0")}}this.#l();let f=c.indexOf("_");u?(this.#s=!0,this.#o=e):f>=0?this.#n.positionInSegment=f:a>=0&&s.index<this.#t.length-1?(this.#n.segmentIndex=s.index+1,this.#n.positionInSegment=0,this.#s=!0):this.#n.positionInSegment=Math.min(l+1,r.len-1)}}#p(e,n){let{month:s,day:r}=Rl(e);if(n.type==="month"&&(s<0||s>12))return ie.date.messages.invalidMonth;if(n.type==="day"&&(r<0||r>31))return ie.date.messages.invalidDay(31,"any month")}#g(e){let{year:n,month:s,day:r}=Rl(this.#e);if(n&&s&&r){let o=Af(n,s);this.#e={...this.#e,day:String(Math.min(r,o)).padStart(2,"0")}}this.value=ab(this.#e)??e.defaultValue??void 0}},fb=class extends In{options;cursor=0;#t;getGroupItems(e){return this.options.filter(n=>n.group===e)}isGroupSelected(e){let n=this.getGroupItems(e),s=this.value;return s===void 0?!1:n.every(r=>s.includes(r.value))}toggleValue(){let e=this.options[this.cursor];if(e!==void 0)if(this.value===void 0&&(this.value=[]),e.group===!0){let n=e.value,s=this.getGroupItems(n);this.isGroupSelected(n)?this.value=this.value.filter(r=>s.findIndex(o=>o.value===r)===-1):this.value=[...this.value,...s.map(r=>r.value)],this.value=Array.from(new Set(this.value))}else{let n=this.value.includes(e.value);this.value=n?this.value.filter(s=>s!==e.value):[...this.value,e.value]}}constructor(e){super(e,!1);let{options:n}=e;this.#t=e.selectableGroups!==!1,this.options=Object.entries(n).flatMap(([s,r])=>[{value:s,group:!0,label:s},...r.map(o=>({...o,group:s}))]),this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:s})=>s===e.cursorAt),this.#t?0:1),this.on("cursor",s=>{switch(s){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let r=this.options[this.cursor]?.group===!0;!this.#t&&r&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let r=this.options[this.cursor]?.group===!0;!this.#t&&r&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},HO=new Set(["up","down","left","right"]),Bl=class extends In{#t=!1;#r;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${e}\u2588`;let n=e.slice(0,this.cursor),s=e.slice(this.cursor,this.cursor+1),r=e.slice(this.cursor+1);return s===`
|
|
238
238
|
`?`${n}\u2588
|
|
239
239
|
${r}`:`${n}${(0,Pr.styleText)("inverse",s)}${r}`}get cursor(){return this._cursor}#e(e){if(this.userInput.length===0){this._setUserInput(e);return}this._setUserInput(this.userInput.slice(0,this.cursor)+e+this.userInput.slice(this.cursor))}#i(e){let n=this.value??"";switch(e){case"up":this._cursor=Ll(this._cursor,0,-1,n);return;case"down":this._cursor=Ll(this._cursor,0,1,n);return;case"left":this._cursor=Ll(this._cursor,-1,0,n);return;case"right":this._cursor=Ll(this._cursor,1,0,n);return}}_shouldSubmit(e,n){if(this.#r)return this.focused==="submit"?!0:(this.#e(`
|
|
240
240
|
`),this._cursor++,!1);let s=this.#t;return this.#t=!0,s&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
|
|
241
241
|
`&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#e(`
|
|
242
|
-
`),this._cursor++,!1)}constructor(e){let n=e.initialUserInput??e.initialValue;super({...e,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#r=e.showSubmit??!1,this.on("key",(s,r)=>{if(r?.name&&HO.has(r.name)){this.#t=!1,this.#i(r.name);return}if(s===" "&&this.#r){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#t=!1,r?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(r?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}s&&(this.#r&&this.focused==="submit"&&(this.focused="editor"),this.#e(s??""),this._cursor++)}}),this.on("userInput",s=>{this._setValue(s)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}},Ul=class extends In{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,n=this.value!==void 0&&this.value.length===e.length;this.value=n?[]:e.map(s=>s.value)}toggleInvert(){let e=this.value;if(!e)return;let n=this._enabledOptions.filter(s=>!e.includes(s.value));this.value=n.map(s=>s.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(n=>n!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let n=Math.max(this.options.findIndex(({value:s})=>s===e.cursorAt),0);this.cursor=this.options[n]?.disabled?
|
|
242
|
+
`),this._cursor++,!1)}constructor(e){let n=e.initialUserInput??e.initialValue;super({...e,initialUserInput:n},!1),n!==void 0&&(this._cursor=n.length),this.#r=e.showSubmit??!1,this.on("key",(s,r)=>{if(r?.name&&HO.has(r.name)){this.#t=!1,this.#i(r.name);return}if(s===" "&&this.#r){this.focused=this.focused==="editor"?"submit":"editor";return}if(r?.name!=="return"){if(this.#t=!1,r?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(r?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}s&&(this.#r&&this.focused==="submit"&&(this.focused="editor"),this.#e(s??""),this._cursor++)}}),this.on("userInput",s=>{this._setValue(s)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}},Ul=class extends In{options;cursor=0;get _value(){return this.options[this.cursor]?.value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,n=this.value!==void 0&&this.value.length===e.length;this.value=n?[]:e.map(s=>s.value)}toggleInvert(){let e=this.value;if(!e)return;let n=this._enabledOptions.filter(s=>!e.includes(s.value));this.value=n.map(s=>s.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(n=>n!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let n=Math.max(this.options.findIndex(({value:s})=>s===e.cursorAt),0);this.cursor=this.options[n]?.disabled?_s(n,1,this.options):n,this.on("key",(s,r)=>{r.name==="a"&&this.toggleAll(),r.name==="i"&&this.toggleInvert()}),this.on("cursor",s=>{switch(s){case"left":case"up":this.cursor=_s(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_s(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},pb=class extends In{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${(0,Pr.styleText)(["inverse","hidden"],"_")}`;let n=this.masked,s=n.slice(0,this.cursor),r=n.slice(this.cursor,this.cursor+1),o=n.slice(this.cursor+1);return`${s}${(0,Pr.styleText)("inverse",r)}${o}`}clear(){this._clearUserInput()}constructor({mask:e,...n}){super(n),this._mask=e??"\u2022",this.on("userInput",s=>{this._setValue(s)}),this.on("finalize",()=>{this.value===void 0&&(this.value="")})}},hb=class extends In{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){let e=this._selectedValue;this.value=e===void 0?void 0:e.value}constructor(e){super(e,!1),this.options=e.options;let n=this.options.findIndex(({value:r})=>r===e.initialValue),s=n===-1?0:n;this.cursor=this.options[s]?.disabled?_s(s,1,this.options):s,this.changeValue(),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=_s(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=_s(this.cursor,1,this.options);break}this.changeValue()})}},Wl=class extends In{options;cursor=0;constructor(e){super(e,!1),this.options=e.options;let n=e.caseSensitive===!0,s=this.options.map(({value:[r]})=>n?r:r?.toLowerCase());this.cursor=Math.max(s.indexOf(e.initialValue),0),this.on("key",r=>{if(!r)return;let o=n?r:r.toLowerCase();if(!s.includes(o))return;let i=this.options.find(({value:[a]})=>n?a===o:a?.toLowerCase()===o);i&&(this.value=i.value,this.state="submit",this.emit("submit"))})}},Kl=class extends In{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}\u2588`;let n=e.slice(0,this.cursor),s=e.slice(this.cursor,this.cursor+1),r=e.slice(this.cursor+1);return`${n}${(0,Pr.styleText)("inverse",s)}${r}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",n=>{this._setValue(n)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}});var Ob={};_T(Ob,{CANCEL_SYMBOL:()=>Bi,MULTISELECT_INSTRUCTIONS:()=>Gf,SELECT_INSTRUCTIONS:()=>Ab,S_BAR:()=>U,S_BAR_END:()=>et,S_BAR_END_RIGHT:()=>vb,S_BAR_H:()=>Jl,S_BAR_START:()=>Df,S_BAR_START_RIGHT:()=>xb,S_CHECKBOX_ACTIVE:()=>Vl,S_CHECKBOX_INACTIVE:()=>Oo,S_CHECKBOX_SELECTED:()=>Fr,S_CONNECT_LEFT:()=>_b,S_CORNER_BOTTOM_LEFT:()=>qf,S_CORNER_BOTTOM_RIGHT:()=>$f,S_CORNER_TOP_LEFT:()=>Tb,S_CORNER_TOP_RIGHT:()=>Rf,S_ERROR:()=>Kf,S_INFO:()=>Bf,S_PASSWORD_MASK:()=>Sb,S_RADIO_ACTIVE:()=>Hi,S_RADIO_INACTIVE:()=>Dr,S_STEP_ACTIVE:()=>If,S_STEP_CANCEL:()=>Ff,S_STEP_ERROR:()=>Lf,S_STEP_SUBMIT:()=>Rr,S_SUCCESS:()=>Uf,S_WARN:()=>Wf,autocomplete:()=>Cb,autocompleteMultiselect:()=>VO,box:()=>ZO,cancel:()=>aE,confirm:()=>QO,date:()=>eE,formatInstructionFooter:()=>Xl,group:()=>rE,groupMultiselect:()=>iE,intro:()=>lE,isCI:()=>Nf,isCancel:()=>Hl,isTTY:()=>kb,limitOptions:()=>Qs,log:()=>dn,multiline:()=>uE,multiselect:()=>oE,note:()=>pE,outro:()=>cE,password:()=>hE,path:()=>mE,progress:()=>yE,select:()=>wE,selectKey:()=>bE,settings:()=>ie,spinner:()=>zf,stream:()=>Nr,symbol:()=>fn,symbolBar:()=>Hf,taskLog:()=>vE,tasks:()=>kE,text:()=>SE,unicode:()=>zl,unicodeOr:()=>Fe,updateSettings:()=>cb});function GO(){return un.default.platform!=="win32"?un.default.env.TERM!=="linux":!!un.default.env.CI||!!un.default.env.WT_SESSION||!!un.default.env.TERMINUS_SUBLIME||un.default.env.ConEmuTask==="{cmd::Cmder}"||un.default.env.TERM_PROGRAM==="Terminus-Sublime"||un.default.env.TERM_PROGRAM==="vscode"||un.default.env.TERM==="xterm-256color"||un.default.env.TERM==="alacritty"||un.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function Xl(t,e){let n=[`${e?`${(0,M.styleText)("cyan",U)} `:""}${t.join(" \u2022 ")}`];return e&&n.push((0,M.styleText)("cyan",et)),n}function gb(t){return t.label??String(t.value??"")}function Mb(t,e){if(!t)return!0;let n=(e.label??String(e.value??"")).toLowerCase(),s=(e.hint??"").toLowerCase(),r=String(e.value).toLowerCase(),o=t.toLowerCase();return n.includes(o)||s.includes(o)||r.includes(o)}function zO(t,e){let n=[];for(let s of e)t.includes(s.value)&&n.push(s);return n}function yb(t,e,n,s){let r=n,o=n;return s==="center"?r=Math.floor((e-t)/2):s==="right"&&(r=e-t-n),o=e-r-t,[r,o]}function tE(t,e){let n=t.segmentValues,s=t.segmentCursor;if(e==="submit"||e==="cancel")return t.formattedValue;let r=(0,M.styleText)("gray",t.separator);return t.segments.map((o,i)=>{let a=i===s.segmentIndex&&!["submit","cancel"].includes(e),l=sE[o.type];return nE(n[o.type],{isActive:a,label:l})}).join(r)}function nE(t,e){let n=!t||t.replace(/_/g,"")==="";return e.isActive?(0,M.styleText)("inverse",n?e.label:t.replace(/_/g," ")):n?(0,M.styleText)("dim",e.label):t.replace(/_/g,(0,M.styleText)("dim"," "))}function yE({style:t="heavy",max:e=100,size:n=40,...s}={}){let r=zf(s),o=0,i="",a=Math.max(1,e),l=Math.max(1,n),c=p=>{switch(p){case"initial":case"active":return h=>(0,M.styleText)("magenta",h);case"error":case"cancel":return h=>(0,M.styleText)("red",h);case"submit":return h=>(0,M.styleText)("green",h);default:return h=>(0,M.styleText)("magenta",h)}},u=(p,h)=>{let m=Math.floor(o/a*l);return`${c(p)(wb[t].repeat(m))}${(0,M.styleText)("dim",wb[t].repeat(l-m))} ${h}`},d=(p="")=>{i=p,r.start(u("initial",p))},f=(p=1,h)=>{o=Math.min(a,p+o),r.message(u("active",h??i)),i=h??i};return{start:d,stop:r.stop,cancel:r.cancel,error:r.error,clear:r.clear,advance:f,isCancelled:r.isCancelled,message:p=>f(0,p)}}var M,un,Lr,Ki,Ao,zl,Nf,kb,Fe,If,Ff,Lf,Rr,Df,U,et,xb,vb,Hi,Dr,Vl,Fr,Oo,Sb,Jl,Rf,_b,$f,qf,Tb,Bf,Uf,Wf,Kf,fn,Hf,mb,Qs,Cb,VO,JO,XO,YO,ZO,QO,eE,sE,rE,Gf,Wi,oE,iE,dn,aE,lE,cE,uE,dE,fE,pE,hE,mE,gE,zf,wb,Ab,Gl,wE,bE,bb,Nr,kE,xE,vE,SE,Eb=fo(()=>{jf();jf();M=require("node:util"),un=ui(require("node:process"),1);vf();wf();Lr=require("node:fs"),Ki=require("node:path"),Ao=ui(Tf(),1);zl=GO(),Nf=()=>process.env.CI==="true",kb=t=>t.isTTY===!0,Fe=(t,e)=>zl?t:e,If=Fe("\u25C6","*"),Ff=Fe("\u25A0","x"),Lf=Fe("\u25B2","x"),Rr=Fe("\u25C7","o"),Df=Fe("\u250C","T"),U=Fe("\u2502","|"),et=Fe("\u2514","\u2014"),xb=Fe("\u2510","T"),vb=Fe("\u2518","\u2014"),Hi=Fe("\u25CF",">"),Dr=Fe("\u25CB"," "),Vl=Fe("\u25FB","[\u2022]"),Fr=Fe("\u25FC","[+]"),Oo=Fe("\u25FB","[ ]"),Sb=Fe("\u25AA","\u2022"),Jl=Fe("\u2500","-"),Rf=Fe("\u256E","+"),_b=Fe("\u251C","+"),$f=Fe("\u256F","+"),qf=Fe("\u2570","+"),Tb=Fe("\u256D","+"),Bf=Fe("\u25CF","\u2022"),Uf=Fe("\u25C6","*"),Wf=Fe("\u25B2","!"),Kf=Fe("\u25A0","x"),fn=t=>{switch(t){case"initial":case"active":return(0,M.styleText)("cyan",If);case"cancel":return(0,M.styleText)("red",Ff);case"error":return(0,M.styleText)("yellow",Lf);case"submit":return(0,M.styleText)("green",Rr);case"validating":return(0,M.styleText)("dim",If)}},Hf=t=>{switch(t){case"initial":case"active":return(0,M.styleText)("cyan",U);case"cancel":return(0,M.styleText)("red",U);case"error":return(0,M.styleText)("yellow",U);case"submit":return(0,M.styleText)("green",U)}};mb=(t,e,n,s,r,o=!1)=>{let i=e,a=0;if(o)for(let l=s-1;l>=n;l--){let c=t[l];if(c&&(i-=c.length),a++,i<=r)break}else for(let l=n;l<s;l++){let c=t[l];if(c&&(i-=c.length),a++,i<=r)break}return{lineCount:i,removals:a}},Qs=({cursor:t,options:e,style:n,output:s=process.stdout,maxItems:r=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:i=4})=>{let a=Ir(s)-o,l=Ef(s),c=(0,M.styleText)("dim","..."),u=Math.max(l-i,0),d=Math.max(Math.min(r,u),5),f=0;t>=d-3&&(f=Math.max(Math.min(t-d+3,e.length-d),0));let p=d<e.length&&f>0,h=d<e.length&&f+d<e.length,m=Math.min(f+d,e.length),y=[],w=0;p&&w++,h&&w++;let T=f+(p?1:0),g=m-(h?1:0);for(let b=T;b<g;b++){let S=e[b],_=S?n(S,b===t):"",C=Hn(_,a,{hard:!0,trim:!1}).split(`
|
|
243
243
|
`);y.push(C),w+=C.length}if(w>u){let b=0,S=0,_=w,C=t-T,A=u,F=()=>mb(y,_,0,C,A),B=()=>mb(y,_,C+1,y.length,A,!0);p?({lineCount:_,removals:b}=F(),_>A&&(h||(A-=1),{lineCount:_,removals:S}=B())):(h||(A-=1),{lineCount:_,removals:S}=B(),_>A&&(A-=1,{lineCount:_,removals:b}=F())),b>0&&(p=!0,y.splice(0,b)),S>0&&(h=!0,y.splice(y.length-S,S))}let v=[];p&&v.push(c);for(let b of y)for(let S of b)v.push(S);return h&&v.push(c),v};Cb=t=>new Pf({options:t.options,initialValue:t.initialValue?[t.initialValue]:void 0,initialUserInput:t.initialUserInput,placeholder:t.placeholder,completeOnTab:t.completeOnTab,filter:t.filter??((e,n)=>Mb(e,n)),signal:t.signal,input:t.input,output:t.output,validate:t.validate,render(){let e=t.withGuide??ie.withGuide,n=e?[`${(0,M.styleText)("gray",U)}`,`${fn(this.state)} ${t.message}`]:[`${fn(this.state)} ${t.message}`],s=this.userInput,r=this.options,o=t.placeholder,i=s===""&&o!==void 0,a=(l,c)=>{let u=gb(l),d=l.hint&&l.value===this.focusedValue?(0,M.styleText)("dim",` (${l.hint})`):"";switch(c){case"active":return`${(0,M.styleText)("green",Hi)} ${u}${d}`;case"inactive":return`${(0,M.styleText)("dim",Dr)} ${(0,M.styleText)("dim",u)}`;case"disabled":return`${(0,M.styleText)("gray",Dr)} ${(0,M.styleText)(["strikethrough","gray"],u)}`}};switch(this.state){case"submit":{let l=zO(this.selectedValues,r),c=l.length>0?` ${(0,M.styleText)("dim",l.map(gb).join(", "))}`:"",u=e?(0,M.styleText)("gray",U):"";return`${n.join(`
|
|
244
244
|
`)}
|
|
245
245
|
${u}${c}`}case"cancel":{let l=s?` ${(0,M.styleText)(["strikethrough","dim"],s)}`:"",c=e?(0,M.styleText)("gray",U):"";return`${n.join(`
|
|
246
246
|
`)}
|
|
247
|
-
${c}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",c=e?`${(0,M.styleText)(l,U)} `:"",u=e?(0,M.styleText)(l,et):"",d="";if(this.isNavigating||i){let T=i?o:s;d=T!==""?` ${(0,M.styleText)("dim",T)}`:""}else d=` ${this.userInputWithCursor}`;let f=this.filteredOptions.length!==r.length?(0,M.styleText)("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",p=this.filteredOptions.length===0&&s?[`${c}${(0,M.styleText)("yellow","No matches found")}`]:[],h=this.state==="error"?[`${c}${(0,M.styleText)("yellow",this.error)}`]:[];e&&n.push(`${c.trimEnd()}`),n.push(`${c}${(0,M.styleText)("dim","Search:")}${d}${f}`,...p,...h);let m=[`${(0,M.styleText)("dim","\u2191/\u2193")} to select`,...t.completeOnTab?[`${(0,M.styleText)("dim","Tab:")} complete`]:[],`${(0,M.styleText)("dim","Enter:")} confirm`,`${(0,M.styleText)("dim","Type:")} to search`],y=[`${c}${m.join(" \u2022 ")}`,u],w=this.filteredOptions.length===0?[]:
|
|
247
|
+
${c}${l}`}default:{let l=this.state==="error"?"yellow":"cyan",c=e?`${(0,M.styleText)(l,U)} `:"",u=e?(0,M.styleText)(l,et):"",d="";if(this.isNavigating||i){let T=i?o:s;d=T!==""?` ${(0,M.styleText)("dim",T)}`:""}else d=` ${this.userInputWithCursor}`;let f=this.filteredOptions.length!==r.length?(0,M.styleText)("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",p=this.filteredOptions.length===0&&s?[`${c}${(0,M.styleText)("yellow","No matches found")}`]:[],h=this.state==="error"?[`${c}${(0,M.styleText)("yellow",this.error)}`]:[];e&&n.push(`${c.trimEnd()}`),n.push(`${c}${(0,M.styleText)("dim","Search:")}${d}${f}`,...p,...h);let m=[`${(0,M.styleText)("dim","\u2191/\u2193")} to select`,...t.completeOnTab?[`${(0,M.styleText)("dim","Tab:")} complete`]:[],`${(0,M.styleText)("dim","Enter:")} confirm`,`${(0,M.styleText)("dim","Type:")} to search`],y=[`${c}${m.join(" \u2022 ")}`,u],w=this.filteredOptions.length===0?[]:Qs({cursor:this.cursor,options:this.filteredOptions,columnPadding:e?3:0,rowPadding:n.length+y.length,style:(T,g)=>a(T,T.disabled?"disabled":g?"active":"inactive"),maxItems:t.maxItems,output:t.output});return[...n,...w.map(T=>`${c}${T}`),...y].join(`
|
|
248
248
|
`)}}}}).prompt(),VO=t=>{let e=(s,r,o,i)=>{let a=o.includes(s.value),l=s.label??String(s.value??""),c=s.hint&&i!==void 0&&s.value===i?(0,M.styleText)("dim",` (${s.hint})`):"",u=a?(0,M.styleText)("green",Fr):(0,M.styleText)("dim",Oo);return s.disabled?`${(0,M.styleText)("gray",Oo)} ${(0,M.styleText)(["strikethrough","gray"],l)}`:r?`${u} ${l}${c}`:`${u} ${(0,M.styleText)("dim",l)}`},n=new Pf({options:t.options,multiple:!0,placeholder:t.placeholder,filter:t.filter??((s,r)=>Mb(s,r)),validate:()=>{if(t.required&&n.selectedValues.length===0)return"Please select at least one item"},initialValue:t.initialValues,signal:t.signal,input:t.input,output:t.output,render(){let s=t.withGuide??ie.withGuide,r=`${s?`${(0,M.styleText)("gray",U)}
|
|
249
249
|
`:""}${fn(this.state)} ${t.message}
|
|
250
250
|
`,o=this.userInput,i=t.placeholder,a=o===""&&i!==void 0,l=this.isNavigating||a?(0,M.styleText)("dim",a?i:o):this.userInputWithCursor,c=this.options,u=this.filteredOptions.length!==c.length?(0,M.styleText)("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${r}${s?`${(0,M.styleText)("gray",U)} `:""}${(0,M.styleText)("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${r}${s?`${(0,M.styleText)("gray",U)} `:""}${(0,M.styleText)(["strikethrough","dim"],o)}`;default:{let d=this.state==="error"?"yellow":"cyan",f=s?`${(0,M.styleText)(d,U)} `:"",p=s?(0,M.styleText)(d,et):"",h=[`${(0,M.styleText)("dim","\u2191/\u2193")} to navigate`,`${(0,M.styleText)("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${(0,M.styleText)("dim","Enter:")} confirm`,`${(0,M.styleText)("dim","Type:")} to search`],m=this.filteredOptions.length===0&&o?[`${f}${(0,M.styleText)("yellow","No matches found")}`]:[],y=this.state==="error"?[`${f}${(0,M.styleText)("yellow",this.error)}`]:[],w=[...`${r}${s?(0,M.styleText)(d,U):""}`.split(`
|
|
251
|
-
`),`${f}${(0,M.styleText)("dim","Search:")} ${l}${u}`,...m,...y],T=[`${f}${h.join(" \u2022 ")}`,p],g=
|
|
251
|
+
`),`${f}${(0,M.styleText)("dim","Search:")} ${l}${u}`,...m,...y],T=[`${f}${h.join(" \u2022 ")}`,p],g=Qs({cursor:this.cursor,options:this.filteredOptions,style:(v,b)=>e(v,b,this.selectedValues,this.focusedValue),maxItems:t.maxItems,output:t.output,rowPadding:w.length+T.length});return[...w,...g.map(v=>`${f}${v}`),...T].join(`
|
|
252
252
|
`)}}}});return n.prompt()},JO=[Tb,Rf,qf,$f],XO=[Df,xb,et,vb];YO=t=>t,ZO=(t="",e="",n)=>{let s=n?.output??process.stdout,r=Ir(s),o=1*2,i=n?.titlePadding??1,a=n?.contentPadding??2,l=n?.width===void 0||n.width==="auto"?1:Math.min(1,n.width),c=n?.withGuide??ie.withGuide?`${(0,M.styleText)("gray",U)} `:"",u=n?.formatBorder??YO,d=(n?.rounded?JO:XO).map(u),f=u(Jl),p=u(U),h=ut(c),m=ut(e),y=r-h,w=Math.floor(r*l)-h;if(n?.width==="auto"){let A=t.split(`
|
|
253
253
|
`),F=m+i*2;for(let H of A){let $=ut(H)+a*2;$>F&&(F=$)}let B=F+o;B<w&&(w=B)}w%2!==0&&(w<y?w++:w--);let T=w-o,g=T-i*2,v=m>g?`${e.slice(0,g-3)}...`:e,[b,S]=yb(ut(v),T,i,n?.titleAlign),_=Hn(t,T-a*2,{hard:!0,trim:!1});s.write(`${c}${d[0]}${f.repeat(b)}${v}${f.repeat(S)}${d[1]}
|
|
254
254
|
`);let C=_.split(`
|
|
@@ -280,12 +280,12 @@ ${(0,M.styleText)("gray",U)}`:""}`}case"error":{let c=r?`${(0,M.styleText)("yell
|
|
|
280
280
|
`).map((p,h)=>h===0?`${r?`${(0,M.styleText)("yellow",et)} `:""}${(0,M.styleText)("yellow",p)}`:` ${p}`).join(`
|
|
281
281
|
`),d=i.split(`
|
|
282
282
|
`).length,f=u.split(`
|
|
283
|
-
`).length+1;return`${i}${c}${
|
|
283
|
+
`).length+1;return`${i}${c}${Qs({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:c.length,rowPadding:d+f,style:l}).join(`
|
|
284
284
|
${c}`)}
|
|
285
285
|
${u}
|
|
286
286
|
`}default:{let c=r?`${(0,M.styleText)("cyan",U)} `:"",u=i.split(`
|
|
287
287
|
`).length,d=s?Xl(Gf,r):r?[(0,M.styleText)("cyan",et)]:[],f=d.join(`
|
|
288
|
-
`),p=d.length+1;return`${i}${c}${
|
|
288
|
+
`),p=d.length+1;return`${i}${c}${Qs({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:c.length,rowPadding:u+p,style:l}).join(`
|
|
289
289
|
${c}`)}
|
|
290
290
|
${f}
|
|
291
291
|
`}}}}).prompt()},iE=t=>{let{selectableGroups:e=!0,groupSpacing:n=0}=t,s=(i,a,l=[])=>{let c=i.label??String(i.value),u=typeof i.group=="string",d=u&&(l[l.indexOf(i)+1]??{group:!0}),f=u&&d&&d.group===!0,p="",h="";u&&(e?(p=f?`${et} `:`${U} `,h=f?" ":`${U} `):p=" ");let m="";if(n>0&&!u&&(m=`
|
|
@@ -297,12 +297,12 @@ ${(0,M.styleText)("gray",U)}`:""}`:""}`}case"error":{let u=i?`${(0,M.styleText)(
|
|
|
297
297
|
`).map((m,y)=>y===0?`${i?`${(0,M.styleText)("yellow",et)} `:""}${(0,M.styleText)("yellow",m)}`:` ${m}`).join(`
|
|
298
298
|
`),f=a.split(`
|
|
299
299
|
`).length,p=d.split(`
|
|
300
|
-
`).length+1,h=
|
|
300
|
+
`).length+1,h=Qs({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:f+p,style:c}).join(`
|
|
301
301
|
${u}`);return`${a}${u}${h}
|
|
302
302
|
${d}
|
|
303
303
|
`}default:{let u=i?`${(0,M.styleText)("cyan",U)} `:"",d=a.split(`
|
|
304
304
|
`).length,f=o?Xl(Gf,i):i?[(0,M.styleText)("cyan",et)]:[],p=f.join(`
|
|
305
|
-
`),h=f.length+1,m=
|
|
305
|
+
`),h=f.length+1,m=Qs({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:u.length,rowPadding:d+h,style:c}).join(`
|
|
306
306
|
${u}`);return`${a}${u}${m}
|
|
307
307
|
${p}
|
|
308
308
|
`}}}}).prompt()},dn={message:(t=[],{symbol:e=(0,M.styleText)("gray",U),secondarySymbol:n=(0,M.styleText)("gray",U),output:s=process.stdout,spacing:r=1,withGuide:o}={})=>{let i=[],a=o??ie.withGuide,l=a?n:"",c=a?`${e} `:"",u=a?`${n} `:"";for(let f=0;f<r;f++)i.push(l);let d=Array.isArray(t)?t:t.split(`
|
|
@@ -349,7 +349,7 @@ ${i}
|
|
|
349
349
|
`;switch(this.state){case"submit":{let l=s?`${(0,M.styleText)("gray",U)} `:"",c=it(t.output,e(this.options[this.cursor],"selected"),l);return`${a}${c}`}case"cancel":{let l=s?`${(0,M.styleText)("gray",U)} `:"",c=it(t.output,e(this.options[this.cursor],"cancelled"),l);return`${a}${c}${s?`
|
|
350
350
|
${(0,M.styleText)("gray",U)}`:""}`}default:{let l=s?`${(0,M.styleText)("cyan",U)} `:"",c=a.split(`
|
|
351
351
|
`).length,u=n?Xl(Ab,s):s?[(0,M.styleText)("cyan",et)]:[],d=u.join(`
|
|
352
|
-
`),f=u.length+1;return`${a}${l}${
|
|
352
|
+
`),f=u.length+1;return`${a}${l}${Qs({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:l.length,rowPadding:c+f,style:(p,h)=>e(p,p.disabled?"disabled":h?"active":"inactive")}).join(`
|
|
353
353
|
${l}`)}
|
|
354
354
|
${d}
|
|
355
355
|
`}}}}).prompt()},bE=t=>{let e=(n,s="inactive")=>{if(n===void 0)return"";let r=n.label??String(n.value);return s==="selected"?`${(0,M.styleText)("dim",r)}`:s==="cancelled"?`${(0,M.styleText)(["strikethrough","dim"],r)}`:s==="active"?`${(0,M.styleText)(["bgCyan","gray"],` ${n.value} `)} ${r}${n.hint?` ${(0,M.styleText)("dim",`(${n.hint})`)}`:""}`:`${(0,M.styleText)(["gray","bgWhite","inverse"],` ${n.value} `)} ${r}${n.hint?` ${(0,M.styleText)("dim",`(${n.hint})`)}`:""}`};return new Wl({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,caseSensitive:t.caseSensitive,render(){let n=t.withGuide??ie.withGuide,s=`${n?`${(0,M.styleText)("gray",U)}
|
|
@@ -387,26 +387,26 @@ ${l}${i}
|
|
|
387
387
|
`}case"submit":{let i=o?`${e?" ":""}${(0,M.styleText)("dim",o)}`:"",a=e?(0,M.styleText)("gray",U):"";return`${n}${a}${i}`}case"cancel":{let i=o?` ${(0,M.styleText)(["strikethrough","dim"],o)}`:"",a=e?(0,M.styleText)("gray",U):"";return`${n}${a}${i}${o.trim()?`
|
|
388
388
|
${a}`:""}`}default:{let i=e?`${(0,M.styleText)("cyan",U)} `:"",a=e?(0,M.styleText)("cyan",et):"";return`${n}${i}${r}
|
|
389
389
|
${a}
|
|
390
|
-
`}}}}).prompt()});var Rb=ne((uD,Db)=>{"use strict";var _E=require("readline"),Pb=lf(),Yl=Pl(),jb=vu(),
|
|
390
|
+
`}}}}).prompt()});var Rb=ne((uD,Db)=>{"use strict";var _E=require("readline"),Pb=lf(),Yl=Pl(),jb=vu(),er=null;try{er=$0()}catch{er=null}var TE=["write_file","replace_in_file","apply_patch","delete_file","move_file"],ME=60,CE=160,Jf={pending:"\xB7",in_progress:"\u25B6",completed:"\u2713",cancelled:"\u2298"},AE={pending:"gray",in_progress:"cyan",completed:"green",cancelled:"gray"},tr=null;try{let t=U0();t&&typeof t.createColors=="function"?tr=t.createColors(!process.env.NO_COLOR&&!!process.stderr.isTTY):t&&(tr=t)}catch{tr=null}var $r=!!(tr&&tr.isColorSupported===!0);function ce(t,e){let n=String(e??""),s=tr&&tr[t];return typeof s=="function"?s(n):n}function OE(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function Nb(t){let e=Math.max(0,Number(t)||0);return e<1e3?String(e):e<1e4?(e/1e3).toFixed(1)+"k":Math.round(e/1e3)+"k"}function Ib(t){let e=Math.max(0,Number(t)||0)/1e3;return e<10?e.toFixed(2)+"s":e<60?e.toFixed(1)+"s":Math.floor(e/60)+"m"+Math.round(e%60)+"s"}function Fb(t){let e=String((t&&t.result)==null?"":t.result);if(!e)return"";if(t&&t.ok===!1){let r=e.split(`
|
|
391
391
|
`);for(let o=0;o<r.length;o++){let i=r[o].trim();if(i)return OE(i.replace(/^ERROR:\s*/i,""),60)}return""}let n=0,s=e.split(`
|
|
392
|
-
`);for(let r=0;r<s.length;r++)s[r].trim()&&n++;return n>=2?n+" \u884C":""}function EE(t,e,n){let s=t&&t.name||"?",r=t&&t.path?" "+String(t.path):"",o=!(t&&t.ok===!1),i=[];n&&n.detail&&i.push(n.detail),n&&n.sec&&i.push(n.sec);let a=i.length?" \xB7 "+i.join(" \xB7 "):"";return e?(o?ce("green","\u25C7"):ce("red","\u2717"))+" "+ce("bold",s)+ce("gray",r)+(a?ce("dim",a):""):"[tool] "+s+r+a+(o?"":" \u2717")}function PE(t,e,n){let s=Number(t)||0,r=Number(e)||0;if(r<=0)return Nb(s);let o=Math.max(0,Math.min(1,s/r)),i=Math.round(o*8),a="\u2588".repeat(i)+"\u2591".repeat(8-i),l=Math.round(o*100)+"%",c=o>.95?"red":o>.8?"yellow":"cyan";return n("dim","[")+n(c,a)+n("dim","] ")+l}function jE(t,e){let n=t.map(function(s){return s&&s.path}).join(", ");return e?ce("gray","\xB7 \u5F15\u7528 ")+ce("dim",n):"[refs] "+n}function IE(t,e){let n=(t&&t.description||"")+(t&&t.line||"");return e?ce("gray","\xB7 \u5B50\u4EE3\u7406 ")+ce("dim",n):"[\u5B50\u4EE3\u7406] "+n}function Vf(t,e,n){let s="+"+(Number(t)||0),r="-"+(Number(e)||0);return n?ce("green",s)+" "+ce("red",r):s+" "+r}function NE(t,e){let n=String(t.s==null?"":t.s);return t.t==="@"?e?ce("cyan",n):n:t.t==="+"?e?ce("green","+ "+n):"+ "+n:t.t==="-"?e?ce("red","- "+n):"- "+n:e?ce("dim"," "+n):" "+n}function Lb(t,e){let n=t||{},s=Array.isArray(n.files)?n.files:[],r=[],o=function(u){r.push(u)};if(n.name==="move_file"&&s.length===2){let u=s[0].path,d=s[1].path,f=e?ce("cyan","\u25CF")+" "+ce("bold","move_file")+ce("gray"," \xB7 \u79FB\u52A8 "+u+" \u2192 "+d):"\u25CF move_file \xB7 \u79FB\u52A8 "+u+" \u2192 "+d;return o(f+(e?ce("dim","\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09"):"\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09")),r}let i=s.map(function(u){let d=jb.computeHunks(u.before||"",u.after||"");return{f:u,hunks:d,st:jb.stats(d)}}),a=0,l=0;for(let u of i)a+=u.st.add,l+=u.st.del;i.length>1&&o((e?ce("cyan","\u25CF")+" "+ce("bold",n.name||"\u5199\u5165"):"\u25CF "+(n.name||"\u5199\u5165"))+" "+i.length+" \u4E2A\u6587\u4EF6 "+Vf(a,l,e));let c=CE;for(let u of i){let d=u.f,f=u.st,p=d.kind==="add"?"\u65B0\u589E":d.kind==="delete"?"\u5220\u9664":"\u4FEE\u6539";i.length===1?o((e?ce("cyan","\u25CF")+" "+ce("bold",n.name||"\u5199\u5165")+ce("gray"," \xB7 "+p+" "+d.path):"\u25CF "+(n.name||"\u5199\u5165")+" \xB7 "+p+" "+d.path)+" "+Vf(f.add,f.del,e)):o((e?ce("gray"," \u25B8 "):" \u25B8 ")+(e?ce("bold",p+" "+d.path):p+" "+d.path)+" "+Vf(f.add,f.del,e));let h=[];for(let T of u.hunks){h.push({t:"@",s:T.header});for(let g of T.lines)h.push({t:g.t,s:g.s})}let m=Math.max(0,Math.min(ME,c)),y=h.slice(0,m);c-=y.length;for(let T of y)o(" "+NE(T,e));let w=h.length-y.length;w>0&&o(" "+(e?ce("dim","\u2026 \u8FD8\u6709 "+w+" \u884C\u672A\u663E\u793A"):"\u2026 \u8FD8\u6709 "+w+" \u884C\u672A\u663E\u793A"))}return r}function FE(t,e){let n=t&&Jf[t.status]?t.status:"pending",s=Jf[n],r=String(t&&t.content||"");return e?ce(AE[n]||"gray",s)+" "+(n==="completed"||n==="cancelled"?ce("dim",r):r):"[todo] "+s+" "+r}function LE(t){let e=t||{},n=e.output||process.stderr,s=e.stdout||process.stdout,r=e.colors!==void 0?e.colors:
|
|
392
|
+
`);for(let r=0;r<s.length;r++)s[r].trim()&&n++;return n>=2?n+" \u884C":""}function EE(t,e,n){let s=t&&t.name||"?",r=t&&t.path?" "+String(t.path):"",o=!(t&&t.ok===!1),i=[];n&&n.detail&&i.push(n.detail),n&&n.sec&&i.push(n.sec);let a=i.length?" \xB7 "+i.join(" \xB7 "):"";return e?(o?ce("green","\u25C7"):ce("red","\u2717"))+" "+ce("bold",s)+ce("gray",r)+(a?ce("dim",a):""):"[tool] "+s+r+a+(o?"":" \u2717")}function PE(t,e,n){let s=Number(t)||0,r=Number(e)||0;if(r<=0)return Nb(s);let o=Math.max(0,Math.min(1,s/r)),i=Math.round(o*8),a="\u2588".repeat(i)+"\u2591".repeat(8-i),l=Math.round(o*100)+"%",c=o>.95?"red":o>.8?"yellow":"cyan";return n("dim","[")+n(c,a)+n("dim","] ")+l}function jE(t,e){let n=t.map(function(s){return s&&s.path}).join(", ");return e?ce("gray","\xB7 \u5F15\u7528 ")+ce("dim",n):"[refs] "+n}function IE(t,e){let n=(t&&t.description||"")+(t&&t.line||"");return e?ce("gray","\xB7 \u5B50\u4EE3\u7406 ")+ce("dim",n):"[\u5B50\u4EE3\u7406] "+n}function Vf(t,e,n){let s="+"+(Number(t)||0),r="-"+(Number(e)||0);return n?ce("green",s)+" "+ce("red",r):s+" "+r}function NE(t,e){let n=String(t.s==null?"":t.s);return t.t==="@"?e?ce("cyan",n):n:t.t==="+"?e?ce("green","+ "+n):"+ "+n:t.t==="-"?e?ce("red","- "+n):"- "+n:e?ce("dim"," "+n):" "+n}function Lb(t,e){let n=t||{},s=Array.isArray(n.files)?n.files:[],r=[],o=function(u){r.push(u)};if(n.name==="move_file"&&s.length===2){let u=s[0].path,d=s[1].path,f=e?ce("cyan","\u25CF")+" "+ce("bold","move_file")+ce("gray"," \xB7 \u79FB\u52A8 "+u+" \u2192 "+d):"\u25CF move_file \xB7 \u79FB\u52A8 "+u+" \u2192 "+d;return o(f+(e?ce("dim","\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09"):"\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09")),r}let i=s.map(function(u){let d=jb.computeHunks(u.before||"",u.after||"");return{f:u,hunks:d,st:jb.stats(d)}}),a=0,l=0;for(let u of i)a+=u.st.add,l+=u.st.del;i.length>1&&o((e?ce("cyan","\u25CF")+" "+ce("bold",n.name||"\u5199\u5165"):"\u25CF "+(n.name||"\u5199\u5165"))+" "+i.length+" \u4E2A\u6587\u4EF6 "+Vf(a,l,e));let c=CE;for(let u of i){let d=u.f,f=u.st,p=d.kind==="add"?"\u65B0\u589E":d.kind==="delete"?"\u5220\u9664":"\u4FEE\u6539";i.length===1?o((e?ce("cyan","\u25CF")+" "+ce("bold",n.name||"\u5199\u5165")+ce("gray"," \xB7 "+p+" "+d.path):"\u25CF "+(n.name||"\u5199\u5165")+" \xB7 "+p+" "+d.path)+" "+Vf(f.add,f.del,e)):o((e?ce("gray"," \u25B8 "):" \u25B8 ")+(e?ce("bold",p+" "+d.path):p+" "+d.path)+" "+Vf(f.add,f.del,e));let h=[];for(let T of u.hunks){h.push({t:"@",s:T.header});for(let g of T.lines)h.push({t:g.t,s:g.s})}let m=Math.max(0,Math.min(ME,c)),y=h.slice(0,m);c-=y.length;for(let T of y)o(" "+NE(T,e));let w=h.length-y.length;w>0&&o(" "+(e?ce("dim","\u2026 \u8FD8\u6709 "+w+" \u884C\u672A\u663E\u793A"):"\u2026 \u8FD8\u6709 "+w+" \u884C\u672A\u663E\u793A"))}return r}function FE(t,e){let n=t&&Jf[t.status]?t.status:"pending",s=Jf[n],r=String(t&&t.content||"");return e?ce(AE[n]||"gray",s)+" "+(n==="completed"||n==="cancelled"?ce("dim",r):r):"[todo] "+s+" "+r}function LE(t){let e=t||{},n=e.output||process.stderr,s=e.stdout||process.stdout,r=e.colors!==void 0?e.colors:tr,o=!!e.enabled,i=e.stream!==!1,a=!!e.showThinking,l=null,c=!1,u=["\u25D2","\u25D0","\u25D3","\u25D1"],d=null,f=0,p=!1,h="idle",m="idle",y="\u601D\u8003\u4E2D",w=y,T="",g=0,v=0,b=0,S="",_=!1,C=!1,A="",F=0,B=!1,H=!1,$=0,J="",P="",K=!1,ae="",te=!1,Q=[],he="",G=0;function Ie(E){if(!_){yt();try{n.write(String(E)+`
|
|
393
393
|
`)}catch{}}}function Se(E){if(E)try{s.write(E)}catch{}}function yt(){H&&(Se(`
|
|
394
|
-
`),$++,H=!1)}function St(){let E=[w];return T&&E.push(T),b>0&&E.push(Nb(b)+" \u5B57\u601D\u8003"),g>0&&E.push("ctx "+PE(g,v,ce)),E.join(" \xB7 ")}function Me(){if(!o||_)return;let E=u[f%u.length];f++;try{n.write("\r\x1B[K"+ce("cyan",Yl.face(m))+" "+ce("magenta",E)+" "+St())}catch{}p=!0}function
|
|
395
|
-
`))>=0;){let Z=P.slice(0,L+1);P=P.slice(L+1),ct(Z)}}function ct(E){if(E.match(/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/)){if(!K){oe(),K=!0,ae=E;return}ae+=E,Ne(ae),ae="",K=!1;return}if(K){ae+=E;return}let Z=E.trim(),Y=Z.indexOf("|")!==-1;if(te){if(!Y||/^\s*$/.test(Z)){oe(),pe(E);return}Q.push(E);return}if(Y&&!/^\s*$/.test(Z)){te=!0,Q=[E];return}pe(E)}function oe(){if(!te)return;let E=Q;if(te=!1,Q=[],E.length>=2&&
|
|
396
|
-
`)}else E.forEach(pe)}function pe(E){let L=
|
|
394
|
+
`),$++,H=!1)}function St(){let E=[w];return T&&E.push(T),b>0&&E.push(Nb(b)+" \u5B57\u601D\u8003"),g>0&&E.push("ctx "+PE(g,v,ce)),E.join(" \xB7 ")}function Me(){if(!o||_)return;let E=u[f%u.length];f++;try{n.write("\r\x1B[K"+ce("cyan",Yl.face(m))+" "+ce("magenta",E)+" "+St())}catch{}p=!0}function Rt(E){if(E&&(w=String(E)),!(!o||_)){if(d){Me();return}Me(),d=setInterval(Me,100)}}function Et(){d&&Me()}function qe(){if(d&&(clearInterval(d),d=null),p){try{n.write("\r\x1B[K")}catch{}p=!1}}function Wn(){if(!s.isTTY)return!1;let E="\r\x1B[J";return $>0&&(E+="\x1B["+$+"A\x1B[J"),Se(E),$=0,H=!1,!0}async function Fs(){if(!o)return!1;try{l=await Promise.resolve().then(()=>(Eb(),Ob))}catch{return l=null,C||(C=!0,Ie(ce("yellow","[luban] ")+"\u9009\u62E9\u9898\u7EC4\u4EF6\u4E0D\u53EF\u7528\uFF08\u5148 npm install\uFF0C\u6216 Node \u7248\u672C\u8FC7\u4F4E\uFF09\uFF1Aask_question \u4F1A\u76F4\u63A5\u62A5\u9519")),!1}return c=!0,!0}function gs(){return!!(er&&r&&s.isTTY&&r.isColorSupported===!0)}function Be(E){P+=E;let L;for(;(L=P.indexOf(`
|
|
395
|
+
`))>=0;){let Z=P.slice(0,L+1);P=P.slice(L+1),ct(Z)}}function ct(E){if(E.match(/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/)){if(!K){oe(),K=!0,ae=E;return}ae+=E,Ne(ae),ae="",K=!1;return}if(K){ae+=E;return}let Z=E.trim(),Y=Z.indexOf("|")!==-1;if(te){if(!Y||/^\s*$/.test(Z)){oe(),pe(E);return}Q.push(E);return}if(Y&&!/^\s*$/.test(Z)){te=!0,Q=[E];return}pe(E)}function oe(){if(!te)return;let E=Q;if(te=!1,Q=[],E.length>=2&&er.isSepRow(E[1])){let L=E.map(function(Y){return Y.replace(/\n$/,"")}),Z=er.renderTable(L,0,er.mk(ce));wt(Z.text+`
|
|
396
|
+
`)}else E.forEach(pe)}function pe(E){let L=er.renderBlock(E,ce);wt(L)}function Ne(E){wt(er.renderBlock(E,ce))}function wt(E){if(E){yt();try{n.write(E)}catch{return}for(let L=0;L<E.length;L++)E.charCodeAt(L)===10&&$++;H=E.charCodeAt(E.length-1)!==10}}function ys(){if(gs()&&(K&&ae&&(Ne(ae),ae="",K=!1),oe(),P)){let E=P;P="",pe(E.endsWith(`
|
|
397
397
|
`)?E:E+`
|
|
398
|
-
`)}}function on(E){let L=String(E??"");if(!(!L||!i||_)){if(H||qe(),B=!0,
|
|
398
|
+
`)}}function on(E){let L=String(E??"");if(!(!L||!i||_)){if(H||qe(),B=!0,gs())Be(L);else{Se(L);for(let Z=0;Z<L.length;Z++)L.charCodeAt(Z)===10&&$++;H=L.charCodeAt(L.length-1)!==10}J+=L}}function $t(E){let L=String(E??"");if(!L)return;if(b+=L.length,!a){Et();return}S+=L;let Z=S.lastIndexOf(`
|
|
399
399
|
`);if(Z<0)return;let Y=S.slice(0,Z);if(S=S.slice(Z+1),!!Y.trim()){qe(),yt();try{n.write(ce("gray",Y)+`
|
|
400
400
|
`)}catch{}}}function Pt(E){let L=String(E??"");if(b+=L.length,B&&(Wn(),J="",B=!1),a&&L.trim()){qe();try{n.write(ce("gray",L.replace(/\s+$/,""))+`
|
|
401
|
-
`)}catch{}}Et()}function ns(E){let L=String(E??"");if(A=L,F=Date.now(),m="work",!o){yt(),Ie("[..] "+L);return}yt(),
|
|
402
|
-
`)));let Y=null;if(c&&l){try{Y=await l.select({message:"\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\u5417\uFF1F",options:[{value:"yes",label:"\u5141\u8BB8\u672C\u6B21"},{value:"all",label:"\u5141\u8BB8\uFF0C\u672C\u6B21\u4F1A\u8BDD\u4E0D\u518D\u8BE2\u95EE"},{value:"no",label:"\u62D2\u7EDD"}],output:n,signal:L})}catch{Y=null}l.isCancel(Y)&&(Y=null)}else Y=await wu(L);return F=Date.now(),o&&!(L&&L.aborted)&&
|
|
401
|
+
`)}catch{}}Et()}function ns(E){let L=String(E??"");if(A=L,F=Date.now(),m="work",!o){yt(),Ie("[..] "+L);return}yt(),Rt(L)}function Ze(E){if(E&&E.phase==="start")return;qe(),m=h;let L=E&&E.name||"",Z={detail:Fb(E),sec:""};F>0&&L&&A.indexOf(L)===0&&(Z.sec=Ib(Date.now()-F),F=0,A=""),Ie(EE(E,$r,Z)),o&&Rt(y)}function En(E){E&&(m=h,g=Number(E.contextTokens)||0,v=Number(E.window)||0,J&&(he=J,J=""))}function Kn(E){!Array.isArray(E)||!E.length||(m=h,qe(),Ie(jE(E,$r)),o&&Rt(y))}function Ls(E){m=h,qe(),Ie(IE(E,$r)),o&&Rt(y)}let ws=Object.create(null);function ao(E){let L=Array.isArray(E)?E:[];if(!L.length)return;let Z=[];for(let Y=0;Y<L.length;Y++){let Je=L[Y];if(!Je||!Je.id)continue;let rt=Jf[Je.status]?Je.status:"pending";ws[Je.id]!==rt&&(ws[Je.id]=rt,Z.push(FE(Je,$r)))}if(Z.length){m=h,qe();for(let Y=0;Y<Z.length;Y++)Ie(Z[Y]);o&&Rt(y)}}function ai(E){let L=E||{};L.mode&&(T=String(L.mode)),h=Yl.moodForMode(T),m=h,Et()}async function Qa(E,L){if(!o)throw new Error("ask_question \u9700\u8981\u4EA4\u4E92\u7EC8\u7AEF\uFF08--json / --no-tui / \u975E TTY \u4E0B\u4E0D\u53EF\u7528\uFF09");if(!c||!l)throw new Error("ask_question \u9700\u8981 @clack/prompts\uFF08\u5148 npm install \u518D\u8BD5\uFF09");qe();try{E&&E.title&&l.note(E.title,"\u63D0\u95EE",{output:n});let Z={},Y=E&&E.questions||[];for(let Je=0;Je<Y.length;Je++){let rt=Y[Je],Qe=rt.options.map(function(q){return{value:q.id,label:q.recommended?q.label+"\uFF08\u63A8\u8350\uFF09":q.label}}),Xe;if(rt.allow_multiple?Xe=await l.multiselect({message:rt.prompt,options:Qe,required:!0,output:n,signal:L}):Xe=await l.select({message:rt.prompt,options:Qe,output:n,signal:L}),l.isCancel(Xe)){if(typeof e.onCancel=="function")try{e.onCancel("\u7528\u6237\u53D6\u6D88\u4E86\u63D0\u95EE")}catch{}throw new Error("ask_question \u5DF2\u53D6\u6D88\uFF1A\u7528\u6237\u53D6\u6D88\u4E86\u63D0\u95EE")}Z[rt.id]=Xe}return Pb.formatAnswers(E,Pb.normalizeAnswers(E,Z))}finally{o&&!(L&&L.aborted)&&Rt(y)}}function wu(E){return new Promise(function(L){let Z=null,Y=!1,Je=function(Qe){if(!Y){Y=!0;try{Z&&Z.close()}catch{}L(Qe)}};try{Z=_E.createInterface({input:process.stdin,output:n,terminal:!!(process.stdin.isTTY&&n.isTTY)})}catch{L(null);return}let rt=function(){Je(null)};if(E&&typeof E.addEventListener=="function"){if(E.aborted){Je(null);return}E.addEventListener("abort",rt,{once:!0})}Z.question("\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\uFF1F[y] \u5141\u8BB8 / [a] \u672C\u6B21\u4F1A\u8BDD\u90FD\u5141\u8BB8 / [N] \u62D2\u7EDD ",function(Qe){E&&typeof E.removeEventListener=="function"&&E.removeEventListener("abort",rt);let Xe=String(Qe||"").trim().toLowerCase();Je(Xe==="a"||Xe==="all"?"all":Xe==="y"||Xe==="yes"?"yes":null)})})}async function lo(E,L){if(!o)return!0;let Z=Lb(E,$r);Z.length&&(qe(),m="work",Ie(Z.join(`
|
|
402
|
+
`)));let Y=null;if(c&&l){try{Y=await l.select({message:"\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\u5417\uFF1F",options:[{value:"yes",label:"\u5141\u8BB8\u672C\u6B21"},{value:"all",label:"\u5141\u8BB8\uFF0C\u672C\u6B21\u4F1A\u8BDD\u4E0D\u518D\u8BE2\u95EE"},{value:"no",label:"\u62D2\u7EDD"}],output:n,signal:L})}catch{Y=null}l.isCancel(Y)&&(Y=null)}else Y=await wu(L);return F=Date.now(),o&&!(L&&L.aborted)&&Rt(y),Y==="all"?"all":Y==="yes"?"yes":!1}function co(E){let L=String(E??"");if(!L.trim())return"";if(!B)return L;let Z=J.trim()?J:he||"";return Z.trim()?Z.trimEnd()===L.trimEnd()?"":L.startsWith(Z)?L.slice(Z.length):L:L}function el(E){let L=String(E??"");if(ys(),!B){Se(L+`
|
|
403
403
|
`),H=!1;return}let Z=co(L),Y="";H?(Y+=`
|
|
404
404
|
`,H=!1):Z&&Z.charAt(0)===`
|
|
405
405
|
`&&(Z=Z.slice(1)),Z&&(Y+=Z),Y&&Y.charCodeAt(Y.length-1)!==10&&(Y+=`
|
|
406
|
-
`),Se(Y)}function
|
|
407
|
-
`)}catch{}S="";let Z=o?ce("cyan",Yl.face(Yl.moodForStop(L.stop)))+" ":"";if(L.compact){let Qe=[String(L.stop||"unknown")];Qe.push((L.iters==null?0:L.iters)+" \u8F6E"),Qe.push((L.tools||0)+" \u5DE5\u5177"),G>0&&Qe.push(Ib(Date.now()-G)),Ie(o?Z+ce("gray",Qe.join(" \xB7 ")):"[luban] "+Qe.join(" "))}else{let Qe="\u6A21\u5F0F="+L.mode+" \u8F6E\u6570="+L.iters+" \u5DE5\u5177\u8C03\u7528="+L.tools+" \u505C\u6B62="+L.stop+" \u6A21\u578B="+(L.model||"");Ie(Z+($r?ce("cyan","[luban] "):"[luban] ")+Qe)}let Y=Array.isArray(L.log)?L.log:[],Je=Object.create(null),rt=[];for(let Qe=0;Qe<Y.length;Qe++){let Xe=Y[Qe];if(!Xe||Xe.ok===!1||TE.indexOf(Xe.name)<0)continue;let q=Xe.path?String(Xe.path):"";!q||Je[q]||/^\d+ 个文件$/.test(q)||(Je[q]=1,rt.push(q))}rt.length&&Ie(($r?ce("gray","\xB7 \u6539\u52A8 "):"[files] ")+rt.length+" \u4E2A\u6587\u4EF6: "+rt.join(", "))}function uo(){qe(),w=y,m=h,B=!1,H=!1,$=0,J="",P="",K=!1,ae="",te=!1,Q=[],he="",b=0,S="",A="",F=0,g=0,v=0,G=Date.now();for(let E in
|
|
408
|
-
`)}catch{}S="",
|
|
409
|
-
`).slice(-3).join(" / "),c=new Error(t+" \u5931\u8D25\uFF1A"+l);return c.code=o.code,c.stderr=String(a||""),r(c)}s({stdout:String(i||""),stderr:String(a||"")})})})}function WE(t){let e=
|
|
406
|
+
`),Se(Y)}function xr(E){let L=E||{};if(qe(),a&&S.trim())try{n.write(ce("gray",S.replace(/\s+$/,""))+`
|
|
407
|
+
`)}catch{}S="";let Z=o?ce("cyan",Yl.face(Yl.moodForStop(L.stop)))+" ":"";if(L.compact){let Qe=[String(L.stop||"unknown")];Qe.push((L.iters==null?0:L.iters)+" \u8F6E"),Qe.push((L.tools||0)+" \u5DE5\u5177"),G>0&&Qe.push(Ib(Date.now()-G)),Ie(o?Z+ce("gray",Qe.join(" \xB7 ")):"[luban] "+Qe.join(" "))}else{let Qe="\u6A21\u5F0F="+L.mode+" \u8F6E\u6570="+L.iters+" \u5DE5\u5177\u8C03\u7528="+L.tools+" \u505C\u6B62="+L.stop+" \u6A21\u578B="+(L.model||"");Ie(Z+($r?ce("cyan","[luban] "):"[luban] ")+Qe)}let Y=Array.isArray(L.log)?L.log:[],Je=Object.create(null),rt=[];for(let Qe=0;Qe<Y.length;Qe++){let Xe=Y[Qe];if(!Xe||Xe.ok===!1||TE.indexOf(Xe.name)<0)continue;let q=Xe.path?String(Xe.path):"";!q||Je[q]||/^\d+ 个文件$/.test(q)||(Je[q]=1,rt.push(q))}rt.length&&Ie(($r?ce("gray","\xB7 \u6539\u52A8 "):"[files] ")+rt.length+" \u4E2A\u6587\u4EF6: "+rt.join(", "))}function uo(){qe(),w=y,m=h,B=!1,H=!1,$=0,J="",P="",K=!1,ae="",te=!1,Q=[],he="",b=0,S="",A="",F=0,g=0,v=0,G=Date.now();for(let E in ws)delete ws[E];Rt(y)}function tl(){if(qe(),a&&S.trim())try{n.write(ce("gray",S.replace(/\s+$/,""))+`
|
|
408
|
+
`)}catch{}S="",ys()}function z(E){return E!==void 0&&(a=!!E),a}function ee(){qe(),_=!0}return process.once("exit",function(){try{qe()}catch{}}),{enabled:o,init:Fs,stream:on,thinking:$t,split:Pt,progress:ns,tool:Ze,usage:En,refs:Kn,sub:Ls,todos:ao,setStatus:ai,setThinking:z,beginTurn:uo,endTurn:tl,ask:Qa,confirmWrite:lo,outputFinal:el,finish:xr,close:ee,line:function(E){qe(),Ie(E)}}}Db.exports={createUI:LE,paint:ce,resultDetail:Fb,previewLines:Lb}});var Vb=ne((dD,zb)=>{"use strict";var Zt=require("fs"),DE=require("os"),Ft=require("path"),{execFile:RE}=require("child_process"),Kt=ki(),Ql=sf(),qb="https://raw.githubusercontent.com/eppen/luban-plugins/main/registry/registry.json",Bb=6e4,$E=3e4,qE={fsRead:"\u8BFB\u53D6\u5DE5\u4F5C\u533A\u6587\u4EF6",fsWrite:"\u5199\u5165 / \u5220\u9664\u6587\u4EF6",shell:"\u6267\u884C shell \u547D\u4EE4",net:"\u53D1\u8D77\u7F51\u7EDC\u8BF7\u6C42",env:"\u8BFB\u53D6\u73AF\u5883\u53D8\u91CF"};function Gi(t){return/^https?:\/\//i.test(String(t||""))}function Yf(t){let e=t||process.cwd();try{Co().configure({root:e})}catch{}Ql.configure({root:e})}function zi(t){let e=t||{};if(e.registry)return e.registry;if(process.env.LUBAN_REGISTRY)return process.env.LUBAN_REGISTRY;let n=[Ft.join(__dirname,"registry","registry.json"),Ft.join(__dirname,"..","registry","registry.json")];for(let s of n)if(Zt.existsSync(s))return s;return qb}function BE(){let t=[Ft.join(__dirname,"registry","registry.json"),Ft.join(__dirname,"..","registry","registry.json")];for(let e of t)if(Zt.existsSync(e))return e;return""}async function UE(t,e){let n=new AbortController,s=setTimeout(function(){n.abort()},e||$E);try{let r=await fetch(t,{headers:{"user-agent":"luban-plugin-client"},signal:n.signal});if(!r.ok)throw new Error("HTTP "+r.status);return await r.text()}finally{clearTimeout(s)}}async function Vi(t,e){return Gi(t)?UE(t,e):Zt.readFileSync(Kt.expandHome(t),"utf8")}async function Ji(t,e){let n={},s=Gi(e)?e:Ft.resolve(Kt.expandHome(e));for(let r of t.signingKeys||[]){if(!r||!r.keyId)continue;if(r.publicKey&&!/\.pub$/i.test(String(r.publicKey))&&String(r.publicKey).length>64){try{n[r.keyId]=Kt.parsePublicKey(r.publicKey)}catch{}continue}let o=String(r.publicKey||"keys/"+r.keyId+".pub"),i=Gi(s)?new URL(o,s).toString():Ft.join(Ft.dirname(s),o);try{let a=JSON.parse(await Vi(i));n[r.keyId]=Kt.parsePublicKey(a.publicKey)}catch{}}return n}function $b(t,e,n){return new Promise(function(s,r){RE(t,e,{timeout:n||Bb,maxBuffer:4*1024*1024},function(o,i,a){if(o){let l=String(a||o.message||"").trim().split(`
|
|
409
|
+
`).slice(-3).join(" / "),c=new Error(t+" \u5931\u8D25\uFF1A"+l);return c.code=o.code,c.stderr=String(a||""),r(c)}s({stdout:String(i||""),stderr:String(a||"")})})})}function WE(t){let e=Ft.join(DE.tmpdir(),"luban-plugin-"+String(t||"x").replace(/[^a-z0-9-]/gi,"_")+"-"+process.pid+"-"+Date.now());return Zt.mkdirSync(e,{recursive:!0,mode:448}),e}async function Ub(t,e){let n=e||{},s=t.install||{},r=t.name,o=t.version;if(s.type==="local"){let l=Kt.expandHome(s.path||"");if(!l||!Zt.existsSync(l))throw new Error("\u672C\u5730\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A"+(s.path||"(\u7A7A)"));return{dir:Ft.resolve(l),cleanup:function(){},kind:"local"}}let i=WE(r),a=function(){try{Zt.rmSync(i,{recursive:!0,force:!0})}catch{}};if(s.type==="git"){if(!Gi(s.url)&&!/^git@/.test(String(s.url||"")))throw new Error("install.url \u4E0D\u662F\u53EF\u7528\u7684 git \u5730\u5740\uFF1A"+(s.url||"(\u7A7A)"));let l=n.tag||Kt.tagFor(r,o),c=Ft.join(i,"repo"),u=[s.url];/^git@github\.com:/.test(s.url)?u.push("https://github.com/"+s.url.slice(15)):/^https:\/\/github\.com\//.test(s.url)&&u.push("git@github.com:"+s.url.slice(19));let d=null;for(let p=0;p<u.length;p++)try{await $b("git",["clone","--depth","1","--branch",l,"--single-branch",u[p],c]),d=null;break}catch(h){if(d=h,h.code==="ENOENT")throw new Error("\u672C\u673A\u6CA1\u6709 git\uFF0C\u65E0\u6CD5\u4ECE git \u6765\u6E90\u5B89\u88C5");if(p===u.length-1)break;a(),Zt.mkdirSync(i,{recursive:!0})}if(d)throw a(),new Error("\u62C9\u53D6 "+s.url+" \u7684 "+l+" \u5931\u8D25\uFF1A"+d.message);let f=s.subdir?Ft.join(c,s.subdir):c;if(!Zt.existsSync(f))throw a(),new Error("\u4ED3\u5E93\u91CC\u6CA1\u6709 subdir\uFF1A"+s.subdir);return{dir:f,cleanup:a,kind:"git",tag:l}}if(s.type==="tarball"){if(!Gi(s.url))throw a(),new Error("tarball \u6765\u6E90\u9700\u8981 http(s) \u5730\u5740");let l=Ft.join(i,"pkg.tgz"),c=Buffer.from(await async function(){let p=new AbortController,h=setTimeout(function(){p.abort()},Bb);try{let m=await fetch(s.url,{signal:p.signal});if(!m.ok)throw new Error("HTTP "+m.status);return await m.arrayBuffer()}finally{clearTimeout(h)}}());Zt.writeFileSync(l,c);let u=Ft.join(i,"x");Zt.mkdirSync(u,{recursive:!0});try{await $b("tar",["-xzf",l,"-C",u],6e4)}catch(p){throw a(),new Error("\u89E3\u5305\u5931\u8D25\uFF08\u9700\u8981\u7CFB\u7EDF tar\uFF09\uFF1A"+p.message)}let d=Zt.readdirSync(u).filter(function(p){return!p.startsWith(".")});if(d.length!==1)throw a(),new Error("\u538B\u7F29\u5305\u9876\u5C42\u5E94\u5F53\u53EA\u6709\u4E00\u4E2A\u76EE\u5F55\uFF0C\u5B9E\u9645 "+d.length+" \u4E2A");let f=s.subdir?Ft.join(u,d[0],s.subdir):Ft.join(u,d[0]);if(!Zt.existsSync(f))throw a(),new Error("\u538B\u7F29\u5305\u91CC\u6CA1\u6709 subdir\uFF1A"+s.subdir);return{dir:f,cleanup:a,kind:"tarball"}}throw a(),new Error("\u4E0D\u652F\u6301\u7684 install.type\uFF1A"+s.type)}function Wb(t,e){if(t&&t.type==="skill"){let r=Kt.readSkillManifest(e);if(!r.ok)return{ok:!1,message:r.message};let o=Kt.sameSkill(t,r.manifest);return o.ok?{ok:!0,manifest:r.manifest}:{ok:!1,message:o.message}}let n=Ft.join(e,"plugin.json");if(!Zt.existsSync(n))return{ok:!1,message:"\u5305\u91CC\u6CA1\u6709 plugin.json"};let s;try{s=JSON.parse(Zt.readFileSync(n,"utf8"))}catch(r){return{ok:!1,message:"plugin.json \u89E3\u6790\u5931\u8D25\uFF1A"+r.message}}return s.name!==t.name?{ok:!1,message:"name \u4E0D\u4E00\u81F4\uFF1A\u7D22\u5F15 "+t.name+"\u3001\u5305\u5185 "+s.name}:s.version!==t.version?{ok:!1,message:"version \u4E0D\u4E00\u81F4\uFF1A\u7D22\u5F15 "+t.version+"\u3001\u5305\u5185 "+s.version}:Kt.sameTools(t.tools,s.tools)?Kt.sameTheme(t.theme,s.theme)?{ok:!0,manifest:s}:{ok:!1,message:"theme \u4E0E\u7D22\u5F15\u4E0D\u4E00\u81F4\uFF08label \u6216 tokens \u4E0D\u540C\u90FD\u7B97\uFF09"}:{ok:!1,message:"tools \u4E0E\u7D22\u5F15\u4E0D\u4E00\u81F4\uFF08\u63CF\u8FF0 / readOnly / \u53C2\u6570 schema \u4EFB\u4E00\u4E0D\u540C\u90FD\u7B97\uFF09"}}async function Kb(t,e){let n=e||{},s=t.type==="skill"?"skill":t.type==="plugin"?"plugin":"";if(!s)return{ok:!1,code:"bad-type",message:t.name+" \u7684 type \u4E0D\u53EF\u7528\uFF1A"+t.type};let r=t.review&&t.review.status||"pending";if(r==="revoked")return{ok:!1,code:"revoked",message:"\u8BE5"+ec(s)+"\u5DF2\u88AB\u64A4\u9500\uFF08revoked\uFF09\uFF0C\u5BBF\u4E3B\u5E94\u963B\u6B62\u5B89\u88C5"};if(r==="flagged")return{ok:!1,code:"flagged",message:"\u8BE5"+ec(s)+"\u88AB\u5BA1\u6838\u6807\u8BB0\u4E3A\u6709\u95EE\u9898\uFF08flagged\uFF09\uFF0C\u62D2\u7EDD\u5B89\u88C5"};let o=[];r==="pending"&&o.push("\u5BA1\u6838\u72B6\u6001 pending\uFF1A\u7B7E\u540D\u53EA\u80FD\u8BC1\u660E\u300C\u662F\u4F5C\u8005\u53D1\u7684\u300D\uFF0C\u5B89\u5168\u7ED3\u8BBA\u8FD8\u6CA1\u4EBA\u6838\u5BF9\u8FC7");let i;try{i=await Ub(t,n)}catch(a){return{ok:!1,code:"source",message:a.message}}try{let a=Wb(t,i.dir);if(!a.ok)return{ok:!1,code:"manifest",message:"\u6E05\u5355\u6821\u9A8C\u5931\u8D25\uFF1A"+a.message};let l=Kt.dirHash(i.dir);if(t.sourceSha256&&l!==t.sourceSha256)return{ok:!1,code:"hash",message:"sourceSha256 \u4E0D\u7B26\uFF1A\u7D22\u5F15 "+t.sourceSha256+"\u3001\u5B9E\u9645 "+l+"\uFF08\u53EF\u80FD\u662F\u4ED3\u5E93\u5185\u5BB9\u53D8\u4E86\u6CA1\u91CD\u7B97\u7D22\u5F15\uFF0C\u6216\u5305\u88AB\u66FF\u6362\uFF09"};t.sourceSha256||o.push("\u7D22\u5F15\u6CA1\u7ED9 sourceSha256\uFF0C\u672C\u6B21\u5B89\u88C5\u4E0D\u53EF\u590D\u73B0");let c=n.target==="project"||n.target==="global"?n.target:t.install&&t.install.target||"global",u={name:t.name,type:s,version:t.version,review:r,permissions:t.permissions||{},sourceSha256:l,tag:i.tag||"",target:c,warnings:o.slice()};if(n.dryRun)return Object.assign({ok:!0,code:"dry-run",dir:i.dir,tools:s==="skill"?[]:(t.tools||[]).map(function(p){return p.name})},u);if(s==="skill"){Yf(n.root);let p=Ql.installFromDir(i.dir,{replace:n.replace===!0,target:c,version:t.version,sourceSha256:l,tag:i.tag||"",repo:t.repo||""});return p.ok?Object.assign({ok:!0,code:"installed",dir:p.dir,replaced:p.replaced,tools:[]},u):{ok:!1,code:p.code||"install",message:p.message}}let d=Co();Yf(n.root);let f=await d.installFromDir(i.dir,{replace:n.replace===!0,target:c,trust:!1});return f.ok?Object.assign({ok:!0,code:"installed",dir:f.dir,replaced:f.replaced,tools:f.tools},u):{ok:!1,code:f.code||"install",message:f.message}}finally{i.cleanup()}}async function Hb(t,e){let n=e||{},s=String(t||"").trim();if(!s)return{ok:!1,code:"bad-arg",message:"\u7F3A\u5C11\u63D2\u4EF6\u540D"};let r=zi(n),o;try{o=JSON.parse(await Vi(r))}catch(p){return{ok:!1,code:"registry",message:"\u8BFB\u53D6\u7D22\u5F15\u5931\u8D25\uFF08"+r+"\uFF09\uFF1A"+p.message+`
|
|
410
410
|
\u6362\u4E00\u4EFD\u7D22\u5F15\uFF1A--registry <\u672C\u5730\u8DEF\u5F84|URL> \u6216\u73AF\u5883\u53D8\u91CF LUBAN_REGISTRY`}}let i=o.entries||[],a=i.find(function(p){return p&&p.name===s});if(!a)return{ok:!1,code:"not-found",message:"\u7D22\u5F15\u91CC\u6CA1\u6709 "+s,names:i.map(function(p){return p.name})};let l=a.type==="skill"?"skill":a.type==="plugin"?"plugin":"";if(!l)return{ok:!1,code:"bad-type",message:s+" \u7684 type \u4E0D\u53EF\u7528\uFF1A"+a.type};if(n.type&&n.type!==l){let p=n.type==="skill"?"\u6280\u80FD":"\u63D2\u4EF6",h=l==="skill"?"\u6280\u80FD":"\u63D2\u4EF6";return{ok:!1,code:"wrong-type",message:s+" \u662F"+h+"\uFF0C\u4E0D\u662F"+p+"\uFF08\u7528 luban "+(l==="skill"?"skill":"plugin")+" add "+s+"\uFF09"}}let c=await Ji(o,r),u=Kt.verifyEntry(a,c);if(!u.ok&&!n.allowUnsigned)return{ok:!1,code:"untrusted",message:u.reason.indexOf("\u672A\u7B7E\u540D")>=0?"\u8BE5\u6761\u76EE\u672A\u7B7E\u540D\uFF0C\u65E0\u6CD5\u786E\u8BA4\u662F\u4F5C\u8005\u53D1\u5E03\u7684\uFF08\u786E\u5B9E\u8981\u88C5\u53EF\u52A0 --allow-unsigned\uFF09":"\u7D22\u5F15\u6761\u76EE\u9A8C\u7B7E\u5931\u8D25\uFF1A"+u.reason};let d=a.review&&a.review.status||"pending";if(d==="revoked")return{ok:!1,code:"revoked",message:"\u8BE5"+ec(l)+"\u5DF2\u88AB\u64A4\u9500\uFF08revoked\uFF09\uFF0C\u5BBF\u4E3B\u5E94\u963B\u6B62\u5B89\u88C5"};if(d==="flagged")return{ok:!1,code:"flagged",message:"\u8BE5"+ec(l)+"\u88AB\u5BA1\u6838\u6807\u8BB0\u4E3A\u6709\u95EE\u9898\uFF08flagged\uFF09\uFF0C\u62D2\u7EDD\u5B89\u88C5"};let f=await Kb(a,n);return f.ok&&f.warnings&&!u.ok&&f.warnings.push("\u6761\u76EE\u672A\u7B7E\u540D\uFF08--allow-unsigned\uFF09"),f}function ec(t){return t==="skill"?"\u6280\u80FD":"\u63D2\u4EF6"}async function Gb(t,e){let n=e||{},s=n.root||process.cwd(),r=Co();Yf(s);let o=n.type==="skill"||n.type==="plugin"?n.type:"",i=r.inventory(),a=i.plugins.concat(i.pending).some(function(u){return u.name===t}),l=!!Ql.find(t);if(o==="skill"||!o&&!a&&l){if(!l)return{ok:!1,code:"not-found",message:"\u6CA1\u6709\u8FD9\u4E2A\u6280\u80FD\uFF1A"+t};let u=Ql.uninstall(t,{why:"cli-plugin-remove"});return Object.assign({type:"skill"},u)}if(!a)return{ok:!1,code:"not-found",message:"\u6CA1\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1A"+t};let c=await r.uninstall(t,{why:"cli-plugin-remove"});return Object.assign({type:"plugin"},c)}async function Zf(t){let e=t||{},n=zi(e),s=JSON.parse(await Vi(n)),r=await Ji(s,n),o=e.type==="skill"||e.type==="plugin"?e.type:"";return{source:n,updatedAt:s.updatedAt||"",entries:(s.entries||[]).filter(function(i){return!o||i.type===o}).map(function(i){let a=Kt.verifyEntry(i,r);return{name:i.name,displayName:i.displayName,version:i.version,type:i.type,description:i.description,review:i.review&&i.review.status||"pending",signed:a.ok,unsignedReason:a.ok?"":a.reason,permissions:i.permissions||{},repo:i.repo||""}})}}async function KE(t){let e=t||{},n=e.registry||zi(e),s;try{s=JSON.parse(await Vi(n,e.timeoutMs))}catch(i){return{ok:!1,source:n,error:String(i&&i.message||i),entries:[]}}let r=await Ji(s,n),o=(s.entries||[]).map(function(i){let a=Kt.verifyEntry(i,r);return{name:i.name,displayName:i.displayName||"",version:i.version||"",type:i.type==="skill"?"skill":"plugin",description:i.description||"",review:i.review&&i.review.status||"pending",reviewNotes:i.review&&i.review.notes||"",signed:a.ok,unsignedReason:a.ok?"":a.reason,permissions:i.permissions||{},tools:(i.tools||[]).map(function(l){return{name:l.name,readOnly:l.readOnly===!0}}),repo:i.repo||"",tags:i.tags||[],sourceSha256:i.sourceSha256||""}});return{ok:!0,source:n,updatedAt:s.updatedAt||"",entries:o,error:""}}async function HE(t){let e=t||{},n=e.registry||zi(e),s;try{s=JSON.parse(await Vi(n,e.timeoutMs))}catch(o){return{ok:!1,source:n,error:String(o&&o.message||o),registry:null}}let r=await Ji(s,n);return{ok:!0,source:n,registry:s,keys:r,error:""}}function Zl(t,e){try{return Rb().paint(t,e)}catch{return e}}function Xf(t){let e=Object.keys(t||{}).filter(function(n){return t[n]===!0});return e.length?e.map(function(n){return qE[n]||n}).join("\u3001"):"\u65E0\uFF08\u7EAF\u8BA1\u7B97\uFF09"}function GE(){let t=["luban plugin \u2014\u2014 \u7D22\u5F15\u5BA2\u6237\u7AEF\uFF08\u63D2\u4EF6\u4E0E\u6280\u80FD\uFF09","luban skill \u2014\u2014 \u540C\u4E0A\uFF0C\u4F46\u53EA\u5904\u7406\u6280\u80FD\uFF08\u7B49\u4EF7\u4E8E luban plugin --type skill \u2026\uFF09","","\u7528\u6CD5\uFF1A"," luban plugin list [--type plugin|skill] [--registry <\u8DEF\u5F84|URL>] [--json]"," luban plugin info <name> [--type plugin|skill] [--registry <\u8DEF\u5F84|URL>]"," luban plugin add <name> [--type plugin|skill] [--registry <\u8DEF\u5F84|URL>] [--target global|project]"," [--replace] [--allow-unsigned] [--dry-run] [--json]"," luban plugin remove <name> [--type plugin|skill] [--json]","","add \u7684\u6D41\u7A0B\uFF1A\u9A8C\u7B7E \u2192 \u67E5\u5BA1\u6838\u72B6\u6001 \u2192 \u6309 install \u62C9\u5305\uFF08git tag <name>-v<version> / tarball / local\uFF09"," \u2192 \u6821\u5BF9 sourceSha256 \u4E0E\u5305\u5185\u6E05\u5355\uFF08plugin.json / SKILL.md\uFF09\u2192 \u62F7\u8FDB\u63D2\u4EF6 / \u6280\u80FD\u76EE\u5F55\u3002","\u63D2\u4EF6\u88C5\u5B8C\u4E0D\u4F1A\u81EA\u52A8\u4FE1\u4EFB\uFF1ALuban \u91CC\u9996\u6B21\u52A0\u8F7D\u4F1A\u5217\u51FA\u5DE5\u5177\u6E05\u5355\u518D\u95EE\u4E00\u6B21\uFF08\u65E0\u5934\u573A\u666F\u4E00\u5F8B\u4E0D\u6267\u884C\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF09\u3002","\u6280\u80FD\u662F\u7EAF Markdown\uFF08\u65E0\u6267\u884C\u80FD\u529B\uFF09\uFF0C\u88C5\u8FDB ~/.luban/skills/<name> \u540E\u76EE\u5F55\u5185\u5373\u53EF\u89C1\uFF0C\u4E0D\u9700\u8981\u4FE1\u4EFB\u786E\u8BA4\u3002","","\u7D22\u5F15\u6765\u6E90\u4F18\u5148\u7EA7\uFF1A--registry > LUBAN_REGISTRY > \u4ED3\u5E93\u5185 registry/registry.json > GitHub main\u3002","--target \u9ED8\u8BA4\u53D6\u7D22\u5F15\u6761\u76EE\u7684 install.target\uFF08\u901A\u5E38\u662F global\uFF09\uFF1Bproject \u843D <repo>/.luban/\u3002"];process.stdout.write(t.join(`
|
|
411
411
|
`)+`
|
|
412
412
|
`)}function zE(t){let e={_:[]};for(let n=0;n<t.length;n++){let s=t[n],r=function(){return n++,n<t.length?t[n]:""};s==="--json"?e.json=!0:s==="--replace"?e.replace=!0:s==="--allow-unsigned"?e.allowUnsigned=!0:s==="--dry-run"?e.dryRun=!0:s==="--registry"?e.registry=r():s==="--target"?e.target=r():s==="--type"?e.type=r():s==="--root"?e.root=r():s==="--tag"?e.tag=r():s==="--help"||s==="-h"?e.help=!0:s.charAt(0)==="-"&&s.length>1?e.error="\u672A\u77E5\u9009\u9879 "+s:e._.push(s)}return e}function Ye(t){process.stdout.write(t+`
|
|
@@ -422,8 +422,8 @@ ${a}
|
|
|
422
422
|
`),1;if(r.code==="dry-run"?Ye("[dry-run] "+(r.type==="skill"?"\u6280\u80FD ":"")+r.name+" "+r.version+" \u6821\u9A8C\u901A\u8FC7\uFF0C\u672A\u843D\u76D8"):Ye("\u5DF2\u5B89\u88C5"+(r.type==="skill"?"\u6280\u80FD ":" ")+r.name+" "+r.version+" \u2192 "+r.dir+(r.replaced?"\uFF08\u8986\u76D6\u4E86\u65E7\u7248\u672C\uFF0C\u65E7\u7684\u5DF2\u8FDB\u56DE\u6536\u7AD9\uFF09":"")),r.type==="skill"){Ye(" sourceSha256\uFF1A"+r.sourceSha256+" \u5BA1\u6838\uFF1A"+r.review);for(let o of r.warnings)Ye(" ! "+o);return r.code==="dry-run"?Ye(" \u5C06\u4F1A\u88C5\u5230 "+(r.target==="project"?"<repo>/.luban/skills/":"~/.luban/skills/")+r.name):Ye(" \u6280\u80FD\u662F\u7EAF Markdown\uFF0C\u5DF2\u5728\u6280\u80FD\u76EE\u5F55\u5185\u53EF\u89C1\uFF08read_skill "+r.name+"\uFF09\uFF1B\u4E0D\u9700\u8981\u4FE1\u4EFB\u786E\u8BA4\u3002"),0}Ye(" \u5DE5\u5177\uFF1A"+(r.tools||[]).map(function(o){return"pl__"+r.name+"__"+o}).join("\u3001")),Ye(" \u6743\u9650\uFF1A"+Xf(r.permissions)),Ye(" \u5BA1\u6838\uFF1A"+r.review+" sourceSha256\uFF1A"+r.sourceSha256);for(let o of r.warnings)Ye(" ! "+o);return Ye(" \u6CE8\u610F\uFF1A\u8FD8\u6CA1\u6709\u5199\u4FE1\u4EFB\u8868\u3002Luban \u91CC\u6253\u5F00\u63D2\u4EF6\u5F00\u5173\u540E\uFF0C\u9996\u6B21\u52A0\u8F7D\u4F1A\u5217\u51FA\u5DE5\u5177\u6E05\u5355\u8BA9\u4F60\u786E\u8BA4\u3002"),0}if(n==="remove"){if(!s)return process.stderr.write(`luban plugin: \u7528\u6CD5 luban plugin remove <name>
|
|
423
423
|
`),2;let r=await Gb(s,e);return e.json?(Ye(JSON.stringify(r,null,2)),r.ok?0:1):r.ok?(Ye("\u5DF2\u5378\u8F7D"+(r.type==="skill"?"\u6280\u80FD ":" ")+r.name+"\uFF08\u79FB\u8FDB\u56DE\u6536\u7AD9 "+r.trash+"\uFF0C\u53EF\u8FD8\u539F\uFF09"),0):(process.stderr.write("luban plugin: "+r.message+`
|
|
424
424
|
`),1)}return process.stderr.write("luban plugin: \u672A\u77E5\u5B50\u547D\u4EE4 "+n+`\uFF08--help \u770B\u7528\u6CD5\uFF09
|
|
425
|
-
`),2}zb.exports={DEFAULT_REGISTRY_URL:qb,registrySource:zi,bundledRegistryPath:BE,loadKeys:Ji,readRegistry:KE,readRegistryRaw:HE,fetchSource:Ub,checkManifest:Wb,install:Hb,installEntry:Kb,remove:Gb,list:Zf,dirHash:Kt.dirHash,runCli:VE}});var ck=ne((fD,lk)=>{"use strict";var
|
|
426
|
-
`,"utf8"),
|
|
425
|
+
`),2}zb.exports={DEFAULT_REGISTRY_URL:qb,registrySource:zi,bundledRegistryPath:BE,loadKeys:Ji,readRegistry:KE,readRegistryRaw:HE,fetchSource:Ub,checkManifest:Wb,install:Hb,installEntry:Kb,remove:Gb,list:Zf,dirHash:Kt.dirHash,runCli:VE}});var ck=ne((fD,lk)=>{"use strict";var nr=require("fs"),JE=require("os"),Ur=require("path"),XE=Pl(),Xb=1,tp=process.env.LUBAN_STATUS_HOME?Ur.resolve(process.env.LUBAN_STATUS_HOME):Ur.join(JE.homedir(),".luban"),Yb=Ur.join(tp,"status.json"),Po=Ur.join(tp,"status"),Zb=["offline","idle","thinking","typing","tool","waiting","done","error"],np={thinking:1,typing:1,tool:1,waiting:1},nc={offline:"idle",idle:"idle",thinking:"think",typing:"work",tool:"work",waiting:"explore",done:"done",error:"error"},Qb=5*60*1e3,YE=120,ZE=100,QE=10*1e3,eP=6*60*60*1e3,Eo=120,Qf=80,ek=200,qr=null,Gn=null,zn=null,Br=null,Vn=null,tc=null,ep=!1,jo=new Set;function Nn(){return Date.now()}function Tt(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function tk(){let t=Nn();return{v:Xb,pid:process.pid,source:"",state:"idle",mood:nc.idle,text:"",task:"",mode:"",model:"",sessionId:"",workspace:"",tool:null,round:0,tools:0,errors:0,error:null,since:t,changedAt:t,ts:t}}function Kr(){return qr||(qr=tk()),qr}function Wr(){return JSON.parse(JSON.stringify(Kr()))}function sp(t,e){let n=nc[String(t||"")]||nc.idle;return(t==="idle"||t==="offline"||!t)&&Number(e)>=Qb?"tired":XE.FACES[n]?n:"idle"}function pn(t){let e=Kr(),n=t&&typeof t=="object"?t:{},s=e.state,r=!1;if(n.state!==void 0){let i=String(n.state||"");if(Zb.indexOf(i)<0)return Wr();i!==s&&(e.state=i,r=!0)}if(n.source!==void 0&&(e.source=Tt(n.source,24)),n.text!==void 0&&(e.text=Tt(n.text,Eo)),n.task!==void 0&&(e.task=Tt(n.task,Qf)),n.mode!==void 0&&(e.mode=Tt(n.mode,16)),n.model!==void 0&&(e.model=Tt(n.model,80)),n.sessionId!==void 0&&(e.sessionId=Tt(n.sessionId,64)),n.workspace!==void 0&&(e.workspace=Tt(n.workspace,240)),n.tool!==void 0){let i=n.tool;e.tool=i&&typeof i=="object"?{name:Tt(i.name,40),label:Tt(i.label,Qf),ok:i.ok===void 0?void 0:i.ok!==!1,at:Number(i.at)||Nn()}:null,e.tool&&e.tool.name&&(e.text=Tt(e.tool.name+(e.tool.label?" "+e.tool.label:""),Eo))}if(n.round!==void 0&&(e.round=Math.max(0,Number(n.round)||0)),n.tools!==void 0&&(e.tools=Math.max(0,Number(n.tools)||0)),n.errors!==void 0&&(e.errors=Math.max(0,Number(n.errors)||0)),n.error!==void 0){let i=n.error;e.error=i&&typeof i=="object"?{message:Tt(i.message,ek),at:Number(i.at)||Nn(),count:Math.max(0,Number(i.count)||0)}:null}let o=Nn();return r&&(e.since=o,e.changedAt=o),e.mood=sp(e.state,o-e.since),e.ts=o,(r||n.write!==!1)&&tP(r),rP(),np[e.state]?sP():rp(),Wr()}function tP(t){if(t){Xi();return}Gn||(Gn=setTimeout(function(){Gn=null,Xi()},YE),Gn.unref&&Gn.unref())}function Xi(){Gn&&(clearTimeout(Gn),Gn=null);let t=Wr();try{nr.mkdirSync(tp,{recursive:!0}),Jb(Yb,t),nr.mkdirSync(Po,{recursive:!0}),Jb(Ur.join(Po,process.pid+".json"),t),ep||(ep=!0,nP())}catch{}}function Jb(t,e){let n=JSON.stringify(e),s=t+"."+process.pid+".tmp";nr.writeFileSync(s,n+`
|
|
426
|
+
`,"utf8"),nr.renameSync(s,t)}function nP(){let t=nr.readdirSync(Po),e=Nn();for(let n=0;n<t.length;n++){let s=t[n];if(!/^\d+\.json$/.test(s)||s===process.pid+".json")continue;let r=Ur.join(Po,s);try{e-nr.statSync(r).mtimeMs>eP&&nr.unlinkSync(r)}catch{}}}function sP(){Br||(Br=setInterval(function(){let t=Kr();if(!np[t.state]){rp();return}t.mood=sp(t.state,Nn()-t.since),t.ts=Nn(),Xi(),sk()},QE),Br.unref&&Br.unref())}function rp(){Br&&(clearInterval(Br),Br=null)}function nk(t){return typeof t!="function"?function(){}:(jo.add(t),function(){jo.delete(t)})}function rP(){zn||!jo.size||(zn=setTimeout(function(){zn=null,sk()},ZE),zn.unref&&zn.unref())}function sk(){if(zn&&(clearTimeout(zn),zn=null),!jo.size)return;let t=Wr();jo.forEach(function(e){try{e(t)}catch{}})}function oP(t,e){return pn(Object.assign({state:"thinking",text:t||""},e||{}))}function iP(t){return pn(Object.assign({state:"thinking",text:"",tool:null,round:0,tools:0,errors:0,error:null},t||{}))}function aP(t){return pn(Object.assign({state:"typing"},t||{}))}function lP(t,e){let n=Tt(t,Qf),s=n.indexOf(" "),r={state:"tool",tool:{name:s>0?n.slice(0,s):n,label:s>0?n.slice(s+1):"",at:Nn()}};return pn(Object.assign(r,e||{}))}function rk(t,e){let n=t&&typeof t=="object"?t:{},s=Kr(),r=n.ok!==!1,o={tools:(Number(s.tools)||0)+1,tool:{name:n.name||"",label:n.path||"",ok:r,at:Nn()},state:r?"thinking":"error"};return r||(o.errors=(Number(s.errors)||0)+1,o.error={message:(n.name?n.name+" \u5931\u8D25":"\u5DE5\u5177\u5931\u8D25")+(n.path?"\uFF1A"+n.path:""),at:Nn(),count:o.errors}),pn(Object.assign(o,e||{}))}function cP(t,e){return pn(Object.assign({round:Math.max(0,Number(t)||0)},e||{}))}function uP(t,e){return pn(Object.assign({state:"waiting",text:t||""},e||{}))}function dP(t,e){let n=String(t||""),s=n==="final"?"\u5B8C\u6210":"\u6536\u5DE5\uFF1A"+(n||"unknown");return pn(Object.assign({state:"done",text:s,tool:null},e||{}))}function ok(t,e){let n=Kr();return pn(Object.assign({state:"error",text:Tt(t,Eo)||"\u51FA\u9519",errors:(Number(n.errors)||0)+1,error:{message:Tt(t,ek)||"\u51FA\u9519",at:Nn(),count:(Number(n.errors)||0)+1}},e||{}))}function fP(t){return pn({state:"offline",text:t||"\u5DF2\u9000\u51FA",tool:null})}function ik(t){if(!t||!t.type)return null;switch(String(t.type)){case"token":return{state:"typing"};case"reasoning":case"think_split":return{state:"thinking"};case"usage_live":return{state:"thinking",text:""};case"ask_question":return{state:"waiting",text:Tt(t.title,Eo)||"\u7B49\u4F60\u9009\u62E9"};case"tool":return t.phase==="start"?{state:"thinking"}:{state:t.ok===!1?"error":"thinking",toolMsg:t};case"done":return{state:"done",text:Tt(t.summary,Eo)||"\u5B8C\u6210",tool:null};case"error":return{state:"error",text:Tt(t.message,Eo)||"\u51FA\u9519"};default:return null}}function pP(t,e){let n=ik(t);return n?t.type==="tool"&&t.phase!=="start"?rk(t,e):n.state==="error"?ok(t.message,e):pn(Object.assign({},n,e||{})):null}function ak(t){let e=t||{},n=Number(e.port||0);if(!(n>0&&n<65536))return null;if(Vn)return Vn;let s=require("http"),r=new Set;function o(l){return Object.assign({"cache-control":"no-store","access-control-allow-origin":"*"},l||{})}let i=s.createServer(function(l,c){let u=String(l.url||"/").split("?")[0];if(l.method==="OPTIONS"){c.writeHead(204,o({"access-control-allow-methods":"GET, OPTIONS"})),c.end();return}if(l.method!=="GET"){c.writeHead(405,o({"content-type":"text/plain; charset=utf-8"})),c.end("\u53EA\u652F\u6301 GET");return}if(u==="/status"){let d=JSON.stringify(Wr());c.writeHead(200,o({"content-type":"application/json; charset=utf-8"})),c.end(d);return}if(u==="/events"){c.writeHead(200,o({"content-type":"text/event-stream; charset=utf-8",connection:"keep-alive","x-accel-buffering":"no"})),c.write(`retry: 1000
|
|
427
427
|
|
|
428
428
|
`),c.write(`event: status
|
|
429
429
|
data: `+JSON.stringify(Wr())+`
|
|
@@ -431,28 +431,28 @@ data: `+JSON.stringify(Wr())+`
|
|
|
431
431
|
`),r.add(c),l.on("close",function(){r.delete(c)});return}c.writeHead(404,o({"content-type":"text/plain; charset=utf-8"})),c.end("\u8BD5\u8BD5 GET /status \u6216 GET /events")});i.on("error",function(l){if(typeof e.onError=="function")try{e.onError(l)}catch{}a()});try{i.listen(n,"127.0.0.1")}catch(l){if(typeof e.onError=="function")try{e.onError(l)}catch{}return null}i.unref&&i.unref(),tc=nk(function(l){if(!r.size)return;let c=`event: status
|
|
432
432
|
data: `+JSON.stringify(l)+`
|
|
433
433
|
|
|
434
|
-
`;r.forEach(function(u){try{u.write(c)}catch{r.delete(u)}})});function a(){tc&&(tc(),tc=null),r.forEach(function(l){try{l.end()}catch{}}),r.clear();try{i.close()}catch{}Vn=null}return Vn={port:n,close:a,clients:r},Vn}function hP(){let t=Number(process.env.LUBAN_STATUS_PORT||0);return t>0&&t<65536?ak({port:t}):null}function mP(t){let e=t||{};Gn&&(clearTimeout(Gn),Gn=null),zn&&(clearTimeout(zn),zn=null),rp(),Vn&&(Vn.close(),Vn=null),jo.clear(),ep=!1;let n=Nn();qr=Object.assign(tk(),{source:String(e.source||"")}),qr.since=n,qr.changedAt=n,qr.ts=n}function gP(){process.once("exit",function(){try{let t=Kr();np[t.state]&&pn({state:"offline",text:"\u5DF2\u9000\u51FA",tool:null}),Xi();try{
|
|
434
|
+
`;r.forEach(function(u){try{u.write(c)}catch{r.delete(u)}})});function a(){tc&&(tc(),tc=null),r.forEach(function(l){try{l.end()}catch{}}),r.clear();try{i.close()}catch{}Vn=null}return Vn={port:n,close:a,clients:r},Vn}function hP(){let t=Number(process.env.LUBAN_STATUS_PORT||0);return t>0&&t<65536?ak({port:t}):null}function mP(t){let e=t||{};Gn&&(clearTimeout(Gn),Gn=null),zn&&(clearTimeout(zn),zn=null),rp(),Vn&&(Vn.close(),Vn=null),jo.clear(),ep=!1;let n=Nn();qr=Object.assign(tk(),{source:String(e.source||"")}),qr.since=n,qr.changedAt=n,qr.ts=n}function gP(){process.once("exit",function(){try{let t=Kr();np[t.state]&&pn({state:"offline",text:"\u5DF2\u9000\u51FA",tool:null}),Xi();try{nr.unlinkSync(Ur.join(Po,process.pid+".json"))}catch{}}catch{}})}function yP(){return Yb}function wP(){return Po}function bP(){return Vn?{port:Vn.port,clients:Vn.clients.size}:null}Kr();gP();lk.exports={VERSION:Xb,STATES:Zb,SLEEP_MS:Qb,MOOD_OF:nc,get:Wr,update:pn,moodFor:sp,startTurn:iP,thinking:oP,typing:aP,progress:lP,round:cP,tool:rk,waiting:uP,done:dP,fail:ok,offline:fP,fromMessage:ik,applyMessage:pP,subscribe:nk,serve:ak,autoServe:hP,reset:mP,writeNow:Xi,file:yP,dir:wP,sse:bP}});var mk=ne((pD,hk)=>{"use strict";var op=Pl(),uk=26,kP="$(sync~spin)",sc={offline:"\u79BB\u7EBF",idle:"\u7A7A\u95F2",thinking:"\u601D\u8003\u4E2D",typing:"\u8F93\u51FA\u4E2D",tool:"\u6267\u884C\u5DE5\u5177",waiting:"\u7B49\u5F85\u786E\u8BA4",done:"\u5B8C\u6210",error:"\u51FA\u9519"},xP={thinking:1,typing:1,tool:1,waiting:1},vP={tool:1,typing:1,waiting:1,thinking:1};function ip(t,e){let n=String(t||"idle"),s="mascot.state."+n;if(typeof e=="function"){let r=e(s);if(r&&r!==s)return r}return sc[n]||sc.idle}function Io(t,e){let n=String(t??"").replace(/\s+/g," ").trim();if(!n)return"";if(op.displayWidth(n)<=e)return n;let s="";for(let r of n){if(op.displayWidth(s+r)>e-1)break;s+=r}return s+"\u2026"}function dk(t){let e=Math.max(0,Number(t)||0),n=Math.floor(e/1e3);if(n<60)return n+" \u79D2";let s=Math.floor(n/60);return s<60?s+" \u5206 "+n%60+" \u79D2":Math.floor(s/60)+" \u5C0F\u65F6 "+s%60+" \u5206"}function fk(t,e){let n=e||{},s=t&&typeof t=="object"?t:{},r=sc[s.state]?s.state:"idle",o=typeof n.now=="function"?n.now():Date.now(),i=s.mood||"idle",a=op.face(i),l=!!xP[r],c=vP[r]?String(s.text||"").trim():"",u=Io(c||ip(r,n.tr),uk),d=(l?kP+" ":"")+a+" "+u,f=[];f.push("**\u73ED\u73ED \xB7 "+ip(r,n.tr)+"**"),f.push(""),s.text&&(f.push("`"+Io(s.text,80)+"`"),f.push("")),s.task&&f.push("- \u4EFB\u52A1\uFF1A"+Io(s.task,80)),s.model&&f.push("- \u6A21\u578B\uFF1A"+s.model),s.mode&&f.push("- \u6A21\u5F0F\uFF1A"+s.mode),Number(s.round)>0&&f.push("- \u7B2C "+Math.floor(Number(s.round))+" \u8F6E"),r!=="idle"&&r!=="offline"&&f.push("- \u672C\u8F6E\uFF1A"+(Number(s.tools)||0)+" \u6B21\u5DE5\u5177\u8C03\u7528 \xB7 "+(Number(s.errors)||0)+" \u6B21\u9519\u8BEF"),s.workspace&&f.push("- \u5DE5\u4F5C\u533A\uFF1A"+Io(s.workspace,100)),s.error&&s.error.message&&f.push("- \u4E0A\u6B21\u9519\u8BEF\uFF1A"+Io(s.error.message,160)),s.since&&f.push("",(l?"\u5DF2\u6301\u7EED ":"\u5DF2\u7A7A\u95F2 ")+dk(o-Number(s.since))),f.push("","\u70B9\u51FB\u6253\u5F00 Luban \u9762\u677F");let p="";return r==="error"?p="statusBarItem.errorBackground":r==="waiting"&&(p="statusBarItem.warningBackground"),{text:d,tooltip:f.join(`
|
|
435
435
|
`),color:p,state:r,busy:l,face:a}}function pk(t){try{return t.workspace.getConfiguration("luban").get("statusBar.enabled")!==!1}catch{return!0}}function SP(t){let e=t||{},n=e.vscode,s=e.status;if(!n||!n.window||!s||typeof s.subscribe!="function")return null;let r=typeof e.rec=="function"?e.rec:function(){},o=null,i=null,a=null,l=!1;function c(){if(l||!o)return;let f;try{f=fk(s.get(),{tr:e.tr})}catch{return}o.text=f.text,o.tooltip=f.tooltip;try{o.color=f.color?new n.ThemeColor(f.color):void 0}catch{o.color=void 0}try{o.accessibilityInformation={label:f.text.replace(/\$\([^)]*\)/g,"").trim(),role:"button"}}catch{}}function u(){if(l)return;if(!pk(n)){o&&o.hide();return}o||(o=n.window.createStatusBarItem(n.StatusBarAlignment.Right,100),o.name="Luban",o.command="luban.openPanel",typeof e.open=="function"&&(o.command="luban.openPanel"),i=s.subscribe(c),a=setInterval(c,60*1e3),a.unref&&a.unref()),c(),o.show()}u();let d=null;try{d=n.workspace.onDidChangeConfiguration(function(f){f&&f.affectsConfiguration&&!f.affectsConfiguration("luban.statusBar")||u()})}catch{}return r("statusbar_mounted",{}),{dispose:function(){if(l=!0,a&&(clearInterval(a),a=null),i){try{i()}catch{}i=null}if(d){try{d.dispose()}catch{}d=null}if(o){try{o.dispose()}catch{}o=null}}}}hk.exports={LABELS:sc,LABEL_MAX:uk,labelOf:ip,clipDisplay:Io,elapsed:dk,render:fk,enabled:pk,mount:SP}});var Mk=ne((hD,Tk)=>{"use strict";function ap(t){let e=String(t??"");return e?Math.max(1,Math.ceil(e.length/3)):0}function lp(t){return!t||!t.provider||!t.model?"":String(t.provider.id)+"::"+String(t.model.id)}function gk(t,e){let n=Number(t);return isFinite(n)&&n>0?Math.floor(n):e}function yk(t,e){let n=e||{},s=t.provider||{},r=t.model||{},o=gk(r.maxInputTokens,65536),i=Math.min(gk(r.maxOutputTokens,8192),o),a=String(s.name||s.id)+" / "+String(r.id);return{id:lp(t),name:String(r.name||r.id)+" \xB7 Luban",family:String(r.id),version:String(n.version||"1.0.0"),maxInputTokens:o,maxOutputTokens:i,detail:a,tooltip:"Luban \xB7 "+a+(s.baseUrl?`
|
|
436
436
|
`+String(s.baseUrl):""),capabilities:{imageInput:r.vision===!0,toolCalling:r.toolCalling!==!1}}}function wk(t,e){let n=[];for(let s of t||[])!s||!s.provider||!s.model||n.push(yk(s,e));return n}function cp(t,e){if(!t)return"";let n=e||{};return typeof n.LanguageModelTextPart=="function"&&t instanceof n.LanguageModelTextPart?"text":typeof n.LanguageModelToolCallPart=="function"&&t instanceof n.LanguageModelToolCallPart?"toolCall":typeof n.LanguageModelToolResultPart=="function"&&t instanceof n.LanguageModelToolResultPart?"toolResult":typeof t=="string"||typeof t.value=="string"&&t.callId==null?"text":t.callId!=null&&typeof t.name=="string"&&"input"in t?"toolCall":t.callId!=null&&Array.isArray(t.content)?"toolResult":""}function bk(t,e){let n=e&&e.LanguageModelChatMessageRole||{};return n.Assistant!=null&&t===n.Assistant?!0:n.User!=null&&t===n.User?!1:typeof t=="string"?t.toLowerCase()==="assistant":Number(t)===2}function up(t){let e=t&&Array.isArray(t.content)?t.content:[],n="";for(let s of e)if(s!=null){if(typeof s=="string"){n+=s;continue}if(typeof s.value=="string"){n+=s.value;continue}try{n+=JSON.stringify(s)}catch{n+=String(s)}}return n}function kk(t,e){let n=[];for(let s of t||[]){if(!s)continue;let r=bk(s.role,e),o=Array.isArray(s.content)?s.content:[],i="",a=[],l=[];for(let c of o){let u=cp(c,e);u==="text"?i+=typeof c=="string"?c:String(c.value==null?"":c.value):u==="toolCall"?a.push({id:String(c.callId),type:"function",function:{name:String(c.name),arguments:typeof c.input=="string"?c.input:JSON.stringify(c.input==null?{}:c.input)}}):u==="toolResult"&&l.push({id:String(c.callId),text:up(c)})}if(r){let c={role:"assistant",content:i};a.length&&(c.tool_calls=a,i||(c.content="")),(c.content||c.tool_calls&&c.tool_calls.length)&&n.push(c);continue}for(let c of l)n.push({role:"tool",tool_call_id:c.id,content:c.text});i&&n.push({role:"user",content:i})}return n}function xk(t){let e=[];for(let n of t||[])!n||!n.name||e.push({type:"function",function:{name:String(n.name),description:String(n.description||""),parameters:n.inputSchema&&typeof n.inputSchema=="object"?n.inputSchema:{type:"object",properties:{}}}});return e}function vk(t,e){if(!t)return 0;let n=0,s=Array.isArray(t.content)?t.content:[];for(let r of s){let o=cp(r,e);o==="text"?n+=String(r.value==null?"":r.value).length:o==="toolCall"?n+=String(r.name||"").length+String(r.input==null?"":JSON.stringify(r.input)).length:o==="toolResult"&&(n+=up(r,e).length)}return n}function Sk(t){if(t==null||t==="")return{};if(typeof t=="object")return t;try{let e=JSON.parse(String(t));return e&&typeof e=="object"?e:{value:e}}catch{return{_raw:String(t)}}}function _k(t){let e=t||{},n=e.vscode,s=e.streamChat,r=e.allModels||function(){return[]},o=typeof e.rec=="function"?e.rec:function(){},i=String(e.version||"1.0.0");function a(l){let c=String(l&&l.id||"");return(r()||[]).find(function(d){return lp(d)===c})||null}return{provideLanguageModelChatInformation:async function(l,c){let u=wk(r()||[],{version:i});return o("lm_models_listed",{silent:!!(l&&l.silent),models:u.length}),u},provideLanguageModelChatResponse:async function(l,c,u,d,f){let p=a(l);if(!p)throw new Error("Luban: \u6A21\u578B "+String(l&&l.id)+" \u5DF2\u4E0D\u5728 providers.json \u91CC\uFF08\u88AB\u5220\u6389\u6216\u6539\u4E86 id\uFF09\uFF0C\u8BF7\u5728\u6A21\u578B\u9009\u62E9\u5668\u91CC\u91CD\u65B0\u9009\u4E00\u4E2A");let h=kk(c,n),m=xk(u&&u.tools),y=function(v){try{d.report(v)}catch(b){o("lm_report_failed",{message:String(b&&b.message||b).slice(0,160)})}},w=Number(u&&u.modelOptions&&u.modelOptions.max_tokens)||0;o("lm_request",{model:String(l&&l.id),messages:h.length,tools:m.length,chars:h.reduce(function(v,b){return v+String(b.content||"").length+(b.tool_calls?JSON.stringify(b.tool_calls).length:0)},0)});let T=await s(h,p.key,{tools:m.length?m:void 0,signal:f,snapshot:!1,maxTokens:w>0?w:void 0,onToken:function(v){v&&y(new n.LanguageModelTextPart(String(v)))}}),g=T&&T.toolCalls||[];for(let v of g){let b=v&&v.function||{},S=String(v&&v.id?v.id:"luban-call-"+Date.now());y(new n.LanguageModelToolCallPart(S,String(b.name||""),Sk(b.arguments)))}o("lm_response",{model:String(l&&l.id),chars:String(T&&T.content||"").length,toolCalls:g.length,finishReason:String(T&&T.finishReason||"")})},provideTokenCount:async function(l,c){return ap(typeof c=="string"?c:vk(c,n))}}}function _P(t){let e=t||{},n=e.vscode,s=e.context,r=typeof e.rec=="function"?e.rec:function(){},o=String(e.vendor||"luban"),i=n&&n.lm,a=i&&(i.registerLanguageModelChatProvider||i.registerChatModelProvider);if(typeof a!="function")return r("lm_provider_skipped",{reason:"api_missing"}),null;try{let l=_k(Object.assign({},e,{vscode:n})),c=a.call(i,o,l);s&&s.subscriptions&&c&&s.subscriptions.push(c);let u=(typeof e.allModels=="function"?e.allModels():[])||[];return r("lm_provider_registered",{vendor:o,models:u.length,api:i.registerLanguageModelChatProvider?"registerLanguageModelChatProvider":"registerChatModelProvider"}),l}catch(l){return r("lm_provider_failed",{vendor:o,message:String(l&&l.message||l).slice(0,200)}),null}}Tk.exports={estimateTokens:ap,modelIdOf:lp,modelInfoOf:yk,modelInfos:wk,toOpenAiMessages:kk,toOpenAiTools:xk,charsOfMessage:vk,parseToolInput:Sk,createProvider:_k,register:_P,partKind:cp,isAssistantRole:bk,toolResultText:up,CHARS_PER_TOKEN:3,DEFAULT_MAX_IN:65536,DEFAULT_MAX_OUT:8192}});var bp=ne((mD,$k)=>{var Hr=require("fs"),Ok=require("os"),fp=require("path"),mp=process.env.LUBAN_WEBDAV_CONFIG?fp.resolve(process.env.LUBAN_WEBDAV_CONFIG):fp.join(Ok.homedir(),".luban","webdav.json"),No="luban",gp=["sessions","attachments","plans","config","mcp"],Ek=6e4,Pk=/^[A-Za-z0-9._-]+$/,yp=6;function Ck(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function TP(){let t=Object.create(null);for(let e of gp)t[e]=!0;return t}function jk(){return{enabled:!1,url:"",username:"",remoteDir:No,perMachine:!1,includes:TP(),lastBackupAt:"",lastRestoreAt:""}}function Ak(t){let e=String(t??"").trim();if(!e)return"";let n=Date.parse(e);return isNaN(n)?"":new Date(n).toISOString()}function Ik(t){let e=String(t??"").trim().replace(/^\/+/,"").replace(/\/+$/,"");if(!e)return{ok:!0,value:No};let n=e.split("/");if(n.length>yp)return{ok:!1,value:No};for(let s of n)if(!s||s==="."||s===".."||!Pk.test(s))return{ok:!1,value:No};return{ok:!0,value:n.join("/")}}function oc(t){let e=Ck(t)?t:{},n=[],s=jk(),r=String(e.url==null?"":e.url).trim().replace(/\/+$/,"");r&&(/^https?:\/\/[^\s/?#]+/i.test(r)?s.url=r:n.push("webdav.errUrl")),s.enabled=e.enabled===!0,s.enabled&&!s.url&&n.push("webdav.errNeedUrl"),s.enabled&&n.length&&(s.enabled=!1),s.username=String(e.username==null?"":e.username).trim();let o=Ik(e.remoteDir);o.ok||n.push("webdav.errRemoteDir"),s.remoteDir=o.value,s.perMachine=e.perMachine===!0,s.perMachine&&rc(s.remoteDir).length>yp-1&&n.push("webdav.errRemoteDir");let i=Ck(e.includes)?e.includes:{};for(let a of gp)if(i[a]!==void 0){if(typeof i[a]!="boolean"){n.push("webdav.errInclude");continue}s.includes[a]=i[a]}return s.lastBackupAt=Ak(e.lastBackupAt),s.lastRestoreAt=Ak(e.lastRestoreAt),{config:s,errors:n}}function MP(t){let e=t&&t.path?String(t.path):mp,n=null;try{n=JSON.parse(Hr.readFileSync(e,"utf8"))}catch{n=null}return oc(n||{}).config}function CP(t,e){let n=e&&e.path?String(e.path):mp,s=oc(t);if(s.errors.length)return{ok:!1,errors:s.errors,config:s.config};Hr.mkdirSync(fp.dirname(n),{recursive:!0,mode:448});let r=n+".tmp";if(Hr.writeFileSync(r,JSON.stringify(s.config,null,2)+`
|
|
437
|
-
`,{mode:384}),Hr.existsSync(n))try{Hr.copyFileSync(n,n+".bak")}catch{}Hr.renameSync(r,n);try{Hr.chmodSync(n,384)}catch{}return{ok:!0,config:s.config,path:n}}function
|
|
438
|
-
`,redacted:n}}function ic(t){try{return
|
|
437
|
+
`,{mode:384}),Hr.existsSync(n))try{Hr.copyFileSync(n,n+".bak")}catch{}Hr.renameSync(r,n);try{Hr.chmodSync(n,384)}catch{}return{ok:!0,config:s.config,path:n}}function rr(t){let e=oc(t),n=Object.assign({},e.config),s=t&&(t.password==null?"":t.password);return n.password=s==null?"":String(s),n.machine=t&&t.machine!=null?String(t.machine):"",n}function rc(t){return String(t??"").split("/").filter(function(e){return!!e})}function Nk(t){let e=String(t??"").trim(),n=e.replace(/[^A-Za-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"");return n.length>64&&(n=n.slice(0,64).replace(/-+$/g,"")),n||(n=require("crypto").createHash("sha1").update(e||"unknown").digest("hex").slice(0,8)),n}function AP(t){let e=String(t??"");return!e||e.length>64||e==="."||e===".."?!1:Pk.test(e)}function Fk(t){let e=String(t&&t.remoteDir||No);return!t||t.perMachine!==!0?e:e+"/"+Nk(t.machine||Ok.hostname())}function wp(t,e,n){let s=String(t.url==null?"":t.url).replace(/\/+$/,"");if(n)return s+"/";let r=rc(Fk(t)).concat(rc(e));return s+"/"+r.map(encodeURIComponent).join("/")}function Lk(t,e){return"Basic "+Buffer.from(String(t||"")+":"+String(e||""),"utf8").toString("base64")}async function sr(t,e){let n=e||{},s=rr(t);if(!s.url){let c=new Error("webdav.errNeedUrl");throw c.code="nourl",c}let r=Object.assign({},n.headers||{});(s.username||s.password)&&(r.Authorization=Lk(s.username,s.password));let o=Number(n.timeoutMs)>0?Number(n.timeoutMs):Ek,i={method:String(n.method||"GET").toUpperCase(),headers:r,signal:AbortSignal.timeout(o)};n.body!==void 0&&n.body!==null&&(i.body=n.body);let a=wp(s,n.path,n.root===!0),l;try{l=await fetch(a,i)}catch(c){let u=c&&(c.name==="TimeoutError"||c.name==="AbortError"),d=new Error(u?"webdav.errTimeout":"webdav.errNetwork");throw d.code=u?"timeout":"network",d.detail=String(c&&c.message||c),d}return{status:l.status,ok:l.ok,res:l,url:a}}async function OP(t){try{return await t.res.text()}catch{return""}}function Fo(t){return t===401||t===403?"webdav.errAuth":t===404?"webdav.errRemotePath":"webdav.errHttp"}async function EP(t){let e=rr(t);if(!e.url)return{ok:!1,error:"webdav.errNeedUrl"};let n=Date.now(),s;try{s=await sr(e,{method:"PROPFIND",path:"",headers:{Depth:"0"},body:pp})}catch(r){return{ok:!1,error:r.message||"webdav.errNetwork",detail:r.detail||"",ms:Date.now()-n}}if(s.ok||s.status===207)return{ok:!0,status:s.status,ms:Date.now()-n,root:"remoteDir",needsCreate:!1};if(s.status===404){let r=null;try{r=await sr(e,{method:"PROPFIND",path:"",root:!0,headers:{Depth:"0"},body:pp})}catch{r=null}if(r&&(r.ok||r.status===207))return{ok:!0,status:r.status,ms:Date.now()-n,root:"server",needsCreate:!0};if(r&&(r.status===401||r.status===403))return{ok:!1,status:r.status,error:"webdav.errAuth",ms:Date.now()-n}}return{ok:!1,status:s.status,error:Fo(s.status),ms:Date.now()-n}}var pp='<?xml version="1.0" encoding="utf-8"?><d:propfind xmlns:d="DAV:"><d:prop><d:displayname/><d:resourcetype/><d:getcontentlength/><d:getlastmodified/></d:prop></d:propfind>';async function PP(t,e){let n=rr(t),s=rc(e),r=s.length?s.map(function(a,l){return s.slice(0,l+1).join("/")}):[""],o=0,i=async function(a){let l=await sr(n,{method:"MKCOL",path:a});if(l.status===201||l.status===200||l.status===204)return"created";if(l.status===405||l.status===301)return"exists";if(l.status===409)return"noparent";let c=new Error(Fo(l.status));throw c.code="http",c.status=l.status,c};for(let a of r){let l=await i(a);if(l==="noparent"&&a!==""&&(await i(""),l=await i(a)),l==="created"){o++;continue}if(l==="exists")continue;let c=new Error("webdav.errHttp");throw c.code="http",c.status=409,c}return{created:o,levels:r.length}}async function jP(t,e,n,s){let r=rr(t),o=s||{},i=Buffer.isBuffer(n)?n:Buffer.from(n??""),a={"Content-Type":o.contentType||"application/octet-stream","Content-Length":String(i.length)},l=await sr(r,{method:"PUT",path:e,headers:a,body:i,timeoutMs:o.timeoutMs});if(l.status===200||l.status===201||l.status===204)return{ok:!0,status:l.status,bytes:i.length};let c=new Error(Fo(l.status));throw c.code="http",c.status=l.status,c}async function IP(t,e,n){let s=rr(t),o=await sr(s,{method:"GET",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return null;if(!o.ok){let a=new Error(Fo(o.status));throw a.code="http",a.status=o.status,a}let i=await o.res.arrayBuffer();return Buffer.from(i)}async function NP(t,e,n){let s=rr(t),o=await sr(s,{method:"DELETE",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return{ok:!0,status:404,missing:!0};if(!o.ok){let i=new Error(Fo(o.status));throw i.code="http",i.status=o.status,i}return{ok:!0,status:o.status}}function dp(t,e){let s=new RegExp("<(?:[\\w.-]+:)?"+e+"\\b[^>]*>([\\s\\S]*?)</(?:[\\w.-]+:)?"+e+">","i").exec(t);return s?s[1]:""}function Dk(t){let e=String(t||"").trim();if(!e)return"";let n=e;try{n=decodeURIComponent(e)}catch{}return n}function hp(t){return String(t||"").replace(/^[a-z]+:\/\/[^/]+/i,"").replace(/\/+$/,"")}function Rk(t){let e=String(t||""),n=[],s=e.match(/<(?:[\w.-]+:)?response\b[\s\S]*?<\/(?:[\w.-]+:)?response>/gi)||[];for(let r of s){let o=Dk(dp(r,"href"));if(!o)continue;let i=/<(?:[\w.-]+:)?collection\b/i.test(r),a=Number(String(dp(r,"getcontentlength")||"").trim()),l=String(dp(r,"getlastmodified")||"").trim(),c=o.replace(/\/+$/,"").split("/");n.push({href:o,name:c[c.length-1]||"",isDir:i,size:isFinite(a)&&a>0?a:0,lastModified:l?isNaN(Date.parse(l))?l:new Date(Date.parse(l)).toISOString():""})}return n}async function FP(t,e,n){let s=rr(t),o=await sr(s,{method:"PROPFIND",path:e,headers:{Depth:"1"},body:pp,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return[];if(!o.ok&&o.status!==207){let l=new Error(Fo(o.status));throw l.code="http",l.status=o.status,l}let i=await OP(o),a=hp(Dk(wp(s,e)));return Rk(i).filter(function(l){return hp(l.href)!==a})}$k.exports={WEBDAV_CONFIG_PATH:mp,DEFAULT_REMOTE_DIR:No,INCLUDE_KEYS:gp,REQUEST_TIMEOUT_MS:Ek,MAX_SEGMENTS:yp,defaultConfig:jk,normalizeConfig:oc,normalizeRemoteDir:Ik,sanitizeMachineSegment:Nk,isSafeSegment:AP,effectiveRemoteDir:Fk,loadConfig:MP,saveConfig:CP,urlFor:wp,pathOfHref:hp,basicAuth:Lk,request:sr,testConnection:EP,ensureDir:PP,putFile:jP,getFile:IP,deleteFile:NP,listDir:FP,parseMultiStatus:Rk,__requestConfig:rr}});var nx=ne((gD,tx)=>{var Lt=require("fs"),lc=require("os"),at=require("path"),LP=require("crypto"),Le=bp(),cc=at.join(lc.homedir(),".luban"),Ts="manifest.json",DP=1,uc=2,xp=5,kp=3,RP=500,qk=/^[A-Za-z0-9_-]+\.json$/,Bk=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,Uk=/^[^\/\\:*?"<>|\u0000-\u001f]{1,180}\.md$/,Wk=/^[A-Za-z0-9_-]+$/;function vp(t){return LP.createHash("sha1").update(t).digest("hex")}function Yi(t){return(t<10?"0":"")+t}function Kk(t){let e=t||new Date;return e.getFullYear()+Yi(e.getMonth()+1)+Yi(e.getDate())+"-"+Yi(e.getHours())+Yi(e.getMinutes())+Yi(e.getSeconds())}function $P(t){return t instanceof Date&&!isNaN(t.getTime())?t.toISOString():""}function Hk(t){let e=Object.create(null);for(let n of Le.INCLUDE_KEYS)e[n]=!t||t[n]===void 0?!0:t[n]===!0;return e}function Gk(t){let e=String(t??"");if(!e||e.length>300||e.indexOf("\\")>=0)return"";let n=e.split("/");if(n.length<2||n.length>4)return"";for(let r of n)if(!r||r==="."||r===".."||r.indexOf(":")>=0)return"";let s=n[0];return s==="sessions"?n.length===2&&qk.test(n[1])?e:"":s==="plans"?n.length===2&&Uk.test(n[1])?e:"":s==="config"?n.length===2&&(n[1]==="providers.json"||n[1]==="mcp.json")?e:"":s==="attachments"?n.length!==3?"":Wk.test(n[1])&&Bk.test(n[2])?e:"":""}var zk=["sessions","attachments","plans","providers","mcp"];function Vk(t){let e=String(t??"");return e.indexOf("sessions/")===0?"sessions":e.indexOf("attachments/")===0?"attachments":e.indexOf("plans/")===0?"plans":e==="config/providers.json"?"providers":e==="config/mcp.json"?"mcp":""}function Qi(t){let e=Object.create(null);for(let n of zk)e[n]=0;for(let n of Array.isArray(t)?t:[]){let s=Vk(n);s&&e[s]++}return e}function Jk(t){let e;try{e=JSON.parse(t)}catch{return{text:String(t),redacted:!1}}let n=!1;if(e&&Array.isArray(e.providers))for(let s of e.providers)s&&typeof s=="object"&&Object.prototype.hasOwnProperty.call(s,"apiKey")&&(delete s.apiKey,n=!0);return{text:JSON.stringify(e,null,2)+`
|
|
438
|
+
`,redacted:n}}function ic(t){try{return Lt.readdirSync(t,{withFileTypes:!0})}catch{return[]}}function Zi(t,e,n,s,r){let o=r||{},i;try{i=Lt.statSync(n)}catch{return e.push({relPath:s,reason:"stat"}),null}if(!i.isFile())return null;let a;try{a=Lt.readFileSync(n)}catch{return e.push({relPath:s,reason:"read"}),null}let l=!1;if(o.redact){let u=Jk(a.toString("utf8"));a=Buffer.from(u.text,"utf8"),l=u.redacted}let c={relPath:s,absPath:n,size:a.length,mtime:$P(i.mtime),sha1:vp(a)};return o.redact&&(c.inline=a,c.redacted=l),t.push(c),c}function Sp(t){let e=t||{},n=e.home?at.resolve(e.home):cc,s=Hk(e.includes),r=[],o=[],i=!1;if(s.sessions){let a=at.join(n,"sessions");for(let l of ic(a))if(l.isFile()){if(!qk.test(l.name)){o.push({relPath:"sessions/"+l.name,reason:"pattern"});continue}Zi(r,o,at.join(a,l.name),"sessions/"+l.name)}}if(s.attachments){let a=at.join(n,"attachments");for(let l of ic(a)){if(!l.isDirectory()||!Wk.test(l.name))continue;let c=at.join(a,l.name);for(let u of ic(c))if(u.isFile()){if(!Bk.test(u.name)){o.push({relPath:"attachments/"+l.name+"/"+u.name,reason:"pattern"});continue}Zi(r,o,at.join(c,u.name),"attachments/"+l.name+"/"+u.name)}}}if(s.plans){let a=at.join(n,"plans");for(let l of ic(a))if(l.isFile()){if(!Uk.test(l.name)){o.push({relPath:"plans/"+l.name,reason:"pattern"});continue}Zi(r,o,at.join(a,l.name),"plans/"+l.name)}}if(s.config){let a=at.join(n,"providers.json");if(Lt.existsSync(a)){let l=Zi(r,o,a,"config/providers.json",{redact:!0});l&&l.redacted&&(i=!0)}}if(s.mcp){let a=at.join(n,"mcp.json");Lt.existsSync(a)&&Zi(r,o,a,"config/mcp.json")}return r.sort(function(a,l){return a.relPath<l.relPath?-1:a.relPath>l.relPath?1:0}),{home:n,files:r,skipped:o,redacted:i,includes:s}}function Xk(t,e,n){let s=e||{},r=new Set(n||[]),o={schema:DP,app:"luban",version:String(s.version||""),machine:String(s.machine||lc.hostname()),createdAt:s.createdAt||new Date().toISOString(),files:Object.create(null)};for(let i of t||[]){let a={size:i.size,sha1:i.sha1,mtime:i.mtime};r.has(i.relPath)&&(a.ok=!1),o.files[i.relPath]=a}return o}function Yk(t,e,n){let r=(n||{}).mode==="force"?"force":"newer",o=e&&e.files||{},i=e&&e.createdAt?Date.parse(e.createdAt):NaN,a=[],l=[],c=[];for(let u of t||[]){if(!u||!u.relPath)continue;if(r==="force"){a.push(u);continue}let d=o[u.relPath];if(!d){a.push(u);continue}if(d.sha1&&u.sha1&&d.sha1===u.sha1&&d.ok!==!1){l.push(u);continue}let f=Date.parse(u.mtime||"");if(!isNaN(i)&&!isNaN(f)&&f>i){a.push(u);continue}c.push(Object.assign({reason:"remote-newer"},u))}return{upload:a,skip:l,blocked:c,mode:r}}function Zk(t){return t&&t.inline!==void 0?Buffer.isBuffer(t.inline)?t.inline:Buffer.from(String(t.inline),"utf8"):Lt.readFileSync(t.absPath)}function ea(t,e){let n=String(e??"").trim();if(!n)return t;if(!Le.isSafeSegment(n))return null;let s=String(t&&t.remoteDir||Le.DEFAULT_REMOTE_DIR).replace(/\/+$/,"");return s.split("/").filter(function(o){return!!o}).length+1>Le.MAX_SEGMENTS?null:Object.assign({},t,{remoteDir:s+"/"+n,perMachine:!1,machine:""})}async function dc(t){let e=Le.effectiveRemoteDir(t),n=String(t.remoteDir||Le.DEFAULT_REMOTE_DIR),s=t.perMachine===!0&&e!==n,r=null;try{r=await Le.getFile(t,Ts)}catch{r=null}if(r||!s)return{buf:r,base:e,legacy:!1};try{r=await Le.getFile(Object.assign({},t,{perMachine:!1}),Ts)}catch{r=null}return{buf:r,base:n,legacy:!!r}}function Qk(t){return!!t&&(t.code==="timeout"||t.code==="network")}function qP(t){return new Promise(function(e){setTimeout(e,t)})}async function _p(t,e,n,s){let r=0,o=[],i=[],a=Math.max(1,Math.min(e||1,t.length||1));for(let l=0;l<a;l++)i.push(async function(){for(;;){let c=r++;if(c>=t.length)return;let u=t[c],d=0,f=null;for(;d<kp;){d++;try{await n(u,c),f=null;break}catch(p){if(f=p,!Qk(p))break;d<kp&&await qP(RP*Math.pow(2,d-1))}}f?o.push({item:u,error:f,code:f.code||"",attempts:d}):s&&s(u,c)}}());return await Promise.all(i),{failures:o}}function BP(t){let e=Object.create(null);for(let n of t||[]){let s=String(n.relPath).split("/");s.pop(),s.length&&(e[s.join("/")]=!0)}return Object.keys(e).sort()}async function UP(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=Object.assign({},t||{});t&&t.machine!=null&&String(t.machine)!==""&&(o.machine=String(t.machine));let i=s.configPath,a=s.config||Le.loadConfig(i?{path:i}:void 0);r({phase:"test",done:0,total:0,current:""});let l=await Le.testConnection(o);if(!l.ok&&l.error!=="webdav.errRemotePath")return{ok:!1,phase:"test",error:l.error||"webdav.errNetwork",status:l.status};let c=null;try{let _=await Le.getFile(o,Ts);if(_)try{c=JSON.parse(_.toString("utf8"))}catch{c=null}}catch{c=null}if(!s.force&&c&&c.createdAt){let _=Date.parse(c.createdAt),C=Date.parse(a.lastBackupAt||""),A=s.machine||o.machine||lc.hostname();if(c.machine&&c.machine!==A&&!isNaN(_)&&(isNaN(C)||_>C))return WP(r,{phase:"confirm",done:0,total:0,current:""}),{ok:!1,needsConfirm:!0,phase:"confirm",error:"webdav.errRemoteNewer",remote:{createdAt:c.createdAt,machine:c.machine,version:c.version||"",files:Object.keys(c.files||{}).length}}}r({phase:"scan",done:0,total:0,current:""});let u=Sp({home:s.home,includes:s.includes||a.includes}),d=u.files,f=d.length,p=Yk(d,c,{mode:s.force?"force":"newer"}),h=Object.create(null);for(let _ of d)h[_.relPath]=_;let m=p.upload.concat(p.blocked.map(function(_){return h[_.relPath]||_})),y=p.skip.length;await Le.ensureDir(o,"");for(let _ of BP(m))await Le.ensureDir(o,_);let w=0;r({phase:"upload",done:0,total:m.length,current:""});let T=[];try{T=(await _p(m,uc,async function(C){let A=Zk(C);await Le.putFile(o,C.relPath,A),C.sha1=vp(A),C.size=A.length},function(C){w++,(w%xp===0||w===m.length)&&r({phase:"upload",done:w,total:m.length,current:C.relPath})})).failures}catch(_){return{ok:!1,phase:"upload",error:_.message||"webdav.errNetwork",status:_.status||0,done:w,total:f,files:f}}let g=T.map(function(_){return _.item.relPath});function v(_){let C=new Set(_||[]);return Qi(d.filter(function(A){return!C.has(A.relPath)}).map(function(A){return A.relPath}))}r({phase:"manifest",done:m.length,total:m.length,current:Ts});let b=new Date().toISOString(),S=Xk(d,{version:s.version,machine:s.machine,createdAt:b},g);return await Le.putFile(o,Ts,Buffer.from(JSON.stringify(S,null,2)+`
|
|
439
439
|
`,"utf8"),{contentType:"application/json"}),s.persist!==!1&&(Le.saveConfig(Object.assign({},a,{lastBackupAt:b}),i?{path:i}:void 0).ok||r({phase:"warn",done:m.length,total:m.length,current:"config"})),T.length?{ok:!1,phase:"upload",error:"webdav.errPartial",done:w,total:m.length,files:f,createdAt:b,uploaded:m.length-T.length,unchanged:y,categories:v(g),failed:T.map(function(_){return{relPath:_.item.relPath,error:_.error.message||String(_.error),code:_.code,attempts:_.attempts}})}:(r({phase:"done",done:m.length,total:m.length,current:""}),{ok:!0,phase:"done",files:f,bytes:m.reduce(function(_,C){return _+C.size},0),uploaded:m.length,unchanged:y,skipped:u.skipped.length,redacted:u.redacted,keys:Object.keys(S.files).length,createdAt:b,categories:v([]),includes:u.includes})}function WP(t,e){try{t(e)}catch{}}function ex(t,e,n){let s;try{s=JSON.parse(t)}catch{s=null}let r;try{r=JSON.parse(e)}catch{r=null}if(!r||typeof r!="object")return{text:String(t??""),added:0,models:0};let o=n&&n.length?new Set(n.map(function(d){return String(d)})):null,i=Array.isArray(r.providers)?r.providers:[],a=r.defaultModel;if(o){i=i.filter(function(p){return p&&p.id&&o.has(String(p.id))});let d=String(a??""),f=d.split("::")[0]||"";d&&f&&!o.has(f)&&(a="")}if(r=Object.assign({},r,{providers:i,defaultModel:a}),!s||typeof s!="object"||Array.isArray(s))return{text:JSON.stringify(r,null,2)+`
|
|
440
440
|
`,added:i.length,models:0};Array.isArray(s.providers)||(s.providers=[]);let l=Object.create(null);for(let d of s.providers)d&&d.id&&(l[d.id]=d);let c=0,u=0;for(let d of r.providers||[]){if(!d||!d.id)continue;let f=l[d.id];if(!f){s.providers.push(d),l[d.id]=d,c++;continue}Array.isArray(f.models)||(f.models=[]);let p=Object.create(null);for(let h of f.models)h&&h.id&&(p[h.id]=!0);for(let h of d.models||[])!h||!h.id||p[h.id]||(f.models.push(h),p[h.id]=!0,u++);for(let h of Object.keys(d))f[h]===void 0&&(f[h]=d[h])}return!s.defaultModel&&r.defaultModel&&(s.defaultModel=r.defaultModel),{text:JSON.stringify(s,null,2)+`
|
|
441
|
-
`,added:c,models:u}}function KP(t,e){Ft.mkdirSync(at.dirname(t),{recursive:!0,mode:448});let n=t+".tmp";Ft.writeFileSync(n,e,{mode:384}),Ft.renameSync(n,t);try{Ft.chmodSync(t,384)}catch{}}function ac(t,e){return e==="config/providers.json"?at.join(t,"providers.json"):e==="config/mcp.json"?at.join(t,"mcp.json"):at.join(t,e)}async function HP(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=ea(Object.assign({},t||{}),s.subdir);if(!o)return{ok:!1,phase:"manifest",error:"webdav.errBadMachine"};let i=s.configPath,a=s.config||Le.loadConfig(i?{path:i}:void 0),l=s.home?at.resolve(s.home):cc,c=s.mode==="force"?"force":"newer";r({phase:"test",done:0,total:0,current:""});let u=await Le.testConnection(o);if(!u.ok&&u.error!=="webdav.errRemotePath")return{ok:!1,phase:"test",error:u.error||"webdav.errNetwork",status:u.status};r({phase:"manifest",done:0,total:0,current:_s});let d=await dc(o),f=d.buf;if(!f)return{ok:!1,phase:"manifest",error:"webdav.errNoBackup"};let p=null;try{p=JSON.parse(f.toString("utf8"))}catch{p=null}if(!p||!p.files||typeof p.files!="object")return{ok:!1,phase:"manifest",error:"webdav.errBadManifest"};let h=d.legacy?Object.assign({},o,{perMachine:!1}):o,m=Date.parse(p.createdAt||""),y=Sp({home:l,includes:s.includes||a.includes}),w=Object.create(null);for(let Q of y.files)w[Q.relPath]=Q;let T=[],g=[],v=[],b=[],S=[];for(let Q of Object.keys(p.files)){let he=p.files[Q]||{};if(!Gk(Q)){b.push(Q);continue}if(he.ok===!1){S.push(Q);continue}let G=w[Q];if(G&&he.sha1&&G.sha1===he.sha1){g.push(Q);continue}if(Q==="config/providers.json"){T.push(Q);continue}if(G&&c!=="force"){let Ie=Date.parse(G.mtime||"");if(!isNaN(m)&&!isNaN(Ie)&&Ie>m){v.push(Q);continue}}T.push(Q)}let _=Array.isArray(s.providerIds)?s.providerIds.map(String):null,C=_!=null&&_.length===0,A=C?T.filter(function(Q){return Q!=="config/providers.json"}):T;C&&A.length!==T.length&&g.push("config/providers.json"),C&&T.indexOf("config/providers.json")<0&&g.push("config/providers.json");let F="",B=A.filter(function(Q){return Ft.existsSync(ac(l,Q))});if(B.length){F=at.join(l,"backups",Kk()),r({phase:"snapshot",done:0,total:B.length,current:F});for(let Q of B){let he=at.join(F,Q);Ft.mkdirSync(at.dirname(he),{recursive:!0,mode:448});try{Ft.copyFileSync(ac(l,Q),he)}catch{}}}let H=0,$=0,J=[],P={added:0,models:0},K=A.length;r({phase:"download",done:0,total:K,current:""});let ae=[];try{ae=(await _p(A,uc,async function(he){let G=await Le.getFile(h,he);if(!G)return;let Ie=ac(l,he),Se=G;if(he==="config/providers.json"){let yt=Ft.existsSync(Ie)?Ft.readFileSync(Ie,"utf8"):"",St=ex(yt,G.toString("utf8"),_);Se=Buffer.from(St.text,"utf8"),P={added:P.added+St.added,models:P.models+St.models}}s.dryRun||KP(Ie,Se),$++,J.push(he)},function(he){H++,(H%xp===0||H===K)&&r({phase:"download",done:H,total:K,current:he})})).failures}catch(Q){return{ok:!1,phase:"download",error:Q.message||"webdav.errNetwork",status:Q.status||0,done:H,total:K,restored:$,snapshot:F,categories:Qi(J)}}if(ae.length)return{ok:!1,phase:"download",error:"webdav.errPartial",done:H,total:K,restored:$,snapshot:F,incomplete:S.length,categories:Qi(J),failed:ae.map(function(Q){return{relPath:Q.item,error:Q.error.message||String(Q.error),code:Q.code,attempts:Q.attempts}})};let te=new Date().toISOString();return s.persist!==!1&&!s.dryRun&&Le.saveConfig(Object.assign({},a,{lastRestoreAt:te}),i?{path:i}:void 0),r({phase:"done",done:K,total:K,current:""}),{ok:!0,phase:"done",restored:$,total:K,restoredPaths:J,categories:Qi(J),skipped:g.length,blocked:v,unsafe:b.length,incomplete:S.length,snapshot:F,createdAt:p.createdAt||"",machine:p.machine||"",legacy:d.legacy,merge:P,restoredAt:te}}async function GP(t,e){let n=e||{},s=ea(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await Le.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await dc(s),i=o.buf;if(!i)return{ok:!0,hasBackup:!1,files:[],total:0,legacy:!1};let a=null;try{a=JSON.parse(i.toString("utf8"))}catch{a=null}if(!a)return{ok:!1,error:"webdav.errBadManifest"};let l=Object.keys(a.files||{}).sort(),c=l.filter(function(d){return(a.files[d]||{}).ok===!1}).length,u=Number(n.limit)>0?Number(n.limit):200;return{ok:!0,hasBackup:!0,createdAt:a.createdAt||"",machine:a.machine||"",version:a.version||"",total:l.length,incomplete:c,bytes:l.reduce(function(d,f){return d+(Number((a.files[f]||{}).size)||0)},0),files:l.slice(0,u),legacy:o.legacy,dir:String(n.subdir==null?"":n.subdir)}}async function zP(t,e){let n=e||{},s=ea(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await Le.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await dc(s);if(!o.buf)return{ok:!1,error:"webdav.errNoBackup"};let i=null;try{i=JSON.parse(o.buf.toString("utf8"))}catch{i=null}if(!i||!i.files||typeof i.files!="object")return{ok:!1,error:"webdav.errBadManifest"};if(!i.files["config/providers.json"])return{ok:!0,hasProviders:!1,providers:[]};let a=o.legacy?Object.assign({},s,{perMachine:!1}):s,l=null;try{l=await Le.getFile(a,"config/providers.json")}catch{l=null}if(!l)return{ok:!1,error:"webdav.errNetwork"};let c=null;try{c=JSON.parse(l.toString("utf8"))}catch{c=null}let u=c&&Array.isArray(c.providers)?c.providers:[],d=n.home?at.resolve(n.home):cc,f=at.join(d,"providers.json"),p=new Set;try{let m=JSON.parse(Ft.readFileSync(f,"utf8"));for(let y of m&&Array.isArray(m.providers)?m.providers:[])y&&y.id&&p.add(String(y.id))}catch{}let h=u.filter(function(m){return m&&m.id}).map(function(m){return{id:String(m.id),name:String(m.displayName||m.name||m.id),models:Array.isArray(m.models)?m.models.length:0,exists:p.has(String(m.id))}});return{ok:!0,hasProviders:h.length>0,providers:h}}async function VP(t,e){let n=e||{},s=Object.assign({},t||{}),r=await Le.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=Object.assign({},s,{perMachine:!1,machine:""}),i=String(o.remoteDir||Le.DEFAULT_REMOTE_DIR).replace(/\/+$/,""),a=[];try{a=await Le.listDir(o,"")}catch(u){return{ok:!1,error:u.message||"webdav.errNetwork",status:u.status||0}}let l=[];a.some(function(u){return!u.isDir&&u.name===_s})&&l.push("");for(let u of a)u.isDir&&Le.isSafeSegment(u.name)&&l.push(u.name);let c=[];return await _p(l.slice(0,20),uc,async function(u){let d=u?ea(o,u):o,f=null;try{f=await Le.getFile(d,_s)}catch{f=null}if(!f)return;let p=null;try{p=JSON.parse(f.toString("utf8"))}catch{p=null}if(!p||!p.files||typeof p.files!="object")return;let h=Object.keys(p.files);c.push({dir:u,machine:p.machine||"",createdAt:p.createdAt||"",version:p.version||"",total:h.length,incomplete:h.filter(function(m){return(p.files[m]||{}).ok===!1}).length,bytes:h.reduce(function(m,y){return m+(Number((p.files[y]||{}).size)||0)},0)})}),c.sort(function(u,d){let f=Date.parse(u.createdAt||""),p=Date.parse(d.createdAt||"");return(isNaN(p)?0:p)-(isNaN(f)?0:f)}),{ok:!0,remoteDir:i,local:Le.sanitizeMachineSegment(n.machine||lc.hostname()),machines:c}}tx.exports={LUBAN_HOME:cc,MANIFEST_NAME:_s,CONCURRENCY:uc,PROGRESS_EVERY:xp,MAX_ATTEMPTS:kp,isRetryable:Qk,sha1:vp,stampDir:Kk,safeRelPath:Gk,localPathOf:ac,redactProviders:Jk,CATEGORIES:zk,categoryOf:Vk,countCategories:Qi,includesOf:Hk,scanLocal:Sp,buildManifest:Xk,planSync:Yk,contentOf:Zk,withSubdir:ea,fetchManifest:dc,uploadAll:UP,restoreAll:HP,remoteSummary:GP,listMachines:VP,listRemoteProviders:zP,mergeProviders:ex}});var fc=ne((yD,lx)=>{var zr=require("fs"),JP=require("os"),Mp=require("path"),XP=2048,ta=Mp.join(JP.tmpdir(),"luban-computer"),YP=30*60*1e3,ZP=40;function Gr(t,e){let n=Number(t);return isFinite(n)?Math.round(n):e}function QP(t,e,n){let s=Number(t);return isFinite(s)?Math.max(e,Math.min(n,Math.round(s))):e}function ej(t){if(t==null||t==="")return null;let e=t;if(typeof t=="string"){let r=t.split(/[,\s]+/).map(function(o){return Number(o)});if(r.length!==4||r.some(function(o){return!isFinite(o)}))throw new Error('region \u683C\u5F0F\u5E94\u4E3A "x,y,\u5BBD,\u9AD8"\uFF08\u5C4F\u5E55\u5750\u6807\uFF09\u6216 { x, y, width, height }');e={x:r[0],y:r[1],width:r[2],height:r[3]}}let n=Gr(e.width!=null?e.width:e.w,0),s=Gr(e.height!=null?e.height:e.h,0);if(n<=0||s<=0)throw new Error("region \u7684\u5BBD / \u9AD8\u5FC5\u987B\u5927\u4E8E 0");return{x:Gr(e.x,0),y:Gr(e.y,0),width:n,height:s}}function tj(t,e){if(!e)return null;let n=0,s=1/0,r=1/0,o=-1/0,i=-1/0;if((t||[]).forEach(function(c){let u=Math.max(e.x,c.x),d=Math.max(e.y,c.y),f=Math.min(e.x+e.width,c.x+c.width),p=Math.min(e.y+e.height,c.y+c.height);f<=u||p<=d||(n++,u<s&&(s=u),d<r&&(r=d),f>o&&(o=f),p>i&&(i=p))}),!n)return null;let a={x:s,y:r,width:o-s,height:i-r},l=a.x!==e.x||a.y!==e.y||a.width!==e.width||a.height!==e.height;return{region:a,requested:e,clipped:l}}var rr=null;function nj(){return rr?Object.assign({},rr):null}function sj(t){rr=t}function rj(t,e,n){return t.some(function(s){return e>=s.x&&e<=s.x+s.width&&n>=s.y&&n<=s.y+s.height})}function oj(t,e,n){let s=n||{},r=Gr(t,NaN),o=Gr(e,NaN);if(!isFinite(r)||!isFinite(o))throw new Error("\u9700\u8981\u6570\u503C\u5750\u6807 x / y\uFF08\u5C4F\u5E55\u5750\u6807\uFF09");if(!s.imageCoords)return{x:r,y:o};if(!rr)throw new Error("imageCoords=true \u9700\u8981\u5148\u622A\u4E00\u5F20\u56FE\uFF08\u8FD8\u4E0D\u77E5\u9053\u6362\u7B97\u500D\u7387\uFF09");return{x:Math.round(rr.originX+r*rr.ratio),y:Math.round(rr.originY+o*rr.ratio)}}function ij(t){return new Promise(function(e,n){let s=null;try{s=zr.openSync(t,"r");let r=Buffer.alloc(262144),o=zr.readSync(s,r,0,r.length,0),i=r.subarray(0,o);if(i.length>24&&i[0]===137&&i[1]===80){e({width:i.readUInt32BE(16),height:i.readUInt32BE(20)});return}let a=2;for(;a+9<i.length;){if(i[a]!==255){a++;continue}let l=i[a+1];if(l===216||l===1||l>=208&&l<=215){a+=2;continue}let c=i.readUInt16BE(a+2);if(l>=192&&l<=207&&l!==196&&l!==200&&l!==204){e({height:i.readUInt16BE(a+5),width:i.readUInt16BE(a+7)});return}a+=2+c}n(new Error("\u8BFB\u4E0D\u51FA\u56FE\u7247\u5C3A\u5BF8\uFF08\u4E0D\u662F JPEG / PNG \u5934\uFF09"))}catch(r){n(new Error("\u8BFB\u4E0D\u51FA\u56FE\u7247\u5C3A\u5BF8\uFF1A"+r.message))}finally{if(s!=null)try{zr.closeSync(s)}catch{}}})}function sx(){try{zr.mkdirSync(ta,{recursive:!0})}catch{}}function rx(){try{let t=zr.readdirSync(ta),e=[];for(let s of t){if(!/\.(jpg|png)$/.test(s))continue;let r=Mp.join(ta,s);try{e.push({p:r,t:zr.statSync(r).mtimeMs})}catch{}}let n=Date.now();e.sort(function(s,r){return r.t-s.t}),e.forEach(function(s,r){if(r>=ZP||n-s.t>YP)try{zr.unlinkSync(s.p)}catch{}})}catch{}}function aj(t){sx(),rx();let e="cu-"+Date.now()+"-"+Math.random().toString(36).slice(2,8)+"."+(t||"jpg");return Mp.join(ta,e)}function ox(t){return Math.round(t.width)+"\xD7"+Math.round(t.height)}function lj(t){return(t||[]).map(function(e){return"["+Math.round(e.x)+","+Math.round(e.y)+" "+Math.round(e.width)+"\xD7"+Math.round(e.height)+"]"}).join(" ")||"(\u65E0)"}function Tp(t){let e=Math.round(Number(t)||0);return(e<0?"-":"+")+Math.abs(e)}var ix={short:"\u70B9",long:"\u5C4F\u5E55\u903B\u8F91\u70B9",mid:"\u5C4F\u5E55\u70B9"};function cj(t,e){let n=e||ix,s=[],r=t.region?"\u533A\u57DF "+t.region.x+","+t.region.y+" "+Math.round(t.region.width)+"\xD7"+Math.round(t.region.height):"\u5C4F\u5E55 "+(t.screen.index+1)+"\uFF08"+ox(t.screen)+" "+n.short+"\uFF09";if(s.push("\u684C\u9762\u622A\u56FE\uFF1A"+r+"\uFF1B\u56FE\u7247 "+t.width+"\xD7"+t.height+" \u50CF\u7D20\u3002"),t.clipped&&t.requestedRegion){let o=t.requestedRegion;s.push("\u6CE8\u610F\uFF1A\u8BF7\u6C42\u7684\u533A\u57DF "+o.x+","+o.y+" "+Math.round(o.width)+"\xD7"+Math.round(o.height)+" \u8D85\u51FA\u5C4F\u5E55\uFF0C\u53EA\u622A\u5230\u4E86\u4E0A\u9762\u8FD9\u5757\uFF08\u8D8A\u754C\u90E8\u5206\u88AB\u7CFB\u7EDF\u88C1\u6389\uFF0C\u539F\u70B9\u4E0E\u500D\u7387\u5DF2\u6309\u5B9E\u9645\u533A\u57DF\u6821\u6B63\uFF09\u3002")}return t.displayIgnored&&s.push("\u6CE8\u610F\uFF1A\u540C\u65F6\u7ED9\u4E86 display \u4E0E region \u2014\u2014 \u622A\u533A\u57DF\u8D70\u7684\u662F region \u7684\u5168\u5C40\u5750\u6807\uFF0Cdisplay "+t.displayIgnored+" \u5DF2\u5FFD\u7565\uFF08\u533A\u57DF\u843D\u5728\u54EA\u5757\u5C4F\u5C31\u662F\u54EA\u5757\uFF09\u3002\u53EA\u6309\u5C4F\u5E55\u622A\u5C31\u53BB\u6389 region\u3002"),Math.abs(t.ratio-1)<.01?s.push("\u5750\u6807\uFF1A\u56FE\u7247\u50CF\u7D20 = "+n.long+"\uFF081:1\uFF09\uFF0C\u76F4\u63A5\u7528\u56FE\u4E0A\u8BFB\u5230\u7684 (x, y) \u8C03 click / move\u3002"):s.push("\u5750\u6807\uFF1A\u56FE\u7247\u88AB\u538B\u8FC7\uFF0C"+n.mid+" = \u56FE\u4E0A\u50CF\u7D20 \xD7 "+t.ratio.toFixed(2)+"\uFF08\u539F\u70B9\u504F\u79FB x"+Tp(t.originX)+" y"+Tp(t.originY)+"\uFF09\uFF1B\u4E5F\u53EF\u4EE5\u76F4\u63A5\u4F20 imageCoords=true \u8BA9\u5DE5\u5177\u6362\u7B97\u3002"),(t.region||t.originX||t.originY)&&s.push("\u539F\u70B9\uFF1A\u8FD9\u5F20\u56FE\u7684\u5DE6\u4E0A\u89D2\u662F\u5C4F\u5E55\u5750\u6807 ("+Math.round(t.originX)+", "+Math.round(t.originY)+")\u3002"),s.join(`
|
|
441
|
+
`,added:c,models:u}}function KP(t,e){Lt.mkdirSync(at.dirname(t),{recursive:!0,mode:448});let n=t+".tmp";Lt.writeFileSync(n,e,{mode:384}),Lt.renameSync(n,t);try{Lt.chmodSync(t,384)}catch{}}function ac(t,e){return e==="config/providers.json"?at.join(t,"providers.json"):e==="config/mcp.json"?at.join(t,"mcp.json"):at.join(t,e)}async function HP(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=ea(Object.assign({},t||{}),s.subdir);if(!o)return{ok:!1,phase:"manifest",error:"webdav.errBadMachine"};let i=s.configPath,a=s.config||Le.loadConfig(i?{path:i}:void 0),l=s.home?at.resolve(s.home):cc,c=s.mode==="force"?"force":"newer";r({phase:"test",done:0,total:0,current:""});let u=await Le.testConnection(o);if(!u.ok&&u.error!=="webdav.errRemotePath")return{ok:!1,phase:"test",error:u.error||"webdav.errNetwork",status:u.status};r({phase:"manifest",done:0,total:0,current:Ts});let d=await dc(o),f=d.buf;if(!f)return{ok:!1,phase:"manifest",error:"webdav.errNoBackup"};let p=null;try{p=JSON.parse(f.toString("utf8"))}catch{p=null}if(!p||!p.files||typeof p.files!="object")return{ok:!1,phase:"manifest",error:"webdav.errBadManifest"};let h=d.legacy?Object.assign({},o,{perMachine:!1}):o,m=Date.parse(p.createdAt||""),y=Sp({home:l,includes:s.includes||a.includes}),w=Object.create(null);for(let Q of y.files)w[Q.relPath]=Q;let T=[],g=[],v=[],b=[],S=[];for(let Q of Object.keys(p.files)){let he=p.files[Q]||{};if(!Gk(Q)){b.push(Q);continue}if(he.ok===!1){S.push(Q);continue}let G=w[Q];if(G&&he.sha1&&G.sha1===he.sha1){g.push(Q);continue}if(Q==="config/providers.json"){T.push(Q);continue}if(G&&c!=="force"){let Ie=Date.parse(G.mtime||"");if(!isNaN(m)&&!isNaN(Ie)&&Ie>m){v.push(Q);continue}}T.push(Q)}let _=Array.isArray(s.providerIds)?s.providerIds.map(String):null,C=_!=null&&_.length===0,A=C?T.filter(function(Q){return Q!=="config/providers.json"}):T;C&&A.length!==T.length&&g.push("config/providers.json"),C&&T.indexOf("config/providers.json")<0&&g.push("config/providers.json");let F="",B=A.filter(function(Q){return Lt.existsSync(ac(l,Q))});if(B.length){F=at.join(l,"backups",Kk()),r({phase:"snapshot",done:0,total:B.length,current:F});for(let Q of B){let he=at.join(F,Q);Lt.mkdirSync(at.dirname(he),{recursive:!0,mode:448});try{Lt.copyFileSync(ac(l,Q),he)}catch{}}}let H=0,$=0,J=[],P={added:0,models:0},K=A.length;r({phase:"download",done:0,total:K,current:""});let ae=[];try{ae=(await _p(A,uc,async function(he){let G=await Le.getFile(h,he);if(!G)return;let Ie=ac(l,he),Se=G;if(he==="config/providers.json"){let yt=Lt.existsSync(Ie)?Lt.readFileSync(Ie,"utf8"):"",St=ex(yt,G.toString("utf8"),_);Se=Buffer.from(St.text,"utf8"),P={added:P.added+St.added,models:P.models+St.models}}s.dryRun||KP(Ie,Se),$++,J.push(he)},function(he){H++,(H%xp===0||H===K)&&r({phase:"download",done:H,total:K,current:he})})).failures}catch(Q){return{ok:!1,phase:"download",error:Q.message||"webdav.errNetwork",status:Q.status||0,done:H,total:K,restored:$,snapshot:F,categories:Qi(J)}}if(ae.length)return{ok:!1,phase:"download",error:"webdav.errPartial",done:H,total:K,restored:$,snapshot:F,incomplete:S.length,categories:Qi(J),failed:ae.map(function(Q){return{relPath:Q.item,error:Q.error.message||String(Q.error),code:Q.code,attempts:Q.attempts}})};let te=new Date().toISOString();return s.persist!==!1&&!s.dryRun&&Le.saveConfig(Object.assign({},a,{lastRestoreAt:te}),i?{path:i}:void 0),r({phase:"done",done:K,total:K,current:""}),{ok:!0,phase:"done",restored:$,total:K,restoredPaths:J,categories:Qi(J),skipped:g.length,blocked:v,unsafe:b.length,incomplete:S.length,snapshot:F,createdAt:p.createdAt||"",machine:p.machine||"",legacy:d.legacy,merge:P,restoredAt:te}}async function GP(t,e){let n=e||{},s=ea(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await Le.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await dc(s),i=o.buf;if(!i)return{ok:!0,hasBackup:!1,files:[],total:0,legacy:!1};let a=null;try{a=JSON.parse(i.toString("utf8"))}catch{a=null}if(!a)return{ok:!1,error:"webdav.errBadManifest"};let l=Object.keys(a.files||{}).sort(),c=l.filter(function(d){return(a.files[d]||{}).ok===!1}).length,u=Number(n.limit)>0?Number(n.limit):200;return{ok:!0,hasBackup:!0,createdAt:a.createdAt||"",machine:a.machine||"",version:a.version||"",total:l.length,incomplete:c,bytes:l.reduce(function(d,f){return d+(Number((a.files[f]||{}).size)||0)},0),files:l.slice(0,u),legacy:o.legacy,dir:String(n.subdir==null?"":n.subdir)}}async function zP(t,e){let n=e||{},s=ea(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await Le.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await dc(s);if(!o.buf)return{ok:!1,error:"webdav.errNoBackup"};let i=null;try{i=JSON.parse(o.buf.toString("utf8"))}catch{i=null}if(!i||!i.files||typeof i.files!="object")return{ok:!1,error:"webdav.errBadManifest"};if(!i.files["config/providers.json"])return{ok:!0,hasProviders:!1,providers:[]};let a=o.legacy?Object.assign({},s,{perMachine:!1}):s,l=null;try{l=await Le.getFile(a,"config/providers.json")}catch{l=null}if(!l)return{ok:!1,error:"webdav.errNetwork"};let c=null;try{c=JSON.parse(l.toString("utf8"))}catch{c=null}let u=c&&Array.isArray(c.providers)?c.providers:[],d=n.home?at.resolve(n.home):cc,f=at.join(d,"providers.json"),p=new Set;try{let m=JSON.parse(Lt.readFileSync(f,"utf8"));for(let y of m&&Array.isArray(m.providers)?m.providers:[])y&&y.id&&p.add(String(y.id))}catch{}let h=u.filter(function(m){return m&&m.id}).map(function(m){return{id:String(m.id),name:String(m.displayName||m.name||m.id),models:Array.isArray(m.models)?m.models.length:0,exists:p.has(String(m.id))}});return{ok:!0,hasProviders:h.length>0,providers:h}}async function VP(t,e){let n=e||{},s=Object.assign({},t||{}),r=await Le.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=Object.assign({},s,{perMachine:!1,machine:""}),i=String(o.remoteDir||Le.DEFAULT_REMOTE_DIR).replace(/\/+$/,""),a=[];try{a=await Le.listDir(o,"")}catch(u){return{ok:!1,error:u.message||"webdav.errNetwork",status:u.status||0}}let l=[];a.some(function(u){return!u.isDir&&u.name===Ts})&&l.push("");for(let u of a)u.isDir&&Le.isSafeSegment(u.name)&&l.push(u.name);let c=[];return await _p(l.slice(0,20),uc,async function(u){let d=u?ea(o,u):o,f=null;try{f=await Le.getFile(d,Ts)}catch{f=null}if(!f)return;let p=null;try{p=JSON.parse(f.toString("utf8"))}catch{p=null}if(!p||!p.files||typeof p.files!="object")return;let h=Object.keys(p.files);c.push({dir:u,machine:p.machine||"",createdAt:p.createdAt||"",version:p.version||"",total:h.length,incomplete:h.filter(function(m){return(p.files[m]||{}).ok===!1}).length,bytes:h.reduce(function(m,y){return m+(Number((p.files[y]||{}).size)||0)},0)})}),c.sort(function(u,d){let f=Date.parse(u.createdAt||""),p=Date.parse(d.createdAt||"");return(isNaN(p)?0:p)-(isNaN(f)?0:f)}),{ok:!0,remoteDir:i,local:Le.sanitizeMachineSegment(n.machine||lc.hostname()),machines:c}}tx.exports={LUBAN_HOME:cc,MANIFEST_NAME:Ts,CONCURRENCY:uc,PROGRESS_EVERY:xp,MAX_ATTEMPTS:kp,isRetryable:Qk,sha1:vp,stampDir:Kk,safeRelPath:Gk,localPathOf:ac,redactProviders:Jk,CATEGORIES:zk,categoryOf:Vk,countCategories:Qi,includesOf:Hk,scanLocal:Sp,buildManifest:Xk,planSync:Yk,contentOf:Zk,withSubdir:ea,fetchManifest:dc,uploadAll:UP,restoreAll:HP,remoteSummary:GP,listMachines:VP,listRemoteProviders:zP,mergeProviders:ex}});var fc=ne((yD,lx)=>{var zr=require("fs"),JP=require("os"),Mp=require("path"),XP=2048,ta=Mp.join(JP.tmpdir(),"luban-computer"),YP=30*60*1e3,ZP=40;function Gr(t,e){let n=Number(t);return isFinite(n)?Math.round(n):e}function QP(t,e,n){let s=Number(t);return isFinite(s)?Math.max(e,Math.min(n,Math.round(s))):e}function ej(t){if(t==null||t==="")return null;let e=t;if(typeof t=="string"){let r=t.split(/[,\s]+/).map(function(o){return Number(o)});if(r.length!==4||r.some(function(o){return!isFinite(o)}))throw new Error('region \u683C\u5F0F\u5E94\u4E3A "x,y,\u5BBD,\u9AD8"\uFF08\u5C4F\u5E55\u5750\u6807\uFF09\u6216 { x, y, width, height }');e={x:r[0],y:r[1],width:r[2],height:r[3]}}let n=Gr(e.width!=null?e.width:e.w,0),s=Gr(e.height!=null?e.height:e.h,0);if(n<=0||s<=0)throw new Error("region \u7684\u5BBD / \u9AD8\u5FC5\u987B\u5927\u4E8E 0");return{x:Gr(e.x,0),y:Gr(e.y,0),width:n,height:s}}function tj(t,e){if(!e)return null;let n=0,s=1/0,r=1/0,o=-1/0,i=-1/0;if((t||[]).forEach(function(c){let u=Math.max(e.x,c.x),d=Math.max(e.y,c.y),f=Math.min(e.x+e.width,c.x+c.width),p=Math.min(e.y+e.height,c.y+c.height);f<=u||p<=d||(n++,u<s&&(s=u),d<r&&(r=d),f>o&&(o=f),p>i&&(i=p))}),!n)return null;let a={x:s,y:r,width:o-s,height:i-r},l=a.x!==e.x||a.y!==e.y||a.width!==e.width||a.height!==e.height;return{region:a,requested:e,clipped:l}}var or=null;function nj(){return or?Object.assign({},or):null}function sj(t){or=t}function rj(t,e,n){return t.some(function(s){return e>=s.x&&e<=s.x+s.width&&n>=s.y&&n<=s.y+s.height})}function oj(t,e,n){let s=n||{},r=Gr(t,NaN),o=Gr(e,NaN);if(!isFinite(r)||!isFinite(o))throw new Error("\u9700\u8981\u6570\u503C\u5750\u6807 x / y\uFF08\u5C4F\u5E55\u5750\u6807\uFF09");if(!s.imageCoords)return{x:r,y:o};if(!or)throw new Error("imageCoords=true \u9700\u8981\u5148\u622A\u4E00\u5F20\u56FE\uFF08\u8FD8\u4E0D\u77E5\u9053\u6362\u7B97\u500D\u7387\uFF09");return{x:Math.round(or.originX+r*or.ratio),y:Math.round(or.originY+o*or.ratio)}}function ij(t){return new Promise(function(e,n){let s=null;try{s=zr.openSync(t,"r");let r=Buffer.alloc(262144),o=zr.readSync(s,r,0,r.length,0),i=r.subarray(0,o);if(i.length>24&&i[0]===137&&i[1]===80){e({width:i.readUInt32BE(16),height:i.readUInt32BE(20)});return}let a=2;for(;a+9<i.length;){if(i[a]!==255){a++;continue}let l=i[a+1];if(l===216||l===1||l>=208&&l<=215){a+=2;continue}let c=i.readUInt16BE(a+2);if(l>=192&&l<=207&&l!==196&&l!==200&&l!==204){e({height:i.readUInt16BE(a+5),width:i.readUInt16BE(a+7)});return}a+=2+c}n(new Error("\u8BFB\u4E0D\u51FA\u56FE\u7247\u5C3A\u5BF8\uFF08\u4E0D\u662F JPEG / PNG \u5934\uFF09"))}catch(r){n(new Error("\u8BFB\u4E0D\u51FA\u56FE\u7247\u5C3A\u5BF8\uFF1A"+r.message))}finally{if(s!=null)try{zr.closeSync(s)}catch{}}})}function sx(){try{zr.mkdirSync(ta,{recursive:!0})}catch{}}function rx(){try{let t=zr.readdirSync(ta),e=[];for(let s of t){if(!/\.(jpg|png)$/.test(s))continue;let r=Mp.join(ta,s);try{e.push({p:r,t:zr.statSync(r).mtimeMs})}catch{}}let n=Date.now();e.sort(function(s,r){return r.t-s.t}),e.forEach(function(s,r){if(r>=ZP||n-s.t>YP)try{zr.unlinkSync(s.p)}catch{}})}catch{}}function aj(t){sx(),rx();let e="cu-"+Date.now()+"-"+Math.random().toString(36).slice(2,8)+"."+(t||"jpg");return Mp.join(ta,e)}function ox(t){return Math.round(t.width)+"\xD7"+Math.round(t.height)}function lj(t){return(t||[]).map(function(e){return"["+Math.round(e.x)+","+Math.round(e.y)+" "+Math.round(e.width)+"\xD7"+Math.round(e.height)+"]"}).join(" ")||"(\u65E0)"}function Tp(t){let e=Math.round(Number(t)||0);return(e<0?"-":"+")+Math.abs(e)}var ix={short:"\u70B9",long:"\u5C4F\u5E55\u903B\u8F91\u70B9",mid:"\u5C4F\u5E55\u70B9"};function cj(t,e){let n=e||ix,s=[],r=t.region?"\u533A\u57DF "+t.region.x+","+t.region.y+" "+Math.round(t.region.width)+"\xD7"+Math.round(t.region.height):"\u5C4F\u5E55 "+(t.screen.index+1)+"\uFF08"+ox(t.screen)+" "+n.short+"\uFF09";if(s.push("\u684C\u9762\u622A\u56FE\uFF1A"+r+"\uFF1B\u56FE\u7247 "+t.width+"\xD7"+t.height+" \u50CF\u7D20\u3002"),t.clipped&&t.requestedRegion){let o=t.requestedRegion;s.push("\u6CE8\u610F\uFF1A\u8BF7\u6C42\u7684\u533A\u57DF "+o.x+","+o.y+" "+Math.round(o.width)+"\xD7"+Math.round(o.height)+" \u8D85\u51FA\u5C4F\u5E55\uFF0C\u53EA\u622A\u5230\u4E86\u4E0A\u9762\u8FD9\u5757\uFF08\u8D8A\u754C\u90E8\u5206\u88AB\u7CFB\u7EDF\u88C1\u6389\uFF0C\u539F\u70B9\u4E0E\u500D\u7387\u5DF2\u6309\u5B9E\u9645\u533A\u57DF\u6821\u6B63\uFF09\u3002")}return t.displayIgnored&&s.push("\u6CE8\u610F\uFF1A\u540C\u65F6\u7ED9\u4E86 display \u4E0E region \u2014\u2014 \u622A\u533A\u57DF\u8D70\u7684\u662F region \u7684\u5168\u5C40\u5750\u6807\uFF0Cdisplay "+t.displayIgnored+" \u5DF2\u5FFD\u7565\uFF08\u533A\u57DF\u843D\u5728\u54EA\u5757\u5C4F\u5C31\u662F\u54EA\u5757\uFF09\u3002\u53EA\u6309\u5C4F\u5E55\u622A\u5C31\u53BB\u6389 region\u3002"),Math.abs(t.ratio-1)<.01?s.push("\u5750\u6807\uFF1A\u56FE\u7247\u50CF\u7D20 = "+n.long+"\uFF081:1\uFF09\uFF0C\u76F4\u63A5\u7528\u56FE\u4E0A\u8BFB\u5230\u7684 (x, y) \u8C03 click / move\u3002"):s.push("\u5750\u6807\uFF1A\u56FE\u7247\u88AB\u538B\u8FC7\uFF0C"+n.mid+" = \u56FE\u4E0A\u50CF\u7D20 \xD7 "+t.ratio.toFixed(2)+"\uFF08\u539F\u70B9\u504F\u79FB x"+Tp(t.originX)+" y"+Tp(t.originY)+"\uFF09\uFF1B\u4E5F\u53EF\u4EE5\u76F4\u63A5\u4F20 imageCoords=true \u8BA9\u5DE5\u5177\u6362\u7B97\u3002"),(t.region||t.originX||t.originY)&&s.push("\u539F\u70B9\uFF1A\u8FD9\u5F20\u56FE\u7684\u5DE6\u4E0A\u89D2\u662F\u5C4F\u5E55\u5750\u6807 ("+Math.round(t.originX)+", "+Math.round(t.originY)+")\u3002"),s.join(`
|
|
442
442
|
`)}function uj(t,e,n,s,r){let o=s||ix,i=(t||[]).filter(function(u){return u&&String(u.t||"").trim()});i.sort(function(u,d){return Math.abs(u.y-d.y)>8?u.y-d.y:u.x-d.x});let a=[],l=new Set;for(let u of i){let d=String(u.t).replace(/\s+/g," ").trim();if(!d)continue;let f=Math.round(e.originX+u.x*e.ratio),p=Math.round(e.originY+u.y*e.ratio),h=f+","+p+","+d;l.has(h)||(l.add(h),a.push("["+f+","+p+"] "+d))}let c="\u5C4F\u5E55\u6587\u5B57\uFF08"+a.length+" \u884C\uFF1B\u4E2D\u62EC\u53F7\u91CC\u662F"+o.long+"\u5750\u6807\uFF0C\u70B9\u6587\u5B57\u7528 x+\u5BBD/2 \u4F30\u7B97\u5373\u53EF\uFF09\uFF1A";return a.length?ax(c+`
|
|
443
443
|
`+a.join(`
|
|
444
444
|
`),n):c+`
|
|
445
445
|
\uFF08\u6CA1\u6709\u8BC6\u522B\u5230\u6587\u5B57\uFF1A`+(r||"\u53EF\u80FD\u662F\u7EAF\u56FE\u5F62\u754C\u9762\uFF0C\u6216\u6CA1\u6388\u6743\u300C\u5C4F\u5E55\u5F55\u5236\u300D\u5BFC\u81F4\u622A\u56FE\u5168\u9ED1\uFF09")}function ax(t,e){let n=String(t??""),s=isFinite(Number(e))&&Number(e)>100?Math.floor(Number(e)):6e3;return n.length<=s?n:n.slice(0,s)+`
|
|
446
|
-
\u2026[\u5DF2\u622A\u65AD\uFF0C\u5171 `+n.length+" \u5B57\u7B26\uFF1B\u53EF\u8C03\u5927 maxChars \u6216\u4F20 region \u53EA\u770B\u4E00\u5757]"}lx.exports={num:Gr,clamp:QP,parseRegion:ej,clampRegion:tj,imageSize:ij,lastShotInfo:nj,setLastShot:sj,pointOnScreen:rj,toScreenPoint:oj,fmtSize:ox,screenListDesc:lj,signed:Tp,describeShot:cj,formatOcr:uj,clipText:ax,ensureTmpDir:sx,pruneTmp:rx,tmpFile:aj,DEFAULT_MAX_WIDTH:XP,TMP_DIR:ta}});var Sx=ne((bD,vx)=>{var gt=require("fs"),wD=require("os"),hn=require("path"),{execFile:dj}=require("child_process"),fe=fc(),fx=process.platform==="linux",Ip={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},Vr=2e4,cx=12e3,ux=6e4,pc=null;function fj(){return pc||(pc=String(process.env.PATH||"").split(hn.delimiter).filter(Boolean),pc)}function He(t){if(!t)return"";if(t.indexOf(hn.sep)>=0)try{return gt.accessSync(t,gt.constants.X_OK),t}catch{return""}for(let e of fj()){let n=hn.join(e,t);try{return gt.accessSync(n,gt.constants.X_OK),n}catch{}}return""}function
|
|
446
|
+
\u2026[\u5DF2\u622A\u65AD\uFF0C\u5171 `+n.length+" \u5B57\u7B26\uFF1B\u53EF\u8C03\u5927 maxChars \u6216\u4F20 region \u53EA\u770B\u4E00\u5757]"}lx.exports={num:Gr,clamp:QP,parseRegion:ej,clampRegion:tj,imageSize:ij,lastShotInfo:nj,setLastShot:sj,pointOnScreen:rj,toScreenPoint:oj,fmtSize:ox,screenListDesc:lj,signed:Tp,describeShot:cj,formatOcr:uj,clipText:ax,ensureTmpDir:sx,pruneTmp:rx,tmpFile:aj,DEFAULT_MAX_WIDTH:XP,TMP_DIR:ta}});var Sx=ne((bD,vx)=>{var gt=require("fs"),wD=require("os"),hn=require("path"),{execFile:dj}=require("child_process"),fe=fc(),fx=process.platform==="linux",Ip={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},Vr=2e4,cx=12e3,ux=6e4,pc=null;function fj(){return pc||(pc=String(process.env.PATH||"").split(hn.delimiter).filter(Boolean),pc)}function He(t){if(!t)return"";if(t.indexOf(hn.sep)>=0)try{return gt.accessSync(t,gt.constants.X_OK),t}catch{return""}for(let e of fj()){let n=hn.join(e,t);try{return gt.accessSync(n,gt.constants.X_OK),n}catch{}}return""}function is(){let t=String(process.env.DISPLAY||""),e=String(process.env.WAYLAND_DISPLAY||""),n=String(process.env.XDG_SESSION_TYPE||"");return t?{kind:"x11",display:t,wayland:e,type:n}:e||n==="wayland"?{kind:"wayland",display:"",wayland:e,type:n}:{kind:"none",display:"",wayland:"",type:n}}function Np(){return{x11Shot:He("ffmpeg")||He("import")||He("scrot")||"",waylandShot:He("grim")||He("gnome-screenshot")||"",xdotool:He("xdotool")||"",wtype:He("wtype")||"",wmctrl:He("wmctrl")||"",tesseract:He("tesseract")||""}}function Cp(){let t=is(),e=Np();return t.kind==="x11"?e.x11Shot:t.kind==="wayland"?e.waylandShot:""}function Ap(){let t=is(),e=Np();return t.kind==="x11"||t.kind==="wayland"?e.xdotool||e.wtype:""}function px(){if(!fx)return{ok:!1,platform:process.platform,reason:"\u8FD9\u4E2A\u540E\u7AEF\u53EA\u7528\u4E8E Linux\uFF08\u5F53\u524D\u5E73\u53F0 "+process.platform+"\uFF09"};let t=is();if(t.kind==="none")return{ok:!1,platform:"linux",reason:'\u6CA1\u6709\u56FE\u5F62\u4F1A\u8BDD\uFF1ADISPLAY \u4E0E WAYLAND_DISPLAY \u90FD\u6CA1\u8BBE\u7F6E\u3002\u65E0\u5934\u73AF\u5883\u8BF7\u5148\u8D77\u4E00\u4E2A X server\uFF08\u4F8B\u5982 xvfb-run -s "-screen 0 1280x800x24" luban ...\uFF09\uFF0C\u5E76\u628A DISPLAY \u6307\u8FC7\u53BB'};let e=Cp(),n=Ap();return e?n?{ok:!0,platform:"linux",reason:""}:{ok:!0,platform:"linux",reason:"",notes:["\u6CA1\u6709 xdotool\uFF1A\u53EA\u80FD\u622A\u56FE / \u5217\u7A97\u53E3\uFF0C\u70B9\u51FB\u3001\u8F93\u5165\u3001\u6309\u952E\u4F1A\u62A5\u9519\u3002sudo apt install xdotool"]}:{ok:!1,platform:"linux",reason:"\u7F3A\u5C11\u622A\u56FE\u5DE5\u5177\uFF08"+(t.kind==="x11"?"ffmpeg / imagemagick(import) / scrot":"grim \u6216 gnome-screenshot")+"\uFF09\uFF1A"+(t.kind==="x11"?"sudo apt install ffmpeg imagemagick":"sudo apt install grim\uFF08GNOME \u7528 gnome-screenshot\uFF09")}}function Fn(){let t=px();if(!t.ok)throw new Error(t.reason)}function Jr(){let t=He("xdotool");if(!t)throw new Error(is().kind==="wayland"?"Wayland \u4F1A\u8BDD\u4E0B\u70B9\u51FB / \u62D6\u52A8 / \u6EDA\u52A8\u6CA1\u6709\u53EF\u7528\u7684\u901A\u7528\u65B9\u6848\uFF08xdotool \u6253\u4E0D\u5230\u539F\u751F Wayland \u7A97\u53E3\uFF09\uFF1B\u53EF\u4EE5\u88C5 xdotool \u5BF9 XWayland \u5E94\u7528\u64CD\u4F5C\uFF0C\u6216\u6539\u7528 gnome \u7684\u8FDC\u7A0B\u684C\u9762\u3002\u6253\u5B57\u53EF\u4EE5\u7528 wtype":"\u7F3A\u5C11 xdotool\uFF1A\u70B9\u51FB / \u8F93\u5165 / \u6309\u952E\u90FD\u4F9D\u8D56\u5B83\u3002Ubuntu \u4E0A\u88C5\uFF1Asudo apt install xdotool");return t}function ve(t,e,n){let s=n||{};return new Promise(function(r,o){dj(t,e,{timeout:s.timeoutMs||cx,maxBuffer:16*1024*1024,env:process.env,encoding:"buffer"},function(i,a,l){let c=a?a.toString("utf8"):"",u=l?l.toString("utf8"):"";if(i){if(i.killed&&i.signal){o(new Error(hn.basename(t)+" \u8D85\u65F6\uFF08"+(s.timeoutMs||cx)+"ms\uFF09"));return}let d=(u.split(`
|
|
447
447
|
`).filter(Boolean)[0]||i.message||"").trim();o(new Error(hn.basename(t)+" \u5931\u8D25\uFF1A"+d));return}r({stdout:c,stderr:u})})})}function hx(t){let e=[];return String(t||"").split(`
|
|
448
|
-
`).forEach(function(n){let s=n.match(/^\s*(\d+):\s+([+*]*)(\S+)\s+(\d+)\/\d+x(\d+)\/\d+\+(-?\d+)\+(-?\d+)/);s&&e.push({index:e.length,name:s[3],x:Number(s[6]),y:Number(s[7]),width:Number(s[4]),height:Number(s[5]),scale:1,primary:s[2].indexOf("*")>=0})}),e}function mx(t){let e=String(t||"").match(/dimensions:\s+(\d+)x(\d+)\s+pixels/);return e?{index:0,name:"screen-1",x:0,y:0,width:Number(e[1]),height:Number(e[2]),scale:1,primary:!0}:null}async function sa(){Fn();let t=He("xrandr");if(t)try{let s=await ve(t,["--listmonitors"],{timeoutMs:8e3}),r=hx(s.stdout);if(r.length)return r}catch{}let e=He("xdpyinfo");if(e)try{let s=await ve(e,[],{timeoutMs:8e3}),r=mx(s.stdout);if(r)return[r]}catch{}if(
|
|
448
|
+
`).forEach(function(n){let s=n.match(/^\s*(\d+):\s+([+*]*)(\S+)\s+(\d+)\/\d+x(\d+)\/\d+\+(-?\d+)\+(-?\d+)/);s&&e.push({index:e.length,name:s[3],x:Number(s[6]),y:Number(s[7]),width:Number(s[4]),height:Number(s[5]),scale:1,primary:s[2].indexOf("*")>=0})}),e}function mx(t){let e=String(t||"").match(/dimensions:\s+(\d+)x(\d+)\s+pixels/);return e?{index:0,name:"screen-1",x:0,y:0,width:Number(e[1]),height:Number(e[2]),scale:1,primary:!0}:null}async function sa(){Fn();let t=He("xrandr");if(t)try{let s=await ve(t,["--listmonitors"],{timeoutMs:8e3}),r=hx(s.stdout);if(r.length)return r}catch{}let e=He("xdpyinfo");if(e)try{let s=await ve(e,[],{timeoutMs:8e3}),r=mx(s.stdout);if(r)return[r]}catch{}if(is().kind==="wayland")return[{index:0,name:"wayland-0",x:0,y:0,width:0,height:0,scale:1,primary:!0}];throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u5C3A\u5BF8\uFF1Axrandr / xdpyinfo \u90FD\u6CA1\u6210\u529F\uFF08X \u4F1A\u8BDD\u662F\u5426\u6B63\u5E38\uFF1FDISPLAY="+(process.env.DISPLAY||"(\u7A7A)")+"\uFF09")}function dx(t){return Math.max(2,Math.round(t/2)*2)}async function pj(t,e){let n=is(),s={x:Math.round(e.x),y:Math.round(e.y),width:dx(e.width),height:dx(e.height)},r=[];if(n.kind==="x11"){let o=He("ffmpeg");if(o)try{if(await ve(o,["-y","-loglevel","error","-f","x11grab","-video_size",s.width+"x"+s.height,"-i",n.display+"+"+s.x+","+s.y,"-frames:v","1",t],{timeoutMs:Vr}),gt.existsSync(t)&>.statSync(t).size>1024)return"ffmpeg";r.push("ffmpeg \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let i=He("import");if(i)try{if(await ve(i,["-silent","-window","root","-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",t],{timeoutMs:Vr}),gt.existsSync(t)&>.statSync(t).size>1024)return"import";r.push("import \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let a=He("scrot");if(a)try{if(await ve(a,["-o","-z","-a",[s.x,s.y,s.width,s.height].join(","),t],{timeoutMs:Vr}),gt.existsSync(t)&>.statSync(t).size>1024)return"scrot";r.push("scrot \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}}else if(n.kind==="wayland"){let o=He("grim");if(o)try{if(await ve(o,["-g",s.x+","+s.y+" "+s.width+"x"+s.height,t],{timeoutMs:Vr}),gt.existsSync(t)&>.statSync(t).size>1024)return"grim";r.push("grim \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}let i=He("gnome-screenshot");if(i)try{if(await ve(i,["-f",t],{timeoutMs:Vr}),gt.existsSync(t)&>.statSync(t).size>1024){let l=(await sa().catch(function(){return[]}))[0];if(l&&l.width>0&&(s.width<l.width||s.height<l.height||s.x!==0||s.y!==0)){let u=He("convert")||He("magick");if(u){let d=fe.tmpFile("png");await ve(u,[t,"-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",d],{timeoutMs:Vr});try{gt.renameSync(d,t)}catch{}}}return"gnome-screenshot"}r.push("gnome-screenshot \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}}try{gt.unlinkSync(t)}catch{}throw new Error("\u622A\u5C4F\u5931\u8D25\uFF1A"+(r.length?r.join(" / "):"\u6CA1\u6709\u53EF\u7528\u7684\u622A\u56FE\u5DE5\u5177")+"\u3002Ubuntu \u4E0A\u88C5\uFF1Asudo apt install ffmpeg imagemagick")}async function gx(t){Fn();let e=t||{},n=await sa(),s=fe.num(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F");let o=fe.parseRegion(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let w=fe.clampRegion(n,o);if(!w)throw new Error("region "+o.x+","+o.y+" "+o.width+"\xD7"+o.height+" \u5B8C\u5168\u5728\u5C4F\u5E55\u5916\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF08\u50CF\u7D20\uFF09\uFF1A"+fe.screenListDesc(n));a=w.region,l=w.clipped?w:null}let c=a||{x:r.x,y:r.y,width:r.width,height:r.height};(!c.width||!c.height)&&(c.width=c.width||1920,c.height=c.height||1080);let u=fe.tmpFile("png");await pj(u,c);let d=await fe.imageSize(u),f=a?a.width:r.width||d.width,p=a?a.height:r.height||d.height,h=fe.clamp(e.maxWidth||fe.DEFAULT_MAX_WIDTH,320,4096),m=Math.min(f,h),y=u;if(d.width>m){let w=fe.tmpFile("jpg"),T=He("convert")||He("magick");try{if(!T)throw new Error("\u6CA1\u6709 ImageMagick");await ve(T,[u,"-resize",m+"x","-quality","65",w],{timeoutMs:Vr});try{gt.unlinkSync(u)}catch{}y=w}catch{try{gt.unlinkSync(w)}catch{}}}return hj(y,r,a,f,p,l,i)}async function hj(t,e,n,s,r,o,i){let a=await fe.imageSize(t),l=gt.readFileSync(t),c=/\.png$/i.test(t),u=a.width>0?s/a.width:1,d=n?n.x:e.x||0,f=n?n.y:e.y||0;return fe.setLastShot({file:t,width:a.width,height:a.height,pointWidth:s,pointHeight:r,ratio:u,originX:d,originY:f,clipped:!!(o&&o.clipped),requestedRegion:o?o.requested:null,displayIgnored:i,at:Date.now()}),{file:t,dataUrl:(c?"data:image/png;base64,":"data:image/jpeg;base64,")+l.toString("base64"),width:a.width,height:a.height,pointWidth:s,pointHeight:r,ratio:u,originX:d,originY:f,screen:e,region:n,clipped:!!(o&&o.clipped),requestedRegion:o?o.requested:null,displayIgnored:i}}function yx(t){let e=[];return String(t||"").split(`
|
|
449
449
|
`).forEach(function(n){let s=n.match(/^(0x[0-9a-fA-F]+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s*(.*)$/);s&&e.push({id:s[1],app:"",title:String(s[8]||"").trim(),pid:0,x:Number(s[3]),y:Number(s[4]),width:Number(s[5]),height:Number(s[6])})}),e}async function mj(t){Fn();let e=t||{},n=He("wmctrl"),s=[];if(n){let a=await ve(n,["-lG"],{timeoutMs:8e3});s=yx(a.stdout)}else{let a=He("xdotool");if(!a)throw new Error("\u5217\u7A97\u53E3\u9700\u8981 wmctrl \u6216 xdotool\u3002Ubuntu \u4E0A\u88C5\uFF1Asudo apt install wmctrl xdotool");let c=(await ve(a,["search","--onlyvisible","--name",""],{timeoutMs:8e3})).stdout.split(`
|
|
450
450
|
`).map(function(u){return u.trim()}).filter(Boolean);for(let u of c.slice(0,60))try{let d=await ve(a,["getwindowgeometry","--shell",u],{timeoutMs:5e3}),f={};d.stdout.split(`
|
|
451
451
|
`).forEach(function(h){let m=h.match(/^([A-Z_]+)=(-?\d+)$/);m&&(f[m[1]]=Number(m[2]))});let p=await ve(a,["getwindowname",u],{timeoutMs:5e3}).catch(function(){return{stdout:""}});s.push({id:u,app:"",title:String(p.stdout||"").trim(),pid:0,x:f.X||0,y:f.Y||0,width:f.WIDTH||0,height:f.HEIGHT||0})}catch{}}let r=fe.clamp(e.limit||30,1,100),o=s.filter(function(a){return a.title});return{windows:(o.length?o:s).slice(0,r),total:s.length,unnamed:s.length-o.length}}async function wx(){Fn();let t=Jr(),e=await ve(t,["getactivewindow"],{timeoutMs:6e3}).catch(function(){return{stdout:""}}),n=String(e.stdout||"").trim();if(!n)return{name:"",bundleId:"",pid:0};let s=await ve(t,["getwindowname",n],{timeoutMs:6e3}).catch(function(){return{stdout:""}}),r=await ve(t,["getwindowpid",n],{timeoutMs:6e3}).catch(function(){return{stdout:"0"}});return{name:String(s.stdout||"").trim(),bundleId:"",pid:Number(String(r.stdout||"0").trim())||0}}async function gj(){Fn();let t=Jr(),e=await ve(t,["getmouselocation","--shell"],{timeoutMs:6e3}),n={x:0,y:0};return e.stdout.split(`
|
|
452
452
|
`).forEach(function(s){let r=s.match(/^([XY])=(-?\d+)$/);r&&(n[r[1].toLowerCase()]=Number(r[2]))}),n}function bx(t){let e=String(t||"").split(`
|
|
453
453
|
`),n=[];for(let r of e){let o=r.split(" ");if(o.length<12||String(o[0]).trim()!=="5")continue;let i=o.slice(11).join(" ").trim();i&&n.push({block:o[2],par:o[3],line:o[4],x:Number(o[6])||0,y:Number(o[7])||0,w:Number(o[8])||0,h:Number(o[9])||0,conf:Number(o[10])||0,t:i})}let s=new Map;for(let r of n){let o=r.block+"."+r.par+"."+r.line,i=s.get(o);i?(i.t+=" "+r.t,i.x=Math.min(i.x,r.x),i.y=Math.min(i.y,r.y),i.x2=Math.max(i.x2,r.x+r.w),i.y2=Math.max(i.y2,r.y+r.h)):s.set(o,{t:r.t,x:r.x,y:r.y,x2:r.x+r.w,y2:r.y+r.h})}return Array.from(s.values()).map(function(r){return{t:r.t,x:r.x,y:r.y,w:r.x2-r.x,h:r.y2-r.y}})}async function yj(t){Fn();let e=t||{},n=e.shot||await gx({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=fe.clamp(e.maxChars||6e3,500,2e4),r=He("tesseract");if(!r)throw new Error("OCR \u9700\u8981 tesseract\uFF08Ubuntu\uFF1Asudo apt install tesseract-ocr tesseract-ocr-chi-sim\uFF09\uFF1B\u6CA1\u88C5\u7684\u8BDD\u8BA9\u5BBF\u4E3B\u6A21\u578B\u76F4\u63A5\u770B\u622A\u56FE\uFF08\u622A\u56FE\u5DF2\u968F\u7ED3\u679C\u8FD4\u56DE\uFF09");let o="";try{o=(await ve(r,[n.file,"stdout","-l","chi_sim+eng","tsv"],{timeoutMs:ux})).stdout}catch{o=(await ve(r,[n.file,"stdout","-l","eng","tsv"],{timeoutMs:ux})).stdout}let i=bx(o).map(function(a){return{t:a.t,x:Math.round(n.originX+a.x*n.ratio),y:Math.round(n.originY+a.y*n.ratio),w:Math.round(a.w*n.ratio),h:Math.round(a.h*n.ratio)}});return{text:fe.formatOcr(i,n,s,Ip,"\uFF08\u622A\u56FE\u4E0A\u6CA1\u8BC6\u522B\u5230\u6587\u5B57\uFF1Btesseract \u5BF9\u6DF1\u8272\u4E3B\u9898 / \u5C0F\u5B57\u4E0D\u654F\u611F\uFF0C\u5FC5\u8981\u65F6\u8BA9\u6A21\u578B\u76F4\u63A5\u770B\u56FE\uFF09"),items:i.length,shot:n}}var Op={return:65293,enter:65293,tab:65289,space:32,delete:65288,backspace:65288,escape:65307,esc:65307,left:65361,up:65362,right:65363,down:65364,home:65360,end:65367,pageup:65365,pagedown:65366,insert:65379,forwarddelete:65535,f1:65470,f2:65471,f3:65472,f4:65473,f5:65474,f6:65475,f7:65476,f8:65477,f9:65478,f10:65479,f11:65480,f12:65481},Ep={"!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/","~":"`"},Pp={shift:1,ctrl:2,control:2,alt:4,option:4,opt:4,cmd:8,command:8,meta:8,super:8,win:8},wj={1:"shift",2:"ctrl",4:"alt",8:"super"},bj={65293:"Return",65289:"Tab",32:"space",65288:"BackSpace",65307:"Escape",65361:"Left",65362:"Up",65363:"Right",65364:"Down",65360:"Home",65367:"End",65365:"Page_Up",65366:"Page_Down",65379:"Insert",65535:"Delete",65470:"F1",65471:"F2",65472:"F3",65473:"F4",65474:"F5",65475:"F6",65476:"F7",65477:"F8",65478:"F9",65479:"F10",65480:"F11",65481:"F12"};function jp(t){if(t==null)return null;let e=String(t);if(e.length!==1)return null;if(e===" ")return{code:32,shift:!1};if(e===`
|
|
454
454
|
`||e==="\r")return{code:65293,shift:!1};if(e===" ")return{code:65289,shift:!1};if(Ep[e])return{code:Ep[e].charCodeAt(0),shift:!0};if(/[A-Z]/.test(e))return{code:e.toLowerCase().charCodeAt(0),shift:!0};let n=e.charCodeAt(0);return n<32||n>126?null:{code:n,shift:!1}}function kx(t){let e=String(t??"").split("+").map(function(l){return l.trim()}).filter(Boolean);if(!e.length)throw new Error("keys \u4E3A\u7A7A\uFF0C\u793A\u4F8B\uFF1Actrl+shift+p");let n=e.pop(),s=0;for(let l of e){let c=Pp[String(l).toLowerCase()];if(c==null)throw new Error("\u4E0D\u8BA4\u8BC6\u7684\u4FEE\u9970\u952E\u300C"+l+"\u300D\uFF1B\u53EF\u7528\uFF1Actrl / shift / alt\uFF08option\uFF09/ cmd\uFF08super\uFF09");s|=c}let r=String(n).toLowerCase(),o=n.length===1&&!/^[a-z]$/.test(n)?jp(n):null,i=Op[r]!=null?{code:Op[r],shift:!1}:null,a=o||i||jp(n);if(!a)throw new Error("\u4E0D\u8BA4\u8BC6\u7684\u952E\u300C"+n+"\u300D\uFF1B\u53EF\u7528\u5B57\u6BCD / \u6570\u5B57 / return / tab / space / escape / \u65B9\u5411\u952E / f1~f12");return{code:a.code,flags:s|(a.shift?Pp.shift:0)}}function xx(t){let e=[];for(let s of[2,4,8,1])t.flags&s&&e.push(wj[s]);let n=bj[t.code]||(t.code>=32&&t.code<=126?String.fromCharCode(t.code):null);if(!n)throw new Error("\u952E\u7801 "+t.code+" \u65E0\u6CD5\u6620\u5C04\u5230 xdotool keysym");return e.concat([n]).join("+")}async function na(t,e){let n=await sa();if(!fe.pointOnScreen(n,t,e))throw new Error("\u5750\u6807 ("+t+", "+e+") \u4E0D\u5728\u4EFB\u4F55\u5C4F\u5E55\u4E0A\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF1A"+fe.screenListDesc(n))}async function kj(t){Fn();let e=t||{},n=fe.toScreenPoint(e.x,e.y,e);await na(n.x,n.y);let s=e.button==="right"?3:e.button==="middle"?2:1,r=e.count===2?2:1;if(!e.dry){let i=Jr();await ve(i,["mousemove","--sync",String(n.x),String(n.y)],{timeoutMs:6e3});let a=["click"];r>1&&a.push("--repeat",String(r)),a.push(String(s)),await ve(i,a,{timeoutMs:6e3})}return(e.button==="right"?"\u53F3\u952E":e.button==="middle"?"\u4E2D\u952E":r===2?"\u53CC\u51FB":"\u5355\u51FB")+" ("+n.x+", "+n.y+")"+(e.dry,"\u3002")}async function xj(t){Fn();let e=t||{},n=fe.toScreenPoint(e.x,e.y,e);if(await na(n.x,n.y),!e.dry){let s=Jr();await ve(s,["mousemove","--sync",String(n.x),String(n.y)],{timeoutMs:6e3})}return"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function vj(t){Fn();let e=t||{},n=fe.toScreenPoint(e.x,e.y,e),s=fe.toScreenPoint(e.toX,e.toY,e);if(await na(n.x,n.y),await na(s.x,s.y),!e.dry){let r=Jr();await ve(r,["mousemove","--sync",String(n.x),String(n.y)],{timeoutMs:6e3}),await ve(r,["mousedown","1"],{timeoutMs:6e3});for(let o=1;o<=4;o++){let i=Math.round(n.x+(s.x-n.x)*o/4),a=Math.round(n.y+(s.y-n.y)*o/4);await ve(r,["mousemove","--sync",String(i),String(a)],{timeoutMs:6e3})}await ve(r,["mouseup","1"],{timeoutMs:6e3})}return"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function Sj(t){Fn();let e=t||{},n=fe.toScreenPoint(e.x,e.y,e);await na(n.x,n.y);let s=fe.num(e.dy,0),r=fe.num(e.dx,0);if(!s&&!r)throw new Error("scroll \u9700\u8981 dy\uFF08\u6216 dx\uFF09\uFF0C\u6B63\u6570 = \u5411\u4E0B / \u5411\u53F3");if(!e.dry){let o=Jr();await ve(o,["mousemove","--sync",String(n.x),String(n.y)],{timeoutMs:6e3});let i=Math.min(Math.round(Math.abs(s)/100)||1,20),a=s>0?5:4,l=r>0?7:6;s&&await ve(o,["click","--repeat",String(i),String(a)],{timeoutMs:8e3}),r&&await ve(o,["click","--repeat",String(i),String(l)],{timeoutMs:8e3})}return"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function _j(t){Fn();let e=t||{},n=kx(e.keys);if(!e.dry){let s=Jr();await ve(s,["key","--clearmodifiers",xx(n)],{timeoutMs:8e3})}return"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function Tj(t){Fn();let e=t||{},n=String(e.text==null?"":e.text);if(!n&&!e.submit)throw new Error("type \u9700\u8981 text\uFF08\u8981\u56DE\u8F66\u5C31\u52A0 submit: true\uFF09");let s="";if(e.dry)s="\u9884\u6F14\uFF08dry\uFF09";else{let o=He("xdotool");if(o)n&&await ve(o,["type","--clearmodifiers","--delay","12","--",n],{timeoutMs:3e4}),e.submit&&await ve(o,["key","--clearmodifiers","Return"],{timeoutMs:6e3}),s="xdotool \u9010\u5B57\u8F93\u5165 "+Array.from(n).length+" \u4E2A\u5B57\u7B26";else{let i=He("wtype");if(!i)throw new Error("\u6253\u5B57\u9700\u8981 xdotool\uFF08X11\uFF09\u6216 wtype\uFF08Wayland\uFF09\u3002Ubuntu\uFF1Asudo apt install xdotool");n&&await ve(i,["--",n],{timeoutMs:3e4}),e.submit&&await ve(i,["-k","Return"],{timeoutMs:6e3}),s="wtype \u8F93\u5165 "+Array.from(n).length+" \u4E2A\u5B57\u7B26\uFF08Wayland\uFF09"}}let r=await wx().catch(function(){return null});return"\u5DF2\u8F93\u5165\uFF08"+s+(e.submit?" + \u56DE\u8F66":"")+"\uFF09"+(r&&r.name?"\uFF0C\u76EE\u6807\u7A97\u53E3\uFF1A"+r.name:"")+"\u3002"+(n?`
|
|
455
|
-
\u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}function Mj(t){return fe.describeShot(t,Ip)}function Cj(t,e,n,s){return fe.formatOcr(t,e,n,Ip,s)}async function Aj(){let t={ok:!1,platform:"linux",session:
|
|
455
|
+
\u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}function Mj(t){return fe.describeShot(t,Ip)}function Cj(t,e,n,s){return fe.formatOcr(t,e,n,Ip,s)}async function Aj(){let t={ok:!1,platform:"linux",session:is().kind,screenshot:"",input:"",screens:[],notes:[]};if(!fx)return t.notes.push("\u5F53\u524D\u5E73\u53F0\u4E0D\u662F Linux"),t;let e=Np();t.screenshot=Cp()?hn.basename(Cp()):"",t.input=Ap()?hn.basename(Ap()):"",t.tools={x11Shot:e.x11Shot?hn.basename(e.x11Shot):"",waylandShot:e.waylandShot?hn.basename(e.waylandShot):"",xdotool:e.xdotool?hn.basename(e.xdotool):"",wtype:e.wtype?hn.basename(e.wtype):"",wmctrl:e.wmctrl?hn.basename(e.wmctrl):"",tesseract:e.tesseract?hn.basename(e.tesseract):""},!t.screenshot&&is().kind!=="none"&&t.notes.push("\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u53EF\u7528\u7684\u622A\u56FE\u5DE5\u5177\uFF08X11 \u9700\u8981 ffmpeg / import / scrot\uFF1BWayland \u9700\u8981 grim / gnome-screenshot\uFF09"),!t.input&&is().kind!=="none"&&t.notes.push("\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u53EF\u7528\u7684\u8F93\u5165\u5DE5\u5177\uFF08xdotool\uFF0CWayland \u6253\u5B57\u53EF\u7528 wtype\uFF09"),is().kind==="wayland"&&t.notes.push("Wayland \u4F1A\u8BDD\uFF1Axdotool \u53EA\u80FD\u64CD\u4F5C XWayland \u5E94\u7528\uFF1B\u539F\u751F Wayland \u7A97\u53E3\u7684\u70B9\u51FB / \u62D6\u52A8\u4E0D\u53EF\u7528");try{t.screens=await sa()}catch(n){t.notes.push(String(n.message||n))}return He("tesseract")||t.notes.push("\u6CA1\u88C5 tesseract\uFF1Aocr \u52A8\u4F5C\u4E0D\u53EF\u7528\uFF08\u622A\u56FE\u4ECD\u7136\u53EF\u7528\uFF09"),t.ok=!!(t.screenshot&&t.input),t}vx.exports={available:px,check:Aj,screens:sa,capture:gx,windows:mj,frontmost:wx,cursor:gj,ocr:yj,click:kj,move:xj,drag:vj,scroll:Sj,type:Tj,key:_j,parseKeys:kx,charToKey:jp,keySpecOf:xx,parseXrandr:hx,parseXdpyinfo:mx,parseWmctrl:yx,parseTsv:bx,describeShot:Mj,formatOcr:Cj,clipText:fe.clipText,parseRegion:fe.parseRegion,clampRegion:fe.clampRegion,imageSize:fe.imageSize,lastShotInfo:fe.lastShotInfo,num:fe.num,clamp:fe.clamp,toScreenPoint:fe.toScreenPoint,pointOnScreen:fe.pointOnScreen,screenListDesc:fe.screenListDesc,fmtSize:fe.fmtSize,signed:fe.signed,ensureTmpDir:fe.ensureTmpDir,pruneTmp:fe.pruneTmp,tmpFile:fe.tmpFile,KEY_CODES:Op,FLAGS:Pp,SHIFT_CHARS:Ep,TMP_DIR:fe.TMP_DIR,DEFAULT_MAX_WIDTH:fe.DEFAULT_MAX_WIDTH}});var Bx=ne((kD,qx)=>{var Oj=require("crypto"),mn=require("fs"),Tx=require("os"),ra=require("path"),{execFile:Ej,spawn:Pj}=require("child_process"),jj=fc(),{num:hc,clamp:Do,parseRegion:Mx,clampRegion:Cx,imageSize:Ax,lastShotInfo:Ij,setLastShot:Nj,pointOnScreen:Ox,toScreenPoint:Ro,fmtSize:Fj,screenListDesc:Dp,signed:Lj,describeShot:Dj,formatOcr:Ex,clipText:Rj,ensureTmpDir:$j,pruneTmp:qj,tmpFile:Px,DEFAULT_MAX_WIDTH:jx,TMP_DIR:Bj}=jj,Uj=process.platform==="win32",Wj=6e4,_x=2e4,Kj=3e4,Rp={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},$p=`using System;
|
|
456
456
|
using System.Collections.Generic;
|
|
457
457
|
using System.Drawing;
|
|
458
458
|
using System.Drawing.Drawing2D;
|
|
@@ -906,7 +906,7 @@ class Program {
|
|
|
906
906
|
`;function Hj(){let t=process.env.WINDIR||"C:\\Windows";return[ra.join(t,"Microsoft.NET","Framework64","v4.0.30319","csc.exe"),ra.join(t,"Microsoft.NET","Framework","v4.0.30319","csc.exe")]}function qp(){return ra.join(Tx.homedir(),".luban","bin")}function Bp(){let t=Oj.createHash("sha1").update($p,"utf8").digest("hex").slice(0,8);return ra.join(qp(),"luban-cu-"+t+".exe")}function Ix(){try{return mn.existsSync(Bp())}catch{return!1}}var Lo=null;function Nx(){let t=Bp();if(Ix())return Promise.resolve(t);if(Lo)return Lo;let e=gc();return e.ok?(Lo=new Promise(function(n,s){let r=Hj().filter(function(l){try{return mn.existsSync(l)}catch{return!1}})[0];if(!r){s(new Error("\u627E\u4E0D\u5230 csc.exe\uFF08.NET Framework 4.0 \u7F16\u8BD1\u5668\uFF09\uFF1AWindows \u684C\u9762\u64CD\u4F5C\u9700\u8981\u7CFB\u7EDF\u81EA\u5E26\u7684 .NET Framework"));return}let o=ra.join(Tx.tmpdir(),"luban-cu-"+process.pid+"-"+Date.now()+".cs"),i=t+".tmp-"+process.pid;try{mn.mkdirSync(qp(),{recursive:!0}),mn.writeFileSync(o,"\uFEFF"+$p,"utf8")}catch(l){s(new Error("\u5199\u4E0D\u4E86\u4E34\u65F6\u6587\u4EF6\uFF1A"+(l&&l.message||l)));return}function a(){try{mn.rmSync(o,{force:!0})}catch{}try{mn.rmSync(i,{force:!0})}catch{}}Ej(r,["/nologo","/target:exe","/reference:System.Drawing.dll","/reference:System.Web.Extensions.dll","/out:"+i,o],{timeout:Wj,maxBuffer:8*1024*1024,encoding:"utf8"},function(l,c,u){let d=String(u||c||l&&l.message||"").trim();if(l){a(),s(new Error("\u7F16\u8BD1\u684C\u9762\u64CD\u4F5C helper \u5931\u8D25\uFF1A"+(d.slice(0,300)||"csc \u5931\u8D25")));return}try{mn.renameSync(i,t)}catch(f){a(),s(new Error("\u5B89\u88C5\u684C\u9762\u64CD\u4F5C helper \u5931\u8D25\uFF1A"+(f&&f.message||f)));return}a(),n(t)})}),Lo.then(function(){},function(){Lo=null}),Lo):Promise.reject(new Error(e.reason))}function Qt(t,e){return Nx().then(function(n){return new Promise(function(s,r){let o;try{o=Pj(n,[],{stdio:["pipe","pipe","pipe"]})}catch(c){r(new Error("helper \u542F\u52A8\u5931\u8D25\uFF1A"+(c&&c.message||c)));return}let i="",a="",l=setTimeout(function(){try{o.kill()}catch{}r(new Error("helper \u8D85\u65F6\uFF08"+(e||_x)+"ms\uFF09"))},e||_x);o.stdout.setEncoding("utf8"),o.stdout.on("data",function(c){i.length<8*1024*1024&&(i+=c)}),o.stderr.setEncoding("utf8"),o.stderr.on("data",function(c){a.length<4e3&&(a+=c)}),o.on("error",function(c){clearTimeout(l),r(new Error("helper \u542F\u52A8\u5931\u8D25\uFF1A"+(c&&c.message||c)))}),o.on("close",function(c){clearTimeout(l);let u=i.trim().split(`
|
|
907
907
|
`).pop()||"",d=null;try{d=JSON.parse(u)}catch{}if(d&&d.ok){s(d);return}let f=d&&d.error||a.trim()||"helper \u9000\u51FA code="+c;r(new Error(String(f).slice(0,800)))}),o.stdin.on("error",function(){}),o.stdin.end(JSON.stringify(t),"utf8")})})}function gc(){return Uj?{ok:!0,platform:"win32",reason:""}:{ok:!1,platform:process.platform,reason:"\u684C\u9762\u64CD\u4F5C\u76EE\u524D\u652F\u6301 macOS / Windows\uFF08Linux \u5C1A\u672A\u5B9E\u73B0\uFF09"}}function Dn(){let t=gc();if(!t.ok)throw new Error(t.reason)}async function yc(){Dn();let t=await Qt({action:"screens"});return(Array.isArray(t.screens)?t.screens:[]).map(function(n,s){return{index:s,x:n.x,y:n.y,width:n.width,height:n.height,scale:1,primary:!!n.primary}})}async function oa(t,e){let n=await yc();if(!Ox(n,t,e))throw new Error("\u5750\u6807 ("+t+", "+e+") \u4E0D\u5728\u4EFB\u4F55\u5C4F\u5E55\u8303\u56F4\u5185\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF08\u7269\u7406\u50CF\u7D20\uFF09\uFF1A"+Dp(n))}async function Up(t){Dn();let e=t||{},n=await yc(),s=hc(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F\uFF08EnumDisplayMonitors \u8FD4\u56DE\u7A7A\uFF09");let o=Mx(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let T=Cx(n,o);if(!T)throw new Error("region "+o.x+","+o.y+" "+o.width+"\xD7"+o.height+" \u5B8C\u5168\u5728\u5C4F\u5E55\u5916\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF08\u7269\u7406\u50CF\u7D20\uFF09\uFF1A"+Dp(n));a=T.region,l=T.clipped?T:null}let c=Px("jpg"),u={action:"capture",file:c,maxWidth:Do(e.maxWidth||jx,320,4096)};a?(u.x=a.x,u.y=a.y,u.w=a.width,u.h=a.height):s>1&&(u.x=r.x,u.y=r.y,u.w=r.width,u.h=r.height);try{await Qt(u,Kj)}catch(T){try{mn.unlinkSync(c)}catch{}throw new Error("\u622A\u5C4F\u5931\u8D25\uFF1A"+T.message)}let d=null;try{d=mn.statSync(c)}catch{d=null}if(!d||d.size<128){try{mn.unlinkSync(c)}catch{}throw new Error("\u622A\u5C4F\u7ED3\u679C\u4E3A\u7A7A\uFF08\u5C4F\u5E55\u53EF\u80FD\u5904\u4E8E\u9501\u5C4F\u72B6\u6001\uFF09")}let f={width:0,height:0};try{f=await Ax(c)}catch{f={width:0,height:0}}if(!(f.width>0&&f.height>0)){try{mn.unlinkSync(c)}catch{}throw new Error("\u622A\u5C4F\u7ED3\u679C\u65E0\u6CD5\u89E3\u6790\uFF1A"+c+" \u4E0D\u662F\u6709\u6548 JPEG\uFF08\u53EF\u80FD\u622A\u5C4F\u88AB\u7CFB\u7EDF\u62E6\u4E0B\uFF09")}let p=a?a.width:r.width,h=a?a.height:r.height,m=f.width>0?p/f.width:1,y=a?a.x:r.x,w=a?a.y:r.y;return Nj({file:c,width:f.width,height:f.height,pointWidth:p,pointHeight:h,ratio:m,originX:y,originY:w,clipped:!!(l&&l.clipped),requestedRegion:l?l.requested:null,displayIgnored:i,at:Date.now()}),{file:c,dataUrl:"data:image/jpeg;base64,"+mn.readFileSync(c).toString("base64"),width:f.width,height:f.height,pointWidth:p,pointHeight:h,ratio:m,originX:y,originY:w,screen:r,region:a,clipped:!!(l&&l.clipped),requestedRegion:l?l.requested:null,displayIgnored:i}}async function Gj(t){Dn();let n=Do((t||{}).limit||30,1,100),s=await Qt({action:"windows",limit:n}),r=Array.isArray(s.windows)?s.windows:[];return{windows:r,total:s.total||r.length,unnamed:s.unnamed||0}}async function Fx(){Dn();let t=await Qt({action:"frontmost"});return{name:t.name||"",pid:t.pid||0}}async function zj(){Dn();let t=await Qt({action:"cursor"});return{x:t.x||0,y:t.y||0}}var Ln={a:65,b:66,c:67,d:68,e:69,f:70,g:71,h:72,i:73,j:74,k:75,l:76,m:77,n:78,o:79,p:80,q:81,r:82,s:83,t:84,u:85,v:86,w:87,x:88,y:89,z:90,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,0:48,return:13,enter:13,tab:9,space:32,delete:8,backspace:8,escape:27,esc:27,left:37,right:39,down:40,up:38,home:36,end:35,pageup:33,pagedown:34,forwarddelete:46,insert:45,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:123,f12:124,"=":187,"-":189,"[":219,"]":221,";":186,"'":222,"\\":220,",":188,"/":191,".":190,"`":192},Fp={"!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/","~":"`"},ia={win:8,cmd:8,command:8,meta:8,super:8,shift:1,ctrl:2,control:2,alt:4,option:4,opt:4},Lx=[33,34,35,36,37,38,39,40,45,46,123,124];function Dx(t){return Lx.indexOf(t)>=0}function mc(t){if(t===" ")return{code:32,shift:!1};if(t===`
|
|
908
908
|
`||t==="\r")return{code:13,shift:!1};if(t===" ")return{code:9,shift:!1};let e=String(t).toLowerCase();if(Fp[t]){let n=Fp[t];return Ln[n]==null?null:{code:Ln[n],shift:!0}}return/[A-Z]/.test(t)&&Ln[e]!=null?{code:Ln[e],shift:!0}:Ln[t]!=null?{code:Ln[t],shift:!1}:null}function Rx(t){let e=String(t??"").split("+").map(function(a){return a.trim()}).filter(Boolean);if(!e.length)throw new Error("keys \u4E3A\u7A7A\uFF0C\u793A\u4F8B\uFF1Actrl+shift+p");let n=e.pop(),s=0;for(let a of e){let l=ia[String(a).toLowerCase()];if(l==null)throw new Error("\u4E0D\u8BA4\u8BC6\u7684\u4FEE\u9970\u952E\u300C"+a+"\u300D\uFF1B\u53EF\u7528\uFF1Awin\uFF08cmd\uFF09/ shift / ctrl / alt");s|=l}let r=String(n).toLowerCase(),i=(n.length===1&&!/^[a-z]$/.test(n)?mc(n):null)||(Ln[r]!=null?{code:Ln[r],shift:!1}:mc(n));if(!i)throw new Error("\u4E0D\u8BA4\u8BC6\u7684\u952E\u300C"+n+"\u300D\uFF1B\u53EF\u7528\u5B57\u6BCD / \u6570\u5B57 / return / tab / space / escape / \u65B9\u5411\u952E / f1~f12");return{code:i.code,flags:s|(i.shift?ia.shift:0)}}function $x(){return Qt({action:"clipboardGet"}).then(function(t){return t.text!=null?t.text:null}).catch(function(){return null})}function Lp(t){return Qt({action:"clipboardSet",text:String(t)}).then(function(){})}async function Vj(t){Dn();let e=t||{},n=e.shot||await Up({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=Do(e.maxChars||6e3,500,2e4);return{text:Ex([],n,s,Rp,"Windows \u540E\u7AEF\u6682\u672A\u5B9E\u73B0 OCR\uFF08\u65E0\u96F6\u4F9D\u8D56\u7684\u7CFB\u7EDF\u7EA7\u6587\u5B57\u8BC6\u522B API\uFF09\uFF0C\u8BF7\u6539\u7528 screenshot \u76F4\u63A5\u770B\u56FE"),items:0,shot:n}}async function Jj(t){Dn();let e=t||{},n=Ro(e.x,e.y,e);return await oa(n.x,n.y),await Qt({action:"click",x:n.x,y:n.y,button:e.button==="right"?"right":"left",count:e.count===2?2:1,dry:!!e.dry}),(e.button==="right"?"\u53F3\u952E":e.count===2?"\u53CC\u51FB":"\u5355\u51FB")+" ("+n.x+", "+n.y+")\u3002"}async function Xj(t){Dn();let e=t||{},n=Ro(e.x,e.y,e);return await oa(n.x,n.y),await Qt({action:"move",x:n.x,y:n.y,dry:!!e.dry}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function Yj(t){Dn();let e=t||{},n=Ro(e.x,e.y,e),s=Ro(e.toX,e.toY,e);return await oa(n.x,n.y),await oa(s.x,s.y),await Qt({action:"drag",x:n.x,y:n.y,toX:s.x,toY:s.y,dry:!!e.dry}),"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function Zj(t){Dn();let e=t||{},n=Ro(e.x,e.y,e);await oa(n.x,n.y);let s=hc(e.dy,0),r=hc(e.dx,0);if(!s&&!r)throw new Error("scroll \u9700\u8981 dy\uFF08\u6216 dx\uFF09\uFF0C\u6B63\u6570 = \u5411\u4E0B / \u5411\u53F3");return await Qt({action:"scroll",x:n.x,y:n.y,dy:Do(s,-5e3,5e3),dx:Do(r,-5e3,5e3),dry:!!e.dry}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function Qj(t){Dn();let e=t||{},n=Rx(e.keys);return await Qt({action:"key",code:n.code,flags:n.flags,ext:Dx(n.code),dry:!!e.dry}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function eI(t){Dn();let e=t||{},n=String(e.text==null?"":e.text);if(!n&&!e.submit)throw new Error("type \u9700\u8981 text\uFF08\u8981\u56DE\u8F66\u5C31\u52A0 submit: true\uFF09");let s=Array.from(n),r=s.map(mc),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?ia.shift:0,ext:Dx(c.code)}});e.submit&&l.push({code:Ln.return,flags:0,ext:!1}),l.length&&await Qt({action:"type",codes:l,dry:!!e.dry}),i="\u6309\u952E\u7801\u8F93\u5165 "+s.length+" \u4E2A\u5B57\u7B26"}else{let l=e.dry?null:await $x();e.dry||await Lp(n);let c=[{code:Ln.v,flags:ia.ctrl,ext:!1}];e.submit&&c.push({code:Ln.return,flags:0,ext:!1}),await Qt({action:"type",codes:c,dry:!!e.dry}),!e.dry&&l!=null&&setTimeout(function(){Lp(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await Fx().catch(function(){return null});return"\u5DF2\u8F93\u5165\uFF08"+i+(e.submit?" + \u56DE\u8F66":"")+"\uFF09"+(a&&a.name?"\uFF0C\u76EE\u6807\u5E94\u7528\uFF1A"+a.name:"")+"\u3002"+(n?`
|
|
909
|
-
\u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function tI(){let t=gc(),e={ok:!1,platform:process.platform,screens:[],screenRecording:!1,accessibility:!1,notes:[]};if(!t.ok)return e.notes.push(t.reason),e;try{e.screens=await yc()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Up({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{mn.unlinkSync(n.file)}catch{}}catch(n){e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A"+n.message)}return e.accessibility=!0,e.screenRecording||e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A\u8BF7\u786E\u8BA4\u5C4F\u5E55\u672A\u9501\u5C4F\u3001helper \u80FD\u6B63\u5E38\u622A\u5C4F\uFF08"+(e.notes[0]||"\u539F\u56E0\u672A\u77E5")+"\uFF09"),e.notes.push("\u6CE8\u610F\uFF1A\u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C\u7684\u7A97\u53E3\u6536\u4E0D\u5230\u666E\u901A\u8FDB\u7A0B\u7684\u70B9\u51FB / \u6309\u952E\uFF08UIPI \u89C4\u5219\uFF09\uFF0C\u9700\u8981\u65F6\u8BF7\u8BA9\u5BBF\u4E3B App \u4E5F\u4EE5\u7BA1\u7406\u5458\u8FD0\u884C"),e.ok=e.screenRecording&&e.accessibility,e}function nI(t){return Dj(t,Rp)}qx.exports={available:gc,check:tI,screens:yc,capture:Up,describeShot:nI,windows:Gj,frontmost:Fx,cursor:zj,ocr:Vj,click:Jj,move:Xj,drag:Yj,scroll:Zj,type:eI,key:Qj,parseKeys:Rx,charToKey:mc,formatOcr:Ex,clipText:Rj,readClipboard:$x,writeClipboard:Lp,parseRegion:Mx,clampRegion:Cx,imageSize:Ax,lastShotInfo:Ij,num:hc,clamp:Do,toScreenPoint:Ro,pointOnScreen:Ox,screenListDesc:Dp,fmtSize:Fj,signed:Lj,ensureTmpDir:$j,pruneTmp:qj,tmpFile:Px,KEY_CODES:Ln,FLAGS:ia,SHIFT_CHARS:Fp,EXT_KEYS:Lx,WIN_UNIT:Rp,CSHARP_SRC:$p,binDir:qp,binaryPath:Bp,hasBinary:Ix,ensureBinary:Nx,TMP_DIR:Bj,DEFAULT_MAX_WIDTH:jx}});var Qx=ne((xD,Zx)=>{var $o=require("fs"),{execFile:zp}=require("child_process"),sI=fc(),{num:wc,clamp:qo,parseRegion:Hx,clampRegion:Gx,imageSize:Vp,lastShotInfo:rI,setLastShot:oI,pointOnScreen:zx,toScreenPoint:Bo,fmtSize:iI,screenListDesc:Jp,signed:aI,describeShot:lI,formatOcr:Vx,clipText:cI,ensureTmpDir:uI,pruneTmp:dI,tmpFile:Wp,DEFAULT_MAX_WIDTH:Jx,TMP_DIR:fI}=sI,pI=process.platform==="darwin",Ux=2e4,
|
|
909
|
+
\u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function tI(){let t=gc(),e={ok:!1,platform:process.platform,screens:[],screenRecording:!1,accessibility:!1,notes:[]};if(!t.ok)return e.notes.push(t.reason),e;try{e.screens=await yc()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Up({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{mn.unlinkSync(n.file)}catch{}}catch(n){e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A"+n.message)}return e.accessibility=!0,e.screenRecording||e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A\u8BF7\u786E\u8BA4\u5C4F\u5E55\u672A\u9501\u5C4F\u3001helper \u80FD\u6B63\u5E38\u622A\u5C4F\uFF08"+(e.notes[0]||"\u539F\u56E0\u672A\u77E5")+"\uFF09"),e.notes.push("\u6CE8\u610F\uFF1A\u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C\u7684\u7A97\u53E3\u6536\u4E0D\u5230\u666E\u901A\u8FDB\u7A0B\u7684\u70B9\u51FB / \u6309\u952E\uFF08UIPI \u89C4\u5219\uFF09\uFF0C\u9700\u8981\u65F6\u8BF7\u8BA9\u5BBF\u4E3B App \u4E5F\u4EE5\u7BA1\u7406\u5458\u8FD0\u884C"),e.ok=e.screenRecording&&e.accessibility,e}function nI(t){return Dj(t,Rp)}qx.exports={available:gc,check:tI,screens:yc,capture:Up,describeShot:nI,windows:Gj,frontmost:Fx,cursor:zj,ocr:Vj,click:Jj,move:Xj,drag:Yj,scroll:Zj,type:eI,key:Qj,parseKeys:Rx,charToKey:mc,formatOcr:Ex,clipText:Rj,readClipboard:$x,writeClipboard:Lp,parseRegion:Mx,clampRegion:Cx,imageSize:Ax,lastShotInfo:Ij,num:hc,clamp:Do,toScreenPoint:Ro,pointOnScreen:Ox,screenListDesc:Dp,fmtSize:Fj,signed:Lj,ensureTmpDir:$j,pruneTmp:qj,tmpFile:Px,KEY_CODES:Ln,FLAGS:ia,SHIFT_CHARS:Fp,EXT_KEYS:Lx,WIN_UNIT:Rp,CSHARP_SRC:$p,binDir:qp,binaryPath:Bp,hasBinary:Ix,ensureBinary:Nx,TMP_DIR:Bj,DEFAULT_MAX_WIDTH:jx}});var Qx=ne((xD,Zx)=>{var $o=require("fs"),{execFile:zp}=require("child_process"),sI=fc(),{num:wc,clamp:qo,parseRegion:Hx,clampRegion:Gx,imageSize:Vp,lastShotInfo:rI,setLastShot:oI,pointOnScreen:zx,toScreenPoint:Bo,fmtSize:iI,screenListDesc:Jp,signed:aI,describeShot:lI,formatOcr:Vx,clipText:cI,ensureTmpDir:uI,pruneTmp:dI,tmpFile:Wp,DEFAULT_MAX_WIDTH:Jx,TMP_DIR:fI}=sI,pI=process.platform==="darwin",Ux=2e4,as=2e4,hI=6e4;function Kp(t,e,n){let s=n||{};return new Promise(function(r,o){zp(t,e,{timeout:s.timeoutMs||as,maxBuffer:8*1024*1024,encoding:"utf8",env:s.env||process.env},function(i,a,l){if(i){let c=new Error(String(l||""||i&&i.message||"\u547D\u4EE4\u5931\u8D25").trim().slice(0,800));c.code=i&&i.code,c.stdout=String(a||""),c.stderr=String(l||""),o(c);return}r({stdout:String(a||""),stderr:String(l||"")})})})}function gn(t,e){let n=e||{};return new Promise(function(s,r){let o=zp("osascript",["-l","JavaScript"],{timeout:n.timeoutMs||as,maxBuffer:8388608,encoding:"utf8",env:n.env||process.env},function(i,a,l){if(i){let c=new Error(String(l||""||i&&i.message||"osascript \u5931\u8D25").trim().slice(0,800));c.code=i&&i.code,c.stdout=String(a||""),r(c);return}s(String(a||"").replace(/\s+$/,""))});o.stdin.on("error",function(){}),o.stdin.end(String(t),"utf8")})}function Xp(){return pI?{ok:!0,platform:"darwin",reason:""}:{ok:!1,platform:process.platform,reason:"\u684C\u9762\u64CD\u4F5C\u76EE\u524D\u53EA\u652F\u6301 macOS\uFF08Windows / Linux \u7684\u8F93\u5165\u6CE8\u5165\u4E0E\u622A\u5C4F\u662F\u53E6\u4E00\u5957 API\uFF0C\u5C1A\u672A\u5B9E\u73B0\uFF09"}}function $n(){let t=Xp();if(!t.ok)throw new Error(t.reason)}async function kc(){$n();let t=['ObjC.import("AppKit");',"var list = $.NSScreen.screens;","var mainH = 0;","for (var i = 0; i < list.count; i++) {"," var f0 = list.objectAtIndex(i).frame;"," if (f0.origin.x === 0 && f0.origin.y === 0) { mainH = f0.size.height; }","}","var out = [];","for (var i = 0; i < list.count; i++) {"," var s = list.objectAtIndex(i);"," var f = s.frame;"," out.push({"," index: i,"," x: f.origin.x,"," y: mainH - (f.origin.y + f.size.height),"," width: f.size.width,"," height: f.size.height,"," scale: s.backingScaleFactor"," });","}","JSON.stringify(out);"].join(`
|
|
910
910
|
`),e=await gn(t,{timeoutMs:15e3}),n=[];try{n=JSON.parse(e)}catch{n=[]}return Array.isArray(n)?n:[]}async function aa(t,e){let n=await kc();if(!zx(n,t,e))throw new Error("\u5750\u6807 ("+t+", "+e+") \u4E0D\u5728\u4EFB\u4F55\u5C4F\u5E55\u8303\u56F4\u5185\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF08\u903B\u8F91\u70B9\uFF09\uFF1A"+Jp(n))}var ca=['ObjC.import("CoreGraphics");','ObjC.import("Foundation");',"var DRY = 0;","function postEvent(ev) { if (!DRY) { $.CGEventPost($.kCGHIDEventTap, ev); } }","function pt(x, y) { return { x: x, y: y }; }","function nap(us) { $.NSThread.sleepForTimeInterval(us / 1000000); }"].join(`
|
|
911
911
|
`);function ua(t){return t?1:0}function mI(t){let e=t.button==="right",n=e?"$.kCGMouseButtonRight":"$.kCGMouseButtonLeft",s=e?"$.kCGEventRightMouseDown":"$.kCGEventLeftMouseDown",r=e?"$.kCGEventRightMouseUp":"$.kCGEventLeftMouseUp",o=t.count===2?2:1;return[ca,"var DRY = "+ua(t.dry)+";","var x = "+t.x+", y = "+t.y+";","var target = pt(x, y);","postEvent($.CGEventCreateMouseEvent($(), $.kCGEventMouseMoved, target, $.kCGMouseButtonLeft));","nap(20000);","for (var i = 1; i <= "+o+"; i++) {"," var down = $.CGEventCreateMouseEvent($(), "+s+", target, "+n+");"," $.CGEventSetIntegerValueField(down, 1, i);"," postEvent(down);"," nap(20000);"," var up = $.CGEventCreateMouseEvent($(), "+r+", target, "+n+");"," $.CGEventSetIntegerValueField(up, 1, i);"," postEvent(up);"," nap(60000);","}","JSON.stringify({ ok: true, x: x, y: y, count: "+o+", dry: !!DRY });"].join(`
|
|
912
912
|
`)}function gI(t){return[ca,"var DRY = "+ua(t.dry)+";","var x = "+t.x+", y = "+t.y+";","postEvent($.CGEventCreateMouseEvent($(), $.kCGEventMouseMoved, pt(x, y), $.kCGMouseButtonLeft));","JSON.stringify({ ok: true, x: x, y: y, dry: !!DRY });"].join(`
|
|
@@ -918,10 +918,10 @@ class Program {
|
|
|
918
918
|
`+n+`
|
|
919
919
|
];`,"var src = $.CGEventSourceCreate($.kCGEventSourceStateHIDSystemState);","for (var i = 0; i < keys.length; i++) {"," var d = $.CGEventCreateKeyboardEvent(src, keys[i].code, true);"," if (keys[i].flags) { $.CGEventSetFlags(d, keys[i].flags); }"," postEvent(d);"," nap(6000);"," var u = $.CGEventCreateKeyboardEvent(src, keys[i].code, false);"," if (keys[i].flags) { $.CGEventSetFlags(u, keys[i].flags); }"," postEvent(u);"," nap(6000);","}","JSON.stringify({ ok: true, count: keys.length, dry: !!DRY });"].join(`
|
|
920
920
|
`)}function bI(){return Kp("pbpaste",[],{timeoutMs:5e3}).then(function(t){return t.stdout}).catch(function(){return null})}function Wx(t){return new Promise(function(e,n){let s=zp("pbcopy",[],{timeout:5e3,env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})},function(r){if(r){n(new Error("\u5199\u526A\u8D34\u677F\u5931\u8D25\uFF1A"+r.message));return}e()});s.stdin.on("error",function(){}),s.stdin.end(String(t),"utf8")})}async function Yp(t){$n();let e=t||{},n=await kc(),s=wc(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F\uFF08NSScreen \u8FD4\u56DE\u7A7A\uFF09");let o=Hx(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let w=Gx(n,o);if(!w)throw new Error("region "+o.x+","+o.y+" "+o.width+"\xD7"+o.height+" \u5B8C\u5168\u5728\u5C4F\u5E55\u5916\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF08\u903B\u8F91\u70B9\uFF09\uFF1A"+Jp(n));a=w.region,l=w.clipped?w:null}let c=Wp("jpg"),u=["-x","-o","-t","jpg"];a?u.push("-R",[a.x,a.y,a.width,a.height].join(",")):s>1&&u.push("-D",String(s)),u.push(c);try{await Kp("/usr/sbin/screencapture",u,{timeoutMs:Ux})}catch(w){let T=/permission|not permitted|could not create image|cannot/i.test(w.message)?"\uFF08\u5927\u6982\u7387\u662F\u6CA1\u7ED9\u5BBF\u4E3B App\u300C\u5C4F\u5E55\u5F55\u5236\u300D\u6743\u9650\uFF1A\u7CFB\u7EDF\u8BBE\u7F6E \u2192 \u9690\u79C1\u4E0E\u5B89\u5168\u6027 \u2192 \u5C4F\u5E55\u5F55\u5236\uFF09":"";throw new Error("\u622A\u5C4F\u5931\u8D25\uFF1A"+w.message+T)}let d=null;try{d=$o.statSync(c)}catch{d=null}if(!d||d.size<1024){try{$o.unlinkSync(c)}catch{}throw new Error("\u622A\u5C4F\u7ED3\u679C\u4E3A\u7A7A\uFF08\u53EF\u80FD\u662F\u6CA1\u6388\u6743\u300C\u5C4F\u5E55\u5F55\u5236\u300D\uFF0C\u6216\u5C4F\u5E55\u5904\u4E8E\u9501\u5C4F\u72B6\u6001\uFF09")}let f=await Vp(c),p=a?a.width:r.width,h=a?a.height:r.height,m=qo(e.maxWidth||Jx,320,4096),y=Math.min(p,m);if(f.width>y){let w=Wp("jpg");try{await Kp("/usr/bin/sips",["-s","format","jpeg","-s","formatOptions","65","--resampleWidth",String(y),c,"--out",w],{timeoutMs:Ux});try{$o.unlinkSync(c)}catch{}return await Kx(w,r,a,p,h,l,i)}catch{try{$o.unlinkSync(w)}catch{}}}return await Kx(c,r,a,p,h,l,i)}async function Kx(t,e,n,s,r,o,i){let a=await Vp(t),l=$o.readFileSync(t),c=a.width>0?s/a.width:1,u=n?n.x:e.x,d=n?n.y:e.y;return oI({file:t,width:a.width,height:a.height,pointWidth:s,pointHeight:r,ratio:c,originX:u,originY:d,clipped:!!(o&&o.clipped),requestedRegion:o?o.requested:null,displayIgnored:i,at:Date.now()}),{file:t,dataUrl:"data:image/jpeg;base64,"+l.toString("base64"),width:a.width,height:a.height,pointWidth:s,pointHeight:r,ratio:c,originX:u,originY:d,screen:e,region:n,clipped:!!(o&&o.clipped),requestedRegion:o?o.requested:null,displayIgnored:i}}async function kI(t){$n();let e=t||{},n=['ObjC.import("CoreGraphics");','ObjC.bindFunction("CGWindowListCopyWindowInfo", ["id", ["uint32", "uint32"]]);',"var raw = $.CGWindowListCopyWindowInfo(1 | 16, 0);","var list = ObjC.deepUnwrap(raw) || [];","var out = [];","for (var i = 0; i < list.length; i++) {"," var w = list[i];"," var b = w.kCGWindowBounds || {};"," var layer = w.kCGWindowLayer;"," if (layer !== 0 || !w.kCGWindowIsOnscreen) { continue; }"," if (!b || !(b.Width > 20) || !(b.Height > 20)) { continue; }"," out.push({"," id: w.kCGWindowNumber,",' app: String(w.kCGWindowOwnerName || ""),',' title: String(w.kCGWindowName || ""),'," pid: w.kCGWindowOwnerPID,"," x: b.X, y: b.Y, width: b.Width, height: b.Height"," });","}","JSON.stringify(out);"].join(`
|
|
921
|
-
`),s=await gn(n,{timeoutMs:
|
|
921
|
+
`),s=await gn(n,{timeoutMs:as}),r=[];try{r=JSON.parse(s)}catch{r=[]}Array.isArray(r)||(r=[]);let o=qo(e.limit||30,1,100),i=r.filter(function(l){return l.title});return{windows:(i.length?i:r).slice(0,o),total:r.length,unnamed:r.length-i.length}}async function Yx(){$n();let t=['ObjC.import("AppKit");',"var app = $.NSWorkspace.sharedWorkspace.frontmostApplication;","JSON.stringify({"," name: String(app.localizedName.js),"," bundleId: String(app.bundleIdentifier.js),"," pid: app.processIdentifier","});"].join(`
|
|
922
922
|
`),e=await gn(t,{timeoutMs:15e3});try{return JSON.parse(e)}catch{return{name:"",bundleId:"",pid:0}}}async function xI(){$n();let t=['ObjC.import("CoreGraphics");',"var p = $.CGEventGetLocation($.CGEventCreate($()));","JSON.stringify({ x: p.x, y: p.y });"].join(`
|
|
923
923
|
`),e=await gn(t,{timeoutMs:15e3});try{return JSON.parse(e)}catch{return{x:0,y:0}}}async function vI(t){$n();let e=t||{},n=e.shot||await Yp({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=qo(e.maxChars||6e3,500,2e4),r=['ObjC.import("Vision");','ObjC.import("Foundation");',"var url = $.NSURL.fileURLWithPath("+JSON.stringify(n.file)+");","var handler = $.VNImageRequestHandler.alloc.initWithURLOptions(url, $());","var req = $.VNRecognizeTextRequest.alloc.init;","req.recognitionLevel = 0;","req.usesLanguageCorrection = false;",'req.recognitionLanguages = ["zh-Hans", "en-US"];',"handler.performRequestsError($([req]), $());","var res = req.results || [];","var out = [];","for (var i = 0; i < res.count; i++) {"," var ob = res.objectAtIndex(i);"," var cand = ob.topCandidates(1);"," if (!cand || cand.count < 1) { continue; }"," var bb = ob.boundingBox;"," out.push({"," t: String(cand.objectAtIndex(0).string.js),"," x: bb.origin.x * "+n.width+","," y: (1 - bb.origin.y - bb.size.height) * "+n.height+","," w: bb.size.width * "+n.width+","," h: bb.size.height * "+n.height," });","}","JSON.stringify(out);"].join(`
|
|
924
|
-
`),o=await gn(r,{timeoutMs:hI}),i=[];try{let a=JSON.parse(o);if(a&&a.error)throw new Error(a.error);i=Array.isArray(a)?a:[]}catch{i=[]}return{text:Vx(i,n,s),items:i.length,shot:n}}async function SI(t){$n();let e=t||{},n=Bo(e.x,e.y,e);return await aa(n.x,n.y),await gn(mI({x:n.x,y:n.y,button:e.button==="right"?"right":"left",count:e.count===2?2:1,dry:e.dry}),{timeoutMs:
|
|
924
|
+
`),o=await gn(r,{timeoutMs:hI}),i=[];try{let a=JSON.parse(o);if(a&&a.error)throw new Error(a.error);i=Array.isArray(a)?a:[]}catch{i=[]}return{text:Vx(i,n,s),items:i.length,shot:n}}async function SI(t){$n();let e=t||{},n=Bo(e.x,e.y,e);return await aa(n.x,n.y),await gn(mI({x:n.x,y:n.y,button:e.button==="right"?"right":"left",count:e.count===2?2:1,dry:e.dry}),{timeoutMs:as}),(e.button==="right"?"\u53F3\u952E":e.count===2?"\u53CC\u51FB":"\u5355\u51FB")+" ("+n.x+", "+n.y+")\u3002"}async function _I(t){$n();let e=t||{},n=Bo(e.x,e.y,e);return await aa(n.x,n.y),await gn(gI({x:n.x,y:n.y,dry:e.dry}),{timeoutMs:as}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function TI(t){$n();let e=t||{},n=Bo(e.x,e.y,e),s=Bo(e.toX,e.toY,e);return await aa(n.x,n.y),await aa(s.x,s.y),await gn(yI({x:n.x,y:n.y,toX:s.x,toY:s.y,dry:e.dry}),{timeoutMs:as}),"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function MI(t){$n();let e=t||{},n=Bo(e.x,e.y,e);await aa(n.x,n.y);let s=wc(e.dy,0),r=wc(e.dx,0);if(!s&&!r)throw new Error("scroll \u9700\u8981 dy\uFF08\u6216 dx\uFF09\uFF0C\u6B63\u6570 = \u5411\u4E0B / \u5411\u53F3");return await gn(wI({x:n.x,y:n.y,dy:qo(s,-5e3,5e3),dx:qo(r,-5e3,5e3),dry:e.dry}),{timeoutMs:as}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function CI(t){$n();let e=t||{},n=Xx(e.keys);return await gn(Gp([n],e.dry),{timeoutMs:as}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function AI(t){$n();let e=t||{},n=String(e.text==null?"":e.text);if(!n&&!e.submit)throw new Error("type \u9700\u8981 text\uFF08\u8981\u56DE\u8F66\u5C31\u52A0 submit: true\uFF09");let s=Array.from(n),r=s.map(bc),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?la.shift:0}});e.submit&&l.push({code:Rn.return,flags:0}),l.length&&await gn(Gp(l,e.dry),{timeoutMs:as}),i="\u6309\u952E\u7801\u8F93\u5165 "+s.length+" \u4E2A\u5B57\u7B26"}else{let l=e.dry?null:await bI();e.dry||await Wx(n);let u=[{code:Rn.v,flags:la.cmd}];e.submit&&u.push({code:Rn.return,flags:0}),await gn(Gp(u,e.dry),{timeoutMs:as}),!e.dry&&l!=null&&setTimeout(function(){Wx(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await Yx().catch(function(){return null});return"\u5DF2\u8F93\u5165\uFF08"+i+(e.submit?" + \u56DE\u8F66":"")+"\uFF09"+(a&&a.name?"\uFF0C\u76EE\u6807\u5E94\u7528\uFF1A"+a.name:"")+"\u3002"+(n?`
|
|
925
925
|
\u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function OI(){let t=Xp(),e={ok:!1,platform:process.platform,screens:[],screenRecording:!1,accessibility:!1,notes:[]};if(!t.ok)return e.notes.push(t.reason),e;try{e.screens=await kc()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Yp({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{$o.unlinkSync(n.file)}catch{}}catch(n){e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A"+n.message)}try{let n=await gn('ObjC.import("ApplicationServices"); String($.AXIsProcessTrusted());',{timeoutMs:1e4});e.accessibility=/true/i.test(n)}catch(n){e.notes.push("\u8F85\u52A9\u529F\u80FD\u68C0\u6D4B\u5931\u8D25\uFF1A"+n.message)}return e.accessibility||e.notes.push("\u6CA1\u6709\u300C\u8F85\u52A9\u529F\u80FD\u300D\u6743\u9650\uFF1A\u70B9\u51FB / \u6309\u952E\u4F1A\u88AB\u7CFB\u7EDF\u9759\u9ED8\u4E22\u5F03\uFF08\u7CFB\u7EDF\u8BBE\u7F6E \u2192 \u9690\u79C1\u4E0E\u5B89\u5168\u6027 \u2192 \u8F85\u52A9\u529F\u80FD\uFF0C\u52FE\u9009\u5BBF\u4E3B App\uFF09"),e.screenRecording||e.notes.push("\u6CA1\u6709\u300C\u5C4F\u5E55\u5F55\u5236\u300D\u6743\u9650\uFF1A\u622A\u56FE\u4F1A\u5931\u8D25\u6216\u5168\u9ED1\uFF08\u7CFB\u7EDF\u8BBE\u7F6E \u2192 \u9690\u79C1\u4E0E\u5B89\u5168\u6027 \u2192 \u5C4F\u5E55\u5F55\u5236\uFF09"),e.ok=e.screenRecording&&e.accessibility,e}Zx.exports={available:Xp,check:OI,screens:kc,capture:Yp,describeShot:lI,windows:kI,frontmost:Yx,cursor:xI,ocr:vI,click:SI,move:_I,drag:TI,scroll:MI,type:AI,key:CI,parseKeys:Xx,charToKey:bc,formatOcr:Vx,clipText:cI,parseRegion:Hx,clampRegion:Gx,imageSize:Vp,lastShotInfo:rI,num:wc,clamp:qo,toScreenPoint:Bo,pointOnScreen:zx,screenListDesc:Jp,fmtSize:iI,signed:aI,ensureTmpDir:uI,pruneTmp:dI,tmpFile:Wp,KEY_CODES:Rn,FLAGS:la,SHIFT_CHARS:Hp,TMP_DIR:fI,DEFAULT_MAX_WIDTH:Jx}});var nv=ne((vD,eh)=>{var ev={pending:1,in_progress:1,completed:1,cancelled:1},EI=/^#{1,6}\s*(?:步骤|steps?)(?:\s|[::((]|$)/i,PI=/^\s*(?:[-*·]|\d+[.)、])\s+(?:\[[ xX/~-]\]\s+)?(.+?)\s*$/;function tv(t){let e=String(t??"").replace(/\s+/g," ").trim();return e?e.length>200?e.slice(0,200):e:""}function jI(t){let e=String(t??"").trim().toLowerCase();return ev[e]?e:"pending"}function da(t){let e=String(t??"");if(!e.trim())return[];let n=e.split(/\r?\n/),s=!1,r=[];for(let o=0;o<n.length;o++){let i=n[o],a=String(i).trim();if(/^#{1,6}\s/.test(a)){if(EI.test(a)){s=!0;continue}if(s)break}if(!s||!a)continue;let l=PI.exec(i);if(!l)continue;let c=tv(l[1]);c&&r.push(c)}return r.map(function(o,i){return{id:"t"+(i+1),content:o,status:"pending"}})}function Uo(t){let e=Array.isArray(t)?t:[],n=new Map,s=[];for(let i=0;i<e.length;i++){let a=e[i];if(!a||typeof a!="object")continue;let l=tv(a.content);if(!l)continue;let c=String(a.id==null?"":a.id).trim();c||(c="t"+(s.length+1)),c.length>64&&(c=c.slice(0,64));let u={id:c,content:l,status:jI(a.status)};n.has(c)||s.push(c),n.set(c,u)}let r=s.map(function(i){return n.get(i)}),o=!1;for(let i=0;i<r.length;i++)r[i].status==="in_progress"&&(o?r[i].status="pending":o=!0);return r}function Zp(t,e,n){let s=n||{},r=Uo(e);if(!s.merge)return r;let o=Uo(t),i=new Map,a=[];for(let l=0;l<o.length;l++)i.set(o[l].id,o[l]),a.push(o[l].id);for(let l=0;l<r.length;l++){let c=r[l];i.has(c.id)||a.push(c.id),i.set(c.id,c)}return Uo(a.map(function(l){return i.get(l)}))}function II(t){return t==="completed"?"[x]":t==="in_progress"?"[-]":t==="cancelled"?"[~]":"[ ]"}function Qp(t){let e=Uo(t);if(!e.length)return"(\u6682\u65E0 todo)";let n=["\u5F53\u524D todo\uFF1A"];for(let s=0;s<e.length;s++){let r=e[s];n.push("- "+II(r.status)+" "+r.id+": "+r.content)}return n.join(`
|
|
926
926
|
`)}eh.exports={STATUSES:ev,parsePlanSteps:da,normalize:Uo,merge:Zp,formatBlock:Qp};if(require.main===eh){let t=function(s,r){if(!s)throw new Error(r||"assert failed")},e=0,n=function(s,r){try{r(),e++,console.log("ok "+s)}catch(o){console.error("FAIL "+s+": "+o.message),process.exitCode=1}};n("parse numbered steps",function(){let s=["## \u76EE\u6807","\u505A\u4E00\u4EF6\u4E8B","## \u6B65\u9AA4","1. \u6539 a.js \u52A0\u5BFC\u51FA","2) \u6539 b.js \u8C03\u7528\u5B83","- \u8DD1 node \u9A8C\u8BC1","## \u9A8C\u8BC1\u65B9\u5F0F","\u770B\u8F93\u51FA"].join(`
|
|
927
927
|
`),r=da(s);t(r.length===3,"len="+r.length),t(r[0].id==="t1"&&r[0].status==="pending","t1"),t(r[0].content.indexOf("a.js")>=0,"content0"),t(r[2].id==="t3","t3")}),n("parse empty / no steps",function(){t(da("").length===0,"empty"),t(da(`## \u76EE\u6807
|
|
@@ -988,8 +988,8 @@ Plugins run on this machine with your permissions. After installing, you still h
|
|
|
988
988
|
\u30BD\u30FC\u30B9\uFF1A{repo}
|
|
989
989
|
\u30EC\u30D3\u30E5\u30FC\u72B6\u614B\uFF1A{review}
|
|
990
990
|
|
|
991
|
-
\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3042\u306A\u305F\u306E\u6A29\u9650\u3067\u672C\u6A5F\u4E0A\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u5F8C\u3082\u3001\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u3067\u4FE1\u983C\u3059\u308B\u307E\u3067\u6709\u52B9\u306B\u306A\u308A\u307E\u305B\u3093\u3002`,"ext.marketInstallYes":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB","ext.mcpFail":" \xB7 MCP \u306E\u518D\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557: {msg}","ext.mcpOpenFailed":"mcp.json \u3092\u958B\u3051\u307E\u305B\u3093\uFF1A{msg}","ext.newSessionNotice":"Luban: \u65B0\u3057\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u59CB\u3057\u307E\u3057\u305F","ext.addFileNoView":"Luban \u30C1\u30E3\u30C3\u30C8\u30D1\u30CD\u30EB\u3092\u958B\u3051\u307E\u305B\u3093\u3002\u5148\u306B Luban \u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u958B\u3044\u3066\u304F\u3060\u3055\u3044\u3002","ext.agentPrompt":"\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u4F55\u3092\u3055\u305B\u307E\u3059\u304B\uFF1F\uFF08\u30B3\u30FC\u30C9\u306E\u7DE8\u96C6\uFF0F\u751F\u6210\uFF09","ext.hubPanelTitle":"\u8A2D\u5B9A\u3068\u4F7F\u7528\u91CF","ext.providerTimeout":"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF0815s\uFF09","ext.providerBadJson":"\u5FDC\u7B54\u304C JSON \u3067\u306F\u3042\u308A\u307E\u305B\u3093: {head}","ext.providerBaseUrl":"baseUrl \u304C\u7A7A\u3067\u3059","ext.providerNeedModel":"\u30C6\u30B9\u30C8\u524D\u306B\u30E2\u30C7\u30EB id \u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044","ext.providerNeedKey":"API key \u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u30D1\u30CD\u30EB\u3067\u5165\u529B\u3059\u308B\u304B apiKeyEnv \u3092\u8A2D\u5B9A\uFF09","ext.configMissing":"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093 \u2014 \u5148\u306B\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044","ext.saveFailed":"\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {msg}","ext.generalMissing":"\u8A2D\u5B9A\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093: {key}","ext.generalBadBool":"\u300C{key}\u300D\u306F\u30D6\u30FC\u30EB\u5024\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadLanguage":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u8A00\u8A9E\u306F auto / en / zh-cn / ja \u306E\u307F\u3067\u3059","ext.generalBadEnum":"\u300C{key}\u300D\u306F {values} \u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadNumber":"\u300C{key}\u300D\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadMin":"\u300C{key}\u300D\u306F {min} \u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadMax":"\u300C{key}\u300D\u306F {max} \u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalSaveFailed":"\u4E00\u822C\u8A2D\u5B9A\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {msg}","ext.openDirFailed":"\u30C7\u30FC\u30BF\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u958B\u3051\u307E\u305B\u3093: {msg}","validate.providerEmpty":"Provider id \u3092\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093","validate.pos":"provider\u300C{id}\u300D","validate.untitled":"\uFF08\u540D\u79F0\u672A\u8A2D\u5B9A\uFF09","validate.idChars":"{pos}: id \u306B\u4F7F\u3048\u308B\u306E\u306F\u82F1\u6570\u5B57\u30FB\u30A2\u30F3\u30C0\u30FC\u30B9\u30B3\u30A2\u30FB\u30CF\u30A4\u30D5\u30F3\u306E\u307F\u3067\u3059","validate.idDup":"{pos}: id \u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059","validate.baseUrl":"{pos}: baseUrl \u306F http:// \u307E\u305F\u306F https:// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.modelIdEmpty":"{pos}: \u30E2\u30C7\u30EB id \u3092\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093","validate.modelIdDup":"{pos}: \u30E2\u30C7\u30EB id\u300C{id}\u300D\u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059","validate.maxIn":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E maxInputTokens \u306F\u6B63\u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.maxOut":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E maxOutputTokens \u306F\u6B63\u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.noModels":"{pos}: \u5C11\u306A\u304F\u3068\u3082 1 \u3064\u306E\u30E2\u30C7\u30EB\u304C\u5FC5\u8981\u3067\u3059","validate.webUrl":"{pos}: webSearch.baseUrl \u306F http:// \u307E\u305F\u306F https:// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.webCount":"{pos}: webSearch.count \u306F 1\u301C50 \u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.webEngine":"{pos}: webSearch.engine \u306F deepseek \u307E\u305F\u306F bing \u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.webDisabled":"{pos}: webSearch.disabled \u306F\u30D6\u30FC\u30EB\u5024\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.thinkShape":'{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u4F8B: { "default": "off", "on": {...}, "off": {...} }\uFF09',"validate.thinkTier":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.{tier} \u306F JSON \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.thinkReserved":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.{tier} \u3067\u30D7\u30ED\u30C8\u30B3\u30EB\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u4E0A\u66F8\u304D\u3067\u304D\u307E\u305B\u3093: {keys}","validate.thinkTooLong":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.{tier} \u304C {n} \u6587\u5B57\u3092\u8D85\u3048\u3066\u3044\u307E\u3059","validate.thinkEmpty":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking \u306B\u306F on / off \u306E\u5C11\u306A\u304F\u3068\u3082\u4E00\u65B9\u304C\u5FC5\u8981\u3067\u3059","validate.thinkInline":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.inline \u306F true / false \u306E\u307F\u6307\u5B9A\u3067\u304D\u307E\u3059","validate.needProvider":"\u5C11\u306A\u304F\u3068\u3082 1 \u3064\u306E provider \u304C\u5FC5\u8981\u3067\u3059","usage.today":"\u4ECA\u65E5","usage.7d":"\u76F4\u8FD1 7 \u65E5","usage.30d":"\u76F4\u8FD1 30 \u65E5","usage.all":"\u3059\u3079\u3066","dash.title":"Token \u4F7F\u7528\u91CF","dash.statusReady":"\u6E96\u5099\u5B8C\u4E86","dash.refresh":"\u66F4\u65B0","dash.refreshTitle":"\u53F0\u5E33\u3092\u518D\u8AAD\u307F\u8FBC\u307F","dash.emptyA":"\u307E\u3060\u8A18\u9332\u304C\u3042\u308A\u307E\u305B\u3093\u3002","dash.emptyB":"\u6700\u521D\u306E\u30BF\u30FC\u30F3\u5F8C\u306B\u8868\u793A\u3055\u308C\u307E\u3059 \u2014 \u5404\u30BF\u30FC\u30F3\u306E token \u5408\u8A08\u304C\u30ED\u30FC\u30AB\u30EB\u53F0\u5E33\u306B\u8FFD\u8A18\u3055\u308C\u307E\u3059\u3002","dash.byModel":"\u30E2\u30C7\u30EB\u5225","dash.byDay":"\u65E5\u5225","dash.byMode":"\u30E2\u30FC\u30C9\u5225","dash.recent":"\u6700\u8FD1\u306E\u8A18\u9332","dash.thModel":"\u30E2\u30C7\u30EB","dash.thRequests":"\u30EA\u30AF\u30A8\u30B9\u30C8","dash.thInput":"\u5165\u529B","dash.thOutput":"\u51FA\u529B","dash.thTotal":"\u5408\u8A08","dash.thCache":"\u30AD\u30E3\u30C3\u30B7\u30E5\u30D2\u30C3\u30C8","dash.thShare":"\u5272\u5408","dash.thMode":"\u30E2\u30FC\u30C9","dash.thTurns":"\u30BF\u30FC\u30F3","dash.thTime":"\u6642\u523B","dash.openDir":"\u30C7\u30FC\u30BF\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u958B\u304F","dash.dirTitle":"\u53F0\u5E33\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA","dash.foot":"Token \u6570\u306E\u307F\u96C6\u8A08\uFF1B\u8CBB\u7528\u306F\u63A8\u5B9A\u3057\u307E\u305B\u3093","dash.modeExecute":"\u30D7\u30E9\u30F3\u5B9F\u884C","dash.modeUnknown":"\u4E0D\u660E","dash.loading":"\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","dash.turns":"\u30BF\u30FC\u30F3","dash.requests":"\u30EA\u30AF\u30A8\u30B9\u30C8","dash.input":"\u5165\u529B","dash.output":"\u51FA\u529B","dash.total":"\u5408\u8A08","dash.cache":"\u30AD\u30E3\u30C3\u30B7\u30E5\u30D2\u30C3\u30C8","dash.partial":"\u4E2D\u65AD\u30BF\u30FC\u30F3 {n} \u4EF6\u3092\u88DC\u8A18","dash.perTurn":"1 \u30BF\u30FC\u30F3\u3042\u305F\u308A {n}","dash.estTurns":"\u63A8\u5B9A\u30BF\u30FC\u30F3 {n} \u4EF6\u3092\u542B\u3080","dash.cached":"\u30AD\u30E3\u30C3\u30B7\u30E5\u7531\u6765 {n}","dash.models":"\u30E2\u30C7\u30EB {n}","dash.unknownModel":"\u4E0D\u660E\u306A\u30E2\u30C7\u30EB","dash.days":"{n} \u65E5 \xB7 \u9752=\u5165\u529B \u7DD1=\u51FA\u529B","dash.dayTip":"{day} \xB7 \u2191{input} \u2193{output} \xB7 \u30EA\u30AF\u30A8\u30B9\u30C8 {n} \u56DE","dash.recentCount":"{n} \u4EF6\uFF08\u6700\u5927 50\uFF09","dash.interrupted":" \xB7 \u4E2D\u65AD","dash.recordOff":"\u4F7F\u7528\u91CF\u306E\u8A18\u9332\u306F\u30AA\u30D5\u3067\u3059\uFF08luban.usage.record=false\uFF09\u2014 \u3053\u306E\u30BF\u30FC\u30F3\u4EE5\u964D\u306F\u65B0\u3057\u3044\u8A18\u9332\u3092\u66F8\u304D\u307E\u305B\u3093\u3002","dash.badLines":"\u53F0\u5E33\u306E\u8AAD\u3081\u306A\u3044\u884C {n} \u4EF6\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3057\u305F\u3002","dash.noRecords":"\u8A18\u9332\u306A\u3057","dash.statusTurns":"{n} \u30BF\u30FC\u30F3","hub.title":"\u8A2D\u5B9A\u3068\u4F7F\u7528\u91CF","hub.navGeneral":"\u4E00\u822C","hub.navSettings":"\u8A2D\u5B9A","hub.navBackup":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7","hub.navUsage":"\u4F7F\u7528\u91CF","hub.navMcp":"MCP","hub.navPlugins":"\u30D7\u30E9\u30B0\u30A4\u30F3","hub.navMarket":"\u30DE\u30FC\u30B1\u30C3\u30C8","hub.navGeneralTitle":"Luban \u8A2D\u5B9A\uFF08\u8A00\u8A9E / \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8 / Agent \u306A\u3069\uFF09","hub.navSettingsTitle":"Provider \u8A2D\u5B9A\uFF08\u30E2\u30C7\u30EB / base URL / API \u30AD\u30FC\uFF09","hub.navBackupTitle":"\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08WebDAV\uFF1A\u30BB\u30C3\u30B7\u30E7\u30F3 / \u6DFB\u4ED8 / \u30D7\u30E9\u30F3 / \u8A2D\u5B9A\uFF09","hub.navUsageTitle":"Token \u4F7F\u7528\u91CF\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\uFF08\u30E2\u30C7\u30EB / \u65E5 / \u30E2\u30FC\u30C9\u5225\uFF09","hub.navMcpTitle":"MCP \u30B5\u30FC\u30D0\u30FC\u7BA1\u7406\uFF08\u6709\u52B9\u5316 / \u7121\u52B9\u5316 / \u72B6\u614B / \u30C4\u30FC\u30EB\u4E00\u89A7\uFF09","hub.navPluginsTitle":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\uFF08\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB / \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB / \u30B4\u30DF\u7BB1\uFF09","mcp.title":"MCP \u30B5\u30FC\u30D0\u30FC","mcp.statusReady":"\u6E96\u5099\u5B8C\u4E86","mcp.reload":"\u518D\u63A5\u7D9A","mcp.reloadTitle":"\u3059\u3079\u3066\u306E MCP \u30B5\u30FC\u30D0\u30FC\u3092\u518D\u63A5\u7D9A\u3057\u307E\u3059\uFF08mcp.json \u3092\u7DE8\u96C6\u3057\u305F\u3089\u62BC\u3059\u3002\u30A6\u30A3\u30F3\u30C9\u30A6\u518D\u8AAD\u307F\u8FBC\u307F\u306F\u4E0D\u8981\uFF09","mcp.reloading":"\u518D\u63A5\u7D9A\u4E2D\u2026","mcp.reloaded":"\u518D\u63A5\u7D9A\u3057\u307E\u3057\u305F","mcp.openGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB mcp.json \u3092\u958B\u304F","mcp.openGlobalTitle":"~/.luban/mcp.json \u3092\u30A8\u30C7\u30A3\u30BF\u3067\u958B\u304D\u307E\u3059\uFF08\u7121\u3051\u308C\u3070\u7A7A\u306E\u3072\u306A\u5F62\u3092\u4F5C\u6210\uFF09","mcp.openProject":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9 mcp.json \u3092\u958B\u304F","mcp.openProjectTitle":"<\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9>/.luban/mcp.json \u3092\u30A8\u30C7\u30A3\u30BF\u3067\u958B\u304D\u307E\u3059\uFF08\u7121\u3051\u308C\u3070\u7A7A\u306E\u3072\u306A\u5F62\u3092\u4F5C\u6210\uFF09","mcp.globalPathTitle":"\u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A\u306E\u30D1\u30B9\uFF08~/.luban/mcp.json\uFF09","mcp.servers":"\u30B5\u30FC\u30D0\u30FC","mcp.countHint":"{servers} \u4EF6\u8A2D\u5B9A \xB7 {enabled} \u4EF6\u6709\u52B9","mcp.emptyA":"MCP \u30B5\u30FC\u30D0\u30FC\u306F\u307E\u3060\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002","mcp.emptyB":"<code>~/.luban/mcp.json</code> \u307E\u305F\u306F <code><\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9>/.luban/mcp.json</code> \u306E <code>mcpServers</code> \u306B 1 \u4EF6\u8FFD\u52A0\u3057\u3001\u300C\u518D\u63A5\u7D9A\u300D\u3092\u62BC\u3059\u3068\u63A5\u7D9A\u3055\u308C\u307E\u3059\u3002\u30C4\u30FC\u30EB\u306F <code>mcp__<server>__<tool></code> \u306E\u540D\u524D\u3067 Agent \u306E\u30C4\u30FC\u30EB\u4E00\u89A7\u306B\u5165\u308A\u307E\u3059\u3002","mcp.tools":"\u30C4\u30FC\u30EB","mcp.toolsHint":"{n} \u500B\u306E\u30C4\u30FC\u30EB \xB7 Agent {agent} \u500B / Plan {plan} \u500B\u304C\u5229\u7528\u53EF","mcp.toolsEmpty":"\u63A5\u7D9A\u6E08\u307F\u306E\u30C4\u30FC\u30EB\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u30FC\u304C\u8D77\u52D5\u3059\u308B\u3068\u3053\u3053\u306B\u4E26\u3073\u307E\u3059\uFF09\u3002","mcp.planNote":"Plan \u30E2\u30FC\u30C9\u3067\u8A31\u53EF\u3055\u308C\u308B\u306E\u306F\u3001\u30B5\u30FC\u30D0\u30FC\u304C <code>readOnlyHint</code> \u3092\u5BA3\u8A00\u3057\u305F\u30C4\u30FC\u30EB\u3001\u307E\u305F\u306F\u305D\u306E\u30B5\u30FC\u30D0\u30FC\u306E <code>planAllow</code> \u306B\u5217\u6319\u3057\u305F\u30C4\u30FC\u30EB\u3060\u3051\u3067\u3059\u3002\u547C\u3073\u51FA\u3057\u6642\u306B\u3082\u518D\u691C\u8A3C\u3057\u307E\u3059\u3002","mcp.pathsTitle":"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB","mcp.pathGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB","mcp.pathProject":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9","mcp.pathCustom":"\u30AB\u30B9\u30BF\u30E0","mcp.pathMissing":"\u30D5\u30A1\u30A4\u30EB\u7121\u3057","mcp.pathCount":"{n} \u4EF6","mcp.foot":'\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5074\u306E\u540C\u540D\u30A8\u30F3\u30C8\u30EA\u306F\u30B0\u30ED\u30FC\u30D0\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5074\u306B <code>"disabled": true</code> \u3092\u66F8\u304F\u3068\u3001\u540C\u540D\u306E\u30B0\u30ED\u30FC\u30D0\u30EB\u30B5\u30FC\u30D0\u30FC\u3092\u7121\u52B9\u306B\u3067\u304D\u307E\u3059\u3002',"mcp.footNote":"MCP \u30B5\u30FC\u30D0\u30FC\u306F\u3042\u306A\u305F\u306E\u6A29\u9650\u3067\u52D5\u304F\u672C\u6A5F\u306E\u5B50\u30D7\u30ED\u30BB\u30B9\u3067\u3059\u3002\u4FE1\u983C\u3067\u304D\u308B\u30B5\u30FC\u30D0\u30FC\u3060\u3051\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","mcp.enable":"\u6709\u52B9\u5316","mcp.disable":"\u7121\u52B9\u5316","mcp.actionEnable":"\u6709\u52B9\u5316","mcp.actionDisable":"\u7121\u52B9\u5316","mcp.stateReady":"\u63A5\u7D9A\u6E08\u307F","mcp.stateConnecting":"\u63A5\u7D9A\u4E2D","mcp.stateFailed":"\u63A5\u7D9A\u5931\u6557","mcp.stateIdle":"\u5F85\u6A5F","mcp.stateStopped":"\u505C\u6B62","mcp.stateDisabled":"\u7121\u52B9","mcp.chooseEnable":"\u300C{name}\u300D\u3092\u3069\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u6709\u52B9\u306B\u3057\u307E\u3059\u304B\uFF1F","mcp.chooseDisable":"\u300C{name}\u300D\u306E\u7121\u52B9\u5316\u3092\u3069\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u66F8\u304D\u307E\u3059\u304B\uFF1F","mcp.writeGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB","mcp.writeProject":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9","mcp.chooseCancel":"\u30AD\u30E3\u30F3\u30BB\u30EB","mcp.toolCount":"{n} \u500B\u306E\u30C4\u30FC\u30EB","mcp.timeoutMs":"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 {ms}ms","mcp.planAllowCount":"planAllow {n} \u4EF6","mcp.disabledBy":"\u7121\u52B9\u5316\u306E\u5834\u6240\uFF1A{files}","mcp.stderrTail":"stderr \u306E\u51FA\u529B\u3042\u308A\uFF08\u30DB\u30D0\u30FC\u3067\u8868\u793A\uFF09","mcp.ro":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528","mcp.rw":"\u66F8\u304D\u8FBC\u307F","mcp.planAllowed":"Plan \u53EF","mcp.working":"\u51E6\u7406\u4E2D\u2026","mcp.cancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F","mcp.failed":"\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{msg}","mcp.toggledOk":"\u300C{name}\u300D\u3092{state}\u3057\u3001{file} \u306B\u66F8\u304D\u8FBC\u307F\u307E\u3057\u305F\uFF08\u518D\u63A5\u7D9A\u6E08\u307F\uFF09","mcp.toggledNoop":"{file} \u306B\u5909\u66F4\u306F\u3042\u308A\u307E\u305B\u3093\uFF1A\u300C{name}\u300D\u306F\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u5B9A\u7FA9\u3082\u7121\u52B9\u5316\u3082\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u518D\u63A5\u7D9A\u6E08\u307F\uFF09","market.title":"\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8","market.statusReady":"\u6E96\u5099\u5B8C\u4E86","market.refreshing":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u66F4\u65B0\u4E2D\u2026","market.refresh":"\u66F4\u65B0","market.refreshTitle":"\u30EA\u30E2\u30FC\u30C8\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u518D\u53D6\u5F97\u3057\u307E\u3059\uFF08\u53D6\u5F97\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u540C\u68B1\u30DF\u30E9\u30FC\u3092\u4F7F\u7528\uFF09","market.source":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u53D6\u5F97\u5143\uFF1A{source}","market.sourceTitle":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u53D6\u5F97\u5143\u3067\u3059\u3002\u30EA\u30E2\u30FC\u30C8\u306F\u516C\u958B\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30DD\u30B8\u30C8\u30EA\u3001\u540C\u68B1\u7248\u306F\u62E1\u5F35\u6A5F\u80FD\u3068\u3068\u3082\u306B\u914D\u5E03\u3055\u308C\u308B\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u30DF\u30E9\u30FC\u3067\u3059\u3002","market.offlineNote":"\u30EA\u30E2\u30FC\u30C8\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u53D6\u5F97\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u62E1\u5F35\u6A5F\u80FD\u306B\u540C\u68B1\u3055\u308C\u305F\u30DF\u30E9\u30FC\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\uFF08\u516C\u958B\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3068\u306F\u30D0\u30A4\u30C8\u5358\u4F4D\u3067\u4E00\u81F4\u3057\u307E\u3059\u304C\u3001\u6700\u65B0\u3067\u306F\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09\u3002","market.empty":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093\u3002","market.emptyHint":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u516C\u958B\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30DD\u30B8\u30C8\u30EA\u304B\u3089\u53D6\u5F97\u3057\u307E\u3059\u3002\u53D6\u5F97\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u540C\u68B1\u30DF\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","market.count":"{n} \u4EF6\u306E\u9805\u76EE","market.install":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB","market.update":"\u66F4\u65B0","market.installed":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F","market.updateAvailable":"\u66F4\u65B0\u3042\u308A","market.installing":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u4E2D\u2026","market.cancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F\uFF08\u4F55\u3082\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF09","market.failed":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{msg}","market.installedOk":"\u300C{name}\u300D\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3057\u305F\u3002\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u3067\u4FE1\u983C\u3057\u3066\u6709\u52B9\u306B\u3057\u3066\u304F\u3060\u3055\u3044","market.replacedOk":"\u300C{name}\u300D\u3092\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u66F4\u65B0\u3057\u307E\u3057\u305F","market.replaceConfirm":"\u300C{name}\u300D\u306F\u3059\u3067\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u3067\u3059\u3002\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F\u53E4\u3044\u65B9\u306F\u30B4\u30DF\u7BB1\u3078\u79FB\u52D5\u3057\u307E\u3059\u3002","market.typePlugin":"\u30D7\u30E9\u30B0\u30A4\u30F3","market.typeSkill":"\u30B9\u30AD\u30EB","market.reviewReviewed":"\u30EC\u30D3\u30E5\u30FC\u6E08\u307F","market.reviewPending":"\u30EC\u30D3\u30E5\u30FC\u5F85\u3061","market.reviewFlagged":"\u554F\u984C\u3042\u308A","market.reviewRevoked":"\u53D6\u308A\u4E0B\u3052\u6E08\u307F","market.signed":"\u7F72\u540D\u6E08\u307F","market.unsigned":"\u672A\u7F72\u540D","market.permNone":"\u8FFD\u52A0\u306E\u6A29\u9650\u5BA3\u8A00\u306A\u3057","market.noTools":"\u306A\u3057","market.permFsRead":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u308B","market.permFsWrite":"\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080 / \u524A\u9664\u3059\u308B","market.permShell":"shell \u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3059\u308B","market.permNet":"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u884C\u3046","market.permEnv":"\u74B0\u5883\u5909\u6570\u3092\u8AAD\u307F\u53D6\u308B","market.permsLabel":"\u5BA3\u8A00\u3055\u308C\u305F\u6A29\u9650","market.repoLabel":"\u30BD\u30FC\u30B9","market.foot":"\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3042\u306A\u305F\u306E\u6A29\u9650\u3067\u672C\u6A5F\u4E0A\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u5F8C\u3082\u3001\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u3067\u4FE1\u983C\u3059\u308B\u307E\u3067\u6709\u52B9\u306B\u306A\u308A\u307E\u305B\u3093","plugins.title":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3","plugins.globalDirTitle":"\u30B0\u30ED\u30FC\u30D0\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\uFF08~/.luban/plugins\uFF09","plugins.dirsTitle":"\u30B9\u30AD\u30E3\u30F3\u5BFE\u8C61\uFF08\u4E0A\uFF1A\u30B0\u30ED\u30FC\u30D0\u30EB\u3001\u4E0B\uFF1A\u73FE\u5728\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\uFF09","plugins.statusReady":"\u6E96\u5099\u5B8C\u4E86","plugins.rescan":"\u518D\u30B9\u30AD\u30E3\u30F3","plugins.rescanTitle":"\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u3092\u518D\u30B9\u30AD\u30E3\u30F3\u3057\u3001\u30E2\u30B8\u30E5\u30FC\u30EB\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u7834\u68C4\u3057\u307E\u3059\uFF08\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30B3\u30FC\u30C9\u3092\u76F4\u3057\u305F\u5F8C\u306B\uFF09","plugins.rescanning":"\u518D\u30B9\u30AD\u30E3\u30F3\u4E2D\u2026","plugins.install":"\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8FFD\u52A0\u2026","plugins.installTitle":"plugin.json \u3092\u542B\u3080\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u3073\u3001\u30B0\u30ED\u30FC\u30D0\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3059","plugins.installing":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u4E2D\u2026","plugins.working":"\u51E6\u7406\u4E2D\u2026","plugins.cancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F","plugins.failed":"\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{msg}","plugins.countHint":"\u6709\u52B9 {plugins} \u4EF6 \xB7 \u672A\u627F\u8A8D {pending} \u4EF6","plugins.emptyA":"\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002","plugins.emptyB":"\u53F3\u4E0A\u306E\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8FFD\u52A0\u2026\u300D\u304B\u3089 <code>plugin.json</code> \u3092\u542B\u3080\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002\u8FFD\u52A0\u3059\u308B\u3068 <code>pl__<\u30D7\u30E9\u30B0\u30A4\u30F3>__<\u30C4\u30FC\u30EB></code> \u3068\u3044\u3046\u540D\u524D\u3067 Agent \u306E\u30C4\u30FC\u30EB\u4E00\u89A7\u306B\u73FE\u308C\u307E\u3059\u3002","plugins.installed":"\u6709\u52B9","plugins.installedOk":"\u300C{name}\u300D\u3092\u8FFD\u52A0\u3057\u3001\u4FE1\u983C\u6E08\u307F\u306B\u3057\u307E\u3057\u305F","plugins.uninstalledOk":"\u300C{name}\u300D\u3092\u30B4\u30DF\u7BB1\u3078\u79FB\u52D5\u3057\u307E\u3057\u305F","plugins.restoredOk":"\u300C{name}\u300D\u3092\u5143\u306B\u623B\u3057\u307E\u3057\u305F","plugins.trustedOk":"\u300C{name}\u300D\u3092\u4FE1\u983C\u3057\u307E\u3057\u305F","plugins.theme":"\u753B\u9762\u30C6\u30FC\u30DE","plugins.themeHint":"Luban \u81EA\u8EAB\u306E\u30D1\u30CD\u30EB\u306B\u306E\u307F\u9069\u7528\uFF08\u8272 / \u89D2\u4E38 / \u6587\u5B57\u30B5\u30A4\u30BA\uFF09\u3002\u30A8\u30C7\u30A3\u30BF\u306E\u30C6\u30FC\u30DE\u306F\u5909\u308F\u308A\u307E\u305B\u3093","plugins.themeFollow":"VS Code \u306E\u30C6\u30FC\u30DE\u306B\u5F93\u3046","plugins.themeNote":"\u30C6\u30FC\u30DE\u306F\u30D7\u30E9\u30B0\u30A4\u30F3\u304C\u63D0\u4F9B\u3059\u308B\u30DB\u30EF\u30A4\u30C8\u30EA\u30B9\u30C8 token\uFF08\u8272\u30FB\u89D2\u4E38\u30FB\u6587\u5B57\u30B5\u30A4\u30BA\u306E\u307F\u3001CSS \u306E\u6301\u3061\u8FBC\u307F\u4E0D\u53EF\uFF09\u306A\u306E\u3067\u3001\u6700\u60AA\u3067\u3082\u300C\u898B\u3065\u3089\u3044\u300D\u3067\u6E08\u307F\u307E\u3059\u3002\u30C7\u30A3\u30B9\u30AF\u4E0A\u306B\u3042\u308C\u3070\u9078\u629E\u53EF\u80FD \u2014\u2014 \u4FE1\u983C\u3082\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u6709\u52B9\u5316\u3082\u4E0D\u8981\u3067\u3059\u3002","plugins.themeOk":"\u30C6\u30FC\u30DE\u300C{name}\u300D\u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F","plugins.themeOff":"VS Code \u306E\u30C6\u30FC\u30DE\u306B\u5F93\u3046\u8A2D\u5B9A\u306B\u623B\u3057\u307E\u3057\u305F","plugins.themeDropped":"{n} \u500B\u306E token \u3092\u7121\u8996\u3057\u307E\u3057\u305F\uFF08\u5024\u304C\u4E0D\u6B63\u3002\u30ED\u30B0\u3092\u53C2\u7167\uFF09","plugins.themeTitle":"\u753B\u9762\u30C6\u30FC\u30DE\u3092\u9078\u629E\u3002\u300CVS Code \u306E\u30C6\u30FC\u30DE\u306B\u5F93\u3046\u300D\u3067\u30A8\u30C7\u30A3\u30BF\u306E\u914D\u8272\u306B\u623B\u308A\u307E\u3059","plugins.pendingTitle":"\u7121\u52B9\uFF08\u672A\u627F\u8A8D\uFF09","plugins.pendingHint":"\u3053\u306E\u884C\u306E\u300C\u4FE1\u983C\u300D\u3092\u62BC\u3059\u307E\u3067\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u305B\u3093","plugins.trashTitle":"\u30B4\u30DF\u7BB1","plugins.trashCount":"{n} \u4EF6","plugins.trashNote":"\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306F\u30D5\u30A9\u30EB\u30C0\u3092\u3053\u3053\u3078\u79FB\u3059\u3060\u3051\u3067\u3059\u3002\u300C\u5143\u306B\u623B\u3059\u300D\u3067\u5143\u306E\u5834\u6240\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3001\u305D\u308C\u4EE5\u5916\u306F\u30B0\u30ED\u30FC\u30D0\u30EB\uFF09\u306B\u623B\u308A\u307E\u3059\u3002","plugins.removedAt":"\u79FB\u52D5\u65E5\u6642\uFF1A{at}","plugins.openTrash":"\u30B4\u30DF\u7BB1\u3092\u958B\u304F","plugins.openTrashTitle":"OS \u306E\u30D5\u30A1\u30A4\u30EB\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC\u3067\u30B4\u30DF\u7BB1\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F","plugins.openGlobal":"\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F","plugins.openGlobalTitle":"OS \u306E\u30D5\u30A1\u30A4\u30EB\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC\u3067\u30B0\u30ED\u30FC\u30D0\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F","plugins.offTitle":"\u30D7\u30E9\u30B0\u30A4\u30F3\u6A5F\u80FD\u306F\u30AA\u30D5\u3067\u3059","plugins.offNote":"\u5207\u308A\u66FF\u3048\u306F\u300C\u4E00\u822C\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u8A2D\u5B9A\uFF08luban.plugins.enabled\uFF09\u306B\u3042\u308A\u307E\u3059\u3002\u30AA\u30D5\u306E\u9593\u306F\u30D7\u30E9\u30B0\u30A4\u30F3\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u305A\u3001\u3053\u3053\u306E\u30C4\u30FC\u30EB\u3082 Agent \u306B\u306F\u6E21\u308A\u307E\u305B\u3093\u3002","plugins.offGo":"\u4E00\u822C\u3092\u958B\u304F","plugins.foot":"\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3053\u306E\u30DE\u30B7\u30F3\u4E0A\u3067\u81EA\u5206\u306E\u6A29\u9650\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002\u4FE1\u983C\u3067\u304D\u308B\u914D\u5E03\u5143\u3060\u3051\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044","plugins.scopeGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB","plugins.scopeProject":"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","plugins.ro":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528","plugins.rw":"\u66F8\u304D\u8FBC\u307F","plugins.roTip":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u5BA3\u8A00\uFF1APlan \u30E2\u30FC\u30C9\u3067\u3082\u8A31\u53EF\u3055\u308C\u307E\u3059","plugins.rwTip":"\u526F\u4F5C\u7528\u3042\u308A\uFF1APlan \u30E2\u30FC\u30C9\u3067\u306F\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3059","plugins.uninstall":"\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB","plugins.restore":"\u5143\u306B\u623B\u3059","plugins.trust":"\u4FE1\u983C","plugins.replaceConfirm":"\u540C\u540D\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u300C{name}\u300D\u304C\u65E2\u306B\u3042\u308A\u307E\u3059\u3002\u53E4\u3044\u3082\u306E\u3092\u30B4\u30DF\u7BB1\u3078\u79FB\u3057\u3001\u4ECA\u56DE\u9078\u3093\u3060\u30D5\u30A9\u30EB\u30C0\u3067\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F","general.title":"\u4E00\u822C","general.statusReady":"\u6E96\u5099\u5B8C\u4E86","general.save":"\u4FDD\u5B58","general.unsaved":"\u672A\u4FDD\u5B58","general.saving":"\u4FDD\u5B58\u4E2D\u2026","general.loaded":"\u8AAD\u307F\u8FBC\u307F\u6E08\u307F","general.saved":"\u4FDD\u5B58\u3057\u307E\u3057\u305F","general.invalid":"\u691C\u8A3C\u30A8\u30E9\u30FC {n} \u4EF6","general.groupUi":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9","general.groupContext":"\u81EA\u52D5\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8","general.groupSession":"\u30BB\u30C3\u30B7\u30E7\u30F3","general.groupAgent":"Agent","general.groupTools":"\u30C4\u30FC\u30EB\u3068\u5B89\u5168","general.groupNetwork":"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF","general.netTlsMaxVersion":"TLS \u306E\u6700\u9AD8\u30D0\u30FC\u30B8\u30E7\u30F3","general.netTlsMaxVersionTitle":"\u30E2\u30C7\u30EB\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u4F7F\u3046 TLS \u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u4E0A\u9650\u3002\u5909\u66F4\u306F\u4EE5\u964D\u306B\u65B0\u898F\u78BA\u7ACB\u3059\u308B\u63A5\u7D9A\u306B\u306E\u307F\u52B9\u304D\u307E\u3059","general.netTlsMaxVersionNote":"\u4E00\u90E8\u306E CDN \u30A8\u30C3\u30B8\u30CE\u30FC\u30C9\u306F TLS 1.3 \u306E\u30CF\u30F3\u30C9\u30B7\u30A7\u30A4\u30AF\u3092\u62D2\u5426\u3057\u3066\u5207\u65AD\u3057\u307E\u3059\uFF08\u75C7\u72B6\uFF1A\u6642\u3005\u300C\u63A5\u7D9A\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u300D\uFF09\u30021.2 \u306B\u3059\u308B\u3068\u56DE\u907F\u3067\u304D\u307E\u3059\u3002\u4EE5\u964D\u306B\u65B0\u898F\u78BA\u7ACB\u3059\u308B\u63A5\u7D9A\u306B\u306E\u307F\u5F71\u97FF\u3057\u307E\u3059\u3002","general.tlsAuto":"\u81EA\u52D5\uFF08TLS 1.3\uFF09","general.tls12":"TLS 1.2 \u306B\u5236\u9650","general.groupBrowser":"\u30D6\u30E9\u30A6\u30B6\u30FC\uFF08\u62E1\u5F35\u8A2D\u5B9A\uFF09","general.groupReview":"\u30EC\u30D3\u30E5\u30FC","general.groupInline":"Tab \u88DC\u5B8C","general.groupUsage":"\u4F7F\u7528\u91CF","general.language":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u8A00\u8A9E","general.languageTitle":"Luban \u306E UI \u306E\u307F\u306B\u5F71\u97FF\u3057\u3001\u30A8\u30C7\u30A3\u30BF\u306E\u8868\u793A\u8A00\u8A9E\u306F\u5909\u308F\u308A\u307E\u305B\u3093","general.languageNote":"Luban \u81EA\u8EAB\u306E UI \u306E\u307F\u306B\u5F71\u97FF\u3057\u307E\u3059 \u2014 VS Code / VSCodium \u306E\u8868\u793A\u8A00\u8A9E\u306F\u5909\u308F\u308A\u307E\u305B\u3093\u3002\u30B3\u30DE\u30F3\u30C9\u30D1\u30EC\u30C3\u30C8\u306E\u30BF\u30A4\u30C8\u30EB\u306F\u30A8\u30C7\u30A3\u30BF\u8A00\u8A9E\u306B\u5F93\u3044\u307E\u3059\u3002","general.langAuto":"VS Code \u306E\u8868\u793A\u8A00\u8A9E\u306B\u5408\u308F\u305B\u308B","general.langZhCn":"\u7B80\u4F53\u4E2D\u6587","general.langEn":"English","general.langJa":"\u65E5\u672C\u8A9E","general.autoOpen":"\u8D77\u52D5\u6642\u306B\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u958B\u304F","general.contextAutoFile":"\u73FE\u5728\u306E\u30A8\u30C7\u30A3\u30BF\u30B3\u30FC\u30C9\u3092\u6DFB\u4ED8","general.contextMaxChars":"\u6587\u5B57\u6570\u4E0A\u9650","general.contextWindowLines":"\u30A6\u30A3\u30F3\u30C9\u30A6\u884C\u6570\uFF08\u9078\u629E\u306A\u3057\uFF09","general.sessionHistoryMax":"\u30BB\u30C3\u30B7\u30E7\u30F3\u5C65\u6B74\u306E\u4E0A\u9650","general.sessionMemoryEnabled":"\u30DE\u30EB\u30C1\u30BF\u30FC\u30F3\u8A18\u61B6","general.sessionMemoryMaxTurns":"\u8A18\u61B6\u30BF\u30FC\u30F3\u6570","general.sessionMemoryMaxChars":"\u8A18\u61B6\u306E\u6587\u5B57\u4E88\u7B97","general.agentMaxRounds":"\u30EA\u30AF\u30A8\u30B9\u30C8\u30E9\u30A6\u30F3\u30C9\u4E0A\u9650\uFF080 = \u7121\u5236\u9650\uFF09","general.agentMaxMinutes":"\u30A6\u30A9\u30FC\u30EB\u30AF\u30ED\u30C3\u30AF\u4E0A\u9650\uFF08\u5206\uFF09","general.agentNoWriteNudges":"\u7A7A\u56DE\u3057\u50AC\u4FC3\u56DE\u6570\uFF080 = \u7121\u52B9\uFF09","general.agentSubagentRounds":"\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30E9\u30A6\u30F3\u30C9\u6570\uFF080 = \u30AA\u30D5\uFF09","general.agentSubagentMinutes":"\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u5236\u9650\u6642\u9593\uFF08\u5206\u30010 = \u30BF\u30FC\u30F3\u306B\u8FFD\u5F93\uFF09","general.agentSmallWindow":"\u5C0F\u30A6\u30A3\u30F3\u30C9\u30A6\u30E2\u30FC\u30C9","general.smallWindowAuto":"\u81EA\u52D5\uFF08\u30E2\u30C7\u30EB\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u3088\u308B\uFF09","general.smallWindowOn":"\u5F37\u5236\u30AA\u30F3","general.smallWindowOff":"\u30AA\u30D5","general.agentVerbosity":"\u8A73\u7D30\u5EA6","general.verbosityConcise":"\u7C21\u6F54\uFF08\u4E00\u884C\uFF09","general.verbosityNormal":"\u6A19\u6E96\uFF08\u7C21\u6F54\u30EC\u30DD\u30FC\u30C8\uFF09","general.verbosityDetailed":"\u8A73\u7D30\uFF08\u69CB\u9020\u5316\uFF09","general.contextWorkset":"\u5909\u66F4\u30D5\u30A1\u30A4\u30EB\u3092\u81EA\u52D5\u3067\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B","general.searchMaxFiles":"search_code \u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u30D5\u30A1\u30A4\u30EB\u4E0A\u9650","general.planStrictReadOnly":"Plan \u30E2\u30FC\u30C9\u3067\u53B3\u683C\u306A\u8AAD\u307F\u53D6\u308A\u5C02\u7528","general.fsAllowOutside":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5916\u306E\u30D1\u30B9\u3092\u8A31\u53EF","general.diagAfterEdit":"\u66F8\u304D\u8FBC\u307F\u5F8C\u306B\u8A3A\u65AD\u3092\u81EA\u52D5\u8AAD\u307F\u8FBC\u307F","general.browserEnabled":"\u5185\u8535\u30D6\u30E9\u30A6\u30B6\u30FC\u30C4\u30FC\u30EB\u3092\u6709\u52B9\u5316","general.browserHeadless":"\u30D8\u30C3\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\uFF08\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u51FA\u3055\u306A\u3044\uFF09","general.browserViewportWidth":"\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u5E45\uFF08320\u301C4096\uFF09","general.browserViewportHeight":"\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u9AD8\u3055\uFF08240\u301C4096\uFF09","general.browserIdleTimeoutMs":"\u30A2\u30A4\u30C9\u30EB\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF08ms\uFF09","general.browserChromePath":"Chrome / Edge \u306E\u30D1\u30B9","general.browserChromePathPh":"\u7A7A\u6B04\u3067\u81EA\u52D5\u691C\u51FA\uFF08LUBAN_CHROME_PATH \u3082\u53C2\u7167\uFF09","general.browserNote":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30C4\u30FC\u30EB\uFF1A\u30DA\u30FC\u30B8\u3092\u958B\u304F / \u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u30C4\u30EA\u30FC / \u30B9\u30AF\u30EA\u30FC\u30F3\u30B7\u30E7\u30C3\u30C8 / console / \u5931\u6557\u30EA\u30AF\u30A8\u30B9\u30C8\u3002\u30AF\u30EA\u30C3\u30AF\u3084\u5165\u529B\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u30ED\u30FC\u30AB\u30EB\u306E Chrome \u307E\u305F\u306F Edge \u304C\u5FC5\u8981\u3067\u3059\u3002\u30AA\u30D5\u306E\u3068\u304D\u306F\u30C4\u30FC\u30EB\u304C\u30E2\u30C7\u30EB\u306E\u4E00\u89A7\u306B\u51FA\u307E\u305B\u3093\u3002","general.groupComputer":"\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u64CD\u4F5C\uFF08macOS / Windows\uFF09","general.computerEnabled":"\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u64CD\u4F5C\u30C4\u30FC\u30EB\u3092\u6709\u52B9\u5316","general.computerConfirm":"\u30DE\u30A6\u30B9 / \u30AD\u30FC\u30DC\u30FC\u30C9\u64CD\u4F5C\u306E\u524D\u306B 1 \u56DE\u78BA\u8A8D","general.computerScreenshotWidth":"\u64AE\u5F71\u306E\u6700\u5927\u5E45\uFF08320\u301C4096\uFF09","general.computerNote":"\u64AE\u5F71 / \u753B\u9762\u5185\u30C6\u30AD\u30B9\u30C8\u306E\u8A8D\u8B58\uFF08Windows \u3067\u306F\u672A\u5BFE\u5FDC\u3067\u3001\u30B9\u30AF\u30EA\u30FC\u30F3\u30B7\u30E7\u30C3\u30C8\u3092\u898B\u308B\u7D4C\u8DEF\u306B\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\uFF09/ \u30A6\u30A3\u30F3\u30C9\u30A6\u4E00\u89A7 / \u30AF\u30EA\u30C3\u30AF / \u5165\u529B / \u30AD\u30FC / \u30B9\u30AF\u30ED\u30FC\u30EB / \u30C9\u30E9\u30C3\u30B0\u3002macOS \u3068 Windows \u3067\u4F7F\u7528\u53EF\u3001Plan \u30E2\u30FC\u30C9\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\u3002macOS \u3067\u306F\u30DB\u30B9\u30C8 App \u306B\u300C\u753B\u9762\u53CE\u9332\u300D\u3068\u300C\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u300D\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3001\u7121\u3044\u3068\u64AE\u5F71\u306F\u5931\u6557\u3057\u30AF\u30EA\u30C3\u30AF\u306F\u30B7\u30B9\u30C6\u30E0\u306B\u7834\u68C4\u3055\u308C\u307E\u3059\u3002Windows \u306F\u6A29\u9650\u4E0D\u8981\u3067\u3059\u304C\u3001\u7BA1\u7406\u8005\u3068\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u306F\u901A\u5E38\u30D7\u30ED\u30BB\u30B9\u306E\u5165\u529B\u3092\u7121\u8996\u3057\u307E\u3059\u3002","general.groupPlugins":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3","general.pluginsEnabled":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u6709\u52B9\u5316","general.pluginsMaxTools":"\u30C4\u30FC\u30EB\u6570\u306E\u4E0A\u9650\uFF081\u301C200\uFF09","general.pluginsNote":"~/.luban/plugins \u3068 <\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9>/.luban/plugins \u304B\u3089\u3001plugin.json \u3092\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u3068\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059\u3002\u30C4\u30FC\u30EB\u306F pl__ \u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u4ED8\u304D\u3067\u30E2\u30C7\u30EB\u306E\u4E00\u89A7\u306B\u73FE\u308C\u307E\u3059\u3002\u521D\u56DE\u8AAD\u307F\u8FBC\u307F\u6642\u3068\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u5BB9\u304C\u5909\u5316\u3057\u305F\u3068\u304D\u306B\u78BA\u8A8D\u30C0\u30A4\u30A2\u30ED\u30B0\u304C\u51FA\u307E\u3059\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u62E1\u5F35\u6A5F\u80FD\u306E\u30D7\u30ED\u30BB\u30B9\u5185\u3067\u52D5\u304F\u305F\u3081\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u4FE1\u983C\u3067\u304D\u308B\u30B3\u30FC\u30C9\u3060\u3051\u3092\u5165\u308C\u3066\u304F\u3060\u3055\u3044\u3002Plan \u30E2\u30FC\u30C9\u3067\u306F\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u3068\u7533\u544A\u3057\u305F\u30C4\u30FC\u30EB\u306E\u307F\u8A31\u53EF\u3055\u308C\u307E\u3059\u3002","general.reviewAutoOpenDiff":"\u66F8\u304D\u8FBC\u307F\u5F8C\u306B diff \u3092\u81EA\u52D5\u8868\u793A","general.reviewAutoKeep":"\u65E2\u5B9A\u3067\u81EA\u52D5\u4FDD\u6301\uFF08\u4FDD\u7559\u30EC\u30D3\u30E5\u30FC\u3092\u30B9\u30AD\u30C3\u30D7\uFF09","general.reviewAutoKeepNote":"\u300C\u81EA\u52D5\u4FDD\u6301\u300D\u306F\u30EC\u30D3\u30E5\u30FC\u57FA\u6E96\u3092\u305D\u306E\u307E\u307E\u5F15\u304D\u4E0A\u3052\u308B\u305F\u3081\u3001\u4FDD\u7559\u30EC\u30D3\u30E5\u30FC\u306B\u3082 diff \u306B\u3082\u6B8B\u3089\u305A\u3001\u623B\u3059\u624B\u6BB5\u306F git \u306E\u307F\u3002\u30AF\u30EA\u30FC\u30F3\u306A git \u30EF\u30FC\u30AF\u30C4\u30EA\u30FC\u3067\u306E\u307F\u6709\u52B9\uFF08\u672A\u30B3\u30DF\u30C3\u30C8\u306E\u5909\u66F4\u3084\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u306A\u3044\u5834\u5408\u306F\u30CF\u30F3\u30AF\u5358\u4F4D\u306E\u30EC\u30D3\u30E5\u30FC\u306B\u623B\u308B\uFF09\u3002Plan \u306E\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30FB\u5371\u967A\u30B3\u30DE\u30F3\u30C9\u306E\u30D6\u30E9\u30C3\u30AF\u30EA\u30B9\u30C8\u30FBcomputer \u306E\u78BA\u8A8D\u306F\u5F71\u97FF\u3092\u53D7\u3051\u306A\u3044\u3002","general.inlineEnabled":"Tab \u88DC\u5B8C\u3092\u6709\u52B9\u5316","general.inlineMaxPerMinute":"1 \u5206\u3042\u305F\u308A\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u4E0A\u9650","general.inlineDebounceMs":"\u30C7\u30D0\u30A6\u30F3\u30B9\u9045\u5EF6\uFF08ms\uFF09","general.usageRecord":"Token \u4F7F\u7528\u91CF\u3092\u8A18\u9332","general.errLanguage":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u8A00\u8A9E\u306F auto / en / zh-cn / ja \u306E\u307F\u3067\u3059","general.errEnum":"\u300C{key}\u300D\u306E\u5024\u304C\u4E0D\u6B63\u3067\u3059","general.errNumber":"\u300C{key}\u300D\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","general.errMin":"\u300C{key}\u300D\u306F {min} \u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","general.errMax":"\u300C{key}\u300D\u306F {max} \u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","settings.title":"Provider \u8A2D\u5B9A","settings.statusReady":"\u6E96\u5099\u5B8C\u4E86","settings.save":"\u4FDD\u5B58","settings.defaultModel":"\u30C7\u30D5\u30A9\u30EB\u30C8\u30E2\u30C7\u30EB","settings.defaultModelTitle":"\u30D1\u30CD\u30EB\u306E\u30E2\u30C7\u30EB\u30C9\u30ED\u30C3\u30D7\u30C0\u30A6\u30F3\u306E\u521D\u671F\u9078\u629E","settings.defaultModelNote":"\u30E2\u30C7\u30EB id \u304C provider \u9593\u3067\u91CD\u8907\u3059\u308B\u5834\u5408\u306F\u81EA\u52D5\u3067 <code>providerId::modelId</code> \u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u304C\u4ED8\u304D\u307E\u3059\u3002API \u30AD\u30FC\u306F VS Code SecretStorage \u306B\u4FDD\u5B58\u3055\u308C\u3001\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306B\u306F\u66F8\u304D\u307E\u305B\u3093\u3002","settings.addProvider":"+ provider \u3092\u8FFD\u52A0","settings.openConfig":"providers.json \u3092\u958B\u304F","settings.reload":"\u8A2D\u5B9A\u3092\u518D\u8AAD\u307F\u8FBC\u307F","settings.reloadTitle":"providers.json \u3092\u8AAD\u307F\u76F4\u3057\u307E\u3059\uFF08\u30B9\u30AD\u30EB / \u30EB\u30FC\u30EB / MCP \u3092\u542B\u3080\uFF09\u3002\u672A\u4FDD\u5B58\u306E\u7DE8\u96C6\u306F\u7834\u68C4\u3055\u308C\u307E\u3059","settings.reloading":"\u518D\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","settings.unsaved":"\u672A\u4FDD\u5B58","settings.firstModel":"\uFF08\u6700\u521D\u306E\u30E2\u30C7\u30EB\uFF09","settings.noModel":"\uFF08\u30E2\u30C7\u30EB\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF09","settings.modelIdPh":"model id\uFF08\u5FC5\u9808\uFF09","settings.modelNamePh":"\u8868\u793A\u540D\uFF08\u4EFB\u610F\uFF09","settings.toolCallingTitle":"toolCalling\uFF1AAgent \u30E2\u30FC\u30C9\u3067\u4F7F\u3046\u306B\u306F\u30C1\u30A7\u30C3\u30AF\u5FC5\u9808","settings.visionTitle":"vision\uFF1A\u30E2\u30C7\u30EB\u304C\u753B\u50CF\u5165\u529B\u306B\u5BFE\u5FDC\uFF08\u30C1\u30E3\u30C3\u30C8\u306B\u753B\u50CF\u3092\u8CBC\u308A\u4ED8\u3051\uFF09","settings.thinkTitle":"thinking\uFF1A\u601D\u8003\u30C6\u30A3\u30A2\u3002on / off \u306E JSON \u306F\u305D\u306E\u307E\u307E\u30EA\u30AF\u30A8\u30B9\u30C8\u672C\u6587\u306B\u30DE\u30FC\u30B8\u3055\u308C\u307E\u3059\uFF08\u4F8B: chat_template_kwargs.enable_thinking\u3001reasoning\u3001think\uFF09\uFF1B\u7A7A\u306A\u3089\u305D\u306E\u30C6\u30A3\u30A2\u306F\u4F55\u3082\u9001\u308A\u307E\u305B\u3093\u3002\u300C\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u5165\u529B\u300D\u3067\u4E00\u822C\u7684\u306A\u65B9\u8A00\u3092\u751F\u6210\u3067\u304D\u307E\u3059","settings.thinkDefault":"\u30C7\u30D5\u30A9\u30EB\u30C8\u30C6\u30A3\u30A2","settings.thinkDefaultOff":"\u30C7\u30D5\u30A9\u30EB\u30C8\uFF1A\u30AA\u30D5","settings.thinkDefaultOn":"\u30C7\u30D5\u30A9\u30EB\u30C8\uFF1A\u30AA\u30F3","settings.thinkPreset":"\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u5165\u529B\u2026","settings.thinkPresetQwen":"Qwen / vLLM","settings.thinkPresetDeepseek":"DeepSeek","settings.thinkPresetOpenrouter":"OpenRouter","settings.thinkPresetAnthropic":"Anthropic \u4E92\u63DB","settings.thinkPresetOllama":"Ollama","settings.thinkPresetOverwrite":"on / off \u306B\u65E2\u306B\u5185\u5BB9\u304C\u3042\u308A\u307E\u3059\u3002\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3067\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F","settings.thinkOn":"\u30AA\u30F3\uFF08on\uFF09","settings.thinkOff":"\u30AA\u30D5\uFF08off\uFF09","settings.thinkOnPh":'\u7A7A = \u9001\u4FE1\u3057\u306A\u3044\u3002\u4F8B: { "chat_template_kwargs": { "enable_thinking": true } }',"settings.thinkOffPh":'\u7A7A = \u9001\u4FE1\u3057\u306A\u3044\u3002\u4F8B: { "thinking": { "type": "disabled" } }',"settings.thinkBadJson":"{pos} \u30E2\u30C7\u30EB\u300C{id}\u300Dthinking.{tier} \u306F\u6B63\u3057\u3044 JSON \u3067\u306F\u3042\u308A\u307E\u305B\u3093","settings.thinkBadShape":"{pos} \u30E2\u30C7\u30EB\u300C{id}\u300Dthinking.{tier} \u306F JSON \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u914D\u5217\u3084\u30B9\u30AB\u30E9\u30FC\u4E0D\u53EF\uFF09","settings.thinkInline":"inline","settings.thinkInlineTitle":"inline: \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u304C\u601D\u8003\u3092\u305D\u306E\u307E\u307E content \u306B\u66F8\u304D\u8FBC\u3080\u5834\u5408\uFF08\u672B\u5C3E\u306E </think> \u306E\u307F\u3001\u6253\u3061\u5207\u3089\u308C\u308B\u3068\u30BF\u30B0\u3082\u51FA\u306A\u3044\uFF09\u3002\u30AA\u30F3\u306B\u3059\u308B\u3068\u601D\u8003\u3092\u6709\u52B9\u306B\u3057\u305F\u3068\u304D content \u3092\u6700\u521D\u306E 1 \u6587\u5B57\u304B\u3089\u601D\u8003\u30D6\u30ED\u30C3\u30AF\u306B\u96C6\u3081\u3001\u56DE\u7B54\u306B\u6F0F\u308C\u307E\u305B\u3093","settings.deleteModel":"\u3053\u306E\u30E2\u30C7\u30EB\u3092\u524A\u9664","settings.providerNamePh":"provider \u540D\uFF08\u4F8B: DeepSeek\uFF09","settings.deleteProvider":"provider \u3092\u524A\u9664","settings.idLabel":"id\uFF08\u4E00\u610F\uFF1B\u82F1\u6570\u5B57/_/-\uFF09","settings.apiKeyEnvLabel":"apiKeyEnv\uFF08\u4EFB\u610F\uFF09","settings.keyLabel":"API key\uFF08VS Code SecretStorage \u306B\u4FDD\u5B58\uFF09","settings.keyPhSaved":"\u4FDD\u5B58\u6E08\u307F \u2014 \u7A7A\u6B04\u306E\u307E\u307E\u306A\u3089\u5909\u66F4\u3057\u307E\u305B\u3093","settings.keyPh":"sk-\u2026\uFF08SecretStorage \u306E\u307F\u306B\u66F8\u304D\u8FBC\u307F\uFF09","settings.clearKey":"\u30AD\u30FC\u3092\u30AF\u30EA\u30A2","settings.test":"\u63A5\u7D9A\u30C6\u30B9\u30C8","settings.testing":"\u30C6\u30B9\u30C8\u4E2D\u2026\uFF08\u6700\u521D\u306E\u30E2\u30C7\u30EB\u3001max_tokens=1\uFF09","settings.fetchModels":"\u30E2\u30C7\u30EB\u3092\u53D6\u5F97","settings.fetching":"/models \u3092\u30EA\u30AF\u30A8\u30B9\u30C8\u3057\u3001\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u691C\u51FA\u4E2D\u2026","settings.modelsHead":"\u30E2\u30C7\u30EB\uFF08{n}\uFF09\xB7 id / \u8868\u793A\u540D / maxInputTokens / maxOutputTokens / toolCalling / vision / thinking","settings.modelsColsId":"id","settings.modelsColsName":"\u8868\u793A\u540D","settings.modelsColsIn":"\u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6","settings.modelsColsOut":"\u51FA\u529B\u4E0A\u9650","settings.modelsColsTools":"tools","settings.modelsColsVision":"vision","settings.limitsNote":"\u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6 = \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5168\u4F53\u306E\u4E88\u7B97\uFF08maxInputTokens\uFF09\u3001\u51FA\u529B\u4E0A\u9650 = 1 \u56DE\u306E\u56DE\u7B54\u4E0A\u9650\uFF08maxOutputTokens\u3001\u9577\u3044\u30D5\u30A1\u30A4\u30EB / \u601D\u8003\u30E2\u30C7\u30EB\u306F 16384 \u4EE5\u4E0A\u63A8\u5968\uFF09\u3002\u5408\u8A08\u304C\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306E\u5B9F\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u8D85\u3048\u306A\u3044\u3088\u3046\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u7A7A\u6B04\u306F 65536 / 8192 \u3068\u3057\u3066\u6271\u3044\u307E\u3059\u3002","settings.maxInTitle":"maxInputTokens\uFF1A\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5168\u4F53\u306E\u4E88\u7B97\u3002\u30ED\u30FC\u30AB\u30EB\u30E2\u30C7\u30EB\u3067\u306F\u30B5\u30FC\u30D0\u30FC\u306E\u5B9F\u30A6\u30A3\u30F3\u30C9\u30A6\u4EE5\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08Ollama \u306F OLLAMA_CONTEXT_LENGTH / num_ctx\uFF09","settings.maxOutTitle":"maxOutputTokens\uFF1A1 \u56DE\u306E\u56DE\u7B54\u4E0A\u9650\uFF08max_tokens\uFF09\u3002\u9577\u3044\u30D5\u30A1\u30A4\u30EB\u3084\u601D\u8003\u30E2\u30C7\u30EB\u306F 16384 \u4EE5\u4E0A\u63A8\u5968","settings.limitPreset":"\u3088\u304F\u4F7F\u3046\u30A6\u30A3\u30F3\u30C9\u30A6\u2026","settings.limitPresetSmall":"8k / 2k","settings.limitPreset16":"16k / 4k","settings.limitPreset32":"32k / 8k","settings.limitPreset64":"64k / 16k","settings.limitPreset128":"128k / 16k","settings.limitPreset256":"256k / 32k","settings.limitPreset512":"512k / 32k","settings.limitPreset1m":"1M / 32k","settings.suggestLimits":"\u30A6\u30A3\u30F3\u30C9\u30A6 {in} / \u51FA\u529B {out} \u3092\u691C\u51FA\uFF08{source}\uFF09","settings.suggestTraining":"\uFF08\u5B66\u7FD2\u6642\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3002\u30B5\u30FC\u30D0\u30FC\u306E num_ctx \u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09","settings.applySuggestion":"\u63A1\u7528","settings.sourceGeneric":"\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF","settings.sourceOpenrouter":"OpenRouter","settings.sourceVllm":"vLLM","settings.sourceOllama":"Ollama","settings.sourceLlamacpp":"llama.cpp","settings.warningTitle":"\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A","settings.warnThinkOutput":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306F thinking \u6709\u52B9\u3067\u3059\u304C\u51FA\u529B\u4E0A\u9650\u304C {n} \u3057\u304B\u3042\u308A\u307E\u305B\u3093\u3002\u601D\u8003\u30C8\u30FC\u30AF\u30F3\u3082\u3053\u3053\u304B\u3089\u6D88\u8CBB\u3059\u308B\u305F\u3081\u3001\u672C\u6587\u304C\u7A7A\u306B\u306A\u308A\u3084\u3059\u3044\u3067\u3059","settings.warnOutGeIn":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306E\u51FA\u529B\u4E0A\u9650 \u2265 \u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059\u3002\u5024\u304C\u9006\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059","settings.warnSmallWindow":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306E\u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6 < 16k\uFF1A\u5C0F\u30A6\u30A3\u30F3\u30C9\u30A6\u30E2\u30FC\u30C9\u306B\u306A\u308A\u3001\u30C4\u30FC\u30EB\u3068\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7C21\u7565\u5316\u3055\u308C\u307E\u3059","settings.warnHuge":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306E\u30A6\u30A3\u30F3\u30C9\u30A6 / \u51FA\u529B\u4E0A\u9650\u304C\u7570\u5E38\u306B\u5927\u304D\u3044\u3067\u3059\uFF08{n}\uFF09\u3002\u5165\u529B\u30DF\u30B9\u3067\u306A\u3044\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044","settings.addModel":"+ \u30E2\u30C7\u30EB\u3092\u8FFD\u52A0","settings.errors":"\u4FEE\u6B63\u304C\u5FC5\u8981\u306A\u7B87\u6240\u304C {n} \u4EF6\u3042\u308A\u307E\u3059\uFF1A","settings.noProviders":"\u307E\u3060 provider \u304C\u3042\u308A\u307E\u305B\u3093 \u2014 \u4E0B\u306E\u300C+ provider \u3092\u8FFD\u52A0\u300D\u304B\u3089\u59CB\u3081\u3066\u304F\u3060\u3055\u3044\u3002","settings.saving":"\u4FDD\u5B58\u4E2D\u2026","settings.builtin":"\u5185\u8535\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u8A2D\u5B9A\u3092\u4F7F\u7528\u4E2D\uFF1B\u4FDD\u5B58\u3059\u308B\u3068 {path} \u306B\u66F8\u304D\u8FBC\u307F\u307E\u3059","settings.loaded":"\u8AAD\u307F\u8FBC\u307F\u6E08\u307F","settings.saved":"\u4FDD\u5B58\u3057\u307E\u3057\u305F \xB7 \u30E2\u30C7\u30EB {n}","settings.invalid":"\u554F\u984C\u304C {n} \u4EF6\u3042\u308A\u3001\u4FDD\u5B58\u3057\u3066\u3044\u307E\u305B\u3093","settings.testOk":"\u524D\u56DE\u306E\u30C6\u30B9\u30C8 OK \xB7 {ms}ms","settings.testFailed":"\u524D\u56DE\u306E\u30C6\u30B9\u30C8\u5931\u6557","settings.testOkResult":"\u2705 HTTP {status} \xB7 {ms}ms{reply}","settings.testFailResult":"\u274C {msg}","settings.fail":"\u5931\u6557","settings.fetchFail":"\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F","settings.fetched":"\u2705 \u30E2\u30C7\u30EB\u3092 {n} \u4EF6\u53D6\u5F97","settings.fetchedWithMeta":"\u2705 \u30E2\u30C7\u30EB\u3092 {n} \u4EF6\u53D6\u5F97\uFF08{m} \u4EF6\u306B\u30A6\u30A3\u30F3\u30C9\u30A6\u60C5\u5831\u3042\u308A\uFF09","settings.fetchedAdded":"\uFF1B\u65B0\u898F {n} \u4EF6\uFF08\u4FDD\u5B58\u3092\u5FD8\u308C\u305A\u306B\uFF09","settings.fetchedNone":"\uFF1B\u65B0\u3057\u3044\u30E2\u30C7\u30EB\u306F\u3042\u308A\u307E\u305B\u3093","settings.keySet":"\u4FDD\u5B58\u6642\u306B SecretStorage \u3078\u66F8\u304D\u8FBC\u307F\u307E\u3059\uFF08\u30C7\u30A3\u30B9\u30AF\u306B\u306F\u66F8\u304D\u307E\u305B\u3093\uFF09","settings.keyClear":"\u4FDD\u5B58\u6642\u306B\u4FDD\u5B58\u6E08\u307F\u30AD\u30FC\u3092\u524A\u9664\u3057\u307E\u3059","settings.keySecret":"\u3059\u3067\u306B SecretStorage \u306B\u3042\u308A\u307E\u3059","settings.keyInline":"\u8A2D\u5B9A\u306B\u5E73\u6587 apiKey \u304C\u3042\u308A\u307E\u3059\uFF08\u4FDD\u5B58\u6642\u3082\u4FDD\u6301\uFF09","settings.keyEnv":"\u74B0\u5883\u5909\u6570 {env} \u3092\u4F7F\u7528\uFF08\u30AD\u30FC\u306F\u3053\u3053\u306B\u8868\u793A\u3055\u308C\u307E\u305B\u3093\uFF09","settings.keyNone":"\u30AD\u30FC\u672A\u8A2D\u5B9A","settings.unnamedModel":"\u540D\u79F0\u672A\u8A2D\u5B9A","webdav.title":"\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08WebDAV\uFF09","webdav.enabled":"\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u6709\u52B9\u306B\u3059\u308B","webdav.url":"\u30B5\u30FC\u30D0\u30FC URL","webdav.urlPh":"https://dav.example.com/remote.php/dav/files/me","webdav.username":"\u30E6\u30FC\u30B6\u30FC\u540D","webdav.usernamePh":"WebDAV \u30A2\u30AB\u30A6\u30F3\u30C8\uFF08\u7A7A\u6B04\u53EF\uFF09","webdav.password":"\u30D1\u30B9\u30EF\u30FC\u30C9 / \u30A2\u30D7\u30EA\u30D1\u30B9\u30EF\u30FC\u30C9","webdav.passwordPh":"\u7A7A\u6B04\u306A\u3089\u5909\u66F4\u3057\u307E\u305B\u3093\uFF08SecretStorage \u306B\u4FDD\u5B58\u6E08\u307F\uFF09","webdav.passwordPhNew":"SecretStorage \u306E\u307F\u306B\u4FDD\u5B58\u3057\u3001\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306B\u306F\u66F8\u304D\u307E\u305B\u3093","webdav.clearPassword":"\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u524A\u9664","webdav.remoteDir":"\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC","webdav.remoteDirPh":"luban","webdav.perMachine":"\u30DE\u30B7\u30F3\u3054\u3068\u306B\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u5206\u3051\u308B","webdav.perMachineHint":"\u30AA\u30F3\u306B\u3059\u308B\u3068\u5B9F\u969B\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u306F\u300C\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC / \u3053\u306E\u30DE\u30B7\u30F3\u306E\u540D\u524D\u300D\u306B\u306A\u308A\u3001\u8907\u6570\u306E PC \u304C\u305D\u308C\u305E\u308C\u72EC\u7ACB\u306B\u4FDD\u5B58\u3055\u308C\u4E0A\u66F8\u304D\u3057\u5408\u3044\u307E\u305B\u3093\u3002\u30AA\u30D5\u306E\u5834\u5408\u306F\u5168\u30DE\u30B7\u30F3\u3067\u540C\u3058\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u5171\u6709\u3057\u307E\u3059\uFF08\u6700\u5F8C\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u512A\u5148\uFF09\u3002","webdav.machine":"\u8AAD\u307F\u53D6\u308A\u5143\u306E\u30DE\u30B7\u30F3","webdav.machineHint":"\u300C\u8AAD\u307F\u53D6\u308A\u5143\u306E\u30DE\u30B7\u30F3\u300D\u306F\u300C\u30EA\u30E2\u30FC\u30C8\u306E\u5185\u5BB9\u3092\u898B\u308B\u300D\u300C\u30EA\u30E2\u30FC\u30C8\u304B\u3089\u5FA9\u5143\u300D\u3060\u3051\u306B\u52B9\u304D\u307E\u3059\u3002\u5225\u306E PC \u3092\u9078\u3076\u3068\u305D\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u8AAD\u307F\u307E\u3059\uFF08\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306F\u5E38\u306B\u3053\u306E\u30DE\u30B7\u30F3\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u3078\u66F8\u304D\u8FBC\u307F\u307E\u3059\uFF09\u3002","webdav.machineRefresh":"\u4ED6\u306E PC \u3092\u63A2\u3059","webdav.machineRefreshTitle":"\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u914D\u4E0B\u306E\u5404\u30DE\u30B7\u30F3\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u4E00\u89A7\u3092\u8AAD\u307F\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u306E\u307F\u3001\u66F8\u304D\u8FBC\u307F\u306A\u3057\uFF09","webdav.machineLocal":"\u3053\u306E\u30DE\u30B7\u30F3\uFF08\u65E2\u5B9A\uFF09","webdav.machineShared":"\u5171\u6709\u30D5\u30A9\u30EB\u30C0\u30FC","webdav.machineItem":"{dir} \xB7 {at} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.machineItemLocal":"{dir}\uFF08\u3053\u306E\u30DE\u30B7\u30F3\uFF09 \xB7 {at} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.machineLoading":"\u30EA\u30E2\u30FC\u30C8\u306E\u30DE\u30B7\u30F3\u4E00\u89A7\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","webdav.machineNone":"\u30EA\u30E2\u30FC\u30C8\u306B\u3042\u308B\u306E\u306F\u3053\u306E\u30DE\u30B7\u30F3\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3060\u3051\u3067\u3059\uFF08{dir} \u914D\u4E0B\u306B\u4ED6\u306E PC \u306E\u3082\u306E\u306F\u3042\u308A\u307E\u305B\u3093\uFF09","webdav.machineFound":"{n} \u53F0\u5206\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u3042\u308A\u307E\u3059\u3002\u300C\u8AAD\u307F\u53D6\u308A\u5143\u306E\u30DE\u30B7\u30F3\u300D\u3067\u5207\u308A\u66FF\u3048\u3089\u308C\u307E\u3059","webdav.force":"\u30ED\u30FC\u30AB\u30EB\u306E\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u3082\u4E0A\u66F8\u304D","webdav.forceHint":"\u65E2\u5B9A\u3067\u306F\u300C\u30ED\u30FC\u30AB\u30EB\u304C\u30EA\u30E2\u30FC\u30C8\u306E\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u3088\u308A\u65B0\u3057\u3044\u300D\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\u3002\u30AA\u30F3\u306B\u3059\u308B\u3068\u4E0A\u66F8\u304D\u3057\u307E\u3059\uFF08\u5FA9\u5143\u524D\u306E\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u306F ~/.luban/backups/ \u306B\u6B8B\u308A\u307E\u3059\uFF09\u3002\u30DE\u30B7\u30F3\u9593\u3067 provider \u8A2D\u5B9A\u3092\u540C\u671F\u3059\u308B\u3068\u304D\u306B\u5FC5\u8981\u3067\u3059","webdav.statusListInfoLegacy":"\u30EA\u30E2\u30FC\u30C8\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08\u65E7\u30EB\u30FC\u30C8\uFF09 \xB7 {at} \xB7 {machine} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.includes":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u5BFE\u8C61","webdav.inc.sessions":"\u30BB\u30C3\u30B7\u30E7\u30F3\u5C65\u6B74","webdav.inc.attachments":"\u753B\u50CF\u6DFB\u4ED8","webdav.inc.plans":"\u30D7\u30E9\u30F3\u6587\u66F8","webdav.inc.config":"provider \u8A2D\u5B9A\uFF08\u5E73\u6587\u30AD\u30FC\u306F\u9664\u53BB\uFF09","webdav.inc.mcp":"mcp.json","webdav.providerTitle":"\u5FA9\u5143\u3059\u308B\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u3076","webdav.providerAll":"\u3059\u3079\u3066\u9078\u629E","webdav.providerNone":"\u3059\u3079\u3066\u89E3\u9664","webdav.providerConfirm":"\u9078\u629E\u3057\u305F\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u5FA9\u5143","webdav.providerCount":"{n} \u4EF6\u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u629E\u4E2D","webdav.providerCountNone":"\u5C11\u306A\u304F\u3068\u3082 1 \u4EF6\u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044","webdav.providerEmpty":"\u3053\u306E\u30DE\u30B7\u30F3\u306B\u306F\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u8A2D\u5B9A\uFF08providers.json\uFF09\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u4ED6\u306E\u30AB\u30C6\u30B4\u30EA\u30FC\u306E\u307F\u5FA9\u5143\u3057\u307E\u3059","webdav.providerLoading":"\u30EA\u30E2\u30FC\u30C8\u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u4E00\u89A7\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","webdav.providerHint":"\u30C1\u30A7\u30C3\u30AF\u3057\u305F\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3060\u3051\u3092\u30ED\u30FC\u30AB\u30EB\u8A2D\u5B9A\u306B\u30DE\u30FC\u30B8\u3057\u307E\u3059\uFF08\u540C\u3058 id \u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u304C\u65E2\u306B\u3042\u308B\u5834\u5408\u3001\u30ED\u30FC\u30AB\u30EB\u306E apiKey \u3092\u4FDD\u6301\u3057\u30E2\u30C7\u30EB\u3060\u3051\u8FFD\u52A0\uFF09","webdav.providerItem":"{name} \xB7 {n} \u30E2\u30C7\u30EB","webdav.providerItemExists":"{name} \xB7 {n} \u30E2\u30C7\u30EB\uFF08\u3053\u306E\u30DE\u30B7\u30F3\u306B\u65E2\u5B58\u3002\u30ED\u30FC\u30AB\u30EB\u306E apiKey \u3092\u4FDD\u6301\uFF09","webdav.providerPickHint":"\u300C\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u8A2D\u5B9A\u300D\u3092\u30AA\u30F3\u306B\u3057\u3066\u300C\u30EA\u30E2\u30FC\u30C8\u304B\u3089\u5FA9\u5143\u300D\u3092\u62BC\u3059\u3068\u3001\u5FA9\u5143\u3059\u308B\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u3079\u307E\u3059","webdav.save":"\u8A2D\u5B9A\u3092\u4FDD\u5B58","webdav.test":"\u63A5\u7D9A\u30C6\u30B9\u30C8","webdav.testing":"\u63A5\u7D9A\u4E2D\u2026","webdav.backup":"\u4ECA\u3059\u3050\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7","webdav.restore":"\u30EA\u30E2\u30FC\u30C8\u304B\u3089\u5FA9\u5143","webdav.list":"\u30EA\u30E2\u30FC\u30C8\u306E\u5185\u5BB9\u3092\u898B\u308B","webdav.openFile":"webdav.json \u3092\u958B\u304F","webdav.openFileTitle":"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306B\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u542B\u307E\u308C\u307E\u305B\u3093\uFF08SecretStorage \u306E\u307F\uFF09","webdav.note":"\u30D1\u30B9\u30EF\u30FC\u30C9\u306F VS Code \u306E SecretStorage \u306B\u4FDD\u5B58\u3057\u3001webdav.json \u306B\u306F\u66F8\u304D\u307E\u305B\u3093\u3002\u30BB\u30C3\u30B7\u30E7\u30F3\u672C\u6587\u306F\u30EA\u30E2\u30FC\u30C8\u3078\u9001\u4FE1\u3055\u308C\u308B\u305F\u3081\u3001\u4FE1\u983C\u3067\u304D\u308B\u30B5\u30FC\u30D0\u30FC\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5FA9\u5143\u524D\u306B\u306F\u4E0A\u66F8\u304D\u5BFE\u8C61\u306E\u30D5\u30A1\u30A4\u30EB\u3092 <code>~/.luban/backups/</code> \u306B\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u3057\u307E\u3059\u3002","webdav.statusReady":"\u6E96\u5099\u5B8C\u4E86","webdav.statusSaved":"\u8A2D\u5B9A\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F","webdav.statusInvalid":"{n} \u4EF6\u306E\u554F\u984C\u304C\u3042\u308A\u3001\u4FDD\u5B58\u3057\u3066\u3044\u307E\u305B\u3093","webdav.statusTestOk":"\u63A5\u7D9A OK \xB7 {ms}ms","webdav.statusTestCreate":"\u63A5\u7D9A OK\u3002\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u306F\u521D\u56DE\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u6642\u306B\u4F5C\u6210\u3057\u307E\u3059","webdav.statusTestFail":"\u63A5\u7D9A\u5931\u6557\uFF1A{msg}","webdav.statusBusy":"\u8EE2\u9001\u4E2D\u3067\u3059\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026","webdav.statusProgress":"{phase} {done}/{total}","webdav.statusBackupDone":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u5B8C\u4E86 \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.statusBackupDoneInc":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u5B8C\u4E86 \xB7 {u} \u4EF6\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 \xB7 {s} \u4EF6\u30B9\u30AD\u30C3\u30D7\uFF08\u5909\u66F4\u306A\u3057\uFF09","webdav.statusRestoreDone":"\u5FA9\u5143\u5B8C\u4E86 \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.catWrap":"\uFF08{parts}\uFF09","webdav.catSessions":"\u30BB\u30C3\u30B7\u30E7\u30F3 {n}","webdav.catAttachments":"\u6DFB\u4ED8 {n}","webdav.catPlans":"\u30D7\u30E9\u30F3 {n}","webdav.catProviders":"provider \u8A2D\u5B9A {n}","webdav.catMcp":"MCP \u8A2D\u5B9A {n}","webdav.statusRestorePartial":"\u30EA\u30E2\u30FC\u30C8\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u4E0D\u5B8C\u5168\u3067\u3059\uFF08\u524D\u56DE\u306E\u8EE2\u9001\u304C\u672A\u5B8C\u4E86\uFF09\u3001{n} \u4EF6\u30B9\u30AD\u30C3\u30D7","webdav.statusRestoreBlocked":"\u30ED\u30FC\u30AB\u30EB\u304C\u65B0\u3057\u3044 {n} \u4EF6\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u300C\u30ED\u30FC\u30AB\u30EB\u306E\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u3082\u4E0A\u66F8\u304D\u300D\u3092\u30AA\u30F3\u306B\u3057\u3066\u518D\u5B9F\u884C\uFF09","webdav.statusProviderMerged":"provider \u3092 {p} \u4EF6\u8FFD\u52A0 \xB7 \u30E2\u30C7\u30EB {m} \u4EF6","webdav.statusProviderNoNew":"provider \u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\uFF08\u8FFD\u52A0\u306A\u3057\uFF09","webdav.mergeSep":"\u3001","webdav.statusListNone":"\u30EA\u30E2\u30FC\u30C8\u306B Luban \u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093","webdav.statusListInfo":"\u30EA\u30E2\u30FC\u30C8\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7 \xB7 {at} \xB7 {machine} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.statusListPartial":"\uFF08\u524D\u56DE\u306E\u8EE2\u9001\u304C\u672A\u5B8C\u4E86\u3001{n} \u4EF6\u6B20\u843D\uFF09","webdav.statusNoUrl":"\u5148\u306B\u30B5\u30FC\u30D0\u30FC URL \u3092\u5165\u529B\u3057\u3066\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044","webdav.confirmOverwrite":"\u30EA\u30E2\u30FC\u30C8\u306B\u306F {machine} \u306E {at} \u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08{n} \u30D5\u30A1\u30A4\u30EB\uFF09\u304C\u3042\u308A\u307E\u3059\u3002\u7D9A\u884C\u3059\u308B\u3068\u3053\u306E\u30DE\u30B7\u30F3\u306E\u5185\u5BB9\u3067\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F","webdav.confirmOverwriteYes":"\u4E0A\u66F8\u304D\u3059\u308B","webdav.statusCancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F\uFF08\u30EA\u30E2\u30FC\u30C8\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306F\u5909\u66F4\u3057\u3066\u3044\u307E\u305B\u3093\uFF09","webdav.phase.test":"\u63A5\u7D9A","webdav.phase.scan":"\u30B9\u30AD\u30E3\u30F3","webdav.phase.upload":"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9","webdav.phase.manifest":"\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8","webdav.phase.snapshot":"\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8","webdav.phase.download":"\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9","webdav.phase.restore":"\u5FA9\u5143","webdav.phase.done":"\u5B8C\u4E86","webdav.phase.confirm":"\u78BA\u8A8D\u5F85\u3061","webdav.phase.warn":"\u6CE8\u610F","webdav.restoredNotice":"{n} \u30D5\u30A1\u30A4\u30EB\u3092\u5FA9\u5143\u3057\u307E\u3057\u305F{cat}\u3002\u5FA9\u5143\u524D\u306E\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u306F {dir} \u306B\u3042\u308A\u307E\u3059\u3002\u958B\u3044\u3066\u3044\u308B\u30BF\u30D6\u306F\u53E4\u3044\u5185\u5BB9\u306E\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u3001\u958B\u304D\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002","webdav.noSnapshot":"\uFF08\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u305B\u3093\uFF09","webdav.errUrl":"\u30B5\u30FC\u30D0\u30FC URL \u306F http(s):// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","webdav.errNeedUrl":"WebDAV \u30B5\u30FC\u30D0\u30FC URL \u304C\u672A\u8A2D\u5B9A\u3067\u3059","webdav.errDisabled":"WebDAV \u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u6709\u52B9\u306B\u306A\u3063\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306B\u300C\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u6709\u52B9\u5316\u300D\u3092\u30AA\u30F3\u306B\u3057\u3066\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044","webdav.errRemoteDir":"\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u306F [A-Za-z0-9._-] \u306E\u30BB\u30B0\u30E1\u30F3\u30C8\u306E\u307F\u3001\u300C..\u300D\u306F\u4F7F\u3048\u307E\u305B\u3093","webdav.errBadMachine":"\u30DE\u30B7\u30F3\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u540D\u304C\u4E0D\u6B63\u3067\u3059\uFF08[A-Za-z0-9._-] \u306E\u307F\u53EF\u3001\u300C..\u300D\u3084\u30B9\u30E9\u30C3\u30B7\u30E5\u306F\u4E0D\u53EF\uFF09","webdav.errInclude":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u7BC4\u56F2\u306E\u30B9\u30A4\u30C3\u30C1\u306F\u771F\u507D\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","webdav.errAuth":"\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08401\uFF09\uFF1A\u30E6\u30FC\u30B6\u30FC\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9055\u3044\u307E\u3059","webdav.errRemotePath":"\u30EA\u30E2\u30FC\u30C8\u30D1\u30B9\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\uFF08404\uFF09\uFF1AURL \u3068\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044","webdav.errHttp":"\u30B5\u30FC\u30D0\u30FC\u304C\u30A8\u30E9\u30FC\u72B6\u614B\u3092\u8FD4\u3057\u307E\u3057\u305F","webdav.errNetwork":"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u8981\u6C42\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\u30B5\u30FC\u30D0\u30FC\u306B\u5230\u9054\u3067\u304D\u306A\u3044\u304B\u8A3C\u660E\u66F8\u306E\u554F\u984C\u3067\u3059","webdav.errPartial":"\u4E00\u90E8\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u8EE2\u9001\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08{n} \u4EF6\uFF09","webdav.errTimeout":"\u8981\u6C42\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF0860 \u79D2\uFF09","webdav.errBusy":"\u524D\u56DE\u306E\u8EE2\u9001\u304C\u307E\u3060\u5B9F\u884C\u4E2D\u3067\u3059\u3002\u7D42\u308F\u308B\u307E\u3067\u304A\u5F85\u3061\u304F\u3060\u3055\u3044","webdav.errNoBackup":"\u30EA\u30E2\u30FC\u30C8\u306B Luban \u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u3042\u308A\u307E\u305B\u3093\uFF08manifest.json \u306A\u3057\uFF09","webdav.errBadManifest":"\u30EA\u30E2\u30FC\u30C8\u306E manifest.json \u304C\u58CA\u308C\u3066\u3044\u3066\u89E3\u6790\u3067\u304D\u307E\u305B\u3093","webdav.errRemoteNewer":"\u30EA\u30E2\u30FC\u30C8\u306B\u65B0\u3057\u3044\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u3042\u308A\u307E\u3059\uFF08\u5225\u30DE\u30B7\u30F3\u306E\u53EF\u80FD\u6027\uFF09\u3002\u4E0A\u66F8\u304D\u306B\u306F\u78BA\u8A8D\u304C\u5FC5\u8981\u3067\u3059","mascot.state.offline":"\u30AA\u30D5\u30E9\u30A4\u30F3","mascot.state.idle":"\u5F85\u6A5F\u4E2D","mascot.state.thinking":"\u8003\u3048\u4E2D","mascot.state.typing":"\u51FA\u529B\u4E2D","mascot.state.tool":"\u30C4\u30FC\u30EB\u5B9F\u884C","mascot.state.waiting":"\u78BA\u8A8D\u5F85\u3061","mascot.state.done":"\u5B8C\u4E86","mascot.state.error":"\u30A8\u30E9\u30FC"}},n="zh-cn";function s(d){let f=String(d??"").toLowerCase();if(!f||f==="auto")return null;let p=f.slice(0,2);return p==="zh"?"zh-cn":p==="ja"?"ja":"en"}function r(){let d=typeof navigator<"u"&&navigator&&navigator.language||"";return/^zh/i.test(d)?"zh-cn":/^ja/i.test(d)?"ja":"en"}function o(d){return n=s(d)||r(),n}function i(){return n}function a(d,f,p){let h=s(d)||n,y=(e[h]||e["zh-cn"])[f];return y==null&&(y=e["zh-cn"][f]),y==null?f:(p&&(y=String(y).replace(/\{(\w+)\}/g,function(w,T){return p[T]==null?w:String(p[T])})),y)}function l(d,f){return a(n,d,f)}function c(d){return e["zh-cn"][d]!=null}let u={t:l,tIn:a,setLang:o,getLang:i,has:c,normalize:s,langs:["zh-cn","en","ja"]};typeof ha<"u"&&ha&&ha.exports&&(ha.exports=u),t&&(t.LubanI18n=u)})(typeof globalThis<"u"?globalThis:fv)});var wv=ne((_D,yv)=>{"use strict";var Xr=require("path"),sh=/!\[([^\]]*)\]\(([^()\s]*(?:\([^()\s]*\)[^()\s]*)*)\)/g;function DI(t){let e=[],n=new Set,s=String(t??""),r;for(sh.lastIndex=0;(r=sh.exec(s))!==null;){let o=String(r[2]||"").trim();o&&(n.has(o)||(n.add(o),e.push(o)))}return e}function hv(t,e){if(!t||!e)return!1;let n=Xr.resolve(t),s=Xr.resolve(e);if(n===s)return!0;let r=Xr.relative(s,n);return!!r&&!r.startsWith("..")&&!Xr.isAbsolute(r)}function mv(t){let e=String(t||"");return!e||e.startsWith("//")||e.startsWith("data:")||e.startsWith("#")?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)}function gv(t,e,n){let s=String(t??"").trim();if(!s)return{kind:"invalid",url:s};if(mv(s)){if(!/^file:/i.test(s))return{kind:"remote",url:s};let i=s.replace(/^file:\/\//i,"");return gv(i,e,n)}let r=Xr.isAbsolute(s)?Xr.resolve(s):Xr.resolve(String(e||""),s),o=Array.isArray(n)?n:[];for(let i of o)if(hv(r,i))return{kind:"workspace",abs:r,url:s};return{kind:"inline",abs:r,url:s}}yv.exports={extractImageUrls:DI,classifyImage:gv,insideRoot:hv,isRemoteLike:mv,IMG_RE:sh}});var bv=ne((TD,RI)=>{RI.exports={name:"@luban-code/luban-code",displayName:"Luban",description:"Luban \u2014 a standalone sidebar AI coding agent (multi-provider, OpenAI-compatible, zero source patches)",version:"1.100.4",license:"Apache-2.0",author:{name:"eppen (liuhualiang)",url:"https://github.com/eppen"},publisher:"liuhualiang",icon:"media/icon.png",homepage:"https://github.com/eppen/luban#readme",bugs:{url:"https://github.com/eppen/luban/issues"},keywords:["ai","agent","chat","coding-agent","qwen","deepseek","openai-compatible","mcp"],repository:{type:"git",url:"git+https://github.com/eppen/luban.git"},engines:{vscode:"^1.104.0"},categories:["AI","Chat","Programming Languages"],activationEvents:["onStartupFinished","onView:luban.chatView","onCommand:luban.focusView","onCommand:luban.browserPreview","onCommand:luban.markdownPreview"],main:"./dist/extension.js",bin:{luban:"dist/cli.js","luban-code":"dist/cli.js","luban-acp":"dist/acp.js"},files:["dist/cli.js","dist/acp.js","dist/cli-plugin.js","dist/extension.js","registry/","package.json"],scripts:{build:"node scripts/build.js",watch:"node scripts/build.js --watch",package:"node scripts/build.js","vscode:prepublish":"node scripts/build.js",prepack:"node scripts/build.js",smoke:"node scripts/build.js && node scripts/smoke.js","test:review-autokeep":"node scripts/build.js && node scripts/test-review-autokeep.js","test:skills":"node scripts/test-skills.js","test:rules":"node scripts/test-rules.js","test:plugins":"node scripts/test-plugins.js","test:plugins-ext":"node scripts/test-plugins-ext.js","test:registry":"node scripts/test-registry-client.js","test:registry-skill":"node scripts/test-registry-skill.js","test:install":"node scripts/test-install-scripts.js",cli:"node cli.js","test:acp":"node scripts/test-acp.js","test:acp-pkg":"node scripts/test-acp-pkg.js","test:cli-resume":"node scripts/test-cli-resume.js",vsix:"node scripts/vsix.js","test:general":"node scripts/test-general-settings.js","test:provider-models":"node scripts/test-provider-models.js","test:hub":"node scripts/test-hub-tabs.js","test:hub-market":"node scripts/test-hub-market.js","test:market-ext":"node scripts/test-market-ext.js","test:sync-registry":"node scripts/test-sync-registry.js","test:i18n":"node scripts/test-i18n.js","test:css":"node scripts/test-css-vars.js","test:webdav":"node scripts/test-webdav.js","test:mcp-config":"node scripts/test-mcp-config.js","test:mcp-ext":"node scripts/test-mcp-ext.js","test:webdav-override":"node scripts/test-webdav-override.js","test:browser-events":"node scripts/test-browser-events.js","test:browser-tool":"node scripts/test-browser-tool.js","test:browser-launch":"node scripts/test-browser-launch.js","test:computer-linux":"node scripts/test-computer-linux.js","test:computer-linux-live":"node scripts/live-computer-linux.js","test:computer-tool":"node scripts/test-computer-tool.js","test:subagent":"node scripts/test-subagent-guards.js","test:lm-provider":"node scripts/test-lm-provider.js","test:agent-budget":"node scripts/test-agent-budget.js","test:gamepad":"node scripts/test-gamepad.js","test:status":"node scripts/test-status.js","test:avatar":"node scripts/test-avatar.js","test:cli-md":"node scripts/test-cli-md.js","test:mdpreview":"node scripts/test-mdpreview.js","test:mdpreview-live":"node scripts/live-mdpreview.js","test:cli-confirm":"node scripts/test-cli-confirm.js","test:cli-input":"node scripts/test-cli-input.js","test:token-audit":"node scripts/test-token-audit.js","test:think":"node scripts/test-think.js","test:webfetch-md":"node scripts/test-webfetch-md.js","test:tabs":"node scripts/test-workspace-tab-filter.js","test:status-live":"node scripts/live-status.js","test:review-freeze":"node scripts/live-review-freeze.js","test:review-focus":"node scripts/live-review-focus.js"},capabilities:{untrustedWorkspaces:{supported:!0},virtualWorkspaces:!0},contributes:{commands:[{command:"luban.focusView",title:"%cmdFocusView%",category:"Luban"},{command:"luban.openPanel",title:"%cmdOpenPanel%",category:"Luban"},{command:"luban.reloadConfig",title:"%cmdReloadConfig%",category:"Luban"},{command:"luban.providerSettings",title:"%cmdProviderSettings%",category:"Luban"},{command:"luban.dashboard",title:"%cmdDashboard%",category:"Luban"},{command:"luban.plugins",title:"%cmdPlugins%",category:"Luban"},{command:"luban.market",title:"%cmdMarket%",category:"Luban"},{command:"luban.rules.open",title:"%cmdOpenRules%",category:"Luban"},{command:"luban.agent",title:"%cmdAgent%",category:"Luban"},{command:"luban.openDiff",title:"%cmdOpenDiff%",category:"Luban"},{command:"luban.acceptHunk",title:"%cmdAcceptHunk%",category:"Luban"},{command:"luban.rejectHunk",title:"%cmdRejectHunk%",category:"Luban"},{command:"luban.acceptFile",title:"%cmdAcceptFile%",category:"Luban"},{command:"luban.rejectFile",title:"%cmdRejectFile%",category:"Luban"},{command:"luban.reviewAll",title:"%cmdReviewAll%",category:"Luban"},{command:"luban.revertAll",title:"%cmdRevertAll%",category:"Luban"},{command:"luban.newSession",title:"%cmdNewSession%",category:"Luban"},{command:"luban.sessionList",title:"%cmdSessionList%",category:"Luban"},{command:"luban.findInSession",title:"%cmdFindInSession%",category:"Luban"},{command:"luban.cursorPlan",title:"%cmdCursorPlan%",category:"Luban"},{command:"luban.mode.cycle",title:"%cmdModeCycle%",category:"Luban"},{command:"luban.addFileToChat",title:"%cmdAddFileToChat%",category:"Luban"},{command:"luban.addFolderToChat",title:"%cmdAddFolderToChat%",category:"Luban"},{command:"luban.addFileToNewChat",title:"%cmdAddFileToNewChat%",category:"Luban"},{command:"luban.addFolderToNewChat",title:"%cmdAddFolderToNewChat%",category:"Luban"},{command:"luban.addSelectionToChat",title:"%cmdAddSelectionToChat%",category:"Luban"},{command:"luban.addSelectionToNewChat",title:"%cmdAddSelectionToNewChat%",category:"Luban"},{command:"luban.inlineCompletion.toggle",title:"%cmdInlineToggle%",category:"Luban"},{command:"luban.diffAccept",title:"%cmdDiffAccept%",category:"Luban"},{command:"luban.diffReject",title:"%cmdDiffReject%",category:"Luban"},{command:"luban.openInBrowser",title:"%cmdOpenInBrowser%",category:"Luban"},{command:"luban.browserCheck",title:"%cmdBrowserCheck%",category:"Luban"},{command:"luban.browserPreview",title:"%cmdBrowserPreview%",category:"Luban"},{command:"luban.markdownPreview",title:"%cmdMarkdownPreview%",category:"Luban"}],menus:{"editor/title":[{command:"luban.diffAccept",when:"isInDiffEditor && luban.reviewDiffActive && luban.pendingReview > 0",group:"navigation@1"},{command:"luban.diffReject",when:"isInDiffEditor && luban.reviewDiffActive && luban.pendingReview > 0",group:"navigation@2"},{command:"luban.markdownPreview",when:"resourceLangId == markdown",group:"navigation@3",icon:"$(preview)"}],"explorer/context":[{command:"luban.addFileToChat",when:"!explorerResourceIsFolder && resourceScheme == file",group:"1_luban@1"},{command:"luban.addFolderToChat",when:"explorerResourceIsFolder && resourceScheme == file",group:"1_luban@2"},{command:"luban.addFileToNewChat",when:"!explorerResourceIsFolder && resourceScheme == file",group:"1_luban@3"},{command:"luban.addFolderToNewChat",when:"explorerResourceIsFolder && resourceScheme == file",group:"1_luban@4"}],"editor/context":[{command:"luban.addSelectionToChat",when:"editorHasSelection && resourceScheme == file",group:"1_luban@0"},{command:"luban.addSelectionToNewChat",when:"editorHasSelection && resourceScheme == file",group:"1_luban@1"}],"webview/context":[{command:"luban.openInBrowser",when:"webviewSection == 'chat'"}],commandPalette:[{command:"luban.diffAccept",when:"luban.pendingReview > 0"},{command:"luban.diffReject",when:"luban.pendingReview > 0"},{command:"luban.addFileToChat",when:"false"},{command:"luban.addFolderToChat",when:"false"},{command:"luban.addFileToNewChat",when:"false"},{command:"luban.addFolderToNewChat",when:"false"},{command:"luban.addSelectionToChat",when:"editorHasSelection"},{command:"luban.addSelectionToNewChat",when:"editorHasSelection"},{command:"luban.openInBrowser",when:"false"}]},keybindings:[{command:"luban.focusView",key:"cmd+shift+l",mac:"cmd+shift+l",win:"ctrl+shift+l",linux:"ctrl+shift+l"},{command:"luban.newSession",key:"cmd+alt+n",mac:"cmd+alt+n",win:"ctrl+alt+n",linux:"ctrl+alt+n"},{command:"luban.sessionList",key:"cmd+alt+h",mac:"cmd+alt+h",win:"ctrl+alt+h",linux:"ctrl+alt+h"},{command:"luban.mode.cycle",key:"shift+tab",mac:"shift+tab",win:"shift+tab",linux:"shift+tab",when:"focusedView == 'luban.chatView'"},{command:"luban.findInSession",key:"cmd+f",mac:"cmd+f",win:"ctrl+f",linux:"ctrl+f",when:"focusedView == 'luban.chatView'"},{command:"luban.findInSession",key:"cmd+f",mac:"cmd+f",win:"ctrl+f",linux:"ctrl+f",when:"activeWebviewPanelId == 'luban'"},{command:"luban.addSelectionToChat",key:"cmd+alt+a",mac:"cmd+alt+a",win:"ctrl+alt+a",linux:"ctrl+alt+a",when:"editorHasSelection && editorTextFocus"}],viewsContainers:{activitybar:[{id:"luban",title:"Luban",icon:"media/icon.svg"}]},views:{luban:[{type:"webview",id:"luban.chatView",name:"Chat",contextualTitle:"Luban",icon:"media/icon.svg"}]},languageModelChatProviders:[{vendor:"luban",displayName:"Luban",icon:"media/icon.png",managementCommand:"luban.providerSettings"}],configuration:{title:"Luban",properties:{"luban.language":{type:"string",enum:["auto","en","zh-cn","ja"],enumDescriptions:["%cfgLanguageAuto%","%cfgLanguageEn%","%cfgLanguageZhCn%","%cfgLanguageJa%"],default:"auto",description:"%cfgLanguage%"},"luban.autoOpen":{type:"boolean",default:!0,description:"%cfgAutoOpen%"},"luban.context.autoFile":{type:"boolean",default:!0,description:"%cfgContextAutoFile%"},"luban.context.autoFileMaxChars":{type:"number",default:8e3,minimum:500,description:"%cfgContextAutoFileMaxChars%"},"luban.context.autoFileWindowLines":{type:"number",default:200,minimum:40,description:"%cfgContextAutoFileWindowLines%"},"luban.context.workset":{type:"boolean",default:!0,description:"%cfgContextWorkset%"},"luban.sessionHistory.max":{type:"number",default:50,minimum:1,description:"%cfgSessionHistoryMax%"},"luban.usage.record":{type:"boolean",default:!0,description:"%cfgUsageRecord%"},"luban.sessionMemory.enabled":{type:"boolean",default:!0,description:"%cfgSessionMemoryEnabled%"},"luban.sessionMemory.maxTurns":{type:"number",default:8,minimum:1,description:"%cfgSessionMemoryMaxTurns%"},"luban.sessionMemory.maxChars":{type:"number",default:12e3,minimum:1e3,description:"%cfgSessionMemoryMaxChars%"},"luban.agent.maxRounds":{type:"number",default:200,minimum:0,description:"%cfgAgentMaxRounds%"},"luban.agent.maxMinutes":{type:"number",default:30,minimum:1,description:"%cfgAgentMaxMinutes%"},"luban.agent.noWriteNudges":{type:"number",default:2,minimum:0,description:"%cfgAgentNoWriteNudges%"},"luban.agent.subagentRounds":{type:"number",default:24,minimum:0,description:"%cfgAgentSubagentRounds%"},"luban.agent.subagentMinutes":{type:"number",default:0,minimum:0,description:"%cfgAgentSubagentMinutes%"},"luban.agent.smallWindow":{type:"string",enum:["auto","on","off"],default:"auto",description:"%cfgAgentSmallWindow%"},"luban.agent.verbosity":{type:"string",enum:["concise","normal","detailed"],default:"normal",description:"%cfgAgentVerbosity%"},"luban.search.maxFiles":{type:"number",default:5e3,minimum:100,description:"%cfgSearchMaxFiles%"},"luban.net.tlsMaxVersion":{type:"string",enum:["auto","1.2"],enumDescriptions:["%cfgNetTlsMaxVersionAuto%","%cfgNetTlsMaxVersion12%"],default:"auto",description:"%cfgNetTlsMaxVersion%"},"luban.browser.enabled":{type:"boolean",default:!1,description:"%cfgBrowserEnabled%"},"luban.browser.chromePath":{type:"string",default:"",description:"%cfgBrowserChromePath%"},"luban.browser.headless":{type:"boolean",default:!0,description:"%cfgBrowserHeadless%"},"luban.browser.viewportWidth":{type:"number",default:1280,minimum:320,maximum:4096,description:"%cfgBrowserViewportWidth%"},"luban.browser.viewportHeight":{type:"number",default:800,minimum:240,maximum:4096,description:"%cfgBrowserViewportHeight%"},"luban.browser.idleTimeoutMs":{type:"number",default:3e5,minimum:1e4,description:"%cfgBrowserIdleTimeout%"},"luban.browser.confirm":{type:"boolean",default:!0,description:"%cfgBrowserConfirm%"},"luban.browser.preview":{type:"boolean",default:!1,description:"%cfgBrowserPreview%"},"luban.computer.enabled":{type:"boolean",default:!1,description:"%cfgComputerEnabled%"},"luban.computer.confirm":{type:"boolean",default:!0,description:"%cfgComputerConfirm%"},"luban.computer.screenshotWidth":{type:"number",default:2048,minimum:320,maximum:4096,description:"%cfgComputerScreenshotWidth%"},"luban.plugins.enabled":{type:"boolean",default:!1,description:"%cfgPluginsEnabled%"},"luban.plugins.maxTools":{type:"number",default:30,minimum:1,maximum:200,description:"%cfgPluginsMaxTools%"},"luban.plugins.theme":{type:"string",default:"",description:"%cfgPluginsTheme%"},"luban.plan.strictReadOnly":{type:"boolean",default:!0,description:"%cfgPlanStrictReadOnly%"},"luban.fs.allowOutsideWorkspace":{type:"boolean",default:!0,description:"%cfgFsAllowOutsideWorkspace%"},"luban.review.autoOpenDiff":{type:"boolean",default:!0,description:"%cfgReviewAutoOpenDiff%"},"luban.review.autoKeep":{type:"boolean",default:!1,description:"%cfgReviewAutoKeep%"},"luban.diagnostics.afterEdit":{type:"boolean",default:!0,description:"%cfgDiagAfterEdit%"},"luban.inlineCompletion.enabled":{type:"boolean",default:!1,description:"%cfgInlineEnabled%"},"luban.inlineCompletion.maxPerMinute":{type:"number",default:30,minimum:1,description:"%cfgInlineMaxPerMinute%"},"luban.inlineCompletion.debounceMs":{type:"number",default:250,minimum:0,description:"%cfgInlineDebounceMs%"},"luban.statusBar.enabled":{type:"boolean",default:!0,description:"%cfgStatusBarEnabled%"},"luban.rules.enabled":{type:"boolean",default:!0,description:"%cfgRulesEnabled%"},"luban.rules.maxChars":{type:"number",default:12e3,minimum:1e3,description:"%cfgRulesMaxChars%"},"luban.rules.indexMaxChars":{type:"number",default:2e3,minimum:200,description:"%cfgRulesIndexMaxChars%"}}}},devDependencies:{esbuild:"^0.25.0"},dependencies:{"@clack/prompts":"^1.8.1",picocolors:"^1.1.1"}}});var x=require("vscode"),I=require("fs"),D=require("path"),lt=require("os"),ch=require("tls"),{exec:$I,execSync:fS}=require("child_process"),kn=vu(),Qn=Fm(),qI=Dm(),eo=Hm(),BI=Vm(),Oe=Ru(),bn=ug(),_n=hg(),kv=wg(),xe=Ng(),Gt=cd(),en=Ty(),Os=Ey(),dt=Dy(),pS=qy(),dr=Yy(),jc=nw(),fr=mw(),Ht=pd(),Bn=vw(),js=Tw(),Ve=Ew(),_e=Fw(),kt=Yw(),Ge=Co(),Es=Vb(),hS=ki(),xv=sf(),Tn=ck(),UI=mk(),mS=Mk(),Mn=bp(),cs=nx(),za=process.platform==="linux",WI=process.platform==="darwin",ue=za?Sx():process.platform==="win32"?Bx():Qx(),us=process.platform==="win32",gS=us?"Windows":WI?"macOS":za?"Linux":"\u4EC5\u652F\u6301 macOS / Windows / Linux",KI=us?" \u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C\u7684\u7A97\u53E3\u6536\u4E0D\u5230\u666E\u901A\u8FDB\u7A0B\u7684\u70B9\u51FB / \u6309\u952E\uFF08UIPI \u89C4\u5219\uFF09\uFF0C\u9700\u8981\u65F6\u8BA9\u5BBF\u4E3B App \u4E5F\u4EE5\u7BA1\u7406\u5458\u8FD0\u884C\u3002":za?" X11 \u4F1A\u8BDD\u6700\u5B8C\u6574\uFF1BWayland \u4E0B xdotool \u53EA\u80FD\u64CD\u4F5C XWayland \u5E94\u7528\uFF0C\u539F\u751F Wayland \u7A97\u53E3\u7684\u70B9\u51FB / \u62D6\u52A8\u4E0D\u53EF\u7528\u3002\u65E0\u5934\u73AF\u5883\u8981\u5148\u8D77 Xvfb\u3002":" \u6CA1\u6709\u300C\u8F85\u52A9\u529F\u80FD\u300D\u6743\u9650\u65F6\u70B9\u51FB\u4F1A\u88AB\u7CFB\u7EDF\u9759\u9ED8\u4E22\u5F03\uFF0C\u6CA1\u6709\u300C\u5C4F\u5E55\u5F55\u5236\u300D\u6743\u9650\u65F6\u622A\u56FE\u4F1A\u5931\u8D25 \u2014\u2014 \u5206\u522B\u53BB\u7CFB\u7EDF\u8BBE\u7F6E\u7684\u9690\u79C1\u4E0E\u5B89\u5168\u6027\u91CC\u52FE\u9009\u5BBF\u4E3B App\u3002",Aa=us?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":za?"\u5C4F\u5E55\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9";function HI(){return us?{a:65,p:80,bang:49}:za?{a:97,p:112,bang:49}:{a:0,p:35,bang:18}}var sn=nv(),gr=dv(),Ts=lf(),yS=pv(),vv=wv(),Sv=bv(),GI=Sr().SKIP_DIRS,ds=Sv&&Sv.version||"0.0.0",Ic=process.env.LUBAN_OUT_DIR||"/tmp/luban-ide",zI=Ic+"/result.json",ht=D.join(lt.homedir(),".luban","providers.json"),ka={startedAt:new Date().toISOString(),steps:[],acks:[]},VI=400,_v=2e3,Go=null;function wS(){try{I.mkdirSync(Ic,{recursive:!0}),I.writeFileSync(zI,JSON.stringify(ka,null,2))}catch{}}function jh(){Go&&(clearTimeout(Go),Go=null),wS()}function k(t,e){ka.steps.push({step:t,at:new Date().toISOString(),...e}),ka.steps.length>_v&&ka.steps.splice(0,ka.steps.length-_v),Go||(Go=setTimeout(function(){Go=null,wS()},VI))}var rn="",bS=[];function kS(t,e){let n=String(t??"auto").toLowerCase();if(n==="en")return"en";if(n==="ja"||n.slice(0,2)==="ja")return"ja";if(n.slice(0,2)==="zh")return"zh-cn";let s=String(e||"").toLowerCase();return s.slice(0,2)==="zh"?"zh-cn":s.slice(0,2)==="ja"?"ja":"en"}function Va(){let t="auto";try{t=x.workspace.getConfiguration("luban").get("language")}catch{}return kS(t,x.env&&x.env.language)}function O(t,e){return yS.t(t,e)}function Nc(t){rn=yS.setLang(Va()),Qn.setUntitled(O("store.untitled")),YI();try{xn&&xn.fire()}catch{}try{Zh()}catch{}return k("language_applied",{lang:rn,reason:t||""}),rn}function JI(t){for(let e of bS.splice(0))try{e(t)}catch{}}function XI(t){return new Promise(function(e){let n=!1,s=setTimeout(function(){n||(n=!0,e(null))},t||8e3);bS.push(function(r){n||(n=!0,clearTimeout(s),e(r))})})}function YI(){let t=[Te&&Te.webview,ye&&ye.webview,At&&At.webview];for(let e of t)if(e)try{e.postMessage({type:"lang",lang:rn})}catch(n){k("broadcast_lang_failed",{message:n.message})}}var xS={defaultModel:"deepseek::deepseek-flash",providers:[{id:"deepseek",name:"DeepSeek",baseUrl:"https://api.deepseek.com/v1",apiKeyEnv:"DEEPSEEK_API_KEY",webSearch:{baseUrl:"https://api.deepseek.com/v1/tools",count:8},models:[{id:"deepseek-flash",name:"DeepSeek Flash",maxInputTokens:65536,maxOutputTokens:8192,toolCalling:!0}]}]},Vt=xS,Zo="builtin",ps=Object.create(null),Ct=null,zo=[],vS=40,uh=Object.create(null),Tv=new Map;function ZI(t){for(let e of t.providers||[])!e||!Array.isArray(e.models)||(e.models=e.models.map(function(n){return typeof n=="string"?{id:n,name:n}:(n&&typeof n=="object"&&!n.id&&n.name&&(n.id=String(n.name)),n)}).filter(function(n){return n&&typeof n=="object"&&n.id}));return t}function au(){try{let t=JSON.parse(I.readFileSync(ht,"utf8"));if(t&&Array.isArray(t.providers)&&t.providers.length){Vt=ZI(t),Zo=ht,k("config_loaded",{source:ht,providers:t.providers.map(e=>e.id),models:es().length});return}}catch(t){k("config_load_failed",{message:t.message,path:ht})}Vt=xS,Zo="builtin"}function QI(){let t=[];for(let e of Vt.providers||[])for(let n of e.models||[])t.push({provider:e,model:n});return t}function es(){let t=QI(),e={};for(let n of t)e[n.model.id]=(e[n.model.id]||0)+1;return t.map(n=>({key:e[n.model.id]>1?n.provider.id+"::"+n.model.id:n.model.id,provider:n.provider,model:n.model}))}function mt(t){let e=es(),n=String(t||"");return e.find(s=>s.key===n)||e.find(s=>s.provider.id+"::"+s.model.id===n)||e.find(s=>s.model.id===n)||e.find(s=>s.key===Vt.defaultModel)||e.find(s=>s.provider.id+"::"+s.model.id===Vt.defaultModel)||e[0]}function oi(){let t=mt(Vt.defaultModel);return t?t.key:""}function eN(t){try{let e=I.readFileSync(D.join(lt.homedir(),".hermes",".env"),"utf8");for(let n of e.split(`
|
|
992
|
-
`)){let s=n.match(new RegExp("^\\s*"+t+"\\s*=\\s*(.+)\\s*$"));if(s)return s[1].trim().replace(/^["']|["']$/g,"")}}catch{}return""}function Ja(t){let e=t&&t.apiKeyEnv;return e?process.env[e]?String(process.env[e]).trim():eN(e):""}function Fc(t){if(!t)return"";if(t.apiKey)return String(t.apiKey);let e=
|
|
991
|
+
\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3042\u306A\u305F\u306E\u6A29\u9650\u3067\u672C\u6A5F\u4E0A\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u5F8C\u3082\u3001\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u3067\u4FE1\u983C\u3059\u308B\u307E\u3067\u6709\u52B9\u306B\u306A\u308A\u307E\u305B\u3093\u3002`,"ext.marketInstallYes":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB","ext.mcpFail":" \xB7 MCP \u306E\u518D\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557: {msg}","ext.mcpOpenFailed":"mcp.json \u3092\u958B\u3051\u307E\u305B\u3093\uFF1A{msg}","ext.newSessionNotice":"Luban: \u65B0\u3057\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u958B\u59CB\u3057\u307E\u3057\u305F","ext.addFileNoView":"Luban \u30C1\u30E3\u30C3\u30C8\u30D1\u30CD\u30EB\u3092\u958B\u3051\u307E\u305B\u3093\u3002\u5148\u306B Luban \u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u958B\u3044\u3066\u304F\u3060\u3055\u3044\u3002","ext.agentPrompt":"\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u4F55\u3092\u3055\u305B\u307E\u3059\u304B\uFF1F\uFF08\u30B3\u30FC\u30C9\u306E\u7DE8\u96C6\uFF0F\u751F\u6210\uFF09","ext.hubPanelTitle":"\u8A2D\u5B9A\u3068\u4F7F\u7528\u91CF","ext.providerTimeout":"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF0815s\uFF09","ext.providerBadJson":"\u5FDC\u7B54\u304C JSON \u3067\u306F\u3042\u308A\u307E\u305B\u3093: {head}","ext.providerBaseUrl":"baseUrl \u304C\u7A7A\u3067\u3059","ext.providerNeedModel":"\u30C6\u30B9\u30C8\u524D\u306B\u30E2\u30C7\u30EB id \u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044","ext.providerNeedKey":"API key \u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u30D1\u30CD\u30EB\u3067\u5165\u529B\u3059\u308B\u304B apiKeyEnv \u3092\u8A2D\u5B9A\uFF09","ext.configMissing":"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093 \u2014 \u5148\u306B\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044","ext.saveFailed":"\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {msg}","ext.generalMissing":"\u8A2D\u5B9A\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093: {key}","ext.generalBadBool":"\u300C{key}\u300D\u306F\u30D6\u30FC\u30EB\u5024\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadLanguage":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u8A00\u8A9E\u306F auto / en / zh-cn / ja \u306E\u307F\u3067\u3059","ext.generalBadEnum":"\u300C{key}\u300D\u306F {values} \u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadNumber":"\u300C{key}\u300D\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadMin":"\u300C{key}\u300D\u306F {min} \u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalBadMax":"\u300C{key}\u300D\u306F {max} \u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","ext.generalSaveFailed":"\u4E00\u822C\u8A2D\u5B9A\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F: {msg}","ext.openDirFailed":"\u30C7\u30FC\u30BF\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u958B\u3051\u307E\u305B\u3093: {msg}","validate.providerEmpty":"Provider id \u3092\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093","validate.pos":"provider\u300C{id}\u300D","validate.untitled":"\uFF08\u540D\u79F0\u672A\u8A2D\u5B9A\uFF09","validate.idChars":"{pos}: id \u306B\u4F7F\u3048\u308B\u306E\u306F\u82F1\u6570\u5B57\u30FB\u30A2\u30F3\u30C0\u30FC\u30B9\u30B3\u30A2\u30FB\u30CF\u30A4\u30D5\u30F3\u306E\u307F\u3067\u3059","validate.idDup":"{pos}: id \u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059","validate.baseUrl":"{pos}: baseUrl \u306F http:// \u307E\u305F\u306F https:// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.modelIdEmpty":"{pos}: \u30E2\u30C7\u30EB id \u3092\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093","validate.modelIdDup":"{pos}: \u30E2\u30C7\u30EB id\u300C{id}\u300D\u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059","validate.maxIn":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E maxInputTokens \u306F\u6B63\u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.maxOut":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E maxOutputTokens \u306F\u6B63\u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.noModels":"{pos}: \u5C11\u306A\u304F\u3068\u3082 1 \u3064\u306E\u30E2\u30C7\u30EB\u304C\u5FC5\u8981\u3067\u3059","validate.webUrl":"{pos}: webSearch.baseUrl \u306F http:// \u307E\u305F\u306F https:// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.webCount":"{pos}: webSearch.count \u306F 1\u301C50 \u306E\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.webEngine":"{pos}: webSearch.engine \u306F deepseek \u307E\u305F\u306F bing \u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.webDisabled":"{pos}: webSearch.disabled \u306F\u30D6\u30FC\u30EB\u5024\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.thinkShape":'{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u4F8B: { "default": "off", "on": {...}, "off": {...} }\uFF09',"validate.thinkTier":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.{tier} \u306F JSON \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","validate.thinkReserved":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.{tier} \u3067\u30D7\u30ED\u30C8\u30B3\u30EB\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u4E0A\u66F8\u304D\u3067\u304D\u307E\u305B\u3093: {keys}","validate.thinkTooLong":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.{tier} \u304C {n} \u6587\u5B57\u3092\u8D85\u3048\u3066\u3044\u307E\u3059","validate.thinkEmpty":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking \u306B\u306F on / off \u306E\u5C11\u306A\u304F\u3068\u3082\u4E00\u65B9\u304C\u5FC5\u8981\u3067\u3059","validate.thinkInline":"{pos}: \u30E2\u30C7\u30EB\u300C{id}\u300D\u306E thinking.inline \u306F true / false \u306E\u307F\u6307\u5B9A\u3067\u304D\u307E\u3059","validate.needProvider":"\u5C11\u306A\u304F\u3068\u3082 1 \u3064\u306E provider \u304C\u5FC5\u8981\u3067\u3059","usage.today":"\u4ECA\u65E5","usage.7d":"\u76F4\u8FD1 7 \u65E5","usage.30d":"\u76F4\u8FD1 30 \u65E5","usage.all":"\u3059\u3079\u3066","dash.title":"Token \u4F7F\u7528\u91CF","dash.statusReady":"\u6E96\u5099\u5B8C\u4E86","dash.refresh":"\u66F4\u65B0","dash.refreshTitle":"\u53F0\u5E33\u3092\u518D\u8AAD\u307F\u8FBC\u307F","dash.emptyA":"\u307E\u3060\u8A18\u9332\u304C\u3042\u308A\u307E\u305B\u3093\u3002","dash.emptyB":"\u6700\u521D\u306E\u30BF\u30FC\u30F3\u5F8C\u306B\u8868\u793A\u3055\u308C\u307E\u3059 \u2014 \u5404\u30BF\u30FC\u30F3\u306E token \u5408\u8A08\u304C\u30ED\u30FC\u30AB\u30EB\u53F0\u5E33\u306B\u8FFD\u8A18\u3055\u308C\u307E\u3059\u3002","dash.byModel":"\u30E2\u30C7\u30EB\u5225","dash.byDay":"\u65E5\u5225","dash.byMode":"\u30E2\u30FC\u30C9\u5225","dash.recent":"\u6700\u8FD1\u306E\u8A18\u9332","dash.thModel":"\u30E2\u30C7\u30EB","dash.thRequests":"\u30EA\u30AF\u30A8\u30B9\u30C8","dash.thInput":"\u5165\u529B","dash.thOutput":"\u51FA\u529B","dash.thTotal":"\u5408\u8A08","dash.thCache":"\u30AD\u30E3\u30C3\u30B7\u30E5\u30D2\u30C3\u30C8","dash.thShare":"\u5272\u5408","dash.thMode":"\u30E2\u30FC\u30C9","dash.thTurns":"\u30BF\u30FC\u30F3","dash.thTime":"\u6642\u523B","dash.openDir":"\u30C7\u30FC\u30BF\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u958B\u304F","dash.dirTitle":"\u53F0\u5E33\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA","dash.foot":"Token \u6570\u306E\u307F\u96C6\u8A08\uFF1B\u8CBB\u7528\u306F\u63A8\u5B9A\u3057\u307E\u305B\u3093","dash.modeExecute":"\u30D7\u30E9\u30F3\u5B9F\u884C","dash.modeUnknown":"\u4E0D\u660E","dash.loading":"\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","dash.turns":"\u30BF\u30FC\u30F3","dash.requests":"\u30EA\u30AF\u30A8\u30B9\u30C8","dash.input":"\u5165\u529B","dash.output":"\u51FA\u529B","dash.total":"\u5408\u8A08","dash.cache":"\u30AD\u30E3\u30C3\u30B7\u30E5\u30D2\u30C3\u30C8","dash.partial":"\u4E2D\u65AD\u30BF\u30FC\u30F3 {n} \u4EF6\u3092\u88DC\u8A18","dash.perTurn":"1 \u30BF\u30FC\u30F3\u3042\u305F\u308A {n}","dash.estTurns":"\u63A8\u5B9A\u30BF\u30FC\u30F3 {n} \u4EF6\u3092\u542B\u3080","dash.cached":"\u30AD\u30E3\u30C3\u30B7\u30E5\u7531\u6765 {n}","dash.models":"\u30E2\u30C7\u30EB {n}","dash.unknownModel":"\u4E0D\u660E\u306A\u30E2\u30C7\u30EB","dash.days":"{n} \u65E5 \xB7 \u9752=\u5165\u529B \u7DD1=\u51FA\u529B","dash.dayTip":"{day} \xB7 \u2191{input} \u2193{output} \xB7 \u30EA\u30AF\u30A8\u30B9\u30C8 {n} \u56DE","dash.recentCount":"{n} \u4EF6\uFF08\u6700\u5927 50\uFF09","dash.interrupted":" \xB7 \u4E2D\u65AD","dash.recordOff":"\u4F7F\u7528\u91CF\u306E\u8A18\u9332\u306F\u30AA\u30D5\u3067\u3059\uFF08luban.usage.record=false\uFF09\u2014 \u3053\u306E\u30BF\u30FC\u30F3\u4EE5\u964D\u306F\u65B0\u3057\u3044\u8A18\u9332\u3092\u66F8\u304D\u307E\u305B\u3093\u3002","dash.badLines":"\u53F0\u5E33\u306E\u8AAD\u3081\u306A\u3044\u884C {n} \u4EF6\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3057\u305F\u3002","dash.noRecords":"\u8A18\u9332\u306A\u3057","dash.statusTurns":"{n} \u30BF\u30FC\u30F3","hub.title":"\u8A2D\u5B9A\u3068\u4F7F\u7528\u91CF","hub.navGeneral":"\u4E00\u822C","hub.navSettings":"\u8A2D\u5B9A","hub.navBackup":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7","hub.navUsage":"\u4F7F\u7528\u91CF","hub.navMcp":"MCP","hub.navPlugins":"\u30D7\u30E9\u30B0\u30A4\u30F3","hub.navMarket":"\u30DE\u30FC\u30B1\u30C3\u30C8","hub.navGeneralTitle":"Luban \u8A2D\u5B9A\uFF08\u8A00\u8A9E / \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8 / Agent \u306A\u3069\uFF09","hub.navSettingsTitle":"Provider \u8A2D\u5B9A\uFF08\u30E2\u30C7\u30EB / base URL / API \u30AD\u30FC\uFF09","hub.navBackupTitle":"\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08WebDAV\uFF1A\u30BB\u30C3\u30B7\u30E7\u30F3 / \u6DFB\u4ED8 / \u30D7\u30E9\u30F3 / \u8A2D\u5B9A\uFF09","hub.navUsageTitle":"Token \u4F7F\u7528\u91CF\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\uFF08\u30E2\u30C7\u30EB / \u65E5 / \u30E2\u30FC\u30C9\u5225\uFF09","hub.navMcpTitle":"MCP \u30B5\u30FC\u30D0\u30FC\u7BA1\u7406\uFF08\u6709\u52B9\u5316 / \u7121\u52B9\u5316 / \u72B6\u614B / \u30C4\u30FC\u30EB\u4E00\u89A7\uFF09","hub.navPluginsTitle":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\uFF08\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB / \u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB / \u30B4\u30DF\u7BB1\uFF09","mcp.title":"MCP \u30B5\u30FC\u30D0\u30FC","mcp.statusReady":"\u6E96\u5099\u5B8C\u4E86","mcp.reload":"\u518D\u63A5\u7D9A","mcp.reloadTitle":"\u3059\u3079\u3066\u306E MCP \u30B5\u30FC\u30D0\u30FC\u3092\u518D\u63A5\u7D9A\u3057\u307E\u3059\uFF08mcp.json \u3092\u7DE8\u96C6\u3057\u305F\u3089\u62BC\u3059\u3002\u30A6\u30A3\u30F3\u30C9\u30A6\u518D\u8AAD\u307F\u8FBC\u307F\u306F\u4E0D\u8981\uFF09","mcp.reloading":"\u518D\u63A5\u7D9A\u4E2D\u2026","mcp.reloaded":"\u518D\u63A5\u7D9A\u3057\u307E\u3057\u305F","mcp.openGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB mcp.json \u3092\u958B\u304F","mcp.openGlobalTitle":"~/.luban/mcp.json \u3092\u30A8\u30C7\u30A3\u30BF\u3067\u958B\u304D\u307E\u3059\uFF08\u7121\u3051\u308C\u3070\u7A7A\u306E\u3072\u306A\u5F62\u3092\u4F5C\u6210\uFF09","mcp.openProject":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9 mcp.json \u3092\u958B\u304F","mcp.openProjectTitle":"<\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9>/.luban/mcp.json \u3092\u30A8\u30C7\u30A3\u30BF\u3067\u958B\u304D\u307E\u3059\uFF08\u7121\u3051\u308C\u3070\u7A7A\u306E\u3072\u306A\u5F62\u3092\u4F5C\u6210\uFF09","mcp.globalPathTitle":"\u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A\u306E\u30D1\u30B9\uFF08~/.luban/mcp.json\uFF09","mcp.servers":"\u30B5\u30FC\u30D0\u30FC","mcp.countHint":"{servers} \u4EF6\u8A2D\u5B9A \xB7 {enabled} \u4EF6\u6709\u52B9","mcp.emptyA":"MCP \u30B5\u30FC\u30D0\u30FC\u306F\u307E\u3060\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002","mcp.emptyB":"<code>~/.luban/mcp.json</code> \u307E\u305F\u306F <code><\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9>/.luban/mcp.json</code> \u306E <code>mcpServers</code> \u306B 1 \u4EF6\u8FFD\u52A0\u3057\u3001\u300C\u518D\u63A5\u7D9A\u300D\u3092\u62BC\u3059\u3068\u63A5\u7D9A\u3055\u308C\u307E\u3059\u3002\u30C4\u30FC\u30EB\u306F <code>mcp__<server>__<tool></code> \u306E\u540D\u524D\u3067 Agent \u306E\u30C4\u30FC\u30EB\u4E00\u89A7\u306B\u5165\u308A\u307E\u3059\u3002","mcp.tools":"\u30C4\u30FC\u30EB","mcp.toolsHint":"{n} \u500B\u306E\u30C4\u30FC\u30EB \xB7 Agent {agent} \u500B / Plan {plan} \u500B\u304C\u5229\u7528\u53EF","mcp.toolsEmpty":"\u63A5\u7D9A\u6E08\u307F\u306E\u30C4\u30FC\u30EB\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u30FC\u304C\u8D77\u52D5\u3059\u308B\u3068\u3053\u3053\u306B\u4E26\u3073\u307E\u3059\uFF09\u3002","mcp.planNote":"Plan \u30E2\u30FC\u30C9\u3067\u8A31\u53EF\u3055\u308C\u308B\u306E\u306F\u3001\u30B5\u30FC\u30D0\u30FC\u304C <code>readOnlyHint</code> \u3092\u5BA3\u8A00\u3057\u305F\u30C4\u30FC\u30EB\u3001\u307E\u305F\u306F\u305D\u306E\u30B5\u30FC\u30D0\u30FC\u306E <code>planAllow</code> \u306B\u5217\u6319\u3057\u305F\u30C4\u30FC\u30EB\u3060\u3051\u3067\u3059\u3002\u547C\u3073\u51FA\u3057\u6642\u306B\u3082\u518D\u691C\u8A3C\u3057\u307E\u3059\u3002","mcp.pathsTitle":"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB","mcp.pathGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB","mcp.pathProject":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9","mcp.pathCustom":"\u30AB\u30B9\u30BF\u30E0","mcp.pathMissing":"\u30D5\u30A1\u30A4\u30EB\u7121\u3057","mcp.pathCount":"{n} \u4EF6","mcp.foot":'\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5074\u306E\u540C\u540D\u30A8\u30F3\u30C8\u30EA\u306F\u30B0\u30ED\u30FC\u30D0\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5074\u306B <code>"disabled": true</code> \u3092\u66F8\u304F\u3068\u3001\u540C\u540D\u306E\u30B0\u30ED\u30FC\u30D0\u30EB\u30B5\u30FC\u30D0\u30FC\u3092\u7121\u52B9\u306B\u3067\u304D\u307E\u3059\u3002',"mcp.footNote":"MCP \u30B5\u30FC\u30D0\u30FC\u306F\u3042\u306A\u305F\u306E\u6A29\u9650\u3067\u52D5\u304F\u672C\u6A5F\u306E\u5B50\u30D7\u30ED\u30BB\u30B9\u3067\u3059\u3002\u4FE1\u983C\u3067\u304D\u308B\u30B5\u30FC\u30D0\u30FC\u3060\u3051\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","mcp.enable":"\u6709\u52B9\u5316","mcp.disable":"\u7121\u52B9\u5316","mcp.actionEnable":"\u6709\u52B9\u5316","mcp.actionDisable":"\u7121\u52B9\u5316","mcp.stateReady":"\u63A5\u7D9A\u6E08\u307F","mcp.stateConnecting":"\u63A5\u7D9A\u4E2D","mcp.stateFailed":"\u63A5\u7D9A\u5931\u6557","mcp.stateIdle":"\u5F85\u6A5F","mcp.stateStopped":"\u505C\u6B62","mcp.stateDisabled":"\u7121\u52B9","mcp.chooseEnable":"\u300C{name}\u300D\u3092\u3069\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u6709\u52B9\u306B\u3057\u307E\u3059\u304B\uFF1F","mcp.chooseDisable":"\u300C{name}\u300D\u306E\u7121\u52B9\u5316\u3092\u3069\u306E\u30D5\u30A1\u30A4\u30EB\u306B\u66F8\u304D\u307E\u3059\u304B\uFF1F","mcp.writeGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB","mcp.writeProject":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9","mcp.chooseCancel":"\u30AD\u30E3\u30F3\u30BB\u30EB","mcp.toolCount":"{n} \u500B\u306E\u30C4\u30FC\u30EB","mcp.timeoutMs":"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 {ms}ms","mcp.planAllowCount":"planAllow {n} \u4EF6","mcp.disabledBy":"\u7121\u52B9\u5316\u306E\u5834\u6240\uFF1A{files}","mcp.stderrTail":"stderr \u306E\u51FA\u529B\u3042\u308A\uFF08\u30DB\u30D0\u30FC\u3067\u8868\u793A\uFF09","mcp.ro":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528","mcp.rw":"\u66F8\u304D\u8FBC\u307F","mcp.planAllowed":"Plan \u53EF","mcp.working":"\u51E6\u7406\u4E2D\u2026","mcp.cancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F","mcp.failed":"\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{msg}","mcp.toggledOk":"\u300C{name}\u300D\u3092{state}\u3057\u3001{file} \u306B\u66F8\u304D\u8FBC\u307F\u307E\u3057\u305F\uFF08\u518D\u63A5\u7D9A\u6E08\u307F\uFF09","mcp.toggledNoop":"{file} \u306B\u5909\u66F4\u306F\u3042\u308A\u307E\u305B\u3093\uFF1A\u300C{name}\u300D\u306F\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u5B9A\u7FA9\u3082\u7121\u52B9\u5316\u3082\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u518D\u63A5\u7D9A\u6E08\u307F\uFF09","market.title":"\u30D7\u30E9\u30B0\u30A4\u30F3\u30DE\u30FC\u30B1\u30C3\u30C8","market.statusReady":"\u6E96\u5099\u5B8C\u4E86","market.refreshing":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u66F4\u65B0\u4E2D\u2026","market.refresh":"\u66F4\u65B0","market.refreshTitle":"\u30EA\u30E2\u30FC\u30C8\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u518D\u53D6\u5F97\u3057\u307E\u3059\uFF08\u53D6\u5F97\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u540C\u68B1\u30DF\u30E9\u30FC\u3092\u4F7F\u7528\uFF09","market.source":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u53D6\u5F97\u5143\uFF1A{source}","market.sourceTitle":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u53D6\u5F97\u5143\u3067\u3059\u3002\u30EA\u30E2\u30FC\u30C8\u306F\u516C\u958B\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30DD\u30B8\u30C8\u30EA\u3001\u540C\u68B1\u7248\u306F\u62E1\u5F35\u6A5F\u80FD\u3068\u3068\u3082\u306B\u914D\u5E03\u3055\u308C\u308B\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u30DF\u30E9\u30FC\u3067\u3059\u3002","market.offlineNote":"\u30EA\u30E2\u30FC\u30C8\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u53D6\u5F97\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u62E1\u5F35\u6A5F\u80FD\u306B\u540C\u68B1\u3055\u308C\u305F\u30DF\u30E9\u30FC\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\uFF08\u516C\u958B\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3068\u306F\u30D0\u30A4\u30C8\u5358\u4F4D\u3067\u4E00\u81F4\u3057\u307E\u3059\u304C\u3001\u6700\u65B0\u3067\u306F\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09\u3002","market.empty":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093\u3002","market.emptyHint":"\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F\u516C\u958B\u30D7\u30E9\u30B0\u30A4\u30F3\u30EA\u30DD\u30B8\u30C8\u30EA\u304B\u3089\u53D6\u5F97\u3057\u307E\u3059\u3002\u53D6\u5F97\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u540C\u68B1\u30DF\u30E9\u30FC\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002","market.count":"{n} \u4EF6\u306E\u9805\u76EE","market.install":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB","market.update":"\u66F4\u65B0","market.installed":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F","market.updateAvailable":"\u66F4\u65B0\u3042\u308A","market.installing":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u4E2D\u2026","market.cancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F\uFF08\u4F55\u3082\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF09","market.failed":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{msg}","market.installedOk":"\u300C{name}\u300D\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3057\u305F\u3002\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u3067\u4FE1\u983C\u3057\u3066\u6709\u52B9\u306B\u3057\u3066\u304F\u3060\u3055\u3044","market.replacedOk":"\u300C{name}\u300D\u3092\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u66F4\u65B0\u3057\u307E\u3057\u305F","market.replaceConfirm":"\u300C{name}\u300D\u306F\u3059\u3067\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u3067\u3059\u3002\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F\u53E4\u3044\u65B9\u306F\u30B4\u30DF\u7BB1\u3078\u79FB\u52D5\u3057\u307E\u3059\u3002","market.typePlugin":"\u30D7\u30E9\u30B0\u30A4\u30F3","market.typeSkill":"\u30B9\u30AD\u30EB","market.reviewReviewed":"\u30EC\u30D3\u30E5\u30FC\u6E08\u307F","market.reviewPending":"\u30EC\u30D3\u30E5\u30FC\u5F85\u3061","market.reviewFlagged":"\u554F\u984C\u3042\u308A","market.reviewRevoked":"\u53D6\u308A\u4E0B\u3052\u6E08\u307F","market.signed":"\u7F72\u540D\u6E08\u307F","market.unsigned":"\u672A\u7F72\u540D","market.permNone":"\u8FFD\u52A0\u306E\u6A29\u9650\u5BA3\u8A00\u306A\u3057","market.noTools":"\u306A\u3057","market.permFsRead":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u308B","market.permFsWrite":"\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080 / \u524A\u9664\u3059\u308B","market.permShell":"shell \u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3059\u308B","market.permNet":"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u884C\u3046","market.permEnv":"\u74B0\u5883\u5909\u6570\u3092\u8AAD\u307F\u53D6\u308B","market.permsLabel":"\u5BA3\u8A00\u3055\u308C\u305F\u6A29\u9650","market.repoLabel":"\u30BD\u30FC\u30B9","market.foot":"\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3042\u306A\u305F\u306E\u6A29\u9650\u3067\u672C\u6A5F\u4E0A\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u5F8C\u3082\u3001\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u3067\u4FE1\u983C\u3059\u308B\u307E\u3067\u6709\u52B9\u306B\u306A\u308A\u307E\u305B\u3093","plugins.title":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3","plugins.globalDirTitle":"\u30B0\u30ED\u30FC\u30D0\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\uFF08~/.luban/plugins\uFF09","plugins.dirsTitle":"\u30B9\u30AD\u30E3\u30F3\u5BFE\u8C61\uFF08\u4E0A\uFF1A\u30B0\u30ED\u30FC\u30D0\u30EB\u3001\u4E0B\uFF1A\u73FE\u5728\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\uFF09","plugins.statusReady":"\u6E96\u5099\u5B8C\u4E86","plugins.rescan":"\u518D\u30B9\u30AD\u30E3\u30F3","plugins.rescanTitle":"\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u3092\u518D\u30B9\u30AD\u30E3\u30F3\u3057\u3001\u30E2\u30B8\u30E5\u30FC\u30EB\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u7834\u68C4\u3057\u307E\u3059\uFF08\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30B3\u30FC\u30C9\u3092\u76F4\u3057\u305F\u5F8C\u306B\uFF09","plugins.rescanning":"\u518D\u30B9\u30AD\u30E3\u30F3\u4E2D\u2026","plugins.install":"\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8FFD\u52A0\u2026","plugins.installTitle":"plugin.json \u3092\u542B\u3080\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u3073\u3001\u30B0\u30ED\u30FC\u30D0\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3059","plugins.installing":"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u4E2D\u2026","plugins.working":"\u51E6\u7406\u4E2D\u2026","plugins.cancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F","plugins.failed":"\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A{msg}","plugins.countHint":"\u6709\u52B9 {plugins} \u4EF6 \xB7 \u672A\u627F\u8A8D {pending} \u4EF6","plugins.emptyA":"\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002","plugins.emptyB":"\u53F3\u4E0A\u306E\u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8FFD\u52A0\u2026\u300D\u304B\u3089 <code>plugin.json</code> \u3092\u542B\u3080\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002\u8FFD\u52A0\u3059\u308B\u3068 <code>pl__<\u30D7\u30E9\u30B0\u30A4\u30F3>__<\u30C4\u30FC\u30EB></code> \u3068\u3044\u3046\u540D\u524D\u3067 Agent \u306E\u30C4\u30FC\u30EB\u4E00\u89A7\u306B\u73FE\u308C\u307E\u3059\u3002","plugins.installed":"\u6709\u52B9","plugins.installedOk":"\u300C{name}\u300D\u3092\u8FFD\u52A0\u3057\u3001\u4FE1\u983C\u6E08\u307F\u306B\u3057\u307E\u3057\u305F","plugins.uninstalledOk":"\u300C{name}\u300D\u3092\u30B4\u30DF\u7BB1\u3078\u79FB\u52D5\u3057\u307E\u3057\u305F","plugins.restoredOk":"\u300C{name}\u300D\u3092\u5143\u306B\u623B\u3057\u307E\u3057\u305F","plugins.trustedOk":"\u300C{name}\u300D\u3092\u4FE1\u983C\u3057\u307E\u3057\u305F","plugins.theme":"\u753B\u9762\u30C6\u30FC\u30DE","plugins.themeHint":"Luban \u81EA\u8EAB\u306E\u30D1\u30CD\u30EB\u306B\u306E\u307F\u9069\u7528\uFF08\u8272 / \u89D2\u4E38 / \u6587\u5B57\u30B5\u30A4\u30BA\uFF09\u3002\u30A8\u30C7\u30A3\u30BF\u306E\u30C6\u30FC\u30DE\u306F\u5909\u308F\u308A\u307E\u305B\u3093","plugins.themeFollow":"VS Code \u306E\u30C6\u30FC\u30DE\u306B\u5F93\u3046","plugins.themeNote":"\u30C6\u30FC\u30DE\u306F\u30D7\u30E9\u30B0\u30A4\u30F3\u304C\u63D0\u4F9B\u3059\u308B\u30DB\u30EF\u30A4\u30C8\u30EA\u30B9\u30C8 token\uFF08\u8272\u30FB\u89D2\u4E38\u30FB\u6587\u5B57\u30B5\u30A4\u30BA\u306E\u307F\u3001CSS \u306E\u6301\u3061\u8FBC\u307F\u4E0D\u53EF\uFF09\u306A\u306E\u3067\u3001\u6700\u60AA\u3067\u3082\u300C\u898B\u3065\u3089\u3044\u300D\u3067\u6E08\u307F\u307E\u3059\u3002\u30C7\u30A3\u30B9\u30AF\u4E0A\u306B\u3042\u308C\u3070\u9078\u629E\u53EF\u80FD \u2014\u2014 \u4FE1\u983C\u3082\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u6709\u52B9\u5316\u3082\u4E0D\u8981\u3067\u3059\u3002","plugins.themeOk":"\u30C6\u30FC\u30DE\u300C{name}\u300D\u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F","plugins.themeOff":"VS Code \u306E\u30C6\u30FC\u30DE\u306B\u5F93\u3046\u8A2D\u5B9A\u306B\u623B\u3057\u307E\u3057\u305F","plugins.themeDropped":"{n} \u500B\u306E token \u3092\u7121\u8996\u3057\u307E\u3057\u305F\uFF08\u5024\u304C\u4E0D\u6B63\u3002\u30ED\u30B0\u3092\u53C2\u7167\uFF09","plugins.themeTitle":"\u753B\u9762\u30C6\u30FC\u30DE\u3092\u9078\u629E\u3002\u300CVS Code \u306E\u30C6\u30FC\u30DE\u306B\u5F93\u3046\u300D\u3067\u30A8\u30C7\u30A3\u30BF\u306E\u914D\u8272\u306B\u623B\u308A\u307E\u3059","plugins.pendingTitle":"\u7121\u52B9\uFF08\u672A\u627F\u8A8D\uFF09","plugins.pendingHint":"\u3053\u306E\u884C\u306E\u300C\u4FE1\u983C\u300D\u3092\u62BC\u3059\u307E\u3067\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u305B\u3093","plugins.trashTitle":"\u30B4\u30DF\u7BB1","plugins.trashCount":"{n} \u4EF6","plugins.trashNote":"\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306F\u30D5\u30A9\u30EB\u30C0\u3092\u3053\u3053\u3078\u79FB\u3059\u3060\u3051\u3067\u3059\u3002\u300C\u5143\u306B\u623B\u3059\u300D\u3067\u5143\u306E\u5834\u6240\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3001\u305D\u308C\u4EE5\u5916\u306F\u30B0\u30ED\u30FC\u30D0\u30EB\uFF09\u306B\u623B\u308A\u307E\u3059\u3002","plugins.removedAt":"\u79FB\u52D5\u65E5\u6642\uFF1A{at}","plugins.openTrash":"\u30B4\u30DF\u7BB1\u3092\u958B\u304F","plugins.openTrashTitle":"OS \u306E\u30D5\u30A1\u30A4\u30EB\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC\u3067\u30B4\u30DF\u7BB1\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F","plugins.openGlobal":"\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F","plugins.openGlobalTitle":"OS \u306E\u30D5\u30A1\u30A4\u30EB\u30DE\u30CD\u30FC\u30B8\u30E3\u30FC\u3067\u30B0\u30ED\u30FC\u30D0\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u30D5\u30A9\u30EB\u30C0\u3092\u958B\u304F","plugins.offTitle":"\u30D7\u30E9\u30B0\u30A4\u30F3\u6A5F\u80FD\u306F\u30AA\u30D5\u3067\u3059","plugins.offNote":"\u5207\u308A\u66FF\u3048\u306F\u300C\u4E00\u822C\u300D\u30BB\u30AF\u30B7\u30E7\u30F3\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u8A2D\u5B9A\uFF08luban.plugins.enabled\uFF09\u306B\u3042\u308A\u307E\u3059\u3002\u30AA\u30D5\u306E\u9593\u306F\u30D7\u30E9\u30B0\u30A4\u30F3\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u305A\u3001\u3053\u3053\u306E\u30C4\u30FC\u30EB\u3082 Agent \u306B\u306F\u6E21\u308A\u307E\u305B\u3093\u3002","plugins.offGo":"\u4E00\u822C\u3092\u958B\u304F","plugins.foot":"\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3053\u306E\u30DE\u30B7\u30F3\u4E0A\u3067\u81EA\u5206\u306E\u6A29\u9650\u3067\u52D5\u4F5C\u3057\u307E\u3059\u3002\u4FE1\u983C\u3067\u304D\u308B\u914D\u5E03\u5143\u3060\u3051\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044","plugins.scopeGlobal":"\u30B0\u30ED\u30FC\u30D0\u30EB","plugins.scopeProject":"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","plugins.ro":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528","plugins.rw":"\u66F8\u304D\u8FBC\u307F","plugins.roTip":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u5BA3\u8A00\uFF1APlan \u30E2\u30FC\u30C9\u3067\u3082\u8A31\u53EF\u3055\u308C\u307E\u3059","plugins.rwTip":"\u526F\u4F5C\u7528\u3042\u308A\uFF1APlan \u30E2\u30FC\u30C9\u3067\u306F\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3059","plugins.uninstall":"\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB","plugins.restore":"\u5143\u306B\u623B\u3059","plugins.trust":"\u4FE1\u983C","plugins.replaceConfirm":"\u540C\u540D\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u300C{name}\u300D\u304C\u65E2\u306B\u3042\u308A\u307E\u3059\u3002\u53E4\u3044\u3082\u306E\u3092\u30B4\u30DF\u7BB1\u3078\u79FB\u3057\u3001\u4ECA\u56DE\u9078\u3093\u3060\u30D5\u30A9\u30EB\u30C0\u3067\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B\uFF1F","general.title":"\u4E00\u822C","general.statusReady":"\u6E96\u5099\u5B8C\u4E86","general.save":"\u4FDD\u5B58","general.unsaved":"\u672A\u4FDD\u5B58","general.saving":"\u4FDD\u5B58\u4E2D\u2026","general.loaded":"\u8AAD\u307F\u8FBC\u307F\u6E08\u307F","general.saved":"\u4FDD\u5B58\u3057\u307E\u3057\u305F","general.invalid":"\u691C\u8A3C\u30A8\u30E9\u30FC {n} \u4EF6","general.groupUi":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9","general.groupContext":"\u81EA\u52D5\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8","general.groupSession":"\u30BB\u30C3\u30B7\u30E7\u30F3","general.groupAgent":"Agent","general.groupTools":"\u30C4\u30FC\u30EB\u3068\u5B89\u5168","general.groupNetwork":"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF","general.netTlsMaxVersion":"TLS \u306E\u6700\u9AD8\u30D0\u30FC\u30B8\u30E7\u30F3","general.netTlsMaxVersionTitle":"\u30E2\u30C7\u30EB\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u4F7F\u3046 TLS \u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u4E0A\u9650\u3002\u5909\u66F4\u306F\u4EE5\u964D\u306B\u65B0\u898F\u78BA\u7ACB\u3059\u308B\u63A5\u7D9A\u306B\u306E\u307F\u52B9\u304D\u307E\u3059","general.netTlsMaxVersionNote":"\u4E00\u90E8\u306E CDN \u30A8\u30C3\u30B8\u30CE\u30FC\u30C9\u306F TLS 1.3 \u306E\u30CF\u30F3\u30C9\u30B7\u30A7\u30A4\u30AF\u3092\u62D2\u5426\u3057\u3066\u5207\u65AD\u3057\u307E\u3059\uFF08\u75C7\u72B6\uFF1A\u6642\u3005\u300C\u63A5\u7D9A\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u300D\uFF09\u30021.2 \u306B\u3059\u308B\u3068\u56DE\u907F\u3067\u304D\u307E\u3059\u3002\u4EE5\u964D\u306B\u65B0\u898F\u78BA\u7ACB\u3059\u308B\u63A5\u7D9A\u306B\u306E\u307F\u5F71\u97FF\u3057\u307E\u3059\u3002","general.tlsAuto":"\u81EA\u52D5\uFF08TLS 1.3\uFF09","general.tls12":"TLS 1.2 \u306B\u5236\u9650","general.groupBrowser":"\u30D6\u30E9\u30A6\u30B6\u30FC\uFF08\u62E1\u5F35\u8A2D\u5B9A\uFF09","general.groupReview":"\u30EC\u30D3\u30E5\u30FC","general.groupInline":"Tab \u88DC\u5B8C","general.groupUsage":"\u4F7F\u7528\u91CF","general.language":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u8A00\u8A9E","general.languageTitle":"Luban \u306E UI \u306E\u307F\u306B\u5F71\u97FF\u3057\u3001\u30A8\u30C7\u30A3\u30BF\u306E\u8868\u793A\u8A00\u8A9E\u306F\u5909\u308F\u308A\u307E\u305B\u3093","general.languageNote":"Luban \u81EA\u8EAB\u306E UI \u306E\u307F\u306B\u5F71\u97FF\u3057\u307E\u3059 \u2014 VS Code / VSCodium \u306E\u8868\u793A\u8A00\u8A9E\u306F\u5909\u308F\u308A\u307E\u305B\u3093\u3002\u30B3\u30DE\u30F3\u30C9\u30D1\u30EC\u30C3\u30C8\u306E\u30BF\u30A4\u30C8\u30EB\u306F\u30A8\u30C7\u30A3\u30BF\u8A00\u8A9E\u306B\u5F93\u3044\u307E\u3059\u3002","general.langAuto":"VS Code \u306E\u8868\u793A\u8A00\u8A9E\u306B\u5408\u308F\u305B\u308B","general.langZhCn":"\u7B80\u4F53\u4E2D\u6587","general.langEn":"English","general.langJa":"\u65E5\u672C\u8A9E","general.autoOpen":"\u8D77\u52D5\u6642\u306B\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u958B\u304F","general.contextAutoFile":"\u73FE\u5728\u306E\u30A8\u30C7\u30A3\u30BF\u30B3\u30FC\u30C9\u3092\u6DFB\u4ED8","general.contextMaxChars":"\u6587\u5B57\u6570\u4E0A\u9650","general.contextWindowLines":"\u30A6\u30A3\u30F3\u30C9\u30A6\u884C\u6570\uFF08\u9078\u629E\u306A\u3057\uFF09","general.sessionHistoryMax":"\u30BB\u30C3\u30B7\u30E7\u30F3\u5C65\u6B74\u306E\u4E0A\u9650","general.sessionMemoryEnabled":"\u30DE\u30EB\u30C1\u30BF\u30FC\u30F3\u8A18\u61B6","general.sessionMemoryMaxTurns":"\u8A18\u61B6\u30BF\u30FC\u30F3\u6570","general.sessionMemoryMaxChars":"\u8A18\u61B6\u306E\u6587\u5B57\u4E88\u7B97","general.agentMaxRounds":"\u30EA\u30AF\u30A8\u30B9\u30C8\u30E9\u30A6\u30F3\u30C9\u4E0A\u9650\uFF080 = \u7121\u5236\u9650\uFF09","general.agentMaxMinutes":"\u30A6\u30A9\u30FC\u30EB\u30AF\u30ED\u30C3\u30AF\u4E0A\u9650\uFF08\u5206\uFF09","general.agentNoWriteNudges":"\u7A7A\u56DE\u3057\u50AC\u4FC3\u56DE\u6570\uFF080 = \u7121\u52B9\uFF09","general.agentSubagentRounds":"\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30E9\u30A6\u30F3\u30C9\u6570\uFF080 = \u30AA\u30D5\uFF09","general.agentSubagentMinutes":"\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u5236\u9650\u6642\u9593\uFF08\u5206\u30010 = \u30BF\u30FC\u30F3\u306B\u8FFD\u5F93\uFF09","general.agentSmallWindow":"\u5C0F\u30A6\u30A3\u30F3\u30C9\u30A6\u30E2\u30FC\u30C9","general.smallWindowAuto":"\u81EA\u52D5\uFF08\u30E2\u30C7\u30EB\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u306B\u3088\u308B\uFF09","general.smallWindowOn":"\u5F37\u5236\u30AA\u30F3","general.smallWindowOff":"\u30AA\u30D5","general.agentVerbosity":"\u8A73\u7D30\u5EA6","general.verbosityConcise":"\u7C21\u6F54\uFF08\u4E00\u884C\uFF09","general.verbosityNormal":"\u6A19\u6E96\uFF08\u7C21\u6F54\u30EC\u30DD\u30FC\u30C8\uFF09","general.verbosityDetailed":"\u8A73\u7D30\uFF08\u69CB\u9020\u5316\uFF09","general.contextWorkset":"\u5909\u66F4\u30D5\u30A1\u30A4\u30EB\u3092\u81EA\u52D5\u3067\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B","general.searchMaxFiles":"search_code \u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u30D5\u30A1\u30A4\u30EB\u4E0A\u9650","general.planStrictReadOnly":"Plan \u30E2\u30FC\u30C9\u3067\u53B3\u683C\u306A\u8AAD\u307F\u53D6\u308A\u5C02\u7528","general.fsAllowOutside":"\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5916\u306E\u30D1\u30B9\u3092\u8A31\u53EF","general.diagAfterEdit":"\u66F8\u304D\u8FBC\u307F\u5F8C\u306B\u8A3A\u65AD\u3092\u81EA\u52D5\u8AAD\u307F\u8FBC\u307F","general.browserEnabled":"\u5185\u8535\u30D6\u30E9\u30A6\u30B6\u30FC\u30C4\u30FC\u30EB\u3092\u6709\u52B9\u5316","general.browserHeadless":"\u30D8\u30C3\u30C9\u30EC\u30B9\u3067\u5B9F\u884C\uFF08\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u51FA\u3055\u306A\u3044\uFF09","general.browserViewportWidth":"\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u5E45\uFF08320\u301C4096\uFF09","general.browserViewportHeight":"\u30D3\u30E5\u30FC\u30DD\u30FC\u30C8\u9AD8\u3055\uFF08240\u301C4096\uFF09","general.browserIdleTimeoutMs":"\u30A2\u30A4\u30C9\u30EB\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF08ms\uFF09","general.browserChromePath":"Chrome / Edge \u306E\u30D1\u30B9","general.browserChromePathPh":"\u7A7A\u6B04\u3067\u81EA\u52D5\u691C\u51FA\uFF08LUBAN_CHROME_PATH \u3082\u53C2\u7167\uFF09","general.browserNote":"\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30C4\u30FC\u30EB\uFF1A\u30DA\u30FC\u30B8\u3092\u958B\u304F / \u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u30C4\u30EA\u30FC / \u30B9\u30AF\u30EA\u30FC\u30F3\u30B7\u30E7\u30C3\u30C8 / console / \u5931\u6557\u30EA\u30AF\u30A8\u30B9\u30C8\u3002\u30AF\u30EA\u30C3\u30AF\u3084\u5165\u529B\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u30ED\u30FC\u30AB\u30EB\u306E Chrome \u307E\u305F\u306F Edge \u304C\u5FC5\u8981\u3067\u3059\u3002\u30AA\u30D5\u306E\u3068\u304D\u306F\u30C4\u30FC\u30EB\u304C\u30E2\u30C7\u30EB\u306E\u4E00\u89A7\u306B\u51FA\u307E\u305B\u3093\u3002","general.groupComputer":"\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u64CD\u4F5C\uFF08macOS / Windows\uFF09","general.computerEnabled":"\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u64CD\u4F5C\u30C4\u30FC\u30EB\u3092\u6709\u52B9\u5316","general.computerConfirm":"\u30DE\u30A6\u30B9 / \u30AD\u30FC\u30DC\u30FC\u30C9\u64CD\u4F5C\u306E\u524D\u306B 1 \u56DE\u78BA\u8A8D","general.computerScreenshotWidth":"\u64AE\u5F71\u306E\u6700\u5927\u5E45\uFF08320\u301C4096\uFF09","general.computerNote":"\u64AE\u5F71 / \u753B\u9762\u5185\u30C6\u30AD\u30B9\u30C8\u306E\u8A8D\u8B58\uFF08Windows \u3067\u306F\u672A\u5BFE\u5FDC\u3067\u3001\u30B9\u30AF\u30EA\u30FC\u30F3\u30B7\u30E7\u30C3\u30C8\u3092\u898B\u308B\u7D4C\u8DEF\u306B\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\uFF09/ \u30A6\u30A3\u30F3\u30C9\u30A6\u4E00\u89A7 / \u30AF\u30EA\u30C3\u30AF / \u5165\u529B / \u30AD\u30FC / \u30B9\u30AF\u30ED\u30FC\u30EB / \u30C9\u30E9\u30C3\u30B0\u3002macOS \u3068 Windows \u3067\u4F7F\u7528\u53EF\u3001Plan \u30E2\u30FC\u30C9\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\u3002macOS \u3067\u306F\u30DB\u30B9\u30C8 App \u306B\u300C\u753B\u9762\u53CE\u9332\u300D\u3068\u300C\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u300D\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3001\u7121\u3044\u3068\u64AE\u5F71\u306F\u5931\u6557\u3057\u30AF\u30EA\u30C3\u30AF\u306F\u30B7\u30B9\u30C6\u30E0\u306B\u7834\u68C4\u3055\u308C\u307E\u3059\u3002Windows \u306F\u6A29\u9650\u4E0D\u8981\u3067\u3059\u304C\u3001\u7BA1\u7406\u8005\u3068\u3057\u3066\u5B9F\u884C\u4E2D\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u306F\u901A\u5E38\u30D7\u30ED\u30BB\u30B9\u306E\u5165\u529B\u3092\u7121\u8996\u3057\u307E\u3059\u3002","general.groupPlugins":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3","general.pluginsEnabled":"\u30ED\u30FC\u30AB\u30EB\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u6709\u52B9\u5316","general.pluginsMaxTools":"\u30C4\u30FC\u30EB\u6570\u306E\u4E0A\u9650\uFF081\u301C200\uFF09","general.pluginsNote":"~/.luban/plugins \u3068 <\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9>/.luban/plugins \u304B\u3089\u3001plugin.json \u3092\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u3068\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059\u3002\u30C4\u30FC\u30EB\u306F pl__ \u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u4ED8\u304D\u3067\u30E2\u30C7\u30EB\u306E\u4E00\u89A7\u306B\u73FE\u308C\u307E\u3059\u3002\u521D\u56DE\u8AAD\u307F\u8FBC\u307F\u6642\u3068\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5185\u5BB9\u304C\u5909\u5316\u3057\u305F\u3068\u304D\u306B\u78BA\u8A8D\u30C0\u30A4\u30A2\u30ED\u30B0\u304C\u51FA\u307E\u3059\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u62E1\u5F35\u6A5F\u80FD\u306E\u30D7\u30ED\u30BB\u30B9\u5185\u3067\u52D5\u304F\u305F\u3081\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u4FE1\u983C\u3067\u304D\u308B\u30B3\u30FC\u30C9\u3060\u3051\u3092\u5165\u308C\u3066\u304F\u3060\u3055\u3044\u3002Plan \u30E2\u30FC\u30C9\u3067\u306F\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u3068\u7533\u544A\u3057\u305F\u30C4\u30FC\u30EB\u306E\u307F\u8A31\u53EF\u3055\u308C\u307E\u3059\u3002","general.reviewAutoOpenDiff":"\u66F8\u304D\u8FBC\u307F\u5F8C\u306B diff \u3092\u81EA\u52D5\u8868\u793A","general.reviewAutoKeep":"\u65E2\u5B9A\u3067\u81EA\u52D5\u4FDD\u6301\uFF08\u4FDD\u7559\u30EC\u30D3\u30E5\u30FC\u3092\u30B9\u30AD\u30C3\u30D7\uFF09","general.reviewAutoKeepNote":"\u300C\u81EA\u52D5\u4FDD\u6301\u300D\u306F\u30EC\u30D3\u30E5\u30FC\u57FA\u6E96\u3092\u305D\u306E\u307E\u307E\u5F15\u304D\u4E0A\u3052\u308B\u305F\u3081\u3001\u4FDD\u7559\u30EC\u30D3\u30E5\u30FC\u306B\u3082 diff \u306B\u3082\u6B8B\u3089\u305A\u3001\u623B\u3059\u624B\u6BB5\u306F git \u306E\u307F\u3002\u30AF\u30EA\u30FC\u30F3\u306A git \u30EF\u30FC\u30AF\u30C4\u30EA\u30FC\u3067\u306E\u307F\u6709\u52B9\uFF08\u672A\u30B3\u30DF\u30C3\u30C8\u306E\u5909\u66F4\u3084\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u306A\u3044\u5834\u5408\u306F\u30CF\u30F3\u30AF\u5358\u4F4D\u306E\u30EC\u30D3\u30E5\u30FC\u306B\u623B\u308B\uFF09\u3002Plan \u306E\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u30FB\u5371\u967A\u30B3\u30DE\u30F3\u30C9\u306E\u30D6\u30E9\u30C3\u30AF\u30EA\u30B9\u30C8\u30FBcomputer \u306E\u78BA\u8A8D\u306F\u5F71\u97FF\u3092\u53D7\u3051\u306A\u3044\u3002","general.inlineEnabled":"Tab \u88DC\u5B8C\u3092\u6709\u52B9\u5316","general.inlineMaxPerMinute":"1 \u5206\u3042\u305F\u308A\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u4E0A\u9650","general.inlineDebounceMs":"\u30C7\u30D0\u30A6\u30F3\u30B9\u9045\u5EF6\uFF08ms\uFF09","general.usageRecord":"Token \u4F7F\u7528\u91CF\u3092\u8A18\u9332","general.errLanguage":"\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30FC\u30B9\u8A00\u8A9E\u306F auto / en / zh-cn / ja \u306E\u307F\u3067\u3059","general.errEnum":"\u300C{key}\u300D\u306E\u5024\u304C\u4E0D\u6B63\u3067\u3059","general.errNumber":"\u300C{key}\u300D\u306F\u6574\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","general.errMin":"\u300C{key}\u300D\u306F {min} \u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","general.errMax":"\u300C{key}\u300D\u306F {max} \u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","settings.title":"Provider \u8A2D\u5B9A","settings.statusReady":"\u6E96\u5099\u5B8C\u4E86","settings.save":"\u4FDD\u5B58","settings.defaultModel":"\u30C7\u30D5\u30A9\u30EB\u30C8\u30E2\u30C7\u30EB","settings.defaultModelTitle":"\u30D1\u30CD\u30EB\u306E\u30E2\u30C7\u30EB\u30C9\u30ED\u30C3\u30D7\u30C0\u30A6\u30F3\u306E\u521D\u671F\u9078\u629E","settings.defaultModelNote":"\u30E2\u30C7\u30EB id \u304C provider \u9593\u3067\u91CD\u8907\u3059\u308B\u5834\u5408\u306F\u81EA\u52D5\u3067 <code>providerId::modelId</code> \u30D7\u30EC\u30D5\u30A3\u30C3\u30AF\u30B9\u304C\u4ED8\u304D\u307E\u3059\u3002API \u30AD\u30FC\u306F VS Code SecretStorage \u306B\u4FDD\u5B58\u3055\u308C\u3001\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306B\u306F\u66F8\u304D\u307E\u305B\u3093\u3002","settings.addProvider":"+ provider \u3092\u8FFD\u52A0","settings.openConfig":"providers.json \u3092\u958B\u304F","settings.reload":"\u8A2D\u5B9A\u3092\u518D\u8AAD\u307F\u8FBC\u307F","settings.reloadTitle":"providers.json \u3092\u8AAD\u307F\u76F4\u3057\u307E\u3059\uFF08\u30B9\u30AD\u30EB / \u30EB\u30FC\u30EB / MCP \u3092\u542B\u3080\uFF09\u3002\u672A\u4FDD\u5B58\u306E\u7DE8\u96C6\u306F\u7834\u68C4\u3055\u308C\u307E\u3059","settings.reloading":"\u518D\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","settings.unsaved":"\u672A\u4FDD\u5B58","settings.firstModel":"\uFF08\u6700\u521D\u306E\u30E2\u30C7\u30EB\uFF09","settings.noModel":"\uFF08\u30E2\u30C7\u30EB\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF09","settings.modelIdPh":"model id\uFF08\u5FC5\u9808\uFF09","settings.modelNamePh":"\u8868\u793A\u540D\uFF08\u4EFB\u610F\uFF09","settings.toolCallingTitle":"toolCalling\uFF1AAgent \u30E2\u30FC\u30C9\u3067\u4F7F\u3046\u306B\u306F\u30C1\u30A7\u30C3\u30AF\u5FC5\u9808","settings.visionTitle":"vision\uFF1A\u30E2\u30C7\u30EB\u304C\u753B\u50CF\u5165\u529B\u306B\u5BFE\u5FDC\uFF08\u30C1\u30E3\u30C3\u30C8\u306B\u753B\u50CF\u3092\u8CBC\u308A\u4ED8\u3051\uFF09","settings.thinkTitle":"thinking\uFF1A\u601D\u8003\u30C6\u30A3\u30A2\u3002on / off \u306E JSON \u306F\u305D\u306E\u307E\u307E\u30EA\u30AF\u30A8\u30B9\u30C8\u672C\u6587\u306B\u30DE\u30FC\u30B8\u3055\u308C\u307E\u3059\uFF08\u4F8B: chat_template_kwargs.enable_thinking\u3001reasoning\u3001think\uFF09\uFF1B\u7A7A\u306A\u3089\u305D\u306E\u30C6\u30A3\u30A2\u306F\u4F55\u3082\u9001\u308A\u307E\u305B\u3093\u3002\u300C\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u5165\u529B\u300D\u3067\u4E00\u822C\u7684\u306A\u65B9\u8A00\u3092\u751F\u6210\u3067\u304D\u307E\u3059","settings.thinkDefault":"\u30C7\u30D5\u30A9\u30EB\u30C8\u30C6\u30A3\u30A2","settings.thinkDefaultOff":"\u30C7\u30D5\u30A9\u30EB\u30C8\uFF1A\u30AA\u30D5","settings.thinkDefaultOn":"\u30C7\u30D5\u30A9\u30EB\u30C8\uFF1A\u30AA\u30F3","settings.thinkPreset":"\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u5165\u529B\u2026","settings.thinkPresetQwen":"Qwen / vLLM","settings.thinkPresetDeepseek":"DeepSeek","settings.thinkPresetOpenrouter":"OpenRouter","settings.thinkPresetAnthropic":"Anthropic \u4E92\u63DB","settings.thinkPresetOllama":"Ollama","settings.thinkPresetOverwrite":"on / off \u306B\u65E2\u306B\u5185\u5BB9\u304C\u3042\u308A\u307E\u3059\u3002\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3067\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\uFF1F","settings.thinkOn":"\u30AA\u30F3\uFF08on\uFF09","settings.thinkOff":"\u30AA\u30D5\uFF08off\uFF09","settings.thinkOnPh":'\u7A7A = \u9001\u4FE1\u3057\u306A\u3044\u3002\u4F8B: { "chat_template_kwargs": { "enable_thinking": true } }',"settings.thinkOffPh":'\u7A7A = \u9001\u4FE1\u3057\u306A\u3044\u3002\u4F8B: { "thinking": { "type": "disabled" } }',"settings.thinkBadJson":"{pos} \u30E2\u30C7\u30EB\u300C{id}\u300Dthinking.{tier} \u306F\u6B63\u3057\u3044 JSON \u3067\u306F\u3042\u308A\u307E\u305B\u3093","settings.thinkBadShape":"{pos} \u30E2\u30C7\u30EB\u300C{id}\u300Dthinking.{tier} \u306F JSON \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u914D\u5217\u3084\u30B9\u30AB\u30E9\u30FC\u4E0D\u53EF\uFF09","settings.thinkInline":"inline","settings.thinkInlineTitle":"inline: \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u304C\u601D\u8003\u3092\u305D\u306E\u307E\u307E content \u306B\u66F8\u304D\u8FBC\u3080\u5834\u5408\uFF08\u672B\u5C3E\u306E </think> \u306E\u307F\u3001\u6253\u3061\u5207\u3089\u308C\u308B\u3068\u30BF\u30B0\u3082\u51FA\u306A\u3044\uFF09\u3002\u30AA\u30F3\u306B\u3059\u308B\u3068\u601D\u8003\u3092\u6709\u52B9\u306B\u3057\u305F\u3068\u304D content \u3092\u6700\u521D\u306E 1 \u6587\u5B57\u304B\u3089\u601D\u8003\u30D6\u30ED\u30C3\u30AF\u306B\u96C6\u3081\u3001\u56DE\u7B54\u306B\u6F0F\u308C\u307E\u305B\u3093","settings.deleteModel":"\u3053\u306E\u30E2\u30C7\u30EB\u3092\u524A\u9664","settings.providerNamePh":"provider \u540D\uFF08\u4F8B: DeepSeek\uFF09","settings.deleteProvider":"provider \u3092\u524A\u9664","settings.idLabel":"id\uFF08\u4E00\u610F\uFF1B\u82F1\u6570\u5B57/_/-\uFF09","settings.apiKeyEnvLabel":"apiKeyEnv\uFF08\u4EFB\u610F\uFF09","settings.keyLabel":"API key\uFF08VS Code SecretStorage \u306B\u4FDD\u5B58\uFF09","settings.keyPhSaved":"\u4FDD\u5B58\u6E08\u307F \u2014 \u7A7A\u6B04\u306E\u307E\u307E\u306A\u3089\u5909\u66F4\u3057\u307E\u305B\u3093","settings.keyPh":"sk-\u2026\uFF08SecretStorage \u306E\u307F\u306B\u66F8\u304D\u8FBC\u307F\uFF09","settings.clearKey":"\u30AD\u30FC\u3092\u30AF\u30EA\u30A2","settings.test":"\u63A5\u7D9A\u30C6\u30B9\u30C8","settings.testing":"\u30C6\u30B9\u30C8\u4E2D\u2026\uFF08\u6700\u521D\u306E\u30E2\u30C7\u30EB\u3001max_tokens=1\uFF09","settings.fetchModels":"\u30E2\u30C7\u30EB\u3092\u53D6\u5F97","settings.fetching":"/models \u3092\u30EA\u30AF\u30A8\u30B9\u30C8\u3057\u3001\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u691C\u51FA\u4E2D\u2026","settings.modelsHead":"\u30E2\u30C7\u30EB\uFF08{n}\uFF09\xB7 id / \u8868\u793A\u540D / maxInputTokens / maxOutputTokens / toolCalling / vision / thinking","settings.modelsColsId":"id","settings.modelsColsName":"\u8868\u793A\u540D","settings.modelsColsIn":"\u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6","settings.modelsColsOut":"\u51FA\u529B\u4E0A\u9650","settings.modelsColsTools":"tools","settings.modelsColsVision":"vision","settings.limitsNote":"\u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6 = \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5168\u4F53\u306E\u4E88\u7B97\uFF08maxInputTokens\uFF09\u3001\u51FA\u529B\u4E0A\u9650 = 1 \u56DE\u306E\u56DE\u7B54\u4E0A\u9650\uFF08maxOutputTokens\u3001\u9577\u3044\u30D5\u30A1\u30A4\u30EB / \u601D\u8003\u30E2\u30C7\u30EB\u306F 16384 \u4EE5\u4E0A\u63A8\u5968\uFF09\u3002\u5408\u8A08\u304C\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306E\u5B9F\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u8D85\u3048\u306A\u3044\u3088\u3046\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u7A7A\u6B04\u306F 65536 / 8192 \u3068\u3057\u3066\u6271\u3044\u307E\u3059\u3002","settings.maxInTitle":"maxInputTokens\uFF1A\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5168\u4F53\u306E\u4E88\u7B97\u3002\u30ED\u30FC\u30AB\u30EB\u30E2\u30C7\u30EB\u3067\u306F\u30B5\u30FC\u30D0\u30FC\u306E\u5B9F\u30A6\u30A3\u30F3\u30C9\u30A6\u4EE5\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08Ollama \u306F OLLAMA_CONTEXT_LENGTH / num_ctx\uFF09","settings.maxOutTitle":"maxOutputTokens\uFF1A1 \u56DE\u306E\u56DE\u7B54\u4E0A\u9650\uFF08max_tokens\uFF09\u3002\u9577\u3044\u30D5\u30A1\u30A4\u30EB\u3084\u601D\u8003\u30E2\u30C7\u30EB\u306F 16384 \u4EE5\u4E0A\u63A8\u5968","settings.limitPreset":"\u3088\u304F\u4F7F\u3046\u30A6\u30A3\u30F3\u30C9\u30A6\u2026","settings.limitPresetSmall":"8k / 2k","settings.limitPreset16":"16k / 4k","settings.limitPreset32":"32k / 8k","settings.limitPreset64":"64k / 16k","settings.limitPreset128":"128k / 16k","settings.limitPreset256":"256k / 32k","settings.limitPreset512":"512k / 32k","settings.limitPreset1m":"1M / 32k","settings.suggestLimits":"\u30A6\u30A3\u30F3\u30C9\u30A6 {in} / \u51FA\u529B {out} \u3092\u691C\u51FA\uFF08{source}\uFF09","settings.suggestTraining":"\uFF08\u5B66\u7FD2\u6642\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3002\u30B5\u30FC\u30D0\u30FC\u306E num_ctx \u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09","settings.applySuggestion":"\u63A1\u7528","settings.sourceGeneric":"\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF","settings.sourceOpenrouter":"OpenRouter","settings.sourceVllm":"vLLM","settings.sourceOllama":"Ollama","settings.sourceLlamacpp":"llama.cpp","settings.warningTitle":"\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF1A","settings.warnThinkOutput":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306F thinking \u6709\u52B9\u3067\u3059\u304C\u51FA\u529B\u4E0A\u9650\u304C {n} \u3057\u304B\u3042\u308A\u307E\u305B\u3093\u3002\u601D\u8003\u30C8\u30FC\u30AF\u30F3\u3082\u3053\u3053\u304B\u3089\u6D88\u8CBB\u3059\u308B\u305F\u3081\u3001\u672C\u6587\u304C\u7A7A\u306B\u306A\u308A\u3084\u3059\u3044\u3067\u3059","settings.warnOutGeIn":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306E\u51FA\u529B\u4E0A\u9650 \u2265 \u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059\u3002\u5024\u304C\u9006\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059","settings.warnSmallWindow":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306E\u5165\u529B\u30A6\u30A3\u30F3\u30C9\u30A6 < 16k\uFF1A\u5C0F\u30A6\u30A3\u30F3\u30C9\u30A6\u30E2\u30FC\u30C9\u306B\u306A\u308A\u3001\u30C4\u30FC\u30EB\u3068\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7C21\u7565\u5316\u3055\u308C\u307E\u3059","settings.warnHuge":"\u30E2\u30C7\u30EB\u300C{id}\u300D\u306E\u30A6\u30A3\u30F3\u30C9\u30A6 / \u51FA\u529B\u4E0A\u9650\u304C\u7570\u5E38\u306B\u5927\u304D\u3044\u3067\u3059\uFF08{n}\uFF09\u3002\u5165\u529B\u30DF\u30B9\u3067\u306A\u3044\u304B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044","settings.addModel":"+ \u30E2\u30C7\u30EB\u3092\u8FFD\u52A0","settings.errors":"\u4FEE\u6B63\u304C\u5FC5\u8981\u306A\u7B87\u6240\u304C {n} \u4EF6\u3042\u308A\u307E\u3059\uFF1A","settings.noProviders":"\u307E\u3060 provider \u304C\u3042\u308A\u307E\u305B\u3093 \u2014 \u4E0B\u306E\u300C+ provider \u3092\u8FFD\u52A0\u300D\u304B\u3089\u59CB\u3081\u3066\u304F\u3060\u3055\u3044\u3002","settings.saving":"\u4FDD\u5B58\u4E2D\u2026","settings.builtin":"\u5185\u8535\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u8A2D\u5B9A\u3092\u4F7F\u7528\u4E2D\uFF1B\u4FDD\u5B58\u3059\u308B\u3068 {path} \u306B\u66F8\u304D\u8FBC\u307F\u307E\u3059","settings.loaded":"\u8AAD\u307F\u8FBC\u307F\u6E08\u307F","settings.saved":"\u4FDD\u5B58\u3057\u307E\u3057\u305F \xB7 \u30E2\u30C7\u30EB {n}","settings.invalid":"\u554F\u984C\u304C {n} \u4EF6\u3042\u308A\u3001\u4FDD\u5B58\u3057\u3066\u3044\u307E\u305B\u3093","settings.testOk":"\u524D\u56DE\u306E\u30C6\u30B9\u30C8 OK \xB7 {ms}ms","settings.testFailed":"\u524D\u56DE\u306E\u30C6\u30B9\u30C8\u5931\u6557","settings.testOkResult":"\u2705 HTTP {status} \xB7 {ms}ms{reply}","settings.testFailResult":"\u274C {msg}","settings.fail":"\u5931\u6557","settings.fetchFail":"\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F","settings.fetched":"\u2705 \u30E2\u30C7\u30EB\u3092 {n} \u4EF6\u53D6\u5F97","settings.fetchedWithMeta":"\u2705 \u30E2\u30C7\u30EB\u3092 {n} \u4EF6\u53D6\u5F97\uFF08{m} \u4EF6\u306B\u30A6\u30A3\u30F3\u30C9\u30A6\u60C5\u5831\u3042\u308A\uFF09","settings.fetchedAdded":"\uFF1B\u65B0\u898F {n} \u4EF6\uFF08\u4FDD\u5B58\u3092\u5FD8\u308C\u305A\u306B\uFF09","settings.fetchedNone":"\uFF1B\u65B0\u3057\u3044\u30E2\u30C7\u30EB\u306F\u3042\u308A\u307E\u305B\u3093","settings.keySet":"\u4FDD\u5B58\u6642\u306B SecretStorage \u3078\u66F8\u304D\u8FBC\u307F\u307E\u3059\uFF08\u30C7\u30A3\u30B9\u30AF\u306B\u306F\u66F8\u304D\u307E\u305B\u3093\uFF09","settings.keyClear":"\u4FDD\u5B58\u6642\u306B\u4FDD\u5B58\u6E08\u307F\u30AD\u30FC\u3092\u524A\u9664\u3057\u307E\u3059","settings.keySecret":"\u3059\u3067\u306B SecretStorage \u306B\u3042\u308A\u307E\u3059","settings.keyInline":"\u8A2D\u5B9A\u306B\u5E73\u6587 apiKey \u304C\u3042\u308A\u307E\u3059\uFF08\u4FDD\u5B58\u6642\u3082\u4FDD\u6301\uFF09","settings.keyEnv":"\u74B0\u5883\u5909\u6570 {env} \u3092\u4F7F\u7528\uFF08\u30AD\u30FC\u306F\u3053\u3053\u306B\u8868\u793A\u3055\u308C\u307E\u305B\u3093\uFF09","settings.keyNone":"\u30AD\u30FC\u672A\u8A2D\u5B9A","settings.unnamedModel":"\u540D\u79F0\u672A\u8A2D\u5B9A","webdav.title":"\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08WebDAV\uFF09","webdav.enabled":"\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u6709\u52B9\u306B\u3059\u308B","webdav.url":"\u30B5\u30FC\u30D0\u30FC URL","webdav.urlPh":"https://dav.example.com/remote.php/dav/files/me","webdav.username":"\u30E6\u30FC\u30B6\u30FC\u540D","webdav.usernamePh":"WebDAV \u30A2\u30AB\u30A6\u30F3\u30C8\uFF08\u7A7A\u6B04\u53EF\uFF09","webdav.password":"\u30D1\u30B9\u30EF\u30FC\u30C9 / \u30A2\u30D7\u30EA\u30D1\u30B9\u30EF\u30FC\u30C9","webdav.passwordPh":"\u7A7A\u6B04\u306A\u3089\u5909\u66F4\u3057\u307E\u305B\u3093\uFF08SecretStorage \u306B\u4FDD\u5B58\u6E08\u307F\uFF09","webdav.passwordPhNew":"SecretStorage \u306E\u307F\u306B\u4FDD\u5B58\u3057\u3001\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306B\u306F\u66F8\u304D\u307E\u305B\u3093","webdav.clearPassword":"\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u524A\u9664","webdav.remoteDir":"\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC","webdav.remoteDirPh":"luban","webdav.perMachine":"\u30DE\u30B7\u30F3\u3054\u3068\u306B\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u5206\u3051\u308B","webdav.perMachineHint":"\u30AA\u30F3\u306B\u3059\u308B\u3068\u5B9F\u969B\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u306F\u300C\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC / \u3053\u306E\u30DE\u30B7\u30F3\u306E\u540D\u524D\u300D\u306B\u306A\u308A\u3001\u8907\u6570\u306E PC \u304C\u305D\u308C\u305E\u308C\u72EC\u7ACB\u306B\u4FDD\u5B58\u3055\u308C\u4E0A\u66F8\u304D\u3057\u5408\u3044\u307E\u305B\u3093\u3002\u30AA\u30D5\u306E\u5834\u5408\u306F\u5168\u30DE\u30B7\u30F3\u3067\u540C\u3058\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u5171\u6709\u3057\u307E\u3059\uFF08\u6700\u5F8C\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u512A\u5148\uFF09\u3002","webdav.machine":"\u8AAD\u307F\u53D6\u308A\u5143\u306E\u30DE\u30B7\u30F3","webdav.machineHint":"\u300C\u8AAD\u307F\u53D6\u308A\u5143\u306E\u30DE\u30B7\u30F3\u300D\u306F\u300C\u30EA\u30E2\u30FC\u30C8\u306E\u5185\u5BB9\u3092\u898B\u308B\u300D\u300C\u30EA\u30E2\u30FC\u30C8\u304B\u3089\u5FA9\u5143\u300D\u3060\u3051\u306B\u52B9\u304D\u307E\u3059\u3002\u5225\u306E PC \u3092\u9078\u3076\u3068\u305D\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u8AAD\u307F\u307E\u3059\uFF08\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306F\u5E38\u306B\u3053\u306E\u30DE\u30B7\u30F3\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u3078\u66F8\u304D\u8FBC\u307F\u307E\u3059\uFF09\u3002","webdav.machineRefresh":"\u4ED6\u306E PC \u3092\u63A2\u3059","webdav.machineRefreshTitle":"\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u914D\u4E0B\u306E\u5404\u30DE\u30B7\u30F3\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u4E00\u89A7\u3092\u8AAD\u307F\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u306E\u307F\u3001\u66F8\u304D\u8FBC\u307F\u306A\u3057\uFF09","webdav.machineLocal":"\u3053\u306E\u30DE\u30B7\u30F3\uFF08\u65E2\u5B9A\uFF09","webdav.machineShared":"\u5171\u6709\u30D5\u30A9\u30EB\u30C0\u30FC","webdav.machineItem":"{dir} \xB7 {at} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.machineItemLocal":"{dir}\uFF08\u3053\u306E\u30DE\u30B7\u30F3\uFF09 \xB7 {at} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.machineLoading":"\u30EA\u30E2\u30FC\u30C8\u306E\u30DE\u30B7\u30F3\u4E00\u89A7\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","webdav.machineNone":"\u30EA\u30E2\u30FC\u30C8\u306B\u3042\u308B\u306E\u306F\u3053\u306E\u30DE\u30B7\u30F3\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3060\u3051\u3067\u3059\uFF08{dir} \u914D\u4E0B\u306B\u4ED6\u306E PC \u306E\u3082\u306E\u306F\u3042\u308A\u307E\u305B\u3093\uFF09","webdav.machineFound":"{n} \u53F0\u5206\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u3042\u308A\u307E\u3059\u3002\u300C\u8AAD\u307F\u53D6\u308A\u5143\u306E\u30DE\u30B7\u30F3\u300D\u3067\u5207\u308A\u66FF\u3048\u3089\u308C\u307E\u3059","webdav.force":"\u30ED\u30FC\u30AB\u30EB\u306E\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u3082\u4E0A\u66F8\u304D","webdav.forceHint":"\u65E2\u5B9A\u3067\u306F\u300C\u30ED\u30FC\u30AB\u30EB\u304C\u30EA\u30E2\u30FC\u30C8\u306E\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u3088\u308A\u65B0\u3057\u3044\u300D\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\u3002\u30AA\u30F3\u306B\u3059\u308B\u3068\u4E0A\u66F8\u304D\u3057\u307E\u3059\uFF08\u5FA9\u5143\u524D\u306E\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u306F ~/.luban/backups/ \u306B\u6B8B\u308A\u307E\u3059\uFF09\u3002\u30DE\u30B7\u30F3\u9593\u3067 provider \u8A2D\u5B9A\u3092\u540C\u671F\u3059\u308B\u3068\u304D\u306B\u5FC5\u8981\u3067\u3059","webdav.statusListInfoLegacy":"\u30EA\u30E2\u30FC\u30C8\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08\u65E7\u30EB\u30FC\u30C8\uFF09 \xB7 {at} \xB7 {machine} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.includes":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u5BFE\u8C61","webdav.inc.sessions":"\u30BB\u30C3\u30B7\u30E7\u30F3\u5C65\u6B74","webdav.inc.attachments":"\u753B\u50CF\u6DFB\u4ED8","webdav.inc.plans":"\u30D7\u30E9\u30F3\u6587\u66F8","webdav.inc.config":"provider \u8A2D\u5B9A\uFF08\u5E73\u6587\u30AD\u30FC\u306F\u9664\u53BB\uFF09","webdav.inc.mcp":"mcp.json","webdav.providerTitle":"\u5FA9\u5143\u3059\u308B\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u3076","webdav.providerAll":"\u3059\u3079\u3066\u9078\u629E","webdav.providerNone":"\u3059\u3079\u3066\u89E3\u9664","webdav.providerConfirm":"\u9078\u629E\u3057\u305F\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u5FA9\u5143","webdav.providerCount":"{n} \u4EF6\u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u629E\u4E2D","webdav.providerCountNone":"\u5C11\u306A\u304F\u3068\u3082 1 \u4EF6\u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044","webdav.providerEmpty":"\u3053\u306E\u30DE\u30B7\u30F3\u306B\u306F\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u8A2D\u5B9A\uFF08providers.json\uFF09\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u4ED6\u306E\u30AB\u30C6\u30B4\u30EA\u30FC\u306E\u307F\u5FA9\u5143\u3057\u307E\u3059","webdav.providerLoading":"\u30EA\u30E2\u30FC\u30C8\u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u4E00\u89A7\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026","webdav.providerHint":"\u30C1\u30A7\u30C3\u30AF\u3057\u305F\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3060\u3051\u3092\u30ED\u30FC\u30AB\u30EB\u8A2D\u5B9A\u306B\u30DE\u30FC\u30B8\u3057\u307E\u3059\uFF08\u540C\u3058 id \u306E\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u304C\u65E2\u306B\u3042\u308B\u5834\u5408\u3001\u30ED\u30FC\u30AB\u30EB\u306E apiKey \u3092\u4FDD\u6301\u3057\u30E2\u30C7\u30EB\u3060\u3051\u8FFD\u52A0\uFF09","webdav.providerItem":"{name} \xB7 {n} \u30E2\u30C7\u30EB","webdav.providerItemExists":"{name} \xB7 {n} \u30E2\u30C7\u30EB\uFF08\u3053\u306E\u30DE\u30B7\u30F3\u306B\u65E2\u5B58\u3002\u30ED\u30FC\u30AB\u30EB\u306E apiKey \u3092\u4FDD\u6301\uFF09","webdav.providerPickHint":"\u300C\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u8A2D\u5B9A\u300D\u3092\u30AA\u30F3\u306B\u3057\u3066\u300C\u30EA\u30E2\u30FC\u30C8\u304B\u3089\u5FA9\u5143\u300D\u3092\u62BC\u3059\u3068\u3001\u5FA9\u5143\u3059\u308B\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u9078\u3079\u307E\u3059","webdav.save":"\u8A2D\u5B9A\u3092\u4FDD\u5B58","webdav.test":"\u63A5\u7D9A\u30C6\u30B9\u30C8","webdav.testing":"\u63A5\u7D9A\u4E2D\u2026","webdav.backup":"\u4ECA\u3059\u3050\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7","webdav.restore":"\u30EA\u30E2\u30FC\u30C8\u304B\u3089\u5FA9\u5143","webdav.list":"\u30EA\u30E2\u30FC\u30C8\u306E\u5185\u5BB9\u3092\u898B\u308B","webdav.openFile":"webdav.json \u3092\u958B\u304F","webdav.openFileTitle":"\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306B\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u542B\u307E\u308C\u307E\u305B\u3093\uFF08SecretStorage \u306E\u307F\uFF09","webdav.note":"\u30D1\u30B9\u30EF\u30FC\u30C9\u306F VS Code \u306E SecretStorage \u306B\u4FDD\u5B58\u3057\u3001webdav.json \u306B\u306F\u66F8\u304D\u307E\u305B\u3093\u3002\u30BB\u30C3\u30B7\u30E7\u30F3\u672C\u6587\u306F\u30EA\u30E2\u30FC\u30C8\u3078\u9001\u4FE1\u3055\u308C\u308B\u305F\u3081\u3001\u4FE1\u983C\u3067\u304D\u308B\u30B5\u30FC\u30D0\u30FC\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5FA9\u5143\u524D\u306B\u306F\u4E0A\u66F8\u304D\u5BFE\u8C61\u306E\u30D5\u30A1\u30A4\u30EB\u3092 <code>~/.luban/backups/</code> \u306B\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u3057\u307E\u3059\u3002","webdav.statusReady":"\u6E96\u5099\u5B8C\u4E86","webdav.statusSaved":"\u8A2D\u5B9A\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F","webdav.statusInvalid":"{n} \u4EF6\u306E\u554F\u984C\u304C\u3042\u308A\u3001\u4FDD\u5B58\u3057\u3066\u3044\u307E\u305B\u3093","webdav.statusTestOk":"\u63A5\u7D9A OK \xB7 {ms}ms","webdav.statusTestCreate":"\u63A5\u7D9A OK\u3002\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u306F\u521D\u56DE\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u6642\u306B\u4F5C\u6210\u3057\u307E\u3059","webdav.statusTestFail":"\u63A5\u7D9A\u5931\u6557\uFF1A{msg}","webdav.statusBusy":"\u8EE2\u9001\u4E2D\u3067\u3059\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026","webdav.statusProgress":"{phase} {done}/{total}","webdav.statusBackupDone":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u5B8C\u4E86 \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.statusBackupDoneInc":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u5B8C\u4E86 \xB7 {u} \u4EF6\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 \xB7 {s} \u4EF6\u30B9\u30AD\u30C3\u30D7\uFF08\u5909\u66F4\u306A\u3057\uFF09","webdav.statusRestoreDone":"\u5FA9\u5143\u5B8C\u4E86 \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.catWrap":"\uFF08{parts}\uFF09","webdav.catSessions":"\u30BB\u30C3\u30B7\u30E7\u30F3 {n}","webdav.catAttachments":"\u6DFB\u4ED8 {n}","webdav.catPlans":"\u30D7\u30E9\u30F3 {n}","webdav.catProviders":"provider \u8A2D\u5B9A {n}","webdav.catMcp":"MCP \u8A2D\u5B9A {n}","webdav.statusRestorePartial":"\u30EA\u30E2\u30FC\u30C8\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u4E0D\u5B8C\u5168\u3067\u3059\uFF08\u524D\u56DE\u306E\u8EE2\u9001\u304C\u672A\u5B8C\u4E86\uFF09\u3001{n} \u4EF6\u30B9\u30AD\u30C3\u30D7","webdav.statusRestoreBlocked":"\u30ED\u30FC\u30AB\u30EB\u304C\u65B0\u3057\u3044 {n} \u4EF6\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u300C\u30ED\u30FC\u30AB\u30EB\u306E\u65B0\u3057\u3044\u30D5\u30A1\u30A4\u30EB\u3082\u4E0A\u66F8\u304D\u300D\u3092\u30AA\u30F3\u306B\u3057\u3066\u518D\u5B9F\u884C\uFF09","webdav.statusProviderMerged":"provider \u3092 {p} \u4EF6\u8FFD\u52A0 \xB7 \u30E2\u30C7\u30EB {m} \u4EF6","webdav.statusProviderNoNew":"provider \u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\uFF08\u8FFD\u52A0\u306A\u3057\uFF09","webdav.mergeSep":"\u3001","webdav.statusListNone":"\u30EA\u30E2\u30FC\u30C8\u306B Luban \u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093","webdav.statusListInfo":"\u30EA\u30E2\u30FC\u30C8\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7 \xB7 {at} \xB7 {machine} \xB7 {n} \u30D5\u30A1\u30A4\u30EB","webdav.statusListPartial":"\uFF08\u524D\u56DE\u306E\u8EE2\u9001\u304C\u672A\u5B8C\u4E86\u3001{n} \u4EF6\u6B20\u843D\uFF09","webdav.statusNoUrl":"\u5148\u306B\u30B5\u30FC\u30D0\u30FC URL \u3092\u5165\u529B\u3057\u3066\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044","webdav.confirmOverwrite":"\u30EA\u30E2\u30FC\u30C8\u306B\u306F {machine} \u306E {at} \u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\uFF08{n} \u30D5\u30A1\u30A4\u30EB\uFF09\u304C\u3042\u308A\u307E\u3059\u3002\u7D9A\u884C\u3059\u308B\u3068\u3053\u306E\u30DE\u30B7\u30F3\u306E\u5185\u5BB9\u3067\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F","webdav.confirmOverwriteYes":"\u4E0A\u66F8\u304D\u3059\u308B","webdav.statusCancelled":"\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3057\u305F\uFF08\u30EA\u30E2\u30FC\u30C8\u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u306F\u5909\u66F4\u3057\u3066\u3044\u307E\u305B\u3093\uFF09","webdav.phase.test":"\u63A5\u7D9A","webdav.phase.scan":"\u30B9\u30AD\u30E3\u30F3","webdav.phase.upload":"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9","webdav.phase.manifest":"\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8","webdav.phase.snapshot":"\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8","webdav.phase.download":"\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9","webdav.phase.restore":"\u5FA9\u5143","webdav.phase.done":"\u5B8C\u4E86","webdav.phase.confirm":"\u78BA\u8A8D\u5F85\u3061","webdav.phase.warn":"\u6CE8\u610F","webdav.restoredNotice":"{n} \u30D5\u30A1\u30A4\u30EB\u3092\u5FA9\u5143\u3057\u307E\u3057\u305F{cat}\u3002\u5FA9\u5143\u524D\u306E\u30B9\u30CA\u30C3\u30D7\u30B7\u30E7\u30C3\u30C8\u306F {dir} \u306B\u3042\u308A\u307E\u3059\u3002\u958B\u3044\u3066\u3044\u308B\u30BF\u30D6\u306F\u53E4\u3044\u5185\u5BB9\u306E\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u3001\u958B\u304D\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002","webdav.noSnapshot":"\uFF08\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u305B\u3093\uFF09","webdav.errUrl":"\u30B5\u30FC\u30D0\u30FC URL \u306F http(s):// \u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059","webdav.errNeedUrl":"WebDAV \u30B5\u30FC\u30D0\u30FC URL \u304C\u672A\u8A2D\u5B9A\u3067\u3059","webdav.errDisabled":"WebDAV \u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u6709\u52B9\u306B\u306A\u3063\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306B\u300C\u30AF\u30E9\u30A6\u30C9\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u6709\u52B9\u5316\u300D\u3092\u30AA\u30F3\u306B\u3057\u3066\u4FDD\u5B58\u3057\u3066\u304F\u3060\u3055\u3044","webdav.errRemoteDir":"\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u306F [A-Za-z0-9._-] \u306E\u30BB\u30B0\u30E1\u30F3\u30C8\u306E\u307F\u3001\u300C..\u300D\u306F\u4F7F\u3048\u307E\u305B\u3093","webdav.errBadMachine":"\u30DE\u30B7\u30F3\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u540D\u304C\u4E0D\u6B63\u3067\u3059\uFF08[A-Za-z0-9._-] \u306E\u307F\u53EF\u3001\u300C..\u300D\u3084\u30B9\u30E9\u30C3\u30B7\u30E5\u306F\u4E0D\u53EF\uFF09","webdav.errInclude":"\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u7BC4\u56F2\u306E\u30B9\u30A4\u30C3\u30C1\u306F\u771F\u507D\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","webdav.errAuth":"\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08401\uFF09\uFF1A\u30E6\u30FC\u30B6\u30FC\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9055\u3044\u307E\u3059","webdav.errRemotePath":"\u30EA\u30E2\u30FC\u30C8\u30D1\u30B9\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\uFF08404\uFF09\uFF1AURL \u3068\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044","webdav.errHttp":"\u30B5\u30FC\u30D0\u30FC\u304C\u30A8\u30E9\u30FC\u72B6\u614B\u3092\u8FD4\u3057\u307E\u3057\u305F","webdav.errNetwork":"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u8981\u6C42\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\u30B5\u30FC\u30D0\u30FC\u306B\u5230\u9054\u3067\u304D\u306A\u3044\u304B\u8A3C\u660E\u66F8\u306E\u554F\u984C\u3067\u3059","webdav.errPartial":"\u4E00\u90E8\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u8EE2\u9001\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08{n} \u4EF6\uFF09","webdav.errTimeout":"\u8981\u6C42\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF0860 \u79D2\uFF09","webdav.errBusy":"\u524D\u56DE\u306E\u8EE2\u9001\u304C\u307E\u3060\u5B9F\u884C\u4E2D\u3067\u3059\u3002\u7D42\u308F\u308B\u307E\u3067\u304A\u5F85\u3061\u304F\u3060\u3055\u3044","webdav.errNoBackup":"\u30EA\u30E2\u30FC\u30C8\u306B Luban \u306E\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u3042\u308A\u307E\u305B\u3093\uFF08manifest.json \u306A\u3057\uFF09","webdav.errBadManifest":"\u30EA\u30E2\u30FC\u30C8\u306E manifest.json \u304C\u58CA\u308C\u3066\u3044\u3066\u89E3\u6790\u3067\u304D\u307E\u305B\u3093","webdav.errRemoteNewer":"\u30EA\u30E2\u30FC\u30C8\u306B\u65B0\u3057\u3044\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u304C\u3042\u308A\u307E\u3059\uFF08\u5225\u30DE\u30B7\u30F3\u306E\u53EF\u80FD\u6027\uFF09\u3002\u4E0A\u66F8\u304D\u306B\u306F\u78BA\u8A8D\u304C\u5FC5\u8981\u3067\u3059","mascot.state.offline":"\u30AA\u30D5\u30E9\u30A4\u30F3","mascot.state.idle":"\u5F85\u6A5F\u4E2D","mascot.state.thinking":"\u8003\u3048\u4E2D","mascot.state.typing":"\u51FA\u529B\u4E2D","mascot.state.tool":"\u30C4\u30FC\u30EB\u5B9F\u884C","mascot.state.waiting":"\u78BA\u8A8D\u5F85\u3061","mascot.state.done":"\u5B8C\u4E86","mascot.state.error":"\u30A8\u30E9\u30FC"}},n="zh-cn";function s(d){let f=String(d??"").toLowerCase();if(!f||f==="auto")return null;let p=f.slice(0,2);return p==="zh"?"zh-cn":p==="ja"?"ja":"en"}function r(){let d=typeof navigator<"u"&&navigator&&navigator.language||"";return/^zh/i.test(d)?"zh-cn":/^ja/i.test(d)?"ja":"en"}function o(d){return n=s(d)||r(),n}function i(){return n}function a(d,f,p){let h=s(d)||n,y=(e[h]||e["zh-cn"])[f];return y==null&&(y=e["zh-cn"][f]),y==null?f:(p&&(y=String(y).replace(/\{(\w+)\}/g,function(w,T){return p[T]==null?w:String(p[T])})),y)}function l(d,f){return a(n,d,f)}function c(d){return e["zh-cn"][d]!=null}let u={t:l,tIn:a,setLang:o,getLang:i,has:c,normalize:s,langs:["zh-cn","en","ja"]};typeof ha<"u"&&ha&&ha.exports&&(ha.exports=u),t&&(t.LubanI18n=u)})(typeof globalThis<"u"?globalThis:fv)});var wv=ne((_D,yv)=>{"use strict";var Xr=require("path"),sh=/!\[([^\]]*)\]\(([^()\s]*(?:\([^()\s]*\)[^()\s]*)*)\)/g;function DI(t){let e=[],n=new Set,s=String(t??""),r;for(sh.lastIndex=0;(r=sh.exec(s))!==null;){let o=String(r[2]||"").trim();o&&(n.has(o)||(n.add(o),e.push(o)))}return e}function hv(t,e){if(!t||!e)return!1;let n=Xr.resolve(t),s=Xr.resolve(e);if(n===s)return!0;let r=Xr.relative(s,n);return!!r&&!r.startsWith("..")&&!Xr.isAbsolute(r)}function mv(t){let e=String(t||"");return!e||e.startsWith("//")||e.startsWith("data:")||e.startsWith("#")?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)}function gv(t,e,n){let s=String(t??"").trim();if(!s)return{kind:"invalid",url:s};if(mv(s)){if(!/^file:/i.test(s))return{kind:"remote",url:s};let i=s.replace(/^file:\/\//i,"");return gv(i,e,n)}let r=Xr.isAbsolute(s)?Xr.resolve(s):Xr.resolve(String(e||""),s),o=Array.isArray(n)?n:[];for(let i of o)if(hv(r,i))return{kind:"workspace",abs:r,url:s};return{kind:"inline",abs:r,url:s}}yv.exports={extractImageUrls:DI,classifyImage:gv,insideRoot:hv,isRemoteLike:mv,IMG_RE:sh}});var bv=ne((TD,RI)=>{RI.exports={name:"@luban-code/luban-code",displayName:"Luban",description:"Luban \u2014 a standalone sidebar AI coding agent (multi-provider, OpenAI-compatible, zero source patches)",version:"1.100.5",license:"Apache-2.0",author:{name:"eppen (liuhualiang)",url:"https://github.com/eppen"},publisher:"liuhualiang",icon:"media/icon.png",homepage:"https://github.com/eppen/luban#readme",bugs:{url:"https://github.com/eppen/luban/issues"},keywords:["ai","agent","chat","coding-agent","qwen","deepseek","openai-compatible","mcp"],repository:{type:"git",url:"git+https://github.com/eppen/luban.git"},engines:{vscode:"^1.104.0"},categories:["AI","Chat","Programming Languages"],activationEvents:["onStartupFinished","onView:luban.chatView","onCommand:luban.focusView","onCommand:luban.browserPreview","onCommand:luban.markdownPreview"],main:"./dist/extension.js",bin:{luban:"dist/cli.js","luban-code":"dist/cli.js","luban-acp":"dist/acp.js"},files:["dist/cli.js","dist/acp.js","dist/cli-plugin.js","dist/extension.js","registry/","package.json"],scripts:{build:"node scripts/build.js",watch:"node scripts/build.js --watch",package:"node scripts/build.js","vscode:prepublish":"node scripts/build.js",prepack:"node scripts/build.js",smoke:"node scripts/build.js && node scripts/smoke.js","test:review-autokeep":"node scripts/build.js && node scripts/test-review-autokeep.js","test:skills":"node scripts/test-skills.js","test:rules":"node scripts/test-rules.js","test:plugins":"node scripts/test-plugins.js","test:plugins-ext":"node scripts/test-plugins-ext.js","test:registry":"node scripts/test-registry-client.js","test:registry-skill":"node scripts/test-registry-skill.js","test:install":"node scripts/test-install-scripts.js",cli:"node cli.js","test:acp":"node scripts/test-acp.js","test:acp-pkg":"node scripts/test-acp-pkg.js","test:cli-resume":"node scripts/test-cli-resume.js",vsix:"node scripts/vsix.js","test:general":"node scripts/test-general-settings.js","test:provider-models":"node scripts/test-provider-models.js","test:hub":"node scripts/test-hub-tabs.js","test:hub-market":"node scripts/test-hub-market.js","test:market-ext":"node scripts/test-market-ext.js","test:sync-registry":"node scripts/test-sync-registry.js","test:i18n":"node scripts/test-i18n.js","test:css":"node scripts/test-css-vars.js","test:webdav":"node scripts/test-webdav.js","test:mcp-config":"node scripts/test-mcp-config.js","test:mcp-ext":"node scripts/test-mcp-ext.js","test:webdav-override":"node scripts/test-webdav-override.js","test:browser-events":"node scripts/test-browser-events.js","test:browser-tool":"node scripts/test-browser-tool.js","test:browser-launch":"node scripts/test-browser-launch.js","test:computer-linux":"node scripts/test-computer-linux.js","test:computer-linux-live":"node scripts/live-computer-linux.js","test:computer-tool":"node scripts/test-computer-tool.js","test:subagent":"node scripts/test-subagent-guards.js","test:lm-provider":"node scripts/test-lm-provider.js","test:agent-budget":"node scripts/test-agent-budget.js","test:gamepad":"node scripts/test-gamepad.js","test:status":"node scripts/test-status.js","test:avatar":"node scripts/test-avatar.js","test:cli-md":"node scripts/test-cli-md.js","test:mdpreview":"node scripts/test-mdpreview.js","test:mdpreview-live":"node scripts/live-mdpreview.js","test:cli-confirm":"node scripts/test-cli-confirm.js","test:cli-input":"node scripts/test-cli-input.js","test:token-audit":"node scripts/test-token-audit.js","test:think":"node scripts/test-think.js","test:webfetch-md":"node scripts/test-webfetch-md.js","test:tabs":"node scripts/test-workspace-tab-filter.js","test:status-live":"node scripts/live-status.js","test:review-freeze":"node scripts/live-review-freeze.js","test:review-focus":"node scripts/live-review-focus.js"},capabilities:{untrustedWorkspaces:{supported:!0},virtualWorkspaces:!0},contributes:{commands:[{command:"luban.focusView",title:"%cmdFocusView%",category:"Luban"},{command:"luban.openPanel",title:"%cmdOpenPanel%",category:"Luban"},{command:"luban.reloadConfig",title:"%cmdReloadConfig%",category:"Luban"},{command:"luban.providerSettings",title:"%cmdProviderSettings%",category:"Luban"},{command:"luban.dashboard",title:"%cmdDashboard%",category:"Luban"},{command:"luban.plugins",title:"%cmdPlugins%",category:"Luban"},{command:"luban.market",title:"%cmdMarket%",category:"Luban"},{command:"luban.rules.open",title:"%cmdOpenRules%",category:"Luban"},{command:"luban.agent",title:"%cmdAgent%",category:"Luban"},{command:"luban.openDiff",title:"%cmdOpenDiff%",category:"Luban"},{command:"luban.acceptHunk",title:"%cmdAcceptHunk%",category:"Luban"},{command:"luban.rejectHunk",title:"%cmdRejectHunk%",category:"Luban"},{command:"luban.acceptFile",title:"%cmdAcceptFile%",category:"Luban"},{command:"luban.rejectFile",title:"%cmdRejectFile%",category:"Luban"},{command:"luban.reviewAll",title:"%cmdReviewAll%",category:"Luban"},{command:"luban.revertAll",title:"%cmdRevertAll%",category:"Luban"},{command:"luban.newSession",title:"%cmdNewSession%",category:"Luban"},{command:"luban.sessionList",title:"%cmdSessionList%",category:"Luban"},{command:"luban.findInSession",title:"%cmdFindInSession%",category:"Luban"},{command:"luban.cursorPlan",title:"%cmdCursorPlan%",category:"Luban"},{command:"luban.mode.cycle",title:"%cmdModeCycle%",category:"Luban"},{command:"luban.addFileToChat",title:"%cmdAddFileToChat%",category:"Luban"},{command:"luban.addFolderToChat",title:"%cmdAddFolderToChat%",category:"Luban"},{command:"luban.addFileToNewChat",title:"%cmdAddFileToNewChat%",category:"Luban"},{command:"luban.addFolderToNewChat",title:"%cmdAddFolderToNewChat%",category:"Luban"},{command:"luban.addSelectionToChat",title:"%cmdAddSelectionToChat%",category:"Luban"},{command:"luban.addSelectionToNewChat",title:"%cmdAddSelectionToNewChat%",category:"Luban"},{command:"luban.inlineCompletion.toggle",title:"%cmdInlineToggle%",category:"Luban"},{command:"luban.diffAccept",title:"%cmdDiffAccept%",category:"Luban"},{command:"luban.diffReject",title:"%cmdDiffReject%",category:"Luban"},{command:"luban.openInBrowser",title:"%cmdOpenInBrowser%",category:"Luban"},{command:"luban.browserCheck",title:"%cmdBrowserCheck%",category:"Luban"},{command:"luban.browserPreview",title:"%cmdBrowserPreview%",category:"Luban"},{command:"luban.markdownPreview",title:"%cmdMarkdownPreview%",category:"Luban"}],menus:{"editor/title":[{command:"luban.diffAccept",when:"isInDiffEditor && luban.reviewDiffActive && luban.pendingReview > 0",group:"navigation@1"},{command:"luban.diffReject",when:"isInDiffEditor && luban.reviewDiffActive && luban.pendingReview > 0",group:"navigation@2"},{command:"luban.markdownPreview",when:"resourceLangId == markdown",group:"navigation@3",icon:"$(preview)"}],"explorer/context":[{command:"luban.addFileToChat",when:"!explorerResourceIsFolder && resourceScheme == file",group:"1_luban@1"},{command:"luban.addFolderToChat",when:"explorerResourceIsFolder && resourceScheme == file",group:"1_luban@2"},{command:"luban.addFileToNewChat",when:"!explorerResourceIsFolder && resourceScheme == file",group:"1_luban@3"},{command:"luban.addFolderToNewChat",when:"explorerResourceIsFolder && resourceScheme == file",group:"1_luban@4"}],"editor/context":[{command:"luban.addSelectionToChat",when:"editorHasSelection && resourceScheme == file",group:"1_luban@0"},{command:"luban.addSelectionToNewChat",when:"editorHasSelection && resourceScheme == file",group:"1_luban@1"}],"webview/context":[{command:"luban.openInBrowser",when:"webviewSection == 'chat'"}],commandPalette:[{command:"luban.diffAccept",when:"luban.pendingReview > 0"},{command:"luban.diffReject",when:"luban.pendingReview > 0"},{command:"luban.addFileToChat",when:"false"},{command:"luban.addFolderToChat",when:"false"},{command:"luban.addFileToNewChat",when:"false"},{command:"luban.addFolderToNewChat",when:"false"},{command:"luban.addSelectionToChat",when:"editorHasSelection"},{command:"luban.addSelectionToNewChat",when:"editorHasSelection"},{command:"luban.openInBrowser",when:"false"}]},keybindings:[{command:"luban.focusView",key:"cmd+shift+l",mac:"cmd+shift+l",win:"ctrl+shift+l",linux:"ctrl+shift+l"},{command:"luban.newSession",key:"cmd+alt+n",mac:"cmd+alt+n",win:"ctrl+alt+n",linux:"ctrl+alt+n"},{command:"luban.sessionList",key:"cmd+alt+h",mac:"cmd+alt+h",win:"ctrl+alt+h",linux:"ctrl+alt+h"},{command:"luban.mode.cycle",key:"shift+tab",mac:"shift+tab",win:"shift+tab",linux:"shift+tab",when:"focusedView == 'luban.chatView'"},{command:"luban.findInSession",key:"cmd+f",mac:"cmd+f",win:"ctrl+f",linux:"ctrl+f",when:"focusedView == 'luban.chatView'"},{command:"luban.findInSession",key:"cmd+f",mac:"cmd+f",win:"ctrl+f",linux:"ctrl+f",when:"activeWebviewPanelId == 'luban'"},{command:"luban.addSelectionToChat",key:"cmd+alt+a",mac:"cmd+alt+a",win:"ctrl+alt+a",linux:"ctrl+alt+a",when:"editorHasSelection && editorTextFocus"}],viewsContainers:{activitybar:[{id:"luban",title:"Luban",icon:"media/icon.svg"}]},views:{luban:[{type:"webview",id:"luban.chatView",name:"Chat",contextualTitle:"Luban",icon:"media/icon.svg"}]},languageModelChatProviders:[{vendor:"luban",displayName:"Luban",icon:"media/icon.png",managementCommand:"luban.providerSettings"}],configuration:{title:"Luban",properties:{"luban.language":{type:"string",enum:["auto","en","zh-cn","ja"],enumDescriptions:["%cfgLanguageAuto%","%cfgLanguageEn%","%cfgLanguageZhCn%","%cfgLanguageJa%"],default:"auto",description:"%cfgLanguage%"},"luban.autoOpen":{type:"boolean",default:!0,description:"%cfgAutoOpen%"},"luban.context.autoFile":{type:"boolean",default:!0,description:"%cfgContextAutoFile%"},"luban.context.autoFileMaxChars":{type:"number",default:8e3,minimum:500,description:"%cfgContextAutoFileMaxChars%"},"luban.context.autoFileWindowLines":{type:"number",default:200,minimum:40,description:"%cfgContextAutoFileWindowLines%"},"luban.context.workset":{type:"boolean",default:!0,description:"%cfgContextWorkset%"},"luban.sessionHistory.max":{type:"number",default:50,minimum:1,description:"%cfgSessionHistoryMax%"},"luban.usage.record":{type:"boolean",default:!0,description:"%cfgUsageRecord%"},"luban.sessionMemory.enabled":{type:"boolean",default:!0,description:"%cfgSessionMemoryEnabled%"},"luban.sessionMemory.maxTurns":{type:"number",default:8,minimum:1,description:"%cfgSessionMemoryMaxTurns%"},"luban.sessionMemory.maxChars":{type:"number",default:12e3,minimum:1e3,description:"%cfgSessionMemoryMaxChars%"},"luban.agent.maxRounds":{type:"number",default:200,minimum:0,description:"%cfgAgentMaxRounds%"},"luban.agent.maxMinutes":{type:"number",default:30,minimum:1,description:"%cfgAgentMaxMinutes%"},"luban.agent.noWriteNudges":{type:"number",default:2,minimum:0,description:"%cfgAgentNoWriteNudges%"},"luban.agent.subagentRounds":{type:"number",default:24,minimum:0,description:"%cfgAgentSubagentRounds%"},"luban.agent.subagentMinutes":{type:"number",default:0,minimum:0,description:"%cfgAgentSubagentMinutes%"},"luban.agent.smallWindow":{type:"string",enum:["auto","on","off"],default:"auto",description:"%cfgAgentSmallWindow%"},"luban.agent.verbosity":{type:"string",enum:["concise","normal","detailed"],default:"normal",description:"%cfgAgentVerbosity%"},"luban.search.maxFiles":{type:"number",default:5e3,minimum:100,description:"%cfgSearchMaxFiles%"},"luban.net.tlsMaxVersion":{type:"string",enum:["auto","1.2"],enumDescriptions:["%cfgNetTlsMaxVersionAuto%","%cfgNetTlsMaxVersion12%"],default:"auto",description:"%cfgNetTlsMaxVersion%"},"luban.browser.enabled":{type:"boolean",default:!1,description:"%cfgBrowserEnabled%"},"luban.browser.chromePath":{type:"string",default:"",description:"%cfgBrowserChromePath%"},"luban.browser.headless":{type:"boolean",default:!0,description:"%cfgBrowserHeadless%"},"luban.browser.viewportWidth":{type:"number",default:1280,minimum:320,maximum:4096,description:"%cfgBrowserViewportWidth%"},"luban.browser.viewportHeight":{type:"number",default:800,minimum:240,maximum:4096,description:"%cfgBrowserViewportHeight%"},"luban.browser.idleTimeoutMs":{type:"number",default:3e5,minimum:1e4,description:"%cfgBrowserIdleTimeout%"},"luban.browser.confirm":{type:"boolean",default:!0,description:"%cfgBrowserConfirm%"},"luban.browser.preview":{type:"boolean",default:!1,description:"%cfgBrowserPreview%"},"luban.computer.enabled":{type:"boolean",default:!1,description:"%cfgComputerEnabled%"},"luban.computer.confirm":{type:"boolean",default:!0,description:"%cfgComputerConfirm%"},"luban.computer.screenshotWidth":{type:"number",default:2048,minimum:320,maximum:4096,description:"%cfgComputerScreenshotWidth%"},"luban.plugins.enabled":{type:"boolean",default:!1,description:"%cfgPluginsEnabled%"},"luban.plugins.maxTools":{type:"number",default:30,minimum:1,maximum:200,description:"%cfgPluginsMaxTools%"},"luban.plugins.theme":{type:"string",default:"",description:"%cfgPluginsTheme%"},"luban.plan.strictReadOnly":{type:"boolean",default:!0,description:"%cfgPlanStrictReadOnly%"},"luban.fs.allowOutsideWorkspace":{type:"boolean",default:!0,description:"%cfgFsAllowOutsideWorkspace%"},"luban.review.autoOpenDiff":{type:"boolean",default:!0,description:"%cfgReviewAutoOpenDiff%"},"luban.review.autoKeep":{type:"boolean",default:!1,description:"%cfgReviewAutoKeep%"},"luban.diagnostics.afterEdit":{type:"boolean",default:!0,description:"%cfgDiagAfterEdit%"},"luban.inlineCompletion.enabled":{type:"boolean",default:!1,description:"%cfgInlineEnabled%"},"luban.inlineCompletion.maxPerMinute":{type:"number",default:30,minimum:1,description:"%cfgInlineMaxPerMinute%"},"luban.inlineCompletion.debounceMs":{type:"number",default:250,minimum:0,description:"%cfgInlineDebounceMs%"},"luban.statusBar.enabled":{type:"boolean",default:!0,description:"%cfgStatusBarEnabled%"},"luban.rules.enabled":{type:"boolean",default:!0,description:"%cfgRulesEnabled%"},"luban.rules.maxChars":{type:"number",default:12e3,minimum:1e3,description:"%cfgRulesMaxChars%"},"luban.rules.indexMaxChars":{type:"number",default:2e3,minimum:200,description:"%cfgRulesIndexMaxChars%"}}}},devDependencies:{esbuild:"^0.25.0"},dependencies:{"@clack/prompts":"^1.8.1",picocolors:"^1.1.1"}}});var x=require("vscode"),I=require("fs"),D=require("path"),lt=require("os"),ch=require("tls"),{exec:$I,execSync:fS}=require("child_process"),kn=vu(),Qn=Fm(),qI=Dm(),eo=Hm(),BI=Vm(),Oe=Ru(),bn=ug(),_n=hg(),kv=wg(),xe=Ng(),Gt=cd(),en=Ty(),Es=Ey(),dt=Dy(),pS=qy(),fr=Yy(),jc=nw(),pr=mw(),Ht=pd(),Bn=vw(),Is=Tw(),Ve=Ew(),_e=Fw(),kt=Yw(),Ge=Co(),Ps=Vb(),hS=ki(),xv=sf(),Tn=ck(),UI=mk(),mS=Mk(),Mn=bp(),us=nx(),za=process.platform==="linux",WI=process.platform==="darwin",ue=za?Sx():process.platform==="win32"?Bx():Qx(),ds=process.platform==="win32",gS=ds?"Windows":WI?"macOS":za?"Linux":"\u4EC5\u652F\u6301 macOS / Windows / Linux",KI=ds?" \u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C\u7684\u7A97\u53E3\u6536\u4E0D\u5230\u666E\u901A\u8FDB\u7A0B\u7684\u70B9\u51FB / \u6309\u952E\uFF08UIPI \u89C4\u5219\uFF09\uFF0C\u9700\u8981\u65F6\u8BA9\u5BBF\u4E3B App \u4E5F\u4EE5\u7BA1\u7406\u5458\u8FD0\u884C\u3002":za?" X11 \u4F1A\u8BDD\u6700\u5B8C\u6574\uFF1BWayland \u4E0B xdotool \u53EA\u80FD\u64CD\u4F5C XWayland \u5E94\u7528\uFF0C\u539F\u751F Wayland \u7A97\u53E3\u7684\u70B9\u51FB / \u62D6\u52A8\u4E0D\u53EF\u7528\u3002\u65E0\u5934\u73AF\u5883\u8981\u5148\u8D77 Xvfb\u3002":" \u6CA1\u6709\u300C\u8F85\u52A9\u529F\u80FD\u300D\u6743\u9650\u65F6\u70B9\u51FB\u4F1A\u88AB\u7CFB\u7EDF\u9759\u9ED8\u4E22\u5F03\uFF0C\u6CA1\u6709\u300C\u5C4F\u5E55\u5F55\u5236\u300D\u6743\u9650\u65F6\u622A\u56FE\u4F1A\u5931\u8D25 \u2014\u2014 \u5206\u522B\u53BB\u7CFB\u7EDF\u8BBE\u7F6E\u7684\u9690\u79C1\u4E0E\u5B89\u5168\u6027\u91CC\u52FE\u9009\u5BBF\u4E3B App\u3002",Aa=ds?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":za?"\u5C4F\u5E55\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9";function HI(){return ds?{a:65,p:80,bang:49}:za?{a:97,p:112,bang:49}:{a:0,p:35,bang:18}}var sn=nv(),yr=dv(),Ms=lf(),yS=pv(),vv=wv(),Sv=bv(),GI=Sr().SKIP_DIRS,fs=Sv&&Sv.version||"0.0.0",Ic=process.env.LUBAN_OUT_DIR||"/tmp/luban-ide",zI=Ic+"/result.json",ht=D.join(lt.homedir(),".luban","providers.json"),ka={startedAt:new Date().toISOString(),steps:[],acks:[]},VI=400,_v=2e3,Go=null;function wS(){try{I.mkdirSync(Ic,{recursive:!0}),I.writeFileSync(zI,JSON.stringify(ka,null,2))}catch{}}function jh(){Go&&(clearTimeout(Go),Go=null),wS()}function k(t,e){ka.steps.push({step:t,at:new Date().toISOString(),...e}),ka.steps.length>_v&&ka.steps.splice(0,ka.steps.length-_v),Go||(Go=setTimeout(function(){Go=null,wS()},VI))}var rn="",bS=[];function kS(t,e){let n=String(t??"auto").toLowerCase();if(n==="en")return"en";if(n==="ja"||n.slice(0,2)==="ja")return"ja";if(n.slice(0,2)==="zh")return"zh-cn";let s=String(e||"").toLowerCase();return s.slice(0,2)==="zh"?"zh-cn":s.slice(0,2)==="ja"?"ja":"en"}function Va(){let t="auto";try{t=x.workspace.getConfiguration("luban").get("language")}catch{}return kS(t,x.env&&x.env.language)}function O(t,e){return yS.t(t,e)}function Nc(t){rn=yS.setLang(Va()),Qn.setUntitled(O("store.untitled")),YI();try{xn&&xn.fire()}catch{}try{Zh()}catch{}return k("language_applied",{lang:rn,reason:t||""}),rn}function JI(t){for(let e of bS.splice(0))try{e(t)}catch{}}function XI(t){return new Promise(function(e){let n=!1,s=setTimeout(function(){n||(n=!0,e(null))},t||8e3);bS.push(function(r){n||(n=!0,clearTimeout(s),e(r))})})}function YI(){let t=[Te&&Te.webview,ye&&ye.webview,At&&At.webview];for(let e of t)if(e)try{e.postMessage({type:"lang",lang:rn})}catch(n){k("broadcast_lang_failed",{message:n.message})}}var xS={defaultModel:"deepseek::deepseek-flash",providers:[{id:"deepseek",name:"DeepSeek",baseUrl:"https://api.deepseek.com/v1",apiKeyEnv:"DEEPSEEK_API_KEY",webSearch:{baseUrl:"https://api.deepseek.com/v1/tools",count:8},models:[{id:"deepseek-flash",name:"DeepSeek Flash",maxInputTokens:65536,maxOutputTokens:8192,toolCalling:!0}]}]},Vt=xS,Zo="builtin",hs=Object.create(null),Ct=null,zo=[],vS=40,uh=Object.create(null),Tv=new Map;function ZI(t){for(let e of t.providers||[])!e||!Array.isArray(e.models)||(e.models=e.models.map(function(n){return typeof n=="string"?{id:n,name:n}:(n&&typeof n=="object"&&!n.id&&n.name&&(n.id=String(n.name)),n)}).filter(function(n){return n&&typeof n=="object"&&n.id}));return t}function au(){try{let t=JSON.parse(I.readFileSync(ht,"utf8"));if(t&&Array.isArray(t.providers)&&t.providers.length){Vt=ZI(t),Zo=ht,k("config_loaded",{source:ht,providers:t.providers.map(e=>e.id),models:es().length});return}}catch(t){k("config_load_failed",{message:t.message,path:ht})}Vt=xS,Zo="builtin"}function QI(){let t=[];for(let e of Vt.providers||[])for(let n of e.models||[])t.push({provider:e,model:n});return t}function es(){let t=QI(),e={};for(let n of t)e[n.model.id]=(e[n.model.id]||0)+1;return t.map(n=>({key:e[n.model.id]>1?n.provider.id+"::"+n.model.id:n.model.id,provider:n.provider,model:n.model}))}function mt(t){let e=es(),n=String(t||"");return e.find(s=>s.key===n)||e.find(s=>s.provider.id+"::"+s.model.id===n)||e.find(s=>s.model.id===n)||e.find(s=>s.key===Vt.defaultModel)||e.find(s=>s.provider.id+"::"+s.model.id===Vt.defaultModel)||e[0]}function oi(){let t=mt(Vt.defaultModel);return t?t.key:""}function eN(t){try{let e=I.readFileSync(D.join(lt.homedir(),".hermes",".env"),"utf8");for(let n of e.split(`
|
|
992
|
+
`)){let s=n.match(new RegExp("^\\s*"+t+"\\s*=\\s*(.+)\\s*$"));if(s)return s[1].trim().replace(/^["']|["']$/g,"")}}catch{}return""}function Ja(t){let e=t&&t.apiKeyEnv;return e?process.env[e]?String(process.env[e]).trim():eN(e):""}function Fc(t){if(!t)return"";if(t.apiKey)return String(t.apiKey);let e=hs[t.id];return e?String(e):Ja(t)}var Ih="luban-local";function tN(t){let e="";try{e=new URL(String(t||"")).hostname.toLowerCase()}catch{return!1}return e?e==="localhost"||e==="::1"||e==="[::1]"||e==="0.0.0.0"?!0:/^127\./.test(e):!1}function Qo(t){return t?t.keyless===!0?!0:tN(t.baseUrl):!1}function ei(t){let e=Fc(t);return e||(Qo(t)?Ih:"")}function SS(t){return String(t.baseUrl||"").replace(/\/+$/,"")+"/chat/completions"}var dh=2e4,Nh=3e3,Mv=8e3,nN="https://cn.bing.com/search",_S="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",rh=2*1024*1024;function TS(t){if(!t)return"";let e=t.webSearch;if(e&&e.baseUrl)return String(e.baseUrl).replace(/\/+$/,"");let n=String(t.baseUrl||"").replace(/\/+$/,"");return/api\.deepseek\.com/i.test(n)?n+"/tools":""}function Jn(t){if(!t)return"none";let e=t.webSearch;return e&&e.disabled===!0?"none":e&&(e.engine==="bing"||e.engine==="deepseek")?e.engine:e&&e.baseUrl||/api\.deepseek\.com/i.test(String(t.baseUrl||""))?"deepseek":"bing"}function Lc(t){if(!t)return"";let e=t.inlineCompletion;if(e&&e.baseUrl)return String(e.baseUrl).replace(/\/+$/,"");let n=String(t.baseUrl||"").replace(/\/+$/,"");return/api\.deepseek\.com/i.test(n)?n.replace(/\/v1$/,"")+"/beta":""}async function MS(t){let e=t||{},n=mt(e.modelKey);if(!n)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let s=Lc(n.provider);if(!s)throw new Error("\u5F53\u524D provider \u672A\u914D\u7F6E FIM \u8865\u5168\uFF08providers.json \u91CC\u52A0 inlineCompletion.baseUrl\uFF09");let r=ei(n.provider);if(!r)throw new Error("provider "+n.provider.id+" \u7F3A\u5C11 API key");let o=n.provider.inlineCompletion||{},i=jc.buildPrompt({path:e.path,text:e.text,offset:e.offset,prefixLines:o.prefixLines,suffixLines:o.suffixLines,maxChars:o.maxPromptChars}),a={model:String(o.model||"deepseek-chat"),prompt:i.prompt,suffix:i.suffix,max_tokens:Math.min(Math.max(Math.floor(Number(o.maxTokens))||256,16),2048),stream:!1},l=Math.max(500,Number(o.timeoutMs)||3e3),c=new AbortController,u=lu(e.signal);u.signal&&(u.isCancelled()?c.abort():u.signal.addEventListener("abort",function(){c.abort()}));let d=setTimeout(function(){try{c.abort()}catch{}},l);try{let f=await fetch(s+"/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+r},body:JSON.stringify(a),signal:c.signal});if(!f.ok){let y=await f.text();throw new Error("FIM HTTP "+f.status+": "+String(y).slice(0,160))}let p=await f.json(),h=p&&p.choices&&p.choices[0],m=String(h&&(h.text||h.message&&h.message.content)||"");return{text:jc.trimCompletion(m,i.suffix),rawChars:m.length,model:a.model,promptChars:i.prompt.length,suffixChars:i.suffix.length,usage:p&&p.usage||null}}finally{clearTimeout(d)}}function sN(t,e){let n="";try{let o=JSON.parse(e);o&&o.error&&o.error.message&&(n=String(o.error.message))}catch{}let s={400:"\u8BF7\u6C42\u6216\u53C2\u6570\u4E0D\u5408\u6CD5",401:"API key \u7F3A\u5931\u6216\u65E0\u6548",402:"\u8D26\u53F7\u4F59\u989D\u4E0D\u8DB3",403:"\u8BF7\u6C42\u88AB\u5B89\u5168\u7B56\u7565\u62D2\u7EDD",404:"\u672A\u80FD\u83B7\u53D6\u53EF\u7528\u7684\u7F51\u9875\u5185\u5BB9",408:"\u8BFB\u53D6\u8BF7\u6C42\u4F53\u8D85\u65F6",413:"\u8BF7\u6C42\u4F53\u8D85\u8FC7\u5927\u5C0F\u9650\u5236",429:"\u8D85\u8FC7\u8054\u7F51\u63A5\u53E3 QPS \u9650\u901F",500:"\u670D\u52A1\u7AEF\u5185\u90E8\u9519\u8BEF",504:"\u4E0B\u6E38\u8BF7\u6C42\u8D85\u65F6"};return"\u8054\u7F51\u63A5\u53E3 HTTP "+t+(s[t]?"\uFF08"+s[t]+"\uFF09":"")+(n?"\uFF1A"+n.slice(0,200):"")}function lu(t){if(!t)return{signal:null,isCancelled:function(){return!1}};if(typeof t.aborted=="boolean"&&typeof t.addEventListener=="function")return{signal:t,isCancelled:function(){return t.aborted}};if(typeof t.onCancellationRequested=="function"){let e=new AbortController,n=!!t.isCancellationRequested;if(n)e.abort();else try{t.onCancellationRequested(function(){n=!0,e.abort()})}catch{}return{signal:e.signal,isCancelled:function(){return n}}}return{signal:null,isCancelled:function(){return!1}}}function CS(t){let e=new AbortController,n=lu(t&&t.signal),s=t&&t.timeoutMs||dh,r=setTimeout(function(){e.abort()},s);return n.signal&&(n.isCancelled()?e.abort():n.signal.addEventListener("abort",function(){e.abort()})),{ctrl:e,outer:n,timer:r,ms:s}}async function AS(t,e,n,s){let r=s||{},o=TS(n&&n.provider);if(!o)throw new Error("\u5F53\u524D provider \u672A\u914D\u7F6E\u8054\u7F51\u641C\u7D22\uFF08providers.json \u91CC\u52A0 webSearch.baseUrl\uFF09");let i=ei(n.provider);if(!i)throw new Error("provider "+n.provider.id+" \u7F3A\u5C11 API key\uFF08apiKey \u6216 apiKeyEnv="+n.provider.apiKeyEnv+"\uFF09");let a=new AbortController,l=lu(r.signal),c=setTimeout(function(){a.abort()},r.timeoutMs||dh);l.signal&&(l.isCancelled()?a.abort():l.signal.addEventListener("abort",function(){a.abort()}));let u,d;try{u=await fetch(o+t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+i},body:JSON.stringify(e),signal:a.signal}),d=await u.text()}catch(f){throw f&&f.name==="AbortError"?new Error(l.isCancelled()?"\u8054\u7F51\u8BF7\u6C42\u5DF2\u53D6\u6D88":"\u8054\u7F51\u8BF7\u6C42\u8D85\u65F6\uFF08"+Math.round((r.timeoutMs||dh)/1e3)+"s\uFF09"):new Error("\u8054\u7F51\u8BF7\u6C42\u5931\u8D25\uFF1A"+(f&&f.message?f.message:String(f)))}finally{clearTimeout(c)}if(!u.ok)throw k("web_http_error",{endpoint:t,status:u.status,body:String(d).slice(0,300)}),new Error(sN(u.status,d));try{return JSON.parse(d)}catch{throw new Error("\u8054\u7F51\u63A5\u53E3\u8FD4\u56DE\u4E86\u975E JSON \u5185\u5BB9\uFF1A"+String(d).slice(0,120))}}async function rN(t,e,n){let s=n||{};if(!e)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let r=String(t??"").replace(/\s+/g," ").trim().slice(0,128);if(!r)throw new Error("\u641C\u7D22\u8BCD\u4E3A\u7A7A");let o=e.provider.webSearch&&e.provider.webSearch.count||8,i=typeof s.count=="number"&&isFinite(s.count)?s.count:o;i=Math.min(Math.max(Math.round(i)||8,1),50);let a={query:r,count:i,need_content:!!s.needContent},l=String(s.oriQuestion==null?"":s.oriQuestion).replace(/\s+/g," ").trim().slice(0,128);l&&(a.ori_question=l);let c=await AS("/search",a,e,s),u=Array.isArray(c&&c.results)?c.results:[];return k("web_search",{provider:e.provider.id,query:r,count:i,needContent:!!s.needContent,results:u.length}),{query:r,results:u}}async function oN(t,e,n){if(!e)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let s=String(t??"").trim();if(!/^https?:\/\/\S+$/i.test(s))throw new Error("url \u5FC5\u987B\u662F http/https \u5730\u5740\uFF1A"+s.slice(0,120));if(s.length>8192)throw new Error("url \u8FC7\u957F\uFF08\u4E0A\u9650 8192 \u5B57\u7B26\uFF09");let r=await AS("/fetch",{url:s},e,n||{}),o=String(r&&r.title||""),i=String(r&&r.content||""),a=n&&n.maxChars||12e3,l=i.length>a?i.slice(0,a)+`
|
|
993
993
|
\u2026[\u6B63\u6587\u5DF2\u622A\u65AD]`:i;return k("web_fetch",{provider:e.provider.id,url:s.slice(0,200),title:o,chars:i.length}),{url:s,title:o,content:l,fullChars:i.length}}var iN={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};function _c(t){return String(t??"").replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g,function(e,n){if(n.charAt(0)==="#"){let s=n.charAt(1)==="x"||n.charAt(1)==="X",r=parseInt(n.slice(s?2:1),s?16:10);return isFinite(r)&&r>0&&r<65536?String.fromCharCode(r):e}return iN[n]||e})}function Ra(t){let e=String(t??"");return e=e.replace(/<!--[\s\S]*?-->/g," "),e=e.replace(/<(script|style|noscript|head|template)[^>]*>[\s\S]*?<\/\1>/gi," "),e=e.replace(/<\/(p|div|li|tr|h[1-6]|blockquote|section|article|table|pre|ul|ol)[^>]*>/gi,`
|
|
994
994
|
`),e=e.replace(/<br\s*\/?>/gi,`
|
|
995
995
|
`),e=e.replace(/<[^>]+>/g,""),e=_c(e),e.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
|
|
@@ -1023,12 +1023,12 @@ Plugins run on this machine with your permissions. After installing, you still h
|
|
|
1023
1023
|
---
|
|
1024
1024
|
`+w+l.join(`
|
|
1025
1025
|
|
|
1026
|
-
`),refs:a}}var BS=GI,TN="**/{"+BS.join(",")+"}/**",Sc={at:0,files:[],dirs:[]};async function MN(){return(await Uh()).files}async function CN(){return(await Uh()).dirs}async function Uh(){if(Date.now()-Sc.at<5e3)return Sc;let t=R(),e=[];try{e=(await x.workspace.findFiles("**/*",TN,1e3)).map(i=>{let a=D.relative(t,i.fsPath);return!a||a.startsWith("..")||D.isAbsolute(a)?"":a.split(D.sep).join("/")}).filter(Boolean)}catch(o){k("ref_findfiles_failed",{message:o.message})}if(!e.length){let o=[];try{Wh(t,t,0,o)}catch{}e=o.filter(i=>i.charAt(i.length-1)!=="/").map(i=>i.replace(/\s+\(\d+B\)$/,""))}let n={};Wo.forEach(function(o,i){let a=Yn(o,t);a&&!a.startsWith("..")&&!D.isAbsolute(a)&&a!==o.split(D.sep).join("/")&&(n[a]=i)});let s=function(o){return n[o]===void 0?9999:n[o]};e.sort(function(o,i){let a=s(o),l=s(i);return a!==l?a-l:o.length!==i.length?o.length-i.length:o<i?-1:o>i?1:0});let r=AN(e);return Sc={at:Date.now(),files:e,dirs:r},Sc}function AN(t){let e={};for(let n of t){let s=String(n).split("/");s.pop();let r="";for(let o of s)o&&(r=r?r+"/"+o:o,e[r]=!0)}return Object.keys(e).sort(function(n,s){return n.length!==s.length?n.length-s.length:n<s?-1:n>s?1:0})}function cu(t){return!t||t.charAt(0)==="."?!0:BS.indexOf(t)>=0}function ON(t){let e=String(t||"").split(/[\\/]+/);for(let n=0;n<e.length-1;n++)if(e[n]&&cu(e[n]))return e[n];return""}async function
|
|
1026
|
+
`),refs:a}}var BS=GI,TN="**/{"+BS.join(",")+"}/**",Sc={at:0,files:[],dirs:[]};async function MN(){return(await Uh()).files}async function CN(){return(await Uh()).dirs}async function Uh(){if(Date.now()-Sc.at<5e3)return Sc;let t=R(),e=[];try{e=(await x.workspace.findFiles("**/*",TN,1e3)).map(i=>{let a=D.relative(t,i.fsPath);return!a||a.startsWith("..")||D.isAbsolute(a)?"":a.split(D.sep).join("/")}).filter(Boolean)}catch(o){k("ref_findfiles_failed",{message:o.message})}if(!e.length){let o=[];try{Wh(t,t,0,o)}catch{}e=o.filter(i=>i.charAt(i.length-1)!=="/").map(i=>i.replace(/\s+\(\d+B\)$/,""))}let n={};Wo.forEach(function(o,i){let a=Yn(o,t);a&&!a.startsWith("..")&&!D.isAbsolute(a)&&a!==o.split(D.sep).join("/")&&(n[a]=i)});let s=function(o){return n[o]===void 0?9999:n[o]};e.sort(function(o,i){let a=s(o),l=s(i);return a!==l?a-l:o.length!==i.length?o.length-i.length:o<i?-1:o>i?1:0});let r=AN(e);return Sc={at:Date.now(),files:e,dirs:r},Sc}function AN(t){let e={};for(let n of t){let s=String(n).split("/");s.pop();let r="";for(let o of s)o&&(r=r?r+"/"+o:o,e[r]=!0)}return Object.keys(e).sort(function(n,s){return n.length!==s.length?n.length-s.length:n<s?-1:n>s?1:0})}function cu(t){return!t||t.charAt(0)==="."?!0:BS.indexOf(t)>=0}function ON(t){let e=String(t||"").split(/[\\/]+/);for(let n=0;n<e.length-1;n++)if(e[n]&&cu(e[n]))return e[n];return""}async function hr(t,e){I.mkdirSync(D.dirname(t),{recursive:!0});let n=x.Uri.file(t),s=x.workspace.textDocuments.find(r=>Rh(r,t));if(s){let r=new x.Range(s.positionAt(0),s.positionAt(s.getText().length)),o=new x.WorkspaceEdit;if(o.replace(n,r,e),!await x.workspace.applyEdit(o))throw new Error("applyEdit \u5931\u8D25");return await s.save(),"updated-open-doc "+D.basename(t)}return await x.workspace.fs.writeFile(n,Buffer.from(e,"utf8")),"written "+D.basename(t)}function Wh(t,e,n,s){if(n>3||s.length>=200)return;let r=[];try{r=I.readdirSync(e,{withFileTypes:!0})}catch{return}for(let o of r){if(s.length>=200)return;if(cu(o.name))continue;let i=D.join(e,o.name),a=D.relative(t,i),l=!a||a.startsWith("..")||D.isAbsolute(a)?i.split(D.sep).join("/"):a;if(o.isDirectory())s.push(l+"/"),Wh(t,i,n+1,s);else{let c=0;try{c=I.statSync(i).size}catch{}s.push(l+" ("+c+"B)")}}}var US=[/\brm\s+(-[a-z]*\s+)*-[a-z]*r[a-z]*f?\s+\/(?!\S*\w)/i,/\bmkfs\b/i,/\bdd\s+if=/i,/\bsudo\b/i,/\bshutdown\b/i,/\breboot\b/i,/:\s*\(\s*\)\s*\{/,/\bdiskutil\s+erase/i,/\bchmod\s+-R\s+777\s+\//i];function EN(){let t=["C:\\Program Files\\Git\\bin\\bash.exe","C:\\Program Files\\Git\\usr\\bin\\bash.exe"];process.env.LOCALAPPDATA&&t.push(D.join(process.env.LOCALAPPDATA,"Programs","Git","bin","bash.exe"));for(let e of t)if(I.existsSync(e))return e;try{let e=fS("where bash",{encoding:"utf8",timeout:3e3}),n=String(e).split(/\r?\n/).map(function(s){return s.trim()}).find(function(s){return/bash(\.exe)?$/i.test(s)&&!/^[A-Za-z]:\\Windows\\/i.test(s)});if(n)return n}catch{}return process.env.ComSpec||"cmd.exe"}var WS=process.platform==="win32"?EN():"/bin/bash",ke=kv.createRegistry({shell:WS,maxRunning:kv.DEFAULTS.maxRunning,isDangerous:function(t){return!!US.find(function(e){return e.test(t)})}});function KS(t,e,n,s){return new Promise(r=>{if(US.find(i=>i.test(t))){r({ok:!1,code:-1,out:"\u62D2\u7EDD\u6267\u884C\uFF1A\u547D\u4E2D\u5371\u9669\u547D\u4EE4\u9ED1\u540D\u5355 \u2192 "+t});return}$I(t,{cwd:e,timeout:Math.min(Math.max(n||6e4,1e3),12e4),maxBuffer:4*1024*1024,shell:WS,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"})},(i,a,l)=>{let u=((a||"")+(l?`
|
|
1027
1027
|
[stderr]
|
|
1028
1028
|
`+l:"")).trim()||(i?String(i.message||i):""),d=HS(u,s);r({ok:!i,code:i&&typeof i.code=="number"?i.code:i?1:0,out:d.text||"(\u65E0\u8F93\u51FA)",full:u,truncated:d.truncated})})})}function HS(t,e){let n=String(t??""),s=isFinite(Number(e))&&Number(e)>0?Math.floor(Number(e)):8e3;if(n.length<=s)return{text:n,truncated:!1,dropped:0};let r=Math.floor(s*.6),o=s-r,i=n.length-s;return{text:n.slice(0,r)+`
|
|
1029
1029
|
\u2026[\u4E2D\u95F4\u7701\u7565 `+i+` \u5B57\u7B26]\u2026
|
|
1030
|
-
`+n.slice(n.length-o),truncated:!0,dropped:i}}var Jo=new Map,ph=null;function
|
|
1031
|
-
`);return HS(r,isFinite(Number(n))&&Number(n)>200?Number(n):4e3).text}var cr=[{type:"function",function:{name:"list_files",description:"\u9012\u5F52\u5217\u51FA\u76EE\u5F55\u4E0B\u7684\u6587\u4EF6\uFF08\u6700\u591A 3 \u5C42\uFF0C\u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55\u548C node_modules\uFF09\u3002dir \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7701\u7565\u8868\u793A\u5DE5\u4F5C\u76EE\u5F55\u6839\u3002",parameters:{type:"object",properties:{dir:{type:"string",description:"\u5B50\u76EE\u5F55\uFF08\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09\uFF0C\u7701\u7565\u8868\u793A\u5DE5\u4F5C\u76EE\u5F55\u6839"}}}}},{type:"function",function:{name:"read_file",description:"\u8BFB\u53D6\u6587\u672C\u6587\u4EF6\u5185\u5BB9\uFF08path \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u6216\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002\u53EF\u7528 startLine\uFF081 \u57FA\uFF09\u4E0E maxLines \u5206\u6BB5\u8BFB\u53D6\u5927\u6587\u4EF6\uFF1B\u7701\u7565\u5219\u4ECE\u7B2C 1 \u884C\u8D77\u6309\u5B57\u7B26\u4E0A\u9650\u8FD4\u56DE\u3002\u4FEE\u6539\u5DF2\u6709\u6587\u4EF6\u524D\u5FC5\u987B\u5148\u8BFB\u5B83\u3002\u4F4D\u4E8E node_modules / dist / target \u7B49\u751F\u6210\u76EE\u5F55\u3001npm-cache / .m2 \u7B49\u5B89\u88C5\u7F13\u5B58\u4E0B\u7684\u6587\u4EF6\u4E0D\u8BFB\u53D6\uFF08\u4E0E list_files / grep \u540C\u4E00\u4EFD\u540D\u5355\uFF1B\u786E\u9700\u67E5\u770B\u7528 run_command\uFF09\u3002",parameters:{type:"object",properties:{path:{type:"string"},startLine:{type:"number",description:"\u8D77\u59CB\u884C\u53F7\uFF08\u4ECE 1 \u5F00\u59CB\uFF09\uFF0C\u9ED8\u8BA4 1"},maxLines:{type:"number",description:"\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u884C\uFF1B\u7701\u7565\u5219\u6309\u6A21\u578B\u7A97\u53E3\u5BF9\u5E94\u7684\u5B57\u7B26\u4E0A\u9650\u4ECE startLine \u5F80\u540E\u53D6"}},required:["path"]}}},{type:"function",function:{name:"search_code",description:"\u5728\u5DE5\u4F5C\u533A\u91CC\u6309\u5173\u952E\u8BCD\u68C0\u7D22\u4EE3\u7801\uFF08\u672C\u5730\u8BCD\u6CD5\u7D22\u5F15 + BM25\uFF09\uFF0C\u8FD4\u56DE\u300C\u8DEF\u5F84:\u884C\u53F7: \u547D\u4E2D\u884C\u300D\u3002\u627E\u51FD\u6570 / \u53D8\u91CF / \u62A5\u9519\u539F\u6587 / \u914D\u7F6E\u9879\u65F6\u5148\u7528\u5B83\uFF0C\u5B9A\u4F4D\u5230\u6587\u4EF6\u518D read_file \u7CBE\u8BFB\uFF0C\u4E0D\u8981\u7528 list_files \u5168\u91CF\u626B\u3002\u5927\u76EE\u5F55 / \u5206\u6279\u573A\u666F\u52A1\u5FC5\u4F20 dir \u9650\u5B9A\u5230\u5F53\u524D\u6279\u6B21\u7684\u5B50\u76EE\u5F55\uFF0C\u7981\u6B62\u6309\u76EE\u5F55\u6811\u9010\u4E2A read_file\u3002",parameters:{type:"object",properties:{query:{type:"string",description:"\u5173\u952E\u8BCD\uFF0C\u53EF\u4EE5\u662F\u6807\u8BC6\u7B26\uFF08boostBudget\uFF09\u3001\u591A\u8BCD\uFF08socket \u91CD\u8FDE\uFF09\u6216\u62A5\u9519\u539F\u6587\u7247\u6BB5"},dir:{type:"string",description:"\u53EF\u9009\uFF0C\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u7684\u76EE\u5F55\u524D\u7F00\uFF1B\u53EA\u8FD4\u56DE\u8BE5\u76EE\u5F55\u4E0B\u7684\u547D\u4E2D\uFF08\u5982 src/utils \u6216 mes-quartz/src\uFF09"},maxResults:{type:"number",description:"\u8FD4\u56DE\u591A\u5C11\u4E2A\u6587\u4EF6\uFF0C\u9ED8\u8BA4 20\uFF0C\u6700\u5927 100"},contextLines:{type:"number",description:"\u547D\u4E2D\u884C\u524D\u540E\u5404\u5E26\u51E0\u884C\u4E0A\u4E0B\u6587\uFF0C\u9ED8\u8BA4 1\uFF0C\u6700\u5927 5"}},required:["query"]}}},{type:"function",function:{name:"write_file",description:"\u5199\u5165/\u8986\u76D6\u6574\u4E2A\u6587\u4EF6\uFF08\u65B0\u5EFA\u6216\u6574\u4F53\u91CD\u5199\u65F6\u7528\uFF09\uFF0C\u81EA\u52A8\u521B\u5EFA\u7236\u76EE\u5F55\u3002path \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u6216\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string"},content:{type:"string",description:"\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9"}},required:["path","content"]}}},{type:"function",function:{name:"replace_in_file",description:"\u628A\u6587\u4EF6\u4E2D\u7684 old_string \u66FF\u6362\u4E3A new_string\uFF08\u5C40\u90E8\u4FEE\u6539\u9996\u9009\uFF09\u3002old_string \u9700\u4E0E\u539F\u6587\u5185\u5BB9\u4E00\u81F4\uFF0C\u4F46\u5BB9\u5FCD\u884C\u5C3E\uFF08CRLF/LF\uFF09\u3001\u884C\u5C3E\u7A7A\u767D\u4E0E\u7F29\u8FDB\u5BBD\u5EA6\u7684\u5DEE\u5F02\u3002\u9ED8\u8BA4\u5FC5\u987B\u552F\u4E00\u5339\u914D\uFF1B\u591A\u5904\u5339\u914D\u8BF7\u52A0\u66F4\u591A\u4E0A\u4E0B\u6587\uFF0C\u6216\u4F20 replace_all\u3002path \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u6216\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string"},old_string:{type:"string",description:"\u8981\u66FF\u6362\u7684\u539F\u6587\uFF0C\u5C3D\u91CF\u4E0E\u6587\u4EF6\u5185\u5BB9\u4E00\u81F4\uFF08\u542B\u7F29\u8FDB\uFF09\uFF1B\u884C\u5C3E\u4E0E\u9996\u5C3E\u7A7A\u767D\u4E0D\u4E00\u81F4\u4F1A\u81EA\u52A8\u5BB9\u9519"},new_string:{type:"string",description:"\u66FF\u6362\u540E\u7684\u5185\u5BB9"},replace_all:{type:"boolean",description:"\u53EF\u9009\uFF0C\u9ED8\u8BA4 false\u3002\u4E3A true \u65F6\u628A\u6240\u6709\u5339\u914D\u5904\u4E00\u8D77\u66FF\u6362\uFF0C\u8FD4\u56DE\u66FF\u6362\u5904\u6570"}},required:["path","old_string","new_string"]}}},{type:"function",function:{name:"run_command",description:"\u5728\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u540C\u6B65\u6267\u884C shell \u547D\u4EE4\uFF08\u5982 node xxx.js\u3001npx tsc --noEmit\u3001ls\uFF09\u3002\u9884\u8BA1 \u226460s \u7684\u9A8C\u8BC1\u7528\u5B83\u3002\u9ED8\u8BA4\u8D85\u65F6 60 \u79D2\u3001\u4E0A\u9650 120 \u79D2\u3002\u957F\u6D4B/\u957F\u6784\u5EFA\u6539\u7528 run_command_start + poll\u3002\u4E0D\u8981\u6267\u884C\u5220\u9664/\u7CFB\u7EDF\u7EA7\u547D\u4EE4\u3002",parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684\u547D\u4EE4"},timeout_ms:{type:"number",description:"\u8D85\u65F6\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 60000\uFF0C\u6700\u5927 120000"}},required:["command"]}}},{type:"function",function:{name:"run_command_start",description:"\u540E\u53F0\u542F\u52A8\u4E00\u6761 shell \u547D\u4EE4\u5E76\u7ACB\u523B\u8FD4\u56DE job_id\uFF08\u4E0D\u963B\u585E\u5DE5\u5177\u5FAA\u73AF\uFF09\u3002\u7528\u4E8E\u957F\u6D4B/\u957F\u6784\u5EFA\uFF1B\u77ED\u547D\u4EE4\u4ECD\u7528 run_command\u3002\u6BCF\u4F1A\u8BDD\u6700\u591A\u540C\u65F6 2 \u4E2A running\u3002\u968F\u540E\u7528 run_command_poll \u770B\u8FDB\u5EA6\uFF0C\u53D6\u6D88\u7528 run_command_stop\u3002",parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684\u547D\u4EE4"},timeout_ms:{type:"number",description:"\u4F5C\u4E1A\u5899\u949F\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 300000\uFF085 \u5206\u949F\uFF09\uFF0C\u6700\u5927 600000"}},required:["command"]}}},{type:"function",function:{name:"run_command_poll",description:"\u67E5\u770B\u5F02\u6B65\u4F5C\u4E1A\u72B6\u6001\u4E0E\u8F93\u51FA\u5C3E\u90E8\u3002status \u4E3A running/exited/timeout/stopped/missing\u3002\u53EF\u9009 wait_ms \u77ED\u6682\u7B49\u5F85\uFF08\u9ED8\u8BA4 0\uFF0C\u4E0A\u9650 15000\uFF09\u3002",parameters:{type:"object",properties:{job_id:{type:"string",description:"run_command_start \u8FD4\u56DE\u7684 job_id"},wait_ms:{type:"number",description:"\u672C\u6B21\u6700\u591A\u963B\u585E\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 0\uFF0C\u6700\u5927 15000"},tail_chars:{type:"number",description:"\u8FD4\u56DE\u8F93\u51FA\u5C3E\u90E8\u5B57\u7B26\u6570\uFF0C\u9ED8\u8BA4 4000\uFF0C\u6700\u5927 8000"}},required:["job_id"]}}},{type:"function",function:{name:"run_command_stop",description:"\u7EC8\u6B62\u5F02\u6B65\u4F5C\u4E1A\uFF08\u6740\u8FDB\u7A0B\u6811\uFF09\u3002\u5DF2\u7ED3\u675F\u5219\u8FD4\u56DE already_done\u3002",parameters:{type:"object",properties:{job_id:{type:"string",description:"run_command_start \u8FD4\u56DE\u7684 job_id"}},required:["job_id"]}}},{type:"function",function:{name:"read_spill",description:"\u6309 id \u53D6\u56DE\u88AB\u4E0A\u4E0B\u6587\u538B\u7F29\u6216\u8BB0\u5FC6\u88C1\u526A\u65F6\u65C1\u8DEF\u4FDD\u5B58\u7684\u539F\u6587\uFF08\u5360\u4F4D\u6587\u6848\u91CC\u7684\u300C\u5B8C\u6574\u7ED3\u679C id=sp_\u2026\u300D\uFF09\u3002\u53EA\u8BFB\uFF1B\u627E\u4E0D\u5230 id \u4F1A\u8BF4\u660E\u539F\u56E0\u3002",parameters:{type:"object",properties:{id:{type:"string",description:"spill id\uFF0C\u5F62\u5982 sp_\u2026\uFF08\u6765\u81EA\u5DE5\u5177\u7ED3\u679C\u5360\u4F4D\u6216\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\uFF09"}},required:["id"]}}},{type:"function",function:{name:"web_search",description:"\u8054\u7F51\u641C\u7D22\u3002\u9700\u8981\u6700\u65B0\u4FE1\u606F\u3001\u5916\u90E8\u6587\u6863\u3001\u7248\u672C\u53F7\u3001\u62A5\u9519\u6392\u67E5\u65F6\u4F7F\u7528\uFF1B\u8FD4\u56DE\u7F16\u53F7\u7ED3\u679C\uFF08\u6807\u9898/URL/\u6458\u8981\uFF09\u3002\u540E\u7AEF\u6309 provider \u7684 webSearch \u914D\u7F6E\u81EA\u52A8\u9009\u62E9 DeepSeek Search \u6216 Bing \u641C\u7D22\u3002",parameters:{type:"object",properties:{query:{type:"string",description:"\u641C\u7D22\u8BCD\uFF0C1~128 \u5B57\u7B26\uFF1B\u652F\u6301 site: \u7B49\u641C\u7D22\u8BED\u6CD5"},count:{type:"number",description:"\u8FD4\u56DE\u6761\u6570 1~50\uFF0C\u9ED8\u8BA4 8"},need_content:{type:"boolean",description:"\u662F\u5426\u540C\u65F6\u8FD4\u56DE\u7F51\u9875\u6B63\u6587\uFF0C\u9ED8\u8BA4 false\uFF08\u6458\u8981\u901A\u5E38\u5DF2\u591F\u7528\uFF1BBing \u540E\u7AEF\u5C3D\u529B\u6293\u53D6\u9996\u6761\u7ED3\u679C\u6B63\u6587\uFF0C\u5931\u8D25\u5219\u5FFD\u7565\uFF09"}},required:["query"]}}},{type:"function",function:{name:"web_fetch",description:"\u6293\u53D6\u5355\u4E2A\u7F51\u9875\u5E76\u8FD4\u56DE\u7EAF\u6587\u672C\u6B63\u6587\u3002\u7528\u4E8E\u7EC6\u8BFB web_search \u7ED3\u679C\u91CC\u7684\u67D0\u4E2A URL\u3002",parameters:{type:"object",properties:{url:{type:"string",description:"\u8981\u6293\u53D6\u7684 http/https \u5730\u5740"}},required:["url"]}}},{type:"function",function:{name:"todo_write",description:"\u521B\u5EFA\u6216\u66F4\u65B0\u672C\u8F6E\u4EFB\u52A1\u6E05\u5355\u3002\u6267\u884C\u8BA1\u5212\u65F6\u7528\u6765\u8DDF\u8E2A\u8FDB\u5EA6\uFF1A\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A in_progress\uFF1B\u5B8C\u6210\u4E00\u9879\u518D\u6807\u4E0B\u4E00\u9879\uFF1B\u5168\u90E8 completed / cancelled \u540E\u518D\u6536\u5C3E\u6C47\u62A5\u3002",parameters:{type:"object",properties:{merge:{type:"boolean",description:"true\uFF08\u9ED8\u8BA4\uFF09\u6309 id \u5408\u5E76\uFF1Bfalse \u7528\u672C\u6B21\u5217\u8868\u5168\u91CF\u66FF\u6362"},todos:{type:"array",description:"todo \u5217\u8868",items:{type:"object",properties:{id:{type:"string",description:"\u7A33\u5B9A id\uFF0C\u5982 t1"},content:{type:"string",description:"\u8FD9\u4E00\u9879\u8981\u505A\u4EC0\u4E48"},status:{type:"string",description:"pending | in_progress | completed | cancelled"}},required:["id","content","status"]}}},required:["todos"]}}},{type:"function",function:{name:"grep",description:"\u5728\u5DE5\u4F5C\u533A\u91CC\u6309\u6B63\u5219\u68C0\u7D22\u6587\u4EF6\u5185\u5BB9\uFF08\u5BF9\u6807 ripgrep\uFF09\u3002\u8865 search_code \u7684\u76F2\u533A\uFF1Asearch_code \u53EA\u505A\u6807\u8BC6\u7B26 / \u4E2D\u6587 bigram \u62C6\u8BCD\uFF0C\u627E\u4E0D\u5230\u771F\u6B63\u5219\uFF08\u5982 foo\\(\\d+\\)\uFF09\u4E5F\u627E\u4E0D\u5230\u300C\u6240\u6709\u8C03\u7528\u70B9\u300D\u3002\u81EA\u52A8\u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55 / node_modules / \u4E8C\u8FDB\u5236 / \u8D85\u5927\u6587\u4EF6\u3002\u8FD4\u56DE \u6587\u4EF6:\u884C\u53F7: \u5185\u5BB9\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:'\u6B63\u5219\u8868\u8FBE\u5F0F\uFF08JS RegExp \u8BED\u6CD5\uFF09\uFF0C\u5982 "foo\\(\\d+\\)"'},glob:{type:"string",description:'\u53EF\u9009\uFF0C\u53EA\u68C0\u7D22\u5339\u914D\u8BE5 glob \u7684\u6587\u4EF6\uFF0C\u5982 "**/*.ts"'},ignoreCase:{type:"boolean",description:"\u53EF\u9009\uFF0C\u5FFD\u7565\u5927\u5C0F\u5199\uFF08\u9ED8\u8BA4 false\uFF09"},maxHits:{type:"number",description:"\u53EF\u9009\uFF0C\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u547D\u4E2D\u884C\uFF08\u9ED8\u8BA4 200\uFF0C\u4E0A\u9650 2000\uFF09"},contextLines:{type:"number",description:"\u53EF\u9009\uFF0C\u547D\u4E2D\u884C\u524D\u540E\u5404\u5E26\u51E0\u884C\u4E0A\u4E0B\u6587\uFF080~5\uFF0C\u9ED8\u8BA4 0\uFF09"},dir:{type:"string",description:"\u53EF\u9009\uFF0C\u9650\u5B9A\u68C0\u7D22\u7684\u5B50\u76EE\u5F55\u524D\u7F00"}},required:["pattern"]}}},{type:"function",function:{name:"glob",description:"\u6309\u6587\u4EF6\u540D\u6A21\u5F0F\u627E\u6587\u4EF6\uFF08\u5BF9\u6807 Cursor glob \u5DE5\u5177\uFF09\u3002\u8865 search_code \u7684\u76F2\u533A\uFF1Asearch_code \u53EA\u7D22\u5F15\u5185\u5BB9\uFF0C\u627E\u4E0D\u5230\u300C\u54EA\u4E2A\u6587\u4EF6\u53EB *config*\u300D\u3002\u652F\u6301 * / ** / ? / [abc] / {a,b} / \u524D\u5BFC ! \u53D6\u53CD\u3002\u7ED3\u679C\u6309\u6700\u8FD1\u6539\u52A8\u6392\u5E8F\u3002",parameters:{type:"object",properties:{patterns:{type:"array",items:{type:"string"},description:'glob \u6A21\u5F0F\u6570\u7EC4\uFF0C\u652F\u6301\u524D\u5BFC ! \u53D6\u53CD\uFF08\u540E\u51FA\u73B0\u7684\u89C4\u5219\u8986\u76D6\u5148\u51FA\u73B0\u7684\uFF09\uFF0C\u5982 ["**/*.js", "!**/node_modules/**"]'},maxFiles:{type:"number",description:"\u53EF\u9009\uFF0C\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u4E2A\u6587\u4EF6\uFF08\u9ED8\u8BA4 200\uFF0C\u4E0A\u9650 2000\uFF09"},dir:{type:"string",description:"\u53EF\u9009\uFF0C\u9650\u5B9A\u904D\u5386\u7684\u5B50\u76EE\u5F55\u524D\u7F00"}},required:["patterns"]}}},{type:"function",function:{name:"apply_patch",description:"\u4E00\u6B21\u63D0\u4EA4\u591A\u6587\u4EF6\u589E / \u6539 / \u5220\uFF08\u5BF9\u6807 Cursor apply_patch\uFF09\u3002\u5168\u6210\u529F\u624D\u843D\u76D8\uFF08\u539F\u5B50\uFF09\uFF0C\u4EFB\u4E00\u6587\u4EF6\u6821\u9A8C\u5931\u8D25\u5219\u6574\u4F53\u4E0D\u5199\u3002\u6539\u6587\u4EF6\u7528\u300C\u4E0A\u4E0B\u6587\u951A\u70B9 + -/+ \u884C\u300D\u5B9A\u4F4D\uFF0C\u4E0D\u5199\u884C\u53F7\uFF08\u907F\u514D\u884C\u53F7\u6F02\u79FB\uFF09\u3002\u9002\u5408\u8DE8\u6587\u4EF6\u91CD\u6784\u3001\u6279\u91CF\u6539\u540D\u3001\u4E00\u6B21\u6539\u591A\u5904\u3002",parameters:{type:"object",properties:{patch:{type:"string",description:"patch \u6587\u672C\uFF0C\u683C\u5F0F\uFF1A*** Begin Patch / *** Add File: path\uFF08\u5185\u5BB9\u884C\u4EE5 + \u5F00\u5934\uFF09/ *** Update File: path\uFF08@@ \u951A\u70B9 + \u7A7A\u683C\u4E0A\u4E0B\u6587\u884C + - \u5220 + \u52A0\uFF09/ *** Delete File: path / *** End Patch"}},required:["patch"]}}},{type:"function",function:{name:"delete_file",description:"\u5220\u9664\u5355\u4E2A\u6587\u4EF6\uFF08\u8FDB REVIEW \u5BA1\u9605\uFF0C\u53EF\u64A4\u9500\uFF09\u3002\u6BD4 run_command rm \u66F4\u5B89\u5168\uFF1A\u8D70\u5BA1\u9605\u6D41\u7A0B\u3001\u80FD\u5728\u9762\u677F\u91CC\u64A4\u9500\u3001\u4E0D\u4F1A\u8BEF\u5220\u76EE\u5F55\u3002\u5220\u9664\u76EE\u5F55\u8BF7\u7528 run_command\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u5220\u9664\u7684\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"}},required:["path"]}}},{type:"function",function:{name:"move_file",description:"\u79FB\u52A8 / \u91CD\u547D\u540D\u5355\u4E2A\u6587\u4EF6\uFF08\u8FDB REVIEW \u5BA1\u9605\uFF0C\u53EF\u64A4\u9500\uFF09\u3002\u6BD4 run_command mv \u66F4\u5B89\u5168\uFF1A\u8D70\u5BA1\u9605\u6D41\u7A0B\u3001\u80FD\u5728\u9762\u677F\u91CC\u64A4\u9500\u3002\u79FB\u52A8\u76EE\u5F55\u8BF7\u7528 run_command\u3002",parameters:{type:"object",properties:{from:{type:"string",description:"\u6E90\u6587\u4EF6\u8DEF\u5F84"},to:{type:"string",description:"\u76EE\u6807\u8DEF\u5F84\uFF08\u53EF\u91CD\u547D\u540D\uFF0C\u53EF\u8DE8\u76EE\u5F55\uFF09"}},required:["from","to"]}}},{type:"function",function:{name:"read_lints",description:"\u8BFB\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF08\u5BF9\u6807 Cursor read_lints\uFF09\u3002\u6539\u5B8C\u6587\u4EF6\u540E\u8BFB error / warning\uFF0C\u81EA\u5DF1\u53D1\u73B0\u7C7B\u578B\u9519 / \u8BED\u6CD5\u9519\uFF0C\u800C\u4E0D\u662F\u7B49\u7528\u6237\u8D34\u62A5\u9519\u3002\u4E0D\u4F20 path \u65F6\u8BFB\u6574\u4E2A\u5DE5\u4F5C\u533A\u3002\u8BCA\u65AD\u9700\u8981\u8BED\u8A00\u670D\u52A1\u5668\u5DF2\u5C31\u7EEA\uFF0C\u521A\u5199\u5B8C\u53EF\u80FD\u8981\u7B49\u51E0\u79D2\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u53EF\u9009\uFF0C\u53EA\u8BFB\u8BE5\u6587\u4EF6\u7684\u8BCA\u65AD\uFF1B\u7701\u7565\u8BFB\u6574\u4E2A\u5DE5\u4F5C\u533A"},maxDiags:{type:"number",description:"\u53EF\u9009\uFF0C\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u6761\uFF08\u9ED8\u8BA4 100\uFF0C\u4E0A\u9650 1000\uFF09"}}}}},{type:"function",function:{name:"ask_question",description:"\u5411\u7528\u6237\u63D0\u51FA\u9009\u62E9\u9898\u5E76\u7B49\u5F85\u70B9\u9009\u3002\u4EFB\u52A1\u51FA\u73B0\u5B9E\u8D28\u5206\u53C9\u3001\u9700\u8981\u4EBA\u62CD\u677F\u65F6\u4F7F\u7528\uFF1B\u7528\u6237\u5728\u9762\u677F\u70B9\u9009\u9879\u540E\u624D\u8FD4\u56DE\uFF0C\u4E0D\u8981\u53EA\u628A\u5F00\u653E\u95EE\u9898\u5199\u8FDB\u6B63\u6587\u3002\u6700\u591A 4 \u9898\uFF0C\u6BCF\u9898 2~6 \u4E2A\u9009\u9879\uFF1B\u6709\u660E\u663E\u66F4\u7A33\u59A5\u7684\u8DEF\u5F84\u65F6\u7ED9\u5BF9\u5E94 option \u6807 recommended: true\u3002",parameters:{type:"object",properties:{title:{type:"string",description:"\u53EF\u9009\u77ED\u6807\u9898\uFF0C\u663E\u793A\u5728\u9009\u9879\u5361\u9876\u90E8"},questions:{type:"array",description:"\u9898\u76EE\u5217\u8868\uFF081~4\uFF09",items:{type:"object",properties:{id:{type:"string",description:"\u9898\u76EE\u7A33\u5B9A id\uFF0C\u5982 q1"},prompt:{type:"string",description:"\u9898\u5E72"},allow_multiple:{type:"boolean",description:"\u53EF\u9009\uFF0C\u9ED8\u8BA4 false\uFF1Btrue \u65F6\u7528\u6237\u53EF\u591A\u9009"},options:{type:"array",description:"\u9009\u9879 2~6 \u4E2A",items:{type:"object",properties:{id:{type:"string",description:"\u9009\u9879 id"},label:{type:"string",description:"\u9009\u9879\u6587\u6848"},recommended:{type:"boolean",description:"\u53EF\u9009\uFF1Btrue \u65F6\u9762\u677F\u5728\u8BE5\u9009\u9879\u4E0A\u6807\u300C\u63A8\u8350\u300D\uFF08\u4EC5\u63D0\u793A\uFF0C\u4E0D\u9884\u9009\uFF09"}},required:["id","label"]}}},required:["id","prompt","options"]}}},required:["questions"]}}},{type:"function",function:{name:"browser",description:"\u7528\u672C\u673A\u65E0\u5934\u6D4F\u89C8\u5668\u770B\u771F\u5B9E\u9875\u9762\uFF08\u53EA\u8BFB\uFF09\uFF1Aopen \u6253\u5F00\u7F51\u5740\u3001snapshot \u53D6\u53EF\u8BBF\u95EE\u6027\u5927\u7EB2\u3001screenshot \u622A\u56FE\u3001console \u770B\u62A5\u9519\u3001network \u770B\u5931\u8D25\u8BF7\u6C42\u3001close \u5173\u95ED\u3002\u9002\u5408\u9A8C\u8BC1\u524D\u7AEF\u6E32\u67D3\u7ED3\u679C\u3001\u6392\u67E5\u300C\u672C\u5730\u8DD1\u8D77\u6765\u4F46\u9875\u9762\u4E0D\u5BF9\u300D\u3002\u53EA\u8BFB\uFF0C\u4E0D\u80FD\u70B9\u51FB / \u8F93\u5165\u3002\u622A\u56FE\u53EA\u6709\u5F00\u4E86 vision \u7684\u6A21\u578B\u624D\u770B\u5F97\u5230\uFF0C\u5426\u5219\u7528 snapshot\u3002",parameters:{type:"object",properties:{action:{type:"string",enum:["open","snapshot","screenshot","console","network","close"],description:"\u52A8\u4F5C\uFF1Aopen(\u9700 url) / snapshot / screenshot / console / network / close"},url:{type:"string",description:"open \u65F6\u7684\u5730\u5740\uFF0C\u5982 http://localhost:5173\uFF1B\u7701\u7565\u534F\u8BAE\u65F6\u6309 https \u8865\u5168"},maxChars:{type:"number",description:"\u53EF\u9009\uFF0Csnapshot / console / network \u7684\u6B63\u6587\u4E0A\u9650\uFF08\u9ED8\u8BA4 6000 / 4000\uFF09"},fullPage:{type:"boolean",description:"\u53EF\u9009\uFF0C\u622A\u56FE\u662F\u5426\u5305\u542B\u6574\u9875\uFF08\u9ED8\u8BA4\u53EA\u622A\u89C6\u53E3\uFF09"}},required:["action"]}}},{type:"function",function:{name:"computer",description:"\u64CD\u4F5C\u672C\u673A\u684C\u9762\uFF08macOS / Windows / Linux\uFF09\uFF1Ascreenshot \u622A\u5C4F\u3001ocr \u8BC6\u522B\u5C4F\u5E55\u6587\u5B57\uFF08Windows \u6682\u4E0D\u652F\u6301\uFF0C\u4F1A\u9000\u56DE\u8BA9\u4F60\u770B\u56FE\uFF09\u3001windows \u5217\u7A97\u53E3\u3001click \u70B9\u51FB\u3001type \u8F93\u5165\u3001key \u6309\u952E\u3001scroll \u6EDA\u52A8\u3001drag \u62D6\u52A8\u3002\u9002\u5408\u9A8C\u8BC1\u771F\u7684 GUI\uFF08\u7F16\u8F91\u5668 / \u6A21\u62DF\u5668 / \u672C\u5730 App\uFF09\uFF0C\u6216\u64CD\u4F5C\u6CA1\u6709\u547D\u4EE4\u884C\u7684\u754C\u9762\u3002\u622A\u56FE\u53EA\u6709\u5F00\u4E86 vision \u7684\u6A21\u578B\u624D\u770B\u5F97\u5230\uFF08\u5426\u5219\u81EA\u52A8\u6539\u56DE ocr \u6587\u5B57\uFF09\uFF1B\u4F1A\u52A8\u9F20\u6807\u952E\u76D8\u7684\u52A8\u4F5C\u7B2C\u4E00\u6B21\u9700\u8981\u7528\u6237\u786E\u8BA4\u3002",parameters:{type:"object",properties:{action:{type:"string",enum:["screenshot","ocr","windows","frontmost","cursor","click","move","drag","scroll","type","key"],description:"\u52A8\u4F5C\uFF1Ascreenshot / ocr / windows / frontmost / cursor / click / move / drag / scroll / type / key"},x:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u6A2A\u5750\u6807\uFF08"+Aa+"\uFF09"},y:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u7EB5\u5750\u6807\uFF08"+Aa+"\uFF09"},toX:{type:"number",description:"drag \u7684\u7EC8\u70B9\u6A2A\u5750\u6807"},toY:{type:"number",description:"drag \u7684\u7EC8\u70B9\u7EB5\u5750\u6807"},imageCoords:{type:"boolean",description:"\u53EF\u9009\uFF1Ax / y \u662F\u300C\u6700\u8FD1\u4E00\u5F20\u622A\u56FE\u4E0A\u7684\u50CF\u7D20\u5750\u6807\u300D\u800C\u4E0D\u662F\u5C4F\u5E55\u70B9\uFF08\u622A\u56FE\u88AB\u538B\u8FC7\u65F6\u7528\uFF0C\u7531\u5DE5\u5177\u6362\u7B97\uFF09"},button:{type:"string",enum:["left","right"],description:"\u53EF\u9009\uFF1Aclick \u7528\u54EA\u4E2A\u952E\uFF08\u9ED8\u8BA4 left\uFF09"},count:{type:"number",description:"\u53EF\u9009\uFF1Aclick \u6B21\u6570\uFF0C1 = \u5355\u51FB\u30012 = \u53CC\u51FB\uFF08\u9ED8\u8BA4 1\uFF09"},dy:{type:"number",description:"scroll \u7684\u7EB5\u5411\u6EDA\u52A8\u91CF\uFF08\u50CF\u7D20\uFF0C\u6B63\u6570 = \u5411\u4E0B\uFF09"},dx:{type:"number",description:"scroll \u7684\u6A2A\u5411\u6EDA\u52A8\u91CF\uFF08\u6B63\u6570 = \u5411\u53F3\uFF09"},text:{type:"string",description:"type \u8981\u8F93\u5165\u7684\u6587\u672C\uFF08\u4E2D\u6587 / emoji \u4F1A\u8D70\u526A\u8D34\u677F\u7C98\u8D34\uFF09"},submit:{type:"boolean",description:"\u53EF\u9009\uFF1Atype \u4E4B\u540E\u8981\u4E0D\u8981\u518D\u6309\u56DE\u8F66"},keys:{type:"string",description:"key \u7684\u6309\u952E\u7EC4\u5408\uFF0C\u5982 cmd+shift+p\u3001ctrl+alt+delete\u3001escape"},region:{type:"string",description:'\u53EF\u9009\uFF1A\u53EA\u770B\u4E00\u5757\u5C4F\u5E55\uFF0C\u683C\u5F0F "x,y,\u5BBD,\u9AD8"\uFF08'+Aa+"\uFF09"},display:{type:"number",description:"\u53EF\u9009\uFF1A\u7B2C\u51E0\u4E2A\u5C4F\u5E55\uFF081 \u8D77\uFF0C\u9ED8\u8BA4\u4E3B\u5C4F\uFF09"},maxWidth:{type:"number",description:"\u53EF\u9009\uFF1A\u622A\u56FE\u6700\u5927\u5BBD\u5EA6\uFF08\u9ED8\u8BA4\u53D6\u8BBE\u7F6E luban.computer.screenshotWidth\uFF09"},maxChars:{type:"number",description:"\u53EF\u9009\uFF1Aocr \u8FD4\u56DE\u7684\u5B57\u7B26\u4E0A\u9650\uFF08\u9ED8\u8BA4 6000\uFF09"}},required:["action"]}}},{type:"function",function:{name:"explore",description:"\u628A\u4E00\u4E2A\u72EC\u7ACB\u7684\u53EA\u8BFB\u8C03\u7814\u4EFB\u52A1\u4EA4\u7ED9\u5B50\u4EE3\u7406\uFF0C\u5B83\u6709\u81EA\u5DF1\u7684\u4E0A\u4E0B\u6587\uFF0C\u53EA\u628A\u7ED3\u8BBA\u4EA4\u56DE\u6765\u3002\u9002\u5408\u300C\u5148\u53BB\u4E00\u7247\u4EE3\u7801\u91CC\u67E5\u6E05\u67D0\u4E8B\u300D\uFF1A\u591A\u5904\u641C\u7D22\u3001\u6279\u91CF\u8BFB\u6587\u4EF6\u3001\u786E\u8BA4\u8C03\u7528\u94FE\u3002\u5B50\u4EE3\u7406\u4E0D\u80FD\u6539\u6587\u4EF6\u3001\u4E0D\u80FD\u63D0\u95EE\uFF0C\u7528\u5B8C\u5C31\u7ED3\u675F\u3002\u4E0D\u8981\u5728\u9700\u8981\u6539\u4EE3\u7801\u65F6\u7528\u5B83\u3002",parameters:{type:"object",properties:{description:{type:"string",description:"\u4E09\u5230\u4E94\u4E2A\u8BCD\uFF0C\u8BF4\u660E\u8981\u67E5\u4EC0\u4E48\uFF0C\u4F1A\u663E\u793A\u5728\u5361\u7247\u4E0A"},prompt:{type:"string",description:"\u5B8C\u6574\u4EFB\u52A1\u63CF\u8FF0\uFF1A\u67E5\u4EC0\u4E48\u3001\u4ECE\u54EA\u627E\u3001\u8981\u56DE\u7B54\u54EA\u51E0\u4E2A\u95EE\u9898"}},required:["description","prompt"]}}}],RN={type:"function",function:{name:"read_skill",description:"\u8BFB\u53D6\u4E00\u4E2A\u6280\u80FD\u7684 SKILL.md \u5168\u6587\uFF08\u7CFB\u7EDF\u63D0\u793A\u91CC\u5217\u51FA\u4E86\u53EF\u7528\u6280\u80FD\uFF09\u3002file \u53EF\u9009\uFF0C\u7528\u4E8E\u8BFB\u8BE5\u6280\u80FD\u76EE\u5F55\u5185\u7684\u9644\u5C5E\u6587\u4EF6\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u6280\u80FD\u540D\uFF0C\u5982 defuddle"},file:{type:"string",description:"\u53EF\u9009\uFF1A\u6280\u80FD\u76EE\u5F55\u5185\u7684\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u7701\u7565\u8868\u793A\u8BFB SKILL.md"}},required:["name"]}}},$N={type:"function",function:{name:"read_rule",description:"\u8BFB\u53D6\u4E00\u6761\u81EA\u5B9A\u4E49\u89C4\u5219\u7684\u5168\u6587\uFF08\u7CFB\u7EDF\u63D0\u793A\u7684\u300C\u89C4\u5219\u7D22\u5F15\u300D\u91CC\u5217\u51FA\u4E86\u540D\u5B57\uFF09\u3002\u6CA1\u547D\u4E2D globs \u7684\u6761\u4EF6\u89C4\u5219\u3001\u6216\u8D85\u51FA\u9884\u7B97\u672A\u5185\u8054\u7684\u5E38\u9A7B\u89C4\u5219\uFF0C\u7528\u5B83\u8BFB\u5168\u6587\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u89C4\u5219\u540D\uFF0C\u5982 go / api\uFF08\u7D22\u5F15\u91CC\u7684\u540D\u5B57\uFF0C\u4E0D\u542B\u6269\u5C55\u540D\uFF09"}},required:["name"]}}},qN=["---","# \u89C4\u5219\u540D\u9ED8\u8BA4\u53D6\u6587\u4EF6\u540D\uFF08default\uFF09\uFF0C\u53EF\u7528 name \u8986\u76D6","description: \u4E00\u53E5\u8BDD\u8BF4\u660E\u8FD9\u6761\u89C4\u5219\u7BA1\u4EC0\u4E48\uFF08\u4F1A\u51FA\u73B0\u5728\u7CFB\u7EDF\u63D0\u793A\u7684\u89C4\u5219\u7D22\u5F15\u91CC\uFF09","# \u4E09\u6863\u8BED\u4E49\uFF08\u90FD\u4E0D\u5199 = \u5E38\u9A7B\u5168\u6587\uFF09\uFF1A","# alwaysApply: true \u2192 \u5E38\u9A7B\uFF1A\u5168\u6587\u8FDB\u7CFB\u7EDF\u63D0\u793A","# globs: src/**/*.ts, lib/*.js \u2192 \u6761\u4EF6\uFF1A\u672C\u8F6E\u5F15\u7528 / \u6539\u52A8\u7684\u6587\u4EF6\u547D\u4E2D globs \u65F6\u624D\u5E26\u4E0A\u5168\u6587","# alwaysApply: false\uFF08\u4E14\u65E0 globs\uFF09\u2192 \u53EA\u8FDB\u7D22\u5F15\uFF0C\u6A21\u578B\u9700\u8981\u65F6\u7528 read_rule \u8BFB\u5168\u6587","# globs \u4E5F\u652F\u6301 YAML \u5217\u8868\u5199\u6CD5\uFF1A","# globs:","# - src/**/*.ts","# - lib/*.js","alwaysApply: false","---","","# \u81EA\u5B9A\u4E49\u89C4\u5219","","- \u793A\u4F8B\uFF1A\u63D0\u4EA4\u4FE1\u606F\u7528\u4E2D\u6587\uFF0C\u4E00\u53E5\u8BDD\u8BF4\u6E05\u6539\u4E86\u4EC0\u4E48\u3002","- \u628A\u793A\u4F8B\u6362\u6210\u4F60\u81EA\u5DF1\u7684\u7EA6\u5B9A\uFF0C\u4FDD\u5B58\u540E\u4E0B\u4E00\u8F6E\u5BF9\u8BDD\u751F\u6548\u3002","","<!-- \u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u7684 AGENTS.md \u6052\u5E38\u9A7B\uFF1B.cursor/rules/*.mdc \u91CC\u7684\u89C4\u5219\u4E5F\u4F1A\u88AB\u4E00\u8D77\u8BFB\u8FDB\u6765\u3002 -->",""].join(`
|
|
1030
|
+
`+n.slice(n.length-o),truncated:!0,dropped:i}}var Jo=new Map,ph=null;function wr(){let t={enabled:!1,chromePath:"",headless:!0,width:1280,height:800,idleMs:3e5,confirm:!0,preview:!1};try{let e=x.workspace.getConfiguration("luban");t.enabled=e.get("browser.enabled")===!0,t.chromePath=String(e.get("browser.chromePath")==null?"":e.get("browser.chromePath")),t.headless=e.get("browser.headless")!==!1;let n=Number(e.get("browser.viewportWidth"));isFinite(n)&&n>=320&&(t.width=Math.floor(n));let s=Number(e.get("browser.viewportHeight"));isFinite(s)&&s>=240&&(t.height=Math.floor(s));let r=Number(e.get("browser.idleTimeoutMs"));isFinite(r)&&r>=1e4&&(t.idleMs=Math.floor(r)),t.confirm=e.get("browser.confirm")!==!1,t.preview=e.get("browser.preview")===!0}catch{}return t}function Kh(){return wr().enabled}function Xa(){let t={enabled:!1,maxTools:30,theme:""};try{let e=x.workspace.getConfiguration("luban");t.enabled=e.get("plugins.enabled")===!0;let n=Number(e.get("plugins.maxTools"));isFinite(n)&&n>0&&(t.maxTools=Math.min(Math.floor(n),200));let s=e.get("plugins.theme");t.theme=typeof s=="string"?s.trim():""}catch{}return t}var PN=/^[a-z][a-z0-9-]{0,23}$/,jN=/^[#a-zA-Z0-9.,%()\/\s-]{1,64}$/;function IN(){let t=Xa().theme;if(!t)return null;try{return Ge.themeOf(t)}catch{return null}}function Hh(){let t=IN();if(!t||!t.tokens)return null;let e=Object.create(null);for(let n of Object.keys(t.tokens)){let s=String(t.tokens[n]==null?"":t.tokens[n]).trim();!PN.test(n)||!jN.test(s)||(e[n]=s)}return Object.keys(e).length?e:null}function Gh(){let t=Hh();if(!t)return"";let e=[];for(let n of Object.keys(t))e.push("--"+n+":"+t[n]);return"<style>:root{"+e.join(";")+"}</style>"}function zh(){let t=Hh(),e={type:"theme",plugin:Xa().theme,tokens:t||{}},n=[];try{Te&&n.push(Te.webview)}catch{}try{ye&&n.push(ye.webview)}catch{}try{ts&&n.push(ts)}catch{}for(let s of n)try{s.postMessage(e)}catch{}}function Rc(t){let e=Xa();return Ge.configure({root:R(),enabled:e.enabled,maxTools:e.maxTools,rec:k,confirm:zS}),e.enabled?Ge.refresh(R()).then(function(){return e},function(n){return k("plugins_scan_failed",{message:n.message,reason:t||"apply"}),e}):Promise.resolve(e)}function GS(){return Yc("config_change_early"),Rc("config_change").then(function(t){if(k("plugins_config_change",{enabled:t.enabled,maxTools:t.maxTools}),Yc("config_change"),t.enabled)try{let e=Ge.status();x.window.setStatusBarMessage(O("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}return t})}async function zS(t){let e=(t.tools||[]).join("\u3001"),n="\u8981\u542F\u7528\u672C\u5730\u63D2\u4EF6\u300C"+t.name+"\u300D\u5417\uFF1F\u5B83\u4F1A\u4EE5\u5DE5\u5177\u5F62\u5F0F\u5E76\u5165 Agent\uFF08"+(e||"\u65E0\u5DE5\u5177")+"\uFF09\u3002\u63D2\u4EF6\u662F\u672C\u673A\u4EFB\u610F\u4EE3\u7801\uFF0C\u53EA\u542F\u7528\u4F60\u4FE1\u4EFB\u7684\u6765\u6E90\u3002";return await x.window.showWarningMessage(n,{modal:!0},"\u4FE1\u4EFB\u5E76\u542F\u7528","\u672C\u6B21\u5FFD\u7565")==="\u4FE1\u4EFB\u5E76\u542F\u7528"}function Iv(t,e){e.timer&&clearTimeout(e.timer);let n=wr();e.timer=setTimeout(function(){uu(t,"idle")},n.idleMs),e.timer&&typeof e.timer.unref=="function"&&e.timer.unref()}async function VS(t){let e=String(t||"_default"),n=Jo.get(e);if(n&&n.starting)return n.starting;if(n&&n.inst&&!n.inst.closed)return Iv(e,n),n.inst;let s=wr(),r={inst:null,starting:null,timer:null};return Jo.set(e,r),r.starting=kt.launch({exe:s.chromePath,headless:s.headless,width:s.width,height:s.height}).then(function(o){return r.inst=o,r.starting=null,Iv(e,r),k("browser_launch",{sessionId:e,exe:o.exe,port:o.port}),o}).catch(function(o){throw Jo.delete(e),k("browser_launch_failed",{sessionId:e,message:String(o&&o.message||o)}),o}),r.starting}async function uu(t,e){let n=String(t||"_default"),s=Jo.get(n);if(!s)return!1;Jo.delete(n),s.timer&&clearTimeout(s.timer);let r=s.inst;if(r)try{await r.close()}catch(o){k("browser_close_failed",{message:o.message})}else s.starting&&s.starting.then(function(o){return o.close()}).catch(function(){});if(k("browser_close",{sessionId:n,reason:e||"manual"}),typeof ph=="function")try{ph(n)}catch{}return!0}async function NN(t){for(let e of Array.from(Jo.keys()))await uu(e,t)}function Vh(){let t={enabled:!1,confirm:!0,maxWidth:2048};try{let e=x.workspace.getConfiguration("luban");t.enabled=e.get("computer.enabled")===!0,t.confirm=e.get("computer.confirm")!==!1;let n=Number(e.get("computer.screenshotWidth"));isFinite(n)&&n>=320&&(t.maxWidth=Math.floor(n))}catch{}return t}function Jh(){return Vh().enabled}var FN={click:!0,move:!0,drag:!0,scroll:!0,type:!0,key:!0},$c=new Set;async function LN(t,e,n){if(!Vh().confirm)return!0;let r=String(t||"_default");if($c.has(r))return!0;let o=null;try{o=await x.window.showWarningMessage("Luban \u60F3\u64CD\u4F5C\u4F60\u7684\u684C\u9762\uFF08"+e+"\uFF09\uFF1A"+(n||""),{modal:!0},"\u5141\u8BB8\u672C\u6B21\u4F1A\u8BDD")}catch{return!0}return o!=="\u5141\u8BB8\u672C\u6B21\u4F1A\u8BDD"?(k("computer_confirm_denied",{sessionId:r,action:e}),!1):($c.add(r),k("computer_confirm_ok",{sessionId:r,action:e}),!0)}var Nv={click:!0,type:!0,scroll:!0},Fv=new Set;async function DN(t,e,n){if(wr().confirm===!1)return!0;let r=String(t||"_default");if(Fv.has(r))return!0;let o=null;try{o=await x.window.showWarningMessage("Luban \u60F3\u64CD\u4F5C\u5185\u5EFA\u6D4F\u89C8\u5668\u9875\u9762\uFF08"+e+"\uFF09\uFF1A"+(n||""),{modal:!0},"\u5141\u8BB8\u672C\u6B21\u4F1A\u8BDD")}catch{return!0}return o!=="\u5141\u8BB8\u672C\u6B21\u4F1A\u8BDD"?(k("browser_confirm_denied",{sessionId:r,action:e}),!1):(Fv.add(r),k("browser_confirm_ok",{sessionId:r,action:e}),!0)}function Lv(t,e){let n={text:String(t??""),images:Array.isArray(e)?e.filter(function(s){return s&&s.dataUrl}):[]};return n.toString=function(){return n.text},n}function Dv(t,e,n){let s=Array.isArray(t)?t:[];if(!s.length)return e;let r=s.map(function(o){return o?o.kind==="network"?"["+(o.status?String(o.status):"FAIL")+"] "+String(o.text||""):"["+String(o.level||"log")+"] "+String(o.text||""):""}).filter(Boolean).join(`
|
|
1031
|
+
`);return HS(r,isFinite(Number(n))&&Number(n)>200?Number(n):4e3).text}var ur=[{type:"function",function:{name:"list_files",description:"\u9012\u5F52\u5217\u51FA\u76EE\u5F55\u4E0B\u7684\u6587\u4EF6\uFF08\u6700\u591A 3 \u5C42\uFF0C\u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55\u548C node_modules\uFF09\u3002dir \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7701\u7565\u8868\u793A\u5DE5\u4F5C\u76EE\u5F55\u6839\u3002",parameters:{type:"object",properties:{dir:{type:"string",description:"\u5B50\u76EE\u5F55\uFF08\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09\uFF0C\u7701\u7565\u8868\u793A\u5DE5\u4F5C\u76EE\u5F55\u6839"}}}}},{type:"function",function:{name:"read_file",description:"\u8BFB\u53D6\u6587\u672C\u6587\u4EF6\u5185\u5BB9\uFF08path \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u6216\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002\u53EF\u7528 startLine\uFF081 \u57FA\uFF09\u4E0E maxLines \u5206\u6BB5\u8BFB\u53D6\u5927\u6587\u4EF6\uFF1B\u7701\u7565\u5219\u4ECE\u7B2C 1 \u884C\u8D77\u6309\u5B57\u7B26\u4E0A\u9650\u8FD4\u56DE\u3002\u4FEE\u6539\u5DF2\u6709\u6587\u4EF6\u524D\u5FC5\u987B\u5148\u8BFB\u5B83\u3002\u4F4D\u4E8E node_modules / dist / target \u7B49\u751F\u6210\u76EE\u5F55\u3001npm-cache / .m2 \u7B49\u5B89\u88C5\u7F13\u5B58\u4E0B\u7684\u6587\u4EF6\u4E0D\u8BFB\u53D6\uFF08\u4E0E list_files / grep \u540C\u4E00\u4EFD\u540D\u5355\uFF1B\u786E\u9700\u67E5\u770B\u7528 run_command\uFF09\u3002",parameters:{type:"object",properties:{path:{type:"string"},startLine:{type:"number",description:"\u8D77\u59CB\u884C\u53F7\uFF08\u4ECE 1 \u5F00\u59CB\uFF09\uFF0C\u9ED8\u8BA4 1"},maxLines:{type:"number",description:"\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u884C\uFF1B\u7701\u7565\u5219\u6309\u6A21\u578B\u7A97\u53E3\u5BF9\u5E94\u7684\u5B57\u7B26\u4E0A\u9650\u4ECE startLine \u5F80\u540E\u53D6"}},required:["path"]}}},{type:"function",function:{name:"search_code",description:"\u5728\u5DE5\u4F5C\u533A\u91CC\u6309\u5173\u952E\u8BCD\u68C0\u7D22\u4EE3\u7801\uFF08\u672C\u5730\u8BCD\u6CD5\u7D22\u5F15 + BM25\uFF09\uFF0C\u8FD4\u56DE\u300C\u8DEF\u5F84:\u884C\u53F7: \u547D\u4E2D\u884C\u300D\u3002\u627E\u51FD\u6570 / \u53D8\u91CF / \u62A5\u9519\u539F\u6587 / \u914D\u7F6E\u9879\u65F6\u5148\u7528\u5B83\uFF0C\u5B9A\u4F4D\u5230\u6587\u4EF6\u518D read_file \u7CBE\u8BFB\uFF0C\u4E0D\u8981\u7528 list_files \u5168\u91CF\u626B\u3002\u5927\u76EE\u5F55 / \u5206\u6279\u573A\u666F\u52A1\u5FC5\u4F20 dir \u9650\u5B9A\u5230\u5F53\u524D\u6279\u6B21\u7684\u5B50\u76EE\u5F55\uFF0C\u7981\u6B62\u6309\u76EE\u5F55\u6811\u9010\u4E2A read_file\u3002",parameters:{type:"object",properties:{query:{type:"string",description:"\u5173\u952E\u8BCD\uFF0C\u53EF\u4EE5\u662F\u6807\u8BC6\u7B26\uFF08boostBudget\uFF09\u3001\u591A\u8BCD\uFF08socket \u91CD\u8FDE\uFF09\u6216\u62A5\u9519\u539F\u6587\u7247\u6BB5"},dir:{type:"string",description:"\u53EF\u9009\uFF0C\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u7684\u76EE\u5F55\u524D\u7F00\uFF1B\u53EA\u8FD4\u56DE\u8BE5\u76EE\u5F55\u4E0B\u7684\u547D\u4E2D\uFF08\u5982 src/utils \u6216 mes-quartz/src\uFF09"},maxResults:{type:"number",description:"\u8FD4\u56DE\u591A\u5C11\u4E2A\u6587\u4EF6\uFF0C\u9ED8\u8BA4 20\uFF0C\u6700\u5927 100"},contextLines:{type:"number",description:"\u547D\u4E2D\u884C\u524D\u540E\u5404\u5E26\u51E0\u884C\u4E0A\u4E0B\u6587\uFF0C\u9ED8\u8BA4 1\uFF0C\u6700\u5927 5"}},required:["query"]}}},{type:"function",function:{name:"write_file",description:"\u5199\u5165/\u8986\u76D6\u6574\u4E2A\u6587\u4EF6\uFF08\u65B0\u5EFA\u6216\u6574\u4F53\u91CD\u5199\u65F6\u7528\uFF09\uFF0C\u81EA\u52A8\u521B\u5EFA\u7236\u76EE\u5F55\u3002path \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u6216\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string"},content:{type:"string",description:"\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9"}},required:["path","content"]}}},{type:"function",function:{name:"replace_in_file",description:"\u628A\u6587\u4EF6\u4E2D\u7684 old_string \u66FF\u6362\u4E3A new_string\uFF08\u5C40\u90E8\u4FEE\u6539\u9996\u9009\uFF09\u3002old_string \u9700\u4E0E\u539F\u6587\u5185\u5BB9\u4E00\u81F4\uFF0C\u4F46\u5BB9\u5FCD\u884C\u5C3E\uFF08CRLF/LF\uFF09\u3001\u884C\u5C3E\u7A7A\u767D\u4E0E\u7F29\u8FDB\u5BBD\u5EA6\u7684\u5DEE\u5F02\u3002\u9ED8\u8BA4\u5FC5\u987B\u552F\u4E00\u5339\u914D\uFF1B\u591A\u5904\u5339\u914D\u8BF7\u52A0\u66F4\u591A\u4E0A\u4E0B\u6587\uFF0C\u6216\u4F20 replace_all\u3002path \u53EF\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u6216\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string"},old_string:{type:"string",description:"\u8981\u66FF\u6362\u7684\u539F\u6587\uFF0C\u5C3D\u91CF\u4E0E\u6587\u4EF6\u5185\u5BB9\u4E00\u81F4\uFF08\u542B\u7F29\u8FDB\uFF09\uFF1B\u884C\u5C3E\u4E0E\u9996\u5C3E\u7A7A\u767D\u4E0D\u4E00\u81F4\u4F1A\u81EA\u52A8\u5BB9\u9519"},new_string:{type:"string",description:"\u66FF\u6362\u540E\u7684\u5185\u5BB9"},replace_all:{type:"boolean",description:"\u53EF\u9009\uFF0C\u9ED8\u8BA4 false\u3002\u4E3A true \u65F6\u628A\u6240\u6709\u5339\u914D\u5904\u4E00\u8D77\u66FF\u6362\uFF0C\u8FD4\u56DE\u66FF\u6362\u5904\u6570"}},required:["path","old_string","new_string"]}}},{type:"function",function:{name:"run_command",description:"\u5728\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u540C\u6B65\u6267\u884C shell \u547D\u4EE4\uFF08\u5982 node xxx.js\u3001npx tsc --noEmit\u3001ls\uFF09\u3002\u9884\u8BA1 \u226460s \u7684\u9A8C\u8BC1\u7528\u5B83\u3002\u9ED8\u8BA4\u8D85\u65F6 60 \u79D2\u3001\u4E0A\u9650 120 \u79D2\u3002\u957F\u6D4B/\u957F\u6784\u5EFA\u6539\u7528 run_command_start + poll\u3002\u4E0D\u8981\u6267\u884C\u5220\u9664/\u7CFB\u7EDF\u7EA7\u547D\u4EE4\u3002",parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684\u547D\u4EE4"},timeout_ms:{type:"number",description:"\u8D85\u65F6\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 60000\uFF0C\u6700\u5927 120000"}},required:["command"]}}},{type:"function",function:{name:"run_command_start",description:"\u540E\u53F0\u542F\u52A8\u4E00\u6761 shell \u547D\u4EE4\u5E76\u7ACB\u523B\u8FD4\u56DE job_id\uFF08\u4E0D\u963B\u585E\u5DE5\u5177\u5FAA\u73AF\uFF09\u3002\u7528\u4E8E\u957F\u6D4B/\u957F\u6784\u5EFA\uFF1B\u77ED\u547D\u4EE4\u4ECD\u7528 run_command\u3002\u6BCF\u4F1A\u8BDD\u6700\u591A\u540C\u65F6 2 \u4E2A running\u3002\u968F\u540E\u7528 run_command_poll \u770B\u8FDB\u5EA6\uFF0C\u53D6\u6D88\u7528 run_command_stop\u3002",parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684\u547D\u4EE4"},timeout_ms:{type:"number",description:"\u4F5C\u4E1A\u5899\u949F\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 300000\uFF085 \u5206\u949F\uFF09\uFF0C\u6700\u5927 600000"}},required:["command"]}}},{type:"function",function:{name:"run_command_poll",description:"\u67E5\u770B\u5F02\u6B65\u4F5C\u4E1A\u72B6\u6001\u4E0E\u8F93\u51FA\u5C3E\u90E8\u3002status \u4E3A running/exited/timeout/stopped/missing\u3002\u53EF\u9009 wait_ms \u77ED\u6682\u7B49\u5F85\uFF08\u9ED8\u8BA4 0\uFF0C\u4E0A\u9650 15000\uFF09\u3002",parameters:{type:"object",properties:{job_id:{type:"string",description:"run_command_start \u8FD4\u56DE\u7684 job_id"},wait_ms:{type:"number",description:"\u672C\u6B21\u6700\u591A\u963B\u585E\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 0\uFF0C\u6700\u5927 15000"},tail_chars:{type:"number",description:"\u8FD4\u56DE\u8F93\u51FA\u5C3E\u90E8\u5B57\u7B26\u6570\uFF0C\u9ED8\u8BA4 4000\uFF0C\u6700\u5927 8000"}},required:["job_id"]}}},{type:"function",function:{name:"run_command_stop",description:"\u7EC8\u6B62\u5F02\u6B65\u4F5C\u4E1A\uFF08\u6740\u8FDB\u7A0B\u6811\uFF09\u3002\u5DF2\u7ED3\u675F\u5219\u8FD4\u56DE already_done\u3002",parameters:{type:"object",properties:{job_id:{type:"string",description:"run_command_start \u8FD4\u56DE\u7684 job_id"}},required:["job_id"]}}},{type:"function",function:{name:"read_spill",description:"\u6309 id \u53D6\u56DE\u88AB\u4E0A\u4E0B\u6587\u538B\u7F29\u6216\u8BB0\u5FC6\u88C1\u526A\u65F6\u65C1\u8DEF\u4FDD\u5B58\u7684\u539F\u6587\uFF08\u5360\u4F4D\u6587\u6848\u91CC\u7684\u300C\u5B8C\u6574\u7ED3\u679C id=sp_\u2026\u300D\uFF09\u3002\u53EA\u8BFB\uFF1B\u627E\u4E0D\u5230 id \u4F1A\u8BF4\u660E\u539F\u56E0\u3002",parameters:{type:"object",properties:{id:{type:"string",description:"spill id\uFF0C\u5F62\u5982 sp_\u2026\uFF08\u6765\u81EA\u5DE5\u5177\u7ED3\u679C\u5360\u4F4D\u6216\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\uFF09"}},required:["id"]}}},{type:"function",function:{name:"web_search",description:"\u8054\u7F51\u641C\u7D22\u3002\u9700\u8981\u6700\u65B0\u4FE1\u606F\u3001\u5916\u90E8\u6587\u6863\u3001\u7248\u672C\u53F7\u3001\u62A5\u9519\u6392\u67E5\u65F6\u4F7F\u7528\uFF1B\u8FD4\u56DE\u7F16\u53F7\u7ED3\u679C\uFF08\u6807\u9898/URL/\u6458\u8981\uFF09\u3002\u540E\u7AEF\u6309 provider \u7684 webSearch \u914D\u7F6E\u81EA\u52A8\u9009\u62E9 DeepSeek Search \u6216 Bing \u641C\u7D22\u3002",parameters:{type:"object",properties:{query:{type:"string",description:"\u641C\u7D22\u8BCD\uFF0C1~128 \u5B57\u7B26\uFF1B\u652F\u6301 site: \u7B49\u641C\u7D22\u8BED\u6CD5"},count:{type:"number",description:"\u8FD4\u56DE\u6761\u6570 1~50\uFF0C\u9ED8\u8BA4 8"},need_content:{type:"boolean",description:"\u662F\u5426\u540C\u65F6\u8FD4\u56DE\u7F51\u9875\u6B63\u6587\uFF0C\u9ED8\u8BA4 false\uFF08\u6458\u8981\u901A\u5E38\u5DF2\u591F\u7528\uFF1BBing \u540E\u7AEF\u5C3D\u529B\u6293\u53D6\u9996\u6761\u7ED3\u679C\u6B63\u6587\uFF0C\u5931\u8D25\u5219\u5FFD\u7565\uFF09"}},required:["query"]}}},{type:"function",function:{name:"web_fetch",description:"\u6293\u53D6\u5355\u4E2A\u7F51\u9875\u5E76\u8FD4\u56DE\u7EAF\u6587\u672C\u6B63\u6587\u3002\u7528\u4E8E\u7EC6\u8BFB web_search \u7ED3\u679C\u91CC\u7684\u67D0\u4E2A URL\u3002",parameters:{type:"object",properties:{url:{type:"string",description:"\u8981\u6293\u53D6\u7684 http/https \u5730\u5740"}},required:["url"]}}},{type:"function",function:{name:"todo_write",description:"\u521B\u5EFA\u6216\u66F4\u65B0\u672C\u8F6E\u4EFB\u52A1\u6E05\u5355\u3002\u6267\u884C\u8BA1\u5212\u65F6\u7528\u6765\u8DDF\u8E2A\u8FDB\u5EA6\uFF1A\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A in_progress\uFF1B\u5B8C\u6210\u4E00\u9879\u518D\u6807\u4E0B\u4E00\u9879\uFF1B\u5168\u90E8 completed / cancelled \u540E\u518D\u6536\u5C3E\u6C47\u62A5\u3002",parameters:{type:"object",properties:{merge:{type:"boolean",description:"true\uFF08\u9ED8\u8BA4\uFF09\u6309 id \u5408\u5E76\uFF1Bfalse \u7528\u672C\u6B21\u5217\u8868\u5168\u91CF\u66FF\u6362"},todos:{type:"array",description:"todo \u5217\u8868",items:{type:"object",properties:{id:{type:"string",description:"\u7A33\u5B9A id\uFF0C\u5982 t1"},content:{type:"string",description:"\u8FD9\u4E00\u9879\u8981\u505A\u4EC0\u4E48"},status:{type:"string",description:"pending | in_progress | completed | cancelled"}},required:["id","content","status"]}}},required:["todos"]}}},{type:"function",function:{name:"grep",description:"\u5728\u5DE5\u4F5C\u533A\u91CC\u6309\u6B63\u5219\u68C0\u7D22\u6587\u4EF6\u5185\u5BB9\uFF08\u5BF9\u6807 ripgrep\uFF09\u3002\u8865 search_code \u7684\u76F2\u533A\uFF1Asearch_code \u53EA\u505A\u6807\u8BC6\u7B26 / \u4E2D\u6587 bigram \u62C6\u8BCD\uFF0C\u627E\u4E0D\u5230\u771F\u6B63\u5219\uFF08\u5982 foo\\(\\d+\\)\uFF09\u4E5F\u627E\u4E0D\u5230\u300C\u6240\u6709\u8C03\u7528\u70B9\u300D\u3002\u81EA\u52A8\u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55 / node_modules / \u4E8C\u8FDB\u5236 / \u8D85\u5927\u6587\u4EF6\u3002\u8FD4\u56DE \u6587\u4EF6:\u884C\u53F7: \u5185\u5BB9\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:'\u6B63\u5219\u8868\u8FBE\u5F0F\uFF08JS RegExp \u8BED\u6CD5\uFF09\uFF0C\u5982 "foo\\(\\d+\\)"'},glob:{type:"string",description:'\u53EF\u9009\uFF0C\u53EA\u68C0\u7D22\u5339\u914D\u8BE5 glob \u7684\u6587\u4EF6\uFF0C\u5982 "**/*.ts"'},ignoreCase:{type:"boolean",description:"\u53EF\u9009\uFF0C\u5FFD\u7565\u5927\u5C0F\u5199\uFF08\u9ED8\u8BA4 false\uFF09"},maxHits:{type:"number",description:"\u53EF\u9009\uFF0C\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u547D\u4E2D\u884C\uFF08\u9ED8\u8BA4 200\uFF0C\u4E0A\u9650 2000\uFF09"},contextLines:{type:"number",description:"\u53EF\u9009\uFF0C\u547D\u4E2D\u884C\u524D\u540E\u5404\u5E26\u51E0\u884C\u4E0A\u4E0B\u6587\uFF080~5\uFF0C\u9ED8\u8BA4 0\uFF09"},dir:{type:"string",description:"\u53EF\u9009\uFF0C\u9650\u5B9A\u68C0\u7D22\u7684\u5B50\u76EE\u5F55\u524D\u7F00"}},required:["pattern"]}}},{type:"function",function:{name:"glob",description:"\u6309\u6587\u4EF6\u540D\u6A21\u5F0F\u627E\u6587\u4EF6\uFF08\u5BF9\u6807 Cursor glob \u5DE5\u5177\uFF09\u3002\u8865 search_code \u7684\u76F2\u533A\uFF1Asearch_code \u53EA\u7D22\u5F15\u5185\u5BB9\uFF0C\u627E\u4E0D\u5230\u300C\u54EA\u4E2A\u6587\u4EF6\u53EB *config*\u300D\u3002\u652F\u6301 * / ** / ? / [abc] / {a,b} / \u524D\u5BFC ! \u53D6\u53CD\u3002\u7ED3\u679C\u6309\u6700\u8FD1\u6539\u52A8\u6392\u5E8F\u3002",parameters:{type:"object",properties:{patterns:{type:"array",items:{type:"string"},description:'glob \u6A21\u5F0F\u6570\u7EC4\uFF0C\u652F\u6301\u524D\u5BFC ! \u53D6\u53CD\uFF08\u540E\u51FA\u73B0\u7684\u89C4\u5219\u8986\u76D6\u5148\u51FA\u73B0\u7684\uFF09\uFF0C\u5982 ["**/*.js", "!**/node_modules/**"]'},maxFiles:{type:"number",description:"\u53EF\u9009\uFF0C\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u4E2A\u6587\u4EF6\uFF08\u9ED8\u8BA4 200\uFF0C\u4E0A\u9650 2000\uFF09"},dir:{type:"string",description:"\u53EF\u9009\uFF0C\u9650\u5B9A\u904D\u5386\u7684\u5B50\u76EE\u5F55\u524D\u7F00"}},required:["patterns"]}}},{type:"function",function:{name:"apply_patch",description:"\u4E00\u6B21\u63D0\u4EA4\u591A\u6587\u4EF6\u589E / \u6539 / \u5220\uFF08\u5BF9\u6807 Cursor apply_patch\uFF09\u3002\u5168\u6210\u529F\u624D\u843D\u76D8\uFF08\u539F\u5B50\uFF09\uFF0C\u4EFB\u4E00\u6587\u4EF6\u6821\u9A8C\u5931\u8D25\u5219\u6574\u4F53\u4E0D\u5199\u3002\u6539\u6587\u4EF6\u7528\u300C\u4E0A\u4E0B\u6587\u951A\u70B9 + -/+ \u884C\u300D\u5B9A\u4F4D\uFF0C\u4E0D\u5199\u884C\u53F7\uFF08\u907F\u514D\u884C\u53F7\u6F02\u79FB\uFF09\u3002\u9002\u5408\u8DE8\u6587\u4EF6\u91CD\u6784\u3001\u6279\u91CF\u6539\u540D\u3001\u4E00\u6B21\u6539\u591A\u5904\u3002",parameters:{type:"object",properties:{patch:{type:"string",description:"patch \u6587\u672C\uFF0C\u683C\u5F0F\uFF1A*** Begin Patch / *** Add File: path\uFF08\u5185\u5BB9\u884C\u4EE5 + \u5F00\u5934\uFF09/ *** Update File: path\uFF08@@ \u951A\u70B9 + \u7A7A\u683C\u4E0A\u4E0B\u6587\u884C + - \u5220 + \u52A0\uFF09/ *** Delete File: path / *** End Patch"}},required:["patch"]}}},{type:"function",function:{name:"delete_file",description:"\u5220\u9664\u5355\u4E2A\u6587\u4EF6\uFF08\u8FDB REVIEW \u5BA1\u9605\uFF0C\u53EF\u64A4\u9500\uFF09\u3002\u6BD4 run_command rm \u66F4\u5B89\u5168\uFF1A\u8D70\u5BA1\u9605\u6D41\u7A0B\u3001\u80FD\u5728\u9762\u677F\u91CC\u64A4\u9500\u3001\u4E0D\u4F1A\u8BEF\u5220\u76EE\u5F55\u3002\u5220\u9664\u76EE\u5F55\u8BF7\u7528 run_command\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u5220\u9664\u7684\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"}},required:["path"]}}},{type:"function",function:{name:"move_file",description:"\u79FB\u52A8 / \u91CD\u547D\u540D\u5355\u4E2A\u6587\u4EF6\uFF08\u8FDB REVIEW \u5BA1\u9605\uFF0C\u53EF\u64A4\u9500\uFF09\u3002\u6BD4 run_command mv \u66F4\u5B89\u5168\uFF1A\u8D70\u5BA1\u9605\u6D41\u7A0B\u3001\u80FD\u5728\u9762\u677F\u91CC\u64A4\u9500\u3002\u79FB\u52A8\u76EE\u5F55\u8BF7\u7528 run_command\u3002",parameters:{type:"object",properties:{from:{type:"string",description:"\u6E90\u6587\u4EF6\u8DEF\u5F84"},to:{type:"string",description:"\u76EE\u6807\u8DEF\u5F84\uFF08\u53EF\u91CD\u547D\u540D\uFF0C\u53EF\u8DE8\u76EE\u5F55\uFF09"}},required:["from","to"]}}},{type:"function",function:{name:"read_lints",description:"\u8BFB\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF08\u5BF9\u6807 Cursor read_lints\uFF09\u3002\u6539\u5B8C\u6587\u4EF6\u540E\u8BFB error / warning\uFF0C\u81EA\u5DF1\u53D1\u73B0\u7C7B\u578B\u9519 / \u8BED\u6CD5\u9519\uFF0C\u800C\u4E0D\u662F\u7B49\u7528\u6237\u8D34\u62A5\u9519\u3002\u4E0D\u4F20 path \u65F6\u8BFB\u6574\u4E2A\u5DE5\u4F5C\u533A\u3002\u8BCA\u65AD\u9700\u8981\u8BED\u8A00\u670D\u52A1\u5668\u5DF2\u5C31\u7EEA\uFF0C\u521A\u5199\u5B8C\u53EF\u80FD\u8981\u7B49\u51E0\u79D2\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u53EF\u9009\uFF0C\u53EA\u8BFB\u8BE5\u6587\u4EF6\u7684\u8BCA\u65AD\uFF1B\u7701\u7565\u8BFB\u6574\u4E2A\u5DE5\u4F5C\u533A"},maxDiags:{type:"number",description:"\u53EF\u9009\uFF0C\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u6761\uFF08\u9ED8\u8BA4 100\uFF0C\u4E0A\u9650 1000\uFF09"}}}}},{type:"function",function:{name:"ask_question",description:"\u5411\u7528\u6237\u63D0\u51FA\u9009\u62E9\u9898\u5E76\u7B49\u5F85\u70B9\u9009\u3002\u4EFB\u52A1\u51FA\u73B0\u5B9E\u8D28\u5206\u53C9\u3001\u9700\u8981\u4EBA\u62CD\u677F\u65F6\u4F7F\u7528\uFF1B\u7528\u6237\u5728\u9762\u677F\u70B9\u9009\u9879\u540E\u624D\u8FD4\u56DE\uFF0C\u4E0D\u8981\u53EA\u628A\u5F00\u653E\u95EE\u9898\u5199\u8FDB\u6B63\u6587\u3002\u6700\u591A 4 \u9898\uFF0C\u6BCF\u9898 2~6 \u4E2A\u9009\u9879\uFF1B\u6709\u660E\u663E\u66F4\u7A33\u59A5\u7684\u8DEF\u5F84\u65F6\u7ED9\u5BF9\u5E94 option \u6807 recommended: true\u3002",parameters:{type:"object",properties:{title:{type:"string",description:"\u53EF\u9009\u77ED\u6807\u9898\uFF0C\u663E\u793A\u5728\u9009\u9879\u5361\u9876\u90E8"},questions:{type:"array",description:"\u9898\u76EE\u5217\u8868\uFF081~4\uFF09",items:{type:"object",properties:{id:{type:"string",description:"\u9898\u76EE\u7A33\u5B9A id\uFF0C\u5982 q1"},prompt:{type:"string",description:"\u9898\u5E72"},allow_multiple:{type:"boolean",description:"\u53EF\u9009\uFF0C\u9ED8\u8BA4 false\uFF1Btrue \u65F6\u7528\u6237\u53EF\u591A\u9009"},options:{type:"array",description:"\u9009\u9879 2~6 \u4E2A",items:{type:"object",properties:{id:{type:"string",description:"\u9009\u9879 id"},label:{type:"string",description:"\u9009\u9879\u6587\u6848"},recommended:{type:"boolean",description:"\u53EF\u9009\uFF1Btrue \u65F6\u9762\u677F\u5728\u8BE5\u9009\u9879\u4E0A\u6807\u300C\u63A8\u8350\u300D\uFF08\u4EC5\u63D0\u793A\uFF0C\u4E0D\u9884\u9009\uFF09"}},required:["id","label"]}}},required:["id","prompt","options"]}}},required:["questions"]}}},{type:"function",function:{name:"browser",description:"\u7528\u672C\u673A\u65E0\u5934\u6D4F\u89C8\u5668\u770B\u771F\u5B9E\u9875\u9762\uFF08\u53EA\u8BFB\uFF09\uFF1Aopen \u6253\u5F00\u7F51\u5740\u3001snapshot \u53D6\u53EF\u8BBF\u95EE\u6027\u5927\u7EB2\u3001screenshot \u622A\u56FE\u3001console \u770B\u62A5\u9519\u3001network \u770B\u5931\u8D25\u8BF7\u6C42\u3001close \u5173\u95ED\u3002\u9002\u5408\u9A8C\u8BC1\u524D\u7AEF\u6E32\u67D3\u7ED3\u679C\u3001\u6392\u67E5\u300C\u672C\u5730\u8DD1\u8D77\u6765\u4F46\u9875\u9762\u4E0D\u5BF9\u300D\u3002\u53EA\u8BFB\uFF0C\u4E0D\u80FD\u70B9\u51FB / \u8F93\u5165\u3002\u622A\u56FE\u53EA\u6709\u5F00\u4E86 vision \u7684\u6A21\u578B\u624D\u770B\u5F97\u5230\uFF0C\u5426\u5219\u7528 snapshot\u3002",parameters:{type:"object",properties:{action:{type:"string",enum:["open","snapshot","screenshot","console","network","close"],description:"\u52A8\u4F5C\uFF1Aopen(\u9700 url) / snapshot / screenshot / console / network / close"},url:{type:"string",description:"open \u65F6\u7684\u5730\u5740\uFF0C\u5982 http://localhost:5173\uFF1B\u7701\u7565\u534F\u8BAE\u65F6\u6309 https \u8865\u5168"},maxChars:{type:"number",description:"\u53EF\u9009\uFF0Csnapshot / console / network \u7684\u6B63\u6587\u4E0A\u9650\uFF08\u9ED8\u8BA4 6000 / 4000\uFF09"},fullPage:{type:"boolean",description:"\u53EF\u9009\uFF0C\u622A\u56FE\u662F\u5426\u5305\u542B\u6574\u9875\uFF08\u9ED8\u8BA4\u53EA\u622A\u89C6\u53E3\uFF09"}},required:["action"]}}},{type:"function",function:{name:"computer",description:"\u64CD\u4F5C\u672C\u673A\u684C\u9762\uFF08macOS / Windows / Linux\uFF09\uFF1Ascreenshot \u622A\u5C4F\u3001ocr \u8BC6\u522B\u5C4F\u5E55\u6587\u5B57\uFF08Windows \u6682\u4E0D\u652F\u6301\uFF0C\u4F1A\u9000\u56DE\u8BA9\u4F60\u770B\u56FE\uFF09\u3001windows \u5217\u7A97\u53E3\u3001click \u70B9\u51FB\u3001type \u8F93\u5165\u3001key \u6309\u952E\u3001scroll \u6EDA\u52A8\u3001drag \u62D6\u52A8\u3002\u9002\u5408\u9A8C\u8BC1\u771F\u7684 GUI\uFF08\u7F16\u8F91\u5668 / \u6A21\u62DF\u5668 / \u672C\u5730 App\uFF09\uFF0C\u6216\u64CD\u4F5C\u6CA1\u6709\u547D\u4EE4\u884C\u7684\u754C\u9762\u3002\u622A\u56FE\u53EA\u6709\u5F00\u4E86 vision \u7684\u6A21\u578B\u624D\u770B\u5F97\u5230\uFF08\u5426\u5219\u81EA\u52A8\u6539\u56DE ocr \u6587\u5B57\uFF09\uFF1B\u4F1A\u52A8\u9F20\u6807\u952E\u76D8\u7684\u52A8\u4F5C\u7B2C\u4E00\u6B21\u9700\u8981\u7528\u6237\u786E\u8BA4\u3002",parameters:{type:"object",properties:{action:{type:"string",enum:["screenshot","ocr","windows","frontmost","cursor","click","move","drag","scroll","type","key"],description:"\u52A8\u4F5C\uFF1Ascreenshot / ocr / windows / frontmost / cursor / click / move / drag / scroll / type / key"},x:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u6A2A\u5750\u6807\uFF08"+Aa+"\uFF09"},y:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u7EB5\u5750\u6807\uFF08"+Aa+"\uFF09"},toX:{type:"number",description:"drag \u7684\u7EC8\u70B9\u6A2A\u5750\u6807"},toY:{type:"number",description:"drag \u7684\u7EC8\u70B9\u7EB5\u5750\u6807"},imageCoords:{type:"boolean",description:"\u53EF\u9009\uFF1Ax / y \u662F\u300C\u6700\u8FD1\u4E00\u5F20\u622A\u56FE\u4E0A\u7684\u50CF\u7D20\u5750\u6807\u300D\u800C\u4E0D\u662F\u5C4F\u5E55\u70B9\uFF08\u622A\u56FE\u88AB\u538B\u8FC7\u65F6\u7528\uFF0C\u7531\u5DE5\u5177\u6362\u7B97\uFF09"},button:{type:"string",enum:["left","right"],description:"\u53EF\u9009\uFF1Aclick \u7528\u54EA\u4E2A\u952E\uFF08\u9ED8\u8BA4 left\uFF09"},count:{type:"number",description:"\u53EF\u9009\uFF1Aclick \u6B21\u6570\uFF0C1 = \u5355\u51FB\u30012 = \u53CC\u51FB\uFF08\u9ED8\u8BA4 1\uFF09"},dy:{type:"number",description:"scroll \u7684\u7EB5\u5411\u6EDA\u52A8\u91CF\uFF08\u50CF\u7D20\uFF0C\u6B63\u6570 = \u5411\u4E0B\uFF09"},dx:{type:"number",description:"scroll \u7684\u6A2A\u5411\u6EDA\u52A8\u91CF\uFF08\u6B63\u6570 = \u5411\u53F3\uFF09"},text:{type:"string",description:"type \u8981\u8F93\u5165\u7684\u6587\u672C\uFF08\u4E2D\u6587 / emoji \u4F1A\u8D70\u526A\u8D34\u677F\u7C98\u8D34\uFF09"},submit:{type:"boolean",description:"\u53EF\u9009\uFF1Atype \u4E4B\u540E\u8981\u4E0D\u8981\u518D\u6309\u56DE\u8F66"},keys:{type:"string",description:"key \u7684\u6309\u952E\u7EC4\u5408\uFF0C\u5982 cmd+shift+p\u3001ctrl+alt+delete\u3001escape"},region:{type:"string",description:'\u53EF\u9009\uFF1A\u53EA\u770B\u4E00\u5757\u5C4F\u5E55\uFF0C\u683C\u5F0F "x,y,\u5BBD,\u9AD8"\uFF08'+Aa+"\uFF09"},display:{type:"number",description:"\u53EF\u9009\uFF1A\u7B2C\u51E0\u4E2A\u5C4F\u5E55\uFF081 \u8D77\uFF0C\u9ED8\u8BA4\u4E3B\u5C4F\uFF09"},maxWidth:{type:"number",description:"\u53EF\u9009\uFF1A\u622A\u56FE\u6700\u5927\u5BBD\u5EA6\uFF08\u9ED8\u8BA4\u53D6\u8BBE\u7F6E luban.computer.screenshotWidth\uFF09"},maxChars:{type:"number",description:"\u53EF\u9009\uFF1Aocr \u8FD4\u56DE\u7684\u5B57\u7B26\u4E0A\u9650\uFF08\u9ED8\u8BA4 6000\uFF09"}},required:["action"]}}},{type:"function",function:{name:"explore",description:"\u628A\u4E00\u4E2A\u72EC\u7ACB\u7684\u53EA\u8BFB\u8C03\u7814\u4EFB\u52A1\u4EA4\u7ED9\u5B50\u4EE3\u7406\uFF0C\u5B83\u6709\u81EA\u5DF1\u7684\u4E0A\u4E0B\u6587\uFF0C\u53EA\u628A\u7ED3\u8BBA\u4EA4\u56DE\u6765\u3002\u9002\u5408\u300C\u5148\u53BB\u4E00\u7247\u4EE3\u7801\u91CC\u67E5\u6E05\u67D0\u4E8B\u300D\uFF1A\u591A\u5904\u641C\u7D22\u3001\u6279\u91CF\u8BFB\u6587\u4EF6\u3001\u786E\u8BA4\u8C03\u7528\u94FE\u3002\u5B50\u4EE3\u7406\u4E0D\u80FD\u6539\u6587\u4EF6\u3001\u4E0D\u80FD\u63D0\u95EE\uFF0C\u7528\u5B8C\u5C31\u7ED3\u675F\u3002\u4E0D\u8981\u5728\u9700\u8981\u6539\u4EE3\u7801\u65F6\u7528\u5B83\u3002",parameters:{type:"object",properties:{description:{type:"string",description:"\u4E09\u5230\u4E94\u4E2A\u8BCD\uFF0C\u8BF4\u660E\u8981\u67E5\u4EC0\u4E48\uFF0C\u4F1A\u663E\u793A\u5728\u5361\u7247\u4E0A"},prompt:{type:"string",description:"\u5B8C\u6574\u4EFB\u52A1\u63CF\u8FF0\uFF1A\u67E5\u4EC0\u4E48\u3001\u4ECE\u54EA\u627E\u3001\u8981\u56DE\u7B54\u54EA\u51E0\u4E2A\u95EE\u9898"}},required:["description","prompt"]}}}],RN={type:"function",function:{name:"read_skill",description:"\u8BFB\u53D6\u4E00\u4E2A\u6280\u80FD\u7684 SKILL.md \u5168\u6587\uFF08\u7CFB\u7EDF\u63D0\u793A\u91CC\u5217\u51FA\u4E86\u53EF\u7528\u6280\u80FD\uFF09\u3002file \u53EF\u9009\uFF0C\u7528\u4E8E\u8BFB\u8BE5\u6280\u80FD\u76EE\u5F55\u5185\u7684\u9644\u5C5E\u6587\u4EF6\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u6280\u80FD\u540D\uFF0C\u5982 defuddle"},file:{type:"string",description:"\u53EF\u9009\uFF1A\u6280\u80FD\u76EE\u5F55\u5185\u7684\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u7701\u7565\u8868\u793A\u8BFB SKILL.md"}},required:["name"]}}},$N={type:"function",function:{name:"read_rule",description:"\u8BFB\u53D6\u4E00\u6761\u81EA\u5B9A\u4E49\u89C4\u5219\u7684\u5168\u6587\uFF08\u7CFB\u7EDF\u63D0\u793A\u7684\u300C\u89C4\u5219\u7D22\u5F15\u300D\u91CC\u5217\u51FA\u4E86\u540D\u5B57\uFF09\u3002\u6CA1\u547D\u4E2D globs \u7684\u6761\u4EF6\u89C4\u5219\u3001\u6216\u8D85\u51FA\u9884\u7B97\u672A\u5185\u8054\u7684\u5E38\u9A7B\u89C4\u5219\uFF0C\u7528\u5B83\u8BFB\u5168\u6587\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u89C4\u5219\u540D\uFF0C\u5982 go / api\uFF08\u7D22\u5F15\u91CC\u7684\u540D\u5B57\uFF0C\u4E0D\u542B\u6269\u5C55\u540D\uFF09"}},required:["name"]}}},qN=["---","# \u89C4\u5219\u540D\u9ED8\u8BA4\u53D6\u6587\u4EF6\u540D\uFF08default\uFF09\uFF0C\u53EF\u7528 name \u8986\u76D6","description: \u4E00\u53E5\u8BDD\u8BF4\u660E\u8FD9\u6761\u89C4\u5219\u7BA1\u4EC0\u4E48\uFF08\u4F1A\u51FA\u73B0\u5728\u7CFB\u7EDF\u63D0\u793A\u7684\u89C4\u5219\u7D22\u5F15\u91CC\uFF09","# \u4E09\u6863\u8BED\u4E49\uFF08\u90FD\u4E0D\u5199 = \u5E38\u9A7B\u5168\u6587\uFF09\uFF1A","# alwaysApply: true \u2192 \u5E38\u9A7B\uFF1A\u5168\u6587\u8FDB\u7CFB\u7EDF\u63D0\u793A","# globs: src/**/*.ts, lib/*.js \u2192 \u6761\u4EF6\uFF1A\u672C\u8F6E\u5F15\u7528 / \u6539\u52A8\u7684\u6587\u4EF6\u547D\u4E2D globs \u65F6\u624D\u5E26\u4E0A\u5168\u6587","# alwaysApply: false\uFF08\u4E14\u65E0 globs\uFF09\u2192 \u53EA\u8FDB\u7D22\u5F15\uFF0C\u6A21\u578B\u9700\u8981\u65F6\u7528 read_rule \u8BFB\u5168\u6587","# globs \u4E5F\u652F\u6301 YAML \u5217\u8868\u5199\u6CD5\uFF1A","# globs:","# - src/**/*.ts","# - lib/*.js","alwaysApply: false","---","","# \u81EA\u5B9A\u4E49\u89C4\u5219","","- \u793A\u4F8B\uFF1A\u63D0\u4EA4\u4FE1\u606F\u7528\u4E2D\u6587\uFF0C\u4E00\u53E5\u8BDD\u8BF4\u6E05\u6539\u4E86\u4EC0\u4E48\u3002","- \u628A\u793A\u4F8B\u6362\u6210\u4F60\u81EA\u5DF1\u7684\u7EA6\u5B9A\uFF0C\u4FDD\u5B58\u540E\u4E0B\u4E00\u8F6E\u5BF9\u8BDD\u751F\u6548\u3002","","<!-- \u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u7684 AGENTS.md \u6052\u5E38\u9A7B\uFF1B.cursor/rules/*.mdc \u91CC\u7684\u89C4\u5219\u4E5F\u4F1A\u88AB\u4E00\u8D77\u8BFB\u8FDB\u6765\u3002 -->",""].join(`
|
|
1032
1032
|
`),BN=5,Rv=1500;function qc(t){let e=String(t??""),n=[],s=0;for(;s<e.length;){let r=e.indexOf(`
|
|
1033
1033
|
`,s);if(r<0){n.push({start:s,end:e.length,text:e.slice(s),eol:""});break}let o=r>s&&e.charAt(r-1)==="\r",i=o?r-1:r;n.push({start:s,end:i,text:e.slice(s,i),eol:o?`\r
|
|
1034
1034
|
`:`
|
|
@@ -1060,37 +1060,37 @@ Plugins run on this machine with your permissions. After installing, you still h
|
|
|
1060
1060
|
`),_=c+" \uFF08L "+p+"-"+b+" / \u5171 "+f+` \u884C\uFF09
|
|
1061
1061
|
`+S;return b<f?_+=`
|
|
1062
1062
|
...[`+(v?"\u672C\u884C\u8D85\u957F\u5DF2\u622A\u65AD\uFF1B":"")+"\u8FD8\u6709\u540E\u7EED\uFF0C\u4F20 startLine="+(b+1)+" \u7EE7\u7EED]":v&&(_+=`
|
|
1063
|
-
...[\u672C\u884C\u8D85\u957F\u5DF2\u622A\u65AD]`),_}if(t==="search_code"){let a=Math.floor(Number(e.maxResults)),l=e.contextLines==null?1:Math.floor(Number(e.contextLines)),c=i?Math.max(1,Math.min(100,i.searchFiles)):20,u=i&&i.compact?Math.max(0,Math.min(5,i.searchCtxLines)):5,d=
|
|
1064
|
-
`).length+" \u884C"+
|
|
1065
|
-
`+
|
|
1063
|
+
...[\u672C\u884C\u8D85\u957F\u5DF2\u622A\u65AD]`),_}if(t==="search_code"){let a=Math.floor(Number(e.maxResults)),l=e.contextLines==null?1:Math.floor(Number(e.contextLines)),c=i?Math.max(1,Math.min(100,i.searchFiles)):20,u=i&&i.compact?Math.max(0,Math.min(5,i.searchCtxLines)):5,d=fr.search(n,String(e.query||e.q||""),{maxFiles:V_(),maxResults:isFinite(a)?Math.min(Math.max(a,1),c):c,contextLines:isFinite(l)?Math.min(Math.max(l,0),u):Math.min(1,u),prefix:e.dir?String(e.dir):""});return k("search_code",{query:d.query,files:d.files,indexed:d.indexed,matched:d.matched,hits:d.hits.length,changed:d.changed,ms:d.tookMs,truncated:d.truncated}),fr.format(d)}if(t==="write_file"){let a=tt(ma(e,"write_file"),n),l=!I.existsSync(a),c=oh(a),u=l?"":no(a),d=ga(e,"content","write_file")||"";await ya(o,"write_file",[{path:pt(a),kind:l?"add":"update",before:u,after:d}]);let f=await hr(a,d),p=ls(a,u,d,l,o.sessionId,o.autoKeep);return f+" | "+d.split(`
|
|
1064
|
+
`).length+" \u884C"+ir(p,o.autoKeep)+await Uv(a,l||!c)}if(t==="replace_in_file"){let a=ma(e,"replace_in_file"),l=tt(a,n);if(!I.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);let c=oh(l),u=I.readFileSync(l,"utf8"),d=ga(e,"old_string","replace_in_file"),f=ga(e,"new_string","replace_in_file"),p=tF(u,d,f,e.replace_all===!0||e.replaceAll===!0);await ya(o,"replace_in_file",[{path:pt(l),kind:"update",before:u,after:p.next}]);let h=await hr(l,p.next),m=ls(l,u,p.next,!1,o.sessionId,o.autoKeep),y=p.count>1?"\u66FF\u6362 "+p.count+" \u5904":"\u66FF\u6362 1 \u5904",w=p.level?"\uFF08\u5BB9\u9519 L"+p.level+"\uFF1A\u884C\u5C3E/\u7A7A\u767D\u5DEE\u5F02\u5DF2\u5BF9\u9F50\uFF09":"";return h+" | "+y+w+ir(m,o.autoKeep)+await Uv(l,!c)}if(t==="grep"){let a=Av(e.dir,n),l=Math.floor(Number(e.maxHits)),c=i?i.grepHits:200,u=Ht.grep(a.base,String(e.pattern||""),{glob:e.glob?String(e.glob):null,ignoreCase:e.ignoreCase===!0,maxHits:isFinite(l)?Math.min(Math.max(l,1),c):c,contextLines:e.contextLines,prefix:a.prefix});return k("grep",{pattern:u.pattern,hits:u.hits.length,files:u.filesSearched,truncated:u.truncated,timedOut:!!u.timedOut}),Ht.formatGrep(u)}if(t==="glob"){let a=Av(e.dir,n),l=Math.floor(Number(e.maxFiles)),c=i?i.globFiles:200,u=Ht.glob(a.base,e.patterns||[],{maxFiles:isFinite(l)?Math.min(Math.max(l,1),c):c,prefix:a.prefix});return k("glob",{pattern:u.pattern,matches:u.matches.length,scanned:u.scanned,truncated:u.truncated}),Ht.formatGlob(u)}if(t==="apply_patch"){let a=Bn.parsePatch(ga(e,"patch","apply_patch")),l=Bn.validatePatch(n,a,{resolve:function(p){return tt(p,n)}});if(!l.ok)throw new Error("apply_patch \u6821\u9A8C\u5931\u8D25\uFF08\u672A\u5199\u5165\u4EFB\u4F55\u6587\u4EF6\uFF09\uFF1A"+l.error);await ya(o,"apply_patch",l.plan.map(function(p){return{path:p.rel,kind:p.type,before:p.before||"",after:p.type==="delete"?"":p.content||""}}));let c=[],u=Object.create(null);for(let p of l.plan)p.type!=="delete"&&(u[p.abs]=oh(p.abs));try{for(let p of l.plan)if(p.type==="add")await hr(p.abs,p.content),c.push({kind:"add",abs:p.abs,rel:p.rel,content:p.content});else if(p.type==="update")await hr(p.abs,p.content),c.push({kind:"update",abs:p.abs,rel:p.rel,before:p.before,content:p.content});else{let h=no(p.abs)||p.before||"";try{await x.workspace.fs.delete(x.Uri.file(p.abs),{useTrash:!0})}catch{I.rmSync(p.abs,{force:!0})}c.push({kind:"delete",abs:p.abs,rel:p.rel,before:h})}}catch(p){throw await oF(c),new Error("apply_patch \u5199\u5165\u5931\u8D25\uFF0C\u5DF2\u56DE\u6EDA\u5168\u90E8\u6539\u52A8\uFF1A"+p.message)}let d=[];for(let p of c)p.kind==="add"?d.push(p.rel+" (\u65B0\u589E)"+ir(ls(p.abs,"",p.content,!0,o.sessionId,o.autoKeep),o.autoKeep)):p.kind==="update"?d.push(p.rel+" (\u4FEE\u6539)"+ir(ls(p.abs,p.before,p.content,!1,o.sessionId,o.autoKeep),o.autoKeep)):d.push(p.rel+" (\u5220\u9664)"+ir(ls(p.abs,p.before,"",!1,o.sessionId,o.autoKeep),o.autoKeep));k("apply_patch",{files:d.length});let f="";if(XS()){let p=c.filter(function(w){return w.kind!=="delete"}).map(function(w){return w.abs}),h=await YS(p),m=Is.summarize(h),y=c.some(function(w){return w.kind==="add"||!u[w.abs]});m.total&&(m.error||m.warning)?f=ZS+`
|
|
1065
|
+
`+Is.formatLints(h,{maxDiags:10}):y&&(f=hh)}return"apply_patch \u6210\u529F\uFF1A"+d.length+` \u4E2A\u6587\u4EF6
|
|
1066
1066
|
`+d.join(`
|
|
1067
|
-
`)+f}if(t==="delete_file"){let a=ma(e,"delete_file"),l=tt(a,n);if(!I.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!I.statSync(l).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u5220\u9664\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);let c=no(l);await ya(o,"delete_file",[{path:pt(l),kind:"delete",before:c,after:""}]);try{await x.workspace.fs.delete(x.Uri.file(l),{useTrash:!0})}catch{I.rmSync(l,{force:!0})}let u=
|
|
1067
|
+
`)+f}if(t==="delete_file"){let a=ma(e,"delete_file"),l=tt(a,n);if(!I.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!I.statSync(l).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u5220\u9664\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);let c=no(l);await ya(o,"delete_file",[{path:pt(l),kind:"delete",before:c,after:""}]);try{await x.workspace.fs.delete(x.Uri.file(l),{useTrash:!0})}catch{I.rmSync(l,{force:!0})}let u=ls(l,c,"",!1,o.sessionId,o.autoKeep);return k("delete_file",{path:pt(l)}),"deleted "+pt(l)+ir(u,o.autoKeep)}if(t==="move_file"){let a=qv(e,["from","from_path","fromPath","source","src","old_path","oldPath"]),l=qv(e,["to","to_path","toPath","target","dest","destination","new_path","newPath"]);if(!a)throw new Error('move_file \u7F3A\u5C11 from\uFF08\u6E90\u6587\u4EF6\u8DEF\u5F84\uFF09\u3002\u6B63\u786E\u5199\u6CD5\uFF1A{"from":"src/a.js","to":"src/b.js"}');if(!l)throw new Error('move_file \u7F3A\u5C11 to\uFF08\u76EE\u6807\u8DEF\u5F84\uFF09\u3002\u6B63\u786E\u5199\u6CD5\uFF1A{"from":"src/a.js","to":"src/b.js"}');let c=tt(a,n),u=tt(l,n);if(!I.existsSync(c))throw new Error("\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!I.statSync(c).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u79FB\u52A8\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);if(I.existsSync(u))throw new Error("\u76EE\u6807\u5DF2\u5B58\u5728\uFF08\u4E0D\u8986\u76D6\uFF0C\u8BF7\u5148\u5220\u9664\u6216\u6362\u4E2A\u540D\u5B57\uFF09: "+l);let d=no(c);await ya(o,"move_file",[{path:pt(c),kind:"delete",before:d,after:""},{path:pt(u),kind:"add",before:"",after:d}]),I.mkdirSync(D.dirname(u),{recursive:!0}),I.renameSync(c,u);let f=ls(c,d,"",!1,o.sessionId,o.autoKeep),p=ls(u,"",d,!0,o.sessionId,o.autoKeep);return k("move_file",{from:pt(c),to:pt(u)}),"moved "+pt(c)+" \u2192 "+pt(u)+ir(f,o.autoKeep)+ir(p,o.autoKeep)}if(t==="read_lints"){let a=e.path?tt(ma(e,"read_lints"),n):null,l=e.maxDiags,c=JS(a);return k("read_lints",{path:a?pt(a):"(workspace)",files:Object.keys(c).length}),Is.formatLints(c,{maxDiags:l})}if(t==="run_command"){let a=String(e.command||""),l=pr.pathGuard(a);if(l)return k("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg}),rS(l);if(js(o.mode,eu())){let d=pr.check(a);if(!d.ok)return k(o.mode==="explore"?"subagent_cmd_blocked":"plan_cmd_blocked",{command:a.slice(0,200),reason:d.reason}),(o.mode==="explore"?"\u5B50\u4EE3\u7406\u53EA\u5141\u8BB8\u53EA\u8BFB\u547D\u4EE4\uFF0C\u5DF2\u62D2\u7EDD\uFF1A":"Plan \u6A21\u5F0F\u53EA\u5141\u8BB8\u53EA\u8BFB\u547D\u4EE4\uFF0C\u5DF2\u62D2\u7EDD\uFF1A")+d.reason+`
|
|
1068
1068
|
\u6539\u7528 read_file / search_code / list_files \u4E5F\u80FD\u62FF\u5230\u540C\u6837\u7684\u4FE1\u606F\uFF1B\u786E\u5B9E\u9700\u8981\u8FD9\u6761\u547D\u4EE4\u8BF7\u8BA9\u7528\u6237\u5207\u5230 Agent \u6A21\u5F0F\u3002`}let c=await KS(a,n,e.timeout_ms,i?i.runMaxChars:0),u="exit="+c.code+`
|
|
1069
1069
|
`+c.out;if(c.truncated&&o.spillStore&&typeof o.spillStore.put=="function")try{let d=_n.newId();o.spillStore.put(d,"exit="+c.code+`
|
|
1070
1070
|
`+c.full,{kind:"tool",name:"run_command",label:a.slice(0,60)}),u+=`
|
|
1071
|
-
[\u8F93\u51FA\u5DF2\u622A\u65AD\uFF0C\u5B8C\u6574\u8F93\u51FA id=`+d+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}catch{}return u}if(t==="run_command_start"){let a=String(e.command||""),l=
|
|
1071
|
+
[\u8F93\u51FA\u5DF2\u622A\u65AD\uFF0C\u5B8C\u6574\u8F93\u51FA id=`+d+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}catch{}return u}if(t==="run_command_start"){let a=String(e.command||""),l=pr.pathGuard(a);if(l)return k("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg,async:!0}),rS(l);if(js(o.mode,eu())){let d=pr.check(a);if(!d.ok)return k(o.mode==="explore"?"subagent_cmd_blocked":"plan_cmd_blocked",{command:a.slice(0,200),reason:d.reason,async:!0}),(o.mode==="explore"?"\u5B50\u4EE3\u7406\u53EA\u5141\u8BB8\u53EA\u8BFB\u547D\u4EE4\uFF0C\u5DF2\u62D2\u7EDD\uFF1A":"Plan \u6A21\u5F0F\u53EA\u5141\u8BB8\u53EA\u8BFB\u547D\u4EE4\uFF0C\u5DF2\u62D2\u7EDD\uFF1A")+d.reason+`
|
|
1072
1072
|
\u6539\u7528 read_file / search_code / list_files \u4E5F\u80FD\u62FF\u5230\u540C\u6837\u7684\u4FE1\u606F\uFF1B\u786E\u5B9E\u9700\u8981\u8FD9\u6761\u547D\u4EE4\u8BF7\u8BA9\u7528\u6237\u5207\u5230 Agent \u6A21\u5F0F\u3002`}let c=String(o.sessionId||""),u=ke.start(c,a,{cwd:n,timeout_ms:e.timeout_ms});return u.ok&&k("async_cmd_start",{job_id:u.job_id,sessionId:c,timeout_ms:u.timeout_ms}),ke.formatStartResult(u)}if(t==="run_command_poll"){let a=String(o.sessionId||""),l=String(e.job_id||e.jobId||e.id||"").trim();if(!l)throw new Error("run_command_poll \u9700\u8981 job_id");let c=await ke.poll(a,l,{wait_ms:e.wait_ms,tail_chars:e.tail_chars});return ke.formatPollResult(c)}if(t==="run_command_stop"){let a=String(o.sessionId||""),l=String(e.job_id||e.jobId||e.id||"").trim();if(!l)throw new Error("run_command_stop \u9700\u8981 job_id");let c=ke.stop(a,l);return k("async_cmd_stop",{job_id:l,sessionId:a,status:c.status}),ke.formatStopResult(c)}if(t==="read_spill"){let a=o.spillStore,l=String(e.id||e.spill_id||e.spillId||"").trim();if(!l)throw new Error("read_spill \u9700\u8981 id\uFF08\u5360\u4F4D\u91CC\u7684 sp_\u2026\uFF09");if(!a||typeof a.read!="function")return"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u7684 spill \u5B58\u50A8\uFF08\u672C\u8F6E\u5C1A\u672A\u53D1\u751F\u538B\u7F29/\u88C1\u526A\uFF0C\u6216\u4F1A\u8BDD spill \u672A\u5C31\u7EEA\uFF09\u3002";let c=a.read(l);if(!c.ok)return c.error;let u=c.meta||{};return"spill id="+c.id+"\uFF0C\u539F "+c.chars+" \u5B57\u7B26"+(u.name?"\uFF0C\u6765\u6E90 "+u.name+(u.label?" "+u.label:""):u.kind?"\uFF0C\u6765\u6E90 "+u.kind:"")+(c.truncated?"\uFF08\u5DF2\u622A\u65AD\uFF09":"")+`
|
|
1073
1073
|
|
|
1074
1074
|
`+c.content}if(t==="web_search"){let a=await Fh(e.query||e.q||"",s,{count:e.count,needContent:!!e.need_content});return Dh(a.results,a.query)}if(t==="web_fetch"){let a=await Lh(e.url,s,{});return"# "+(a.title||"(\u65E0\u6807\u9898)")+`
|
|
1075
1075
|
`+a.url+`
|
|
1076
1076
|
|
|
1077
|
-
`+a.content}if(t==="todo_write"){if(o.mode==="plan")throw new Error("Plan \u6A21\u5F0F\u4E0D\u80FD\u7528 todo_write\uFF08\u8BA1\u5212\u9636\u6BB5\u53EA\u4EA7\u51FA\u6B65\u9AA4\uFF0C\u6267\u884C\u65F6\u518D\u8DDF\u8E2A\uFF09");if(o.mode==="explore")throw new Error("\u5B50\u4EE3\u7406\u4E0D\u80FD\u7528 todo_write\uFF08\u53EA\u4EA4\u7ED3\u8BBA\uFF0C\u4E0D\u6392\u8BA1\u5212\uFF09");let a=o.todosState;if(!a||typeof a!="object")throw new Error("todo_write \u4E0D\u53EF\u7528\uFF1A\u672C\u8F6E\u672A\u542F\u7528\u4EFB\u52A1\u6E05\u5355");let l=e.merge!==!1&&e.merge!=="false",c=sn.merge(a.items,e.todos,{merge:l});if(a.items=c,typeof o.onTodos=="function")try{o.onTodos(c)}catch{}return sn.formatBlock(c)}if(t==="ask_question"){if(o.mode==="explore")throw new Error("\u5B50\u4EE3\u7406\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE\uFF08\u53EA\u8BFB\u8C03\u7814\uFF0C\u8BF7\u81EA\u5DF1\u67E5\u5B8C\u518D\u4EA4\u7ED3\u8BBA\uFF09");if(typeof o.askWait!="function")throw new Error("ask_question \u4E0D\u53EF\u7528\uFF1A\u672C\u8F6E\u672A\u63A5\u5165\u7528\u6237\u7B54\u9898\u901A\u9053");let a=
|
|
1077
|
+
`+a.content}if(t==="todo_write"){if(o.mode==="plan")throw new Error("Plan \u6A21\u5F0F\u4E0D\u80FD\u7528 todo_write\uFF08\u8BA1\u5212\u9636\u6BB5\u53EA\u4EA7\u51FA\u6B65\u9AA4\uFF0C\u6267\u884C\u65F6\u518D\u8DDF\u8E2A\uFF09");if(o.mode==="explore")throw new Error("\u5B50\u4EE3\u7406\u4E0D\u80FD\u7528 todo_write\uFF08\u53EA\u4EA4\u7ED3\u8BBA\uFF0C\u4E0D\u6392\u8BA1\u5212\uFF09");let a=o.todosState;if(!a||typeof a!="object")throw new Error("todo_write \u4E0D\u53EF\u7528\uFF1A\u672C\u8F6E\u672A\u542F\u7528\u4EFB\u52A1\u6E05\u5355");let l=e.merge!==!1&&e.merge!=="false",c=sn.merge(a.items,e.todos,{merge:l});if(a.items=c,typeof o.onTodos=="function")try{o.onTodos(c)}catch{}return sn.formatBlock(c)}if(t==="ask_question"){if(o.mode==="explore")throw new Error("\u5B50\u4EE3\u7406\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE\uFF08\u53EA\u8BFB\u8C03\u7814\uFF0C\u8BF7\u81EA\u5DF1\u67E5\u5B8C\u518D\u4EA4\u7ED3\u8BBA\uFF09");if(typeof o.askWait!="function")throw new Error("ask_question \u4E0D\u53EF\u7528\uFF1A\u672C\u8F6E\u672A\u63A5\u5165\u7528\u6237\u7B54\u9898\u901A\u9053");let a=Ms.normalize(e);return await o.askWait(a)}if(t==="explore"){if(o.inSubagent)throw new Error("\u5B50\u4EE3\u7406\u4E0D\u80FD\u518D\u6D3E\u5B50\u4EE3\u7406");if(bh()<=0)throw new Error("\u5B50\u4EE3\u7406\u5DF2\u5173\u95ED\uFF08luban.agent.subagentRounds=0\uFF09\uFF0C\u8BF7\u81EA\u5DF1\u7528 search_code / read_file \u67E5");let a=o.subBudget;if(a&&a.left<=0)throw new Error("\u672C\u8F6E\u5B50\u4EE3\u7406\u6B21\u6570\u5DF2\u7528\u5B8C\uFF08\u4E0A\u9650 "+a.max+"\uFF09\uFF0C\u8BF7\u81EA\u5DF1\u7528 search_code / read_file \u67E5");let l=String(e.description==null?"":e.description).trim().slice(0,80)||"\u8C03\u7814",c=ga(e,"prompt","explore");if(!String(c||"").trim())throw new Error("explore \u7F3A\u5C11 prompt\uFF1A\u8BF7\u5199\u6E05\u8981\u67E5\u4EC0\u4E48");a&&a.left--;let u=w_(nm().maxMinutes),d=function(y,w,T){if(typeof o.onSubProgress=="function")try{o.onSubProgress({description:l,line:String(y??""),running:w!==!1,ok:T!==!1})}catch{}},f;try{f=await Ns(c,{root:n,modelKey:o.modelKey,mode:"explore",history:[],token:o.token,sessionId:o.sessionId,maxIters:bh(),maxMinutes:u,onProgress:function(y){d(y,!0)}})}catch(y){throw d("\u5B50\u4EE3\u7406\u300C"+l+"\u300D\u5931\u8D25\uFF1A"+(y&&y.message||y),!1,!1),y}if(typeof o.onSubUsage=="function")try{o.onSubUsage(Array.isArray(f.usageRows)?f.usageRows:[])}catch{}let p=f.stop&&f.stop.reason!=="final"?"\uFF0C\u63D0\u524D\u7ED3\u675F\uFF1A"+du(f.stop):"",h="\u5B50\u4EE3\u7406\u300C"+l+"\u300D\u5B8C\u6210\uFF08"+f.iters+" \u8F6E / "+f.log.length+" \u6B21\u5DE5\u5177\u8C03\u7528"+p+"\uFF09";d(h,!1);let m=Zr(f.text,f.log);return k("agent_subagent",{description:l,iters:f.iters,toolCalls:f.log.length,minutes:u,stop:f.stop&&f.stop.reason,usage:f.usage,caveat:!!m}),h+`
|
|
1078
1078
|
|
|
1079
|
-
`+m+zc(f.text)}if(t==="read_skill")return Gt.read(e.name,e.file);if(t==="read_rule")return en.read(e.name);if(xe.hasTool(t)){if(o.mode==="plan"&&!xe.planAllowed(t))throw k("plan_mcp_blocked",{tool:t}),new Error("Plan \u6A21\u5F0F\u4E0D\u653E\u884C MCP \u5DE5\u5177 "+t+"\uFF08server \u672A\u58F0\u660E readOnlyHint\uFF0C\u4E5F\u6CA1\u5728 mcp.json \u7684 planAllow \u91CC\u5217\u51FA\uFF09");return await xe.callTool(t,e)}if(Ge.hasTool(t)){if(o.mode==="plan"&&Ge.readOnlyOf(t)===!1)throw k("plan_plugin_blocked",{tool:t}),new Error("Plan \u6A21\u5F0F\u4E0D\u653E\u884C\u63D2\u4EF6\u5DE5\u5177 "+t+"\uFF08\u63D2\u4EF6\u672A\u58F0\u660E readOnly\uFF09");return await Ge.callTool(t,e,{root:n,sessionId:o.sessionId,mode:o.mode,signal:o.signal,log:k})}throw new Error("\u672A\u77E5\u5DE5\u5177: "+t)}function
|
|
1079
|
+
`+m+zc(f.text)}if(t==="read_skill")return Gt.read(e.name,e.file);if(t==="read_rule")return en.read(e.name);if(xe.hasTool(t)){if(o.mode==="plan"&&!xe.planAllowed(t))throw k("plan_mcp_blocked",{tool:t}),new Error("Plan \u6A21\u5F0F\u4E0D\u653E\u884C MCP \u5DE5\u5177 "+t+"\uFF08server \u672A\u58F0\u660E readOnlyHint\uFF0C\u4E5F\u6CA1\u5728 mcp.json \u7684 planAllow \u91CC\u5217\u51FA\uFF09");return await xe.callTool(t,e)}if(Ge.hasTool(t)){if(o.mode==="plan"&&Ge.readOnlyOf(t)===!1)throw k("plan_plugin_blocked",{tool:t}),new Error("Plan \u6A21\u5F0F\u4E0D\u653E\u884C\u63D2\u4EF6\u5DE5\u5177 "+t+"\uFF08\u63D2\u4EF6\u672A\u58F0\u660E readOnly\uFF09");return await Ge.callTool(t,e,{root:n,sessionId:o.sessionId,mode:o.mode,signal:o.signal,log:k})}throw new Error("\u672A\u77E5\u5DE5\u5177: "+t)}function lr(t,e,n){let s=t==="plan",r=t==="explore",o=s?m_:r?tm:ur,i=Jn(e&&e.provider)!=="none",a=bh(),l=o.filter(function(d){let f=d.function.name;return f==="web_search"||f==="web_fetch"?i:f==="explore"?a>0:f==="browser"?Kh():f==="computer"?Jh()&&!s&&ue.available().ok:!0});l.push(RN),l.push($N);let c=r?[]:xe.toolDefs({planOnly:s});for(let d of c)l.push(d);let u=r?[]:Ge.toolDefs({planOnly:s});for(let d of u)l.push(d);return n&&n.compact&&(l=bn.compactTools(l,n.tier)),l}var de=new Map,Xh=new Set,vn=new Map,nF=12,Bv=0,Ho=null,xn=null,$a=null,Wc=null,Kc=0;function sF(){Kc++}function rF(){Kc=Math.max(0,Kc-1)}function ir(t,e){return e&&!t?" | \u5DF2\u81EA\u52A8\u4FDD\u7559\uFF08\u4E0D\u8FDB\u5F85\u5BA1\u9605\uFF0C\u56DE\u9000\u8BF7\u7528 git\uFF09":t?" | \u5F85\u5BA1\u9605 "+t+" \u5757\uFF08\u7528\u6237\u53EF\u9010\u5757\u64A4\u9500\uFF09":""}function no(t){let e=x.workspace.textDocuments.find(function(n){return Rh(n,t)});if(e&&!e.isClosed)return e.getText();try{return I.readFileSync(t,"utf8")}catch{return""}}function pt(t){let e=t;try{e=D.relative(R(),t)}catch{}return e&&!e.startsWith("..")?e:t}function ya(t,e,n){if(!t||typeof t.confirmWrite!="function")return Promise.resolve();let s=(n||[]).map(function(r){return{path:String(r.path==null?"":r.path),kind:r.kind||"update",before:String(r.before==null?"":r.before),after:String(r.after==null?"":r.after)}});return Promise.resolve(t.confirmWrite({name:e,files:s})).then(function(r){if(r===!1)throw new Error("\u7528\u6237\u62D2\u7EDD\u4E86\u8FD9\u6B21\u5199\u64CD\u4F5C\uFF08"+e+"\uFF09\uFF0C\u6587\u4EF6\u672A\u6539\u52A8\u3002\u4E0D\u8981\u91CD\u590D\u540C\u4E00\u5199\u5165\uFF0C\u7B49\u5F85\u7528\u6237\u4E0B\u4E00\u6B65\u6307\u793A\u3002")})}function cs(){let t=0;for(let e of de.values())t+=e.hunks.length;return t}function JS(t){let e={},n;try{n=x.languages.getDiagnostics()}catch{return e}if(!Array.isArray(n))return e;for(let s of n){if(!Array.isArray(s)||s.length<2)continue;let r=s[0],o=s[1];if(!r||typeof r.fsPath!="string"||!Array.isArray(o)||!o.length)continue;let i=r.fsPath;if(t&&i!==t)continue;let a=o.map(function(l){if(!l||typeof l!="object")return null;let c=l.range||{},u=c.start||{},d=c.end||u;return{severity:typeof l.severity=="number"?l.severity:0,message:l.message==null?"":String(l.message),range:{start:{line:u.line||0,character:u.character||0},end:{line:d.line||0,character:d.character||0}},source:l.source?String(l.source):"",code:l.code!=null?l.code:""}}).filter(Boolean);a.length&&(e[i]=a)}return e}function XS(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("diagnostics.afterEdit")}catch{}return t!==!1}async function YS(t){let e=(t||[]).filter(Boolean),n=function(){let r={};for(let o of e){let i=JS(o);for(let a of Object.keys(i))r[a]=i[a]}return r},s=n();for(let r=0;r<2&&!Object.keys(s).length;r++)await new Promise(function(o){setTimeout(o,150)}),s=n();return s}var ZS=`
|
|
1080
1080
|
\uFF08\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF0C\u53EF\u80FD\u7565\u6EDE\u540E\u4E8E\u672C\u6B21\u5199\u5165\uFF09`,hh=`
|
|
1081
|
-
\uFF08\u672A\u8BFB\u5230\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF1A\u8BE5\u6587\u4EF6\u53EF\u80FD\u8FD8\u6CA1\u88AB\u5206\u6790\uFF08\u521A\u65B0\u5EFA / \u672A\u5728\u7F16\u8F91\u5668\u6253\u5F00\uFF09\uFF0C\u9700\u8981\u786E\u8BA4\u8BED\u6CD5/\u7C7B\u578B\u65F6\u7528 read_lints \u590D\u67E5\uFF09`;function oh(t){try{return(x.workspace.textDocuments||[]).some(function(n){return n&&n.uri&&n.uri.scheme==="file"&&n.uri.fsPath===t})}catch{return!1}}async function Uv(t,e){if(!XS())return"";try{let n=await YS([t]),s=
|
|
1082
|
-
`+js.formatLints(n,{maxDiags:10})}catch{return e?hh:""}}async function oF(t){for(let e=t.length-1;e>=0;e--){let n=t[e];try{n.kind==="add"?await x.workspace.fs.delete(x.Uri.file(n.abs),{useTrash:!0}):await pr(n.abs,n.before||"")}catch(s){k("apply_patch_rollback_failed",{path:pt(n.abs),error:s.message})}}}function as(t,e,n,s,r,o){let i=String(n??"");if(Kc>0||o){let l=de.get(t);return l&&(l.baseline=i,l.hunks=[],Hc(t)),vn.delete(t)&&e_(t),0}let a=de.get(t);return vn.delete(t),a||(a={abs:t,relPath:pt(t),baseline:s?"":String(e??""),isNew:!!s,hunks:[],stats:{add:0,del:0,hunks:0},sessionId:r||""},de.set(t,a)),r&&(a.sessionId=r),a.hunks=kn.computeHunks(a.baseline,i),a.stats=kn.stats(a.hunks),a.hunks.length?(wr(),n_(t),a.hunks.length):(de.delete(t),wr(),a.hunks.length)}function iF(t,e,n){for(vn.delete(t),vn.set(t,{before:String(e??""),title:n,at:Date.now()});vn.size>nF;){let s=vn.keys().next();if(!s||s.done)break;vn.delete(s.value)}}function QS(t){let e=[];try{for(let n of x.window.tabGroups.all)for(let s of n.tabs){let r=s.input;if(!r||!r.modified||!r.original)continue;let o=r.modified,i=r.original;(o.scheme==="file"&&o.fsPath===t||o.scheme==="luban-after"&&o.path===t||i.scheme==="luban-before"&&i.path===t)&&e.push(s)}}catch{}return e}async function e_(t){for(let e of QS(t))try{await x.window.tabGroups.close(e,!0)}catch{}}function Hc(t,e){let n=de.get(t),s=typeof e=="string"&&!!n,r=s?QS(t):[];s&&r.length?(iF(t,e,O("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del})),de.delete(t),dF(t)):(de.delete(t),n&&e_(t)),nn.delete(t),wr()}var Wv=Promise.resolve(),ih=0,Kv=!1,Hv=!1,nn=new Map,aF=40;function lF(t){for(nn.delete(t),nn.set(t,Date.now());nn.size>aF;){let e=nn.keys().next();if(!e||e.done)break;nn.delete(e.value)}}function xa(){let t=ye&&ye.webview?ye.webview:null;return t?si.get(t)===!0:!1}function t_(){if(!nn.size||xa())return;let t=Array.from(nn.keys()).pop();nn.clear(),!(!t||!de.has(t)||!tu())&&(k("review_auto_diff_deferred_open",{path:pt(t)}),n_(t))}function n_(t){if(!tu()||!de.has(t))return;let e=ye&&ye.webview?ye.webview:null;if(e&&si.get(e)===!0){lF(t);return}ih||(Kv=e?Fa.get(e)===!0:!1,Hv=e?si.get(e)===!0:!1);let n=Kv,s=Hv;ih++,Wv=Wv.then(async function(){try{await Yh(t,{preview:!0,preserveFocus:!0})}catch(r){k("review_auto_diff_failed",{path:pt(t),error:r.message})}if(n&&!s){try{await x.commands.executeCommand("workbench.view.extension.luban")}catch(r){k("review_auto_diff_refocus_failed",{path:pt(t),error:r.message})}try{let r=ye&&ye.webview;r&&setTimeout(function(){try{r.postMessage({type:"refocus_input"})}catch{}},120)}catch{}}ih--})}function mh(){let t=[];for(let e of de.values()){let n=e.hunks.map(function(s){let r=s.lines.length>240;return{id:s.id,header:s.header,add:s.add,del:s.del,lines:(r?s.lines.slice(0,240):s.lines).map(function(o){return{t:o.t,s:o.s}}),truncated:r}});t.push({path:e.relPath,isNew:e.isNew,add:e.stats.add,del:e.stats.del,hunks:n,sessionId:e.sessionId||""})}return t}function qa(){return{type:"review",files:mh(),at:Date.now()}}async function cF(t){try{await pr(t,"")}catch{}try{for(let e of x.window.tabGroups.all)for(let n of e.tabs){let s=n.input;if(!s)continue;let r=s.uri,o=s.modified;(r&&r.scheme==="file"&&r.fsPath===t||o&&o.scheme==="file"&&o.fsPath===t)&&await x.window.tabGroups.close(n,!0)}}catch{}try{await x.workspace.fs.delete(x.Uri.file(t),{useTrash:!0})}catch{}}async function Gv(t,e,n){if(e.isNew&&n==="")return await cF(t),de.delete(t),wr(),{ok:!0,deleted:!0,hunks:0};await pr(t,n);let s=kn.computeHunks(e.baseline,n);return e.hunks=s,e.stats=kn.stats(s),s.length?wr():Hc(t),{ok:!0,hunks:s.length}}function uF(t){return{before:x.Uri.from({scheme:"luban-before",path:t}),after:I.existsSync(t)?x.Uri.file(t):x.Uri.from({scheme:"luban-after",path:t})}}async function s_(t,e,n){let s=n||{},r=uF(t);await x.commands.executeCommand("vscode.diff",r.before,r.after,e,{preview:s.preview===!0,preserveFocus:s.preserveFocus===!0})}async function Yh(t,e){let n=de.get(t);if(!n)throw new Error(O("ext.noPending",{path:pt(t)}));let s=e||{};Xh.add(t);let r=O("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del});hr(),await s_(t,r,s),hr()}async function dF(t){let e=vn.get(t);if(e){Xh.add(t);try{await s_(t,e.title,{preview:!1,preserveFocus:!0})}catch(n){k("review_freeze_diff_failed",{path:pt(t),error:n.message})}try{hr()}catch{}}}async function Ba(t,e,n,s){let r=R();if(t==="accept_all"||t==="reject_all"){let c=t==="accept_all"?"accept_file":"reject_file",u=de.size;for(let d of Array.from(de.keys())){let f=de.get(d);s&&f&&f.sessionId&&f.sessionId!==s||await Ba(c,d,"")}return{ok:!0,files:u,hunks:0}}let o=tt(e,r,!0);if(t==="open_diff")return nn.delete(o),await Yh(o),{ok:!0};let i=de.get(o);if(!i)return{ok:!1,error:O("ext.noPending",{path:e})};let a=no(o);if(t==="accept_file"){let c=i.baseline;return i.baseline=a,i.hunks=[],Hc(o,c),{ok:!0,hunks:0,files:de.size}}if(t==="reject_file")return await Gv(o,i,i.baseline);i.hunks=kn.computeHunks(i.baseline,a);let l=i.hunks.find(function(c){return c.id===n});if(!l)return i.stats=kn.stats(i.hunks),wr(),{ok:!1,error:O("ext.hunkGone",{hunk:n})};if(t==="accept_hunk"){let c=i.baseline;return i.baseline=kn.applyHunkToBaseline(i.baseline,l),i.hunks=kn.computeHunks(i.baseline,a),i.stats=kn.stats(i.hunks),i.hunks.length?wr():Hc(o,c),{ok:!0,hunks:i.hunks.length}}return t==="reject_hunk"?await Gv(o,i,kn.revertHunkText(a,l)):{ok:!1,error:O("ext.unknownAction",{action:t})}}function r_(){$a||($a=x.window.createTextEditorDecorationType({isWholeLine:!0,backgroundColor:new x.ThemeColor("diffEditor.insertedLineBackground"),overviewRulerColor:new x.ThemeColor("editorOverviewRuler.addedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}),Wc=x.window.createTextEditorDecorationType({backgroundColor:new x.ThemeColor("diffEditor.removedLineBackground"),fontStyle:"italic",overviewRulerColor:new x.ThemeColor("editorOverviewRuler.deletedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}))}function o_(t,e){let n=[],s=[],r=[],o=Math.max(0,t.lineCount-1);for(let i of e.hunks){let a=kn.hunkRanges(i);for(let l of a.add){let c=Math.max(0,Math.min(l.start,o)),u=Math.max(c,Math.min(l.start+l.count-1,o));n.push({range:new x.Range(c,0,u,t.lineAt(u).text.length)}),r.push({kind:"add",from:c+1,to:u+1,lines:l.count})}for(let l of a.del){let c=l.at>0?Math.min(l.at-1,o):0,u=l.at>0?t.lineAt(c).range.end:new x.Position(0,0),d=l.lines.slice(0,3).join(" | ");s.push({range:new x.Range(u,u),renderOptions:{after:{contentText:O("ext.removedGhost",{n:l.lines.length,text:d.slice(0,100)})}}}),r.push({kind:"del",atLine:c+1,lines:l.lines.length,text:l.lines.slice(0,3).join(" | ").slice(0,100)})}}return{added:n,removed:s,spans:r}}function Zh(){r_();for(let t of x.window.visibleTextEditors){let e=t.document,n=e.uri.scheme==="file"?de.get(e.uri.fsPath):null;if(!n){t.setDecorations($a,[]),t.setDecorations(Wc,[]);continue}let s=o_(e,n);t.setDecorations($a,s.added),t.setDecorations(Wc,s.removed)}}function fF(t){if(!xn)return[];let e=x.window.activeTextEditor;if(!e||e.document.uri.fsPath!==t.uri.fsPath)return[];let n=e.selection;if(!n||n.isEmpty)return[];let s=Math.max(0,Math.min(n.start.line,t.lineCount-1)),r=new x.Range(s,0,s,0);return[new x.CodeLens(r,{title:O("ext.selLensChat"),command:"luban.addSelectionToChat"}),new x.CodeLens(r,{title:O("ext.selLensNewChat"),command:"luban.addSelectionToNewChat"})]}function pF(t){if(!xn)return[];let e=de.get(t.uri.fsPath);if(!e||!e.hunks.length)return[];let n=Math.max(0,t.lineCount-1),s=[];for(let o of e.hunks){let i=Math.max(0,Math.min(o.newStart,n)),a=new x.Range(i,0,i,0);s.push(new x.CodeLens(a,{title:O("ext.keepHunk",{add:o.add,del:o.del}),command:"luban.acceptHunk",arguments:[{path:e.abs,hunk:o.id}]})),s.push(new x.CodeLens(a,{title:O("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:o.id}]}))}if(Wa(Ua())===t.uri.fsPath)return s;let r=new x.Range(0,0,0,0);return s.push(new x.CodeLens(r,{title:O("ext.viewDiff"),command:"luban.openDiff",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:O("ext.keepFile",{add:e.stats.add,del:e.stats.del}),command:"luban.acceptFile",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:O("ext.revertFile"),command:"luban.rejectFile",arguments:[{path:e.abs}]})),s}function hF(t){if(!xn)return[];let e=de.get(t.uri.path);if(!e||!e.hunks.length)return[];let n=Math.max(0,t.lineCount-1),s=[];for(let r of e.hunks){let o=Math.max(0,Math.min(r.oldStart,n)),i=new x.Range(o,0,o,0);s.push(new x.CodeLens(i,{title:O("ext.keepHunk",{add:r.add,del:r.del}),command:"luban.acceptHunk",arguments:[{path:e.abs,hunk:r.id}]})),s.push(new x.CodeLens(i,{title:O("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:r.id}]}))}return s}function Ua(){try{return x.window.tabGroups.activeTabGroup.activeTab}catch{return null}}function Wa(t){let e=t&&t.input;if(!e)return"";let n=e.modified,s=e.original;if(n&&s){if(n.scheme==="file"&&de.has(n.fsPath))return n.fsPath;if(s.scheme==="luban-before"&&de.has(s.path))return s.path}return""}function mF(t){let e=Wa(t);if(e)return e;let n=t&&t.input;return n&&n.uri&&n.uri.scheme==="file"&&de.has(n.uri.fsPath)?n.uri.fsPath:""}function hr(){let t=!1;try{t=!!Wa(Ua())}catch{t=!1}let e=function(n,s){try{Promise.resolve(x.commands.executeCommand("setContext",n,s)).catch(function(){})}catch{}};e("luban.pendingReview",ls()),e("luban.reviewDiffActive",t)}function wr(){Bv++;try{if(Ho){let t=new Set(Array.from(de.keys()).concat(Array.from(Xh),Array.from(vn.keys())));for(let e of t)Ho.fire(x.Uri.from({scheme:"luban-before",path:e}))}}catch{}try{xn&&xn.fire()}catch{}try{Zh()}catch{}try{hr()}catch{}try{typeof Re=="function"?Re(qa()):vt&&vt.postMessage(qa())}catch{}k("review_state",{files:de.size,hunks:ls(),seq:Bv})}function gF(t){r_(),Ho=new x.EventEmitter,xn=new x.EventEmitter,t.subscriptions.push($a,Wc,Ho,xn),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-before",{onDidChange:Ho.event,provideTextDocumentContent:function(r){let o=de.get(r.path);if(o)return o.baseline;let i=vn.get(r.path);return i?i.before:""}})),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-after",{onDidChange:Ho.event,provideTextDocumentContent:function(r){try{return I.existsSync(r.path)?no(r.path):""}catch{return""}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"file"},{onDidChangeCodeLenses:xn.event,provideCodeLenses:function(r){try{return pF(r).concat(fF(r))}catch{return[]}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"luban-before"},{onDidChangeCodeLenses:xn.event,provideCodeLenses:function(r){try{return hF(r)}catch{return[]}}}));function e(r,o){if(r&&typeof r.fsPath=="string"){let l=r.scheme==="file"?r.fsPath:String(r.path||"");if(l&&de.has(l))return{path:l,hunk:o||""}}else if(r&&r.path)return r;let i=mF(Ua());if(i)return{path:i,hunk:o||""};let a=x.window.activeTextEditor;return a&&a.document.uri.scheme==="file"?{path:a.document.uri.fsPath,hunk:o||""}:null}function n(r,o){return async function(i){let a=e(i,o?i&&i.hunk:"");if(!a)return{ok:!1,error:O("ext.noReviewFile")};let l;try{l=await Ba(r,a.path,o?a.hunk:"")}catch(c){l={ok:!1,error:c.message}}return k("review_action",{action:r,path:pt(s(a.path)),hunk:a.hunk||"",ok:!!l.ok,error:l.error}),l.ok||x.window.showWarningMessage(O("ext.reviewWarn",{msg:l.error||O("ext.actionFailed")})),l}}function s(r){try{return tt(r,R(),!0)}catch{return r}}t.subscriptions.push(x.commands.registerCommand("luban.openDiff",n("open_diff",!1)),x.commands.registerCommand("luban.acceptHunk",n("accept_hunk",!0)),x.commands.registerCommand("luban.rejectHunk",n("reject_hunk",!0)),x.commands.registerCommand("luban.acceptFile",n("accept_file",!1)),x.commands.registerCommand("luban.rejectFile",n("reject_file",!1)),x.commands.registerCommand("luban.reviewAll",n("accept_all",!1)),x.commands.registerCommand("luban.revertAll",n("reject_all",!1)),x.commands.registerCommand("luban.diffAccept",n("accept_file",!1)),x.commands.registerCommand("luban.diffReject",n("reject_file",!1)),x.window.onDidChangeVisibleTextEditors(function(){try{Zh()}catch{}}),x.window.tabGroups.onDidChangeTabs(function(){try{hr()}catch{}}),x.window.tabGroups.onDidChangeTabGroups(function(){try{hr()}catch{}}),x.window.onDidChangeActiveTextEditor(function(){try{hr()}catch{}}),x.window.onDidChangeTextEditorSelection(function(){try{xn&&xn.fire()}catch{}}),x.workspace.onDidChangeTextDocument(function(r){let o=r.document.uri.scheme==="file"?r.document.uri.fsPath:"",i=de.get(o);if(!i)return;let a=kn.computeHunks(i.baseline,r.document.getText()),l=function(c){return c.map(function(u){return u.header+u.add+":"+u.del}).join("|")};l(a)!==l(i.hunks)&&(i.hunks=a,i.stats=kn.stats(a),a.length||de.delete(o),wr())})),hr()}function i_(t,e){if(Array.isArray(t)){let n="",s=0;for(let o of t)!o||typeof o!="object"||(o.type==="text"?n+=String(o.text==null?"":o.text):o.type==="image_url"&&s++);return(s?"[\u56FE\u7247 \xD7"+s+"] ":"")+n.slice(0,e)}return String(t??"").slice(0,e)}var a_={model:1,messages:1,stream:1,tools:1,tool_choice:1,max_tokens:1,stream_options:1},zv=2e3,Vv=Object.create(null);function An(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function yF(t,e){let n=[],s=function(r,o,i){for(let a of Object.keys(o)){if(a==="__proto__"||a==="constructor"||a==="prototype"||i===0&&a_[a])continue;let l=o[a];An(l)&&An(r[a])?s(r[a],l,i+1):r[a]=l,i===0&&n.push(a)}};return s(t,e,0),n}function l_(t,e){let n=t&&t.thinking;if(!An(n))return null;let s=function(o){return An(n[o])},r=e==="on"||e==="off"?e:String(n.default||"");return r!=="on"&&r!=="off"&&(r=s("off")?"off":s("on")?"on":""),!r||!s(r)?null:{mode:r,tier:n[r]}}function wF(t){let e=t&&t.thinking;if(!An(e))return null;let n=["on","off"].filter(function(r){return An(e[r])});if(!n.length)return null;let s=l_(t,"");return{default:s?s.mode:n[0],tiers:n}}var c_=ch.DEFAULT_MAX_VERSION;function u_(){let t=String(process.env.LUBAN_TLS_MAX_VERSION||"").trim().toLowerCase();if(t==="1.2"||t==="tlsv1.2"||t==="tls1.2")return"1.2";if(t==="auto"||t==="1.3"||t==="tlsv1.3")return"auto";let e="auto";try{e=String(x.workspace.getConfiguration("luban").get("net.tlsMaxVersion")||"auto")}catch{e="auto"}return e=e.trim().toLowerCase(),e==="1.2"?"1.2":"auto"}function gh(t){let e=u_(),n=e==="1.2"?"TLSv1.2":c_,s=!1;try{s=ch.DEFAULT_MAX_VERSION!==n,ch.DEFAULT_MAX_VERSION=n}catch{}return s&&k("net_tls_max_version",{mode:e,maxVersion:n,reason:t||""}),e}function d_(t){let e=t;for(let n=0;n<4&&e;n++){if(e.code)return String(e.code);e=e.cause}return""}function bF(t){if(!t||t.name==="AbortError")return!1;let e=[],n=t;for(let r=0;r<4&&n;r++)n.code&&e.push(String(n.code)),n.message&&e.push(String(n.message)),n=n.cause;let s=e.join(" ").toLowerCase();return/cert|self.signed|unable to verify|wrong version number/.test(s)?!1:/econnreset|econnaborted|epipe|etimedout|enotfound|eai_again|und_err_socket|und_err_closed|terminated|socket hang up|other side closed|fetch failed/.test(s)}function kF(t,e,n){let s=d_(t);return"\u4E0E "+(e&&(e.name||e.id)||"\u7AEF\u70B9")+" \u7684\u8FDE\u63A5\u88AB\u4E2D\u65AD"+(s?"\uFF08"+s+"\uFF09":"")+(n>0?"\uFF0C\u5DF2\u81EA\u52A8\u91CD\u8BD5 "+n+" \u6B21\u4ECD\u5931\u8D25":"")+"\u3002\u901A\u5E38\u662F\u7F51\u7EDC\u94FE\u8DEF\u88AB\u91CD\u7F6E\uFF08\u4EE3\u7406 / \u5B89\u5168\u8F6F\u4EF6\u62E6 TLS\u3001CDN \u8FB9\u7F18\u6296\u52A8\uFF09\uFF0C\u4E0D\u662F\u6A21\u578B\u8FD4\u56DE\u7684\u5185\u5BB9\uFF1B\u53EF\u7A0D\u540E\u91CD\u53D1\uFF0C\u6216\u68C0\u67E5\u4EE3\u7406\u4E0E\u5B89\u5168\u8F6F\u4EF6\u8BBE\u7F6E"}async function ti(t,e,n){let s=n||{},r=mt(e);if(!r)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let o=ei(r.provider);if(!o)throw new Error("provider "+r.provider.id+" \u7F3A\u5C11 API key\uFF08apiKey \u6216 apiKeyEnv="+r.provider.apiKeyEnv+"\uFF09");let i={model:r.model.id,messages:t,temperature:.2,stream:!0};s.tools&&s.tools.length&&(i.tools=s.tools,i.tool_choice="auto");let a=Number(s.maxTokens)>0?Number(s.maxTokens):Number(r.model.maxOutputTokens);isFinite(a)&&a>0&&(i.max_tokens=Math.floor(a)),!uh[r.provider.id]&&r.provider.streamUsage!==!1&&(i.stream_options={include_usage:!0});let c=l_(r.model,s.thinking),u=r.provider.id+"::"+r.model.id+"::",d="",f=null;if(c&&!Vv[u+c.mode]){let oe=yF(i,c.tier);d=c.mode,f=function(){for(let pe of oe)delete i[pe]}}let p=!!(r.model.thinking&&r.model.thinking.inline===!0&&d==="on"),h=t&&t[0]&&t[0].role==="system"?t[0].content:"",m=Os.hash(h,i.tools||[]);s.snapshot!==!1&&(Ct={at:new Date().toISOString(),model:r.model.id,prefixHash:m,thinking:d||"none",verbosity:s.verbosity||"none",roles:(t||[]).map(function(oe){return oe&&oe.role}),heads:(t||[]).map(function(oe){return i_(oe&&oe.content,120)})});let y=new AbortController,w=lu(s.signal);w.signal&&(w.isCancelled()?y.abort():w.signal.addEventListener("abort",()=>y.abort()));let T=Math.max(0,Number(s.timeoutMs)||0),g=null,v=!1;T>0&&(g=setTimeout(function(){v=!0,y.abort()},T));let b=SS(r.provider),S={"Content-Type":"application/json",Authorization:"Bearer "+o},_=[];i.stream_options&&_.push({field:"stream_options",undo:function(){delete i.stream_options}}),f&&_.push({field:"thinking",undo:f}),i.max_tokens&&_.push({field:"max_tokens",undo:function(){delete i.max_tokens}});let C=2,A=[400,1500],F=0,B=0,H=null,$=null,J="",P=0,K=null,ae="",te=new Map,Q=new Map,he=null,G="",Ie="",Se=[],yt=0,St=new TextDecoder,Me=function(){return fetch(b,{method:"POST",headers:S,body:JSON.stringify(i),signal:y.signal})};try{for(;;){J="",P=0,K=null,ae="",te=new Map,Q=new Map,yt=0,he=BI.newParser({startInThink:p,onContent:function(oe){if(oe&&(yt+=oe.length),s.onToken)try{s.onToken(oe)}catch{}},onReasoning:function(oe){if(oe&&(yt+=oe.length),s.onReasoning)try{s.onReasoning(oe)}catch{}},onSplit:function(oe){if(oe&&(yt+=oe.length),s.onSplit)try{s.onSplit(oe)}catch{}}});try{for(H=await Me();!H.ok&&H.status===400&&F<_.length;){let oe=_[F++],pe=await H.text();oe.field==="stream_options"?(uh[r.provider.id]=!0,k("stream_usage_unsupported",{provider:r.provider.id,status:H.status,body:pe.slice(0,200)})):oe.field==="thinking"?(Vv[u+d]=!0,k("thinking_unsupported",{provider:r.provider.id,model:r.model.id,mode:d,status:H.status,body:pe.slice(0,200)}),d=""):k("max_tokens_unsupported",{provider:r.provider.id,status:H.status,body:pe.slice(0,200)}),oe.undo(),H=await Me()}if(!H.ok){let oe=await H.text();throw k("http_error",{provider:r.provider.id,model:r.model.id,status:H.status,body:oe.slice(0,300)}),new Error(r.provider.id+" HTTP "+H.status+": "+oe.slice(0,200))}for($=H.body.getReader();;){let oe=await $.read();if(oe.done)break;J+=St.decode(oe.value,{stream:!0});let pe=J.split(`
|
|
1083
|
-
`);J=pe.pop()||"";for(let Ne of pe){let wt=Ne.trim();if(!wt.startsWith("data:"))continue;let gs=wt.slice(5).trim();if(!gs||gs==="[DONE]")continue;let on;try{on=JSON.parse(gs)}catch{continue}on&&on.usage&&(K=on.usage);let Rt=on.choices&&on.choices[0];Rt&&Rt.finish_reason&&(ae=String(Rt.finish_reason));let Pt=Rt&&Rt.delta;if(!Pt)continue;Pt.content&&(P++,he.pushContent(Pt.content));let ns=Pt.reasoning_content!=null?Pt.reasoning_content:Pt.reasoning!=null?Pt.reasoning:Pt.thinking;if(typeof ns=="string"&&ns&&he.pushReasoning(ns),Pt.tool_calls)for(let Ze of Pt.tool_calls){let En;typeof Ze.index=="number"?En=Ze.index:Ze.id?(Q.has(Ze.id)||Q.set(Ze.id,te.size),En=Q.get(Ze.id)):En=te.size?Math.max.apply(null,Array.from(te.keys())):0;let Kn=te.get(En);Kn||(Kn={id:"",type:"function",function:{name:"",arguments:""}},te.set(En,Kn)),Ze.id&&(Kn.id=Ze.id,Q.has(Ze.id)||Q.set(Ze.id,En)),Ze.function&&Ze.function.name&&(Kn.function.name=Ze.function.name),Ze.function&&Ze.function.arguments!=null&&(Kn.function.arguments+=typeof Ze.function.arguments=="string"?Ze.function.arguments:JSON.stringify(Ze.function.arguments))}}}break}catch(oe){if(v)throw k("stream_timeout",{provider:r.provider.id,model:r.model.id,timeoutMs:T}),new Error("\u8BF7\u6C42\u8D85\u65F6\uFF08"+Math.round(T/1e3)+"s \u672A\u8FD4\u56DE\uFF09");let pe=bF(oe);if(w.isCancelled()||yt>0||B>=C||!pe)throw pe?new Error(kF(oe,r.provider,B)):oe;B++;let Ne=A[B-1]||A[A.length-1];k("stream_net_retry",{provider:r.provider.id,model:r.model.id,attempt:B,message:String(oe&&oe.message||"").slice(0,120),code:d_(oe),delayMs:Ne}),await new Promise(function(wt){setTimeout(wt,Ne)})}}}finally{g&&(clearTimeout(g),g=null)}he.end(),G=he.content,Ie=he.reasoning;let Dt=he.rawContent;Se=Array.from(te.keys()).sort((oe,pe)=>oe-pe).map(oe=>te.get(oe));let Et=r.provider.id+"::"+r.model.id,qe=Tv.get(Et)||{hash:"",tokens:0},Wn=qe.hash,Ns=!!Wn&&Wn===m,ms=Ns?qe.tokens:0,Be=Os.stats(K,t,ms);Tv.set(Et,{hash:m,tokens:Be.promptTokens});let ct={at:new Date().toISOString(),model:r.model.id,iter:Number(s.iter)||0,prefixHash:m,promptTokens:Be.promptTokens,cachedTokens:Be.cachedTokens,prefixTokens:Be.prefixTokens,prefixSource:Be.prefixSource,hit:Be.hit,coverage:Be.coverage};for(zo.push(ct);zo.length>vS;)zo.shift();return s.snapshot!==!1&&Ct&&(Ct.prefixHash=ct.prefixHash,Ct.promptTokens=ct.promptTokens,Ct.cachedTokens=ct.cachedTokens,Ct.prefixTokens=ct.prefixTokens,Ct.hit=ct.hit,Ct.coverage=ct.coverage),k("stream_done",{provider:r.provider.id,model:r.model.id,chars:G.length,reasoningChars:Ie.length,chunks:P,toolCalls:Se.map(oe=>oe.function.name),thinking:d||"none",inline:p,verbosity:s.verbosity||"none",prefixHash:m,promptTokens:Be.promptTokens,cachedTokens:Be.cachedTokens,completionTokens:Be.completionTokens,prefixTokens:Be.prefixTokens,hit:Be.hit,coverage:Be.coverage,finishReason:ae,usage:!!K}),K&&Be.cachedTokens===0&&Be.prefixTokens>0&&k("cache_miss_suspect",{prefixHash:m,prevHash:Wn,samePrefix:Ns,prefixTokens:Be.prefixTokens,promptTokens:Be.promptTokens}),{content:G,reasoning:Ie,rawContent:Dt,toolCalls:Se,target:r,usage:K,cache:Be,prefixHash:m,finishReason:ae,thinking:d}}function yh(t){let e=t&&t.model?Number(t.model.maxInputTokens):0;return isFinite(e)&&e>0?e:65536}function Qh(t,e,n){let s=t&&t.cache||{},r=Number(s.promptTokens)||0,o=Number(s.completionTokens)||0,i=Number(s.cachedTokens)||0,a=String(t&&t.content||""),l=r,c=o,u=!1;return l<=0&&(l=Oe.estimateTokens(Oe.charsOf(e),n),u=!0),c<=0&&a.length&&(c=Oe.estimateTokens(a.length,n),u=!0),{promptTokens:l,completionTokens:c,cachedTokens:i,estimated:u,detailsStripped:!!s.detailsStripped}}function Ka(t,e,n){let s=Array.isArray(t)?t:[],r=isFinite(Number(e))&&Number(e)>0?Number(e):65536,o=0,i=0,a=0,l=!1,c=!1;for(let f of s)f&&(o+=Number(f.promptTokens)||0,i+=Number(f.completionTokens)||0,a+=Number(f.cachedTokens)||0,f.estimated&&(l=!0),f.detailsStripped&&(c=!0));let u=null;for(let f of s)f&&!f.subagent&&(u=f);!u&&s.length&&(u=s[s.length-1]);let d=u?(Number(u.promptTokens)||0)+(Number(u.completionTokens)||0):0;return{requests:s.length,promptTokens:o,completionTokens:i,totalTokens:o+i,cachedTokens:a,hit:o>0?Number(Math.min(1,a/o).toFixed(3)):0,contextTokens:d,window:r,percent:r>0?Number(Math.min(1,d/r).toFixed(3)):0,estimated:l,subagentRequests:s.filter(function(f){return!!(f&&f.subagent)}).length,model:String(n||""),detailsStripped:c}}var Jv=new Set,xF=8,vF=8e3,SF=4;function _F(t,e){return!t||!e||e.estimated||Number(e.cachedTokens)>0||Number(e.requests)<xF||Number(e.contextTokens)<vF||Jv.has(t)||zo.filter(function(s){return Number(s.cachedTokens)===0&&Number(s.prefixTokens)>0}).length<SF?null:(Jv.add(t),e.detailsStripped?{text:O("ext.prefixHintStripped"),tip:O("ext.prefixHintStrippedTip",{n:Number(e.requests)||0})}:{text:O("ext.prefixHint"),tip:O("ext.prefixHintTip",{n:Number(e.requests)||0})})}var mr=D.join(lt.homedir(),".luban","usage"),Un="7d";function em(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("usage.record")}catch{}return t!==!1}function wh(t,e){if(!e||!em())return null;let n=t||{};try{let s=mt(n.modelKey),r=Ve.row({provider:s&&s.provider?s.provider.id:"",model:s&&s.model?s.model.id:String(e.model||""),modelKey:s?s.key:String(n.modelKey||""),mode:n.mode||"agent",source:n.source||"",session:n.session||""},e),o=Ve.append(mr,r);return o.ok?(k("usage_log",{model:r.modelKey,mode:r.mode,source:r.source,total:r.totalTokens,estimated:r.estimated,partial:r.partial,file:o.month}),yL(),r):(k("usage_log_failed",{message:o.error,model:r.modelKey}),null)}catch(s){return k("usage_log_failed",{message:String(s&&s.message||s)}),null}}function va(t){let e=Ve.rangeOf(t||Un),n=Ve.read(mr,e.from,e.to),s=Ve.aggregate(n.rows,e);return{type:"usage",range:{key:e.key,label:O("usage."+e.key),from:e.from,to:e.to,days:e.days},ranges:Ve.RANGES.map(function(r){return{key:r.key,label:O("usage."+r.key)}}),dir:mr,files:n.files,badLines:n.bad,record:em(),now:Date.now(),summary:s,rows:n.rows.slice(-50).map(function(r){return{ts:r.ts,at:r.at,day:r.day,model:r.model,provider:r.provider,mode:r.mode,source:r.source,requests:r.requests,promptTokens:r.promptTokens,completionTokens:r.completionTokens,totalTokens:r.totalTokens,cachedTokens:r.cachedTokens,estimated:!!r.estimated,partial:!!r.partial}})}}var Ya="\u4F60\u53EB Luban\uFF08\u9C81\u73ED\uFF09\uFF0C\u662F\u5D4C\u5728 VSCodium \u4FA7\u8FB9\u680F\u91CC\u7684\u7F16\u7801 agent\uFF0C\u5E95\u5C42\u6A21\u578B\u7531\u7528\u6237\u914D\u7F6E\u7684 provider \u51B3\u5B9A\uFF1B\u88AB\u95EE\u5230\u8EAB\u4EFD\u6216\u6A21\u578B\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u81EA\u79F0\u5176\u5B83\u4EA7\u54C1\u3002",f_=[Ya,"\u4F60\u53EF\u4EE5\u76F4\u63A5\u8BFB\u5199\u672C\u673A\u6587\u4EF6\uFF0C\u4E5F\u53EF\u4EE5\u6267\u884C shell \u547D\u4EE4\u3002","\u89C4\u5219\uFF1A","1. \u4FEE\u6539\u5DF2\u6709\u6587\u4EF6\u524D\u5148\u7528 read_file \u8BFB\u539F\u6587\uFF0C\u518D\u7528 replace_in_file \u505A\u5C40\u90E8\u66FF\u6362\uFF1B\u5B83\u5BB9\u5FCD\u884C\u5C3E\u4E0E\u7F29\u8FDB\u7684\u7A7A\u767D\u5DEE\u5F02\uFF0C\u4E0D\u5FC5\u4E3A\u4E86\u9010\u5B57\u8282\u4E00\u81F4\u53CD\u590D\u91CD\u8BFB\uFF1B\u65B0\u5EFA\u6216\u6574\u4F53\u91CD\u5199\u624D\u7528 write_file\u3002\u8DE8\u591A\u4E2A\u6587\u4EF6\u7684\u91CD\u6784 / \u6279\u91CF\u6539\u540D / \u4E00\u6B21\u6539\u591A\u5904\uFF0C\u7528 apply_patch\uFF08\u4E00\u6B21\u63D0\u4EA4\u591A\u6587\u4EF6\u589E / \u6539 / \u5220\uFF0C\u5168\u6210\u529F\u624D\u843D\u76D8\uFF0C\u4EFB\u4E00\u6587\u4EF6\u6821\u9A8C\u5931\u8D25\u5219\u6574\u4F53\u4E0D\u5199\uFF09\uFF1B\u5355\u6587\u4EF6\u5220\u9664\u7528 delete_file\uFF0C\u79FB\u52A8 / \u91CD\u547D\u540D\u7528 move_file\u3002\u6539\u5B8C\u4EE3\u7801\u540E\u53EF\u7528 read_lints \u8BFB\u8BED\u8A00\u670D\u52A1\u5668\u62A5\u7684 error / warning\uFF0C\u81EA\u5DF1\u53D1\u73B0\u7C7B\u578B\u9519 / \u8BED\u6CD5\u9519\uFF0C\u800C\u4E0D\u662F\u7B49\u7528\u6237\u8D34\u62A5\u9519\u3002","2. \u8DEF\u5F84\u9ED8\u8BA4\u5199\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u7684\u8DEF\u5F84\uFF1B\u5DE5\u4F5C\u533A\u4E4B\u5916\u7684\u6587\u4EF6\u7528\u7EDD\u5BF9\u8DEF\u5F84\uFF08../ \u8D8A\u754C\u4E5F\u53EF\u4EE5\uFF09\uFF0C\u53D7 luban.fs.allowOutsideWorkspace \u63A7\u5236\u3002","3. \u7528 run_command \u9A8C\u8BC1\u81EA\u5DF1\u5199\u7684\u4EE3\u7801\uFF08\u5982 node xxx.js\u3001npx tsc --noEmit\uFF09\uFF0C\u628A\u771F\u5B9E\u8F93\u51FA\u4F5C\u4E3A\u7ED3\u8BBA\u4F9D\u636E\uFF1B\u4E0D\u8981\u9760\u731C\u8BF4\u201C\u5E94\u8BE5\u80FD\u8DD1\u201D\u3002\u9884\u8BA1\u8D85\u8FC7\u4E00\u5206\u949F\u7684\u6784\u5EFA/\u6574\u4ED3\u6D4B\u8BD5\u7528 run_command_start\uFF0C\u518D run_command_poll \u770B\u8FDB\u5EA6\uFF1B\u53D6\u6D88\u7528 run_command_stop\u3002\u77ED\u547D\u4EE4\u4E0D\u8981 start\u3002","4. \u4E00\u6B21\u53EA\u505A\u5FC5\u8981\u7684\u5DE5\u5177\u8C03\u7528\uFF0C\u4E0D\u8981\u53CD\u590D\u8BFB\u540C\u4E00\u4E2A\u6587\u4EF6\u3002","5. \u5B8C\u6210\u540E\u7528\u4E2D\u6587\u7B80\u77ED\u6C47\u62A5\uFF1A\u6539\u4E86\u54EA\u4E9B\u6587\u4EF6\u3001\u505A\u4E86\u4EC0\u4E48\u3001\u9A8C\u8BC1\u7ED3\u679C\u3002\u4E0D\u8981\u5728\u56DE\u590D\u91CC\u91CD\u590D\u8D34\u5B8C\u6574\u4EE3\u7801\u3002","6. \u82E5\u7528\u6237\u6D88\u606F\u672B\u5C3E\u5E26\u300C\u5F15\u7528\u7684\u4E0A\u4E0B\u6587\u300D\uFF08[ref N] \u5757\uFF09\u6216\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u5757\uFF1A\u5B8C\u6574\u5757\u76F4\u63A5\u4F7F\u7528\u3001\u4E0D\u8981\u518D read_file \u91CD\u590D\u8BFB\u53D6\uFF1B\u82E5\u6807\u6CE8\u300C\u7247\u6BB5 / \u622A\u65AD\u300D\u6216\u63D0\u793A\u5206\u6BB5\u7EED\u8BFB\uFF0C\u7528 read_file \u7684 startLine/maxLines \u7EED\u8BFB\uFF0C\u4E0D\u8981\u6574\u6587\u4EF6\u91CD\u8BFB\u3002\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u662F\u7528\u6237\u6B64\u523B\u5728\u7F16\u8F91\u5668\u91CC\u770B\u7684\u4EE3\u7801\uFF1A\u6709\u9009\u533A\u65F6\u53EA\u662F\u9009\u533A\uFF0C\u65E0\u9009\u533A\u65F6\u662F\u5149\u6807\u9644\u8FD1\u7684\u4E00\u6BB5\uFF08\u6807\u9898\u91CC\u4F1A\u5199\u6E05\u884C\u53F7\u8303\u56F4\u548C\u603B\u884C\u6570\uFF0C\u53EF\u80FD\u4E0D\u662F\u6574\u4EFD\u6587\u4EF6\uFF09\uFF0C\u9700\u8981\u6587\u4EF6\u5176\u5B83\u90E8\u5206\u65F6\u518D read_file\u3002\u5B83\u53EA\u662F\u80CC\u666F\uFF0C\u4E0D\u7B49\u4E8E\u672C\u6761\u8BF7\u6C42\u7684\u5BF9\u8C61\uFF1A\u7528\u6237\u6CA1\u70B9\u540D\u6587\u4EF6\u65F6\uFF0C\u4EE5\u672C\u4F1A\u8BDD\u4E0A\u6587\uFF08\u7528\u6237\u521A\u8BF4\u7684\u8BDD\u3001\u4E0A\u4E00\u6761\u56DE\u7B54\uFF09\u4E3A\u51C6\uFF0C\u4E0D\u8981\u62FF\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u5F53\u9ED8\u8BA4\u5BF9\u8C61\u3002",'7. \u9700\u8981\u627E\u4EE3\u7801\u65F6\u6309\u76F2\u533A\u9009\u5DE5\u5177\uFF1A\u6309\u5185\u5BB9\u5173\u952E\u8BCD / \u6807\u8BC6\u7B26\u627E\u7528 search_code\uFF08BM25 \u8BCD\u6CD5\u7D22\u5F15\uFF0C\u6700\u7701 token\uFF09\uFF1B\u6309\u6587\u4EF6\u540D\u627E\u6587\u4EF6\u7528 glob\uFF08\u5982 glob({ patterns: ["**/*config*"] })\uFF09\uFF1B\u8981\u6B63\u5219 / \u7CBE\u786E\u4E32\u5339\u914D\u7528 grep\uFF08\u5982 grep({ pattern: "TODO|FIXME" })\uFF0C\u6B63\u5219\u6309 JS RegExp \u8BED\u6CD5\uFF0C\u53C2\u6570\u662F JSON \u5B57\u7B26\u4E32\u3001\u53CD\u659C\u6760\u8981\u518D\u8F6C\u4E49\u4E00\u5C42\uFF0C\u5982 "foo\\\\(\\\\d+\\\\)"\uFF09\u3002\u5B9A\u4F4D\u5230\u6587\u4EF6\u4E0E\u884C\u53F7\u540E\u518D read_file \u7CBE\u8BFB\uFF0C\u4E0D\u8981\u7528 list_files \u4E00\u5C42\u5C42\u5168\u91CF\u626B\u3002\u5927\u76EE\u5F55\u53EF\u4F20 dir \u9650\u5B9A\u524D\u7F00\uFF08grep / glob \u7684\u7ED3\u679C\u8DEF\u5F84\u4ECD\u4EE5\u5DE5\u4F5C\u76EE\u5F55\u4E3A\u57FA\u51C6\uFF09\u3002',"8. \u7528\u6237\u6D88\u606F\u91CC\u7684\u76EE\u5F55\u5F15\u7528\u82E5\u51FA\u73B0\u300C\u5206\u6279\u5904\u7406\u300D\u6E05\u5355\u6216\u5927\u91CF\u300C\u672A\u6CE8\u5165\u5168\u6587\u300D\uFF1A\u672C\u8F6E\u53EA\u6311\u6700\u76F8\u5173\u7684 1\u20133 \u6279\uFF0C\u6BCF\u6279 search_code({ query, dir }) \u540E\u518D\u5C11\u91CF read_file\uFF1B\u7981\u6B62\u5BF9\u6574\u68F5\u6811\u4E32\u884C read_file\u3002\u6536\u5C3E\u5199\u6E05\u5DF2\u5B8C\u6210 / \u672A\u5904\u7406\u6279\u6B21\uFF0C\u4FBF\u4E8E\u7528\u6237\u4E0B\u4E00\u6761\u7EED\u8DD1\u3002","9. \u7528\u6237\u6D88\u606F\u91CC\u82E5\u5E26\u300C\u5F53\u524D todo\u300D\u6E05\u5355\uFF0C\u6216\u4EFB\u52A1\u53EF\u62C6\u6210\u591A\u6B65\uFF1A\u7528 todo_write \u8DDF\u8E2A\u3002\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A in_progress\uFF1B\u5B8C\u6210\u4E00\u9879\u518D\u6807\u4E0B\u4E00\u9879\u4E3A in_progress\uFF1B\u5168\u90E8 completed / cancelled \u540E\u518D\u6536\u5C3E\u6C47\u62A5\u3002merge \u9ED8\u8BA4 true\uFF08\u6309 id \u5408\u5E76\uFF09\u3002","10. \u4EFB\u52A1\u51FA\u73B0\u5B9E\u8D28\u5206\u53C9\u3001\u9700\u8981\u4EBA\u62CD\u677F\u65F6\uFF0C\u5148\u7528 ask_question \u7ED9\u51FA\u53EF\u70B9\u9009\u9879\u7B49\u7528\u6237\u9009\u62E9\uFF1B\u4E0D\u8981\u53EA\u628A\u5F00\u653E\u95EE\u9898\u5199\u8FDB\u957F\u6587\u672B\u5C3E\u7B49\u7528\u6237\u6253\u5B57\u3002\u6709\u660E\u663E\u66F4\u7A33\u59A5\u7684\u8DEF\u5F84\u65F6\u7ED9\u5BF9\u5E94 option \u6807 recommended: true\uFF08\u9762\u677F\u663E\u793A\u300C\u63A8\u8350\u300D\uFF0C\u4E0D\u9884\u9009\uFF09\u3002"],TF="11. \u9700\u8981\u5916\u90E8\u6700\u65B0\u4FE1\u606F\uFF08\u7248\u672C\u53F7\u3001\u5B98\u65B9\u6587\u6863\u3001\u62A5\u9519\u539F\u56E0\uFF09\u65F6\u53EF\u8C03\u7528 web_search / web_fetch \u53EA\u8BFB\u8054\u7F51\uFF1B\u5F15\u7528\u641C\u7D22\u7ED3\u679C\u65F6\u6807\u6CE8 [n]\uFF0C\u4E0D\u8981\u628A\u641C\u7D22\u7ED3\u679C\u5F53\u6210\u6587\u4EF6\u5185\u5BB9\u3002",p_=["12. \u7CFB\u7EDF\u63D0\u793A\u91CC\u5217\u51FA\u4E86\u300C\u53EF\u7528\u6280\u80FD\u300D\u65F6\uFF0C\u771F\u6B63\u8981\u7528\u67D0\u4E2A\u6280\u80FD\u524D\u5148\u8C03\u7528 read_skill \u8BFB\u5B83\u7684 SKILL.md \u5168\u6587\uFF0C\u518D\u6309\u91CC\u9762\u7684\u6B65\u9AA4\u505A\uFF1B\u4E0D\u8981\u51ED\u6280\u80FD\u540D\u731C\u6D41\u7A0B\uFF0C\u4E5F\u4E0D\u8981\u4E00\u6B21\u8BFB\u591A\u4E2A\u7528\u4E0D\u4E0A\u7684\u6280\u80FD\u3002","13. \u540D\u5B57\u4EE5 mcp__ \u5F00\u5934\u7684\u662F\u672C\u673A MCP server \u63D0\u4F9B\u7684\u5916\u90E8\u5DE5\u5177\uFF08mcp__<server>__<tool>\uFF09\uFF0C\u53C2\u6570\u6309\u5404\u81EA schema \u4F20\uFF1B\u5DE5\u4F5C\u533A\u6587\u4EF6\u7684\u8BFB\u5199\u4ECD\u4F18\u5148\u7528\u5185\u7F6E list_files / search_code / read_file / write_file / replace_in_file\u3002MCP \u5DE5\u5177\u600E\u4E48\u7528\u4EE5\u5176 schema \u4E3A\u51C6\uFF0C\u4E0D\u8981\u4E3A\u4E86\u731C\u53C2\u6570\u53BB node_modules / npm \u7F13\u5B58 / .m2 \u91CC\u7FFB server \u7684\u5B9E\u73B0\uFF08\u90A3\u4E9B\u662F\u5B89\u88C5\u7F13\u5B58\uFF0C\u4E0D\u662F\u9879\u76EE\u4EE3\u7801\uFF09\uFF1B\u88AB\u62D2\u7EDD\u6216\u62FF\u4E0D\u51C6\u65F6\u7528 ask_question \u95EE\u7528\u6237\u3002","14. \u5BF9\u8BDD\u5386\u53F2\u91CC\u53EF\u80FD\u5E26\u6709\u66F4\u65E9\u8F6E\u6B21\u7684\u63D0\u95EE\u4E0E\u56DE\u7B54\uFF1A\u8FFD\u95EE\u91CC\u7684\u300C\u5B83 / \u521A\u624D / \u90A3\u4E2A\u6587\u4EF6\u300D\u5148\u7ED3\u5408\u5386\u53F2\u7406\u89E3\u3002\u5386\u53F2\u91CC\u7684\u4EE3\u7801\u6539\u52A8\u53EF\u80FD\u5DF2\u88AB\u64A4\u9500\u6216\u518D\u6B21\u4FEE\u6539\uFF0C\u9700\u8981\u786E\u8BA4\u73B0\u72B6\u65F6\u91CD\u65B0 read_file / run_command\uFF0C\u4E0D\u8981\u628A\u5386\u53F2\u5F53\u6210\u5F53\u524D\u78C1\u76D8\u72B6\u6001\u3002","15. \u5DE5\u5177\u7ED3\u679C\u6216\u66F4\u65E9\u8F6E\u6B21\u82E5\u88AB\u538B\u7F29\u6210\u300C\u5DF2\u7701\u7565\u2026\u5B8C\u6574\u7ED3\u679C id=sp_\u2026\u300D\u6216\u7528\u6237\u6D88\u606F\u91CC\u51FA\u73B0\u300C\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\u300D\uFF1A\u9700\u8981\u539F\u6587\u65F6\u7528 read_spill \u6309 id \u53D6\u56DE\uFF1B\u6458\u8981\u4E0D\u591F\u518D\u8BFB\u6587\u4EF6\u6216\u91CD\u8DD1\u547D\u4EE4\uFF0C\u4E0D\u8981\u81C6\u9020\u88AB\u7701\u7565\u7684\u5185\u5BB9\u3002","16. \u53D1\u5E03 / \u63A8\u9001 / \u90E8\u7F72 / \u5220\u9664\u8FDC\u7AEF\u8D44\u6E90\u8FD9\u7C7B\u5BF9\u5916\u90E8\u6709\u5F71\u54CD\u3001\u4E0D\u6613\u64A4\u9500\u7684\u64CD\u4F5C\uFF1A\u6267\u884C\u524D\u5148\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u8981\u64CD\u4F5C\u7684\u5BF9\u8C61\uFF1B\u7528\u6237\u53EA\u8BF4\u300C\u53D1\u5E03\u5230 xx\u300D\u800C\u6CA1\u70B9\u540D\u5185\u5BB9\u65F6\uFF0C\u5148\u7528 ask_question \u786E\u8BA4\u5BF9\u8C61\uFF0C\u4E0D\u8981\u628A\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u6216\u5386\u53F2\u91CC\u78B0\u5DE7\u76F8\u5173\u7684\u6587\u4EF6\u5F53\u6210\u9ED8\u8BA4\u5BF9\u8C61\u3002","17. \u540D\u5B57\u4EE5 pl__ \u5F00\u5934\u7684\u662F\u672C\u673A\u63D2\u4EF6\u63D0\u4F9B\u7684\u5DE5\u5177\uFF08pl__<plugin>__<tool>\uFF0C\u6765\u81EA\u9879\u76EE .luban/plugins \u6216\u5BB6\u76EE\u5F55\u540C\u540D\u76EE\u5F55\uFF09\uFF1A\u53EA\u5728\u7528\u6237\u542F\u7528\u672C\u5730\u63D2\u4EF6\u540E\u624D\u51FA\u73B0\uFF0C\u53C2\u6570\u6309\u5404\u81EA schema \u4F20\uFF1B\u540C\u6837\u7684\u6D3B\u80FD\u7528\u5185\u7F6E\u5DE5\u5177\u505A\u5B8C\u5C31\u7528\u5185\u7F6E\u7684\uFF0C\u63D2\u4EF6\u53EA\u8865\u5185\u7F6E\u6CA1\u6709\u7684\u80FD\u529B\u3002Plan \u6A21\u5F0F\u53EA\u653E\u884C\u63D2\u4EF6\u81EA\u62A5\u53EA\u8BFB\u7684\u5DE5\u5177\uFF0C\u786C\u8C03\u975E\u53EA\u8BFB\u7684\u4F1A\u88AB\u62D2\u7EDD \u2014\u2014 \u522B\u91CD\u8BD5\uFF0C\u7528 ask_question \u8BA9\u7528\u6237\u5207\u5230 Agent \u6A21\u5F0F\u3002"],Cc=f_.concat([TF],p_).join(`
|
|
1081
|
+
\uFF08\u672A\u8BFB\u5230\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF1A\u8BE5\u6587\u4EF6\u53EF\u80FD\u8FD8\u6CA1\u88AB\u5206\u6790\uFF08\u521A\u65B0\u5EFA / \u672A\u5728\u7F16\u8F91\u5668\u6253\u5F00\uFF09\uFF0C\u9700\u8981\u786E\u8BA4\u8BED\u6CD5/\u7C7B\u578B\u65F6\u7528 read_lints \u590D\u67E5\uFF09`;function oh(t){try{return(x.workspace.textDocuments||[]).some(function(n){return n&&n.uri&&n.uri.scheme==="file"&&n.uri.fsPath===t})}catch{return!1}}async function Uv(t,e){if(!XS())return"";try{let n=await YS([t]),s=Is.summarize(n);return!s.total||!s.error&&!s.warning?e?hh:"":ZS+`
|
|
1082
|
+
`+Is.formatLints(n,{maxDiags:10})}catch{return e?hh:""}}async function oF(t){for(let e=t.length-1;e>=0;e--){let n=t[e];try{n.kind==="add"?await x.workspace.fs.delete(x.Uri.file(n.abs),{useTrash:!0}):await hr(n.abs,n.before||"")}catch(s){k("apply_patch_rollback_failed",{path:pt(n.abs),error:s.message})}}}function ls(t,e,n,s,r,o){let i=String(n??"");if(Kc>0||o){let l=de.get(t);return l&&(l.baseline=i,l.hunks=[],Hc(t)),vn.delete(t)&&e_(t),0}let a=de.get(t);return vn.delete(t),a||(a={abs:t,relPath:pt(t),baseline:s?"":String(e??""),isNew:!!s,hunks:[],stats:{add:0,del:0,hunks:0},sessionId:r||""},de.set(t,a)),r&&(a.sessionId=r),a.hunks=kn.computeHunks(a.baseline,i),a.stats=kn.stats(a.hunks),a.hunks.length?(br(),n_(t),a.hunks.length):(de.delete(t),br(),a.hunks.length)}function iF(t,e,n){for(vn.delete(t),vn.set(t,{before:String(e??""),title:n,at:Date.now()});vn.size>nF;){let s=vn.keys().next();if(!s||s.done)break;vn.delete(s.value)}}function QS(t){let e=[];try{for(let n of x.window.tabGroups.all)for(let s of n.tabs){let r=s.input;if(!r||!r.modified||!r.original)continue;let o=r.modified,i=r.original;(o.scheme==="file"&&o.fsPath===t||o.scheme==="luban-after"&&o.path===t||i.scheme==="luban-before"&&i.path===t)&&e.push(s)}}catch{}return e}async function e_(t){for(let e of QS(t))try{await x.window.tabGroups.close(e,!0)}catch{}}function Hc(t,e){let n=de.get(t),s=typeof e=="string"&&!!n,r=s?QS(t):[];s&&r.length?(iF(t,e,O("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del})),de.delete(t),dF(t)):(de.delete(t),n&&e_(t)),nn.delete(t),br()}var Wv=Promise.resolve(),ih=0,Kv=!1,Hv=!1,nn=new Map,aF=40;function lF(t){for(nn.delete(t),nn.set(t,Date.now());nn.size>aF;){let e=nn.keys().next();if(!e||e.done)break;nn.delete(e.value)}}function xa(){let t=ye&&ye.webview?ye.webview:null;return t?si.get(t)===!0:!1}function t_(){if(!nn.size||xa())return;let t=Array.from(nn.keys()).pop();nn.clear(),!(!t||!de.has(t)||!tu())&&(k("review_auto_diff_deferred_open",{path:pt(t)}),n_(t))}function n_(t){if(!tu()||!de.has(t))return;let e=ye&&ye.webview?ye.webview:null;if(e&&si.get(e)===!0){lF(t);return}ih||(Kv=e?Fa.get(e)===!0:!1,Hv=e?si.get(e)===!0:!1);let n=Kv,s=Hv;ih++,Wv=Wv.then(async function(){try{await Yh(t,{preview:!0,preserveFocus:!0})}catch(r){k("review_auto_diff_failed",{path:pt(t),error:r.message})}if(n&&!s){try{await x.commands.executeCommand("workbench.view.extension.luban")}catch(r){k("review_auto_diff_refocus_failed",{path:pt(t),error:r.message})}try{let r=ye&&ye.webview;r&&setTimeout(function(){try{r.postMessage({type:"refocus_input"})}catch{}},120)}catch{}}ih--})}function mh(){let t=[];for(let e of de.values()){let n=e.hunks.map(function(s){let r=s.lines.length>240;return{id:s.id,header:s.header,add:s.add,del:s.del,lines:(r?s.lines.slice(0,240):s.lines).map(function(o){return{t:o.t,s:o.s}}),truncated:r}});t.push({path:e.relPath,isNew:e.isNew,add:e.stats.add,del:e.stats.del,hunks:n,sessionId:e.sessionId||""})}return t}function qa(){return{type:"review",files:mh(),at:Date.now()}}async function cF(t){try{await hr(t,"")}catch{}try{for(let e of x.window.tabGroups.all)for(let n of e.tabs){let s=n.input;if(!s)continue;let r=s.uri,o=s.modified;(r&&r.scheme==="file"&&r.fsPath===t||o&&o.scheme==="file"&&o.fsPath===t)&&await x.window.tabGroups.close(n,!0)}}catch{}try{await x.workspace.fs.delete(x.Uri.file(t),{useTrash:!0})}catch{}}async function Gv(t,e,n){if(e.isNew&&n==="")return await cF(t),de.delete(t),br(),{ok:!0,deleted:!0,hunks:0};await hr(t,n);let s=kn.computeHunks(e.baseline,n);return e.hunks=s,e.stats=kn.stats(s),s.length?br():Hc(t),{ok:!0,hunks:s.length}}function uF(t){return{before:x.Uri.from({scheme:"luban-before",path:t}),after:I.existsSync(t)?x.Uri.file(t):x.Uri.from({scheme:"luban-after",path:t})}}async function s_(t,e,n){let s=n||{},r=uF(t);await x.commands.executeCommand("vscode.diff",r.before,r.after,e,{preview:s.preview===!0,preserveFocus:s.preserveFocus===!0})}async function Yh(t,e){let n=de.get(t);if(!n)throw new Error(O("ext.noPending",{path:pt(t)}));let s=e||{};Xh.add(t);let r=O("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del});mr(),await s_(t,r,s),mr()}async function dF(t){let e=vn.get(t);if(e){Xh.add(t);try{await s_(t,e.title,{preview:!1,preserveFocus:!0})}catch(n){k("review_freeze_diff_failed",{path:pt(t),error:n.message})}try{mr()}catch{}}}async function Ba(t,e,n,s){let r=R();if(t==="accept_all"||t==="reject_all"){let c=t==="accept_all"?"accept_file":"reject_file",u=de.size;for(let d of Array.from(de.keys())){let f=de.get(d);s&&f&&f.sessionId&&f.sessionId!==s||await Ba(c,d,"")}return{ok:!0,files:u,hunks:0}}let o=tt(e,r,!0);if(t==="open_diff")return nn.delete(o),await Yh(o),{ok:!0};let i=de.get(o);if(!i)return{ok:!1,error:O("ext.noPending",{path:e})};let a=no(o);if(t==="accept_file"){let c=i.baseline;return i.baseline=a,i.hunks=[],Hc(o,c),{ok:!0,hunks:0,files:de.size}}if(t==="reject_file")return await Gv(o,i,i.baseline);i.hunks=kn.computeHunks(i.baseline,a);let l=i.hunks.find(function(c){return c.id===n});if(!l)return i.stats=kn.stats(i.hunks),br(),{ok:!1,error:O("ext.hunkGone",{hunk:n})};if(t==="accept_hunk"){let c=i.baseline;return i.baseline=kn.applyHunkToBaseline(i.baseline,l),i.hunks=kn.computeHunks(i.baseline,a),i.stats=kn.stats(i.hunks),i.hunks.length?br():Hc(o,c),{ok:!0,hunks:i.hunks.length}}return t==="reject_hunk"?await Gv(o,i,kn.revertHunkText(a,l)):{ok:!1,error:O("ext.unknownAction",{action:t})}}function r_(){$a||($a=x.window.createTextEditorDecorationType({isWholeLine:!0,backgroundColor:new x.ThemeColor("diffEditor.insertedLineBackground"),overviewRulerColor:new x.ThemeColor("editorOverviewRuler.addedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}),Wc=x.window.createTextEditorDecorationType({backgroundColor:new x.ThemeColor("diffEditor.removedLineBackground"),fontStyle:"italic",overviewRulerColor:new x.ThemeColor("editorOverviewRuler.deletedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}))}function o_(t,e){let n=[],s=[],r=[],o=Math.max(0,t.lineCount-1);for(let i of e.hunks){let a=kn.hunkRanges(i);for(let l of a.add){let c=Math.max(0,Math.min(l.start,o)),u=Math.max(c,Math.min(l.start+l.count-1,o));n.push({range:new x.Range(c,0,u,t.lineAt(u).text.length)}),r.push({kind:"add",from:c+1,to:u+1,lines:l.count})}for(let l of a.del){let c=l.at>0?Math.min(l.at-1,o):0,u=l.at>0?t.lineAt(c).range.end:new x.Position(0,0),d=l.lines.slice(0,3).join(" | ");s.push({range:new x.Range(u,u),renderOptions:{after:{contentText:O("ext.removedGhost",{n:l.lines.length,text:d.slice(0,100)})}}}),r.push({kind:"del",atLine:c+1,lines:l.lines.length,text:l.lines.slice(0,3).join(" | ").slice(0,100)})}}return{added:n,removed:s,spans:r}}function Zh(){r_();for(let t of x.window.visibleTextEditors){let e=t.document,n=e.uri.scheme==="file"?de.get(e.uri.fsPath):null;if(!n){t.setDecorations($a,[]),t.setDecorations(Wc,[]);continue}let s=o_(e,n);t.setDecorations($a,s.added),t.setDecorations(Wc,s.removed)}}function fF(t){if(!xn)return[];let e=x.window.activeTextEditor;if(!e||e.document.uri.fsPath!==t.uri.fsPath)return[];let n=e.selection;if(!n||n.isEmpty)return[];let s=Math.max(0,Math.min(n.start.line,t.lineCount-1)),r=new x.Range(s,0,s,0);return[new x.CodeLens(r,{title:O("ext.selLensChat"),command:"luban.addSelectionToChat"}),new x.CodeLens(r,{title:O("ext.selLensNewChat"),command:"luban.addSelectionToNewChat"})]}function pF(t){if(!xn)return[];let e=de.get(t.uri.fsPath);if(!e||!e.hunks.length)return[];let n=Math.max(0,t.lineCount-1),s=[];for(let o of e.hunks){let i=Math.max(0,Math.min(o.newStart,n)),a=new x.Range(i,0,i,0);s.push(new x.CodeLens(a,{title:O("ext.keepHunk",{add:o.add,del:o.del}),command:"luban.acceptHunk",arguments:[{path:e.abs,hunk:o.id}]})),s.push(new x.CodeLens(a,{title:O("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:o.id}]}))}if(Wa(Ua())===t.uri.fsPath)return s;let r=new x.Range(0,0,0,0);return s.push(new x.CodeLens(r,{title:O("ext.viewDiff"),command:"luban.openDiff",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:O("ext.keepFile",{add:e.stats.add,del:e.stats.del}),command:"luban.acceptFile",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:O("ext.revertFile"),command:"luban.rejectFile",arguments:[{path:e.abs}]})),s}function hF(t){if(!xn)return[];let e=de.get(t.uri.path);if(!e||!e.hunks.length)return[];let n=Math.max(0,t.lineCount-1),s=[];for(let r of e.hunks){let o=Math.max(0,Math.min(r.oldStart,n)),i=new x.Range(o,0,o,0);s.push(new x.CodeLens(i,{title:O("ext.keepHunk",{add:r.add,del:r.del}),command:"luban.acceptHunk",arguments:[{path:e.abs,hunk:r.id}]})),s.push(new x.CodeLens(i,{title:O("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:r.id}]}))}return s}function Ua(){try{return x.window.tabGroups.activeTabGroup.activeTab}catch{return null}}function Wa(t){let e=t&&t.input;if(!e)return"";let n=e.modified,s=e.original;if(n&&s){if(n.scheme==="file"&&de.has(n.fsPath))return n.fsPath;if(s.scheme==="luban-before"&&de.has(s.path))return s.path}return""}function mF(t){let e=Wa(t);if(e)return e;let n=t&&t.input;return n&&n.uri&&n.uri.scheme==="file"&&de.has(n.uri.fsPath)?n.uri.fsPath:""}function mr(){let t=!1;try{t=!!Wa(Ua())}catch{t=!1}let e=function(n,s){try{Promise.resolve(x.commands.executeCommand("setContext",n,s)).catch(function(){})}catch{}};e("luban.pendingReview",cs()),e("luban.reviewDiffActive",t)}function br(){Bv++;try{if(Ho){let t=new Set(Array.from(de.keys()).concat(Array.from(Xh),Array.from(vn.keys())));for(let e of t)Ho.fire(x.Uri.from({scheme:"luban-before",path:e}))}}catch{}try{xn&&xn.fire()}catch{}try{Zh()}catch{}try{mr()}catch{}try{typeof Re=="function"?Re(qa()):vt&&vt.postMessage(qa())}catch{}k("review_state",{files:de.size,hunks:cs(),seq:Bv})}function gF(t){r_(),Ho=new x.EventEmitter,xn=new x.EventEmitter,t.subscriptions.push($a,Wc,Ho,xn),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-before",{onDidChange:Ho.event,provideTextDocumentContent:function(r){let o=de.get(r.path);if(o)return o.baseline;let i=vn.get(r.path);return i?i.before:""}})),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-after",{onDidChange:Ho.event,provideTextDocumentContent:function(r){try{return I.existsSync(r.path)?no(r.path):""}catch{return""}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"file"},{onDidChangeCodeLenses:xn.event,provideCodeLenses:function(r){try{return pF(r).concat(fF(r))}catch{return[]}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"luban-before"},{onDidChangeCodeLenses:xn.event,provideCodeLenses:function(r){try{return hF(r)}catch{return[]}}}));function e(r,o){if(r&&typeof r.fsPath=="string"){let l=r.scheme==="file"?r.fsPath:String(r.path||"");if(l&&de.has(l))return{path:l,hunk:o||""}}else if(r&&r.path)return r;let i=mF(Ua());if(i)return{path:i,hunk:o||""};let a=x.window.activeTextEditor;return a&&a.document.uri.scheme==="file"?{path:a.document.uri.fsPath,hunk:o||""}:null}function n(r,o){return async function(i){let a=e(i,o?i&&i.hunk:"");if(!a)return{ok:!1,error:O("ext.noReviewFile")};let l;try{l=await Ba(r,a.path,o?a.hunk:"")}catch(c){l={ok:!1,error:c.message}}return k("review_action",{action:r,path:pt(s(a.path)),hunk:a.hunk||"",ok:!!l.ok,error:l.error}),l.ok||x.window.showWarningMessage(O("ext.reviewWarn",{msg:l.error||O("ext.actionFailed")})),l}}function s(r){try{return tt(r,R(),!0)}catch{return r}}t.subscriptions.push(x.commands.registerCommand("luban.openDiff",n("open_diff",!1)),x.commands.registerCommand("luban.acceptHunk",n("accept_hunk",!0)),x.commands.registerCommand("luban.rejectHunk",n("reject_hunk",!0)),x.commands.registerCommand("luban.acceptFile",n("accept_file",!1)),x.commands.registerCommand("luban.rejectFile",n("reject_file",!1)),x.commands.registerCommand("luban.reviewAll",n("accept_all",!1)),x.commands.registerCommand("luban.revertAll",n("reject_all",!1)),x.commands.registerCommand("luban.diffAccept",n("accept_file",!1)),x.commands.registerCommand("luban.diffReject",n("reject_file",!1)),x.window.onDidChangeVisibleTextEditors(function(){try{Zh()}catch{}}),x.window.tabGroups.onDidChangeTabs(function(){try{mr()}catch{}}),x.window.tabGroups.onDidChangeTabGroups(function(){try{mr()}catch{}}),x.window.onDidChangeActiveTextEditor(function(){try{mr()}catch{}}),x.window.onDidChangeTextEditorSelection(function(){try{xn&&xn.fire()}catch{}}),x.workspace.onDidChangeTextDocument(function(r){let o=r.document.uri.scheme==="file"?r.document.uri.fsPath:"",i=de.get(o);if(!i)return;let a=kn.computeHunks(i.baseline,r.document.getText()),l=function(c){return c.map(function(u){return u.header+u.add+":"+u.del}).join("|")};l(a)!==l(i.hunks)&&(i.hunks=a,i.stats=kn.stats(a),a.length||de.delete(o),br())})),mr()}function i_(t,e){if(Array.isArray(t)){let n="",s=0;for(let o of t)!o||typeof o!="object"||(o.type==="text"?n+=String(o.text==null?"":o.text):o.type==="image_url"&&s++);return(s?"[\u56FE\u7247 \xD7"+s+"] ":"")+n.slice(0,e)}return String(t??"").slice(0,e)}var a_={model:1,messages:1,stream:1,tools:1,tool_choice:1,max_tokens:1,stream_options:1},zv=2e3,Vv=Object.create(null);function An(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function yF(t,e){let n=[],s=function(r,o,i){for(let a of Object.keys(o)){if(a==="__proto__"||a==="constructor"||a==="prototype"||i===0&&a_[a])continue;let l=o[a];An(l)&&An(r[a])?s(r[a],l,i+1):r[a]=l,i===0&&n.push(a)}};return s(t,e,0),n}function l_(t,e){let n=t&&t.thinking;if(!An(n))return null;let s=function(o){return An(n[o])},r=e==="on"||e==="off"?e:String(n.default||"");return r!=="on"&&r!=="off"&&(r=s("off")?"off":s("on")?"on":""),!r||!s(r)?null:{mode:r,tier:n[r]}}function wF(t){let e=t&&t.thinking;if(!An(e))return null;let n=["on","off"].filter(function(r){return An(e[r])});if(!n.length)return null;let s=l_(t,"");return{default:s?s.mode:n[0],tiers:n}}var c_=ch.DEFAULT_MAX_VERSION;function u_(){let t=String(process.env.LUBAN_TLS_MAX_VERSION||"").trim().toLowerCase();if(t==="1.2"||t==="tlsv1.2"||t==="tls1.2")return"1.2";if(t==="auto"||t==="1.3"||t==="tlsv1.3")return"auto";let e="auto";try{e=String(x.workspace.getConfiguration("luban").get("net.tlsMaxVersion")||"auto")}catch{e="auto"}return e=e.trim().toLowerCase(),e==="1.2"?"1.2":"auto"}function gh(t){let e=u_(),n=e==="1.2"?"TLSv1.2":c_,s=!1;try{s=ch.DEFAULT_MAX_VERSION!==n,ch.DEFAULT_MAX_VERSION=n}catch{}return s&&k("net_tls_max_version",{mode:e,maxVersion:n,reason:t||""}),e}function d_(t){let e=t;for(let n=0;n<4&&e;n++){if(e.code)return String(e.code);e=e.cause}return""}function bF(t){if(!t||t.name==="AbortError")return!1;let e=[],n=t;for(let r=0;r<4&&n;r++)n.code&&e.push(String(n.code)),n.message&&e.push(String(n.message)),n=n.cause;let s=e.join(" ").toLowerCase();return/cert|self.signed|unable to verify|wrong version number/.test(s)?!1:/econnreset|econnaborted|epipe|etimedout|enotfound|eai_again|und_err_socket|und_err_closed|terminated|socket hang up|other side closed|fetch failed/.test(s)}function kF(t,e,n){let s=d_(t);return"\u4E0E "+(e&&(e.name||e.id)||"\u7AEF\u70B9")+" \u7684\u8FDE\u63A5\u88AB\u4E2D\u65AD"+(s?"\uFF08"+s+"\uFF09":"")+(n>0?"\uFF0C\u5DF2\u81EA\u52A8\u91CD\u8BD5 "+n+" \u6B21\u4ECD\u5931\u8D25":"")+"\u3002\u901A\u5E38\u662F\u7F51\u7EDC\u94FE\u8DEF\u88AB\u91CD\u7F6E\uFF08\u4EE3\u7406 / \u5B89\u5168\u8F6F\u4EF6\u62E6 TLS\u3001CDN \u8FB9\u7F18\u6296\u52A8\uFF09\uFF0C\u4E0D\u662F\u6A21\u578B\u8FD4\u56DE\u7684\u5185\u5BB9\uFF1B\u53EF\u7A0D\u540E\u91CD\u53D1\uFF0C\u6216\u68C0\u67E5\u4EE3\u7406\u4E0E\u5B89\u5168\u8F6F\u4EF6\u8BBE\u7F6E"}async function ti(t,e,n){let s=n||{},r=mt(e);if(!r)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let o=ei(r.provider);if(!o)throw new Error("provider "+r.provider.id+" \u7F3A\u5C11 API key\uFF08apiKey \u6216 apiKeyEnv="+r.provider.apiKeyEnv+"\uFF09");let i={model:r.model.id,messages:t,temperature:.2,stream:!0};s.tools&&s.tools.length&&(i.tools=s.tools,i.tool_choice="auto");let a=Number(s.maxTokens)>0?Number(s.maxTokens):Number(r.model.maxOutputTokens);isFinite(a)&&a>0&&(i.max_tokens=Math.floor(a)),!uh[r.provider.id]&&r.provider.streamUsage!==!1&&(i.stream_options={include_usage:!0});let c=l_(r.model,s.thinking),u=r.provider.id+"::"+r.model.id+"::",d="",f=null;if(c&&!Vv[u+c.mode]){let oe=yF(i,c.tier);d=c.mode,f=function(){for(let pe of oe)delete i[pe]}}let p=!!(r.model.thinking&&r.model.thinking.inline===!0&&d==="on"),h=t&&t[0]&&t[0].role==="system"?t[0].content:"",m=Es.hash(h,i.tools||[]);s.snapshot!==!1&&(Ct={at:new Date().toISOString(),model:r.model.id,prefixHash:m,thinking:d||"none",verbosity:s.verbosity||"none",roles:(t||[]).map(function(oe){return oe&&oe.role}),heads:(t||[]).map(function(oe){return i_(oe&&oe.content,120)})});let y=new AbortController,w=lu(s.signal);w.signal&&(w.isCancelled()?y.abort():w.signal.addEventListener("abort",()=>y.abort()));let T=Math.max(0,Number(s.timeoutMs)||0),g=null,v=!1;T>0&&(g=setTimeout(function(){v=!0,y.abort()},T));let b=SS(r.provider),S={"Content-Type":"application/json",Authorization:"Bearer "+o},_=[];i.stream_options&&_.push({field:"stream_options",undo:function(){delete i.stream_options}}),f&&_.push({field:"thinking",undo:f}),i.max_tokens&&_.push({field:"max_tokens",undo:function(){delete i.max_tokens}});let C=2,A=[400,1500],F=0,B=0,H=null,$=null,J="",P=0,K=null,ae="",te=new Map,Q=new Map,he=null,G="",Ie="",Se=[],yt=0,St=new TextDecoder,Me=function(){return fetch(b,{method:"POST",headers:S,body:JSON.stringify(i),signal:y.signal})};try{for(;;){J="",P=0,K=null,ae="",te=new Map,Q=new Map,yt=0,he=BI.newParser({startInThink:p,onContent:function(oe){if(oe&&(yt+=oe.length),s.onToken)try{s.onToken(oe)}catch{}},onReasoning:function(oe){if(oe&&(yt+=oe.length),s.onReasoning)try{s.onReasoning(oe)}catch{}},onSplit:function(oe){if(oe&&(yt+=oe.length),s.onSplit)try{s.onSplit(oe)}catch{}}});try{for(H=await Me();!H.ok&&H.status===400&&F<_.length;){let oe=_[F++],pe=await H.text();oe.field==="stream_options"?(uh[r.provider.id]=!0,k("stream_usage_unsupported",{provider:r.provider.id,status:H.status,body:pe.slice(0,200)})):oe.field==="thinking"?(Vv[u+d]=!0,k("thinking_unsupported",{provider:r.provider.id,model:r.model.id,mode:d,status:H.status,body:pe.slice(0,200)}),d=""):k("max_tokens_unsupported",{provider:r.provider.id,status:H.status,body:pe.slice(0,200)}),oe.undo(),H=await Me()}if(!H.ok){let oe=await H.text();throw k("http_error",{provider:r.provider.id,model:r.model.id,status:H.status,body:oe.slice(0,300)}),new Error(r.provider.id+" HTTP "+H.status+": "+oe.slice(0,200))}for($=H.body.getReader();;){let oe=await $.read();if(oe.done)break;J+=St.decode(oe.value,{stream:!0});let pe=J.split(`
|
|
1083
|
+
`);J=pe.pop()||"";for(let Ne of pe){let wt=Ne.trim();if(!wt.startsWith("data:"))continue;let ys=wt.slice(5).trim();if(!ys||ys==="[DONE]")continue;let on;try{on=JSON.parse(ys)}catch{continue}on&&on.usage&&(K=on.usage);let $t=on.choices&&on.choices[0];$t&&$t.finish_reason&&(ae=String($t.finish_reason));let Pt=$t&&$t.delta;if(!Pt)continue;Pt.content&&(P++,he.pushContent(Pt.content));let ns=Pt.reasoning_content!=null?Pt.reasoning_content:Pt.reasoning!=null?Pt.reasoning:Pt.thinking;if(typeof ns=="string"&&ns&&he.pushReasoning(ns),Pt.tool_calls)for(let Ze of Pt.tool_calls){let En;typeof Ze.index=="number"?En=Ze.index:Ze.id?(Q.has(Ze.id)||Q.set(Ze.id,te.size),En=Q.get(Ze.id)):En=te.size?Math.max.apply(null,Array.from(te.keys())):0;let Kn=te.get(En);Kn||(Kn={id:"",type:"function",function:{name:"",arguments:""}},te.set(En,Kn)),Ze.id&&(Kn.id=Ze.id,Q.has(Ze.id)||Q.set(Ze.id,En)),Ze.function&&Ze.function.name&&(Kn.function.name=Ze.function.name),Ze.function&&Ze.function.arguments!=null&&(Kn.function.arguments+=typeof Ze.function.arguments=="string"?Ze.function.arguments:JSON.stringify(Ze.function.arguments))}}}break}catch(oe){if(v)throw k("stream_timeout",{provider:r.provider.id,model:r.model.id,timeoutMs:T}),new Error("\u8BF7\u6C42\u8D85\u65F6\uFF08"+Math.round(T/1e3)+"s \u672A\u8FD4\u56DE\uFF09");let pe=bF(oe);if(w.isCancelled()||yt>0||B>=C||!pe)throw pe?new Error(kF(oe,r.provider,B)):oe;B++;let Ne=A[B-1]||A[A.length-1];k("stream_net_retry",{provider:r.provider.id,model:r.model.id,attempt:B,message:String(oe&&oe.message||"").slice(0,120),code:d_(oe),delayMs:Ne}),await new Promise(function(wt){setTimeout(wt,Ne)})}}}finally{g&&(clearTimeout(g),g=null)}he.end(),G=he.content,Ie=he.reasoning;let Rt=he.rawContent;Se=Array.from(te.keys()).sort((oe,pe)=>oe-pe).map(oe=>te.get(oe));let Et=r.provider.id+"::"+r.model.id,qe=Tv.get(Et)||{hash:"",tokens:0},Wn=qe.hash,Fs=!!Wn&&Wn===m,gs=Fs?qe.tokens:0,Be=Es.stats(K,t,gs);Tv.set(Et,{hash:m,tokens:Be.promptTokens});let ct={at:new Date().toISOString(),model:r.model.id,iter:Number(s.iter)||0,prefixHash:m,promptTokens:Be.promptTokens,cachedTokens:Be.cachedTokens,prefixTokens:Be.prefixTokens,prefixSource:Be.prefixSource,hit:Be.hit,coverage:Be.coverage};for(zo.push(ct);zo.length>vS;)zo.shift();return s.snapshot!==!1&&Ct&&(Ct.prefixHash=ct.prefixHash,Ct.promptTokens=ct.promptTokens,Ct.cachedTokens=ct.cachedTokens,Ct.prefixTokens=ct.prefixTokens,Ct.hit=ct.hit,Ct.coverage=ct.coverage),k("stream_done",{provider:r.provider.id,model:r.model.id,chars:G.length,reasoningChars:Ie.length,chunks:P,toolCalls:Se.map(oe=>oe.function.name),thinking:d||"none",inline:p,verbosity:s.verbosity||"none",prefixHash:m,promptTokens:Be.promptTokens,cachedTokens:Be.cachedTokens,completionTokens:Be.completionTokens,prefixTokens:Be.prefixTokens,hit:Be.hit,coverage:Be.coverage,finishReason:ae,usage:!!K}),K&&Be.cachedTokens===0&&Be.prefixTokens>0&&k("cache_miss_suspect",{prefixHash:m,prevHash:Wn,samePrefix:Fs,prefixTokens:Be.prefixTokens,promptTokens:Be.promptTokens}),{content:G,reasoning:Ie,rawContent:Rt,toolCalls:Se,target:r,usage:K,cache:Be,prefixHash:m,finishReason:ae,thinking:d}}function yh(t){let e=t&&t.model?Number(t.model.maxInputTokens):0;return isFinite(e)&&e>0?e:65536}function Qh(t,e,n){let s=t&&t.cache||{},r=Number(s.promptTokens)||0,o=Number(s.completionTokens)||0,i=Number(s.cachedTokens)||0,a=String(t&&t.content||""),l=r,c=o,u=!1;return l<=0&&(l=Oe.estimateTokens(Oe.charsOf(e),n),u=!0),c<=0&&a.length&&(c=Oe.estimateTokens(a.length,n),u=!0),{promptTokens:l,completionTokens:c,cachedTokens:i,estimated:u,detailsStripped:!!s.detailsStripped}}function Ka(t,e,n){let s=Array.isArray(t)?t:[],r=isFinite(Number(e))&&Number(e)>0?Number(e):65536,o=0,i=0,a=0,l=!1,c=!1;for(let f of s)f&&(o+=Number(f.promptTokens)||0,i+=Number(f.completionTokens)||0,a+=Number(f.cachedTokens)||0,f.estimated&&(l=!0),f.detailsStripped&&(c=!0));let u=null;for(let f of s)f&&!f.subagent&&(u=f);!u&&s.length&&(u=s[s.length-1]);let d=u?(Number(u.promptTokens)||0)+(Number(u.completionTokens)||0):0;return{requests:s.length,promptTokens:o,completionTokens:i,totalTokens:o+i,cachedTokens:a,hit:o>0?Number(Math.min(1,a/o).toFixed(3)):0,contextTokens:d,window:r,percent:r>0?Number(Math.min(1,d/r).toFixed(3)):0,estimated:l,subagentRequests:s.filter(function(f){return!!(f&&f.subagent)}).length,model:String(n||""),detailsStripped:c}}var Jv=new Set,xF=8,vF=8e3,SF=4;function _F(t,e){return!t||!e||e.estimated||Number(e.cachedTokens)>0||Number(e.requests)<xF||Number(e.contextTokens)<vF||Jv.has(t)||zo.filter(function(s){return Number(s.cachedTokens)===0&&Number(s.prefixTokens)>0}).length<SF?null:(Jv.add(t),e.detailsStripped?{text:O("ext.prefixHintStripped"),tip:O("ext.prefixHintStrippedTip",{n:Number(e.requests)||0})}:{text:O("ext.prefixHint"),tip:O("ext.prefixHintTip",{n:Number(e.requests)||0})})}var gr=D.join(lt.homedir(),".luban","usage"),Un="7d";function em(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("usage.record")}catch{}return t!==!1}function wh(t,e){if(!e||!em())return null;let n=t||{};try{let s=mt(n.modelKey),r=Ve.row({provider:s&&s.provider?s.provider.id:"",model:s&&s.model?s.model.id:String(e.model||""),modelKey:s?s.key:String(n.modelKey||""),mode:n.mode||"agent",source:n.source||"",session:n.session||""},e),o=Ve.append(gr,r);return o.ok?(k("usage_log",{model:r.modelKey,mode:r.mode,source:r.source,total:r.totalTokens,estimated:r.estimated,partial:r.partial,file:o.month}),yL(),r):(k("usage_log_failed",{message:o.error,model:r.modelKey}),null)}catch(s){return k("usage_log_failed",{message:String(s&&s.message||s)}),null}}function va(t){let e=Ve.rangeOf(t||Un),n=Ve.read(gr,e.from,e.to),s=Ve.aggregate(n.rows,e);return{type:"usage",range:{key:e.key,label:O("usage."+e.key),from:e.from,to:e.to,days:e.days},ranges:Ve.RANGES.map(function(r){return{key:r.key,label:O("usage."+r.key)}}),dir:gr,files:n.files,badLines:n.bad,record:em(),now:Date.now(),summary:s,rows:n.rows.slice(-50).map(function(r){return{ts:r.ts,at:r.at,day:r.day,model:r.model,provider:r.provider,mode:r.mode,source:r.source,requests:r.requests,promptTokens:r.promptTokens,completionTokens:r.completionTokens,totalTokens:r.totalTokens,cachedTokens:r.cachedTokens,estimated:!!r.estimated,partial:!!r.partial}})}}var Ya="\u4F60\u53EB Luban\uFF08\u9C81\u73ED\uFF09\uFF0C\u662F\u5D4C\u5728 VSCodium \u4FA7\u8FB9\u680F\u91CC\u7684\u7F16\u7801 agent\uFF0C\u5E95\u5C42\u6A21\u578B\u7531\u7528\u6237\u914D\u7F6E\u7684 provider \u51B3\u5B9A\uFF1B\u88AB\u95EE\u5230\u8EAB\u4EFD\u6216\u6A21\u578B\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u81EA\u79F0\u5176\u5B83\u4EA7\u54C1\u3002",f_=[Ya,"\u4F60\u53EF\u4EE5\u76F4\u63A5\u8BFB\u5199\u672C\u673A\u6587\u4EF6\uFF0C\u4E5F\u53EF\u4EE5\u6267\u884C shell \u547D\u4EE4\u3002","\u89C4\u5219\uFF1A","1. \u4FEE\u6539\u5DF2\u6709\u6587\u4EF6\u524D\u5148\u7528 read_file \u8BFB\u539F\u6587\uFF0C\u518D\u7528 replace_in_file \u505A\u5C40\u90E8\u66FF\u6362\uFF1B\u5B83\u5BB9\u5FCD\u884C\u5C3E\u4E0E\u7F29\u8FDB\u7684\u7A7A\u767D\u5DEE\u5F02\uFF0C\u4E0D\u5FC5\u4E3A\u4E86\u9010\u5B57\u8282\u4E00\u81F4\u53CD\u590D\u91CD\u8BFB\uFF1B\u65B0\u5EFA\u6216\u6574\u4F53\u91CD\u5199\u624D\u7528 write_file\u3002\u8DE8\u591A\u4E2A\u6587\u4EF6\u7684\u91CD\u6784 / \u6279\u91CF\u6539\u540D / \u4E00\u6B21\u6539\u591A\u5904\uFF0C\u7528 apply_patch\uFF08\u4E00\u6B21\u63D0\u4EA4\u591A\u6587\u4EF6\u589E / \u6539 / \u5220\uFF0C\u5168\u6210\u529F\u624D\u843D\u76D8\uFF0C\u4EFB\u4E00\u6587\u4EF6\u6821\u9A8C\u5931\u8D25\u5219\u6574\u4F53\u4E0D\u5199\uFF09\uFF1B\u5355\u6587\u4EF6\u5220\u9664\u7528 delete_file\uFF0C\u79FB\u52A8 / \u91CD\u547D\u540D\u7528 move_file\u3002\u6539\u5B8C\u4EE3\u7801\u540E\u53EF\u7528 read_lints \u8BFB\u8BED\u8A00\u670D\u52A1\u5668\u62A5\u7684 error / warning\uFF0C\u81EA\u5DF1\u53D1\u73B0\u7C7B\u578B\u9519 / \u8BED\u6CD5\u9519\uFF0C\u800C\u4E0D\u662F\u7B49\u7528\u6237\u8D34\u62A5\u9519\u3002","2. \u8DEF\u5F84\u9ED8\u8BA4\u5199\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\u7684\u8DEF\u5F84\uFF1B\u5DE5\u4F5C\u533A\u4E4B\u5916\u7684\u6587\u4EF6\u7528\u7EDD\u5BF9\u8DEF\u5F84\uFF08../ \u8D8A\u754C\u4E5F\u53EF\u4EE5\uFF09\uFF0C\u53D7 luban.fs.allowOutsideWorkspace \u63A7\u5236\u3002","3. \u7528 run_command \u9A8C\u8BC1\u81EA\u5DF1\u5199\u7684\u4EE3\u7801\uFF08\u5982 node xxx.js\u3001npx tsc --noEmit\uFF09\uFF0C\u628A\u771F\u5B9E\u8F93\u51FA\u4F5C\u4E3A\u7ED3\u8BBA\u4F9D\u636E\uFF1B\u4E0D\u8981\u9760\u731C\u8BF4\u201C\u5E94\u8BE5\u80FD\u8DD1\u201D\u3002\u9884\u8BA1\u8D85\u8FC7\u4E00\u5206\u949F\u7684\u6784\u5EFA/\u6574\u4ED3\u6D4B\u8BD5\u7528 run_command_start\uFF0C\u518D run_command_poll \u770B\u8FDB\u5EA6\uFF1B\u53D6\u6D88\u7528 run_command_stop\u3002\u77ED\u547D\u4EE4\u4E0D\u8981 start\u3002","4. \u4E00\u6B21\u53EA\u505A\u5FC5\u8981\u7684\u5DE5\u5177\u8C03\u7528\uFF0C\u4E0D\u8981\u53CD\u590D\u8BFB\u540C\u4E00\u4E2A\u6587\u4EF6\u3002","5. \u5B8C\u6210\u540E\u7528\u4E2D\u6587\u7B80\u77ED\u6C47\u62A5\uFF1A\u6539\u4E86\u54EA\u4E9B\u6587\u4EF6\u3001\u505A\u4E86\u4EC0\u4E48\u3001\u9A8C\u8BC1\u7ED3\u679C\u3002\u4E0D\u8981\u5728\u56DE\u590D\u91CC\u91CD\u590D\u8D34\u5B8C\u6574\u4EE3\u7801\u3002","6. \u82E5\u7528\u6237\u6D88\u606F\u672B\u5C3E\u5E26\u300C\u5F15\u7528\u7684\u4E0A\u4E0B\u6587\u300D\uFF08[ref N] \u5757\uFF09\u6216\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u5757\uFF1A\u5B8C\u6574\u5757\u76F4\u63A5\u4F7F\u7528\u3001\u4E0D\u8981\u518D read_file \u91CD\u590D\u8BFB\u53D6\uFF1B\u82E5\u6807\u6CE8\u300C\u7247\u6BB5 / \u622A\u65AD\u300D\u6216\u63D0\u793A\u5206\u6BB5\u7EED\u8BFB\uFF0C\u7528 read_file \u7684 startLine/maxLines \u7EED\u8BFB\uFF0C\u4E0D\u8981\u6574\u6587\u4EF6\u91CD\u8BFB\u3002\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u662F\u7528\u6237\u6B64\u523B\u5728\u7F16\u8F91\u5668\u91CC\u770B\u7684\u4EE3\u7801\uFF1A\u6709\u9009\u533A\u65F6\u53EA\u662F\u9009\u533A\uFF0C\u65E0\u9009\u533A\u65F6\u662F\u5149\u6807\u9644\u8FD1\u7684\u4E00\u6BB5\uFF08\u6807\u9898\u91CC\u4F1A\u5199\u6E05\u884C\u53F7\u8303\u56F4\u548C\u603B\u884C\u6570\uFF0C\u53EF\u80FD\u4E0D\u662F\u6574\u4EFD\u6587\u4EF6\uFF09\uFF0C\u9700\u8981\u6587\u4EF6\u5176\u5B83\u90E8\u5206\u65F6\u518D read_file\u3002\u5B83\u53EA\u662F\u80CC\u666F\uFF0C\u4E0D\u7B49\u4E8E\u672C\u6761\u8BF7\u6C42\u7684\u5BF9\u8C61\uFF1A\u7528\u6237\u6CA1\u70B9\u540D\u6587\u4EF6\u65F6\uFF0C\u4EE5\u672C\u4F1A\u8BDD\u4E0A\u6587\uFF08\u7528\u6237\u521A\u8BF4\u7684\u8BDD\u3001\u4E0A\u4E00\u6761\u56DE\u7B54\uFF09\u4E3A\u51C6\uFF0C\u4E0D\u8981\u62FF\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u5F53\u9ED8\u8BA4\u5BF9\u8C61\u3002",'7. \u9700\u8981\u627E\u4EE3\u7801\u65F6\u6309\u76F2\u533A\u9009\u5DE5\u5177\uFF1A\u6309\u5185\u5BB9\u5173\u952E\u8BCD / \u6807\u8BC6\u7B26\u627E\u7528 search_code\uFF08BM25 \u8BCD\u6CD5\u7D22\u5F15\uFF0C\u6700\u7701 token\uFF09\uFF1B\u6309\u6587\u4EF6\u540D\u627E\u6587\u4EF6\u7528 glob\uFF08\u5982 glob({ patterns: ["**/*config*"] })\uFF09\uFF1B\u8981\u6B63\u5219 / \u7CBE\u786E\u4E32\u5339\u914D\u7528 grep\uFF08\u5982 grep({ pattern: "TODO|FIXME" })\uFF0C\u6B63\u5219\u6309 JS RegExp \u8BED\u6CD5\uFF0C\u53C2\u6570\u662F JSON \u5B57\u7B26\u4E32\u3001\u53CD\u659C\u6760\u8981\u518D\u8F6C\u4E49\u4E00\u5C42\uFF0C\u5982 "foo\\\\(\\\\d+\\\\)"\uFF09\u3002\u5B9A\u4F4D\u5230\u6587\u4EF6\u4E0E\u884C\u53F7\u540E\u518D read_file \u7CBE\u8BFB\uFF0C\u4E0D\u8981\u7528 list_files \u4E00\u5C42\u5C42\u5168\u91CF\u626B\u3002\u5927\u76EE\u5F55\u53EF\u4F20 dir \u9650\u5B9A\u524D\u7F00\uFF08grep / glob \u7684\u7ED3\u679C\u8DEF\u5F84\u4ECD\u4EE5\u5DE5\u4F5C\u76EE\u5F55\u4E3A\u57FA\u51C6\uFF09\u3002',"8. \u7528\u6237\u6D88\u606F\u91CC\u7684\u76EE\u5F55\u5F15\u7528\u82E5\u51FA\u73B0\u300C\u5206\u6279\u5904\u7406\u300D\u6E05\u5355\u6216\u5927\u91CF\u300C\u672A\u6CE8\u5165\u5168\u6587\u300D\uFF1A\u672C\u8F6E\u53EA\u6311\u6700\u76F8\u5173\u7684 1\u20133 \u6279\uFF0C\u6BCF\u6279 search_code({ query, dir }) \u540E\u518D\u5C11\u91CF read_file\uFF1B\u7981\u6B62\u5BF9\u6574\u68F5\u6811\u4E32\u884C read_file\u3002\u6536\u5C3E\u5199\u6E05\u5DF2\u5B8C\u6210 / \u672A\u5904\u7406\u6279\u6B21\uFF0C\u4FBF\u4E8E\u7528\u6237\u4E0B\u4E00\u6761\u7EED\u8DD1\u3002","9. \u7528\u6237\u6D88\u606F\u91CC\u82E5\u5E26\u300C\u5F53\u524D todo\u300D\u6E05\u5355\uFF0C\u6216\u4EFB\u52A1\u53EF\u62C6\u6210\u591A\u6B65\uFF1A\u7528 todo_write \u8DDF\u8E2A\u3002\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A in_progress\uFF1B\u5B8C\u6210\u4E00\u9879\u518D\u6807\u4E0B\u4E00\u9879\u4E3A in_progress\uFF1B\u5168\u90E8 completed / cancelled \u540E\u518D\u6536\u5C3E\u6C47\u62A5\u3002merge \u9ED8\u8BA4 true\uFF08\u6309 id \u5408\u5E76\uFF09\u3002","10. \u4EFB\u52A1\u51FA\u73B0\u5B9E\u8D28\u5206\u53C9\u3001\u9700\u8981\u4EBA\u62CD\u677F\u65F6\uFF0C\u5148\u7528 ask_question \u7ED9\u51FA\u53EF\u70B9\u9009\u9879\u7B49\u7528\u6237\u9009\u62E9\uFF1B\u4E0D\u8981\u53EA\u628A\u5F00\u653E\u95EE\u9898\u5199\u8FDB\u957F\u6587\u672B\u5C3E\u7B49\u7528\u6237\u6253\u5B57\u3002\u6709\u660E\u663E\u66F4\u7A33\u59A5\u7684\u8DEF\u5F84\u65F6\u7ED9\u5BF9\u5E94 option \u6807 recommended: true\uFF08\u9762\u677F\u663E\u793A\u300C\u63A8\u8350\u300D\uFF0C\u4E0D\u9884\u9009\uFF09\u3002"],TF="11. \u9700\u8981\u5916\u90E8\u6700\u65B0\u4FE1\u606F\uFF08\u7248\u672C\u53F7\u3001\u5B98\u65B9\u6587\u6863\u3001\u62A5\u9519\u539F\u56E0\uFF09\u65F6\u53EF\u8C03\u7528 web_search / web_fetch \u53EA\u8BFB\u8054\u7F51\uFF1B\u5F15\u7528\u641C\u7D22\u7ED3\u679C\u65F6\u6807\u6CE8 [n]\uFF0C\u4E0D\u8981\u628A\u641C\u7D22\u7ED3\u679C\u5F53\u6210\u6587\u4EF6\u5185\u5BB9\u3002",p_=["12. \u7CFB\u7EDF\u63D0\u793A\u91CC\u5217\u51FA\u4E86\u300C\u53EF\u7528\u6280\u80FD\u300D\u65F6\uFF0C\u771F\u6B63\u8981\u7528\u67D0\u4E2A\u6280\u80FD\u524D\u5148\u8C03\u7528 read_skill \u8BFB\u5B83\u7684 SKILL.md \u5168\u6587\uFF0C\u518D\u6309\u91CC\u9762\u7684\u6B65\u9AA4\u505A\uFF1B\u4E0D\u8981\u51ED\u6280\u80FD\u540D\u731C\u6D41\u7A0B\uFF0C\u4E5F\u4E0D\u8981\u4E00\u6B21\u8BFB\u591A\u4E2A\u7528\u4E0D\u4E0A\u7684\u6280\u80FD\u3002","13. \u540D\u5B57\u4EE5 mcp__ \u5F00\u5934\u7684\u662F\u672C\u673A MCP server \u63D0\u4F9B\u7684\u5916\u90E8\u5DE5\u5177\uFF08mcp__<server>__<tool>\uFF09\uFF0C\u53C2\u6570\u6309\u5404\u81EA schema \u4F20\uFF1B\u5DE5\u4F5C\u533A\u6587\u4EF6\u7684\u8BFB\u5199\u4ECD\u4F18\u5148\u7528\u5185\u7F6E list_files / search_code / read_file / write_file / replace_in_file\u3002MCP \u5DE5\u5177\u600E\u4E48\u7528\u4EE5\u5176 schema \u4E3A\u51C6\uFF0C\u4E0D\u8981\u4E3A\u4E86\u731C\u53C2\u6570\u53BB node_modules / npm \u7F13\u5B58 / .m2 \u91CC\u7FFB server \u7684\u5B9E\u73B0\uFF08\u90A3\u4E9B\u662F\u5B89\u88C5\u7F13\u5B58\uFF0C\u4E0D\u662F\u9879\u76EE\u4EE3\u7801\uFF09\uFF1B\u88AB\u62D2\u7EDD\u6216\u62FF\u4E0D\u51C6\u65F6\u7528 ask_question \u95EE\u7528\u6237\u3002","14. \u5BF9\u8BDD\u5386\u53F2\u91CC\u53EF\u80FD\u5E26\u6709\u66F4\u65E9\u8F6E\u6B21\u7684\u63D0\u95EE\u4E0E\u56DE\u7B54\uFF1A\u8FFD\u95EE\u91CC\u7684\u300C\u5B83 / \u521A\u624D / \u90A3\u4E2A\u6587\u4EF6\u300D\u5148\u7ED3\u5408\u5386\u53F2\u7406\u89E3\u3002\u5386\u53F2\u91CC\u7684\u4EE3\u7801\u6539\u52A8\u53EF\u80FD\u5DF2\u88AB\u64A4\u9500\u6216\u518D\u6B21\u4FEE\u6539\uFF0C\u9700\u8981\u786E\u8BA4\u73B0\u72B6\u65F6\u91CD\u65B0 read_file / run_command\uFF0C\u4E0D\u8981\u628A\u5386\u53F2\u5F53\u6210\u5F53\u524D\u78C1\u76D8\u72B6\u6001\u3002","15. \u5DE5\u5177\u7ED3\u679C\u6216\u66F4\u65E9\u8F6E\u6B21\u82E5\u88AB\u538B\u7F29\u6210\u300C\u5DF2\u7701\u7565\u2026\u5B8C\u6574\u7ED3\u679C id=sp_\u2026\u300D\u6216\u7528\u6237\u6D88\u606F\u91CC\u51FA\u73B0\u300C\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\u300D\uFF1A\u9700\u8981\u539F\u6587\u65F6\u7528 read_spill \u6309 id \u53D6\u56DE\uFF1B\u6458\u8981\u4E0D\u591F\u518D\u8BFB\u6587\u4EF6\u6216\u91CD\u8DD1\u547D\u4EE4\uFF0C\u4E0D\u8981\u81C6\u9020\u88AB\u7701\u7565\u7684\u5185\u5BB9\u3002","16. \u53D1\u5E03 / \u63A8\u9001 / \u90E8\u7F72 / \u5220\u9664\u8FDC\u7AEF\u8D44\u6E90\u8FD9\u7C7B\u5BF9\u5916\u90E8\u6709\u5F71\u54CD\u3001\u4E0D\u6613\u64A4\u9500\u7684\u64CD\u4F5C\uFF1A\u6267\u884C\u524D\u5148\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u8981\u64CD\u4F5C\u7684\u5BF9\u8C61\uFF1B\u7528\u6237\u53EA\u8BF4\u300C\u53D1\u5E03\u5230 xx\u300D\u800C\u6CA1\u70B9\u540D\u5185\u5BB9\u65F6\uFF0C\u5148\u7528 ask_question \u786E\u8BA4\u5BF9\u8C61\uFF0C\u4E0D\u8981\u628A\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u6216\u5386\u53F2\u91CC\u78B0\u5DE7\u76F8\u5173\u7684\u6587\u4EF6\u5F53\u6210\u9ED8\u8BA4\u5BF9\u8C61\u3002","17. \u540D\u5B57\u4EE5 pl__ \u5F00\u5934\u7684\u662F\u672C\u673A\u63D2\u4EF6\u63D0\u4F9B\u7684\u5DE5\u5177\uFF08pl__<plugin>__<tool>\uFF0C\u6765\u81EA\u9879\u76EE .luban/plugins \u6216\u5BB6\u76EE\u5F55\u540C\u540D\u76EE\u5F55\uFF09\uFF1A\u53EA\u5728\u7528\u6237\u542F\u7528\u672C\u5730\u63D2\u4EF6\u540E\u624D\u51FA\u73B0\uFF0C\u53C2\u6570\u6309\u5404\u81EA schema \u4F20\uFF1B\u540C\u6837\u7684\u6D3B\u80FD\u7528\u5185\u7F6E\u5DE5\u5177\u505A\u5B8C\u5C31\u7528\u5185\u7F6E\u7684\uFF0C\u63D2\u4EF6\u53EA\u8865\u5185\u7F6E\u6CA1\u6709\u7684\u80FD\u529B\u3002Plan \u6A21\u5F0F\u53EA\u653E\u884C\u63D2\u4EF6\u81EA\u62A5\u53EA\u8BFB\u7684\u5DE5\u5177\uFF0C\u786C\u8C03\u975E\u53EA\u8BFB\u7684\u4F1A\u88AB\u62D2\u7EDD \u2014\u2014 \u522B\u91CD\u8BD5\uFF0C\u7528 ask_question \u8BA9\u7528\u6237\u5207\u5230 Agent \u6A21\u5F0F\u3002"],Cc=f_.concat([TF],p_).join(`
|
|
1084
1084
|
`),MF=f_.concat(p_).join(`
|
|
1085
1085
|
`),h_=[Ya,"\u4F60\u53EF\u4EE5\u8BFB\u5199\u672C\u673A\u6587\u4EF6\u3001\u6267\u884C shell \u547D\u4EE4\u3002\u5DE5\u4F5C\u76EE\u5F55\u5728\u4E0B\u65B9\u3002","\u89C4\u5219\uFF1A","1. \u6539\u5DF2\u6709\u6587\u4EF6\u5148\u7528 read_file \u770B\u539F\u6587\uFF0C\u518D\u7528 replace_in_file \u5C40\u90E8\u66FF\u6362\uFF1B\u4E00\u6B21\u6539\u591A\u5904\u7528 apply_patch\uFF1B\u65B0\u5EFA\u6216\u6574\u4F53\u91CD\u5199\u624D\u7528 write_file\u3002","2. \u627E\u4EE3\u7801\uFF1A\u5173\u952E\u8BCD\u7528 search_code\uFF0C\u6587\u4EF6\u540D\u7528 glob\uFF0C\u6B63\u5219\u7528 grep\uFF1B\u62FF\u5230\u884C\u53F7\u518D read_file\uFF0C\u4E0D\u8981\u7528 list_files \u5168\u91CF\u626B\u3002","3. \u5927\u6587\u4EF6\u5FC5\u987B\u5206\u6BB5\u8BFB\uFF1Aread_file \u5E26 startLine / maxLines\uFF08\u4E00\u6B21\u4E0D\u8D85\u8FC7 120 \u884C\uFF09\uFF1B\u770B\u5230\u300C\u8FD8\u6709\u540E\u7EED\u300D\u5C31\u63A5\u7740\u8BFB\u4E0B\u4E00\u6BB5\uFF0C\u4E0D\u8981\u91CD\u8BFB\u5DF2\u8BFB\u90E8\u5206\u3002","4. \u8DEF\u5F84\u5199\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u5DE5\u4F5C\u533A\u5916\u7528\u7EDD\u5BF9\u8DEF\u5F84\u3002","5. \u7528 run_command \u9A8C\u8BC1\u81EA\u5DF1\u5199\u7684\u4EE3\u7801\uFF08\u5982 node x.js\u3001npx tsc --noEmit\uFF09\uFF0C\u628A\u771F\u5B9E\u8F93\u51FA\u5F53\u7ED3\u8BBA\u3002","6. \u4E00\u6B65\u4E00\u9A8C\u8BC1\uFF1B\u4EFB\u52A1\u8D85\u8FC7 5 \u6B65\u5148\u7528 todo_write \u8BB0\u6E05\u5355\uFF0C\u5B8C\u6210\u4E00\u9879\u518D\u8FDB\u4E0B\u4E00\u9879\u3002","7. \u5DE5\u5177\u7ED3\u679C\u88AB\u538B\u6210\u300C\u5DF2\u7701\u7565 \u2026 id=sp_\u2026\u300D\u6216\u51FA\u73B0\u300C\u5DF2\u538B\u7F29\u66F4\u65E9\u6B65\u9AA4\u300D\u65F6\uFF1A\u9700\u8981\u539F\u6587\u7528 read_spill\uFF0C\u6216\u91CD\u65B0 read_file / \u91CD\u8DD1\u547D\u4EE4\uFF1B\u4E0D\u8981\u51ED\u8BB0\u5FC6\u7F16\u9020\u88AB\u7701\u7565\u7684\u5185\u5BB9\u3002","8. \u6539\u5B8C\u7528\u4E2D\u6587\u7B80\u77ED\u6C47\u62A5\uFF1A\u6539\u4E86\u54EA\u4E9B\u6587\u4EF6\u3001\u9A8C\u8BC1\u7ED3\u679C\u3002\u4E0D\u8981\u5728\u56DE\u590D\u91CC\u91CD\u590D\u8D34\u4EE3\u7801\u3002"],CF="9. \u9700\u8981\u6700\u65B0\u5916\u90E8\u4FE1\u606F\u65F6\u53EF\u7528 web_search / web_fetch\uFF0C\u5F15\u7528\u6807 [n]\u3002",Ac=h_.concat([CF]).join(`
|
|
1086
1086
|
`),AF=h_.join(`
|
|
1087
|
-
`),m_=
|
|
1087
|
+
`),m_=ur.filter(function(t){return["list_files","search_code","read_file","run_command","run_command_start","run_command_poll","run_command_stop","read_spill","web_search","web_fetch","ask_question","grep","glob","read_lints","explore","browser"].indexOf(t.function.name)>=0}),tm=ur.filter(function(t){return["list_files","search_code","read_file","grep","glob","read_lints","read_spill","read_skill","run_command","run_command_start","run_command_poll","run_command_stop","web_search","web_fetch"].indexOf(t.function.name)>=0}),so={rounds:24,minutes:8,perTurn:4,minuteRatio:.5,minMinutes:3,maxMinutes:12},ja=[Ya,"\u4F60\u73B0\u5728\u662F\u4E00\u4E2A\u53EA\u8BFB\u8C03\u7814\u5B50\u4EE3\u7406\uFF0C\u88AB\u4E3B agent \u6D3E\u6765\u67E5\u6E05\u4E00\u4EF6\u4E8B\u3002","\u89C4\u5219\uFF1A","1. \u53EA\u51C6\u8BFB\uFF1Asearch_code / grep / glob / list_files / read_file / read_lints / read_skill\u3002","2. run_command \u53EA\u51C6\u8DD1\u53EA\u8BFB\u547D\u4EE4\uFF08ls\u3001cat\u3001git log\u3001npm ls\uFF09\uFF0C\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u4EE3\u7801\u5C42\u62D2\u7EDD\uFF0C\u522B\u91CD\u8BD5\u3002","3. \u4E0D\u8981\u8BD5\u56FE\u6539\u6587\u4EF6\u3001\u4E0D\u8981\u63D0\u5F00\u653E\u95EE\u9898\u7B49\u4EBA\u56DE\u7B54 \u2014\u2014 \u4F60\u6CA1\u6709\u8FD9\u4E9B\u5DE5\u5177\u3002","4. \u7ED3\u8BBA\u4F18\u5148\u4E8E\u8FC7\u7A0B\uFF1A\u7528\u4E0D\u8D85\u8FC7 400 \u5B57\u56DE\u7B54\u88AB\u95EE\u7684\u90A3\u51E0\u4EF6\u4E8B\uFF0C\u5199\u6E05\u5173\u952E\u6587\u4EF6\u4E0E\u884C\u53F7\u3002","5. \u4E0D\u8981\u5728\u7ED3\u8BBA\u91CC\u8D34\u5927\u6BB5\u4EE3\u7801\uFF1B\u6CA1\u67E5\u5230\u5C31\u76F4\u8BF4\u6CA1\u67E5\u5230\uFF0C\u4E0D\u8981\u731C\u3002","6. \u300C\u4F1A\u88AB\u62D2\u7EDD / \u4E0D\u652F\u6301 / \u4E0D\u5B58\u5728 / \u884C\u4E3A\u5C31\u662F\u8FD9\u6837\u300D\u8FD9\u7C7B\u7ED3\u8BBA\u5FC5\u987B\u6765\u81EA\u771F\u5B9E\u8C03\u7528\uFF1A\u5148\u7528\u5DE5\u5177\u771F\u7684\u8BD5\u4E00\u6B21\uFF0C\u628A\u8FD4\u56DE\u7684\u539F\u6587\uFF08\u542B\u62A5\u9519\uFF09\u4F5C\u4E3A\u4F9D\u636E\u3002\u7981\u6B62\u628A\u9884\u671F\u5199\u6210\u7ED3\u679C\uFF0C\u7981\u6B62\u7528\u300C\u6309\u89C4\u5219\u6211\u6CA1\u6709\u6267\u884C\u300D\u4EE3\u66FF\u9A8C\u8BC1 \u2014\u2014 \u90A3\u6837\u7B49\u4E8E\u6CA1\u67E5\uFF0C\u7236\u8F6E\u4F1A\u628A\u5B83\u5F53\u6210\u5DF2\u9A8C\u8BC1\u7684\u4E8B\u5B9E\u3002","7. \u4E0D\u8981\u5728\u7ED3\u8BBA\u91CC\u6E05\u70B9\u6216\u7F57\u5217\u81EA\u5DF1\u6709\u54EA\u4E9B\u5DE5\u5177\u3001\u4E00\u5171\u6709\u51E0\u4E2A\uFF1A\u5DE5\u5177\u6E05\u5355\u7531\u8C03\u7528\u65B9\u5B9A\u4E49\uFF0C\u4F60\u6570\u4E0D\u51C6\uFF1B\u88AB\u95EE\u5230\u5C31\u76F4\u63A5\u7167\u6284\u7CFB\u7EDF\u63D0\u793A\u6700\u540E\u90A3\u884C\u300C\u672C\u6B21\u5B9E\u9645\u6388\u4E88\u7684\u53EA\u8BFB\u5DE5\u5177\u300D\uFF0C\u5176\u4F59\u573A\u5408\u53EA\u8BF4\u4E0E\u672C\u4EFB\u52A1\u76F8\u5173\u7684\u5DE5\u5177\u540D\u3002"].join(`
|
|
1088
1088
|
`);function Gc(t){let e=t===!1,n=tm.map(function(s){return s.function.name}).filter(function(s){return!(e&&(s==="web_search"||s==="web_fetch"))});return n.push("read_skill","read_rule"),"\u672C\u6B21\u5B9E\u9645\u6388\u4E88\u7684\u53EA\u8BFB\u5DE5\u5177\u5171 "+n.length+" \u4E2A\uFF08\u4EE5\u6B64\u4E3A\u51C6\uFF0C\u4E0D\u8981\u81EA\u5DF1\u6570\uFF09\uFF1A"+n.join(" / ")+"\u3002"}var g_=[Ya,"\u73B0\u5728\u4F60\u4F5C\u4E3A\u4EE3\u7801\u8C03\u7814\u5458\u5DE5\u4F5C\uFF0C\u5904\u4E8E Plan \u6A21\u5F0F\uFF1A**\u53EA\u51C6\u8BFB\uFF0C\u4E0D\u51C6\u6539**\u3002","\u89C4\u5219\uFF1A","1. \u53EA\u80FD\u7528 list_files / search_code / grep / glob / read_lints / read_file / ask_question / explore\uFF0C\u4EE5\u53CA run_command / run_command_start / poll / stop \u6267\u884C**\u53EA\u8BFB**\u547D\u4EE4\uFF08ls\u3001cat\u3001grep\u3001node --version\u3001npm ls \u7B49\uFF09\u3002\u627E\u4EE3\u7801\u6309\u76F2\u533A\u9009\u5DE5\u5177\uFF1A\u5185\u5BB9\u5173\u952E\u8BCD\u7528 search_code\uFF0C\u6309\u6587\u4EF6\u540D\u7528 glob\uFF0C\u6B63\u5219 / \u7CBE\u786E\u4E32\u7528 grep\uFF0C\u5B9A\u4F4D\u5230\u884C\u53F7\u540E\u518D read_file \u7CBE\u8BFB\uFF1B\u5927\u76EE\u5F55\u53EF\u4F20 dir \u9650\u5B9A\u524D\u7F00\uFF08grep / glob \u8FD4\u56DE\u7684\u8DEF\u5F84\u4ECD\u4EE5\u5DE5\u4F5C\u76EE\u5F55\u4E3A\u57FA\u51C6\uFF09\u3002read_file / list_files \u7684\u8DEF\u5F84\u65E2\u53EF\u4EE5\u662F\u76F8\u5BF9\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u4E5F\u53EF\u4EE5\u662F\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u5DE5\u4F5C\u533A\u5916\u7684\u6587\u4EF6\u9ED8\u8BA4\u4E5F\u5141\u8BB8\u8BFB\uFF09\u3002\u975E\u53EA\u8BFB\u547D\u4EE4\u4F1A\u88AB\u4EE3\u7801\u5C42\u76F4\u63A5\u62D2\u7EDD\u5E76\u7ED9\u51FA\u539F\u56E0\uFF0C\u522B\u53CD\u590D\u91CD\u8BD5\u540C\u4E00\u7C7B\u547D\u4EE4\uFF08\u6362\u4E2A\u5DE5\u5177\u62FF\u4FE1\u606F\uFF0C\u6216\u5199\u8FDB\u8BA1\u5212\u8BA9 Agent \u9636\u6BB5\u6267\u884C\uFF09\u3002\u957F\u53EA\u8BFB\u547D\u4EE4\u53EF\u7528 start+poll\uFF0C\u89C4\u5219\u4E0E\u540C\u6B65\u547D\u4EE4\u76F8\u540C\u3002\u8981\u5728\u4E00\u5927\u7247\u4EE3\u7801\u91CC\u67E5\u6E05\u4E00\u4EF6\u4E8B\uFF08\u591A\u5904\u641C\u7D22\u3001\u786E\u8BA4\u8C03\u7528\u94FE\uFF09\u65F6\u7528 explore \u6D3E\u53EA\u8BFB\u5B50\u4EE3\u7406\uFF0C\u5B83\u53EA\u628A\u7ED3\u8BBA\u4EA4\u56DE\u6765\u3001\u4E0D\u5360\u4F60\u7684\u4E0A\u4E0B\u6587\u3002","2. \u7528\u6237\u6D88\u606F\u91CC\u7684\u76EE\u5F55\u5F15\u7528\u82E5\u51FA\u73B0\u300C\u5206\u6279\u5904\u7406\u300D\u6E05\u5355\u6216\u5927\u91CF\u300C\u672A\u6CE8\u5165\u5168\u6587\u300D\uFF1A\u672C\u8F6E\u53EA\u6311\u6700\u76F8\u5173\u7684 1\u20133 \u6279\uFF0C\u6BCF\u6279 search_code({ query, dir }) \u540E\u518D\u5C11\u91CF read_file\uFF1B\u7981\u6B62\u5BF9\u6574\u68F5\u6811\u4E32\u884C read_file\u3002\u8BA1\u5212\u4E0E\u6536\u5C3E\u5199\u6E05\u5DF2\u8986\u76D6 / \u672A\u8986\u76D6\u6279\u6B21\u3002","3. \u4E25\u7981\u5199\u6587\u4EF6\u3001\u6539\u6587\u4EF6\u3001\u5B89\u88C5\u4F9D\u8D56\u3001git \u53D8\u66F4\u7B49\u4E00\u5207\u526F\u4F5C\u7528\u64CD\u4F5C \u2014\u2014 \u4F60\u6CA1\u6709\u8FD9\u4E9B\u5DE5\u5177\uFF0C\u786C\u8C03\u4F1A\u88AB\u62D2\u7EDD\uFF08run_command \u6709\u4EE3\u7801\u7EA7\u53EA\u8BFB\u6821\u9A8C\uFF09\u3002","4. \u8C03\u7814\u4E2D\u9047\u5230\u4F1A\u6539\u53D8\u8BA1\u5212\u65B9\u5411\u7684\u4E8C\u9009\u4E00 / \u591A\u9009\u4E00\u65F6\uFF0C\u5148\u7528 ask_question \u7B49\u7528\u6237\u70B9\u9009\uFF0C\u518D\u5199\u8FDB\u8BA1\u5212\uFF1B\u4E0D\u8981\u53EA\u628A\u5F00\u653E\u95EE\u9898\u5806\u5728\u6587\u672B\u3002\u6709\u660E\u663E\u66F4\u7A33\u59A5\u7684\u8DEF\u5F84\u65F6\u7ED9\u5BF9\u5E94 option \u6807 recommended: true\u3002","5. \u8F93\u51FA\u4E00\u4EFD\u53EF\u76F4\u63A5\u6267\u884C\u7684\u8BA1\u5212\uFF0C\u683C\u5F0F\uFF1A"," ## \u76EE\u6807\uFF08\u4E00\u53E5\u8BDD\uFF09"," ## \u73B0\u72B6\uFF08\u5173\u952E\u6587\u4EF6 + \u884C\u53F7 + \u4E8B\u5B9E\uFF0C\u4E0D\u8981\u731C\uFF09"," ## \u6B65\u9AA4\uFF08\u7F16\u53F7\uFF0C\u6BCF\u6B65\u5199\u6E05\uFF1A\u6539\u54EA\u4E2A\u6587\u4EF6\u3001\u600E\u4E48\u6539\u3001\u4E3A\u4EC0\u4E48\uFF09"," ## \u9A8C\u8BC1\u65B9\u5F0F\uFF08\u6539\u5B8C\u8DD1\u4EC0\u4E48\u547D\u4EE4 / \u770B\u4EC0\u4E48\u7ED3\u679C\uFF09"," ## \u98CE\u9669\u4E0E\u5F85\u786E\u8BA4\uFF08\u5DF2\u62CD\u677F\u7ED3\u8BBA\u6216\u975E\u963B\u585E\u5907\u6CE8\uFF1B\u963B\u585E\u6027\u9009\u62E9\u5E94\u5DF2\u901A\u8FC7 ask_question \u5B8C\u6210\uFF09","6. \u300C\u6B65\u9AA4\u300D\u91CC\u6BCF\u4E00\u9879\u5FC5\u987B\u53EF\u72EC\u7ACB\u9A8C\u6536\uFF08\u4E00\u53E5\u4E00\u4E8B\uFF09\uFF0C\u6267\u884C\u65F6\u4F1A\u62C6\u6210 todo \u9010\u9879\u5B8C\u6210\uFF1B\u4E0D\u8981\u628A\u591A\u5904\u6539\u52A8\u585E\u8FDB\u540C\u4E00\u6B65\uFF0C\u4E5F\u4E0D\u8981\u5199\u300C\u987A\u4FBF\u2026\u300D\u3002","7. \u4E0D\u8981\u8D34\u5927\u6BB5\u4EE3\u7801\uFF0C\u8981\u7ED9\u6539\u52A8\u4F4D\u7F6E\u548C\u610F\u56FE\uFF1B\u8BA1\u5212\u8981\u5177\u4F53\u5230\u80FD\u7167\u7740\u505A\u3002","8. \u5168\u7A0B\u4E2D\u6587\u3002"],OF="9. \u9700\u8981\u5916\u90E8\u6700\u65B0\u4FE1\u606F\uFF08\u7248\u672C\u53F7\u3001\u5B98\u65B9\u6587\u6863\u3001\u5DF2\u77E5\u95EE\u9898\uFF09\u65F6\uFF0C\u53EF\u7528 web_search / web_fetch \u53EA\u8BFB\u8054\u7F51\u67E5\u8BE2\u3002",y_=["10. \u82E5\u7528\u6237\u6D88\u606F\u672B\u5C3E\u5E26\u300C\u5F15\u7528\u7684\u4E0A\u4E0B\u6587\u300D\uFF08[ref N] \u5757\uFF09\u6216\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u5757\uFF1A\u5B8C\u6574\u5757\u76F4\u63A5\u4F7F\u7528\uFF1B\u82E5\u6807\u6CE8\u300C\u7247\u6BB5 / \u622A\u65AD\u300D\uFF0C\u7528 read_file \u7684 startLine/maxLines \u5206\u6BB5\u7EED\u8BFB\u3002\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u6709\u9009\u533A\u65F6\u662F\u9009\u533A\uFF0C\u65E0\u9009\u533A\u65F6\u662F\u5149\u6807\u9644\u8FD1\u7684\u4E00\u6BB5\uFF08\u53EF\u80FD\u4E0D\u662F\u6574\u4EFD\u6587\u4EF6\uFF09\u3002","11. \u7CFB\u7EDF\u63D0\u793A\u91CC\u5217\u51FA\u4E86\u300C\u53EF\u7528\u6280\u80FD\u300D\u65F6\uFF0C\u53EF\u7528 read_skill \u8BFB\u6280\u80FD\u5168\u6587\uFF08\u53EA\u8BFB\uFF09\uFF1B\u540D\u5B57\u4EE5 mcp__ \u5F00\u5934\u7684\u662F MCP \u5916\u90E8\u5DE5\u5177\uFF0CPlan \u6A21\u5F0F\u53EA\u66B4\u9732\u4E86 server \u81EA\u62A5\u53EA\u8BFB\uFF08readOnlyHint\uFF09\u6216 mcp.json \u91CC planAllow \u663E\u5F0F\u653E\u884C\u7684\u90A3\u4E9B\uFF0C\u731C\u540D\u5B57\u786C\u8C03\u4F1A\u88AB\u62D2\u7EDD\u3002\u540D\u5B57\u4EE5 pl__ \u5F00\u5934\u7684\u662F\u672C\u5730\u63D2\u4EF6\u5DE5\u5177\uFF0CPlan \u53EA\u653E\u884C\u63D2\u4EF6\u81EA\u62A5\u53EA\u8BFB\u7684\uFF0C\u5176\u4F59\u4E00\u5F8B\u62D2\u7EDD\u3002\u88AB\u62D2\u7EDD\u65F6\u7528 ask_question \u8BA9\u7528\u6237\u5207\u5230 Agent \u6A21\u5F0F\uFF0C\u6216\u628A\u8BE5 server \u5199\u8FDB mcp.json \u7684 planAllow\uFF1B\u4E0D\u8981\u53BB node_modules / npm \u7F13\u5B58 / .m2 \u91CC\u7FFB server \u5B9E\u73B0\uFF08\u5B89\u88C5\u7F13\u5B58\u91CC\u6CA1\u6709\u9879\u76EE\u4EE3\u7801\uFF0C\u7FFB\u5B83\u53EA\u4F1A\u767D\u70E7\u4E0A\u4E0B\u6587\uFF09\u3002","12. \u5BF9\u8BDD\u5386\u53F2\u91CC\u53EF\u80FD\u5E26\u6709\u66F4\u65E9\u8F6E\u6B21\u7684\u63D0\u95EE\u4E0E\u7ED3\u8BBA\uFF1A\u8FFD\u95EE\u5148\u7ED3\u5408\u5386\u53F2\u7406\u89E3\uFF1B\u5F15\u7528\u6587\u4EF6\u73B0\u72B6\u524D\u91CD\u65B0 read_file \u786E\u8BA4\uFF0C\u5386\u53F2\u91CC\u7684\u4EE3\u7801\u53EF\u80FD\u5DF2\u7ECF\u53D8\u4E86\u3002","13. \u5DE5\u5177\u7ED3\u679C\u6216\u66F4\u65E9\u8F6E\u6B21\u82E5\u88AB\u538B\u7F29\u6210\u300C\u5DF2\u7701\u7565\u2026id=sp_\u2026\u300D\u6216\u51FA\u73B0\u300C\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\u300D\uFF1A\u9700\u8981\u539F\u6587\u65F6\u7528 read_spill \u6309 id \u53D6\u56DE\uFF1B\u4E0D\u8981\u81C6\u9020\u88AB\u7701\u7565\u7684\u5185\u5BB9\u3002"],EF=g_.concat([OF],y_).join(`
|
|
1089
1089
|
`),PF=g_.concat(y_).join(`
|
|
1090
|
-
`);function
|
|
1090
|
+
`);function cr(t,e,n,s,r){let o=t==="plan",i=t==="explore",a=!!(s&&s.compact)&&!o&&!i,c=[i?ja:a?n===!1?AF:Ac:o?n===!1?PF:EF:n===!1?MF:Cc],u=String(e??"")||R();u&&c.push("\u5DE5\u4F5C\u76EE\u5F55\uFF1A"+u);try{Sa(u,{refresh:!1});let f=en.block();f&&c.push(f)}catch(f){k("system_prompt_extra_failed",{message:f.message})}try{let f=Gt.block();f&&c.push(f)}catch(f){k("system_prompt_extra_failed",{message:f.message})}!i&&Kh()&&c.push(jF),!i&&!o&&Jh()&&ue.available().ok&&c.push(IF),i&&c.push(Gc(n));let d=r==="concise"?"concise":r==="detailed"?"detailed":"normal";return!o&&!i&&d==="concise"?c.push("\u6C47\u62A5\u8981\u6C42\uFF1A\u5B8C\u6210\u540E\u53EA\u7ED9\u4E00\u53E5\u8BDD\u7ED3\u8BBA\uFF08\u6539\u4E86\u54EA\u4E9B\u6587\u4EF6 + \u9A8C\u8BC1\u7ED3\u679C\uFF09\uFF0C\u4E0D\u8981\u5206\u6761\u3002"):!o&&!i&&d==="detailed"&&c.push("\u6C47\u62A5\u8981\u6C42\uFF1A\u5B8C\u6210\u540E\u7ED9\u7ED3\u6784\u5316\u6C47\u62A5\u2014\u2014\u6539\u52A8\u6587\u4EF6\u6E05\u5355\uFF08\u6BCF\u6587\u4EF6\u4E00\u884C\uFF1A\u505A\u4E86\u4EC0\u4E48 + \u9A8C\u8BC1\u7ED3\u679C\uFF09\u3001\u672A\u5B8C\u6210\u9879\u3001\u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3002"),c.join(`
|
|
1091
1091
|
|
|
1092
1092
|
`)}var jF=["\u6D4F\u89C8\u5668\u5DE5\u5177\uFF08\u53EA\u8BFB\uFF09\uFF1A\u7528 `browser` \u5728\u771F\u5B9E\u7684\u65E0\u5934\u6D4F\u89C8\u5668\u91CC\u770B\u9875\u9762\uFF0C\u9002\u5408\u9A8C\u8BC1\u524D\u7AEF\u6E32\u67D3\u7ED3\u679C\u3001\u6392\u67E5\u300C\u672C\u5730\u8DD1\u8D77\u6765\u4F46\u9875\u9762\u4E0D\u5BF9\u300D\u3002","\u7528\u6CD5\uFF1A`open` \u6253\u5F00\u5730\u5740 \u2192 `snapshot` \u8BFB\u53EF\u8BBF\u95EE\u6027\u5927\u7EB2\uFF08\u9ED8\u8BA4\u5148\u770B\u8FD9\u4E2A\uFF0C\u6700\u7701 token\uFF09\u2192 \u9700\u8981\u786E\u8BA4\u89C6\u89C9\u7ED3\u679C\u65F6\u518D `screenshot`\uFF1B\u9875\u9762\u62A5\u9519\u7528 `console`\uFF0C\u8BF7\u6C42\u5931\u8D25\u7528 `network`\u3002\u7528\u5B8C `close`\uFF08\u7A7A\u95F2\u5230\u70B9\u4E5F\u4F1A\u81EA\u52A8\u5173\uFF09\u3002","\u987A\u5E8F\u5EFA\u8BAE\uFF1A\u9759\u6001\u6B63\u6587\u5148\u7528 `web_fetch`\uFF08\u4FBF\u5B9C\uFF09\uFF1B\u5B83\u53EA\u80FD\u62FF\u5230\u9AA8\u67B6\u3001\u6216\u8981\u786E\u8BA4\u6E32\u67D3 / \u8D44\u6E90\u52A0\u8F7D\u7ED3\u679C\u65F6\u518D\u4E0A `browser`\u3002","\u9650\u5236\uFF1A\u4E0D\u80FD\u70B9\u51FB\u3001\u4E0D\u80FD\u8F93\u5165\u3001\u4E0D\u80FD\u6267\u884C\u4EFB\u610F\u811A\u672C\uFF1B\u6253\u5F00\u7684\u662F\u72EC\u7ACB\u4E34\u65F6 profile\uFF0C\u4E0D\u5E26\u4F60\u7684\u767B\u5F55\u6001\u3002"].join(`
|
|
1093
|
-
`),IF=["\u684C\u9762\u64CD\u4F5C\uFF08"+gS+"\uFF09\uFF1A\u7528 `computer` \u76F4\u63A5\u64CD\u4F5C\u672C\u673A\u7A97\u53E3\uFF0C\u9002\u5408\u9A8C\u8BC1 GUI\uFF08\u7F16\u8F91\u5668 / \u6A21\u62DF\u5668 / \u672C\u5730 App\uFF09\u6216\u64CD\u4F5C\u6CA1\u6709\u547D\u4EE4\u884C\u7684\u754C\u9762\u3002","\u52A8\u4F5C\uFF1A`screenshot` \u622A\u5C4F / `ocr` \u8BC6\u522B\u5C4F\u5E55\u6587\u5B57 / `windows` \u5217\u53EF\u89C1\u7A97\u53E3\uFF08\u542B\u4F4D\u7F6E\u4E0E id\uFF09/ `frontmost` \u770B\u524D\u53F0\u5E94\u7528"," / `click` \u70B9\u51FB\uFF08button\u3001count=2 \u53CC\u51FB\uFF09/ `move` / `drag` / `scroll`\uFF08dy \u6B63\u6570\u5411\u4E0B\uFF09/ `type` \u8F93\u5165\uFF08submit \u52A0\u56DE\u8F66\uFF09/ `key` \u7EC4\u5408\u952E\uFF08\u5982 "+(
|
|
1093
|
+
`),IF=["\u684C\u9762\u64CD\u4F5C\uFF08"+gS+"\uFF09\uFF1A\u7528 `computer` \u76F4\u63A5\u64CD\u4F5C\u672C\u673A\u7A97\u53E3\uFF0C\u9002\u5408\u9A8C\u8BC1 GUI\uFF08\u7F16\u8F91\u5668 / \u6A21\u62DF\u5668 / \u672C\u5730 App\uFF09\u6216\u64CD\u4F5C\u6CA1\u6709\u547D\u4EE4\u884C\u7684\u754C\u9762\u3002","\u52A8\u4F5C\uFF1A`screenshot` \u622A\u5C4F / `ocr` \u8BC6\u522B\u5C4F\u5E55\u6587\u5B57 / `windows` \u5217\u53EF\u89C1\u7A97\u53E3\uFF08\u542B\u4F4D\u7F6E\u4E0E id\uFF09/ `frontmost` \u770B\u524D\u53F0\u5E94\u7528"," / `click` \u70B9\u51FB\uFF08button\u3001count=2 \u53CC\u51FB\uFF09/ `move` / `drag` / `scroll`\uFF08dy \u6B63\u6570\u5411\u4E0B\uFF09/ `type` \u8F93\u5165\uFF08submit \u52A0\u56DE\u8F66\uFF09/ `key` \u7EC4\u5408\u952E\uFF08\u5982 "+(ds?"ctrl+shift+p":"cmd+shift+p")+"\uFF09\u3002","\u987A\u5E8F\uFF1A\u5148\u7528 `windows` / `frontmost` \u5B9A\u4F4D\u76EE\u6807\u7A97\u53E3 \u2192 `screenshot`\uFF08\u6216\u6CA1\u6709 vision \u65F6\u7684 `ocr`\uFF09\u770B\u6E05\u754C\u9762 \u2192 \u518D\u70B9\u3002","\u5750\u6807\uFF1A\u4E00\u5F8B\u662F\u300C"+(ds?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9")+"\u300D\uFF0C\u4E3B\u5C4F\u5DE6\u4E0A\u4E3A\u539F\u70B9\u3002\u622A\u56FE\u9ED8\u8BA4 1:1\uFF08\u56FE\u4E0A\u50CF\u7D20\u5C31\u662F\u5C4F\u5E55"+(ds?"\u50CF\u7D20":"\u70B9")+"\uFF09\uFF0C\u56DE\u62A5\u91CC\u4F1A\u5199\u660E\uFF1B"," \u88AB\u538B\u8FC7\u65F6\u4F1A\u7ED9\u51FA\u500D\u7387\uFF0C\u6B64\u65F6\u4E5F\u53EF\u4EE5\u76F4\u63A5\u4F20 `imageCoords: true`\uFF0C\u8BA9\u5DE5\u5177\u6309\u6700\u8FD1\u4E00\u5F20\u622A\u56FE\u6362\u7B97\u3002","\u70B9\u504F\u4E86\u5148\u522B\u4E71\u8BD5\uFF1A\u91CD\u65B0\u622A\u56FE\u786E\u8BA4\u4F4D\u7F6E\uFF0C\u6216\u7528 `region` \u53EA\u622A\u90A3\u4E00\u5757\u518D\u770B\uFF1B`ocr` \u8FD4\u56DE\u7684\u6BCF\u884C\u90FD\u5E26\u5750\u6807\u3002",ds?"\u4FEE\u9970\u952E\uFF1Actrl / shift / alt / win\uFF08`cmd` \u4E5F\u6620\u5C04\u5230 Win \u952E\uFF0C\u7167\u6284 macOS \u4E60\u60EF\u7684 cmd+shift+p \u4E00\u6837\u80FD\u7528\uFF09\u3002":"\u4FEE\u9970\u952E\uFF1Acmd / shift / ctrl / alt\uFF08cmd \u5C31\u662F \u2318\uFF09\u3002","\u9650\u5236\uFF1A\u4F1A\u52A8\u952E\u9F20\u7684\u52A8\u4F5C\u7B2C\u4E00\u6B21\u9700\u8981\u7528\u6237\u786E\u8BA4\uFF08`luban.computer.confirm`\uFF09\uFF1BPlan \u6A21\u5F0F\u4E0D\u53EF\u7528\uFF1B",KI,ds?"Windows \u540E\u7AEF\u6CA1\u6709 OCR\uFF08`ocr` \u53EA\u8FD4\u56DE\u964D\u7EA7\u8BF4\u660E\uFF09\uFF1A\u8981\u770B\u6587\u5B57\u8BF7\u76F4\u63A5 `screenshot` \u7528 vision \u8BFB\u3002":"","\u4E0D\u8981\u7528\u5B83\u4EE3\u66FF `run_command` / `browser`\uFF1A\u80FD\u4E00\u6761\u547D\u4EE4\u89E3\u51B3\u7684\u4E0D\u8BE5\u53BB\u70B9\u754C\u9762\u3002"].filter(Boolean).join(`
|
|
1094
1094
|
`),NF=[Ya,"\u4F60\u5728\u8FD9\u4E2A\u4F1A\u8BDD\u91CC\u53EA\u505A\u95EE\u7B54\uFF1A\u4E0D\u8BFB\u5199\u6587\u4EF6\u3001\u4E0D\u6267\u884C\u547D\u4EE4\u3002","\u89C4\u5219\uFF1A","1. \u4E2D\u6587\u56DE\u7B54\uFF0C\u7B80\u6D01\u76F4\u63A5\u3002","2. \u7528\u6237\u6D88\u606F\u91CC\u5E26\u3010\u8054\u7F51\u641C\u7D22\u7ED3\u679C\u3011\u65F6\uFF0C\u53EA\u4F9D\u636E\u8FD9\u4E9B\u7ED3\u679C\u4F5C\u7B54\uFF0C\u5E76\u7528 [n] \u6807\u6CE8\u6765\u6E90\u7F16\u53F7\uFF1B\u7ED3\u679C\u8986\u76D6\u4E0D\u5230\u5C31\u76F4\u8BF4\u201C\u641C\u7D22\u7ED3\u679C\u91CC\u6CA1\u6709\u53EF\u9760\u4FE1\u606F\u201D\uFF0C\u4E0D\u8981\u7F16\u9020\u3002","3. \u6CA1\u6709\u8054\u7F51\u7ED3\u679C\u65F6\u6309\u4F60\u81EA\u5DF1\u7684\u77E5\u8BC6\u56DE\u7B54\uFF0C\u4E0D\u786E\u5B9A\u7684\u5730\u65B9\u8BF4\u660E\u4E0D\u786E\u5B9A\u3002","4. \u6D88\u606F\u91CC\u5E26\u300C[\u5F53\u524D\u6587\u4EF6]\u300D\u5757\u65F6\uFF0C\u90A3\u662F\u7528\u6237\u6B64\u523B\u5728\u7F16\u8F91\u5668\u91CC\u770B\u7684\u4EE3\u7801\uFF08\u65E0\u9009\u533A\u65F6\u53EA\u662F\u5149\u6807\u9644\u8FD1\u7684\u4E00\u6BB5\uFF09\uFF1A\u7ED3\u5408\u5B83\u56DE\u7B54\uFF0C\u4E0D\u8981\u51ED\u7A7A\u8865\u5168\u6587\u4EF6\u5176\u5B83\u90E8\u5206\uFF1B\u5B83\u53EA\u662F\u80CC\u666F\uFF0C\u4E0D\u7B49\u4E8E\u672C\u6761\u8981\u95EE\u7684\u5BF9\u8C61\u3002"].join(`
|
|
1095
1095
|
`),FF=["\u3010\u672C\u8F6E\u4E3A\u8054\u7F51\u95EE\u7B54\u3011\u53EA\u4F9D\u636E\u4E0B\u9762\u3010\u8054\u7F51\u641C\u7D22\u7ED3\u679C\u3011\u4F5C\u7B54\uFF1B\u7ED3\u679C\u8986\u76D6\u4E0D\u5230\u65F6\u660E\u786E\u8BF4\u201C\u641C\u7D22\u7ED3\u679C\u91CC\u6CA1\u6709\u53EF\u9760\u4FE1\u606F\u201D\uFF0C\u4E0D\u8981\u7F16\u9020\u3002","\u6BCF\u4E2A\u5173\u952E\u7ED3\u8BBA\u540E\u7528 [n] \u6807\u6CE8\u6765\u6E90\u7F16\u53F7\u3002"].join(`
|
|
1096
1096
|
`),Xo={maxRounds:200,maxMinutes:30,noWriteNudges:2,windowRatio:.8,lowRatio:.5,requestTimeoutMs:18e4,keepTailSteps:[8,4,2,0],repeatLimit:3,errorLimit:4,fpTotalLimit:6,parallelMax:4,lengthRetry:2,summaryMaxTokens:2048},LF={concise:512,normal:2048,detailed:4096},Xv=4e3,Yv="start",Zv="end",Ia=6e3,DF="\u3010\u6D4F\u89C8\u5668\u622A\u56FE\u3011\u8FD9\u662F\u4E0A\u4E00\u6B65 browser \u5DE5\u5177\u62CD\u4E0B\u7684\u9875\u9762\uFF0C\u7528\u4E8E\u5224\u65AD\u6E32\u67D3\u7ED3\u679C\u3002\u53EA\u4FDD\u7559\u6700\u65B0\u4E00\u5F20\uFF1B\u4ECD\u9700\u8981\u7ED3\u6784\u4FE1\u606F\u65F6\u7528 browser action=snapshot\uFF0C\u9700\u8981\u66F4\u591A\u5386\u53F2\u753B\u9762\u8BF7\u91CD\u65B0\u622A\u56FE\u3002",RF="\u3010\u684C\u9762\u622A\u56FE\u3011\u8FD9\u662F\u4E0A\u4E00\u6B65 computer \u5DE5\u5177\u62CD\u4E0B\u7684\u672C\u673A\u5C4F\u5E55\u3002\u70B9\u51FB\u524D\u5148\u786E\u8BA4\u5750\u6807\u53E3\u5F84\uFF08\u56DE\u62A5\u91CC\u5199\u4E86 1:1 \u8FD8\u662F\u8981\u4E58\u500D\u7387\uFF09\uFF0C\u62FF\u4E0D\u51C6\u5C31\u91CD\u65B0\u622A\u56FE\u6216\u4F20 imageCoords=true\u3002\u53EA\u4FDD\u7559\u6700\u65B0\u4E00\u5F20\u3002";function zc(t){let e=String(t??"");return e.length<=Ia?e:e.slice(0,Ia)+`
|
|
@@ -1108,34 +1108,34 @@ Plugins run on this machine with your permissions. After installing, you still h
|
|
|
1108
1108
|
- `+h.join(`
|
|
1109
1109
|
- `)),Vc(t)&&p.push("\u76EE\u5F55\u5F15\u7528\u542B\u5206\u6279\u6E05\u5355\uFF1A\u53EF\u6307\u5B9A\u4E0B\u4E00\u6279\u5B50\u76EE\u5F55\u7EE7\u7EED\uFF08\u4F8B\u5982\u300C\u7EE7\u7EED xxx/\u300D\uFF09\u3002"),{text:p.join(`
|
|
1110
1110
|
|
|
1111
|
-
`),usage:null}}var HF=/context length|context_length|n_ctx|maximum context|context window|too long|exceed.{0,12}(maximum|max|context)|prompt is too long|reduce the length|上下文.{0,6}(超|满)|超出.{0,8}上下文/i;function GF(t){let e=String(t&&t.message||t||"");return HF.test(e)}async function Is(t,e){let n=e||{},s=n.root||R(),r=nm(),o=n.maxIters==null?r.maxRounds:Number(n.maxIters),i=isFinite(o)&&o>=0?Math.floor(o):r.maxRounds,a=Number(n.maxMinutes),l=isFinite(a)&&a>0?a:r.maxMinutes,c=l*6e4,u=Date.now()+c,d=c>=12e4?Math.min(45e3,Math.max(2e4,Math.floor(c*.1))):0,f=typeof n.askWait=="function"?async function(z){let ee=Date.now();try{return await n.askWait(z)}finally{u+=Date.now()-ee}}:n.askWait,p=typeof n.confirmWrite=="function"?async function(z){let ee=Date.now();try{return await n.confirmWrite(z)}finally{u+=Date.now()-ee}}:n.confirmWrite,h=n.mode==="plan"?"plan":n.mode==="explore"?"explore":"agent",m=h==="plan",y=h==="explore",w=m||y,T=y?null:{max:so.perTurn,left:so.perTurn},g=typeof n.onSubProgress=="function"?n.onSubProgress:n.onProgress?function(z){if(!(z&&z.running===!1))try{n.onProgress("\u5B50\u4EE3\u7406\u300C"+(z&&z.description||"")+"\u300D"+(z&&z.line||""))}catch{}}:null,v=PS(t),b=!!(n.webSearch||v.web),S=mt(n.modelKey),_=yh(S),C=bn.profile(_,{mode:sm()}),A=h!=="agent"?"normal":n.verbosity==="concise"||n.verbosity==="detailed"?n.verbosity:n.verbosity==="normal"?"normal":BF(),F={perFile:C.refPerFile,total:C.refTotal,readMax:C.readMax},B=to(v.prompt,s,{budgets:F});if(n.onRefs&&B.refs.length)try{n.onRefs(B.refs)}catch{}let H=y?"":Bh(B.refs,s,C,{sessionId:n.sessionId}),$=[],J=function(){if(n.onUsage)try{n.onUsage(Ka($,_,S&&S.model&&S.model.id))}catch{}},P=[],K=[],ae=new AbortController;n.token&&n.token.onCancellationRequested&&n.token.onCancellationRequested(()=>ae.abort());let te="";if(b){if(n.onProgress)try{n.onProgress("web_search "+(v.prompt||t).slice(0,40))}catch{}if(n.onTool)try{n.onTool({phase:Yv,id:"web:0",name:"web_search",path:String(v.prompt||t).slice(0,60)})}catch{}let z=await jS(v.prompt||t,S,{signal:ae.signal,onSearch:n.onSearch});te=z.block;let ee={phase:Zv,id:"web:0",name:"web_search",path:z.query.slice(0,60),ok:z.results.length>0,result:z.results.length+" \u6761\u7ED3\u679C"};if(P.push(ee),k("agent_tool",ee),n.onTool)try{n.onTool(ee)}catch{}}try{await xe.ready()}catch(z){k("mcp_ready_failed",{message:z.message})}let Q="";if(!y)try{Q=xe.promptBlock()}catch(z){k("mcp_prompt_failed",{message:z.message})}let he=(Array.isArray(n.history)?n.history:[]).map(function(z){return{role:z.role,content:Array.isArray(z.content)?z.content:String(z.content==null?"":z.content)}}),G=[{role:"system",content:lr(h,s,Jn(S&&S.provider)!=="none",C,A)}].concat(he),Ie=[],Se=String(n.spillDigest||"").trim(),yt=y?"":$S(n.sessionId),St="";if(!y)try{let z=[];for(let E of B.refs||[])E&&E.path&&z.push(String(E.path));let ee=RS(n.sessionId);if(ee)for(let E of ee)z.push(String(E));for(let E of de.values())(!n.sessionId||!E.sessionId||E.sessionId===n.sessionId)&&z.push(E.abs);St=en.matched(z),St&&k("agent_rules_matched",{files:z.length,chars:St.length})}catch(z){k("agent_rules_failed",{message:z.message})}let Me=Os.buildUserTurn({envBlock:Q,spillBlock:Se,rule:St,autoBlock:H,webBlock:te,worksetBlock:yt,refText:B.text});if(eo.pushUser(G,Me),Array.isArray(n.images)&&n.images.length){let z=G[G.length-1];z&&z.role==="user"&&typeof z.content=="string"&&(z.content=_e.toContent(z.content,n.images))}if(n.onUserTurn)try{n.onUserTurn(Me)}catch{}he.length&&k("agent_memory",{messages:he.length,chars:he.reduce(function(z,ee){return z+Oe.contentChars(ee.content)},0),plan:m});let Dt=ar(h,S,C),Et=Oe.charsOfTools(Dt),qe=_,Wn=Math.floor(qe*r.windowRatio),Ns=Math.floor(qe*r.lowRatio),ms=function(){return Oe.charsOf(G)+Et},Be=Oe.DEFAULTS.ratio,ct=function(z){return Oe.estimateTokens(z,Be)},oe=function(z){return Math.floor(z/Oe.ratioOf(Be))-Et},pe=0,Ne=null,wt="",gs=[],on=!1,Rt=0,Pt=0,ns=!1,Ze=0,En="",Kn="",Fs=0,ys=0,ao=new Map,ai=0,Qa=n.spillStore&&typeof n.spillStore.put=="function"?n.spillStore:_n.createStore(),wu=su(Qa),lo=0;function co(z){let ee=z>0?z:Wn;if(ct(ms())<=ee)return!0;for(let Z of C.keepTailSteps){let Y=Oe.compact(G,{keepTail:Z,spill:wu});if(Y.beforeChars===Y.afterChars)break;G.length=0;for(let Je of Y.messages)G.push(Je);if(k("agent_compact",{iters:pe,keepTail:Z,beforeChars:Y.beforeChars,afterChars:Y.afterChars,omittedTools:Y.omittedTools,omittedArgs:Y.omittedArgs,spilled:Y.spilled||0,tokensBefore:ct(Y.beforeChars+Et),tokensAfter:ct(Y.afterChars+Et),highTokens:ee,tier:C.tier}),ct(Y.afterChars+Et)<=Ns)break}if(ct(ms())<=ee)return!0;let E=z>0?z:Ns,L=bn.squeeze(G,oe(E),{summaryReserve:bn.DEFAULTS.summaryReserve});if(L.ok||(lo=Math.max(lo,L.minChars)),L.ok&&L.dropped>0){G.length=0;for(let Z of L.messages)G.push(Z);k("agent_squeeze",{iters:pe,dropped:L.dropped,beforeChars:L.beforeChars,afterChars:L.chars,tokensAfter:ct(L.chars+Et),highTokens:ee,tier:C.tier})}return ct(ms())<=ee}function el(){let z=String(G[0]&&G[0].content||"").length,ee=ct(z+Et),E=lo>0?ct(lo+Et):ct(ms()),L=C.tier==="tiny"||C.tier==="small"?"\uFF1B\u672C\u5730\u6A21\u578B\u8BF7\u786E\u8BA4 providers.json \u91CC\u7684 maxInputTokens \u4E0E\u6A21\u578B\u5B9E\u9645\u7A97\u53E3\u4E00\u81F4\uFF0C\u6216\u6539\u7528 \u226516k \u7A97\u53E3\u7684\u6A21\u578B":"\uFF1B\u53EF\u8C03\u5C0F luban.context.autoFileMaxChars / luban.sessionMemory.maxChars\uFF0C\u6216\u6362\u66F4\u5927\u7A97\u53E3\u7684\u6A21\u578B";return"\u4E0A\u4E0B\u6587\u7A97\u53E3 "+_+" token\uFF08\u9AD8\u6C34\u4F4D "+Wn+"\uFF09\uFF1A\u7CFB\u7EDF\u63D0\u793A + \u5DE5\u5177\u5B9A\u4E49\u56FA\u5B9A\u7EA6 "+ee+" token\uFF0C\u538B\u7F29\u5230\u6700\u5C0F\u4ECD\u9700 "+E+" token"+L}for(;;){if(i>0&&pe>=i){Ne={reason:"maxRounds",detail:"\u8FBE\u5230\u6A21\u578B\u8BF7\u6C42\u8F6E\u6570\u4E0A\u9650 "+i};break}let z=u-Date.now();if(z<=0){Ne={reason:"timeout",detail:"\u8D85\u8FC7\u5899\u949F\u4E0A\u9650 "+l+" \u5206\u949F"};break}if(d>0&&z<=d){Ne={reason:"timeout",detail:"\u5899\u949F\u5269\u4F59 "+Math.ceil(z/1e3)+" \u79D2\uFF0C\u9884\u7559\u6536\u5C3E\u603B\u7ED3\u65F6\u95F4"};break}if(!co()){Ne={reason:"context",detail:el()};break}let ee;if(typeof n.onRound=="function")try{n.onRound(pe+1)}catch{}try{ee=await ti(G,n.modelKey,{tools:Dt,onToken:n.onToken,onReasoning:n.onReasoning,onSplit:n.onSplit,signal:ae.signal,thinking:n.thinking,verbosity:A,snapshot:pe===0,iter:pe,timeoutMs:Math.max(1e3,Math.min(r.requestTimeoutMs,z))})}catch(q){if(String(q&&q.message).indexOf("\u8BF7\u6C42\u8D85\u65F6")===0){Ne={reason:"timeout",detail:q.message};break}if(GF(q)&&Ze<2){Ze++,qe=Math.max(2048,Math.floor(qe*.8)),Wn=Math.floor(qe*r.windowRatio),Ns=Math.floor(qe*r.lowRatio);let re=co(Math.floor(Wn*.75));if(k("agent_window_guess",{iters:pe,window:qe,highTokens:Wn,squeezed:re,message:String(q&&q.message||"").slice(0,160)}),n.onProgress)try{n.onProgress(O("ext.ctxOverflowShrink",{window:qe}))}catch{}if(re)continue}throw q}if(pe++,ee.reasoning&&K.push(ee.reasoning),gs.push({text:ee.content||"",reasoning:ee.reasoning||"",cont:on}),typeof n.onRoundEnd=="function")try{n.onRoundEnd({iter:pe,text:ee.content||"",reasoning:ee.reasoning||"",cont:on})}catch{}on=!1;let E=Number(ee.cache&&ee.cache.promptTokens)||0;if(E>0){let q=Oe.charsOf(G)+Et;q>0&&(Be=Oe.ratioOf(E/q))}if($.push(Qh(ee,G,Be)),J(),!ee.toolCalls.length){if(wt=ee.content||"",(ee.finishReason==="length"||ee.finishReason==="max_tokens")&&Rt<r.lengthRetry){Rt++,on=!0;let q=wt||String(ee.rawContent||"");k("agent_length_retry",{iters:pe,chars:wt.length,resumeChars:q.length,retry:Rt}),G.push({role:"assistant",content:q}),G.push({role:"user",content:"\u4E0A\u4E00\u6761\u8F93\u51FA\u88AB\u957F\u5EA6\u4E0A\u9650\u622A\u65AD\u4E86\u3002\u8BF7\u4ECE\u65AD\u70B9\u63A5\u7740\u5199\uFF0C\u4E0D\u8981\u91CD\u590D\u5DF2\u7ECF\u5199\u8FC7\u7684\u5185\u5BB9\u3002"});continue}if(!w&&P.length>0&&!x_(P)&&!Oc(P)&&r.noWriteNudges>0){let q=u-Date.now();if(Pt<r.noWriteNudges&&q>Math.max(5e3,d)){Pt++,k("agent_no_write_nudge",{iters:pe,toolCalls:P.length,chars:wt.length,nudge:Pt,max:r.noWriteNudges}),G.push({role:"assistant",content:wt}),G.push({role:"user",content:"\u3010\u7CFB\u7EDF\u3011\u672C\u8F6E\u5DF2\u8C03\u7528\u5DE5\u5177\u4F46\u5C1A\u672A\u6210\u529F\u4FEE\u6539\u6587\u4EF6\u3002\u5982\u679C\u4EFB\u52A1\u8FD8\u6CA1\u6709\u5B8C\u6210\uFF0C\u5FC5\u987B\u7EE7\u7EED\u8C03\u7528\u5DE5\u5177\u628A\u4EFB\u52A1\u505A\u5B8C\uFF0C\u4E0D\u8981\u603B\u7ED3\u6536\u5C3E\uFF1B\u53EA\u6709\u786E\u8BA4\u4EFB\u52A1\u5DF2\u5168\u90E8\u5B8C\u6210\u65F6\uFF0C\u624D\u5141\u8BB8\u5199\u4E2D\u6587\u7B80\u6D01\u603B\u7ED3\u3002"});continue}wt=WF(wt,P),Ne={reason:"final",detail:"noWrites"};break}Ne={reason:"final",detail:""};break}G.push({role:"assistant",content:ee.content||"",tool_calls:ee.toolCalls});let L=ee.finishReason==="length"||ee.finishReason==="max_tokens",Z=function(q,re){let me=re.path||re.dir||(re.command?String(re.command).slice(0,60):"")||(re.job_id?String(re.job_id).slice(0,60):"")||(re.query?String(re.query).slice(0,60):"")||(re.url?String(re.url).slice(0,60):"")||(re.name?String(re.name).slice(0,60):"")||(re.pattern?String(re.pattern).slice(0,60):"")||(Array.isArray(re.patterns)?re.patterns.join(" ").slice(0,60):"")||(re.from?String(re.from).slice(0,60):"");if(!me&&q==="todo_write"){let le=sn.normalize(re.todos),li=le.filter(function(Jt){return Jt.status==="completed"||Jt.status==="cancelled"}).length;me=le.length?li+"/"+le.length:"\u66F4\u65B0\u6E05\u5355"}if(!me&&q==="apply_patch"){let le=String(re.patch||"").match(/\*\*\*\s*(Add|Update|Delete) File:/g);me=le&&le.length?le.length+" \u4E2A\u6587\u4EF6":"patch"}if(!me&&q==="ask_question"){let le=Array.isArray(re.questions)&&re.questions[0];me=String(re.title||le&&(le.prompt||le.question)||"\u63D0\u95EE").slice(0,60)}let Ue=String(q);if(!me&&(Ue.indexOf("mcp__")===0||Ue.indexOf("pl__")===0)){for(let le of Object.keys(re))if(typeof re[le]=="string"&&re[le].trim()){me=re[le].trim().slice(0,60);break}}return me},Y=ee.toolCalls.map(function(q,re){let me=q.function.name,Ue=YN(q.function.arguments),le=Ue.args;Ue.repaired&&k("tool_args_repaired",{tool:me,how:Ue.repaired});let li=le.path||le.file_path||le.from||le.dir||le.command||le.name||le.description||le.pattern||(Array.isArray(le.patterns)?le.patterns.join(" "):"")||le.url||le.action||"",Jt=me+" "+li;if(n.onProgress)try{n.onProgress(Jt.trim())}catch{}let $t={tc:q,toolName:me,args:le,label:Jt.trim().slice(0,80),id:"r"+pe+":"+re,brief:Z(me,le),run:!1,ok:!0,rejected:!1,result:""};return L?($t.ok=!1,$t.result="ERROR: "+me+" \u672A\u6267\u884C\uFF1A\u4E0A\u4E00\u6761\u56DE\u7B54\u89E6\u5230\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\uFF08finish_reason="+ee.finishReason+"\uFF09\uFF0C\u5DE5\u5177\u53C2\u6570\u5F88\u53EF\u80FD\u88AB\u622A\u65AD\u3002\u8BF7\u628A\u8FD9\u6B21\u4FEE\u6539\u62C6\u5C0F\uFF08old_string / new_string \u5404\u63A7\u5236\u5728\u51E0\u5341\u884C\u4EE5\u5185\uFF09\u540E\u91CD\u65B0\u8C03\u7528\uFF0C\u4E0D\u8981\u7528 write_file \u6574\u4EFD\u91CD\u5199\u3002",k("tool_skipped_truncated",{tool:me,rawLen:String(q.function.arguments||"").length})):Ue.error?($t.ok=!1,$t.result="ERROR: "+me+" \u672A\u6267\u884C\uFF1A"+Ue.error+`
|
|
1112
|
-
\u8BF7\u91CD\u65B0\u53D1\u8D77\u8FD9\u6B21\u8C03\u7528\uFF0C\u53C2\u6570\u5FC5\u987B\u662F\u5408\u6CD5 JSON\uFF08\u5B57\u6BB5\uFF1Apath / old_string / new_string\uFF09\u3002`,k("tool_args_invalid",{tool:me,rawLen:String(q.function.arguments||"").length,hint:String(Ue.error).slice(0,Mc)})):ZN(Ue.args)?(
|
|
1113
|
-
`+Jt,k("tool_repeat_warn",{tool:me,fails:
|
|
1111
|
+
`),usage:null}}var HF=/context length|context_length|n_ctx|maximum context|context window|too long|exceed.{0,12}(maximum|max|context)|prompt is too long|reduce the length|上下文.{0,6}(超|满)|超出.{0,8}上下文/i;function GF(t){let e=String(t&&t.message||t||"");return HF.test(e)}async function Ns(t,e){let n=e||{},s=n.root||R(),r=nm(),o=n.maxIters==null?r.maxRounds:Number(n.maxIters),i=isFinite(o)&&o>=0?Math.floor(o):r.maxRounds,a=Number(n.maxMinutes),l=isFinite(a)&&a>0?a:r.maxMinutes,c=l*6e4,u=Date.now()+c,d=c>=12e4?Math.min(45e3,Math.max(2e4,Math.floor(c*.1))):0,f=typeof n.askWait=="function"?async function(z){let ee=Date.now();try{return await n.askWait(z)}finally{u+=Date.now()-ee}}:n.askWait,p=typeof n.confirmWrite=="function"?async function(z){let ee=Date.now();try{return await n.confirmWrite(z)}finally{u+=Date.now()-ee}}:n.confirmWrite,h=n.mode==="plan"?"plan":n.mode==="explore"?"explore":"agent",m=h==="plan",y=h==="explore",w=m||y,T=y?null:{max:so.perTurn,left:so.perTurn},g=typeof n.onSubProgress=="function"?n.onSubProgress:n.onProgress?function(z){if(!(z&&z.running===!1))try{n.onProgress("\u5B50\u4EE3\u7406\u300C"+(z&&z.description||"")+"\u300D"+(z&&z.line||""))}catch{}}:null,v=PS(t),b=!!(n.webSearch||v.web),S=mt(n.modelKey),_=yh(S),C=bn.profile(_,{mode:sm()}),A=h!=="agent"?"normal":n.verbosity==="concise"||n.verbosity==="detailed"?n.verbosity:n.verbosity==="normal"?"normal":BF(),F={perFile:C.refPerFile,total:C.refTotal,readMax:C.readMax},B=to(v.prompt,s,{budgets:F});if(n.onRefs&&B.refs.length)try{n.onRefs(B.refs)}catch{}let H=y?"":Bh(B.refs,s,C,{sessionId:n.sessionId}),$=[],J=function(){if(n.onUsage)try{n.onUsage(Ka($,_,S&&S.model&&S.model.id))}catch{}},P=[],K=[],ae=new AbortController;n.token&&n.token.onCancellationRequested&&n.token.onCancellationRequested(()=>ae.abort());let te="";if(b){if(n.onProgress)try{n.onProgress("web_search "+(v.prompt||t).slice(0,40))}catch{}if(n.onTool)try{n.onTool({phase:Yv,id:"web:0",name:"web_search",path:String(v.prompt||t).slice(0,60)})}catch{}let z=await jS(v.prompt||t,S,{signal:ae.signal,onSearch:n.onSearch});te=z.block;let ee={phase:Zv,id:"web:0",name:"web_search",path:z.query.slice(0,60),ok:z.results.length>0,result:z.results.length+" \u6761\u7ED3\u679C"};if(P.push(ee),k("agent_tool",ee),n.onTool)try{n.onTool(ee)}catch{}}try{await xe.ready()}catch(z){k("mcp_ready_failed",{message:z.message})}let Q="";if(!y)try{Q=xe.promptBlock()}catch(z){k("mcp_prompt_failed",{message:z.message})}let he=(Array.isArray(n.history)?n.history:[]).map(function(z){return{role:z.role,content:Array.isArray(z.content)?z.content:String(z.content==null?"":z.content)}}),G=[{role:"system",content:cr(h,s,Jn(S&&S.provider)!=="none",C,A)}].concat(he),Ie=[],Se=String(n.spillDigest||"").trim(),yt=y?"":$S(n.sessionId),St="";if(!y)try{let z=[];for(let E of B.refs||[])E&&E.path&&z.push(String(E.path));let ee=RS(n.sessionId);if(ee)for(let E of ee)z.push(String(E));for(let E of de.values())(!n.sessionId||!E.sessionId||E.sessionId===n.sessionId)&&z.push(E.abs);St=en.matched(z),St&&k("agent_rules_matched",{files:z.length,chars:St.length})}catch(z){k("agent_rules_failed",{message:z.message})}let Me=Es.buildUserTurn({envBlock:Q,spillBlock:Se,rule:St,autoBlock:H,webBlock:te,worksetBlock:yt,refText:B.text});if(eo.pushUser(G,Me),Array.isArray(n.images)&&n.images.length){let z=G[G.length-1];z&&z.role==="user"&&typeof z.content=="string"&&(z.content=_e.toContent(z.content,n.images))}if(n.onUserTurn)try{n.onUserTurn(Me)}catch{}he.length&&k("agent_memory",{messages:he.length,chars:he.reduce(function(z,ee){return z+Oe.contentChars(ee.content)},0),plan:m});let Rt=lr(h,S,C),Et=Oe.charsOfTools(Rt),qe=_,Wn=Math.floor(qe*r.windowRatio),Fs=Math.floor(qe*r.lowRatio),gs=function(){return Oe.charsOf(G)+Et},Be=Oe.DEFAULTS.ratio,ct=function(z){return Oe.estimateTokens(z,Be)},oe=function(z){return Math.floor(z/Oe.ratioOf(Be))-Et},pe=0,Ne=null,wt="",ys=[],on=!1,$t=0,Pt=0,ns=!1,Ze=0,En="",Kn="",Ls=0,ws=0,ao=new Map,ai=0,Qa=n.spillStore&&typeof n.spillStore.put=="function"?n.spillStore:_n.createStore(),wu=su(Qa),lo=0;function co(z){let ee=z>0?z:Wn;if(ct(gs())<=ee)return!0;for(let Z of C.keepTailSteps){let Y=Oe.compact(G,{keepTail:Z,spill:wu});if(Y.beforeChars===Y.afterChars)break;G.length=0;for(let Je of Y.messages)G.push(Je);if(k("agent_compact",{iters:pe,keepTail:Z,beforeChars:Y.beforeChars,afterChars:Y.afterChars,omittedTools:Y.omittedTools,omittedArgs:Y.omittedArgs,spilled:Y.spilled||0,tokensBefore:ct(Y.beforeChars+Et),tokensAfter:ct(Y.afterChars+Et),highTokens:ee,tier:C.tier}),ct(Y.afterChars+Et)<=Fs)break}if(ct(gs())<=ee)return!0;let E=z>0?z:Fs,L=bn.squeeze(G,oe(E),{summaryReserve:bn.DEFAULTS.summaryReserve});if(L.ok||(lo=Math.max(lo,L.minChars)),L.ok&&L.dropped>0){G.length=0;for(let Z of L.messages)G.push(Z);k("agent_squeeze",{iters:pe,dropped:L.dropped,beforeChars:L.beforeChars,afterChars:L.chars,tokensAfter:ct(L.chars+Et),highTokens:ee,tier:C.tier})}return ct(gs())<=ee}function el(){let z=String(G[0]&&G[0].content||"").length,ee=ct(z+Et),E=lo>0?ct(lo+Et):ct(gs()),L=C.tier==="tiny"||C.tier==="small"?"\uFF1B\u672C\u5730\u6A21\u578B\u8BF7\u786E\u8BA4 providers.json \u91CC\u7684 maxInputTokens \u4E0E\u6A21\u578B\u5B9E\u9645\u7A97\u53E3\u4E00\u81F4\uFF0C\u6216\u6539\u7528 \u226516k \u7A97\u53E3\u7684\u6A21\u578B":"\uFF1B\u53EF\u8C03\u5C0F luban.context.autoFileMaxChars / luban.sessionMemory.maxChars\uFF0C\u6216\u6362\u66F4\u5927\u7A97\u53E3\u7684\u6A21\u578B";return"\u4E0A\u4E0B\u6587\u7A97\u53E3 "+_+" token\uFF08\u9AD8\u6C34\u4F4D "+Wn+"\uFF09\uFF1A\u7CFB\u7EDF\u63D0\u793A + \u5DE5\u5177\u5B9A\u4E49\u56FA\u5B9A\u7EA6 "+ee+" token\uFF0C\u538B\u7F29\u5230\u6700\u5C0F\u4ECD\u9700 "+E+" token"+L}for(;;){if(i>0&&pe>=i){Ne={reason:"maxRounds",detail:"\u8FBE\u5230\u6A21\u578B\u8BF7\u6C42\u8F6E\u6570\u4E0A\u9650 "+i};break}let z=u-Date.now();if(z<=0){Ne={reason:"timeout",detail:"\u8D85\u8FC7\u5899\u949F\u4E0A\u9650 "+l+" \u5206\u949F"};break}if(d>0&&z<=d){Ne={reason:"timeout",detail:"\u5899\u949F\u5269\u4F59 "+Math.ceil(z/1e3)+" \u79D2\uFF0C\u9884\u7559\u6536\u5C3E\u603B\u7ED3\u65F6\u95F4"};break}if(!co()){Ne={reason:"context",detail:el()};break}let ee;if(typeof n.onRound=="function")try{n.onRound(pe+1)}catch{}try{ee=await ti(G,n.modelKey,{tools:Rt,onToken:n.onToken,onReasoning:n.onReasoning,onSplit:n.onSplit,signal:ae.signal,thinking:n.thinking,verbosity:A,snapshot:pe===0,iter:pe,timeoutMs:Math.max(1e3,Math.min(r.requestTimeoutMs,z))})}catch(q){if(String(q&&q.message).indexOf("\u8BF7\u6C42\u8D85\u65F6")===0){Ne={reason:"timeout",detail:q.message};break}if(GF(q)&&Ze<2){Ze++,qe=Math.max(2048,Math.floor(qe*.8)),Wn=Math.floor(qe*r.windowRatio),Fs=Math.floor(qe*r.lowRatio);let re=co(Math.floor(Wn*.75));if(k("agent_window_guess",{iters:pe,window:qe,highTokens:Wn,squeezed:re,message:String(q&&q.message||"").slice(0,160)}),n.onProgress)try{n.onProgress(O("ext.ctxOverflowShrink",{window:qe}))}catch{}if(re)continue}throw q}if(pe++,ee.reasoning&&K.push(ee.reasoning),ys.push({text:ee.content||"",reasoning:ee.reasoning||"",cont:on}),typeof n.onRoundEnd=="function")try{n.onRoundEnd({iter:pe,text:ee.content||"",reasoning:ee.reasoning||"",cont:on})}catch{}on=!1;let E=Number(ee.cache&&ee.cache.promptTokens)||0;if(E>0){let q=Oe.charsOf(G)+Et;q>0&&(Be=Oe.ratioOf(E/q))}if($.push(Qh(ee,G,Be)),J(),!ee.toolCalls.length){if(wt=ee.content||"",(ee.finishReason==="length"||ee.finishReason==="max_tokens")&&$t<r.lengthRetry){$t++,on=!0;let q=wt||String(ee.rawContent||"");k("agent_length_retry",{iters:pe,chars:wt.length,resumeChars:q.length,retry:$t}),G.push({role:"assistant",content:q}),G.push({role:"user",content:"\u4E0A\u4E00\u6761\u8F93\u51FA\u88AB\u957F\u5EA6\u4E0A\u9650\u622A\u65AD\u4E86\u3002\u8BF7\u4ECE\u65AD\u70B9\u63A5\u7740\u5199\uFF0C\u4E0D\u8981\u91CD\u590D\u5DF2\u7ECF\u5199\u8FC7\u7684\u5185\u5BB9\u3002"});continue}if(!w&&P.length>0&&!x_(P)&&!Oc(P)&&r.noWriteNudges>0){let q=u-Date.now();if(Pt<r.noWriteNudges&&q>Math.max(5e3,d)){Pt++,k("agent_no_write_nudge",{iters:pe,toolCalls:P.length,chars:wt.length,nudge:Pt,max:r.noWriteNudges}),G.push({role:"assistant",content:wt}),G.push({role:"user",content:"\u3010\u7CFB\u7EDF\u3011\u672C\u8F6E\u5DF2\u8C03\u7528\u5DE5\u5177\u4F46\u5C1A\u672A\u6210\u529F\u4FEE\u6539\u6587\u4EF6\u3002\u5982\u679C\u4EFB\u52A1\u8FD8\u6CA1\u6709\u5B8C\u6210\uFF0C\u5FC5\u987B\u7EE7\u7EED\u8C03\u7528\u5DE5\u5177\u628A\u4EFB\u52A1\u505A\u5B8C\uFF0C\u4E0D\u8981\u603B\u7ED3\u6536\u5C3E\uFF1B\u53EA\u6709\u786E\u8BA4\u4EFB\u52A1\u5DF2\u5168\u90E8\u5B8C\u6210\u65F6\uFF0C\u624D\u5141\u8BB8\u5199\u4E2D\u6587\u7B80\u6D01\u603B\u7ED3\u3002"});continue}wt=WF(wt,P),Ne={reason:"final",detail:"noWrites"};break}Ne={reason:"final",detail:""};break}G.push({role:"assistant",content:ee.content||"",tool_calls:ee.toolCalls});let L=ee.finishReason==="length"||ee.finishReason==="max_tokens",Z=function(q,re){let me=re.path||re.dir||(re.command?String(re.command).slice(0,60):"")||(re.job_id?String(re.job_id).slice(0,60):"")||(re.query?String(re.query).slice(0,60):"")||(re.url?String(re.url).slice(0,60):"")||(re.name?String(re.name).slice(0,60):"")||(re.pattern?String(re.pattern).slice(0,60):"")||(Array.isArray(re.patterns)?re.patterns.join(" ").slice(0,60):"")||(re.from?String(re.from).slice(0,60):"");if(!me&&q==="todo_write"){let le=sn.normalize(re.todos),li=le.filter(function(Jt){return Jt.status==="completed"||Jt.status==="cancelled"}).length;me=le.length?li+"/"+le.length:"\u66F4\u65B0\u6E05\u5355"}if(!me&&q==="apply_patch"){let le=String(re.patch||"").match(/\*\*\*\s*(Add|Update|Delete) File:/g);me=le&&le.length?le.length+" \u4E2A\u6587\u4EF6":"patch"}if(!me&&q==="ask_question"){let le=Array.isArray(re.questions)&&re.questions[0];me=String(re.title||le&&(le.prompt||le.question)||"\u63D0\u95EE").slice(0,60)}let Ue=String(q);if(!me&&(Ue.indexOf("mcp__")===0||Ue.indexOf("pl__")===0)){for(let le of Object.keys(re))if(typeof re[le]=="string"&&re[le].trim()){me=re[le].trim().slice(0,60);break}}return me},Y=ee.toolCalls.map(function(q,re){let me=q.function.name,Ue=YN(q.function.arguments),le=Ue.args;Ue.repaired&&k("tool_args_repaired",{tool:me,how:Ue.repaired});let li=le.path||le.file_path||le.from||le.dir||le.command||le.name||le.description||le.pattern||(Array.isArray(le.patterns)?le.patterns.join(" "):"")||le.url||le.action||"",Jt=me+" "+li;if(n.onProgress)try{n.onProgress(Jt.trim())}catch{}let qt={tc:q,toolName:me,args:le,label:Jt.trim().slice(0,80),id:"r"+pe+":"+re,brief:Z(me,le),run:!1,ok:!0,rejected:!1,result:""};return L?(qt.ok=!1,qt.result="ERROR: "+me+" \u672A\u6267\u884C\uFF1A\u4E0A\u4E00\u6761\u56DE\u7B54\u89E6\u5230\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\uFF08finish_reason="+ee.finishReason+"\uFF09\uFF0C\u5DE5\u5177\u53C2\u6570\u5F88\u53EF\u80FD\u88AB\u622A\u65AD\u3002\u8BF7\u628A\u8FD9\u6B21\u4FEE\u6539\u62C6\u5C0F\uFF08old_string / new_string \u5404\u63A7\u5236\u5728\u51E0\u5341\u884C\u4EE5\u5185\uFF09\u540E\u91CD\u65B0\u8C03\u7528\uFF0C\u4E0D\u8981\u7528 write_file \u6574\u4EFD\u91CD\u5199\u3002",k("tool_skipped_truncated",{tool:me,rawLen:String(q.function.arguments||"").length})):Ue.error?(qt.ok=!1,qt.result="ERROR: "+me+" \u672A\u6267\u884C\uFF1A"+Ue.error+`
|
|
1112
|
+
\u8BF7\u91CD\u65B0\u53D1\u8D77\u8FD9\u6B21\u8C03\u7528\uFF0C\u53C2\u6570\u5FC5\u987B\u662F\u5408\u6CD5 JSON\uFF08\u5B57\u6BB5\uFF1Apath / old_string / new_string\uFF09\u3002`,k("tool_args_invalid",{tool:me,rawLen:String(q.function.arguments||"").length,hint:String(Ue.error).slice(0,Mc)})):ZN(Ue.args)?(qt.ok=!1,qt.result="ERROR: "+me+' \u672A\u6267\u884C\uFF1A\u6536\u5230\u7684\u662F\u4E0A\u4E0B\u6587\u538B\u7F29\u5360\u4F4D\u53C2\u6570 {"_omitted":true}\uFF0C\u4E0D\u662F\u771F\u5B9E\u53C2\u6570\u3002\u5B83\u6765\u81EA\u5386\u53F2\u91CC\u88AB\u7701\u7565\u7684\u65E7\u5DE5\u5177\u8C03\u7528\uFF0C\u7167\u6284\u6CA1\u6709\u610F\u4E49\uFF1B\u8BF7\u6309\u5F53\u524D\u4EFB\u52A1\u91CD\u65B0\u53D1\u8D77 '+me+"\uFF0C\u5E76\u7ED9\u51FA\u5B8C\u6574\u53C2\u6570\uFF08read_file / write_file / replace_in_file \u81F3\u5C11\u8981\u7ED9 path\uFF09\u3002",k("tool_args_omitted",{tool:me,rawLen:String(q.function.arguments||"").length})):qt.run=!0,qt}),Je=async function(q){try{q.result=await Xn(q.toolName,q.args,s,ee.target,{mode:h,modelKey:ee.target&&ee.target.key,readMax:F.readMax,caps:C,todosState:n.todosState,onTodos:n.onTodos,askWait:f,confirmWrite:p,spillStore:Qa,sessionId:n.sessionId||"",autoKeep:n.autoKeep===!0,inSubagent:y,subBudget:T,onSubProgress:g,onSubUsage:function(re){let me=Array.isArray(re)?re:[];for(let Ue of me)Ue&&(Ue.subagent=!0,$.push(Ue));if(me.length&&J(),typeof n.onSubUsage=="function")try{n.onSubUsage(me)}catch{}}}),(q.toolName==="run_command"||q.toolName==="run_command_start")&&js(h,eu())&&!pr.check(String(q.args.command||"")).ok&&(q.rejected=!0)}catch(re){q.ok=!1,q.result="ERROR: "+re.message}};if(n.onTool){for(let q of Y)if(q.run)try{n.onTool({phase:Yv,id:q.id,name:q.toolName,path:q.brief})}catch{}}for(let q=0;q<Y.length;q++){let re=Y[q];if(!re.run)continue;if(!Qv[re.toolName]){await Je(re);continue}let me=[re],Ue=q+1;for(;Ue<Y.length;){let le=Y[Ue];if(le.run&&!Qv[le.toolName])break;le.run&&me.push(le),Ue++}for(let le=0;le<me.length;le+=r.parallelMax)await Promise.all(me.slice(le,le+r.parallelMax).map(Je));q=Ue-1}let rt=null,Qe="";for(let q of Y){let re=q.tc,me=q.toolName,Ue=q.args,le=q.ok,li=q.brief,Jt=String(q.result);le&&q.result&&Array.isArray(q.result.images)&&q.result.images.length&&(rt=q.result.images,Qe=me);let qt={phase:Zv,id:q.id,name:me,path:li,ok:le,result:Jt.length>Xv?Jt.slice(0,Xv)+"\u2026":Jt};if(P.push(qt),k("agent_tool",{name:qt.name,path:qt.path,ok:qt.ok,result:qt.result.slice(0,qF)}),n.onTool)try{n.onTool(qt)}catch{}let bu=me==="run_command_poll"&&le&&/^status=running\b/m.test(Jt),ci=Oe.fingerprint(me,Ue),vr=ao.get(ci)||{total:0,fails:0,label:q.label};bu||(ci===En&&Jt===Kn?Ls++:(En=ci,Kn=Jt,Ls=1),vr=ao.get(ci)||{total:0,fails:0,label:q.label},$F[me]||vr.total++,(!le||q.rejected)&&vr.fails++,ao.set(ci,vr)),le&&!q.rejected?ws=0:ws++,q.rejected&&ai++;let Mm=Jt;!L&&!bu&&vr.fails>=2&&(Mm="\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u6B64\u5DE5\u5177\u8C03\u7528\uFF08"+q.label+"\uFF09\u6B64\u524D\u5DF2\u5931\u8D25 "+vr.fails+` \u6B21\uFF0C\u8BF7\u52FF\u91CD\u8BD5\uFF0C\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\u3002
|
|
1113
|
+
`+Jt,k("tool_repeat_warn",{tool:me,fails:vr.fails})),G.push({role:"tool",tool_call_id:re.id||"call_"+(pe-1),content:Mm})}if(rt&&rt.length){if(Ie.length){let me=new Set(Ie);for(let Ue=G.length-1;Ue>=0;Ue--)me.has(G[Ue])&&G.splice(Ue,1);Ie.length=0}let re={role:"user",content:[{type:"text",text:Qe==="computer"?RF:DF}]};for(let me of rt)re.content.push({type:"image_url",image_url:{url:me.dataUrl}});G.push(re),Ie.push(re),k("shot_injected",{iters:pe,images:rt.length,from:Qe||"browser"})}if(L){if($t<r.lengthRetry){$t++,k("agent_length_retry",{iters:pe,toolCalls:ee.toolCalls.length,retry:$t,kind:"tool_args"}),G.push({role:"user",content:"\u4E0A\u4E00\u6761\u56DE\u7B54\u88AB\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\u622A\u65AD\uFF0C\u91CC\u9762\u7684\u5DE5\u5177\u8C03\u7528\u6CA1\u6709\u6267\u884C\u3002\u8BF7\u628A\u6539\u52A8\u62C6\u5C0F\uFF1Aold_string / new_string \u5404\u63A7\u5236\u5728\u51E0\u5341\u884C\u4EE5\u5185\uFF0C\u5206\u591A\u6B21 replace_in_file \u5B8C\u6210\uFF0C\u4E0D\u8981\u6574\u4EFD\u91CD\u5199\u6587\u4EF6\u3002"});continue}Ne={reason:"length",detail:"\u8F93\u51FA\u8FDE\u7EED "+($t+1)+" \u6B21\u89E6\u5230\u957F\u5EA6\u4E0A\u9650\uFF0C\u5DE5\u5177\u53C2\u6570\u65E0\u6CD5\u751F\u6210\u5B8C\u6574",maxOutTokens:Mt(ee.target&&ee.target.model&&ee.target.model.maxOutputTokens)};break}if(Ls>=r.repeatLimit){if(!ns&&u-Date.now()>d){ns=!0;let q=String(En).split("|")[0];k("agent_loop_nudge",{iters:pe,kind:"repeat",count:Ls,tool:q}),G.push({role:"user",content:"\u3010\u7CFB\u7EDF\u3011\u68C0\u6D4B\u5230\u91CD\u590D\u8C03\u7528\uFF1A"+(q||"\u540C\u4E00\u5DE5\u5177")+" \u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+Ls+" \u6B21\u8FD4\u56DE\u76F8\u540C\u7ED3\u679C\u3002\u8BF7\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\uFF0C\u6216\u76F4\u63A5\u57FA\u4E8E\u5DF2\u6709\u4FE1\u606F\u7EE7\u7EED\u5B8C\u6210\u4EFB\u52A1\uFF1B\u5982\u679C\u518D\u6B21\u51FA\u73B0\u540C\u6837\u7684\u91CD\u590D\u8C03\u7528\uFF0C\u672C\u8F6E\u5C06\u88AB\u505C\u6B62\u3002"});continue}Ne={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+Ls+" \u6B21\u8FD4\u56DE\u76F8\u540C\u7ED3\u679C"};break}if(ws>=r.errorLimit){Ne={reason:"errors",detail:"\u8FDE\u7EED "+ws+" \u6B21\u5DE5\u5177\u62A5\u9519"+(ai?"\uFF08\u672C\u8F6E\u7D2F\u8BA1 "+ai+" \u6761\u88AB\u62D2\u7EDD\u6216\u7A7A\u547D\u4EE4\uFF09":"")};break}let Xe=null;for(let q of ao.values())if(q.total>=r.fpTotalLimit){Xe=q;break}if(Xe){if(!ns&&u-Date.now()>d){ns=!0,k("agent_loop_nudge",{iters:pe,kind:"fpTotal",count:Xe.total,tool:Xe.label}),G.push({role:"user",content:"\u3010\u7CFB\u7EDF\u3011\u68C0\u6D4B\u5230\u91CD\u590D\u8C03\u7528\uFF1A\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u672C\u8F6E\u5DF2\u6267\u884C "+Xe.total+" \u6B21\uFF08"+Xe.label+"\uFF09\u3002\u8BF7\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\uFF0C\u6216\u76F4\u63A5\u57FA\u4E8E\u5DF2\u6709\u4FE1\u606F\u7EE7\u7EED\u5B8C\u6210\u4EFB\u52A1\uFF1B\u5982\u679C\u518D\u6B21\u91CD\u590D\u540C\u4E00\u8C03\u7528\uFF0C\u672C\u8F6E\u5C06\u88AB\u505C\u6B62\u3002"});continue}Ne={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u672C\u8F6E\u5DF2\u6267\u884C "+Xe.total+" \u6B21\uFF08"+Xe.label+"\uFF09"};break}if(!co()){Ne={reason:"context",detail:el()};break}}let xr=wt;if(Ne.reason!=="final"){co();let z=Math.max(0,u-Date.now()),ee=await KF(G,{modelKey:n.modelKey,stop:Ne,signal:ae.signal,iter:pe,remainingMs:z,totalMs:c,lastText:wt,toolCalls:P.length,ratio:Be,log:P,verbosity:A});xr=ee.text,ee.usage&&($.push(ee.usage),J()),xr||(xr=O("ext.summary.fallbackShort",{reason:du(Ne),n:P.length}))}if(Ne&&Ne.reason==="timeout"&&n.sessionId)try{let z=ke.stopAll(n.sessionId);z&&z.stopped&&k("async_cmd_stop_all",{sessionId:n.sessionId,stopped:z.stopped,reason:"agent_timeout"})}catch{}let uo=Ka($,_,S&&S.model&&S.model.id),tl=_F(S&&S.provider&&S.provider.id,uo);return tl&&(uo.prefixHint=tl),k("agent_done",{iters:pe,toolCalls:P.length,chars:xr.length,model:n.modelKey,mode:h,stop:Ne.reason,detail:Ne.detail,truncated:Ne.reason!=="final",tokensRatio:Number(Be.toFixed(3)),usage:uo}),jh(),{text:xr,reasoning:K.join(`
|
|
1114
1114
|
|
|
1115
|
-
`),log:P,iters:pe,roundTexts:
|
|
1115
|
+
`),log:P,iters:pe,roundTexts:ys,modelKey:S&&S.key,stop:Ne,usage:uo,window:_,usageRows:$.slice()}}function v_(t){let e=Array.isArray(t&&t.roundTexts)?t.roundTexts:[],n=[],s=!!(t&&t.stop&&t.stop.reason==="final");for(let r=0;r<e.length;r++){let o=e[r]||{},i=r===e.length-1,a=String(o.text==null?"":o.text),l=String(o.reasoning==null?"":o.reasoning);if(o.cont&&n.length){let u=n[n.length-1];u.text+=a,u.think=(u.think?u.think+`
|
|
1116
1116
|
|
|
1117
|
-
`:"")+l;continue}let c=i?!s:!0;i&&s&&(a=String(t.text==null?"":t.text)),n.push({text:a,think:l,narr:c})}return!s&&t&&t.text&&n.push({text:String(t.text),think:"",narr:!1,synth:!0}),n}var _a="luban.providerKey.",At=null,kh="settings",ts=null,Ta=["language","autoOpen","context.autoFile","context.autoFileMaxChars","context.autoFileWindowLines","sessionHistory.max","sessionMemory.enabled","sessionMemory.maxTurns","sessionMemory.maxChars","agent.maxRounds","agent.maxMinutes","agent.noWriteNudges","agent.subagentRounds","agent.subagentMinutes","agent.smallWindow","agent.verbosity","context.workset","search.maxFiles","net.tlsMaxVersion","browser.enabled","browser.headless","browser.viewportWidth","browser.viewportHeight","browser.idleTimeoutMs","browser.chromePath","computer.enabled","computer.confirm","computer.screenshotWidth","plugins.enabled","plugins.maxTools","plan.strictReadOnly","fs.allowOutsideWorkspace","diagnostics.afterEdit","review.autoOpenDiff","review.autoKeep","inlineCompletion.enabled","inlineCompletion.maxPerMinute","inlineCompletion.debounceMs","usage.record"],zF={autoOpen:!0,"context.autoFile":!0,"sessionMemory.enabled":!0,"plan.strictReadOnly":!0,"fs.allowOutsideWorkspace":!0,"diagnostics.afterEdit":!0,"review.autoOpenDiff":!0,"review.autoKeep":!0,"browser.enabled":!0,"browser.headless":!0,"computer.enabled":!0,"computer.confirm":!0,"plugins.enabled":!0,"inlineCompletion.enabled":!0,"context.workset":!0,"usage.record":!0},VF={"browser.chromePath":!0},JF={"agent.smallWindow":["auto","on","off"],"agent.verbosity":["concise","normal","detailed"],"net.tlsMaxVersion":["auto","1.2"]},XF={"context.autoFileMaxChars":500,"context.autoFileWindowLines":40,"sessionHistory.max":1,"sessionMemory.maxTurns":1,"sessionMemory.maxChars":1e3,"agent.maxRounds":0,"agent.maxMinutes":1,"agent.noWriteNudges":0,"agent.subagentRounds":0,"agent.subagentMinutes":0,"search.maxFiles":100,"browser.viewportWidth":320,"browser.viewportHeight":240,"browser.idleTimeoutMs":1e4,"computer.screenshotWidth":320,"plugins.maxTools":1,"inlineCompletion.maxPerMinute":1,"inlineCompletion.debounceMs":0},YF={"browser.viewportWidth":4096,"browser.viewportHeight":4096,"computer.screenshotWidth":4096,"plugins.maxTools":200};function om(t){return t==="usage"||t==="general"||t==="backup"||t==="plugins"||t==="market"||t==="mcp"?t:"settings"}function im(){let t=x.workspace.getConfiguration("luban"),e=Object.create(null);Ta.forEach(function(r){e[r]=t.get(r)});let n=e.language;try{n=t.get("language")}catch{n="auto"}let s=String(n??"auto").toLowerCase();return e.language=s==="en"||s==="zh-cn"||s==="ja"?s:"auto",e}function xh(){return{type:"general",values:im()}}function ZF(){if(At)try{At.webview.postMessage(xh())}catch(t){k("general_push_failed",{message:t.message})}}async function S_(t){let e=t&&typeof t=="object"?t:{},n=[],s=Object.create(null);if(Ta.forEach(function(o){if(!Object.prototype.hasOwnProperty.call(e,o)){n.push(O("ext.generalMissing",{key:o}));return}let i=e[o];if(zF[o]){if(typeof i!="boolean"){n.push(O("ext.generalBadBool",{key:o}));return}s[o]=i;return}if(o==="language"){let d=String(i??"").toLowerCase();if(d!=="auto"&&d!=="en"&&d!=="zh-cn"&&d!=="ja"){n.push(O("ext.generalBadLanguage"));return}s[o]=d;return}let a=JF[o];if(a){let d=String(i??"");if(a.indexOf(d)<0){n.push(O("ext.generalBadEnum",{key:o,values:a.join(" / ")}));return}s[o]=d;return}if(VF[o]){s[o]=String(i??"").trim();return}let l=Number(i);if(!isFinite(l)||!Number.isInteger(l)){n.push(O("ext.generalBadNumber",{key:o}));return}let c=XF[o];if(typeof c=="number"&&l<c){n.push(O("ext.generalBadMin",{key:o,min:c}));return}let u=YF[o];if(typeof u=="number"&&l>u){n.push(O("ext.generalBadMax",{key:o,max:u}));return}s[o]=l}),n.length)return{ok:!1,errors:n};let r=x.workspace.getConfiguration("luban");try{for(let o=0;o<Ta.length;o++){let i=Ta[o];await r.update(i,s[i],x.ConfigurationTarget.Global)}}catch(o){return{ok:!1,errors:[O("ext.generalSaveFailed",{msg:String(o&&o.message||o)})]}}return k("general_saved",{keys:Ta.length}),{ok:!0,values:im()}}async function am(t){let e=Object.create(null),n=0;for(let s of Vt.providers||[])if(!(!s||!s.id))try{let r=await t.secrets.get(_a+s.id);r&&(e[s.id]=String(r),n++)}catch(r){k("secret_read_failed",{id:s.id,message:r.message})}return ps=e,k("secrets_synced",{providers:(Vt.providers||[]).length,keys:n}),n}function QF(){return{defaultModel:Vt.defaultModel||"",providers:(Vt.providers||[]).map(function(t){return{id:t.id,name:t.name||t.id,baseUrl:t.baseUrl||"",apiKeyEnv:t.apiKeyEnv||"",webSearch:t.webSearch?{baseUrl:t.webSearch.baseUrl||"",count:t.webSearch.count||8,engine:t.webSearch.engine||"",disabled:t.webSearch.disabled===!0}:null,hasInlineKey:!!t.apiKey,hasSecretKey:!!ps[t.id],hasEnvKey:!!Ja(t),models:(t.models||[]).map(function(e){return{id:e.id,name:e.name||e.id,maxInputTokens:e.maxInputTokens||65536,maxOutputTokens:e.maxOutputTokens||8192,toolCalling:e.toolCalling!==!1,vision:e.vision===!0,thinking:An(e.thinking)?e.thinking:null}})}})}}function Jc(){return{type:"settings",path:ht,source:Zo,config:QF()}}function lm(){if(At)try{At.webview.postMessage(Jc())}catch(t){k("settings_push_failed",{message:t.message})}}async function cm(t){au(),await am(t),Re(iu()),lm();let e=(Vt.providers||[]).length,n=es().length;return k("providers_reloaded",{providers:e,models:n}),{providers:e,models:n}}function eS(t,e){if(t===""||t===void 0||t===null)return e;let n=Number(t);return!isFinite(n)||n<=0?NaN:Math.floor(n)}function eL(t,e,n){if(t==null)return{ok:!0,value:null};if(!An(t))return{ok:!1,error:O("validate.thinkShape",{pos:e,id:n})};let s={};for(let i of["on","off"]){let a=t[i];if(a==null)continue;if(!An(a))return{ok:!1,error:O("validate.thinkTier",{pos:e,id:n,tier:i})};let l=Object.keys(a).filter(function(c){return a_[c]});if(l.length)return{ok:!1,error:O("validate.thinkReserved",{pos:e,id:n,tier:i,keys:l.join(", ")})};if(JSON.stringify(a).length>zv)return{ok:!1,error:O("validate.thinkTooLong",{pos:e,id:n,tier:i,n:zv})};s[i]=a}if(!s.on&&!s.off)return{ok:!1,error:O("validate.thinkEmpty",{pos:e,id:n})};if(t.inline!==void 0&&t.inline!==null&&typeof t.inline!="boolean")return{ok:!1,error:O("validate.thinkInline",{pos:e,id:n})};let r=String(t.default||"").trim(),o={};return t.inline===!0&&(o.inline=!0),o.default=r==="on"||r==="off"?r:s.off?"off":"on",s.on&&(o.on=s.on),s.off&&(o.off=s.off),{ok:!0,value:o}}function __(t){let e=t||{},n=[],s=[],r=Object.create(null);for(let l of e.providers||[]){let c=l||{},u=String(c.id||"").trim(),d=O("validate.pos",{id:u||O("validate.untitled")});if(!u){n.push(O("validate.providerEmpty"));continue}if(!/^[A-Za-z0-9_-]+$/.test(u)){n.push(O("validate.idChars",{pos:d}));continue}if(r[u]){n.push(O("validate.idDup",{pos:d}));continue}r[u]=!0;let f=String(c.baseUrl||"").trim();if(!/^https?:\/\/\S+$/i.test(f)){n.push(O("validate.baseUrl",{pos:d}));continue}let p=[],h=Object.create(null);for(let y of c.models||[]){let w=y||{},T=String(w.id||"").trim();if(!T){n.push(O("validate.modelIdEmpty",{pos:d}));continue}if(h[T]){n.push(O("validate.modelIdDup",{pos:d,id:T}));continue}h[T]=!0;let g=eS(w.maxInputTokens,65536),v=eS(w.maxOutputTokens,8192);if(isNaN(g)){n.push(O("validate.maxIn",{pos:d,id:T}));continue}if(isNaN(v)){n.push(O("validate.maxOut",{pos:d,id:T}));continue}let b=eL(w.thinking,d,T);if(!b.ok){n.push(b.error);continue}let S={id:T,name:String(w.name||"").trim()||T,maxInputTokens:g,maxOutputTokens:v,toolCalling:!!w.toolCalling,vision:!!w.vision};b.value&&(S.thinking=b.value),p.push(S)}if(!p.length){n.push(O("validate.noModels",{pos:d}));continue}let m={id:u,name:String(c.name||"").trim()||u,baseUrl:f};if(String(c.apiKeyEnv||"").trim()&&(m.apiKeyEnv=String(c.apiKeyEnv).trim()),c.webSearch&&typeof c.webSearch=="object"){let y=String(c.webSearch.baseUrl||"").trim();if(y&&!/^https?:\/\/\S+$/i.test(y)){n.push(O("validate.webUrl",{pos:d}));continue}let w=c.webSearch.count,T=w===""||w===void 0||w===null?8:Number(w);if(!isFinite(T)||T<1||T>50){n.push(O("validate.webCount",{pos:d}));continue}let g=String(c.webSearch.engine||"").trim().toLowerCase();if(g&&g!=="deepseek"&&g!=="bing"){n.push(O("validate.webEngine",{pos:d}));continue}if(c.webSearch.disabled!==void 0&&typeof c.webSearch.disabled!="boolean"){n.push(O("validate.webDisabled",{pos:d}));continue}let v={count:Math.floor(T)};y&&(v.baseUrl=y.replace(/\/+$/,"")),g&&(v.engine=g),c.webSearch.disabled===!0&&(v.disabled=!0),m.webSearch=v}m.models=p,s.push({provider:m,raw:c})}s.length||n.push(O("validate.needProvider"));let o={};s.forEach(function(l){l.provider.models.forEach(function(c){o[c.id]=(o[c.id]||0)+1})});let i=[];s.forEach(function(l){l.provider.models.forEach(function(c){i.push({key:o[c.id]>1?l.provider.id+"::"+c.id:c.id,pid:l.provider.id,mid:c.id})})});let a=String(e.defaultModel||"").trim();if(a){let l=i.find(function(c){return c.key===a})||i.find(function(c){return c.pid+"::"+c.mid===a})||i.find(function(c){return c.mid===a});a=l?l.key:""}return!a&&i.length&&(a=i[0].key),{ok:n.length===0,errors:n,defaultModel:a,entries:s}}async function T_(t,e){let n=__(e);if(!n.ok)return{ok:!1,errors:n.errors};let s=[];try{let l=JSON.parse(I.readFileSync(ht,"utf8"));l&&Array.isArray(l.providers)&&(s=l.providers)}catch{}let r=Object.create(null);for(let l of s)l&&l.id&&(r[l.id]=l);let o={defaultModel:n.defaultModel,providers:[]},i=[];for(let l of n.entries){let c=l.provider,u=l.raw||{},d=String(u.originalId||"").trim(),f=d&&r[d]||r[c.id]||null,p=f?Object.assign({},f,c):Object.assign({},c);if(f){for(let v of Object.keys(f))p[v]===void 0&&(p[v]=f[v]);let T=Object.create(null);for(let v of f.models||[])v&&v.id&&(T[v.id]=v);let g=Object.create(null);for(let v of Array.isArray(u.models)?u.models:[])v&&v.id&&(g[String(v.id).trim()]=v);p.models=c.models.map(function(v){let b=T[v.id],S=b?Object.assign({},b,v):v,_=g[v.id];return _&&Object.prototype.hasOwnProperty.call(_,"thinking")&&_.thinking===null&&!v.thinking&&delete S.thinking,S})}let h="",m=f&&f.id?f.id:d||c.id;m&&m!==c.id?h=ps[m]||""||await t.secrets.get(_a+m)||"":h=ps[c.id]||"";let y=String(u.apiKeyAction||"keep"),w=h;if(y==="set"){let T=String(u.apiKeyValue||"").trim();T&&(w=T),delete p.apiKey}else y==="clear"&&(w="",delete p.apiKey);(w!==h||m&&m!==c.id)&&i.push({id:c.id,oldId:m&&m!==c.id?m:null,value:w}),o.providers.push(p)}I.mkdirSync(D.dirname(ht),{recursive:!0,mode:448});let a=ht+".tmp";if(I.writeFileSync(a,JSON.stringify(o,null,2)+`
|
|
1118
|
-
`,{mode:384}),I.existsSync(ht))try{I.copyFileSync(ht,ht+".bak")}catch(l){k("config_backup_failed",{message:l.message})}I.renameSync(a,ht);for(let l of i)l.value?await t.secrets.store(_a+l.id,l.value):await t.secrets.delete(_a+l.id),l.oldId&&await t.secrets.delete(_a+l.oldId);return au(),await am(t),Re(iu()),lm(),k("config_saved",{path:ht,providers:o.providers.length,models:es().length,secrets:i.length}),{ok:!0,path:ht,source:Zo,defaultModel:oi(),models:iu().models}}async function M_(t){let e=t||{},n={id:String(e.id||e.originalId||"test"),baseUrl:String(e.baseUrl||"").trim(),apiKey:String(e.apiKey||"").trim(),apiKeyEnv:String(e.apiKeyEnv||"").trim()},s=String(e.modelId||"").trim();if(!n.baseUrl)return{ok:!1,error:O("ext.providerBaseUrl")};if(!s)return{ok:!1,error:O("ext.providerNeedModel")};let r=n.apiKey||ps[e.id]||ps[e.originalId]||""||Ja(n)||(Qo(n)?Ih:"");if(!r)return{ok:!1,error:O("ext.providerNeedKey")};let o=Date.now(),i=new AbortController,a=setTimeout(function(){i.abort()},15e3);try{let l=await fetch(SS(n),{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+r},body:JSON.stringify({model:s,messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1}),signal:i.signal}),c=await l.text(),u=Date.now()-o,d="";try{let f=JSON.parse(c);d=f.choices&&f.choices[0]&&f.choices[0].message&&f.choices[0].message.content||""}catch{}return k("provider_test",{id:n.id,model:s,status:l.status,ms:u}),{ok:l.ok,status:l.status,ms:u,reply:String(d||"").slice(0,160),error:l.ok?"":"HTTP "+l.status+": "+c.slice(0,200)}}catch(l){return k("provider_test_failed",{id:n.id,message:l.message}),{ok:!1,error:l&&l.name==="AbortError"?O("ext.providerTimeout"):String(l&&l.message||l)}}finally{clearTimeout(a)}}function Mt(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function fu(t,e,n){let s=Mt(t);if(!s)return null;let r=Mt(e),o=r?Math.max(1024,Math.min(32768,r)):Math.max(1024,Math.min(16384,Math.floor(s/4)));return o=Math.min(o,Math.max(1024,Math.floor(s/2))),{maxInputTokens:Math.max(1024,s-o),maxOutputTokens:o,source:n||"generic"}}function C_(t){let e=t&&typeof t=="object"?t:{},n=e.top_provider&&typeof e.top_provider=="object"?e.top_provider:{},s=e.meta&&typeof e.meta=="object"?e.meta:{},r=Mt(e.context_length)||Mt(e.context_window)||Mt(e.max_context_length)||Mt(e.max_model_len)||Mt(e.max_input_tokens)||Mt(s.n_ctx_train),o=Mt(e.max_output_tokens)||Mt(e.max_completion_tokens)||Mt(n.max_completion_tokens);if(!r&&!o)return null;let i="generic";return Mt(e.max_model_len)?i="vllm":(n.context_length||n.max_completion_tokens)&&(i="openrouter"),{context:r,output:o,source:i}}function A_(t){return String(t||"").replace(/\/+$/,"").replace(/\/v1$/i,"")}async function vh(t,e,n){let s=new AbortController,r=setTimeout(function(){s.abort()},n);try{let o=await fetch(t,Object.assign({},e||{},{signal:s.signal})),i=await o.text();if(!o.ok)return{ok:!1,status:o.status};try{return{ok:!0,json:JSON.parse(i)}}catch{return{ok:!1,badJson:!0}}}catch(o){return{ok:!1,error:o}}finally{clearTimeout(r)}}async function tL(t,e,n,s){let r=A_(t.baseUrl);if(!(await vh(r+"/api/version",{headers:{}},1200)).ok)return;let i=e.filter(function(c){return!n[c]}).slice(0,40),a=0;async function l(){for(;a<i.length&&Date.now()<s;){let c=i[a++],u=await vh(r+"/api/show",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:c,name:c})},2e3);if(!u.ok||!u.json)continue;let d=typeof u.json.parameters=="string"?u.json.parameters:"",f=/(?:^|\n)\s*num_ctx\s+(\d+)/i.exec(d),p=f?Mt(f[1]):0,h=!1;if(!p&&u.json.model_info&&typeof u.json.model_info=="object"){for(let y of Object.keys(u.json.model_info))if(/\.context_length$/i.test(y)&&(p=Mt(u.json.model_info[y]),p)){h=!0;break}}let m=fu(p,0,"ollama");m&&(h&&(m.fromTraining=!0),n[c]=m)}}await Promise.all([l(),l(),l(),l()])}async function nL(t,e,n){if(e.length!==1||n[e[0]])return;let s=A_(t.baseUrl),r=await vh(s+"/props",{headers:{}},1200);if(!r.ok||!r.json)return;let o=r.json.default_generation_settings&&typeof r.json.default_generation_settings=="object"?r.json.default_generation_settings:{},i=Mt(o.n_ctx)||Mt(r.json.n_ctx),a=fu(i,0,"llamacpp");a&&(n[e[0]]=a)}async function um(t){let e=t||{},n={id:String(e.id||e.originalId||"test"),baseUrl:String(e.baseUrl||"").trim(),apiKey:String(e.apiKey||"").trim(),apiKeyEnv:String(e.apiKeyEnv||"").trim()};if(!n.baseUrl)return{ok:!1,error:O("ext.providerBaseUrl")};let s=n.apiKey||ps[e.id]||ps[e.originalId]||""||Ja(n)||(Qo(n)?Ih:"");if(!s)return{ok:!1,error:O("ext.providerNeedKey")};let r=String(n.baseUrl).replace(/\/+$/,"")+"/models",o=new AbortController,i=setTimeout(function(){o.abort()},15e3);try{let a=await fetch(r,{headers:{Authorization:"Bearer "+s},signal:o.signal}),l=await a.text();if(!a.ok)return{ok:!1,status:a.status,error:"HTTP "+a.status+": "+l.slice(0,200)};let c=[],u=Object.create(null);try{let d=JSON.parse(l),f=Array.isArray(d)?d:d.data||d.models||[];for(let p of f){let h=typeof p=="string"?p:p&&(p.id||p.name),m=String(h??"").trim();if(!m)continue;c.push(m);let y=typeof p=="object"?C_(p):null;if(y){let w=fu(y.context,y.output,y.source);w&&(u[m]=w)}}}catch{return{ok:!1,error:O("ext.providerBadJson",{head:l.slice(0,120)})}}if(c.some(function(d){return!u[d]})){let d=Date.now()+6e3;try{await tL(n,c,u,d)}catch{}try{await nL(n,c,u)}catch{}}return k("provider_models_fetched",{id:n.id,count:c.length}),k("provider_models_meta",{id:n.id,detected:Object.keys(u).length}),{ok:!0,status:a.status,models:c.slice(0,300),meta:u}}catch(a){return{ok:!1,error:a&&a.name==="AbortError"?O("ext.providerTimeout"):String(a&&a.message||a)}}finally{clearTimeout(i)}}var sL=!0;function io(t){return sL?x.Uri.joinPath(t,"dist","media"):x.Uri.joinPath(t,"media")}var Sh="luban.webdav.password",Ec=!1,O_=null;function zt(t,e){let n=String(t??""),s=An(e)?e:null;return n.indexOf("webdav.")===0?s?O(n,s):O(n):n||O("webdav.errNetwork")}async function ah(t,e){try{return!!await x.window.showWarningMessage(String(t||""),{modal:!0},O(e||"ext.confirmYes"))}catch(n){return k("native_confirm_failed",{message:String(n&&n.message||n)}),!1}}var tS={sessions:"webdav.catSessions",attachments:"webdav.catAttachments",plans:"webdav.catPlans",providers:"webdav.catProviders",mcp:"webdav.catMcp"};function nS(t){if(!t||typeof t!="object")return"";let e=[];for(let n of Object.keys(tS)){let s=Number(t[n])||0;s>0&&e.push(O(tS[n],{n:s}))}return e.length?O("webdav.catWrap",{parts:e.join(" \xB7 ")}):""}function E_(t){let e=t||{};if((Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")<0)return"";let s=e.merge||{},r=Number(s.added)||0,o=Number(s.models)||0,i=r>0?O("webdav.statusProviderMerged",{p:r,m:o}):O("webdav.statusProviderNoNew");return O("webdav.mergeSep")+i}function rL(t){let e=t||{};return O("webdav.confirmOverwrite",{machine:e.machine||"?",at:String(e.createdAt||"").replace("T"," ").slice(0,19),n:e.files||0})}async function dm(t){try{return await t.secrets.get(Sh)||""}catch(e){return k("webdav_secret_read_failed",{message:String(e&&e.message||e)}),""}}async function Ha(t){let e=Mn.loadConfig();return{type:"webdav",path:Mn.WEBDAV_CONFIG_PATH,config:e,hasPassword:!!await dm(t),busy:Ec,last:O_}}async function oL(t,e){let n=e||At&&At.webview;if(n)try{n.postMessage(await Ha(t))}catch(s){k("webdav_push_failed",{message:String(s&&s.message||s)})}}async function fm(t,e){let n=An(e)?e:{},s=String(n.passwordAction||"keep"),r=String(n.passwordValue==null?"":n.passwordValue),o=Mn.saveConfig(n.config||{});if(!o.ok)return k("webdav_save_invalid",{errors:o.errors}),{ok:!1,errors:(o.errors||[]).map(function(a){return zt(a)})};let i=!1;try{s==="set"&&r?(await t.secrets.store(Sh,r),i=!0):s==="clear"&&(await t.secrets.delete(Sh),i=!0)}catch(a){k("webdav_secret_write_failed",{message:String(a&&a.message||a)})}return k("webdav_saved",{path:o.path,url:o.config.url,enabled:o.config.enabled,remoteDir:o.config.remoteDir,includes:o.config.includes,secretChanged:i}),await oL(t),{ok:!0,path:o.path,config:o.config,hasPassword:!!await dm(t)}}async function ii(t,e){let n=Mn.loadConfig(),s=An(e)?e:{},r=s.password!=null&&String(s.password)!==""?String(s.password):await dm(t);if(!An(s.config))return Object.assign({},n,{password:r});let o=Mn.normalizeConfig(Object.assign({},n,s.config)),i=Object.assign({},o.config,{password:r});return i.__invalid=(o.errors||[]).length?o.errors:null,i}function Za(t){return t.__invalid&&t.__invalid.length?t.__invalid.map(function(e){return zt(e)}).join(" \xB7 "):t.url?t.enabled?"":zt("webdav.errDisabled"):zt("webdav.errNeedUrl")}async function P_(t,e){let n=await ii(t,e);if(n.__invalid&&n.__invalid.length)return{ok:!1,error:n.__invalid.map(function(r){return zt(r)}).join(" \xB7 ")};if(!n.url)return{ok:!1,error:zt("webdav.errNeedUrl")};let s=await Mn.testConnection(n);return k("webdav_test",{ok:!!s.ok,status:s.status||0,error:s.error||"",ms:s.ms||0}),{ok:!!s.ok,status:s.status||0,ms:s.ms||0,needsCreate:!!s.needsCreate,error:s.ok?"":zt(s.error||"webdav.errNetwork",s.detail)}}function iL(){for(let t of Cn.values())try{clearTimeout(t)}catch{}Cn.clear();for(let t of ge.values())try{xt(t)}catch{}}function aL(){try{be=null,st(),Re(Sn())}catch(t){k("webdav_session_refresh_failed",{message:String(t&&t.message||t)})}}function j_(t){let e=t||{};return{force:!!e.force,mode:e.mode,override:e.override,subdir:e.subdir,providerIds:Array.isArray(e.providerIds)?e.providerIds.map(String):null}}function I_(t){let e=t||{};return Number(e.restored)>0?(Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")>=0:!1}async function _h(t,e,n,s){if(Ec)return{ok:!1,error:zt("webdav.errBusy"),busy:!0};Ec=!0;let r=n||{},o=function(a){if(s)try{s.postMessage(Object.assign({type:"webdav_progress",kind:e},a))}catch{}},i={force:!!r.force,mode:r.mode==="force"?"force":"newer",version:ds,machine:lt.hostname()};try{let a=await ii(t,r.override),l=Za(a);if(l)return{ok:!1,error:l};delete a.__invalid,a.machine=lt.hostname();let c;if(e==="backup"?c=await cs.uploadAll(a,i,o):(iL(),c=await cs.restoreAll(a,Object.assign({},i,{subdir:r.subdir||"",providerIds:Array.isArray(r.providerIds)?r.providerIds.map(String):null}),o)),c.ok){if(O_={kind:e,at:new Date().toISOString(),files:e==="backup"?c.files:c.restored,categories:c.categories||null,snapshot:c.snapshot||""},k(e==="backup"?"webdav_backup_done":"webdav_restore_done",{ok:!0,files:e==="backup"?c.files:c.restored,bytes:c.bytes||0,skipped:c.skipped,unchanged:c.unchanged||0,blocked:(c.blocked||[]).length,incomplete:c.incomplete||0,snapshot:c.snapshot||"",redacted:!!c.redacted}),e==="restore"&&c.restored>0&&(aL(),I_(c)))try{await cm(t)}catch(d){k("providers_reload_failed",{message:String(d&&d.message||d)})}}else k(e==="backup"?"webdav_backup_failed":"webdav_restore_failed",{error:c.error||"",phase:c.phase||"",needsConfirm:!!c.needsConfirm});let u=!c.ok&&c.error==="webdav.errPartial"?{n:(c.failed||[]).length}:null;return Object.assign({},c,{error:c.ok?"":c.needsConfirm?zt(c.error||"webdav.errRemoteNewer"):zt(c.error||"webdav.errNetwork",u)})}catch(a){return k("webdav_transfer_failed",{kind:e,message:String(a&&a.message||a)}),{ok:!1,error:zt(a&&a.message||"webdav.errNetwork")}}finally{Ec=!1}}async function N_(t,e,n){let s=await ii(t,e),r=Za(s);if(r)return{ok:!1,error:r};s.machine=lt.hostname();let o=await cs.remoteSummary(s,{limit:200,subdir:n||""});return k("webdav_remote_list",{ok:!!o.ok,hasBackup:!!o.hasBackup,total:o.total||0,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":zt(o.error||"webdav.errNetwork")})}async function F_(t,e,n){let s=await ii(t,e),r=Za(s);if(r)return{ok:!1,error:r};s.machine=lt.hostname();let o=await cs.listRemoteProviders(s,{subdir:n||"",home:ht?D.dirname(ht):""});return k("webdav_remote_providers",{ok:!!o.ok,n:(o.providers||[]).length,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":zt(o.error||"webdav.errNetwork")})}async function L_(t,e){let n=await ii(t,e),s=Za(n);if(s)return{ok:!1,error:s};let r=await cs.listMachines(n,{machine:lt.hostname()});return k("webdav_machine_list",{ok:!!r.ok,n:(r.machines||[]).length}),Object.assign({},r,{error:r.ok?"":zt(r.error||"webdav.errNetwork")})}async function lL(){let t=Mn.WEBDAV_CONFIG_PATH;I.existsSync(t)||(I.mkdirSync(D.dirname(t),{recursive:!0,mode:448}),I.writeFileSync(t,JSON.stringify(Mn.defaultConfig(),null,2)+`
|
|
1119
|
-
`,{mode:384}));let e=await x.workspace.openTextDocument(x.Uri.file(t));return await x.window.showTextDocument(e,{preview:!1}),t}function cL(){let t=require("http"),e=new Map,n=new Set(["/dav"]),s=function(a){if(n.has(a))return!0;for(let l of e.keys())if(l.indexOf(a+"/")===0)return!0;return!1},r=function(a){let l=String(a).replace(/\/+$/,"")+"/",c=[],u=Object.create(null);for(let d of n){if(d===a||d.indexOf(l)!==0)continue;let f=d.slice(l.length).split("/")[0];f&&!u[f]&&(u[f]=!0,c.push({path:l+f,dir:!0}))}for(let d of e.keys())d.indexOf(l)!==0||d.slice(l.length).indexOf("/")>=0||c.push({path:d,dir:!1});return c},o=function(a,l){let c=a.split("/").map(function(d,f){return f===0?"":encodeURIComponent(d)}).join("/")+(l?"/":""),u=l?"<d:resourcetype><d:collection/></d:resourcetype>":"<d:resourcetype/><d:getcontentlength>"+e.get(a).length+"</d:getcontentlength>";return"<d:response><d:href>"+c+"</d:href><d:propstat><d:prop>"+u+"<d:getlastmodified>Wed, 21 Oct 2026 07:28:00 GMT</d:getlastmodified></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response>"},i=t.createServer(function(a,l){let c=String(a.url||"/"),u=c.indexOf("?"),d=decodeURIComponent(u>=0?c.slice(0,u):c);if(a.method==="PROPFIND"){if(!s(d)&&!e.has(d))return l.writeHead(404),l.end("");let f=String(a.headers.depth||"0"),p='<?xml version="1.0" encoding="utf-8"?><d:multistatus xmlns:d="DAV:">'+o(String(d).replace(/\/+$/,"")||"/dav",!0);if(f!=="0")for(let h of r(d))p+=o(h.path,h.dir);return l.writeHead(207,{"Content-Type":"application/xml; charset=utf-8"}),l.end(p+"</d:multistatus>")}if(a.method==="MKCOL"){if(s(d)||e.has(d))return l.writeHead(405),l.end("");let f=d.replace(/\/[^/]+$/,"")||"/";return s(f)?(n.add(d),l.writeHead(201),l.end("")):(l.writeHead(409),l.end(""))}if(a.method==="PUT"){let f=[];a.on("data",function(p){f.push(p)}),a.on("end",function(){e.set(d,Buffer.concat(f));let p=d.replace(/\/[^/]+$/,"");for(;p&&p!=="/"&&!n.has(p);)n.add(p),p=p.replace(/\/[^/]+$/,"");l.writeHead(201),l.end("")});return}if(a.method==="GET")return e.has(d)?(l.writeHead(200),l.end(e.get(d))):(l.writeHead(404),l.end(""));l.writeHead(405),l.end("")});return new Promise(function(a){i.listen(0,"127.0.0.1",function(){a({url:"http://127.0.0.1:"+i.address().port+"/dav",files:e,close:function(){return new Promise(function(l){i.close(function(){l()})})}})})})}function uL(t){I.mkdirSync(D.join(t,"sessions"),{recursive:!0}),I.writeFileSync(D.join(t,"sessions","z1.json"),JSON.stringify({id:"z1",items:[{t:"user",text:"\u81EA\u68C0\u4E00"}]})),I.writeFileSync(D.join(t,"sessions","z2.json"),JSON.stringify({id:"z2",items:[{t:"user",text:"\u81EA\u68C0\u4E8C"}]})),I.writeFileSync(D.join(t,"sessions","index.json"),"[]"),I.writeFileSync(D.join(t,"providers.json"),JSON.stringify({defaultModel:"m1",providers:[{id:"p1",baseUrl:"https://api.example.com",apiKey:"sk-selfcheck-plain",models:[{id:"m1"}]}]},null,2))}async function D_(t){let e=await cL(),n=I.mkdtempSync(D.join(lt.tmpdir(),"luban-wd-check-")),s=D.join(n,"webdav.json");try{uL(n);let r={url:e.url,username:"u",password:"p",remoteDir:"luban",includes:{sessions:!0,attachments:!0,plans:!0,config:!0,mcp:!0}},o={home:n,configPath:s,persist:!1,config:Mn.normalizeConfig(r).config,version:ds,machine:lt.hostname()},i=await cs.uploadAll(r,o,null);if(!i.ok)return{ok:!1,result:{phase:"upload",up:i},error:i.error};let a=JSON.parse(e.files.get("/dav/luban/manifest.json").toString("utf8")),l=Object.keys(a.files),c=e.files.get("/dav/luban/config/providers.json").toString("utf8").indexOf("sk-selfcheck-plain")>=0;if(t==="restore_policy"){let p=D.join(n,"sessions","z1.json");I.writeFileSync(p,'{"id":"z1","local":"edited"}');let h=new Date(Date.parse(a.createdAt)+6e4);I.utimesSync(p,h,h);let m=await cs.restoreAll(r,Object.assign({},o,{mode:"newer"})),y=I.readFileSync(p,"utf8").indexOf("edited")>=0;return{ok:!!m.ok&&(m.blocked||[]).length===1&&y,result:{blocked:m.blocked,restored:m.restored,kept:y,total:l.length}}}for(let p of l)try{I.rmSync(cs.localPathOf(n,p),{force:!0})}catch{}I.rmSync(D.join(n,"sessions"),{recursive:!0,force:!0});let u=await cs.restoreAll(r,Object.assign({},o,{mode:"newer"}));if(!u.ok)return{ok:!1,result:{phase:"restore",down:u},error:u.error};let d=!0,f="";for(let p of l){let h=cs.localPathOf(n,p);if(!I.existsSync(h)){d=!1,f=p+":missing";break}if(require("crypto").createHash("sha1").update(I.readFileSync(h)).digest("hex")!==a.files[p].sha1){d=!1,f=p+":sha";break}}return{ok:d&&l.length>0&&!c&&u.restored===l.length,result:{files:l.length,restored:u.restored,shaMatch:d,mismatch:f,redacted:!c,uploaded:i.files,snapshot:u.snapshot||""}}}finally{await e.close();try{I.rmSync(n,{recursive:!0,force:!0})}catch{}}}function dL(t,e,n){let s=io(e),r=t.asWebviewUri(x.Uri.joinPath(s,"panel.css")),o=t.asWebviewUri(x.Uri.joinPath(s,"settings.css")),i=t.asWebviewUri(x.Uri.joinPath(s,"dashboard.css")),a=t.asWebviewUri(x.Uri.joinPath(s,"hub.css")),l=t.asWebviewUri(x.Uri.joinPath(s,"hub.js")),c=t.asWebviewUri(x.Uri.joinPath(s,"i18n.js")),u=I.readFileSync(x.Uri.joinPath(s,"hub.html").fsPath,"utf8"),d=Math.random().toString(36).slice(2)+Date.now().toString(36);return u.replace(/{{cspSource}}/g,t.cspSource).replace(/{{cssUri}}/g,String(r)).replace(/{{settingsCssUri}}/g,String(o)).replace(/{{dashCssUri}}/g,String(i)).replace(/{{hubCssUri}}/g,String(a)).replace(/{{jsUri}}/g,String(l)).replace(/{{i18nUri}}/g,String(c)).replace(/{{themeStyle}}/g,Gh()).replace(/{{lang}}/g,rn||Va()).replace(/{{tab}}/g,om(n)).replace(/{{version}}/g,ds).replace(/{{nonce}}/g,d)}function R_(t,e){return ts=t,t.onDidReceiveMessage(async function(s){if(!(!s||!s.type)){if(s.type==="hub_ready"||s.type==="ready"){t.postMessage({type:"lang",lang:rn});try{t.postMessage(xh())}catch{}try{t.postMessage(Jc())}catch{}try{t.postMessage(await Ha(e))}catch{}try{t.postMessage(va(Un))}catch{}try{t.postMessage(Xc())}catch{}try{t.postMessage(Mh())}catch{}try{t.postMessage({type:"activate",tab:kh})}catch{}Th("hub_ready"),k("hub_ready",{tab:kh});return}if(s.type==="tab"){let r=om(s.tab);try{r==="usage"?t.postMessage(va(Un)):r==="general"?t.postMessage(xh()):r==="backup"?t.postMessage(await Ha(e)):r==="plugins"?t.postMessage(Xc()):r==="mcp"?t.postMessage(Mh()):r==="market"?t.postMessage(await B_()):t.postMessage(Jc())}catch{}k("hub_tab",{tab:r});return}if(s.type==="ack_rendered"){N=Object.assign({at:Date.now()},s),s.source==="dashboard"?k("usage_dashboard_ack",{kind:s.kind,n:s.n,groups:s.groups}):s.source==="general"?k("general_ack",{kind:s.kind,n:s.n}):k("settings_ack",{kind:s.kind,n:s.n});return}if(s.type==="save_general"){try{let r=await S_(s.values||{});r.ok?t.postMessage(Object.assign({type:"general_saved"},r)):t.postMessage({type:"general_invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"general_invalid",errors:[O("ext.generalSaveFailed",{msg:String(r&&r.message||r)})]}),k("general_save_failed",{message:r.message})}return}if(s.type==="save_settings"){try{let r=await T_(e,s.config||{});r.ok?t.postMessage(Object.assign({type:"saved"},r)):t.postMessage({type:"invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"invalid",errors:[O("ext.saveFailed",{msg:String(r&&r.message||r)})]}),k("settings_save_failed",{message:r.message})}return}if(s.type==="test_provider"){let r=await M_(s.provider||{});t.postMessage(Object.assign({type:"test_result",ref:s.ref},r));return}if(s.type==="fetch_models"){let r=await um(s.provider||{});t.postMessage(Object.assign({type:"models_fetched",ref:s.ref},r));return}if(s.type==="open_config_file"){try{if(!I.existsSync(ht))throw new Error(O("ext.configMissing"));let r=await x.workspace.openTextDocument(x.Uri.file(ht));await x.window.showTextDocument(r,{preview:!1})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="reload_config"){try{await reloadConfigCommand()}catch(r){try{t.postMessage({type:"notice",message:String(r&&r.message||r)})}catch{}k("settings_reload_failed",{message:String(r&&r.message||r)})}return}if(s.type==="save_webdav"){try{let r=await fm(e,s);r.ok?t.postMessage(Object.assign({type:"webdav_saved"},r)):t.postMessage({type:"webdav_invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"webdav_invalid",errors:[zt(String(r&&r.message||r))]}),k("webdav_save_failed",{message:String(r&&r.message||r)})}return}if(s.type==="test_webdav"){let r=await P_(e,s.override);t.postMessage(Object.assign({type:"webdav_test"},r));return}if(s.type==="webdav_backup"||s.type==="webdav_restore"){let r=s.type==="webdav_backup"?"backup":"restore",o=j_(s),i=await _h(e,r,o,t);if(!i.ok&&i.needsConfirm&&r==="backup"&&(await ah(rL(i.remote),"webdav.confirmOverwriteYes")?(o.force=!0,i=await _h(e,r,o,t)):i={ok:!1,cancelled:!0,phase:"confirm"}),t.postMessage(Object.assign({type:"webdav_done"},i,{kind:r})),r==="backup"&&i.ok)try{let a=(i.unchanged||0)>0?"webdav.statusBackupDoneInc":"webdav.statusBackupDone",l=(i.unchanged||0)>0?{u:i.uploaded||0,s:i.unchanged||0}:{n:i.files||0};x.window.showInformationMessage(O(a,l)+nS(i.categories))}catch{}if(r==="restore"&&i.ok&&i.restored>0)try{t.postMessage({type:"notice",message:O("webdav.restoredNotice",{n:i.restored,cat:nS(i.categories)+E_(i),dir:i.snapshot||O("webdav.noSnapshot")})})}catch{}return}if(s.type==="webdav_remote_list"){let r=await N_(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_list"},r));return}if(s.type==="webdav_remote_providers"){let r=await F_(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_providers"},r,{reqId:s.reqId}));return}if(s.type==="webdav_machines"){let r=await L_(e,s.override);t.postMessage(Object.assign({type:"webdav_machines"},r));return}if(s.type==="hub_confirm"){let r=await ah(s.message);try{t.postMessage({type:"hub_confirm_result",id:s.id,ok:r})}catch{}return}if(s.type==="plugins_install"){let r=[];try{r=await x.window.showOpenDialog({canSelectFiles:!1,canSelectFolders:!0,canSelectMany:!1,openLabel:O("ext.pluginsPickFolder"),title:O("ext.pluginsPickTitle")})}catch(a){t.postMessage({type:"plugins_result",action:"install",ok:!1,message:String(a&&a.message||a)});return}if(!r||!r.length){t.postMessage({type:"plugins_result",action:"install",ok:!1,cancelled:!0});return}let o=r[0].fsPath,i=await Ge.installFromDir(o,{trust:!0,replace:s.replace===!0});k("plugins_install",{src:o,ok:i.ok,code:i.code||"",name:i.name||""}),t.postMessage(Object.assign({type:"plugins_result",action:"install"},i)),i.ok&&await Ko("install");return}if(s.type==="plugins_uninstall"){let r=String(s.name||""),o=String(s.dir||"");if(!r&&!o)return;if(!await ah(O("ext.pluginsUninstallConfirm",{name:r||o}),"ext.pluginsUninstallYes")){t.postMessage({type:"plugins_result",action:"uninstall",ok:!1,cancelled:!0});return}let a=await Ge.uninstall(o||r,{why:"uninstall"});k("plugins_uninstall",{name:r||o,ok:a.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"uninstall"},a)),a.ok&&await Ko("uninstall");return}if(s.type==="plugins_restore"){let r=String(s.entry||""),o=await Ge.restoreFromTrash(r);k("plugins_restore",{entry:r,ok:o.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"restore"},o)),o.ok&&await Ko("restore");return}if(s.type==="plugins_trust"){let r;try{r={ok:!0,name:Ge.trustDir(String(s.dir||"")).name}}catch(o){r={ok:!1,message:String(o&&o.message||o)}}k("plugins_trust",{name:r.name||"",ok:r.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"trust"},r)),r.ok&&await Ko("trust");return}if(s.type==="plugins_rescan"){await Ko("rescan");return}if(s.type==="plugins_theme"){let r=String(s.name||"").trim(),o=!0,i="";if(r){let a=null;try{a=Ge.themeOf(r)}catch{a=null}a||(o=!1,i=O("ext.pluginsThemeUnknown",{name:r}))}if(o)try{await x.workspace.getConfiguration("luban").update("plugins.theme",r,x.ConfigurationTarget.Global)}catch(a){o=!1,i=String(a&&a.message||a)}k("plugins_theme",{name:r,ok:o}),t.postMessage({type:"plugins_result",action:"theme",ok:o,name:r,message:i}),o&&(Yc("theme"),zh());return}if(s.type==="plugins_open_dir"){let o=String(s.which||"global")==="trash"?Ge.trashDir():Ge.globalDir();try{I.mkdirSync(o,{recursive:!0}),await x.commands.executeCommand("revealFileInOS",x.Uri.file(o))}catch(i){t.postMessage({type:"plugins_result",action:"open_dir",ok:!1,message:String(i&&i.message||i)})}return}if(s.type==="mcp_toggle"){let r=s.target==="project"?"project":"global";try{xe.configure({root:R(),version:ds,rec:k});let o=xe.setDisabled({name:s.name,disabled:s.disabled===!0,target:r});await xe.reload(),k("mcp_toggle",{name:o.name,disabled:o.disabled,target:r,changed:o.changed,path:o.path}),t.postMessage({type:"mcp_result",action:"toggle",ok:!0,name:o.name,disabled:o.disabled,target:r,path:o.path,changed:o.changed}),sS("toggle")}catch(o){k("mcp_toggle_failed",{name:String(s.name||""),target:r,message:String(o&&o.message||o)}),t.postMessage({type:"mcp_result",action:"toggle",ok:!1,message:String(o&&o.message||o)})}return}if(s.type==="mcp_reload"){try{xe.configure({root:R(),version:ds,rec:k}),await xe.reload(),t.postMessage({type:"mcp_result",action:"reload",ok:!0})}catch(r){k("mcp_reload_failed",{message:String(r&&r.message||r)}),t.postMessage({type:"mcp_result",action:"reload",ok:!1,message:String(r&&r.message||r)})}sS("reload");return}if(s.type==="mcp_open_file"){try{let r=s.which==="project"?"project":"global",o=xe.configPathFor(r);I.existsSync(o)||(I.mkdirSync(D.dirname(o),{recursive:!0}),I.writeFileSync(o,`{
|
|
1117
|
+
`:"")+l;continue}let c=i?!s:!0;i&&s&&(a=String(t.text==null?"":t.text)),n.push({text:a,think:l,narr:c})}return!s&&t&&t.text&&n.push({text:String(t.text),think:"",narr:!1,synth:!0}),n}var _a="luban.providerKey.",At=null,kh="settings",ts=null,Ta=["language","autoOpen","context.autoFile","context.autoFileMaxChars","context.autoFileWindowLines","sessionHistory.max","sessionMemory.enabled","sessionMemory.maxTurns","sessionMemory.maxChars","agent.maxRounds","agent.maxMinutes","agent.noWriteNudges","agent.subagentRounds","agent.subagentMinutes","agent.smallWindow","agent.verbosity","context.workset","search.maxFiles","net.tlsMaxVersion","browser.enabled","browser.headless","browser.viewportWidth","browser.viewportHeight","browser.idleTimeoutMs","browser.chromePath","computer.enabled","computer.confirm","computer.screenshotWidth","plugins.enabled","plugins.maxTools","plan.strictReadOnly","fs.allowOutsideWorkspace","diagnostics.afterEdit","review.autoOpenDiff","review.autoKeep","inlineCompletion.enabled","inlineCompletion.maxPerMinute","inlineCompletion.debounceMs","usage.record"],zF={autoOpen:!0,"context.autoFile":!0,"sessionMemory.enabled":!0,"plan.strictReadOnly":!0,"fs.allowOutsideWorkspace":!0,"diagnostics.afterEdit":!0,"review.autoOpenDiff":!0,"review.autoKeep":!0,"browser.enabled":!0,"browser.headless":!0,"computer.enabled":!0,"computer.confirm":!0,"plugins.enabled":!0,"inlineCompletion.enabled":!0,"context.workset":!0,"usage.record":!0},VF={"browser.chromePath":!0},JF={"agent.smallWindow":["auto","on","off"],"agent.verbosity":["concise","normal","detailed"],"net.tlsMaxVersion":["auto","1.2"]},XF={"context.autoFileMaxChars":500,"context.autoFileWindowLines":40,"sessionHistory.max":1,"sessionMemory.maxTurns":1,"sessionMemory.maxChars":1e3,"agent.maxRounds":0,"agent.maxMinutes":1,"agent.noWriteNudges":0,"agent.subagentRounds":0,"agent.subagentMinutes":0,"search.maxFiles":100,"browser.viewportWidth":320,"browser.viewportHeight":240,"browser.idleTimeoutMs":1e4,"computer.screenshotWidth":320,"plugins.maxTools":1,"inlineCompletion.maxPerMinute":1,"inlineCompletion.debounceMs":0},YF={"browser.viewportWidth":4096,"browser.viewportHeight":4096,"computer.screenshotWidth":4096,"plugins.maxTools":200};function om(t){return t==="usage"||t==="general"||t==="backup"||t==="plugins"||t==="market"||t==="mcp"?t:"settings"}function im(){let t=x.workspace.getConfiguration("luban"),e=Object.create(null);Ta.forEach(function(r){e[r]=t.get(r)});let n=e.language;try{n=t.get("language")}catch{n="auto"}let s=String(n??"auto").toLowerCase();return e.language=s==="en"||s==="zh-cn"||s==="ja"?s:"auto",e}function xh(){return{type:"general",values:im()}}function ZF(){if(At)try{At.webview.postMessage(xh())}catch(t){k("general_push_failed",{message:t.message})}}async function S_(t){let e=t&&typeof t=="object"?t:{},n=[],s=Object.create(null);if(Ta.forEach(function(o){if(!Object.prototype.hasOwnProperty.call(e,o)){n.push(O("ext.generalMissing",{key:o}));return}let i=e[o];if(zF[o]){if(typeof i!="boolean"){n.push(O("ext.generalBadBool",{key:o}));return}s[o]=i;return}if(o==="language"){let d=String(i??"").toLowerCase();if(d!=="auto"&&d!=="en"&&d!=="zh-cn"&&d!=="ja"){n.push(O("ext.generalBadLanguage"));return}s[o]=d;return}let a=JF[o];if(a){let d=String(i??"");if(a.indexOf(d)<0){n.push(O("ext.generalBadEnum",{key:o,values:a.join(" / ")}));return}s[o]=d;return}if(VF[o]){s[o]=String(i??"").trim();return}let l=Number(i);if(!isFinite(l)||!Number.isInteger(l)){n.push(O("ext.generalBadNumber",{key:o}));return}let c=XF[o];if(typeof c=="number"&&l<c){n.push(O("ext.generalBadMin",{key:o,min:c}));return}let u=YF[o];if(typeof u=="number"&&l>u){n.push(O("ext.generalBadMax",{key:o,max:u}));return}s[o]=l}),n.length)return{ok:!1,errors:n};let r=x.workspace.getConfiguration("luban");try{for(let o=0;o<Ta.length;o++){let i=Ta[o];await r.update(i,s[i],x.ConfigurationTarget.Global)}}catch(o){return{ok:!1,errors:[O("ext.generalSaveFailed",{msg:String(o&&o.message||o)})]}}return k("general_saved",{keys:Ta.length}),{ok:!0,values:im()}}async function am(t){let e=Object.create(null),n=0;for(let s of Vt.providers||[])if(!(!s||!s.id))try{let r=await t.secrets.get(_a+s.id);r&&(e[s.id]=String(r),n++)}catch(r){k("secret_read_failed",{id:s.id,message:r.message})}return hs=e,k("secrets_synced",{providers:(Vt.providers||[]).length,keys:n}),n}function QF(){return{defaultModel:Vt.defaultModel||"",providers:(Vt.providers||[]).map(function(t){return{id:t.id,name:t.name||t.id,baseUrl:t.baseUrl||"",apiKeyEnv:t.apiKeyEnv||"",webSearch:t.webSearch?{baseUrl:t.webSearch.baseUrl||"",count:t.webSearch.count||8,engine:t.webSearch.engine||"",disabled:t.webSearch.disabled===!0}:null,hasInlineKey:!!t.apiKey,hasSecretKey:!!hs[t.id],hasEnvKey:!!Ja(t),models:(t.models||[]).map(function(e){return{id:e.id,name:e.name||e.id,maxInputTokens:e.maxInputTokens||65536,maxOutputTokens:e.maxOutputTokens||8192,toolCalling:e.toolCalling!==!1,vision:e.vision===!0,thinking:An(e.thinking)?e.thinking:null}})}})}}function Jc(){return{type:"settings",path:ht,source:Zo,config:QF()}}function lm(){if(At)try{At.webview.postMessage(Jc())}catch(t){k("settings_push_failed",{message:t.message})}}async function cm(t){au(),await am(t),Re(iu()),lm();let e=(Vt.providers||[]).length,n=es().length;return k("providers_reloaded",{providers:e,models:n}),{providers:e,models:n}}function eS(t,e){if(t===""||t===void 0||t===null)return e;let n=Number(t);return!isFinite(n)||n<=0?NaN:Math.floor(n)}function eL(t,e,n){if(t==null)return{ok:!0,value:null};if(!An(t))return{ok:!1,error:O("validate.thinkShape",{pos:e,id:n})};let s={};for(let i of["on","off"]){let a=t[i];if(a==null)continue;if(!An(a))return{ok:!1,error:O("validate.thinkTier",{pos:e,id:n,tier:i})};let l=Object.keys(a).filter(function(c){return a_[c]});if(l.length)return{ok:!1,error:O("validate.thinkReserved",{pos:e,id:n,tier:i,keys:l.join(", ")})};if(JSON.stringify(a).length>zv)return{ok:!1,error:O("validate.thinkTooLong",{pos:e,id:n,tier:i,n:zv})};s[i]=a}if(!s.on&&!s.off)return{ok:!1,error:O("validate.thinkEmpty",{pos:e,id:n})};if(t.inline!==void 0&&t.inline!==null&&typeof t.inline!="boolean")return{ok:!1,error:O("validate.thinkInline",{pos:e,id:n})};let r=String(t.default||"").trim(),o={};return t.inline===!0&&(o.inline=!0),o.default=r==="on"||r==="off"?r:s.off?"off":"on",s.on&&(o.on=s.on),s.off&&(o.off=s.off),{ok:!0,value:o}}function __(t){let e=t||{},n=[],s=[],r=Object.create(null);for(let l of e.providers||[]){let c=l||{},u=String(c.id||"").trim(),d=O("validate.pos",{id:u||O("validate.untitled")});if(!u){n.push(O("validate.providerEmpty"));continue}if(!/^[A-Za-z0-9_-]+$/.test(u)){n.push(O("validate.idChars",{pos:d}));continue}if(r[u]){n.push(O("validate.idDup",{pos:d}));continue}r[u]=!0;let f=String(c.baseUrl||"").trim();if(!/^https?:\/\/\S+$/i.test(f)){n.push(O("validate.baseUrl",{pos:d}));continue}let p=[],h=Object.create(null);for(let y of c.models||[]){let w=y||{},T=String(w.id||"").trim();if(!T){n.push(O("validate.modelIdEmpty",{pos:d}));continue}if(h[T]){n.push(O("validate.modelIdDup",{pos:d,id:T}));continue}h[T]=!0;let g=eS(w.maxInputTokens,65536),v=eS(w.maxOutputTokens,8192);if(isNaN(g)){n.push(O("validate.maxIn",{pos:d,id:T}));continue}if(isNaN(v)){n.push(O("validate.maxOut",{pos:d,id:T}));continue}let b=eL(w.thinking,d,T);if(!b.ok){n.push(b.error);continue}let S={id:T,name:String(w.name||"").trim()||T,maxInputTokens:g,maxOutputTokens:v,toolCalling:!!w.toolCalling,vision:!!w.vision};b.value&&(S.thinking=b.value),p.push(S)}if(!p.length){n.push(O("validate.noModels",{pos:d}));continue}let m={id:u,name:String(c.name||"").trim()||u,baseUrl:f};if(String(c.apiKeyEnv||"").trim()&&(m.apiKeyEnv=String(c.apiKeyEnv).trim()),c.webSearch&&typeof c.webSearch=="object"){let y=String(c.webSearch.baseUrl||"").trim();if(y&&!/^https?:\/\/\S+$/i.test(y)){n.push(O("validate.webUrl",{pos:d}));continue}let w=c.webSearch.count,T=w===""||w===void 0||w===null?8:Number(w);if(!isFinite(T)||T<1||T>50){n.push(O("validate.webCount",{pos:d}));continue}let g=String(c.webSearch.engine||"").trim().toLowerCase();if(g&&g!=="deepseek"&&g!=="bing"){n.push(O("validate.webEngine",{pos:d}));continue}if(c.webSearch.disabled!==void 0&&typeof c.webSearch.disabled!="boolean"){n.push(O("validate.webDisabled",{pos:d}));continue}let v={count:Math.floor(T)};y&&(v.baseUrl=y.replace(/\/+$/,"")),g&&(v.engine=g),c.webSearch.disabled===!0&&(v.disabled=!0),m.webSearch=v}m.models=p,s.push({provider:m,raw:c})}s.length||n.push(O("validate.needProvider"));let o={};s.forEach(function(l){l.provider.models.forEach(function(c){o[c.id]=(o[c.id]||0)+1})});let i=[];s.forEach(function(l){l.provider.models.forEach(function(c){i.push({key:o[c.id]>1?l.provider.id+"::"+c.id:c.id,pid:l.provider.id,mid:c.id})})});let a=String(e.defaultModel||"").trim();if(a){let l=i.find(function(c){return c.key===a})||i.find(function(c){return c.pid+"::"+c.mid===a})||i.find(function(c){return c.mid===a});a=l?l.key:""}return!a&&i.length&&(a=i[0].key),{ok:n.length===0,errors:n,defaultModel:a,entries:s}}async function T_(t,e){let n=__(e);if(!n.ok)return{ok:!1,errors:n.errors};let s=[];try{let l=JSON.parse(I.readFileSync(ht,"utf8"));l&&Array.isArray(l.providers)&&(s=l.providers)}catch{}let r=Object.create(null);for(let l of s)l&&l.id&&(r[l.id]=l);let o={defaultModel:n.defaultModel,providers:[]},i=[];for(let l of n.entries){let c=l.provider,u=l.raw||{},d=String(u.originalId||"").trim(),f=d&&r[d]||r[c.id]||null,p=f?Object.assign({},f,c):Object.assign({},c);if(f){for(let v of Object.keys(f))p[v]===void 0&&(p[v]=f[v]);let T=Object.create(null);for(let v of f.models||[])v&&v.id&&(T[v.id]=v);let g=Object.create(null);for(let v of Array.isArray(u.models)?u.models:[])v&&v.id&&(g[String(v.id).trim()]=v);p.models=c.models.map(function(v){let b=T[v.id],S=b?Object.assign({},b,v):v,_=g[v.id];return _&&Object.prototype.hasOwnProperty.call(_,"thinking")&&_.thinking===null&&!v.thinking&&delete S.thinking,S})}let h="",m=f&&f.id?f.id:d||c.id;m&&m!==c.id?h=hs[m]||""||await t.secrets.get(_a+m)||"":h=hs[c.id]||"";let y=String(u.apiKeyAction||"keep"),w=h;if(y==="set"){let T=String(u.apiKeyValue||"").trim();T&&(w=T),delete p.apiKey}else y==="clear"&&(w="",delete p.apiKey);(w!==h||m&&m!==c.id)&&i.push({id:c.id,oldId:m&&m!==c.id?m:null,value:w}),o.providers.push(p)}I.mkdirSync(D.dirname(ht),{recursive:!0,mode:448});let a=ht+".tmp";if(I.writeFileSync(a,JSON.stringify(o,null,2)+`
|
|
1118
|
+
`,{mode:384}),I.existsSync(ht))try{I.copyFileSync(ht,ht+".bak")}catch(l){k("config_backup_failed",{message:l.message})}I.renameSync(a,ht);for(let l of i)l.value?await t.secrets.store(_a+l.id,l.value):await t.secrets.delete(_a+l.id),l.oldId&&await t.secrets.delete(_a+l.oldId);return au(),await am(t),Re(iu()),lm(),k("config_saved",{path:ht,providers:o.providers.length,models:es().length,secrets:i.length}),{ok:!0,path:ht,source:Zo,defaultModel:oi(),models:iu().models}}async function M_(t){let e=t||{},n={id:String(e.id||e.originalId||"test"),baseUrl:String(e.baseUrl||"").trim(),apiKey:String(e.apiKey||"").trim(),apiKeyEnv:String(e.apiKeyEnv||"").trim()},s=String(e.modelId||"").trim();if(!n.baseUrl)return{ok:!1,error:O("ext.providerBaseUrl")};if(!s)return{ok:!1,error:O("ext.providerNeedModel")};let r=n.apiKey||hs[e.id]||hs[e.originalId]||""||Ja(n)||(Qo(n)?Ih:"");if(!r)return{ok:!1,error:O("ext.providerNeedKey")};let o=Date.now(),i=new AbortController,a=setTimeout(function(){i.abort()},15e3);try{let l=await fetch(SS(n),{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+r},body:JSON.stringify({model:s,messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1}),signal:i.signal}),c=await l.text(),u=Date.now()-o,d="";try{let f=JSON.parse(c);d=f.choices&&f.choices[0]&&f.choices[0].message&&f.choices[0].message.content||""}catch{}return k("provider_test",{id:n.id,model:s,status:l.status,ms:u}),{ok:l.ok,status:l.status,ms:u,reply:String(d||"").slice(0,160),error:l.ok?"":"HTTP "+l.status+": "+c.slice(0,200)}}catch(l){return k("provider_test_failed",{id:n.id,message:l.message}),{ok:!1,error:l&&l.name==="AbortError"?O("ext.providerTimeout"):String(l&&l.message||l)}}finally{clearTimeout(a)}}function Mt(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function fu(t,e,n){let s=Mt(t);if(!s)return null;let r=Mt(e),o=r?Math.max(1024,Math.min(32768,r)):Math.max(1024,Math.min(16384,Math.floor(s/4)));return o=Math.min(o,Math.max(1024,Math.floor(s/2))),{maxInputTokens:Math.max(1024,s-o),maxOutputTokens:o,source:n||"generic"}}function C_(t){let e=t&&typeof t=="object"?t:{},n=e.top_provider&&typeof e.top_provider=="object"?e.top_provider:{},s=e.meta&&typeof e.meta=="object"?e.meta:{},r=Mt(e.context_length)||Mt(e.context_window)||Mt(e.max_context_length)||Mt(e.max_model_len)||Mt(e.max_input_tokens)||Mt(s.n_ctx_train),o=Mt(e.max_output_tokens)||Mt(e.max_completion_tokens)||Mt(n.max_completion_tokens);if(!r&&!o)return null;let i="generic";return Mt(e.max_model_len)?i="vllm":(n.context_length||n.max_completion_tokens)&&(i="openrouter"),{context:r,output:o,source:i}}function A_(t){return String(t||"").replace(/\/+$/,"").replace(/\/v1$/i,"")}async function vh(t,e,n){let s=new AbortController,r=setTimeout(function(){s.abort()},n);try{let o=await fetch(t,Object.assign({},e||{},{signal:s.signal})),i=await o.text();if(!o.ok)return{ok:!1,status:o.status};try{return{ok:!0,json:JSON.parse(i)}}catch{return{ok:!1,badJson:!0}}}catch(o){return{ok:!1,error:o}}finally{clearTimeout(r)}}async function tL(t,e,n,s){let r=A_(t.baseUrl);if(!(await vh(r+"/api/version",{headers:{}},1200)).ok)return;let i=e.filter(function(c){return!n[c]}).slice(0,40),a=0;async function l(){for(;a<i.length&&Date.now()<s;){let c=i[a++],u=await vh(r+"/api/show",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:c,name:c})},2e3);if(!u.ok||!u.json)continue;let d=typeof u.json.parameters=="string"?u.json.parameters:"",f=/(?:^|\n)\s*num_ctx\s+(\d+)/i.exec(d),p=f?Mt(f[1]):0,h=!1;if(!p&&u.json.model_info&&typeof u.json.model_info=="object"){for(let y of Object.keys(u.json.model_info))if(/\.context_length$/i.test(y)&&(p=Mt(u.json.model_info[y]),p)){h=!0;break}}let m=fu(p,0,"ollama");m&&(h&&(m.fromTraining=!0),n[c]=m)}}await Promise.all([l(),l(),l(),l()])}async function nL(t,e,n){if(e.length!==1||n[e[0]])return;let s=A_(t.baseUrl),r=await vh(s+"/props",{headers:{}},1200);if(!r.ok||!r.json)return;let o=r.json.default_generation_settings&&typeof r.json.default_generation_settings=="object"?r.json.default_generation_settings:{},i=Mt(o.n_ctx)||Mt(r.json.n_ctx),a=fu(i,0,"llamacpp");a&&(n[e[0]]=a)}async function um(t){let e=t||{},n={id:String(e.id||e.originalId||"test"),baseUrl:String(e.baseUrl||"").trim(),apiKey:String(e.apiKey||"").trim(),apiKeyEnv:String(e.apiKeyEnv||"").trim()};if(!n.baseUrl)return{ok:!1,error:O("ext.providerBaseUrl")};let s=n.apiKey||hs[e.id]||hs[e.originalId]||""||Ja(n)||(Qo(n)?Ih:"");if(!s)return{ok:!1,error:O("ext.providerNeedKey")};let r=String(n.baseUrl).replace(/\/+$/,"")+"/models",o=new AbortController,i=setTimeout(function(){o.abort()},15e3);try{let a=await fetch(r,{headers:{Authorization:"Bearer "+s},signal:o.signal}),l=await a.text();if(!a.ok)return{ok:!1,status:a.status,error:"HTTP "+a.status+": "+l.slice(0,200)};let c=[],u=Object.create(null);try{let d=JSON.parse(l),f=Array.isArray(d)?d:d.data||d.models||[];for(let p of f){let h=typeof p=="string"?p:p&&(p.id||p.name),m=String(h??"").trim();if(!m)continue;c.push(m);let y=typeof p=="object"?C_(p):null;if(y){let w=fu(y.context,y.output,y.source);w&&(u[m]=w)}}}catch{return{ok:!1,error:O("ext.providerBadJson",{head:l.slice(0,120)})}}if(c.some(function(d){return!u[d]})){let d=Date.now()+6e3;try{await tL(n,c,u,d)}catch{}try{await nL(n,c,u)}catch{}}return k("provider_models_fetched",{id:n.id,count:c.length}),k("provider_models_meta",{id:n.id,detected:Object.keys(u).length}),{ok:!0,status:a.status,models:c.slice(0,300),meta:u}}catch(a){return{ok:!1,error:a&&a.name==="AbortError"?O("ext.providerTimeout"):String(a&&a.message||a)}}finally{clearTimeout(i)}}var sL=!0;function io(t){return sL?x.Uri.joinPath(t,"dist","media"):x.Uri.joinPath(t,"media")}var Sh="luban.webdav.password",Ec=!1,O_=null;function zt(t,e){let n=String(t??""),s=An(e)?e:null;return n.indexOf("webdav.")===0?s?O(n,s):O(n):n||O("webdav.errNetwork")}async function ah(t,e){try{return!!await x.window.showWarningMessage(String(t||""),{modal:!0},O(e||"ext.confirmYes"))}catch(n){return k("native_confirm_failed",{message:String(n&&n.message||n)}),!1}}var tS={sessions:"webdav.catSessions",attachments:"webdav.catAttachments",plans:"webdav.catPlans",providers:"webdav.catProviders",mcp:"webdav.catMcp"};function nS(t){if(!t||typeof t!="object")return"";let e=[];for(let n of Object.keys(tS)){let s=Number(t[n])||0;s>0&&e.push(O(tS[n],{n:s}))}return e.length?O("webdav.catWrap",{parts:e.join(" \xB7 ")}):""}function E_(t){let e=t||{};if((Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")<0)return"";let s=e.merge||{},r=Number(s.added)||0,o=Number(s.models)||0,i=r>0?O("webdav.statusProviderMerged",{p:r,m:o}):O("webdav.statusProviderNoNew");return O("webdav.mergeSep")+i}function rL(t){let e=t||{};return O("webdav.confirmOverwrite",{machine:e.machine||"?",at:String(e.createdAt||"").replace("T"," ").slice(0,19),n:e.files||0})}async function dm(t){try{return await t.secrets.get(Sh)||""}catch(e){return k("webdav_secret_read_failed",{message:String(e&&e.message||e)}),""}}async function Ha(t){let e=Mn.loadConfig();return{type:"webdav",path:Mn.WEBDAV_CONFIG_PATH,config:e,hasPassword:!!await dm(t),busy:Ec,last:O_}}async function oL(t,e){let n=e||At&&At.webview;if(n)try{n.postMessage(await Ha(t))}catch(s){k("webdav_push_failed",{message:String(s&&s.message||s)})}}async function fm(t,e){let n=An(e)?e:{},s=String(n.passwordAction||"keep"),r=String(n.passwordValue==null?"":n.passwordValue),o=Mn.saveConfig(n.config||{});if(!o.ok)return k("webdav_save_invalid",{errors:o.errors}),{ok:!1,errors:(o.errors||[]).map(function(a){return zt(a)})};let i=!1;try{s==="set"&&r?(await t.secrets.store(Sh,r),i=!0):s==="clear"&&(await t.secrets.delete(Sh),i=!0)}catch(a){k("webdav_secret_write_failed",{message:String(a&&a.message||a)})}return k("webdav_saved",{path:o.path,url:o.config.url,enabled:o.config.enabled,remoteDir:o.config.remoteDir,includes:o.config.includes,secretChanged:i}),await oL(t),{ok:!0,path:o.path,config:o.config,hasPassword:!!await dm(t)}}async function ii(t,e){let n=Mn.loadConfig(),s=An(e)?e:{},r=s.password!=null&&String(s.password)!==""?String(s.password):await dm(t);if(!An(s.config))return Object.assign({},n,{password:r});let o=Mn.normalizeConfig(Object.assign({},n,s.config)),i=Object.assign({},o.config,{password:r});return i.__invalid=(o.errors||[]).length?o.errors:null,i}function Za(t){return t.__invalid&&t.__invalid.length?t.__invalid.map(function(e){return zt(e)}).join(" \xB7 "):t.url?t.enabled?"":zt("webdav.errDisabled"):zt("webdav.errNeedUrl")}async function P_(t,e){let n=await ii(t,e);if(n.__invalid&&n.__invalid.length)return{ok:!1,error:n.__invalid.map(function(r){return zt(r)}).join(" \xB7 ")};if(!n.url)return{ok:!1,error:zt("webdav.errNeedUrl")};let s=await Mn.testConnection(n);return k("webdav_test",{ok:!!s.ok,status:s.status||0,error:s.error||"",ms:s.ms||0}),{ok:!!s.ok,status:s.status||0,ms:s.ms||0,needsCreate:!!s.needsCreate,error:s.ok?"":zt(s.error||"webdav.errNetwork",s.detail)}}function iL(){for(let t of Cn.values())try{clearTimeout(t)}catch{}Cn.clear();for(let t of ge.values())try{xt(t)}catch{}}function aL(){try{be=null,st(),Re(Sn())}catch(t){k("webdav_session_refresh_failed",{message:String(t&&t.message||t)})}}function j_(t){let e=t||{};return{force:!!e.force,mode:e.mode,override:e.override,subdir:e.subdir,providerIds:Array.isArray(e.providerIds)?e.providerIds.map(String):null}}function I_(t){let e=t||{};return Number(e.restored)>0?(Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")>=0:!1}async function _h(t,e,n,s){if(Ec)return{ok:!1,error:zt("webdav.errBusy"),busy:!0};Ec=!0;let r=n||{},o=function(a){if(s)try{s.postMessage(Object.assign({type:"webdav_progress",kind:e},a))}catch{}},i={force:!!r.force,mode:r.mode==="force"?"force":"newer",version:fs,machine:lt.hostname()};try{let a=await ii(t,r.override),l=Za(a);if(l)return{ok:!1,error:l};delete a.__invalid,a.machine=lt.hostname();let c;if(e==="backup"?c=await us.uploadAll(a,i,o):(iL(),c=await us.restoreAll(a,Object.assign({},i,{subdir:r.subdir||"",providerIds:Array.isArray(r.providerIds)?r.providerIds.map(String):null}),o)),c.ok){if(O_={kind:e,at:new Date().toISOString(),files:e==="backup"?c.files:c.restored,categories:c.categories||null,snapshot:c.snapshot||""},k(e==="backup"?"webdav_backup_done":"webdav_restore_done",{ok:!0,files:e==="backup"?c.files:c.restored,bytes:c.bytes||0,skipped:c.skipped,unchanged:c.unchanged||0,blocked:(c.blocked||[]).length,incomplete:c.incomplete||0,snapshot:c.snapshot||"",redacted:!!c.redacted}),e==="restore"&&c.restored>0&&(aL(),I_(c)))try{await cm(t)}catch(d){k("providers_reload_failed",{message:String(d&&d.message||d)})}}else k(e==="backup"?"webdav_backup_failed":"webdav_restore_failed",{error:c.error||"",phase:c.phase||"",needsConfirm:!!c.needsConfirm});let u=!c.ok&&c.error==="webdav.errPartial"?{n:(c.failed||[]).length}:null;return Object.assign({},c,{error:c.ok?"":c.needsConfirm?zt(c.error||"webdav.errRemoteNewer"):zt(c.error||"webdav.errNetwork",u)})}catch(a){return k("webdav_transfer_failed",{kind:e,message:String(a&&a.message||a)}),{ok:!1,error:zt(a&&a.message||"webdav.errNetwork")}}finally{Ec=!1}}async function N_(t,e,n){let s=await ii(t,e),r=Za(s);if(r)return{ok:!1,error:r};s.machine=lt.hostname();let o=await us.remoteSummary(s,{limit:200,subdir:n||""});return k("webdav_remote_list",{ok:!!o.ok,hasBackup:!!o.hasBackup,total:o.total||0,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":zt(o.error||"webdav.errNetwork")})}async function F_(t,e,n){let s=await ii(t,e),r=Za(s);if(r)return{ok:!1,error:r};s.machine=lt.hostname();let o=await us.listRemoteProviders(s,{subdir:n||"",home:ht?D.dirname(ht):""});return k("webdav_remote_providers",{ok:!!o.ok,n:(o.providers||[]).length,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":zt(o.error||"webdav.errNetwork")})}async function L_(t,e){let n=await ii(t,e),s=Za(n);if(s)return{ok:!1,error:s};let r=await us.listMachines(n,{machine:lt.hostname()});return k("webdav_machine_list",{ok:!!r.ok,n:(r.machines||[]).length}),Object.assign({},r,{error:r.ok?"":zt(r.error||"webdav.errNetwork")})}async function lL(){let t=Mn.WEBDAV_CONFIG_PATH;I.existsSync(t)||(I.mkdirSync(D.dirname(t),{recursive:!0,mode:448}),I.writeFileSync(t,JSON.stringify(Mn.defaultConfig(),null,2)+`
|
|
1119
|
+
`,{mode:384}));let e=await x.workspace.openTextDocument(x.Uri.file(t));return await x.window.showTextDocument(e,{preview:!1}),t}function cL(){let t=require("http"),e=new Map,n=new Set(["/dav"]),s=function(a){if(n.has(a))return!0;for(let l of e.keys())if(l.indexOf(a+"/")===0)return!0;return!1},r=function(a){let l=String(a).replace(/\/+$/,"")+"/",c=[],u=Object.create(null);for(let d of n){if(d===a||d.indexOf(l)!==0)continue;let f=d.slice(l.length).split("/")[0];f&&!u[f]&&(u[f]=!0,c.push({path:l+f,dir:!0}))}for(let d of e.keys())d.indexOf(l)!==0||d.slice(l.length).indexOf("/")>=0||c.push({path:d,dir:!1});return c},o=function(a,l){let c=a.split("/").map(function(d,f){return f===0?"":encodeURIComponent(d)}).join("/")+(l?"/":""),u=l?"<d:resourcetype><d:collection/></d:resourcetype>":"<d:resourcetype/><d:getcontentlength>"+e.get(a).length+"</d:getcontentlength>";return"<d:response><d:href>"+c+"</d:href><d:propstat><d:prop>"+u+"<d:getlastmodified>Wed, 21 Oct 2026 07:28:00 GMT</d:getlastmodified></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response>"},i=t.createServer(function(a,l){let c=String(a.url||"/"),u=c.indexOf("?"),d=decodeURIComponent(u>=0?c.slice(0,u):c);if(a.method==="PROPFIND"){if(!s(d)&&!e.has(d))return l.writeHead(404),l.end("");let f=String(a.headers.depth||"0"),p='<?xml version="1.0" encoding="utf-8"?><d:multistatus xmlns:d="DAV:">'+o(String(d).replace(/\/+$/,"")||"/dav",!0);if(f!=="0")for(let h of r(d))p+=o(h.path,h.dir);return l.writeHead(207,{"Content-Type":"application/xml; charset=utf-8"}),l.end(p+"</d:multistatus>")}if(a.method==="MKCOL"){if(s(d)||e.has(d))return l.writeHead(405),l.end("");let f=d.replace(/\/[^/]+$/,"")||"/";return s(f)?(n.add(d),l.writeHead(201),l.end("")):(l.writeHead(409),l.end(""))}if(a.method==="PUT"){let f=[];a.on("data",function(p){f.push(p)}),a.on("end",function(){e.set(d,Buffer.concat(f));let p=d.replace(/\/[^/]+$/,"");for(;p&&p!=="/"&&!n.has(p);)n.add(p),p=p.replace(/\/[^/]+$/,"");l.writeHead(201),l.end("")});return}if(a.method==="GET")return e.has(d)?(l.writeHead(200),l.end(e.get(d))):(l.writeHead(404),l.end(""));l.writeHead(405),l.end("")});return new Promise(function(a){i.listen(0,"127.0.0.1",function(){a({url:"http://127.0.0.1:"+i.address().port+"/dav",files:e,close:function(){return new Promise(function(l){i.close(function(){l()})})}})})})}function uL(t){I.mkdirSync(D.join(t,"sessions"),{recursive:!0}),I.writeFileSync(D.join(t,"sessions","z1.json"),JSON.stringify({id:"z1",items:[{t:"user",text:"\u81EA\u68C0\u4E00"}]})),I.writeFileSync(D.join(t,"sessions","z2.json"),JSON.stringify({id:"z2",items:[{t:"user",text:"\u81EA\u68C0\u4E8C"}]})),I.writeFileSync(D.join(t,"sessions","index.json"),"[]"),I.writeFileSync(D.join(t,"providers.json"),JSON.stringify({defaultModel:"m1",providers:[{id:"p1",baseUrl:"https://api.example.com",apiKey:"sk-selfcheck-plain",models:[{id:"m1"}]}]},null,2))}async function D_(t){let e=await cL(),n=I.mkdtempSync(D.join(lt.tmpdir(),"luban-wd-check-")),s=D.join(n,"webdav.json");try{uL(n);let r={url:e.url,username:"u",password:"p",remoteDir:"luban",includes:{sessions:!0,attachments:!0,plans:!0,config:!0,mcp:!0}},o={home:n,configPath:s,persist:!1,config:Mn.normalizeConfig(r).config,version:fs,machine:lt.hostname()},i=await us.uploadAll(r,o,null);if(!i.ok)return{ok:!1,result:{phase:"upload",up:i},error:i.error};let a=JSON.parse(e.files.get("/dav/luban/manifest.json").toString("utf8")),l=Object.keys(a.files),c=e.files.get("/dav/luban/config/providers.json").toString("utf8").indexOf("sk-selfcheck-plain")>=0;if(t==="restore_policy"){let p=D.join(n,"sessions","z1.json");I.writeFileSync(p,'{"id":"z1","local":"edited"}');let h=new Date(Date.parse(a.createdAt)+6e4);I.utimesSync(p,h,h);let m=await us.restoreAll(r,Object.assign({},o,{mode:"newer"})),y=I.readFileSync(p,"utf8").indexOf("edited")>=0;return{ok:!!m.ok&&(m.blocked||[]).length===1&&y,result:{blocked:m.blocked,restored:m.restored,kept:y,total:l.length}}}for(let p of l)try{I.rmSync(us.localPathOf(n,p),{force:!0})}catch{}I.rmSync(D.join(n,"sessions"),{recursive:!0,force:!0});let u=await us.restoreAll(r,Object.assign({},o,{mode:"newer"}));if(!u.ok)return{ok:!1,result:{phase:"restore",down:u},error:u.error};let d=!0,f="";for(let p of l){let h=us.localPathOf(n,p);if(!I.existsSync(h)){d=!1,f=p+":missing";break}if(require("crypto").createHash("sha1").update(I.readFileSync(h)).digest("hex")!==a.files[p].sha1){d=!1,f=p+":sha";break}}return{ok:d&&l.length>0&&!c&&u.restored===l.length,result:{files:l.length,restored:u.restored,shaMatch:d,mismatch:f,redacted:!c,uploaded:i.files,snapshot:u.snapshot||""}}}finally{await e.close();try{I.rmSync(n,{recursive:!0,force:!0})}catch{}}}function dL(t,e,n){let s=io(e),r=t.asWebviewUri(x.Uri.joinPath(s,"panel.css")),o=t.asWebviewUri(x.Uri.joinPath(s,"settings.css")),i=t.asWebviewUri(x.Uri.joinPath(s,"dashboard.css")),a=t.asWebviewUri(x.Uri.joinPath(s,"hub.css")),l=t.asWebviewUri(x.Uri.joinPath(s,"hub.js")),c=t.asWebviewUri(x.Uri.joinPath(s,"i18n.js")),u=I.readFileSync(x.Uri.joinPath(s,"hub.html").fsPath,"utf8"),d=Math.random().toString(36).slice(2)+Date.now().toString(36);return u.replace(/{{cspSource}}/g,t.cspSource).replace(/{{cssUri}}/g,String(r)).replace(/{{settingsCssUri}}/g,String(o)).replace(/{{dashCssUri}}/g,String(i)).replace(/{{hubCssUri}}/g,String(a)).replace(/{{jsUri}}/g,String(l)).replace(/{{i18nUri}}/g,String(c)).replace(/{{themeStyle}}/g,Gh()).replace(/{{lang}}/g,rn||Va()).replace(/{{tab}}/g,om(n)).replace(/{{version}}/g,fs).replace(/{{nonce}}/g,d)}function R_(t,e){return ts=t,t.onDidReceiveMessage(async function(s){if(!(!s||!s.type)){if(s.type==="hub_ready"||s.type==="ready"){t.postMessage({type:"lang",lang:rn});try{t.postMessage(xh())}catch{}try{t.postMessage(Jc())}catch{}try{t.postMessage(await Ha(e))}catch{}try{t.postMessage(va(Un))}catch{}try{t.postMessage(Xc())}catch{}try{t.postMessage(Mh())}catch{}try{t.postMessage({type:"activate",tab:kh})}catch{}Th("hub_ready"),k("hub_ready",{tab:kh});return}if(s.type==="tab"){let r=om(s.tab);try{r==="usage"?t.postMessage(va(Un)):r==="general"?t.postMessage(xh()):r==="backup"?t.postMessage(await Ha(e)):r==="plugins"?t.postMessage(Xc()):r==="mcp"?t.postMessage(Mh()):r==="market"?t.postMessage(await B_()):t.postMessage(Jc())}catch{}k("hub_tab",{tab:r});return}if(s.type==="ack_rendered"){N=Object.assign({at:Date.now()},s),s.source==="dashboard"?k("usage_dashboard_ack",{kind:s.kind,n:s.n,groups:s.groups}):s.source==="general"?k("general_ack",{kind:s.kind,n:s.n}):k("settings_ack",{kind:s.kind,n:s.n});return}if(s.type==="save_general"){try{let r=await S_(s.values||{});r.ok?t.postMessage(Object.assign({type:"general_saved"},r)):t.postMessage({type:"general_invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"general_invalid",errors:[O("ext.generalSaveFailed",{msg:String(r&&r.message||r)})]}),k("general_save_failed",{message:r.message})}return}if(s.type==="save_settings"){try{let r=await T_(e,s.config||{});r.ok?t.postMessage(Object.assign({type:"saved"},r)):t.postMessage({type:"invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"invalid",errors:[O("ext.saveFailed",{msg:String(r&&r.message||r)})]}),k("settings_save_failed",{message:r.message})}return}if(s.type==="test_provider"){let r=await M_(s.provider||{});t.postMessage(Object.assign({type:"test_result",ref:s.ref},r));return}if(s.type==="fetch_models"){let r=await um(s.provider||{});t.postMessage(Object.assign({type:"models_fetched",ref:s.ref},r));return}if(s.type==="open_config_file"){try{if(!I.existsSync(ht))throw new Error(O("ext.configMissing"));let r=await x.workspace.openTextDocument(x.Uri.file(ht));await x.window.showTextDocument(r,{preview:!1})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="reload_config"){try{await reloadConfigCommand()}catch(r){try{t.postMessage({type:"notice",message:String(r&&r.message||r)})}catch{}k("settings_reload_failed",{message:String(r&&r.message||r)})}return}if(s.type==="save_webdav"){try{let r=await fm(e,s);r.ok?t.postMessage(Object.assign({type:"webdav_saved"},r)):t.postMessage({type:"webdav_invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"webdav_invalid",errors:[zt(String(r&&r.message||r))]}),k("webdav_save_failed",{message:String(r&&r.message||r)})}return}if(s.type==="test_webdav"){let r=await P_(e,s.override);t.postMessage(Object.assign({type:"webdav_test"},r));return}if(s.type==="webdav_backup"||s.type==="webdav_restore"){let r=s.type==="webdav_backup"?"backup":"restore",o=j_(s),i=await _h(e,r,o,t);if(!i.ok&&i.needsConfirm&&r==="backup"&&(await ah(rL(i.remote),"webdav.confirmOverwriteYes")?(o.force=!0,i=await _h(e,r,o,t)):i={ok:!1,cancelled:!0,phase:"confirm"}),t.postMessage(Object.assign({type:"webdav_done"},i,{kind:r})),r==="backup"&&i.ok)try{let a=(i.unchanged||0)>0?"webdav.statusBackupDoneInc":"webdav.statusBackupDone",l=(i.unchanged||0)>0?{u:i.uploaded||0,s:i.unchanged||0}:{n:i.files||0};x.window.showInformationMessage(O(a,l)+nS(i.categories))}catch{}if(r==="restore"&&i.ok&&i.restored>0)try{t.postMessage({type:"notice",message:O("webdav.restoredNotice",{n:i.restored,cat:nS(i.categories)+E_(i),dir:i.snapshot||O("webdav.noSnapshot")})})}catch{}return}if(s.type==="webdav_remote_list"){let r=await N_(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_list"},r));return}if(s.type==="webdav_remote_providers"){let r=await F_(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_providers"},r,{reqId:s.reqId}));return}if(s.type==="webdav_machines"){let r=await L_(e,s.override);t.postMessage(Object.assign({type:"webdav_machines"},r));return}if(s.type==="hub_confirm"){let r=await ah(s.message);try{t.postMessage({type:"hub_confirm_result",id:s.id,ok:r})}catch{}return}if(s.type==="plugins_install"){let r=[];try{r=await x.window.showOpenDialog({canSelectFiles:!1,canSelectFolders:!0,canSelectMany:!1,openLabel:O("ext.pluginsPickFolder"),title:O("ext.pluginsPickTitle")})}catch(a){t.postMessage({type:"plugins_result",action:"install",ok:!1,message:String(a&&a.message||a)});return}if(!r||!r.length){t.postMessage({type:"plugins_result",action:"install",ok:!1,cancelled:!0});return}let o=r[0].fsPath,i=await Ge.installFromDir(o,{trust:!0,replace:s.replace===!0});k("plugins_install",{src:o,ok:i.ok,code:i.code||"",name:i.name||""}),t.postMessage(Object.assign({type:"plugins_result",action:"install"},i)),i.ok&&await Ko("install");return}if(s.type==="plugins_uninstall"){let r=String(s.name||""),o=String(s.dir||"");if(!r&&!o)return;if(!await ah(O("ext.pluginsUninstallConfirm",{name:r||o}),"ext.pluginsUninstallYes")){t.postMessage({type:"plugins_result",action:"uninstall",ok:!1,cancelled:!0});return}let a=await Ge.uninstall(o||r,{why:"uninstall"});k("plugins_uninstall",{name:r||o,ok:a.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"uninstall"},a)),a.ok&&await Ko("uninstall");return}if(s.type==="plugins_restore"){let r=String(s.entry||""),o=await Ge.restoreFromTrash(r);k("plugins_restore",{entry:r,ok:o.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"restore"},o)),o.ok&&await Ko("restore");return}if(s.type==="plugins_trust"){let r;try{r={ok:!0,name:Ge.trustDir(String(s.dir||"")).name}}catch(o){r={ok:!1,message:String(o&&o.message||o)}}k("plugins_trust",{name:r.name||"",ok:r.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"trust"},r)),r.ok&&await Ko("trust");return}if(s.type==="plugins_rescan"){await Ko("rescan");return}if(s.type==="plugins_theme"){let r=String(s.name||"").trim(),o=!0,i="";if(r){let a=null;try{a=Ge.themeOf(r)}catch{a=null}a||(o=!1,i=O("ext.pluginsThemeUnknown",{name:r}))}if(o)try{await x.workspace.getConfiguration("luban").update("plugins.theme",r,x.ConfigurationTarget.Global)}catch(a){o=!1,i=String(a&&a.message||a)}k("plugins_theme",{name:r,ok:o}),t.postMessage({type:"plugins_result",action:"theme",ok:o,name:r,message:i}),o&&(Yc("theme"),zh());return}if(s.type==="plugins_open_dir"){let o=String(s.which||"global")==="trash"?Ge.trashDir():Ge.globalDir();try{I.mkdirSync(o,{recursive:!0}),await x.commands.executeCommand("revealFileInOS",x.Uri.file(o))}catch(i){t.postMessage({type:"plugins_result",action:"open_dir",ok:!1,message:String(i&&i.message||i)})}return}if(s.type==="mcp_toggle"){let r=s.target==="project"?"project":"global";try{xe.configure({root:R(),version:fs,rec:k});let o=xe.setDisabled({name:s.name,disabled:s.disabled===!0,target:r});await xe.reload(),k("mcp_toggle",{name:o.name,disabled:o.disabled,target:r,changed:o.changed,removed:o.removed,path:o.path}),t.postMessage({type:"mcp_result",action:"toggle",ok:!0,name:o.name,disabled:o.disabled,target:r,path:o.path,changed:o.changed,removed:o.removed===!0}),sS("toggle")}catch(o){k("mcp_toggle_failed",{name:String(s.name||""),target:r,message:String(o&&o.message||o)}),t.postMessage({type:"mcp_result",action:"toggle",ok:!1,message:String(o&&o.message||o)})}return}if(s.type==="mcp_reload"){try{xe.configure({root:R(),version:fs,rec:k}),await xe.reload(),t.postMessage({type:"mcp_result",action:"reload",ok:!0})}catch(r){k("mcp_reload_failed",{message:String(r&&r.message||r)}),t.postMessage({type:"mcp_result",action:"reload",ok:!1,message:String(r&&r.message||r)})}sS("reload");return}if(s.type==="mcp_open_file"){try{let r=s.which==="project"?"project":"global",o=xe.configPathFor(r);I.existsSync(o)||(I.mkdirSync(D.dirname(o),{recursive:!0}),I.writeFileSync(o,`{
|
|
1120
1120
|
"mcpServers": {}
|
|
1121
1121
|
}
|
|
1122
|
-
`,"utf8"));let i=await x.workspace.openTextDocument(x.Uri.file(o));await x.window.showTextDocument(i,{preview:!1}),k("mcp_open_file",{which:r,path:o})}catch(r){k("mcp_open_file_failed",{message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:O("ext.mcpOpenFailed",{msg:String(r&&r.message||r)})})}catch{}}return}if(s.type==="open_webdav_file"){try{let r=await lL();k("webdav_open_file",{path:r})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="market_install"){await gL(t,s);return}if(s.type==="market_refresh"){Th("refresh");return}if(s.type==="set_range"){Un=Ve.RANGES.some(function(o){return o.key===String(s.range||"")})?String(s.range):"7d";try{t.postMessage(va(Un))}catch{}k("usage_dashboard_range",{range:Un});return}if(s.type==="refresh"){try{t.postMessage(va(Un))}catch{}k("usage_dashboard_refresh",{range:Un});return}if(s.type==="open_usage_dir"){try{I.mkdirSync(
|
|
1122
|
+
`,"utf8"));let i=await x.workspace.openTextDocument(x.Uri.file(o));await x.window.showTextDocument(i,{preview:!1}),k("mcp_open_file",{which:r,path:o})}catch(r){k("mcp_open_file_failed",{message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:O("ext.mcpOpenFailed",{msg:String(r&&r.message||r)})})}catch{}}return}if(s.type==="open_webdav_file"){try{let r=await lL();k("webdav_open_file",{path:r})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="market_install"){await gL(t,s);return}if(s.type==="market_refresh"){Th("refresh");return}if(s.type==="set_range"){Un=Ve.RANGES.some(function(o){return o.key===String(s.range||"")})?String(s.range):"7d";try{t.postMessage(va(Un))}catch{}k("usage_dashboard_range",{range:Un});return}if(s.type==="refresh"){try{t.postMessage(va(Un))}catch{}k("usage_dashboard_refresh",{range:Un});return}if(s.type==="open_usage_dir"){try{I.mkdirSync(gr,{recursive:!0,mode:448}),await x.commands.executeCommand("revealFileInOS",x.Uri.file(gr)),k("usage_dashboard_open_dir",{ok:!0})}catch(r){k("usage_dashboard_open_dir",{ok:!1,message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:O("ext.openDirFailed",{msg:String(r&&r.message||r)})})}catch{}}return}}})}function Xc(){let t=Xa(),e;try{e=Ge.inventory()}catch(r){k("plugins_status_failed",{message:r.message}),e={dirs:[],errors:[],plugins:[],pending:[]}}let n=[];try{n=Ge.trashList()}catch(r){k("plugins_trash_failed",{message:r.message})}let s=[];try{s=Ge.themes().map(function(r){return{name:r.name,label:r.label,description:r.description||"",tokens:Object.keys(r.tokens||{}).length,dropped:(r.dropped||[]).length}})}catch(r){k("plugins_themes_failed",{message:r.message})}return{type:"plugins",enabled:t.enabled,maxTools:t.maxTools,theme:t.theme,themes:s,root:R(),dirs:e.dirs||[],globalDir:Ge.globalDir(),trashDir:Ge.trashDir(),plugins:e.plugins||[],pending:e.pending||[],trash:n,errors:e.errors||[]}}function Yc(t){if(ts)try{ts.postMessage(Xc())}catch(e){k("plugins_push_failed",{message:e.message,reason:t||"push"})}}var $_=8e3,q_=["fsRead","fsWrite","shell","net","env"],fL={fsRead:"market.permFsRead",fsWrite:"market.permFsWrite",shell:"market.permShell",net:"market.permNet",env:"market.permEnv"};function pL(){let t={};try{let e=Ge.inventory();(e.plugins||[]).concat(e.pending||[]).forEach(function(n){n&&n.name&&(t[n.name]=String(n.version||""))})}catch(e){k("market_inventory_failed",{message:e.message})}try{xv.configure({root:R()}),xv.installed().forEach(function(e){e&&e.name&&(t[e.name]=String(e.version||""))})}catch(e){k("market_skills_failed",{message:e.message})}return t}function hL(t,e,n){let s=e[String(t.name||"")],r=s!==void 0,o=t.permissions||{};return{name:t.name,displayName:t.displayName||t.name,description:t.description||"",type:t.type==="skill"?"skill":"plugin",version:t.version||"",review:t.review&&t.review.status||"pending",reviewNotes:t.review&&t.review.notes||"",signed:!!(n&&n.ok),unsignedReason:n&&n.ok?"":n&&n.reason||"\u672A\u7B7E\u540D",permissions:o,permList:q_.filter(function(i){return o[i]===!0}),tools:(t.tools||[]).map(function(i){return{name:i.name,readOnly:i.readOnly===!0}}),repo:t.repo||"",tags:t.tags||[],installed:r,installedVersion:r?s:"",updateAvailable:r&&!!t.version&&s!==t.version}}async function B_(){let t=pL(),e=await mL();return{type:"market",source:e.source,offline:e.offline,error:e.error,entries:(e.entries||[]).map(function(n){let s=hS.verifyEntry(n,e.keys||{});return hL(n,t,s)})}}async function mL(){let t=[],e={},n="",s=!1,r="",o=process.env.LUBAN_REGISTRY||Ps.DEFAULT_REGISTRY_URL;try{let i=await Ps.readRegistryRaw({registry:o,timeoutMs:$_});i.ok&&i.registry?(t=i.registry.entries||[],e=i.keys||{},n=i.source):r=i.error||""}catch(i){r=String(i&&i.message||i)}if(!t.length){let i=Ps.bundledRegistryPath();if(i&&i!==o)try{let a=await Ps.readRegistryRaw({registry:i});a.ok&&a.registry&&(t=a.registry.entries||[],e=a.keys||{},n=i,s=!0)}catch(a){k("market_offline_read_failed",{message:a.message})}}return{entries:t,keys:e,source:n,offline:s,error:r}}function Th(t){ts&&B_().then(function(e){try{ts.postMessage(e)}catch(n){k("market_push_failed",{message:n.message,reason:t||"push"})}},function(e){k("market_payload_failed",{message:String(e&&e.message||e),reason:t||"push"})})}function Mh(){let t;try{t=xe.status()}catch{t={servers:[],tools:[],configPaths:[],configErrors:[]}}let e;try{e=xe.configListing()}catch(u){k("mcp_listing_failed",{message:String(u&&u.message||u)}),e={paths:[],servers:[]}}let n=new Map;for(let u of t.servers)n.set(u.name,u);let s=e.servers.map(function(u){let d=n.get(u.name);return Object.assign({},u,d?{state:d.state,tools:d.tools,error:d.error,stderrTail:d.stderrTail}:{})});for(let u of t.servers)s.some(function(d){return d.name===u.name})||s.push({name:u.name,enabled:!0,state:u.state,tools:u.tools,error:u.error,stderrTail:u.stderrTail,defs:[],disabledIn:[],disabledBy:"",source:u.source||"",command:"",args:[],timeoutMs:0,planAllow:[]});let r=x.workspace.workspaceFolders,o=R(),i="",a="";try{i=xe.configPathFor("global")}catch{i=""}if(r&&r.length)try{xe.configure({root:o}),a=xe.configPathFor("project")}catch{a=""}let l=0,c=0;try{l=xe.toolDefs({}).length}catch{l=0}try{c=xe.toolDefs({planOnly:!0}).length}catch{c=0}return{type:"mcp",root:o,globalPath:i,projectPath:a,configPaths:t.configPaths,configErrors:t.configErrors,paths:e.paths,servers:s,tools:t.tools,agentTools:l,planTools:c}}function sS(t){if(ts)try{ts.postMessage(Mh())}catch(e){k("mcp_push_failed",{message:String(e&&e.message||e),reason:t||"push"})}}async function gL(t,e){let n=String(e.name||"").trim(),s=function(w){try{t.postMessage(Object.assign({type:"market_result",action:"install"},w))}catch(T){k("market_reply_failed",{message:T.message})}};if(!n){s({ok:!1,code:"bad-arg",message:"\u7F3A\u5C11\u63D2\u4EF6\u540D"});return}let r=null,o=!1,i=process.env.LUBAN_REGISTRY||Ps.DEFAULT_REGISTRY_URL;try{let w=await Ps.readRegistryRaw({registry:i,timeoutMs:$_});w.ok&&(r=w)}catch(w){k("market_install_read_failed",{message:String(w&&w.message||w)})}if(!r){let w=Ps.bundledRegistryPath();if(w&&w!==i)try{let T=await Ps.readRegistryRaw({registry:w});T.ok&&(r=T,o=!0)}catch(T){k("market_install_offline_failed",{message:String(T&&T.message||T)})}}if(!r){s({ok:!1,code:"registry",message:O("ext.marketRegistryFailed")});return}let l=(r.registry&&r.registry.entries||[]).find(function(w){return w&&w.name===n});if(!l){s({ok:!1,code:"not-found",message:O("ext.marketNotFound",{name:n})});return}let c=hS.verifyEntry(l,r.keys||{});if(!c.ok){s({ok:!1,code:"untrusted",message:O("ext.marketUntrusted",{name:n,reason:c.reason})});return}let u=l.review&&l.review.status||"pending";if(u==="revoked"){s({ok:!1,code:"revoked",message:O("ext.marketRevoked",{name:n})});return}if(u==="flagged"){s({ok:!1,code:"flagged",message:O("ext.marketFlagged",{name:n})});return}let d=q_.filter(function(w){return(l.permissions||{})[w]===!0}),f=(l.tools||[]).map(function(w){return w.name}),p=d.length?d.map(function(w){return"\xB7 "+O(fL[w])}).join(`
|
|
1123
1123
|
`):O("market.permNone"),h=O("ext.marketConfirm",{name:l.displayName||n,version:l.version||"",perms:p,tools:f.length?f.join("\u3001"):O("market.noTools"),repo:l.repo||"",review:u})+(e.replace===!0?`
|
|
1124
1124
|
|
|
1125
|
-
`+O("market.replaceConfirm",{name:l.displayName||n}):"");if(await x.window.showWarningMessage(h,{modal:!0},O("ext.marketInstallYes"))!==O("ext.marketInstallYes")){s({ok:!1,code:"cancelled",cancelled:!0});return}let y=await
|
|
1126
|
-
`).map(function(r){return r.trim()}).filter(Boolean);return s.length?{ok:!1,reason:"dirty",files:s.length}:{ok:!0}}function V_(){let t=
|
|
1125
|
+
`+O("market.replaceConfirm",{name:l.displayName||n}):"");if(await x.window.showWarningMessage(h,{modal:!0},O("ext.marketInstallYes"))!==O("ext.marketInstallYes")){s({ok:!1,code:"cancelled",cancelled:!0});return}let y=await Ps.installEntry(l,{root:R(),replace:e.replace===!0,target:"global"});if(k("market_install",{name:n,ok:y.ok,code:y.code||"",offline:o}),!y.ok){s({ok:!1,code:y.code||"install",message:y.message||"",name:n});return}s({ok:!0,code:"installed",name:n,version:y.version||"",dir:y.dir||"",replaced:y.replaced===!0,tools:y.tools||[],warnings:y.warnings||[],needsTrust:l.type!=="skill"}),await Ko("market_install"),Th("after_market_install")}async function Ko(t){try{await Ge.reload({keepDisabled:!0})}catch(e){k("plugins_reload_failed",{message:e.message,action:t})}Yc("after_"+(t||"change")),zh();try{let e=Ge.status();x.window.setStatusBarMessage(O("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}}function Zc(t,e){let n=om(e);if(kh=n,At){At.reveal();try{At.webview.postMessage({type:"activate",tab:n})}catch{}return At}let s=x.window.createWebviewPanel("luban.hub",O("ext.hubPanelTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[io(t.extensionUri)]});s.webview.html=dL(s.webview,t.extensionUri,n),At=s;let r=R_(s.webview,t);return s.onDidDispose(function(){At=null,ts===s.webview&&(ts=null),r.dispose(),k("hub_disposed",{ok:!0})}),k("hub_opened",{ok:!0,tab:n}),s}function pm(t){return Zc(t,"settings")}function U_(t){return Zc(t,"usage")}function yL(){if(At)try{At.webview.postMessage(va(Un))}catch(t){k("usage_dashboard_push_failed",{message:String(t&&t.message||t)})}}var wL=D.join(lt.homedir(),".luban","sessions"),be=null,ge=new Map,Ee="",Ot=new Map,ms=new Map,kr=0,ot=new Map,Cn=new Map,we=[],hm="",Qc=!1;function je(){return Ee&&ge.get(Ee)||null}function oo(t){if(t){let e=Ot.get(t);if(e){let n=ge.get(e);if(n)return n}}return je()}function bL(t,e){let n=e&&ge.has(String(e))?String(e):"";Ot.forEach(function(s,r){s===t&&(n?Ot.set(r,n):Ot.delete(r))})}function W_(t,e){if(bL(t,e),Ee!==t)return;let n=[Te&&Te.webview,ye&&ye.webview];for(let r=0;r<n.length;r++){let o=n[r];if(!o)continue;let i=Ot.get(o);if(i&&ge.has(i)){Ee=i;return}}if(e&&ge.has(String(e))){Ee=String(e);return}let s=we.filter(function(r){return r!==t&&ge.has(r)});Ee=s.length?s[s.length-1]:""}function K_(t){let e=we.filter(function(n){return n!==t&&ge.has(n)});return e.length?e[e.length-1]:""}function ni(t){let e=String(t??"");return e&&ge.has(e)?ge.get(e):null}function qn(t,e){let n=t&&t.sessionId?String(t.sessionId):"";return n?ni(n):oo(e)}function H_(){let t=je();if(t)return t;let e=st().create(R());return ge.set(e.id,e),ms.set(e.id,++kr),Ee=e.id,we.indexOf(e.id)<0&&we.push(e.id),e}function G_(){let t=Qn.DEFAULT_MAX_SESSIONS;try{t=x.workspace.getConfiguration("luban").get("sessionHistory.max")}catch{}let e=Number(t);return isFinite(e)&&e>=1?Math.floor(e):Qn.DEFAULT_MAX_SESSIONS}function Qr(){let t=Object.assign({},eo.DEFAULTS);try{let e=x.workspace.getConfiguration("luban"),n=e.get("sessionMemory.enabled");n!=null&&(t.enabled=!!n);let s=Number(e.get("sessionMemory.maxTurns"));isFinite(s)&&s>=1&&(t.maxTurns=Math.floor(s));let r=Number(e.get("sessionMemory.maxChars"));isFinite(r)&&r>=1e3&&(t.maxChars=Math.floor(r))}catch{}return t}function eu(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("plan.strictReadOnly")}catch{}return t!==!1}function js(t,e){return t==="explore"?!0:t==="plan"&&e!==!1}function rS(t){return"\u547D\u4EE4\u88AB\u62D2\u7EDD\uFF1A"+(t.command||"\u547D\u4EE4")+" \u5728\u8DF3\u8FC7\u76EE\u5F55 "+t.seg+" \u91CC\u7FFB\u6587\u4EF6\uFF08node_modules / dist / target \u7B49\u751F\u6210\u76EE\u5F55\u3001npm-cache / .m2 \u7B49\u5B89\u88C5\u7F13\u5B58\uFF09\u3002\u8FD9\u7C7B\u76EE\u5F55\u91CC\u6CA1\u6709\u9879\u76EE\u7684\u6E90\u7801\uFF0C\u627E\u4EE3\u7801\u8BF7\u7528 read_file / grep / search_code \u5728\u5DE5\u4F5C\u533A\u91CC\u67E5\uFF1B\u786E\u5B9E\u9700\u8981\u8BFB\u8FD9\u4E9B\u76EE\u5F55\u91CC\u7684\u6587\u4EF6\uFF0C\u8BF7\u8BA9\u7528\u6237\u76F4\u63A5\u5728\u7EC8\u7AEF\u91CC\u6267\u884C\u3002"}function Ch(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("fs.allowOutsideWorkspace")}catch{}return t!==!1}function tu(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("review.autoOpenDiff")}catch{}return t!==!1}function z_(){let t=!1;try{t=x.workspace.getConfiguration("luban").get("review.autoKeep")}catch{}return t===!0}function mm(t){let e=t||R(),n="";try{n=String(fS("git status --porcelain",{cwd:e,timeout:4e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]})||"")}catch{return{ok:!1,reason:"not-git"}}let s=n.split(`
|
|
1126
|
+
`).map(function(r){return r.trim()}).filter(Boolean);return s.length?{ok:!1,reason:"dirty",files:s.length}:{ok:!0}}function V_(){let t=fr.DEFAULTS.maxFiles;try{t=x.workspace.getConfiguration("luban").get("search.maxFiles")}catch{}let e=Number(t);return isFinite(e)&&e>=100?Math.floor(e):fr.DEFAULTS.maxFiles}var nu=new Map;function su(t){return t?{put:function(e,n,s){return t.put(e,n,s)},summarize:_n.summarize,newId:_n.newId,toolPlaceholder:_n.toolPlaceholder,memoryDigestBlock:_n.memoryDigestBlock}:null}function J_(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=nu.get(n);return s||(s=_n.createStore(),nu.set(n,s)),s}function kL(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=nu.get(n);if(s)try{s.clear()}catch{}nu.delete(n)}function Cs(t,e,n){let s=Qr();if(!s.enabled)return{messages:[],turns:0,chars:0,dropped:0,enabled:!1,spilledTurns:0,spillDigest:"",spillIds:[]};let r=mt(e),o=r&&r.model?Number(r.model.maxInputTokens):0;if(isFinite(o)&&o>0){s.maxChars=Math.min(s.maxChars,Math.max(2e3,Math.floor(o*.4)));let a=bn.profile(o,{mode:sm()});a.compact&&(s.maxTurns=Math.min(s.maxTurns,a.memoryTurns),s.maxChars=Math.min(s.maxChars,a.memoryChars))}let i=Object.assign({},n||{});if(i.spill===void 0){let a=i.spillStore||null;i.spill=a?su(a):{summarize:_n.summarize,newId:_n.newId,memoryDigestBlock:_n.memoryDigestBlock}}return delete i.spillStore,eo.build(t,Object.assign(s,i))}function st(){return be||(be=Qn.newStore(wL),be.setMax(G_())),be}function pu(t){let e=t||je();return e?e.title||Qn.titleOf(e.items,e.createdAt,O("store.untitled")):""}function xL(t){return(t||[]).map(function(e){if(!e||e.ctx==null)return e;let n=Object.assign({},e);return delete n.ctx,n})}var Ah=20,oS=8e3,iS=0;function gm(){return iS++,"q"+Date.now().toString(36)+"-"+iS.toString(36)}function hu(t){if(!t||typeof t!="object")return null;let e=String(t.text==null?"":t.text).trim();if(!e)return null;let n=(Array.isArray(t.images)?t.images:[]).map(_e.validateEntry).filter(Boolean).slice(0,_e.MAX_IMAGES);return{id:t.id?String(t.id):gm(),text:e.length>oS?e.slice(0,oS):e,web:!!t.web,mode:t.mode==="plan"||t.mode==="chat"?t.mode:"agent",modelKey:String(t.modelKey==null?"":t.modelKey),thinking:t.thinking==="on"||t.thinking==="off"?t.thinking:"",verbosity:t.verbosity==="concise"||t.verbosity==="normal"||t.verbosity==="detailed"?t.verbosity:"",autoKeep:t.autoKeep===!0?!0:t.autoKeep===!1?!1:void 0,at:Number(t.at)||Date.now(),echoed:!!t.echoed,uid:t.uid?String(t.uid):void 0,images:n.length?n:void 0}}function On(t){let e=t||je();if(!e)return[];if(Array.isArray(e.queue)||(e.queue=[]),e.queue.length){let n=[];for(let s of e.queue){let r=hu(s);r&&n.push(r)}n.length!==e.queue.length&&(e.queue=n)}return e.queue}function X_(t){let e=t||je();return!!(e&&e.queuePaused&&On(e).length)}function ym(t){if(!t)return t;if(!Array.isArray(t.queue))t.queue=[];else{let e=[];for(let n of t.queue){let s=hu(n);s&&e.push(s)}t.queue=e}return t.queuePaused=!!t.queuePaused&&t.queue.length>0,t}function Y_(t){let e=t||je();return{type:"queue",id:e?e.id:"",items:On(e).slice(),paused:X_(e),max:Ah,at:Date.now()}}function ps(t){let e=t||je();e&&Re(Y_(e))}function aS(t,e){let n=t||H_(),s=On(n);if(s.length>=Ah)return{ok:!1,error:O("ext.queueFull",{n:Ah})};let r=hu({id:gm(),text:e&&e.prompt,web:!!(e&&(e.webSearch||e.web)),mode:e&&e.mode,modelKey:e&&e.modelKey,thinking:e&&e.thinking,verbosity:e&&e.verbosity,autoKeep:e&&e.autoKeep,at:Date.now(),echoed:!!(e&&e.echoed),uid:e&&e.uid?String(e.uid):void 0,images:vm(n,e&&e.images,e&&e.modelKey)});return r?(s.push(r),n.queuePaused=!1,xt(n),ps(n),k("queue_add",{id:n.id,size:s.length,mode:r.mode,web:r.web,images:(r.images||[]).length}),{ok:!0,item:r,size:s.length}):{ok:!1,error:O("ext.queueEmpty")}}function vL(t,e){let n=t||je();if(!n)return{ok:!1,size:0};let s=On(n),r=s.findIndex(function(o){return o.id===String(e||"")});return r<0?{ok:!1,size:s.length}:(s.splice(r,1),s.length||(n.queuePaused=!1),xt(n),ps(n),k("queue_remove",{id:n.id,size:s.length,removed:String(e||"")}),{ok:!0,size:s.length})}function SL(t){let e=t||je();if(!e)return{ok:!0,size:0};let n=On(e).length;return e.queue=[],e.queuePaused=!1,xt(e),ps(e),k("queue_clear",{id:e.id,removed:n}),{ok:!0,size:0,removed:n}}function lS(t){let e=t||je();return!e||!On(e).length?!1:(e.queuePaused=!0,!0)}function _L(t,e){let n=t||je();if(!n)return null;let s=On(n),r=s.findIndex(function(o){return o.id===String(e||"")});if(r<0)return null;if(r>0){let o=s.splice(r,1)[0];s.unshift(o)}return s[0]}function TL(t,e,n,s){let r=t||je();if(!r)return{ok:!1,error:O("ext.queueMissing")};let o=_L(r,e);return o?(r.queuePaused=!1,xt(r),ps(r),k("queue_run_now",{id:r.id,itemId:o.id,size:On(r).length}),ot.has(r.id)?(ru(r.id),{ok:!0,deferred:!0,item:o}):(xm(r,n,s||"queue_run_now"),{ok:!0,deferred:!1,item:o})):{ok:!1,error:O("ext.queueMissing")}}function wm(t){let e=t||H_();return ym(e),{type:"session",id:e.id,title:pu(e),createdAt:e.createdAt,updatedAt:e.updatedAt,root:e.root,modelKey:e.modelKey||"",mode:e.mode||"",items:xL(e.items),queue:On(e).slice(),queuePaused:X_(e),running:ot.has(e.id),at:Date.now()}}function Sn(){st();let t=be.list(),e=new Set(t.map(function(s){return s.id})),n=[];for(let s of ge.values()){if(e.has(s.id))continue;let r=Qn.metaOf(s);r.title=pu(s)||r.title,n.push(r)}return{type:"session_list",current:Ee||"",root:R(),sessions:n.concat(t),at:Date.now()}}function Z_(t,e,n,s){st();let r=String(t??"").trim(),o=e==="all"?"all":"workspace",i=qI.search(r?be.list(o,n||R()):[],r,{load:function(a){try{return st().load(a)}catch{return null}}});return k("session_search",{q:r,scope:o,scanned:i.scanned,matched:i.matched,truncated:i.truncated,ms:i.ms,terms:i.terms.length}),{type:"session_search",seq:Number(s)||0,q:r,scope:o,root:n||R(),results:i.results,scanned:i.scanned,matched:i.matched,truncated:i.truncated,ms:i.ms}}function xt(t){let e=t||je();if(e){let n=Cn.get(e.id);n&&(clearTimeout(n),Cn.delete(e.id))}if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return st().save(e),e}catch(n){return k("session_save_failed",{message:n.message,id:e.id}),null}}function ML(t){let e=t||je();if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return st().saveAsync(e),e}catch(n){return k("session_save_failed",{message:n.message,id:e.id}),null}}function bm(t){let e=t||je();if(!e)return;let n=Cn.get(e.id);n&&clearTimeout(n),Cn.set(e.id,setTimeout(function(){if(Cn.delete(e.id),!!ML(e))try{Re(Sn())}catch{}},1500))}function Dt(t,e){let n=e||je();return n?(st().append(n,t),bm(n),n):null}function Oh(t,e,n){return!t||t.t!=="user"?null:(t.ctx=String(e??""),bm(n),t)}function km(t){let e=t||je();if(!e)return null;let n=e.items||[];return n.length?n[n.length-1]:null}function CL(t,e){if(!(!t||!t.type))if(t.type==="tool"){if(t.phase==="start")return;Dt({t:"tool",name:t.name,path:t.path,ok:t.ok,result:t.result},e)}else if(t.type==="todos")Dt({t:"todos",items:t.items||[]},e);else if(t.type==="ask_question")t.answers&&Dt({t:"ask_question",id:t.id,title:t.title||"",questions:t.questions||[],answers:t.answers},e);else if(t.type==="sources")Dt({t:"sources",items:t.items,query:t.query},e);else if(t.type==="references")Dt({t:"refs",refs:t.refs},e);else if(t.type==="done"){let n=Array.isArray(t.rounds)?t.rounds:null;if(n&&n.length){for(let r of n){if(!r||!r.text&&!r.think)continue;let o={t:t.kind==="plan"&&!r.narr?"plan":"text",text:r.text||""};r.think&&(o.think=r.think),r.narr&&(o.narr=!0),Dt(o,e)}let s=km(e);s&&s.t==="plan"&&(t.planFile&&(s.planFile=t.planFile),Array.isArray(t.todos)&&t.todos.length&&(s.todos=t.todos))}else if(t.text||t.think){let s={t:t.kind==="plan"?"plan":"text",text:t.text||""};t.think&&(s.think=t.think),t.kind==="plan"&&t.planFile&&(s.planFile=t.planFile),t.kind==="plan"&&Array.isArray(t.todos)&&t.todos.length&&(s.todos=t.todos),Dt(s,e)}t.usage&&Dt(Object.assign({t:"usage"},t.usage),e),t.summary&&Dt({t:"summary",text:t.summary},e)}else t.type==="error"&&Dt({t:"error",message:t.message},e)}var Pc=D.join(lt.homedir(),".luban","plans"),cS=200*1024,AL=32;function wa(t){return(t<10?"0":"")+t}function OL(t){let e=t||new Date;return e.getFullYear()+wa(e.getMonth()+1)+wa(e.getDate())+"-"+wa(e.getHours())+wa(e.getMinutes())+wa(e.getSeconds())}function Q_(t){return String(t??"").replace(/[\\/:*?"<>|\u0000-\u001f]+/g," ").replace(/[:/\*?“”"<>|]/g," ").replace(/\s+/g," ").trim().slice(0,AL).trim()||"plan"}function ba(t,e){return t+": "+JSON.stringify(String(e??""))}function EL(t,e){let n=e||{},s=String(t??"").replace(/\s+$/,"")+`
|
|
1127
1127
|
`;return["---",ba("title",Q_(n.prompt)),ba("created",new Date().toISOString()),ba("workspace",n.workspace||""),ba("model",n.modelKey||""),ba("session",n.session||""),"---",""].join(`
|
|
1128
1128
|
`)+s}function PL(t){let e=String(t??""),n=e.split(`
|
|
1129
1129
|
`);if(String(n[0]).trim()!=="---")return e;for(let s=1;s<n.length;s++)if(String(n[s]).trim()==="---")return n.slice(s+1).join(`
|
|
1130
|
-
`).replace(/^\n+/,"");return e}function jL(){return[Pc].concat(
|
|
1130
|
+
`).replace(/^\n+/,"");return e}function jL(){return[Pc].concat(yr.roots(lt.homedir(),R()))}function eT(t){let e=String(t??"");if(!e||!/\.md$/i.test(e))return!1;let n=D.resolve(e),s=jL();for(let r=0;r<s.length;r++){let o=D.relative(s[r],n);if(o&&!o.startsWith("..")&&!D.isAbsolute(o))return!0}return!1}function tT(t,e){let n=e||{};try{I.mkdirSync(Pc,{recursive:!0,mode:448});let s=OL()+"-"+Q_(n.prompt),r=D.join(Pc,s+".md");for(let i=2;I.existsSync(r)&&i<1e3;i++)r=D.join(Pc,s+"-"+i+".md");let o=r+".tmp";return I.writeFileSync(o,EL(t,n),{mode:384}),I.renameSync(o,r),k("plan_file_write",{file:r,chars:String(t||"").length}),r}catch(s){return k("plan_file_write_failed",{message:s.message}),""}}function IL(t){if(!eT(t))return k("plan_file_read_rejected",{path:String(t??""),reason:"\u8DEF\u5F84\u4E0D\u5728\u8BA1\u5212\u76EE\u5F55\u4E0B\u6216\u4E0D\u662F .md"}),"";try{let e=I.statSync(t);return e.isFile()?e.size>cS?(k("plan_file_read_rejected",{path:t,reason:"\u8D85\u8FC7 "+cS+" \u5B57\u8282"}),""):PL(I.readFileSync(t,"utf8")):(k("plan_file_read_rejected",{path:t,reason:"\u4E0D\u662F\u6587\u4EF6"}),"")}catch(e){return k("plan_file_read_rejected",{path:t,reason:e.message}),""}}async function nT(t){if(!eT(t))throw new Error(O("ext.notPlanFile",{path:String(t??"")}));let e=await x.workspace.openTextDocument(x.Uri.file(D.resolve(t)));return await x.window.showTextDocument(e,{preview:!1}),!0}function sT(t,e,n,s){try{let r="";try{r=R()||""}catch{r=""}Tn.startTurn({source:"extension",sessionId:e&&e.id?String(e.id):"",model:String(n||""),workspace:r,mode:String(s||""),task:String(t??"").slice(0,80)})}catch{}}function rT(t){try{Tn.progress(t)}catch{}}function oT(t){try{Tn.round(t)}catch{}}function iT(t){if(typeof t=="function")return function(e){let n=e||{};t({type:"subprogress",description:String(n.description==null?"":n.description),line:String(n.line==null?"":n.line),running:n.running!==!1,ok:n.ok!==!1})}}function NL(t,e){return function(n){if(ms.get(e.id)!==t||!ge.has(e.id))return;CL(n,e),n.sid=e.id;try{Tn.applyMessage(n,{source:"extension",sessionId:e.id})}catch{}let s=[Te&&Te.webview,ye&&ye.webview];for(let r of s)if(r)try{r.postMessage(n)}catch{}}}function mu(t,e,n){let s=n||je();s&&(t&&(s.modelKey=String(t)),e&&(s.mode=String(e)))}function ru(t){let e=String(t??""),n=ot.get(e);try{let s=ke.stopAll(e);s&&s.stopped&&k("async_cmd_stop_all",{sessionId:e,stopped:s.stopped,reason:"cancel"})}catch{}if(!n)return!1;try{n.cts.cancel()}catch{}try{Tn.get().sessionId===e&&Tn.update({state:"idle",text:"\u5DF2\u505C\u6B62",tool:null})}catch{}return LL(e,"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),!0}var Zn=new Map,FL=0;function LL(t,e){let n=String(t??""),s="ask_question \u5DF2\u53D6\u6D88\uFF1A"+(e||"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),r=[];Zn.forEach(function(o,i){(!n||o.sessId===n)&&r.push(i)});for(let o=0;o<r.length;o++){let i=r[o],a=Zn.get(i);if(a){Zn.delete(i);try{a.reject(new Error(s))}catch{}}}}function DL(t){let e=String(t&&t.title||"").trim();if(e)return e.slice(0,80);let n=t&&t.questions&&t.questions[0];return(String(n&&n.prompt||"").trim()||"ask_question").slice(0,80)}function RL(t){let e=DL(t),n=O("ext.askGoChoose");Promise.resolve(x.window.showInformationMessage(O("ext.askNeeded",{detail:e}),n)).then(function(s){if(s===n){try{Te&&Te.reveal()}catch{}return x.commands.executeCommand("luban.focusView")}}).catch(function(){})}function aT(t,e,n){let s=t&&t.id?String(t.id):"";return async function(o){let i="ask_"+ ++FL+"_"+Date.now().toString(36),a={type:"ask_question",id:i,title:o.title||"",questions:o.questions};if(typeof e=="function")try{e(a)}catch{}return RL(o),await new Promise(function(l,c){let u={sessId:s,normalized:o,resolve:l,reject:c,emitDone:typeof e=="function"?e:null,onAbort:null};Zn.set(i,u);let d=function(){Zn.has(i)&&(Zn.delete(i),c(new Error("ask_question \u5DF2\u53D6\u6D88\uFF1A\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E")))};u.onAbort=d;try{if(n){if(n.isCancellationRequested){d();return}typeof n.onCancellationRequested=="function"&&n.onCancellationRequested(d)}}catch{}})}}function lT(t,e,n){let s=String(t??""),r=Zn.get(s);if(!r)return{ok:!1,error:"\u6CA1\u6709\u7B49\u5F85\u4E2D\u7684\u63D0\u95EE"};if(n&&r.sessId&&r.sessId!==String(n))return{ok:!1,error:"\u4F1A\u8BDD\u4E0D\u5339\u914D"};let o;try{o=Ms.normalizeAnswers(r.normalized,e)}catch(a){return{ok:!1,error:a.message}}Zn.delete(s);let i=Ms.formatAnswers(r.normalized,o);try{r.emitDone&&r.emitDone({type:"ask_question",id:s,title:r.normalized.title||"",questions:r.normalized.questions,answers:o})}catch{}try{r.resolve(i)}catch{}return{ok:!0,text:i}}async function Ma(t,e,n,s){let r=qn(e,n);if(!r||ot.has(r.id))return!1;let o=new x.CancellationTokenSource,i=ms.get(r.id)||0,a={cts:o,seq:i,sess:r};ot.set(r.id,a);let l=NL(i,r),c=Date.now(),u={last:null,done:null},d=function(h){return h&&h.usage&&(h.type==="usage_live"?u.last=h.usage:h.type==="done"&&(u.done=h.usage)),l(h)},f={modelKey:e&&e.modelKey||oi(),mode:t==="execute_plan"?"execute":e&&e.mode||"agent",source:s,session:r.id},p={emit:d,cts:o,sess:r,t0:c,source:s,webview:n};try{t==="execute_plan"?await $L(e,p):await qL(e,p)}catch(h){if(l({type:"error",message:h.message}),!ge.has(r.id))try{I.existsSync(st().fileOf(r.id))&&(st().append(r,{t:"error",message:O("ext.cancelled")}),st().save(r))}catch{}k("webview_error",{source:s,message:h.message})}finally{ot.get(r.id)===a&&ot.delete(r.id),o.dispose(),u.done?wh(f,u.done):u.last&&wh(f,Object.assign({},u.last,{partial:!0})),ge.get(r.id)===r&&(xt(r),Re({type:"turn_end",id:r.id}),xm(r,n,s==="queue"?"queue":s))}return!0}function xm(t,e,n){let s=t||je();if(!s||ot.has(s.id))return!1;let r=On(s);if(!r.length||s.queuePaused)return ps(s),!1;let o=r.shift();xt(s),ps(s);let i=e||tn()||vt;return Re({type:"queue_start",id:s.id,item:o}),k("queue_start",{id:s.id,size:r.length,mode:o.mode,web:o.web}),Ma("ask",{prompt:o.text,webSearch:o.web,mode:o.mode,modelKey:o.modelKey,sessionId:s.id,thinking:o.thinking,verbosity:o.verbosity,autoKeep:o.autoKeep,uid:o.uid,images:o.images||[]},i,"queue"),!0}function cT(t,e,n){let s={items:sn.normalize(n||[])};t&&(t.planTodos=s.items);let r=function(o){let i=sn.normalize(o);s.items=i,t&&(t.planTodos=i),e&&e({type:"todos",items:i})};return{state:s,onTodos:r,seedEmit:function(){s.items.length&&r(s.items)}}}async function $L(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=!!t.autoAccept;mu(t.modelKey,"agent",i),sT(t.plan?String(t.plan).slice(0,80):"\u6267\u884C\u8BA1\u5212",i,t.modelKey,"agent");let l=J_(i),c=Cs(i&&i.items||[],t.modelKey,{resolveImage:As(i),spillStore:l});k("session_memory",{source:r,mode:"execute_plan",turns:c.turns,chars:c.chars,dropped:c.dropped,enabled:c.enabled,spilledTurns:c.spilledTurns||0}),xt(i);let u=t.planFile?IL(t.planFile):"",d=u||String(t.plan||"");if(!d.trim())throw new Error(O("ext.noPlan"));k("plan_file_read",{file:t.planFile||"",chars:d.length,edited:!!u&&u.trim()!==String(t.plan||"").trim(),autoAccept:a});let f=null;for(let S=c.messages.length-1;S>=0;S--)if(c.messages[S].role==="assistant"){f=c.messages[S];break}let p=!!(f&&d.trim()&&f.content.trim()===d.trim()),h=t.planFile?yr.todosOfFile(t.planFile):[];h.length||(h=sn.parsePlanSteps(d)),h=sn.normalize(h);let m=cT(i,n,h),y=h.length?`
|
|
1131
1131
|
|
|
1132
1132
|
`+sn.formatBlock(h)+`
|
|
1133
1133
|
\u8BF7\u7528 todo_write \u8DDF\u8E2A\u8FDB\u5EA6\uFF1A\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A in_progress\uFF1B\u5B8C\u6210\u4E00\u9879\u518D\u6807\u4E0B\u4E00\u9879\uFF1B\u5168\u90E8\u5B8C\u6210\u540E\u518D\u6536\u5C3E\u6C47\u62A5\u3002`:`
|
|
1134
1134
|
|
|
1135
1135
|
\u8BF7\u5148\u7528 todo_write \u6309\u8BA1\u5212\u6B65\u9AA4\u5EFA\u4E00\u4EFD\u6E05\u5355\uFF0C\u518D\u9010\u9879\u5B8C\u6210\uFF08\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A in_progress\uFF09\u3002`,w=(p?"\u6309\u4E0A\u4E00\u6761\u8BA1\u5212\u6267\u884C\uFF0C\u9010\u6761\u843D\u5B9E\u5E76\u7528\u5DE5\u5177\u9A8C\u8BC1\u3002":`\u6309\u4E0B\u9762\u8FD9\u4EFD\u8BA1\u5212\u6267\u884C\uFF0C\u9010\u6761\u843D\u5B9E\u5E76\u7528\u5DE5\u5177\u9A8C\u8BC1\uFF1A
|
|
1136
1136
|
|
|
1137
|
-
`+d)+y,T=O(a?"cross.execPlanAccept":"cross.execPlan");Lt({t:"user",text:T,ctx:w,exec:!0},i);let g=km(i);xt(i),m.seedEmit();let v=aT(i,n,s.token);a&&sF();let b;try{b=await Is(w,{root:R(),modelKey:t.modelKey,mode:"agent",thinking:t.thinking,verbosity:t.verbosity,history:c.messages,spillDigest:c.spillDigest||"",spillStore:l,sessionId:i&&i.id?i.id:"",token:s.token,todosState:m.state,onTodos:m.onTodos,askWait:v,onToken:S=>n({type:"token",text:S}),onReasoning:S=>n({type:"reasoning",text:S}),onSplit:S=>n({type:"think_split",text:S}),onRefs:S=>n({type:"references",refs:S}),onUserTurn:function(S){Oh(g,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:iT(n),onProgress:rT,onRound:oT,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))})}finally{a&&rF()}n({type:"done",text:b.text,think:b.reasoning||void 0,kind:"agent",usage:b.usage,rounds:v_(b),summary:O("ext.summary.exec",{n:b.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+k_(b.stop)}),k("webview_execute_plan_done",{toolCalls:b.log.length,iters:b.iters,chars:b.text.length,todos:(m.state.items||[]).length,autoAccept:a})}function Cs(t){let e=t&&t.id?String(t.id):"";return function(n){return e?_e.readDataUrl(e,n):""}}function vm(t,e,n){let s=t&&t.id?String(t.id):"";if(!s||!Array.isArray(e)||!e.length)return[];let r=mt(n);if(!(r&&r.model&&r.model.vision===!0))return[];let o=[];for(let i of e.slice(0,_e.MAX_IMAGES)){if(!i||typeof i!="object")continue;let a=i.dataUrl?_e.saveImage(s,i.dataUrl):_e.validateEntry(i);a&&o.push(a)}return o}async function qL(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=PS(t.prompt),l=!!(t.webSearch||a.web),c=a.prompt||(l?"\u8BF7\u8054\u7F51\u641C\u7D22\u5F53\u524D\u6700\u65B0\u4FE1\u606F\u5E76\u603B\u7ED3":""),u=vm(i,t.images,t.modelKey),d=Array.isArray(t.images)?t.images.filter(Boolean).length:0;u.length?k("ask_images",{source:r,n:u.length,bytes:u.reduce(function(S,_){return S+_.bytes},0)}):d&&(n({type:"img_blocked",n:d}),k("ask_images_blocked",{source:r,model:t.modelKey,n:d})),mu(t.modelKey,t.mode||"agent",i),sT(c,i,t.modelKey,t.mode||"agent");let f=J_(i),p=Ms(i&&i.items||[],t.modelKey,{resolveImage:Cs(i),spillStore:f});k("session_memory",{source:r,mode:t.mode||"agent",turns:p.turns,chars:p.chars,dropped:p.dropped,enabled:p.enabled,spilledTurns:p.spilledTurns||0}),Lt({t:"user",text:c,web:l,uid:t.uid?String(t.uid):void 0,images:u.length?u:void 0},i);let h=km(i);if(xt(i),t.mode==="chat"){let S=yh(mt(t.modelKey)),_=to(c,R(),{window:S});_.refs.length&&n({type:"references",refs:_.refs});let C=Bh(_.refs,R(),void 0,{sessionId:i&&i.id}),A=null;l&&(n({type:"searching",query:c.slice(0,128)}),A=await jS(c,mt(t.modelKey),{signal:s.token,onSearch:function(P){n({type:"sources",items:Cv(P.results),query:P.query})}}),n({type:"tool",name:"web_search",path:A.query.slice(0,60),ok:A.results.length>0,result:A.results.length+" \u6761\u7ED3\u679C"}),k("webview_chat_web",{source:r,query:A.query,results:A.results.length}));let F=Os.buildUserTurn({rule:l?FF:"",spillBlock:p.spillDigest||"",webBlock:A?A.block:"",autoBlock:C,refText:_.text});Oh(h,F,i);let B=u.map(function(P){return _e.readDataUrl(i.id,P)}),H=[{role:"system",content:NF}].concat(p.messages,[{role:"user",content:_e.toContent(F,B)}]),$=await ti(H,t.modelKey,{onToken:P=>n({type:"token",text:P}),onReasoning:P=>n({type:"reasoning",text:P}),onSplit:P=>n({type:"think_split",text:P}),thinking:t.thinking,signal:s.token}),J=Ka([Qh($,H,Oe.DEFAULTS.ratio)],yh($.target),$.target.model.id);n({type:"usage_live",usage:J}),n({type:"done",text:$.content,think:$.reasoning||void 0,summary:O("ext.summary.chat",{model:$.target.model.id}),usage:J}),k("webview_chat_done",{source:r,chars:$.content.length,model:$.target.key,refs:_.refs.length,usage:J});return}let m=t.mode==="plan",y=m?null:cT(i,n,[]),w=aT(i,n,s.token),T=!1;if(!m&&(t.autoKeep===!0||t.autoKeep===void 0&&z_())){let _=mm();_.ok?(T=!0,k("review_auto_keep",{source:r,session:i&&i.id})):(k("review_auto_keep_refused",{source:r,reason:_.reason,files:_.files||0}),n({type:"auto_keep",on:!1,reason:_.reason,files:_.files||0}))}let g=await Is(t.prompt,{root:R(),modelKey:t.modelKey,mode:m?"plan":"agent",webSearch:l,thinking:t.thinking,verbosity:t.verbosity,autoKeep:T,history:p.messages,spillDigest:p.spillDigest||"",spillStore:f,sessionId:i&&i.id?i.id:"",token:s.token,todosState:y?y.state:void 0,onTodos:y?y.onTodos:void 0,askWait:w,onToken:S=>n({type:"token",text:S}),onReasoning:S=>n({type:"reasoning",text:S}),onSplit:S=>n({type:"think_split",text:S}),onRefs:S=>n({type:"references",refs:S}),onSearch:function(S){n({type:"sources",items:Cv(S.results),query:S.query})},images:u.map(function(S){return _e.readDataUrl(i.id,S)}),onUserTurn:function(S){Oh(h,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:iT(n),onProgress:rT,onRound:oT,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))}),v="",b=[];if(m&&(v=tT(g.text,{prompt:t.prompt,workspace:R(),modelKey:t.modelKey,session:i?i.id:""}),b=sn.parsePlanSteps(g.text)),n({type:"done",text:g.text,think:g.reasoning||void 0,kind:m?"plan":"agent",usage:g.usage,planFile:v||void 0,todos:m&&b.length?b:void 0,rounds:v_(g),summary:O(m?"ext.summary.plan":"ext.summary.done",{n:g.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+k_(g.stop)}),k("webview_"+(m?"plan":"agent")+"_done",{source:r,toolCalls:g.log.length,iters:g.iters,chars:g.text.length,usage:g.usage,todos:m?b.length:void 0}),m&&(i&&i.id&&Ga.set(i.id,{text:g.text,file:v}),k("plan_ready",{chars:g.text.length,tools:g.log.map(function(S){return S.name}),file:v,todos:b.length}),v))try{await nT(v)}catch(S){k("plan_file_open_failed",{file:v,message:S.message})}}async function ft(){if(Te||ye)return!0;try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}return await new Promise(function(t){setTimeout(t,700)}),!!vt}async function ro(t,e){let n=st().create(R());ge.set(n.id,n),hs.set(n.id,++br),Ee=n.id;let s=e||tn()||vt;return s&&Ot.set(s,n.id),we.indexOf(n.id)<0&&we.push(n.id),N=null,ri(n,s),Re(Sn()),k("session_new",{reason:t||"",id:n.id,tabs:we.length,review:de.size}),n}function lh(t,e,n){let s=Array.isArray(t)?t:[],r=String(e??"");if(r)for(let i=s.length-1;i>=0;i--){let a=s[i];if(a&&a.t==="user"&&!a.exec&&String(a.uid||"")===r)return i}let o=Number(n);if(isFinite(o)&&o>=0){let i=0;for(let a=0;a<s.length;a++){let l=s[a];if(!(!l||l.t!=="user"||l.exec)){if(i===Math.floor(o))return a;i++}}}return-1}function uT(t,e){let n=Array.isArray(t)?t:[];if(!isFinite(e)||e<0||e>=n.length)return null;let s=n[e];if(!s||s.t!=="user"||s.exec)return null;let r=n.length;for(let o=e+1;o<n.length;o++){let i=n[o];if(i&&i.t==="user"&&!i.exec){r=o;break}}return{start:e,end:r,removed:r-e}}function ou(t,e,n,s){if(!(t&&t.items||[]).length)return{ok:!1,error:O("ext.forkEmpty")};let o=Qn.forkSession(t,{at:e??null,title:pu(t),suffix:O("ext.forkSuffix")});ge.set(o.id,o),hs.set(o.id,++br),Ee=o.id;let i=n||tn()||vt;i&&Ot.set(i,o.id),we.indexOf(o.id)<0&&we.push(o.id),N=null;try{let a=_e.copySession(t.id,o.id);(a.copied||a.failed)&&k("session_fork_attachments",{from:t.id,to:o.id,copied:a.copied,failed:a.failed})}catch(a){k("session_fork_attachments_failed",{from:t.id,to:o.id,message:a.message})}try{st().save(o)}catch(a){k("session_save_failed",{message:a.message,id:o.id})}return ri(o,i),Re(Sn()),k("session_fork",{from:t.id,id:o.id,at:e??-1,items:o.items.length,source:s||"",tabs:we.length}),{ok:!0,id:o.id,from:t.id,items:o.items.length,at:e??-1}}async function BL(t,e,n,s){let r=String(t||""),o=ni(r);if(!o)try{o=st().load(r)}catch{o=null}if(!o){let c=O("ext.noSuchSession",{id:r});try{x.window.showErrorMessage(c)}catch{}return k("session_fork_failed",{id:r,reason:"missing"}),{ok:!1,error:c}}if(ot.has(o.id)){let c=O("ext.forkBusy");try{x.window.showWarningMessage(c)}catch{}return k("session_fork_failed",{id:o.id,reason:"busy"}),{ok:!1,error:c,busy:!0}}let i=o.items||[];if(!i.length){let c=O("ext.forkEmpty");try{x.window.showWarningMessage(c)}catch{}return k("session_fork_failed",{id:o.id,reason:"empty"}),{ok:!1,error:c}}if(s)return ou(o,null,e,n||"fork_whole");let a=[{label:O("ext.forkWhole"),description:O("ext.forkWholeDesc",{n:i.length}),at:null}];for(let c of Qn.forkPoints(i))a.push({label:Pa(c.text),description:O("ext.forkFromDesc",{n:c.rest}),at:c.index});let l=null;try{l=await x.window.showQuickPick(a,{title:O("ext.forkPickTitle"),placeHolder:O("ext.forkPickPlaceholder"),matchOnDescription:!0,ignoreFocusOut:!0})}catch(c){return k("session_fork_failed",{id:o.id,reason:"pick_error",message:c.message}),{ok:!1,error:c.message}}return l?ou(o,l.at,e,n):(k("session_fork_cancel",{id:o.id}),{ok:!1,canceled:!0})}function UL(t){let e=Math.max(0,Date.now()-(Number(t)||0));return e<60*1e3?O("panel.relJustNow"):e<60*60*1e3?O("panel.relMinutes",{n:Math.floor(e/6e4)}):e<24*60*60*1e3?O("panel.relHours",{n:Math.floor(e/36e5)}):O("panel.relDays",{n:Math.floor(e/864e5)})}async function WL(){let t=gr.listPlans({home:lt.homedir(),root:R()});if(!t.length){x.window.showInformationMessage(O("ext.cursorPlanNone",{dir:gr.homePlanDir(lt.homedir())}));return}let e=t.map(function(s){return{label:s.name||s.base,description:UL(s.mtimeMs)+" \xB7 "+qS(s.size),detail:s.overview?Pa(s.overview):s.file,file:s.file}}),n=await x.window.showQuickPick(e,{placeHolder:O("ext.cursorPlanPick"),matchOnDescription:!0,matchOnDetail:!0,ignoreFocusOut:!0});n&&await dT(n.file)}async function dT(t){let e=gr.readPlan(t);if(!e.ok){let i=e.code==="too_big"?O("ext.cursorPlanBig",{n:Math.round(gr.MAX_BYTES/1024)}):O("ext.cursorPlanReadFail",{msg:e.error});return x.window.showErrorMessage(i),k("cursor_plan_read_failed",{file:t,code:e.code||"",error:e.error||""}),{ok:!1,error:i}}if(!String(e.body||"").trim())return x.window.showErrorMessage(O("ext.noPlan")),k("cursor_plan_read_failed",{file:t,code:"empty"}),{ok:!1,error:O("ext.noPlan")};await ft();let n=await HL(6e3);if(n&&Te&&n===Te.webview)try{Te.reveal()}catch{}else if(n&&ye&&n===ye.webview&&ye.visible!==!0)try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}if(!await GL(n,1e4))return x.window.showErrorMessage(O("ext.cursorPlanNoPanel")),k("cursor_plan_no_panel",{webview:!!n}),{ok:!1,error:O("ext.cursorPlanNoPanel")};let r=oo(n);(!r||(r.items||[]).length||On(r).length||ot.has(r.id))&&(r=await ro("cursor_plan",n));let o=sn.normalize(e.todos||[]);return Lt({t:"plan",text:e.body,planFile:t,todos:o.length?o:void 0},r),xt(r),ri(r,null),Re(Sn()),n.postMessage({type:"execute_plan",plan:e.body,planFile:t,sessionId:r.id}),k("cursor_plan_execute",{file:t,chars:e.body.length,todos:o.length,session:r.id}),{ok:!0,session:r.id,file:t,chars:e.body.length,todos:o.length}}async function Yr(t,e){let n=ge.get(String(t||"")),s=!0;if(!n){if(s=!1,n=st().load(t),!n)return k("session_open_failed",{id:t}),{ok:!1,error:O("ext.noSuchSession",{id:t})};n=ym(n),ge.set(n.id,n),hs.set(n.id,++br)}Ee=n.id;let r=e||tn()||vt;return r&&Ot.set(r,n.id),we.indexOf(n.id)<0&&we.push(n.id),N=null,ri(n,r),Re(Sn()),k("session_open",{id:n.id,items:(n.items||[]).length,queue:(n.queue||[]).length,cached:s,tabs:we.length}),{ok:!0,id:n.id,items:(n.items||[]).length}}async function ir(t){st();let e=String(t||""),n=Ee===e;if(ge.get(e)){ru(e),ot.delete(e),hs.set(e,++br);let r=Cn.get(e);r&&(clearTimeout(r),Cn.delete(e));let o=K_(e);ge.delete(e),W_(e,o)}Ga.delete(e),be.remove(e);try{let r=_e.removeSession(e);k("attachments_remove",{id:e,removed:r.removed})}catch(r){k("attachments_remove_failed",{id:e,message:r.message})}kL(e),kN(e);try{await uu(e,"delete")}catch(r){k("browser_close_failed",{message:r.message})}$c.delete(e),$c.delete(e);try{let r=ke.clearSession(e);r&&r.stopped&&k("async_cmd_stop_all",{sessionId:e,stopped:r.stopped,reason:"delete"})}catch{}return we=we.filter(function(r){return r!==e}),Re({type:"session_deleted",id:e}),Re(Sn()),k("session_delete",{id:e,wasCurrent:n,tabs:we.length}),{ok:!0,current:Ee||"",sessions:be.list()}}var fT="luban.openTabs";function Sm(t){let e=require("crypto").createHash("sha1").update(String(t||"")).digest("hex").slice(0,16);return fT+"."+e}function Na(t){try{if(!t||!t.globalState)return;let e=R(),n=t.globalState.update(Sm(e),{root:e,ids:we.slice(),active:Ee||"",at:new Date().toISOString()});n&&n.catch&&n.catch(function(){})}catch{}}function KL(t,e){let n=t&&t.globalState;if(!n)return null;let s=null;try{s=n.get(Sm(e))}catch{s=null}if(s&&Array.isArray(s.ids)&&(s.root==null||String(s.root)===String(e)))return s;try{let r=n.get(fT);return r&&Array.isArray(r.ids)?r:null}catch{return null}}function _m(t){st();let e=R(),n=KL(t,e),s=n&&Array.isArray(n.ids)?n.ids.map(String):[],r=[],o=function(a){!a||r.indexOf(a.id)>=0||Vo(a)&&(ge.has(a.id)||(ge.set(a.id,ym(a)),hs.set(a.id,++br)),r.push(a.id))};for(let a of s){if(!/^[A-Za-z0-9_-]+$/.test(a))continue;let l=ge.get(a);if(!l)try{l=be.load(a)}catch{l=null}l&&o(l)}if(!r.length){let a=[];try{a=be.list("workspace",e)}catch{a=[]}let l=a.find(function(c){return(c.items||0)>0})||a[0];if(l){let c=null;try{c=be.load(l.id)}catch{c=null}o(c)}}if(!r.length){let a=be.create(e);ge.set(a.id,a),hs.set(a.id,++br),r.push(a.id),k("session_created",{id:a.id})}we=r,hm=e;let i=n&&n.active?String(n.active):"";Ee=r.indexOf(i)>=0?i:r[r.length-1],k("session_restored",{root:e,tabs:r.length,active:Ee,items:((ge.get(Ee)||{}).items||[]).length})}function pT(t){try{_m(t)}catch(n){k("session_restore_failed",{message:n.message,reason:"workspace_change"})}Ot.clear(),Re({type:"tabs_reset"});let e=[];for(let n of we){let s=ge.get(n);if(!s||!Vo(s))continue;e.push(n);let r=wm(s);r.boot=!0,Re(r)}Re({type:"open_tabs",ids:e,active:Ee}),Re(Sn()),Na(t),k("tabs_workspace_switch",{root:R(),tabs:e.length,active:Ee})}async function Ae(t,e){let n=Date.now()+(t||8e3);for(;Date.now()<n;){if(N&&e(N))return N;await new Promise(function(s){setTimeout(s,150)})}return N&&e(N)?N:null}var Te=null,ye=null,N=null,vt=null,Eh=new WeakSet,Fa=new WeakMap,si=new WeakMap;function tn(){let t=ye&&ye.webview,e=Te&&Te.webview;return t&&ye.visible===!0?t:e||(vt&&(vt===t||vt===e)?vt:t||null)}function De(t){return t==="panel"?Te?Te.webview:null:t==="view"?ye?ye.webview:null:tn()||vt}async function HL(t){let e=Date.now()+(Number(t)>0?Number(t):6e3);for(;;){let n=tn();if(n)return n;if(Date.now()>=e)return null;await new Promise(function(s){setTimeout(s,100)})}}function GL(t,e){let n=t;return n?Eh.has(n)?Promise.resolve(!0):new Promise(function(s){let r=Date.now()+(Number(e)>0?Number(e):8e3),o=setInterval(function(){if(Eh.has(n)){clearInterval(o),s(!0);return}Date.now()>=r&&(clearInterval(o),s(!1))},100)}):Promise.resolve(!1)}var Ga=new Map;function hT(t,e){let n=io(e),s=t.asWebviewUri(x.Uri.joinPath(n,"panel.css")),r=t.asWebviewUri(x.Uri.joinPath(n,"panel.js")),o=t.asWebviewUri(x.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(x.Uri.joinPath(n,"avatar.js")),a=t.asWebviewUri(x.Uri.joinPath(n,"i18n.js")),l=I.readFileSync(x.Uri.joinPath(n,"panel.html").fsPath,"utf8"),c=Math.random().toString(36).slice(2)+Date.now().toString(36);return l.replace(/{{cspSource}}/g,t.cspSource).replace(/{{cssUri}}/g,String(s)).replace(/{{themeStyle}}/g,Gh()).replace(/{{jsUri}}/g,String(r)).replace(/{{mdUri}}/g,String(o)).replace(/{{avatarUri}}/g,String(i)).replace(/{{i18nUri}}/g,String(a)).replace(/{{lang}}/g,rn||Va()).replace(/{{nonce}}/g,c)}var zL=2*1024*1024,VL={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".ico":"image/x-icon"};function JL(t){if(!t)return!1;if(t.languageId==="markdown")return!0;let e=String(t.uri&&t.uri.fsPath||"").toLowerCase();return/\.(md|markdown|mdown|mkd)$/.test(e)}var La=null,Yo=null,Da=!1;function XL(t,e){let n=io(e),s=t.asWebviewUri(x.Uri.joinPath(n,"preview.css")),r=t.asWebviewUri(x.Uri.joinPath(n,"preview.js")),o=t.asWebviewUri(x.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(x.Uri.joinPath(n,"code-highlight.js")),a=t.asWebviewUri(x.Uri.joinPath(n,"i18n.js")),l=I.readFileSync(x.Uri.joinPath(n,"preview.html").fsPath,"utf8"),c=Math.random().toString(36).slice(2)+Date.now().toString(36);return l.replace(/{{cspSource}}/g,t.cspSource).replace(/{{cssUri}}/g,String(s)).replace(/{{jsUri}}/g,String(r)).replace(/{{mdUri}}/g,String(o)).replace(/{{hlUri}}/g,String(i)).replace(/{{i18nUri}}/g,String(a)).replace(/{{title}}/g,O("ext.mdPreviewTitle")).replace(/{{path}}/g,"").replace(/{{lang}}/g,rn||Va()).replace(/{{nonce}}/g,c)}function iu(){return{type:"models",current:oi(),models:es().map(t=>({key:t.key,label:t.provider.name+" \xB7 "+t.model.name,vision:t.model.vision===!0,thinking:wF(t.model)}))}}function Re(t){let e=[Te&&Te.webview,ye&&ye.webview];for(let n of e)if(n)try{n.postMessage(t)}catch(s){k("broadcast_failed",{message:s.message})}}function mT(t){let e=t&&typeof t=="object"?t:{};return{state:typeof e.state=="string"&&e.state?e.state:"idle",mood:typeof e.mood=="string"&&e.mood?e.mood:"idle",text:String(e.text==null?"":e.text),task:String(e.task==null?"":e.task),mode:String(e.mode==null?"":e.mode),round:Number(e.round)||0,tools:Number(e.tools)||0,errors:Number(e.errors)||0,since:Number(e.since)||0}}var ur=null,uS="";function YL(){ur||(ur=setTimeout(function(){ur=null;let t;try{t=mT(Tn.get())}catch{return}let e=t.state+"|"+t.mood+"|"+t.text;e!==uS&&(uS=e,Re({type:"status",status:t}))},200),ur.unref&&ur.unref())}function ri(t,e,n){let s=[Te&&Te.webview,ye&&ye.webview];for(let r of s){if(!r)continue;let o=Object.assign(wm(t),n||{},{yank:r===e});try{r.postMessage(o)}catch(i){k("broadcast_failed",{message:i.message})}}}async function gT(t,e){let n=String(t||"");if(!/^https?:\/\//i.test(n))return!1;try{return await x.env.openExternal(x.Uri.parse(n)),k("webview_open_link",{source:e,url:n.slice(0,200)}),!0}catch(s){return k("webview_open_link_failed",{url:n.slice(0,200),message:s.message}),!1}}function Tm(t,e,n){return vt=t,t.onDidReceiveMessage(async r=>{if(!(!r||!r.type)){if(vt=t,Eh.add(t),r.type==="chat_focus"){Fa.set(t,r.focused===!0);return}if(r.type==="sidebar_maximized"){let o=si.get(t)===!0;si.set(t,r.maximized===!0),k("sidebar_maximized_report",{maximized:r.maximized===!0,was:o,widths:r.widths||null}),o&&r.maximized!==!0&&ye&&ye.webview===t&&t_();return}if(r.type==="ready"){t.postMessage({type:"lang",lang:rn}),t.postMessage(iu()),t.postMessage(qa());try{t.postMessage({type:"status",status:mT(Tn.get())})}catch(a){k("status_push_failed",{message:a.message})}let o=[];for(let a of we){let l=ge.get(a);if(!l||!Vo(l))continue;o.push(a);let c=wm(l);c.boot=!0,t.postMessage(c)}t.postMessage({type:"open_tabs",ids:o,active:Ot.get(t)||Ee}),t.postMessage(Sn());let i=oo(t);i&&t.postMessage(Y_(i)),Qc&&(Qc=!1,t.postMessage({type:"toggle_session_list"})),k("webview_ready",{source:n,tabs:o.length});return}if(r.type==="lang_applied"){N=Object.assign({at:Date.now(),source:n,kind:"lang_applied",n:0},r),k("webview_lang_applied",{source:n,lang:r.lang}),JI(r.lang);return}if(r.type==="new_session"){await ro(r.from||n,t);return}if(r.type==="open_session"){let o=await Yr(String(r.id||""),t);if(!o.ok)try{t.postMessage({type:"error",message:o.error})}catch{}return}if(r.type==="list_sessions"){t.postMessage(Sn());return}if(r.type==="search_sessions"){t.postMessage(Z_(r.q,r.scope,r.root,r.seq));return}if(r.type==="delete_session"){await ir(String(r.id||""));return}if(r.type==="fork_session"){await BL(String(r.id||""),t,n,!!r.whole);return}if(r.type==="fork_message"){let o=String(r.sessionId||""),i=o?ni(o):oo(t);if(!i&&o)try{i=st().load(o)}catch{i=null}let a=i?i.id:o,l=function(d){try{t.postMessage({type:"fork_error",sid:a,message:d})}catch{}k("session_fork_failed",{id:a,reason:"fork_message",message:d})};if(!i){l(O("ext.noSuchSession",{id:a}));return}if(ot.has(i.id)){l(O("ext.forkBusy"));return}let c=lh(i.items||[],r.uid?String(r.uid):"",Number(r.ordinal));if(c<0){l(O("ext.forkMissing"));return}let u=ou(i,c,t,"fork_message");u.ok||l(u.error||O("ext.forkEmpty"));return}if(r.type==="save_session_meta"){let o=ni(r.id);o&&(mu(r.modelKey,r.mode,o),bm(o));return}if(r.type==="tab_active"){let o=String(r.id||"");ge.has(o)&&(Ee=o,Ot.set(t,o),we.indexOf(o)<0&&we.push(o),Na(e));return}if(r.type==="tab_close"){let o=String(r.id||""),i=ge.get(o),a=K_(o);if(i){lS(i),ru(o),ot.delete(o),xt(i);let l=Cn.get(o);l&&(clearTimeout(l),Cn.delete(o)),hs.set(o,++br),ge.delete(o),W_(o,a)}Ga.delete(o),we=we.filter(function(l){return l!==o}),Na(e),Re({type:"tab_removed",id:o}),Re(Sn()),k("tab_closed",{id:o,tabs:we.length});return}if(r.type==="tabs_changed"){let o=(Array.isArray(r.ids)?r.ids.map(String):[]).filter(function(c){return ge.has(c)&&Vo(ge.get(c))}),i=we.filter(function(c){return o.indexOf(c)<0&&ge.has(c)&&Vo(ge.get(c))});we=o.concat(i);let a=String(r.active||""),l=a&&ge.has(a)?a:we.indexOf(Ee)<0?we.length?we[we.length-1]:"":Ee;Ee=l,l?Ot.set(t,l):Ot.delete(t),Na(e);return}if(r.type==="ack_rendered"){N=Object.assign({at:Date.now(),source:n},r),k("webview_ack",Object.assign({source:n},r));return}if(r.type==="avatar_shown"){k("avatar_shown",{source:n,state:r.state,mood:r.mood,n:r.n});return}if(r.type==="setModel"){Vt.defaultModel=r.modelKey,k("webview_set_model",{modelKey:r.modelKey});return}if(r.type==="listFiles"){try{let o=await Uh();t.postMessage({type:"fileList",files:o.files,dirs:o.dirs})}catch(o){t.postMessage({type:"fileList",files:[],dirs:[],error:o.message}),k("webview_list_files_failed",{message:o.message})}return}if(r.type==="getSelection"){t.postMessage(Object.assign({type:"selectionInfo"},DS()));return}if(r.type==="openLink"){await gT(r.url,n);return}if(r.type==="open_settings"){pm(e),k("webview_open_settings",{source:n});return}if(r.type==="stop"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"stop",id:String(r.sessionId||"")});return}lS(o)&&(xt(o),fs(o),k("queue_paused",{id:o.id,size:On(o).length})),ru(o.id);return}if(r.type==="answer_question"){let o=qn(r,t),i=o?o.id:String(r.sessionId||""),a=lT(r.id,r.answers,i);if(a.ok)k("ask_answered",{id:r.id,sess:i});else{try{t.postMessage({type:"ask_question_error",sid:i||void 0,id:r.id,message:a.error||"\u7B54\u9898\u5931\u8D25"})}catch{}k("ask_answer_failed",{id:r.id,error:a.error})}return}if(r.type==="review_action"){let o;try{o=await Ba(r.action,r.path,r.hunk||"",r.sessionId)}catch(i){o={ok:!1,error:i.message}}try{t.postMessage(qa())}catch{}k("review_action",{source:n,action:r.action,path:r.path,hunk:r.hunk||"",ok:!!o.ok,error:o.error,files:de.size,hunks:ls()});return}if(r.type==="img_preview"){let o=String(r.sessionId||""),i=String(r.file||""),a=_e.readPreview(o,i);try{t.postMessage({type:"img_preview",ok:!!a.ok,sessionId:o,file:i,dataUrl:a.dataUrl||"",mime:a.mime||""})}catch{}k("img_preview",{source:n,ok:!!a.ok,error:a.error||"",file:i.slice(0,60)});return}if(r.type==="copy_text"){let o=String(r.text||""),i=!0;try{await x.env.clipboard.writeText(o)}catch{i=!1}try{t.postMessage({type:"copy_done",ok:i,n:o.length})}catch{}k("copy_text",{source:n,n:o.length,ok:i});return}if(r.type==="open_plan_file"){try{await nT(r.path),k("plan_file_opened",{source:n,path:r.path,ok:!0})}catch(o){k("plan_file_opened",{source:n,path:r.path,ok:!1,error:o.message})}return}if(r.type==="execute_plan"){let o=qn(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:O("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(ot.has(o.id)){k("webview_busy",{prompt:"execute_plan",session:o.id});try{t.postMessage({type:"error",sid:o.id,message:O("ext.sessionBusy")})}catch{}return}await Ma("execute_plan",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="auto_keep_check"){let o=mm();k("review_auto_keep_check",{ok:o.ok,reason:o.reason||"",files:o.files||0});try{t.postMessage({type:"auto_keep",probe:!0,on:o.ok,reason:o.reason||"",files:o.files||0})}catch{}return}if(r.type==="ask"){let o=qn(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:O("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(ot.has(o.id)){aS(o,Object.assign({},r,{echoed:!0}));return}await Ma("ask",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="edit_message"){let o=qn(r,t),i=!!r.resend,a=function(y,w){try{t.postMessage({type:"edit_error",sid:o?o.id:String(r.sessionId||""),message:O(y,w)})}catch{}};if(!o){a("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(ot.has(o.id)){a("ext.editBusy");return}let l=String(r.text==null?"":r.text).trim();if(!l){a("ext.editEmpty");return}let c=o.items||[],u=r.uid?String(r.uid):"",d=Number(r.ordinal),f=lh(c,u,d);if(f<0){a("ext.editMissing");return}let p=c[f]||{},h={t:"user",text:l,web:!!p.web};u&&(h.uid=u),Array.isArray(p.images)&&p.images.length&&(h.images=p.images);let m=c.length-(f+1);i?c.length=f:(c[f]=Qn.clampItem(h),c.length=f+1),f===0&&(o.title=""),xt(o),ri(o,null,{keepScroll:!0}),Re(Sn()),Re({type:"edit_done",sid:o.id,removed:m,resend:i}),k("session_edit",{source:n,id:o.id,removed:m,uid:u,ordinal:d,resend:i}),i&&(Re({type:"queue_start",id:o.id,item:{text:l,web:!!p.web,uid:u,images:p.images||[],mode:r.mode,modelKey:r.modelKey}}),await Ma("ask",{prompt:l,webSearch:!!p.web,mode:r.mode,modelKey:r.modelKey,sessionId:o.id,thinking:r.thinking,verbosity:r.verbosity,uid:u,images:p.images||[]},t,n));return}if(r.type==="delete_turn"){let o=qn(r,t),i=function(f,p){try{t.postMessage({type:"turn_delete_error",sid:o?o.id:String(r.sessionId||""),message:O(f,p)})}catch{}};if(!o){i("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(ot.has(o.id)){i("ext.deleteBusy");return}let a=o.items||[],l=r.uid?String(r.uid):"",c=Number(r.ordinal),u=lh(a,l,c);if(u<0){i("ext.deleteMissing");return}let d=uT(a,u);if(!d){i("ext.deleteMissing");return}a.splice(d.start,d.removed),d.start===0&&(o.title=""),xt(o),ri(o,null,{keepScroll:!0}),Re(Sn()),Re({type:"turn_deleted",sid:o.id,removed:d.removed}),k("session_turn_deleted",{source:n,id:o.id,removed:d.removed,uid:l,ordinal:c});return}if(r.type==="queue_add"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_add",id:String(r.sessionId||"")});return}if(!ot.has(o.id)){let a=hu({id:gm(),text:r.prompt,web:r.webSearch,mode:r.mode,modelKey:r.modelKey,thinking:r.thinking,verbosity:r.verbosity,autoKeep:r.autoKeep,at:Date.now(),uid:r.uid,images:vm(o,r.images,r.modelKey)});if(!a)return;Re({type:"queue_start",id:o.id,item:a}),fs(o),await Ma("ask",{prompt:a.text,webSearch:a.web,mode:a.mode,modelKey:a.modelKey,sessionId:o.id,thinking:a.thinking,verbosity:a.verbosity,autoKeep:a.autoKeep,uid:a.uid,images:a.images||[]},t,n);return}let i=aS(o,r);if(!i.ok)try{t.postMessage({type:"queue_error",id:o.id,message:i.error})}catch{}return}if(r.type==="queue_remove"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_remove",id:String(r.sessionId||"")});return}vL(o,r.id);return}if(r.type==="queue_clear"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_clear",id:String(r.sessionId||"")});return}SL(o);return}if(r.type==="queue_resume"){let o=qn(r,t);if(!o)return;o.queuePaused=!1,xt(o),fs(o),k("queue_resume",{id:o.id,size:On(o).length}),ot.has(o.id)||xm(o,t,n);return}if(r.type==="queue_run_now"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_run_now",id:String(r.sessionId||"")});try{t.postMessage({type:"queue_error",id:"",message:O("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}let i=TL(o,r.id,t,n);if(!i.ok)try{t.postMessage({type:"queue_error",id:o.id,message:i.error||O("ext.queueMissing")})}catch{}return}}})}function Ph(t){if(Te)return Te.reveal(),Te;let e=x.window.createWebviewPanel("luban","Luban",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[io(t.extensionUri)]});e.webview.html=hT(e.webview,t.extensionUri),Te=e;let n=Tm(e.webview,t,"panel");return e.onDidDispose(()=>{Te=null,vt===e.webview&&(vt=null),Ot.delete(e.webview),n.dispose(),k("panel_disposed",{ok:!0})}),k("panel_opened",{ok:!0}),e}function ZL(t){let e={resolveWebviewView(n){ye=n,n.webview.options={enableScripts:!0,localResourceRoots:[io(t.extensionUri)]},n.webview.html=hT(n.webview,t.extensionUri),Tm(n.webview,t,"view"),n.onDidDispose(()=>{vt===n.webview&&(vt=null),Ot.delete(n.webview),ye=null}),k("view_resolved",{ok:!0})}};try{let n=x.window.registerWebviewViewProvider("luban.chatView",e,{webviewOptions:{retainContextWhenHidden:!0}});return k("view_provider_registered",{ok:!0}),n}catch(n){return k("view_provider_failed",{message:n.message}),{dispose:function(){}}}}var As={busy:!1,stamps:[],enabled:!1,last:""};function gu(){let t={enabled:!1,maxPerMinute:30,debounceMs:250};try{let e=x.workspace.getConfiguration("luban"),n=e.get("inlineCompletion.enabled");n!=null&&(t.enabled=!!n);let s=Number(e.get("inlineCompletion.maxPerMinute"));isFinite(s)&&s>=1&&(t.maxPerMinute=Math.floor(s));let r=Number(e.get("inlineCompletion.debounceMs"));isFinite(r)&&r>=0&&(t.debounceMs=Math.floor(r))}catch{}return t}function Ca(t){return new Promise(function(e){setTimeout(e,Math.max(0,Number(t)||0))})}function dS(t){let e=Date.now();return As.stamps=As.stamps.filter(function(n){return e-n<6e4}),As.stamps.length<t}async function QL(t,e,n,s){let r=gu();if(!r.enabled)return[];let o=function(i){return k("inline_completion",{skipped:i,chars:0}),[]};try{if(!t||!t.uri||t.uri.scheme!=="file")return o("scheme");if(!e)return o("no-position");if(e.line===0&&e.character===0)return o("file-start");let i=t.getText();if(i.length>1024*1024)return o("too-large");let a=mt(oi());if(!a||!Lc(a.provider))return o("provider-unsupported");if(As.busy)return o("busy");if(!dS(r.maxPerMinute))return o("rate-limit");if(await Ca(r.debounceMs),s&&s.isCancellationRequested)return o("cancelled");if(!dS(r.maxPerMinute))return o("rate-limit");As.busy=!0,As.stamps.push(Date.now());let l=Date.now(),c;try{c=await MS({modelKey:a.key,path:Yn(t.uri.fsPath,R()),text:i,offset:t.offsetAt(e),signal:s})}catch(u){return k("inline_completion",{ms:Date.now()-l,chars:0,error:String(u&&u.message||u).slice(0,160)}),[]}finally{As.busy=!1}return As.last=c.text||"",k("inline_completion",{ms:Date.now()-l,chars:(c.text||"").length,model:c.model,promptChars:c.promptChars,suffixChars:c.suffixChars,timeout:!1}),c.text?typeof x.InlineCompletionItem!="function"?[]:[new x.InlineCompletionItem(c.text,new x.Range(e,e))]:[]}catch(i){return As.busy=!1,k("inline_completion_failed",{message:String(i&&i.message||i).slice(0,160)}),[]}}function e2(t){if(!x.languages||typeof x.languages.registerInlineCompletionItemProvider!="function"){k("inline_provider_unsupported",{ok:!1});return}try{let e={provideInlineCompletionItems:QL};t.subscriptions.push(x.languages.registerInlineCompletionItemProvider({pattern:"**"},e)),k("inline_provider_registered",{enabled:gu().enabled})}catch(e){k("inline_provider_failed",{message:String(e&&e.message||e).slice(0,160)})}}async function t2(){let e=!gu().enabled;try{await x.workspace.getConfiguration("luban").update("inlineCompletion.enabled",e,x.ConfigurationTarget.Global),k("inline_toggle",{enabled:e});try{x.window.showInformationMessage(O(e?"ext.inlineOn":"ext.inlineOff"))}catch{}}catch(n){k("inline_toggle_failed",{message:String(n&&n.message||n).slice(0,160)})}return e}var n2="luban";function yT(t){return mS.register({vscode:x,context:t,vendor:n2,rec:k,version:ds,allModels:es,resolveModel:mt,streamChat:ti})}function s2(t){Nc("activate"),gh("activate"),au(),k("activate",{at:new Date().toISOString(),root:R(),configSource:Zo,models:es().length});try{Tn.autoServe()}catch(g){k("status_serve_failed",{message:g.message})}try{Tn.update({source:"extension",workspace:R()||"",text:"\u7A7A\u95F2"})}catch{}Gt.configure({root:R(),rec:k});try{Gt.refresh(R())}catch(g){k("skills_scan_failed",{message:g.message})}Rc("activate"),Sa(R()),xe.configure({root:R(),version:ds,rec:k}),xe.start().then(function(g){k("mcp_start_done",{servers:g.servers.length,tools:g.tools.length})},function(g){k("mcp_start_failed",{message:g.message})}),am(t).then(function(g){k("secrets_ready",{keys:g}),lm()}),Oa(x.window.activeTextEditor),t.subscriptions.push(x.window.onDidChangeActiveTextEditor(Oa)),t.subscriptions.push(x.window.onDidChangeTextEditorSelection(function(g){Oa(g.textEditor)}));try{_m(t)}catch(g){k("session_restore_failed",{message:g.message})}try{let g=new Set(we.slice());for(let b of ge.values())g.add(b.id);for(let b of be.list())g.add(b.id);let v=_e.sweepOrphans(g);v.removed&&k("attachments_sweep",v)}catch(g){k("attachments_sweep_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.openPanel",()=>Ph(t))),yT(t);try{let g=UI.mount({vscode:x,status:Tn,tr:O,rec:k});g&&t.subscriptions.push(g)}catch(g){k("statusbar_mount_failed",{message:g.message})}try{let g=Tn.subscribe(function(){YL()});t.subscriptions.push({dispose:function(){try{g()}catch{}}})}catch(g){k("status_push_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.providerSettings",()=>pm(t))),t.subscriptions.push(x.commands.registerCommand("luban.plugins",()=>Zc(t,"plugins"))),t.subscriptions.push(x.commands.registerCommand("luban.market",()=>Zc(t,"market"))),t.subscriptions.push(x.commands.registerCommand("luban.dashboard",()=>U_(t))),t.subscriptions.push(x.commands.registerCommand("luban.rules.open",async()=>{try{let g=R()||lt.homedir(),v=D.join(g,".luban","rules"),b=D.join(v,"default.md"),S=!1;I.existsSync(b)||(I.mkdirSync(v,{recursive:!0}),I.writeFileSync(b,qN,"utf8"),S=!0,Sa(g));let _=await x.workspace.openTextDocument(x.Uri.file(b));await x.window.showTextDocument(_,{preview:!1}),x.window.setStatusBarMessage(O(S?"ext.rulesCreated":"ext.rulesOpened",{file:b}),4e3)}catch(g){k("rules_open_failed",{message:g.message}),x.window.showErrorMessage(O("ext.rulesFailed",{msg:g.message}))}})),t.subscriptions.push(x.commands.registerCommand("luban.openInBrowser",async g=>{let v=Array.isArray(g)?g[0]:g;await gT(v&&typeof v=="object"?v.linkUrl:"","context")})),t.subscriptions.push(x.commands.registerCommand("luban.browserCheck",async()=>{let g=yr(),v=kt.findChrome(g.chromePath);if(!v.path){x.window.showErrorMessage(O("ext.browserNotFound",{paths:v.tried.slice(0,4).map(function(b){return" "+b}).join(`
|
|
1138
|
-
`)}));return}await x.window.withProgress({location:x.ProgressLocation.Notification,title:O("ext.browserCheckRunning"),cancellable:!1},async function(){let b=null;try{b=await kt.launch({exe:g.chromePath,headless:g.headless,width:g.width,height:g.height}),await b.navigate("data:text/html,<title>Luban</title><h1>Luban browser check</h1>");let S=await b.snapshot(1200),_=await b.screenshot({});k("browser_check",{ok:!0,exe:b.exe,snapChars:S.length,shotChars:_.length}),x.window.showInformationMessage(O("ext.browserCheckOk",{exe:v.path,chars:String(Math.round(_.length/1024))}))}catch(S){k("browser_check",{ok:!1,message:String(S&&S.message||S)}),x.window.showErrorMessage(O("ext.browserCheckFailed",{message:String(S&&S.message||S)}))}finally{if(b)try{await b.close()}catch{}}})}));let e=null,n=null,s=null;function r(){s&&(clearInterval(s),s=null)}function o(g){r(),s=setInterval(async function(){if(!e||e!==g){r();return}if(g.visible!==!1)try{let v=await VS(n),b=await v.screenshot({});e===g&&g.webview.postMessage({type:"shot",dataUrl:b,url:v.shortUrl(),title:v.title})}catch(v){e===g&&g.webview.postMessage({type:"err",message:String(v&&v.message||v)})}},1e3)}t.subscriptions.push(x.commands.registerCommand("luban.browserPreview",async()=>{let g=yr();if(!g.enabled){x.window.showWarningMessage(O("ext.browserPreviewDisabled"));return}if(!g.preview){x.window.showWarningMessage(O("ext.browserPreviewOff"));return}let v=String(Ee||"_default");if(e){if(n===v){e.reveal();return}e.dispose()}n=v;let b=x.window.createWebviewPanel("luban.browserPreview","Luban \u6D4F\u89C8\u5668\u9884\u89C8",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0});e=b,b.webview.html='<!DOCTYPE html><html><head><meta charset="utf-8"><style>body{margin:0;background:#1e1e1e;color:#ccc;font:12px sans-serif;display:flex;flex-direction:column;height:100vh}#bar{padding:4px 8px;background:#252526;border-bottom:1px solid #333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wrap{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center}img{max-width:100%;height:auto}</style></head><body><div id="bar">\u7B49\u5F85\u6D4F\u89C8\u5668\u622A\u56FE\u2026</div><div id="wrap"><img id="shot" alt="browser preview"/></div><script>window.addEventListener("message",function(e){var m=e.data;if(!m)return;if(m.type==="shot"){document.getElementById("shot").src=m.dataUrl;document.getElementById("bar").textContent=(m.title?m.title+" \u2014 ":"")+(m.url||"");}else if(m.type==="err"){document.getElementById("bar").textContent="\u9884\u89C8\u6682\u4E0D\u53EF\u7528\uFF1A"+m.message;}});</script></body></html>',k("browser_preview_open",{sessionId:v}),o(b),b.onDidDispose(function(){e===b&&(e=null,n=null),r(),k("browser_preview_close",{sessionId:v})}),b.onDidChangeViewState(function(S){S.webviewPanel.visible?o(b):r()})})),ph=function(g){if(e&&n===String(g||"_default"))try{e.dispose()}catch{}};let i=null,a=null,l=null,c=[],u=!1;function d(){let g=[];try{let v=x.workspace.workspaceFolders||[];for(let b of v)b&&b.uri&&b.uri.fsPath&&g.push(b.uri.fsPath)}catch{}return g}function f(g,v,b){let S=vv.classifyImage(v,b,d());if(S.kind==="workspace")try{return String(g.asWebviewUri(x.Uri.file(S.abs)))}catch{return null}if(S.kind==="inline")try{let _=I.statSync(S.abs);if(!_.isFile()||_.size>zL)return null;let C=I.readFileSync(S.abs),A=D.extname(S.abs).toLowerCase();return"data:"+(VL[A]||"application/octet-stream")+";base64,"+C.toString("base64")}catch{return null}return null}function p(g,v,b){let S={},_=vv.extractImageUrls(v);for(let C of _)S[C]=f(g,C,b);return S}function h(g,v){if(!g||g!==i)return;let b="";try{let C=x.workspace.textDocuments.find(function(A){return A.uri.toString()===v.toString()});b=C?C.getText():""}catch{b=""}let S={};try{let C=D.dirname(v.fsPath);S=p(g.webview,b,C)}catch{S={}}let _=v.fsPath||v.toString();try{g.webview.postMessage({type:"doc",content:b,imageMap:S,filePath:_,lang:rn||Va()})}catch{}}function m(g,v){if(i)return a=v,Yo=v,i.title=O("ext.mdPreviewTitle"),i.reveal(x.ViewColumn.Beside,!0),h(i,v),i;let b=x.window.createWebviewPanel("luban.markdownPreview",O("ext.mdPreviewTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[io(g.extensionUri)].concat(d().map(function(S){return x.Uri.file(S)}))});return i=b,a=v,u=!1,Yo=v,Da=!1,La=b.webview,b.webview.html=XL(b.webview,g.extensionUri),k("md_preview_open",{file:v.fsPath||v.toString()}),b.webview.onDidReceiveMessage(function(S){if(!(!S||!S.type)){if(S.type==="ack_rendered"){N=Object.assign({at:Date.now(),source:"mdpreview"},S),k("md_preview_ack",{kind:S.kind,n:S.n,total:S.total,value:S.value||""});return}if(S.type==="ready"){u=!0,Da=!0,h(b,a);return}if(S.type==="openLink"){let _=String(S.url||"");if(/^https?:\/\//i.test(_))try{x.env.openExternal(x.Uri.parse(_))}catch{}return}}}),c.push(x.workspace.onDidChangeTextDocument(function(S){!i||!a||S.document.uri.toString()===a.toString()&&h(i,a)})),c.push(x.window.onDidChangeTextEditorVisibleRanges(function(S){if(!i||!a||S.textEditor.document.uri.toString()!==a.toString())return;let _=S.visibleRanges&&S.visibleRanges[0];if(!_)return;let C=_.start.line;l||(l=setTimeout(function(){if(l=null,!(!i||!u))try{i.webview.postMessage({type:"sync",line:C})}catch{}},100))})),b.onDidDispose(function(){l&&(clearTimeout(l),l=null);for(let S of c)try{S.dispose()}catch{}c=[],La===b.webview&&(La=null),i===b&&(i=null,a=null,Yo=null,u=!1,Da=!1),k("md_preview_close",{})}),b}t.subscriptions.push(x.commands.registerCommand("luban.markdownPreview",async()=>{let g=x.window.activeTextEditor;if(!g||!JL(g.document)){x.window.showWarningMessage(O("ext.mdPreviewNotMarkdown"));return}try{m(t,g.document.uri)}catch(v){x.window.showWarningMessage(O("ext.mdPreviewFailed")+" "+String(v&&v.message||v))}})),e2(t),t.subscriptions.push(x.commands.registerCommand("luban.inlineCompletion.toggle",t2)),t.subscriptions.push(x.commands.registerCommand("luban.focusView",async()=>{try{await x.commands.executeCommand("workbench.view.extension.luban"),k("focus_view",{ok:!0})}catch(g){k("focus_view",{ok:!1,message:g.message})}})),t.subscriptions.push(ZL(t)),gF(t),t.subscriptions.push(x.commands.registerCommand("luban.agent",async()=>{let g=await x.window.showInputBox({prompt:O("ext.agentPrompt")});g&&await x.window.withProgress({location:x.ProgressLocation.Notification,title:"Luban agent"},async v=>{let b=oo(tn()),S=Ms(b&&b.items||[],"",{resolveImage:Cs(b)}),_=await Is(g,{root:R(),history:S.messages,sessionId:b?b.id:"",onProgress:C=>v.report({message:C})});wh({modelKey:oi(),mode:"agent",source:"command",session:b?b.id:""},_.usage),x.window.showInformationMessage(O("ext.agentDone",{n:_.log.length}))})}));async function y(){await cm(t);try{Gt.configure({root:R(),rec:k}),Gt.refresh(R())}catch(b){k("skills_scan_failed",{message:b.message})}Sa(R());let g="";try{xe.configure({root:R(),version:ds,rec:k});let b=await xe.reload();g=O("ext.mcpNote",{servers:b.servers.length,tools:b.tools.length})}catch(b){g=O("ext.mcpFail",{msg:b.message}),k("mcp_reload_failed",{message:b.message})}let v="";try{let b=Xa();Ge.configure({root:R(),enabled:b.enabled,maxTools:b.maxTools,rec:k,confirm:zS}),await Ge.reload();let S=Ge.status();v=O("ext.pluginNote",{plugins:S.plugins.length,tools:S.tools.length})}catch(b){k("plugins_reload_failed",{message:b.message})}x.window.showInformationMessage(O("ext.configReloaded",{models:es().length,skills:Gt.list().length,rules:en.list().length})+g+v)}t.subscriptions.push(x.commands.registerCommand("luban.reloadConfig",y)),t.subscriptions.push(x.commands.registerCommand("luban.newSession",async()=>{await ro("command"),await ft(),x.window.setStatusBarMessage(O("ext.newSessionNotice"),2e3)})),t.subscriptions.push(x.commands.registerCommand("luban.cursorPlan",WL)),t.subscriptions.push(x.commands.registerCommand("luban.sessionList",async()=>{Qc=!0,await ft()&&tn()&&(Qc=!1,Re({type:"toggle_session_list"}))})),t.subscriptions.push(x.commands.registerCommand("luban.mode.cycle",async()=>{await ft();let g=tn();g&&g.postMessage({type:"cycle_mode"})})),t.subscriptions.push(x.commands.registerCommand("luban.findInSession",async()=>{await ft();let g=tn();g&&g.postMessage({type:"open_find"})}));async function w(g,v,b,S){let _=(Array.isArray(b)&&b.length?b:v?[v]:[]).filter(function(H){return H&&H.scheme==="file"}),C=R(),A=[];for(let H of _){let $=FS(H.fsPath,C);$&&A.push($)}if(!A.length)return;let F=await ft(),B=tn();if(!F||!B){x.window.showWarningMessage(O("ext.addFileNoView")),k("add_"+g+"_to_chat_failed",{n:A.length,reason:"no_webview"});return}S&&await ro("add_to_new_chat",B),B.postMessage({type:"insert_ref",text:A.join(""),n:A.length,focus:!!S}),k("add_"+g+(S?"_to_new_chat":"_to_chat"),{n:A.length})}t.subscriptions.push(x.commands.registerCommand("luban.addFileToChat",(g,v)=>w("file",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToChat",(g,v)=>w("folder",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFileToNewChat",(g,v)=>w("file",g,v,!0))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToNewChat",(g,v)=>w("folder",g,v,!0)));async function T(g){let v=LS(R());if(!v){x.window.showWarningMessage(O("ext.addSelectionNone")),k("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_selection"});return}let b=await ft(),S=tn();if(!b||!S){x.window.showWarningMessage(O("ext.addFileNoView")),k("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_webview"});return}g&&await ro("add_to_new_chat",S),S.postMessage({type:"insert_ref",text:v,n:1,focus:!!g}),k("add_selection"+(g?"_to_new_chat":"_to_chat"))}t.subscriptions.push(x.commands.registerCommand("luban.addSelectionToChat",()=>T(!1))),t.subscriptions.push(x.commands.registerCommand("luban.addSelectionToNewChat",()=>T(!0))),t.subscriptions.push(x.workspace.onDidChangeConfiguration(function(g){if(g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionHistory.max"))try{st().setMax(G_())}catch{}g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionMemory")&&k("session_memory_config",Qr()),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.plugins")&&GS(),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.language")&&Nc("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.net.tlsMaxVersion")&&gh("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban")&&At&&ZF()})),t.subscriptions.push(x.workspace.onDidChangeWorkspaceFolders(function(){let g=R();Gt.configure({root:g,rec:k});try{Gt.refresh(g)}catch(v){k("skills_scan_failed",{message:v.message})}if(Sa(g),xe.configure({root:g,version:ds,rec:k}),xe.reload().then(function(v){k("mcp_reload_done",{servers:v.servers.length,tools:v.tools.length})},function(v){k("mcp_reload_failed",{message:v.message})}),Rc("workspace_change"),g!==hm)try{pT(t)}catch(v){k("session_restore_failed",{message:v.message,reason:"workspace_change"})}}));try{let g=x.workspace.getConfiguration("luban").get("autoOpen");k("auto_open_decided",{autoOpen:g}),g!==!1&&setTimeout(function(){x.commands.executeCommand("workbench.view.extension.luban").then(function(){k("auto_open_view",{ok:!0})},function(v){k("auto_open_view",{ok:!1,message:String(v&&v.message)})})},1200)}catch(g){k("auto_open_view",{ok:!1,message:g.message})}c2(t)}function yu(){let t={pass:0,fail:0,failed:[],checks:{}};return t.ok=function(e,n,s){let r=!!n;return r?t.pass++:(t.fail++,t.failed.push(e+(s?" :: "+s:""))),t.checks[e]=r,r},t}function r2(){let t=yu(),e=I.mkdtempSync(D.join(lt.tmpdir(),"luban-fs-op-")),n=function(s,r){let o=D.join(e,s);I.mkdirSync(D.dirname(o),{recursive:!0}),I.writeFileSync(o,r)};try{n("a.js",`const foo1 = 1;
|
|
1137
|
+
`+d)+y,T=O(a?"cross.execPlanAccept":"cross.execPlan");Dt({t:"user",text:T,ctx:w,exec:!0},i);let g=km(i);xt(i),m.seedEmit();let v=aT(i,n,s.token);a&&sF();let b;try{b=await Ns(w,{root:R(),modelKey:t.modelKey,mode:"agent",thinking:t.thinking,verbosity:t.verbosity,history:c.messages,spillDigest:c.spillDigest||"",spillStore:l,sessionId:i&&i.id?i.id:"",token:s.token,todosState:m.state,onTodos:m.onTodos,askWait:v,onToken:S=>n({type:"token",text:S}),onReasoning:S=>n({type:"reasoning",text:S}),onSplit:S=>n({type:"think_split",text:S}),onRefs:S=>n({type:"references",refs:S}),onUserTurn:function(S){Oh(g,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:iT(n),onProgress:rT,onRound:oT,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))})}finally{a&&rF()}n({type:"done",text:b.text,think:b.reasoning||void 0,kind:"agent",usage:b.usage,rounds:v_(b),summary:O("ext.summary.exec",{n:b.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+k_(b.stop)}),k("webview_execute_plan_done",{toolCalls:b.log.length,iters:b.iters,chars:b.text.length,todos:(m.state.items||[]).length,autoAccept:a})}function As(t){let e=t&&t.id?String(t.id):"";return function(n){return e?_e.readDataUrl(e,n):""}}function vm(t,e,n){let s=t&&t.id?String(t.id):"";if(!s||!Array.isArray(e)||!e.length)return[];let r=mt(n);if(!(r&&r.model&&r.model.vision===!0))return[];let o=[];for(let i of e.slice(0,_e.MAX_IMAGES)){if(!i||typeof i!="object")continue;let a=i.dataUrl?_e.saveImage(s,i.dataUrl):_e.validateEntry(i);a&&o.push(a)}return o}async function qL(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=PS(t.prompt),l=!!(t.webSearch||a.web),c=a.prompt||(l?"\u8BF7\u8054\u7F51\u641C\u7D22\u5F53\u524D\u6700\u65B0\u4FE1\u606F\u5E76\u603B\u7ED3":""),u=vm(i,t.images,t.modelKey),d=Array.isArray(t.images)?t.images.filter(Boolean).length:0;u.length?k("ask_images",{source:r,n:u.length,bytes:u.reduce(function(S,_){return S+_.bytes},0)}):d&&(n({type:"img_blocked",n:d}),k("ask_images_blocked",{source:r,model:t.modelKey,n:d})),mu(t.modelKey,t.mode||"agent",i),sT(c,i,t.modelKey,t.mode||"agent");let f=J_(i),p=Cs(i&&i.items||[],t.modelKey,{resolveImage:As(i),spillStore:f});k("session_memory",{source:r,mode:t.mode||"agent",turns:p.turns,chars:p.chars,dropped:p.dropped,enabled:p.enabled,spilledTurns:p.spilledTurns||0}),Dt({t:"user",text:c,web:l,uid:t.uid?String(t.uid):void 0,images:u.length?u:void 0},i);let h=km(i);if(xt(i),t.mode==="chat"){let S=yh(mt(t.modelKey)),_=to(c,R(),{window:S});_.refs.length&&n({type:"references",refs:_.refs});let C=Bh(_.refs,R(),void 0,{sessionId:i&&i.id}),A=null;l&&(n({type:"searching",query:c.slice(0,128)}),A=await jS(c,mt(t.modelKey),{signal:s.token,onSearch:function(P){n({type:"sources",items:Cv(P.results),query:P.query})}}),n({type:"tool",name:"web_search",path:A.query.slice(0,60),ok:A.results.length>0,result:A.results.length+" \u6761\u7ED3\u679C"}),k("webview_chat_web",{source:r,query:A.query,results:A.results.length}));let F=Es.buildUserTurn({rule:l?FF:"",spillBlock:p.spillDigest||"",webBlock:A?A.block:"",autoBlock:C,refText:_.text});Oh(h,F,i);let B=u.map(function(P){return _e.readDataUrl(i.id,P)}),H=[{role:"system",content:NF}].concat(p.messages,[{role:"user",content:_e.toContent(F,B)}]),$=await ti(H,t.modelKey,{onToken:P=>n({type:"token",text:P}),onReasoning:P=>n({type:"reasoning",text:P}),onSplit:P=>n({type:"think_split",text:P}),thinking:t.thinking,signal:s.token}),J=Ka([Qh($,H,Oe.DEFAULTS.ratio)],yh($.target),$.target.model.id);n({type:"usage_live",usage:J}),n({type:"done",text:$.content,think:$.reasoning||void 0,summary:O("ext.summary.chat",{model:$.target.model.id}),usage:J}),k("webview_chat_done",{source:r,chars:$.content.length,model:$.target.key,refs:_.refs.length,usage:J});return}let m=t.mode==="plan",y=m?null:cT(i,n,[]),w=aT(i,n,s.token),T=!1;if(!m&&(t.autoKeep===!0||t.autoKeep===void 0&&z_())){let _=mm();_.ok?(T=!0,k("review_auto_keep",{source:r,session:i&&i.id})):(k("review_auto_keep_refused",{source:r,reason:_.reason,files:_.files||0}),n({type:"auto_keep",on:!1,reason:_.reason,files:_.files||0}))}let g=await Ns(t.prompt,{root:R(),modelKey:t.modelKey,mode:m?"plan":"agent",webSearch:l,thinking:t.thinking,verbosity:t.verbosity,autoKeep:T,history:p.messages,spillDigest:p.spillDigest||"",spillStore:f,sessionId:i&&i.id?i.id:"",token:s.token,todosState:y?y.state:void 0,onTodos:y?y.onTodos:void 0,askWait:w,onToken:S=>n({type:"token",text:S}),onReasoning:S=>n({type:"reasoning",text:S}),onSplit:S=>n({type:"think_split",text:S}),onRefs:S=>n({type:"references",refs:S}),onSearch:function(S){n({type:"sources",items:Cv(S.results),query:S.query})},images:u.map(function(S){return _e.readDataUrl(i.id,S)}),onUserTurn:function(S){Oh(h,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:iT(n),onProgress:rT,onRound:oT,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))}),v="",b=[];if(m&&(v=tT(g.text,{prompt:t.prompt,workspace:R(),modelKey:t.modelKey,session:i?i.id:""}),b=sn.parsePlanSteps(g.text)),n({type:"done",text:g.text,think:g.reasoning||void 0,kind:m?"plan":"agent",usage:g.usage,planFile:v||void 0,todos:m&&b.length?b:void 0,rounds:v_(g),summary:O(m?"ext.summary.plan":"ext.summary.done",{n:g.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+k_(g.stop)}),k("webview_"+(m?"plan":"agent")+"_done",{source:r,toolCalls:g.log.length,iters:g.iters,chars:g.text.length,usage:g.usage,todos:m?b.length:void 0}),m&&(i&&i.id&&Ga.set(i.id,{text:g.text,file:v}),k("plan_ready",{chars:g.text.length,tools:g.log.map(function(S){return S.name}),file:v,todos:b.length}),v))try{await nT(v)}catch(S){k("plan_file_open_failed",{file:v,message:S.message})}}async function ft(){if(Te||ye)return!0;try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}return await new Promise(function(t){setTimeout(t,700)}),!!vt}async function ro(t,e){let n=st().create(R());ge.set(n.id,n),ms.set(n.id,++kr),Ee=n.id;let s=e||tn()||vt;return s&&Ot.set(s,n.id),we.indexOf(n.id)<0&&we.push(n.id),N=null,ri(n,s),Re(Sn()),k("session_new",{reason:t||"",id:n.id,tabs:we.length,review:de.size}),n}function lh(t,e,n){let s=Array.isArray(t)?t:[],r=String(e??"");if(r)for(let i=s.length-1;i>=0;i--){let a=s[i];if(a&&a.t==="user"&&!a.exec&&String(a.uid||"")===r)return i}let o=Number(n);if(isFinite(o)&&o>=0){let i=0;for(let a=0;a<s.length;a++){let l=s[a];if(!(!l||l.t!=="user"||l.exec)){if(i===Math.floor(o))return a;i++}}}return-1}function uT(t,e){let n=Array.isArray(t)?t:[];if(!isFinite(e)||e<0||e>=n.length)return null;let s=n[e];if(!s||s.t!=="user"||s.exec)return null;let r=n.length;for(let o=e+1;o<n.length;o++){let i=n[o];if(i&&i.t==="user"&&!i.exec){r=o;break}}return{start:e,end:r,removed:r-e}}function ou(t,e,n,s){if(!(t&&t.items||[]).length)return{ok:!1,error:O("ext.forkEmpty")};let o=Qn.forkSession(t,{at:e??null,title:pu(t),suffix:O("ext.forkSuffix")});ge.set(o.id,o),ms.set(o.id,++kr),Ee=o.id;let i=n||tn()||vt;i&&Ot.set(i,o.id),we.indexOf(o.id)<0&&we.push(o.id),N=null;try{let a=_e.copySession(t.id,o.id);(a.copied||a.failed)&&k("session_fork_attachments",{from:t.id,to:o.id,copied:a.copied,failed:a.failed})}catch(a){k("session_fork_attachments_failed",{from:t.id,to:o.id,message:a.message})}try{st().save(o)}catch(a){k("session_save_failed",{message:a.message,id:o.id})}return ri(o,i),Re(Sn()),k("session_fork",{from:t.id,id:o.id,at:e??-1,items:o.items.length,source:s||"",tabs:we.length}),{ok:!0,id:o.id,from:t.id,items:o.items.length,at:e??-1}}async function BL(t,e,n,s){let r=String(t||""),o=ni(r);if(!o)try{o=st().load(r)}catch{o=null}if(!o){let c=O("ext.noSuchSession",{id:r});try{x.window.showErrorMessage(c)}catch{}return k("session_fork_failed",{id:r,reason:"missing"}),{ok:!1,error:c}}if(ot.has(o.id)){let c=O("ext.forkBusy");try{x.window.showWarningMessage(c)}catch{}return k("session_fork_failed",{id:o.id,reason:"busy"}),{ok:!1,error:c,busy:!0}}let i=o.items||[];if(!i.length){let c=O("ext.forkEmpty");try{x.window.showWarningMessage(c)}catch{}return k("session_fork_failed",{id:o.id,reason:"empty"}),{ok:!1,error:c}}if(s)return ou(o,null,e,n||"fork_whole");let a=[{label:O("ext.forkWhole"),description:O("ext.forkWholeDesc",{n:i.length}),at:null}];for(let c of Qn.forkPoints(i))a.push({label:Pa(c.text),description:O("ext.forkFromDesc",{n:c.rest}),at:c.index});let l=null;try{l=await x.window.showQuickPick(a,{title:O("ext.forkPickTitle"),placeHolder:O("ext.forkPickPlaceholder"),matchOnDescription:!0,ignoreFocusOut:!0})}catch(c){return k("session_fork_failed",{id:o.id,reason:"pick_error",message:c.message}),{ok:!1,error:c.message}}return l?ou(o,l.at,e,n):(k("session_fork_cancel",{id:o.id}),{ok:!1,canceled:!0})}function UL(t){let e=Math.max(0,Date.now()-(Number(t)||0));return e<60*1e3?O("panel.relJustNow"):e<60*60*1e3?O("panel.relMinutes",{n:Math.floor(e/6e4)}):e<24*60*60*1e3?O("panel.relHours",{n:Math.floor(e/36e5)}):O("panel.relDays",{n:Math.floor(e/864e5)})}async function WL(){let t=yr.listPlans({home:lt.homedir(),root:R()});if(!t.length){x.window.showInformationMessage(O("ext.cursorPlanNone",{dir:yr.homePlanDir(lt.homedir())}));return}let e=t.map(function(s){return{label:s.name||s.base,description:UL(s.mtimeMs)+" \xB7 "+qS(s.size),detail:s.overview?Pa(s.overview):s.file,file:s.file}}),n=await x.window.showQuickPick(e,{placeHolder:O("ext.cursorPlanPick"),matchOnDescription:!0,matchOnDetail:!0,ignoreFocusOut:!0});n&&await dT(n.file)}async function dT(t){let e=yr.readPlan(t);if(!e.ok){let i=e.code==="too_big"?O("ext.cursorPlanBig",{n:Math.round(yr.MAX_BYTES/1024)}):O("ext.cursorPlanReadFail",{msg:e.error});return x.window.showErrorMessage(i),k("cursor_plan_read_failed",{file:t,code:e.code||"",error:e.error||""}),{ok:!1,error:i}}if(!String(e.body||"").trim())return x.window.showErrorMessage(O("ext.noPlan")),k("cursor_plan_read_failed",{file:t,code:"empty"}),{ok:!1,error:O("ext.noPlan")};await ft();let n=await HL(6e3);if(n&&Te&&n===Te.webview)try{Te.reveal()}catch{}else if(n&&ye&&n===ye.webview&&ye.visible!==!0)try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}if(!await GL(n,1e4))return x.window.showErrorMessage(O("ext.cursorPlanNoPanel")),k("cursor_plan_no_panel",{webview:!!n}),{ok:!1,error:O("ext.cursorPlanNoPanel")};let r=oo(n);(!r||(r.items||[]).length||On(r).length||ot.has(r.id))&&(r=await ro("cursor_plan",n));let o=sn.normalize(e.todos||[]);return Dt({t:"plan",text:e.body,planFile:t,todos:o.length?o:void 0},r),xt(r),ri(r,null),Re(Sn()),n.postMessage({type:"execute_plan",plan:e.body,planFile:t,sessionId:r.id}),k("cursor_plan_execute",{file:t,chars:e.body.length,todos:o.length,session:r.id}),{ok:!0,session:r.id,file:t,chars:e.body.length,todos:o.length}}async function Yr(t,e){let n=ge.get(String(t||"")),s=!0;if(!n){if(s=!1,n=st().load(t),!n)return k("session_open_failed",{id:t}),{ok:!1,error:O("ext.noSuchSession",{id:t})};n=ym(n),ge.set(n.id,n),ms.set(n.id,++kr)}Ee=n.id;let r=e||tn()||vt;return r&&Ot.set(r,n.id),we.indexOf(n.id)<0&&we.push(n.id),N=null,ri(n,r),Re(Sn()),k("session_open",{id:n.id,items:(n.items||[]).length,queue:(n.queue||[]).length,cached:s,tabs:we.length}),{ok:!0,id:n.id,items:(n.items||[]).length}}async function ar(t){st();let e=String(t||""),n=Ee===e;if(ge.get(e)){ru(e),ot.delete(e),ms.set(e,++kr);let r=Cn.get(e);r&&(clearTimeout(r),Cn.delete(e));let o=K_(e);ge.delete(e),W_(e,o)}Ga.delete(e),be.remove(e);try{let r=_e.removeSession(e);k("attachments_remove",{id:e,removed:r.removed})}catch(r){k("attachments_remove_failed",{id:e,message:r.message})}kL(e),kN(e);try{await uu(e,"delete")}catch(r){k("browser_close_failed",{message:r.message})}$c.delete(e),$c.delete(e);try{let r=ke.clearSession(e);r&&r.stopped&&k("async_cmd_stop_all",{sessionId:e,stopped:r.stopped,reason:"delete"})}catch{}return we=we.filter(function(r){return r!==e}),Re({type:"session_deleted",id:e}),Re(Sn()),k("session_delete",{id:e,wasCurrent:n,tabs:we.length}),{ok:!0,current:Ee||"",sessions:be.list()}}var fT="luban.openTabs";function Sm(t){let e=require("crypto").createHash("sha1").update(String(t||"")).digest("hex").slice(0,16);return fT+"."+e}function Na(t){try{if(!t||!t.globalState)return;let e=R(),n=t.globalState.update(Sm(e),{root:e,ids:we.slice(),active:Ee||"",at:new Date().toISOString()});n&&n.catch&&n.catch(function(){})}catch{}}function KL(t,e){let n=t&&t.globalState;if(!n)return null;let s=null;try{s=n.get(Sm(e))}catch{s=null}if(s&&Array.isArray(s.ids)&&(s.root==null||String(s.root)===String(e)))return s;try{let r=n.get(fT);return r&&Array.isArray(r.ids)?r:null}catch{return null}}function _m(t){st();let e=R(),n=KL(t,e),s=n&&Array.isArray(n.ids)?n.ids.map(String):[],r=[],o=function(a){!a||r.indexOf(a.id)>=0||Vo(a)&&(ge.has(a.id)||(ge.set(a.id,ym(a)),ms.set(a.id,++kr)),r.push(a.id))};for(let a of s){if(!/^[A-Za-z0-9_-]+$/.test(a))continue;let l=ge.get(a);if(!l)try{l=be.load(a)}catch{l=null}l&&o(l)}if(!r.length){let a=[];try{a=be.list("workspace",e)}catch{a=[]}let l=a.find(function(c){return(c.items||0)>0})||a[0];if(l){let c=null;try{c=be.load(l.id)}catch{c=null}o(c)}}if(!r.length){let a=be.create(e);ge.set(a.id,a),ms.set(a.id,++kr),r.push(a.id),k("session_created",{id:a.id})}we=r,hm=e;let i=n&&n.active?String(n.active):"";Ee=r.indexOf(i)>=0?i:r[r.length-1],k("session_restored",{root:e,tabs:r.length,active:Ee,items:((ge.get(Ee)||{}).items||[]).length})}function pT(t){try{_m(t)}catch(n){k("session_restore_failed",{message:n.message,reason:"workspace_change"})}Ot.clear(),Re({type:"tabs_reset"});let e=[];for(let n of we){let s=ge.get(n);if(!s||!Vo(s))continue;e.push(n);let r=wm(s);r.boot=!0,Re(r)}Re({type:"open_tabs",ids:e,active:Ee}),Re(Sn()),Na(t),k("tabs_workspace_switch",{root:R(),tabs:e.length,active:Ee})}async function Ae(t,e){let n=Date.now()+(t||8e3);for(;Date.now()<n;){if(N&&e(N))return N;await new Promise(function(s){setTimeout(s,150)})}return N&&e(N)?N:null}var Te=null,ye=null,N=null,vt=null,Eh=new WeakSet,Fa=new WeakMap,si=new WeakMap;function tn(){let t=ye&&ye.webview,e=Te&&Te.webview;return t&&ye.visible===!0?t:e||(vt&&(vt===t||vt===e)?vt:t||null)}function De(t){return t==="panel"?Te?Te.webview:null:t==="view"?ye?ye.webview:null:tn()||vt}async function HL(t){let e=Date.now()+(Number(t)>0?Number(t):6e3);for(;;){let n=tn();if(n)return n;if(Date.now()>=e)return null;await new Promise(function(s){setTimeout(s,100)})}}function GL(t,e){let n=t;return n?Eh.has(n)?Promise.resolve(!0):new Promise(function(s){let r=Date.now()+(Number(e)>0?Number(e):8e3),o=setInterval(function(){if(Eh.has(n)){clearInterval(o),s(!0);return}Date.now()>=r&&(clearInterval(o),s(!1))},100)}):Promise.resolve(!1)}var Ga=new Map;function hT(t,e){let n=io(e),s=t.asWebviewUri(x.Uri.joinPath(n,"panel.css")),r=t.asWebviewUri(x.Uri.joinPath(n,"panel.js")),o=t.asWebviewUri(x.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(x.Uri.joinPath(n,"avatar.js")),a=t.asWebviewUri(x.Uri.joinPath(n,"i18n.js")),l=I.readFileSync(x.Uri.joinPath(n,"panel.html").fsPath,"utf8"),c=Math.random().toString(36).slice(2)+Date.now().toString(36);return l.replace(/{{cspSource}}/g,t.cspSource).replace(/{{cssUri}}/g,String(s)).replace(/{{themeStyle}}/g,Gh()).replace(/{{jsUri}}/g,String(r)).replace(/{{mdUri}}/g,String(o)).replace(/{{avatarUri}}/g,String(i)).replace(/{{i18nUri}}/g,String(a)).replace(/{{lang}}/g,rn||Va()).replace(/{{nonce}}/g,c)}var zL=2*1024*1024,VL={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".ico":"image/x-icon"};function JL(t){if(!t)return!1;if(t.languageId==="markdown")return!0;let e=String(t.uri&&t.uri.fsPath||"").toLowerCase();return/\.(md|markdown|mdown|mkd)$/.test(e)}var La=null,Yo=null,Da=!1;function XL(t,e){let n=io(e),s=t.asWebviewUri(x.Uri.joinPath(n,"preview.css")),r=t.asWebviewUri(x.Uri.joinPath(n,"preview.js")),o=t.asWebviewUri(x.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(x.Uri.joinPath(n,"code-highlight.js")),a=t.asWebviewUri(x.Uri.joinPath(n,"i18n.js")),l=I.readFileSync(x.Uri.joinPath(n,"preview.html").fsPath,"utf8"),c=Math.random().toString(36).slice(2)+Date.now().toString(36);return l.replace(/{{cspSource}}/g,t.cspSource).replace(/{{cssUri}}/g,String(s)).replace(/{{jsUri}}/g,String(r)).replace(/{{mdUri}}/g,String(o)).replace(/{{hlUri}}/g,String(i)).replace(/{{i18nUri}}/g,String(a)).replace(/{{title}}/g,O("ext.mdPreviewTitle")).replace(/{{path}}/g,"").replace(/{{lang}}/g,rn||Va()).replace(/{{nonce}}/g,c)}function iu(){return{type:"models",current:oi(),models:es().map(t=>({key:t.key,label:t.provider.name+" \xB7 "+t.model.name,vision:t.model.vision===!0,thinking:wF(t.model)}))}}function Re(t){let e=[Te&&Te.webview,ye&&ye.webview];for(let n of e)if(n)try{n.postMessage(t)}catch(s){k("broadcast_failed",{message:s.message})}}function mT(t){let e=t&&typeof t=="object"?t:{};return{state:typeof e.state=="string"&&e.state?e.state:"idle",mood:typeof e.mood=="string"&&e.mood?e.mood:"idle",text:String(e.text==null?"":e.text),task:String(e.task==null?"":e.task),mode:String(e.mode==null?"":e.mode),round:Number(e.round)||0,tools:Number(e.tools)||0,errors:Number(e.errors)||0,since:Number(e.since)||0}}var dr=null,uS="";function YL(){dr||(dr=setTimeout(function(){dr=null;let t;try{t=mT(Tn.get())}catch{return}let e=t.state+"|"+t.mood+"|"+t.text;e!==uS&&(uS=e,Re({type:"status",status:t}))},200),dr.unref&&dr.unref())}function ri(t,e,n){let s=[Te&&Te.webview,ye&&ye.webview];for(let r of s){if(!r)continue;let o=Object.assign(wm(t),n||{},{yank:r===e});try{r.postMessage(o)}catch(i){k("broadcast_failed",{message:i.message})}}}async function gT(t,e){let n=String(t||"");if(!/^https?:\/\//i.test(n))return!1;try{return await x.env.openExternal(x.Uri.parse(n)),k("webview_open_link",{source:e,url:n.slice(0,200)}),!0}catch(s){return k("webview_open_link_failed",{url:n.slice(0,200),message:s.message}),!1}}function Tm(t,e,n){return vt=t,t.onDidReceiveMessage(async r=>{if(!(!r||!r.type)){if(vt=t,Eh.add(t),r.type==="chat_focus"){Fa.set(t,r.focused===!0);return}if(r.type==="sidebar_maximized"){let o=si.get(t)===!0;si.set(t,r.maximized===!0),k("sidebar_maximized_report",{maximized:r.maximized===!0,was:o,widths:r.widths||null}),o&&r.maximized!==!0&&ye&&ye.webview===t&&t_();return}if(r.type==="ready"){t.postMessage({type:"lang",lang:rn}),t.postMessage(iu()),t.postMessage(qa());try{t.postMessage({type:"status",status:mT(Tn.get())})}catch(a){k("status_push_failed",{message:a.message})}let o=[];for(let a of we){let l=ge.get(a);if(!l||!Vo(l))continue;o.push(a);let c=wm(l);c.boot=!0,t.postMessage(c)}t.postMessage({type:"open_tabs",ids:o,active:Ot.get(t)||Ee}),t.postMessage(Sn());let i=oo(t);i&&t.postMessage(Y_(i)),Qc&&(Qc=!1,t.postMessage({type:"toggle_session_list"})),k("webview_ready",{source:n,tabs:o.length});return}if(r.type==="lang_applied"){N=Object.assign({at:Date.now(),source:n,kind:"lang_applied",n:0},r),k("webview_lang_applied",{source:n,lang:r.lang}),JI(r.lang);return}if(r.type==="new_session"){await ro(r.from||n,t);return}if(r.type==="open_session"){let o=await Yr(String(r.id||""),t);if(!o.ok)try{t.postMessage({type:"error",message:o.error})}catch{}return}if(r.type==="list_sessions"){t.postMessage(Sn());return}if(r.type==="search_sessions"){t.postMessage(Z_(r.q,r.scope,r.root,r.seq));return}if(r.type==="delete_session"){await ar(String(r.id||""));return}if(r.type==="fork_session"){await BL(String(r.id||""),t,n,!!r.whole);return}if(r.type==="fork_message"){let o=String(r.sessionId||""),i=o?ni(o):oo(t);if(!i&&o)try{i=st().load(o)}catch{i=null}let a=i?i.id:o,l=function(d){try{t.postMessage({type:"fork_error",sid:a,message:d})}catch{}k("session_fork_failed",{id:a,reason:"fork_message",message:d})};if(!i){l(O("ext.noSuchSession",{id:a}));return}if(ot.has(i.id)){l(O("ext.forkBusy"));return}let c=lh(i.items||[],r.uid?String(r.uid):"",Number(r.ordinal));if(c<0){l(O("ext.forkMissing"));return}let u=ou(i,c,t,"fork_message");u.ok||l(u.error||O("ext.forkEmpty"));return}if(r.type==="save_session_meta"){let o=ni(r.id);o&&(mu(r.modelKey,r.mode,o),bm(o));return}if(r.type==="tab_active"){let o=String(r.id||"");ge.has(o)&&(Ee=o,Ot.set(t,o),we.indexOf(o)<0&&we.push(o),Na(e));return}if(r.type==="tab_close"){let o=String(r.id||""),i=ge.get(o),a=K_(o);if(i){lS(i),ru(o),ot.delete(o),xt(i);let l=Cn.get(o);l&&(clearTimeout(l),Cn.delete(o)),ms.set(o,++kr),ge.delete(o),W_(o,a)}Ga.delete(o),we=we.filter(function(l){return l!==o}),Na(e),Re({type:"tab_removed",id:o}),Re(Sn()),k("tab_closed",{id:o,tabs:we.length});return}if(r.type==="tabs_changed"){let o=(Array.isArray(r.ids)?r.ids.map(String):[]).filter(function(c){return ge.has(c)&&Vo(ge.get(c))}),i=we.filter(function(c){return o.indexOf(c)<0&&ge.has(c)&&Vo(ge.get(c))});we=o.concat(i);let a=String(r.active||""),l=a&&ge.has(a)?a:we.indexOf(Ee)<0?we.length?we[we.length-1]:"":Ee;Ee=l,l?Ot.set(t,l):Ot.delete(t),Na(e);return}if(r.type==="ack_rendered"){N=Object.assign({at:Date.now(),source:n},r),k("webview_ack",Object.assign({source:n},r));return}if(r.type==="avatar_shown"){k("avatar_shown",{source:n,state:r.state,mood:r.mood,n:r.n});return}if(r.type==="setModel"){Vt.defaultModel=r.modelKey,k("webview_set_model",{modelKey:r.modelKey});return}if(r.type==="listFiles"){try{let o=await Uh();t.postMessage({type:"fileList",files:o.files,dirs:o.dirs})}catch(o){t.postMessage({type:"fileList",files:[],dirs:[],error:o.message}),k("webview_list_files_failed",{message:o.message})}return}if(r.type==="getSelection"){t.postMessage(Object.assign({type:"selectionInfo"},DS()));return}if(r.type==="openLink"){await gT(r.url,n);return}if(r.type==="open_settings"){pm(e),k("webview_open_settings",{source:n});return}if(r.type==="stop"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"stop",id:String(r.sessionId||"")});return}lS(o)&&(xt(o),ps(o),k("queue_paused",{id:o.id,size:On(o).length})),ru(o.id);return}if(r.type==="answer_question"){let o=qn(r,t),i=o?o.id:String(r.sessionId||""),a=lT(r.id,r.answers,i);if(a.ok)k("ask_answered",{id:r.id,sess:i});else{try{t.postMessage({type:"ask_question_error",sid:i||void 0,id:r.id,message:a.error||"\u7B54\u9898\u5931\u8D25"})}catch{}k("ask_answer_failed",{id:r.id,error:a.error})}return}if(r.type==="review_action"){let o;try{o=await Ba(r.action,r.path,r.hunk||"",r.sessionId)}catch(i){o={ok:!1,error:i.message}}try{t.postMessage(qa())}catch{}k("review_action",{source:n,action:r.action,path:r.path,hunk:r.hunk||"",ok:!!o.ok,error:o.error,files:de.size,hunks:cs()});return}if(r.type==="img_preview"){let o=String(r.sessionId||""),i=String(r.file||""),a=_e.readPreview(o,i);try{t.postMessage({type:"img_preview",ok:!!a.ok,sessionId:o,file:i,dataUrl:a.dataUrl||"",mime:a.mime||""})}catch{}k("img_preview",{source:n,ok:!!a.ok,error:a.error||"",file:i.slice(0,60)});return}if(r.type==="copy_text"){let o=String(r.text||""),i=!0;try{await x.env.clipboard.writeText(o)}catch{i=!1}try{t.postMessage({type:"copy_done",ok:i,n:o.length})}catch{}k("copy_text",{source:n,n:o.length,ok:i});return}if(r.type==="open_plan_file"){try{await nT(r.path),k("plan_file_opened",{source:n,path:r.path,ok:!0})}catch(o){k("plan_file_opened",{source:n,path:r.path,ok:!1,error:o.message})}return}if(r.type==="execute_plan"){let o=qn(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:O("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(ot.has(o.id)){k("webview_busy",{prompt:"execute_plan",session:o.id});try{t.postMessage({type:"error",sid:o.id,message:O("ext.sessionBusy")})}catch{}return}await Ma("execute_plan",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="auto_keep_check"){let o=mm();k("review_auto_keep_check",{ok:o.ok,reason:o.reason||"",files:o.files||0});try{t.postMessage({type:"auto_keep",probe:!0,on:o.ok,reason:o.reason||"",files:o.files||0})}catch{}return}if(r.type==="ask"){let o=qn(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:O("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(ot.has(o.id)){aS(o,Object.assign({},r,{echoed:!0}));return}await Ma("ask",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="edit_message"){let o=qn(r,t),i=!!r.resend,a=function(y,w){try{t.postMessage({type:"edit_error",sid:o?o.id:String(r.sessionId||""),message:O(y,w)})}catch{}};if(!o){a("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(ot.has(o.id)){a("ext.editBusy");return}let l=String(r.text==null?"":r.text).trim();if(!l){a("ext.editEmpty");return}let c=o.items||[],u=r.uid?String(r.uid):"",d=Number(r.ordinal),f=lh(c,u,d);if(f<0){a("ext.editMissing");return}let p=c[f]||{},h={t:"user",text:l,web:!!p.web};u&&(h.uid=u),Array.isArray(p.images)&&p.images.length&&(h.images=p.images);let m=c.length-(f+1);i?c.length=f:(c[f]=Qn.clampItem(h),c.length=f+1),f===0&&(o.title=""),xt(o),ri(o,null,{keepScroll:!0}),Re(Sn()),Re({type:"edit_done",sid:o.id,removed:m,resend:i}),k("session_edit",{source:n,id:o.id,removed:m,uid:u,ordinal:d,resend:i}),i&&(Re({type:"queue_start",id:o.id,item:{text:l,web:!!p.web,uid:u,images:p.images||[],mode:r.mode,modelKey:r.modelKey}}),await Ma("ask",{prompt:l,webSearch:!!p.web,mode:r.mode,modelKey:r.modelKey,sessionId:o.id,thinking:r.thinking,verbosity:r.verbosity,uid:u,images:p.images||[]},t,n));return}if(r.type==="delete_turn"){let o=qn(r,t),i=function(f,p){try{t.postMessage({type:"turn_delete_error",sid:o?o.id:String(r.sessionId||""),message:O(f,p)})}catch{}};if(!o){i("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(ot.has(o.id)){i("ext.deleteBusy");return}let a=o.items||[],l=r.uid?String(r.uid):"",c=Number(r.ordinal),u=lh(a,l,c);if(u<0){i("ext.deleteMissing");return}let d=uT(a,u);if(!d){i("ext.deleteMissing");return}a.splice(d.start,d.removed),d.start===0&&(o.title=""),xt(o),ri(o,null,{keepScroll:!0}),Re(Sn()),Re({type:"turn_deleted",sid:o.id,removed:d.removed}),k("session_turn_deleted",{source:n,id:o.id,removed:d.removed,uid:l,ordinal:c});return}if(r.type==="queue_add"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_add",id:String(r.sessionId||"")});return}if(!ot.has(o.id)){let a=hu({id:gm(),text:r.prompt,web:r.webSearch,mode:r.mode,modelKey:r.modelKey,thinking:r.thinking,verbosity:r.verbosity,autoKeep:r.autoKeep,at:Date.now(),uid:r.uid,images:vm(o,r.images,r.modelKey)});if(!a)return;Re({type:"queue_start",id:o.id,item:a}),ps(o),await Ma("ask",{prompt:a.text,webSearch:a.web,mode:a.mode,modelKey:a.modelKey,sessionId:o.id,thinking:a.thinking,verbosity:a.verbosity,autoKeep:a.autoKeep,uid:a.uid,images:a.images||[]},t,n);return}let i=aS(o,r);if(!i.ok)try{t.postMessage({type:"queue_error",id:o.id,message:i.error})}catch{}return}if(r.type==="queue_remove"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_remove",id:String(r.sessionId||"")});return}vL(o,r.id);return}if(r.type==="queue_clear"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_clear",id:String(r.sessionId||"")});return}SL(o);return}if(r.type==="queue_resume"){let o=qn(r,t);if(!o)return;o.queuePaused=!1,xt(o),ps(o),k("queue_resume",{id:o.id,size:On(o).length}),ot.has(o.id)||xm(o,t,n);return}if(r.type==="queue_run_now"){let o=qn(r,t);if(!o){k("stale_session_hit",{type:"queue_run_now",id:String(r.sessionId||"")});try{t.postMessage({type:"queue_error",id:"",message:O("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}let i=TL(o,r.id,t,n);if(!i.ok)try{t.postMessage({type:"queue_error",id:o.id,message:i.error||O("ext.queueMissing")})}catch{}return}}})}function Ph(t){if(Te)return Te.reveal(),Te;let e=x.window.createWebviewPanel("luban","Luban",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[io(t.extensionUri)]});e.webview.html=hT(e.webview,t.extensionUri),Te=e;let n=Tm(e.webview,t,"panel");return e.onDidDispose(()=>{Te=null,vt===e.webview&&(vt=null),Ot.delete(e.webview),n.dispose(),k("panel_disposed",{ok:!0})}),k("panel_opened",{ok:!0}),e}function ZL(t){let e={resolveWebviewView(n){ye=n,n.webview.options={enableScripts:!0,localResourceRoots:[io(t.extensionUri)]},n.webview.html=hT(n.webview,t.extensionUri),Tm(n.webview,t,"view"),n.onDidDispose(()=>{vt===n.webview&&(vt=null),Ot.delete(n.webview),ye=null}),k("view_resolved",{ok:!0})}};try{let n=x.window.registerWebviewViewProvider("luban.chatView",e,{webviewOptions:{retainContextWhenHidden:!0}});return k("view_provider_registered",{ok:!0}),n}catch(n){return k("view_provider_failed",{message:n.message}),{dispose:function(){}}}}var Os={busy:!1,stamps:[],enabled:!1,last:""};function gu(){let t={enabled:!1,maxPerMinute:30,debounceMs:250};try{let e=x.workspace.getConfiguration("luban"),n=e.get("inlineCompletion.enabled");n!=null&&(t.enabled=!!n);let s=Number(e.get("inlineCompletion.maxPerMinute"));isFinite(s)&&s>=1&&(t.maxPerMinute=Math.floor(s));let r=Number(e.get("inlineCompletion.debounceMs"));isFinite(r)&&r>=0&&(t.debounceMs=Math.floor(r))}catch{}return t}function Ca(t){return new Promise(function(e){setTimeout(e,Math.max(0,Number(t)||0))})}function dS(t){let e=Date.now();return Os.stamps=Os.stamps.filter(function(n){return e-n<6e4}),Os.stamps.length<t}async function QL(t,e,n,s){let r=gu();if(!r.enabled)return[];let o=function(i){return k("inline_completion",{skipped:i,chars:0}),[]};try{if(!t||!t.uri||t.uri.scheme!=="file")return o("scheme");if(!e)return o("no-position");if(e.line===0&&e.character===0)return o("file-start");let i=t.getText();if(i.length>1024*1024)return o("too-large");let a=mt(oi());if(!a||!Lc(a.provider))return o("provider-unsupported");if(Os.busy)return o("busy");if(!dS(r.maxPerMinute))return o("rate-limit");if(await Ca(r.debounceMs),s&&s.isCancellationRequested)return o("cancelled");if(!dS(r.maxPerMinute))return o("rate-limit");Os.busy=!0,Os.stamps.push(Date.now());let l=Date.now(),c;try{c=await MS({modelKey:a.key,path:Yn(t.uri.fsPath,R()),text:i,offset:t.offsetAt(e),signal:s})}catch(u){return k("inline_completion",{ms:Date.now()-l,chars:0,error:String(u&&u.message||u).slice(0,160)}),[]}finally{Os.busy=!1}return Os.last=c.text||"",k("inline_completion",{ms:Date.now()-l,chars:(c.text||"").length,model:c.model,promptChars:c.promptChars,suffixChars:c.suffixChars,timeout:!1}),c.text?typeof x.InlineCompletionItem!="function"?[]:[new x.InlineCompletionItem(c.text,new x.Range(e,e))]:[]}catch(i){return Os.busy=!1,k("inline_completion_failed",{message:String(i&&i.message||i).slice(0,160)}),[]}}function e2(t){if(!x.languages||typeof x.languages.registerInlineCompletionItemProvider!="function"){k("inline_provider_unsupported",{ok:!1});return}try{let e={provideInlineCompletionItems:QL};t.subscriptions.push(x.languages.registerInlineCompletionItemProvider({pattern:"**"},e)),k("inline_provider_registered",{enabled:gu().enabled})}catch(e){k("inline_provider_failed",{message:String(e&&e.message||e).slice(0,160)})}}async function t2(){let e=!gu().enabled;try{await x.workspace.getConfiguration("luban").update("inlineCompletion.enabled",e,x.ConfigurationTarget.Global),k("inline_toggle",{enabled:e});try{x.window.showInformationMessage(O(e?"ext.inlineOn":"ext.inlineOff"))}catch{}}catch(n){k("inline_toggle_failed",{message:String(n&&n.message||n).slice(0,160)})}return e}var n2="luban";function yT(t){return mS.register({vscode:x,context:t,vendor:n2,rec:k,version:fs,allModels:es,resolveModel:mt,streamChat:ti})}function s2(t){Nc("activate"),gh("activate"),au(),k("activate",{at:new Date().toISOString(),root:R(),configSource:Zo,models:es().length});try{Tn.autoServe()}catch(g){k("status_serve_failed",{message:g.message})}try{Tn.update({source:"extension",workspace:R()||"",text:"\u7A7A\u95F2"})}catch{}Gt.configure({root:R(),rec:k});try{Gt.refresh(R())}catch(g){k("skills_scan_failed",{message:g.message})}Rc("activate"),Sa(R()),xe.configure({root:R(),version:fs,rec:k}),xe.start().then(function(g){k("mcp_start_done",{servers:g.servers.length,tools:g.tools.length})},function(g){k("mcp_start_failed",{message:g.message})}),am(t).then(function(g){k("secrets_ready",{keys:g}),lm()}),Oa(x.window.activeTextEditor),t.subscriptions.push(x.window.onDidChangeActiveTextEditor(Oa)),t.subscriptions.push(x.window.onDidChangeTextEditorSelection(function(g){Oa(g.textEditor)}));try{_m(t)}catch(g){k("session_restore_failed",{message:g.message})}try{let g=new Set(we.slice());for(let b of ge.values())g.add(b.id);for(let b of be.list())g.add(b.id);let v=_e.sweepOrphans(g);v.removed&&k("attachments_sweep",v)}catch(g){k("attachments_sweep_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.openPanel",()=>Ph(t))),yT(t);try{let g=UI.mount({vscode:x,status:Tn,tr:O,rec:k});g&&t.subscriptions.push(g)}catch(g){k("statusbar_mount_failed",{message:g.message})}try{let g=Tn.subscribe(function(){YL()});t.subscriptions.push({dispose:function(){try{g()}catch{}}})}catch(g){k("status_push_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.providerSettings",()=>pm(t))),t.subscriptions.push(x.commands.registerCommand("luban.plugins",()=>Zc(t,"plugins"))),t.subscriptions.push(x.commands.registerCommand("luban.market",()=>Zc(t,"market"))),t.subscriptions.push(x.commands.registerCommand("luban.dashboard",()=>U_(t))),t.subscriptions.push(x.commands.registerCommand("luban.rules.open",async()=>{try{let g=R()||lt.homedir(),v=D.join(g,".luban","rules"),b=D.join(v,"default.md"),S=!1;I.existsSync(b)||(I.mkdirSync(v,{recursive:!0}),I.writeFileSync(b,qN,"utf8"),S=!0,Sa(g));let _=await x.workspace.openTextDocument(x.Uri.file(b));await x.window.showTextDocument(_,{preview:!1}),x.window.setStatusBarMessage(O(S?"ext.rulesCreated":"ext.rulesOpened",{file:b}),4e3)}catch(g){k("rules_open_failed",{message:g.message}),x.window.showErrorMessage(O("ext.rulesFailed",{msg:g.message}))}})),t.subscriptions.push(x.commands.registerCommand("luban.openInBrowser",async g=>{let v=Array.isArray(g)?g[0]:g;await gT(v&&typeof v=="object"?v.linkUrl:"","context")})),t.subscriptions.push(x.commands.registerCommand("luban.browserCheck",async()=>{let g=wr(),v=kt.findChrome(g.chromePath);if(!v.path){x.window.showErrorMessage(O("ext.browserNotFound",{paths:v.tried.slice(0,4).map(function(b){return" "+b}).join(`
|
|
1138
|
+
`)}));return}await x.window.withProgress({location:x.ProgressLocation.Notification,title:O("ext.browserCheckRunning"),cancellable:!1},async function(){let b=null;try{b=await kt.launch({exe:g.chromePath,headless:g.headless,width:g.width,height:g.height}),await b.navigate("data:text/html,<title>Luban</title><h1>Luban browser check</h1>");let S=await b.snapshot(1200),_=await b.screenshot({});k("browser_check",{ok:!0,exe:b.exe,snapChars:S.length,shotChars:_.length}),x.window.showInformationMessage(O("ext.browserCheckOk",{exe:v.path,chars:String(Math.round(_.length/1024))}))}catch(S){k("browser_check",{ok:!1,message:String(S&&S.message||S)}),x.window.showErrorMessage(O("ext.browserCheckFailed",{message:String(S&&S.message||S)}))}finally{if(b)try{await b.close()}catch{}}})}));let e=null,n=null,s=null;function r(){s&&(clearInterval(s),s=null)}function o(g){r(),s=setInterval(async function(){if(!e||e!==g){r();return}if(g.visible!==!1)try{let v=await VS(n),b=await v.screenshot({});e===g&&g.webview.postMessage({type:"shot",dataUrl:b,url:v.shortUrl(),title:v.title})}catch(v){e===g&&g.webview.postMessage({type:"err",message:String(v&&v.message||v)})}},1e3)}t.subscriptions.push(x.commands.registerCommand("luban.browserPreview",async()=>{let g=wr();if(!g.enabled){x.window.showWarningMessage(O("ext.browserPreviewDisabled"));return}if(!g.preview){x.window.showWarningMessage(O("ext.browserPreviewOff"));return}let v=String(Ee||"_default");if(e){if(n===v){e.reveal();return}e.dispose()}n=v;let b=x.window.createWebviewPanel("luban.browserPreview","Luban \u6D4F\u89C8\u5668\u9884\u89C8",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0});e=b,b.webview.html='<!DOCTYPE html><html><head><meta charset="utf-8"><style>body{margin:0;background:#1e1e1e;color:#ccc;font:12px sans-serif;display:flex;flex-direction:column;height:100vh}#bar{padding:4px 8px;background:#252526;border-bottom:1px solid #333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wrap{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center}img{max-width:100%;height:auto}</style></head><body><div id="bar">\u7B49\u5F85\u6D4F\u89C8\u5668\u622A\u56FE\u2026</div><div id="wrap"><img id="shot" alt="browser preview"/></div><script>window.addEventListener("message",function(e){var m=e.data;if(!m)return;if(m.type==="shot"){document.getElementById("shot").src=m.dataUrl;document.getElementById("bar").textContent=(m.title?m.title+" \u2014 ":"")+(m.url||"");}else if(m.type==="err"){document.getElementById("bar").textContent="\u9884\u89C8\u6682\u4E0D\u53EF\u7528\uFF1A"+m.message;}});</script></body></html>',k("browser_preview_open",{sessionId:v}),o(b),b.onDidDispose(function(){e===b&&(e=null,n=null),r(),k("browser_preview_close",{sessionId:v})}),b.onDidChangeViewState(function(S){S.webviewPanel.visible?o(b):r()})})),ph=function(g){if(e&&n===String(g||"_default"))try{e.dispose()}catch{}};let i=null,a=null,l=null,c=[],u=!1;function d(){let g=[];try{let v=x.workspace.workspaceFolders||[];for(let b of v)b&&b.uri&&b.uri.fsPath&&g.push(b.uri.fsPath)}catch{}return g}function f(g,v,b){let S=vv.classifyImage(v,b,d());if(S.kind==="workspace")try{return String(g.asWebviewUri(x.Uri.file(S.abs)))}catch{return null}if(S.kind==="inline")try{let _=I.statSync(S.abs);if(!_.isFile()||_.size>zL)return null;let C=I.readFileSync(S.abs),A=D.extname(S.abs).toLowerCase();return"data:"+(VL[A]||"application/octet-stream")+";base64,"+C.toString("base64")}catch{return null}return null}function p(g,v,b){let S={},_=vv.extractImageUrls(v);for(let C of _)S[C]=f(g,C,b);return S}function h(g,v){if(!g||g!==i)return;let b="";try{let C=x.workspace.textDocuments.find(function(A){return A.uri.toString()===v.toString()});b=C?C.getText():""}catch{b=""}let S={};try{let C=D.dirname(v.fsPath);S=p(g.webview,b,C)}catch{S={}}let _=v.fsPath||v.toString();try{g.webview.postMessage({type:"doc",content:b,imageMap:S,filePath:_,lang:rn||Va()})}catch{}}function m(g,v){if(i)return a=v,Yo=v,i.title=O("ext.mdPreviewTitle"),i.reveal(x.ViewColumn.Beside,!0),h(i,v),i;let b=x.window.createWebviewPanel("luban.markdownPreview",O("ext.mdPreviewTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[io(g.extensionUri)].concat(d().map(function(S){return x.Uri.file(S)}))});return i=b,a=v,u=!1,Yo=v,Da=!1,La=b.webview,b.webview.html=XL(b.webview,g.extensionUri),k("md_preview_open",{file:v.fsPath||v.toString()}),b.webview.onDidReceiveMessage(function(S){if(!(!S||!S.type)){if(S.type==="ack_rendered"){N=Object.assign({at:Date.now(),source:"mdpreview"},S),k("md_preview_ack",{kind:S.kind,n:S.n,total:S.total,value:S.value||""});return}if(S.type==="ready"){u=!0,Da=!0,h(b,a);return}if(S.type==="openLink"){let _=String(S.url||"");if(/^https?:\/\//i.test(_))try{x.env.openExternal(x.Uri.parse(_))}catch{}return}}}),c.push(x.workspace.onDidChangeTextDocument(function(S){!i||!a||S.document.uri.toString()===a.toString()&&h(i,a)})),c.push(x.window.onDidChangeTextEditorVisibleRanges(function(S){if(!i||!a||S.textEditor.document.uri.toString()!==a.toString())return;let _=S.visibleRanges&&S.visibleRanges[0];if(!_)return;let C=_.start.line;l||(l=setTimeout(function(){if(l=null,!(!i||!u))try{i.webview.postMessage({type:"sync",line:C})}catch{}},100))})),b.onDidDispose(function(){l&&(clearTimeout(l),l=null);for(let S of c)try{S.dispose()}catch{}c=[],La===b.webview&&(La=null),i===b&&(i=null,a=null,Yo=null,u=!1,Da=!1),k("md_preview_close",{})}),b}t.subscriptions.push(x.commands.registerCommand("luban.markdownPreview",async()=>{let g=x.window.activeTextEditor;if(!g||!JL(g.document)){x.window.showWarningMessage(O("ext.mdPreviewNotMarkdown"));return}try{m(t,g.document.uri)}catch(v){x.window.showWarningMessage(O("ext.mdPreviewFailed")+" "+String(v&&v.message||v))}})),e2(t),t.subscriptions.push(x.commands.registerCommand("luban.inlineCompletion.toggle",t2)),t.subscriptions.push(x.commands.registerCommand("luban.focusView",async()=>{try{await x.commands.executeCommand("workbench.view.extension.luban"),k("focus_view",{ok:!0})}catch(g){k("focus_view",{ok:!1,message:g.message})}})),t.subscriptions.push(ZL(t)),gF(t),t.subscriptions.push(x.commands.registerCommand("luban.agent",async()=>{let g=await x.window.showInputBox({prompt:O("ext.agentPrompt")});g&&await x.window.withProgress({location:x.ProgressLocation.Notification,title:"Luban agent"},async v=>{let b=oo(tn()),S=Cs(b&&b.items||[],"",{resolveImage:As(b)}),_=await Ns(g,{root:R(),history:S.messages,sessionId:b?b.id:"",onProgress:C=>v.report({message:C})});wh({modelKey:oi(),mode:"agent",source:"command",session:b?b.id:""},_.usage),x.window.showInformationMessage(O("ext.agentDone",{n:_.log.length}))})}));async function y(){await cm(t);try{Gt.configure({root:R(),rec:k}),Gt.refresh(R())}catch(b){k("skills_scan_failed",{message:b.message})}Sa(R());let g="";try{xe.configure({root:R(),version:fs,rec:k});let b=await xe.reload();g=O("ext.mcpNote",{servers:b.servers.length,tools:b.tools.length})}catch(b){g=O("ext.mcpFail",{msg:b.message}),k("mcp_reload_failed",{message:b.message})}let v="";try{let b=Xa();Ge.configure({root:R(),enabled:b.enabled,maxTools:b.maxTools,rec:k,confirm:zS}),await Ge.reload();let S=Ge.status();v=O("ext.pluginNote",{plugins:S.plugins.length,tools:S.tools.length})}catch(b){k("plugins_reload_failed",{message:b.message})}x.window.showInformationMessage(O("ext.configReloaded",{models:es().length,skills:Gt.list().length,rules:en.list().length})+g+v)}t.subscriptions.push(x.commands.registerCommand("luban.reloadConfig",y)),t.subscriptions.push(x.commands.registerCommand("luban.newSession",async()=>{await ro("command"),await ft(),x.window.setStatusBarMessage(O("ext.newSessionNotice"),2e3)})),t.subscriptions.push(x.commands.registerCommand("luban.cursorPlan",WL)),t.subscriptions.push(x.commands.registerCommand("luban.sessionList",async()=>{Qc=!0,await ft()&&tn()&&(Qc=!1,Re({type:"toggle_session_list"}))})),t.subscriptions.push(x.commands.registerCommand("luban.mode.cycle",async()=>{await ft();let g=tn();g&&g.postMessage({type:"cycle_mode"})})),t.subscriptions.push(x.commands.registerCommand("luban.findInSession",async()=>{await ft();let g=tn();g&&g.postMessage({type:"open_find"})}));async function w(g,v,b,S){let _=(Array.isArray(b)&&b.length?b:v?[v]:[]).filter(function(H){return H&&H.scheme==="file"}),C=R(),A=[];for(let H of _){let $=FS(H.fsPath,C);$&&A.push($)}if(!A.length)return;let F=await ft(),B=tn();if(!F||!B){x.window.showWarningMessage(O("ext.addFileNoView")),k("add_"+g+"_to_chat_failed",{n:A.length,reason:"no_webview"});return}S&&await ro("add_to_new_chat",B),B.postMessage({type:"insert_ref",text:A.join(""),n:A.length,focus:!!S}),k("add_"+g+(S?"_to_new_chat":"_to_chat"),{n:A.length})}t.subscriptions.push(x.commands.registerCommand("luban.addFileToChat",(g,v)=>w("file",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToChat",(g,v)=>w("folder",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFileToNewChat",(g,v)=>w("file",g,v,!0))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToNewChat",(g,v)=>w("folder",g,v,!0)));async function T(g){let v=LS(R());if(!v){x.window.showWarningMessage(O("ext.addSelectionNone")),k("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_selection"});return}let b=await ft(),S=tn();if(!b||!S){x.window.showWarningMessage(O("ext.addFileNoView")),k("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_webview"});return}g&&await ro("add_to_new_chat",S),S.postMessage({type:"insert_ref",text:v,n:1,focus:!!g}),k("add_selection"+(g?"_to_new_chat":"_to_chat"))}t.subscriptions.push(x.commands.registerCommand("luban.addSelectionToChat",()=>T(!1))),t.subscriptions.push(x.commands.registerCommand("luban.addSelectionToNewChat",()=>T(!0))),t.subscriptions.push(x.workspace.onDidChangeConfiguration(function(g){if(g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionHistory.max"))try{st().setMax(G_())}catch{}g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionMemory")&&k("session_memory_config",Qr()),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.plugins")&&GS(),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.language")&&Nc("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.net.tlsMaxVersion")&&gh("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban")&&At&&ZF()})),t.subscriptions.push(x.workspace.onDidChangeWorkspaceFolders(function(){let g=R();Gt.configure({root:g,rec:k});try{Gt.refresh(g)}catch(v){k("skills_scan_failed",{message:v.message})}if(Sa(g),xe.configure({root:g,version:fs,rec:k}),xe.reload().then(function(v){k("mcp_reload_done",{servers:v.servers.length,tools:v.tools.length})},function(v){k("mcp_reload_failed",{message:v.message})}),Rc("workspace_change"),g!==hm)try{pT(t)}catch(v){k("session_restore_failed",{message:v.message,reason:"workspace_change"})}}));try{let g=x.workspace.getConfiguration("luban").get("autoOpen");k("auto_open_decided",{autoOpen:g}),g!==!1&&setTimeout(function(){x.commands.executeCommand("workbench.view.extension.luban").then(function(){k("auto_open_view",{ok:!0})},function(v){k("auto_open_view",{ok:!1,message:String(v&&v.message)})})},1200)}catch(g){k("auto_open_view",{ok:!1,message:g.message})}c2(t)}function yu(){let t={pass:0,fail:0,failed:[],checks:{}};return t.ok=function(e,n,s){let r=!!n;return r?t.pass++:(t.fail++,t.failed.push(e+(s?" :: "+s:""))),t.checks[e]=r,r},t}function r2(){let t=yu(),e=I.mkdtempSync(D.join(lt.tmpdir(),"luban-fs-op-")),n=function(s,r){let o=D.join(e,s);I.mkdirSync(D.dirname(o),{recursive:!0}),I.writeFileSync(o,r)};try{n("a.js",`const foo1 = 1;
|
|
1139
1139
|
const foo2 = 2;
|
|
1140
1140
|
`),n("src/b.ts",`export const bar = foo1;
|
|
1141
1141
|
`),n("src/deep/c.md",`foo(123)
|
|
@@ -1157,7 +1157,7 @@ const foo2 = 2;
|
|
|
1157
1157
|
+new
|
|
1158
1158
|
*** End Patch`});t.ok("patch_blocked",g.indexOf("\u8DF3\u8FC7")>=0,g);let v=await r("write_file",{path:"npm-cache/_npx/81dd2fe1/patched.js",content:`x
|
|
1159
1159
|
`});t.ok("write_blocked_cache",v.indexOf("\u8DF3\u8FC7")>=0&&v.indexOf("npm-cache")>=0,v);let b=await r("write_file",{path:".m2/repository/org/apache/x/1/pom.xml",content:`x
|
|
1160
|
-
`});t.ok("write_blocked_m2",b.indexOf("\u8DF3\u8FC7")>=0&&b.indexOf(".m2")>=0,b),t.ok("blocked_no_write",!I.existsSync(D.join(e,"node_modules/dep/patch.js"))&&!I.existsSync(D.join(e,"node_modules/dep/new.js"))&&!I.existsSync(D.join(e,"npm-cache/_npx/81dd2fe1/patched.js"))&&!I.existsSync(D.join(e,".m2/repository/org/apache/x/1/pom.xml")));let S=await r("list_files",{dir:"node_modules"});t.ok("list_dir_blocked",S.indexOf("\u8DF3\u8FC7")>=0,S);let _=function(F){return
|
|
1160
|
+
`});t.ok("write_blocked_m2",b.indexOf("\u8DF3\u8FC7")>=0&&b.indexOf(".m2")>=0,b),t.ok("blocked_no_write",!I.existsSync(D.join(e,"node_modules/dep/patch.js"))&&!I.existsSync(D.join(e,"node_modules/dep/new.js"))&&!I.existsSync(D.join(e,"npm-cache/_npx/81dd2fe1/patched.js"))&&!I.existsSync(D.join(e,".m2/repository/org/apache/x/1/pom.xml")));let S=await r("list_files",{dir:"node_modules"});t.ok("list_dir_blocked",S.indexOf("\u8DF3\u8FC7")>=0,S);let _=function(F){return pr.pathGuard(F)};t.ok("cmd_guard_npm_cache",!!_('cat "C:/Users/x/AppData/Local/npm-cache/_npx/a.js"'),""),t.ok("cmd_guard_npx_dir",!!_("find /c/Users/x/.npm/_npx -maxdepth 3 -name y"),""),t.ok("cmd_guard_m2",!!_('find ~/.m2 -name "*.pom"'),""),t.ok("cmd_guard_pwsh",!!_('powershell -NoProfile -Command "Select-String -Path C:\\x\\npm-cache\\_npx\\a.js"'),""),t.ok("cmd_guard_allow_exec",!_("node node_modules/.bin/tsc --noEmit"),""),t.ok("cmd_guard_allow_exclude",!_("grep -rn --exclude-dir=node_modules foo ."),""),t.ok("cmd_guard_allow_findpath",!_('find . -path "./node_modules/*" -prune -o -name "*.js" -print'),"");let C=String(await Xn("run_command",{command:"cat npm-cache/_npx/81dd2fe1/package.json"},e,null,{}));t.ok("cmd_guard_wired",C.indexOf("\u8DF3\u8FC7\u76EE\u5F55")>=0,C);let A=tt("node_modules/dep/index.js",e,!0);t.ok("allowSkipped_bypass",A===D.join(e,"node_modules/dep/index.js"),A)}finally{try{I.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function o2(){let t=yu(),e=I.mkdtempSync(D.join(lt.tmpdir(),"luban-patch-op-")),n=function(r,o){let i=D.join(e,r);I.mkdirSync(D.dirname(i),{recursive:!0}),I.writeFileSync(i,o)},s=function(r){return I.readFileSync(D.join(e,r),"utf8")};try{n("a.js",`const a = 1;
|
|
1161
1161
|
const b = 2;
|
|
1162
1162
|
`),n("old.js",`legacy
|
|
1163
1163
|
`);let r=["*** Begin Patch","*** Add File: new.js","+const fresh = true;","*** Update File: a.js","@@"," const a = 1;","-const b = 2;","+const b = 20;","*** Delete File: old.js","*** End Patch"].join(`
|
|
@@ -1184,20 +1184,20 @@ beta
|
|
|
1184
1184
|
*** Add File: d.js
|
|
1185
1185
|
+b
|
|
1186
1186
|
*** End Patch`)).ok),t.ok("patch_no_begin",!!Bn.parsePatch(`*** Add File: x
|
|
1187
|
-
+y`).error)}finally{try{I.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function i2(){let t=yu(),e=function(a,l,c,u,d){return{severity:a,range:{start:{line:l,character:0},end:{line:l,character:3}},message:c,source:u,code:d}},n={"/a.js":[e(0,9,"Unexpected token '}'","eslint","E999"),e(1,2,"unused var","eslint")],"/b.ts":[e(0,0,"Type error","tsc","TS2345")]},s=
|
|
1187
|
+
+y`).error)}finally{try{I.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function i2(){let t=yu(),e=function(a,l,c,u,d){return{severity:a,range:{start:{line:l,character:0},end:{line:l,character:3}},message:c,source:u,code:d}},n={"/a.js":[e(0,9,"Unexpected token '}'","eslint","E999"),e(1,2,"unused var","eslint")],"/b.ts":[e(0,0,"Type error","tsc","TS2345")]},s=Is.summarize(n);t.ok("lints_summary",s.total===3&&s.error===2&&s.warning===1,JSON.stringify(s));let r=Is.formatLints(n);t.ok("lints_error_first",r.indexOf("ERROR")<r.indexOf("WARNING"),r),t.ok("lints_line_base",/\/a\.js:10:1/.test(r),r),t.ok("lints_source",/\[eslint E999\]/.test(r),r),t.ok("lints_empty",/没有诊断/.test(Is.formatLints({})));let o={"/x.js":[]};for(let a=0;a<30;a++)o["/x.js"].push(e(1,a,"w"+a));let i=Is.formatLints(o,{maxDiags:5});return t.ok("lints_truncate",(i.match(/^WARNING/gm)||[]).length===5,String((i.match(/^WARNING/gm)||[]).length)),t}async function a2(t,e){let n=e||{},s={file:t,ok:!1,trace:[]};if(!t)return s.error="\u7F3A\u5C11 file \u53C2\u6570",s;let r=async function(v,b){try{let S=await b();return s.trace.push(v+":ok"),S}catch(S){s.trace.push(v+":ERR "+String(S&&S.stack||S));try{S.lubanOut=s}catch{}throw S}};try{s.registered=(await x.commands.getCommands(!0)).indexOf("luban.markdownPreview")>=0}catch(v){s.registered="getCommands failed: "+v.message}let o=await r("show",function(){return x.window.showTextDocument(x.Uri.file(t),{preview:!1})});await r("execute",function(){return x.commands.executeCommand("luban.markdownPreview")});let i=Date.now()+15e3;for(;Date.now()<i&&!La;)await new Promise(function(v){setTimeout(v,100)});let a=Date.now()+15e3;for(;Date.now()<a&&!Da;)await new Promise(function(v){setTimeout(v,100)});let l=La;if(!l)return s.error="\u9884\u89C8\u9762\u677F\u6CA1\u8D77\u6765",s;s.opened=!0,s.ready=Da===!0,s.doc=Yo?Yo.fsPath||String(Yo):"";let c=function(v){return new Promise(function(b){setTimeout(b,v)})},u=async function(){N=null;try{l.postMessage({type:"preview_probe"})}catch{return null}let v=await Ae(5e3,function(b){return b.kind==="preview_state"});return v?{scrollTop:v.scrollTop,scrollHeight:v.scrollHeight,follow:v.follow}:null},d=function(v){let b=new x.Position(Math.max(0,Math.min(Number(v)||0,o.document.lineCount-1)),0);o.revealRange(new x.Range(b,b),x.TextEditorRevealType.AtTop)},f=async function(v){N=null;try{l.postMessage({type:"preview_follow",on:v})}catch{return null}let b=await Ae(5e3,function(S){return S.kind==="preview_follow_ok"});return b?{scrollTop:b.scrollTop,follow:b.follow}:null};N=null,l.postMessage({type:"preview_selftest"});let p=await Ae(2e4,function(v){return/^preview_selftest_/.test(String(v.kind||""))});s.selftest=p?{kind:p.kind,n:p.n,total:p.total,value:p.value||"",imgs:p.imgs,imgsLoaded:p.imgsLoaded,anchors:p.anchors,hlSpans:p.hlSpans,srcSample:p.srcSample||""}:{kind:"timeout"};let h=await u();d(n.scrollLine==null?60:n.scrollLine),await c(1200);let m=await u(),y=await f(!1);d(n.holdLine==null?3:n.holdLine),await c(1200);let w=await u(),T=await f(!0);s.scroll={before:h&&h.scrollTop,after:m&&m.scrollTop,frozen:w&&w.scrollTop},s.follow={off:y&&y.follow,on:T&&T.follow},s.checks={opened:!!s.opened,selftest:s.selftest.kind==="preview_selftest_ok",editor_sync:!!h&&!!m&&m.scrollTop>h.scrollTop,follow_off:s.follow.off===!1&&!!w&&!!m&&w.scrollTop===m.scrollTop,follow_on:s.follow.on===!0};let g=Object.keys(s.checks).filter(function(v){return!s.checks[v]});return s.ok=g.length===0,g.length&&(s.error="\u4E0D\u901A\u8FC7\uFF1A"+g.join(",")),s}var l2=["ping","tab_probe","session_probe","review_probe","reset","toggle_session_list","cycle_mode","insert_ref"];function c2(t){let e=Ic+"/cmd.json",n=Ic+"/cmd_result.json";setInterval(async()=>{let s;try{if(!I.existsSync(e))return;s=JSON.parse(I.readFileSync(e,"utf8"))}catch{return}try{I.unlinkSync(e)}catch{}let r={op:s.op||s.cmd,at:new Date().toISOString()};try{if(s.op==="mdpreview"){k("headless_mdpreview_start",{file:String(s.file||"")});try{let o=await a2(String(s.file||""),s);r.ok=o.ok===!0,r.result=o,o.error&&(r.error=o.error),k("headless_mdpreview",{ok:r.ok,selftest:o.selftest&&o.selftest.kind,value:o.selftest&&o.selftest.value,checks:o.checks})}catch(o){r.ok=!1,r.error=String(o&&o.message||o),r.stack=String(o&&o.stack||""),o&&o.lubanOut&&(r.result=o.lubanOut),k("headless_mdpreview",{ok:!1,error:r.error,stack:r.stack.split(`
|
|
1188
1188
|
`).slice(0,4).join(" | ")})}}else if(s.op==="models")r.ok=!0,r.result=es().map(o=>({key:o.key,baseUrl:o.provider.baseUrl,keyFound:!!ei(o.provider),keyless:Qo(o.provider)&&!Fc(o.provider),toolCalling:o.model.toolCalling!==!1,vision:o.model.vision===!0,webSearch:TS(o.provider),webEngine:Jn(o.provider)}));else if(s.op==="i18n"){let o="auto";try{o=x.workspace.getConfiguration("luban").get("language")||"auto"}catch{}r.ok=!0,r.result={lang:rn,setting:o,vscodeLanguage:x.env&&x.env.language||"",samples:{ready:O("panel.statusReady"),send:O("panel.send"),close:O("panel.menuClose"),execPlan:O("cross.execPlan"),saved:O("settings.saved",{n:2}),range7d:O("usage.7d"),lensKeep:O("ext.keepHunk",{add:3,del:1}),execSummary:O("ext.summary.exec",{n:4,s:"1.2"}),queueFull:O("ext.queueFull",{n:20})}}}else if(s.op==="i18nset"){let o=String(s.lang||"auto");await x.workspace.getConfiguration("luban").update("language",o,x.ConfigurationTarget.Global);let i=null;if(Te||ye){let l=XI(s.waitMs||8e3);Nc("headless"),i=await l}else Nc("headless");let a=kS(o,x.env&&x.env.language);r.ok=rn===a&&(Te||ye?!!i:!0),r.result={setting:o,lang:rn,expected:a,ack:i},!r.ok&&!i&&(Te||ye)&&(r.error="\u804A\u5929\u9762\u677F\u6CA1\u6709\u786E\u8BA4\u8BED\u8A00\u5207\u6362")}else if(s.op==="i18ntest"){await ft();let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"i18n_selftest"});let i=await Ae(s.waitMs||15e3,function(a){return String(a.kind||"").indexOf("i18n_selftest")===0});r.ok=!!(i&&i.kind==="i18n_selftest_ok"),i||(r.error="i18n \u81EA\u68C0\u6CA1\u6709\u56DE\u5E94"),r.result={ack:i,lang:rn}}}else if(s.op==="websearch"){let o=mt(s.modelKey),i=await Fh(s.query||"DeepSeek",o,{count:s.count,needContent:!!s.need_content});r.ok=!0,r.result={query:i.query,count:i.results.length,engine:Jn(o&&o.provider),items:i.results.slice(0,5).map(function(a){return{title:a.title,url:a.url,date:a.date,site:a.site_name,score:a.rerank_score}}),text:Dh(i.results,i.query).slice(0,600)}}else if(s.op==="webfetch"){let o=mt(s.modelKey),i=await Lh(s.url,o,{});r.ok=!0,r.result={url:i.url,title:i.title,chars:i.fullChars,head:i.content.slice(0,300),engine:Jn(o&&o.provider)}}else if(s.op==="bingtest"){let o=String(s.case||"parse");if(o==="parse"){let i=["<rss><channel>","<item><title><![CDATA[Node.js <b>v22</b> \u53D1\u5E03]]></title><link>https://nodejs.org/en/blog/keep?a=1&b=2</link>","<description>LTS & Current — \u90FD\u652F\u6301 <script> \u6807\u7B7E</description><pubDate>Fri, 29 Oct 2026 00:00:00 GMT</pubDate></item>","<item><title>\u65E0\u94FE\u63A5\u6761\u76EE</title><link>javascript:alert(1)</link><description>\u5E94\u88AB\u8DF3\u8FC7</description></item>","<item><title>A &amp; B</title><link>http://example.com/x</link><description>\u53CC\u91CD\u7F16\u7801\u5B9E\u4F53</description></item>","</channel></rss>"].join(""),a=OS(i),l=a[0]||{},c=a[1]||{};r.result={count:a.length,firstTitle:l.title,firstUrl:l.url,firstSnippet:l.snippet,secondTitle:c.title,keepUrlAmp:String(l.url||"").indexOf("&b=2")>=0,skippedBadLink:a.length===2,doubleEncoded:String(c.title||"")==="A & B",noDate:l.date===void 0},r.ok=a.length===2&&a[0].title==="Node.js v22 \u53D1\u5E03"&&l.url==="https://nodejs.org/en/blog/keep?a=1&b=2"&&l.snippet.indexOf("LTS & Current")===0&&l.snippet.indexOf("\u2014")>0&&!l.date&&r.result.doubleEncoded}else if(o==="html"){let a=Ra("<html><head><title>\u6807 & \u9898</title><style>p{color:red}</style></head><body><!-- \u6CE8\u91CA --><h1>\u6807\u9898</h1><p>\u7B2C\u4E00\u6BB5 \u6587\u5B57</p><script>alert(1)</script><div>\u7B2C\u4E8C\u6BB5<br>\u6362\u884C</div><noscript>JS</noscript></body></html>");r.result={text:a},r.ok=a===`\u6807\u9898
|
|
1189
1189
|
\u7B2C\u4E00\u6BB5 \u6587\u5B57
|
|
1190
1190
|
\u7B2C\u4E8C\u6BB5
|
|
1191
|
-
\u6362\u884C`}else if(o==="engine"){let a=[{p:{baseUrl:"https://relay.example.com/v1"},want:"bing",label:"\u4EE3\u7406 baseUrl"},{p:{baseUrl:"https://api.deepseek.com/v1"},want:"deepseek",label:"\u5B98\u65B9\u57DF\u540D"},{p:{baseUrl:"https://relay.example.com/v1",webSearch:{baseUrl:"https://relay.example.com/tools"}},want:"deepseek",label:"\u4EE3\u7406\u81EA\u5E26\u534F\u8BAE"},{p:{baseUrl:"https://api.deepseek.com/v1",webSearch:{engine:"bing"}},want:"bing",label:"\u663E\u5F0F bing"},{p:{baseUrl:"https://api.deepseek.com/v1",webSearch:{disabled:!0}},want:"none",label:"\u663E\u5F0F\u5173\u95ED"},{p:null,want:"none",label:"\u65E0 provider"}].map(function(l){return{label:l.label,want:l.want,got:Jn(l.p)}});r.result={cases:a},r.ok=a.every(function(l){return l.got===l.want})}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="agent"){let o=await
|
|
1191
|
+
\u6362\u884C`}else if(o==="engine"){let a=[{p:{baseUrl:"https://relay.example.com/v1"},want:"bing",label:"\u4EE3\u7406 baseUrl"},{p:{baseUrl:"https://api.deepseek.com/v1"},want:"deepseek",label:"\u5B98\u65B9\u57DF\u540D"},{p:{baseUrl:"https://relay.example.com/v1",webSearch:{baseUrl:"https://relay.example.com/tools"}},want:"deepseek",label:"\u4EE3\u7406\u81EA\u5E26\u534F\u8BAE"},{p:{baseUrl:"https://api.deepseek.com/v1",webSearch:{engine:"bing"}},want:"bing",label:"\u663E\u5F0F bing"},{p:{baseUrl:"https://api.deepseek.com/v1",webSearch:{disabled:!0}},want:"none",label:"\u663E\u5F0F\u5173\u95ED"},{p:null,want:"none",label:"\u65E0 provider"}].map(function(l){return{label:l.label,want:l.want,got:Jn(l.p)}});r.result={cases:a},r.ok=a.every(function(l){return l.got===l.want})}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="agent"){let o=await Ns(s.prompt||"hi",{root:s.root||R(),modelKey:s.modelKey,thinking:s.thinking,verbosity:s.verbosity,maxIters:s.maxIters,maxMinutes:s.maxMinutes,history:s.history?Cs((je()||{}).items||[],s.modelKey,{resolveImage:As(je())}).messages:[]});r.ok=!0,r.result={text:o.text.slice(0,800),reasoning:String(o.reasoning||"").slice(0,800),iters:o.iters,modelKey:o.modelKey,stop:o.stop,tools:o.log,usage:o.usage}}else if(s.op==="plan"){let o=await Ns(s.prompt||"hi",{root:s.root||R(),modelKey:s.modelKey,mode:"plan",history:s.history?Cs((je()||{}).items||[],s.modelKey,{resolveImage:As(je())}).messages:[]}),i=je(),a=tT(o.text,{prompt:s.prompt,workspace:s.root||R(),modelKey:s.modelKey,session:i?i.id:""}),l=sn.parsePlanSteps(o.text);r.ok=!0,r.result={text:o.text.slice(0,1200),iters:o.iters,file:a,tools:o.log.map(function(c){return c.name+" "+c.path}),usage:o.usage,todos:l,todoCount:l.length}}else if(s.op==="todotest"){let o=s.case||"all",i=[],a=function(l,c,u){i.push({name:l,ok:!!c,detail:u})};if(o==="all"||o==="parse"){let l=s.md||[`## \u76EE\u6807
|
|
1192
1192
|
\u505A X`,"## \u6B65\u9AA4","1. \u6539 a.js","2. \u8DD1\u6D4B\u8BD5",`## \u9A8C\u8BC1\u65B9\u5F0F
|
|
1193
1193
|
\u770B\u8F93\u51FA`].join(`
|
|
1194
|
-
`),c=sn.parsePlanSteps(l);a("parse",c.length===2&&c[0].id==="t1",c)}if(o==="all"||o==="merge"){let l=sn.merge([{id:"t1",content:"A",status:"pending"}],[{id:"t1",content:"A",status:"completed"},{id:"t2",content:"B",status:"in_progress"}],{merge:!0});a("merge",l.length===2&&l[0].status==="completed"&&l[1].status==="in_progress",l)}if(o==="all"||o==="normalize"){let l=sn.normalize([{id:"a",content:"A",status:"in_progress"},{id:"b",content:"B",status:"in_progress"}]);a("normalize",l[0].status==="in_progress"&&l[1].status==="pending",l)}r.ok=i.every(function(l){return l.ok}),r.result={checks:i,pass:i.filter(function(l){return l.ok}).length}}else if(s.op==="subagent"){let o=[],i=function(A,F,B){o.push({name:A,ok:!!F,detail:B})},a=function(A){return(Array.isArray(A)?A:[]).map(function(F){return String(F.function&&F.function.name||"")})},l=s.root||R(),c=mt(s.modelKey),u=["write_file","replace_in_file","apply_patch","delete_file","move_file"],d=a(tm);i("exploreTools",d.indexOf("read_file")>=0&&d.indexOf("grep")>=0&&u.every(function(A){return d.indexOf(A)<0})&&["ask_question","todo_write","explore"].every(function(A){return d.indexOf(A)<0}),d),i("planHasExplore",a(m_).indexOf("explore")>=0);let f=a(
|
|
1195
|
-
`).pop()===b,b),i("subagentCaveat",Zr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\uFF0C\u6211\u6309\u89C4\u5219\u672A\u771F\u6B63\u6267\u884C\u3002",[]).indexOf("\u4E00\u6B21\u5DE5\u5177\u90FD\u6CA1\u8C03\u7528")>=0&&Zr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\uFF0C\u6211\u6309\u89C4\u5219\u672A\u771F\u6B63\u6267\u884C\u3002",[{name:"read_file",ok:!0}]).indexOf("\u7B49\u4E8E\u6CA1\u6709\u9A8C\u8BC1")>=0&&Zr("README \u91CC\u6CA1\u6709\u8BE5\u51FD\u6570\u3002",[{name:"read_file",ok:!0}])===""&&Zr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\u3002",[{name:"run_command",ok:!1}])==="",Zr("x",[]).slice(0,60));let _=Ka([{promptTokens:100,completionTokens:10},{promptTokens:30,completionTokens:5,subagent:!0}],65536,"selftest");i("usageMerged",_.requests===2&&_.promptTokens===130&&_.subagentRequests===1&&_.contextTokens===110,_),i("noWriteNudge",Oc([{name:"explore",ok:!0}])&&!Oc([{name:"explore",ok:!1}])&&!Oc([{name:"read_file",ok:!0}])&&!x_([{name:"explore",ok:!0}]));let C=o.filter(function(A){return!A.ok}).map(function(A){return A.name});r.ok=C.length===0,r.error=C.length?"failed: "+C.join(","):void 0,r.result={checks:o,pass:o.length-C.length,total:o.length},k("headless_subagent",{ok:r.ok,failed:C})}else if(s.op==="cursorplans")if(s.file){let o=await dT(String(s.file));r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else{let o=
|
|
1194
|
+
`),c=sn.parsePlanSteps(l);a("parse",c.length===2&&c[0].id==="t1",c)}if(o==="all"||o==="merge"){let l=sn.merge([{id:"t1",content:"A",status:"pending"}],[{id:"t1",content:"A",status:"completed"},{id:"t2",content:"B",status:"in_progress"}],{merge:!0});a("merge",l.length===2&&l[0].status==="completed"&&l[1].status==="in_progress",l)}if(o==="all"||o==="normalize"){let l=sn.normalize([{id:"a",content:"A",status:"in_progress"},{id:"b",content:"B",status:"in_progress"}]);a("normalize",l[0].status==="in_progress"&&l[1].status==="pending",l)}r.ok=i.every(function(l){return l.ok}),r.result={checks:i,pass:i.filter(function(l){return l.ok}).length}}else if(s.op==="subagent"){let o=[],i=function(A,F,B){o.push({name:A,ok:!!F,detail:B})},a=function(A){return(Array.isArray(A)?A:[]).map(function(F){return String(F.function&&F.function.name||"")})},l=s.root||R(),c=mt(s.modelKey),u=["write_file","replace_in_file","apply_patch","delete_file","move_file"],d=a(tm);i("exploreTools",d.indexOf("read_file")>=0&&d.indexOf("grep")>=0&&u.every(function(A){return d.indexOf(A)<0})&&["ask_question","todo_write","explore"].every(function(A){return d.indexOf(A)<0}),d),i("planHasExplore",a(m_).indexOf("explore")>=0);let f=a(lr("explore",c));i("exploreNoMcp",f.every(function(A){return A.indexOf("mcp__")!==0}),f),i("exploreNoWrite",f.every(function(A){return u.indexOf(A)<0})&&f.indexOf("read_skill")>=0),i("readonlyGate",js("explore",!1)&&js("explore",!0)&&!js("plan",!1)&&js("plan",!0)&&!js("agent",!0));let p=async function(A){try{return await A(),""}catch(F){return String(F&&F.message||F)}},h=await p(function(){return Xn("explore",{description:"x",prompt:"y"},l,c,{mode:"explore",inSubagent:!0,subBudget:{max:4,left:4}})});i("nestedBlocked",h.indexOf("\u4E0D\u80FD\u518D\u6D3E\u5B50\u4EE3\u7406")>=0,h);let m=await p(function(){return Xn("explore",{description:"x",prompt:"y"},l,c,{mode:"agent",subBudget:{max:4,left:0}})});i("quotaBlocked",m.indexOf("\u6B21\u6570\u5DF2\u7528\u5B8C")>=0,m);let y=await p(function(){return Xn("ask_question",{questions:[]},l,c,{mode:"explore"})});i("askBlocked",y.indexOf("\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE")>=0,y);let w=await p(function(){return Xn("todo_write",{todos:[]},l,c,{mode:"explore",todosState:{items:[]}})});i("todoBlocked",w.indexOf("\u4E0D\u80FD\u7528 todo_write")>=0,w);let T=await Xn("run_command",{command:"rm -rf subagent-selftest"},l,c,{mode:"explore"});i("writeCmdBlocked",String(T).indexOf("\u5B50\u4EE3\u7406\u53EA\u5141\u8BB8\u53EA\u8BFB\u547D\u4EE4")>=0,String(T).slice(0,120));let g=new Array(Ia+50).join("a"),v=zc(g);i("resultCapped",v.length>Ia&&v.indexOf("\u5DF2\u622A\u65AD")>=0&&zc("\u77ED\u7ED3\u8BBA")==="\u77ED\u7ED3\u8BBA"),i("explorePromptGuards",ja.indexOf("\u5FC5\u987B\u6765\u81EA\u771F\u5B9E\u8C03\u7528")>=0&&ja.indexOf("\u7981\u6B62\u628A\u9884\u671F\u5199\u6210\u7ED3\u679C")>=0&&ja.indexOf("\u4E0D\u8981\u5728\u7ED3\u8BBA\u91CC\u6E05\u70B9")>=0);let b=Gc(!0),S=Gc(!1);i("exploreToolList",b.indexOf("\u5171 15 \u4E2A")>=0&&b.indexOf("read_skill")>=0&&b.indexOf("read_rule")>=0&&S.indexOf("\u5171 13 \u4E2A")>=0&&S.indexOf("web_search")<0&&String(cr("explore","/tmp",!0)).split(`
|
|
1195
|
+
`).pop()===b,b),i("subagentCaveat",Zr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\uFF0C\u6211\u6309\u89C4\u5219\u672A\u771F\u6B63\u6267\u884C\u3002",[]).indexOf("\u4E00\u6B21\u5DE5\u5177\u90FD\u6CA1\u8C03\u7528")>=0&&Zr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\uFF0C\u6211\u6309\u89C4\u5219\u672A\u771F\u6B63\u6267\u884C\u3002",[{name:"read_file",ok:!0}]).indexOf("\u7B49\u4E8E\u6CA1\u6709\u9A8C\u8BC1")>=0&&Zr("README \u91CC\u6CA1\u6709\u8BE5\u51FD\u6570\u3002",[{name:"read_file",ok:!0}])===""&&Zr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\u3002",[{name:"run_command",ok:!1}])==="",Zr("x",[]).slice(0,60));let _=Ka([{promptTokens:100,completionTokens:10},{promptTokens:30,completionTokens:5,subagent:!0}],65536,"selftest");i("usageMerged",_.requests===2&&_.promptTokens===130&&_.subagentRequests===1&&_.contextTokens===110,_),i("noWriteNudge",Oc([{name:"explore",ok:!0}])&&!Oc([{name:"explore",ok:!1}])&&!Oc([{name:"read_file",ok:!0}])&&!x_([{name:"explore",ok:!0}]));let C=o.filter(function(A){return!A.ok}).map(function(A){return A.name});r.ok=C.length===0,r.error=C.length?"failed: "+C.join(","):void 0,r.result={checks:o,pass:o.length-C.length,total:o.length},k("headless_subagent",{ok:r.ok,failed:C})}else if(s.op==="cursorplans")if(s.file){let o=await dT(String(s.file));r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else{let o=yr.listPlans({home:lt.homedir(),root:R()}),i=Math.max(1,Math.min(20,Number(s.limit)||5));r.ok=!0,r.result={count:o.length,plans:o.slice(0,i).map(function(a){let l=yr.readPlan(a.file);return{file:a.file,name:a.name,scope:a.scope,size:a.size,mtimeMs:a.mtimeMs,bodyChars:l.ok?l.body.length:-1,todos:l.ok?l.todos.length:-1,error:l.ok?"":l.error}})}}else if(s.op==="answerask"){let o=String(s.id||"");if(!o){let u=[];Zn.forEach(function(d,f){u.push(f)}),o=u.length?u[u.length-1]:""}let i=je(),a=String(s.sessionId||i&&i.id||""),l=o?Zn.get(o):null,c=lT(o,s.answers||{q1:"yes"},a);r.ok=!!c.ok,c.ok||(r.error=c.error),r.result={id:o,text:c.text||"",hadPending:!!l,pendingLeft:Zn.size}}else if(s.op==="askq"){let o=s.case||"all",i=[],a=function(l,c,u){i.push({name:l,ok:!!c,detail:u})};if(o==="all"||o==="normalize"){let l=!1,c=null;try{let u=Ms.normalize({title:"\u65B9\u5411",questions:[{id:"q1",prompt:"\u8981\u4E0D\u8981\uFF1F",options:[{id:"yes",label:"\u8981"},{id:"no",label:"\u4E0D\u8981"}]}]});l=u.questions.length===1&&!Ms.needsConfirm(u),c=u}catch(u){c=u.message}a("normalize",l,c)}if(o==="all"||o==="reject"){let l=!1;try{Ms.normalize({questions:[{prompt:"x",options:[{id:"a",label:"A"}]}]})}catch{l=!0}a("reject",l,null)}if(o==="all"||o==="answers"){let l=!1,c=null;try{let u=Ms.normalize({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),d=Ms.normalizeAnswers(u,{a:"x"}),f=Ms.formatAnswers(u,d);l=d.a==="x"&&f.indexOf("\u7528\u6237\u56DE\u7B54")>=0,c={ans:d,text:f}}catch(u){c=u.message}a("answers",l,c)}r.ok=i.every(function(l){return l.ok}),r.result={checks:i,pass:i.filter(function(l){return l.ok}).length}}else if(s.op==="viewplan"){await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500));let o=De(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"synthetic_ask",prompt:s.prompt||"hi",mode:"plan"});let i=Date.now()+(s.waitMs||12e4),a=null;for(;Date.now()<i;)if(await new Promise(u=>setTimeout(u,1e3)),N&&(N.kind==="plan_done"||N.kind==="dome_error")){a=N;break}let l=oo(o),c=l?Ga.get(l.id):null;r.ok=!!a,r.result={ack:a,planChars:c?c.text.length:0,planFile:c?c.file:""}}}else if(s.op==="imetest"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=["composing","bypass_before","bypass_after","plain"],a={composing:"ime_blocked_ok",plain:"ime_sent_ok",bypass_before:"ime_bypass_blocked_ok",bypass_after:"ime_bypass_blocked_ok"},l={};for(let c of i){N=null,o.postMessage({type:"selftest_ime",case:c});let u=Date.now()+2e4,d=null;for(;Date.now()<u;)if(await new Promise(f=>setTimeout(f,500)),N&&N.kind&&N.kind.indexOf("ime_")===0){d=N;break}l[c]=d?d.kind:"timeout",await new Promise(f=>setTimeout(f,200))}r.ok=i.every(function(c){return l[c]===a[c]}),r.result=l,o.postMessage({type:"reset"})}}else if(s.op==="viewexecute"){let o=De(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null;let i=oo(o),a=i?Ga.get(i.id):null;o.postMessage({type:"execute_plan",plan:s.plan||(a?a.text:""),planFile:s.planFile||(a?a.file:""),modelKey:s.modelKey});let l=Date.now()+(s.waitMs||18e4),c=null;for(;Date.now()<l;)if(await new Promise(u=>setTimeout(u,1e3)),N&&(N.kind==="dome_done"||N.kind==="dome_error")){c=N;break}r.ok=!!c,r.result={ack:c}}}else if(s.op==="reftest"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=s.case||"file";N=null,o.postMessage({type:"ref_selftest",case:i});let a=Date.now()+(s.waitMs||15e3),l=null;for(;Date.now()<a;)if(await new Promise(c=>setTimeout(c,300)),N&&N.kind&&N.kind.indexOf("ref_")===0){l=N;break}r.ok=!!(l&&/_ok$/.test(l.kind)),r.result=l||{kind:"timeout"}}}else if(s.op==="insertref"){await ft();let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=R(),a=Array.isArray(s.paths)&&s.paths.length?s.paths:["package.json"],l=a.map(function(c){return FS(D.resolve(i,c),i)});if(l.some(function(c){return!c}))r.ok=!1,r.error="\u5B58\u5728\u65E0\u6CD5\u751F\u6210 token \u7684\u8DEF\u5F84\uFF08\u4E0D\u5B58\u5728\u6216\u7279\u6B8A\u7C7B\u578B\uFF09";else{let c=l.join("");N=null,o.postMessage({type:"insert_ref",text:c,n:a.length});let u=await Ae(s.waitMs||8e3,function(d){return d.kind==="insert_ref"});r.ok=!!(u&&(u.n===c.length||u.n===c.length+1)),r.result={ack:u,text:c},k("headless_insertref",{ok:r.ok,n:c.length,ack:u&&u.n})}}}else if(s.op==="seladd")try{let o=s.root||R(),i=tt(s.file||"a.ts",o),a=await x.workspace.openTextDocument(x.Uri.file(i)),l=await x.window.showTextDocument(a,{preview:!1,viewColumn:x.ViewColumn.One}),c=Math.max((s.startLine||1)-1,0),u=Math.min(s.endLine||c+2,Math.max(a.lineCount-1,0)),d=new x.Selection(new x.Position(c,0),new x.Position(u,0));l.selection=d,Oa(l),await new Promise(p=>setTimeout(p,300)),await ft();let f=De(s.to);if(!f)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let p=s.waitMs||8e3;N=null,f.postMessage({type:"ref_selftest",case:"clear"}),await Ae(p,function(_){return _.kind==="ref_clear_ok"}),N=null,await x.commands.executeCommand("luban.addSelectionToChat");let h=await Ae(p,function(_){return _.kind==="insert_ref"});N=null,f.postMessage({type:"ref_selftest",case:"input"});let m=await Ae(p,function(_){return _.kind==="ref_input_ok"}),y=String(m&&m.value||"").trim(),w=y?to(y,o):{refs:[],text:""},T=w.refs[0]||null,v=(a.getText(new x.Range(d.start,d.end)).split(`
|
|
1196
1196
|
`).find(function(_){return _.trim()})||"").trim(),b=!!v&&String(w.text).indexOf(v)>=0,S=d.end.character===0&&u>c?u:u+1;r.ok=!!(h&&/^#selection .+:\d+-\d+$/.test(y)&&T&&T.kind==="selection"&&T.startLine===c+1&&T.endLine===S&&b),r.result={insertAck:h||null,token:y,ref:T,selectedRange:[c+1,S],injectedHasSelectedText:b},k("headless_seladd",{ok:r.ok,token:y,ack:h&&h.n})}}catch(o){r.ok=!1,r.error=o.message}else if(s.op==="webtest"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"web_selftest"});let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind&&N.kind.indexOf("web_")===0){a=N;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"}}}else if(s.op==="mdtest"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"markdown_selftest"});let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind&&N.kind.indexOf("md_")===0){a=N;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"}}}else if(s.op==="tooltest"){await ft();let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"tool_selftest"});let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind&&N.kind.indexOf("tool_")===0){a=N;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"},k("headless_tooltest",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="viewscroll"){await ft();let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"scroll_selftest"});let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind&&N.kind.indexOf("scroll_")===0){a=N;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"},k("headless_viewscroll",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="thinktest"){await ft();let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"think_selftest"});let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind&&N.kind.indexOf("think_")===0){a=N;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"},k("headless_thinktest",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="seltest"){let o,i,a=[],l="",c="";try{let u=s.root||R(),d=tt(s.file||"a.ts",u),f=await x.workspace.openTextDocument(x.Uri.file(d)),p=await x.window.showTextDocument(f,{preview:!1,viewColumn:x.ViewColumn.One}),h=Math.max((s.startLine||1)-1,0),m=Math.min(s.endLine||h+2,Math.max(f.lineCount-1,0)),y=new x.Selection(new x.Position(h,0),new x.Position(m,0));p.selection=y,Oa(p),await new Promise(S=>setTimeout(S,400)),i=DS(),c=f.getText(new x.Range(y.start,y.end));let w=to("#selection \u89E3\u91CA\u8FD9\u6BB5",u);a=w.refs,l=w.text;let T=De(s.to);if(T){N=null,T.postMessage({type:"ref_selftest",case:"button"});let S=Date.now()+12e3;for(;Date.now()<S;)if(await new Promise(_=>setTimeout(_,300)),N&&N.kind&&N.kind.indexOf("ref_selftest_button")===0){o=N;break}}let g=(c.split(`
|
|
1197
|
-
`).find(function(S){return S.trim()})||"").trim(),v={ok:!0,skipped:!0,ranges:[]};if(Math.max(f.lineCount,1)>=4){let S=Yn(d,u),_=to("#selection "+S+":1-2 \u548C #selection "+S+":3-4",u);v={ok:_.refs.length===2&&_.refs[0].kind==="selection"&&_.refs[1].kind==="selection"&&_.refs[0].startLine===1&&_.refs[0].endLine===2&&_.refs[1].startLine===3&&_.refs[1].endLine===4,ranges:_.refs.map(function(C){return C.startLine+"-"+C.endLine})}}r.ok=!!(i&&i.hasEditor&&i.hasSelection&&i.startLine===h+1&&i.endLine===(y.end.character===0&&m>h?m:m+1)&&a.length===1&&a[0].kind==="selection"&&g&&l.indexOf(g)>=0&&o&&o.kind==="ref_selftest_button_ok"&&v.ok),r.result={info:i,selectedRange:[h+1,i&&i.endLine],selectedChars:c.length,ref:a[0]||null,injectedChars:l.length,injectedHasSelectedText:!!g&&l.indexOf(g)>=0,multiSelection:v,buttonAck:o||{kind:"timeout"}}}catch(u){r.ok=!1,r.error=u.message}}else if(s.op==="refs"){let o=to(s.prompt||"",s.root||R(),{window:s.window}),i=String(o.text||"");r.ok=!0,r.result={refs:o.refs,chars:i.length,text:i.slice(0,800),hasBatches:/分批处理(共\s*\d+\s*批)/.test(i),hasSearchDirHint:/search_code/.test(i)&&/dir=/.test(i)}}else if(s.op==="listfiles"){let o=await MN(),i=await CN();r.ok=!0,r.result={total:o.length,files:o.slice(0,20),dirTotal:i.length,dirs:i.slice(0,20)}}else if(s.op==="settings")r.ok=!0,r.result={path:ht,source:Zo,defaultModel:Vt.defaultModel,providers:(Vt.providers||[]).map(o=>({id:o.id,models:(o.models||[]).map(i=>i.id),keyFound:!!ei(o),keyless:Qo(o)&&!Fc(o),inline:!!o.apiKey,secret:!!ps[o.id],env:!!Ja(o)}))};else if(s.op==="saveconfig"){let o=await T_(t,s.config||Jc().config);r.ok=!!o.ok,o.ok||(r.error=(o.errors||[]).join("; ")),r.result={path:o.path,defaultModel:o.defaultModel,models:o.models,errors:o.errors}}else if(s.op==="testprovider"){let o=await M_(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="fetchmodels"){let o=await um(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="webdav"){let o=String(s.case||"config");if(o==="config"){let i=await Ha(t);r.ok=!0,r.result={path:i.path,url:i.config.url,enabled:i.config.enabled,remoteDir:i.config.remoteDir,includes:i.config.includes,hasPassword:i.hasPassword,busy:i.busy}}else if(o==="config_bad"){let i=JSON.stringify(Mn.loadConfig()),a=await fm(t,{config:Object.assign({},Mn.loadConfig(),{url:"ftp://not-a-webdav"})});r.ok=!a.ok&&JSON.stringify(Mn.loadConfig())===i,r.result={errors:a.errors||[],unchanged:JSON.stringify(Mn.loadConfig())===i},a.ok&&(r.error="\u975E\u6CD5\u914D\u7F6E\u88AB\u63A5\u53D7\u4E86")}else if(o==="mock_roundtrip"||o==="restore_policy"){let i=await D_(o);r.ok=!!i.ok,r.result=i.result,i.ok||(r.error=i.error||"\u81EA\u68C0\u672A\u901A\u8FC7")}else r.ok=!1,r.error="\u672A\u77E5 case\uFF1A"+o}else if(s.op==="opensettings"){pm(t),N=null;let o=Date.now()+(s.waitMs||2e4),i=null;for(;Date.now()<o;)if(await new Promise(a=>setTimeout(a,500)),N&&N.kind==="settings_rendered"){i=N;break}r.ok=!!i,r.result={ack:i,path:ht}}else if(s.op==="chat"){let o=await ti([{role:"user",content:s.prompt||"hi"}],s.modelKey,{thinking:s.thinking});r.ok=!0,r.result={modelKey:o.target.key,reply:o.content.slice(0,400),chars:o.content.length,reasoning:String(o.reasoning||"").slice(0,400),thinking:o.thinking||"none"}}else if(s.op==="runcmd"){let o=await KS(s.command||"echo hi",s.root||R(),s.timeout_ms);r.ok=!0,r.result=o}else if(s.op==="runcmd_async"){let o=String(s.case||"start_poll_stop"),i=String(s.sessionId||"test_async_"+Date.now().toString(36)),a=s.root||R();if(o==="start_poll_stop"){let l=ke.start(i,s.command||"sleep 0.4; echo ASYNC_OK",{cwd:a,timeout_ms:s.timeout_ms||3e4});if(!l.ok)r.ok=!1,r.error=l.error,r.result=l;else{let c=await ke.poll(i,l.job_id,{wait_ms:0,tail_chars:200}),u=await ke.poll(i,l.job_id,{wait_ms:5e3,tail_chars:800}),d=ke.stop(i,l.job_id);ke.clearSession(i),r.ok=!!(l.ok&&u.status==="exited"&&String(u.out_tail||"").indexOf("ASYNC_OK")>=0&&(d.status==="already_done"||d.status==="stopped")),r.result={started:l,mid:c,done:u,stopped:d}}}else if(o==="concurrency"){let l=ke.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),c=ke.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),u=ke.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),d=ke.runningCount(i);ke.clearSession(i),r.ok=!!(l.ok&&c.ok&&!u.ok&&d===2&&String(u.error||"").indexOf("\u4E0A\u9650")>=0),r.result={a:l,b:c,c:u,running:d}}else if(o==="session_scope"){let l=i+"_a",c=i+"_b",u=ke.start(l,"sleep 2",{cwd:a,timeout_ms:1e4}),d=await ke.poll(c,u.job_id,{wait_ms:0});ke.clearSession(l),ke.clearSession(c),r.ok=!!(u.ok&&d.status==="missing"),r.result={a:u,cross:d}}else if(o==="cancel"){let l=ke.start(i,"sleep 5",{cwd:a,timeout_ms:2e4}),c=ke.stopAll(i),u=await ke.poll(i,l.job_id,{wait_ms:0});ke.clearSession(i),r.ok=!!(l.ok&&c.stopped>=1&&u.status==="stopped"),r.result={a:l,killed:c,after:u}}else if(o==="plan_deny"){let l=fr.check(s.command||"touch /tmp/luban_async_deny");r.ok=!l.ok,r.result={verdict:l.ok?"allow":"deny",reason:l.reason,segment:l.segment}}else if(o==="tail_utf8"){let l=ke.start(i,"printf '\u{1F600}\u{1F600}\u{1F600}'",{cwd:a,timeout_ms:15e3}),c=await ke.poll(i,l.job_id,{wait_ms:5e3,tail_chars:3}),u=await ke.poll(i,l.job_id,{wait_ms:0,tail_chars:4});ke.clearSession(i);let d=String(c.out_tail||""),f=!1;for(let p=0;p<d.length;p++){let h=d.charCodeAt(p);if(h>=55296&&h<=56319){let m=d.charCodeAt(p+1);if(!(m>=56320&&m<=57343)){f=!0;break}p++}else if(h>=56320&&h<=57343){f=!0;break}}r.ok=!!(l.ok&&c.status==="exited"&&c.out_tail==="\u{1F600}"&&!f&&u.out_tail==="\u{1F600}\u{1F600}"),r.result={started:l,cut:c,pair:u,lone:f}}else if(o==="timeout"){let l=ke.start(i,"sleep 5",{cwd:a,timeout_ms:400}),c=await ke.poll(i,l.job_id,{wait_ms:3e3});ke.clearSession(i),r.ok=!!(l.ok&&c.status==="timeout"),r.result={started:l,done:c}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="filesearch")r.result=r2(),r.ok=r.result.fail===0,r.ok||(r.error="filesearch \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="patch")r.result=o2(),r.ok=r.result.fail===0,r.ok||(r.error="patch \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="lints")r.result=i2(),r.ok=r.result.fail===0,r.ok||(r.error="lints \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="fs")try{let o=await Xn(s.tool||"read_file",s.args||{},s.root||R(),null,{readMax:s.readMax});r.ok=!0,r.result={allowOutside:Ch(),text:String(o).slice(0,2e3)}}catch(o){r.ok=!1,r.error=o.message,r.result={allowOutside:Ch()}}else if(s.op==="fsskip")r.result=await wT(),r.ok=r.result.fail===0,r.ok||(r.error="fsskip \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="review")r.ok=!0,r.result={total:ls(),files:mh()};else if(s.op==="reviewdoc"){let o=tt(s.path,R()),i=await x.workspace.openTextDocument(x.Uri.from({scheme:"luban-before",path:o})),a=de.get(o);r.ok=!0,r.result={lines:i.lineCount,text:i.getText().slice(0,2e3),matchesBaseline:!!a&&i.getText()===a.baseline}}else if(s.op==="reviewui"){let o=tt(s.path,R()),i=x.Uri.file(o),a=await x.workspace.openTextDocument(i);await x.window.showTextDocument(a,{preview:!1,viewColumn:x.ViewColumn.One}),await new Promise(p=>setTimeout(p,600));let l=async function(p){try{return await x.commands.executeCommand("vscode.executeCodeLensProvider",p)||[]}catch{return[]}},c=function(p){return p.map(function(h){return{line:h.range?h.range.start.line+1:-1,title:h.command&&h.command.title,command:h.command&&h.command.command}})},u=await l(i),d=x.Uri.from({scheme:"luban-before",path:o}),f=await l(d);r.ok=!0,r.result={codeLensCount:u.length,codeLenses:c(u),beforeCodeLensCount:f.length,beforeCodeLenses:c(f),visible:x.window.visibleTextEditors.some(function(p){return p.document.uri.scheme==="file"&&p.document.uri.fsPath===o})}}else if(s.op==="reviewdiff"){let o=tt(s.path,R());if(!de.has(o))r.ok=!1,r.error="\u6CA1\u6709\u5F85\u5BA1\u9605\u6539\u52A8: "+s.path;else{let i=function(){let c=[];for(let u of x.window.tabGroups.all)for(let d of u.tabs){let f=d.input||{};!f.modified||!f.original||f.modified.fsPath===o&&c.push({title:d.label,originalScheme:f.original.scheme,modifiedScheme:f.modified.scheme,active:d.isActive,preview:d.isPreview})}return c};s.open!==!1&&(await Yh(o,{preview:!0,preserveFocus:!0}),await new Promise(c=>setTimeout(c,400)));let a=i(),l={tabs:a,diffTabs:a.length,pending:ls(),frozenCount:vn.size,autoOpen:tu(),contextActive:!!Wa(Ua())};if(s.accept){let c=de.has(o)?de.get(o).baseline:"";await Ba("accept_file",o,""),await new Promise(f=>setTimeout(f,400));let u=i();l.afterAcceptTabs=u.length,l.afterAcceptPinned=u.length===1&&u[0].preview===!1,l.afterAcceptPending=ls();let d="";try{d=(await x.workspace.openTextDocument(x.Uri.from({scheme:"luban-before",path:o}))).getText()}catch{d=""}l.afterAcceptBeforeHasText=d.length>0,l.afterAcceptBeforeMatches=d===c,l.frozenCount=vn.size,l.afterAcceptContext=!!Wa(Ua())}r.ok=a.length>0,r.ok||(r.error="\u6CA1\u627E\u5230\u8BE5\u6587\u4EF6\u7684 diff \u6807\u7B7E"),r.result=l}}else if(s.op==="reviewfocus"){if(s.focus!==!1){try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}await new Promise(function(i){setTimeout(i,800)})}let o=De(s.to||"view")||tn();if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=null;s.focusInput===!0&&(N=null,o.postMessage({type:"focus_input"}),i=await Ae(s.waitMs||8e3,function(c){return c.kind==="focus_input"})?!0:null,await new Promise(function(c){setTimeout(c,200)})),N=null,o.postMessage({type:"focus_probe"});let a=await Ae(s.waitMs||8e3,function(l){return l.kind==="focus_probe"});r.ok=!!a,r.ok||(r.error="focus_probe \u8D85\u65F6"),r.result={hasFocus:!!(a&&a.hasFocus),tracked:Fa.get(o)===!0,maximized:!!(a&&a.maximized),extMaximized:xa(),inputFocused:!!(a&&a.inputFocused),inputFocusSet:i,pendingAutoDiff:nn.size,widths:a&&a.widths||null}}}else if(s.op==="reviewmax"){r.ok=!0;let o=function(){let l=s.pattern||"maxim";try{return new RegExp(String(l),"i")}catch{return/maxim/i}}(),i=[];try{i=(await x.commands.getCommands(!0)).filter(function(c){return o.test(c)}).slice(0,Math.max(1,Math.min(200,Number(s.limit)||20)))}catch(l){i=["<getCommands \u5931\u8D25: "+l.message+">"]}let a=De(s.to||"view")||tn();if(!a)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else if(s.list===!0)r.result={maxCmds:i,pattern:String(s.pattern||"maxim"),marker:"REVIEWMAX_LIST_V4"};else if(s.simulate!=null){let l=s.simulate===!0;si.set(a,l),l||t_(),await new Promise(function(c){setTimeout(c,400)}),r.result={simulated:l,maximized:xa(),pendingAutoDiff:nn.size,tracked:Fa.get(a)===!0}}else try{let l=["workbench.action.toggleMaximizedAuxiliaryBar","workbench.action.toggleMaximizedPanel"],c=s.cmd||l.find(function(p){return i.indexOf(p)!==-1})||l[1],u=!1;if(s.force!==!0){N=null,a.postMessage({type:"focus_probe"});let p=await Ae(s.waitMs||8e3,function(h){return h.kind==="focus_probe"});u=!!(p&&p.maximized)}r.diag={maxCmds:i,target:c,alreadyMaximized:u};let d=s.args==null?[]:Array.isArray(s.args)?s.args:[s.args];r.diag.args=d;let f=async function(){s.cmd?await Promise.race([Promise.resolve(x.commands.executeCommand(c,...d)).then(function(){return"<done>"}),new Promise(function(h){setTimeout(function(){h("<timeout>")},s.timeoutMs||6e3)})])==="<timeout>"&&(r.diag.timeout=!0):await x.commands.executeCommand(c)};if(u||(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(function(p){setTimeout(p,600)}),await f(),await new Promise(function(p){setTimeout(p,800)})),s.ack===!1)r.result={skippedAck:!0,extMaximized:xa(),pendingAutoDiff:nn.size};else{N=null,a.postMessage({type:"focus_probe"});let p=await Ae(s.waitMs||8e3,function(h){return h.kind==="focus_probe"});r.ok=!!p,r.ok||(r.error="focus_probe \u8D85\u65F6"),r.result={maximized:!!(p&&p.maximized),extMaximized:xa(),tracked:Fa.get(a)===!0,pendingAutoDiff:nn.size,widths:p&&p.widths||null}}}catch(l){r.ok=!1,r.error="toggleMaximized \u4E0D\u53EF\u7528\uFF1A"+l.message,r.result={maximized:!1}}}else if(s.op==="reviewrender"){let o=De(s.to);if(o||(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500)),o=De(s.to)),!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{o.postMessage(qa()),await new Promise(l=>setTimeout(l,400)),N=null,o.postMessage({type:"review_probe"});let i=Date.now()+(s.waitMs||1e4),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind==="review_probe"){a=N;break}r.ok=!!a,r.result=a||{kind:"timeout"}}}else if(s.op==="reviewdeco"){let o=tt(s.path,R()),i=de.get(o);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u5F85\u5BA1\u9605\u6539\u52A8: "+s.path;else{let a=await x.workspace.openTextDocument(x.Uri.file(o)),l=o_(a,i);r.ok=!0,r.result={addDecorations:l.added.length,delDecorations:l.removed.length,spans:l.spans,docLines:a.lineCount}}}else if(s.op==="reviewtabs"){let o=[];for(let i of x.window.tabGroups.all)for(let a of i.tabs){let l=a.input||{};!l.modified||!l.original||o.push({path:l.modified.fsPath||l.modified.path||"",title:a.label,originalScheme:l.original.scheme,modifiedScheme:l.modified.scheme,active:a.isActive,preview:a.isPreview})}r.ok=!0,r.result={tabs:o,diffTabs:o.length,frozenCount:vn.size,pending:ls()}}else if(s.op==="setcfg"){let o=String(s.key||"");if(o.indexOf("luban.")!==0||!o.slice(6))r.ok=!1,r.error="\u53EA\u5141\u8BB8 luban.* \u8BBE\u7F6E: "+o;else{let i=o.slice(6);try{await x.workspace.getConfiguration("luban").update(i,s.value,x.ConfigurationTarget.Global),r.ok=!0,r.result={key:o,value:x.workspace.getConfiguration("luban").get(i),autoOpenDiff:tu()}}catch(a){r.ok=!1,r.error=String(a&&a.stack||a).slice(0,800)}}}else if(s.op==="review_action"){let o=await Ba(s.action,s.path,s.hunk||"",s.sessionId),i="";try{i=no(tt(s.path,R()))}catch{i=""}r.ok=!!o.ok,o.ok||(r.error=o.error),r.result=Object.assign({},o,{remaining:ls(),fileCount:de.size,exists:i!==""||function(){try{return I.existsSync(tt(s.path,R()))}catch{return!1}}(),current:i.slice(0,3e3)})}else if(s.op==="review_edit"){let o=tt(s.path,R()),i=I.existsSync(o),a=i?I.readFileSync(o,"utf8"):"",l=s.content==null?"":String(s.content);await pr(o,l);let c=as(o,a,l,!i);r.ok=!0,r.result={hunks:c,existed:i,total:ls(),files:mh()}}else if(s.op==="openpanel")Ph(t),r.ok=!0,r.result="opened";else if(s.op==="panelmsg"||s.op==="viewmsg"){s.op==="viewmsg"?(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500))):De(s.to)||(Ph(t),await new Promise(i=>setTimeout(i,2500)));let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"synthetic_ask",prompt:s.prompt||"hi",mode:s.mode||"",modelKey:s.modelKey||""});let i=Date.now()+(s.waitMs||9e4),a=null;for(;Date.now()<i;){if(await new Promise(l=>setTimeout(l,1e3)),N&&(N.kind==="dome_done"||N.kind==="plan_done")){a=N;break}if(N&&N.kind==="dome_error"){a=N;break}}r.ok=!!a,r.result={ack:a}}}else if(s.op==="newsession"){await ft();let o=De(s.to);N=null;let i=await ro(s.reason||"headless",o),a=o?await Ae(s.waitMs||8e3,function(l){return l.kind==="session_opened"||l.kind==="session_reset"}):null;r.ok=!0,r.result={ack:a,id:i.id,items:(i.items||[]).length,reviewFiles:de.size,hunks:ls()}}else if(s.op==="listsessions")st(),r.ok=!0,r.result={current:Ee||"",openTabs:we.slice(),root:R(),sessions:be.list(s.scope||"workspace",s.root||R()).slice(0,s.limit||50)};else if(s.op==="searchsessions"){let o=Z_(s.q,s.scope||"workspace",s.root||R(),0);r.ok=!0,r.result={q:o.q,scope:o.scope,scanned:o.scanned,matched:o.matched,truncated:o.truncated,ms:o.ms,results:o.results.slice(0,s.limit||20)}}else if(s.op==="opensession"){await ft();let o=De(s.to);N=null;let i=await Yr(String(s.id||""),o),a=i.ok&&o?await Ae(s.waitMs||8e3,function(l){return l.kind==="session_opened"}):null;r.ok=!!i.ok,i.ok||(r.error=i.error),r.result={ack:a,id:i.id,items:i.items,title:pu(je())}}else if(s.op==="deletesession"){let o=await ir(String(s.id||""));r.ok=!0,r.result={current:o.current,sessions:o.sessions.length}}else if(s.op==="forksession"){let o=String(s.id||""),i=ni(o);if(!i)try{i=st().load(o)}catch{i=null}if(!i)r.ok=!1,r.error=O("ext.noSuchSession",{id:o});else if(ot.has(i.id))r.ok=!1,r.error=O("ext.forkBusy");else{let a=s.at==null||s.at===""?null:Number(s.at),l=ou(i,a,De(s.to),"headless");r.ok=!!l.ok,l.ok||(r.error=l.error),r.result=l}}else if(s.op==="sessiontest"){let o=s.case||"button";await ft();let i=De(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{st();let a=function(d,f){let p=be.create(R());return be.append(p,{t:"user",text:"\u4F1A\u8BDD "+d+" \u7684\u95EE\u9898"}),be.append(p,{t:"tool",name:"read_file",path:d+".js",ok:!0,result:"12 \u884C"}),be.append(p,{t:"text",text:"\u4F1A\u8BDD "+d+" \u7684\u56DE\u7B54\u3002"}),f&&be.append(p,f),be.save(p),p},l=a("A",{t:"sources",query:"q",items:[{title:"\u793A\u4F8B\u6765\u6E90",url:"https://example.com/a",siteName:"example.com",date:""}]}),c=a("B"),u=de.size;if(o==="list"){i.postMessage({type:"toggle_session_list"}),await new Promise(function(f){setTimeout(f,400)}),N=null,i.postMessage({type:"session_probe"});let d=await Ae(6e3,function(f){return f.kind==="session_probe"});r.ok=!!(d&&d.popupOpen&&d.sessionItems>=1),r.result={probe:d,sessions:be.list().length},i.postMessage({type:"toggle_session_list"})}else if(o==="replay"){N=null,await Yr(l.id,i);let d=await Ae(8e3,function(p){return p.kind==="session_opened"});N=null,i.postMessage({type:"session_probe"});let f=await Ae(8e3,function(p){return p.kind==="session_probe"});r.ok=!!(d&&f&&f.messages>=2&&f.tools>=1&&f.sources>=1&&f.reviewFiles===u),r.result={opened:d,probe:f,expected:{items:4,reviewFiles:u}}}else if(o==="search"){let d="ZQ"+Date.now().toString(36).toUpperCase(),f=be.create(R());be.append(f,{t:"user",text:"\u5E2E\u6211\u770B\u770B\u80FD\u8017\u62A5\u544A"}),be.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF08\u6807\u8BB0 "+d+"\uFF09\u3002"}),be.save(f);let p=be.create(R());be.append(p,{t:"user",text:"\u80FD\u8017\u62A5\u544A\u7684\u6807\u9898\u547D\u4E2D"}),be.append(p,{t:"text",text:"\u8FD9\u6761\u6B63\u6587\u91CC\u6CA1\u6709\u6807\u8BB0\u3002"}),be.save(p),N=null,i.postMessage({type:"session_search_selftest",q:d});let h=await Ae(12e3,function(m){return String(m.kind||"").indexOf("session_search")===0});r.ok=!!(h&&/_ok$/.test(h.kind)&&h.searchRows===1&&h.searchSnippets===1&&h.searchMarks>=1&&h.searchFull>1),r.result={ack:h,mark:d},await ir(f.id),await ir(p.id)}else if(o==="find"){let d="FS"+Date.now().toString(36).toUpperCase(),f=be.create(R());be.append(f,{t:"user",text:"\u5E2E\u6211\u627E\u4E00\u4E0B\u6B63\u6587\u91CC\u7684\u6807\u8BB0\u3002"}),be.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u6807\u8BB0 "+d+" \u5DF2\u7ECF\u5199\u5728\u6B63\u6587\u91CC\uFF1B\u518D\u8BF4\u4E00\u6B21 "+d+" \u7528\u6765\u9A8C\u8BC1\u591A\u5904\u547D\u4E2D\u3002"}),be.save(f),N=null,await Yr(f.id,i);let p=await Ae(8e3,function(m){return m.kind==="session_opened"});N=null;try{await x.commands.executeCommand("luban.findInSession")}catch{}await new Promise(function(m){setTimeout(m,500)}),N=null,i.postMessage({type:"find_selftest",q:d});let h=await Ae(12e3,function(m){return String(m.kind||"").indexOf("find_")===0});r.ok=!!(p&&h&&/_ok$/.test(h.kind)&&h.findHits===2&&h.findMarks===2&&h.findCurrent===1&&h.findOpen&&h.findPreOpened===!0&&h.findLeft===0),r.result={ack:h,mark:d},await ir(f.id)}else if(o==="switch"){N=null,await Yr(l.id,i),await Ae(8e3,function(h){return h.kind==="session_opened"}),N=null,i.postMessage({type:"session_probe"});let d=await Ae(8e3,function(h){return h.kind==="session_probe"});N=null,await Yr(c.id,i);let f=await Ae(8e3,function(h){return h.kind==="session_opened"});N=null,i.postMessage({type:"session_probe"});let p=await Ae(8e3,function(h){return h.kind==="session_probe"});r.ok=!!(f&&d&&p&&p.messages>=2&&String(p.lastText||"").indexOf("\u4F1A\u8BDD B \u7684\u56DE\u7B54")>=0&&p.reviewFiles===u),r.result={first:d,second:p}}else{N=null,await Yr(l.id,i),await Ae(8e3,function(f){return f.kind==="session_opened"}),N=null,i.postMessage({type:"session_selftest",case:o});let d=await Ae(12e3,function(f){return String(f.kind||"").indexOf("session_"+o)===0});r.ok=!!(d&&/_ok$/.test(d.kind)&&d.reviewFiles===u),r.result={ack:d,reviewBefore:u}}await ir(l.id),await ir(c.id)}}else if(s.op==="tabprobe"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"tab_probe"});let i=await Ae(s.waitMs||6e3,function(a){return a.kind==="tab_probe"});r.ok=!!i,i||(r.error="\u6807\u7B7E\u680F\u6CA1\u6709\u56DE\u5E94"),r.result={ack:i,tabs:i?i.tabs:0,activeTab:i?i.activeTab:"",openTabs:we.slice(),activeId:Ee}}}else if(s.op==="webview_probe")r.ok=!0,r.result={panel:!!Te,view:!!ye,viewVisible:!!(ye&&ye.visible===!0),panelActive:Te&&Ot.get(Te.webview)||"",viewActive:ye&&Ot.get(ye.webview)||"",activeId:Ee,openTabs:we.slice()};else if(s.op==="sendmsg"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=s.msg||{type:"ping"},a=String(i&&i.type||"");if(l2.indexOf(a)<0)r.ok=!1,r.error="sendmsg \u4E0D\u653E\u884C "+(a||"(\u7A7A)");else{N=null,o.postMessage(i);let l=null;s.ackKind&&(l=await Ae(s.waitMs||8e3,function(c){return c.kind===s.ackKind})),r.ok=!s.ackKind||!!l,r.ok||(r.error="\u7B49\u5F85 ack "+s.ackKind+" \u8D85\u65F6"),r.result={ack:l,delivered:!0}}}}else if(s.op==="tabtest"){let o=s.case||"close_cancel";await ft();let i=De(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,i.postMessage({type:"tab_selftest",case:o});let a=await Ae(s.waitMs||3e4,function(l){return String(l.kind||"").indexOf("tab_"+o)===0});r.ok=!!(a&&/_ok$/.test(a.kind)),a||(r.error="\u6807\u7B7E\u81EA\u68C0\u6CA1\u6709\u56DE\u5E94"),r.result={ack:a,openTabs:we.slice(),activeId:Ee}}}else if(s.op==="sessionpersist"){let o=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",i=await ti([{role:"user",content:o}],s.modelKey,{});mu(s.modelKey,"chat"),Lt({t:"user",text:o}),Lt({t:"text",text:i.content}),Lt({t:"summary",text:"\u5B8C\u6210 \xB7 "+i.target.model.id});let a=xt(),l=a?be.load(a.id):null,c=(l&&l.items||[]).filter(function(u){return u.t==="text"});r.ok=!!(l&&c.length&&c[c.length-1].text===i.content),r.result={id:a&&a.id,path:a?be.fileOf(a.id):"",items:(l&&l.items||[]).length,lastText:c.length?c[c.length-1].text.slice(0,80):""}}else if(s.op==="memory"){let o=s.case||"build",i=(je()||{}).items||[],a=function(l){return{enabled:l.enabled,turns:l.turns,chars:l.chars,dropped:l.dropped,roles:l.messages.map(function(c){return c.role}),heads:l.messages.map(function(c){return i_(c.content,120)})}};if(o==="build"){let l=[{t:"user",text:"\u7B2C\u4E00\u4E2A\u95EE\u9898"},{t:"tool",name:"read_file",path:"a.js",ok:!0,result:"10 \u884C"},{t:"text",text:"\u7B2C\u4E00\u4E2A\u56DE\u7B54"},{t:"summary",text:"\u5B8C\u6210 \xB7 1 \u6B21\u5DE5\u5177\u8C03\u7528"},{t:"user",text:"\u8FFD\u95EE",ctx:"\u8FFD\u95EE\n\n[ref 1] a.js\n```js\nconst a = 1;\n```"},{t:"plan",text:"\u8BA1\u5212\u6B63\u6587"}],c=eo.build(l,Object.assign(Qr(),s.opts||{}));r.ok=!0,r.result=Object.assign(a(c),{config:Qr(),ctxUsed:c.messages.some(function(u){return u.content.indexOf("[ref 1]")>=0})})}else if(o==="spill"){let l=[];for(let m=0;m<6;m++)l.push({t:"user",text:"\u95EE\u9898"+m+" UNIQUE_MEM_"+m}),l.push({t:"text",text:"\u56DE\u7B54"+m+" \u5173\u4E8E UNIQUE_MEM_"+m});let c=_n.createStore(),u=eo.build(l,Object.assign(Qr(),{maxTurns:2,maxChars:2e4,spill:su(c)})),d=!!(u.spillDigest&&u.spillDigest.indexOf("\u66F4\u65E9\u8F6E\u6B21\u6458\u8981")>=0&&u.spillDigest.indexOf("UNIQUE_MEM_0")>=0),f=u.spillIds&&u.spillIds[0]||"",p=f?c.read(f):{ok:!1},h=!!(p&&p.ok&&String(p.content).indexOf("UNIQUE_MEM_0")>=0);r.ok=u.turns===2&&u.spilledTurns>=4&&d&&h,r.result={turns:u.turns,spilledTurns:u.spilledTurns,spillIds:u.spillIds,digestHead:String(u.spillDigest||"").slice(0,160),recalled:h,storeEntries:c.size()}}else if(o==="prefix"){let l=mt(s.modelKey),c=Jn(l&&l.provider)!=="none",u=Os.hash(lr("agent",R(),c),ar("agent",l)),d=Os.hash(lr("agent",R(),c),ar("agent",l)),f=Os.hash(lr("plan",R(),c),ar("plan",l));r.ok=u===d&&u!==f,r.result={agent:u,plan:f,stable:u===d,differsByMode:u!==f}}else if(o==="session"){let l=Ms(i,s.modelKey,Object.assign({},s.opts||{},{resolveImage:Cs(je())}));r.ok=!0,r.result=Object.assign(a(l),{id:Ee||"",items:i.length})}else if(o==="last")r.ok=!!Ct,r.result=Ct||{};else if(o==="live"){let l=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",c=Ms(i,s.modelKey,{resolveImage:Cs(je())}),u={text:""},d=await Is(l,{root:R(),modelKey:s.modelKey,history:c.messages,onUserTurn:function(y){u.text=y}}),f=i.concat([{t:"user",text:l,ctx:u.text},{t:s.mode==="plan"?"plan":"text",text:d.text}]),p=Ms(f,s.modelKey,{resolveImage:Cs(je())});Ct=null;let h=await Is(s.follow||"\u6211\u521A\u624D\u8BA9\u4F60\u505A\u4EC0\u4E48\uFF1F\u53EA\u56DE\u4E00\u53E5\u8BDD\u3002",{root:R(),modelKey:s.modelKey,mode:s.mode==="plan"?"plan":"agent",history:p.messages}),m=Ct&&Ct.roles||[];r.ok=!!(Ct&&m[0]==="system"&&m.indexOf("assistant")>0&&m[m.length-1]==="user"&&p.turns>=1),r.result={first:d.text.slice(0,200),follow:h.text.slice(0,200),memory:a(p),cache:zo.slice(-2),request:Ct}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="imgtest"){let o=String(s.case||"ext"),i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==";if(o==="panel"){await ft();let a=De(s.to);if(!a)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,a.postMessage({type:"img_selftest"});let l=await Ae(s.waitMs||12e3,function(c){return String(c.kind||"").indexOf("img_selftest")===0});r.ok=!!(l&&/_ok$/.test(l.kind)),l||(r.error="\u56FE\u7247\u81EA\u6D4B\u6CA1\u6709\u56DE\u5E94"),r.result={ack:l}}}else if(o==="ext"){let a="imgtest-"+Date.now().toString(36),l={},c=_e.saveImage(a,i),u=_e.ATTACH_DIR+D.sep+a,d=c?D.join(u,c.file):"";l.save=!!c&&c.mime==="image/png"&&c.bytes>0,l.file=!!d&&I.existsSync(d),l.readBack=!!c&&_e.readDataUrl(a,c)===i,l.preview=!!c&&_e.readPreview(a,c.file).ok===!0,l.badSession=_e.saveImage("../evil",i)===null,l.svg=_e.saveImage(a,"data:image/svg+xml;base64,PHN2Zy8+")===null,l.oversize=_e.saveImage(a,"data:image/png;base64,"+"A".repeat(Math.ceil(_e.MAX_BYTES*4/3)+1e3))===null;let f=[];for(let $=0;$<5;$++)f.push({file:"a"+$+".png",mime:"image/png",bytes:10});f.push({file:"../evil.png",mime:"image/png",bytes:10}),f.push({file:"x.svg",mime:"image/svg+xml",bytes:10}),f.push({file:"y.jpg",mime:"image/png",bytes:10});let p=Qn.clampItem({t:"user",text:"hi",images:f});l.clamp4=Array.isArray(p.images)&&p.images.length===4,l.clampClean=!!p.images&&p.images.every(function($){return $.file.indexOf("a")===0}),l.clampDrop=!Qn.clampItem({t:"user",text:"hi",images:[{file:"../x.png",mime:"image/png",bytes:1}]}).images,l.textOnly=_e.toContent("hi",[])==="hi";let h=_e.toContent("hi",[i]);l.multimodal=Array.isArray(h)&&h.length===2&&h[0].type==="text"&&h[1].type==="image_url"&&h[1].image_url.url===i;let m=[{t:"user",text:"\u770B\u56FE",images:[c]},{t:"text",text:"\u770B\u5230\u4E86"}],w=eo.build(m,Object.assign(Qr(),{enabled:!0,resolveImage:function(){return i}})).messages.filter(function($){return $.role==="user"});l.memImg=w.length===1&&Array.isArray(w[0].content)&&w[0].content[0].type==="text"&&w[0].content.some(function($){return $.type==="image_url"});let g=eo.build(m,Object.assign(Qr(),{enabled:!0,resolveImage:function(){return""}})).messages.filter(function($){return $.role==="user"});l.memDegrade=g.length===1&&typeof g[0].content=="string";let v=mt(s.modelKey),b=Jn(v&&v.provider)!=="none";l.prefixStable=Os.hash(lr("agent",R(),b),ar("agent",v))===Os.hash(lr("agent",R(),b),ar("agent",v));let S="imgtest-orphan-"+Date.now().toString(36),_=D.join(_e.ATTACH_DIR,S);try{I.mkdirSync(_,{recursive:!0})}catch{}let C=[];try{C=I.readdirSync(_e.ATTACH_DIR,{withFileTypes:!0})}catch{C=[]}let A=new Set;for(let $ of C)$.isDirectory()&&$.name!==S&&A.add($.name);let F=_e.sweepOrphans(A);l.sweep=F.removed===1&&!I.existsSync(_);let B=_e.removeSession(a);l.cleanup=B.removed>=1&&!I.existsSync(u)&&(!c||_e.readDataUrl(a,c)==="");let H=Object.keys(l).filter(function($){return!l[$]});r.ok=H.length===0,H.length&&(r.error="failed: "+H.join(",")),r.result=l}else if(o==="live"){await ft();let a=mt(s.modelKey),l=a&&a.model&&a.model.vision===!0?a:es().find(function(u){return u.model.vision===!0}),c=De(s.to);if(!c)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else if(!l)r.ok=!1,r.error="\u6CA1\u6709 vision:true \u7684\u6A21\u578B";else{let u=await ro("imgtest_live",c);await new Promise(function(C){setTimeout(C,600)}),N=null,c.postMessage({type:"synthetic_ask",prompt:s.prompt||"\u8FD9\u5F20\u56FE\u91CC\u6709\u4EC0\u4E48\uFF1F\u4E00\u53E5\u8BDD\u56DE\u7B54",mode:"chat",modelKey:l.key,images:[i]});let d=await Ae(s.waitMs||9e4,function(C){return C.kind==="dome_done"||C.kind==="dome_error"||C.kind==="plan_done"}),f=ge.get(u.id)||u,p=f&&f.items||[],h=p.slice().reverse().find(function(C){return C&&C.t==="user"}),m=_e.ATTACH_DIR+D.sep+u.id,y=[];try{y=I.readdirSync(m)}catch{y=[]}let T=Ms(p,l.key,{resolveImage:Cs(f)}).messages.filter(function(C){return C.role==="user"}),g=T.length?T[T.length-1]:null,v=Ct&&Ct.heads||[],b=v.length?String(v[v.length-1]):"",S={done:!!(d&&d.kind==="dome_done"),item:!!(h&&Array.isArray(h.images)&&h.images.length===1),files:y.length>=1,snapshot:b.indexOf("[\u56FE\u7247 \xD71]")===0,memory:!!(g&&Array.isArray(g.content)&&g.content.some(function(C){return C.type==="image_url"})),chipsCleared:!d||d.imgchips===0};await ir(u.id),S.removed=!I.existsSync(m);let _=Object.keys(S).filter(function(C){return!S[C]});r.ok=_.length===0,_.length&&(r.error="failed: "+_.join(",")),r.result={checks:S,ack:d,modelKey:l.key,heads:v.slice(-2)}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="browsertest"){let o=String(s.case||"ext");if(o==="ext"){let i={},a="luban-browser-selftest",l=kt.encodeFrame(1,Buffer.from(a,"utf8")),c=kt.decodeFrame(l);i.frameRoundtrip=!!c&&c.opcode===1&&c.payload.toString("utf8")===a;let u=kt.encodeFrame(1,Buffer.alloc(300,97)),d=kt.decodeFrame(u);i.midLength=!!d&&d.payload.length===300;let f=kt.encodeFrame(1,Buffer.alloc(7e4,98)),p=kt.decodeFrame(f);i.bigLength=!!p&&p.payload.length===7e4,i.masked=!!(l[1]&128),i.shortFrame=kt.decodeFrame(Buffer.from([129]))===null,i.urlHttps=kt.normalizeUrl("example.com")==="https://example.com",i.urlLocalhost=kt.normalizeUrl("localhost:3000/x")==="http://localhost:3000/x",i.urlData=kt.normalizeUrl("data:text/html,hi")==="data:text/html,hi";let h=!1;try{kt.normalizeUrl("javascript:alert(1)")}catch{h=!0}i.urlBlocked=h,i.ax=kt.formatAxTree([{nodeId:"1",role:{value:"RootWebArea"},name:{value:"T"},childIds:["2"]},{nodeId:"2",parentId:"1",role:{value:"button"},name:{value:"Go"}},{nodeId:"3",parentId:"2",role:{value:"StaticText"},name:{value:"Go"}}],4e3).indexOf('button "Go"')>=0,i.notFoundShape=typeof kt.findChrome("definitely-not-here.exe").path=="string";let m=Object.keys(i).filter(function(y){return!i[y]});r.ok=m.length===0,m.length&&(r.error="failed: "+m.join(",")),r.result={checks:i,failed:m}}else if(o==="live"){let i=kt.findChrome(yr().chromePath);if(!i.path)r.ok=!0,r.result={skipped:!0,reason:"\u6CA1\u6709\u627E\u5230 Chrome / Edge\uFF0C\u8DF3\u8FC7\u771F\u673A\u90E8\u5206"};else{let a=null;try{let l=yr();a=await kt.launch({exe:l.chromePath,headless:!0,width:800,height:600});let c=function(b){return"data:text/html,"+encodeURIComponent("<title>"+b+"</title><h1>"+b+'</h1><script>console.log("'+b+'")</script>')},u=function(b){return(b||[]).map(function(S){return String(S&&S.text||"")}).join("|")};await a.navigate("data:text/html,<title>LubanBrowserTest</title><h1>hello browser</h1><button>Go</button>");let d=await a.snapshot(2e3),f=await a.screenshot({});await a.navigate(c("PAGE-A")),await Ca(300);let p=u(a.consoleEntries(20));await a.navigate(c("PAGE-B")),await Ca(300);let h=u(a.consoleEntries(20)),m="";try{await a.navigate("http://127.0.0.1:9/")}catch(b){m=String(b&&b.message||b)}await Ca(400);let y=u(a.networkEntries(20));await a.navigate(c("PAGE-C")),await Ca(300);let w=a.networkEntries(20).length,T=u(a.consoleEntries(20)),g={snapshot:d.indexOf("hello browser")>=0,axRole:d.indexOf("button")>=0,shot:f.indexOf("data:image/jpeg;base64,")===0&&f.length>1e3,consoleCaptured:p.indexOf("PAGE-A")>=0,consoleNoLeak:h.indexOf("PAGE-B")>=0&&h.indexOf("PAGE-A")<0,networkKeptOnFailure:/127\.0\.0\.1:9|ERR_CONNECTION_REFUSED/.test(y),networkResetOnNav:w===0,consoleResetOnNav:T.indexOf("PAGE-C")>=0&&T.indexOf("PAGE-B")<0},v=Object.keys(g).filter(function(b){return!g[b]});r.ok=v.length===0,v.length&&(r.error="failed: "+v.join(",")),r.result={checks:g,exe:i.path,shotChars:f.length,snap:d.slice(0,400),consoleA:p.slice(0,200),consoleB:h.slice(0,200),consoleC:T.slice(0,200),networkFailed:y.slice(0,200),navFailed:m.slice(0,200)}}catch(l){r.ok=!1,r.error=String(l&&l.message||l)}finally{if(a)try{await a.close()}catch{}}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="computertest"){let o=String(s.case||"ext");if(o==="ext"){let i=HI(),a={};a.keyLetter=ue.parseKeys("a").code===i.a&&ue.parseKeys("a").flags===0,a.keyUpper=ue.parseKeys("P").flags===ue.FLAGS.shift&&ue.parseKeys("P").code===i.p,a.keyCombo=function(){let p=ue.parseKeys("cmd+shift+p");return p.code===i.p&&p.flags===(ue.FLAGS.cmd|ue.FLAGS.shift)}();let l=!1;try{ue.parseKeys("hyper+a")}catch(p){l=/不认识的修饰键/.test(p.message)}a.keyBadModifier=l;let c=!1;try{ue.parseKeys("cmd+nope")}catch(p){c=/不认识的键/.test(p.message)}a.keyBadName=c,a.charCjk=ue.charToKey("\u4E2D")===null,a.charShiftSymbol=function(){let p=ue.charToKey("!");return p&&p.shift===!0&&p.code===i.bang}(),a.regionString=function(){let p=ue.parseRegion("10,20,300,400");return p.width===300&&p.height===400}();let u=!1;try{ue.parseRegion("1,2,3")}catch(p){u=/region 格式/.test(p.message)}a.regionBad=u;let d=ue.formatOcr([{t:"B",x:10,y:40,w:60,h:10},{t:"A",x:10,y:10,w:60,h:10},{t:"A",x:10,y:10,w:60,h:10}],{originX:100,originY:50,ratio:2},4e3);if(a.ocrOrder=d.indexOf("A")<d.indexOf("B"),a.ocrDedup=(d.match(/A/g)||[]).length===1,a.ocrCoords=/\[120,70\]/.test(d),process.platform==="darwin")try{let p=ue.TMP_DIR;I.mkdirSync(p,{recursive:!0});let h=D.join(p,"selftest-"+Date.now()+".png"),m=Buffer.alloc(33);Buffer.from([137,80,78,71,13,10,26,10]).copy(m,0),m.writeUInt32BE(13,8),m.write("IHDR",12,"ascii"),m.writeUInt32BE(7,16),m.writeUInt32BE(5,20),I.writeFileSync(h,m);let y=await ue.imageSize(h);a.imageHeader=y.width===7&&y.height===5,I.unlinkSync(h)}catch{a.imageHeader=!1}let f=Object.keys(a).filter(function(p){return!a[p]});r.ok=f.length===0,f.length&&(r.error="failed: "+f.join(",")),r.result={checks:a,failed:f,platform:process.platform}}else if(o==="live"){let i=await ue.check().catch(function(a){return{ok:!1,notes:[String(a&&a.message||a)]}});if(!i.ok)r.ok=!0,r.result={skipped:!0,reason:(i.notes||[]).join("\uFF1B")||"\u5F53\u524D\u5E73\u53F0\u7F3A\u5C11\u622A\u5C4F / \u6CE8\u5165\u80FD\u529B\u6216\u7CFB\u7EDF\u6388\u6743\u672A\u7ED9"};else{let a={};try{let c=await ue.capture({region:"0,0,120,90",maxWidth:360});a.shot=/^data:image\/jpeg;base64,/.test(c.dataUrl)&&c.dataUrl.length>1e3,a.shotRatio=Math.abs(c.ratio-1)<.01;let u=await ue.windows({limit:10});a.windows=Array.isArray(u.windows);let d=await ue.frontmost();a.frontmost=typeof d.pid=="number";let f=await ue.cursor();a.cursor=isFinite(f.x)&&isFinite(f.y),a.click=/单击/.test(await ue.click({x:300,y:400,dry:!0})),a.drag=/拖到/.test(await ue.drag({x:300,y:400,toX:400,toY:500,dry:!0})),a.scroll=/滚动/.test(await ue.scroll({x:300,y:400,dy:50,dry:!0})),a.typeAscii=/按键码/.test(await ue.type({text:"ok",dry:!0})),a.key=/已按键/.test(await ue.key({keys:"cmd+shift+p",dry:!0}));let p=await ue.ocr({shot:c,maxChars:500});a.ocr=us?typeof p.text=="string"&&/未实现 OCR/.test(p.text):typeof p.text=="string"&&p.text.indexOf("\u5C4F\u5E55\u6587\u5B57")>=0;try{I.unlinkSync(c.file)}catch{}}catch(c){a.error=String(c&&c.message||c)}let l=Object.keys(a).filter(function(c){return!a[c]});r.ok=l.length===0,l.length&&(r.error="failed: "+l.join(",")),r.result={checks:a,failed:l,screens:i.screens,screenRecording:i.screenRecording,accessibility:i.accessibility}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="copytest"){let o=String(s.case||"ext");if(o==="ext"){let i="luban-copytest-"+Date.now().toString(36),a="",l="";try{a=await x.env.clipboard.readText()}catch{a=""}try{await x.env.clipboard.writeText(i),l=await x.env.clipboard.readText()}catch{l=""}try{await x.env.clipboard.writeText(a)}catch{}r.ok=l===i,r.result={roundtrip:l===i,len:l.length}}else if(o==="panel"){await ft();let i=De(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,i.postMessage({type:"copy_selftest"});let a=await Ae(s.waitMs||12e3,function(l){return String(l.kind||"").indexOf("copy_selftest")===0});r.ok=!!(a&&/_ok$/.test(a.kind)),a||(r.error="\u590D\u5236\u81EA\u6D4B\u6CA1\u6709\u56DE\u5E94"),r.result={ack:a}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="budget"){let o=String(s.case||"limits");if(o==="size"){let i=[{role:"assistant",content:"x".repeat(100),tool_calls:[{id:"call_a",type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"a.js"})}}]},{role:"tool",tool_call_id:"call_a",content:"y".repeat(300)}],a=i.reduce(function(c,u){return c+String(u.content||"").length},0),l=Oe.charsOf(i);r.ok=l>a,r.result={contentOnly:a,full:l,delta:l-a}}else if(o==="compact"){let i=[{role:"system",content:"sys"},{role:"user",content:"\u95EE\u9898"}];for(let h=0;h<12;h++){let m="call_"+h;i.push({role:"assistant",content:"",tool_calls:[{id:m,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+h+".js",pad:"z".repeat(2e3)})}}]}),i.push({role:"tool",tool_call_id:m,content:"r".repeat(5e3)})}let a=Oe.charsOf(i),l=Oe.compact(i,{keepTail:8}),c=[];for(let h of l.messages)for(let m of h.tool_calls||[])c.push(String(m.id));let u=l.messages.filter(function(h){return h.role==="tool"}).map(function(h){return String(h.tool_call_id)}),d=c.length===u.length&&c.every(function(h){return u.indexOf(h)>=0}),p=l.messages.slice(l.messages.length-8).every(function(h,m){let y=i[i.length-8+m];return h===y});r.ok=l.messages.length===i.length&&d&&p&&l.afterChars<a&&l.omittedTools>0,r.result={messages:i.length,paired:d,tailIntact:p,beforeChars:a,afterChars:l.afterChars,savedChars:l.savedChars,omittedTools:l.omittedTools,omittedArgs:l.omittedArgs,keptTail:l.keptTail,sample:String(l.messages[3]&&l.messages[3].content||"").slice(0,80)}}else if(o==="spill"){let i=_n.createStore(),a=su(i),l=[{role:"system",content:"sys"},{role:"user",content:"\u95EE\u9898"}],c="UNIQUE_SPILL_BODY_"+Date.now();for(let y=0;y<6;y++){let w="call_"+y;l.push({role:"assistant",content:"",tool_calls:[{id:w,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+y+".js"})}}]}),l.push({role:"tool",tool_call_id:w,content:(y===0?c+`
|
|
1197
|
+
`).find(function(S){return S.trim()})||"").trim(),v={ok:!0,skipped:!0,ranges:[]};if(Math.max(f.lineCount,1)>=4){let S=Yn(d,u),_=to("#selection "+S+":1-2 \u548C #selection "+S+":3-4",u);v={ok:_.refs.length===2&&_.refs[0].kind==="selection"&&_.refs[1].kind==="selection"&&_.refs[0].startLine===1&&_.refs[0].endLine===2&&_.refs[1].startLine===3&&_.refs[1].endLine===4,ranges:_.refs.map(function(C){return C.startLine+"-"+C.endLine})}}r.ok=!!(i&&i.hasEditor&&i.hasSelection&&i.startLine===h+1&&i.endLine===(y.end.character===0&&m>h?m:m+1)&&a.length===1&&a[0].kind==="selection"&&g&&l.indexOf(g)>=0&&o&&o.kind==="ref_selftest_button_ok"&&v.ok),r.result={info:i,selectedRange:[h+1,i&&i.endLine],selectedChars:c.length,ref:a[0]||null,injectedChars:l.length,injectedHasSelectedText:!!g&&l.indexOf(g)>=0,multiSelection:v,buttonAck:o||{kind:"timeout"}}}catch(u){r.ok=!1,r.error=u.message}}else if(s.op==="refs"){let o=to(s.prompt||"",s.root||R(),{window:s.window}),i=String(o.text||"");r.ok=!0,r.result={refs:o.refs,chars:i.length,text:i.slice(0,800),hasBatches:/分批处理(共\s*\d+\s*批)/.test(i),hasSearchDirHint:/search_code/.test(i)&&/dir=/.test(i)}}else if(s.op==="listfiles"){let o=await MN(),i=await CN();r.ok=!0,r.result={total:o.length,files:o.slice(0,20),dirTotal:i.length,dirs:i.slice(0,20)}}else if(s.op==="settings")r.ok=!0,r.result={path:ht,source:Zo,defaultModel:Vt.defaultModel,providers:(Vt.providers||[]).map(o=>({id:o.id,models:(o.models||[]).map(i=>i.id),keyFound:!!ei(o),keyless:Qo(o)&&!Fc(o),inline:!!o.apiKey,secret:!!hs[o.id],env:!!Ja(o)}))};else if(s.op==="saveconfig"){let o=await T_(t,s.config||Jc().config);r.ok=!!o.ok,o.ok||(r.error=(o.errors||[]).join("; ")),r.result={path:o.path,defaultModel:o.defaultModel,models:o.models,errors:o.errors}}else if(s.op==="testprovider"){let o=await M_(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="fetchmodels"){let o=await um(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="webdav"){let o=String(s.case||"config");if(o==="config"){let i=await Ha(t);r.ok=!0,r.result={path:i.path,url:i.config.url,enabled:i.config.enabled,remoteDir:i.config.remoteDir,includes:i.config.includes,hasPassword:i.hasPassword,busy:i.busy}}else if(o==="config_bad"){let i=JSON.stringify(Mn.loadConfig()),a=await fm(t,{config:Object.assign({},Mn.loadConfig(),{url:"ftp://not-a-webdav"})});r.ok=!a.ok&&JSON.stringify(Mn.loadConfig())===i,r.result={errors:a.errors||[],unchanged:JSON.stringify(Mn.loadConfig())===i},a.ok&&(r.error="\u975E\u6CD5\u914D\u7F6E\u88AB\u63A5\u53D7\u4E86")}else if(o==="mock_roundtrip"||o==="restore_policy"){let i=await D_(o);r.ok=!!i.ok,r.result=i.result,i.ok||(r.error=i.error||"\u81EA\u68C0\u672A\u901A\u8FC7")}else r.ok=!1,r.error="\u672A\u77E5 case\uFF1A"+o}else if(s.op==="opensettings"){pm(t),N=null;let o=Date.now()+(s.waitMs||2e4),i=null;for(;Date.now()<o;)if(await new Promise(a=>setTimeout(a,500)),N&&N.kind==="settings_rendered"){i=N;break}r.ok=!!i,r.result={ack:i,path:ht}}else if(s.op==="chat"){let o=await ti([{role:"user",content:s.prompt||"hi"}],s.modelKey,{thinking:s.thinking});r.ok=!0,r.result={modelKey:o.target.key,reply:o.content.slice(0,400),chars:o.content.length,reasoning:String(o.reasoning||"").slice(0,400),thinking:o.thinking||"none"}}else if(s.op==="runcmd"){let o=await KS(s.command||"echo hi",s.root||R(),s.timeout_ms);r.ok=!0,r.result=o}else if(s.op==="runcmd_async"){let o=String(s.case||"start_poll_stop"),i=String(s.sessionId||"test_async_"+Date.now().toString(36)),a=s.root||R();if(o==="start_poll_stop"){let l=ke.start(i,s.command||"sleep 0.4; echo ASYNC_OK",{cwd:a,timeout_ms:s.timeout_ms||3e4});if(!l.ok)r.ok=!1,r.error=l.error,r.result=l;else{let c=await ke.poll(i,l.job_id,{wait_ms:0,tail_chars:200}),u=await ke.poll(i,l.job_id,{wait_ms:5e3,tail_chars:800}),d=ke.stop(i,l.job_id);ke.clearSession(i),r.ok=!!(l.ok&&u.status==="exited"&&String(u.out_tail||"").indexOf("ASYNC_OK")>=0&&(d.status==="already_done"||d.status==="stopped")),r.result={started:l,mid:c,done:u,stopped:d}}}else if(o==="concurrency"){let l=ke.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),c=ke.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),u=ke.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),d=ke.runningCount(i);ke.clearSession(i),r.ok=!!(l.ok&&c.ok&&!u.ok&&d===2&&String(u.error||"").indexOf("\u4E0A\u9650")>=0),r.result={a:l,b:c,c:u,running:d}}else if(o==="session_scope"){let l=i+"_a",c=i+"_b",u=ke.start(l,"sleep 2",{cwd:a,timeout_ms:1e4}),d=await ke.poll(c,u.job_id,{wait_ms:0});ke.clearSession(l),ke.clearSession(c),r.ok=!!(u.ok&&d.status==="missing"),r.result={a:u,cross:d}}else if(o==="cancel"){let l=ke.start(i,"sleep 5",{cwd:a,timeout_ms:2e4}),c=ke.stopAll(i),u=await ke.poll(i,l.job_id,{wait_ms:0});ke.clearSession(i),r.ok=!!(l.ok&&c.stopped>=1&&u.status==="stopped"),r.result={a:l,killed:c,after:u}}else if(o==="plan_deny"){let l=pr.check(s.command||"touch /tmp/luban_async_deny");r.ok=!l.ok,r.result={verdict:l.ok?"allow":"deny",reason:l.reason,segment:l.segment}}else if(o==="tail_utf8"){let l=ke.start(i,"printf '\u{1F600}\u{1F600}\u{1F600}'",{cwd:a,timeout_ms:15e3}),c=await ke.poll(i,l.job_id,{wait_ms:5e3,tail_chars:3}),u=await ke.poll(i,l.job_id,{wait_ms:0,tail_chars:4});ke.clearSession(i);let d=String(c.out_tail||""),f=!1;for(let p=0;p<d.length;p++){let h=d.charCodeAt(p);if(h>=55296&&h<=56319){let m=d.charCodeAt(p+1);if(!(m>=56320&&m<=57343)){f=!0;break}p++}else if(h>=56320&&h<=57343){f=!0;break}}r.ok=!!(l.ok&&c.status==="exited"&&c.out_tail==="\u{1F600}"&&!f&&u.out_tail==="\u{1F600}\u{1F600}"),r.result={started:l,cut:c,pair:u,lone:f}}else if(o==="timeout"){let l=ke.start(i,"sleep 5",{cwd:a,timeout_ms:400}),c=await ke.poll(i,l.job_id,{wait_ms:3e3});ke.clearSession(i),r.ok=!!(l.ok&&c.status==="timeout"),r.result={started:l,done:c}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="filesearch")r.result=r2(),r.ok=r.result.fail===0,r.ok||(r.error="filesearch \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="patch")r.result=o2(),r.ok=r.result.fail===0,r.ok||(r.error="patch \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="lints")r.result=i2(),r.ok=r.result.fail===0,r.ok||(r.error="lints \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="fs")try{let o=await Xn(s.tool||"read_file",s.args||{},s.root||R(),null,{readMax:s.readMax});r.ok=!0,r.result={allowOutside:Ch(),text:String(o).slice(0,2e3)}}catch(o){r.ok=!1,r.error=o.message,r.result={allowOutside:Ch()}}else if(s.op==="fsskip")r.result=await wT(),r.ok=r.result.fail===0,r.ok||(r.error="fsskip \u65AD\u8A00\u5931\u8D25\uFF1A"+r.result.failed.join("; "));else if(s.op==="review")r.ok=!0,r.result={total:cs(),files:mh()};else if(s.op==="reviewdoc"){let o=tt(s.path,R()),i=await x.workspace.openTextDocument(x.Uri.from({scheme:"luban-before",path:o})),a=de.get(o);r.ok=!0,r.result={lines:i.lineCount,text:i.getText().slice(0,2e3),matchesBaseline:!!a&&i.getText()===a.baseline}}else if(s.op==="reviewui"){let o=tt(s.path,R()),i=x.Uri.file(o),a=await x.workspace.openTextDocument(i);await x.window.showTextDocument(a,{preview:!1,viewColumn:x.ViewColumn.One}),await new Promise(p=>setTimeout(p,600));let l=async function(p){try{return await x.commands.executeCommand("vscode.executeCodeLensProvider",p)||[]}catch{return[]}},c=function(p){return p.map(function(h){return{line:h.range?h.range.start.line+1:-1,title:h.command&&h.command.title,command:h.command&&h.command.command}})},u=await l(i),d=x.Uri.from({scheme:"luban-before",path:o}),f=await l(d);r.ok=!0,r.result={codeLensCount:u.length,codeLenses:c(u),beforeCodeLensCount:f.length,beforeCodeLenses:c(f),visible:x.window.visibleTextEditors.some(function(p){return p.document.uri.scheme==="file"&&p.document.uri.fsPath===o})}}else if(s.op==="reviewdiff"){let o=tt(s.path,R());if(!de.has(o))r.ok=!1,r.error="\u6CA1\u6709\u5F85\u5BA1\u9605\u6539\u52A8: "+s.path;else{let i=function(){let c=[];for(let u of x.window.tabGroups.all)for(let d of u.tabs){let f=d.input||{};!f.modified||!f.original||f.modified.fsPath===o&&c.push({title:d.label,originalScheme:f.original.scheme,modifiedScheme:f.modified.scheme,active:d.isActive,preview:d.isPreview})}return c};s.open!==!1&&(await Yh(o,{preview:!0,preserveFocus:!0}),await new Promise(c=>setTimeout(c,400)));let a=i(),l={tabs:a,diffTabs:a.length,pending:cs(),frozenCount:vn.size,autoOpen:tu(),contextActive:!!Wa(Ua())};if(s.accept){let c=de.has(o)?de.get(o).baseline:"";await Ba("accept_file",o,""),await new Promise(f=>setTimeout(f,400));let u=i();l.afterAcceptTabs=u.length,l.afterAcceptPinned=u.length===1&&u[0].preview===!1,l.afterAcceptPending=cs();let d="";try{d=(await x.workspace.openTextDocument(x.Uri.from({scheme:"luban-before",path:o}))).getText()}catch{d=""}l.afterAcceptBeforeHasText=d.length>0,l.afterAcceptBeforeMatches=d===c,l.frozenCount=vn.size,l.afterAcceptContext=!!Wa(Ua())}r.ok=a.length>0,r.ok||(r.error="\u6CA1\u627E\u5230\u8BE5\u6587\u4EF6\u7684 diff \u6807\u7B7E"),r.result=l}}else if(s.op==="reviewfocus"){if(s.focus!==!1){try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}await new Promise(function(i){setTimeout(i,800)})}let o=De(s.to||"view")||tn();if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=null;s.focusInput===!0&&(N=null,o.postMessage({type:"focus_input"}),i=await Ae(s.waitMs||8e3,function(c){return c.kind==="focus_input"})?!0:null,await new Promise(function(c){setTimeout(c,200)})),N=null,o.postMessage({type:"focus_probe"});let a=await Ae(s.waitMs||8e3,function(l){return l.kind==="focus_probe"});r.ok=!!a,r.ok||(r.error="focus_probe \u8D85\u65F6"),r.result={hasFocus:!!(a&&a.hasFocus),tracked:Fa.get(o)===!0,maximized:!!(a&&a.maximized),extMaximized:xa(),inputFocused:!!(a&&a.inputFocused),inputFocusSet:i,pendingAutoDiff:nn.size,widths:a&&a.widths||null}}}else if(s.op==="reviewmax"){r.ok=!0;let o=function(){let l=s.pattern||"maxim";try{return new RegExp(String(l),"i")}catch{return/maxim/i}}(),i=[];try{i=(await x.commands.getCommands(!0)).filter(function(c){return o.test(c)}).slice(0,Math.max(1,Math.min(200,Number(s.limit)||20)))}catch(l){i=["<getCommands \u5931\u8D25: "+l.message+">"]}let a=De(s.to||"view")||tn();if(!a)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else if(s.list===!0)r.result={maxCmds:i,pattern:String(s.pattern||"maxim"),marker:"REVIEWMAX_LIST_V4"};else if(s.simulate!=null){let l=s.simulate===!0;si.set(a,l),l||t_(),await new Promise(function(c){setTimeout(c,400)}),r.result={simulated:l,maximized:xa(),pendingAutoDiff:nn.size,tracked:Fa.get(a)===!0}}else try{let l=["workbench.action.toggleMaximizedAuxiliaryBar","workbench.action.toggleMaximizedPanel"],c=s.cmd||l.find(function(p){return i.indexOf(p)!==-1})||l[1],u=!1;if(s.force!==!0){N=null,a.postMessage({type:"focus_probe"});let p=await Ae(s.waitMs||8e3,function(h){return h.kind==="focus_probe"});u=!!(p&&p.maximized)}r.diag={maxCmds:i,target:c,alreadyMaximized:u};let d=s.args==null?[]:Array.isArray(s.args)?s.args:[s.args];r.diag.args=d;let f=async function(){s.cmd?await Promise.race([Promise.resolve(x.commands.executeCommand(c,...d)).then(function(){return"<done>"}),new Promise(function(h){setTimeout(function(){h("<timeout>")},s.timeoutMs||6e3)})])==="<timeout>"&&(r.diag.timeout=!0):await x.commands.executeCommand(c)};if(u||(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(function(p){setTimeout(p,600)}),await f(),await new Promise(function(p){setTimeout(p,800)})),s.ack===!1)r.result={skippedAck:!0,extMaximized:xa(),pendingAutoDiff:nn.size};else{N=null,a.postMessage({type:"focus_probe"});let p=await Ae(s.waitMs||8e3,function(h){return h.kind==="focus_probe"});r.ok=!!p,r.ok||(r.error="focus_probe \u8D85\u65F6"),r.result={maximized:!!(p&&p.maximized),extMaximized:xa(),tracked:Fa.get(a)===!0,pendingAutoDiff:nn.size,widths:p&&p.widths||null}}}catch(l){r.ok=!1,r.error="toggleMaximized \u4E0D\u53EF\u7528\uFF1A"+l.message,r.result={maximized:!1}}}else if(s.op==="reviewrender"){let o=De(s.to);if(o||(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500)),o=De(s.to)),!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{o.postMessage(qa()),await new Promise(l=>setTimeout(l,400)),N=null,o.postMessage({type:"review_probe"});let i=Date.now()+(s.waitMs||1e4),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.kind==="review_probe"){a=N;break}r.ok=!!a,r.result=a||{kind:"timeout"}}}else if(s.op==="reviewdeco"){let o=tt(s.path,R()),i=de.get(o);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u5F85\u5BA1\u9605\u6539\u52A8: "+s.path;else{let a=await x.workspace.openTextDocument(x.Uri.file(o)),l=o_(a,i);r.ok=!0,r.result={addDecorations:l.added.length,delDecorations:l.removed.length,spans:l.spans,docLines:a.lineCount}}}else if(s.op==="reviewtabs"){let o=[];for(let i of x.window.tabGroups.all)for(let a of i.tabs){let l=a.input||{};!l.modified||!l.original||o.push({path:l.modified.fsPath||l.modified.path||"",title:a.label,originalScheme:l.original.scheme,modifiedScheme:l.modified.scheme,active:a.isActive,preview:a.isPreview})}r.ok=!0,r.result={tabs:o,diffTabs:o.length,frozenCount:vn.size,pending:cs()}}else if(s.op==="setcfg"){let o=String(s.key||"");if(o.indexOf("luban.")!==0||!o.slice(6))r.ok=!1,r.error="\u53EA\u5141\u8BB8 luban.* \u8BBE\u7F6E: "+o;else{let i=o.slice(6);try{await x.workspace.getConfiguration("luban").update(i,s.value,x.ConfigurationTarget.Global),r.ok=!0,r.result={key:o,value:x.workspace.getConfiguration("luban").get(i),autoOpenDiff:tu()}}catch(a){r.ok=!1,r.error=String(a&&a.stack||a).slice(0,800)}}}else if(s.op==="review_action"){let o=await Ba(s.action,s.path,s.hunk||"",s.sessionId),i="";try{i=no(tt(s.path,R()))}catch{i=""}r.ok=!!o.ok,o.ok||(r.error=o.error),r.result=Object.assign({},o,{remaining:cs(),fileCount:de.size,exists:i!==""||function(){try{return I.existsSync(tt(s.path,R()))}catch{return!1}}(),current:i.slice(0,3e3)})}else if(s.op==="review_edit"){let o=tt(s.path,R()),i=I.existsSync(o),a=i?I.readFileSync(o,"utf8"):"",l=s.content==null?"":String(s.content);await hr(o,l);let c=ls(o,a,l,!i);r.ok=!0,r.result={hunks:c,existed:i,total:cs(),files:mh()}}else if(s.op==="openpanel")Ph(t),r.ok=!0,r.result="opened";else if(s.op==="panelmsg"||s.op==="viewmsg"){s.op==="viewmsg"?(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500))):De(s.to)||(Ph(t),await new Promise(i=>setTimeout(i,2500)));let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"synthetic_ask",prompt:s.prompt||"hi",mode:s.mode||"",modelKey:s.modelKey||""});let i=Date.now()+(s.waitMs||9e4),a=null;for(;Date.now()<i;){if(await new Promise(l=>setTimeout(l,1e3)),N&&(N.kind==="dome_done"||N.kind==="plan_done")){a=N;break}if(N&&N.kind==="dome_error"){a=N;break}}r.ok=!!a,r.result={ack:a}}}else if(s.op==="newsession"){await ft();let o=De(s.to);N=null;let i=await ro(s.reason||"headless",o),a=o?await Ae(s.waitMs||8e3,function(l){return l.kind==="session_opened"||l.kind==="session_reset"}):null;r.ok=!0,r.result={ack:a,id:i.id,items:(i.items||[]).length,reviewFiles:de.size,hunks:cs()}}else if(s.op==="listsessions")st(),r.ok=!0,r.result={current:Ee||"",openTabs:we.slice(),root:R(),sessions:be.list(s.scope||"workspace",s.root||R()).slice(0,s.limit||50)};else if(s.op==="searchsessions"){let o=Z_(s.q,s.scope||"workspace",s.root||R(),0);r.ok=!0,r.result={q:o.q,scope:o.scope,scanned:o.scanned,matched:o.matched,truncated:o.truncated,ms:o.ms,results:o.results.slice(0,s.limit||20)}}else if(s.op==="opensession"){await ft();let o=De(s.to);N=null;let i=await Yr(String(s.id||""),o),a=i.ok&&o?await Ae(s.waitMs||8e3,function(l){return l.kind==="session_opened"}):null;r.ok=!!i.ok,i.ok||(r.error=i.error),r.result={ack:a,id:i.id,items:i.items,title:pu(je())}}else if(s.op==="deletesession"){let o=await ar(String(s.id||""));r.ok=!0,r.result={current:o.current,sessions:o.sessions.length}}else if(s.op==="forksession"){let o=String(s.id||""),i=ni(o);if(!i)try{i=st().load(o)}catch{i=null}if(!i)r.ok=!1,r.error=O("ext.noSuchSession",{id:o});else if(ot.has(i.id))r.ok=!1,r.error=O("ext.forkBusy");else{let a=s.at==null||s.at===""?null:Number(s.at),l=ou(i,a,De(s.to),"headless");r.ok=!!l.ok,l.ok||(r.error=l.error),r.result=l}}else if(s.op==="sessiontest"){let o=s.case||"button";await ft();let i=De(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{st();let a=function(d,f){let p=be.create(R());return be.append(p,{t:"user",text:"\u4F1A\u8BDD "+d+" \u7684\u95EE\u9898"}),be.append(p,{t:"tool",name:"read_file",path:d+".js",ok:!0,result:"12 \u884C"}),be.append(p,{t:"text",text:"\u4F1A\u8BDD "+d+" \u7684\u56DE\u7B54\u3002"}),f&&be.append(p,f),be.save(p),p},l=a("A",{t:"sources",query:"q",items:[{title:"\u793A\u4F8B\u6765\u6E90",url:"https://example.com/a",siteName:"example.com",date:""}]}),c=a("B"),u=de.size;if(o==="list"){i.postMessage({type:"toggle_session_list"}),await new Promise(function(f){setTimeout(f,400)}),N=null,i.postMessage({type:"session_probe"});let d=await Ae(6e3,function(f){return f.kind==="session_probe"});r.ok=!!(d&&d.popupOpen&&d.sessionItems>=1),r.result={probe:d,sessions:be.list().length},i.postMessage({type:"toggle_session_list"})}else if(o==="replay"){N=null,await Yr(l.id,i);let d=await Ae(8e3,function(p){return p.kind==="session_opened"});N=null,i.postMessage({type:"session_probe"});let f=await Ae(8e3,function(p){return p.kind==="session_probe"});r.ok=!!(d&&f&&f.messages>=2&&f.tools>=1&&f.sources>=1&&f.reviewFiles===u),r.result={opened:d,probe:f,expected:{items:4,reviewFiles:u}}}else if(o==="search"){let d="ZQ"+Date.now().toString(36).toUpperCase(),f=be.create(R());be.append(f,{t:"user",text:"\u5E2E\u6211\u770B\u770B\u80FD\u8017\u62A5\u544A"}),be.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF08\u6807\u8BB0 "+d+"\uFF09\u3002"}),be.save(f);let p=be.create(R());be.append(p,{t:"user",text:"\u80FD\u8017\u62A5\u544A\u7684\u6807\u9898\u547D\u4E2D"}),be.append(p,{t:"text",text:"\u8FD9\u6761\u6B63\u6587\u91CC\u6CA1\u6709\u6807\u8BB0\u3002"}),be.save(p),N=null,i.postMessage({type:"session_search_selftest",q:d});let h=await Ae(12e3,function(m){return String(m.kind||"").indexOf("session_search")===0});r.ok=!!(h&&/_ok$/.test(h.kind)&&h.searchRows===1&&h.searchSnippets===1&&h.searchMarks>=1&&h.searchFull>1),r.result={ack:h,mark:d},await ar(f.id),await ar(p.id)}else if(o==="find"){let d="FS"+Date.now().toString(36).toUpperCase(),f=be.create(R());be.append(f,{t:"user",text:"\u5E2E\u6211\u627E\u4E00\u4E0B\u6B63\u6587\u91CC\u7684\u6807\u8BB0\u3002"}),be.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u6807\u8BB0 "+d+" \u5DF2\u7ECF\u5199\u5728\u6B63\u6587\u91CC\uFF1B\u518D\u8BF4\u4E00\u6B21 "+d+" \u7528\u6765\u9A8C\u8BC1\u591A\u5904\u547D\u4E2D\u3002"}),be.save(f),N=null,await Yr(f.id,i);let p=await Ae(8e3,function(m){return m.kind==="session_opened"});N=null;try{await x.commands.executeCommand("luban.findInSession")}catch{}await new Promise(function(m){setTimeout(m,500)}),N=null,i.postMessage({type:"find_selftest",q:d});let h=await Ae(12e3,function(m){return String(m.kind||"").indexOf("find_")===0});r.ok=!!(p&&h&&/_ok$/.test(h.kind)&&h.findHits===2&&h.findMarks===2&&h.findCurrent===1&&h.findOpen&&h.findPreOpened===!0&&h.findLeft===0),r.result={ack:h,mark:d},await ar(f.id)}else if(o==="switch"){N=null,await Yr(l.id,i),await Ae(8e3,function(h){return h.kind==="session_opened"}),N=null,i.postMessage({type:"session_probe"});let d=await Ae(8e3,function(h){return h.kind==="session_probe"});N=null,await Yr(c.id,i);let f=await Ae(8e3,function(h){return h.kind==="session_opened"});N=null,i.postMessage({type:"session_probe"});let p=await Ae(8e3,function(h){return h.kind==="session_probe"});r.ok=!!(f&&d&&p&&p.messages>=2&&String(p.lastText||"").indexOf("\u4F1A\u8BDD B \u7684\u56DE\u7B54")>=0&&p.reviewFiles===u),r.result={first:d,second:p}}else{N=null,await Yr(l.id,i),await Ae(8e3,function(f){return f.kind==="session_opened"}),N=null,i.postMessage({type:"session_selftest",case:o});let d=await Ae(12e3,function(f){return String(f.kind||"").indexOf("session_"+o)===0});r.ok=!!(d&&/_ok$/.test(d.kind)&&d.reviewFiles===u),r.result={ack:d,reviewBefore:u}}await ar(l.id),await ar(c.id)}}else if(s.op==="tabprobe"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,o.postMessage({type:"tab_probe"});let i=await Ae(s.waitMs||6e3,function(a){return a.kind==="tab_probe"});r.ok=!!i,i||(r.error="\u6807\u7B7E\u680F\u6CA1\u6709\u56DE\u5E94"),r.result={ack:i,tabs:i?i.tabs:0,activeTab:i?i.activeTab:"",openTabs:we.slice(),activeId:Ee}}}else if(s.op==="webview_probe")r.ok=!0,r.result={panel:!!Te,view:!!ye,viewVisible:!!(ye&&ye.visible===!0),panelActive:Te&&Ot.get(Te.webview)||"",viewActive:ye&&Ot.get(ye.webview)||"",activeId:Ee,openTabs:we.slice()};else if(s.op==="sendmsg"){let o=De(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=s.msg||{type:"ping"},a=String(i&&i.type||"");if(l2.indexOf(a)<0)r.ok=!1,r.error="sendmsg \u4E0D\u653E\u884C "+(a||"(\u7A7A)");else{N=null,o.postMessage(i);let l=null;s.ackKind&&(l=await Ae(s.waitMs||8e3,function(c){return c.kind===s.ackKind})),r.ok=!s.ackKind||!!l,r.ok||(r.error="\u7B49\u5F85 ack "+s.ackKind+" \u8D85\u65F6"),r.result={ack:l,delivered:!0}}}}else if(s.op==="tabtest"){let o=s.case||"close_cancel";await ft();let i=De(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,i.postMessage({type:"tab_selftest",case:o});let a=await Ae(s.waitMs||3e4,function(l){return String(l.kind||"").indexOf("tab_"+o)===0});r.ok=!!(a&&/_ok$/.test(a.kind)),a||(r.error="\u6807\u7B7E\u81EA\u68C0\u6CA1\u6709\u56DE\u5E94"),r.result={ack:a,openTabs:we.slice(),activeId:Ee}}}else if(s.op==="sessionpersist"){let o=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",i=await ti([{role:"user",content:o}],s.modelKey,{});mu(s.modelKey,"chat"),Dt({t:"user",text:o}),Dt({t:"text",text:i.content}),Dt({t:"summary",text:"\u5B8C\u6210 \xB7 "+i.target.model.id});let a=xt(),l=a?be.load(a.id):null,c=(l&&l.items||[]).filter(function(u){return u.t==="text"});r.ok=!!(l&&c.length&&c[c.length-1].text===i.content),r.result={id:a&&a.id,path:a?be.fileOf(a.id):"",items:(l&&l.items||[]).length,lastText:c.length?c[c.length-1].text.slice(0,80):""}}else if(s.op==="memory"){let o=s.case||"build",i=(je()||{}).items||[],a=function(l){return{enabled:l.enabled,turns:l.turns,chars:l.chars,dropped:l.dropped,roles:l.messages.map(function(c){return c.role}),heads:l.messages.map(function(c){return i_(c.content,120)})}};if(o==="build"){let l=[{t:"user",text:"\u7B2C\u4E00\u4E2A\u95EE\u9898"},{t:"tool",name:"read_file",path:"a.js",ok:!0,result:"10 \u884C"},{t:"text",text:"\u7B2C\u4E00\u4E2A\u56DE\u7B54"},{t:"summary",text:"\u5B8C\u6210 \xB7 1 \u6B21\u5DE5\u5177\u8C03\u7528"},{t:"user",text:"\u8FFD\u95EE",ctx:"\u8FFD\u95EE\n\n[ref 1] a.js\n```js\nconst a = 1;\n```"},{t:"plan",text:"\u8BA1\u5212\u6B63\u6587"}],c=eo.build(l,Object.assign(Qr(),s.opts||{}));r.ok=!0,r.result=Object.assign(a(c),{config:Qr(),ctxUsed:c.messages.some(function(u){return u.content.indexOf("[ref 1]")>=0})})}else if(o==="spill"){let l=[];for(let m=0;m<6;m++)l.push({t:"user",text:"\u95EE\u9898"+m+" UNIQUE_MEM_"+m}),l.push({t:"text",text:"\u56DE\u7B54"+m+" \u5173\u4E8E UNIQUE_MEM_"+m});let c=_n.createStore(),u=eo.build(l,Object.assign(Qr(),{maxTurns:2,maxChars:2e4,spill:su(c)})),d=!!(u.spillDigest&&u.spillDigest.indexOf("\u66F4\u65E9\u8F6E\u6B21\u6458\u8981")>=0&&u.spillDigest.indexOf("UNIQUE_MEM_0")>=0),f=u.spillIds&&u.spillIds[0]||"",p=f?c.read(f):{ok:!1},h=!!(p&&p.ok&&String(p.content).indexOf("UNIQUE_MEM_0")>=0);r.ok=u.turns===2&&u.spilledTurns>=4&&d&&h,r.result={turns:u.turns,spilledTurns:u.spilledTurns,spillIds:u.spillIds,digestHead:String(u.spillDigest||"").slice(0,160),recalled:h,storeEntries:c.size()}}else if(o==="prefix"){let l=mt(s.modelKey),c=Jn(l&&l.provider)!=="none",u=Es.hash(cr("agent",R(),c),lr("agent",l)),d=Es.hash(cr("agent",R(),c),lr("agent",l)),f=Es.hash(cr("plan",R(),c),lr("plan",l));r.ok=u===d&&u!==f,r.result={agent:u,plan:f,stable:u===d,differsByMode:u!==f}}else if(o==="session"){let l=Cs(i,s.modelKey,Object.assign({},s.opts||{},{resolveImage:As(je())}));r.ok=!0,r.result=Object.assign(a(l),{id:Ee||"",items:i.length})}else if(o==="last")r.ok=!!Ct,r.result=Ct||{};else if(o==="live"){let l=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",c=Cs(i,s.modelKey,{resolveImage:As(je())}),u={text:""},d=await Ns(l,{root:R(),modelKey:s.modelKey,history:c.messages,onUserTurn:function(y){u.text=y}}),f=i.concat([{t:"user",text:l,ctx:u.text},{t:s.mode==="plan"?"plan":"text",text:d.text}]),p=Cs(f,s.modelKey,{resolveImage:As(je())});Ct=null;let h=await Ns(s.follow||"\u6211\u521A\u624D\u8BA9\u4F60\u505A\u4EC0\u4E48\uFF1F\u53EA\u56DE\u4E00\u53E5\u8BDD\u3002",{root:R(),modelKey:s.modelKey,mode:s.mode==="plan"?"plan":"agent",history:p.messages}),m=Ct&&Ct.roles||[];r.ok=!!(Ct&&m[0]==="system"&&m.indexOf("assistant")>0&&m[m.length-1]==="user"&&p.turns>=1),r.result={first:d.text.slice(0,200),follow:h.text.slice(0,200),memory:a(p),cache:zo.slice(-2),request:Ct}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="imgtest"){let o=String(s.case||"ext"),i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==";if(o==="panel"){await ft();let a=De(s.to);if(!a)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,a.postMessage({type:"img_selftest"});let l=await Ae(s.waitMs||12e3,function(c){return String(c.kind||"").indexOf("img_selftest")===0});r.ok=!!(l&&/_ok$/.test(l.kind)),l||(r.error="\u56FE\u7247\u81EA\u6D4B\u6CA1\u6709\u56DE\u5E94"),r.result={ack:l}}}else if(o==="ext"){let a="imgtest-"+Date.now().toString(36),l={},c=_e.saveImage(a,i),u=_e.ATTACH_DIR+D.sep+a,d=c?D.join(u,c.file):"";l.save=!!c&&c.mime==="image/png"&&c.bytes>0,l.file=!!d&&I.existsSync(d),l.readBack=!!c&&_e.readDataUrl(a,c)===i,l.preview=!!c&&_e.readPreview(a,c.file).ok===!0,l.badSession=_e.saveImage("../evil",i)===null,l.svg=_e.saveImage(a,"data:image/svg+xml;base64,PHN2Zy8+")===null,l.oversize=_e.saveImage(a,"data:image/png;base64,"+"A".repeat(Math.ceil(_e.MAX_BYTES*4/3)+1e3))===null;let f=[];for(let $=0;$<5;$++)f.push({file:"a"+$+".png",mime:"image/png",bytes:10});f.push({file:"../evil.png",mime:"image/png",bytes:10}),f.push({file:"x.svg",mime:"image/svg+xml",bytes:10}),f.push({file:"y.jpg",mime:"image/png",bytes:10});let p=Qn.clampItem({t:"user",text:"hi",images:f});l.clamp4=Array.isArray(p.images)&&p.images.length===4,l.clampClean=!!p.images&&p.images.every(function($){return $.file.indexOf("a")===0}),l.clampDrop=!Qn.clampItem({t:"user",text:"hi",images:[{file:"../x.png",mime:"image/png",bytes:1}]}).images,l.textOnly=_e.toContent("hi",[])==="hi";let h=_e.toContent("hi",[i]);l.multimodal=Array.isArray(h)&&h.length===2&&h[0].type==="text"&&h[1].type==="image_url"&&h[1].image_url.url===i;let m=[{t:"user",text:"\u770B\u56FE",images:[c]},{t:"text",text:"\u770B\u5230\u4E86"}],w=eo.build(m,Object.assign(Qr(),{enabled:!0,resolveImage:function(){return i}})).messages.filter(function($){return $.role==="user"});l.memImg=w.length===1&&Array.isArray(w[0].content)&&w[0].content[0].type==="text"&&w[0].content.some(function($){return $.type==="image_url"});let g=eo.build(m,Object.assign(Qr(),{enabled:!0,resolveImage:function(){return""}})).messages.filter(function($){return $.role==="user"});l.memDegrade=g.length===1&&typeof g[0].content=="string";let v=mt(s.modelKey),b=Jn(v&&v.provider)!=="none";l.prefixStable=Es.hash(cr("agent",R(),b),lr("agent",v))===Es.hash(cr("agent",R(),b),lr("agent",v));let S="imgtest-orphan-"+Date.now().toString(36),_=D.join(_e.ATTACH_DIR,S);try{I.mkdirSync(_,{recursive:!0})}catch{}let C=[];try{C=I.readdirSync(_e.ATTACH_DIR,{withFileTypes:!0})}catch{C=[]}let A=new Set;for(let $ of C)$.isDirectory()&&$.name!==S&&A.add($.name);let F=_e.sweepOrphans(A);l.sweep=F.removed===1&&!I.existsSync(_);let B=_e.removeSession(a);l.cleanup=B.removed>=1&&!I.existsSync(u)&&(!c||_e.readDataUrl(a,c)==="");let H=Object.keys(l).filter(function($){return!l[$]});r.ok=H.length===0,H.length&&(r.error="failed: "+H.join(",")),r.result=l}else if(o==="live"){await ft();let a=mt(s.modelKey),l=a&&a.model&&a.model.vision===!0?a:es().find(function(u){return u.model.vision===!0}),c=De(s.to);if(!c)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else if(!l)r.ok=!1,r.error="\u6CA1\u6709 vision:true \u7684\u6A21\u578B";else{let u=await ro("imgtest_live",c);await new Promise(function(C){setTimeout(C,600)}),N=null,c.postMessage({type:"synthetic_ask",prompt:s.prompt||"\u8FD9\u5F20\u56FE\u91CC\u6709\u4EC0\u4E48\uFF1F\u4E00\u53E5\u8BDD\u56DE\u7B54",mode:"chat",modelKey:l.key,images:[i]});let d=await Ae(s.waitMs||9e4,function(C){return C.kind==="dome_done"||C.kind==="dome_error"||C.kind==="plan_done"}),f=ge.get(u.id)||u,p=f&&f.items||[],h=p.slice().reverse().find(function(C){return C&&C.t==="user"}),m=_e.ATTACH_DIR+D.sep+u.id,y=[];try{y=I.readdirSync(m)}catch{y=[]}let T=Cs(p,l.key,{resolveImage:As(f)}).messages.filter(function(C){return C.role==="user"}),g=T.length?T[T.length-1]:null,v=Ct&&Ct.heads||[],b=v.length?String(v[v.length-1]):"",S={done:!!(d&&d.kind==="dome_done"),item:!!(h&&Array.isArray(h.images)&&h.images.length===1),files:y.length>=1,snapshot:b.indexOf("[\u56FE\u7247 \xD71]")===0,memory:!!(g&&Array.isArray(g.content)&&g.content.some(function(C){return C.type==="image_url"})),chipsCleared:!d||d.imgchips===0};await ar(u.id),S.removed=!I.existsSync(m);let _=Object.keys(S).filter(function(C){return!S[C]});r.ok=_.length===0,_.length&&(r.error="failed: "+_.join(",")),r.result={checks:S,ack:d,modelKey:l.key,heads:v.slice(-2)}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="browsertest"){let o=String(s.case||"ext");if(o==="ext"){let i={},a="luban-browser-selftest",l=kt.encodeFrame(1,Buffer.from(a,"utf8")),c=kt.decodeFrame(l);i.frameRoundtrip=!!c&&c.opcode===1&&c.payload.toString("utf8")===a;let u=kt.encodeFrame(1,Buffer.alloc(300,97)),d=kt.decodeFrame(u);i.midLength=!!d&&d.payload.length===300;let f=kt.encodeFrame(1,Buffer.alloc(7e4,98)),p=kt.decodeFrame(f);i.bigLength=!!p&&p.payload.length===7e4,i.masked=!!(l[1]&128),i.shortFrame=kt.decodeFrame(Buffer.from([129]))===null,i.urlHttps=kt.normalizeUrl("example.com")==="https://example.com",i.urlLocalhost=kt.normalizeUrl("localhost:3000/x")==="http://localhost:3000/x",i.urlData=kt.normalizeUrl("data:text/html,hi")==="data:text/html,hi";let h=!1;try{kt.normalizeUrl("javascript:alert(1)")}catch{h=!0}i.urlBlocked=h,i.ax=kt.formatAxTree([{nodeId:"1",role:{value:"RootWebArea"},name:{value:"T"},childIds:["2"]},{nodeId:"2",parentId:"1",role:{value:"button"},name:{value:"Go"}},{nodeId:"3",parentId:"2",role:{value:"StaticText"},name:{value:"Go"}}],4e3).indexOf('button "Go"')>=0,i.notFoundShape=typeof kt.findChrome("definitely-not-here.exe").path=="string";let m=Object.keys(i).filter(function(y){return!i[y]});r.ok=m.length===0,m.length&&(r.error="failed: "+m.join(",")),r.result={checks:i,failed:m}}else if(o==="live"){let i=kt.findChrome(wr().chromePath);if(!i.path)r.ok=!0,r.result={skipped:!0,reason:"\u6CA1\u6709\u627E\u5230 Chrome / Edge\uFF0C\u8DF3\u8FC7\u771F\u673A\u90E8\u5206"};else{let a=null;try{let l=wr();a=await kt.launch({exe:l.chromePath,headless:!0,width:800,height:600});let c=function(b){return"data:text/html,"+encodeURIComponent("<title>"+b+"</title><h1>"+b+'</h1><script>console.log("'+b+'")</script>')},u=function(b){return(b||[]).map(function(S){return String(S&&S.text||"")}).join("|")};await a.navigate("data:text/html,<title>LubanBrowserTest</title><h1>hello browser</h1><button>Go</button>");let d=await a.snapshot(2e3),f=await a.screenshot({});await a.navigate(c("PAGE-A")),await Ca(300);let p=u(a.consoleEntries(20));await a.navigate(c("PAGE-B")),await Ca(300);let h=u(a.consoleEntries(20)),m="";try{await a.navigate("http://127.0.0.1:9/")}catch(b){m=String(b&&b.message||b)}await Ca(400);let y=u(a.networkEntries(20));await a.navigate(c("PAGE-C")),await Ca(300);let w=a.networkEntries(20).length,T=u(a.consoleEntries(20)),g={snapshot:d.indexOf("hello browser")>=0,axRole:d.indexOf("button")>=0,shot:f.indexOf("data:image/jpeg;base64,")===0&&f.length>1e3,consoleCaptured:p.indexOf("PAGE-A")>=0,consoleNoLeak:h.indexOf("PAGE-B")>=0&&h.indexOf("PAGE-A")<0,networkKeptOnFailure:/127\.0\.0\.1:9|ERR_CONNECTION_REFUSED/.test(y),networkResetOnNav:w===0,consoleResetOnNav:T.indexOf("PAGE-C")>=0&&T.indexOf("PAGE-B")<0},v=Object.keys(g).filter(function(b){return!g[b]});r.ok=v.length===0,v.length&&(r.error="failed: "+v.join(",")),r.result={checks:g,exe:i.path,shotChars:f.length,snap:d.slice(0,400),consoleA:p.slice(0,200),consoleB:h.slice(0,200),consoleC:T.slice(0,200),networkFailed:y.slice(0,200),navFailed:m.slice(0,200)}}catch(l){r.ok=!1,r.error=String(l&&l.message||l)}finally{if(a)try{await a.close()}catch{}}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="computertest"){let o=String(s.case||"ext");if(o==="ext"){let i=HI(),a={};a.keyLetter=ue.parseKeys("a").code===i.a&&ue.parseKeys("a").flags===0,a.keyUpper=ue.parseKeys("P").flags===ue.FLAGS.shift&&ue.parseKeys("P").code===i.p,a.keyCombo=function(){let p=ue.parseKeys("cmd+shift+p");return p.code===i.p&&p.flags===(ue.FLAGS.cmd|ue.FLAGS.shift)}();let l=!1;try{ue.parseKeys("hyper+a")}catch(p){l=/不认识的修饰键/.test(p.message)}a.keyBadModifier=l;let c=!1;try{ue.parseKeys("cmd+nope")}catch(p){c=/不认识的键/.test(p.message)}a.keyBadName=c,a.charCjk=ue.charToKey("\u4E2D")===null,a.charShiftSymbol=function(){let p=ue.charToKey("!");return p&&p.shift===!0&&p.code===i.bang}(),a.regionString=function(){let p=ue.parseRegion("10,20,300,400");return p.width===300&&p.height===400}();let u=!1;try{ue.parseRegion("1,2,3")}catch(p){u=/region 格式/.test(p.message)}a.regionBad=u;let d=ue.formatOcr([{t:"B",x:10,y:40,w:60,h:10},{t:"A",x:10,y:10,w:60,h:10},{t:"A",x:10,y:10,w:60,h:10}],{originX:100,originY:50,ratio:2},4e3);if(a.ocrOrder=d.indexOf("A")<d.indexOf("B"),a.ocrDedup=(d.match(/A/g)||[]).length===1,a.ocrCoords=/\[120,70\]/.test(d),process.platform==="darwin")try{let p=ue.TMP_DIR;I.mkdirSync(p,{recursive:!0});let h=D.join(p,"selftest-"+Date.now()+".png"),m=Buffer.alloc(33);Buffer.from([137,80,78,71,13,10,26,10]).copy(m,0),m.writeUInt32BE(13,8),m.write("IHDR",12,"ascii"),m.writeUInt32BE(7,16),m.writeUInt32BE(5,20),I.writeFileSync(h,m);let y=await ue.imageSize(h);a.imageHeader=y.width===7&&y.height===5,I.unlinkSync(h)}catch{a.imageHeader=!1}let f=Object.keys(a).filter(function(p){return!a[p]});r.ok=f.length===0,f.length&&(r.error="failed: "+f.join(",")),r.result={checks:a,failed:f,platform:process.platform}}else if(o==="live"){let i=await ue.check().catch(function(a){return{ok:!1,notes:[String(a&&a.message||a)]}});if(!i.ok)r.ok=!0,r.result={skipped:!0,reason:(i.notes||[]).join("\uFF1B")||"\u5F53\u524D\u5E73\u53F0\u7F3A\u5C11\u622A\u5C4F / \u6CE8\u5165\u80FD\u529B\u6216\u7CFB\u7EDF\u6388\u6743\u672A\u7ED9"};else{let a={};try{let c=await ue.capture({region:"0,0,120,90",maxWidth:360});a.shot=/^data:image\/jpeg;base64,/.test(c.dataUrl)&&c.dataUrl.length>1e3,a.shotRatio=Math.abs(c.ratio-1)<.01;let u=await ue.windows({limit:10});a.windows=Array.isArray(u.windows);let d=await ue.frontmost();a.frontmost=typeof d.pid=="number";let f=await ue.cursor();a.cursor=isFinite(f.x)&&isFinite(f.y),a.click=/单击/.test(await ue.click({x:300,y:400,dry:!0})),a.drag=/拖到/.test(await ue.drag({x:300,y:400,toX:400,toY:500,dry:!0})),a.scroll=/滚动/.test(await ue.scroll({x:300,y:400,dy:50,dry:!0})),a.typeAscii=/按键码/.test(await ue.type({text:"ok",dry:!0})),a.key=/已按键/.test(await ue.key({keys:"cmd+shift+p",dry:!0}));let p=await ue.ocr({shot:c,maxChars:500});a.ocr=ds?typeof p.text=="string"&&/未实现 OCR/.test(p.text):typeof p.text=="string"&&p.text.indexOf("\u5C4F\u5E55\u6587\u5B57")>=0;try{I.unlinkSync(c.file)}catch{}}catch(c){a.error=String(c&&c.message||c)}let l=Object.keys(a).filter(function(c){return!a[c]});r.ok=l.length===0,l.length&&(r.error="failed: "+l.join(",")),r.result={checks:a,failed:l,screens:i.screens,screenRecording:i.screenRecording,accessibility:i.accessibility}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="copytest"){let o=String(s.case||"ext");if(o==="ext"){let i="luban-copytest-"+Date.now().toString(36),a="",l="";try{a=await x.env.clipboard.readText()}catch{a=""}try{await x.env.clipboard.writeText(i),l=await x.env.clipboard.readText()}catch{l=""}try{await x.env.clipboard.writeText(a)}catch{}r.ok=l===i,r.result={roundtrip:l===i,len:l.length}}else if(o==="panel"){await ft();let i=De(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{N=null,i.postMessage({type:"copy_selftest"});let a=await Ae(s.waitMs||12e3,function(l){return String(l.kind||"").indexOf("copy_selftest")===0});r.ok=!!(a&&/_ok$/.test(a.kind)),a||(r.error="\u590D\u5236\u81EA\u6D4B\u6CA1\u6709\u56DE\u5E94"),r.result={ack:a}}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="budget"){let o=String(s.case||"limits");if(o==="size"){let i=[{role:"assistant",content:"x".repeat(100),tool_calls:[{id:"call_a",type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"a.js"})}}]},{role:"tool",tool_call_id:"call_a",content:"y".repeat(300)}],a=i.reduce(function(c,u){return c+String(u.content||"").length},0),l=Oe.charsOf(i);r.ok=l>a,r.result={contentOnly:a,full:l,delta:l-a}}else if(o==="compact"){let i=[{role:"system",content:"sys"},{role:"user",content:"\u95EE\u9898"}];for(let h=0;h<12;h++){let m="call_"+h;i.push({role:"assistant",content:"",tool_calls:[{id:m,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+h+".js",pad:"z".repeat(2e3)})}}]}),i.push({role:"tool",tool_call_id:m,content:"r".repeat(5e3)})}let a=Oe.charsOf(i),l=Oe.compact(i,{keepTail:8}),c=[];for(let h of l.messages)for(let m of h.tool_calls||[])c.push(String(m.id));let u=l.messages.filter(function(h){return h.role==="tool"}).map(function(h){return String(h.tool_call_id)}),d=c.length===u.length&&c.every(function(h){return u.indexOf(h)>=0}),p=l.messages.slice(l.messages.length-8).every(function(h,m){let y=i[i.length-8+m];return h===y});r.ok=l.messages.length===i.length&&d&&p&&l.afterChars<a&&l.omittedTools>0,r.result={messages:i.length,paired:d,tailIntact:p,beforeChars:a,afterChars:l.afterChars,savedChars:l.savedChars,omittedTools:l.omittedTools,omittedArgs:l.omittedArgs,keptTail:l.keptTail,sample:String(l.messages[3]&&l.messages[3].content||"").slice(0,80)}}else if(o==="spill"){let i=_n.createStore(),a=su(i),l=[{role:"system",content:"sys"},{role:"user",content:"\u95EE\u9898"}],c="UNIQUE_SPILL_BODY_"+Date.now();for(let y=0;y<6;y++){let w="call_"+y;l.push({role:"assistant",content:"",tool_calls:[{id:w,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+y+".js"})}}]}),l.push({role:"tool",tool_call_id:w,content:(y===0?c+`
|
|
1198
1198
|
`:"")+"r".repeat(3e3)})}let u=Oe.compact(l,{keepTail:2,spill:a}),d=String(u.messages[3]&&u.messages[3].content||""),f=d.match(/id=(sp_[A-Za-z0-9_]+)/),p=f?f[1]:"",h=p?i.read(p):{ok:!1},m=!!(h&&h.ok&&String(h.content).indexOf(c)>=0);r.ok=u.spilled>0&&d.indexOf("\u6458\u8981\uFF1A")>=0&&d.indexOf("read_spill")>=0&&m,r.result={spilled:u.spilled,omittedTools:u.omittedTools,storeEntries:i.size(),placeholder:d.slice(0,120),spillId:p,recalled:m}}else if(o==="repeat"){let i=Oe.fingerprint("read_file",{b:1,a:2}),a=Oe.fingerprint("read_file",{a:2,b:1}),l=Oe.fingerprint("read_file",{a:3,b:2}),c=[i,i,i,l].filter(function(u){return u===i}).length;r.ok=i===a&&i!==l&&c>=Xo.repeatLimit,r.result={stableOrder:i===a,differsByArgs:i!==l,hits:c,limit:Xo.repeatLimit}}else if(o==="summaryDigest"){let i=rm([{name:"read_file",path:"a.js",ok:!0},{name:"read_file",path:"a.js",ok:!0},{name:"search_code",path:"foo",ok:!0},{name:"read_file",path:"b.js",ok:!1}],15),a=Vc([{role:"user",content:`\u770B\u8FD9\u91CC
|
|
1199
1199
|
\u5206\u6279\u5904\u7406\uFF08\u5171 6 \u6279\uFF09\uFF1A
|
|
1200
|
-
1. src/ \u2192 dir="src"`}]),l=!Vc([{role:"user",content:"\u666E\u901A\u63D0\u95EE"}]);r.ok=i.length===3&&i[2].indexOf("\u5931\u8D25")>=0&&a&&l,r.result={digest:i,hasBatch:a,noBatch:l}}else if(o==="profile"){let i=s.mode?String(s.mode):"auto",l=[4096,8192,12288,16384,32768,65536].map(function(d){let f=bn.profile(d,{mode:i}),p=f.compact?Ac:Cc,h=f.compact?bn.compactTools(
|
|
1200
|
+
1. src/ \u2192 dir="src"`}]),l=!Vc([{role:"user",content:"\u666E\u901A\u63D0\u95EE"}]);r.ok=i.length===3&&i[2].indexOf("\u5931\u8D25")>=0&&a&&l,r.result={digest:i,hasBatch:a,noBatch:l}}else if(o==="profile"){let i=s.mode?String(s.mode):"auto",l=[4096,8192,12288,16384,32768,65536].map(function(d){let f=bn.profile(d,{mode:i}),p=f.compact?Ac:Cc,h=f.compact?bn.compactTools(ur,f.tier):ur,m=bn.fixedChars(p,h),y=Math.floor(d*Xo.windowRatio);return{window:d,tier:f.tier,compact:f.compact,readMax:f.readMax,runMaxChars:f.runMaxChars,searchFiles:f.searchFiles,grepHits:f.grepHits,autoCtxChars:f.autoCtxChars,memoryTurns:f.memoryTurns,memoryChars:f.memoryChars,keepTailSteps:f.keepTailSteps,tools:h.length,fixedChars:m,fixedTokens:Math.ceil(m*Oe.DEFAULTS.ratio),highTokens:y,freeTokens:y-Math.ceil(m*Oe.DEFAULTS.ratio)}}),c=!0;for(let d=1;d<l.length;d++)for(let f of["readMax","autoCtxChars","memoryChars","searchFiles","grepHits"])l[d][f]<l[d-1][f]&&(c=!1);let u=l[1];r.ok=c&&u.freeTokens>=3e3,r.result={mode:i,monotonic:c,rows:l}}else if(o==="overhead"){let i=Cc.length+Oe.charsOfTools(ur),a=["small","tiny"].map(function(l){let c=Oe.charsOfTools(bn.compactTools(ur,l)),u=Ac.length+c;return{tier:l,toolsChars:c,systemChars:Ac.length,chars:u,tokens:Math.ceil(u*Oe.DEFAULTS.ratio),savedRatio:Math.round((1-u/i)*100)/100}});r.ok=a.every(function(l){return l.chars/i<.6}),r.result={base:{toolsChars:Oe.charsOfTools(ur),systemChars:Cc.length,chars:i,tokens:Math.ceil(i*Oe.DEFAULTS.ratio)},rows:a}}else if(o==="squeeze"){let i=[{role:"system",content:"S".repeat(800)},{role:"user",content:"\u539F\u59CB\u95EE\u9898"}];for(let A=0;A<40;A++){let F="call_s"+A;i.push({role:"assistant",content:"",tool_calls:[{id:F,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+A+".js"})}}]}),i.push({role:"tool",tool_call_id:F,content:"r".repeat(3e3)})}let a={role:"user",content:"\u6700\u540E\u4E00\u6B21\u63D0\u95EE"};i.push(a);let l=Oe.charsOf(i),c=6e3,u=bn.squeeze(i,c),d=[];for(let A of u.messages)for(let F of A.tool_calls||[])d.push(String(F.id));let f=u.messages.filter(function(A){return A.role==="tool"}).map(function(A){return String(A.tool_call_id)}),p=d.length===f.length&&d.every(function(A){return f.indexOf(A)>=0}),h=u.messages[u.messages.length-1]===a,m=u.messages[0]===i[0],y=u.messages.some(function(A){return A.role==="assistant"&&!A.tool_calls&&A.content}),w=[{role:"system",content:"S".repeat(800)},{role:"user",content:"\u8BFB\u8FD9\u4E9B\u6587\u4EF6\u5E76\u603B\u7ED3"}];for(let A=0;A<20;A++){let F="call_u"+A;w.push({role:"assistant",content:"",tool_calls:[{id:F,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"u"+A+".js"})}}]}),w.push({role:"tool",tool_call_id:F,content:"r".repeat(3e3)})}let T=bn.squeeze(w,c,{keepRecent:2}),g=[];for(let A of T.messages)for(let F of A.tool_calls||[])g.push(String(F.id));let v=T.messages.filter(function(A){return A.role==="tool"}).map(function(A){return String(A.tool_call_id)}),b=g.length===v.length&&g.every(function(A){return v.indexOf(A)>=0}),S=T.messages.some(function(A){return A===w[1]}),_=g.indexOf("call_u19")>=0&&g.indexOf("call_u0")<0,C=T.ok&&T.chars<=c&&b&&S&&_&&T.dropped>0;r.ok=u.ok&&u.chars<=c&&p&&h&&m&&y&&u.dropped>0&&C,r.result={ok:u.ok,beforeChars:l,afterChars:u.chars,cap:c,dropped:u.dropped,paired:p,tailKept:h,sysKept:m,solo:{ok:T.ok,chars:T.chars,dropped:T.dropped,paired:b,userKept:S,recentKept:_},summary:String(u.summary||"").slice(0,120)}}else if(o==="limits"){let i=mt(s.modelKey),a=nm(),l=i&&i.model&&Number(i.model.maxInputTokens)>0?Number(i.model.maxInputTokens):65536;r.ok=!0,r.result={limits:a,window:l,profile:bn.profile(l,{mode:sm()}),highTokens:Math.floor(l*a.windowRatio),lowTokens:Math.floor(l*a.lowRatio),ratio:Oe.DEFAULTS.ratio}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="autocontext"){let o=String(s.case||"block"),i=qh();if(o==="block"){let a;if(s.text!=null){let c=String(s.text).split(`
|
|
1201
1201
|
`),u=Math.max(1,Math.floor(Number(s.lineCount)||c.length)),d=Math.min(Math.max(1,Math.floor(Number(s.cursorLine)||1)),u),f=String(s.text),p=s.startLine||1,h=s.endLine||0,m=!1;if(s.cursorLine!=null||s.lineCount!=null||s.windowLines!=null){let y=dt.windowRange({lineCount:u,cursorLine:d,windowLines:s.windowLines});y.whole?(p=1,h=u):(f=c.slice(y.start-1,y.end).join(`
|
|
1202
|
-
`),p=y.start,h=y.end,m=!0)}a=dt.build({path:s.path||"src/demo.js",text:f,startLine:p,endLine:h,hasSelection:!!s.selection,maxChars:Number(s.maxChars)||i.maxChars,cursorLine:d,totalLines:u,windowed:m})}else a=Bh([],s.root||R());let l=!!(a&&(typeof a=="string"?a:a.block));r.ok=l,r.result={config:i,block:typeof a=="string"?a:a.block,mode:typeof a=="string"?"live":a.mode,chars:typeof a=="string"?a.length:a.chars,truncated:typeof a=="string"?!1:a.truncated}}else o==="window"?(r.ok=!0,r.result={config:i,head:dt.windowRange({lineCount:1200,cursorLine:1,windowLines:200}),middle:dt.windowRange({lineCount:1200,cursorLine:600,windowLines:200}),tail:dt.windowRange({lineCount:1200,cursorLine:1200,windowLines:200}),small:dt.windowRange({lineCount:105,cursorLine:50,windowLines:200}),custom:dt.windowRange({lineCount:1200,cursorLine:600,windowLines:100})}):o==="skip"?(r.ok=!0,r.result={binary:dt.shouldSkip({scheme:"file",head:"a\0b"}),virtual:dt.shouldSkip({scheme:"git"})}):o==="session"?(r.ok=!0,r.result={noSession:dt.sessionOwns(null,"a.js",!1),selection:dt.sessionOwns(new Set,"a.js",!0),owned:dt.sessionOwns(new Set(["a.js"]),"a.js",!1),other:dt.sessionOwns(new Set(["b.js"]),"a.js",!1),arrayOwned:dt.sessionOwns(["a.js"],"a.js",!1)}):(r.ok=!1,r.error="\u672A\u77E5 case: "+o)}else if(s.op==="workset"){let o=String(s.case||"live");if(o==="live"){let i=$S();r.ok=!0,r.result={files:de.size,block:i,chars:i.length}}else if(o==="stub"){let i=Array.isArray(s.records)?s.records:[],a=pS.block(i,{maxChars:s.maxChars});r.ok=!0,r.result={block:a.block,files:a.files,omitted:a.omitted,truncated:a.truncated,chars:a.chars}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="search"){let o=String(s.case||"query"),i=s.root||R();if(o==="stats")r.ok=!0,r.result=
|
|
1203
|
-
`);let c=Ve.rangeOf("7d",a),u=Ve.aggregate(Ve.read(i,c.from,c.to).rows,c),d=Ve.rangeOf("all",a),f=Ve.aggregate(Ve.read(i,d.from,d.to).rows,d);r.ok=u.turns===2&&u.requests===4&&u.totalTokens===45e3&&u.hit===.907&&u.estimatedTurns===1&&u.partialTurns===1&&u.byModel.length===2&&u.byModel[0].model==="deepseek-flash"&&u.byModel[0].share===.973&&u.byDay.length===7&&u.byDay[6].totalTokens===43800&&f.turns===3&&f.byDay.length===57,r.result={seven:{turns:u.turns,requests:u.requests,totalTokens:u.totalTokens,cachedTokens:u.cachedTokens,hit:u.hit,estimatedTurns:u.estimatedTurns,partialTurns:u.partialTurns,models:u.byModel.map(function(p){return[p.model,p.totalTokens,p.share]}),modes:u.byMode.map(function(p){return[p.mode,p.totalTokens]}),days:u.byDay.map(function(p){return[p.day,p.totalTokens,!!p.empty]})},all:{turns:f.turns,days:f.byDay.length,totalTokens:f.totalTokens}}}else if(o==="range"){let i=new Date(2026,9,27,23,30,0).getTime(),a=Ve.rangeOf("today",i),l=Ve.rangeOf("7d",i),c=Ve.rangeOf("30d",i),u=Ve.rangeOf("all",i);r.ok=a.from===new Date(2026,9,27,0,0,0,0).getTime()&&l.from===new Date(2026,9,21,0,0,0,0).getTime()&&c.from===new Date(2026,8,28,0,0,0,0).getTime()&&u.from===0&&u.to===i&&a.days===1&&l.days===7&&c.days===30&&Ve.rangeOf("nope",i).key==="7d",r.result={today:a,d7:l,d30:c,all:u,fallback:Ve.rangeOf("nope",i).key}}else if(o==="ui"){s.range&&Ve.RANGES.some(function(l){return l.key===String(s.range)})&&(Un=String(s.range)),U_(t),N=null;let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.source==="dashboard"){a=N;break}r.ok=!!(a&&/_ok$/.test(String(a.kind||""))),r.result={ack:a||{kind:"timeout"},range:Un,dir:
|
|
1202
|
+
`),p=y.start,h=y.end,m=!0)}a=dt.build({path:s.path||"src/demo.js",text:f,startLine:p,endLine:h,hasSelection:!!s.selection,maxChars:Number(s.maxChars)||i.maxChars,cursorLine:d,totalLines:u,windowed:m})}else a=Bh([],s.root||R());let l=!!(a&&(typeof a=="string"?a:a.block));r.ok=l,r.result={config:i,block:typeof a=="string"?a:a.block,mode:typeof a=="string"?"live":a.mode,chars:typeof a=="string"?a.length:a.chars,truncated:typeof a=="string"?!1:a.truncated}}else o==="window"?(r.ok=!0,r.result={config:i,head:dt.windowRange({lineCount:1200,cursorLine:1,windowLines:200}),middle:dt.windowRange({lineCount:1200,cursorLine:600,windowLines:200}),tail:dt.windowRange({lineCount:1200,cursorLine:1200,windowLines:200}),small:dt.windowRange({lineCount:105,cursorLine:50,windowLines:200}),custom:dt.windowRange({lineCount:1200,cursorLine:600,windowLines:100})}):o==="skip"?(r.ok=!0,r.result={binary:dt.shouldSkip({scheme:"file",head:"a\0b"}),virtual:dt.shouldSkip({scheme:"git"})}):o==="session"?(r.ok=!0,r.result={noSession:dt.sessionOwns(null,"a.js",!1),selection:dt.sessionOwns(new Set,"a.js",!0),owned:dt.sessionOwns(new Set(["a.js"]),"a.js",!1),other:dt.sessionOwns(new Set(["b.js"]),"a.js",!1),arrayOwned:dt.sessionOwns(["a.js"],"a.js",!1)}):(r.ok=!1,r.error="\u672A\u77E5 case: "+o)}else if(s.op==="workset"){let o=String(s.case||"live");if(o==="live"){let i=$S();r.ok=!0,r.result={files:de.size,block:i,chars:i.length}}else if(o==="stub"){let i=Array.isArray(s.records)?s.records:[],a=pS.block(i,{maxChars:s.maxChars});r.ok=!0,r.result={block:a.block,files:a.files,omitted:a.omitted,truncated:a.truncated,chars:a.chars}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="search"){let o=String(s.case||"query"),i=s.root||R();if(o==="stats")r.ok=!0,r.result=fr.stats(i);else if(o==="reset")fr.reset(i),r.ok=!0,r.result={reset:!0};else{let a=fr.search(i,s.query||"boostBudget",{maxFiles:V_(),maxResults:Number(s.maxResults)||10,contextLines:s.contextLines==null?0:Number(s.contextLines),prefix:s.dir?String(s.dir):""}),l=String(s.dir||"").replace(/^\/+|\/+$/g,""),c=!l||a.hits.every(function(u){return u.path===l||String(u.path).indexOf(l+"/")===0});k("headless_search",{query:a.query,files:a.files,indexed:a.indexed,hits:a.hits.length,ms:a.tookMs,dir:l||void 0}),r.ok=a.hits.length>0&&c,r.result=Object.assign({},a,{text:fr.format(a),dir:l||"",underPrefix:c})}}else if(s.op==="fim"){let o=jc.buildPrompt({path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0,prefixLines:s.prefixLines,suffixLines:s.suffixLines}),i=jc.trimCompletion(s.completion||"",o.suffix),a=mt(s.modelKey);if(s.case==="request"){let l=await MS({modelKey:s.modelKey,path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0});r.ok=!0,r.result={base:Lc(a&&a.provider),model:l.model,promptChars:l.promptChars,suffixChars:l.suffixChars,text:l.text,rawChars:l.rawChars,usage:l.usage}}else r.ok=!0,r.result={base:Lc(a&&a.provider),enabled:gu().enabled,prompt:o.prompt,suffix:o.suffix,chars:o.chars,completion:i}}else if(s.op==="cache"){let o=Math.max(1,Math.min(vS,Number(s.count)||20)),i=zo.slice(-o),a=0,l=0,c=0;for(let h of i)a+=h.cachedTokens,l+=h.promptTokens,c+=h.prefixTokens;let u=i.filter(function(h){return h.prefixSource==="prev"&&h.prefixTokens>0}),d=0,f=0;for(let h of u)d+=h.cachedTokens,f+=h.prefixTokens;let p=i.filter(function(h){return h.cachedTokens===0&&h.prefixTokens>0}).length;r.ok=!0,r.result={streamUsage:(Vt.providers||[]).map(function(h){return{id:h.id,on:h.streamUsage!==!1&&!uh[h.id]}}),entries:i,summary:{count:i.length,promptTokens:l,cachedTokens:a,prefixTokens:c,hit:l>0?Number((a/l).toFixed(3)):0,coverage:f>0?Number(Math.min(1,d/f).toFixed(3)):0,coverageSamples:u.length,misses:p}}}else if(s.op==="usage"){let o=String(s.case||"live");if(o==="aggregate"){let i=I.mkdtempSync(D.join(lt.tmpdir(),"luban-usage-")),a=new Date(2026,9,27,12,0,0).getTime(),l=function(p,h,m){Ve.append(i,Ve.row(Object.assign({provider:"deepseek",model:"deepseek-flash",modelKey:"deepseek::deepseek-flash",mode:"agent",source:"view",session:"s1"},h||{}),p,m))};l({requests:3,promptTokens:42e3,completionTokens:1800,totalTokens:43800,cachedTokens:39e3,contextTokens:15e3,window:65536},{},a),l({requests:1,promptTokens:1e3,completionTokens:200,totalTokens:1200,estimated:!0,partial:!0},{model:"deepseek-chat",modelKey:"deepseek::deepseek-chat",mode:"chat"},a-2*864e5),l({requests:1,promptTokens:500,completionTokens:100,totalTokens:600},{mode:"plan"},new Date(2026,8,1,10,0,0).getTime()),I.appendFileSync(D.join(i,Ve.monthOf(a)+".jsonl"),`{oops
|
|
1203
|
+
`);let c=Ve.rangeOf("7d",a),u=Ve.aggregate(Ve.read(i,c.from,c.to).rows,c),d=Ve.rangeOf("all",a),f=Ve.aggregate(Ve.read(i,d.from,d.to).rows,d);r.ok=u.turns===2&&u.requests===4&&u.totalTokens===45e3&&u.hit===.907&&u.estimatedTurns===1&&u.partialTurns===1&&u.byModel.length===2&&u.byModel[0].model==="deepseek-flash"&&u.byModel[0].share===.973&&u.byDay.length===7&&u.byDay[6].totalTokens===43800&&f.turns===3&&f.byDay.length===57,r.result={seven:{turns:u.turns,requests:u.requests,totalTokens:u.totalTokens,cachedTokens:u.cachedTokens,hit:u.hit,estimatedTurns:u.estimatedTurns,partialTurns:u.partialTurns,models:u.byModel.map(function(p){return[p.model,p.totalTokens,p.share]}),modes:u.byMode.map(function(p){return[p.mode,p.totalTokens]}),days:u.byDay.map(function(p){return[p.day,p.totalTokens,!!p.empty]})},all:{turns:f.turns,days:f.byDay.length,totalTokens:f.totalTokens}}}else if(o==="range"){let i=new Date(2026,9,27,23,30,0).getTime(),a=Ve.rangeOf("today",i),l=Ve.rangeOf("7d",i),c=Ve.rangeOf("30d",i),u=Ve.rangeOf("all",i);r.ok=a.from===new Date(2026,9,27,0,0,0,0).getTime()&&l.from===new Date(2026,9,21,0,0,0,0).getTime()&&c.from===new Date(2026,8,28,0,0,0,0).getTime()&&u.from===0&&u.to===i&&a.days===1&&l.days===7&&c.days===30&&Ve.rangeOf("nope",i).key==="7d",r.result={today:a,d7:l,d30:c,all:u,fallback:Ve.rangeOf("nope",i).key}}else if(o==="ui"){s.range&&Ve.RANGES.some(function(l){return l.key===String(s.range)})&&(Un=String(s.range)),U_(t),N=null;let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),N&&N.source==="dashboard"){a=N;break}r.ok=!!(a&&/_ok$/.test(String(a.kind||""))),r.result={ack:a||{kind:"timeout"},range:Un,dir:gr}}else{let i=Ve.rangeOf(s.range||Un),a=Ve.read(gr,i.from,i.to),l=Ve.aggregate(a.rows,i);r.ok=!0,r.result={dir:gr,range:i,files:a.files,badLines:a.bad,record:em(),summary:{turns:l.turns,requests:l.requests,promptTokens:l.promptTokens,completionTokens:l.completionTokens,totalTokens:l.totalTokens,cachedTokens:l.cachedTokens,hit:l.hit,estimatedTurns:l.estimatedTurns,partialTurns:l.partialTurns},byModel:l.byModel,byMode:l.byMode,byDay:l.byDay.slice(-14),last:a.rows.slice(-5)}}}else if(s.op==="commands"){let o=await x.commands.getCommands(!0),i=(s.filter||"").toLowerCase();r.ok=!0,r.result=o.filter(a=>a.toLowerCase().includes(i)).slice(0,80)}else if(s.op==="doc"){let o=x.window.activeTextEditor;r.ok=!0,r.result=o?{text:o.document.getText().slice(0,4e3),uri:o.document.uri.fsPath}:"no active editor"}else if(s.op==="readonly"){let o=s.cmd==null?String(s.command||""):String(s.cmd),i=pr.check(o);r.ok=!0,r.result={cmd:o,verdict:i.ok?"allow":"deny",reason:i.reason||"",segment:i.segment||"",strict:eu()}}else if(s.op==="mcp"){try{await xe.ready()}catch{}let o=xe.status();r.ok=!0,r.result={configPaths:o.configPaths,configErrors:o.configErrors,servers:o.servers,tools:o.tools,agentTools:xe.toolDefs({}).map(function(i){return i.function.name}),planTools:xe.toolDefs({planOnly:!0}).map(function(i){return i.function.name}),promptBlock:xe.promptBlock()}}else if(s.op==="mcp_call"){let o=String(s.name||"");if(!o&&s.server&&s.tool){let i=xe.status().tools.find(function(a){return a.server===s.server&&a.tool===s.tool});o=i?i.name:""}if(!o)r.ok=!1,r.error="\u7F3A\u5C11 name \u6216 server+tool";else{let i=await xe.callTool(o,s.args||{});r.ok=!0,r.result={name:o,chars:i.length,truncated:i.indexOf("\u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]")>=0,text:i.slice(0,2e3)}}}else if(s.op==="mcp_reload"){xe.configure({root:s.root||R(),version:fs,rec:k});let o=await xe.reload();r.ok=!0,r.result={servers:o.servers,tools:o.tools}}else if(s.op==="skills"){let o=s.root||R();Gt.configure({root:o,rec:k});let i=Gt.refresh(o);r.ok=!0,r.result={count:i.length,dirs:Gt.status().dirs,skills:Gt.list(),blockHead:Gt.block().slice(0,1200)}}else if(s.op==="skill_read"){let o=Gt.read(s.name,s.file);r.ok=!0,r.result={chars:o.length,head:o.slice(0,1200),text:o}}else if(s.op==="rules"){let o=s.root||R();en.configure(Object.assign({root:o,rec:k},b_()));let i=en.refresh(o),a=en.block();r.ok=!0,r.result={count:i.length,enabled:en.status().enabled,dirs:en.status().dirs,rules:en.list(),blockChars:a.length,blockHead:a.slice(0,1200),matched:en.matched(s.files||[]).slice(0,1200)}}else if(s.op==="rule_read"){let o=en.read(s.name);r.ok=!0,r.result={chars:o.length,head:o.slice(0,1200),text:o}}else{let o=await x.commands.executeCommand(s.cmd,...s.args||[]);r.ok=!0,r.result=o===void 0?"undefined":JSON.stringify(o).slice(0,500)}}catch(o){r.ok=!1,r.error=o.message}k("remote_cmd",{op:r.op,ok:r.ok,error:r.error}),jh();try{I.writeFileSync(n,JSON.stringify(r,null,2))}catch{}},1500)}async function u2(){for(let t of Cn.values())try{clearTimeout(t)}catch{}Cn.clear();for(let t of ge.values())try{xt(t)}catch{}try{await st().flush()}catch{}for(let t of ot.values())try{t.cts.cancel()}catch{}try{let t=ke.stopEverything();t&&t.stopped&&k("async_cmd_stop_all",{stopped:t.stopped,reason:"deactivate"})}catch{}try{jh()}catch{}try{Tn.offline("\u7A97\u53E3\u5DF2\u5173\u95ED")}catch{}if(dr){try{clearTimeout(dr)}catch{}dr=null}try{xe.stop()}catch{}try{await NN("deactivate")}catch{}}module.exports={activate:s2,deactivate:u2,__runAgent:Ns,__applyTlsMaxVersion:gh,__tlsMaxVersionSetting:u_,__tlsBootMaxVersion:function(){return c_},__execTool:Xn,__plugins:Ge,__applyPluginSettings:Rc,__pluginsPayload:Xc,__themeStyleTag:Gh,__themeTokens:Hh,__pushTheme:zh,__onPluginsConfigChanged:GS,__webFetch:Lh,__toolsFor:lr,__allModels:es,__resolveModel:mt,__apiKeyFor:Fc,__requestKeyFor:ei,__isKeylessProvider:Qo,__defaultModelKey:oi,__loadConfig:au,__validateConfig:__,__readonlyEnforced:js,__capSubagentText:zc,__explorePrompt:ja,__exploreToolList:Gc,__exploreSystem:function(t,e){return cr("explore",t,e)},__subagentCaveat:Zr,__subagentMinutes:w_,__exploreLimits:so,__usageSummary:Ka,__expandReferences:to,__selectionTokenForCurrent:LS,__fsSkipSelftest:wT,__readGeneral:im,__saveGeneral:S_,__webdavPayload:Ha,__saveWebdav:fm,__webdavRuntime:ii,__webdavGuard:Za,__testWebdav:P_,__webdavTransfer:_h,__webdavRestoreOpts:j_,__webdavProviderMergeText:E_,__reloadProvidersFromDisk:cm,__webdavNeedsReload:I_,__webdavRemoteList:N_,__webdavRemoteProviders:F_,__webdavMachineList:L_,__fetchProviderModels:um,__parseModelMetadata:C_,__limitsFromContext:fu,__sessionInWorkspace:Vo,__restoreOpenTabs:_m,__persistOpenTabs:Na,__refreshTabsForWorkspace:pT,__openTabsIds:function(){return we.slice()},__tabsRoot:function(){return hm},__activeId:function(){return Ee},__openTabsKeyFor:Sm,__webdavSelfCheck:D_,__wireWebview:Tm,__wireHub:R_,__sessions:function(){return ge},__turns:function(){return ot},__sessOf:ni,__deleteTurnRange:uT,__lmProvider:mS,__registerLmProvider:yT,__gitCleanState:mm,__recordEdit:ls,__reviewKeys:function(){return Array.from(de.keys())},__reviewAutoKeepDefault:z_};
|