@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.
Files changed (4) hide show
  1. package/dist/acp.js +115 -115
  2. package/dist/cli.js +123 -123
  3. package/dist/extension.js +128 -128
  4. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,48 +1,48 @@
1
1
  #!/usr/bin/env node
2
2
  /*! Luban | Copyright 2026 eppen (liuhualiang) | SPDX-License-Identifier: Apache-2.0 */
3
- "use strict";var MT=Object.create;var Ch=Object.defineProperty;var CT=Object.getOwnPropertyDescriptor;var AT=Object.getOwnPropertyNames;var OT=Object.getPrototypeOf,ET=Object.prototype.hasOwnProperty;var Q=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var PT=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of AT(e))!ET.call(t,r)&&r!==n&&Ch(t,r,{get:()=>e[r],enumerable:!(s=CT(e,r))||s.enumerable});return t};var jT=(t,e,n)=>(n=t!=null?MT(OT(t)):{},PT(e||!t||!t.__esModule?Ch(n,"default",{value:t,enumerable:!0}):n,t));var gi=Q((lL,Ih)=>{"use strict";var Au="\u73ED\u73ED",Ou="Banban",Eu="\u5C0F\u6728\u5320",Pu="\u5148\u91CF\u4E09\u904D\uFF0C\u518D\u4E0B\u4E00\u51FF",NT=[" _____"," / \\"," /_______\\"],IT=" \\_______/",DT=[" | |"," /| |\\"," \\|_____|/"," |_| |_|"],ju={idle:[" | o o |"," | . |"," | \\___/ |"],think:[" | o o |"," | . |"," | ___ |"],plan:[" | o o |"," | . |"," | --- |"],explore:[" | O o |"," | . |"," | \\_/ |"],work:[" | > < |"," | . |"," | ___ |"],done:[" | ^ ^ |"," | . |"," | \\___/ |"],tired:[" | - - |"," | . |"," | --- |"],error:[" | x x |"," | . |"," | ~~~ |"]},Ah={idle:"(o o)",think:"(o.o)",plan:"[o o]",explore:"(o o)?",work:"(>_<)",done:"(^ ^)",tired:"(-_-)",error:"(x_x)"},Cu=[{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 yl(t,e){let n=String(t??"");return n.length>=e?n:n+" ".repeat(e-n.length)}function FT(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 Oh(t){let e=String(t??""),n=0;for(let s=0;s<e.length;s++)n+=FT(e.charCodeAt(s));return n}function Eh(t,e){let n=String(t??""),s=e-Oh(n);return s>0?n+" ".repeat(s):n}function Ph(t){return Object.prototype.hasOwnProperty.call(ju,t)?t:"idle"}function LT(t){let e=String(t||"");return e==="plan"?"plan":e==="explore"?"explore":"idle"}function RT(t){let e=String(t||"");return e==="final"?"done":"tired"}function Nu(t){return NT.concat(ju[Ph(t)],[IT])}function jh(t){return Nu(t).concat(DT)}function Nh(t){return Ah[Ph(t)]}function qT(t,e){let n=e||{},s=typeof t=="function"?t:function(a,l){return String(l)},r=Nu(n.mood||"plan"),o={};o[2]=" "+s("bold",Au)+s("gray"," \xB7 "+Eu+"\uFF08"+Ou+"\uFF09"),o[3]=" "+s("gray",Pu),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",yl(r[a],12))+l)}return i}function BT(t){let e=typeof t=="function"?t:function(i,a){return String(a)},n=jh("idle"),s=[e("bold",Au+"\uFF08"+Ou+"\uFF09")+e("gray"," \xB7 "+Eu),e("gray",Pu),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",yl(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<Cu.length;i++){let a=Cu[i];r.push(" "+e("cyan",yl(Nh(a.mood),9))+e("gray",Eh(a.when,22))+a.say)}return r}Ih.exports={NAME:Au,NAME_EN:Ou,KIND:Eu,TAGLINE:Pu,MOODS:ju,FACES:Ah,NOTES:Cu,padRight:yl,padDisplay:Eh,displayWidth:Oh,moodForMode:LT,moodForStop:RT,portrait:Nu,full:jh,face:Nh,banner:qT,sheet:BT}});var Bu=Q((cL,$h)=>{"use strict";var qs=require("fs"),UT=require("os"),Or=require("path"),WT=gi(),Fh=1,Fu=process.env.LUBAN_STATUS_HOME?Or.resolve(process.env.LUBAN_STATUS_HOME):Or.join(UT.homedir(),".luban"),Lh=Or.join(Fu,"status.json"),ho=Or.join(Fu,"status"),Rh=["offline","idle","thinking","typing","tool","waiting","done","error"],Lu={thinking:1,typing:1,tool:1,waiting:1},bl={offline:"idle",idle:"idle",thinking:"think",typing:"work",tool:"work",waiting:"explore",done:"done",error:"error"},qh=5*60*1e3,KT=120,HT=100,zT=10*1e3,GT=6*60*60*1e3,mo=120,Iu=80,Bh=200,Cr=null,Hn=null,zn=null,Ar=null,Gn=null,wl=null,Du=!1,go=new Set;function Pn(){return Date.now()}function St(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function Uh(){let t=Pn();return{v:Fh,pid:process.pid,source:"",state:"idle",mood:bl.idle,text:"",task:"",mode:"",model:"",sessionId:"",workspace:"",tool:null,round:0,tools:0,errors:0,error:null,since:t,changedAt:t,ts:t}}function Pr(){return Cr||(Cr=Uh()),Cr}function Er(){return JSON.parse(JSON.stringify(Pr()))}function Ru(t,e){let n=bl[String(t||"")]||bl.idle;return(t==="idle"||t==="offline"||!t)&&Number(e)>=qh?"tired":WT.FACES[n]?n:"idle"}function ln(t){let e=Pr(),n=t&&typeof t=="object"?t:{},s=e.state,r=!1;if(n.state!==void 0){let i=String(n.state||"");if(Rh.indexOf(i)<0)return Er();i!==s&&(e.state=i,r=!0)}if(n.source!==void 0&&(e.source=St(n.source,24)),n.text!==void 0&&(e.text=St(n.text,mo)),n.task!==void 0&&(e.task=St(n.task,Iu)),n.mode!==void 0&&(e.mode=St(n.mode,16)),n.model!==void 0&&(e.model=St(n.model,80)),n.sessionId!==void 0&&(e.sessionId=St(n.sessionId,64)),n.workspace!==void 0&&(e.workspace=St(n.workspace,240)),n.tool!==void 0){let i=n.tool;e.tool=i&&typeof i=="object"?{name:St(i.name,40),label:St(i.label,Iu),ok:i.ok===void 0?void 0:i.ok!==!1,at:Number(i.at)||Pn()}:null,e.tool&&e.tool.name&&(e.text=St(e.tool.name+(e.tool.label?" "+e.tool.label:""),mo))}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:St(i.message,Bh),at:Number(i.at)||Pn(),count:Math.max(0,Number(i.count)||0)}:null}let o=Pn();return r&&(e.since=o,e.changedAt=o),e.mood=Ru(e.state,o-e.since),e.ts=o,(r||n.write!==!1)&&JT(r),VT(),Lu[e.state]?XT():qu(),Er()}function JT(t){if(t){yi();return}Hn||(Hn=setTimeout(function(){Hn=null,yi()},KT),Hn.unref&&Hn.unref())}function yi(){Hn&&(clearTimeout(Hn),Hn=null);let t=Er();try{qs.mkdirSync(Fu,{recursive:!0}),Dh(Lh,t),qs.mkdirSync(ho,{recursive:!0}),Dh(Or.join(ho,process.pid+".json"),t),Du||(Du=!0,$T())}catch{}}function Dh(t,e){let n=JSON.stringify(e),s=t+"."+process.pid+".tmp";qs.writeFileSync(s,n+`
4
- `,"utf8"),qs.renameSync(s,t)}function $T(){let t=qs.readdirSync(ho),e=Pn();for(let n=0;n<t.length;n++){let s=t[n];if(!/^\d+\.json$/.test(s)||s===process.pid+".json")continue;let r=Or.join(ho,s);try{e-qs.statSync(r).mtimeMs>GT&&qs.unlinkSync(r)}catch{}}}function XT(){Ar||(Ar=setInterval(function(){let t=Pr();if(!Lu[t.state]){qu();return}t.mood=Ru(t.state,Pn()-t.since),t.ts=Pn(),yi(),Kh()},zT),Ar.unref&&Ar.unref())}function qu(){Ar&&(clearInterval(Ar),Ar=null)}function Wh(t){return typeof t!="function"?function(){}:(go.add(t),function(){go.delete(t)})}function VT(){zn||!go.size||(zn=setTimeout(function(){zn=null,Kh()},HT),zn.unref&&zn.unref())}function Kh(){if(zn&&(clearTimeout(zn),zn=null),!go.size)return;let t=Er();go.forEach(function(e){try{e(t)}catch{}})}function YT(t,e){return ln(Object.assign({state:"thinking",text:t||""},e||{}))}function ZT(t){return ln(Object.assign({state:"thinking",text:"",tool:null,round:0,tools:0,errors:0,error:null},t||{}))}function QT(t){return ln(Object.assign({state:"typing"},t||{}))}function eM(t,e){let n=St(t,Iu),s=n.indexOf(" "),r={state:"tool",tool:{name:s>0?n.slice(0,s):n,label:s>0?n.slice(s+1):"",at:Pn()}};return ln(Object.assign(r,e||{}))}function Hh(t,e){let n=t&&typeof t=="object"?t:{},s=Pr(),r=n.ok!==!1,o={tools:(Number(s.tools)||0)+1,tool:{name:n.name||"",label:n.path||"",ok:r,at:Pn()},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:Pn(),count:o.errors}),ln(Object.assign(o,e||{}))}function tM(t,e){return ln(Object.assign({round:Math.max(0,Number(t)||0)},e||{}))}function nM(t,e){return ln(Object.assign({state:"waiting",text:t||""},e||{}))}function sM(t,e){let n=String(t||""),s=n==="final"?"\u5B8C\u6210":"\u6536\u5DE5\uFF1A"+(n||"unknown");return ln(Object.assign({state:"done",text:s,tool:null},e||{}))}function zh(t,e){let n=Pr();return ln(Object.assign({state:"error",text:St(t,mo)||"\u51FA\u9519",errors:(Number(n.errors)||0)+1,error:{message:St(t,Bh)||"\u51FA\u9519",at:Pn(),count:(Number(n.errors)||0)+1}},e||{}))}function rM(t){return ln({state:"offline",text:t||"\u5DF2\u9000\u51FA",tool:null})}function Gh(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:St(t.title,mo)||"\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:St(t.summary,mo)||"\u5B8C\u6210",tool:null};case"error":return{state:"error",text:St(t.message,mo)||"\u51FA\u9519"};default:return null}}function oM(t,e){let n=Gh(t);return n?t.type==="tool"&&t.phase!=="start"?Hh(t,e):n.state==="error"?zh(t.message,e):ln(Object.assign({},n,e||{})):null}function Jh(t){let e=t||{},n=Number(e.port||0);if(!(n>0&&n<65536))return null;if(Gn)return Gn;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(Er());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
3
+ "use strict";var MT=Object.create;var Ch=Object.defineProperty;var CT=Object.getOwnPropertyDescriptor;var AT=Object.getOwnPropertyNames;var OT=Object.getPrototypeOf,ET=Object.prototype.hasOwnProperty;var Q=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var PT=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of AT(e))!ET.call(t,r)&&r!==n&&Ch(t,r,{get:()=>e[r],enumerable:!(s=CT(e,r))||s.enumerable});return t};var jT=(t,e,n)=>(n=t!=null?MT(OT(t)):{},PT(e||!t||!t.__esModule?Ch(n,"default",{value:t,enumerable:!0}):n,t));var gi=Q((lL,Ih)=>{"use strict";var Au="\u73ED\u73ED",Ou="Banban",Eu="\u5C0F\u6728\u5320",Pu="\u5148\u91CF\u4E09\u904D\uFF0C\u518D\u4E0B\u4E00\u51FF",NT=[" _____"," / \\"," /_______\\"],IT=" \\_______/",DT=[" | |"," /| |\\"," \\|_____|/"," |_| |_|"],ju={idle:[" | o o |"," | . |"," | \\___/ |"],think:[" | o o |"," | . |"," | ___ |"],plan:[" | o o |"," | . |"," | --- |"],explore:[" | O o |"," | . |"," | \\_/ |"],work:[" | > < |"," | . |"," | ___ |"],done:[" | ^ ^ |"," | . |"," | \\___/ |"],tired:[" | - - |"," | . |"," | --- |"],error:[" | x x |"," | . |"," | ~~~ |"]},Ah={idle:"(o o)",think:"(o.o)",plan:"[o o]",explore:"(o o)?",work:"(>_<)",done:"(^ ^)",tired:"(-_-)",error:"(x_x)"},Cu=[{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 yl(t,e){let n=String(t??"");return n.length>=e?n:n+" ".repeat(e-n.length)}function FT(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 Oh(t){let e=String(t??""),n=0;for(let s=0;s<e.length;s++)n+=FT(e.charCodeAt(s));return n}function Eh(t,e){let n=String(t??""),s=e-Oh(n);return s>0?n+" ".repeat(s):n}function Ph(t){return Object.prototype.hasOwnProperty.call(ju,t)?t:"idle"}function LT(t){let e=String(t||"");return e==="plan"?"plan":e==="explore"?"explore":"idle"}function RT(t){let e=String(t||"");return e==="final"?"done":"tired"}function Nu(t){return NT.concat(ju[Ph(t)],[IT])}function jh(t){return Nu(t).concat(DT)}function Nh(t){return Ah[Ph(t)]}function qT(t,e){let n=e||{},s=typeof t=="function"?t:function(a,l){return String(l)},r=Nu(n.mood||"plan"),o={};o[2]=" "+s("bold",Au)+s("gray"," \xB7 "+Eu+"\uFF08"+Ou+"\uFF09"),o[3]=" "+s("gray",Pu),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",yl(r[a],12))+l)}return i}function BT(t){let e=typeof t=="function"?t:function(i,a){return String(a)},n=jh("idle"),s=[e("bold",Au+"\uFF08"+Ou+"\uFF09")+e("gray"," \xB7 "+Eu),e("gray",Pu),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",yl(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<Cu.length;i++){let a=Cu[i];r.push(" "+e("cyan",yl(Nh(a.mood),9))+e("gray",Eh(a.when,22))+a.say)}return r}Ih.exports={NAME:Au,NAME_EN:Ou,KIND:Eu,TAGLINE:Pu,MOODS:ju,FACES:Ah,NOTES:Cu,padRight:yl,padDisplay:Eh,displayWidth:Oh,moodForMode:LT,moodForStop:RT,portrait:Nu,full:jh,face:Nh,banner:qT,sheet:BT}});var Bu=Q((cL,$h)=>{"use strict";var Bs=require("fs"),UT=require("os"),Er=require("path"),WT=gi(),Fh=1,Fu=process.env.LUBAN_STATUS_HOME?Er.resolve(process.env.LUBAN_STATUS_HOME):Er.join(UT.homedir(),".luban"),Lh=Er.join(Fu,"status.json"),ho=Er.join(Fu,"status"),Rh=["offline","idle","thinking","typing","tool","waiting","done","error"],Lu={thinking:1,typing:1,tool:1,waiting:1},bl={offline:"idle",idle:"idle",thinking:"think",typing:"work",tool:"work",waiting:"explore",done:"done",error:"error"},qh=5*60*1e3,KT=120,HT=100,zT=10*1e3,GT=6*60*60*1e3,mo=120,Iu=80,Bh=200,Ar=null,Hn=null,zn=null,Or=null,Gn=null,wl=null,Du=!1,go=new Set;function Pn(){return Date.now()}function St(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function Uh(){let t=Pn();return{v:Fh,pid:process.pid,source:"",state:"idle",mood:bl.idle,text:"",task:"",mode:"",model:"",sessionId:"",workspace:"",tool:null,round:0,tools:0,errors:0,error:null,since:t,changedAt:t,ts:t}}function jr(){return Ar||(Ar=Uh()),Ar}function Pr(){return JSON.parse(JSON.stringify(jr()))}function Ru(t,e){let n=bl[String(t||"")]||bl.idle;return(t==="idle"||t==="offline"||!t)&&Number(e)>=qh?"tired":WT.FACES[n]?n:"idle"}function ln(t){let e=jr(),n=t&&typeof t=="object"?t:{},s=e.state,r=!1;if(n.state!==void 0){let i=String(n.state||"");if(Rh.indexOf(i)<0)return Pr();i!==s&&(e.state=i,r=!0)}if(n.source!==void 0&&(e.source=St(n.source,24)),n.text!==void 0&&(e.text=St(n.text,mo)),n.task!==void 0&&(e.task=St(n.task,Iu)),n.mode!==void 0&&(e.mode=St(n.mode,16)),n.model!==void 0&&(e.model=St(n.model,80)),n.sessionId!==void 0&&(e.sessionId=St(n.sessionId,64)),n.workspace!==void 0&&(e.workspace=St(n.workspace,240)),n.tool!==void 0){let i=n.tool;e.tool=i&&typeof i=="object"?{name:St(i.name,40),label:St(i.label,Iu),ok:i.ok===void 0?void 0:i.ok!==!1,at:Number(i.at)||Pn()}:null,e.tool&&e.tool.name&&(e.text=St(e.tool.name+(e.tool.label?" "+e.tool.label:""),mo))}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:St(i.message,Bh),at:Number(i.at)||Pn(),count:Math.max(0,Number(i.count)||0)}:null}let o=Pn();return r&&(e.since=o,e.changedAt=o),e.mood=Ru(e.state,o-e.since),e.ts=o,(r||n.write!==!1)&&JT(r),VT(),Lu[e.state]?XT():qu(),Pr()}function JT(t){if(t){yi();return}Hn||(Hn=setTimeout(function(){Hn=null,yi()},KT),Hn.unref&&Hn.unref())}function yi(){Hn&&(clearTimeout(Hn),Hn=null);let t=Pr();try{Bs.mkdirSync(Fu,{recursive:!0}),Dh(Lh,t),Bs.mkdirSync(ho,{recursive:!0}),Dh(Er.join(ho,process.pid+".json"),t),Du||(Du=!0,$T())}catch{}}function Dh(t,e){let n=JSON.stringify(e),s=t+"."+process.pid+".tmp";Bs.writeFileSync(s,n+`
4
+ `,"utf8"),Bs.renameSync(s,t)}function $T(){let t=Bs.readdirSync(ho),e=Pn();for(let n=0;n<t.length;n++){let s=t[n];if(!/^\d+\.json$/.test(s)||s===process.pid+".json")continue;let r=Er.join(ho,s);try{e-Bs.statSync(r).mtimeMs>GT&&Bs.unlinkSync(r)}catch{}}}function XT(){Or||(Or=setInterval(function(){let t=jr();if(!Lu[t.state]){qu();return}t.mood=Ru(t.state,Pn()-t.since),t.ts=Pn(),yi(),Kh()},zT),Or.unref&&Or.unref())}function qu(){Or&&(clearInterval(Or),Or=null)}function Wh(t){return typeof t!="function"?function(){}:(go.add(t),function(){go.delete(t)})}function VT(){zn||!go.size||(zn=setTimeout(function(){zn=null,Kh()},HT),zn.unref&&zn.unref())}function Kh(){if(zn&&(clearTimeout(zn),zn=null),!go.size)return;let t=Pr();go.forEach(function(e){try{e(t)}catch{}})}function YT(t,e){return ln(Object.assign({state:"thinking",text:t||""},e||{}))}function ZT(t){return ln(Object.assign({state:"thinking",text:"",tool:null,round:0,tools:0,errors:0,error:null},t||{}))}function QT(t){return ln(Object.assign({state:"typing"},t||{}))}function eM(t,e){let n=St(t,Iu),s=n.indexOf(" "),r={state:"tool",tool:{name:s>0?n.slice(0,s):n,label:s>0?n.slice(s+1):"",at:Pn()}};return ln(Object.assign(r,e||{}))}function Hh(t,e){let n=t&&typeof t=="object"?t:{},s=jr(),r=n.ok!==!1,o={tools:(Number(s.tools)||0)+1,tool:{name:n.name||"",label:n.path||"",ok:r,at:Pn()},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:Pn(),count:o.errors}),ln(Object.assign(o,e||{}))}function tM(t,e){return ln(Object.assign({round:Math.max(0,Number(t)||0)},e||{}))}function nM(t,e){return ln(Object.assign({state:"waiting",text:t||""},e||{}))}function sM(t,e){let n=String(t||""),s=n==="final"?"\u5B8C\u6210":"\u6536\u5DE5\uFF1A"+(n||"unknown");return ln(Object.assign({state:"done",text:s,tool:null},e||{}))}function zh(t,e){let n=jr();return ln(Object.assign({state:"error",text:St(t,mo)||"\u51FA\u9519",errors:(Number(n.errors)||0)+1,error:{message:St(t,Bh)||"\u51FA\u9519",at:Pn(),count:(Number(n.errors)||0)+1}},e||{}))}function rM(t){return ln({state:"offline",text:t||"\u5DF2\u9000\u51FA",tool:null})}function Gh(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:St(t.title,mo)||"\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:St(t.summary,mo)||"\u5B8C\u6210",tool:null};case"error":return{state:"error",text:St(t.message,mo)||"\u51FA\u9519"};default:return null}}function oM(t,e){let n=Gh(t);return n?t.type==="tool"&&t.phase!=="start"?Hh(t,e):n.state==="error"?zh(t.message,e):ln(Object.assign({},n,e||{})):null}function Jh(t){let e=t||{},n=Number(e.port||0);if(!(n>0&&n<65536))return null;if(Gn)return Gn;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(Pr());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
5
5
 
6
6
  `),c.write(`event: status
7
- data: `+JSON.stringify(Er())+`
7
+ data: `+JSON.stringify(Pr())+`
8
8
 
9
9
  `),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(),wl=Wh(function(l){if(!r.size)return;let c=`event: status
10
10
  data: `+JSON.stringify(l)+`
11
11
 
12
- `;r.forEach(function(u){try{u.write(c)}catch{r.delete(u)}})});function a(){wl&&(wl(),wl=null),r.forEach(function(l){try{l.end()}catch{}}),r.clear();try{i.close()}catch{}Gn=null}return Gn={port:n,close:a,clients:r},Gn}function iM(){let t=Number(process.env.LUBAN_STATUS_PORT||0);return t>0&&t<65536?Jh({port:t}):null}function aM(t){let e=t||{};Hn&&(clearTimeout(Hn),Hn=null),zn&&(clearTimeout(zn),zn=null),qu(),Gn&&(Gn.close(),Gn=null),go.clear(),Du=!1;let n=Pn();Cr=Object.assign(Uh(),{source:String(e.source||"")}),Cr.since=n,Cr.changedAt=n,Cr.ts=n}function lM(){process.once("exit",function(){try{let t=Pr();Lu[t.state]&&ln({state:"offline",text:"\u5DF2\u9000\u51FA",tool:null}),yi();try{qs.unlinkSync(Or.join(ho,process.pid+".json"))}catch{}}catch{}})}function cM(){return Lh}function uM(){return ho}function dM(){return Gn?{port:Gn.port,clients:Gn.clients.size}:null}Pr();lM();$h.exports={VERSION:Fh,STATES:Rh,SLEEP_MS:qh,MOOD_OF:bl,get:Er,update:ln,moodFor:Ru,startTurn:ZT,thinking:YT,typing:QT,progress:eM,round:tM,tool:Hh,waiting:nM,done:sM,fail:zh,offline:rM,fromMessage:Gh,applyMessage:oM,subscribe:Wh,serve:Jh,autoServe:iM,reset:aM,writeNow:yi,file:cM,dir:uM,sse:dM}});var _l=Q((uL,Zh)=>{var xi=require("fs"),fM=require("path"),Xh=24,Vh=120,bi=[{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 Uu(t){return(t<10?"0":"")+t}function Si(t){let e=t instanceof Date?t:new Date(Number(t));return isNaN(e.getTime())?new Date:e}function vl(t){let e=Si(t);return e.getFullYear()+"-"+Uu(e.getMonth()+1)+"-"+Uu(e.getDate())}function ki(t){let e=Si(t);return e.getFullYear()+"-"+Uu(e.getMonth()+1)}function yo(t){let e=Si(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0).getTime()}function pM(t,e){let n=e==null?Date.now():Number(e),s=bi.find(function(i){return i.key===String(t||"")})||bi[1];if(!s.days)return{key:s.key,label:s.label,from:0,to:n,days:0};let r=Si(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 jn(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function ks(t,e){let n=String(t??"");return n.length>e?n.slice(0,e):n}function kl(t){let e=Number(t);return!isFinite(e)||e<=0?0:Number(Math.min(1,e).toFixed(3))}function mM(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=jn(r.promptTokens),a=jn(r.completionTokens),l=jn(r.totalTokens)||i+a,c=Math.min(jn(r.cachedTokens),i),u=jn(r.contextTokens),d=jn(r.window);return{v:1,at:new Date(o).toISOString(),ts:o,day:vl(o),provider:ks(s.provider,60),model:ks(s.model||r.model,120),modelKey:ks(s.modelKey,160),mode:ks(s.mode,20)||"agent",source:ks(s.source,20),session:ks(s.session,80),requests:jn(r.requests),promptTokens:i,completionTokens:a,totalTokens:l,cachedTokens:c,contextTokens:u,window:d,hit:r.hit!=null?kl(r.hit):i>0?kl(c/i):0,percent:r.percent!=null?kl(r.percent):d>0?kl(u/d):0,estimated:!!r.estimated,partial:!!r.partial}}function Wu(t,e){return fM.join(t,e+".jsonl")}function hM(t){xi.mkdirSync(t,{recursive:!0,mode:448})}function Ku(t){let e=[];try{e=xi.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 Yh(t,e){let n=function(){let r=Si(e??Date.now());return new Date(r.getFullYear(),r.getMonth()-(Xh-1),1,0,0,0,0).getTime()}(),s=[];for(let r of Ku(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{xi.unlinkSync(Wu(t,r)),s.push(r)}catch{}}return s}function gM(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{hM(t);let n=Wu(t,ki(e.ts));return xi.appendFileSync(n,JSON.stringify(e)+`
12
+ `;r.forEach(function(u){try{u.write(c)}catch{r.delete(u)}})});function a(){wl&&(wl(),wl=null),r.forEach(function(l){try{l.end()}catch{}}),r.clear();try{i.close()}catch{}Gn=null}return Gn={port:n,close:a,clients:r},Gn}function iM(){let t=Number(process.env.LUBAN_STATUS_PORT||0);return t>0&&t<65536?Jh({port:t}):null}function aM(t){let e=t||{};Hn&&(clearTimeout(Hn),Hn=null),zn&&(clearTimeout(zn),zn=null),qu(),Gn&&(Gn.close(),Gn=null),go.clear(),Du=!1;let n=Pn();Ar=Object.assign(Uh(),{source:String(e.source||"")}),Ar.since=n,Ar.changedAt=n,Ar.ts=n}function lM(){process.once("exit",function(){try{let t=jr();Lu[t.state]&&ln({state:"offline",text:"\u5DF2\u9000\u51FA",tool:null}),yi();try{Bs.unlinkSync(Er.join(ho,process.pid+".json"))}catch{}}catch{}})}function cM(){return Lh}function uM(){return ho}function dM(){return Gn?{port:Gn.port,clients:Gn.clients.size}:null}jr();lM();$h.exports={VERSION:Fh,STATES:Rh,SLEEP_MS:qh,MOOD_OF:bl,get:Pr,update:ln,moodFor:Ru,startTurn:ZT,thinking:YT,typing:QT,progress:eM,round:tM,tool:Hh,waiting:nM,done:sM,fail:zh,offline:rM,fromMessage:Gh,applyMessage:oM,subscribe:Wh,serve:Jh,autoServe:iM,reset:aM,writeNow:yi,file:cM,dir:uM,sse:dM}});var _l=Q((uL,Zh)=>{var xi=require("fs"),fM=require("path"),Xh=24,Vh=120,bi=[{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 Uu(t){return(t<10?"0":"")+t}function Si(t){let e=t instanceof Date?t:new Date(Number(t));return isNaN(e.getTime())?new Date:e}function vl(t){let e=Si(t);return e.getFullYear()+"-"+Uu(e.getMonth()+1)+"-"+Uu(e.getDate())}function ki(t){let e=Si(t);return e.getFullYear()+"-"+Uu(e.getMonth()+1)}function yo(t){let e=Si(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0).getTime()}function pM(t,e){let n=e==null?Date.now():Number(e),s=bi.find(function(i){return i.key===String(t||"")})||bi[1];if(!s.days)return{key:s.key,label:s.label,from:0,to:n,days:0};let r=Si(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 jn(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function xs(t,e){let n=String(t??"");return n.length>e?n.slice(0,e):n}function kl(t){let e=Number(t);return!isFinite(e)||e<=0?0:Number(Math.min(1,e).toFixed(3))}function mM(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=jn(r.promptTokens),a=jn(r.completionTokens),l=jn(r.totalTokens)||i+a,c=Math.min(jn(r.cachedTokens),i),u=jn(r.contextTokens),d=jn(r.window);return{v:1,at:new Date(o).toISOString(),ts:o,day:vl(o),provider:xs(s.provider,60),model:xs(s.model||r.model,120),modelKey:xs(s.modelKey,160),mode:xs(s.mode,20)||"agent",source:xs(s.source,20),session:xs(s.session,80),requests:jn(r.requests),promptTokens:i,completionTokens:a,totalTokens:l,cachedTokens:c,contextTokens:u,window:d,hit:r.hit!=null?kl(r.hit):i>0?kl(c/i):0,percent:r.percent!=null?kl(r.percent):d>0?kl(u/d):0,estimated:!!r.estimated,partial:!!r.partial}}function Wu(t,e){return fM.join(t,e+".jsonl")}function hM(t){xi.mkdirSync(t,{recursive:!0,mode:448})}function Ku(t){let e=[];try{e=xi.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 Yh(t,e){let n=function(){let r=Si(e??Date.now());return new Date(r.getFullYear(),r.getMonth()-(Xh-1),1,0,0,0,0).getTime()}(),s=[];for(let r of Ku(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{xi.unlinkSync(Wu(t,r)),s.push(r)}catch{}}return s}function gM(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{hM(t);let n=Wu(t,ki(e.ts));return xi.appendFileSync(n,JSON.stringify(e)+`
13
13
  `,{mode:384}),Yh(t,Math.max(Number(e.ts)||0,Date.now())),{ok:!0,file:n,month:ki(e.ts)}}catch(n){return{ok:!1,error:String(n&&n.message||n)}}}function yM(t,e,n){let s=Number(e)>0?Number(e):0,r=Number(n)>0?Number(n):Date.now(),o=s>0?ki(s):"",i=ki(r),a=Ku(t).filter(function(u){return o&&u<o?!1:u<=i}),l=[],c=0;for(let u of a){let d="";try{d=xi.readFileSync(Wu(t,u),"utf8")}catch{continue}for(let f of d.split(`
14
- `)){let p=f.trim();if(!p)continue;let m=null;try{m=JSON.parse(p)}catch{c++;continue}if(!m||!m.ts){c++;continue}let h=Number(m.ts);!isFinite(h)||h<s||h>r||l.push(m)}}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 wi(){return{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0}}function xl(t,e){t.turns++,t.requests+=jn(e.requests),t.promptTokens+=jn(e.promptTokens),t.completionTokens+=jn(e.completionTokens),t.totalTokens+=jn(e.totalTokens),t.cachedTokens+=jn(e.cachedTokens),e.estimated&&t.estimatedTurns++,e.partial&&t.partialTurns++}function Sl(t){return t.hit=t.promptTokens>0?Number(Math.min(1,t.cachedTokens/t.promptTokens).toFixed(3)):0,t}function wM(t,e,n,s){let r=Object.keys(t).sort();if(!r.length)return[];let o=e>0?yo(e):yo(t[r[0]].ts),i=n>0?yo(n):yo(t[r[r.length-1]].ts),a=Math.round((i-o)/864e5)+1,l=s>0?Math.min(a,s):a;if(l>Vh)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=vl(d.getTime());c.push(t[f]||Object.assign({day:f,ts:d.getTime()},wi(),{hit:0,empty:!0}))}return c}function bM(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=wi(),o=Object.create(null),i=Object.create(null),a=Object.create(null);for(let d of s){xl(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:ks(d.provider,60),model:ks(d.model,120)||"\u672A\u77E5\u6A21\u578B"},wi())),xl(o[f],d);let p=ks(d.mode,20)||"agent";i[p]||(i[p]=Object.assign({mode:p},wi())),xl(i[p],d);let m=String(d.day||vl(d.ts));a[m]||(a[m]=Object.assign({day:m,ts:yo(d.ts)},wi())),xl(a[m],d)}let l=Object.keys(o).map(function(d){let f=Sl(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 Sl(i[d])}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.mode).localeCompare(String(f.mode))}),u=wM(a,Number(n.from)||0,Number(n.to)||0,Number(n.days)||0).map(function(d){return d.empty?d:Sl(d)});return s.length?Object.assign(Sl(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 kM(t){let e=bi.find(function(n){return n.key===String(t||"")});return e?e.label:bi[1].label}Zh.exports={MONTHS_KEEP:Xh,MAX_FILL_DAYS:Vh,RANGES:bi,dayOf:vl,monthOf:ki,startOfDay:yo,rangeOf:pM,rangeLabel:kM,row:mM,append:gM,read:yM,monthFiles:Ku,prune:Yh,aggregate:bM}});var Bs=Q((dL,Qh)=>{var xM=["node_modules",".git","dist","build","out","coverage",".next",".venv","venv","target","vendor","__pycache__",".cache","npm-cache","_npx","_cacache",".m2"];Qh.exports={SKIP_DIRS:xM}});var og=Q((fL,rg)=>{"use strict";var SM=require("fs"),vM=require("path"),{SKIP_DIRS:_M}=Bs(),eg=4e3,TM=80,MM=5e3,tg=Object.create(null);_M.forEach(function(t){tg[t]=!0});function CM(t,e){return t.name<e.name?-1:t.name>e.name?1:0}function ng(t){let e=[],n=Object.create(null);return function s(r,o,i){if(e.length>=eg||i>8)return;let a;try{a=SM.readdirSync(r,{withFileTypes:!0})}catch{return}a.sort(CM);for(let l=0;l<a.length&&e.length<eg;l++){let c=a[l],u=c.name;if(u==="."||u==="..")continue;let d=!1;try{d=c.isDirectory()}catch{}if(d){if(tg[u])continue;let p=o+u+"/";n[p]=!0,s(vM.join(r,u),p,i+1);continue}if(!c.isFile())continue;let f=o+u;/[\s"'`]/.test(f)||e.push(f)}}(t,"",0),{files:e,dirs:Object.keys(n)}}function sg(t,e){let n=String(e??""),s=n.toLowerCase(),r=n.lastIndexOf("/"),o=r>=0?n.slice(0,r+1):"",i=[],a=Object.create(null);function l(d,f){let p=d.slice(o.length);!p||!(f&&p.indexOf("/")===p.length-1)&&p.indexOf("/")>=0||i.indexOf(d)>=0||a[d]||(a[d]=!0,i.push(d))}!o&&"web".indexOf(s)===0&&i.push("web");let c=[],u=[];for(let d=0;d<t.files.length;d++){let f=t.files[d];f.toLowerCase().indexOf(s)===0&&c.push(f)}for(let d=0;d<t.dirs.length;d++){let f=t.dirs[d];f.toLowerCase().indexOf(s)===0&&u.push(f)}return c.forEach(function(d){l(d,!1)}),u.forEach(function(d){l(d,!0)}),i.sort(function(d,f){if(d==="web"||f==="web")return d==="web"?-1:1;let p=d.indexOf(n)===0,m=f.indexOf(n)===0;return p!==m?p?-1:1:d.length!==f.length?d.length-f.length:d<f?-1:d>f?1:0}),i.slice(0,TM)}function AM(t){let e=t||{},n=String(e.root||process.cwd()),s=(e.commands||[]).filter(function(i){return typeof i=="string"&&i.charAt(0)==="/"}),r={at:0,root:"",files:[],dirs:[]};function o(){if(r.root===n&&Date.now()-r.at<MM)return r;let i=ng(n);return r={at:Date.now(),root:n,files:i.files,dirs:i.dirs},r}return function(a){let l=String(a??"");if(l.charAt(0)==="/"&&!/\s/.test(l))return[s.filter(function(p){return p.indexOf(l)===0}),l];let c=l.lastIndexOf("@");if(c<0||c>0&&!/\s/.test(l.charAt(c-1)))return[[],l];let u=l.slice(c+1);return/\s/.test(u)?[[],l]:[sg(o(),u),u]}}function OM(t,e){if(e&&e.name==="enter"&&t===`
15
- `)return!0;let n=e&&e.sequence;return n==="\x1B\r"?!0:typeof n=="string"&&/^(?:\u001b\[13;2[~u]|\u001b\[27;2;13~)$/.test(n)}rg.exports={createCompleter:AM,listEntries:ng,completePath:sg,isNewlineKey:OM}});var Tl=Q((pL,EM)=>{EM.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 Ju=Q((mL,Gu)=>{function jr(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e):n:""}function PM(t,e){if(!t||typeof t!="object")return null;let n=jr(t.id,64),s=jr(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 jM(t,e){if(!t||typeof t!="object")return null;let n=jr(t.id,64),s=jr(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=PM(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 Us(t){let e=t&&typeof t=="object"?t:{},n=jr(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=jM(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 Hu(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=jr(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=jr(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 ig(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 ag(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"+ig(o,l)+"\uFF09"}).join("\u3001"):a=i+"\uFF08"+ig(o,i)+"\uFF09",s.push("- "+o.id+"\uFF08"+o.prompt+"\uFF09: "+a)}return s.join(`
16
- `)}function zu(t){let e=t&&t.questions||[];return e.length!==1?!0:!!e[0].allow_multiple}Gu.exports={MAX_QUESTIONS:4,MIN_OPTIONS:2,MAX_OPTIONS:6,normalize:Us,normalizeAnswers:Hu,formatAnswers:ag,needsConfirm:zu};if(require.main===Gu){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=Us({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(!zu(s),"single select no confirm")}),n("normalize rejects empty / short options",function(){let s=!1;try{Us({questions:[]})}catch{s=!0}t(s,"empty"),s=!1;try{Us({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=Us({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=Us({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(zu(s),"confirm");let r=Hu(s,{a:"x",b:["p","q"]});t(r.a==="x"&&r.b.length===2,JSON.stringify(r));let o=ag(s,r);t(o.indexOf("\u7528\u6237\u56DE\u7B54")>=0&&o.indexOf("x\uFF08X\uFF09")>=0,o)}),n("normalizeAnswers rejects bad",function(){let s=Us({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),r=!1;try{Hu(s,{a:"z"})}catch{r=!0}t(r,"bad id")}),n("normalize recommended flag",function(){let s=Us({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 Xu=Q((hL,lg)=>{function vi(t){let e=String(t??"");return e===""?[]:e.split(`
14
+ `)){let p=f.trim();if(!p)continue;let m=null;try{m=JSON.parse(p)}catch{c++;continue}if(!m||!m.ts){c++;continue}let h=Number(m.ts);!isFinite(h)||h<s||h>r||l.push(m)}}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 wi(){return{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0}}function xl(t,e){t.turns++,t.requests+=jn(e.requests),t.promptTokens+=jn(e.promptTokens),t.completionTokens+=jn(e.completionTokens),t.totalTokens+=jn(e.totalTokens),t.cachedTokens+=jn(e.cachedTokens),e.estimated&&t.estimatedTurns++,e.partial&&t.partialTurns++}function Sl(t){return t.hit=t.promptTokens>0?Number(Math.min(1,t.cachedTokens/t.promptTokens).toFixed(3)):0,t}function wM(t,e,n,s){let r=Object.keys(t).sort();if(!r.length)return[];let o=e>0?yo(e):yo(t[r[0]].ts),i=n>0?yo(n):yo(t[r[r.length-1]].ts),a=Math.round((i-o)/864e5)+1,l=s>0?Math.min(a,s):a;if(l>Vh)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=vl(d.getTime());c.push(t[f]||Object.assign({day:f,ts:d.getTime()},wi(),{hit:0,empty:!0}))}return c}function bM(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=wi(),o=Object.create(null),i=Object.create(null),a=Object.create(null);for(let d of s){xl(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"},wi())),xl(o[f],d);let p=xs(d.mode,20)||"agent";i[p]||(i[p]=Object.assign({mode:p},wi())),xl(i[p],d);let m=String(d.day||vl(d.ts));a[m]||(a[m]=Object.assign({day:m,ts:yo(d.ts)},wi())),xl(a[m],d)}let l=Object.keys(o).map(function(d){let f=Sl(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 Sl(i[d])}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.mode).localeCompare(String(f.mode))}),u=wM(a,Number(n.from)||0,Number(n.to)||0,Number(n.days)||0).map(function(d){return d.empty?d:Sl(d)});return s.length?Object.assign(Sl(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 kM(t){let e=bi.find(function(n){return n.key===String(t||"")});return e?e.label:bi[1].label}Zh.exports={MONTHS_KEEP:Xh,MAX_FILL_DAYS:Vh,RANGES:bi,dayOf:vl,monthOf:ki,startOfDay:yo,rangeOf:pM,rangeLabel:kM,row:mM,append:gM,read:yM,monthFiles:Ku,prune:Yh,aggregate:bM}});var Us=Q((dL,Qh)=>{var xM=["node_modules",".git","dist","build","out","coverage",".next",".venv","venv","target","vendor","__pycache__",".cache","npm-cache","_npx","_cacache",".m2"];Qh.exports={SKIP_DIRS:xM}});var og=Q((fL,rg)=>{"use strict";var SM=require("fs"),vM=require("path"),{SKIP_DIRS:_M}=Us(),eg=4e3,TM=80,MM=5e3,tg=Object.create(null);_M.forEach(function(t){tg[t]=!0});function CM(t,e){return t.name<e.name?-1:t.name>e.name?1:0}function ng(t){let e=[],n=Object.create(null);return function s(r,o,i){if(e.length>=eg||i>8)return;let a;try{a=SM.readdirSync(r,{withFileTypes:!0})}catch{return}a.sort(CM);for(let l=0;l<a.length&&e.length<eg;l++){let c=a[l],u=c.name;if(u==="."||u==="..")continue;let d=!1;try{d=c.isDirectory()}catch{}if(d){if(tg[u])continue;let p=o+u+"/";n[p]=!0,s(vM.join(r,u),p,i+1);continue}if(!c.isFile())continue;let f=o+u;/[\s"'`]/.test(f)||e.push(f)}}(t,"",0),{files:e,dirs:Object.keys(n)}}function sg(t,e){let n=String(e??""),s=n.toLowerCase(),r=n.lastIndexOf("/"),o=r>=0?n.slice(0,r+1):"",i=[],a=Object.create(null);function l(d,f){let p=d.slice(o.length);!p||!(f&&p.indexOf("/")===p.length-1)&&p.indexOf("/")>=0||i.indexOf(d)>=0||a[d]||(a[d]=!0,i.push(d))}!o&&"web".indexOf(s)===0&&i.push("web");let c=[],u=[];for(let d=0;d<t.files.length;d++){let f=t.files[d];f.toLowerCase().indexOf(s)===0&&c.push(f)}for(let d=0;d<t.dirs.length;d++){let f=t.dirs[d];f.toLowerCase().indexOf(s)===0&&u.push(f)}return c.forEach(function(d){l(d,!1)}),u.forEach(function(d){l(d,!0)}),i.sort(function(d,f){if(d==="web"||f==="web")return d==="web"?-1:1;let p=d.indexOf(n)===0,m=f.indexOf(n)===0;return p!==m?p?-1:1:d.length!==f.length?d.length-f.length:d<f?-1:d>f?1:0}),i.slice(0,TM)}function AM(t){let e=t||{},n=String(e.root||process.cwd()),s=(e.commands||[]).filter(function(i){return typeof i=="string"&&i.charAt(0)==="/"}),r={at:0,root:"",files:[],dirs:[]};function o(){if(r.root===n&&Date.now()-r.at<MM)return r;let i=ng(n);return r={at:Date.now(),root:n,files:i.files,dirs:i.dirs},r}return function(a){let l=String(a??"");if(l.charAt(0)==="/"&&!/\s/.test(l))return[s.filter(function(p){return p.indexOf(l)===0}),l];let c=l.lastIndexOf("@");if(c<0||c>0&&!/\s/.test(l.charAt(c-1)))return[[],l];let u=l.slice(c+1);return/\s/.test(u)?[[],l]:[sg(o(),u),u]}}function OM(t,e){if(e&&e.name==="enter"&&t===`
15
+ `)return!0;let n=e&&e.sequence;return n==="\x1B\r"?!0:typeof n=="string"&&/^(?:\u001b\[13;2[~u]|\u001b\[27;2;13~)$/.test(n)}rg.exports={createCompleter:AM,listEntries:ng,completePath:sg,isNewlineKey:OM}});var Tl=Q((pL,EM)=>{EM.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 Ju=Q((mL,Gu)=>{function Nr(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e):n:""}function PM(t,e){if(!t||typeof t!="object")return null;let n=Nr(t.id,64),s=Nr(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 jM(t,e){if(!t||typeof t!="object")return null;let n=Nr(t.id,64),s=Nr(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=PM(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 Ws(t){let e=t&&typeof t=="object"?t:{},n=Nr(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=jM(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 Hu(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=Nr(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=Nr(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 ig(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 ag(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"+ig(o,l)+"\uFF09"}).join("\u3001"):a=i+"\uFF08"+ig(o,i)+"\uFF09",s.push("- "+o.id+"\uFF08"+o.prompt+"\uFF09: "+a)}return s.join(`
16
+ `)}function zu(t){let e=t&&t.questions||[];return e.length!==1?!0:!!e[0].allow_multiple}Gu.exports={MAX_QUESTIONS:4,MIN_OPTIONS:2,MAX_OPTIONS:6,normalize:Ws,normalizeAnswers:Hu,formatAnswers:ag,needsConfirm:zu};if(require.main===Gu){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=Ws({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(!zu(s),"single select no confirm")}),n("normalize rejects empty / short options",function(){let s=!1;try{Ws({questions:[]})}catch{s=!0}t(s,"empty"),s=!1;try{Ws({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=Ws({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=Ws({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(zu(s),"confirm");let r=Hu(s,{a:"x",b:["p","q"]});t(r.a==="x"&&r.b.length===2,JSON.stringify(r));let o=ag(s,r);t(o.indexOf("\u7528\u6237\u56DE\u7B54")>=0&&o.indexOf("x\uFF08X\uFF09")>=0,o)}),n("normalizeAnswers rejects bad",function(){let s=Ws({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),r=!1;try{Hu(s,{a:"z"})}catch{r=!0}t(r,"bad id")}),n("normalize recommended flag",function(){let s=Ws({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 Xu=Q((hL,lg)=>{function vi(t){let e=String(t??"");return e===""?[]:e.split(`
17
17
  `)}function $u(t){return(t||[]).join(`
18
18
  `)}function NM(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 IM(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 DM(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(IM(t,a,l))}return n.forEach(function(r,o){r.id="h"+(o+1)}),n}function FM(t,e){let n=vi(t),s=vi(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=NM(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 DM(d)}function LM(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 RM(t,e){let n=vi(t),s=[];for(let r of e.lines)r.t!=="-"&&s.push(r.s);return $u(n.slice(0,e.oldStart).concat(s,n.slice(e.oldStart+e.oldLines)))}function qM(t,e){let n=vi(t),s=[];for(let r of e.lines)r.t!=="+"&&s.push(r.s);return $u(n.slice(0,e.newStart).concat(s,n.slice(e.newStart+e.newLines)))}function BM(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 UM(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}}lg.exports={CONTEXT:3,splitLines:vi,joinLines:$u,computeHunks:FM,stats:LM,applyHunkToBaseline:RM,revertHunkText:qM,revertHunkEdit:BM,hunkRanges:UM}});var ug=Q((cg,_i)=>{(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(`
19
19
  `),m=[];for(let h=0;h<p.length;h++)h>0&&m.push({k:"plain",s:`
20
- `}),i(p[h],f,m);return m}function i(l,c,u){let d=l,f=0,p=d.length;for(;f<p;){let m=d.slice(f),h;if(c.hashComment&&m[0]==="#"){u.push({k:"com",s:m}),f=p;continue}if(!c.hashComment&&m.slice(0,2)==="//"){u.push({k:"com",s:m}),f=p;continue}if(m.slice(0,2)==="/*"){let y=d.indexOf("*/",f+2),k=y===-1?m:d.slice(f,y+2);u.push({k:"com",s:k}),f+=k.length;continue}if(c.sql&&/^--/.test(m)){u.push({k:"com",s:m}),f=p;continue}if(m[0]==='"'||m[0]==="'"||m[0]==="`"){let y=m[0],k=1;for(;k<m.length;){if(m[k]==="\\"){k+=2;continue}if(m[k]===y){k++;break}k++}let T=m.slice(0,Math.min(k,m.length));u.push({k:"str",s:T}),f+=T.length;continue}if(h=/^\d+(\.\d+)?([eE][+-]?\d+)?/.exec(m),h&&/[\s\)\}\],;:=+\-*/<>!&|]|^/.test(m[h[0].length]||" ")){let y=d[f-1];if(!y||!/[A-Za-z0-9_$]/.test(y)){u.push({k:"num",s:h[0]}),f+=h[0].length;continue}}if(h=/^[A-Za-z_$][A-Za-z0-9_$]*/.exec(m),h){let y=h[0],k=m.slice(y.length);c.kws.has(y)?u.push({k:"kw",s:y}):/^\s*\(/.test(k)?u.push({k:"fn",s:y}):u.push({k:"plain",s:y}),f+=y.length;continue}u.push({k:"plain",s:m[0]}),f++}}let a={highlight:o,normLang:s};typeof _i<"u"&&_i&&_i.exports&&(_i.exports=a),t&&(t.LubanHighlight=a)})(typeof globalThis<"u"?globalThis:cg)});var yg=Q((gL,gg)=>{"use strict";var WM=ug();function Ml(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 pg(t,e,n){let s=n||Ml(null),r=WM.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 Nr(t,e){let n=e||Ml(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 dg(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 mg(t){return/^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(String(t))}function KM(t,e){return e+1>=t.length||String(t[e]).indexOf("|")===-1?!1:mg(t[e+1])}function Vu(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 HM(t,e){return t+" ".repeat(Math.max(0,e-Vu(t)))}function hg(t,e,n){let s=dg(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(dg(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=Vu(s[d]);r.forEach(function(p){let m=Vu(p[d]);m>f&&(f=m)}),a.push(f)}function l(d,f,p){return n.codeBorder(d+a.map(function(m){return f.repeat(m+2)}).join(f)+p)}function c(d,f){let p=d.map(function(m,h){let y=" "+HM(m,a[h])+" ";return f?n.bold(y):Nr(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(`
20
+ `}),i(p[h],f,m);return m}function i(l,c,u){let d=l,f=0,p=d.length;for(;f<p;){let m=d.slice(f),h;if(c.hashComment&&m[0]==="#"){u.push({k:"com",s:m}),f=p;continue}if(!c.hashComment&&m.slice(0,2)==="//"){u.push({k:"com",s:m}),f=p;continue}if(m.slice(0,2)==="/*"){let y=d.indexOf("*/",f+2),k=y===-1?m:d.slice(f,y+2);u.push({k:"com",s:k}),f+=k.length;continue}if(c.sql&&/^--/.test(m)){u.push({k:"com",s:m}),f=p;continue}if(m[0]==='"'||m[0]==="'"||m[0]==="`"){let y=m[0],k=1;for(;k<m.length;){if(m[k]==="\\"){k+=2;continue}if(m[k]===y){k++;break}k++}let T=m.slice(0,Math.min(k,m.length));u.push({k:"str",s:T}),f+=T.length;continue}if(h=/^\d+(\.\d+)?([eE][+-]?\d+)?/.exec(m),h&&/[\s\)\}\],;:=+\-*/<>!&|]|^/.test(m[h[0].length]||" ")){let y=d[f-1];if(!y||!/[A-Za-z0-9_$]/.test(y)){u.push({k:"num",s:h[0]}),f+=h[0].length;continue}}if(h=/^[A-Za-z_$][A-Za-z0-9_$]*/.exec(m),h){let y=h[0],k=m.slice(y.length);c.kws.has(y)?u.push({k:"kw",s:y}):/^\s*\(/.test(k)?u.push({k:"fn",s:y}):u.push({k:"plain",s:y}),f+=y.length;continue}u.push({k:"plain",s:m[0]}),f++}}let a={highlight:o,normLang:s};typeof _i<"u"&&_i&&_i.exports&&(_i.exports=a),t&&(t.LubanHighlight=a)})(typeof globalThis<"u"?globalThis:cg)});var yg=Q((gL,gg)=>{"use strict";var WM=ug();function Ml(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 pg(t,e,n){let s=n||Ml(null),r=WM.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 Ir(t,e){let n=e||Ml(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 dg(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 mg(t){return/^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(String(t))}function KM(t,e){return e+1>=t.length||String(t[e]).indexOf("|")===-1?!1:mg(t[e+1])}function Vu(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 HM(t,e){return t+" ".repeat(Math.max(0,e-Vu(t)))}function hg(t,e,n){let s=dg(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(dg(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=Vu(s[d]);r.forEach(function(p){let m=Vu(p[d]);m>f&&(f=m)}),a.push(f)}function l(d,f,p){return n.codeBorder(d+a.map(function(m){return f.repeat(m+2)}).join(f)+p)}function c(d,f){let p=d.map(function(m,h){let y=" "+HM(m,a[h])+" ";return f?n.bold(y):Ir(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(`
21
21
  `),next:o}}function zM(t,e){let n=Ml(e),r=String(t??"").split(`
22
22
  `),o=[],i=0,a=!1,l="",c=[];for(;i<r.length;){let u=r[i],d=/^\s*(```+|~~~+)\s*([^\s]*)\s*$/.exec(u);if(d&&!a){a=!0,l=d[2]||"",c=[],i++;continue}if(a){if(/^\s*(```+|~~~+)\s*$/.exec(u)){o.push(fg(c.join(`
23
- `),l,n)),a=!1,l="",c=[],i++;continue}c.push(u),i++;continue}if(/^\s*$/.test(u)){o.push(""),i++;continue}if(KM(r,i)){let y=hg(r,i,n);o.push(y.text),i=y.next;continue}let f=/^(#{1,6})\s+(.*)$/.exec(u);if(f){let y=f[1].length,k=Nr(f[2].trim(),n);o.push(y<=2?n.heading(k):n.bold(k)),i++;continue}if(/^\s*([-*_])(\s*\1){2,}\s*$/.test(u)){o.push(n.hr("\u2500".repeat(40))),i++;continue}let p=/^\s*>\s?(.*)$/.exec(u);if(p){o.push(n.quote("\u2502 "+Nr(p[1],n))),i++;continue}let m=/^(\s*)[-*+]\s+(.*)$/.exec(u),h=/^(\s*)(\d+)[.)]\s+(.*)$/.exec(u);if(m||h){let y=(m||h)[1],k=" ".repeat(Math.floor(y.length/2));m?o.push(k+n.bullet("\u2022")+" "+Nr(m[2],n)):o.push(k+n.bullet(h[2]+".")+" "+Nr(h[3],n)),i++;continue}o.push(Nr(u,n)),i++}return a&&o.push(fg(c.join(`
23
+ `),l,n)),a=!1,l="",c=[],i++;continue}c.push(u),i++;continue}if(/^\s*$/.test(u)){o.push(""),i++;continue}if(KM(r,i)){let y=hg(r,i,n);o.push(y.text),i=y.next;continue}let f=/^(#{1,6})\s+(.*)$/.exec(u);if(f){let y=f[1].length,k=Ir(f[2].trim(),n);o.push(y<=2?n.heading(k):n.bold(k)),i++;continue}if(/^\s*([-*_])(\s*\1){2,}\s*$/.test(u)){o.push(n.hr("\u2500".repeat(40))),i++;continue}let p=/^\s*>\s?(.*)$/.exec(u);if(p){o.push(n.quote("\u2502 "+Ir(p[1],n))),i++;continue}let m=/^(\s*)[-*+]\s+(.*)$/.exec(u),h=/^(\s*)(\d+)[.)]\s+(.*)$/.exec(u);if(m||h){let y=(m||h)[1],k=" ".repeat(Math.floor(y.length/2));m?o.push(k+n.bullet("\u2022")+" "+Ir(m[2],n)):o.push(k+n.bullet(h[2]+".")+" "+Ir(h[3],n)),i++;continue}o.push(Ir(u,n)),i++}return a&&o.push(fg(c.join(`
24
24
  `),l,n)),o.join(`
25
25
  `)}function fg(t,e,n){let r=pg(t,e,n).split(`
26
26
  `),o=e?n.codeBorder(" "+e+" "):"",i=n.codeBorder("\u256D"+"\u2500".repeat(2)+o+"\u2500".repeat(4)),a=n.codeBorder("\u2570"+"\u2500".repeat(40)),l=r.map(function(c){return n.codeBorder("\u2502 ")+c});return[i].concat(l,[a]).join(`
27
- `)}gg.exports={renderBlock:zM,highlightCode:pg,renderInline:Nr,isSepRow:mg,renderTable:hg,mk:Ml}});var Ti=Q((yL,_g)=>{"use strict";var GM=require("readline"),wg=Ju(),Cl=gi(),bg=Xu(),Ws=null;try{Ws=yg()}catch{Ws=null}var JM=["write_file","replace_in_file","apply_patch","delete_file","move_file"],$M=60,XM=160,Zu={pending:"\xB7",in_progress:"\u25B6",completed:"\u2713",cancelled:"\u2298"},VM={pending:"gray",in_progress:"cyan",completed:"green",cancelled:"gray"},Ks=null;try{let t=require("picocolors");t&&typeof t.createColors=="function"?Ks=t.createColors(!process.env.NO_COLOR&&!!process.stderr.isTTY):t&&(Ks=t)}catch{Ks=null}var Ir=!!(Ks&&Ks.isColorSupported===!0);function oe(t,e){let n=String(e??""),s=Ks&&Ks[t];return typeof s=="function"?s(n):n}function YM(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function xg(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 kg(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 Sg(t){let e=String((t&&t.result)==null?"":t.result);if(!e)return"";if(t&&t.ok===!1){let r=e.split(`
27
+ `)}gg.exports={renderBlock:zM,highlightCode:pg,renderInline:Ir,isSepRow:mg,renderTable:hg,mk:Ml}});var Ti=Q((yL,_g)=>{"use strict";var GM=require("readline"),wg=Ju(),Cl=gi(),bg=Xu(),Ks=null;try{Ks=yg()}catch{Ks=null}var JM=["write_file","replace_in_file","apply_patch","delete_file","move_file"],$M=60,XM=160,Zu={pending:"\xB7",in_progress:"\u25B6",completed:"\u2713",cancelled:"\u2298"},VM={pending:"gray",in_progress:"cyan",completed:"green",cancelled:"gray"},Hs=null;try{let t=require("picocolors");t&&typeof t.createColors=="function"?Hs=t.createColors(!process.env.NO_COLOR&&!!process.stderr.isTTY):t&&(Hs=t)}catch{Hs=null}var Dr=!!(Hs&&Hs.isColorSupported===!0);function oe(t,e){let n=String(e??""),s=Hs&&Hs[t];return typeof s=="function"?s(n):n}function YM(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function xg(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 kg(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 Sg(t){let e=String((t&&t.result)==null?"":t.result);if(!e)return"";if(t&&t.ok===!1){let r=e.split(`
28
28
  `);for(let o=0;o<r.length;o++){let i=r[o].trim();if(i)return YM(i.replace(/^ERROR:\s*/i,""),60)}return""}let n=0,s=e.split(`
29
- `);for(let r=0;r<s.length;r++)s[r].trim()&&n++;return n>=2?n+" \u884C":""}function ZM(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?oe("green","\u25C7"):oe("red","\u2717"))+" "+oe("bold",s)+oe("gray",r)+(a?oe("dim",a):""):"[tool] "+s+r+a+(o?"":" \u2717")}function QM(t,e,n){let s=Number(t)||0,r=Number(e)||0;if(r<=0)return xg(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 eC(t,e){let n=t.map(function(s){return s&&s.path}).join(", ");return e?oe("gray","\xB7 \u5F15\u7528 ")+oe("dim",n):"[refs] "+n}function tC(t,e){let n=(t&&t.description||"")+(t&&t.line||"");return e?oe("gray","\xB7 \u5B50\u4EE3\u7406 ")+oe("dim",n):"[\u5B50\u4EE3\u7406] "+n}function Yu(t,e,n){let s="+"+(Number(t)||0),r="-"+(Number(e)||0);return n?oe("green",s)+" "+oe("red",r):s+" "+r}function nC(t,e){let n=String(t.s==null?"":t.s);return t.t==="@"?e?oe("cyan",n):n:t.t==="+"?e?oe("green","+ "+n):"+ "+n:t.t==="-"?e?oe("red","- "+n):"- "+n:e?oe("dim"," "+n):" "+n}function vg(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?oe("cyan","\u25CF")+" "+oe("bold","move_file")+oe("gray"," \xB7 \u79FB\u52A8 "+u+" \u2192 "+d):"\u25CF move_file \xB7 \u79FB\u52A8 "+u+" \u2192 "+d;return o(f+(e?oe("dim","\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09"):"\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09")),r}let i=s.map(function(u){let d=bg.computeHunks(u.before||"",u.after||"");return{f:u,hunks:d,st:bg.stats(d)}}),a=0,l=0;for(let u of i)a+=u.st.add,l+=u.st.del;i.length>1&&o((e?oe("cyan","\u25CF")+" "+oe("bold",n.name||"\u5199\u5165"):"\u25CF "+(n.name||"\u5199\u5165"))+" "+i.length+" \u4E2A\u6587\u4EF6 "+Yu(a,l,e));let c=XM;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?oe("cyan","\u25CF")+" "+oe("bold",n.name||"\u5199\u5165")+oe("gray"," \xB7 "+p+" "+d.path):"\u25CF "+(n.name||"\u5199\u5165")+" \xB7 "+p+" "+d.path)+" "+Yu(f.add,f.del,e)):o((e?oe("gray"," \u25B8 "):" \u25B8 ")+(e?oe("bold",p+" "+d.path):p+" "+d.path)+" "+Yu(f.add,f.del,e));let m=[];for(let T of u.hunks){m.push({t:"@",s:T.header});for(let g of T.lines)m.push({t:g.t,s:g.s})}let h=Math.max(0,Math.min($M,c)),y=m.slice(0,h);c-=y.length;for(let T of y)o(" "+nC(T,e));let k=m.length-y.length;k>0&&o(" "+(e?oe("dim","\u2026 \u8FD8\u6709 "+k+" \u884C\u672A\u663E\u793A"):"\u2026 \u8FD8\u6709 "+k+" \u884C\u672A\u663E\u793A"))}return r}function sC(t,e){let n=t&&Zu[t.status]?t.status:"pending",s=Zu[n],r=String(t&&t.content||"");return e?oe(VM[n]||"gray",s)+" "+(n==="completed"||n==="cancelled"?oe("dim",r):r):"[todo] "+s+" "+r}function rC(t){let e=t||{},n=e.output||process.stderr,s=e.stdout||process.stdout,r=e.colors!==void 0?e.colors:Ks,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,m="idle",h="idle",y="\u601D\u8003\u4E2D",k=y,T="",g=0,v=0,w=0,S="",_=!1,C=!1,A="",F=0,K=!1,W=!1,B=0,pe="",N="",J=!1,be="",se=!1,Z=[],ge="",H=0;function De(O){if(!_){ht();try{n.write(String(O)+`
29
+ `);for(let r=0;r<s.length;r++)s[r].trim()&&n++;return n>=2?n+" \u884C":""}function ZM(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?oe("green","\u25C7"):oe("red","\u2717"))+" "+oe("bold",s)+oe("gray",r)+(a?oe("dim",a):""):"[tool] "+s+r+a+(o?"":" \u2717")}function QM(t,e,n){let s=Number(t)||0,r=Number(e)||0;if(r<=0)return xg(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 eC(t,e){let n=t.map(function(s){return s&&s.path}).join(", ");return e?oe("gray","\xB7 \u5F15\u7528 ")+oe("dim",n):"[refs] "+n}function tC(t,e){let n=(t&&t.description||"")+(t&&t.line||"");return e?oe("gray","\xB7 \u5B50\u4EE3\u7406 ")+oe("dim",n):"[\u5B50\u4EE3\u7406] "+n}function Yu(t,e,n){let s="+"+(Number(t)||0),r="-"+(Number(e)||0);return n?oe("green",s)+" "+oe("red",r):s+" "+r}function nC(t,e){let n=String(t.s==null?"":t.s);return t.t==="@"?e?oe("cyan",n):n:t.t==="+"?e?oe("green","+ "+n):"+ "+n:t.t==="-"?e?oe("red","- "+n):"- "+n:e?oe("dim"," "+n):" "+n}function vg(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?oe("cyan","\u25CF")+" "+oe("bold","move_file")+oe("gray"," \xB7 \u79FB\u52A8 "+u+" \u2192 "+d):"\u25CF move_file \xB7 \u79FB\u52A8 "+u+" \u2192 "+d;return o(f+(e?oe("dim","\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09"):"\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09")),r}let i=s.map(function(u){let d=bg.computeHunks(u.before||"",u.after||"");return{f:u,hunks:d,st:bg.stats(d)}}),a=0,l=0;for(let u of i)a+=u.st.add,l+=u.st.del;i.length>1&&o((e?oe("cyan","\u25CF")+" "+oe("bold",n.name||"\u5199\u5165"):"\u25CF "+(n.name||"\u5199\u5165"))+" "+i.length+" \u4E2A\u6587\u4EF6 "+Yu(a,l,e));let c=XM;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?oe("cyan","\u25CF")+" "+oe("bold",n.name||"\u5199\u5165")+oe("gray"," \xB7 "+p+" "+d.path):"\u25CF "+(n.name||"\u5199\u5165")+" \xB7 "+p+" "+d.path)+" "+Yu(f.add,f.del,e)):o((e?oe("gray"," \u25B8 "):" \u25B8 ")+(e?oe("bold",p+" "+d.path):p+" "+d.path)+" "+Yu(f.add,f.del,e));let m=[];for(let T of u.hunks){m.push({t:"@",s:T.header});for(let g of T.lines)m.push({t:g.t,s:g.s})}let h=Math.max(0,Math.min($M,c)),y=m.slice(0,h);c-=y.length;for(let T of y)o(" "+nC(T,e));let k=m.length-y.length;k>0&&o(" "+(e?oe("dim","\u2026 \u8FD8\u6709 "+k+" \u884C\u672A\u663E\u793A"):"\u2026 \u8FD8\u6709 "+k+" \u884C\u672A\u663E\u793A"))}return r}function sC(t,e){let n=t&&Zu[t.status]?t.status:"pending",s=Zu[n],r=String(t&&t.content||"");return e?oe(VM[n]||"gray",s)+" "+(n==="completed"||n==="cancelled"?oe("dim",r):r):"[todo] "+s+" "+r}function rC(t){let e=t||{},n=e.output||process.stderr,s=e.stdout||process.stdout,r=e.colors!==void 0?e.colors:Hs,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,m="idle",h="idle",y="\u601D\u8003\u4E2D",k=y,T="",g=0,v=0,w=0,S="",_=!1,C=!1,A="",F=0,K=!1,W=!1,B=0,pe="",N="",J=!1,be="",se=!1,Z=[],ge="",H=0;function De(O){if(!_){ht();try{n.write(String(O)+`
30
30
  `)}catch{}}}function _e(O){if(O)try{s.write(O)}catch{}}function ht(){W&&(_e(`
31
- `),B++,W=!1)}function xt(){let O=[k];return T&&O.push(T),w>0&&O.push(xg(w)+" \u5B57\u601D\u8003"),g>0&&O.push("ctx "+QM(g,v,oe)),O.join(" \xB7 ")}function Ce(){if(!o||_)return;let O=u[f%u.length];f++;try{n.write("\r\x1B[K"+oe("cyan",Cl.face(h))+" "+oe("magenta",O)+" "+xt())}catch{}p=!0}function Dt(O){if(O&&(k=String(O)),!(!o||_)){if(d){Ce();return}Ce(),d=setInterval(Ce,100)}}function Ot(){d&&Ce()}function Ue(){if(d&&(clearInterval(d),d=null),p){try{n.write("\r\x1B[K")}catch{}p=!1}}function Wn(){if(!s.isTTY)return!1;let O="\r\x1B[J";return B>0&&(O+="\x1B["+B+"A\x1B[J"),_e(O),B=0,W=!1,!0}async function Ls(){if(!o)return!1;try{l=await import("@clack/prompts")}catch{return l=null,C||(C=!0,De(oe("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 ys(){return!!(Ws&&r&&s.isTTY&&r.isColorSupported===!0)}function We(O){N+=O;let I;for(;(I=N.indexOf(`
32
- `))>=0;){let V=N.slice(0,I+1);N=N.slice(I+1),at(V)}}function at(O){if(O.match(/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/)){if(!J){ne(),J=!0,be=O;return}be+=O,Fe(be),be="",J=!1;return}if(J){be+=O;return}let V=O.trim(),X=V.indexOf("|")!==-1;if(se){if(!X||/^\s*$/.test(V)){ne(),ce(O);return}Z.push(O);return}if(X&&!/^\s*$/.test(V)){se=!0,Z=[O];return}ce(O)}function ne(){if(!se)return;let O=Z;if(se=!1,Z=[],O.length>=2&&Ws.isSepRow(O[1])){let I=O.map(function(X){return X.replace(/\n$/,"")}),V=Ws.renderTable(I,0,Ws.mk(oe));gt(V.text+`
33
- `)}else O.forEach(ce)}function ce(O){let I=Ws.renderBlock(O,oe);gt(I)}function Fe(O){gt(Ws.renderBlock(O,oe))}function gt(O){if(O){ht();try{n.write(O)}catch{return}for(let I=0;I<O.length;I++)O.charCodeAt(I)===10&&B++;W=O.charCodeAt(O.length-1)!==10}}function ws(){if(ys()&&(J&&be&&(Fe(be),be="",J=!1),ne(),N)){let O=N;N="",ce(O.endsWith(`
31
+ `),B++,W=!1)}function xt(){let O=[k];return T&&O.push(T),w>0&&O.push(xg(w)+" \u5B57\u601D\u8003"),g>0&&O.push("ctx "+QM(g,v,oe)),O.join(" \xB7 ")}function Ce(){if(!o||_)return;let O=u[f%u.length];f++;try{n.write("\r\x1B[K"+oe("cyan",Cl.face(h))+" "+oe("magenta",O)+" "+xt())}catch{}p=!0}function Ft(O){if(O&&(k=String(O)),!(!o||_)){if(d){Ce();return}Ce(),d=setInterval(Ce,100)}}function Ot(){d&&Ce()}function Ue(){if(d&&(clearInterval(d),d=null),p){try{n.write("\r\x1B[K")}catch{}p=!1}}function Wn(){if(!s.isTTY)return!1;let O="\r\x1B[J";return B>0&&(O+="\x1B["+B+"A\x1B[J"),_e(O),B=0,W=!1,!0}async function Rs(){if(!o)return!1;try{l=await import("@clack/prompts")}catch{return l=null,C||(C=!0,De(oe("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 ws(){return!!(Ks&&r&&s.isTTY&&r.isColorSupported===!0)}function We(O){N+=O;let I;for(;(I=N.indexOf(`
32
+ `))>=0;){let V=N.slice(0,I+1);N=N.slice(I+1),at(V)}}function at(O){if(O.match(/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/)){if(!J){ne(),J=!0,be=O;return}be+=O,Fe(be),be="",J=!1;return}if(J){be+=O;return}let V=O.trim(),X=V.indexOf("|")!==-1;if(se){if(!X||/^\s*$/.test(V)){ne(),ce(O);return}Z.push(O);return}if(X&&!/^\s*$/.test(V)){se=!0,Z=[O];return}ce(O)}function ne(){if(!se)return;let O=Z;if(se=!1,Z=[],O.length>=2&&Ks.isSepRow(O[1])){let I=O.map(function(X){return X.replace(/\n$/,"")}),V=Ks.renderTable(I,0,Ks.mk(oe));gt(V.text+`
33
+ `)}else O.forEach(ce)}function ce(O){let I=Ks.renderBlock(O,oe);gt(I)}function Fe(O){gt(Ks.renderBlock(O,oe))}function gt(O){if(O){ht();try{n.write(O)}catch{return}for(let I=0;I<O.length;I++)O.charCodeAt(I)===10&&B++;W=O.charCodeAt(O.length-1)!==10}}function bs(){if(ws()&&(J&&be&&(Fe(be),be="",J=!1),ne(),N)){let O=N;N="",ce(O.endsWith(`
34
34
  `)?O:O+`
35
- `)}}function an(O){let I=String(O??"");if(!(!I||!i||_)){if(W||Ue(),K=!0,ys())We(I);else{_e(I);for(let V=0;V<I.length;V++)I.charCodeAt(V)===10&&B++;W=I.charCodeAt(I.length-1)!==10}pe+=I}}function Ft(O){let I=String(O??"");if(!I)return;if(w+=I.length,!a){Ot();return}S+=I;let V=S.lastIndexOf(`
35
+ `)}}function an(O){let I=String(O??"");if(!(!I||!i||_)){if(W||Ue(),K=!0,ws())We(I);else{_e(I);for(let V=0;V<I.length;V++)I.charCodeAt(V)===10&&B++;W=I.charCodeAt(I.length-1)!==10}pe+=I}}function Lt(O){let I=String(O??"");if(!I)return;if(w+=I.length,!a){Ot();return}S+=I;let V=S.lastIndexOf(`
36
36
  `);if(V<0)return;let X=S.slice(0,V);if(S=S.slice(V+1),!!X.trim()){Ue(),ht();try{n.write(oe("gray",X)+`
37
37
  `)}catch{}}}function Et(O){let I=String(O??"");if(w+=I.length,K&&(Wn(),pe="",K=!1),a&&I.trim()){Ue();try{n.write(oe("gray",I.replace(/\s+$/,""))+`
38
- `)}catch{}}Ot()}function ns(O){let I=String(O??"");if(A=I,F=Date.now(),h="work",!o){ht(),De("[..] "+I);return}ht(),Dt(I)}function Qe(O){if(O&&O.phase==="start")return;Ue(),h=m;let I=O&&O.name||"",V={detail:Sg(O),sec:""};F>0&&I&&A.indexOf(I)===0&&(V.sec=kg(Date.now()-F),F=0,A=""),De(ZM(O,Ir,V)),o&&Dt(y)}function En(O){O&&(h=m,g=Number(O.contextTokens)||0,v=Number(O.window)||0,pe&&(ge=pe,pe=""))}function Kn(O){!Array.isArray(O)||!O.length||(h=m,Ue(),De(eC(O,Ir)),o&&Dt(y))}function Rs(O){h=m,Ue(),De(tC(O,Ir)),o&&Dt(y)}let bs=Object.create(null);function co(O){let I=Array.isArray(O)?O:[];if(!I.length)return;let V=[];for(let X=0;X<I.length;X++){let Ve=I[X];if(!Ve||!Ve.id)continue;let st=Zu[Ve.status]?Ve.status:"pending";bs[Ve.id]!==st&&(bs[Ve.id]=st,V.push(sC(Ve,Ir)))}if(V.length){h=m,Ue();for(let X=0;X<V.length;X++)De(V[X]);o&&Dt(y)}}function pi(O){let I=O||{};I.mode&&(T=String(I.mode)),m=Cl.moodForMode(T),h=m,Ot()}async function ml(O,I){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");Ue();try{O&&O.title&&l.note(O.title,"\u63D0\u95EE",{output:n});let V={},X=O&&O.questions||[];for(let Ve=0;Ve<X.length;Ve++){let st=X[Ve],et=st.options.map(function(R){return{value:R.id,label:R.recommended?R.label+"\uFF08\u63A8\u8350\uFF09":R.label}}),Ye;if(st.allow_multiple?Ye=await l.multiselect({message:st.prompt,options:et,required:!0,output:n,signal:I}):Ye=await l.select({message:st.prompt,options:et,output:n,signal:I}),l.isCancel(Ye)){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")}V[st.id]=Ye}return wg.formatAnswers(O,wg.normalizeAnswers(O,V))}finally{o&&!(I&&I.aborted)&&Dt(y)}}function Tu(O){return new Promise(function(I){let V=null,X=!1,Ve=function(et){if(!X){X=!0;try{V&&V.close()}catch{}I(et)}};try{V=GM.createInterface({input:process.stdin,output:n,terminal:!!(process.stdin.isTTY&&n.isTTY)})}catch{I(null);return}let st=function(){Ve(null)};if(O&&typeof O.addEventListener=="function"){if(O.aborted){Ve(null);return}O.addEventListener("abort",st,{once:!0})}V.question("\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\uFF1F[y] \u5141\u8BB8 / [a] \u672C\u6B21\u4F1A\u8BDD\u90FD\u5141\u8BB8 / [N] \u62D2\u7EDD ",function(et){O&&typeof O.removeEventListener=="function"&&O.removeEventListener("abort",st);let Ye=String(et||"").trim().toLowerCase();Ve(Ye==="a"||Ye==="all"?"all":Ye==="y"||Ye==="yes"?"yes":null)})})}async function uo(O,I){if(!o)return!0;let V=vg(O,Ir);V.length&&(Ue(),h="work",De(V.join(`
39
- `)));let X=null;if(c&&l){try{X=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:I})}catch{X=null}l.isCancel(X)&&(X=null)}else X=await Tu(I);return F=Date.now(),o&&!(I&&I.aborted)&&Dt(y),X==="all"?"all":X==="yes"?"yes":!1}function fo(O){let I=String(O??"");if(!I.trim())return"";if(!K)return I;let V=pe.trim()?pe:ge||"";return V.trim()?V.trimEnd()===I.trimEnd()?"":I.startsWith(V)?I.slice(V.length):I:I}function hl(O){let I=String(O??"");if(ws(),!K){_e(I+`
38
+ `)}catch{}}Ot()}function ns(O){let I=String(O??"");if(A=I,F=Date.now(),h="work",!o){ht(),De("[..] "+I);return}ht(),Ft(I)}function Qe(O){if(O&&O.phase==="start")return;Ue(),h=m;let I=O&&O.name||"",V={detail:Sg(O),sec:""};F>0&&I&&A.indexOf(I)===0&&(V.sec=kg(Date.now()-F),F=0,A=""),De(ZM(O,Dr,V)),o&&Ft(y)}function En(O){O&&(h=m,g=Number(O.contextTokens)||0,v=Number(O.window)||0,pe&&(ge=pe,pe=""))}function Kn(O){!Array.isArray(O)||!O.length||(h=m,Ue(),De(eC(O,Dr)),o&&Ft(y))}function qs(O){h=m,Ue(),De(tC(O,Dr)),o&&Ft(y)}let ks=Object.create(null);function co(O){let I=Array.isArray(O)?O:[];if(!I.length)return;let V=[];for(let X=0;X<I.length;X++){let Ve=I[X];if(!Ve||!Ve.id)continue;let st=Zu[Ve.status]?Ve.status:"pending";ks[Ve.id]!==st&&(ks[Ve.id]=st,V.push(sC(Ve,Dr)))}if(V.length){h=m,Ue();for(let X=0;X<V.length;X++)De(V[X]);o&&Ft(y)}}function pi(O){let I=O||{};I.mode&&(T=String(I.mode)),m=Cl.moodForMode(T),h=m,Ot()}async function ml(O,I){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");Ue();try{O&&O.title&&l.note(O.title,"\u63D0\u95EE",{output:n});let V={},X=O&&O.questions||[];for(let Ve=0;Ve<X.length;Ve++){let st=X[Ve],et=st.options.map(function(R){return{value:R.id,label:R.recommended?R.label+"\uFF08\u63A8\u8350\uFF09":R.label}}),Ye;if(st.allow_multiple?Ye=await l.multiselect({message:st.prompt,options:et,required:!0,output:n,signal:I}):Ye=await l.select({message:st.prompt,options:et,output:n,signal:I}),l.isCancel(Ye)){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")}V[st.id]=Ye}return wg.formatAnswers(O,wg.normalizeAnswers(O,V))}finally{o&&!(I&&I.aborted)&&Ft(y)}}function Tu(O){return new Promise(function(I){let V=null,X=!1,Ve=function(et){if(!X){X=!0;try{V&&V.close()}catch{}I(et)}};try{V=GM.createInterface({input:process.stdin,output:n,terminal:!!(process.stdin.isTTY&&n.isTTY)})}catch{I(null);return}let st=function(){Ve(null)};if(O&&typeof O.addEventListener=="function"){if(O.aborted){Ve(null);return}O.addEventListener("abort",st,{once:!0})}V.question("\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\uFF1F[y] \u5141\u8BB8 / [a] \u672C\u6B21\u4F1A\u8BDD\u90FD\u5141\u8BB8 / [N] \u62D2\u7EDD ",function(et){O&&typeof O.removeEventListener=="function"&&O.removeEventListener("abort",st);let Ye=String(et||"").trim().toLowerCase();Ve(Ye==="a"||Ye==="all"?"all":Ye==="y"||Ye==="yes"?"yes":null)})})}async function uo(O,I){if(!o)return!0;let V=vg(O,Dr);V.length&&(Ue(),h="work",De(V.join(`
39
+ `)));let X=null;if(c&&l){try{X=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:I})}catch{X=null}l.isCancel(X)&&(X=null)}else X=await Tu(I);return F=Date.now(),o&&!(I&&I.aborted)&&Ft(y),X==="all"?"all":X==="yes"?"yes":!1}function fo(O){let I=String(O??"");if(!I.trim())return"";if(!K)return I;let V=pe.trim()?pe:ge||"";return V.trim()?V.trimEnd()===I.trimEnd()?"":I.startsWith(V)?I.slice(V.length):I:I}function hl(O){let I=String(O??"");if(bs(),!K){_e(I+`
40
40
  `),W=!1;return}let V=fo(I),X="";W?(X+=`
41
41
  `,W=!1):V&&V.charAt(0)===`
42
42
  `&&(V=V.slice(1)),V&&(X+=V),X&&X.charCodeAt(X.length-1)!==10&&(X+=`
43
- `),_e(X)}function Tr(O){let I=O||{};if(Ue(),a&&S.trim())try{n.write(oe("gray",S.replace(/\s+$/,""))+`
44
- `)}catch{}S="";let V=o?oe("cyan",Cl.face(Cl.moodForStop(I.stop)))+" ":"";if(I.compact){let et=[String(I.stop||"unknown")];et.push((I.iters==null?0:I.iters)+" \u8F6E"),et.push((I.tools||0)+" \u5DE5\u5177"),H>0&&et.push(kg(Date.now()-H)),De(o?V+oe("gray",et.join(" \xB7 ")):"[luban] "+et.join(" "))}else{let et="\u6A21\u5F0F="+I.mode+" \u8F6E\u6570="+I.iters+" \u5DE5\u5177\u8C03\u7528="+I.tools+" \u505C\u6B62="+I.stop+" \u6A21\u578B="+(I.model||"");De(V+(Ir?oe("cyan","[luban] "):"[luban] ")+et)}let X=Array.isArray(I.log)?I.log:[],Ve=Object.create(null),st=[];for(let et=0;et<X.length;et++){let Ye=X[et];if(!Ye||Ye.ok===!1||JM.indexOf(Ye.name)<0)continue;let R=Ye.path?String(Ye.path):"";!R||Ve[R]||/^\d+ 个文件$/.test(R)||(Ve[R]=1,st.push(R))}st.length&&De((Ir?oe("gray","\xB7 \u6539\u52A8 "):"[files] ")+st.length+" \u4E2A\u6587\u4EF6: "+st.join(", "))}function po(){Ue(),k=y,h=m,K=!1,W=!1,B=0,pe="",N="",J=!1,be="",se=!1,Z=[],ge="",w=0,S="",A="",F=0,g=0,v=0,H=Date.now();for(let O in bs)delete bs[O];Dt(y)}function gl(){if(Ue(),a&&S.trim())try{n.write(oe("gray",S.replace(/\s+$/,""))+`
45
- `)}catch{}S="",ws()}function z(O){return O!==void 0&&(a=!!O),a}function Y(){Ue(),_=!0}return process.once("exit",function(){try{Ue()}catch{}}),{enabled:o,init:Ls,stream:an,thinking:Ft,split:Et,progress:ns,tool:Qe,usage:En,refs:Kn,sub:Rs,todos:co,setStatus:pi,setThinking:z,beginTurn:po,endTurn:gl,ask:ml,confirmWrite:uo,outputFinal:hl,finish:Tr,close:Y,line:function(O){Ue(),De(O)}}}_g.exports={createUI:rC,paint:oe,resultDetail:Sg,previewLines:vg}});var rd=Q((wL,Pg)=>{var Vt=require("fs"),wo=require("fs").promises,ed=require("path"),Cg=500,Qu=2e4,Tg=2e4,oC=8e4,iC=4e3,aC=20,lC=40,Ag=50,cC=4,uC=5*1024*1024,dC={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},fC=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/;function xs(t){return(t<10?"0":"")+t}function td(t){let e=t||new Date;return e.getFullYear()+xs(e.getMonth()+1)+xs(e.getDate())+"-"+xs(e.getHours())+xs(e.getMinutes())+xs(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Ne(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function pC(t){if(!Array.isArray(t)||!t.length)return;let e=[];for(let n of t.slice(0,cC)){if(!n||typeof n!="object")continue;let s=Ne(n.file,120),r=String(n.mime==null?"":n.mime),o=dC[r];if(!o||!fC.test(s)||s.slice(s.lastIndexOf(".")+1)!==o)continue;let i=Math.min(uC,Math.floor(Number(n.bytes)||0));i<=0||e.push({file:s,mime:r,bytes:i})}return e.length?e:void 0}function mC(t){let e=t?new Date(t):new Date;return isNaN(e.getTime())?"":xs(e.getMonth()+1)+"-"+xs(e.getDate())+" "+xs(e.getHours())+":"+xs(e.getMinutes())}var Og="\u65B0\u4F1A\u8BDD";function hC(t){typeof t=="string"&&t&&(Og=t)}function Mi(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||Og)+" \xB7 "+mC(e)}var gC=40,yC={pending:1,in_progress:1,completed:1,cancelled:1},wC=4,bC=6;function Mg(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,gC)){if(!n||typeof n!="object")continue;let s=Ne(n.id,64).trim(),r=Ne(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:yC[o]?o:"pending"})}return e}function kC(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,bC)){if(!n||typeof n!="object")continue;let s=Ne(n.id,64).trim(),r=Ne(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 xC(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,wC)){if(!n||typeof n!="object")continue;let s=Ne(n.id,64).trim(),r=Ne(n.prompt,240).trim(),o=kC(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 SC(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=Ne(c[f],64).trim();!p||!a[p]||d[p]||(d[p]=1,u.push(p))}u.length&&(r[i.id]=u)}else{let c=Ne(Array.isArray(l)?l[0]:l,64).trim();c&&a[c]&&(r[i.id]=c)}}return r}function Eg(t){let e=Object.assign({},t);if(e.t==="tool")return e.name=Ne(e.name,60),e.path=Ne(e.path,300),e.result=Ne(e.result,iC),e.ok=e.ok!==!1,e;if(e.t==="sources")return e.items=(e.items||[]).slice(0,aC).map(function(n){return{title:Ne(n&&n.title,200),url:Ne(n&&n.url,500),siteName:Ne(n&&n.siteName,80),date:Ne(n&&n.date,40)}}),e.query=Ne(e.query,200),e;if(e.t==="refs")return e.refs=(e.refs||[]).slice(0,lC).map(function(n){return{kind:n&&n.kind==="selection"?"selection":"file",path:Ne(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:Ne(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=Ne(e.model,120),delete e.prefixHint,e}if(e.t==="user"){e.text=Ne(e.text,Qu),e.web=!!e.web,e.ctx!=null&&(e.ctx=Ne(e.ctx,oC)),e.exec&&(e.exec=!0);let n=pC(e.images);return n?e.images=n:delete e.images,e}if(e.t==="error")return e.message=Ne(e.message,2e3),e;if(e.t==="todos")return e.items=Mg(e.items),e;if(e.t==="ask_question")return e.id=Ne(e.id,80),e.title=Ne(e.title,80),e.questions=xC(e.questions),e.answers=SC(e.answers,e.questions),e;if(e.t==="plan"){e.planFile=Ne(e.planFile,1e3),typeof e.text=="string"&&(e.text=Ne(e.text,Qu)),typeof e.think=="string"&&(e.think=Ne(e.think,Tg));let n=Mg(e.todos);return n.length?e.todos=n:delete e.todos,e}return typeof e.text=="string"&&(e.text=Ne(e.text,Qu)),typeof e.think=="string"&&(e.think=Ne(e.think,Tg)),e}function nd(t){return{id:t.id,title:t.title||Mi(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 $e(t,e){this.dir=t,this.max=e&&e.max||Ag,this._listCache=null,this._listJson="",this._listMtime=0,this._wq=null,this._removed=new Set,this._syncGen=0,this._tmpSeq=0,this._cleanupTmp()}$e.prototype._cleanupTmp=function(){let t=[];try{t=Vt.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{Vt.unlinkSync(ed.join(this.dir,n)),e++}catch{}}return e};$e.prototype.setMax=function(t){let e=Number(t);return isFinite(e)&&e>=1&&(this.max=Math.floor(e)),this.max};$e.prototype.fileOf=function(t){return ed.join(this.dir,String(t)+".json")};$e.prototype.indexPath=function(){return ed.join(this.dir,"index.json")};$e.prototype._ensureDir=function(){Vt.mkdirSync(this.dir,{recursive:!0,mode:448})};$e.prototype._write=function(t,e){this._ensureDir();let n=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(Vt.writeFileSync(n,e,{mode:384}),Vt.existsSync(t))try{Vt.copyFileSync(t,t+".bak")}catch{}Vt.renameSync(n,t)};$e.prototype._writeAsync=async function(t,e,n){await wo.mkdir(this.dir,{recursive:!0,mode:448});let s=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(await wo.writeFile(s,e,{mode:384}),typeof n=="function"&&!n()){try{await wo.unlink(s)}catch{}return!1}try{await wo.access(t);try{await wo.copyFile(t,t+".bak")}catch{}}catch{}return await wo.rename(s,t),!0};$e.prototype._mtimeOf=function(t){try{return Vt.statSync(t).mtimeMs}catch{return 0}};$e.prototype._ids=function(){let t=[];try{t=Vt.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};$e.prototype.rebuildIndex=function(){let t=[];for(let n of this._ids()){let s=this.load(n);s&&t.push(nd(s))}t.sort(function(n,s){return String(s.updatedAt).localeCompare(String(n.updatedAt))});let e=JSON.stringify({v:1,sessions:t})+`
43
+ `),_e(X)}function Mr(O){let I=O||{};if(Ue(),a&&S.trim())try{n.write(oe("gray",S.replace(/\s+$/,""))+`
44
+ `)}catch{}S="";let V=o?oe("cyan",Cl.face(Cl.moodForStop(I.stop)))+" ":"";if(I.compact){let et=[String(I.stop||"unknown")];et.push((I.iters==null?0:I.iters)+" \u8F6E"),et.push((I.tools||0)+" \u5DE5\u5177"),H>0&&et.push(kg(Date.now()-H)),De(o?V+oe("gray",et.join(" \xB7 ")):"[luban] "+et.join(" "))}else{let et="\u6A21\u5F0F="+I.mode+" \u8F6E\u6570="+I.iters+" \u5DE5\u5177\u8C03\u7528="+I.tools+" \u505C\u6B62="+I.stop+" \u6A21\u578B="+(I.model||"");De(V+(Dr?oe("cyan","[luban] "):"[luban] ")+et)}let X=Array.isArray(I.log)?I.log:[],Ve=Object.create(null),st=[];for(let et=0;et<X.length;et++){let Ye=X[et];if(!Ye||Ye.ok===!1||JM.indexOf(Ye.name)<0)continue;let R=Ye.path?String(Ye.path):"";!R||Ve[R]||/^\d+ 个文件$/.test(R)||(Ve[R]=1,st.push(R))}st.length&&De((Dr?oe("gray","\xB7 \u6539\u52A8 "):"[files] ")+st.length+" \u4E2A\u6587\u4EF6: "+st.join(", "))}function po(){Ue(),k=y,h=m,K=!1,W=!1,B=0,pe="",N="",J=!1,be="",se=!1,Z=[],ge="",w=0,S="",A="",F=0,g=0,v=0,H=Date.now();for(let O in ks)delete ks[O];Ft(y)}function gl(){if(Ue(),a&&S.trim())try{n.write(oe("gray",S.replace(/\s+$/,""))+`
45
+ `)}catch{}S="",bs()}function z(O){return O!==void 0&&(a=!!O),a}function Y(){Ue(),_=!0}return process.once("exit",function(){try{Ue()}catch{}}),{enabled:o,init:Rs,stream:an,thinking:Lt,split:Et,progress:ns,tool:Qe,usage:En,refs:Kn,sub:qs,todos:co,setStatus:pi,setThinking:z,beginTurn:po,endTurn:gl,ask:ml,confirmWrite:uo,outputFinal:hl,finish:Mr,close:Y,line:function(O){Ue(),De(O)}}}_g.exports={createUI:rC,paint:oe,resultDetail:Sg,previewLines:vg}});var rd=Q((wL,Pg)=>{var Vt=require("fs"),wo=require("fs").promises,ed=require("path"),Cg=500,Qu=2e4,Tg=2e4,oC=8e4,iC=4e3,aC=20,lC=40,Ag=50,cC=4,uC=5*1024*1024,dC={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},fC=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/;function Ss(t){return(t<10?"0":"")+t}function td(t){let e=t||new Date;return e.getFullYear()+Ss(e.getMonth()+1)+Ss(e.getDate())+"-"+Ss(e.getHours())+Ss(e.getMinutes())+Ss(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Ne(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function pC(t){if(!Array.isArray(t)||!t.length)return;let e=[];for(let n of t.slice(0,cC)){if(!n||typeof n!="object")continue;let s=Ne(n.file,120),r=String(n.mime==null?"":n.mime),o=dC[r];if(!o||!fC.test(s)||s.slice(s.lastIndexOf(".")+1)!==o)continue;let i=Math.min(uC,Math.floor(Number(n.bytes)||0));i<=0||e.push({file:s,mime:r,bytes:i})}return e.length?e:void 0}function mC(t){let e=t?new Date(t):new Date;return isNaN(e.getTime())?"":Ss(e.getMonth()+1)+"-"+Ss(e.getDate())+" "+Ss(e.getHours())+":"+Ss(e.getMinutes())}var Og="\u65B0\u4F1A\u8BDD";function hC(t){typeof t=="string"&&t&&(Og=t)}function Mi(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||Og)+" \xB7 "+mC(e)}var gC=40,yC={pending:1,in_progress:1,completed:1,cancelled:1},wC=4,bC=6;function Mg(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,gC)){if(!n||typeof n!="object")continue;let s=Ne(n.id,64).trim(),r=Ne(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:yC[o]?o:"pending"})}return e}function kC(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,bC)){if(!n||typeof n!="object")continue;let s=Ne(n.id,64).trim(),r=Ne(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 xC(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,wC)){if(!n||typeof n!="object")continue;let s=Ne(n.id,64).trim(),r=Ne(n.prompt,240).trim(),o=kC(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 SC(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=Ne(c[f],64).trim();!p||!a[p]||d[p]||(d[p]=1,u.push(p))}u.length&&(r[i.id]=u)}else{let c=Ne(Array.isArray(l)?l[0]:l,64).trim();c&&a[c]&&(r[i.id]=c)}}return r}function Eg(t){let e=Object.assign({},t);if(e.t==="tool")return e.name=Ne(e.name,60),e.path=Ne(e.path,300),e.result=Ne(e.result,iC),e.ok=e.ok!==!1,e;if(e.t==="sources")return e.items=(e.items||[]).slice(0,aC).map(function(n){return{title:Ne(n&&n.title,200),url:Ne(n&&n.url,500),siteName:Ne(n&&n.siteName,80),date:Ne(n&&n.date,40)}}),e.query=Ne(e.query,200),e;if(e.t==="refs")return e.refs=(e.refs||[]).slice(0,lC).map(function(n){return{kind:n&&n.kind==="selection"?"selection":"file",path:Ne(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:Ne(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=Ne(e.model,120),delete e.prefixHint,e}if(e.t==="user"){e.text=Ne(e.text,Qu),e.web=!!e.web,e.ctx!=null&&(e.ctx=Ne(e.ctx,oC)),e.exec&&(e.exec=!0);let n=pC(e.images);return n?e.images=n:delete e.images,e}if(e.t==="error")return e.message=Ne(e.message,2e3),e;if(e.t==="todos")return e.items=Mg(e.items),e;if(e.t==="ask_question")return e.id=Ne(e.id,80),e.title=Ne(e.title,80),e.questions=xC(e.questions),e.answers=SC(e.answers,e.questions),e;if(e.t==="plan"){e.planFile=Ne(e.planFile,1e3),typeof e.text=="string"&&(e.text=Ne(e.text,Qu)),typeof e.think=="string"&&(e.think=Ne(e.think,Tg));let n=Mg(e.todos);return n.length?e.todos=n:delete e.todos,e}return typeof e.text=="string"&&(e.text=Ne(e.text,Qu)),typeof e.think=="string"&&(e.think=Ne(e.think,Tg)),e}function nd(t){return{id:t.id,title:t.title||Mi(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 $e(t,e){this.dir=t,this.max=e&&e.max||Ag,this._listCache=null,this._listJson="",this._listMtime=0,this._wq=null,this._removed=new Set,this._syncGen=0,this._tmpSeq=0,this._cleanupTmp()}$e.prototype._cleanupTmp=function(){let t=[];try{t=Vt.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{Vt.unlinkSync(ed.join(this.dir,n)),e++}catch{}}return e};$e.prototype.setMax=function(t){let e=Number(t);return isFinite(e)&&e>=1&&(this.max=Math.floor(e)),this.max};$e.prototype.fileOf=function(t){return ed.join(this.dir,String(t)+".json")};$e.prototype.indexPath=function(){return ed.join(this.dir,"index.json")};$e.prototype._ensureDir=function(){Vt.mkdirSync(this.dir,{recursive:!0,mode:448})};$e.prototype._write=function(t,e){this._ensureDir();let n=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(Vt.writeFileSync(n,e,{mode:384}),Vt.existsSync(t))try{Vt.copyFileSync(t,t+".bak")}catch{}Vt.renameSync(n,t)};$e.prototype._writeAsync=async function(t,e,n){await wo.mkdir(this.dir,{recursive:!0,mode:448});let s=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(await wo.writeFile(s,e,{mode:384}),typeof n=="function"&&!n()){try{await wo.unlink(s)}catch{}return!1}try{await wo.access(t);try{await wo.copyFile(t,t+".bak")}catch{}}catch{}return await wo.rename(s,t),!0};$e.prototype._mtimeOf=function(t){try{return Vt.statSync(t).mtimeMs}catch{return 0}};$e.prototype._ids=function(){let t=[];try{t=Vt.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};$e.prototype.rebuildIndex=function(){let t=[];for(let n of this._ids()){let s=this.load(n);s&&t.push(nd(s))}t.sort(function(n,s){return String(s.updatedAt).localeCompare(String(n.updatedAt))});let e=JSON.stringify({v:1,sessions:t})+`
46
46
  `;try{this._write(this.indexPath(),e),this._listJson=e,this._listMtime=this._mtimeOf(this.indexPath())}catch{}return this._listCache=t,t};$e.prototype.readIndex=function(){if(this._listCache&&this._mtimeOf(this.indexPath())===this._listMtime)return this._listCache;let t=null;try{let e=Vt.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()};$e.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})+`
47
47
  `;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};$e.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||""))})};$e.prototype.create=function(t){let e=new Date;return{v:1,id:td(e),title:"",createdAt:e.toISOString(),updatedAt:e.toISOString(),root:String(t??""),modelKey:"",mode:"",items:[]}};$e.prototype.load=function(t){if(!/^[A-Za-z0-9_-]+$/.test(String(t||"")))return null;let e=null;try{e=JSON.parse(Vt.readFileSync(this.fileOf(t),"utf8"))}catch{e=null}if(!e)try{e=JSON.parse(Vt.readFileSync(this.fileOf(t)+".bak","utf8"))}catch{e=null}return!e||!e.id?null:(Array.isArray(e.items)||(e.items=[]),e.title||(e.title=Mi(e.items,e.createdAt)),e)};$e.prototype._dropFiles=function(t){let e=this.fileOf(t);for(let n of[e,e+".bak",e+".tmp"])try{Vt.existsSync(n)&&Vt.unlinkSync(n)}catch{}};$e.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};$e.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=Mi(t.items,t.createdAt)),t.updatedAt=new Date().toISOString()};$e.prototype._updateList=function(t){let e=nd(t),n=this.readIndex().filter(function(s){return s.id!==t.id});return n.push(e),this._listCache=this._prune(n),e};$e.prototype.save=function(t){this._prepare(t);let e=JSON.stringify(t)+`
48
48
  `;return t.bytes=e.length,this._syncGen++,this._write(this.fileOf(t.id),e),this._updateList(t),this.writeIndex(this._listCache),t};$e.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)+`
@@ -51,23 +51,23 @@ data: `+JSON.stringify(l)+`
51
51
  #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(Ci(" Foo bar foo "))===JSON.stringify(["foo","bar"])),n("terms.empty",Ci(" ").length===0),n("terms.cap",Ci("a b c d e f g h",3).length===3);let i=cn(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",cn(r,"\u80FD\u8017\u62A5\u544A\u5206\u6790",{load:o}).results.length===0);let a=cn(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=cn(r,"read_file",{load:o});n("body.toolName",l.results.length===1&&l.results[0].id==="a"&&l.results[0].count===1);let c=cn(r,"#selection",{load:o});n("body.ctx",c.results.length===1&&c.results[0].id==="a");let u=cn(r,"\u53D8\u9891\u6CF5 ETIMEDOUT",{load:o});n("and.crossSessionMiss",u.results.length===0,JSON.stringify(u.results));let d=cn(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",cn(r,"\u4E0D\u5B58\u5728\u7684\u8BCD",{load:o}).results.length===0),n("emptyQuery",cn(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=cn(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 m=[{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 h=cn(m,"k",{load:o});n("rank.countDesc",h.results[0].id==="y"&&h.results[1].id==="x",JSON.stringify(h.results.map(function(g){return g.id})));let y=cn(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 k=Al("x".repeat(300)+`
52
52
  \u5173\u952E\u8BCD
53
53
  `+"y".repeat(300),"\u5173\u952E\u8BCD",60);n("snippet.ellipsis",k.indexOf("\u2026")===0&&k.slice(-1)==="\u2026",k),n("snippet.flat",k.indexOf(`
54
- `)<0),n("snippet.hasTerm",k.indexOf("\u5173\u952E\u8BCD")>=0),n("snippet.shortText",Al("\u77ED\u6587\u672C","\u77ED",60)==="\u77ED\u6587\u672C");let T=od({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 ud=Q((kL,Bg)=>{var Ol={enabled:!0,maxTurns:8,maxChars:12e3,maxItemChars:6e3},ad="\u2026[\u5DF2\u622A\u65AD]",Ig=2e4,Dg=2e3,CC=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,AC={"image/png":1,"image/jpeg":1,"image/webp":1,"image/gif":1};function OC(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file),n=String(t.mime==null?"":t.mime);if(!CC.test(e)||e.length>120||!AC[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0?null:{file:e,mime:n,bytes:s}}function EC(t,e){let n=[];for(let s of Array.isArray(t)?t:[]){let r=OC(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 cd(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+=Dg));return e}return String(t??"").length}function Hs(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=ad.length?n.slice(0,e):n.slice(0,e-ad.length)+ad:""}function ld(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function PC(t){let e=t||{};return{enabled:e.enabled!==!1,maxTurns:ld(e.maxTurns,Ol.maxTurns),maxChars:ld(e.maxChars,Ol.maxChars),maxItemChars:ld(e.maxItemChars,Ol.maxItemChars),dropTailAssistant:!!e.dropTailAssistant,resolveImage:typeof e.resolveImage=="function"?e.resolveImage:function(){return""},spill:e.spill&&typeof e.spill=="object"?e.spill:null}}function Fg(t){return!t||!t.t?"":t.t==="user"?"user":t.narr?"":t.t==="text"||t.t==="plan"?"assistant":""}function Lg(t){let e=0;for(let n of t||[])e+=cd(n&&n.content);return e}function jC(t){return t?t.ctx!=null&&t.ctx!==""?t.ctx:t.text:""}function Rg(t,e,n){let s=typeof n=="function"?n:function(){return""},r=[];for(let o of t||[]){let i=Fg(o);if(!i)continue;let a=o.ctx!=null&&o.ctx!=="",l=a?Math.max(e,Ig):e,c=Hs(a?o.ctx:o.text,l).trim(),u=i==="user"?EC(o.images,s):[],d=i==="user"?Math.max(e,Ig):e;if(u.length){let p=r[r.length-1];p&&p.role===i&&typeof p.content=="string"?p.content=[{type:"text",text:Hs(p.content+`
54
+ `)<0),n("snippet.hasTerm",k.indexOf("\u5173\u952E\u8BCD")>=0),n("snippet.shortText",Al("\u77ED\u6587\u672C","\u77ED",60)==="\u77ED\u6587\u672C");let T=od({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 ud=Q((kL,Bg)=>{var Ol={enabled:!0,maxTurns:8,maxChars:12e3,maxItemChars:6e3},ad="\u2026[\u5DF2\u622A\u65AD]",Ig=2e4,Dg=2e3,CC=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,AC={"image/png":1,"image/jpeg":1,"image/webp":1,"image/gif":1};function OC(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file),n=String(t.mime==null?"":t.mime);if(!CC.test(e)||e.length>120||!AC[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0?null:{file:e,mime:n,bytes:s}}function EC(t,e){let n=[];for(let s of Array.isArray(t)?t:[]){let r=OC(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 cd(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+=Dg));return e}return String(t??"").length}function zs(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=ad.length?n.slice(0,e):n.slice(0,e-ad.length)+ad:""}function ld(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function PC(t){let e=t||{};return{enabled:e.enabled!==!1,maxTurns:ld(e.maxTurns,Ol.maxTurns),maxChars:ld(e.maxChars,Ol.maxChars),maxItemChars:ld(e.maxItemChars,Ol.maxItemChars),dropTailAssistant:!!e.dropTailAssistant,resolveImage:typeof e.resolveImage=="function"?e.resolveImage:function(){return""},spill:e.spill&&typeof e.spill=="object"?e.spill:null}}function Fg(t){return!t||!t.t?"":t.t==="user"?"user":t.narr?"":t.t==="text"||t.t==="plan"?"assistant":""}function Lg(t){let e=0;for(let n of t||[])e+=cd(n&&n.content);return e}function jC(t){return t?t.ctx!=null&&t.ctx!==""?t.ctx:t.text:""}function Rg(t,e,n){let s=typeof n=="function"?n:function(){return""},r=[];for(let o of t||[]){let i=Fg(o);if(!i)continue;let a=o.ctx!=null&&o.ctx!=="",l=a?Math.max(e,Ig):e,c=zs(a?o.ctx:o.text,l).trim(),u=i==="user"?EC(o.images,s):[],d=i==="user"?Math.max(e,Ig):e;if(u.length){let p=r[r.length-1];p&&p.role===i&&typeof p.content=="string"?p.content=[{type:"text",text:zs(p.content+`
55
55
 
56
- `+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 m of f.content)if(m&&typeof m=="object"&&m.type==="text"){p=m;break}p?p.text=Hs(p.text+`
56
+ `+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 m of f.content)if(m&&typeof m=="object"&&m.type==="text"){p=m;break}p?p.text=zs(p.text+`
57
57
 
58
- `+c,d):f.content.unshift({type:"text",text:Hs(c,d)})}else f.content=Hs(f.content+`
58
+ `+c,d):f.content.unshift({type:"text",text:zs(c,d)})}else f.content=zs(f.content+`
59
59
 
60
- `+c,d);else r.push({role:i,content:c})}return r}function qg(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 NC(t,e,n){let s=Lg(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(cd(a.content)*r);if(l<=0){i++;continue}if(Array.isArray(a.content)){let u="",d=0;for(let m of a.content)!m||typeof m!="object"||(m.type==="text"?u+=String(m.text==null?"":m.text):m.type==="image_url"&&(d+=Dg));if(l<=d){i++;continue}let f=[],p=Hs(u,l-d);p&&f.push({type:"text",text:p});for(let m of a.content)m&&typeof m=="object"&&m.type==="image_url"&&f.push(m);t.push({role:a.role,content:f}),o+=cd(f);continue}let c=Hs(a.content,l);t.push({role:a.role,content:c}),o+=c.length}return{chars:o,dropped:i}}function IC(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 DC(t,e){let n=PC(e),s={messages:[],turns:0,chars:0,dropped:0,enabled:n.enabled,spilledTurns:0,spillDigest:"",spillIds:[]};if(!n.enabled)return s;let r=Rg(t,n.maxItemChars,n.resolveImage);if(n.dropTailAssistant)for(;r.length&&r[r.length-1].role==="assistant";)r.pop();let o=qg(r);if(!o.length)return s;let i=[],a=0,l=0,c=0;for(let h=o.length-1;h>=0;h--){if(i.length>=n.maxTurns){c=h+1;break}let y=o[h],k=Lg(y);if(!(i.length===0)&&a+k>n.maxChars){c=h+1;break}let g=[],v=NC(g,y,n.maxChars-a);a+=v.chars,l+=v.dropped,i.push(g),c=h}let u=[];for(let h=i.length-1;h>=0;h--)for(let y of i[h])u.push(y);let d=[],f=[],p=n.spill&&typeof n.spill=="object"?n.spill:null;for(let h=0;h<c;h++){let y=IC(o[h]);for(let k of y)d.push(k);if(p&&typeof p.put=="function"&&o[h]&&o[h].length)try{let k=typeof p.newId=="function"?p.newId():"sp_mem_"+h,T=o[h].map(function(g){let v=g.role||"",w=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+": "+w}).join(`
60
+ `+c,d);else r.push({role:i,content:c})}return r}function qg(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 NC(t,e,n){let s=Lg(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(cd(a.content)*r);if(l<=0){i++;continue}if(Array.isArray(a.content)){let u="",d=0;for(let m of a.content)!m||typeof m!="object"||(m.type==="text"?u+=String(m.text==null?"":m.text):m.type==="image_url"&&(d+=Dg));if(l<=d){i++;continue}let f=[],p=zs(u,l-d);p&&f.push({type:"text",text:p});for(let m of a.content)m&&typeof m=="object"&&m.type==="image_url"&&f.push(m);t.push({role:a.role,content:f}),o+=cd(f);continue}let c=zs(a.content,l);t.push({role:a.role,content:c}),o+=c.length}return{chars:o,dropped:i}}function IC(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 DC(t,e){let n=PC(e),s={messages:[],turns:0,chars:0,dropped:0,enabled:n.enabled,spilledTurns:0,spillDigest:"",spillIds:[]};if(!n.enabled)return s;let r=Rg(t,n.maxItemChars,n.resolveImage);if(n.dropTailAssistant)for(;r.length&&r[r.length-1].role==="assistant";)r.pop();let o=qg(r);if(!o.length)return s;let i=[],a=0,l=0,c=0;for(let h=o.length-1;h>=0;h--){if(i.length>=n.maxTurns){c=h+1;break}let y=o[h],k=Lg(y);if(!(i.length===0)&&a+k>n.maxChars){c=h+1;break}let g=[],v=NC(g,y,n.maxChars-a);a+=v.chars,l+=v.dropped,i.push(g),c=h}let u=[];for(let h=i.length-1;h>=0;h--)for(let y of i[h])u.push(y);let d=[],f=[],p=n.spill&&typeof n.spill=="object"?n.spill:null;for(let h=0;h<c;h++){let y=IC(o[h]);for(let k of y)d.push(k);if(p&&typeof p.put=="function"&&o[h]&&o[h].length)try{let k=typeof p.newId=="function"?p.newId():"sp_mem_"+h,T=o[h].map(function(g){let v=g.role||"",w=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+": "+w}).join(`
61
61
 
62
62
  `);p.put(k,T,{kind:"memory_turn",turnIndex:h}),f.push(k)}catch{}}let m="";if(d.length)if(p&&typeof p.memoryDigestBlock=="function")m=p.memoryDigestBlock(d);else{let h=["[\u66F4\u65E9\u8F6E\u6B21\u6458\u8981\uFF08\u5B8C\u6574\u5BF9\u8BDD\u5DF2\u88C1\u51FA\u4E0A\u4E0B\u6587\uFF09]"];for(let y of d){let k=y.role==="assistant"?"\u52A9\u624B":y.role==="user"?"\u7528\u6237":y.role,T=String(y.summary||"").slice(0,160);T&&h.push("- "+k+"\uFF1A"+T)}m=h.join(`
63
63
  `).slice(0,1200)}return{messages:u,turns:i.length,chars:a,dropped:l,enabled:!0,spilledTurns:c,spillDigest:m,spillIds:f}}function FC(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||"")+`
64
64
 
65
- `+n:s.push({role:"user",content:n}),s}Bg.exports={DEFAULTS:Ol,build:DC,pushUser:FC,_clipText:Hs,_roleOf:Fg,_textOf:jC,_flatten:Rg,_groupTurns:qg}});var Kg=Q((xL,Wg)=>{var fd=["<think>","<thinking>","[think]"],El=["</think>","</thinking>","[/think]"],Ug=Math.max.apply(null,fd.concat(El).map(function(t){return t.length}))-1;function dd(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 LC(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 k=String(y);for(o+=k,a+=k;a;){if(l==="think"){let w=dd(a,El);if(!w){let S=a.length-Ug;if(S<=0)return;d(a.slice(0,S)),a=a.slice(S);continue}d(a.slice(0,w.at)),a=a.slice(w.at+w.tag.length),l="answer",c=!1,s=!1;continue}if(!c){u(a),a="";return}let T=dd(a,fd),g=dd(a,El);if(!T&&!g){let w=a.length-Ug;if(w<=0)return;u(a.slice(0,w)),a=a.slice(w);continue}if(T&&(!g||T.at<=g.at)){let w=a.slice(0,T.at);w.trim()&&u(w),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 m(y){y==null||y===""||(s&&(s=!1,l="answer",c=!1,f()),d(String(y)))}function h(){f()}return{pushContent:p,pushReasoning:m,end:h,get content(){return r},get reasoning(){return i},get rawContent(){return o}}}Wg.exports={newParser:LC,OPEN_TAGS:fd,CLOSE_TAGS:El}});var gd=Q((SL,Yg)=>{var zs={ratio:.35,minRatio:.2,maxRatio:1,keepTail:8,labelMax:60,omittedArgs:'{"_omitted":true}'},pd="\u2026[\u5DF2\u622A\u65AD]",RC=2e3;function Gg(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+=RC));return e}return String(t??"").length}function qC(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=pd.length?n.slice(0,e):n.slice(0,e-pd.length)+pd:""}function Hg(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Jg(t){let e=Number(t);return!isFinite(e)||e<=0?zs.ratio:Math.min(zs.maxRatio,Math.max(zs.minRatio,e))}function md(t){if(!t||typeof t!="object")return 0;let e=Gg(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 hd(t){let e=0;for(let n of t||[])e+=md(n);return e}function BC(t){let e=Array.isArray(t)?t:[];if(!e.length)return 0;try{return String(JSON.stringify(e)).length}catch{return 0}}function UC(t,e){let n=Number(t);return!isFinite(n)||n<=0?0:Math.ceil(n*Jg(e))}function $g(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,zs.labelMax)}for(let s of Object.keys(e))if(typeof e[s]=="string"&&e[s].trim())return e[s].trim().slice(0,zs.labelMax);return""}function Pl(t){if(Array.isArray(t))return t.map(Pl);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Pl(t[n]);return e}return t}function WC(t,e){let n=e;if(typeof n=="string")try{n=JSON.parse(n)}catch{n=n}try{return String(t??"")+"|"+JSON.stringify(Pl(n??{}))}catch{return String(t??"")+"|"+String(n)}}function Xg(t){let e=String(t??"");if(!e)return!0;try{let n=JSON.parse(e);return!!(n&&n._omitted===!0)}catch{return!1}}function Vg(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:$g(o)})}}return e}function KC(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 HC(t){let e=t&&t.spill;return!e||typeof e!="object"||typeof e.put!="function"?null:e}function zg(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Hg(n.keepTail,zs.keepTail),o=hd(s),i=Math.max(0,s.length-r),a=Vg(s),l=HC(n),c=0,u=0,d=0,f=[];for(let m=0;m<s.length;m++){let h=s[m];if(!h||typeof h!="object"){f.push(h);continue}if(m>=i){f.push(h);continue}let y=Object.assign({},h);if(h.role==="tool"){let k=String(h.content==null?"":h.content);if(k&&k.indexOf("[\u5DF2\u7701\u7565\uFF1A")!==0){let T=a.get(String(h.tool_call_id||"")),g=KC(T,k.length);if(l){let v=Hg(n.summaryMax,240),w=typeof l.summarize=="function"?l.summarize(k,v):k.replace(/\s+/g," ").trim().slice(0,v),S=typeof l.newId=="function"?l.newId():"sp_"+m;try{l.put(S,k,{kind:"tool",name:T&&T.name||"",label:T&&T.label||"",tool_call_id:String(h.tool_call_id||"")}),d++}catch{}g=typeof l.toolPlaceholder=="function"?l.toolPlaceholder(T,k.length,w,S):g.slice(0,-1)+"\uFF1B\u6458\u8981\uFF1A"+w+"\uFF1B\u5B8C\u6574\u7ED3\u679C id="+S+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}y.content=g,c++}}if(Array.isArray(h.tool_calls)&&h.tool_calls.length){let k=!1;y.tool_calls=h.tool_calls.map(function(T){if(!T||!T.function)return T;let g=String(T.function.arguments==null?"":T.function.arguments);if(Xg(g))return T;k=!0;let v=Object.assign({},T.function,{arguments:zs.omittedArgs});return Object.assign({},T,{function:v})}),k&&u++}f.push(y)}let p=hd(f);return{messages:f,beforeChars:o,afterChars:p,savedChars:o-p,omittedTools:c,omittedArgs:u,spilled:d,keptTail:Math.min(r,s.length)}}Yg.exports={DEFAULTS:zs,clipText:qC,contentChars:Gg,charsOfMessage:md,charsOf:hd,charsOfTools:BC,estimateTokens:UC,ratioOf:Jg,labelOf:$g,canonical:Pl,fingerprint:WC,compact:zg,_charsOfMessage:md,_compact:zg,_callMap:Vg,_isOmittedArgs:Xg}});var oy=Q((vL,Sd)=>{var un=gd(),bo=32768,bd=16384,kd=8192,yd="\u2026",Zg={small:{desc:96,param:32},tiny:{desc:76,param:20}},zC={small:["run_command_start","run_command_poll","run_command_stop"],tiny:["run_command_start","run_command_poll","run_command_stop"]},Pi={window:65536,tierFull:bo,tierMid:bd,tierSmall:kd,summaryReserve:240,summaryMax:220,keepRecent:2};function wd(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function jl(t,e){let n=String(t??""),s=Number(e);return!isFinite(s)||s<=0?"":n.length<=s?n:s<=yd.length?n.slice(0,s):n.slice(0,s-yd.length)+yd}function xd(t,e){let n=String(t??"").trim();if(!n)return"";let s=n.length;for(let l of["\u3002","\uFF1B",`
65
+ `+n:s.push({role:"user",content:n}),s}Bg.exports={DEFAULTS:Ol,build:DC,pushUser:FC,_clipText:zs,_roleOf:Fg,_textOf:jC,_flatten:Rg,_groupTurns:qg}});var Kg=Q((xL,Wg)=>{var fd=["<think>","<thinking>","[think]"],El=["</think>","</thinking>","[/think]"],Ug=Math.max.apply(null,fd.concat(El).map(function(t){return t.length}))-1;function dd(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 LC(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 k=String(y);for(o+=k,a+=k;a;){if(l==="think"){let w=dd(a,El);if(!w){let S=a.length-Ug;if(S<=0)return;d(a.slice(0,S)),a=a.slice(S);continue}d(a.slice(0,w.at)),a=a.slice(w.at+w.tag.length),l="answer",c=!1,s=!1;continue}if(!c){u(a),a="";return}let T=dd(a,fd),g=dd(a,El);if(!T&&!g){let w=a.length-Ug;if(w<=0)return;u(a.slice(0,w)),a=a.slice(w);continue}if(T&&(!g||T.at<=g.at)){let w=a.slice(0,T.at);w.trim()&&u(w),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 m(y){y==null||y===""||(s&&(s=!1,l="answer",c=!1,f()),d(String(y)))}function h(){f()}return{pushContent:p,pushReasoning:m,end:h,get content(){return r},get reasoning(){return i},get rawContent(){return o}}}Wg.exports={newParser:LC,OPEN_TAGS:fd,CLOSE_TAGS:El}});var gd=Q((SL,Yg)=>{var Gs={ratio:.35,minRatio:.2,maxRatio:1,keepTail:8,labelMax:60,omittedArgs:'{"_omitted":true}'},pd="\u2026[\u5DF2\u622A\u65AD]",RC=2e3;function Gg(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+=RC));return e}return String(t??"").length}function qC(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=pd.length?n.slice(0,e):n.slice(0,e-pd.length)+pd:""}function Hg(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Jg(t){let e=Number(t);return!isFinite(e)||e<=0?Gs.ratio:Math.min(Gs.maxRatio,Math.max(Gs.minRatio,e))}function md(t){if(!t||typeof t!="object")return 0;let e=Gg(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 hd(t){let e=0;for(let n of t||[])e+=md(n);return e}function BC(t){let e=Array.isArray(t)?t:[];if(!e.length)return 0;try{return String(JSON.stringify(e)).length}catch{return 0}}function UC(t,e){let n=Number(t);return!isFinite(n)||n<=0?0:Math.ceil(n*Jg(e))}function $g(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,Gs.labelMax)}for(let s of Object.keys(e))if(typeof e[s]=="string"&&e[s].trim())return e[s].trim().slice(0,Gs.labelMax);return""}function Pl(t){if(Array.isArray(t))return t.map(Pl);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Pl(t[n]);return e}return t}function WC(t,e){let n=e;if(typeof n=="string")try{n=JSON.parse(n)}catch{n=n}try{return String(t??"")+"|"+JSON.stringify(Pl(n??{}))}catch{return String(t??"")+"|"+String(n)}}function Xg(t){let e=String(t??"");if(!e)return!0;try{let n=JSON.parse(e);return!!(n&&n._omitted===!0)}catch{return!1}}function Vg(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:$g(o)})}}return e}function KC(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 HC(t){let e=t&&t.spill;return!e||typeof e!="object"||typeof e.put!="function"?null:e}function zg(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Hg(n.keepTail,Gs.keepTail),o=hd(s),i=Math.max(0,s.length-r),a=Vg(s),l=HC(n),c=0,u=0,d=0,f=[];for(let m=0;m<s.length;m++){let h=s[m];if(!h||typeof h!="object"){f.push(h);continue}if(m>=i){f.push(h);continue}let y=Object.assign({},h);if(h.role==="tool"){let k=String(h.content==null?"":h.content);if(k&&k.indexOf("[\u5DF2\u7701\u7565\uFF1A")!==0){let T=a.get(String(h.tool_call_id||"")),g=KC(T,k.length);if(l){let v=Hg(n.summaryMax,240),w=typeof l.summarize=="function"?l.summarize(k,v):k.replace(/\s+/g," ").trim().slice(0,v),S=typeof l.newId=="function"?l.newId():"sp_"+m;try{l.put(S,k,{kind:"tool",name:T&&T.name||"",label:T&&T.label||"",tool_call_id:String(h.tool_call_id||"")}),d++}catch{}g=typeof l.toolPlaceholder=="function"?l.toolPlaceholder(T,k.length,w,S):g.slice(0,-1)+"\uFF1B\u6458\u8981\uFF1A"+w+"\uFF1B\u5B8C\u6574\u7ED3\u679C id="+S+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}y.content=g,c++}}if(Array.isArray(h.tool_calls)&&h.tool_calls.length){let k=!1;y.tool_calls=h.tool_calls.map(function(T){if(!T||!T.function)return T;let g=String(T.function.arguments==null?"":T.function.arguments);if(Xg(g))return T;k=!0;let v=Object.assign({},T.function,{arguments:Gs.omittedArgs});return Object.assign({},T,{function:v})}),k&&u++}f.push(y)}let p=hd(f);return{messages:f,beforeChars:o,afterChars:p,savedChars:o-p,omittedTools:c,omittedArgs:u,spilled:d,keptTail:Math.min(r,s.length)}}Yg.exports={DEFAULTS:Gs,clipText:qC,contentChars:Gg,charsOfMessage:md,charsOf:hd,charsOfTools:BC,estimateTokens:UC,ratioOf:Jg,labelOf:$g,canonical:Pl,fingerprint:WC,compact:zg,_charsOfMessage:md,_compact:zg,_callMap:Vg,_isOmittedArgs:Xg}});var oy=Q((vL,Sd)=>{var un=gd(),bo=32768,bd=16384,kd=8192,yd="\u2026",Zg={small:{desc:96,param:32},tiny:{desc:76,param:20}},zC={small:["run_command_start","run_command_poll","run_command_stop"],tiny:["run_command_start","run_command_poll","run_command_stop"]},Pi={window:65536,tierFull:bo,tierMid:bd,tierSmall:kd,summaryReserve:240,summaryMax:220,keepRecent:2};function wd(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function jl(t,e){let n=String(t??""),s=Number(e);return!isFinite(s)||s<=0?"":n.length<=s?n:s<=yd.length?n.slice(0,s):n.slice(0,s-yd.length)+yd}function xd(t,e){let n=String(t??"").trim();if(!n)return"";let s=n.length;for(let l of["\u3002","\uFF1B",`
66
66
  `]){let c=n.indexOf(l);c>0&&c<s&&(s=c+(l===`
67
- `?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?jl(a,e):a}var GC={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},Qg=120;function ey(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||GC[i]?l.description=xd(a.description,e):delete l.description,o[i]=l}s.properties=o}return s}function Oi(t,e){let n=Array.isArray(t)?t:[],s=Zg[e];if(!s)return n;let r=zC[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:xd(i.description,s.desc),parameters:ey(i.parameters,a?Math.max(s.param,Qg):s.param,a)})})})}function ty(t,e){let n=isFinite(t)&&t>0?Math.floor(t):Pi.window,s=n>=bo?"full":n>=bd?"mid":n>=kd?"small":"tiny";return e==="off"?{window:n,tier:"full"}:(e==="on"&&(s==="full"||s==="mid")&&(s="small"),{window:n,tier:s})}function Gs(t,e){let s=ty(t,(e||{}).mode),r=s.window,o=s.tier;if(o==="full"||o==="mid"){let c=r>=bo?8e4:Math.max(2e3,Math.floor(r*.3)),u=r>=bo?4e4:Math.max(1500,Math.floor(c/2)),d=r>=bo?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:Zg[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 ny(t,e){return String(t??"").length+un.charsOfTools(e)}function JC(t){let e=t&&t.function||{},n={};try{n=JSON.parse(e.arguments||"{}")}catch{n={}}let s=un.labelOf(n);return String(e.name||"\u5DE5\u5177")+(s?" "+s:"")}function sy(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(JC(c));if(!l.length&&a.content){let c=String(a.content).replace(/\s+/g," ").trim();c&&n.push("\u8BF4\u660E\uFF1A"+jl(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 jl(o+" \u5DF2\u6267\u884C\uFF1A"+r.slice(0,6).join("\u3001"),e)}function ry(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 Ei(t,e,n){let s=n||{},r=Array.isArray(t)?t:[],o=Number(e),i=un.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(N){return{ok:!1,messages:r.slice(),dropped:0,savedChars:0,summary:"",chars:i,beforeChars:i,minChars:N}},c=0;for(;c<r.length&&r[c]&&r[c].role==="system";)c++;let u=r.slice(0,c),d=ry(r.slice(c));if(!d.length)return l(un.charsOf(u));let f=-1;for(let N=r.length-1;N>=c;N--)if(r[N]&&r[N].role==="user"){f=N;break}let p=-1;if(f>=0){let N=c;for(let J=0;J<d.length;J++){let be=N+d[J].length;if(f>=N&&f<be){p=J;break}N=be}}let m=wd(s.summaryReserve,Pi.summaryReserve),h=wd(s.keepRecent,Pi.keepRecent),y=un.charsOf(u),k=p>=0?un.charsOf(d[p]):0,T=y+k,g=function(N){let J=d.length,be=0;for(let H=d.length-1;H>=0;H--){if(d[H].some(function(_e){return _e&&_e.role==="assistant"&&Array.isArray(_e.tool_calls)&&_e.tool_calls.length>0})){if(be>=N)break;be++}J=H}for(;J>0&&J<d.length&&d[J][0]&&d[J][0].role==="tool";)J--;let se={};for(let H=J;H<d.length;H++)se[H]=!0;p>=0&&(se[p]=!0);let Z=[];for(let H=0;H<d.length;H++)se[H]||Z.push({index:H,chars:un.charsOf(d[H])});let ge=y+k;for(let H=J;H<d.length;H++)H!==p&&(ge+=un.charsOf(d[H]));return{keepFrom:J,droppable:Z,fixed:ge}},v=null;for(let N=h;N>=0;N--){let J=g(N);if(J.fixed+(J.droppable.length?m:0)<=o){v=J;break}}if(!v)return l(T);let w=v.droppable,S=v.fixed;if(!w.length)return l(S);let _=0;for(let N of w)_+=N.chars;let C=0;for(;C<w.length&&S+_+m>o;)_-=w[C].chars,C++;if(S+_+m>o)return l(S+_);let A={};for(let N=0;N<C;N++)A[w[N].index]=!0;let F=[],K=[];for(let N=0;N<d.length;N++)A[N]?F.push(d[N]):K.push(d[N]);let W=sy(F,wd(s.summaryMax,Pi.summaryMax)),B=u.slice();W&&B.push({role:"assistant",content:W});for(let N of K)for(let J of N)B.push(J);let pe=un.charsOf(B);return{ok:pe<=o,messages:B,dropped:C,savedChars:i-pe,summary:W,chars:pe,beforeChars:i,minChars:S}}Sd.exports={DEFAULTS:Pi,TIERS:{full:bo,mid:bd,small:kd},profile:Gs,tierOf:ty,compactTools:Oi,fixedChars:ny,squeeze:Ei,_firstSentence:xd,_compactParams:ey,_groupForSqueeze:ry,_summaryOf:sy,_clip:jl};if(require.main===Sd){let t=0,e=[],n=function(_,C,A){if(C){t++;return}e.push(_+(A?" \u2192 "+A:""))};n("tier.4096",Gs(4096).tier==="tiny"),n("tier.8192",Gs(8192).tier==="small"),n("tier.16384",Gs(16384).tier==="mid"),n("tier.32768",Gs(32768).tier==="full"),n("tier.on",Gs(65536,{mode:"on"}).tier==="small"),n("tier.off",Gs(4096,{mode:"off"}).tier==="full");let s=[4096,8192,12288,16384,32768,65536],r=s.map(function(_){return Gs(_)}),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=un.charsOfTools(i),l=un.charsOfTools(Oi(i,"small")),c=un.charsOfTools(Oi(i,"tiny"));n("compact.smallShrinks",l<a*.8,l+" / "+a),n("compact.tinyShrinks",c<=l);let u=Oi(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=Oi([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<=Qg),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 m={role:"user",content:"\u6700\u540E\u7684\u95EE\u9898"};p.push(m);let h=un.charsOf(p),y=Ei(p,4e3),k=[];for(let _ of y.messages)for(let C of _.tool_calls||[])k.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",k.length===T.length&&k.every(function(_){return T.indexOf(_)>=0})),n("squeeze.keepsSystem",y.messages[0]===p[0]),n("squeeze.keepsLastUser",y.messages[y.messages.length-1]===m),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",Ei(p,h+10).dropped===0),n("squeeze.tinyCapFails",Ei(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=Ei(g,4e3,{keepRecent:2}),w=[];for(let _ of v.messages)for(let C of _.tool_calls||[])w.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",w.length===S.length&&w.every(function(_){return S.indexOf(_)>=0})),n("squeeze.soloKeepsUser",v.messages.some(function(_){return _===g[1]})),n("squeeze.soloKeepsRecent",w.indexOf("solo_19")>=0&&w.indexOf("solo_0")<0),n("squeeze.soloSummary",v.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("fixedChars",ny("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 cy=Q((_L,ly)=>{var Js={summaryMax:240,digestItemMax:160,digestMax:1200,maxEntries:64,maxTotalChars:4e5,readMax:8e3,idPrefix:"sp_"},vd="\u2026[\u5DF2\u622A\u65AD]";function ji(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function Nl(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=vd.length?n.slice(0,e):n.slice(0,e-vd.length)+vd:""}function iy(t,e){let n=ji(e,Js.summaryMax),s=String(t??"").replace(/\s+/g," ").trim();return Nl(s,n)}function ay(){return Js.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function $C(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 XC(t,e){let n=Array.isArray(t)?t:[];if(!n.length)return"";let s=ji(e,Js.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=iy(o.summary||o.text||"",Js.digestItemMax);a&&r.push("- "+i+"\uFF1A"+a)}return r.length<=1?"":Nl(r.join(`
68
- `),s)}function VC(t){let e=t||{},n=ji(e.maxEntries,Js.maxEntries),s=ji(e.maxTotalChars,Js.maxTotalChars),r=new Map,o=0;function i(){let p=r.keys().next();if(p.done)return;let m=p.value,h=r.get(m);r.delete(m),h&&(o=Math.max(0,o-(h.chars||0)))}function a(p,m,h){let y=String(p??"").trim()||ay(),k=String(m??""),T=k.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:k,chars:T,at:Date.now(),meta:h&&typeof h=="object"?h:{}};return r.set(y,g),o+=T,g}function l(p){let m=String(p??"").trim();return!m||!r.has(m)?null:r.get(m)}function c(p,m){let h=l(p);if(!h)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=ji(m,Js.readMax),k=Nl(h.content,y),T=h.content.length>k.length;return{ok:!0,id:h.id,chars:h.chars,truncated:T,meta:h.meta,content:k}}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}}ly.exports={DEFAULTS:Js,summarize:iy,newId:ay,toolPlaceholder:$C,memoryDigestBlock:XC,createStore:VC,clipText:Nl}});var py=Q((TL,fy)=>{var{spawn:_d,execFile:YC}=require("child_process"),yt={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 ZC(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Td(t,e,n){let s=Number(t);return isFinite(s)?Math.min(n,Math.max(e,Math.floor(s))):e}function dy(){return yt.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function $s(t){return String(t??"").trim()||"_anon"}function Il(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>yt.ringMaxBytes&&t.chunks.length>1;){let s=t.chunks.shift();t.ringBytes-=s.length}if(t.ringBytes>yt.ringMaxBytes&&t.chunks.length===1){let s=t.chunks[0];t.chunks[0]=s.slice(s.length-yt.ringMaxBytes),t.ringBytes=t.chunks[0].length}}}function QC(t,e){let n=Td(e,1,yt.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 uy(t,e){if(!t||t.killed)return;let n=t.pid;if(!n){try{t.kill("SIGTERM")}catch{}return}if(process.platform==="win32"){try{YC("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=ZC(e.maxRunning,yt.maxRunning)||yt.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(w){let S=$s(w),_=o.get(S);return _||(_=new Map,o.set(S,_)),_}function a(w){let S=o.get($s(w));if(!S)return 0;let _=0;return S.forEach(function(C){C&&C.status==="running"&&_++}),_}function l(w,S){let _=String(S??"").trim();if(!_)return null;let C=o.get($s(w));return C&&C.get(_)||null}function c(w){let S=i(w),_=Date.now(),C=[];if(S.forEach(function(A,F){!A||A.status==="running"||(_-(A.endedAt||A.startedAt||0)>yt.keepDoneMs?S.delete(F):C.push(A))}),C.length>yt.keepDoneMax){C.sort(function(A,F){return(A.endedAt||0)-(F.endedAt||0)});for(let A=0;A<C.length-yt.keepDoneMax;A++)S.delete(C[A].id)}S.size===0&&o.delete($s(w))}function u(w,S,_){if(!w||w.status!=="running")return;w.status=S,w.code=typeof _=="number"?_:S==="exited"?0:-1,w.endedAt=Date.now(),w.timer&&(clearTimeout(w.timer),w.timer=null);let C=w.waiters||[];w.waiters=[];for(let A=0;A<C.length;A++)try{C[A]()}catch{}c(w.sessionId)}function d(w,S){if(!w)return{status:"missing",out_tail:"",elapsed_ms:0};let _=Date.now(),C=Math.max(0,_-(w.startedAt||_)),A=w.status==="running"&&w.deadline?Math.max(0,w.deadline-_):void 0,F={status:w.status,job_id:w.id,code:w.status==="running"?void 0:w.code,out_tail:QC(w,S??yt.tailCharsDefault),elapsed_ms:C,command:w.command};return A!=null&&(F.remaining_ms=A),F}function f(w,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(w)>=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=Td(A.timeout_ms==null?yt.timeoutMsDefault:A.timeout_ms,yt.timeoutMsMin,yt.timeoutMsMax),K=String(A.cwd||A.root||process.cwd()),W=dy(),B=Date.now(),pe=B+F,N={id:W,sessionId:$s(w),command:C,status:"running",code:void 0,startedAt:B,endedAt:0,deadline:pe,chunks:[],ringBytes:0,waiters:[],proc:null,timer:null,pid:0},J;try{let se=/bash(\.exe)?$/i.test(String(s));process.platform==="win32"&&!se?J=_d(s,["/d","/s","/c",C],{cwd:K,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):process.platform==="win32"&&se?J=_d(s,["-lc",C],{cwd:K,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):J=_d(s,["-lc",C],{cwd:K,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),detached:!0,stdio:["ignore","pipe","pipe"]})}catch(se){return{ok:!1,error:"spawn \u5931\u8D25\uFF1A"+(se&&se.message?se.message:String(se))}}N.proc=J,N.pid=J.pid||0,i(w).set(W,N);let be=function(se){Il(N,se)};return J.stdout&&J.stdout.on("data",be),J.stderr&&J.stderr.on("data",function(se){Il(N,`
67
+ `?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?jl(a,e):a}var GC={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},Qg=120;function ey(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||GC[i]?l.description=xd(a.description,e):delete l.description,o[i]=l}s.properties=o}return s}function Oi(t,e){let n=Array.isArray(t)?t:[],s=Zg[e];if(!s)return n;let r=zC[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:xd(i.description,s.desc),parameters:ey(i.parameters,a?Math.max(s.param,Qg):s.param,a)})})})}function ty(t,e){let n=isFinite(t)&&t>0?Math.floor(t):Pi.window,s=n>=bo?"full":n>=bd?"mid":n>=kd?"small":"tiny";return e==="off"?{window:n,tier:"full"}:(e==="on"&&(s==="full"||s==="mid")&&(s="small"),{window:n,tier:s})}function Js(t,e){let s=ty(t,(e||{}).mode),r=s.window,o=s.tier;if(o==="full"||o==="mid"){let c=r>=bo?8e4:Math.max(2e3,Math.floor(r*.3)),u=r>=bo?4e4:Math.max(1500,Math.floor(c/2)),d=r>=bo?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:Zg[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 ny(t,e){return String(t??"").length+un.charsOfTools(e)}function JC(t){let e=t&&t.function||{},n={};try{n=JSON.parse(e.arguments||"{}")}catch{n={}}let s=un.labelOf(n);return String(e.name||"\u5DE5\u5177")+(s?" "+s:"")}function sy(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(JC(c));if(!l.length&&a.content){let c=String(a.content).replace(/\s+/g," ").trim();c&&n.push("\u8BF4\u660E\uFF1A"+jl(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 jl(o+" \u5DF2\u6267\u884C\uFF1A"+r.slice(0,6).join("\u3001"),e)}function ry(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 Ei(t,e,n){let s=n||{},r=Array.isArray(t)?t:[],o=Number(e),i=un.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(N){return{ok:!1,messages:r.slice(),dropped:0,savedChars:0,summary:"",chars:i,beforeChars:i,minChars:N}},c=0;for(;c<r.length&&r[c]&&r[c].role==="system";)c++;let u=r.slice(0,c),d=ry(r.slice(c));if(!d.length)return l(un.charsOf(u));let f=-1;for(let N=r.length-1;N>=c;N--)if(r[N]&&r[N].role==="user"){f=N;break}let p=-1;if(f>=0){let N=c;for(let J=0;J<d.length;J++){let be=N+d[J].length;if(f>=N&&f<be){p=J;break}N=be}}let m=wd(s.summaryReserve,Pi.summaryReserve),h=wd(s.keepRecent,Pi.keepRecent),y=un.charsOf(u),k=p>=0?un.charsOf(d[p]):0,T=y+k,g=function(N){let J=d.length,be=0;for(let H=d.length-1;H>=0;H--){if(d[H].some(function(_e){return _e&&_e.role==="assistant"&&Array.isArray(_e.tool_calls)&&_e.tool_calls.length>0})){if(be>=N)break;be++}J=H}for(;J>0&&J<d.length&&d[J][0]&&d[J][0].role==="tool";)J--;let se={};for(let H=J;H<d.length;H++)se[H]=!0;p>=0&&(se[p]=!0);let Z=[];for(let H=0;H<d.length;H++)se[H]||Z.push({index:H,chars:un.charsOf(d[H])});let ge=y+k;for(let H=J;H<d.length;H++)H!==p&&(ge+=un.charsOf(d[H]));return{keepFrom:J,droppable:Z,fixed:ge}},v=null;for(let N=h;N>=0;N--){let J=g(N);if(J.fixed+(J.droppable.length?m:0)<=o){v=J;break}}if(!v)return l(T);let w=v.droppable,S=v.fixed;if(!w.length)return l(S);let _=0;for(let N of w)_+=N.chars;let C=0;for(;C<w.length&&S+_+m>o;)_-=w[C].chars,C++;if(S+_+m>o)return l(S+_);let A={};for(let N=0;N<C;N++)A[w[N].index]=!0;let F=[],K=[];for(let N=0;N<d.length;N++)A[N]?F.push(d[N]):K.push(d[N]);let W=sy(F,wd(s.summaryMax,Pi.summaryMax)),B=u.slice();W&&B.push({role:"assistant",content:W});for(let N of K)for(let J of N)B.push(J);let pe=un.charsOf(B);return{ok:pe<=o,messages:B,dropped:C,savedChars:i-pe,summary:W,chars:pe,beforeChars:i,minChars:S}}Sd.exports={DEFAULTS:Pi,TIERS:{full:bo,mid:bd,small:kd},profile:Js,tierOf:ty,compactTools:Oi,fixedChars:ny,squeeze:Ei,_firstSentence:xd,_compactParams:ey,_groupForSqueeze:ry,_summaryOf:sy,_clip:jl};if(require.main===Sd){let t=0,e=[],n=function(_,C,A){if(C){t++;return}e.push(_+(A?" \u2192 "+A:""))};n("tier.4096",Js(4096).tier==="tiny"),n("tier.8192",Js(8192).tier==="small"),n("tier.16384",Js(16384).tier==="mid"),n("tier.32768",Js(32768).tier==="full"),n("tier.on",Js(65536,{mode:"on"}).tier==="small"),n("tier.off",Js(4096,{mode:"off"}).tier==="full");let s=[4096,8192,12288,16384,32768,65536],r=s.map(function(_){return Js(_)}),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=un.charsOfTools(i),l=un.charsOfTools(Oi(i,"small")),c=un.charsOfTools(Oi(i,"tiny"));n("compact.smallShrinks",l<a*.8,l+" / "+a),n("compact.tinyShrinks",c<=l);let u=Oi(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=Oi([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<=Qg),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 m={role:"user",content:"\u6700\u540E\u7684\u95EE\u9898"};p.push(m);let h=un.charsOf(p),y=Ei(p,4e3),k=[];for(let _ of y.messages)for(let C of _.tool_calls||[])k.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",k.length===T.length&&k.every(function(_){return T.indexOf(_)>=0})),n("squeeze.keepsSystem",y.messages[0]===p[0]),n("squeeze.keepsLastUser",y.messages[y.messages.length-1]===m),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",Ei(p,h+10).dropped===0),n("squeeze.tinyCapFails",Ei(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=Ei(g,4e3,{keepRecent:2}),w=[];for(let _ of v.messages)for(let C of _.tool_calls||[])w.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",w.length===S.length&&w.every(function(_){return S.indexOf(_)>=0})),n("squeeze.soloKeepsUser",v.messages.some(function(_){return _===g[1]})),n("squeeze.soloKeepsRecent",w.indexOf("solo_19")>=0&&w.indexOf("solo_0")<0),n("squeeze.soloSummary",v.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("fixedChars",ny("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 cy=Q((_L,ly)=>{var $s={summaryMax:240,digestItemMax:160,digestMax:1200,maxEntries:64,maxTotalChars:4e5,readMax:8e3,idPrefix:"sp_"},vd="\u2026[\u5DF2\u622A\u65AD]";function ji(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function Nl(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=vd.length?n.slice(0,e):n.slice(0,e-vd.length)+vd:""}function iy(t,e){let n=ji(e,$s.summaryMax),s=String(t??"").replace(/\s+/g," ").trim();return Nl(s,n)}function ay(){return $s.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function $C(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 XC(t,e){let n=Array.isArray(t)?t:[];if(!n.length)return"";let s=ji(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=iy(o.summary||o.text||"",$s.digestItemMax);a&&r.push("- "+i+"\uFF1A"+a)}return r.length<=1?"":Nl(r.join(`
68
+ `),s)}function VC(t){let e=t||{},n=ji(e.maxEntries,$s.maxEntries),s=ji(e.maxTotalChars,$s.maxTotalChars),r=new Map,o=0;function i(){let p=r.keys().next();if(p.done)return;let m=p.value,h=r.get(m);r.delete(m),h&&(o=Math.max(0,o-(h.chars||0)))}function a(p,m,h){let y=String(p??"").trim()||ay(),k=String(m??""),T=k.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:k,chars:T,at:Date.now(),meta:h&&typeof h=="object"?h:{}};return r.set(y,g),o+=T,g}function l(p){let m=String(p??"").trim();return!m||!r.has(m)?null:r.get(m)}function c(p,m){let h=l(p);if(!h)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=ji(m,$s.readMax),k=Nl(h.content,y),T=h.content.length>k.length;return{ok:!0,id:h.id,chars:h.chars,truncated:T,meta:h.meta,content:k}}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}}ly.exports={DEFAULTS:$s,summarize:iy,newId:ay,toolPlaceholder:$C,memoryDigestBlock:XC,createStore:VC,clipText:Nl}});var py=Q((TL,fy)=>{var{spawn:_d,execFile:YC}=require("child_process"),yt={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 ZC(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Td(t,e,n){let s=Number(t);return isFinite(s)?Math.min(n,Math.max(e,Math.floor(s))):e}function dy(){return yt.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function Xs(t){return String(t??"").trim()||"_anon"}function Il(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>yt.ringMaxBytes&&t.chunks.length>1;){let s=t.chunks.shift();t.ringBytes-=s.length}if(t.ringBytes>yt.ringMaxBytes&&t.chunks.length===1){let s=t.chunks[0];t.chunks[0]=s.slice(s.length-yt.ringMaxBytes),t.ringBytes=t.chunks[0].length}}}function QC(t,e){let n=Td(e,1,yt.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 uy(t,e){if(!t||t.killed)return;let n=t.pid;if(!n){try{t.kill("SIGTERM")}catch{}return}if(process.platform==="win32"){try{YC("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=ZC(e.maxRunning,yt.maxRunning)||yt.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(w){let S=Xs(w),_=o.get(S);return _||(_=new Map,o.set(S,_)),_}function a(w){let S=o.get(Xs(w));if(!S)return 0;let _=0;return S.forEach(function(C){C&&C.status==="running"&&_++}),_}function l(w,S){let _=String(S??"").trim();if(!_)return null;let C=o.get(Xs(w));return C&&C.get(_)||null}function c(w){let S=i(w),_=Date.now(),C=[];if(S.forEach(function(A,F){!A||A.status==="running"||(_-(A.endedAt||A.startedAt||0)>yt.keepDoneMs?S.delete(F):C.push(A))}),C.length>yt.keepDoneMax){C.sort(function(A,F){return(A.endedAt||0)-(F.endedAt||0)});for(let A=0;A<C.length-yt.keepDoneMax;A++)S.delete(C[A].id)}S.size===0&&o.delete(Xs(w))}function u(w,S,_){if(!w||w.status!=="running")return;w.status=S,w.code=typeof _=="number"?_:S==="exited"?0:-1,w.endedAt=Date.now(),w.timer&&(clearTimeout(w.timer),w.timer=null);let C=w.waiters||[];w.waiters=[];for(let A=0;A<C.length;A++)try{C[A]()}catch{}c(w.sessionId)}function d(w,S){if(!w)return{status:"missing",out_tail:"",elapsed_ms:0};let _=Date.now(),C=Math.max(0,_-(w.startedAt||_)),A=w.status==="running"&&w.deadline?Math.max(0,w.deadline-_):void 0,F={status:w.status,job_id:w.id,code:w.status==="running"?void 0:w.code,out_tail:QC(w,S??yt.tailCharsDefault),elapsed_ms:C,command:w.command};return A!=null&&(F.remaining_ms=A),F}function f(w,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(w)>=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=Td(A.timeout_ms==null?yt.timeoutMsDefault:A.timeout_ms,yt.timeoutMsMin,yt.timeoutMsMax),K=String(A.cwd||A.root||process.cwd()),W=dy(),B=Date.now(),pe=B+F,N={id:W,sessionId:Xs(w),command:C,status:"running",code:void 0,startedAt:B,endedAt:0,deadline:pe,chunks:[],ringBytes:0,waiters:[],proc:null,timer:null,pid:0},J;try{let se=/bash(\.exe)?$/i.test(String(s));process.platform==="win32"&&!se?J=_d(s,["/d","/s","/c",C],{cwd:K,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):process.platform==="win32"&&se?J=_d(s,["-lc",C],{cwd:K,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):J=_d(s,["-lc",C],{cwd:K,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),detached:!0,stdio:["ignore","pipe","pipe"]})}catch(se){return{ok:!1,error:"spawn \u5931\u8D25\uFF1A"+(se&&se.message?se.message:String(se))}}N.proc=J,N.pid=J.pid||0,i(w).set(W,N);let be=function(se){Il(N,se)};return J.stdout&&J.stdout.on("data",be),J.stderr&&J.stderr.on("data",function(se){Il(N,`
69
69
  [stderr]
70
- `),Il(N,se)}),J.on("error",function(se){Il(N,String(se&&se.message?se.message:se)),u(N,"exited",1)}),J.on("close",function(se,Z){if(N.status!=="running")return;u(N,"exited",typeof se=="number"?se:Z?1:0)}),N.timer=setTimeout(function(){N.status==="running"&&(uy(N.proc,s),u(N,"timeout",-1))},F),N.timer&&typeof N.timer.unref=="function"&&N.timer.unref(),{ok:!0,job_id:W,pid:N.pid||void 0,started_at:B,timeout_ms:F}}function p(w,S,_){let C=_||{},A=l(w,S);if(!A)return Promise.resolve({ok:!0,status:"missing",job_id:String(S||""),out_tail:"",elapsed_ms:0});let F=Td(C.wait_ms==null?0:C.wait_ms,0,yt.waitMsMax),K=C.tail_chars==null?yt.tailCharsDefault:C.tail_chars;return A.status!=="running"||F<=0?Promise.resolve(Object.assign({ok:!0},d(A,K))):new Promise(function(W){let B=!1,pe=function(){if(B)return;B=!0,clearTimeout(N);let J=A.waiters.indexOf(pe);J>=0&&A.waiters.splice(J,1),W(Object.assign({ok:!0},d(A,K)))};A.waiters.push(pe);let N=setTimeout(pe,F);typeof N.unref=="function"&&N.unref()})}function m(w,S){let _=l(w,S);return _?_.status!=="running"?{ok:!0,status:"already_done",job_id:_.id,final_status:_.status,code:_.code}:(uy(_.proc,s),u(_,"stopped",-1),{ok:!0,status:"stopped",job_id:_.id}):{ok:!1,status:"missing",job_id:String(S||"")}}function h(w){let S=o.get($s(w));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=m(w,C[A]);F&&F.status==="stopped"&&_++}return{stopped:_}}function y(){let w=0,S=[];o.forEach(function(_,C){S.push(C)});for(let _=0;_<S.length;_++)w+=h(S[_]).stopped;return{stopped:w}}function k(w){let S=h(w);return o.delete($s(w)),S}function T(w){return!w||!w.ok?"ERROR: "+(w&&w.error||"start \u5931\u8D25"):`ok=true
70
+ `),Il(N,se)}),J.on("error",function(se){Il(N,String(se&&se.message?se.message:se)),u(N,"exited",1)}),J.on("close",function(se,Z){if(N.status!=="running")return;u(N,"exited",typeof se=="number"?se:Z?1:0)}),N.timer=setTimeout(function(){N.status==="running"&&(uy(N.proc,s),u(N,"timeout",-1))},F),N.timer&&typeof N.timer.unref=="function"&&N.timer.unref(),{ok:!0,job_id:W,pid:N.pid||void 0,started_at:B,timeout_ms:F}}function p(w,S,_){let C=_||{},A=l(w,S);if(!A)return Promise.resolve({ok:!0,status:"missing",job_id:String(S||""),out_tail:"",elapsed_ms:0});let F=Td(C.wait_ms==null?0:C.wait_ms,0,yt.waitMsMax),K=C.tail_chars==null?yt.tailCharsDefault:C.tail_chars;return A.status!=="running"||F<=0?Promise.resolve(Object.assign({ok:!0},d(A,K))):new Promise(function(W){let B=!1,pe=function(){if(B)return;B=!0,clearTimeout(N);let J=A.waiters.indexOf(pe);J>=0&&A.waiters.splice(J,1),W(Object.assign({ok:!0},d(A,K)))};A.waiters.push(pe);let N=setTimeout(pe,F);typeof N.unref=="function"&&N.unref()})}function m(w,S){let _=l(w,S);return _?_.status!=="running"?{ok:!0,status:"already_done",job_id:_.id,final_status:_.status,code:_.code}:(uy(_.proc,s),u(_,"stopped",-1),{ok:!0,status:"stopped",job_id:_.id}):{ok:!1,status:"missing",job_id:String(S||"")}}function h(w){let S=o.get(Xs(w));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=m(w,C[A]);F&&F.status==="stopped"&&_++}return{stopped:_}}function y(){let w=0,S=[];o.forEach(function(_,C){S.push(C)});for(let _=0;_<S.length;_++)w+=h(S[_]).stopped;return{stopped:w}}function k(w){let S=h(w);return o.delete(Xs(w)),S}function T(w){return!w||!w.ok?"ERROR: "+(w&&w.error||"start \u5931\u8D25"):`ok=true
71
71
  job_id=`+w.job_id+(w.pid?`
72
72
  pid=`+w.pid:"")+`
73
73
  started_at=`+w.started_at+`
@@ -80,14 +80,14 @@ job_id=`+(w.job_id||""):`ok=true
80
80
  status=`+w.status+`
81
81
  job_id=`+(w.job_id||"")+(w.final_status?`
82
82
  final_status=`+w.final_status:"")+(w.code!=null?`
83
- code=`+w.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:yt,maxRunning:n,start:f,poll:p,stop:m,stopAll:h,stopEverything:y,clearSession:k,runningCount:a,getJob:l,formatStartResult:T,formatPollResult:g,formatStopResult:v,_bySession:o,_snapshot:d}}fy.exports={DEFAULTS:yt,createRegistry:e1,newId:dy,sessKey:$s}});var Oy=Q((ML,Ay)=>{var Dr=require("fs"),Ed=require("os"),vt=require("path"),t1=require("crypto"),{spawn:n1}=require("child_process"),my="2025-06-18",Md=2e4,s1=6e4,r1=18e4,hy=8e3,o1=500,Dl=64,i1=4096,a1=8*1024*1024,l1=20,$={root:"",version:"0",rec:function(){},servers:new Map,exposed:new Map,configPaths:[],configErrors:[],loaded:!1,starting:null};function c1(t){let e=t||{};e.root&&($.root=String(e.root)),typeof e.rec=="function"&&($.rec=e.rec),e.version&&($.version=String(e.version))}function Rt(t,e){try{$.rec(t,e)}catch{}}function Cd(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function u1(t){return t1.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function gy(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function yy(t,e){let n="mcp__"+Cd(t)+"__"+Cd(e);if(n.length>Dl){let s="_"+u1(t+"/"+e);n=n.slice(0,Dl-s.length)+s}return n}function Ad(){$.exposed.clear();for(let t of $.servers.values())if(t.state==="ready")for(let e of t.tools){let n=yy(t.name,e.name);if($.exposed.has(n)){let s=2;for(;$.exposed.has(n+"_"+s);)s++;let r="_"+s;n=n.length+r.length>Dl?n.slice(0,Dl-r.length)+r:n+r}$.exposed.set(n,{server:t.name,tool:e.name,def:e})}}function wy(){let t=process.env.LUBAN_MCP_CONFIG;if(t)return String(t).split(vt.delimiter).map(function(n){return n.trim()}).filter(Boolean);let e=[vt.join(Ed.homedir(),".luban","mcp.json")];return $.root&&e.push(vt.join($.root,".luban","mcp.json")),e}function by(){$.servers=new Map,$.exposed.clear(),$.configErrors=[];let t=wy();$.configPaths=t;let e=new Map;for(let n of t){let s;try{s=JSON.parse(Dr.readFileSync(n,"utf8"))}catch(o){if(o.code==="ENOENT")continue;$.configErrors.push(n+"\uFF1A"+o.message),Rt("mcp_config_bad",{path:n,message:o.message});continue}let r=s&&(s.mcpServers||s.servers);if(!r||typeof r!="object"){$.configErrors.push(n+"\uFF1A\u7F3A\u5C11 mcpServers"),Rt("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"){$.configErrors.push(s+"\uFF1A\u7F3A\u5C11 command"),Rt("mcp_config_bad",{server:s,message:"\u7F3A\u5C11 command"});continue}if(r.args!==void 0&&!Array.isArray(r.args)){$.configErrors.push(s+"\uFF1Aargs \u5FC5\u987B\u662F\u6570\u7EC4"),Rt("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"}))&&($.configErrors.push(s+"\uFF1AplanAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"),Rt("mcp_config_bad",{server:s,message:"planAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"}),r.planAllow=[])}$.servers.set(s,new Od(s,r,n[1].source))}$.loaded=!0,Rt("mcp_config_loaded",{paths:t,servers:Array.from($.servers.keys()),errors:$.configErrors})}function ky(){let t=process.env.LUBAN_MCP_CONFIG;return t?String(t).split(vt.delimiter).map(function(e){return e.trim()}).filter(Boolean):null}function d1(t){let e=ky();if(e){let s=e.findIndex(function(r){return vt.resolve(r)===vt.resolve(t)});if(s===0)return"global";if(s>0)return"project"}let n=vt.join(Ed.homedir(),".luban","mcp.json");return vt.resolve(t)===vt.resolve(n)?"global":$.root&&vt.resolve(t)===vt.resolve(vt.join($.root,".luban","mcp.json"))?"project":"custom"}function xy(t){if(t!=="global"&&t!=="project")throw new Error("\u5199\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F global \u6216 project");let e=ky();if(e&&e.length){if(t==="global"&&e[0])return e[0];if(t==="project"&&e[1])return e[1]}if(t==="global")return vt.join(Ed.homedir(),".luban","mcp.json");if(!$.root)throw new Error("\u5F53\u524D\u6CA1\u6709\u5DE5\u4F5C\u533A\uFF0C\u9879\u76EE\u7EA7 mcp.json \u65E0\u5904\u5B89\u653E");return vt.join($.root,".luban","mcp.json")}function Sy(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 f1(){let t=wy(),e=[],n=[],s=new Map,r=new Map;for(let i of t){let a={path:i,scope:d1(i),exists:!1,error:"",servers:[]},l=null;try{let c=Dr.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[Sy(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=$.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 p1(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=xy(e.target),r=Dr.existsSync(s)?Dr.readFileSync(s,"utf8"):"",o;try{o=r.trim()?JSON.parse(r):{}}catch(d){throw new Error(s+" \u4E0D\u662F\u5408\u6CD5 JSON\uFF0C\u5148\u4FEE\u597D\u5B83\uFF1A"+d.message)}if(!o||typeof o!="object"||Array.isArray(o))throw new Error(s+" \u9876\u5C42\u5FC5\u987B\u662F\u5BF9\u8C61");let i=Sy(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;if(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)),u){Dr.mkdirSync(vt.dirname(s),{recursive:!0,mode:448});let d=JSON.stringify(o,null,2)+`
84
- `,f=s+".tmp-"+process.pid+"-"+Date.now();Dr.writeFileSync(f,d,"utf8"),Dr.renameSync(f,s)}return Rt("mcp_config_write",{name:n,disabled:e.disabled,target:e.target,path:s,changed:u}),{name:n,path:s,target:e.target,disabled:e.disabled,changed:u}}var Od=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?vt.resolve($.root||process.cwd(),String(e.cwd)):$.root||process.cwd(),s=Object.assign({},process.env,e.env&&typeof e.env=="object"?e.env:{});return n1(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)+`
83
+ code=`+w.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:yt,maxRunning:n,start:f,poll:p,stop:m,stopAll:h,stopEverything:y,clearSession:k,runningCount:a,getJob:l,formatStartResult:T,formatPollResult:g,formatStopResult:v,_bySession:o,_snapshot:d}}fy.exports={DEFAULTS:yt,createRegistry:e1,newId:dy,sessKey:Xs}});var Oy=Q((ML,Ay)=>{var ss=require("fs"),Ed=require("os"),vt=require("path"),t1=require("crypto"),{spawn:n1}=require("child_process"),my="2025-06-18",Md=2e4,s1=6e4,r1=18e4,hy=8e3,o1=500,Dl=64,i1=4096,a1=8*1024*1024,l1=20,$={root:"",version:"0",rec:function(){},servers:new Map,exposed:new Map,configPaths:[],configErrors:[],loaded:!1,starting:null};function c1(t){let e=t||{};e.root&&($.root=String(e.root)),typeof e.rec=="function"&&($.rec=e.rec),e.version&&($.version=String(e.version))}function Pt(t,e){try{$.rec(t,e)}catch{}}function Cd(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function u1(t){return t1.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function gy(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function yy(t,e){let n="mcp__"+Cd(t)+"__"+Cd(e);if(n.length>Dl){let s="_"+u1(t+"/"+e);n=n.slice(0,Dl-s.length)+s}return n}function Ad(){$.exposed.clear();for(let t of $.servers.values())if(t.state==="ready")for(let e of t.tools){let n=yy(t.name,e.name);if($.exposed.has(n)){let s=2;for(;$.exposed.has(n+"_"+s);)s++;let r="_"+s;n=n.length+r.length>Dl?n.slice(0,Dl-r.length)+r:n+r}$.exposed.set(n,{server:t.name,tool:e.name,def:e})}}function wy(){let t=process.env.LUBAN_MCP_CONFIG;if(t)return String(t).split(vt.delimiter).map(function(n){return n.trim()}).filter(Boolean);let e=[vt.join(Ed.homedir(),".luban","mcp.json")];return $.root&&e.push(vt.join($.root,".luban","mcp.json")),e}function by(){$.servers=new Map,$.exposed.clear(),$.configErrors=[];let t=wy();$.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;$.configErrors.push(n+"\uFF1A"+o.message),Pt("mcp_config_bad",{path:n,message:o.message});continue}let r=s&&(s.mcpServers||s.servers);if(!r||typeof r!="object"){$.configErrors.push(n+"\uFF1A\u7F3A\u5C11 mcpServers"),Pt("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"){$.configErrors.push(s+"\uFF1A\u7F3A\u5C11 command"),Pt("mcp_config_bad",{server:s,message:"\u7F3A\u5C11 command"});continue}if(r.args!==void 0&&!Array.isArray(r.args)){$.configErrors.push(s+"\uFF1Aargs \u5FC5\u987B\u662F\u6570\u7EC4"),Pt("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"}))&&($.configErrors.push(s+"\uFF1AplanAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"),Pt("mcp_config_bad",{server:s,message:"planAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"}),r.planAllow=[])}$.servers.set(s,new Od(s,r,n[1].source))}$.loaded=!0,Pt("mcp_config_loaded",{paths:t,servers:Array.from($.servers.keys()),errors:$.configErrors})}function ky(){let t=process.env.LUBAN_MCP_CONFIG;return t?String(t).split(vt.delimiter).map(function(e){return e.trim()}).filter(Boolean):null}function d1(t){let e=ky();if(e){let s=e.findIndex(function(r){return vt.resolve(r)===vt.resolve(t)});if(s===0)return"global";if(s>0)return"project"}let n=vt.join(Ed.homedir(),".luban","mcp.json");return vt.resolve(t)===vt.resolve(n)?"global":$.root&&vt.resolve(t)===vt.resolve(vt.join($.root,".luban","mcp.json"))?"project":"custom"}function xy(t){if(t!=="global"&&t!=="project")throw new Error("\u5199\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F global \u6216 project");let e=ky();if(e&&e.length){if(t==="global"&&e[0])return e[0];if(t==="project"&&e[1])return e[1]}if(t==="global")return vt.join(Ed.homedir(),".luban","mcp.json");if(!$.root)throw new Error("\u5F53\u524D\u6CA1\u6709\u5DE5\u4F5C\u533A\uFF0C\u9879\u76EE\u7EA7 mcp.json \u65E0\u5904\u5B89\u653E");return vt.join($.root,".luban","mcp.json")}function Sy(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 f1(){let t=wy(),e=[],n=[],s=new Map,r=new Map;for(let i of t){let a={path:i,scope:d1(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[Sy(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=$.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 p1(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=xy(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=Sy(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(m){Pt("mcp_config_unlink_fail",{path:s,message:m.message})}if(!d){ss.mkdirSync(vt.dirname(s),{recursive:!0,mode:448});let m=JSON.stringify(o,null,2)+`
84
+ `,h=s+".tmp-"+process.pid+"-"+Date.now();ss.writeFileSync(h,m,"utf8"),ss.renameSync(h,s)}}return Pt("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 Od=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?vt.resolve($.root||process.cwd(),String(e.cwd)):$.root||process.cwd(),s=Object.assign({},process.env,e.env&&typeof e.env=="object"?e.env:{});return n1(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)+`
85
85
  `)}onStderr(e){this.stderr=(this.stderr+String(e)).slice(-i1)}onExit(e,n){if(e!==this.gen)return;let s=this.state==="ready";this.state="failed",this.error=n+(this.stderr?`
86
- [stderr] `+this.stderr.trim():""),this.dropPending(n),this.child=null,s&&Rt("mcp_server_exit",{server:this.name,reason:n,stderr:this.stderr.slice(-600)})}onData(e){if(this.buf+=String(e),this.buf.length>a1){Rt("mcp_line_overflow",{server:this.name,bytes:this.buf.length}),this.buf="";return}let n;for(;(n=this.buf.indexOf(`
87
- `))>=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{Rt("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=[];$.root&&s.push({uri:"file://"+encodeURI($.root),name:vt.basename($.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(){Rt("mcp_tools_changed",{server:s.name,tools:s.tools.length})}).catch(function(r){Rt("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||Md,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<l1;s++){let r=await this.request("tools/list",e?{cursor:e}:{},Md),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,Ad(),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=[],Ad();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:my,capabilities:{tools:{}},clientInfo:{name:"luban",version:$.version}},Md);e.protocolVersion=r&&r.protocolVersion||my,e.write({jsonrpc:"2.0",method:"notifications/initialized",params:{}}),await e.loadTools(),e.state="ready",Rt("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),Rt("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:s1,1e3),r1),o=await this.request("tools/call",{name:e,arguments:n&&typeof n=="object"?n:{}},r);return vy(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 vy(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||"")+`]
86
+ [stderr] `+this.stderr.trim():""),this.dropPending(n),this.child=null,s&&Pt("mcp_server_exit",{server:this.name,reason:n,stderr:this.stderr.slice(-600)})}onData(e){if(this.buf+=String(e),this.buf.length>a1){Pt("mcp_line_overflow",{server:this.name,bytes:this.buf.length}),this.buf="";return}let n;for(;(n=this.buf.indexOf(`
87
+ `))>=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{Pt("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=[];$.root&&s.push({uri:"file://"+encodeURI($.root),name:vt.basename($.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(){Pt("mcp_tools_changed",{server:s.name,tools:s.tools.length})}).catch(function(r){Pt("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||Md,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<l1;s++){let r=await this.request("tools/list",e?{cursor:e}:{},Md),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,Ad(),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=[],Ad();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:my,capabilities:{tools:{}},clientInfo:{name:"luban",version:$.version}},Md);e.protocolVersion=r&&r.protocolVersion||my,e.write({jsonrpc:"2.0",method:"notifications/initialized",params:{}}),await e.loadTools(),e.state="ready",Pt("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),Pt("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:s1,1e3),r1),o=await this.request("tools/call",{name:e,arguments:n&&typeof n=="object"?n:{}},r);return vy(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 vy(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||"")+`]
88
88
  `+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(`
89
89
  `).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>hy?s.slice(0,hy)+`
90
- \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`:s}async function Pd(){if($.starting)return $.starting;$.starting=async function(){by();let t=[];for(let e of $.servers.values())t.push(e.connect().catch(function(){}));return await Promise.all(t),Ad(),Cy()}();try{return await $.starting}finally{$.starting=null}}async function m1(){if($.starting){try{await $.starting}catch{}return}$.loaded||await Pd()}async function h1(){return await _y(),Pd()}async function _y(){let t=Array.from($.servers.values());$.servers=new Map,$.exposed.clear(),$.loaded=!1,await Promise.all(t.map(function(e){return e.stop()})),Rt("mcp_stopped",{servers:t.length})}function g1(t){return $.exposed.has(String(t))}function jd(t){return $.exposed.get(String(t))||null}function y1(t){let e=t&&t.planAllow;return Array.isArray(e)?e:[]}function Ty(t,e){let n=e||{};return n.annotations&&n.annotations.readOnlyHint===!0?!0:y1(t).indexOf(n.name)>=0}function My(t){let e=jd(t);if(!e)return!1;let n=$.servers.get(e.server);if(!n)return!1;let s=n.tools.find(function(r){return r&&r.name===e.tool})||e.def;return Ty(n.conf,s)}function w1(t){let e=!!(t&&t.planOnly),n=[];for(let s of $.exposed){let r=s[0],o=s[1],i=o.def||{};if(e){let c=$.servers.get(o.server);if(!Ty(c&&c.conf,i))continue}let a=i.inputSchema&&typeof i.inputSchema=="object"?i.inputSchema:{type:"object",properties:{}},l=gy(i.description||i.title||"MCP \u5DE5\u5177 "+o.server+"/"+o.tool,o1);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 b1(){let t=[],e=[];for(let s of $.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"+gy(s.error,200));let n=[];return t.length&&n.push(["\u5DF2\u8FDE\u63A5\u7684 MCP server\uFF1A",t.join(`
90
+ \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`:s}async function Pd(){if($.starting)return $.starting;$.starting=async function(){by();let t=[];for(let e of $.servers.values())t.push(e.connect().catch(function(){}));return await Promise.all(t),Ad(),Cy()}();try{return await $.starting}finally{$.starting=null}}async function m1(){if($.starting){try{await $.starting}catch{}return}$.loaded||await Pd()}async function h1(){return await _y(),Pd()}async function _y(){let t=Array.from($.servers.values());$.servers=new Map,$.exposed.clear(),$.loaded=!1,await Promise.all(t.map(function(e){return e.stop()})),Pt("mcp_stopped",{servers:t.length})}function g1(t){return $.exposed.has(String(t))}function jd(t){return $.exposed.get(String(t))||null}function y1(t){let e=t&&t.planAllow;return Array.isArray(e)?e:[]}function Ty(t,e){let n=e||{};return n.annotations&&n.annotations.readOnlyHint===!0?!0:y1(t).indexOf(n.name)>=0}function My(t){let e=jd(t);if(!e)return!1;let n=$.servers.get(e.server);if(!n)return!1;let s=n.tools.find(function(r){return r&&r.name===e.tool})||e.def;return Ty(n.conf,s)}function w1(t){let e=!!(t&&t.planOnly),n=[];for(let s of $.exposed){let r=s[0],o=s[1],i=o.def||{};if(e){let c=$.servers.get(o.server);if(!Ty(c&&c.conf,i))continue}let a=i.inputSchema&&typeof i.inputSchema=="object"?i.inputSchema:{type:"object",properties:{}},l=gy(i.description||i.title||"MCP \u5DE5\u5177 "+o.server+"/"+o.tool,o1);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 b1(){let t=[],e=[];for(let s of $.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"+gy(s.error,200));let n=[];return t.length&&n.push(["\u5DF2\u8FDE\u63A5\u7684 MCP server\uFF1A",t.join(`
91
91
  `),"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(`
92
92
  `)),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
93
93
  `+e.join(`
@@ -95,19 +95,19 @@ code=`+w.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:yt,maxRunning
95
95
 
96
96
  `)}function k1(t,e){let n=jd(t);if(!n)return Promise.reject(new Error("\u672A\u77E5 MCP \u5DE5\u5177: "+t));let s=$.servers.get(n.server);return s?s.ensure().then(function(){if(!s.tools.some(function(r){return r&&r.name===n.tool}))throw new Error("MCP server\u300C"+n.server+"\u300D\u5DF2\u6CA1\u6709\u5DE5\u5177 "+n.tool);return s.call(n.tool,e)}):Promise.reject(new Error("MCP server \u5DF2\u5378\u8F7D: "+n.server))}function Cy(){return{root:$.root,configPaths:$.configPaths,configErrors:$.configErrors.slice(),servers:Array.from($.servers.values()).map(function(t){return{name:t.name,state:t.state,source:t.source,tools:t.tools.length,protocol:t.protocolVersion,error:t.error,stderrTail:t.stderr.slice(-600)}}),tools:Array.from($.exposed.entries()).map(function(t){return{name:t[0],server:t[1].server,tool:t[1].tool,readOnly:!!(t[1].def&&t[1].def.annotations&&t[1].def.annotations.readOnlyHint===!0),planAllowed:My(t[0])}})}}Ay.exports={configure:c1,start:Pd,ready:m1,reload:h1,stop:_y,status:Cy,hasTool:g1,findTool:jd,toolDefs:w1,planAllowed:My,promptBlock:b1,callTool:k1,configListing:f1,setDisabled:p1,configPathFor:xy,_cleanName:Cd,_exposedBase:yy,_flatten:vy,_loadServers:by}});var Ii=Q((CL,Ny)=>{"use strict";var Ni=require("fs"),Nd=require("path"),Fl=require("crypto"),x1=require("os"),Ey=new Set(["node_modules",".git",".DS_Store"]);function S1(t){return String(t??"").replace(/^~(?=$|[\\/])/,x1.homedir())}function Id(t){return Array.isArray(t)?t.map(Id):t&&typeof t=="object"?Object.fromEntries(Object.keys(t).sort().map(e=>[e,Id(t[e])])):t}function Py(t){let{signature:e,...n}=t;return JSON.stringify(Id(n))}function v1(t,e){let n=[];(function r(o,i){for(let a of Ni.readdirSync(o)){if(Ey.has(a))continue;let l=Nd.join(o,a),c=i?i+"/"+a:a,u=Ni.lstatSync(l);if(u.isSymbolicLink()){e&&e("\u8DF3\u8FC7\u7B26\u53F7\u94FE\u63A5 "+c);continue}u.isDirectory()?r(l,c):u.isFile()&&n.push(c)}})(t,""),n.sort(function(r,o){return Buffer.compare(Buffer.from(r,"utf8"),Buffer.from(o,"utf8"))});let s=Fl.createHash("sha256");for(let r of n){let o=Fl.createHash("sha256").update(Ni.readFileSync(Nd.join(t,r))).digest("hex");s.update(Buffer.from(r,"utf8")),s.update("\0"),s.update(o),s.update(`
97
97
  `)}return s.digest("hex")}function _1(t){return Fl.createPublicKey({key:Buffer.from(t,"base64"),format:"der",type:"spki"})}function T1(t,e){if(!t||!t.signature)return{ok:!1,reason:"\u672A\u7B7E\u540D"};let{algo:n,keyId:s,sig:r}=t.signature;if(n!=="ed25519")return{ok:!1,reason:"\u4E0D\u652F\u6301\u7684\u7B7E\u540D\u7B97\u6CD5 "+n};let o=e[s];if(!o)return{ok:!1,reason:"\u627E\u4E0D\u5230\u516C\u94A5 keyId="+s};try{return Fl.verify(null,Buffer.from(Py(t)),o,Buffer.from(r||"","base64"))?{ok:!0}:{ok:!1,reason:"\u7B7E\u540D\u6821\u9A8C\u5931\u8D25\uFF1A\u6761\u76EE\u5185\u5BB9\u4E0E\u7B7E\u540D\u4E0D\u7B26\uFF08\u88AB\u7BE1\u6539\u6216\u6539\u4E86\u5B57\u6BB5\u672A\u91CD\u7B7E\uFF09"}}catch(i){return{ok:!1,reason:"\u7B7E\u540D\u89E3\u6790\u5931\u8D25\uFF1A"+i.message}}}function M1(t,e){return t+"-v"+e}function jy(t){let e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(String(t));if(!e)return{};let n=e[1].split(/\r?\n/),s={};for(let r=0;r<n.length;r++){let o=n[r];if(/^\s/.test(o))continue;let i=o.indexOf(":");if(i<=0)continue;let a=o.slice(0,i).trim().toLowerCase();if(!a)continue;let l=o.slice(i+1).trim(),c=/^([|>])([-+]?)$/.exec(l);if(c){let u=[];for(let d=r+1;d<n.length;d++){let f=n[d];if(!f.trim()){u.push(""),r=d;continue}if(!/^\s/.test(f))break;u.push(f.trim()),r=d}s[a]=(c[1]==="|"?u.join(`
98
- `):u.join(" ").replace(/\s+/g," ")).trim();continue}s[a]=l}return s}var C1=2e4;function A1(t){let e=Nd.join(t,"SKILL.md");if(!Ni.existsSync(e))return{ok:!1,message:"\u5305\u91CC\u6CA1\u6709 SKILL.md"};let n;try{n=Ni.readFileSync(e,"utf8").slice(0,C1)}catch(o){return{ok:!1,message:"SKILL.md \u8BFB\u53D6\u5931\u8D25\uFF1A"+o.message}}let s=jy(n),r=String(s.name||"").trim();return r?{ok:!0,manifest:{name:r,version:String(s.version||"").trim(),description:String(s.description||"").trim(),file:e}}:{ok:!1,message:"SKILL.md \u7684 frontmatter \u6CA1\u5199 name"}}function O1(t,e){return e?e.name!==t.name?{ok:!1,message:"name \u4E0D\u4E00\u81F4\uFF1A\u7D22\u5F15 "+t.name+"\u3001\u5305\u5185 "+e.name}:e.version&&e.version!==t.version?{ok:!1,message:"version \u4E0D\u4E00\u81F4\uFF1A\u7D22\u5F15 "+t.version+"\u3001\u5305\u5185 "+e.version}:{ok:!0}:{ok:!1,message:"\u6CA1\u6709\u6280\u80FD\u6E05\u5355"}}function E1(t,e){let n=s=>JSON.stringify((s||[]).map(r=>[r.name,r.description,r.readOnly===!0,r.parameters]));return n(t)===n(e)}function P1(t,e){let n=o=>{if(!o||typeof o!="object")return null;let i=o.tokens&&typeof o.tokens=="object"?o.tokens:{},a=Object.keys(i).sort();return JSON.stringify([String(o.label||""),a.map(l=>[l,String(i[l])])])},s=n(t),r=n(e);return s===null&&r===null?!0:s===r}Ny.exports={HASH_SKIP:Ey,expandHome:S1,canonical:Py,dirHash:v1,parsePublicKey:_1,verifyEntry:T1,tagFor:M1,sameTools:E1,sameTheme:P1,parseFrontmatter:jy,readSkillManifest:A1,sameSkill:O1}});var Ud=Q((AL,$y)=>{var ko=require("fs"),Ly=require("os"),He=require("path"),Dd=300,Iy=60,j1=520,N1=80,I1=6e3,D1=1200,F1=40,L1=30,Dy=4e4,R1=8,q1=2e4,Fy=6,Ry=2e3,qy=Object.create(null);for(let t of Bs().SKIP_DIRS)qy[t]=1;var Ae={root:"",rec:function(){},skills:[],dirs:[],scannedAt:"",scannedMs:0};function B1(t){let e=t||{};e.root&&String(e.root)!==Ae.root&&(Ae.scannedMs=0),e.root&&(Ae.root=String(e.root)),typeof e.rec=="function"&&(Ae.rec=e.rec)}function Fd(t,e){try{Ae.rec(t,e)}catch{}}function Ld(t){return(t||[]).map(function(e){return e.name+""+e.description+""+e.parent+""+e.childCount+""+e.rel}).join("")}function Bd(){if(!Ae.root||Ae.scannedMs&&Date.now()-Ae.scannedMs<Ry)return;let t=Ld(Ae.skills),e;try{e=Ky(Ae.root,{quiet:!0})}catch(n){Ae.scannedMs=Date.now(),Fd("skills_rescan_failed",{message:n.message});return}Ld(e)!==t&&Fd("skills_changed",{count:e.length,top:e.filter(function(n){return!n.parent}).length})}function Di(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 U1(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function By(t){let e=t||Ae.root||process.cwd(),n=Ly.homedir();return[He.join(e,".luban","skills"),He.join(e,".claude","skills"),He.join(e,".cursor","skills"),He.join(n,".luban","skills"),He.join(n,".claude","skills"),He.join(n,".cursor","skills"),He.join(n,".cursor","skills-cursor")]}function Uy(t,e,n,s){if(e>R1||n.length>Dd*4)return;let r;try{r=ko.readdirSync(t,{withFileTypes:!0})}catch{return}let o=He.join(t,"SKILL.md");try{ko.statSync(o).isFile()&&n.push({file:o,base:s||t})}catch{}for(let i of r)i.isDirectory()&&(qy[i.name]||i.name.startsWith(".")||Uy(He.join(t,i.name),e+1,n,s||t))}var Rd=Ii().parseFrontmatter;function W1(t){let e=String(t).replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,""),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 qd(t){let e=Ae.root;if(e){let s=He.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!He.isAbsolute(s))return s.split(He.sep).join("/")}let n=Ly.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(He.sep).join("/"):t.split(He.sep).join("/")}var K1=/capability\s*[::]\s*([A-Za-z0-9_./-]+)/g,H1=/(?:<skills_base>|\$\{SKILLS_BASE\})\s*\/\s*([A-Za-z0-9_./-]+)/g;function z1(t){let e=[],n=Object.create(null);for(let s of[[K1,"capability"],[H1,"sibling"]]){let r=s[0];r.lastIndex=0;let o;for(;o=r.exec(String(t||""));){let i=o[1].replace(/\/+$/,"").replace(/\/SKILL\.md$/i,"");!i||n[s[1]+":"+i]||(n[s[1]+":"+i]=!0,e.push({ref:i,kind:s[1]}))}}return e}function G1(t,e){let n;try{n=ko.readFileSync(t,"utf8").slice(0,q1)}catch{return null}let s=He.dirname(t),r=Rd(n),o=Di(r.name)||He.basename(s);if(!o)return null;let i=U1(Di(r.description||r.trigger||r.when_to_use||"")||W1(n),D1),a=0;try{a=ko.statSync(t).size}catch{a=n.length}return{name:o,description:i,dir:s,file:t,base:e||s,refs:z1(n),parent:"",childCount:0,rel:qd(s),fileRel:qd(t),bytes:a}}function J1(t,e){let n=He.relative(e,t);return!n||n.startsWith("..")||He.isAbsolute(n)?!1:n.split(He.sep).some(function(s){return s.toLowerCase()==="capability"})}function $1(t,e,n){let s=String(n||"").replace(/\/+$/,"").replace(/\/SKILL\.md$/i,"");if(!s)return null;let r=[He.resolve(e.dir,s),He.resolve(e.dir,"capability",s),He.resolve(e.base||e.dir,s)];for(let a of r){let l=t.find(function(c){return c.dir===a});if(l&&l!==e)return l}let o=s.split("/").pop().toLowerCase(),i=t.filter(function(a){return a===e?!1:a.name.toLowerCase()===o||He.basename(a.dir).toLowerCase()===o});return i.length===1?i[0]:null}function Wy(t){let e=Object.create(null);for(let s of t)s.parent="",s.childCount=0,e[s.name.toLowerCase()]=s;for(let s of t){let r=null;for(let o of t)o===s||!J1(s.dir,o.dir)||(!r||o.dir.length>r.dir.length)&&(r=o);r&&(s.parent=r.name)}let n=Object.create(null);for(let s of t){let r=[];for(let o of s.refs){if(o.kind!=="capability")continue;let i=$1(t,s,o.ref);i&&r.indexOf(i.name)<0&&r.push(i.name)}n[s.name]=r}for(let s of t)if(!s.parent)for(let r of n[s.name]){let o=e[r.toLowerCase()];!o||o===s||o.parent||(n[o.name]||[]).indexOf(s.name)>=0||(o.parent=s.name)}for(let s of t){let r=s.parent?e[s.parent.toLowerCase()]:null;r&&r.childCount++}}function X1(t){let e=[],n=Object.create(null),s=[t.name];for(;s.length;){let r=s.shift();for(let o of Ae.skills)o.parent!==r||n[o.name.toLowerCase()]||(n[o.name.toLowerCase()]=!0,e.push(o.name),s.push(o.name))}return e}function Ky(t,e){let n=e||{};t&&(Ae.root=String(t));let s=By(Ae.root);Ae.dirs=s;let r=[],o=Object.create(null);for(let i of s){let a=[];Uy(i,0,a,i);for(let l of a){let c=G1(l.file,l.base);if(!c)continue;let u=c.name.toLowerCase();if(!o[u]&&(o[u]=!0,r.push(c),r.length>=Dd))break}if(r.length>=Dd)break}return r.sort(function(i,a){return i.name.toLowerCase()<a.name.toLowerCase()?-1:i.name.toLowerCase()>a.name.toLowerCase()?1:0}),Wy(r),Ae.skills=r,Ae.scannedAt=new Date().toISOString(),Ae.scannedMs=Date.now(),n.quiet||Fd("skills_scanned",{count:r.length,root:Ae.root,top:r.filter(function(i){return!i.parent}).length,names:r.slice(0,30).map(function(i){return i.name})}),r}function Hy(t,e){let n=String(t??"");if(!(e>0))return"";if(n.length<=e)return n;let s=n.slice(0,e),r=-1,o=/[。..;;!!??]/g,i;for(;i=o.exec(s);)i.index>=e*.5&&(r=i.index);let a=r>0?s.slice(0,r+1):s,l=/触发词\s*[::]\s*([^;;。\n]{0,160})/.exec(n);if(l&&l[1].trim()&&a.indexOf(l[1].trim())<0){let c=l[1].trim();a.length+c.length+4<=e?a+=" \u89E6\u53D1\u8BCD\uFF1A"+c:e-a.length>12&&(a+=" \u89E6\u53D1\u8BCD\uFF1A"+c.slice(0,e-a.length-5)+"\u2026")}return a.length>=n.length?n:a.length<e?a+"\u2026":a}function V1(){if(Bd(),!Ae.skills.length)return"";let t=Ae.skills.filter(function(o){return!o.parent}),e=t.slice(0,Iy),n=["\u53EF\u7528\u6280\u80FD\uFF08\u8FD9\u91CC\u53EA\u662F\u76EE\u5F55\uFF1B\u771F\u6B63\u8981\u7528\u65F6\u5148\u8C03\u7528 read_skill \u8BFB SKILL.md \u5168\u6587\uFF0C\u4E0D\u8981\u51ED\u540D\u5B57\u731C\u6B65\u9AA4\uFF09\uFF1A"],s=Math.max(N1,Math.min(j1,Math.floor(I1/(e.length||1))-F1)),r=e.length<=L1;for(let o=0;o<e.length;o++){let i=e[o],a="- "+i.name+": "+(Hy(i.description,s)||"(\u65E0\u63CF\u8FF0)");if(i.childCount>0){let l=X1(i);a+="\uFF08"+(r?"\u76EE\u5F55 "+i.rel+"\uFF1B":"")+"\u53E6\u6709 "+l.length+" \u4E2A capability \u5B50\u6280\u80FD\uFF1A"+l.slice(0,Fy).join(" / ")+(l.length>Fy?" \u7B49":"")+"\uFF0C\u7236\u6280\u80FD\u6B63\u6587\u91CC\u7684 `\u2192 capability:` \u6307\u9488\u6307\u5411\u5B83\u4EEC\uFF0C\u8BFB\u5B8C\u7236\u6280\u80FD\u518D\u6309\u9700 read_skill\uFF09"}else r&&(a+="\uFF08\u76EE\u5F55 "+i.rel+"\uFF09");n.push(a)}return t.length>e.length&&n.push("- \u53E6\u6709 "+(t.length-e.length)+" \u4E2A\u9876\u5C42\u6280\u80FD\u672A\u5217\u51FA\uFF08\u8D85\u8FC7 "+Iy+" \u4E2A\u4E0A\u9650\uFF0C\u7528 op skills \u770B\u5168\u91CF\uFF09"),n.push("\u6280\u80FD\u6B63\u6587\u91CC\u7684\u8DEF\u5F84\u5360\u4F4D\u7B26\uFF08SKILL_DIR / SKILLS_BASE\uFF09\u5DF2\u66FF\u6362\u6210\u672C\u673A\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u53EF\u76F4\u63A5\u7528\u4E8E read_file / run_command\u3002"),n.join(`
98
+ `):u.join(" ").replace(/\s+/g," ")).trim();continue}s[a]=l}return s}var C1=2e4;function A1(t){let e=Nd.join(t,"SKILL.md");if(!Ni.existsSync(e))return{ok:!1,message:"\u5305\u91CC\u6CA1\u6709 SKILL.md"};let n;try{n=Ni.readFileSync(e,"utf8").slice(0,C1)}catch(o){return{ok:!1,message:"SKILL.md \u8BFB\u53D6\u5931\u8D25\uFF1A"+o.message}}let s=jy(n),r=String(s.name||"").trim();return r?{ok:!0,manifest:{name:r,version:String(s.version||"").trim(),description:String(s.description||"").trim(),file:e}}:{ok:!1,message:"SKILL.md \u7684 frontmatter \u6CA1\u5199 name"}}function O1(t,e){return e?e.name!==t.name?{ok:!1,message:"name \u4E0D\u4E00\u81F4\uFF1A\u7D22\u5F15 "+t.name+"\u3001\u5305\u5185 "+e.name}:e.version&&e.version!==t.version?{ok:!1,message:"version \u4E0D\u4E00\u81F4\uFF1A\u7D22\u5F15 "+t.version+"\u3001\u5305\u5185 "+e.version}:{ok:!0}:{ok:!1,message:"\u6CA1\u6709\u6280\u80FD\u6E05\u5355"}}function E1(t,e){let n=s=>JSON.stringify((s||[]).map(r=>[r.name,r.description,r.readOnly===!0,r.parameters]));return n(t)===n(e)}function P1(t,e){let n=o=>{if(!o||typeof o!="object")return null;let i=o.tokens&&typeof o.tokens=="object"?o.tokens:{},a=Object.keys(i).sort();return JSON.stringify([String(o.label||""),a.map(l=>[l,String(i[l])])])},s=n(t),r=n(e);return s===null&&r===null?!0:s===r}Ny.exports={HASH_SKIP:Ey,expandHome:S1,canonical:Py,dirHash:v1,parsePublicKey:_1,verifyEntry:T1,tagFor:M1,sameTools:E1,sameTheme:P1,parseFrontmatter:jy,readSkillManifest:A1,sameSkill:O1}});var Ud=Q((AL,$y)=>{var ko=require("fs"),Ly=require("os"),He=require("path"),Dd=300,Iy=60,j1=520,N1=80,I1=6e3,D1=1200,F1=40,L1=30,Dy=4e4,R1=8,q1=2e4,Fy=6,Ry=2e3,qy=Object.create(null);for(let t of Us().SKIP_DIRS)qy[t]=1;var Ae={root:"",rec:function(){},skills:[],dirs:[],scannedAt:"",scannedMs:0};function B1(t){let e=t||{};e.root&&String(e.root)!==Ae.root&&(Ae.scannedMs=0),e.root&&(Ae.root=String(e.root)),typeof e.rec=="function"&&(Ae.rec=e.rec)}function Fd(t,e){try{Ae.rec(t,e)}catch{}}function Ld(t){return(t||[]).map(function(e){return e.name+""+e.description+""+e.parent+""+e.childCount+""+e.rel}).join("")}function Bd(){if(!Ae.root||Ae.scannedMs&&Date.now()-Ae.scannedMs<Ry)return;let t=Ld(Ae.skills),e;try{e=Ky(Ae.root,{quiet:!0})}catch(n){Ae.scannedMs=Date.now(),Fd("skills_rescan_failed",{message:n.message});return}Ld(e)!==t&&Fd("skills_changed",{count:e.length,top:e.filter(function(n){return!n.parent}).length})}function Di(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 U1(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function By(t){let e=t||Ae.root||process.cwd(),n=Ly.homedir();return[He.join(e,".luban","skills"),He.join(e,".claude","skills"),He.join(e,".cursor","skills"),He.join(n,".luban","skills"),He.join(n,".claude","skills"),He.join(n,".cursor","skills"),He.join(n,".cursor","skills-cursor")]}function Uy(t,e,n,s){if(e>R1||n.length>Dd*4)return;let r;try{r=ko.readdirSync(t,{withFileTypes:!0})}catch{return}let o=He.join(t,"SKILL.md");try{ko.statSync(o).isFile()&&n.push({file:o,base:s||t})}catch{}for(let i of r)i.isDirectory()&&(qy[i.name]||i.name.startsWith(".")||Uy(He.join(t,i.name),e+1,n,s||t))}var Rd=Ii().parseFrontmatter;function W1(t){let e=String(t).replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,""),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 qd(t){let e=Ae.root;if(e){let s=He.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!He.isAbsolute(s))return s.split(He.sep).join("/")}let n=Ly.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(He.sep).join("/"):t.split(He.sep).join("/")}var K1=/capability\s*[::]\s*([A-Za-z0-9_./-]+)/g,H1=/(?:<skills_base>|\$\{SKILLS_BASE\})\s*\/\s*([A-Za-z0-9_./-]+)/g;function z1(t){let e=[],n=Object.create(null);for(let s of[[K1,"capability"],[H1,"sibling"]]){let r=s[0];r.lastIndex=0;let o;for(;o=r.exec(String(t||""));){let i=o[1].replace(/\/+$/,"").replace(/\/SKILL\.md$/i,"");!i||n[s[1]+":"+i]||(n[s[1]+":"+i]=!0,e.push({ref:i,kind:s[1]}))}}return e}function G1(t,e){let n;try{n=ko.readFileSync(t,"utf8").slice(0,q1)}catch{return null}let s=He.dirname(t),r=Rd(n),o=Di(r.name)||He.basename(s);if(!o)return null;let i=U1(Di(r.description||r.trigger||r.when_to_use||"")||W1(n),D1),a=0;try{a=ko.statSync(t).size}catch{a=n.length}return{name:o,description:i,dir:s,file:t,base:e||s,refs:z1(n),parent:"",childCount:0,rel:qd(s),fileRel:qd(t),bytes:a}}function J1(t,e){let n=He.relative(e,t);return!n||n.startsWith("..")||He.isAbsolute(n)?!1:n.split(He.sep).some(function(s){return s.toLowerCase()==="capability"})}function $1(t,e,n){let s=String(n||"").replace(/\/+$/,"").replace(/\/SKILL\.md$/i,"");if(!s)return null;let r=[He.resolve(e.dir,s),He.resolve(e.dir,"capability",s),He.resolve(e.base||e.dir,s)];for(let a of r){let l=t.find(function(c){return c.dir===a});if(l&&l!==e)return l}let o=s.split("/").pop().toLowerCase(),i=t.filter(function(a){return a===e?!1:a.name.toLowerCase()===o||He.basename(a.dir).toLowerCase()===o});return i.length===1?i[0]:null}function Wy(t){let e=Object.create(null);for(let s of t)s.parent="",s.childCount=0,e[s.name.toLowerCase()]=s;for(let s of t){let r=null;for(let o of t)o===s||!J1(s.dir,o.dir)||(!r||o.dir.length>r.dir.length)&&(r=o);r&&(s.parent=r.name)}let n=Object.create(null);for(let s of t){let r=[];for(let o of s.refs){if(o.kind!=="capability")continue;let i=$1(t,s,o.ref);i&&r.indexOf(i.name)<0&&r.push(i.name)}n[s.name]=r}for(let s of t)if(!s.parent)for(let r of n[s.name]){let o=e[r.toLowerCase()];!o||o===s||o.parent||(n[o.name]||[]).indexOf(s.name)>=0||(o.parent=s.name)}for(let s of t){let r=s.parent?e[s.parent.toLowerCase()]:null;r&&r.childCount++}}function X1(t){let e=[],n=Object.create(null),s=[t.name];for(;s.length;){let r=s.shift();for(let o of Ae.skills)o.parent!==r||n[o.name.toLowerCase()]||(n[o.name.toLowerCase()]=!0,e.push(o.name),s.push(o.name))}return e}function Ky(t,e){let n=e||{};t&&(Ae.root=String(t));let s=By(Ae.root);Ae.dirs=s;let r=[],o=Object.create(null);for(let i of s){let a=[];Uy(i,0,a,i);for(let l of a){let c=G1(l.file,l.base);if(!c)continue;let u=c.name.toLowerCase();if(!o[u]&&(o[u]=!0,r.push(c),r.length>=Dd))break}if(r.length>=Dd)break}return r.sort(function(i,a){return i.name.toLowerCase()<a.name.toLowerCase()?-1:i.name.toLowerCase()>a.name.toLowerCase()?1:0}),Wy(r),Ae.skills=r,Ae.scannedAt=new Date().toISOString(),Ae.scannedMs=Date.now(),n.quiet||Fd("skills_scanned",{count:r.length,root:Ae.root,top:r.filter(function(i){return!i.parent}).length,names:r.slice(0,30).map(function(i){return i.name})}),r}function Hy(t,e){let n=String(t??"");if(!(e>0))return"";if(n.length<=e)return n;let s=n.slice(0,e),r=-1,o=/[。..;;!!??]/g,i;for(;i=o.exec(s);)i.index>=e*.5&&(r=i.index);let a=r>0?s.slice(0,r+1):s,l=/触发词\s*[::]\s*([^;;。\n]{0,160})/.exec(n);if(l&&l[1].trim()&&a.indexOf(l[1].trim())<0){let c=l[1].trim();a.length+c.length+4<=e?a+=" \u89E6\u53D1\u8BCD\uFF1A"+c:e-a.length>12&&(a+=" \u89E6\u53D1\u8BCD\uFF1A"+c.slice(0,e-a.length-5)+"\u2026")}return a.length>=n.length?n:a.length<e?a+"\u2026":a}function V1(){if(Bd(),!Ae.skills.length)return"";let t=Ae.skills.filter(function(o){return!o.parent}),e=t.slice(0,Iy),n=["\u53EF\u7528\u6280\u80FD\uFF08\u8FD9\u91CC\u53EA\u662F\u76EE\u5F55\uFF1B\u771F\u6B63\u8981\u7528\u65F6\u5148\u8C03\u7528 read_skill \u8BFB SKILL.md \u5168\u6587\uFF0C\u4E0D\u8981\u51ED\u540D\u5B57\u731C\u6B65\u9AA4\uFF09\uFF1A"],s=Math.max(N1,Math.min(j1,Math.floor(I1/(e.length||1))-F1)),r=e.length<=L1;for(let o=0;o<e.length;o++){let i=e[o],a="- "+i.name+": "+(Hy(i.description,s)||"(\u65E0\u63CF\u8FF0)");if(i.childCount>0){let l=X1(i);a+="\uFF08"+(r?"\u76EE\u5F55 "+i.rel+"\uFF1B":"")+"\u53E6\u6709 "+l.length+" \u4E2A capability \u5B50\u6280\u80FD\uFF1A"+l.slice(0,Fy).join(" / ")+(l.length>Fy?" \u7B49":"")+"\uFF0C\u7236\u6280\u80FD\u6B63\u6587\u91CC\u7684 `\u2192 capability:` \u6307\u9488\u6307\u5411\u5B83\u4EEC\uFF0C\u8BFB\u5B8C\u7236\u6280\u80FD\u518D\u6309\u9700 read_skill\uFF09"}else r&&(a+="\uFF08\u76EE\u5F55 "+i.rel+"\uFF09");n.push(a)}return t.length>e.length&&n.push("- \u53E6\u6709 "+(t.length-e.length)+" \u4E2A\u9876\u5C42\u6280\u80FD\u672A\u5217\u51FA\uFF08\u8D85\u8FC7 "+Iy+" \u4E2A\u4E0A\u9650\uFF0C\u7528 op skills \u770B\u5168\u91CF\uFF09"),n.push("\u6280\u80FD\u6B63\u6587\u91CC\u7684\u8DEF\u5F84\u5360\u4F4D\u7B26\uFF08SKILL_DIR / SKILLS_BASE\uFF09\u5DF2\u66FF\u6362\u6210\u672C\u673A\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u53EF\u76F4\u63A5\u7528\u4E8E read_file / run_command\u3002"),n.join(`
99
99
  `)}function zy(t){let e=Di(t).toLowerCase();if(!e)return null;Bd();let n=Ae.skills.find(function(s){return s.name.toLowerCase()===e});return n||(n=Ae.skills.find(function(s){return He.basename(s.dir).toLowerCase()===e}),n||null)}function Gy(t,e){let n=e.dir,s=e.base||e.dir;return String(t??"").split("${SKILL_DIR}").join(n).split("${SKILLS_BASE}").join(s).split("<skills_base>").join(s).split("<skill_dir>").join(n)}function Y1(t,e){let n=zy(t);if(!n){let l=Ae.skills.map(function(c){return c.name}).join(", ")||"(\u65E0)";throw new Error("\u6CA1\u6709\u8FD9\u4E2A\u6280\u80FD: "+Di(t)+"\uFF08\u53EF\u7528: "+l+"\uFF09")}let s=n.file,r=Di(e||"");if(r&&r!=="SKILL.md"){s=He.resolve(n.dir,r);let l=He.relative(n.dir,s);if(!l||l.startsWith("..")||He.isAbsolute(l))throw new Error("file \u53EA\u80FD\u5F15\u7528\u8BE5\u6280\u80FD\u76EE\u5F55\u5185\u7684\u6587\u4EF6: "+r);let c;try{c=ko.statSync(s)}catch{throw new Error("\u6280\u80FD\u76EE\u5F55\u91CC\u6CA1\u6709\u8FD9\u4E2A\u6587\u4EF6: "+r)}if(!c.isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6: "+r)}let o;try{o=ko.readFileSync(s,"utf8")}catch(l){throw new Error("\u8BFB\u53D6\u6280\u80FD\u6587\u4EF6\u5931\u8D25: "+l.message)}o=Gy(o,n);let a=o.length>Dy?o.slice(0,Dy)+`
100
100
  \u2026[\u622A\u65AD]`:o;return"\u6280\u80FD "+n.name+" \xB7 "+qd(s)+`
101
101
  \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
102
102
 
103
- `+a}function Jy(){return Ae.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 Z1(){return{count:Ae.skills.length,root:Ae.root,scannedAt:Ae.scannedAt,dirs:Ae.dirs.slice(),skills:Jy()}}$y.exports={configure:B1,refresh:Ky,ensure:Bd,block:V1,read:Y1,list:Jy,status:Z1,find:zy,frontmatter:Rd,_frontmatter:Rd,_scanDirs:By,_clipDesc:Hy,_markChildren:Wy,_substPaths:Gy,_signature:Ld,_state:Ae,_ttl:Ry}});var zd=Q((OL,Hd)=>{var Rl=require("fs"),Xs=require("path"),Zy=new Set(Bs().SKIP_DIRS),Q1=512*1024,eA=8e3,Xy=400,tA=200,nA=2e3,sA=200,Qy=2e3,Vy=20;function xo(t){let e=String(t??"").trim();if(!e)return null;let n=e.charAt(0)==="!"?e.slice(1):e,r=ew(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+=rA(l)}return new RegExp("^"+i+"$")}).filter(Boolean);return r.length?{res:r}:null}function ew(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,ew(r+c+o));return l}function rA(t){return/[.*+?^${}()|[\]\\]/.test(t)?"\\"+t:t}function vs(t,e){if(!t)return!1;for(let n of t.res)if(n.test(e))return!0;return!1}function So(t,e){if(!t)return e;let n=String(t).replace(/\/+$/,"");return n?n+"/"+e:e}function tw(t){let e=String(t??"");return e.length>Xy?e.slice(0,Xy)+"\u2026":e}function Yy(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:tw(t[i])});return o}function Kd(t,e){let n=e||{},s=isFinite(n.maxDepth)?Math.min(Math.max(n.maxDepth,1),Vy):Vy,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=Rl.readdirSync(Xs.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)==="."||Zy.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 Ss(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=xo(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=Ll(s.maxFiles,1,Qy,sA),l=s.prefix?String(s.prefix):"",c=Kd(t,{maxDepth:s.maxDepth,cap:2e4}),u=[];for(let d of c.files){let f=!1;for(let k of o)if(vs(k,d)){f=!0;break}if(!f)continue;let p=!1;for(let k of i)if(vs(k,d)){p=!0;break}if(p)continue;let m=Xs.join(t,d),h=0,y=0;try{let k=Rl.statSync(m);h=k.size,y=k.mtimeMs}catch{}if(u.push({rel:So(l,d),abs:m,size:h,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 nw(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
103
+ `+a}function Jy(){return Ae.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 Z1(){return{count:Ae.skills.length,root:Ae.root,scannedAt:Ae.scannedAt,dirs:Ae.dirs.slice(),skills:Jy()}}$y.exports={configure:B1,refresh:Ky,ensure:Bd,block:V1,read:Y1,list:Jy,status:Z1,find:zy,frontmatter:Rd,_frontmatter:Rd,_scanDirs:By,_clipDesc:Hy,_markChildren:Wy,_substPaths:Gy,_signature:Ld,_state:Ae,_ttl:Ry}});var zd=Q((OL,Hd)=>{var Rl=require("fs"),Vs=require("path"),Zy=new Set(Us().SKIP_DIRS),Q1=512*1024,eA=8e3,Xy=400,tA=200,nA=2e3,sA=200,Qy=2e3,Vy=20;function xo(t){let e=String(t??"").trim();if(!e)return null;let n=e.charAt(0)==="!"?e.slice(1):e,r=ew(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+=rA(l)}return new RegExp("^"+i+"$")}).filter(Boolean);return r.length?{res:r}:null}function ew(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,ew(r+c+o));return l}function rA(t){return/[.*+?^${}()|[\]\\]/.test(t)?"\\"+t:t}function _s(t,e){if(!t)return!1;for(let n of t.res)if(n.test(e))return!0;return!1}function So(t,e){if(!t)return e;let n=String(t).replace(/\/+$/,"");return n?n+"/"+e:e}function tw(t){let e=String(t??"");return e.length>Xy?e.slice(0,Xy)+"\u2026":e}function Yy(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:tw(t[i])});return o}function Kd(t,e){let n=e||{},s=isFinite(n.maxDepth)?Math.min(Math.max(n.maxDepth,1),Vy):Vy,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=Rl.readdirSync(Vs.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)==="."||Zy.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 vs(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=xo(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=Ll(s.maxFiles,1,Qy,sA),l=s.prefix?String(s.prefix):"",c=Kd(t,{maxDepth:s.maxDepth,cap:2e4}),u=[];for(let d of c.files){let f=!1;for(let k of o)if(_s(k,d)){f=!0;break}if(!f)continue;let p=!1;for(let k of i)if(_s(k,d)){p=!0;break}if(p)continue;let m=Vs.join(t,d),h=0,y=0;try{let k=Rl.statSync(m);h=k.size,y=k.mtimeMs}catch{}if(u.push({rel:So(l,d),abs:m,size:h,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 nw(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
104
104
  `+n.join(`
105
105
  `);return t.truncated&&(s+=`
106
- ...[\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=Ll(s.maxHits,1,nA,tA),a=Ll(s.maxFiles,1,Qy,5e3),l=Ll(s.contextLines,0,5,0),c=s.prefix?String(s.prefix):"",u=isFinite(s.budgetMs)&&s.budgetMs>0?Math.floor(s.budgetMs):eA,d=Date.now()+u,f=s.glob?xo(s.glob):null,p=Kd(t,{maxDepth:s.maxDepth,cap:2e4}),m=[],h=0,y=!1,k=!1;for(let T of p.files){if(m.length>=i){y=!0;break}if(Date.now()>d){y=!0,k=!0;break}if(f&&!vs(f,T))continue;if(h>=a){y=!0;break}let g=Xs.join(t,T),v;try{v=Rl.statSync(g)}catch{continue}if(!v.isFile()||v.size>Q1)continue;let w;try{w=Rl.readFileSync(g,"utf8")}catch{continue}if(oA(w))continue;h++;let S=w.split(`
106
+ ...[\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=Ll(s.maxHits,1,nA,tA),a=Ll(s.maxFiles,1,Qy,5e3),l=Ll(s.contextLines,0,5,0),c=s.prefix?String(s.prefix):"",u=isFinite(s.budgetMs)&&s.budgetMs>0?Math.floor(s.budgetMs):eA,d=Date.now()+u,f=s.glob?xo(s.glob):null,p=Kd(t,{maxDepth:s.maxDepth,cap:2e4}),m=[],h=0,y=!1,k=!1;for(let T of p.files){if(m.length>=i){y=!0;break}if(Date.now()>d){y=!0,k=!0;break}if(f&&!_s(f,T))continue;if(h>=a){y=!0;break}let g=Vs.join(t,T),v;try{v=Rl.statSync(g)}catch{continue}if(!v.isFile()||v.size>Q1)continue;let w;try{w=Rl.readFileSync(g,"utf8")}catch{continue}if(oA(w))continue;h++;let S=w.split(`
107
107
  `);for(let _=0;_<S.length;_++){o.lastIndex=0;let C=o.exec(S[_]);if(C&&(m.push({rel:So(c,T),line:_+1,text:tw(S[_]),col:C.index+1,match:C[0],groups:C.slice(1),before:l>0?Yy(S,_-l,_):[],after:l>0?Yy(S,_+1,_+1+l):[]}),m.length>=i)){y=!0;break}}}return{hits:m,filesSearched:h,truncated:y,timedOut:k,contextLines:l,pattern:r}}function oA(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 Wd(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":"")+`
108
108
  `+e.join(`
109
109
  `);return t.truncated&&(r+=`
110
- ...[`+(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 Ll(t,e,n,s){let r=Math.floor(Number(t));return isFinite(r)?Math.min(Math.max(r,e),n):s}Hd.exports={globToRegExp:xo,globMatch:vs,walkFiles:Kd,glob:Ss,formatGlob:nw,grep:Yt,formatGrep:Wd,outRel:So,SKIP_DIRS:Zy};require.main===Hd&&iA();function iA(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Xs.join(t.tmpdir(),"luban-fs-")),s=function(k,T){let g=Xs.join(n,k);e.mkdirSync(Xs.dirname(g),{recursive:!0}),e.writeFileSync(g,T)};s("a.js",`const foo1 = 1;
110
+ ...[`+(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 Ll(t,e,n,s){let r=Math.floor(Number(t));return isFinite(r)?Math.min(Math.max(r,e),n):s}Hd.exports={globToRegExp:xo,globMatch:_s,walkFiles:Kd,glob:vs,formatGlob:nw,grep:Yt,formatGrep:Wd,outRel:So,SKIP_DIRS:Zy};require.main===Hd&&iA();function iA(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Vs.join(t.tmpdir(),"luban-fs-")),s=function(k,T){let g=Vs.join(n,k);e.mkdirSync(Vs.dirname(g),{recursive:!0}),e.writeFileSync(g,T)};s("a.js",`const foo1 = 1;
111
111
  const foo2 = 2;
112
112
  `),s("src/b.ts",`export function bar(x) { return foo1 + x; }
113
113
  `),s("src/gen.js",`const generated = true;
@@ -116,8 +116,8 @@ foo(123) \u5728\u8FD9\u91CC
116
116
  `),s("node_modules/dep/index.js",`const foo9 = 9;
117
117
  `),s(".hidden/d.js",`const fooHidden = 1;
118
118
  `),s("plain.txt",`foo(456)
119
- `);let r=0,o=0,i=function(k,T,g){T?(r++,console.log(" ok "+k)):(o++,console.log(" FAIL "+k+(g?" :: "+g:"")))},a=Ss(n,"**/*.js");i("glob **/*.js \u547D\u4E2D a.js",a.matches.some(k=>k.rel==="a.js")),i("glob \u8DF3\u8FC7 node_modules",!a.matches.some(k=>k.rel.indexOf("node_modules")===0)),i("glob \u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55",!a.matches.some(k=>k.rel.indexOf(".hidden")===0)),a=Ss(n,"src/**/*.ts"),i("glob src/**/*.ts \u53EA\u4E2D b.ts",a.matches.length===1&&a.matches[0].rel==="src/b.ts"),a=Ss(n,"**/*.{md,txt}"),i("glob \u82B1\u62EC\u53F7 md+txt",a.matches.length===2),a=Ss(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(k=>k.rel))),a=Ss(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(k=>k.rel))),a=Ss(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(k=>k.rel+":"+k.line))),i("grep \u547D\u4E2D c.md \u4E0E plain.txt",l.hits.some(k=>k.rel==="src/deep/c.md")&&l.hits.some(k=>k.rel==="plain.txt")),l=Yt(n,"foo\\((\\d+)\\)"),i("grep \u6355\u83B7\u7EC4",l.hits.every(k=>/^\d+$/.test(k.groups[0])),JSON.stringify(l.hits.map(k=>k.groups[0]))),l=Yt(n,"FOO1",{ignoreCase:!0}),i("grep ignoreCase",l.hits.length===2&&l.hits.some(k=>k.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=Wd(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(Xs.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(k=>k.rel)));let f=Ss(Xs.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(k=>k.rel))),i("outRel \u7A7A\u524D\u7F00\u539F\u6837",So("","a.js")==="a.js"),i("outRel \u53BB\u5C3E\u90E8\u659C\u6760",So("src/","a.js")==="src/a.js"),i("outRel \u7EDD\u5BF9\u524D\u7F00",So("/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 m=xo("**/*.spec.ts");i("globToRegExp \u5339\u914D a/b/c.spec.ts",vs(m,"a/b/c.spec.ts")),i("globToRegExp \u4E0D\u5339\u914D a/b/c.ts",!vs(m,"a/b/c.ts"));let h=xo("src/**");i("globToRegExp src/** \u5339\u914D src/x",vs(h,"src/x")),i("globToRegExp src/** \u4E0D\u5339\u914D srcx",!vs(h,"srcx"));let y=xo("!src/**");i("globToRegExp \u5265\u6389\u524D\u5BFC ! \u540E\u5339\u914D src/x",vs(y,"src/x")),i("formatGlob \u7A7A\u7ED3\u679C",/没有匹配/.test(nw(Ss(n,"**/*.zzz")))),i("formatGrep \u6709\u547D\u4E2D",/命中 \d+ 行/.test(Wd(Yt(n,"foo1")))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
120
- filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var bw=Q((EL,ww)=>{var $d=require("fs"),rw=require("os"),Pt=require("path"),aA=Ud(),ow=zd(),lA=100,Fi=4e4,cA=6,iw=2e3,aw=12e3,lw=2e3,uA=200,Xd=/\.(md|mdc)$/i,cw=Object.create(null);for(let t of Bs().SKIP_DIRS)cw[t]=1;var ee={root:"",rec:function(){},rules:[],dirs:[],scannedAt:"",scannedMs:0,enabled:!0,maxChars:aw,indexMaxChars:lw};function dA(t){let e=t||{};e.root&&String(e.root)!==ee.root&&(ee.scannedMs=0),e.root&&(ee.root=String(e.root)),typeof e.rec=="function"&&(ee.rec=e.rec),typeof e.enabled=="boolean"&&(ee.enabled=e.enabled);let n=Number(e.maxChars);isFinite(n)&&n>0&&(ee.maxChars=Math.floor(n));let s=Number(e.indexMaxChars);isFinite(s)&&s>0&&(ee.indexMaxChars=Math.floor(s))}function Gd(t,e){try{ee.rec(t,e)}catch{}}function Jd(t){return(t||[]).map(function(e){return e.name+""+e.tier+""+e.globs.join(",")+""+e.body.length+""+e.file}).join("")}function Bl(){if(!ee.root||ee.scannedMs&&Date.now()-ee.scannedMs<iw)return;let t=Jd(ee.rules),e;try{e=mw(ee.root,{quiet:!0})}catch(n){ee.scannedMs=Date.now(),Gd("rules_rescan_failed",{message:n.message});return}Jd(e)!==t&&Gd("rules_changed",{count:e.length,always:e.filter(function(n){return n.tier==="always"}).length})}function ql(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 fA(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function pA(t){let e=ee.root;if(e){let s=Pt.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!Pt.isAbsolute(s))return s.split(Pt.sep).join("/")}let n=rw.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(Pt.sep).join("/"):t.split(Pt.sep).join("/")}function uw(t){let e=t||ee.root||process.cwd(),n=rw.homedir();return[{kind:"dir",dir:Pt.join(e,".luban","rules")},{kind:"dir",dir:Pt.join(e,".cursor","rules")},{kind:"file",file:Pt.join(e,"AGENTS.md"),agents:!0},{kind:"dir",dir:Pt.join(n,".luban","rules")}]}function dw(t,e,n){if(e>cA)return;let s;try{s=$d.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=Pt.join(t,o.name);if(o.isDirectory()){if(cw[o.name]||o.name.startsWith("."))continue;dw(i,e+1,n);continue}!o.isFile()||!Xd.test(o.name)||n.push(i)}}function Vd(t){return String(t??"").replace(/^---\r?\n[\s\S]*?\r?\n---[ \t]*\r?\n?/,"").trim()}function mA(t){let e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(String(t??""));return e?e[1]:""}function sw(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 fw(t){let e=[],n=mA(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&&sw(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(","))sw(e,u)}return e}function hA(t){let e=Vd(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 pw(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 gA(t,e){let n;try{n=$d.readFileSync(t,"utf8")}catch{return null}let s=n.length>Fi;s&&(n=n.slice(0,Fi));let r=aA.frontmatter(n),o=ql(r.name)||Pt.basename(t).replace(Xd,"");if(!o)return null;let i=fw(n),a=pw(r,i,e),l=Vd(n),c=fA(ql(r.description||r.trigger||r.when_to_use||"")||hA(n),uA);return{name:o,description:c,globs:i,globsRe:i.map(function(u){return ow.globToRegExp(u)}).filter(Boolean),alwaysApply:a==="always",tier:a,file:t,rel:pA(t),chars:n.length,truncated:s,body:l,text:n}}function mw(t,e){let n=e||{};t&&(String(t)!==ee.root&&(ee.scannedMs=0),ee.root=String(t));let s=uw(ee.root);ee.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=[];dw(a.dir,0,l);for(let c of l)r.push({file:c,src:a})}else{let l;try{l=$d.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=gA(a.file,a.src);if(!l)continue;let c=l.name.toLowerCase();if(!i[c]&&(i[c]=!0,o.push(l),o.length>=lA))break}return o.sort(function(a,l){let c=a.name.toLowerCase(),u=l.name.toLowerCase();return c<u?-1:c>u?1:0}),ee.rules=o,ee.scannedAt=new Date().toISOString(),ee.scannedMs=Date.now(),n.quiet||Gd("rules_scanned",{count:o.length,root:ee.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 yA(){if(!ee.enabled||(Bl(),!ee.rules.length))return"";let t=ee.rules.filter(function(i){return i.tier==="always"}),e=ee.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>ee.maxChars){o.push(i);continue}s+=l,r.push(a+`
119
+ `);let r=0,o=0,i=function(k,T,g){T?(r++,console.log(" ok "+k)):(o++,console.log(" FAIL "+k+(g?" :: "+g:"")))},a=vs(n,"**/*.js");i("glob **/*.js \u547D\u4E2D a.js",a.matches.some(k=>k.rel==="a.js")),i("glob \u8DF3\u8FC7 node_modules",!a.matches.some(k=>k.rel.indexOf("node_modules")===0)),i("glob \u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55",!a.matches.some(k=>k.rel.indexOf(".hidden")===0)),a=vs(n,"src/**/*.ts"),i("glob src/**/*.ts \u53EA\u4E2D b.ts",a.matches.length===1&&a.matches[0].rel==="src/b.ts"),a=vs(n,"**/*.{md,txt}"),i("glob \u82B1\u62EC\u53F7 md+txt",a.matches.length===2),a=vs(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(k=>k.rel))),a=vs(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(k=>k.rel))),a=vs(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(k=>k.rel+":"+k.line))),i("grep \u547D\u4E2D c.md \u4E0E plain.txt",l.hits.some(k=>k.rel==="src/deep/c.md")&&l.hits.some(k=>k.rel==="plain.txt")),l=Yt(n,"foo\\((\\d+)\\)"),i("grep \u6355\u83B7\u7EC4",l.hits.every(k=>/^\d+$/.test(k.groups[0])),JSON.stringify(l.hits.map(k=>k.groups[0]))),l=Yt(n,"FOO1",{ignoreCase:!0}),i("grep ignoreCase",l.hits.length===2&&l.hits.some(k=>k.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=Wd(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(Vs.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(k=>k.rel)));let f=vs(Vs.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(k=>k.rel))),i("outRel \u7A7A\u524D\u7F00\u539F\u6837",So("","a.js")==="a.js"),i("outRel \u53BB\u5C3E\u90E8\u659C\u6760",So("src/","a.js")==="src/a.js"),i("outRel \u7EDD\u5BF9\u524D\u7F00",So("/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 m=xo("**/*.spec.ts");i("globToRegExp \u5339\u914D a/b/c.spec.ts",_s(m,"a/b/c.spec.ts")),i("globToRegExp \u4E0D\u5339\u914D a/b/c.ts",!_s(m,"a/b/c.ts"));let h=xo("src/**");i("globToRegExp src/** \u5339\u914D src/x",_s(h,"src/x")),i("globToRegExp src/** \u4E0D\u5339\u914D srcx",!_s(h,"srcx"));let y=xo("!src/**");i("globToRegExp \u5265\u6389\u524D\u5BFC ! \u540E\u5339\u914D src/x",_s(y,"src/x")),i("formatGlob \u7A7A\u7ED3\u679C",/没有匹配/.test(nw(vs(n,"**/*.zzz")))),i("formatGrep \u6709\u547D\u4E2D",/命中 \d+ 行/.test(Wd(Yt(n,"foo1")))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
120
+ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var bw=Q((EL,ww)=>{var $d=require("fs"),rw=require("os"),jt=require("path"),aA=Ud(),ow=zd(),lA=100,Fi=4e4,cA=6,iw=2e3,aw=12e3,lw=2e3,uA=200,Xd=/\.(md|mdc)$/i,cw=Object.create(null);for(let t of Us().SKIP_DIRS)cw[t]=1;var ee={root:"",rec:function(){},rules:[],dirs:[],scannedAt:"",scannedMs:0,enabled:!0,maxChars:aw,indexMaxChars:lw};function dA(t){let e=t||{};e.root&&String(e.root)!==ee.root&&(ee.scannedMs=0),e.root&&(ee.root=String(e.root)),typeof e.rec=="function"&&(ee.rec=e.rec),typeof e.enabled=="boolean"&&(ee.enabled=e.enabled);let n=Number(e.maxChars);isFinite(n)&&n>0&&(ee.maxChars=Math.floor(n));let s=Number(e.indexMaxChars);isFinite(s)&&s>0&&(ee.indexMaxChars=Math.floor(s))}function Gd(t,e){try{ee.rec(t,e)}catch{}}function Jd(t){return(t||[]).map(function(e){return e.name+""+e.tier+""+e.globs.join(",")+""+e.body.length+""+e.file}).join("")}function Bl(){if(!ee.root||ee.scannedMs&&Date.now()-ee.scannedMs<iw)return;let t=Jd(ee.rules),e;try{e=mw(ee.root,{quiet:!0})}catch(n){ee.scannedMs=Date.now(),Gd("rules_rescan_failed",{message:n.message});return}Jd(e)!==t&&Gd("rules_changed",{count:e.length,always:e.filter(function(n){return n.tier==="always"}).length})}function ql(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 fA(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function pA(t){let e=ee.root;if(e){let s=jt.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!jt.isAbsolute(s))return s.split(jt.sep).join("/")}let n=rw.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(jt.sep).join("/"):t.split(jt.sep).join("/")}function uw(t){let e=t||ee.root||process.cwd(),n=rw.homedir();return[{kind:"dir",dir:jt.join(e,".luban","rules")},{kind:"dir",dir:jt.join(e,".cursor","rules")},{kind:"file",file:jt.join(e,"AGENTS.md"),agents:!0},{kind:"dir",dir:jt.join(n,".luban","rules")}]}function dw(t,e,n){if(e>cA)return;let s;try{s=$d.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=jt.join(t,o.name);if(o.isDirectory()){if(cw[o.name]||o.name.startsWith("."))continue;dw(i,e+1,n);continue}!o.isFile()||!Xd.test(o.name)||n.push(i)}}function Vd(t){return String(t??"").replace(/^---\r?\n[\s\S]*?\r?\n---[ \t]*\r?\n?/,"").trim()}function mA(t){let e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(String(t??""));return e?e[1]:""}function sw(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 fw(t){let e=[],n=mA(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&&sw(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(","))sw(e,u)}return e}function hA(t){let e=Vd(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 pw(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 gA(t,e){let n;try{n=$d.readFileSync(t,"utf8")}catch{return null}let s=n.length>Fi;s&&(n=n.slice(0,Fi));let r=aA.frontmatter(n),o=ql(r.name)||jt.basename(t).replace(Xd,"");if(!o)return null;let i=fw(n),a=pw(r,i,e),l=Vd(n),c=fA(ql(r.description||r.trigger||r.when_to_use||"")||hA(n),uA);return{name:o,description:c,globs:i,globsRe:i.map(function(u){return ow.globToRegExp(u)}).filter(Boolean),alwaysApply:a==="always",tier:a,file:t,rel:pA(t),chars:n.length,truncated:s,body:l,text:n}}function mw(t,e){let n=e||{};t&&(String(t)!==ee.root&&(ee.scannedMs=0),ee.root=String(t));let s=uw(ee.root);ee.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=[];dw(a.dir,0,l);for(let c of l)r.push({file:c,src:a})}else{let l;try{l=$d.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=gA(a.file,a.src);if(!l)continue;let c=l.name.toLowerCase();if(!i[c]&&(i[c]=!0,o.push(l),o.length>=lA))break}return o.sort(function(a,l){let c=a.name.toLowerCase(),u=l.name.toLowerCase();return c<u?-1:c>u?1:0}),ee.rules=o,ee.scannedAt=new Date().toISOString(),ee.scannedMs=Date.now(),n.quiet||Gd("rules_scanned",{count:o.length,root:ee.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 yA(){if(!ee.enabled||(Bl(),!ee.rules.length))return"";let t=ee.rules.filter(function(i){return i.tier==="always"}),e=ee.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>ee.maxChars){o.push(i);continue}s+=l,r.push(a+`
121
121
  `+(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
122
122
 
123
123
  `+r.join(`
@@ -127,14 +127,14 @@ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var bw=
127
127
  `)+(l?`
128
128
  - \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(`
129
129
 
130
- `)}function hw(t){let e=[];for(let n of t||[]){let s=String(n??"").trim();if(!s)continue;let r=s;if(Pt.isAbsolute(s)){if(ee.root){let o=Pt.relative(ee.root,s);r=!o.startsWith("..")&&!Pt.isAbsolute(o)?o:s}}else r=s.replace(/^\.\//,"");r=r.split(Pt.sep).join("/"),e.indexOf(r)<0&&e.push(r)}return e.sort()}function wA(t){if(!ee.enabled)return"";let e=hw(t);if(!e.length)return"";Bl();let n=ee.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 ow.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>ee.maxChars){a.push(l.rule);continue}o+=u,i.push(c+`
130
+ `)}function hw(t){let e=[];for(let n of t||[]){let s=String(n??"").trim();if(!s)continue;let r=s;if(jt.isAbsolute(s)){if(ee.root){let o=jt.relative(ee.root,s);r=!o.startsWith("..")&&!jt.isAbsolute(o)?o:s}}else r=s.replace(/^\.\//,"");r=r.split(jt.sep).join("/"),e.indexOf(r)<0&&e.push(r)}return e.sort()}function wA(t){if(!ee.enabled)return"";let e=hw(t);if(!e.length)return"";Bl();let n=ee.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 ow.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>ee.maxChars){a.push(l.rule);continue}o+=u,i.push(c+`
131
131
  `+(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
132
132
 
133
133
  `+i.join(`
134
134
 
135
135
  `)),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(`
136
136
 
137
- `)}function gw(t){let e=ql(t).toLowerCase();if(!e)return null;Bl();let n=ee.rules.find(function(s){return s.name.toLowerCase()===e});return n||(n=ee.rules.find(function(s){return Pt.basename(s.file).replace(Xd,"").toLowerCase()===e}),n||null)}function bA(t){let e=gw(t);if(!e){let o=ee.rules.map(function(i){return i.name}).join(", ")||"(\u65E0)";throw new Error("\u6CA1\u6709\u8FD9\u4E2A\u89C4\u5219: "+ql(t)+"\uFF08\u53EF\u7528: "+o+"\uFF09")}let n=String(e.text||""),r=n.length>Fi?n.slice(0,Fi)+`
137
+ `)}function gw(t){let e=ql(t).toLowerCase();if(!e)return null;Bl();let n=ee.rules.find(function(s){return s.name.toLowerCase()===e});return n||(n=ee.rules.find(function(s){return jt.basename(s.file).replace(Xd,"").toLowerCase()===e}),n||null)}function bA(t){let e=gw(t);if(!e){let o=ee.rules.map(function(i){return i.name}).join(", ")||"(\u65E0)";throw new Error("\u6CA1\u6709\u8FD9\u4E2A\u89C4\u5219: "+ql(t)+"\uFF08\u53EF\u7528: "+o+"\uFF09")}let n=String(e.text||""),r=n.length>Fi?n.slice(0,Fi)+`
138
138
  \u2026[\u622A\u65AD]`:n;return"\u89C4\u5219 "+e.name+" \xB7 "+e.rel+`
139
139
  \u6765\u6E90\uFF1A`+e.file+"\uFF08\u6863\u4F4D\uFF1A"+e.tier+(e.globs.length?"\uFF1Bglobs: "+e.globs.join(", "):"")+`\uFF09
140
140
 
@@ -147,29 +147,29 @@ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var bw=
147
147
  `+c.join(`
148
148
  `),m=!1;if(f>0){let h="\uFF08\u5176\u4F59 "+f+" \u4E2A\u6587\u4EF6\u7701\u7565\uFF09";p.length+1+h.length<=i?p+=`
149
149
  `+h:p=p.slice(0,Math.max(0,i-jw.length))+jw,m=!0}return{block:p,chars:p.length,files:o.length,omitted:f,truncated:m}}Qd.exports={DEFAULT_MAX_CHARS:3e3,block:Fr,_lineOf:Nw};if(require.main===Qd){let n=function(f,p){p?(t++,console.log(" \u2713 "+f)):(e++,console.log(" \u2717 "+f))};IA=n;let t=0,e=0,s=Fr([]);n("\u7A7A\u8BB0\u5F55\u8FD4\u56DE\u7A7A\u5757",s.block===""&&s.files===0&&!s.truncated);let r=Fr([{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=Fr([{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=Fr([{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=Fr([{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=Fr([{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(`
150
- workset.js: `+t+" \u901A\u8FC7, "+e+" \u5931\u8D25"),process.exit(e?1:0)}var IA});var zw=Q((IL,Hw)=>{var Lr=require("fs"),DA=require("path"),FA=Bs().SKIP_DIRS,Vs={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:FA},Dw=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+/)),Fw=/[A-Za-z_$][A-Za-z0-9_$]*/g,Lw=/[\u4e00-\u9fff]+/g;function Rw(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 ef(t){let e=String(t??""),n=[],s;for(Fw.lastIndex=0;s=Fw.exec(e);){let r=s[0],o=r.toLowerCase();o.length>=2&&!Dw.has(o)&&n.push(o);for(let i of Rw(r)){let a=i.toLowerCase();a.length>=2&&a!==o&&!Dw.has(a)&&n.push(a)}}for(Lw.lastIndex=0;s=Lw.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 qw(t){let e=null;try{e=Lr.openSync(t,"r");let n=Buffer.alloc(4096),s=Lr.readSync(e,n,0,4096,0);return n.slice(0,s).indexOf(0)>=0}catch{return!0}finally{if(e!==null)try{Lr.closeSync(e)}catch{}}}function Bw(t,e){let n=Object.assign({},Vs,e||{}),s=new Set(n.skipDirs||Vs.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=Lr.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=DA.join(a,d.name),p=l?l+"/"+d.name:d.name,m;try{m=Lr.statSync(f)}catch{continue}if(m.isDirectory()){i(f,p,c+1);continue}m.isFile()&&(m.size>n.maxFileBytes||m.size===0||r.push({rel:p,abs:f,mtimeMs:m.mtimeMs,size:m.size}))}}(t,"",0),{files:r,truncated:o}}function Uw(t,e){let n=ef(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 vo=new Map;function LA(){return{docs:new Map,inverted:new Map,df:new Map,avgLen:0,dirty:!1,builtAt:0}}function RA(t){let e=0;for(let n of t.values())e+=n.size;return e}function qA(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 BA(t,e){let n=Object.assign({},Vs,e||{}),s=Bw(t,n),r=vo.get(t);r||(r=LA(),vo.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||qw(a.abs))continue;let c;try{c=Lr.readFileSync(a.abs,"utf8")}catch{continue}let u=Uw(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)&&qA(r,n.maxGlobalTokens),{index:r,files:s.files.length,truncated:s.truncated,changed:i}}function UA(t,e){return Math.log(1+(e-t+.5)/(t+.5))}function Ww(t,e,n){let s=Object.assign({},Vs,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=UA(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 m=1-s.b+s.b*(p.docLen/o),h=c*(f*(s.k1+1))/(f+s.k1*m);i.set(d,(i.get(d)||0)+h)}}return Array.from(i.entries()).sort(function(a,l){return l[1]-a[1]})}function WA(t,e){let n=String(t??"").replace(/\r$/,"");return n.length>e?n.slice(0,e)+"\u2026":n}function Kw(t,e,n){let s=Object.assign({},Vs,n||{}),r;try{r=Lr.readFileSync(t,"utf8")}catch{return[]}let o=r.split(`
151
- `),i=[];for(let d=0;d<o.length;d++){let f=o[d].toLowerCase(),p=0;for(let m of e)f.indexOf(m)>=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 m=f;m<=p;m++)c.has(m)||(c.add(m),u.push({no:m+1,text:WA(o[m],s.maxLineLen),match:m===d.i}))}return u}function KA(t,e,n){let s=Date.now(),r=Object.assign({},Vs,n||{}),o=String(e??"").trim();if(!o)throw new Error("\u641C\u7D22\u8BCD\u4E3A\u7A7A");let i=Array.from(new Set(ef(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=BA(t,r),l=Ww(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 m=p[0],h=a.index.docs.get(m);if(!h)continue;let y=Kw(h.abs,i,r);y.length&&f.push({path:m,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 HA(t,e){let n=Object.assign({},Vs,e||{}),s=t||{},r="\u626B\u63CF "+(s.files||0)+" \u4E2A\u6587\u4EF6\uFF08\u7D22\u5F15 "+(s.indexed||0)+`\uFF09
150
+ workset.js: `+t+" \u901A\u8FC7, "+e+" \u5931\u8D25"),process.exit(e?1:0)}var IA});var zw=Q((IL,Hw)=>{var Lr=require("fs"),DA=require("path"),FA=Us().SKIP_DIRS,Ys={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:FA},Dw=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+/)),Fw=/[A-Za-z_$][A-Za-z0-9_$]*/g,Lw=/[\u4e00-\u9fff]+/g;function Rw(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 ef(t){let e=String(t??""),n=[],s;for(Fw.lastIndex=0;s=Fw.exec(e);){let r=s[0],o=r.toLowerCase();o.length>=2&&!Dw.has(o)&&n.push(o);for(let i of Rw(r)){let a=i.toLowerCase();a.length>=2&&a!==o&&!Dw.has(a)&&n.push(a)}}for(Lw.lastIndex=0;s=Lw.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 qw(t){let e=null;try{e=Lr.openSync(t,"r");let n=Buffer.alloc(4096),s=Lr.readSync(e,n,0,4096,0);return n.slice(0,s).indexOf(0)>=0}catch{return!0}finally{if(e!==null)try{Lr.closeSync(e)}catch{}}}function Bw(t,e){let n=Object.assign({},Ys,e||{}),s=new Set(n.skipDirs||Ys.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=Lr.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=DA.join(a,d.name),p=l?l+"/"+d.name:d.name,m;try{m=Lr.statSync(f)}catch{continue}if(m.isDirectory()){i(f,p,c+1);continue}m.isFile()&&(m.size>n.maxFileBytes||m.size===0||r.push({rel:p,abs:f,mtimeMs:m.mtimeMs,size:m.size}))}}(t,"",0),{files:r,truncated:o}}function Uw(t,e){let n=ef(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 vo=new Map;function LA(){return{docs:new Map,inverted:new Map,df:new Map,avgLen:0,dirty:!1,builtAt:0}}function RA(t){let e=0;for(let n of t.values())e+=n.size;return e}function qA(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 BA(t,e){let n=Object.assign({},Ys,e||{}),s=Bw(t,n),r=vo.get(t);r||(r=LA(),vo.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||qw(a.abs))continue;let c;try{c=Lr.readFileSync(a.abs,"utf8")}catch{continue}let u=Uw(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)&&qA(r,n.maxGlobalTokens),{index:r,files:s.files.length,truncated:s.truncated,changed:i}}function UA(t,e){return Math.log(1+(e-t+.5)/(t+.5))}function Ww(t,e,n){let s=Object.assign({},Ys,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=UA(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 m=1-s.b+s.b*(p.docLen/o),h=c*(f*(s.k1+1))/(f+s.k1*m);i.set(d,(i.get(d)||0)+h)}}return Array.from(i.entries()).sort(function(a,l){return l[1]-a[1]})}function WA(t,e){let n=String(t??"").replace(/\r$/,"");return n.length>e?n.slice(0,e)+"\u2026":n}function Kw(t,e,n){let s=Object.assign({},Ys,n||{}),r;try{r=Lr.readFileSync(t,"utf8")}catch{return[]}let o=r.split(`
151
+ `),i=[];for(let d=0;d<o.length;d++){let f=o[d].toLowerCase(),p=0;for(let m of e)f.indexOf(m)>=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 m=f;m<=p;m++)c.has(m)||(c.add(m),u.push({no:m+1,text:WA(o[m],s.maxLineLen),match:m===d.i}))}return u}function KA(t,e,n){let s=Date.now(),r=Object.assign({},Ys,n||{}),o=String(e??"").trim();if(!o)throw new Error("\u641C\u7D22\u8BCD\u4E3A\u7A7A");let i=Array.from(new Set(ef(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=BA(t,r),l=Ww(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 m=p[0],h=a.index.docs.get(m);if(!h)continue;let y=Kw(h.abs,i,r);y.length&&f.push({path:m,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 HA(t,e){let n=Object.assign({},Ys,e||{}),s=t||{},r="\u626B\u63CF "+(s.files||0)+" \u4E2A\u6587\u4EF6\uFF08\u7D22\u5F15 "+(s.indexed||0)+`\uFF09
152
152
  \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+`
153
153
  \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(`
154
- `)}function zA(t){let e=vo.get(t);return e?{docs:e.docs.size,tokens:e.inverted.size,postings:RA(e.inverted),avgLen:Number(e.avgLen.toFixed(1)),builtAt:e.builtAt}:{docs:0,tokens:0,postings:0,avgLen:0,builtAt:0}}Hw.exports={DEFAULTS:Vs,tokenize:ef,scanFiles:Bw,termFreq:Uw,search:KA,format:HA,stats:zA,reset:function(t){t?vo.delete(t):vo.clear()},_CACHE:vo,_splitIdentifier:Rw,_looksBinary:qw,_scoreFiles:Ww,_findLines:Kw}});var Vw=Q((DL,Xw)=>{var GA=require("path"),Ys={prefixLines:120,suffixLines:40,maxChars:6e3,maxCompletionChars:4e3,minOverlap:4},JA={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 Gw(t){let e=GA.extname(String(t??"")).replace(".","").toLowerCase();return JA[e]||""}function Jw(t,e){let n=String(t).split(`
154
+ `)}function zA(t){let e=vo.get(t);return e?{docs:e.docs.size,tokens:e.inverted.size,postings:RA(e.inverted),avgLen:Number(e.avgLen.toFixed(1)),builtAt:e.builtAt}:{docs:0,tokens:0,postings:0,avgLen:0,builtAt:0}}Hw.exports={DEFAULTS:Ys,tokenize:ef,scanFiles:Bw,termFreq:Uw,search:KA,format:HA,stats:zA,reset:function(t){t?vo.delete(t):vo.clear()},_CACHE:vo,_splitIdentifier:Rw,_looksBinary:qw,_scoreFiles:Ww,_findLines:Kw}});var Vw=Q((DL,Xw)=>{var GA=require("path"),Zs={prefixLines:120,suffixLines:40,maxChars:6e3,maxCompletionChars:4e3,minOverlap:4},JA={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 Gw(t){let e=GA.extname(String(t??"")).replace(".","").toLowerCase();return JA[e]||""}function Jw(t,e){let n=String(t).split(`
155
155
  `);return n.length<=e?String(t):n.slice(n.length-e).join(`
156
156
  `)}function $w(t,e){let n=String(t).split(`
157
157
  `);return n.length<=e?String(t):n.slice(0,e).join(`
158
- `)}function $A(t){let e=Object.assign({},Ys,t||{}),n=Number(e.maxChars)>0?Math.floor(Number(e.maxChars)):Ys.maxChars,s=Number(e.prefixLines)>0?Math.floor(Number(e.prefixLines)):Ys.prefixLines,r=Number(e.suffixLines)>=0?Math.floor(Number(e.suffixLines)):Ys.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=Jw(l,s),c=$w(c,r),l.length>n&&(l=l.slice(l.length-n)),!l.trim()){let u=Gw(e.path);u&&(l=u+String(e.path||"")+`
159
- `)}return{prompt:l,suffix:c,offset:a,chars:l.length}}function XA(t,e,n){let s=Object.assign({},Ys,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)||Ys.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):Ys.maxCompletionChars;return r.length>a&&(r=r.slice(0,a)),r}Xw.exports={DEFAULTS:Ys,buildPrompt:$A,trimCompletion:XA,commentFor:Gw,_lastLines:Jw,_firstLines:$w}});var cb=Q((LL,lb)=>{var FL=require("path"),nb=new Set(["env","nohup","time","nice","ionice","command","xargs","watch","timeout","stdbuf","caffeinate"]),Yw=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"]]),VA=new Set(["sh","bash","zsh","dash","fish","csh","tcsh","ksh","ash","mksh"]),YA=new Set(["node","nodejs","python","python2","python3","ruby","perl","php","osascript","deno","bun","tsx","ts-node"]),ZA=new Set(["-v","-V","--version","-h","--help","-?"]),Zw=new Set(["status","log","show","diff","blame","grep","ls-files","ls-tree","rev-parse","describe","shortlog","cat-file","reflog","version","help","whatchanged"]),QA=new Set(["branch","tag","remote","stash","config"]),Qw=/^(--set-upstream|--unset-upstream|--delete|--move|--copy|--edit-description|--set-url|--add|--remove|--prune|--update|--rename|--progress|--track|--no-track)/,eO=new Set(["npm","yarn","pnpm"]),eb=new Set(["ls","list","ll","la","view","info","outdated","why","ping","search","help"]);function Li(t){let e=String(t??"");if(!e||e===".")return e;let n=e.split("/");return n[n.length-1]||e}function nf(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===`
160
- `){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 sb(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 rb(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 tO(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(!ZA.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 nO(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(Zw.has(n))return null;if(!QA.has(n))return{reason:"git "+n+" \u4E0D\u5C5E\u4E8E\u53EA\u8BFB\u5B50\u547D\u4EE4\uFF08\u53EF\u7528\uFF1A"+Array.from(Zw).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 Qw.test(i)||/^-[dDmMcC]$/.test(i)}))return{reason:"git branch "+(s.find(function(i){return Qw.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 sO(t,e){let n=e.find(function(s){return!/^-/.test(s)});return n?eb.has(n)?null:{reason:t+" "+n+" \u4F1A\u5199\u6587\u4EF6\u6216\u6539\u4F9D\u8D56\uFF08Plan \u6A21\u5F0F\u53EA\u5141\u8BB8 "+Array.from(eb).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 ob(t){let e=sb(t).trim();if(!e)return null;let n=rb(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=Li(s[0]);if(!nb.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=Li(s[0]),i=s.slice(1),a=t.trim();if(VA.has(o))return{reason:o+" -c \u53EF\u4EE5\u6267\u884C\u4EFB\u610F\u547D\u4EE4\uFF0C\u65E0\u6CD5\u9010\u6761\u6821\u9A8C"};if(Yw.has(o))return{reason:Yw.get(o)};if(YA.has(o)){let l=tO(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=nO(i);if(l)return{reason:l.reason}}if(eO.has(o)){let l=sO(o,i);if(l)return{reason:l.reason}}return null}function rO(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=nf(e);if(!n.length)return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};for(let s of n){let r=ob(s);if(r)return{ok:!1,reason:r.reason,segment:r.segment||s.trim()}}return{ok:!0}}var oO=function(){try{return Bs().SKIP_DIRS}catch{return[]}}(),ib=Object.create(null);for(let t of oO)ib[String(t).toLowerCase()]=1;var ab=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"]),iO=new Set(["powershell","pwsh","cmd","command","bash","sh","zsh","dash","fish"]),aO=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob|g)$/i,lO=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob)=/i,cO=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex|not)$/i,uO=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex)=/i,dO=new RegExp("(?:^|[^A-Za-z0-9_-])("+Array.from(ab).join("|")+")(?![A-Za-z0-9_-])","i");function tf(t){return String(t??"").replace(/^["']+/,"").replace(/["']+$/,"")}function fO(t){let e=tf(t);if(!/[/\\]/.test(e))return"";let n=e.replace(/\\/g,"/").split("/");for(let s of n){let r=s.replace(/["']+$/,"").toLowerCase();if(r&&ib[r])return r}return""}function tb(t,e){let n=!1;for(let s of t){if(n){n=!1;continue}if(lO.test(s))continue;if(aO.test(s)){n=!0;continue}if(e){if(uO.test(s))continue;if(cO.test(s)){n=!0;continue}}let r=fO(s);if(r)return r}return""}function pO(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=tf(n[s]);if(/^-/.test(a)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(a)||/^\d+(\.\d+)?[smhd]?$/.test(a)){s++;continue}if(nb.has(Li(a))){s++;continue}break}if(s>=n.length)return null;let r=Li(tf(n[s])).toLowerCase(),o=r==="find"||/(?:^|[^A-Za-z0-9_-])find(?![A-Za-z0-9_-])/i.test(e);if(iO.has(r)){if(!dO.test(e))return null;let a=tb(n.slice(s+1),o);return a?{seg:a,command:r}:null}if(!ab.has(r))return null;let i=tb(n.slice(s+1),o);return i?{seg:i,command:r}:null}function mO(t){let e=String(t??"");if(!e.trim())return null;for(let n of nf(e)){let s=pO(n);if(s)return{seg:s.seg,command:s.command,segment:n.trim()}}return null}lb.exports={check:rO,pathGuard:mO,_splitSegments:nf,_stripQuotes:sb,_redirectTarget:rb,_checkSegment:ob,_baseOf:Li}});var gb=Q((RL,of)=>{var rs=require("fs"),Zs=require("path"),ub="*** Begin Patch",db="*** End Patch",fb="*** Add File:",pb="*** Update File:",mb="*** Delete File:",hO="@@";function dn(t){let n=String(t??"").split(`
161
- `),s=-1,r=-1;for(let c=0;c<n.length;c++){let u=n[c].trim();if(s<0&&u===ub){s=c;continue}if(u===db){r=c;break}}if(s<0)return{ops:[],error:"\u7F3A\u5C11 "+ub+" \u8D77\u59CB\u6807\u8BB0"};if(r<0)return{ops:[],error:"\u7F3A\u5C11 "+db+" \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(fb)===0){let f=d.slice(fb.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(pb)===0){let f=d.slice(pb.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(mb)===0){let f=d.slice(mb.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(hO)===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)===" "?_o(i).seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(_o(i).seq.push({k:"del",v:u.slice(1)}),_o(i).del.push(u.slice(1))):u.charAt(0)==="+"?(_o(i).seq.push({k:"add",v:u.slice(1)}),_o(i).add.push(u.slice(1))):d===""?_o(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 _o(t){return t.chunks.length||t.chunks.push({context:[],del:[],add:[]}),t.chunks[t.chunks.length-1]}function ss(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 Zs.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(rs.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(`
158
+ `)}function $A(t){let e=Object.assign({},Zs,t||{}),n=Number(e.maxChars)>0?Math.floor(Number(e.maxChars)):Zs.maxChars,s=Number(e.prefixLines)>0?Math.floor(Number(e.prefixLines)):Zs.prefixLines,r=Number(e.suffixLines)>=0?Math.floor(Number(e.suffixLines)):Zs.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=Jw(l,s),c=$w(c,r),l.length>n&&(l=l.slice(l.length-n)),!l.trim()){let u=Gw(e.path);u&&(l=u+String(e.path||"")+`
159
+ `)}return{prompt:l,suffix:c,offset:a,chars:l.length}}function XA(t,e,n){let s=Object.assign({},Zs,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)||Zs.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):Zs.maxCompletionChars;return r.length>a&&(r=r.slice(0,a)),r}Xw.exports={DEFAULTS:Zs,buildPrompt:$A,trimCompletion:XA,commentFor:Gw,_lastLines:Jw,_firstLines:$w}});var cb=Q((LL,lb)=>{var FL=require("path"),nb=new Set(["env","nohup","time","nice","ionice","command","xargs","watch","timeout","stdbuf","caffeinate"]),Yw=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"]]),VA=new Set(["sh","bash","zsh","dash","fish","csh","tcsh","ksh","ash","mksh"]),YA=new Set(["node","nodejs","python","python2","python3","ruby","perl","php","osascript","deno","bun","tsx","ts-node"]),ZA=new Set(["-v","-V","--version","-h","--help","-?"]),Zw=new Set(["status","log","show","diff","blame","grep","ls-files","ls-tree","rev-parse","describe","shortlog","cat-file","reflog","version","help","whatchanged"]),QA=new Set(["branch","tag","remote","stash","config"]),Qw=/^(--set-upstream|--unset-upstream|--delete|--move|--copy|--edit-description|--set-url|--add|--remove|--prune|--update|--rename|--progress|--track|--no-track)/,eO=new Set(["npm","yarn","pnpm"]),eb=new Set(["ls","list","ll","la","view","info","outdated","why","ping","search","help"]);function Li(t){let e=String(t??"");if(!e||e===".")return e;let n=e.split("/");return n[n.length-1]||e}function nf(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===`
160
+ `){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 sb(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 rb(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 tO(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(!ZA.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 nO(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(Zw.has(n))return null;if(!QA.has(n))return{reason:"git "+n+" \u4E0D\u5C5E\u4E8E\u53EA\u8BFB\u5B50\u547D\u4EE4\uFF08\u53EF\u7528\uFF1A"+Array.from(Zw).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 Qw.test(i)||/^-[dDmMcC]$/.test(i)}))return{reason:"git branch "+(s.find(function(i){return Qw.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 sO(t,e){let n=e.find(function(s){return!/^-/.test(s)});return n?eb.has(n)?null:{reason:t+" "+n+" \u4F1A\u5199\u6587\u4EF6\u6216\u6539\u4F9D\u8D56\uFF08Plan \u6A21\u5F0F\u53EA\u5141\u8BB8 "+Array.from(eb).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 ob(t){let e=sb(t).trim();if(!e)return null;let n=rb(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=Li(s[0]);if(!nb.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=Li(s[0]),i=s.slice(1),a=t.trim();if(VA.has(o))return{reason:o+" -c \u53EF\u4EE5\u6267\u884C\u4EFB\u610F\u547D\u4EE4\uFF0C\u65E0\u6CD5\u9010\u6761\u6821\u9A8C"};if(Yw.has(o))return{reason:Yw.get(o)};if(YA.has(o)){let l=tO(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=nO(i);if(l)return{reason:l.reason}}if(eO.has(o)){let l=sO(o,i);if(l)return{reason:l.reason}}return null}function rO(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=nf(e);if(!n.length)return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};for(let s of n){let r=ob(s);if(r)return{ok:!1,reason:r.reason,segment:r.segment||s.trim()}}return{ok:!0}}var oO=function(){try{return Us().SKIP_DIRS}catch{return[]}}(),ib=Object.create(null);for(let t of oO)ib[String(t).toLowerCase()]=1;var ab=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"]),iO=new Set(["powershell","pwsh","cmd","command","bash","sh","zsh","dash","fish"]),aO=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob|g)$/i,lO=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob)=/i,cO=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex|not)$/i,uO=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex)=/i,dO=new RegExp("(?:^|[^A-Za-z0-9_-])("+Array.from(ab).join("|")+")(?![A-Za-z0-9_-])","i");function tf(t){return String(t??"").replace(/^["']+/,"").replace(/["']+$/,"")}function fO(t){let e=tf(t);if(!/[/\\]/.test(e))return"";let n=e.replace(/\\/g,"/").split("/");for(let s of n){let r=s.replace(/["']+$/,"").toLowerCase();if(r&&ib[r])return r}return""}function tb(t,e){let n=!1;for(let s of t){if(n){n=!1;continue}if(lO.test(s))continue;if(aO.test(s)){n=!0;continue}if(e){if(uO.test(s))continue;if(cO.test(s)){n=!0;continue}}let r=fO(s);if(r)return r}return""}function pO(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=tf(n[s]);if(/^-/.test(a)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(a)||/^\d+(\.\d+)?[smhd]?$/.test(a)){s++;continue}if(nb.has(Li(a))){s++;continue}break}if(s>=n.length)return null;let r=Li(tf(n[s])).toLowerCase(),o=r==="find"||/(?:^|[^A-Za-z0-9_-])find(?![A-Za-z0-9_-])/i.test(e);if(iO.has(r)){if(!dO.test(e))return null;let a=tb(n.slice(s+1),o);return a?{seg:a,command:r}:null}if(!ab.has(r))return null;let i=tb(n.slice(s+1),o);return i?{seg:i,command:r}:null}function mO(t){let e=String(t??"");if(!e.trim())return null;for(let n of nf(e)){let s=pO(n);if(s)return{seg:s.seg,command:s.command,segment:n.trim()}}return null}lb.exports={check:rO,pathGuard:mO,_splitSegments:nf,_stripQuotes:sb,_redirectTarget:rb,_checkSegment:ob,_baseOf:Li}});var gb=Q((RL,of)=>{var os=require("fs"),Qs=require("path"),ub="*** Begin Patch",db="*** End Patch",fb="*** Add File:",pb="*** Update File:",mb="*** Delete File:",hO="@@";function dn(t){let n=String(t??"").split(`
161
+ `),s=-1,r=-1;for(let c=0;c<n.length;c++){let u=n[c].trim();if(s<0&&u===ub){s=c;continue}if(u===db){r=c;break}}if(s<0)return{ops:[],error:"\u7F3A\u5C11 "+ub+" \u8D77\u59CB\u6807\u8BB0"};if(r<0)return{ops:[],error:"\u7F3A\u5C11 "+db+" \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(fb)===0){let f=d.slice(fb.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(pb)===0){let f=d.slice(pb.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(mb)===0){let f=d.slice(mb.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(hO)===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)===" "?_o(i).seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(_o(i).seq.push({k:"del",v:u.slice(1)}),_o(i).del.push(u.slice(1))):u.charAt(0)==="+"?(_o(i).seq.push({k:"add",v:u.slice(1)}),_o(i).add.push(u.slice(1))):d===""?_o(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 _o(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 Qs.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(`
162
162
  `)+(l.lines.length?`
163
- `:"")});continue}if(l.type==="delete"){if(!rs.existsSync(u))return{ok:!1,error:"Delete File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};if(!rs.statSync(u).isFile())return{ok:!1,error:"Delete File \u76EE\u6807\u4E0D\u662F\u6587\u4EF6\uFF1A"+c};let d="";try{d=rs.readFileSync(u,"utf8")}catch{d=""}a.push({type:"delete",rel:c,abs:u,before:d});continue}if(l.type==="update"){if(!rs.existsSync(u))return{ok:!1,error:"Update File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};let d;try{d=rs.readFileSync(u,"utf8")}catch(p){return{ok:!1,error:"\u8BFB\u53D6\u5931\u8D25 "+c+"\uFF1A"+p.message}}let f=hb(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 hb(t,e){if(!e.length)return{error:"Update File \u6CA1\u6709\u4EFB\u4F55 @@ \u5757"};let n=t.split(`
163
+ `:"")});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=hb(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 hb(t,e){if(!e.length)return{error:"Update File \u6CA1\u6709\u4EFB\u4F55 @@ \u5757"};let n=t.split(`
164
164
  `),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=gO(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(`
165
- `),changed:s}}function gO(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 sf(t,e,n){let s=ss(t,e);if(!s.ok)return{ok:!1,error:s.error};let r=[];for(let o of s.plan)o.type==="add"?(rs.mkdirSync(Zs.dirname(o.abs),{recursive:!0}),rs.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"add"})):o.type==="update"?(rs.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"update"})):o.type==="delete"&&(rs.rmSync(o.abs,{force:!0}),r.push({rel:o.rel,action:"delete"}));return{ok:!0,results:r}}function rf(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
165
+ `),changed:s}}function gO(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 sf(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(Qs.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 rf(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
166
166
  `+n.join(`
167
- `)}of.exports={parsePatch:dn,validatePatch:ss,applyChunks:hb,applyPatch:sf,formatPatchResult:rf};require.main===of&&yO();function yO(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Zs.join(t.tmpdir(),"luban-patch-")),s=function(K,W){let B=Zs.join(n,K);e.mkdirSync(Zs.dirname(B),{recursive:!0}),e.writeFileSync(B,W)},r=function(K){return e.readFileSync(Zs.join(n,K),"utf8")};s("a.js",`const a = 1;
167
+ `)}of.exports={parsePatch:dn,validatePatch:rs,applyChunks:hb,applyPatch:sf,formatPatchResult:rf};require.main===of&&yO();function yO(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Qs.join(t.tmpdir(),"luban-patch-")),s=function(K,W){let B=Qs.join(n,K);e.mkdirSync(Qs.dirname(B),{recursive:!0}),e.writeFileSync(B,W)},r=function(K){return e.readFileSync(Qs.join(n,K),"utf8")};s("a.js",`const a = 1;
168
168
  const b = 2;
169
169
  const c = 3;
170
170
  `),s("old.js",`legacy
171
171
  `);let o=0,i=0,a=function(K,W,B){W?(o++,console.log(" ok "+K)):(i++,console.log(" FAIL "+K+(B?" :: "+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(`
172
- `),c=dn(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=ss(n,c);a("validate \u901A\u8FC7",u.ok,u.error),a("update \u5185\u5BB9\u6B63\u786E",u.plan[1].content===`const a = 1;
172
+ `),c=dn(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;
173
173
  const b = 20;
174
174
  const c = 3;
175
175
  `,JSON.stringify(u.plan[1]&&u.plan[1].content));let d=sf(n,c);a("apply \u6210\u529F",d.ok,d.error),a("add \u843D\u76D8",r("new.js")===`const fresh = true;
@@ -178,7 +178,7 @@ const two = 2;
178
178
  `),a("update \u843D\u76D8",r("a.js")===`const a = 1;
179
179
  const b = 20;
180
180
  const c = 3;
181
- `),a("delete \u843D\u76D8",!e.existsSync(Zs.join(n,"old.js"))),s("multi.js",`l1
181
+ `),a("delete \u843D\u76D8",!e.existsSync(Qs.join(n,"old.js"))),s("multi.js",`l1
182
182
  l2
183
183
  l3
184
184
  l4
@@ -192,30 +192,30 @@ L5
192
192
  `,JSON.stringify(r("multi.js"))),s("ctx.js",`alpha
193
193
  beta
194
194
  `);let m=["*** Begin Patch","*** Update File: ctx.js","@@"," alpha","-gamma","+delta","*** End Patch"].join(`
195
- `),h=ss(n,dn(m));a("\u4E0A\u4E0B\u6587\u627E\u4E0D\u5230\u62A5\u9519",!h.ok&&/找不到/.test(h.error),h.error),a("\u5931\u8D25\u4E0D\u843D\u76D8",r("ctx.js")===`alpha
195
+ `),h=rs(n,dn(m));a("\u4E0A\u4E0B\u6587\u627E\u4E0D\u5230\u62A5\u9519",!h.ok&&/找不到/.test(h.error),h.error),a("\u5931\u8D25\u4E0D\u843D\u76D8",r("ctx.js")===`alpha
196
196
  beta
197
- `);let k=ss(n,dn(`*** Begin Patch
197
+ `);let k=rs(n,dn(`*** Begin Patch
198
198
  *** Add File: a.js
199
199
  +x
200
- *** End Patch`));a("Add \u5DF2\u5B58\u5728\u62A5\u9519",!k.ok&&/已存在/.test(k.error),k.error);let g=ss(n,dn(`*** Begin Patch
200
+ *** End Patch`));a("Add \u5DF2\u5B58\u5728\u62A5\u9519",!k.ok&&/已存在/.test(k.error),k.error);let g=rs(n,dn(`*** Begin Patch
201
201
  *** Delete File: nope.js
202
202
  *** End Patch`));a("Delete \u4E0D\u5B58\u5728\u62A5\u9519",!g.ok&&/不存在/.test(g.error),g.error),a("\u7F3A Begin \u62A5\u9519",!!dn(`*** Add File: x
203
203
  +y`).error),a("\u7F3A End \u62A5\u9519",!!dn(`*** Begin Patch
204
204
  *** Add File: x
205
205
  +y`).error),a("\u7A7A patch \u62A5\u9519",!!dn(`*** Begin Patch
206
- *** End Patch`).error);let w=ss(n,dn("```patch\n*** Begin Patch\n*** Add File: fenced.js\n+ok\n*** End Patch\n```"));a("\u5BB9\u9519\u4EE3\u7801\u56F4\u680F",w.ok,w.error);let _=ss(n,dn(`*** Begin Patch
206
+ *** End Patch`).error);let w=rs(n,dn("```patch\n*** Begin Patch\n*** Add File: fenced.js\n+ok\n*** End Patch\n```"));a("\u5BB9\u9519\u4EE3\u7801\u56F4\u680F",w.ok,w.error);let _=rs(n,dn(`*** Begin Patch
207
207
  *** Add File: dup.js
208
208
  +a
209
209
  *** Add File: dup.js
210
210
  +b
211
211
  *** End Patch`));a("\u8DEF\u5F84\u91CD\u590D\u62A5\u9519",!_.ok&&/重复/.test(_.error),_.error),s("guard.js",`safe
212
- `);let A=ss(n,dn(`*** Begin Patch
212
+ `);let A=rs(n,dn(`*** Begin Patch
213
213
  *** Update File: guard.js
214
214
  @@
215
215
  safe
216
216
  *** Delete File: old2.js
217
- *** End Patch`),{resolve:function(K){if(K==="old2.js")throw new Error("\u8DEF\u5F84\u8D8A\u754C\uFF1A"+K);return Zs.join(n,K)}});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
218
- `);let F=ss(n,dn(`*** Begin Patch
217
+ *** End Patch`),{resolve:function(K){if(K==="old2.js")throw new Error("\u8DEF\u5F84\u8D8A\u754C\uFF1A"+K);return Qs.join(n,K)}});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
218
+ `);let F=rs(n,dn(`*** Begin Patch
219
219
  *** Delete File: del.js
220
220
  *** End Patch`));a("delete \u5E26 before \u5907\u4EFD",F.ok&&F.plan[0].before===`keep me
221
221
  `,JSON.stringify(F.plan[0]&&F.plan[0].before)),a("format \u6210\u529F",/成功/.test(rf(d))),a("format \u5931\u8D25",/失败/.test(rf({ok:!1,error:"x"}))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
@@ -223,13 +223,13 @@ patch selftest: `+o+" passed, "+i+" failed"),process.exit(i?1:0)}});var bb=Q((qL
223
223
  `+o.join(`
224
224
  `);return r.total>o.length&&(i+=`
225
225
  ...[\u8BCA\u65AD\u5DF2\u8FBE\u4E0A\u9650 `+o.length+" \u6761\uFF0C\u5DF2\u622A\u65AD\uFF1B\u5148\u4FEE error \u518D\u91CD\u8BFB]"),i}function af(t){return Ri(t).error>0}lf.exports={normalizeDiag:To,summarize:Ri,formatLints:Ul,hasErrors:af,SEVERITY:wb};require.main===lf&&wO();function wO(){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,m,h){return{severity:u,range:{start:{line:d,character:f},end:{line:d,character:f+3}},message:p,source:m,code:h}},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=Ri(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=To(s(0,9,0,"x"));n("\u884C\u53F7\u8F6C 1 \u57FA",i.line===10&&i.col===1,JSON.stringify(i));let a=Ul(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(Ul({}))),n("\u7A7A\u8BCA\u65AD hasErrors false",af({})===!1),n("\u6709 error \u65F6 hasErrors true",af(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=Ul(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",To(null)===null),n("normalize \u7F3A range \u5B89\u5168",To({message:"x"}).severity==="error"),n("summarize undefined \u5B89\u5168",Ri(void 0).total===0),console.log(`
226
- lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var _b=Q((BL,vb)=>{var qt=require("fs"),bO=require("os"),Qs=require("path"),Wl=Qs.join(bO.homedir(),".luban","attachments"),kO=4,Co=5*1024*1024,xO=Math.ceil(Co*4/3)+64,SO=2e3,cf={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},kb={png:"image/png",jpg:"image/jpeg",webp:"image/webp",gif:"image/gif"},vO=/^[A-Za-z0-9_-]+$/,uf=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,_O=/^data:(image\/(?:png|jpeg|webp|gif));base64,([A-Za-z0-9+/=\s]+)$/;function qi(t){return(t<10?"0":"")+t}function TO(t){let e=t||new Date;return e.getFullYear()+qi(e.getMonth()+1)+qi(e.getDate())+"-"+qi(e.getHours())+qi(e.getMinutes())+qi(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function xb(t){let e=_O.exec(String(t??""));return e?{mime:e[1],b64:e[2].replace(/\s+/g,"")}:null}function Sb(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file);if(!uf.test(e)||e.length>120)return null;let n=String(t.mime==null?"":t.mime);if(!cf[n]||e.slice(e.lastIndexOf(".")+1)!==cf[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0||s>Co?null:{file:e,mime:n,bytes:s}}function Mo(t){let e=String(t??"");return vO.test(e)?Qs.join(Wl,e):""}function MO(t,e){let n=Mo(t);if(!n)return null;let s=String(e??"");if(s.length>xO)return null;let r=xb(s);if(!r)return null;let o=Buffer.from(r.b64,"base64");if(!o.length||o.length>Co)return null;let i=TO()+"."+cf[r.mime];try{qt.mkdirSync(n,{recursive:!0,mode:448});let a=Qs.join(n,i),l=a+".tmp-"+Math.random().toString(36).slice(2,6);return qt.writeFileSync(l,o,{mode:384}),qt.renameSync(l,a),{file:i,mime:r.mime,bytes:o.length}}catch{return null}}function CO(t,e){let n=Mo(t),s=Sb(e);if(!n||!s)return"";try{let r=Qs.join(n,s.file),o=qt.statSync(r);return!o.isFile()||o.size<=0||o.size>Co?"":"data:"+s.mime+";base64,"+qt.readFileSync(r).toString("base64")}catch{return""}}function AO(t,e){let n=Mo(t),s=String(e??"");if(!n)return{ok:!1,error:"bad_session"};if(!uf.test(s)||s.length>120)return{ok:!1,error:"bad_file"};let r=kb[s.slice(s.lastIndexOf(".")+1)]||"";if(!r)return{ok:!1,error:"bad_file"};try{let o=Qs.join(n,s),i=qt.statSync(o);return!i.isFile()||i.size<=0?{ok:!1,error:"missing"}:i.size>Co?{ok:!1,error:"too_large"}:{ok:!0,mime:r,dataUrl:"data:"+r+";base64,"+qt.readFileSync(o).toString("base64")}}catch{return{ok:!1,error:"missing"}}}function OO(t){let e=Mo(t);if(!e)return{removed:0};let n=0;try{n=qt.readdirSync(e).length}catch{n=0}try{qt.rmSync(e,{recursive:!0,force:!0})}catch{}return{removed:n}}function EO(t,e){let n=Mo(t),s=Mo(e);if(!n||!s||n===s)return{copied:0,failed:0};let r=[];try{r=qt.readdirSync(n)}catch{return{copied:0,failed:0}}let o=0,i=0;try{qt.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(!uf.test(a)||a.length>120||!kb[l])continue;let c=Qs.join(n,a),u=Qs.join(s,a);try{qt.copyFileSync(c,u);try{qt.chmodSync(u,384)}catch{}o++}catch{i++}}return{copied:o,failed:i}}function PO(t){let e=t instanceof Set?t:new Set(t||[]),n=[];try{n=qt.readdirSync(Wl,{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{qt.rmSync(Qs.join(Wl,o.name),{recursive:!0,force:!0}),s++}catch{r++}}return{removed:s,kept:r}}function jO(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}vb.exports={ATTACH_DIR:Wl,MAX_IMAGES:kO,MAX_BYTES:Co,IMG_CHARS:SO,parseDataUrl:xb,validateEntry:Sb,saveImage:MO,readDataUrl:CO,readPreview:AO,removeSession:OO,copySession:EO,sweepOrphans:PO,toContent:jO}});var Bb=Q((UL,qb)=>{var er=require("fs"),NO=require("net"),Tb=require("os"),_s=require("path"),IO=require("http"),Cb=require("crypto"),{spawn:DO,execSync:FO}=require("child_process"),Ab=64*1024*1024,Ob=25e3,Ui=15e3,df=200;function Eb(){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&&_s.join(r,"Google","Chrome","Application","chrome.exe")),n(r&&_s.join(r,"Microsoft","Edge","Application","msedge.exe")),n(r&&_s.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(_s.delimiter).filter(Boolean);for(let o of r)for(let i of s)n(_s.join(o,i))}return e}function Pb(t){let e=String(t||"");if(e.indexOf("/snap/")===0)return!0;try{let n=er.realpathSync(e);return n==="/usr/bin/snap"||/\/snapd\/snapd$/.test(n)}catch{return/\/bin\/snap$/.test(e)}}function jb(t){return Pb(t)?_s.join(Tb.homedir(),"luban-browser"):Tb.tmpdir()}function Nb(t){let e=String(t??(process.env&&process.env.LUBAN_CHROME_PATH||"")).trim();if(e){try{if(er.existsSync(e))return{path:e,tried:[e]}}catch{}return{path:"",tried:[e]}}let n=Eb();for(let s of n)try{if(er.existsSync(s))return{path:s,tried:n}}catch{}return{path:"",tried:n}}function Ib(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=Cb.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 Db(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>Ab)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 ff=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=Db(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(Ib(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 LO(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=Cb.randomBytes(16).toString("base64"),a=NO.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||Ui)+"ms\uFF09"))}},e||Ui),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
226
+ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var _b=Q((BL,vb)=>{var qt=require("fs"),bO=require("os"),er=require("path"),Wl=er.join(bO.homedir(),".luban","attachments"),kO=4,Co=5*1024*1024,xO=Math.ceil(Co*4/3)+64,SO=2e3,cf={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},kb={png:"image/png",jpg:"image/jpeg",webp:"image/webp",gif:"image/gif"},vO=/^[A-Za-z0-9_-]+$/,uf=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,_O=/^data:(image\/(?:png|jpeg|webp|gif));base64,([A-Za-z0-9+/=\s]+)$/;function qi(t){return(t<10?"0":"")+t}function TO(t){let e=t||new Date;return e.getFullYear()+qi(e.getMonth()+1)+qi(e.getDate())+"-"+qi(e.getHours())+qi(e.getMinutes())+qi(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function xb(t){let e=_O.exec(String(t??""));return e?{mime:e[1],b64:e[2].replace(/\s+/g,"")}:null}function Sb(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file);if(!uf.test(e)||e.length>120)return null;let n=String(t.mime==null?"":t.mime);if(!cf[n]||e.slice(e.lastIndexOf(".")+1)!==cf[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0||s>Co?null:{file:e,mime:n,bytes:s}}function Mo(t){let e=String(t??"");return vO.test(e)?er.join(Wl,e):""}function MO(t,e){let n=Mo(t);if(!n)return null;let s=String(e??"");if(s.length>xO)return null;let r=xb(s);if(!r)return null;let o=Buffer.from(r.b64,"base64");if(!o.length||o.length>Co)return null;let i=TO()+"."+cf[r.mime];try{qt.mkdirSync(n,{recursive:!0,mode:448});let a=er.join(n,i),l=a+".tmp-"+Math.random().toString(36).slice(2,6);return qt.writeFileSync(l,o,{mode:384}),qt.renameSync(l,a),{file:i,mime:r.mime,bytes:o.length}}catch{return null}}function CO(t,e){let n=Mo(t),s=Sb(e);if(!n||!s)return"";try{let r=er.join(n,s.file),o=qt.statSync(r);return!o.isFile()||o.size<=0||o.size>Co?"":"data:"+s.mime+";base64,"+qt.readFileSync(r).toString("base64")}catch{return""}}function AO(t,e){let n=Mo(t),s=String(e??"");if(!n)return{ok:!1,error:"bad_session"};if(!uf.test(s)||s.length>120)return{ok:!1,error:"bad_file"};let r=kb[s.slice(s.lastIndexOf(".")+1)]||"";if(!r)return{ok:!1,error:"bad_file"};try{let o=er.join(n,s),i=qt.statSync(o);return!i.isFile()||i.size<=0?{ok:!1,error:"missing"}:i.size>Co?{ok:!1,error:"too_large"}:{ok:!0,mime:r,dataUrl:"data:"+r+";base64,"+qt.readFileSync(o).toString("base64")}}catch{return{ok:!1,error:"missing"}}}function OO(t){let e=Mo(t);if(!e)return{removed:0};let n=0;try{n=qt.readdirSync(e).length}catch{n=0}try{qt.rmSync(e,{recursive:!0,force:!0})}catch{}return{removed:n}}function EO(t,e){let n=Mo(t),s=Mo(e);if(!n||!s||n===s)return{copied:0,failed:0};let r=[];try{r=qt.readdirSync(n)}catch{return{copied:0,failed:0}}let o=0,i=0;try{qt.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(!uf.test(a)||a.length>120||!kb[l])continue;let c=er.join(n,a),u=er.join(s,a);try{qt.copyFileSync(c,u);try{qt.chmodSync(u,384)}catch{}o++}catch{i++}}return{copied:o,failed:i}}function PO(t){let e=t instanceof Set?t:new Set(t||[]),n=[];try{n=qt.readdirSync(Wl,{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{qt.rmSync(er.join(Wl,o.name),{recursive:!0,force:!0}),s++}catch{r++}}return{removed:s,kept:r}}function jO(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}vb.exports={ATTACH_DIR:Wl,MAX_IMAGES:kO,MAX_BYTES:Co,IMG_CHARS:SO,parseDataUrl:xb,validateEntry:Sb,saveImage:MO,readDataUrl:CO,readPreview:AO,removeSession:OO,copySession:EO,sweepOrphans:PO,toContent:jO}});var Bb=Q((UL,qb)=>{var tr=require("fs"),NO=require("net"),Tb=require("os"),Ts=require("path"),IO=require("http"),Cb=require("crypto"),{spawn:DO,execSync:FO}=require("child_process"),Ab=64*1024*1024,Ob=25e3,Ui=15e3,df=200;function Eb(){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&&Ts.join(r,"Google","Chrome","Application","chrome.exe")),n(r&&Ts.join(r,"Microsoft","Edge","Application","msedge.exe")),n(r&&Ts.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(Ts.delimiter).filter(Boolean);for(let o of r)for(let i of s)n(Ts.join(o,i))}return e}function Pb(t){let e=String(t||"");if(e.indexOf("/snap/")===0)return!0;try{let n=tr.realpathSync(e);return n==="/usr/bin/snap"||/\/snapd\/snapd$/.test(n)}catch{return/\/bin\/snap$/.test(e)}}function jb(t){return Pb(t)?Ts.join(Tb.homedir(),"luban-browser"):Tb.tmpdir()}function Nb(t){let e=String(t??(process.env&&process.env.LUBAN_CHROME_PATH||"")).trim();if(e){try{if(tr.existsSync(e))return{path:e,tried:[e]}}catch{}return{path:"",tried:[e]}}let n=Eb();for(let s of n)try{if(tr.existsSync(s))return{path:s,tried:n}}catch{}return{path:"",tried:n}}function Ib(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=Cb.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 Db(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>Ab)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 ff=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=Db(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(Ib(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 LO(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=Cb.randomBytes(16).toString("base64"),a=NO.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||Ui)+"ms\uFF09"))}},e||Ui),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
227
227
  `)+`\r
228
228
  \r
229
229
  `)});let d=function(f){u=Buffer.concat([u,f]);let p=u.indexOf(`\r
230
230
  \r
231
231
  `);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 m=u.slice(0,p).toString("utf8");if(m.indexOf(" 101 ")<0){l=!0,clearTimeout(c),a.destroy(),s(new Error("CDP WebSocket \u63E1\u624B\u88AB\u62D2\u7EDD\uFF1A"+m.split(`\r
232
- `)[0]));return}l=!0,clearTimeout(c);let h=new ff(a),y=u.slice(p+4);y.length&&h._feed(y),n(h)};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 pf=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||Ui);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 RO(t){let e=_s.join(t,"DevToolsActivePort"),n="";try{n=er.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 Bt(t){return new Promise(function(e){setTimeout(e,t)})}function qO(t,e,n){return new Promise(function(s,r){let o=IO.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 Rr(t){if(!t||t.killed)return;let e=t.pid;try{if(process.platform==="win32")FO("taskkill /PID "+e+" /T /F",{stdio:"ignore",timeout:5e3});else try{process.kill(-e,"SIGKILL")}catch{try{t.kill("SIGKILL")}catch{}}}catch{}}function Bi(t){try{er.rmSync(t,{recursive:!0,force:!0})}catch{}}var BO={StaticText:1,InlineTextBox:1,generic:1,none:1,RootWebArea:1},UO={ignored:1,presentation:1,LineBreak:1},mf=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>df&&this.events.splice(0,this.events.length-df)}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||Ui),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=Rb(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(`
232
+ `)[0]));return}l=!0,clearTimeout(c);let h=new ff(a),y=u.slice(p+4);y.length&&h._feed(y),n(h)};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 pf=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||Ui);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 RO(t){let e=Ts.join(t,"DevToolsActivePort"),n="";try{n=tr.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 Bt(t){return new Promise(function(e){setTimeout(e,t)})}function qO(t,e,n){return new Promise(function(s,r){let o=IO.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 Rr(t){if(!t||t.killed)return;let e=t.pid;try{if(process.platform==="win32")FO("taskkill /PID "+e+" /T /F",{stdio:"ignore",timeout:5e3});else try{process.kill(-e,"SIGKILL")}catch{try{t.kill("SIGKILL")}catch{}}}catch{}}function Bi(t){try{tr.rmSync(t,{recursive:!0,force:!0})}catch{}}var BO={StaticText:1,InlineTextBox:1,generic:1,none:1,RootWebArea:1},UO={ignored:1,presentation:1,LineBreak:1},mf=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>df&&this.events.splice(0,this.events.length-df)}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||Ui),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=Rb(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(`
233
233
  `)}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(`
234
234
  `).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=Lb(l&&l.nodes,n-600)}catch{r=""}if(o(r)>=3)break;a===0&&await Bt(250)}if(o(r)<3){let a=await this.visibleText(n-600);a.trim()&&(r=(r.trim()?r.trim()+`
235
235
 
@@ -243,14 +243,14 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var _b=Q((BL
243
243
  `)}function Rb(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 WO(t){let e=t||{},n=Nb(e.exe);if(!n.path){let T=n.tried.slice(0,6).map(function(g){return" - "+g}).join(`
244
244
  `);throw new Error(`\u6CA1\u627E\u5230 Chrome / Edge\u3002\u88C5\u4E0A Chrome\uFF0C\u6216\u5728\u8BBE\u7F6E\u91CC\u6307\u5B9A luban.browser.chromePath\u3002
245
245
  \u5DF2\u5C1D\u8BD5\uFF1A
246
- `+T)}let s=jb(n.path);try{er.mkdirSync(s,{recursive:!0})}catch{}let r=er.mkdtempSync(_s.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=er.mkdtempSync(_s.join(s,"luban-chrome-"));c=DO(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 w=!1;c.on("exit",function(){w=!0});let S=Date.now()+(e.timeoutMs||Ob);for(;Date.now()<S&&!w;){let _=RO(g);if(_)return{port:_.port,stderr:v,dir:g};await Bt(200)}return Bi(g),{port:0,stderr:v,exited:w}},f=await d(l);if(!f.port&&a==="--headless=new"){Rr(c),await Bt(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||"")){Rr(c),await Bt(300);let T=l.concat(["--no-sandbox"]);if(f=await d(T),!f.port&&a==="--headless=new"){Rr(c),await Bt(300);let g=T.filter(function(v){return v!=="--headless=new"}).concat(["--headless"]);f=await d(g)}}if(!f.port){Rr(c),Bi(r);let T=f.stderr?`
247
- \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,m=Date.now()+1e4;for(;Date.now()<m;){let T=[];try{T=await qO(u,"/json/list")}catch{T=[]}if(Array.isArray(T)&&(p=T.find(function(g){return g&&g.type==="page"&&g.webSocketDebuggerUrl}),p))break;await Bt(200)}if(!p)throw Rr(c),Bi(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 h;try{h=await LO(p.webSocketDebuggerUrl,15e3)}catch(T){throw Rr(c),Bi(r),T}let y=new pf(h),k=new mf({proc:c,dir:r,exe:n.path,port:u,cdp:y,width:o,height:i});try{await k.init()}catch(T){throw await k.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 k}qb.exports={findChrome:Nb,chromeCandidates:Eb,isSnapBinary:Pb,profileBaseDir:jb,normalizeUrl:Rb,formatAxTree:Lb,clipText:Fb,encodeFrame:Ib,decodeFrame:Db,launch:WO,MAX_FRAME:Ab,EVENTS_MAX:df,DEFAULT_TIMEOUT_MS:Ui,LAUNCH_TIMEOUT_MS:Ob}});var Ur=Q((WL,Of)=>{var G=require("fs"),tr=require("os"),U=require("path"),Hb=require("crypto"),zb=2e3,Gb=6e4,KO=18e4,Ub=8e3,hf=500,zl=64,HO=30,Wb=65536,zO=["bg","fg","panel","border","accent","accent-fg","muted","code-bg","surface","surface-2","hover","link","ok","warn","error"],gf={"radius-sm":[0,48],radius:[0,48],"radius-lg":[0,48],"font-size":[8,40]},GO=24,JO=/^#[0-9a-fA-F]{3,8}$/,$O=/^(?:rgb|rgba|hsl|hsla)\(\s*[-0-9.,%\s/]+\)$/,XO=/^[a-zA-Z]{3,22}$/,VO=/^(expression|url|var|env|attr|image|paint|element)$/i,YO=/^(0|0?\.\d+|[1-9]\d*(?:\.\d+)?)\s*(px|em|rem|%|pt)?$/,E={root:"",version:"0",rec:function(){},confirm:null,enabled:!1,maxTools:HO,timeoutMs:Gb,plugins:new Map,exposed:new Map,disabled:new Set,pending:[],trust:null,trustLoaded:!1,trustDirty:!1,dirs:[],errors:[],scannedAt:"",scannedMs:0};function qr(t){let e=t||{};if(e.root&&String(e.root)!==E.root&&(E.scannedMs=0),e.root&&(E.root=String(e.root)),typeof e.rec=="function"&&(E.rec=e.rec),typeof e.confirm=="function"&&(E.confirm=e.confirm),e.enabled!==void 0){let r=e.enabled===!0;!r&&E.enabled&&(E.plugins=new Map,E.exposed.clear(),E.dirs=[],E.errors=[],E.scannedMs=0),E.enabled=r}let n=Number(e.maxTools);if(isFinite(n)&&n>0){let r=Math.min(Math.floor(n),200);r!==E.maxTools&&(E.maxTools=r,E.scannedMs=0)}let s=Number(e.timeoutMs);isFinite(s)&&s>=1&&(E.timeoutMs=Math.min(Math.floor(s),KO))}function Ut(t,e){try{E.rec(t,e)}catch{}}function Gl(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function Br(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function ZO(t){return Hb.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function Jb(t,e){let n="pl__"+Br(t)+"__"+Br(e);if(n.length>zl){let s="_"+ZO(t+"/"+e);n=n.slice(0,zl-s.length)+s}return n}function $b(){return U.join(tr.homedir(),".luban","plugins-trust.json")}function Sf(){if(E.trustLoaded)return;E.trustLoaded=!0,E.trust=new Map;let t;try{t=JSON.parse(G.readFileSync($b(),"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&&E.trust.set(e,n)}}function Xb(){if(!E.trustDirty||!E.trust)return;let t={trusted:{}};for(let[e,n]of E.trust)t.trusted[e]=n;try{let e=$b();G.mkdirSync(U.dirname(e),{recursive:!0}),G.writeFileSync(e,JSON.stringify(t,null,2)+`
248
- `),E.trustDirty=!1}catch(e){Ut("plugin_trust_save_failed",{message:e.message})}}function Ki(t){let e=[];(function s(r){let o;try{o=G.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of o){if(i.name==="node_modules"||i.name===".git")continue;let a=U.join(r,i.name);i.isDirectory()?s(a):i.isFile()&&e.push(a)}})(t),e.sort();let n=Hb.createHash("sha1");for(let s of e){n.update(U.relative(t,s));try{n.update(G.readFileSync(s))}catch{}}return n.digest("hex")}function vf(t,e){return Sf(),E.trust.get(t)===e}function Vb(t,e){Sf(),E.trust.set(t,e),E.trustDirty=!0,Xb()}function QO(t,e){let n=String(e??"").trim();if(!n||n.length>64||/[;{}<>\\"']/.test(n)||/\/\*/.test(n))return"";if(gf[t]){let s=n.match(YO);if(!s)return"";let r=Number(s[1]),o=gf[t];return!isFinite(r)||r<o[0]||r>o[1]?"":s[2]?n:r+"px"}return JO.test(n)||$O.test(n)||XO.test(n)&&!VO.test(n)?n:""}function eE(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>=GO){s.push(i);continue}let a=String(i).replace(/^--/,"");if(zO.indexOf(a)<0&&!gf[a]){a!=="tokens"&&a!=="label"&&a!=="description"&&s.push(i);continue}let l=QO(a,e[i]);if(!l){s.push(i);continue}n[a]=l,r++}return r?{label:Gl(typeof t.label=="string"?t.label.trim():"",40)||"",tokens:n,dropped:s}:{error:"theme.tokens \u91CC\u6CA1\u6709\u5408\u6CD5 token",dropped:s}}function nr(t){let e=U.join(t,"plugin.json"),n;try{n=G.statSync(e)}catch{return{error:"\u7F3A\u5C11 plugin.json"}}if(!n.isFile())return{error:"plugin.json \u4E0D\u662F\u6587\u4EF6"};if(n.size>Wb)return{error:"plugin.json \u8D85\u8FC7 "+Wb+" \u5B57\u8282"};let s;try{s=JSON.parse(G.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=Br(s.name||U.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=U.resolve(t,o),a=U.relative(t,i);if(!a||a.startsWith("..")||U.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=eE(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 m=Br(p.name);if(!p.name||typeof p.name!="string"||!m||f[m])continue;f[m]=!0;let h=p.parameters&&typeof p.parameters=="object"?p.parameters:{type:"object",properties:{}};d.push({name:m,description:Gl(typeof p.description=="string"?p.description:"",hf),parameters:h,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:Gl(typeof s.description=="string"?s.description:"",hf),main:o,mainAbs:i,dir:t,tools:d,readOnly:u,theme:c?{label:c.label,tokens:c.tokens,dropped:c.dropped||[]}:null}}function tE(t){let e=t||E.root||process.cwd(),n=tr.homedir();return[U.join(n,".luban","plugins"),U.join(e,".luban","plugins")]}function Yb(){E.exposed.clear();let t=[];for(let e of E.plugins.values())t.push(e.name);t.sort();for(let e of t){let n=E.plugins.get(e);for(let s of n.tools){if(E.exposed.size>=E.maxTools)return;let r=Jb(n.name,s.name);if(E.exposed.has(r)){let o=2;for(;E.exposed.has(r+"_"+o);)o++;let i="_"+o;r=r.length+i.length>zl?r.slice(0,zl-i.length)+i:r+i}E.exposed.set(r,{plugin:n.name,tool:s.name,def:s,readOnly:s.readOnly===!0})}}}function Eo(){let t=tE(E.root),e=[],n=new Map;for(let s of t){let r;try{r=G.readdirSync(s,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=U.join(s,o.name),a=nr(i);if(a.error){e.push(o.name+"\uFF1A"+a.error),Ut("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 Nn(t,e){let n=e||{};if(t&&(E.root=String(t)),!E.enabled)return E.plugins=new Map,E.exposed.clear(),E.dirs=[],E.errors=[],E.pending=[],E.scannedAt=new Date().toISOString(),E.scannedMs=Date.now(),[];let s=Eo(),r=s.dirs;E.dirs=r;let o=s.errors,i=s.merged,a=new Map,l=[];for(let[c,u]of i){let d=u.manifest,f=Ki(d.dir);if(vf(d.dir,f)){a.set(c,d);continue}if(E.disabled.has(d.dir)||typeof E.confirm!="function"){l.push(d),typeof E.confirm!="function"&&(o.push(c+"\uFF1A\u672A\u4FE1\u4EFB\u4E14\u65E0\u786E\u8BA4\u901A\u9053\uFF0C\u5DF2\u8DF3\u8FC7"),Ut("plugin_untrusted_skip",{plugin:c,dir:d.dir}));continue}let p=!1;try{p=await E.confirm({name:d.name,version:d.version,description:d.description,dir:d.dir,source:u.source,tools:d.tools.map(function(m){return m.name}),fingerprint:f})}catch{p=!1}p===!0?(Vb(d.dir,f),a.set(c,d),Ut("plugin_trusted",{plugin:c,dir:d.dir})):(E.disabled.add(d.dir),l.push(d),Ut("plugin_rejected",{plugin:c,dir:d.dir}))}return E.plugins=a,E.pending=l,Yb(),E.errors=o,E.scannedAt=new Date().toISOString(),E.scannedMs=Date.now(),n.quiet||Ut("plugins_scanned",{count:E.plugins.size,tools:E.exposed.size,root:E.root,names:Array.from(E.plugins.keys()),errors:o}),Array.from(E.plugins.values())}function Hi(){if(!E.enabled||!E.root){E.exposed.size&&(E.plugins=new Map,E.exposed.clear());return}if(E.scannedMs&&Date.now()-E.scannedMs<zb)return;let t=E.exposed.size,e=Eo().merged,n=new Map,s=[];for(let[r,o]of e){let i=o.manifest,a=Ki(i.dir);vf(i.dir,a)?n.set(r,i):s.push(i)}E.plugins=n,E.pending=s,Yb(),E.scannedMs=Date.now(),E.scannedAt=new Date().toISOString(),E.exposed.size!==t&&Ut("plugins_changed",{count:E.plugins.size,tools:E.exposed.size})}function nE(t){let e=t||{};E.scannedMs=0,e.keepDisabled||(E.disabled=new Set);for(let n of E.plugins.values())try{delete require.cache[Mf(n)]}catch{}return Nn(E.root)}var sE="plugins-trash";function zi(){return U.join(tr.homedir(),".luban","plugins")}function Gi(){return U.join(tr.homedir(),".luban",sE)}function sr(t){let e=U.resolve(String(t||"")),n=[{scope:"global",base:zi()},{scope:"project",base:U.join(U.resolve(E.root||process.cwd()),".luban","plugins")}];for(let s of n){let r=U.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!U.isAbsolute(r)&&r.indexOf(U.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function Kb(){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 Jl(t,e){G.mkdirSync(e,{recursive:!0});for(let n of G.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=U.join(t,n.name),r=U.join(e,n.name);n.isDirectory()?Jl(s,r):n.isFile()&&G.copyFileSync(s,r)}}function Zb(t){try{let e=JSON.parse(G.readFileSync(t+".json","utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function rE(t,e){try{G.writeFileSync(t+".json",JSON.stringify(e,null,2)+`
249
- `)}catch{}}function oE(t){Sf(),E.trust.delete(U.resolve(t))&&(E.trustDirty=!0,Xb())}function _f(t){let e=U.resolve(String(t||""));if(!sr(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=nr(e);if(n.error)throw new Error("\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u76EE\u5F55\uFF1A"+n.error);return Vb(e,Ki(e)),E.disabled.delete(e),E.scannedMs=0,n}function Qb(t,e){let n=U.resolve(t),s=sr(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=Gi();G.mkdirSync(r,{recursive:!0,mode:448});let o=Br(s.name),i=o+"-"+Kb(),a=2;for(;G.existsSync(U.join(r,i))||G.existsSync(U.join(r,i+".json"));)i=o+"-"+Kb()+"-"+a,a++;let l=U.join(r,i);try{G.renameSync(n,l)}catch(c){if(c&&c.code==="EXDEV")Jl(n,l),G.rmSync(n,{recursive:!0,force:!0});else throw c}return rE(l,{name:s.name,from:n,scope:s.scope,at:new Date().toISOString(),why:e||""}),oE(n),E.scannedMs=0,i}async function Kl(t,e){let n=e||{},s=U.resolve(String(t||"")),r;try{r=G.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=nr(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"?U.join(U.resolve(E.root||process.cwd()),".luban","plugins"):zi(),l=U.join(a,o.name);if(U.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(G.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};Qb(l,"replaced-by-install"),c=!0}try{Jl(s,l)}catch(d){try{G.rmSync(l,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+d.message}}let u=nr(l);if(u.error){try{G.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{_f(l)}catch(d){Ut("plugin_trust_failed",{dir:l,message:d.message})}return E.scannedMs=0,await Nn(E.root,{quiet:!0}),Ut("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 yf(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=U.resolve(n);else{let c=Eo().merged.get(n);if(!c)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1A"+n};r=c.manifest.dir}let o=sr(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=nr(r),a=i.error?o.name:i.name,l="";try{l=Qb(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[Mf(i)]}catch{}return await Nn(E.root,{quiet:!0}),Ut("plugin_uninstalled",{name:a,dir:r,trash:l}),{ok:!0,name:a,dir:r,trash:l}}function wf(){let t=Gi(),e;try{e=G.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=U.join(t,s.name),o=Zb(r),i=nr(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 bf(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=U.join(Gi(),s);if(!G.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o=Zb(r),i=nr(r),a=i.error?String(o.name||s):i.name,l="",c=String(o.from||"");if(c){let u=U.resolve(c),d=U.dirname(u);G.existsSync(d)&&!G.existsSync(u)&&sr(u)&&(l=u)}if(l||(l=U.join(zi(),Br(a))),G.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u63D2\u4EF6\uFF1A"+l};G.mkdirSync(U.dirname(l),{recursive:!0});try{G.renameSync(r,l)}catch(u){if(u&&u.code==="EXDEV")Jl(r,l),G.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+u.message}}try{G.unlinkSync(r+".json")}catch{}if(n.trust!==!1)try{_f(l)}catch(u){Ut("plugin_restore_trust_failed",{dir:l,message:u.message})}return await Nn(E.root,{quiet:!0}),Ut("plugin_restored",{name:a,dir:l,from:s}),{ok:!0,name:a,dir:l}}function Ao(t){return Hi(),E.exposed.has(String(t))}function Tf(t){return Hi(),E.exposed.get(String(t))||null}function e0(t){let e=Tf(t);return e?e.readOnly===!0:!1}function Oo(t){Hi();let e=!!(t&&t.planOnly),n=[];for(let s of E.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:Gl(a,hf)+"\uFF08\u6765\u81EA\u672C\u5730\u63D2\u4EF6\u300C"+o.plugin+"\u300D\uFF09",parameters:i.parameters||{type:"object",properties:{}}}}),n.length>=E.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 Mf(t){let e=U.resolve(t.mainAbs);try{return G.realpathSync(e)}catch{return e}}function iE(t){let e=E.plugins.get(t.plugin);if(!e)throw new Error("\u63D2\u4EF6\u5DF2\u5378\u8F7D: "+t.plugin);let n=Mf(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 aE(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 Wi(t,e,n){let s=Tf(t);if(!s)throw new Error("\u672A\u77E5\u63D2\u4EF6\u5DE5\u5177: "+t);let r=n||{},o=Date.now(),i=!1;try{let a=iE(s),l={root:r.root||E.root,sessionId:r.sessionId||"",mode:r.mode||"",signal:r.signal||null,log:typeof r.log=="function"?r.log:function(){}},c=await aE(Promise.resolve().then(function(){return a(e||{},l)}),E.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>Ub&&(u=u.slice(0,Ub)+`
250
- \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`),u}catch(a){let l=String(a&&a.message||a);throw Ut("plugin_call_failed",{plugin:s.plugin,tool:s.tool,message:l}),new Error("\u63D2\u4EF6\u5DE5\u5177 "+t+" \u5931\u8D25\uFF1A"+l)}finally{Ut("plugin_call",{plugin:s.plugin,tool:s.tool,ok:i,ms:Date.now()-o})}}function t0(){Hi();let t=[];for(let e of E.plugins.values()){let n=sr(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:Cf(e),tools:e.tools.map(function(s){return{name:s.name,readOnly:s.readOnly===!0}})})}return t}function lE(){return Hi(),E.pending.map(function(t){let e=sr(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:Cf(t),tools:t.tools.map(function(n){return{name:n.name,readOnly:n.readOnly===!0}})}})}function kf(){let t=Eo(),e=[],n=[];for(let s of t.merged.values()){let r=s.manifest,o=sr(r.dir),i={name:r.name,version:r.version,description:r.description,dir:r.dir,scope:o?o.scope:"",readOnly:r.readOnly===!0,trusted:vf(r.dir,Ki(r.dir)),theme:Cf(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 Cf(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 Af(){let t=Eo(),e=[];for(let n of t.merged.values()){let s=n.manifest;s.theme&&((s.theme.dropped||[]).length&&Ut("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 Hl(t){let e=String(t??"").trim();if(!e)return null;let n=Af();for(let s of n)if(s.name===e)return s;return null}function xf(){return{root:E.root,enabled:E.enabled,dirs:E.dirs.slice(),globalDir:zi(),trashDir:Gi(),errors:E.errors.slice(),scannedAt:E.scannedAt,plugins:t0(),pending:lE(),tools:Array.from(E.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===Of){let t=require("assert"),e=G.promises;(async function(){let n=G.mkdtempSync(U.join(tr.tmpdir(),"luban-plugin-test-")),s=U.join(n,"proj"),r=U.join(n,"home",".luban","plugins"),o=U.join(s,".luban","plugins");G.mkdirSync(r,{recursive:!0}),G.mkdirSync(o,{recursive:!0});let i=tr.homedir;tr.homedir=function(){return U.join(n,"home")};let a=U.join(r,"demo");G.mkdirSync(a,{recursive:!0}),G.writeFileSync(U.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"}}}}]})),G.writeFileSync(U.join(a,"index.js"),'module.exports={tools:{echo:{handler:async(a)=>"echo:"+(a&&a.text||"")}}};');let l=U.join(o,"demo");G.mkdirSync(l,{recursive:!0}),G.writeFileSync(U.join(l,"plugin.json"),JSON.stringify({name:"demo",version:"2.0.0",readOnly:!1,tools:[{name:"boom",description:"\u629B\u9519",parameters:{type:"object",properties:{}}}]})),G.writeFileSync(U.join(l,"index.js"),'module.exports={tools:{boom:{handler:async()=>{throw new Error("\u70B8\u4E86")}}}};');let c=U.join(r,"bad");G.mkdirSync(c,{recursive:!0}),G.writeFileSync(U.join(c,"plugin.json"),"{ not json");let u=[],d=[];qr({root:s,enabled:!0,rec:function(Ce,Dt){u.push([Ce,Dt])},confirm:async function(Ce){return d.push(Ce.name),!0}}),await Nn(s);let f=xf();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(Ce){return Ce.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(Ce){return Ce.indexOf("bad")===0}),!0,"\u574F\u6E05\u5355\u8981\u8BB0 error"),t.strictEqual(Ao("pl__demo__boom"),!0),t.strictEqual(Ao("pl__demo__echo"),!1,"\u88AB\u9879\u76EE\u8986\u76D6\u7684 echo \u4E0D\u8BE5\u51FA\u73B0"),t.strictEqual(e0("pl__demo__boom"),!1);let m=JSON.stringify(Oo({})),h=JSON.stringify(Oo({}));t.strictEqual(m,h,"\u4E24\u6B21 toolDefs \u9010\u5B57\u8282\u76F8\u540C"),t.strictEqual(Oo({planOnly:!0}).length,0,"\u975E\u53EA\u8BFB\u5DE5\u5177\u4E0D\u8FDB Plan");let y="";try{await Wi("pl__demo__boom",{},{root:s})}catch(Ce){y=Ce.message}t.ok(y.indexOf("\u70B8\u4E86")>=0,"\u629B\u9519\u8981\u5E26\u4E0A\u539F\u56E0\uFF0C\u5B9E\u9645: "+y);let k=U.join(r,"echo");G.mkdirSync(k,{recursive:!0}),G.writeFileSync(U.join(k,"plugin.json"),JSON.stringify({name:"echo",readOnly:!0,tools:[{name:"say",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),G.writeFileSync(U.join(k,"index.js"),'module.exports={tools:{say:{handler:async(a)=>"say:"+(a&&a.text||"")}}}'),E.scannedMs=0,await Nn(s,{quiet:!0});let T=await Wi("pl__echo__say",{text:"hi"},{root:s});t.strictEqual(T,"say:hi","echo \u6B63\u5E38\u8FD4\u56DE\uFF0C\u5B9E\u9645: "+T);let g=U.join(r,"slow");G.mkdirSync(g,{recursive:!0}),G.writeFileSync(U.join(g,"plugin.json"),JSON.stringify({name:"slow",readOnly:!0,tools:[{name:"hang",description:"\u6302\u4F4F",parameters:{type:"object",properties:{}}}]})),G.writeFileSync(U.join(g,"index.js"),"module.exports={tools:{hang:{handler:()=>new Promise(()=>{})}}}"),qr({timeoutMs:300}),E.scannedMs=0,await Nn(s,{quiet:!0});let v="";try{await Wi("pl__slow__hang",{},{root:s})}catch(Ce){v=Ce.message}t.ok(v.indexOf("\u8D85\u65F6")>=0,"\u8981\u8D85\u65F6\uFF0C\u5B9E\u9645: "+v),qr({timeoutMs:Gb}),t.strictEqual(d.indexOf("demo")>=0,!0,"\u9996\u6B21\u8981\u786E\u8BA4 demo");let w=U.join(n,"home",".luban","plugins-trust.json");t.ok(G.existsSync(w),"\u4FE1\u4EFB\u8868\u8981\u843D\u76D8");let S=d.length;G.writeFileSync(U.join(k,"index.js"),'module.exports={tools:{say:{handler:async()=>"changed"}}}'),E.scannedMs=0,await Nn(s,{quiet:!0}),t.ok(d.length>S,"\u5185\u5BB9\u53D8\u4E86\u8981\u91CD\u65B0\u786E\u8BA4"),qr({confirm:async function(){return!1}}),E.trust=new Map,E.trustDirty=!0,E.disabled=new Set,E.scannedMs=0,await Nn(s,{quiet:!0}),t.strictEqual(Oo({}).length,0,"\u5168\u62D2\u7EDD\u540E\u6E05\u5355\u4E3A\u7A7A"),t.ok(xf().pending.length>0,"\u88AB\u62D2\u7684\u63D2\u4EF6\u8981\u8FDB pending"),qr({enabled:!0,confirm:async function(){return!0}}),E.trust=new Map,E.disabled=new Set,E.scannedMs=0,await Nn(s,{quiet:!0});let _=U.join(n,"downloads","pkgs","fresh");G.mkdirSync(_,{recursive:!0}),G.writeFileSync(U.join(_,"plugin.json"),JSON.stringify({name:"fresh",version:"3.1.0",readOnly:!0,tools:[{name:"ping",description:"ping",parameters:{type:"object",properties:{}}}]})),G.writeFileSync(U.join(_,"index.js"),'module.exports={tools:{ping:{handler:async()=>"pong"}}}'),G.mkdirSync(U.join(_,".git"),{recursive:!0}),G.writeFileSync(U.join(_,".git","HEAD"),"ref: refs/heads/main");let C=await Kl(_,{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=U.join(r,"fresh");t.strictEqual(G.existsSync(U.join(A,"plugin.json")),!0,"\u6587\u4EF6\u8981\u843D\u8FDB\u5168\u5C40\u63D2\u4EF6\u6839"),t.strictEqual(G.existsSync(U.join(A,".git")),!1,".git \u4E0D\u8BE5\u88AB\u590D\u5236"),t.strictEqual(Ao("pl__fresh__ping"),!0,"\u88C5\u5B8C\u7ACB\u5373\u53EF\u7528\uFF08\u4FE1\u4EFB + \u91CD\u626B\uFF09"),t.strictEqual(await Wi("pl__fresh__ping",{},{root:s}),"pong");let F=await Kl(_,{trust:!0});t.strictEqual(F.ok,!1,"\u540C\u540D\u4E0D\u5E26 replace \u5E94\u62D2\u7EDD"),t.strictEqual(F.code,"exists");let K=await Kl(_,{trust:!0,replace:!0});t.strictEqual(K.ok,!0,"replace \u5E94\u6210\u529F"),t.strictEqual(K.replaced,!0);let W=wf();t.ok(W.some(function(Ce){return Ce.why==="replaced-by-install"}),"\u65E7\u7248\u8981\u8FDB\u56DE\u6536\u7AD9");let B=await yf("fresh");t.strictEqual(B.ok,!0,"\u5378\u8F7D\u5E94\u6210\u529F\uFF1A"+JSON.stringify(B)),t.strictEqual(G.existsSync(A),!1,"\u63D2\u4EF6\u76EE\u5F55\u8981\u79FB\u8D70"),t.strictEqual(Ao("pl__fresh__ping"),!1,"\u5378\u8F7D\u540E\u5DE5\u5177\u6D88\u5931");let N=wf().find(function(Ce){return Ce.name==="fresh"});t.ok(N,"\u56DE\u6536\u7AD9\u91CC\u5E94\u6709 fresh"),t.strictEqual(N.valid,!0,"\u56DE\u6536\u7AD9\u6761\u76EE\u5E94\u80FD\u89E3\u6790\u6E05\u5355"),t.strictEqual(N.version,"3.1.0"),t.strictEqual(N.from,A,"\u5143\u6570\u636E\u8981\u8BB0\u4F4F\u539F\u4F4D\u7F6E");let J=await bf(N.entry);t.strictEqual(J.ok,!0,"\u8FD8\u539F\u5E94\u6210\u529F\uFF1A"+JSON.stringify(J)),t.strictEqual(J.dir,A,"\u8981\u8FD8\u539F\u56DE\u539F\u4F4D\u7F6E"),t.strictEqual(Ao("pl__fresh__ping"),!0,"\u8FD8\u539F\u540E\u7ACB\u5373\u53EF\u7528");let be=U.join(n,"outside");G.mkdirSync(be,{recursive:!0}),G.writeFileSync(U.join(be,"plugin.json"),JSON.stringify({name:"evil",tools:[{name:"x",description:"x"}]}));let se=await yf(be);t.strictEqual(se.ok,!1,"\u63D2\u4EF6\u6839\u4E4B\u5916\u7684\u76EE\u5F55\u5FC5\u987B\u62D2\u7EDD\u5378\u8F7D"),t.strictEqual(G.existsSync(be),!0,"\u62D2\u7EDD\u540E\u76EE\u5F55\u8FD8\u5728");let Z=await bf("../outside");t.strictEqual(Z.ok,!1,"\u5E26 / \u7684\u56DE\u6536\u7AD9\u6761\u76EE\u8981\u62D2\u7EDD"),G.writeFileSync(U.join(k,"index.js"),'module.exports={tools:{say:{handler:async()=>"dirty"}}}'),qr({enabled:!1}),await Nn(s,{quiet:!0}),t.strictEqual(Oo({}).length,0,"\u5173\u95ED\u540E\u6E05\u5355\u4E3A\u7A7A");let ge=kf();t.ok(ge.plugins.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u5DF2\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+ge.plugins.length),t.ok(ge.pending.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+ge.pending.length);let H=U.join(r,"theme-test");G.mkdirSync(H,{recursive:!0}),G.writeFileSync(U.join(H,"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 _e=Af().find(function(Ce){return Ce.name==="theme-test"});t.ok(_e,"\u5E26 theme \u7684\u63D2\u4EF6\u8981\u51FA\u73B0\u5728 themes() \u91CC\uFF08enabled=false \u4E5F\u8981\u5728\uFF09"),t.strictEqual(_e.label,"\u6D4B\u8BD5\u914D\u8272"),t.strictEqual(_e.tokens.bg,"#101014"),t.strictEqual(_e.tokens.fg,"rgb(240, 240, 245)"),t.strictEqual(_e.tokens.radius,"10px","\u65E0\u5355\u4F4D\u5C3A\u5BF8\u8981\u8865 px"),t.strictEqual(_e.tokens["font-size"],"15px"),t.strictEqual(_e.tokens.border,void 0,"\u5E26\u5206\u53F7 / \u82B1\u62EC\u53F7\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.surface,void 0,"url() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.width,void 0,"\u767D\u540D\u5355\u4E4B\u5916\u7684 token \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.link,void 0,"expression() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.ok,void 0,"\u62FC\u4E0D\u6210\u989C\u8272 / \u5177\u540D\u8272\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.ok(_e.dropped.length>=5,"\u4E22\u5F03\u8981\u6709\u7559\u75D5\uFF0C\u5B9E\u9645: "+JSON.stringify(_e.dropped)),t.strictEqual(Hl("theme-test").tokens.accent,"#ff5fa2","themeOf \u6309\u540D\u53D6\u5230 tokens"),t.strictEqual(Hl("nope"),null,"\u4E0D\u5B58\u5728\u7684\u63D2\u4EF6\u540D\u56DE null"),t.strictEqual(Hl(""),null,"\u7A7A\u540D\u56DE null");let ht=U.join(r,"theme-broken");G.mkdirSync(ht,{recursive:!0}),G.writeFileSync(U.join(ht,"plugin.json"),JSON.stringify({name:"theme-broken",theme:{tokens:{bg:"red;}",fg:"url(x)"}}}));let xt=kf();t.ok(xt.errors.some(function(Ce){return Ce.indexOf("theme-broken")===0}),"\u5168\u975E\u6CD5 token \u7684\u4E3B\u9898\u63D2\u4EF6\u8981\u8BB0 error\uFF0C\u5B9E\u9645: "+JSON.stringify(xt.errors)),t.strictEqual(xt.plugins.concat(xt.pending).some(function(Ce){return Ce.name==="theme-broken"}),!1,"\u574F\u4E3B\u9898\u63D2\u4EF6\u4E0D\u8BE5\u51FA\u73B0\u5728\u6E05\u5355\u91CC"),tr.homedir=i,G.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)})}Of.exports={configure:qr,refresh:Nn,reload:nE,list:t0,status:xf,toolDefs:Oo,hasTool:Ao,findTool:Tf,readOnlyOf:e0,callTool:Wi,installFromDir:Kl,uninstall:yf,trashList:wf,restoreFromTrash:bf,trustDir:_f,inventory:kf,themes:Af,themeOf:Hl,scopeOf:sr,globalDir:zi,trashDir:Gi,_cleanName:Br,_exposedBase:Jb,_parseManifest:nr,_dirFingerprint:Ki,_scanRaw:Eo,_state:E,_ttl:zb}});var Nf=Q((KL,u0)=>{"use strict";var Be=require("fs"),s0=require("os"),ze=require("path"),Ji=Ii(),r0="skills-trash",Ef=".installed.json",o0={root:""};function cE(t){let e=t||{};e.root&&(o0.root=String(e.root))}function uE(){return ze.resolve(o0.root||process.cwd())}function $l(){return ze.join(s0.homedir(),".luban","skills")}function Xl(){return ze.join(s0.homedir(),".luban",r0)}function Pf(t){return ze.join(t||uE(),".luban","skills")}function i0(t){return t==="project"?Pf():$l()}function $i(t){let e=ze.resolve(String(t||"")),n=[{scope:"global",base:$l()},{scope:"project",base:Pf()}];for(let s of n){let r=ze.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!ze.isAbsolute(r)&&r.indexOf(ze.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function n0(){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 Vl(t,e){Be.mkdirSync(e,{recursive:!0});for(let n of Be.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=ze.join(t,n.name),r=ze.join(e,n.name);n.isDirectory()?Vl(s,r):n.isFile()&&Be.copyFileSync(s,r)}}function Yl(t){try{let e=JSON.parse(Be.readFileSync(ze.join(t,Ef),"utf8"));if(e&&typeof e=="object"&&e.skills&&typeof e.skills=="object")return e}catch{}return{version:1,skills:{}}}function jf(t,e){Be.mkdirSync(t,{recursive:!0}),Be.writeFileSync(ze.join(t,Ef),JSON.stringify(e,null,2)+`
246
+ `+T)}let s=jb(n.path);try{tr.mkdirSync(s,{recursive:!0})}catch{}let r=tr.mkdtempSync(Ts.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=tr.mkdtempSync(Ts.join(s,"luban-chrome-"));c=DO(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 w=!1;c.on("exit",function(){w=!0});let S=Date.now()+(e.timeoutMs||Ob);for(;Date.now()<S&&!w;){let _=RO(g);if(_)return{port:_.port,stderr:v,dir:g};await Bt(200)}return Bi(g),{port:0,stderr:v,exited:w}},f=await d(l);if(!f.port&&a==="--headless=new"){Rr(c),await Bt(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||"")){Rr(c),await Bt(300);let T=l.concat(["--no-sandbox"]);if(f=await d(T),!f.port&&a==="--headless=new"){Rr(c),await Bt(300);let g=T.filter(function(v){return v!=="--headless=new"}).concat(["--headless"]);f=await d(g)}}if(!f.port){Rr(c),Bi(r);let T=f.stderr?`
247
+ \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,m=Date.now()+1e4;for(;Date.now()<m;){let T=[];try{T=await qO(u,"/json/list")}catch{T=[]}if(Array.isArray(T)&&(p=T.find(function(g){return g&&g.type==="page"&&g.webSocketDebuggerUrl}),p))break;await Bt(200)}if(!p)throw Rr(c),Bi(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 h;try{h=await LO(p.webSocketDebuggerUrl,15e3)}catch(T){throw Rr(c),Bi(r),T}let y=new pf(h),k=new mf({proc:c,dir:r,exe:n.path,port:u,cdp:y,width:o,height:i});try{await k.init()}catch(T){throw await k.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 k}qb.exports={findChrome:Nb,chromeCandidates:Eb,isSnapBinary:Pb,profileBaseDir:jb,normalizeUrl:Rb,formatAxTree:Lb,clipText:Fb,encodeFrame:Ib,decodeFrame:Db,launch:WO,MAX_FRAME:Ab,EVENTS_MAX:df,DEFAULT_TIMEOUT_MS:Ui,LAUNCH_TIMEOUT_MS:Ob}});var Ur=Q((WL,Of)=>{var G=require("fs"),nr=require("os"),U=require("path"),Hb=require("crypto"),zb=2e3,Gb=6e4,KO=18e4,Ub=8e3,hf=500,zl=64,HO=30,Wb=65536,zO=["bg","fg","panel","border","accent","accent-fg","muted","code-bg","surface","surface-2","hover","link","ok","warn","error"],gf={"radius-sm":[0,48],radius:[0,48],"radius-lg":[0,48],"font-size":[8,40]},GO=24,JO=/^#[0-9a-fA-F]{3,8}$/,$O=/^(?:rgb|rgba|hsl|hsla)\(\s*[-0-9.,%\s/]+\)$/,XO=/^[a-zA-Z]{3,22}$/,VO=/^(expression|url|var|env|attr|image|paint|element)$/i,YO=/^(0|0?\.\d+|[1-9]\d*(?:\.\d+)?)\s*(px|em|rem|%|pt)?$/,E={root:"",version:"0",rec:function(){},confirm:null,enabled:!1,maxTools:HO,timeoutMs:Gb,plugins:new Map,exposed:new Map,disabled:new Set,pending:[],trust:null,trustLoaded:!1,trustDirty:!1,dirs:[],errors:[],scannedAt:"",scannedMs:0};function qr(t){let e=t||{};if(e.root&&String(e.root)!==E.root&&(E.scannedMs=0),e.root&&(E.root=String(e.root)),typeof e.rec=="function"&&(E.rec=e.rec),typeof e.confirm=="function"&&(E.confirm=e.confirm),e.enabled!==void 0){let r=e.enabled===!0;!r&&E.enabled&&(E.plugins=new Map,E.exposed.clear(),E.dirs=[],E.errors=[],E.scannedMs=0),E.enabled=r}let n=Number(e.maxTools);if(isFinite(n)&&n>0){let r=Math.min(Math.floor(n),200);r!==E.maxTools&&(E.maxTools=r,E.scannedMs=0)}let s=Number(e.timeoutMs);isFinite(s)&&s>=1&&(E.timeoutMs=Math.min(Math.floor(s),KO))}function Ut(t,e){try{E.rec(t,e)}catch{}}function Gl(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function Br(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function ZO(t){return Hb.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function Jb(t,e){let n="pl__"+Br(t)+"__"+Br(e);if(n.length>zl){let s="_"+ZO(t+"/"+e);n=n.slice(0,zl-s.length)+s}return n}function $b(){return U.join(nr.homedir(),".luban","plugins-trust.json")}function Sf(){if(E.trustLoaded)return;E.trustLoaded=!0,E.trust=new Map;let t;try{t=JSON.parse(G.readFileSync($b(),"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&&E.trust.set(e,n)}}function Xb(){if(!E.trustDirty||!E.trust)return;let t={trusted:{}};for(let[e,n]of E.trust)t.trusted[e]=n;try{let e=$b();G.mkdirSync(U.dirname(e),{recursive:!0}),G.writeFileSync(e,JSON.stringify(t,null,2)+`
248
+ `),E.trustDirty=!1}catch(e){Ut("plugin_trust_save_failed",{message:e.message})}}function Ki(t){let e=[];(function s(r){let o;try{o=G.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of o){if(i.name==="node_modules"||i.name===".git")continue;let a=U.join(r,i.name);i.isDirectory()?s(a):i.isFile()&&e.push(a)}})(t),e.sort();let n=Hb.createHash("sha1");for(let s of e){n.update(U.relative(t,s));try{n.update(G.readFileSync(s))}catch{}}return n.digest("hex")}function vf(t,e){return Sf(),E.trust.get(t)===e}function Vb(t,e){Sf(),E.trust.set(t,e),E.trustDirty=!0,Xb()}function QO(t,e){let n=String(e??"").trim();if(!n||n.length>64||/[;{}<>\\"']/.test(n)||/\/\*/.test(n))return"";if(gf[t]){let s=n.match(YO);if(!s)return"";let r=Number(s[1]),o=gf[t];return!isFinite(r)||r<o[0]||r>o[1]?"":s[2]?n:r+"px"}return JO.test(n)||$O.test(n)||XO.test(n)&&!VO.test(n)?n:""}function eE(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>=GO){s.push(i);continue}let a=String(i).replace(/^--/,"");if(zO.indexOf(a)<0&&!gf[a]){a!=="tokens"&&a!=="label"&&a!=="description"&&s.push(i);continue}let l=QO(a,e[i]);if(!l){s.push(i);continue}n[a]=l,r++}return r?{label:Gl(typeof t.label=="string"?t.label.trim():"",40)||"",tokens:n,dropped:s}:{error:"theme.tokens \u91CC\u6CA1\u6709\u5408\u6CD5 token",dropped:s}}function sr(t){let e=U.join(t,"plugin.json"),n;try{n=G.statSync(e)}catch{return{error:"\u7F3A\u5C11 plugin.json"}}if(!n.isFile())return{error:"plugin.json \u4E0D\u662F\u6587\u4EF6"};if(n.size>Wb)return{error:"plugin.json \u8D85\u8FC7 "+Wb+" \u5B57\u8282"};let s;try{s=JSON.parse(G.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=Br(s.name||U.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=U.resolve(t,o),a=U.relative(t,i);if(!a||a.startsWith("..")||U.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=eE(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 m=Br(p.name);if(!p.name||typeof p.name!="string"||!m||f[m])continue;f[m]=!0;let h=p.parameters&&typeof p.parameters=="object"?p.parameters:{type:"object",properties:{}};d.push({name:m,description:Gl(typeof p.description=="string"?p.description:"",hf),parameters:h,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:Gl(typeof s.description=="string"?s.description:"",hf),main:o,mainAbs:i,dir:t,tools:d,readOnly:u,theme:c?{label:c.label,tokens:c.tokens,dropped:c.dropped||[]}:null}}function tE(t){let e=t||E.root||process.cwd(),n=nr.homedir();return[U.join(n,".luban","plugins"),U.join(e,".luban","plugins")]}function Yb(){E.exposed.clear();let t=[];for(let e of E.plugins.values())t.push(e.name);t.sort();for(let e of t){let n=E.plugins.get(e);for(let s of n.tools){if(E.exposed.size>=E.maxTools)return;let r=Jb(n.name,s.name);if(E.exposed.has(r)){let o=2;for(;E.exposed.has(r+"_"+o);)o++;let i="_"+o;r=r.length+i.length>zl?r.slice(0,zl-i.length)+i:r+i}E.exposed.set(r,{plugin:n.name,tool:s.name,def:s,readOnly:s.readOnly===!0})}}}function Eo(){let t=tE(E.root),e=[],n=new Map;for(let s of t){let r;try{r=G.readdirSync(s,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=U.join(s,o.name),a=sr(i);if(a.error){e.push(o.name+"\uFF1A"+a.error),Ut("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 Nn(t,e){let n=e||{};if(t&&(E.root=String(t)),!E.enabled)return E.plugins=new Map,E.exposed.clear(),E.dirs=[],E.errors=[],E.pending=[],E.scannedAt=new Date().toISOString(),E.scannedMs=Date.now(),[];let s=Eo(),r=s.dirs;E.dirs=r;let o=s.errors,i=s.merged,a=new Map,l=[];for(let[c,u]of i){let d=u.manifest,f=Ki(d.dir);if(vf(d.dir,f)){a.set(c,d);continue}if(E.disabled.has(d.dir)||typeof E.confirm!="function"){l.push(d),typeof E.confirm!="function"&&(o.push(c+"\uFF1A\u672A\u4FE1\u4EFB\u4E14\u65E0\u786E\u8BA4\u901A\u9053\uFF0C\u5DF2\u8DF3\u8FC7"),Ut("plugin_untrusted_skip",{plugin:c,dir:d.dir}));continue}let p=!1;try{p=await E.confirm({name:d.name,version:d.version,description:d.description,dir:d.dir,source:u.source,tools:d.tools.map(function(m){return m.name}),fingerprint:f})}catch{p=!1}p===!0?(Vb(d.dir,f),a.set(c,d),Ut("plugin_trusted",{plugin:c,dir:d.dir})):(E.disabled.add(d.dir),l.push(d),Ut("plugin_rejected",{plugin:c,dir:d.dir}))}return E.plugins=a,E.pending=l,Yb(),E.errors=o,E.scannedAt=new Date().toISOString(),E.scannedMs=Date.now(),n.quiet||Ut("plugins_scanned",{count:E.plugins.size,tools:E.exposed.size,root:E.root,names:Array.from(E.plugins.keys()),errors:o}),Array.from(E.plugins.values())}function Hi(){if(!E.enabled||!E.root){E.exposed.size&&(E.plugins=new Map,E.exposed.clear());return}if(E.scannedMs&&Date.now()-E.scannedMs<zb)return;let t=E.exposed.size,e=Eo().merged,n=new Map,s=[];for(let[r,o]of e){let i=o.manifest,a=Ki(i.dir);vf(i.dir,a)?n.set(r,i):s.push(i)}E.plugins=n,E.pending=s,Yb(),E.scannedMs=Date.now(),E.scannedAt=new Date().toISOString(),E.exposed.size!==t&&Ut("plugins_changed",{count:E.plugins.size,tools:E.exposed.size})}function nE(t){let e=t||{};E.scannedMs=0,e.keepDisabled||(E.disabled=new Set);for(let n of E.plugins.values())try{delete require.cache[Mf(n)]}catch{}return Nn(E.root)}var sE="plugins-trash";function zi(){return U.join(nr.homedir(),".luban","plugins")}function Gi(){return U.join(nr.homedir(),".luban",sE)}function rr(t){let e=U.resolve(String(t||"")),n=[{scope:"global",base:zi()},{scope:"project",base:U.join(U.resolve(E.root||process.cwd()),".luban","plugins")}];for(let s of n){let r=U.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!U.isAbsolute(r)&&r.indexOf(U.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function Kb(){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 Jl(t,e){G.mkdirSync(e,{recursive:!0});for(let n of G.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=U.join(t,n.name),r=U.join(e,n.name);n.isDirectory()?Jl(s,r):n.isFile()&&G.copyFileSync(s,r)}}function Zb(t){try{let e=JSON.parse(G.readFileSync(t+".json","utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function rE(t,e){try{G.writeFileSync(t+".json",JSON.stringify(e,null,2)+`
249
+ `)}catch{}}function oE(t){Sf(),E.trust.delete(U.resolve(t))&&(E.trustDirty=!0,Xb())}function _f(t){let e=U.resolve(String(t||""));if(!rr(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=sr(e);if(n.error)throw new Error("\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u76EE\u5F55\uFF1A"+n.error);return Vb(e,Ki(e)),E.disabled.delete(e),E.scannedMs=0,n}function Qb(t,e){let n=U.resolve(t),s=rr(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=Gi();G.mkdirSync(r,{recursive:!0,mode:448});let o=Br(s.name),i=o+"-"+Kb(),a=2;for(;G.existsSync(U.join(r,i))||G.existsSync(U.join(r,i+".json"));)i=o+"-"+Kb()+"-"+a,a++;let l=U.join(r,i);try{G.renameSync(n,l)}catch(c){if(c&&c.code==="EXDEV")Jl(n,l),G.rmSync(n,{recursive:!0,force:!0});else throw c}return rE(l,{name:s.name,from:n,scope:s.scope,at:new Date().toISOString(),why:e||""}),oE(n),E.scannedMs=0,i}async function Kl(t,e){let n=e||{},s=U.resolve(String(t||"")),r;try{r=G.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=sr(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"?U.join(U.resolve(E.root||process.cwd()),".luban","plugins"):zi(),l=U.join(a,o.name);if(U.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(G.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};Qb(l,"replaced-by-install"),c=!0}try{Jl(s,l)}catch(d){try{G.rmSync(l,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+d.message}}let u=sr(l);if(u.error){try{G.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{_f(l)}catch(d){Ut("plugin_trust_failed",{dir:l,message:d.message})}return E.scannedMs=0,await Nn(E.root,{quiet:!0}),Ut("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 yf(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=U.resolve(n);else{let c=Eo().merged.get(n);if(!c)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1A"+n};r=c.manifest.dir}let o=rr(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=sr(r),a=i.error?o.name:i.name,l="";try{l=Qb(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[Mf(i)]}catch{}return await Nn(E.root,{quiet:!0}),Ut("plugin_uninstalled",{name:a,dir:r,trash:l}),{ok:!0,name:a,dir:r,trash:l}}function wf(){let t=Gi(),e;try{e=G.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=U.join(t,s.name),o=Zb(r),i=sr(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 bf(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=U.join(Gi(),s);if(!G.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o=Zb(r),i=sr(r),a=i.error?String(o.name||s):i.name,l="",c=String(o.from||"");if(c){let u=U.resolve(c),d=U.dirname(u);G.existsSync(d)&&!G.existsSync(u)&&rr(u)&&(l=u)}if(l||(l=U.join(zi(),Br(a))),G.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u63D2\u4EF6\uFF1A"+l};G.mkdirSync(U.dirname(l),{recursive:!0});try{G.renameSync(r,l)}catch(u){if(u&&u.code==="EXDEV")Jl(r,l),G.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+u.message}}try{G.unlinkSync(r+".json")}catch{}if(n.trust!==!1)try{_f(l)}catch(u){Ut("plugin_restore_trust_failed",{dir:l,message:u.message})}return await Nn(E.root,{quiet:!0}),Ut("plugin_restored",{name:a,dir:l,from:s}),{ok:!0,name:a,dir:l}}function Ao(t){return Hi(),E.exposed.has(String(t))}function Tf(t){return Hi(),E.exposed.get(String(t))||null}function e0(t){let e=Tf(t);return e?e.readOnly===!0:!1}function Oo(t){Hi();let e=!!(t&&t.planOnly),n=[];for(let s of E.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:Gl(a,hf)+"\uFF08\u6765\u81EA\u672C\u5730\u63D2\u4EF6\u300C"+o.plugin+"\u300D\uFF09",parameters:i.parameters||{type:"object",properties:{}}}}),n.length>=E.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 Mf(t){let e=U.resolve(t.mainAbs);try{return G.realpathSync(e)}catch{return e}}function iE(t){let e=E.plugins.get(t.plugin);if(!e)throw new Error("\u63D2\u4EF6\u5DF2\u5378\u8F7D: "+t.plugin);let n=Mf(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 aE(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 Wi(t,e,n){let s=Tf(t);if(!s)throw new Error("\u672A\u77E5\u63D2\u4EF6\u5DE5\u5177: "+t);let r=n||{},o=Date.now(),i=!1;try{let a=iE(s),l={root:r.root||E.root,sessionId:r.sessionId||"",mode:r.mode||"",signal:r.signal||null,log:typeof r.log=="function"?r.log:function(){}},c=await aE(Promise.resolve().then(function(){return a(e||{},l)}),E.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>Ub&&(u=u.slice(0,Ub)+`
250
+ \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`),u}catch(a){let l=String(a&&a.message||a);throw Ut("plugin_call_failed",{plugin:s.plugin,tool:s.tool,message:l}),new Error("\u63D2\u4EF6\u5DE5\u5177 "+t+" \u5931\u8D25\uFF1A"+l)}finally{Ut("plugin_call",{plugin:s.plugin,tool:s.tool,ok:i,ms:Date.now()-o})}}function t0(){Hi();let t=[];for(let e of E.plugins.values()){let n=rr(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:Cf(e),tools:e.tools.map(function(s){return{name:s.name,readOnly:s.readOnly===!0}})})}return t}function lE(){return Hi(),E.pending.map(function(t){let e=rr(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:Cf(t),tools:t.tools.map(function(n){return{name:n.name,readOnly:n.readOnly===!0}})}})}function kf(){let t=Eo(),e=[],n=[];for(let s of t.merged.values()){let r=s.manifest,o=rr(r.dir),i={name:r.name,version:r.version,description:r.description,dir:r.dir,scope:o?o.scope:"",readOnly:r.readOnly===!0,trusted:vf(r.dir,Ki(r.dir)),theme:Cf(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 Cf(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 Af(){let t=Eo(),e=[];for(let n of t.merged.values()){let s=n.manifest;s.theme&&((s.theme.dropped||[]).length&&Ut("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 Hl(t){let e=String(t??"").trim();if(!e)return null;let n=Af();for(let s of n)if(s.name===e)return s;return null}function xf(){return{root:E.root,enabled:E.enabled,dirs:E.dirs.slice(),globalDir:zi(),trashDir:Gi(),errors:E.errors.slice(),scannedAt:E.scannedAt,plugins:t0(),pending:lE(),tools:Array.from(E.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===Of){let t=require("assert"),e=G.promises;(async function(){let n=G.mkdtempSync(U.join(nr.tmpdir(),"luban-plugin-test-")),s=U.join(n,"proj"),r=U.join(n,"home",".luban","plugins"),o=U.join(s,".luban","plugins");G.mkdirSync(r,{recursive:!0}),G.mkdirSync(o,{recursive:!0});let i=nr.homedir;nr.homedir=function(){return U.join(n,"home")};let a=U.join(r,"demo");G.mkdirSync(a,{recursive:!0}),G.writeFileSync(U.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"}}}}]})),G.writeFileSync(U.join(a,"index.js"),'module.exports={tools:{echo:{handler:async(a)=>"echo:"+(a&&a.text||"")}}};');let l=U.join(o,"demo");G.mkdirSync(l,{recursive:!0}),G.writeFileSync(U.join(l,"plugin.json"),JSON.stringify({name:"demo",version:"2.0.0",readOnly:!1,tools:[{name:"boom",description:"\u629B\u9519",parameters:{type:"object",properties:{}}}]})),G.writeFileSync(U.join(l,"index.js"),'module.exports={tools:{boom:{handler:async()=>{throw new Error("\u70B8\u4E86")}}}};');let c=U.join(r,"bad");G.mkdirSync(c,{recursive:!0}),G.writeFileSync(U.join(c,"plugin.json"),"{ not json");let u=[],d=[];qr({root:s,enabled:!0,rec:function(Ce,Ft){u.push([Ce,Ft])},confirm:async function(Ce){return d.push(Ce.name),!0}}),await Nn(s);let f=xf();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(Ce){return Ce.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(Ce){return Ce.indexOf("bad")===0}),!0,"\u574F\u6E05\u5355\u8981\u8BB0 error"),t.strictEqual(Ao("pl__demo__boom"),!0),t.strictEqual(Ao("pl__demo__echo"),!1,"\u88AB\u9879\u76EE\u8986\u76D6\u7684 echo \u4E0D\u8BE5\u51FA\u73B0"),t.strictEqual(e0("pl__demo__boom"),!1);let m=JSON.stringify(Oo({})),h=JSON.stringify(Oo({}));t.strictEqual(m,h,"\u4E24\u6B21 toolDefs \u9010\u5B57\u8282\u76F8\u540C"),t.strictEqual(Oo({planOnly:!0}).length,0,"\u975E\u53EA\u8BFB\u5DE5\u5177\u4E0D\u8FDB Plan");let y="";try{await Wi("pl__demo__boom",{},{root:s})}catch(Ce){y=Ce.message}t.ok(y.indexOf("\u70B8\u4E86")>=0,"\u629B\u9519\u8981\u5E26\u4E0A\u539F\u56E0\uFF0C\u5B9E\u9645: "+y);let k=U.join(r,"echo");G.mkdirSync(k,{recursive:!0}),G.writeFileSync(U.join(k,"plugin.json"),JSON.stringify({name:"echo",readOnly:!0,tools:[{name:"say",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),G.writeFileSync(U.join(k,"index.js"),'module.exports={tools:{say:{handler:async(a)=>"say:"+(a&&a.text||"")}}}'),E.scannedMs=0,await Nn(s,{quiet:!0});let T=await Wi("pl__echo__say",{text:"hi"},{root:s});t.strictEqual(T,"say:hi","echo \u6B63\u5E38\u8FD4\u56DE\uFF0C\u5B9E\u9645: "+T);let g=U.join(r,"slow");G.mkdirSync(g,{recursive:!0}),G.writeFileSync(U.join(g,"plugin.json"),JSON.stringify({name:"slow",readOnly:!0,tools:[{name:"hang",description:"\u6302\u4F4F",parameters:{type:"object",properties:{}}}]})),G.writeFileSync(U.join(g,"index.js"),"module.exports={tools:{hang:{handler:()=>new Promise(()=>{})}}}"),qr({timeoutMs:300}),E.scannedMs=0,await Nn(s,{quiet:!0});let v="";try{await Wi("pl__slow__hang",{},{root:s})}catch(Ce){v=Ce.message}t.ok(v.indexOf("\u8D85\u65F6")>=0,"\u8981\u8D85\u65F6\uFF0C\u5B9E\u9645: "+v),qr({timeoutMs:Gb}),t.strictEqual(d.indexOf("demo")>=0,!0,"\u9996\u6B21\u8981\u786E\u8BA4 demo");let w=U.join(n,"home",".luban","plugins-trust.json");t.ok(G.existsSync(w),"\u4FE1\u4EFB\u8868\u8981\u843D\u76D8");let S=d.length;G.writeFileSync(U.join(k,"index.js"),'module.exports={tools:{say:{handler:async()=>"changed"}}}'),E.scannedMs=0,await Nn(s,{quiet:!0}),t.ok(d.length>S,"\u5185\u5BB9\u53D8\u4E86\u8981\u91CD\u65B0\u786E\u8BA4"),qr({confirm:async function(){return!1}}),E.trust=new Map,E.trustDirty=!0,E.disabled=new Set,E.scannedMs=0,await Nn(s,{quiet:!0}),t.strictEqual(Oo({}).length,0,"\u5168\u62D2\u7EDD\u540E\u6E05\u5355\u4E3A\u7A7A"),t.ok(xf().pending.length>0,"\u88AB\u62D2\u7684\u63D2\u4EF6\u8981\u8FDB pending"),qr({enabled:!0,confirm:async function(){return!0}}),E.trust=new Map,E.disabled=new Set,E.scannedMs=0,await Nn(s,{quiet:!0});let _=U.join(n,"downloads","pkgs","fresh");G.mkdirSync(_,{recursive:!0}),G.writeFileSync(U.join(_,"plugin.json"),JSON.stringify({name:"fresh",version:"3.1.0",readOnly:!0,tools:[{name:"ping",description:"ping",parameters:{type:"object",properties:{}}}]})),G.writeFileSync(U.join(_,"index.js"),'module.exports={tools:{ping:{handler:async()=>"pong"}}}'),G.mkdirSync(U.join(_,".git"),{recursive:!0}),G.writeFileSync(U.join(_,".git","HEAD"),"ref: refs/heads/main");let C=await Kl(_,{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=U.join(r,"fresh");t.strictEqual(G.existsSync(U.join(A,"plugin.json")),!0,"\u6587\u4EF6\u8981\u843D\u8FDB\u5168\u5C40\u63D2\u4EF6\u6839"),t.strictEqual(G.existsSync(U.join(A,".git")),!1,".git \u4E0D\u8BE5\u88AB\u590D\u5236"),t.strictEqual(Ao("pl__fresh__ping"),!0,"\u88C5\u5B8C\u7ACB\u5373\u53EF\u7528\uFF08\u4FE1\u4EFB + \u91CD\u626B\uFF09"),t.strictEqual(await Wi("pl__fresh__ping",{},{root:s}),"pong");let F=await Kl(_,{trust:!0});t.strictEqual(F.ok,!1,"\u540C\u540D\u4E0D\u5E26 replace \u5E94\u62D2\u7EDD"),t.strictEqual(F.code,"exists");let K=await Kl(_,{trust:!0,replace:!0});t.strictEqual(K.ok,!0,"replace \u5E94\u6210\u529F"),t.strictEqual(K.replaced,!0);let W=wf();t.ok(W.some(function(Ce){return Ce.why==="replaced-by-install"}),"\u65E7\u7248\u8981\u8FDB\u56DE\u6536\u7AD9");let B=await yf("fresh");t.strictEqual(B.ok,!0,"\u5378\u8F7D\u5E94\u6210\u529F\uFF1A"+JSON.stringify(B)),t.strictEqual(G.existsSync(A),!1,"\u63D2\u4EF6\u76EE\u5F55\u8981\u79FB\u8D70"),t.strictEqual(Ao("pl__fresh__ping"),!1,"\u5378\u8F7D\u540E\u5DE5\u5177\u6D88\u5931");let N=wf().find(function(Ce){return Ce.name==="fresh"});t.ok(N,"\u56DE\u6536\u7AD9\u91CC\u5E94\u6709 fresh"),t.strictEqual(N.valid,!0,"\u56DE\u6536\u7AD9\u6761\u76EE\u5E94\u80FD\u89E3\u6790\u6E05\u5355"),t.strictEqual(N.version,"3.1.0"),t.strictEqual(N.from,A,"\u5143\u6570\u636E\u8981\u8BB0\u4F4F\u539F\u4F4D\u7F6E");let J=await bf(N.entry);t.strictEqual(J.ok,!0,"\u8FD8\u539F\u5E94\u6210\u529F\uFF1A"+JSON.stringify(J)),t.strictEqual(J.dir,A,"\u8981\u8FD8\u539F\u56DE\u539F\u4F4D\u7F6E"),t.strictEqual(Ao("pl__fresh__ping"),!0,"\u8FD8\u539F\u540E\u7ACB\u5373\u53EF\u7528");let be=U.join(n,"outside");G.mkdirSync(be,{recursive:!0}),G.writeFileSync(U.join(be,"plugin.json"),JSON.stringify({name:"evil",tools:[{name:"x",description:"x"}]}));let se=await yf(be);t.strictEqual(se.ok,!1,"\u63D2\u4EF6\u6839\u4E4B\u5916\u7684\u76EE\u5F55\u5FC5\u987B\u62D2\u7EDD\u5378\u8F7D"),t.strictEqual(G.existsSync(be),!0,"\u62D2\u7EDD\u540E\u76EE\u5F55\u8FD8\u5728");let Z=await bf("../outside");t.strictEqual(Z.ok,!1,"\u5E26 / \u7684\u56DE\u6536\u7AD9\u6761\u76EE\u8981\u62D2\u7EDD"),G.writeFileSync(U.join(k,"index.js"),'module.exports={tools:{say:{handler:async()=>"dirty"}}}'),qr({enabled:!1}),await Nn(s,{quiet:!0}),t.strictEqual(Oo({}).length,0,"\u5173\u95ED\u540E\u6E05\u5355\u4E3A\u7A7A");let ge=kf();t.ok(ge.plugins.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u5DF2\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+ge.plugins.length),t.ok(ge.pending.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+ge.pending.length);let H=U.join(r,"theme-test");G.mkdirSync(H,{recursive:!0}),G.writeFileSync(U.join(H,"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 _e=Af().find(function(Ce){return Ce.name==="theme-test"});t.ok(_e,"\u5E26 theme \u7684\u63D2\u4EF6\u8981\u51FA\u73B0\u5728 themes() \u91CC\uFF08enabled=false \u4E5F\u8981\u5728\uFF09"),t.strictEqual(_e.label,"\u6D4B\u8BD5\u914D\u8272"),t.strictEqual(_e.tokens.bg,"#101014"),t.strictEqual(_e.tokens.fg,"rgb(240, 240, 245)"),t.strictEqual(_e.tokens.radius,"10px","\u65E0\u5355\u4F4D\u5C3A\u5BF8\u8981\u8865 px"),t.strictEqual(_e.tokens["font-size"],"15px"),t.strictEqual(_e.tokens.border,void 0,"\u5E26\u5206\u53F7 / \u82B1\u62EC\u53F7\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.surface,void 0,"url() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.width,void 0,"\u767D\u540D\u5355\u4E4B\u5916\u7684 token \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.link,void 0,"expression() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(_e.tokens.ok,void 0,"\u62FC\u4E0D\u6210\u989C\u8272 / \u5177\u540D\u8272\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.ok(_e.dropped.length>=5,"\u4E22\u5F03\u8981\u6709\u7559\u75D5\uFF0C\u5B9E\u9645: "+JSON.stringify(_e.dropped)),t.strictEqual(Hl("theme-test").tokens.accent,"#ff5fa2","themeOf \u6309\u540D\u53D6\u5230 tokens"),t.strictEqual(Hl("nope"),null,"\u4E0D\u5B58\u5728\u7684\u63D2\u4EF6\u540D\u56DE null"),t.strictEqual(Hl(""),null,"\u7A7A\u540D\u56DE null");let ht=U.join(r,"theme-broken");G.mkdirSync(ht,{recursive:!0}),G.writeFileSync(U.join(ht,"plugin.json"),JSON.stringify({name:"theme-broken",theme:{tokens:{bg:"red;}",fg:"url(x)"}}}));let xt=kf();t.ok(xt.errors.some(function(Ce){return Ce.indexOf("theme-broken")===0}),"\u5168\u975E\u6CD5 token \u7684\u4E3B\u9898\u63D2\u4EF6\u8981\u8BB0 error\uFF0C\u5B9E\u9645: "+JSON.stringify(xt.errors)),t.strictEqual(xt.plugins.concat(xt.pending).some(function(Ce){return Ce.name==="theme-broken"}),!1,"\u574F\u4E3B\u9898\u63D2\u4EF6\u4E0D\u8BE5\u51FA\u73B0\u5728\u6E05\u5355\u91CC"),nr.homedir=i,G.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)})}Of.exports={configure:qr,refresh:Nn,reload:nE,list:t0,status:xf,toolDefs:Oo,hasTool:Ao,findTool:Tf,readOnlyOf:e0,callTool:Wi,installFromDir:Kl,uninstall:yf,trashList:wf,restoreFromTrash:bf,trustDir:_f,inventory:kf,themes:Af,themeOf:Hl,scopeOf:rr,globalDir:zi,trashDir:Gi,_cleanName:Br,_exposedBase:Jb,_parseManifest:sr,_dirFingerprint:Ki,_scanRaw:Eo,_state:E,_ttl:zb}});var Nf=Q((KL,u0)=>{"use strict";var Be=require("fs"),s0=require("os"),ze=require("path"),Ji=Ii(),r0="skills-trash",Ef=".installed.json",o0={root:""};function cE(t){let e=t||{};e.root&&(o0.root=String(e.root))}function uE(){return ze.resolve(o0.root||process.cwd())}function $l(){return ze.join(s0.homedir(),".luban","skills")}function Xl(){return ze.join(s0.homedir(),".luban",r0)}function Pf(t){return ze.join(t||uE(),".luban","skills")}function i0(t){return t==="project"?Pf():$l()}function $i(t){let e=ze.resolve(String(t||"")),n=[{scope:"global",base:$l()},{scope:"project",base:Pf()}];for(let s of n){let r=ze.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!ze.isAbsolute(r)&&r.indexOf(ze.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function n0(){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 Vl(t,e){Be.mkdirSync(e,{recursive:!0});for(let n of Be.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=ze.join(t,n.name),r=ze.join(e,n.name);n.isDirectory()?Vl(s,r):n.isFile()&&Be.copyFileSync(s,r)}}function Yl(t){try{let e=JSON.parse(Be.readFileSync(ze.join(t,Ef),"utf8"));if(e&&typeof e=="object"&&e.skills&&typeof e.skills=="object")return e}catch{}return{version:1,skills:{}}}function jf(t,e){Be.mkdirSync(t,{recursive:!0}),Be.writeFileSync(ze.join(t,Ef),JSON.stringify(e,null,2)+`
251
251
  `)}function a0(){let t=[];for(let e of["global","project"]){let n=i0(e),s=Yl(n),r;try{r=Be.readdirSync(n,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=ze.join(n,o.name),a=Ji.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 l0(t){let e=String(t||"").trim();if(!e)return null;let n=a0();return n.find(function(s){return s.name===e&&s.scope==="project"})||n.find(function(s){return s.name===e})||null}function c0(t,e,n){let s=ze.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=Xl();Be.mkdirSync(o,{recursive:!0,mode:448});let i=r.name.replace(/[^a-z0-9._-]/gi,"_"),a=i+"-"+n0(),l=2;for(;Be.existsSync(ze.join(o,a))||Be.existsSync(ze.join(o,a+".json"));)a=i+"-"+n0()+"-"+l,l++;let c=ze.join(o,a);try{Be.renameSync(s,c)}catch(u){if(u&&u.code==="EXDEV")Vl(s,c),Be.rmSync(s,{recursive:!0,force:!0});else throw u}return Be.writeFileSync(c+".json",JSON.stringify(Object.assign({name:r.name,from:s,scope:r.scope,at:new Date().toISOString(),why:e||""},n||{}),null,2)+`
252
- `),a}function dE(t,e){let n=e||{},s=ze.resolve(String(t||"")),r;try{r=Be.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=Ji.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=i0(a),c=ze.join(l,i);if(ze.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(Be.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{c0(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{Vl(s,c)}catch(p){try{Be.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+p.message}}let d=Ji.readSkillManifest(c);if(!d.ok){try{Be.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=Yl(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()},jf(l,f),{ok:!0,name:i,dir:c,scope:a,replaced:u,version:f.skills[i].version}}function fE(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=ze.resolve(s);else{let u=l0(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=c0(o,n.why||"uninstall")}catch(u){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+u.message}}let l=i.base,c=Yl(l);return c.skills[i.name]&&(delete c.skills[i.name],jf(l,c)),{ok:!0,name:i.name,dir:o,trash:a}}function pE(){let t=Xl(),e;try{e=Be.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=ze.join(t,s.name),o={};try{o=JSON.parse(Be.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ji.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 mE(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=ze.join(Xl(),s);if(!Be.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o={};try{o=JSON.parse(Be.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ji.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=ze.resolve(c);Be.existsSync(ze.dirname(d))&&!Be.existsSync(d)&&$i(d)&&(l=d)}if(l||(l=ze.join($l(),a)),Be.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+l};Be.mkdirSync(ze.dirname(l),{recursive:!0});try{Be.renameSync(r,l)}catch(d){if(d&&d.code==="EXDEV")Vl(r,l),Be.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+d.message}}try{Be.rmSync(r+".json",{force:!0})}catch{}let u=$i(l);if(u){let d=Yl(u.base);d.skills[u.name]||(d.skills[u.name]={version:i.ok?i.manifest.version:"",tag:"",sourceSha256:"",repo:"",installedAt:new Date().toISOString()},jf(u.base,d))}return{ok:!0,name:a,dir:l,scope:u?u.scope:""}}u0.exports={TRASH_DIRNAME:r0,LIST_FILENAME:Ef,configure:cE,globalDir:$l,projectDir:Pf,trashDir:Xl,scopeOf:$i,installed:a0,find:l0,installFromDir:dE,uninstall:fE,trashList:pE,restoreFromTrash:mE}});var k0=Q((HL,b0)=>{"use strict";var Zt=require("fs"),hE=require("os"),jt=require("path"),{execFile:gE}=require("child_process"),Wt=Ii(),Ql=Nf(),f0="https://raw.githubusercontent.com/eppen/luban-plugins/main/registry/registry.json",p0=6e4,yE=3e4,wE={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 Xi(t){return/^https?:\/\//i.test(String(t||""))}function Df(t){let e=t||process.cwd();try{Ur().configure({root:e})}catch{}Ql.configure({root:e})}function Vi(t){let e=t||{};if(e.registry)return e.registry;if(process.env.LUBAN_REGISTRY)return process.env.LUBAN_REGISTRY;let n=[jt.join(__dirname,"registry","registry.json"),jt.join(__dirname,"..","registry","registry.json")];for(let s of n)if(Zt.existsSync(s))return s;return f0}function bE(){let t=[jt.join(__dirname,"registry","registry.json"),jt.join(__dirname,"..","registry","registry.json")];for(let e of t)if(Zt.existsSync(e))return e;return""}async function kE(t,e){let n=new AbortController,s=setTimeout(function(){n.abort()},e||yE);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 Yi(t,e){return Xi(t)?kE(t,e):Zt.readFileSync(Wt.expandHome(t),"utf8")}async function Zi(t,e){let n={},s=Xi(e)?e:jt.resolve(Wt.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]=Wt.parsePublicKey(r.publicKey)}catch{}continue}let o=String(r.publicKey||"keys/"+r.keyId+".pub"),i=Xi(s)?new URL(o,s).toString():jt.join(jt.dirname(s),o);try{let a=JSON.parse(await Yi(i));n[r.keyId]=Wt.parsePublicKey(a.publicKey)}catch{}}return n}function d0(t,e,n){return new Promise(function(s,r){gE(t,e,{timeout:n||p0,maxBuffer:4*1024*1024},function(o,i,a){if(o){let l=String(a||o.message||"").trim().split(`
253
- `).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 xE(t){let e=jt.join(hE.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 m0(t,e){let n=e||{},s=t.install||{},r=t.name,o=t.version;if(s.type==="local"){let l=Wt.expandHome(s.path||"");if(!l||!Zt.existsSync(l))throw new Error("\u672C\u5730\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A"+(s.path||"(\u7A7A)"));return{dir:jt.resolve(l),cleanup:function(){},kind:"local"}}let i=xE(r),a=function(){try{Zt.rmSync(i,{recursive:!0,force:!0})}catch{}};if(s.type==="git"){if(!Xi(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||Wt.tagFor(r,o),c=jt.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 d0("git",["clone","--depth","1","--branch",l,"--single-branch",u[p],c]),d=null;break}catch(m){if(d=m,m.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?jt.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(!Xi(s.url))throw a(),new Error("tarball \u6765\u6E90\u9700\u8981 http(s) \u5730\u5740");let l=jt.join(i,"pkg.tgz"),c=Buffer.from(await async function(){let p=new AbortController,m=setTimeout(function(){p.abort()},p0);try{let h=await fetch(s.url,{signal:p.signal});if(!h.ok)throw new Error("HTTP "+h.status);return await h.arrayBuffer()}finally{clearTimeout(m)}}());Zt.writeFileSync(l,c);let u=jt.join(i,"x");Zt.mkdirSync(u,{recursive:!0});try{await d0("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?jt.join(u,d[0],s.subdir):jt.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 h0(t,e){if(t&&t.type==="skill"){let r=Wt.readSkillManifest(e);if(!r.ok)return{ok:!1,message:r.message};let o=Wt.sameSkill(t,r.manifest);return o.ok?{ok:!0,manifest:r.manifest}:{ok:!1,message:o.message}}let n=jt.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}:Wt.sameTools(t.tools,s.tools)?Wt.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 g0(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 m0(t,n)}catch(a){return{ok:!1,code:"source",message:a.message}}try{let a=h0(t,i.dir);if(!a.ok)return{ok:!1,code:"manifest",message:"\u6E05\u5355\u6821\u9A8C\u5931\u8D25\uFF1A"+a.message};let l=Wt.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"){Df(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=Ur();Df(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 y0(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=Vi(n),o;try{o=JSON.parse(await Yi(r))}catch(p){return{ok:!1,code:"registry",message:"\u8BFB\u53D6\u7D22\u5F15\u5931\u8D25\uFF08"+r+"\uFF09\uFF1A"+p.message+`
252
+ `),a}function dE(t,e){let n=e||{},s=ze.resolve(String(t||"")),r;try{r=Be.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=Ji.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=i0(a),c=ze.join(l,i);if(ze.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(Be.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{c0(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{Vl(s,c)}catch(p){try{Be.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+p.message}}let d=Ji.readSkillManifest(c);if(!d.ok){try{Be.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=Yl(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()},jf(l,f),{ok:!0,name:i,dir:c,scope:a,replaced:u,version:f.skills[i].version}}function fE(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=ze.resolve(s);else{let u=l0(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=c0(o,n.why||"uninstall")}catch(u){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+u.message}}let l=i.base,c=Yl(l);return c.skills[i.name]&&(delete c.skills[i.name],jf(l,c)),{ok:!0,name:i.name,dir:o,trash:a}}function pE(){let t=Xl(),e;try{e=Be.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=ze.join(t,s.name),o={};try{o=JSON.parse(Be.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ji.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 mE(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=ze.join(Xl(),s);if(!Be.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o={};try{o=JSON.parse(Be.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=Ji.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=ze.resolve(c);Be.existsSync(ze.dirname(d))&&!Be.existsSync(d)&&$i(d)&&(l=d)}if(l||(l=ze.join($l(),a)),Be.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+l};Be.mkdirSync(ze.dirname(l),{recursive:!0});try{Be.renameSync(r,l)}catch(d){if(d&&d.code==="EXDEV")Vl(r,l),Be.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+d.message}}try{Be.rmSync(r+".json",{force:!0})}catch{}let u=$i(l);if(u){let d=Yl(u.base);d.skills[u.name]||(d.skills[u.name]={version:i.ok?i.manifest.version:"",tag:"",sourceSha256:"",repo:"",installedAt:new Date().toISOString()},jf(u.base,d))}return{ok:!0,name:a,dir:l,scope:u?u.scope:""}}u0.exports={TRASH_DIRNAME:r0,LIST_FILENAME:Ef,configure:cE,globalDir:$l,projectDir:Pf,trashDir:Xl,scopeOf:$i,installed:a0,find:l0,installFromDir:dE,uninstall:fE,trashList:pE,restoreFromTrash:mE}});var k0=Q((HL,b0)=>{"use strict";var Zt=require("fs"),hE=require("os"),Nt=require("path"),{execFile:gE}=require("child_process"),Wt=Ii(),Ql=Nf(),f0="https://raw.githubusercontent.com/eppen/luban-plugins/main/registry/registry.json",p0=6e4,yE=3e4,wE={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 Xi(t){return/^https?:\/\//i.test(String(t||""))}function Df(t){let e=t||process.cwd();try{Ur().configure({root:e})}catch{}Ql.configure({root:e})}function Vi(t){let e=t||{};if(e.registry)return e.registry;if(process.env.LUBAN_REGISTRY)return process.env.LUBAN_REGISTRY;let n=[Nt.join(__dirname,"registry","registry.json"),Nt.join(__dirname,"..","registry","registry.json")];for(let s of n)if(Zt.existsSync(s))return s;return f0}function bE(){let t=[Nt.join(__dirname,"registry","registry.json"),Nt.join(__dirname,"..","registry","registry.json")];for(let e of t)if(Zt.existsSync(e))return e;return""}async function kE(t,e){let n=new AbortController,s=setTimeout(function(){n.abort()},e||yE);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 Yi(t,e){return Xi(t)?kE(t,e):Zt.readFileSync(Wt.expandHome(t),"utf8")}async function Zi(t,e){let n={},s=Xi(e)?e:Nt.resolve(Wt.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]=Wt.parsePublicKey(r.publicKey)}catch{}continue}let o=String(r.publicKey||"keys/"+r.keyId+".pub"),i=Xi(s)?new URL(o,s).toString():Nt.join(Nt.dirname(s),o);try{let a=JSON.parse(await Yi(i));n[r.keyId]=Wt.parsePublicKey(a.publicKey)}catch{}}return n}function d0(t,e,n){return new Promise(function(s,r){gE(t,e,{timeout:n||p0,maxBuffer:4*1024*1024},function(o,i,a){if(o){let l=String(a||o.message||"").trim().split(`
253
+ `).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 xE(t){let e=Nt.join(hE.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 m0(t,e){let n=e||{},s=t.install||{},r=t.name,o=t.version;if(s.type==="local"){let l=Wt.expandHome(s.path||"");if(!l||!Zt.existsSync(l))throw new Error("\u672C\u5730\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A"+(s.path||"(\u7A7A)"));return{dir:Nt.resolve(l),cleanup:function(){},kind:"local"}}let i=xE(r),a=function(){try{Zt.rmSync(i,{recursive:!0,force:!0})}catch{}};if(s.type==="git"){if(!Xi(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||Wt.tagFor(r,o),c=Nt.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 d0("git",["clone","--depth","1","--branch",l,"--single-branch",u[p],c]),d=null;break}catch(m){if(d=m,m.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?Nt.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(!Xi(s.url))throw a(),new Error("tarball \u6765\u6E90\u9700\u8981 http(s) \u5730\u5740");let l=Nt.join(i,"pkg.tgz"),c=Buffer.from(await async function(){let p=new AbortController,m=setTimeout(function(){p.abort()},p0);try{let h=await fetch(s.url,{signal:p.signal});if(!h.ok)throw new Error("HTTP "+h.status);return await h.arrayBuffer()}finally{clearTimeout(m)}}());Zt.writeFileSync(l,c);let u=Nt.join(i,"x");Zt.mkdirSync(u,{recursive:!0});try{await d0("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?Nt.join(u,d[0],s.subdir):Nt.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 h0(t,e){if(t&&t.type==="skill"){let r=Wt.readSkillManifest(e);if(!r.ok)return{ok:!1,message:r.message};let o=Wt.sameSkill(t,r.manifest);return o.ok?{ok:!0,manifest:r.manifest}:{ok:!1,message:o.message}}let n=Nt.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}:Wt.sameTools(t.tools,s.tools)?Wt.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 g0(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 m0(t,n)}catch(a){return{ok:!1,code:"source",message:a.message}}try{let a=h0(t,i.dir);if(!a.ok)return{ok:!1,code:"manifest",message:"\u6E05\u5355\u6821\u9A8C\u5931\u8D25\uFF1A"+a.message};let l=Wt.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"){Df(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=Ur();Df(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 y0(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=Vi(n),o;try{o=JSON.parse(await Yi(r))}catch(p){return{ok:!1,code:"registry",message:"\u8BFB\u53D6\u7D22\u5F15\u5931\u8D25\uFF08"+r+"\uFF09\uFF1A"+p.message+`
254
254
  \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",m=l==="skill"?"\u6280\u80FD":"\u63D2\u4EF6";return{ok:!1,code:"wrong-type",message:s+" \u662F"+m+"\uFF0C\u4E0D\u662F"+p+"\uFF08\u7528 luban "+(l==="skill"?"skill":"plugin")+" add "+s+"\uFF09"}}let c=await Zi(o,r),u=Wt.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 g0(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 w0(t,e){let n=e||{},s=n.root||process.cwd(),r=Ur();Df(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 Ff(t){let e=t||{},n=Vi(e),s=JSON.parse(await Yi(n)),r=await Zi(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=Wt.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 SE(t){let e=t||{},n=e.registry||Vi(e),s;try{s=JSON.parse(await Yi(n,e.timeoutMs))}catch(i){return{ok:!1,source:n,error:String(i&&i.message||i),entries:[]}}let r=await Zi(s,n),o=(s.entries||[]).map(function(i){let a=Wt.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 vE(t){let e=t||{},n=e.registry||Vi(e),s;try{s=JSON.parse(await Yi(n,e.timeoutMs))}catch(o){return{ok:!1,source:n,error:String(o&&o.message||o),registry:null}}let r=await Zi(s,n);return{ok:!0,source:n,registry:s,keys:r,error:""}}function Zl(t,e){try{return Ti().paint(t,e)}catch{return e}}function If(t){let e=Object.keys(t||{}).filter(function(n){return t[n]===!0});return e.length?e.map(function(n){return wE[n]||n}).join("\u3001"):"\u65E0\uFF08\u7EAF\u8BA1\u7B97\uFF09"}function _E(){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(`
255
255
  `)+`
256
256
  `)}function TE(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 Ze(t){process.stdout.write(t+`
@@ -269,25 +269,25 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var _b=Q((BL
269
269
  `),2}b0.exports={DEFAULT_REGISTRY_URL:f0,registrySource:Vi,bundledRegistryPath:bE,loadKeys:Zi,readRegistry:SE,readRegistryRaw:vE,fetchSource:m0,checkManifest:h0,install:y0,installEntry:g0,remove:w0,list:Ff,dirHash:Wt.dirHash,runCli:ME}});var M0=Q((zL,T0)=>{"use strict";var Lf=gi(),x0=26,CE="$(sync~spin)",tc={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"},AE={thinking:1,typing:1,tool:1,waiting:1},OE={tool:1,typing:1,waiting:1,thinking:1};function Rf(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 tc[n]||tc.idle}function Po(t,e){let n=String(t??"").replace(/\s+/g," ").trim();if(!n)return"";if(Lf.displayWidth(n)<=e)return n;let s="";for(let r of n){if(Lf.displayWidth(s+r)>e-1)break;s+=r}return s+"\u2026"}function S0(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 v0(t,e){let n=e||{},s=t&&typeof t=="object"?t:{},r=tc[s.state]?s.state:"idle",o=typeof n.now=="function"?n.now():Date.now(),i=s.mood||"idle",a=Lf.face(i),l=!!AE[r],c=OE[r]?String(s.text||"").trim():"",u=Po(c||Rf(r,n.tr),x0),d=(l?CE+" ":"")+a+" "+u,f=[];f.push("**\u73ED\u73ED \xB7 "+Rf(r,n.tr)+"**"),f.push(""),s.text&&(f.push("`"+Po(s.text,80)+"`"),f.push("")),s.task&&f.push("- \u4EFB\u52A1\uFF1A"+Po(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"+Po(s.workspace,100)),s.error&&s.error.message&&f.push("- \u4E0A\u6B21\u9519\u8BEF\uFF1A"+Po(s.error.message,160)),s.since&&f.push("",(l?"\u5DF2\u6301\u7EED ":"\u5DF2\u7A7A\u95F2 ")+S0(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(`
270
270
  `),color:p,state:r,busy:l,face:a}}function _0(t){try{return t.workspace.getConfiguration("luban").get("statusBar.enabled")!==!1}catch{return!0}}function EE(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=v0(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(!_0(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}}}}T0.exports={LABELS:tc,LABEL_MAX:x0,labelOf:Rf,clipDisplay:Po,elapsed:S0,render:v0,enabled:_0,mount:EE}});var L0=Q((GL,F0)=>{"use strict";function qf(t){let e=String(t??"");return e?Math.max(1,Math.ceil(e.length/3)):0}function Bf(t){return!t||!t.provider||!t.model?"":String(t.provider.id)+"::"+String(t.model.id)}function C0(t,e){let n=Number(t);return isFinite(n)&&n>0?Math.floor(n):e}function A0(t,e){let n=e||{},s=t.provider||{},r=t.model||{},o=C0(r.maxInputTokens,65536),i=Math.min(C0(r.maxOutputTokens,8192),o),a=String(s.name||s.id)+" / "+String(r.id);return{id:Bf(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?`
271
271
  `+String(s.baseUrl):""),capabilities:{imageInput:r.vision===!0,toolCalling:r.toolCalling!==!1}}}function O0(t,e){let n=[];for(let s of t||[])!s||!s.provider||!s.model||n.push(A0(s,e));return n}function Uf(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 E0(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 Wf(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 P0(t,e){let n=[];for(let s of t||[]){if(!s)continue;let r=E0(s.role,e),o=Array.isArray(s.content)?s.content:[],i="",a=[],l=[];for(let c of o){let u=Uf(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:Wf(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 j0(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 N0(t,e){if(!t)return 0;let n=0,s=Array.isArray(t.content)?t.content:[];for(let r of s){let o=Uf(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+=Wf(r,e).length)}return n}function I0(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 D0(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 Bf(d)===c})||null}return{provideLanguageModelChatInformation:async function(l,c){let u=O0(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 m=P0(c,n),h=j0(u&&u.tools),y=function(v){try{d.report(v)}catch(w){o("lm_report_failed",{message:String(w&&w.message||w).slice(0,160)})}},k=Number(u&&u.modelOptions&&u.modelOptions.max_tokens)||0;o("lm_request",{model:String(l&&l.id),messages:m.length,tools:h.length,chars:m.reduce(function(v,w){return v+String(w.content||"").length+(w.tool_calls?JSON.stringify(w.tool_calls).length:0)},0)});let T=await s(m,p.key,{tools:h.length?h:void 0,signal:f,snapshot:!1,maxTokens:k>0?k:void 0,onToken:function(v){v&&y(new n.LanguageModelTextPart(String(v)))}}),g=T&&T.toolCalls||[];for(let v of g){let w=v&&v.function||{},S=String(v&&v.id?v.id:"luban-call-"+Date.now());y(new n.LanguageModelToolCallPart(S,String(w.name||""),I0(w.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 qf(typeof c=="string"?c:N0(c,n))}}}function PE(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=D0(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}}F0.exports={estimateTokens:qf,modelIdOf:Bf,modelInfoOf:A0,modelInfos:O0,toOpenAiMessages:P0,toOpenAiTools:j0,charsOfMessage:N0,parseToolInput:I0,createProvider:D0,register:PE,partKind:Uf,isAssistantRole:E0,toolResultText:Wf,CHARS_PER_TOKEN:3,DEFAULT_MAX_IN:65536,DEFAULT_MAX_OUT:8192}});var Yf=Q((JL,V0)=>{var Wr=require("fs"),B0=require("os"),Hf=require("path"),Jf=process.env.LUBAN_WEBDAV_CONFIG?Hf.resolve(process.env.LUBAN_WEBDAV_CONFIG):Hf.join(B0.homedir(),".luban","webdav.json"),jo="luban",$f=["sessions","attachments","plans","config","mcp"],U0=6e4,W0=/^[A-Za-z0-9._-]+$/,Xf=6;function R0(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function jE(){let t=Object.create(null);for(let e of $f)t[e]=!0;return t}function K0(){return{enabled:!1,url:"",username:"",remoteDir:jo,perMachine:!1,includes:jE(),lastBackupAt:"",lastRestoreAt:""}}function q0(t){let e=String(t??"").trim();if(!e)return"";let n=Date.parse(e);return isNaN(n)?"":new Date(n).toISOString()}function H0(t){let e=String(t??"").trim().replace(/^\/+/,"").replace(/\/+$/,"");if(!e)return{ok:!0,value:jo};let n=e.split("/");if(n.length>Xf)return{ok:!1,value:jo};for(let s of n)if(!s||s==="."||s===".."||!W0.test(s))return{ok:!1,value:jo};return{ok:!0,value:n.join("/")}}function sc(t){let e=R0(t)?t:{},n=[],s=K0(),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=H0(e.remoteDir);o.ok||n.push("webdav.errRemoteDir"),s.remoteDir=o.value,s.perMachine=e.perMachine===!0,s.perMachine&&nc(s.remoteDir).length>Xf-1&&n.push("webdav.errRemoteDir");let i=R0(e.includes)?e.includes:{};for(let a of $f)if(i[a]!==void 0){if(typeof i[a]!="boolean"){n.push("webdav.errInclude");continue}s.includes[a]=i[a]}return s.lastBackupAt=q0(e.lastBackupAt),s.lastRestoreAt=q0(e.lastRestoreAt),{config:s,errors:n}}function NE(t){let e=t&&t.path?String(t.path):Jf,n=null;try{n=JSON.parse(Wr.readFileSync(e,"utf8"))}catch{n=null}return sc(n||{}).config}function IE(t,e){let n=e&&e.path?String(e.path):Jf,s=sc(t);if(s.errors.length)return{ok:!1,errors:s.errors,config:s.config};Wr.mkdirSync(Hf.dirname(n),{recursive:!0,mode:448});let r=n+".tmp";if(Wr.writeFileSync(r,JSON.stringify(s.config,null,2)+`
272
- `,{mode:384}),Wr.existsSync(n))try{Wr.copyFileSync(n,n+".bak")}catch{}Wr.renameSync(r,n);try{Wr.chmodSync(n,384)}catch{}return{ok:!0,config:s.config,path:n}}function or(t){let e=sc(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 nc(t){return String(t??"").split("/").filter(function(e){return!!e})}function z0(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 DE(t){let e=String(t??"");return!e||e.length>64||e==="."||e===".."?!1:W0.test(e)}function G0(t){let e=String(t&&t.remoteDir||jo);return!t||t.perMachine!==!0?e:e+"/"+z0(t.machine||B0.hostname())}function Vf(t,e,n){let s=String(t.url==null?"":t.url).replace(/\/+$/,"");if(n)return s+"/";let r=nc(G0(t)).concat(nc(e));return s+"/"+r.map(encodeURIComponent).join("/")}function J0(t,e){return"Basic "+Buffer.from(String(t||"")+":"+String(e||""),"utf8").toString("base64")}async function rr(t,e){let n=e||{},s=or(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=J0(s.username,s.password));let o=Number(n.timeoutMs)>0?Number(n.timeoutMs):U0,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=Vf(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 FE(t){try{return await t.res.text()}catch{return""}}function No(t){return t===401||t===403?"webdav.errAuth":t===404?"webdav.errRemotePath":"webdav.errHttp"}async function LE(t){let e=or(t);if(!e.url)return{ok:!1,error:"webdav.errNeedUrl"};let n=Date.now(),s;try{s=await rr(e,{method:"PROPFIND",path:"",headers:{Depth:"0"},body:zf})}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 rr(e,{method:"PROPFIND",path:"",root:!0,headers:{Depth:"0"},body:zf})}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:No(s.status),ms:Date.now()-n}}var zf='<?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 RE(t,e){let n=or(t),s=nc(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 rr(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(No(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 qE(t,e,n,s){let r=or(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 rr(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(No(l.status));throw c.code="http",c.status=l.status,c}async function BE(t,e,n){let s=or(t),o=await rr(s,{method:"GET",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return null;if(!o.ok){let a=new Error(No(o.status));throw a.code="http",a.status=o.status,a}let i=await o.res.arrayBuffer();return Buffer.from(i)}async function UE(t,e,n){let s=or(t),o=await rr(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(No(o.status));throw i.code="http",i.status=o.status,i}return{ok:!0,status:o.status}}function Kf(t,e){let s=new RegExp("<(?:[\\w.-]+:)?"+e+"\\b[^>]*>([\\s\\S]*?)</(?:[\\w.-]+:)?"+e+">","i").exec(t);return s?s[1]:""}function $0(t){let e=String(t||"").trim();if(!e)return"";let n=e;try{n=decodeURIComponent(e)}catch{}return n}function Gf(t){return String(t||"").replace(/^[a-z]+:\/\/[^/]+/i,"").replace(/\/+$/,"")}function X0(t){let e=String(t||""),n=[],s=e.match(/<(?:[\w.-]+:)?response\b[\s\S]*?<\/(?:[\w.-]+:)?response>/gi)||[];for(let r of s){let o=$0(Kf(r,"href"));if(!o)continue;let i=/<(?:[\w.-]+:)?collection\b/i.test(r),a=Number(String(Kf(r,"getcontentlength")||"").trim()),l=String(Kf(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 WE(t,e,n){let s=or(t),o=await rr(s,{method:"PROPFIND",path:e,headers:{Depth:"1"},body:zf,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return[];if(!o.ok&&o.status!==207){let l=new Error(No(o.status));throw l.code="http",l.status=o.status,l}let i=await FE(o),a=Gf($0(Vf(s,e)));return X0(i).filter(function(l){return Gf(l.href)!==a})}V0.exports={WEBDAV_CONFIG_PATH:Jf,DEFAULT_REMOTE_DIR:jo,INCLUDE_KEYS:$f,REQUEST_TIMEOUT_MS:U0,MAX_SEGMENTS:Xf,defaultConfig:K0,normalizeConfig:sc,normalizeRemoteDir:H0,sanitizeMachineSegment:z0,isSafeSegment:DE,effectiveRemoteDir:G0,loadConfig:NE,saveConfig:IE,urlFor:Vf,pathOfHref:Gf,basicAuth:J0,request:rr,testConnection:LE,ensureDir:RE,putFile:qE,getFile:BE,deleteFile:UE,listDir:WE,parseMultiStatus:X0,__requestConfig:or}});var pk=Q(($L,fk)=>{var Nt=require("fs"),ic=require("os"),ot=require("path"),KE=require("crypto"),Le=Yf(),ac=ot.join(ic.homedir(),".luban"),Ts="manifest.json",HE=1,lc=2,Qf=5,Zf=3,zE=500,Y0=/^[A-Za-z0-9_-]+\.json$/,Z0=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,Q0=/^[^\/\\:*?"<>|\u0000-\u001f]{1,180}\.md$/,ek=/^[A-Za-z0-9_-]+$/;function ep(t){return KE.createHash("sha1").update(t).digest("hex")}function Qi(t){return(t<10?"0":"")+t}function tk(t){let e=t||new Date;return e.getFullYear()+Qi(e.getMonth()+1)+Qi(e.getDate())+"-"+Qi(e.getHours())+Qi(e.getMinutes())+Qi(e.getSeconds())}function GE(t){return t instanceof Date&&!isNaN(t.getTime())?t.toISOString():""}function nk(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 sk(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&&Y0.test(n[1])?e:"":s==="plans"?n.length===2&&Q0.test(n[1])?e:"":s==="config"?n.length===2&&(n[1]==="providers.json"||n[1]==="mcp.json")?e:"":s==="attachments"?n.length!==3?"":ek.test(n[1])&&Z0.test(n[2])?e:"":""}var rk=["sessions","attachments","plans","providers","mcp"];function ok(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 ta(t){let e=Object.create(null);for(let n of rk)e[n]=0;for(let n of Array.isArray(t)?t:[]){let s=ok(n);s&&e[s]++}return e}function ik(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)+`
273
- `,redacted:n}}function rc(t){try{return Nt.readdirSync(t,{withFileTypes:!0})}catch{return[]}}function ea(t,e,n,s,r){let o=r||{},i;try{i=Nt.statSync(n)}catch{return e.push({relPath:s,reason:"stat"}),null}if(!i.isFile())return null;let a;try{a=Nt.readFileSync(n)}catch{return e.push({relPath:s,reason:"read"}),null}let l=!1;if(o.redact){let u=ik(a.toString("utf8"));a=Buffer.from(u.text,"utf8"),l=u.redacted}let c={relPath:s,absPath:n,size:a.length,mtime:GE(i.mtime),sha1:ep(a)};return o.redact&&(c.inline=a,c.redacted=l),t.push(c),c}function tp(t){let e=t||{},n=e.home?ot.resolve(e.home):ac,s=nk(e.includes),r=[],o=[],i=!1;if(s.sessions){let a=ot.join(n,"sessions");for(let l of rc(a))if(l.isFile()){if(!Y0.test(l.name)){o.push({relPath:"sessions/"+l.name,reason:"pattern"});continue}ea(r,o,ot.join(a,l.name),"sessions/"+l.name)}}if(s.attachments){let a=ot.join(n,"attachments");for(let l of rc(a)){if(!l.isDirectory()||!ek.test(l.name))continue;let c=ot.join(a,l.name);for(let u of rc(c))if(u.isFile()){if(!Z0.test(u.name)){o.push({relPath:"attachments/"+l.name+"/"+u.name,reason:"pattern"});continue}ea(r,o,ot.join(c,u.name),"attachments/"+l.name+"/"+u.name)}}}if(s.plans){let a=ot.join(n,"plans");for(let l of rc(a))if(l.isFile()){if(!Q0.test(l.name)){o.push({relPath:"plans/"+l.name,reason:"pattern"});continue}ea(r,o,ot.join(a,l.name),"plans/"+l.name)}}if(s.config){let a=ot.join(n,"providers.json");if(Nt.existsSync(a)){let l=ea(r,o,a,"config/providers.json",{redact:!0});l&&l.redacted&&(i=!0)}}if(s.mcp){let a=ot.join(n,"mcp.json");Nt.existsSync(a)&&ea(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 ak(t,e,n){let s=e||{},r=new Set(n||[]),o={schema:HE,app:"luban",version:String(s.version||""),machine:String(s.machine||ic.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 lk(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 ck(t){return t&&t.inline!==void 0?Buffer.isBuffer(t.inline)?t.inline:Buffer.from(String(t.inline),"utf8"):Nt.readFileSync(t.absPath)}function na(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 cc(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 uk(t){return!!t&&(t.code==="timeout"||t.code==="network")}function JE(t){return new Promise(function(e){setTimeout(e,t)})}async function np(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<Zf;){d++;try{await n(u,c),f=null;break}catch(p){if(f=p,!uk(p))break;d<Zf&&await JE(zE*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 $E(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 XE(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||ic.hostname();if(c.machine&&c.machine!==A&&!isNaN(_)&&(isNaN(C)||_>C))return VE(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=tp({home:s.home,includes:s.includes||a.includes}),d=u.files,f=d.length,p=lk(d,c,{mode:s.force?"force":"newer"}),m=Object.create(null);for(let _ of d)m[_.relPath]=_;let h=p.upload.concat(p.blocked.map(function(_){return m[_.relPath]||_})),y=p.skip.length;await Le.ensureDir(o,"");for(let _ of $E(h))await Le.ensureDir(o,_);let k=0;r({phase:"upload",done:0,total:h.length,current:""});let T=[];try{T=(await np(h,lc,async function(C){let A=ck(C);await Le.putFile(o,C.relPath,A),C.sha1=ep(A),C.size=A.length},function(C){k++,(k%Qf===0||k===h.length)&&r({phase:"upload",done:k,total:h.length,current:C.relPath})})).failures}catch(_){return{ok:!1,phase:"upload",error:_.message||"webdav.errNetwork",status:_.status||0,done:k,total:f,files:f}}let g=T.map(function(_){return _.item.relPath});function v(_){let C=new Set(_||[]);return ta(d.filter(function(A){return!C.has(A.relPath)}).map(function(A){return A.relPath}))}r({phase:"manifest",done:h.length,total:h.length,current:Ts});let w=new Date().toISOString(),S=ak(d,{version:s.version,machine:s.machine,createdAt:w},g);return await Le.putFile(o,Ts,Buffer.from(JSON.stringify(S,null,2)+`
272
+ `,{mode:384}),Wr.existsSync(n))try{Wr.copyFileSync(n,n+".bak")}catch{}Wr.renameSync(r,n);try{Wr.chmodSync(n,384)}catch{}return{ok:!0,config:s.config,path:n}}function ir(t){let e=sc(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 nc(t){return String(t??"").split("/").filter(function(e){return!!e})}function z0(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 DE(t){let e=String(t??"");return!e||e.length>64||e==="."||e===".."?!1:W0.test(e)}function G0(t){let e=String(t&&t.remoteDir||jo);return!t||t.perMachine!==!0?e:e+"/"+z0(t.machine||B0.hostname())}function Vf(t,e,n){let s=String(t.url==null?"":t.url).replace(/\/+$/,"");if(n)return s+"/";let r=nc(G0(t)).concat(nc(e));return s+"/"+r.map(encodeURIComponent).join("/")}function J0(t,e){return"Basic "+Buffer.from(String(t||"")+":"+String(e||""),"utf8").toString("base64")}async function or(t,e){let n=e||{},s=ir(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=J0(s.username,s.password));let o=Number(n.timeoutMs)>0?Number(n.timeoutMs):U0,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=Vf(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 FE(t){try{return await t.res.text()}catch{return""}}function No(t){return t===401||t===403?"webdav.errAuth":t===404?"webdav.errRemotePath":"webdav.errHttp"}async function LE(t){let e=ir(t);if(!e.url)return{ok:!1,error:"webdav.errNeedUrl"};let n=Date.now(),s;try{s=await or(e,{method:"PROPFIND",path:"",headers:{Depth:"0"},body:zf})}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 or(e,{method:"PROPFIND",path:"",root:!0,headers:{Depth:"0"},body:zf})}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:No(s.status),ms:Date.now()-n}}var zf='<?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 RE(t,e){let n=ir(t),s=nc(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 or(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(No(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 qE(t,e,n,s){let r=ir(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 or(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(No(l.status));throw c.code="http",c.status=l.status,c}async function BE(t,e,n){let s=ir(t),o=await or(s,{method:"GET",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return null;if(!o.ok){let a=new Error(No(o.status));throw a.code="http",a.status=o.status,a}let i=await o.res.arrayBuffer();return Buffer.from(i)}async function UE(t,e,n){let s=ir(t),o=await or(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(No(o.status));throw i.code="http",i.status=o.status,i}return{ok:!0,status:o.status}}function Kf(t,e){let s=new RegExp("<(?:[\\w.-]+:)?"+e+"\\b[^>]*>([\\s\\S]*?)</(?:[\\w.-]+:)?"+e+">","i").exec(t);return s?s[1]:""}function $0(t){let e=String(t||"").trim();if(!e)return"";let n=e;try{n=decodeURIComponent(e)}catch{}return n}function Gf(t){return String(t||"").replace(/^[a-z]+:\/\/[^/]+/i,"").replace(/\/+$/,"")}function X0(t){let e=String(t||""),n=[],s=e.match(/<(?:[\w.-]+:)?response\b[\s\S]*?<\/(?:[\w.-]+:)?response>/gi)||[];for(let r of s){let o=$0(Kf(r,"href"));if(!o)continue;let i=/<(?:[\w.-]+:)?collection\b/i.test(r),a=Number(String(Kf(r,"getcontentlength")||"").trim()),l=String(Kf(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 WE(t,e,n){let s=ir(t),o=await or(s,{method:"PROPFIND",path:e,headers:{Depth:"1"},body:zf,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return[];if(!o.ok&&o.status!==207){let l=new Error(No(o.status));throw l.code="http",l.status=o.status,l}let i=await FE(o),a=Gf($0(Vf(s,e)));return X0(i).filter(function(l){return Gf(l.href)!==a})}V0.exports={WEBDAV_CONFIG_PATH:Jf,DEFAULT_REMOTE_DIR:jo,INCLUDE_KEYS:$f,REQUEST_TIMEOUT_MS:U0,MAX_SEGMENTS:Xf,defaultConfig:K0,normalizeConfig:sc,normalizeRemoteDir:H0,sanitizeMachineSegment:z0,isSafeSegment:DE,effectiveRemoteDir:G0,loadConfig:NE,saveConfig:IE,urlFor:Vf,pathOfHref:Gf,basicAuth:J0,request:or,testConnection:LE,ensureDir:RE,putFile:qE,getFile:BE,deleteFile:UE,listDir:WE,parseMultiStatus:X0,__requestConfig:ir}});var pk=Q(($L,fk)=>{var It=require("fs"),ic=require("os"),ot=require("path"),KE=require("crypto"),Le=Yf(),ac=ot.join(ic.homedir(),".luban"),Ms="manifest.json",HE=1,lc=2,Qf=5,Zf=3,zE=500,Y0=/^[A-Za-z0-9_-]+\.json$/,Z0=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,Q0=/^[^\/\\:*?"<>|\u0000-\u001f]{1,180}\.md$/,ek=/^[A-Za-z0-9_-]+$/;function ep(t){return KE.createHash("sha1").update(t).digest("hex")}function Qi(t){return(t<10?"0":"")+t}function tk(t){let e=t||new Date;return e.getFullYear()+Qi(e.getMonth()+1)+Qi(e.getDate())+"-"+Qi(e.getHours())+Qi(e.getMinutes())+Qi(e.getSeconds())}function GE(t){return t instanceof Date&&!isNaN(t.getTime())?t.toISOString():""}function nk(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 sk(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&&Y0.test(n[1])?e:"":s==="plans"?n.length===2&&Q0.test(n[1])?e:"":s==="config"?n.length===2&&(n[1]==="providers.json"||n[1]==="mcp.json")?e:"":s==="attachments"?n.length!==3?"":ek.test(n[1])&&Z0.test(n[2])?e:"":""}var rk=["sessions","attachments","plans","providers","mcp"];function ok(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 ta(t){let e=Object.create(null);for(let n of rk)e[n]=0;for(let n of Array.isArray(t)?t:[]){let s=ok(n);s&&e[s]++}return e}function ik(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)+`
273
+ `,redacted:n}}function rc(t){try{return It.readdirSync(t,{withFileTypes:!0})}catch{return[]}}function ea(t,e,n,s,r){let o=r||{},i;try{i=It.statSync(n)}catch{return e.push({relPath:s,reason:"stat"}),null}if(!i.isFile())return null;let a;try{a=It.readFileSync(n)}catch{return e.push({relPath:s,reason:"read"}),null}let l=!1;if(o.redact){let u=ik(a.toString("utf8"));a=Buffer.from(u.text,"utf8"),l=u.redacted}let c={relPath:s,absPath:n,size:a.length,mtime:GE(i.mtime),sha1:ep(a)};return o.redact&&(c.inline=a,c.redacted=l),t.push(c),c}function tp(t){let e=t||{},n=e.home?ot.resolve(e.home):ac,s=nk(e.includes),r=[],o=[],i=!1;if(s.sessions){let a=ot.join(n,"sessions");for(let l of rc(a))if(l.isFile()){if(!Y0.test(l.name)){o.push({relPath:"sessions/"+l.name,reason:"pattern"});continue}ea(r,o,ot.join(a,l.name),"sessions/"+l.name)}}if(s.attachments){let a=ot.join(n,"attachments");for(let l of rc(a)){if(!l.isDirectory()||!ek.test(l.name))continue;let c=ot.join(a,l.name);for(let u of rc(c))if(u.isFile()){if(!Z0.test(u.name)){o.push({relPath:"attachments/"+l.name+"/"+u.name,reason:"pattern"});continue}ea(r,o,ot.join(c,u.name),"attachments/"+l.name+"/"+u.name)}}}if(s.plans){let a=ot.join(n,"plans");for(let l of rc(a))if(l.isFile()){if(!Q0.test(l.name)){o.push({relPath:"plans/"+l.name,reason:"pattern"});continue}ea(r,o,ot.join(a,l.name),"plans/"+l.name)}}if(s.config){let a=ot.join(n,"providers.json");if(It.existsSync(a)){let l=ea(r,o,a,"config/providers.json",{redact:!0});l&&l.redacted&&(i=!0)}}if(s.mcp){let a=ot.join(n,"mcp.json");It.existsSync(a)&&ea(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 ak(t,e,n){let s=e||{},r=new Set(n||[]),o={schema:HE,app:"luban",version:String(s.version||""),machine:String(s.machine||ic.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 lk(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 ck(t){return t&&t.inline!==void 0?Buffer.isBuffer(t.inline)?t.inline:Buffer.from(String(t.inline),"utf8"):It.readFileSync(t.absPath)}function na(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 cc(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,Ms)}catch{r=null}if(r||!s)return{buf:r,base:e,legacy:!1};try{r=await Le.getFile(Object.assign({},t,{perMachine:!1}),Ms)}catch{r=null}return{buf:r,base:n,legacy:!!r}}function uk(t){return!!t&&(t.code==="timeout"||t.code==="network")}function JE(t){return new Promise(function(e){setTimeout(e,t)})}async function np(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<Zf;){d++;try{await n(u,c),f=null;break}catch(p){if(f=p,!uk(p))break;d<Zf&&await JE(zE*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 $E(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 XE(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,Ms);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||ic.hostname();if(c.machine&&c.machine!==A&&!isNaN(_)&&(isNaN(C)||_>C))return VE(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=tp({home:s.home,includes:s.includes||a.includes}),d=u.files,f=d.length,p=lk(d,c,{mode:s.force?"force":"newer"}),m=Object.create(null);for(let _ of d)m[_.relPath]=_;let h=p.upload.concat(p.blocked.map(function(_){return m[_.relPath]||_})),y=p.skip.length;await Le.ensureDir(o,"");for(let _ of $E(h))await Le.ensureDir(o,_);let k=0;r({phase:"upload",done:0,total:h.length,current:""});let T=[];try{T=(await np(h,lc,async function(C){let A=ck(C);await Le.putFile(o,C.relPath,A),C.sha1=ep(A),C.size=A.length},function(C){k++,(k%Qf===0||k===h.length)&&r({phase:"upload",done:k,total:h.length,current:C.relPath})})).failures}catch(_){return{ok:!1,phase:"upload",error:_.message||"webdav.errNetwork",status:_.status||0,done:k,total:f,files:f}}let g=T.map(function(_){return _.item.relPath});function v(_){let C=new Set(_||[]);return ta(d.filter(function(A){return!C.has(A.relPath)}).map(function(A){return A.relPath}))}r({phase:"manifest",done:h.length,total:h.length,current:Ms});let w=new Date().toISOString(),S=ak(d,{version:s.version,machine:s.machine,createdAt:w},g);return await Le.putFile(o,Ms,Buffer.from(JSON.stringify(S,null,2)+`
274
274
  `,"utf8"),{contentType:"application/json"}),s.persist!==!1&&(Le.saveConfig(Object.assign({},a,{lastBackupAt:w}),i?{path:i}:void 0).ok||r({phase:"warn",done:h.length,total:h.length,current:"config"})),T.length?{ok:!1,phase:"upload",error:"webdav.errPartial",done:k,total:h.length,files:f,createdAt:w,uploaded:h.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:h.length,total:h.length,current:""}),{ok:!0,phase:"done",files:f,bytes:h.reduce(function(_,C){return _+C.size},0),uploaded:h.length,unchanged:y,skipped:u.skipped.length,redacted:u.redacted,keys:Object.keys(S.files).length,createdAt:w,categories:v([]),includes:u.includes})}function VE(t,e){try{t(e)}catch{}}function dk(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)+`
275
275
  `,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 m of f.models)m&&m.id&&(p[m.id]=!0);for(let m of d.models||[])!m||!m.id||p[m.id]||(f.models.push(m),p[m.id]=!0,u++);for(let m of Object.keys(d))f[m]===void 0&&(f[m]=d[m])}return!s.defaultModel&&r.defaultModel&&(s.defaultModel=r.defaultModel),{text:JSON.stringify(s,null,2)+`
276
- `,added:c,models:u}}function YE(t,e){Nt.mkdirSync(ot.dirname(t),{recursive:!0,mode:448});let n=t+".tmp";Nt.writeFileSync(n,e,{mode:384}),Nt.renameSync(n,t);try{Nt.chmodSync(t,384)}catch{}}function oc(t,e){return e==="config/providers.json"?ot.join(t,"providers.json"):e==="config/mcp.json"?ot.join(t,"mcp.json"):ot.join(t,e)}async function ZE(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=na(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?ot.resolve(s.home):ac,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 cc(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 m=d.legacy?Object.assign({},o,{perMachine:!1}):o,h=Date.parse(p.createdAt||""),y=tp({home:l,includes:s.includes||a.includes}),k=Object.create(null);for(let Z of y.files)k[Z.relPath]=Z;let T=[],g=[],v=[],w=[],S=[];for(let Z of Object.keys(p.files)){let ge=p.files[Z]||{};if(!sk(Z)){w.push(Z);continue}if(ge.ok===!1){S.push(Z);continue}let H=k[Z];if(H&&ge.sha1&&H.sha1===ge.sha1){g.push(Z);continue}if(Z==="config/providers.json"){T.push(Z);continue}if(H&&c!=="force"){let De=Date.parse(H.mtime||"");if(!isNaN(h)&&!isNaN(De)&&De>h){v.push(Z);continue}}T.push(Z)}let _=Array.isArray(s.providerIds)?s.providerIds.map(String):null,C=_!=null&&_.length===0,A=C?T.filter(function(Z){return Z!=="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="",K=A.filter(function(Z){return Nt.existsSync(oc(l,Z))});if(K.length){F=ot.join(l,"backups",tk()),r({phase:"snapshot",done:0,total:K.length,current:F});for(let Z of K){let ge=ot.join(F,Z);Nt.mkdirSync(ot.dirname(ge),{recursive:!0,mode:448});try{Nt.copyFileSync(oc(l,Z),ge)}catch{}}}let W=0,B=0,pe=[],N={added:0,models:0},J=A.length;r({phase:"download",done:0,total:J,current:""});let be=[];try{be=(await np(A,lc,async function(ge){let H=await Le.getFile(m,ge);if(!H)return;let De=oc(l,ge),_e=H;if(ge==="config/providers.json"){let ht=Nt.existsSync(De)?Nt.readFileSync(De,"utf8"):"",xt=dk(ht,H.toString("utf8"),_);_e=Buffer.from(xt.text,"utf8"),N={added:N.added+xt.added,models:N.models+xt.models}}s.dryRun||YE(De,_e),B++,pe.push(ge)},function(ge){W++,(W%Qf===0||W===J)&&r({phase:"download",done:W,total:J,current:ge})})).failures}catch(Z){return{ok:!1,phase:"download",error:Z.message||"webdav.errNetwork",status:Z.status||0,done:W,total:J,restored:B,snapshot:F,categories:ta(pe)}}if(be.length)return{ok:!1,phase:"download",error:"webdav.errPartial",done:W,total:J,restored:B,snapshot:F,incomplete:S.length,categories:ta(pe),failed:be.map(function(Z){return{relPath:Z.item,error:Z.error.message||String(Z.error),code:Z.code,attempts:Z.attempts}})};let se=new Date().toISOString();return s.persist!==!1&&!s.dryRun&&Le.saveConfig(Object.assign({},a,{lastRestoreAt:se}),i?{path:i}:void 0),r({phase:"done",done:J,total:J,current:""}),{ok:!0,phase:"done",restored:B,total:J,restoredPaths:pe,categories:ta(pe),skipped:g.length,blocked:v,unsafe:w.length,incomplete:S.length,snapshot:F,createdAt:p.createdAt||"",machine:p.machine||"",legacy:d.legacy,merge:N,restoredAt:se}}async function QE(t,e){let n=e||{},s=na(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 cc(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 eP(t,e){let n=e||{},s=na(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 cc(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?ot.resolve(n.home):ac,f=ot.join(d,"providers.json"),p=new Set;try{let h=JSON.parse(Nt.readFileSync(f,"utf8"));for(let y of h&&Array.isArray(h.providers)?h.providers:[])y&&y.id&&p.add(String(y.id))}catch{}let m=u.filter(function(h){return h&&h.id}).map(function(h){return{id:String(h.id),name:String(h.displayName||h.name||h.id),models:Array.isArray(h.models)?h.models.length:0,exists:p.has(String(h.id))}});return{ok:!0,hasProviders:m.length>0,providers:m}}async function tP(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 np(l.slice(0,20),lc,async function(u){let d=u?na(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 m=Object.keys(p.files);c.push({dir:u,machine:p.machine||"",createdAt:p.createdAt||"",version:p.version||"",total:m.length,incomplete:m.filter(function(h){return(p.files[h]||{}).ok===!1}).length,bytes:m.reduce(function(h,y){return h+(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||ic.hostname()),machines:c}}fk.exports={LUBAN_HOME:ac,MANIFEST_NAME:Ts,CONCURRENCY:lc,PROGRESS_EVERY:Qf,MAX_ATTEMPTS:Zf,isRetryable:uk,sha1:ep,stampDir:tk,safeRelPath:sk,localPathOf:oc,redactProviders:ik,CATEGORIES:rk,categoryOf:ok,countCategories:ta,includesOf:nk,scanLocal:tp,buildManifest:ak,planSync:lk,contentOf:ck,withSubdir:na,fetchManifest:cc,uploadAll:XE,restoreAll:ZE,remoteSummary:QE,listMachines:tP,listRemoteProviders:eP,mergeProviders:dk}});var uc=Q((XL,bk)=>{var Hr=require("fs"),nP=require("os"),rp=require("path"),sP=2048,sa=rp.join(nP.tmpdir(),"luban-computer"),rP=30*60*1e3,oP=40;function Kr(t,e){let n=Number(t);return isFinite(n)?Math.round(n):e}function iP(t,e,n){let s=Number(t);return isFinite(s)?Math.max(e,Math.min(n,Math.round(s))):e}function aP(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=Kr(e.width!=null?e.width:e.w,0),s=Kr(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:Kr(e.x,0),y:Kr(e.y,0),width:n,height:s}}function lP(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 ir=null;function cP(){return ir?Object.assign({},ir):null}function uP(t){ir=t}function dP(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 fP(t,e,n){let s=n||{},r=Kr(t,NaN),o=Kr(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(!ir)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(ir.originX+r*ir.ratio),y:Math.round(ir.originY+o*ir.ratio)}}function pP(t){return new Promise(function(e,n){let s=null;try{s=Hr.openSync(t,"r");let r=Buffer.alloc(262144),o=Hr.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{Hr.closeSync(s)}catch{}}})}function mk(){try{Hr.mkdirSync(sa,{recursive:!0})}catch{}}function hk(){try{let t=Hr.readdirSync(sa),e=[];for(let s of t){if(!/\.(jpg|png)$/.test(s))continue;let r=rp.join(sa,s);try{e.push({p:r,t:Hr.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>=oP||n-s.t>rP)try{Hr.unlinkSync(s.p)}catch{}})}catch{}}function mP(t){mk(),hk();let e="cu-"+Date.now()+"-"+Math.random().toString(36).slice(2,8)+"."+(t||"jpg");return rp.join(sa,e)}function gk(t){return Math.round(t.width)+"\xD7"+Math.round(t.height)}function hP(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 sp(t){let e=Math.round(Number(t)||0);return(e<0?"-":"+")+Math.abs(e)}var yk={short:"\u70B9",long:"\u5C4F\u5E55\u903B\u8F91\u70B9",mid:"\u5C4F\u5E55\u70B9"};function gP(t,e){let n=e||yk,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"+gk(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"+sp(t.originX)+" y"+sp(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(`
276
+ `,added:c,models:u}}function YE(t,e){It.mkdirSync(ot.dirname(t),{recursive:!0,mode:448});let n=t+".tmp";It.writeFileSync(n,e,{mode:384}),It.renameSync(n,t);try{It.chmodSync(t,384)}catch{}}function oc(t,e){return e==="config/providers.json"?ot.join(t,"providers.json"):e==="config/mcp.json"?ot.join(t,"mcp.json"):ot.join(t,e)}async function ZE(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=na(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?ot.resolve(s.home):ac,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:Ms});let d=await cc(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 m=d.legacy?Object.assign({},o,{perMachine:!1}):o,h=Date.parse(p.createdAt||""),y=tp({home:l,includes:s.includes||a.includes}),k=Object.create(null);for(let Z of y.files)k[Z.relPath]=Z;let T=[],g=[],v=[],w=[],S=[];for(let Z of Object.keys(p.files)){let ge=p.files[Z]||{};if(!sk(Z)){w.push(Z);continue}if(ge.ok===!1){S.push(Z);continue}let H=k[Z];if(H&&ge.sha1&&H.sha1===ge.sha1){g.push(Z);continue}if(Z==="config/providers.json"){T.push(Z);continue}if(H&&c!=="force"){let De=Date.parse(H.mtime||"");if(!isNaN(h)&&!isNaN(De)&&De>h){v.push(Z);continue}}T.push(Z)}let _=Array.isArray(s.providerIds)?s.providerIds.map(String):null,C=_!=null&&_.length===0,A=C?T.filter(function(Z){return Z!=="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="",K=A.filter(function(Z){return It.existsSync(oc(l,Z))});if(K.length){F=ot.join(l,"backups",tk()),r({phase:"snapshot",done:0,total:K.length,current:F});for(let Z of K){let ge=ot.join(F,Z);It.mkdirSync(ot.dirname(ge),{recursive:!0,mode:448});try{It.copyFileSync(oc(l,Z),ge)}catch{}}}let W=0,B=0,pe=[],N={added:0,models:0},J=A.length;r({phase:"download",done:0,total:J,current:""});let be=[];try{be=(await np(A,lc,async function(ge){let H=await Le.getFile(m,ge);if(!H)return;let De=oc(l,ge),_e=H;if(ge==="config/providers.json"){let ht=It.existsSync(De)?It.readFileSync(De,"utf8"):"",xt=dk(ht,H.toString("utf8"),_);_e=Buffer.from(xt.text,"utf8"),N={added:N.added+xt.added,models:N.models+xt.models}}s.dryRun||YE(De,_e),B++,pe.push(ge)},function(ge){W++,(W%Qf===0||W===J)&&r({phase:"download",done:W,total:J,current:ge})})).failures}catch(Z){return{ok:!1,phase:"download",error:Z.message||"webdav.errNetwork",status:Z.status||0,done:W,total:J,restored:B,snapshot:F,categories:ta(pe)}}if(be.length)return{ok:!1,phase:"download",error:"webdav.errPartial",done:W,total:J,restored:B,snapshot:F,incomplete:S.length,categories:ta(pe),failed:be.map(function(Z){return{relPath:Z.item,error:Z.error.message||String(Z.error),code:Z.code,attempts:Z.attempts}})};let se=new Date().toISOString();return s.persist!==!1&&!s.dryRun&&Le.saveConfig(Object.assign({},a,{lastRestoreAt:se}),i?{path:i}:void 0),r({phase:"done",done:J,total:J,current:""}),{ok:!0,phase:"done",restored:B,total:J,restoredPaths:pe,categories:ta(pe),skipped:g.length,blocked:v,unsafe:w.length,incomplete:S.length,snapshot:F,createdAt:p.createdAt||"",machine:p.machine||"",legacy:d.legacy,merge:N,restoredAt:se}}async function QE(t,e){let n=e||{},s=na(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 cc(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 eP(t,e){let n=e||{},s=na(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 cc(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?ot.resolve(n.home):ac,f=ot.join(d,"providers.json"),p=new Set;try{let h=JSON.parse(It.readFileSync(f,"utf8"));for(let y of h&&Array.isArray(h.providers)?h.providers:[])y&&y.id&&p.add(String(y.id))}catch{}let m=u.filter(function(h){return h&&h.id}).map(function(h){return{id:String(h.id),name:String(h.displayName||h.name||h.id),models:Array.isArray(h.models)?h.models.length:0,exists:p.has(String(h.id))}});return{ok:!0,hasProviders:m.length>0,providers:m}}async function tP(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===Ms})&&l.push("");for(let u of a)u.isDir&&Le.isSafeSegment(u.name)&&l.push(u.name);let c=[];return await np(l.slice(0,20),lc,async function(u){let d=u?na(o,u):o,f=null;try{f=await Le.getFile(d,Ms)}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 m=Object.keys(p.files);c.push({dir:u,machine:p.machine||"",createdAt:p.createdAt||"",version:p.version||"",total:m.length,incomplete:m.filter(function(h){return(p.files[h]||{}).ok===!1}).length,bytes:m.reduce(function(h,y){return h+(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||ic.hostname()),machines:c}}fk.exports={LUBAN_HOME:ac,MANIFEST_NAME:Ms,CONCURRENCY:lc,PROGRESS_EVERY:Qf,MAX_ATTEMPTS:Zf,isRetryable:uk,sha1:ep,stampDir:tk,safeRelPath:sk,localPathOf:oc,redactProviders:ik,CATEGORIES:rk,categoryOf:ok,countCategories:ta,includesOf:nk,scanLocal:tp,buildManifest:ak,planSync:lk,contentOf:ck,withSubdir:na,fetchManifest:cc,uploadAll:XE,restoreAll:ZE,remoteSummary:QE,listMachines:tP,listRemoteProviders:eP,mergeProviders:dk}});var uc=Q((XL,bk)=>{var Hr=require("fs"),nP=require("os"),rp=require("path"),sP=2048,sa=rp.join(nP.tmpdir(),"luban-computer"),rP=30*60*1e3,oP=40;function Kr(t,e){let n=Number(t);return isFinite(n)?Math.round(n):e}function iP(t,e,n){let s=Number(t);return isFinite(s)?Math.max(e,Math.min(n,Math.round(s))):e}function aP(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=Kr(e.width!=null?e.width:e.w,0),s=Kr(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:Kr(e.x,0),y:Kr(e.y,0),width:n,height:s}}function lP(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 ar=null;function cP(){return ar?Object.assign({},ar):null}function uP(t){ar=t}function dP(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 fP(t,e,n){let s=n||{},r=Kr(t,NaN),o=Kr(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(!ar)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(ar.originX+r*ar.ratio),y:Math.round(ar.originY+o*ar.ratio)}}function pP(t){return new Promise(function(e,n){let s=null;try{s=Hr.openSync(t,"r");let r=Buffer.alloc(262144),o=Hr.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{Hr.closeSync(s)}catch{}}})}function mk(){try{Hr.mkdirSync(sa,{recursive:!0})}catch{}}function hk(){try{let t=Hr.readdirSync(sa),e=[];for(let s of t){if(!/\.(jpg|png)$/.test(s))continue;let r=rp.join(sa,s);try{e.push({p:r,t:Hr.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>=oP||n-s.t>rP)try{Hr.unlinkSync(s.p)}catch{}})}catch{}}function mP(t){mk(),hk();let e="cu-"+Date.now()+"-"+Math.random().toString(36).slice(2,8)+"."+(t||"jpg");return rp.join(sa,e)}function gk(t){return Math.round(t.width)+"\xD7"+Math.round(t.height)}function hP(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 sp(t){let e=Math.round(Number(t)||0);return(e<0?"-":"+")+Math.abs(e)}var yk={short:"\u70B9",long:"\u5C4F\u5E55\u903B\u8F91\u70B9",mid:"\u5C4F\u5E55\u70B9"};function gP(t,e){let n=e||yk,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"+gk(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"+sp(t.originX)+" y"+sp(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(`
277
277
  `)}function yP(t,e,n,s,r){let o=s||yk,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),m=f+","+p+","+d;l.has(m)||(l.add(m),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?wk(c+`
278
278
  `+a.join(`
279
279
  `),n):c+`
280
280
  \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 wk(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)+`
281
- \u2026[\u5DF2\u622A\u65AD\uFF0C\u5171 `+n.length+" \u5B57\u7B26\uFF1B\u53EF\u8C03\u5927 maxChars \u6216\u4F20 region \u53EA\u770B\u4E00\u5757]"}bk.exports={num:Kr,clamp:iP,parseRegion:aP,clampRegion:lP,imageSize:pP,lastShotInfo:cP,setLastShot:uP,pointOnScreen:dP,toScreenPoint:fP,fmtSize:gk,screenListDesc:hP,signed:sp,describeShot:gP,formatOcr:yP,clipText:wk,ensureTmpDir:mk,pruneTmp:hk,tmpFile:mP,DEFAULT_MAX_WIDTH:sP,TMP_DIR:sa}});var Ik=Q((YL,Nk)=>{var pt=require("fs"),VL=require("os"),fn=require("path"),{execFile:wP}=require("child_process"),le=uc(),vk=process.platform==="linux",dp={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},zr=2e4,kk=12e3,xk=6e4,dc=null;function bP(){return dc||(dc=String(process.env.PATH||"").split(fn.delimiter).filter(Boolean),dc)}function Ge(t){if(!t)return"";if(t.indexOf(fn.sep)>=0)try{return pt.accessSync(t,pt.constants.X_OK),t}catch{return""}for(let e of bP()){let n=fn.join(e,t);try{return pt.accessSync(n,pt.constants.X_OK),n}catch{}}return""}function os(){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 fp(){return{x11Shot:Ge("ffmpeg")||Ge("import")||Ge("scrot")||"",waylandShot:Ge("grim")||Ge("gnome-screenshot")||"",xdotool:Ge("xdotool")||"",wtype:Ge("wtype")||"",wmctrl:Ge("wmctrl")||"",tesseract:Ge("tesseract")||""}}function op(){let t=os(),e=fp();return t.kind==="x11"?e.x11Shot:t.kind==="wayland"?e.waylandShot:""}function ip(){let t=os(),e=fp();return t.kind==="x11"||t.kind==="wayland"?e.xdotool||e.wtype:""}function _k(){if(!vk)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=os();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=op(),n=ip();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 In(){let t=_k();if(!t.ok)throw new Error(t.reason)}function Gr(){let t=Ge("xdotool");if(!t)throw new Error(os().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){wP(t,e,{timeout:s.timeoutMs||kk,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(fn.basename(t)+" \u8D85\u65F6\uFF08"+(s.timeoutMs||kk)+"ms\uFF09"));return}let d=(u.split(`
281
+ \u2026[\u5DF2\u622A\u65AD\uFF0C\u5171 `+n.length+" \u5B57\u7B26\uFF1B\u53EF\u8C03\u5927 maxChars \u6216\u4F20 region \u53EA\u770B\u4E00\u5757]"}bk.exports={num:Kr,clamp:iP,parseRegion:aP,clampRegion:lP,imageSize:pP,lastShotInfo:cP,setLastShot:uP,pointOnScreen:dP,toScreenPoint:fP,fmtSize:gk,screenListDesc:hP,signed:sp,describeShot:gP,formatOcr:yP,clipText:wk,ensureTmpDir:mk,pruneTmp:hk,tmpFile:mP,DEFAULT_MAX_WIDTH:sP,TMP_DIR:sa}});var Ik=Q((YL,Nk)=>{var pt=require("fs"),VL=require("os"),fn=require("path"),{execFile:wP}=require("child_process"),le=uc(),vk=process.platform==="linux",dp={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},zr=2e4,kk=12e3,xk=6e4,dc=null;function bP(){return dc||(dc=String(process.env.PATH||"").split(fn.delimiter).filter(Boolean),dc)}function Ge(t){if(!t)return"";if(t.indexOf(fn.sep)>=0)try{return pt.accessSync(t,pt.constants.X_OK),t}catch{return""}for(let e of bP()){let n=fn.join(e,t);try{return pt.accessSync(n,pt.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 fp(){return{x11Shot:Ge("ffmpeg")||Ge("import")||Ge("scrot")||"",waylandShot:Ge("grim")||Ge("gnome-screenshot")||"",xdotool:Ge("xdotool")||"",wtype:Ge("wtype")||"",wmctrl:Ge("wmctrl")||"",tesseract:Ge("tesseract")||""}}function op(){let t=is(),e=fp();return t.kind==="x11"?e.x11Shot:t.kind==="wayland"?e.waylandShot:""}function ip(){let t=is(),e=fp();return t.kind==="x11"||t.kind==="wayland"?e.xdotool||e.wtype:""}function _k(){if(!vk)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=op(),n=ip();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 In(){let t=_k();if(!t.ok)throw new Error(t.reason)}function Gr(){let t=Ge("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){wP(t,e,{timeout:s.timeoutMs||kk,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(fn.basename(t)+" \u8D85\u65F6\uFF08"+(s.timeoutMs||kk)+"ms\uFF09"));return}let d=(u.split(`
282
282
  `).filter(Boolean)[0]||i.message||"").trim();o(new Error(fn.basename(t)+" \u5931\u8D25\uFF1A"+d));return}r({stdout:c,stderr:u})})})}function Tk(t){let e=[];return String(t||"").split(`
283
- `).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 Mk(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 oa(){In();let t=Ge("xrandr");if(t)try{let s=await ve(t,["--listmonitors"],{timeoutMs:8e3}),r=Tk(s.stdout);if(r.length)return r}catch{}let e=Ge("xdpyinfo");if(e)try{let s=await ve(e,[],{timeoutMs:8e3}),r=Mk(s.stdout);if(r)return[r]}catch{}if(os().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 Sk(t){return Math.max(2,Math.round(t/2)*2)}async function kP(t,e){let n=os(),s={x:Math.round(e.x),y:Math.round(e.y),width:Sk(e.width),height:Sk(e.height)},r=[];if(n.kind==="x11"){let o=Ge("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:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024)return"ffmpeg";r.push("ffmpeg \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let i=Ge("import");if(i)try{if(await ve(i,["-silent","-window","root","-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",t],{timeoutMs:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024)return"import";r.push("import \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let a=Ge("scrot");if(a)try{if(await ve(a,["-o","-z","-a",[s.x,s.y,s.width,s.height].join(","),t],{timeoutMs:zr}),pt.existsSync(t)&&pt.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=Ge("grim");if(o)try{if(await ve(o,["-g",s.x+","+s.y+" "+s.width+"x"+s.height,t],{timeoutMs:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024)return"grim";r.push("grim \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}let i=Ge("gnome-screenshot");if(i)try{if(await ve(i,["-f",t],{timeoutMs:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024){let l=(await oa().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=Ge("convert")||Ge("magick");if(u){let d=le.tmpFile("png");await ve(u,[t,"-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",d],{timeoutMs:zr});try{pt.renameSync(d,t)}catch{}}}return"gnome-screenshot"}r.push("gnome-screenshot \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}}try{pt.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 Ck(t){In();let e=t||{},n=await oa(),s=le.num(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F");let o=le.parseRegion(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let k=le.clampRegion(n,o);if(!k)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"+le.screenListDesc(n));a=k.region,l=k.clipped?k: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=le.tmpFile("png");await kP(u,c);let d=await le.imageSize(u),f=a?a.width:r.width||d.width,p=a?a.height:r.height||d.height,m=le.clamp(e.maxWidth||le.DEFAULT_MAX_WIDTH,320,4096),h=Math.min(f,m),y=u;if(d.width>h){let k=le.tmpFile("jpg"),T=Ge("convert")||Ge("magick");try{if(!T)throw new Error("\u6CA1\u6709 ImageMagick");await ve(T,[u,"-resize",h+"x","-quality","65",k],{timeoutMs:zr});try{pt.unlinkSync(u)}catch{}y=k}catch{try{pt.unlinkSync(k)}catch{}}}return xP(y,r,a,f,p,l,i)}async function xP(t,e,n,s,r,o,i){let a=await le.imageSize(t),l=pt.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 le.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 Ak(t){let e=[];return String(t||"").split(`
283
+ `).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 Mk(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 oa(){In();let t=Ge("xrandr");if(t)try{let s=await ve(t,["--listmonitors"],{timeoutMs:8e3}),r=Tk(s.stdout);if(r.length)return r}catch{}let e=Ge("xdpyinfo");if(e)try{let s=await ve(e,[],{timeoutMs:8e3}),r=Mk(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 Sk(t){return Math.max(2,Math.round(t/2)*2)}async function kP(t,e){let n=is(),s={x:Math.round(e.x),y:Math.round(e.y),width:Sk(e.width),height:Sk(e.height)},r=[];if(n.kind==="x11"){let o=Ge("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:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024)return"ffmpeg";r.push("ffmpeg \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let i=Ge("import");if(i)try{if(await ve(i,["-silent","-window","root","-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",t],{timeoutMs:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024)return"import";r.push("import \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let a=Ge("scrot");if(a)try{if(await ve(a,["-o","-z","-a",[s.x,s.y,s.width,s.height].join(","),t],{timeoutMs:zr}),pt.existsSync(t)&&pt.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=Ge("grim");if(o)try{if(await ve(o,["-g",s.x+","+s.y+" "+s.width+"x"+s.height,t],{timeoutMs:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024)return"grim";r.push("grim \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}let i=Ge("gnome-screenshot");if(i)try{if(await ve(i,["-f",t],{timeoutMs:zr}),pt.existsSync(t)&&pt.statSync(t).size>1024){let l=(await oa().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=Ge("convert")||Ge("magick");if(u){let d=le.tmpFile("png");await ve(u,[t,"-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",d],{timeoutMs:zr});try{pt.renameSync(d,t)}catch{}}}return"gnome-screenshot"}r.push("gnome-screenshot \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}}try{pt.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 Ck(t){In();let e=t||{},n=await oa(),s=le.num(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F");let o=le.parseRegion(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let k=le.clampRegion(n,o);if(!k)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"+le.screenListDesc(n));a=k.region,l=k.clipped?k: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=le.tmpFile("png");await kP(u,c);let d=await le.imageSize(u),f=a?a.width:r.width||d.width,p=a?a.height:r.height||d.height,m=le.clamp(e.maxWidth||le.DEFAULT_MAX_WIDTH,320,4096),h=Math.min(f,m),y=u;if(d.width>h){let k=le.tmpFile("jpg"),T=Ge("convert")||Ge("magick");try{if(!T)throw new Error("\u6CA1\u6709 ImageMagick");await ve(T,[u,"-resize",h+"x","-quality","65",k],{timeoutMs:zr});try{pt.unlinkSync(u)}catch{}y=k}catch{try{pt.unlinkSync(k)}catch{}}}return xP(y,r,a,f,p,l,i)}async function xP(t,e,n,s,r,o,i){let a=await le.imageSize(t),l=pt.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 le.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 Ak(t){let e=[];return String(t||"").split(`
284
284
  `).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 SP(t){In();let e=t||{},n=Ge("wmctrl"),s=[];if(n){let a=await ve(n,["-lG"],{timeoutMs:8e3});s=Ak(a.stdout)}else{let a=Ge("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(`
285
285
  `).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(`
286
286
  `).forEach(function(m){let h=m.match(/^([A-Z_]+)=(-?\d+)$/);h&&(f[h[1]]=Number(h[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=le.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 Ok(){In();let t=Gr(),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 vP(){In();let t=Gr(),e=await ve(t,["getmouselocation","--shell"],{timeoutMs:6e3}),n={x:0,y:0};return e.stdout.split(`
287
287
  `).forEach(function(s){let r=s.match(/^([XY])=(-?\d+)$/);r&&(n[r[1].toLowerCase()]=Number(r[2]))}),n}function Ek(t){let e=String(t||"").split(`
288
288
  `),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 _P(t){In();let e=t||{},n=e.shot||await Ck({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=le.clamp(e.maxChars||6e3,500,2e4),r=Ge("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:xk})).stdout}catch{o=(await ve(r,[n.file,"stdout","-l","eng","tsv"],{timeoutMs:xk})).stdout}let i=Ek(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:le.formatOcr(i,n,s,dp,"\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 ap={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},lp={"!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/","~":"`"},cp={shift:1,ctrl:2,control:2,alt:4,option:4,opt:4,cmd:8,command:8,meta:8,super:8,win:8},TP={1:"shift",2:"ctrl",4:"alt",8:"super"},MP={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 up(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===`
289
289
  `||e==="\r")return{code:65293,shift:!1};if(e===" ")return{code:65289,shift:!1};if(lp[e])return{code:lp[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 Pk(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=cp[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)?up(n):null,i=ap[r]!=null?{code:ap[r],shift:!1}:null,a=o||i||up(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?cp.shift:0)}}function jk(t){let e=[];for(let s of[2,4,8,1])t.flags&s&&e.push(TP[s]);let n=MP[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 ra(t,e){let n=await oa();if(!le.pointOnScreen(n,t,e))throw new Error("\u5750\u6807 ("+t+", "+e+") \u4E0D\u5728\u4EFB\u4F55\u5C4F\u5E55\u4E0A\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF1A"+le.screenListDesc(n))}async function CP(t){In();let e=t||{},n=le.toScreenPoint(e.x,e.y,e);await ra(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=Gr();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 AP(t){In();let e=t||{},n=le.toScreenPoint(e.x,e.y,e);if(await ra(n.x,n.y),!e.dry){let s=Gr();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 OP(t){In();let e=t||{},n=le.toScreenPoint(e.x,e.y,e),s=le.toScreenPoint(e.toX,e.toY,e);if(await ra(n.x,n.y),await ra(s.x,s.y),!e.dry){let r=Gr();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 EP(t){In();let e=t||{},n=le.toScreenPoint(e.x,e.y,e);await ra(n.x,n.y);let s=le.num(e.dy,0),r=le.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=Gr();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 PP(t){In();let e=t||{},n=Pk(e.keys);if(!e.dry){let s=Gr();await ve(s,["key","--clearmodifiers",jk(n)],{timeoutMs:8e3})}return"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function jP(t){In();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=Ge("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=Ge("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 Ok().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?`
290
- \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}function NP(t){return le.describeShot(t,dp)}function IP(t,e,n,s){return le.formatOcr(t,e,n,dp,s)}async function DP(){let t={ok:!1,platform:"linux",session:os().kind,screenshot:"",input:"",screens:[],notes:[]};if(!vk)return t.notes.push("\u5F53\u524D\u5E73\u53F0\u4E0D\u662F Linux"),t;let e=fp();t.screenshot=op()?fn.basename(op()):"",t.input=ip()?fn.basename(ip()):"",t.tools={x11Shot:e.x11Shot?fn.basename(e.x11Shot):"",waylandShot:e.waylandShot?fn.basename(e.waylandShot):"",xdotool:e.xdotool?fn.basename(e.xdotool):"",wtype:e.wtype?fn.basename(e.wtype):"",wmctrl:e.wmctrl?fn.basename(e.wmctrl):"",tesseract:e.tesseract?fn.basename(e.tesseract):""},!t.screenshot&&os().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&&os().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"),os().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 oa()}catch(n){t.notes.push(String(n.message||n))}return Ge("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}Nk.exports={available:_k,check:DP,screens:oa,capture:Ck,windows:SP,frontmost:Ok,cursor:vP,ocr:_P,click:CP,move:AP,drag:OP,scroll:EP,type:jP,key:PP,parseKeys:Pk,charToKey:up,keySpecOf:jk,parseXrandr:Tk,parseXdpyinfo:Mk,parseWmctrl:Ak,parseTsv:Ek,describeShot:NP,formatOcr:IP,clipText:le.clipText,parseRegion:le.parseRegion,clampRegion:le.clampRegion,imageSize:le.imageSize,lastShotInfo:le.lastShotInfo,num:le.num,clamp:le.clamp,toScreenPoint:le.toScreenPoint,pointOnScreen:le.pointOnScreen,screenListDesc:le.screenListDesc,fmtSize:le.fmtSize,signed:le.signed,ensureTmpDir:le.ensureTmpDir,pruneTmp:le.pruneTmp,tmpFile:le.tmpFile,KEY_CODES:ap,FLAGS:cp,SHIFT_CHARS:lp,TMP_DIR:le.TMP_DIR,DEFAULT_MAX_WIDTH:le.DEFAULT_MAX_WIDTH}});var Zk=Q((ZL,Yk)=>{var FP=require("crypto"),pn=require("fs"),Fk=require("os"),ia=require("path"),{execFile:LP,spawn:RP}=require("child_process"),qP=uc(),{num:fc,clamp:Do,parseRegion:Lk,clampRegion:Rk,imageSize:qk,lastShotInfo:BP,setLastShot:UP,pointOnScreen:Bk,toScreenPoint:Fo,fmtSize:WP,screenListDesc:hp,signed:KP,describeShot:HP,formatOcr:Uk,clipText:zP,ensureTmpDir:GP,pruneTmp:JP,tmpFile:Wk,DEFAULT_MAX_WIDTH:Kk,TMP_DIR:$P}=qP,XP=process.platform==="win32",VP=6e4,Dk=2e4,YP=3e4,gp={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},yp=`using System;
290
+ \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}function NP(t){return le.describeShot(t,dp)}function IP(t,e,n,s){return le.formatOcr(t,e,n,dp,s)}async function DP(){let t={ok:!1,platform:"linux",session:is().kind,screenshot:"",input:"",screens:[],notes:[]};if(!vk)return t.notes.push("\u5F53\u524D\u5E73\u53F0\u4E0D\u662F Linux"),t;let e=fp();t.screenshot=op()?fn.basename(op()):"",t.input=ip()?fn.basename(ip()):"",t.tools={x11Shot:e.x11Shot?fn.basename(e.x11Shot):"",waylandShot:e.waylandShot?fn.basename(e.waylandShot):"",xdotool:e.xdotool?fn.basename(e.xdotool):"",wtype:e.wtype?fn.basename(e.wtype):"",wmctrl:e.wmctrl?fn.basename(e.wmctrl):"",tesseract:e.tesseract?fn.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 oa()}catch(n){t.notes.push(String(n.message||n))}return Ge("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}Nk.exports={available:_k,check:DP,screens:oa,capture:Ck,windows:SP,frontmost:Ok,cursor:vP,ocr:_P,click:CP,move:AP,drag:OP,scroll:EP,type:jP,key:PP,parseKeys:Pk,charToKey:up,keySpecOf:jk,parseXrandr:Tk,parseXdpyinfo:Mk,parseWmctrl:Ak,parseTsv:Ek,describeShot:NP,formatOcr:IP,clipText:le.clipText,parseRegion:le.parseRegion,clampRegion:le.clampRegion,imageSize:le.imageSize,lastShotInfo:le.lastShotInfo,num:le.num,clamp:le.clamp,toScreenPoint:le.toScreenPoint,pointOnScreen:le.pointOnScreen,screenListDesc:le.screenListDesc,fmtSize:le.fmtSize,signed:le.signed,ensureTmpDir:le.ensureTmpDir,pruneTmp:le.pruneTmp,tmpFile:le.tmpFile,KEY_CODES:ap,FLAGS:cp,SHIFT_CHARS:lp,TMP_DIR:le.TMP_DIR,DEFAULT_MAX_WIDTH:le.DEFAULT_MAX_WIDTH}});var Zk=Q((ZL,Yk)=>{var FP=require("crypto"),pn=require("fs"),Fk=require("os"),ia=require("path"),{execFile:LP,spawn:RP}=require("child_process"),qP=uc(),{num:fc,clamp:Do,parseRegion:Lk,clampRegion:Rk,imageSize:qk,lastShotInfo:BP,setLastShot:UP,pointOnScreen:Bk,toScreenPoint:Fo,fmtSize:WP,screenListDesc:hp,signed:KP,describeShot:HP,formatOcr:Uk,clipText:zP,ensureTmpDir:GP,pruneTmp:JP,tmpFile:Wk,DEFAULT_MAX_WIDTH:Kk,TMP_DIR:$P}=qP,XP=process.platform==="win32",VP=6e4,Dk=2e4,YP=3e4,gp={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},yp=`using System;
291
291
  using System.Collections.Generic;
292
292
  using System.Drawing;
293
293
  using System.Drawing.Drawing2D;
@@ -741,7 +741,7 @@ class Program {
741
741
  `;function ZP(){let t=process.env.WINDIR||"C:\\Windows";return[ia.join(t,"Microsoft.NET","Framework64","v4.0.30319","csc.exe"),ia.join(t,"Microsoft.NET","Framework","v4.0.30319","csc.exe")]}function wp(){return ia.join(Fk.homedir(),".luban","bin")}function bp(){let t=FP.createHash("sha1").update(yp,"utf8").digest("hex").slice(0,8);return ia.join(wp(),"luban-cu-"+t+".exe")}function Hk(){try{return pn.existsSync(bp())}catch{return!1}}var Io=null;function zk(){let t=bp();if(Hk())return Promise.resolve(t);if(Io)return Io;let e=mc();return e.ok?(Io=new Promise(function(n,s){let r=ZP().filter(function(l){try{return pn.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=ia.join(Fk.tmpdir(),"luban-cu-"+process.pid+"-"+Date.now()+".cs"),i=t+".tmp-"+process.pid;try{pn.mkdirSync(wp(),{recursive:!0}),pn.writeFileSync(o,"\uFEFF"+yp,"utf8")}catch(l){s(new Error("\u5199\u4E0D\u4E86\u4E34\u65F6\u6587\u4EF6\uFF1A"+(l&&l.message||l)));return}function a(){try{pn.rmSync(o,{force:!0})}catch{}try{pn.rmSync(i,{force:!0})}catch{}}LP(r,["/nologo","/target:exe","/reference:System.Drawing.dll","/reference:System.Web.Extensions.dll","/out:"+i,o],{timeout:VP,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{pn.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)})}),Io.then(function(){},function(){Io=null}),Io):Promise.reject(new Error(e.reason))}function Qt(t,e){return zk().then(function(n){return new Promise(function(s,r){let o;try{o=RP(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||Dk)+"ms\uFF09"))},e||Dk);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(`
742
742
  `).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 mc(){return XP?{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 Fn(){let t=mc();if(!t.ok)throw new Error(t.reason)}async function hc(){Fn();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 aa(t,e){let n=await hc();if(!Bk(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"+hp(n))}async function kp(t){Fn();let e=t||{},n=await hc(),s=fc(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=Lk(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let T=Rk(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"+hp(n));a=T.region,l=T.clipped?T:null}let c=Wk("jpg"),u={action:"capture",file:c,maxWidth:Do(e.maxWidth||Kk,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,YP)}catch(T){try{pn.unlinkSync(c)}catch{}throw new Error("\u622A\u5C4F\u5931\u8D25\uFF1A"+T.message)}let d=null;try{d=pn.statSync(c)}catch{d=null}if(!d||d.size<128){try{pn.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 qk(c)}catch{f={width:0,height:0}}if(!(f.width>0&&f.height>0)){try{pn.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,m=a?a.height:r.height,h=f.width>0?p/f.width:1,y=a?a.x:r.x,k=a?a.y:r.y;return UP({file:c,width:f.width,height:f.height,pointWidth:p,pointHeight:m,ratio:h,originX:y,originY:k,clipped:!!(l&&l.clipped),requestedRegion:l?l.requested:null,displayIgnored:i,at:Date.now()}),{file:c,dataUrl:"data:image/jpeg;base64,"+pn.readFileSync(c).toString("base64"),width:f.width,height:f.height,pointWidth:p,pointHeight:m,ratio:h,originX:y,originY:k,screen:r,region:a,clipped:!!(l&&l.clipped),requestedRegion:l?l.requested:null,displayIgnored:i}}async function QP(t){Fn();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 Gk(){Fn();let t=await Qt({action:"frontmost"});return{name:t.name||"",pid:t.pid||0}}async function ej(){Fn();let t=await Qt({action:"cursor"});return{x:t.x||0,y:t.y||0}}var Dn={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},pp={"!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/","~":"`"},la={win:8,cmd:8,command:8,meta:8,super:8,shift:1,ctrl:2,control:2,alt:4,option:4,opt:4},Jk=[33,34,35,36,37,38,39,40,45,46,123,124];function $k(t){return Jk.indexOf(t)>=0}function pc(t){if(t===" ")return{code:32,shift:!1};if(t===`
743
743
  `||t==="\r")return{code:13,shift:!1};if(t===" ")return{code:9,shift:!1};let e=String(t).toLowerCase();if(pp[t]){let n=pp[t];return Dn[n]==null?null:{code:Dn[n],shift:!0}}return/[A-Z]/.test(t)&&Dn[e]!=null?{code:Dn[e],shift:!0}:Dn[t]!=null?{code:Dn[t],shift:!1}:null}function Xk(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=la[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)?pc(n):null)||(Dn[r]!=null?{code:Dn[r],shift:!1}:pc(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?la.shift:0)}}function Vk(){return Qt({action:"clipboardGet"}).then(function(t){return t.text!=null?t.text:null}).catch(function(){return null})}function mp(t){return Qt({action:"clipboardSet",text:String(t)}).then(function(){})}async function tj(t){Fn();let e=t||{},n=e.shot||await kp({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=Do(e.maxChars||6e3,500,2e4);return{text:Uk([],n,s,gp,"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 nj(t){Fn();let e=t||{},n=Fo(e.x,e.y,e);return await aa(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 sj(t){Fn();let e=t||{},n=Fo(e.x,e.y,e);return await aa(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 rj(t){Fn();let e=t||{},n=Fo(e.x,e.y,e),s=Fo(e.toX,e.toY,e);return await aa(n.x,n.y),await aa(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 oj(t){Fn();let e=t||{},n=Fo(e.x,e.y,e);await aa(n.x,n.y);let s=fc(e.dy,0),r=fc(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 ij(t){Fn();let e=t||{},n=Xk(e.keys);return await Qt({action:"key",code:n.code,flags:n.flags,ext:$k(n.code),dry:!!e.dry}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function aj(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=Array.from(n),r=s.map(pc),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?la.shift:0,ext:$k(c.code)}});e.submit&&l.push({code:Dn.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 Vk();e.dry||await mp(n);let c=[{code:Dn.v,flags:la.ctrl,ext:!1}];e.submit&&c.push({code:Dn.return,flags:0,ext:!1}),await Qt({action:"type",codes:c,dry:!!e.dry}),!e.dry&&l!=null&&setTimeout(function(){mp(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await Gk().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?`
744
- \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function lj(){let t=mc(),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 hc()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await kp({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{pn.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 cj(t){return HP(t,gp)}Yk.exports={available:mc,check:lj,screens:hc,capture:kp,describeShot:cj,windows:QP,frontmost:Gk,cursor:ej,ocr:tj,click:nj,move:sj,drag:rj,scroll:oj,type:aj,key:ij,parseKeys:Xk,charToKey:pc,formatOcr:Uk,clipText:zP,readClipboard:Vk,writeClipboard:mp,parseRegion:Lk,clampRegion:Rk,imageSize:qk,lastShotInfo:BP,num:fc,clamp:Do,toScreenPoint:Fo,pointOnScreen:Bk,screenListDesc:hp,fmtSize:WP,signed:KP,ensureTmpDir:GP,pruneTmp:JP,tmpFile:Wk,KEY_CODES:Dn,FLAGS:la,SHIFT_CHARS:pp,EXT_KEYS:Jk,WIN_UNIT:gp,CSHARP_SRC:yp,binDir:wp,binaryPath:bp,hasBinary:Hk,ensureBinary:zk,TMP_DIR:$P,DEFAULT_MAX_WIDTH:Kk}});var ux=Q((QL,cx)=>{var Lo=require("fs"),{execFile:Tp}=require("child_process"),uj=uc(),{num:gc,clamp:Ro,parseRegion:nx,clampRegion:sx,imageSize:Mp,lastShotInfo:dj,setLastShot:fj,pointOnScreen:rx,toScreenPoint:qo,fmtSize:pj,screenListDesc:Cp,signed:mj,describeShot:hj,formatOcr:ox,clipText:gj,ensureTmpDir:yj,pruneTmp:wj,tmpFile:xp,DEFAULT_MAX_WIDTH:ix,TMP_DIR:bj}=uj,kj=process.platform==="darwin",Qk=2e4,is=2e4,xj=6e4;function Sp(t,e,n){let s=n||{};return new Promise(function(r,o){Tp(t,e,{timeout:s.timeoutMs||is,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 mn(t,e){let n=e||{};return new Promise(function(s,r){let o=Tp("osascript",["-l","JavaScript"],{timeout:n.timeoutMs||is,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 Ap(){return kj?{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 Rn(){let t=Ap();if(!t.ok)throw new Error(t.reason)}async function wc(){Rn();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(`
744
+ \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function lj(){let t=mc(),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 hc()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await kp({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{pn.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 cj(t){return HP(t,gp)}Yk.exports={available:mc,check:lj,screens:hc,capture:kp,describeShot:cj,windows:QP,frontmost:Gk,cursor:ej,ocr:tj,click:nj,move:sj,drag:rj,scroll:oj,type:aj,key:ij,parseKeys:Xk,charToKey:pc,formatOcr:Uk,clipText:zP,readClipboard:Vk,writeClipboard:mp,parseRegion:Lk,clampRegion:Rk,imageSize:qk,lastShotInfo:BP,num:fc,clamp:Do,toScreenPoint:Fo,pointOnScreen:Bk,screenListDesc:hp,fmtSize:WP,signed:KP,ensureTmpDir:GP,pruneTmp:JP,tmpFile:Wk,KEY_CODES:Dn,FLAGS:la,SHIFT_CHARS:pp,EXT_KEYS:Jk,WIN_UNIT:gp,CSHARP_SRC:yp,binDir:wp,binaryPath:bp,hasBinary:Hk,ensureBinary:zk,TMP_DIR:$P,DEFAULT_MAX_WIDTH:Kk}});var ux=Q((QL,cx)=>{var Lo=require("fs"),{execFile:Tp}=require("child_process"),uj=uc(),{num:gc,clamp:Ro,parseRegion:nx,clampRegion:sx,imageSize:Mp,lastShotInfo:dj,setLastShot:fj,pointOnScreen:rx,toScreenPoint:qo,fmtSize:pj,screenListDesc:Cp,signed:mj,describeShot:hj,formatOcr:ox,clipText:gj,ensureTmpDir:yj,pruneTmp:wj,tmpFile:xp,DEFAULT_MAX_WIDTH:ix,TMP_DIR:bj}=uj,kj=process.platform==="darwin",Qk=2e4,as=2e4,xj=6e4;function Sp(t,e,n){let s=n||{};return new Promise(function(r,o){Tp(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 mn(t,e){let n=e||{};return new Promise(function(s,r){let o=Tp("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 Ap(){return kj?{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 Rn(){let t=Ap();if(!t.ok)throw new Error(t.reason)}async function wc(){Rn();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(`
745
745
  `),e=await mn(t,{timeoutMs:15e3}),n=[];try{n=JSON.parse(e)}catch{n=[]}return Array.isArray(n)?n:[]}async function ca(t,e){let n=await wc();if(!rx(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"+Cp(n))}var da=['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(`
746
746
  `);function fa(t){return t?1:0}function Sj(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[da,"var DRY = "+fa(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(`
747
747
  `)}function vj(t){return[da,"var DRY = "+fa(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(`
@@ -753,10 +753,10 @@ class Program {
753
753
  `+n+`
754
754
  ];`,"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(`
755
755
  `)}function Mj(){return Sp("pbpaste",[],{timeoutMs:5e3}).then(function(t){return t.stdout}).catch(function(){return null})}function ex(t){return new Promise(function(e,n){let s=Tp("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 Op(t){Rn();let e=t||{},n=await wc(),s=gc(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=nx(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let k=sx(n,o);if(!k)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"+Cp(n));a=k.region,l=k.clipped?k:null}let c=xp("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 Sp("/usr/sbin/screencapture",u,{timeoutMs:Qk})}catch(k){let T=/permission|not permitted|could not create image|cannot/i.test(k.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"+k.message+T)}let d=null;try{d=Lo.statSync(c)}catch{d=null}if(!d||d.size<1024){try{Lo.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 Mp(c),p=a?a.width:r.width,m=a?a.height:r.height,h=Ro(e.maxWidth||ix,320,4096),y=Math.min(p,h);if(f.width>y){let k=xp("jpg");try{await Sp("/usr/bin/sips",["-s","format","jpeg","-s","formatOptions","65","--resampleWidth",String(y),c,"--out",k],{timeoutMs:Qk});try{Lo.unlinkSync(c)}catch{}return await tx(k,r,a,p,m,l,i)}catch{try{Lo.unlinkSync(k)}catch{}}}return await tx(c,r,a,p,m,l,i)}async function tx(t,e,n,s,r,o,i){let a=await Mp(t),l=Lo.readFileSync(t),c=a.width>0?s/a.width:1,u=n?n.x:e.x,d=n?n.y:e.y;return fj({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 Cj(t){Rn();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(`
756
- `),s=await mn(n,{timeoutMs:is}),r=[];try{r=JSON.parse(s)}catch{r=[]}Array.isArray(r)||(r=[]);let o=Ro(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 lx(){Rn();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(`
756
+ `),s=await mn(n,{timeoutMs:as}),r=[];try{r=JSON.parse(s)}catch{r=[]}Array.isArray(r)||(r=[]);let o=Ro(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 lx(){Rn();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(`
757
757
  `),e=await mn(t,{timeoutMs:15e3});try{return JSON.parse(e)}catch{return{name:"",bundleId:"",pid:0}}}async function Aj(){Rn();let t=['ObjC.import("CoreGraphics");',"var p = $.CGEventGetLocation($.CGEventCreate($()));","JSON.stringify({ x: p.x, y: p.y });"].join(`
758
758
  `),e=await mn(t,{timeoutMs:15e3});try{return JSON.parse(e)}catch{return{x:0,y:0}}}async function Oj(t){Rn();let e=t||{},n=e.shot||await Op({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=Ro(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(`
759
- `),o=await mn(r,{timeoutMs:xj}),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:ox(i,n,s),items:i.length,shot:n}}async function Ej(t){Rn();let e=t||{},n=qo(e.x,e.y,e);return await ca(n.x,n.y),await mn(Sj({x:n.x,y:n.y,button:e.button==="right"?"right":"left",count:e.count===2?2:1,dry:e.dry}),{timeoutMs:is}),(e.button==="right"?"\u53F3\u952E":e.count===2?"\u53CC\u51FB":"\u5355\u51FB")+" ("+n.x+", "+n.y+")\u3002"}async function Pj(t){Rn();let e=t||{},n=qo(e.x,e.y,e);return await ca(n.x,n.y),await mn(vj({x:n.x,y:n.y,dry:e.dry}),{timeoutMs:is}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function jj(t){Rn();let e=t||{},n=qo(e.x,e.y,e),s=qo(e.toX,e.toY,e);return await ca(n.x,n.y),await ca(s.x,s.y),await mn(_j({x:n.x,y:n.y,toX:s.x,toY:s.y,dry:e.dry}),{timeoutMs:is}),"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function Nj(t){Rn();let e=t||{},n=qo(e.x,e.y,e);await ca(n.x,n.y);let s=gc(e.dy,0),r=gc(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 mn(Tj({x:n.x,y:n.y,dy:Ro(s,-5e3,5e3),dx:Ro(r,-5e3,5e3),dry:e.dry}),{timeoutMs:is}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function Ij(t){Rn();let e=t||{},n=ax(e.keys);return await mn(_p([n],e.dry),{timeoutMs:is}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function Dj(t){Rn();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(yc),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?ua.shift:0}});e.submit&&l.push({code:Ln.return,flags:0}),l.length&&await mn(_p(l,e.dry),{timeoutMs:is}),i="\u6309\u952E\u7801\u8F93\u5165 "+s.length+" \u4E2A\u5B57\u7B26"}else{let l=e.dry?null:await Mj();e.dry||await ex(n);let u=[{code:Ln.v,flags:ua.cmd}];e.submit&&u.push({code:Ln.return,flags:0}),await mn(_p(u,e.dry),{timeoutMs:is}),!e.dry&&l!=null&&setTimeout(function(){ex(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await lx().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?`
759
+ `),o=await mn(r,{timeoutMs:xj}),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:ox(i,n,s),items:i.length,shot:n}}async function Ej(t){Rn();let e=t||{},n=qo(e.x,e.y,e);return await ca(n.x,n.y),await mn(Sj({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 Pj(t){Rn();let e=t||{},n=qo(e.x,e.y,e);return await ca(n.x,n.y),await mn(vj({x:n.x,y:n.y,dry:e.dry}),{timeoutMs:as}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function jj(t){Rn();let e=t||{},n=qo(e.x,e.y,e),s=qo(e.toX,e.toY,e);return await ca(n.x,n.y),await ca(s.x,s.y),await mn(_j({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 Nj(t){Rn();let e=t||{},n=qo(e.x,e.y,e);await ca(n.x,n.y);let s=gc(e.dy,0),r=gc(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 mn(Tj({x:n.x,y:n.y,dy:Ro(s,-5e3,5e3),dx:Ro(r,-5e3,5e3),dry:e.dry}),{timeoutMs:as}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function Ij(t){Rn();let e=t||{},n=ax(e.keys);return await mn(_p([n],e.dry),{timeoutMs:as}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function Dj(t){Rn();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(yc),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?ua.shift:0}});e.submit&&l.push({code:Ln.return,flags:0}),l.length&&await mn(_p(l,e.dry),{timeoutMs:as}),i="\u6309\u952E\u7801\u8F93\u5165 "+s.length+" \u4E2A\u5B57\u7B26"}else{let l=e.dry?null:await Mj();e.dry||await ex(n);let u=[{code:Ln.v,flags:ua.cmd}];e.submit&&u.push({code:Ln.return,flags:0}),await mn(_p(u,e.dry),{timeoutMs:as}),!e.dry&&l!=null&&setTimeout(function(){ex(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await lx().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?`
760
760
  \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function Fj(){let t=Ap(),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 wc()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Op({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{Lo.unlinkSync(n.file)}catch{}}catch(n){e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A"+n.message)}try{let n=await mn('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}cx.exports={available:Ap,check:Fj,screens:wc,capture:Op,describeShot:hj,windows:Cj,frontmost:lx,cursor:Aj,ocr:Oj,click:Ej,move:Pj,drag:jj,scroll:Nj,type:Dj,key:Ij,parseKeys:ax,charToKey:yc,formatOcr:ox,clipText:gj,parseRegion:nx,clampRegion:sx,imageSize:Mp,lastShotInfo:dj,num:gc,clamp:Ro,toScreenPoint:qo,pointOnScreen:rx,screenListDesc:Cp,fmtSize:pj,signed:mj,ensureTmpDir:yj,pruneTmp:wj,tmpFile:xp,KEY_CODES:Ln,FLAGS:ua,SHIFT_CHARS:vp,TMP_DIR:bj,DEFAULT_MAX_WIDTH:ix}});var px=Q((eR,jp)=>{var dx={pending:1,in_progress:1,completed:1,cancelled:1},Lj=/^#{1,6}\s*(?:步骤|steps?)(?:\s|[::((]|$)/i,Rj=/^\s*(?:[-*·]|\d+[.)、])\s+(?:\[[ xX/~-]\]\s+)?(.+?)\s*$/;function fx(t){let e=String(t??"").replace(/\s+/g," ").trim();return e?e.length>200?e.slice(0,200):e:""}function qj(t){let e=String(t??"").trim().toLowerCase();return dx[e]?e:"pending"}function pa(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(Lj.test(a)){s=!0;continue}if(s)break}if(!s||!a)continue;let l=Rj.exec(i);if(!l)continue;let c=fx(l[1]);c&&r.push(c)}return r.map(function(o,i){return{id:"t"+(i+1),content:o,status:"pending"}})}function Bo(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=fx(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:qj(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 Ep(t,e,n){let s=n||{},r=Bo(e);if(!s.merge)return r;let o=Bo(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 Bo(a.map(function(l){return i.get(l)}))}function Bj(t){return t==="completed"?"[x]":t==="in_progress"?"[-]":t==="cancelled"?"[~]":"[ ]"}function Pp(t){let e=Bo(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("- "+Bj(r.status)+" "+r.id+": "+r.content)}return n.join(`
761
761
  `)}jp.exports={STATUSES:dx,parsePlanSteps:pa,normalize:Bo,merge:Ep,formatBlock:Pp};if(require.main===jp){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(`
762
762
  `),r=pa(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(pa("").length===0,"empty"),t(pa(`## \u76EE\u6807
@@ -823,8 +823,8 @@ Plugins run on this machine with your permissions. After installing, you still h
823
823
  \u30BD\u30FC\u30B9\uFF1A{repo}
824
824
  \u30EC\u30D3\u30E5\u30FC\u72B6\u614B\uFF1A{review}
825
825
 
826
- \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>&lt;\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9&gt;/.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__&lt;server&gt;__&lt;tool&gt;</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__&lt;\u30D7\u30E9\u30B0\u30A4\u30F3&gt;__&lt;\u30C4\u30FC\u30EB&gt;</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 m=s(d)||n,y=(e[m]||e["zh-cn"])[f];return y==null&&(y=e["zh-cn"][f]),y==null?f:(p&&(y=String(y).replace(/\{(\w+)\}/g,function(k,T){return p[T]==null?k: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 ga<"u"&&ga&&ga.exports&&(ga.exports=u),t&&(t.LubanI18n=u)})(typeof globalThis<"u"?globalThis:vx)});var Ox=Q((nR,Ax)=>{"use strict";var Jr=require("path"),Dp=/!\[([^\]]*)\]\(([^()\s]*(?:\([^()\s]*\)[^()\s]*)*)\)/g;function Hj(t){let e=[],n=new Set,s=String(t??""),r;for(Dp.lastIndex=0;(r=Dp.exec(s))!==null;){let o=String(r[2]||"").trim();o&&(n.has(o)||(n.add(o),e.push(o)))}return e}function Tx(t,e){if(!t||!e)return!1;let n=Jr.resolve(t),s=Jr.resolve(e);if(n===s)return!0;let r=Jr.relative(s,n);return!!r&&!r.startsWith("..")&&!Jr.isAbsolute(r)}function Mx(t){let e=String(t||"");return!e||e.startsWith("//")||e.startsWith("data:")||e.startsWith("#")?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)}function Cx(t,e,n){let s=String(t??"").trim();if(!s)return{kind:"invalid",url:s};if(Mx(s)){if(!/^file:/i.test(s))return{kind:"remote",url:s};let i=s.replace(/^file:\/\//i,"");return Cx(i,e,n)}let r=Jr.isAbsolute(s)?Jr.resolve(s):Jr.resolve(String(e||""),s),o=Array.isArray(n)?n:[];for(let i of o)if(Tx(r,i))return{kind:"workspace",abs:r,url:s};return{kind:"inline",abs:r,url:s}}Ax.exports={extractImageUrls:Hj,classifyImage:Cx,insideRoot:Tx,isRemoteLike:Mx,IMG_RE:Dp}});var E_=Q((sR,O_)=>{var x=require("vscode"),P=require("fs"),D=require("path"),it=require("os"),Up=require("tls"),{exec:zj,execSync:SS}=require("child_process"),wn=Xu(),Yn=rd(),Gj=Ng(),Yr=ud(),Jj=Kg(),Ee=gd(),yn=oy(),Sn=cy(),Ex=py(),Se=Oy(),Ht=Ud(),en=bw(),Es=_w(),lt=Pw(),vS=Iw(),pr=zw(),Ec=Vw(),mr=cb(),Kt=zd(),Bn=gb(),Ns=bb(),Xe=_l(),Te=_b(),wt=Bb(),Je=Ur(),Ps=k0(),_S=Ii(),Px=Nf(),vn=Bu(),$j=M0(),TS=L0(),_n=Yf(),cs=pk(),Xa=process.platform==="linux",Xj=process.platform==="darwin",ie=Xa?Ik():process.platform==="win32"?Zk():ux(),us=process.platform==="win32",MS=us?"Windows":Xj?"macOS":Xa?"Linux":"\u4EC5\u652F\u6301 macOS / Windows / Linux",Vj=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":Xa?" 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",Ea=us?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":Xa?"\u5C4F\u5E55\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9";function Yj(){return us?{a:65,p:80,bang:49}:Xa?{a:97,p:112,bang:49}:{a:0,p:35,bang:18}}var sn=px(),wr=Sx(),Ms=Ju(),CS=_x(),jx=Ox(),Nx=Tl(),Zj=Bs().SKIP_DIRS,ds=Nx&&Nx.version||"0.0.0",Pc=process.env.LUBAN_OUT_DIR||"/tmp/luban-ide",Qj=Pc+"/result.json",dt=D.join(it.homedir(),".luban","providers.json"),Sa={startedAt:new Date().toISOString(),steps:[],acks:[]},eN=400,Ix=2e3,Ho=null;function AS(){try{P.mkdirSync(Pc,{recursive:!0}),P.writeFileSync(Qj,JSON.stringify(Sa,null,2))}catch{}}function um(){Ho&&(clearTimeout(Ho),Ho=null),AS()}function b(t,e){Sa.steps.push({step:t,at:new Date().toISOString(),...e}),Sa.steps.length>Ix&&Sa.steps.splice(0,Sa.steps.length-Ix),Ho||(Ho=setTimeout(function(){Ho=null,AS()},eN))}var rn="",OS=[];function ES(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 ES(t,x.env&&x.env.language)}function M(t,e){return CS.t(t,e)}function jc(t){rn=CS.setLang(Va()),Yn.setUntitled(M("store.untitled")),sN();try{bn&&bn.fire()}catch{}try{Em()}catch{}return b("language_applied",{lang:rn,reason:t||""}),rn}function tN(t){for(let e of OS.splice(0))try{e(t)}catch{}}function nN(t){return new Promise(function(e){let n=!1,s=setTimeout(function(){n||(n=!0,e(null))},t||8e3);OS.push(function(r){n||(n=!0,clearTimeout(s),e(r))})})}function sN(){let t=[Me&&Me.webview,fe&&fe.webview,Mt&&Mt.webview];for(let e of t)if(e)try{e.postMessage({type:"lang",lang:rn})}catch(n){b("broadcast_lang_failed",{message:n.message})}}var PS={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}]}]},Gt=PS,Vo="builtin",ps=Object.create(null),Tt=null,zo=[],jS=40,Wp=Object.create(null),Dx=new Map;function rN(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 ou(){try{let t=JSON.parse(P.readFileSync(dt,"utf8"));if(t&&Array.isArray(t.providers)&&t.providers.length){Gt=rN(t),Vo=dt,b("config_loaded",{source:dt,providers:t.providers.map(e=>e.id),models:Zn().length});return}}catch(t){b("config_load_failed",{message:t.message,path:dt})}Gt=PS,Vo="builtin"}function oN(){let t=[];for(let e of Gt.providers||[])for(let n of e.models||[])t.push({provider:e,model:n});return t}function Zn(){let t=oN(),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 ft(t){let e=Zn(),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===Gt.defaultModel)||e.find(s=>s.provider.id+"::"+s.model.id===Gt.defaultModel)||e[0]}function si(){let t=ft(Gt.defaultModel);return t?t.key:""}function iN(t){try{let e=P.readFileSync(D.join(it.homedir(),".hermes",".env"),"utf8");for(let n of e.split(`
827
- `)){let s=n.match(new RegExp("^\\s*"+t+"\\s*=\\s*(.+)\\s*$"));if(s)return s[1].trim().replace(/^["']|["']$/g,"")}}catch{}return""}function Ya(t){let e=t&&t.apiKeyEnv;return e?process.env[e]?String(process.env[e]).trim():iN(e):""}function Nc(t){if(!t)return"";if(t.apiKey)return String(t.apiKey);let e=ps[t.id];return e?String(e):Ya(t)}var dm="luban-local";function aN(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 Yo(t){return t?t.keyless===!0?!0:aN(t.baseUrl):!1}function Zo(t){let e=Nc(t);return e||(Yo(t)?dm:"")}function NS(t){return String(t.baseUrl||"").replace(/\/+$/,"")+"/chat/completions"}var Kp=2e4,fm=3e3,Fx=8e3,lN="https://cn.bing.com/search",IS="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",Fp=2*1024*1024;function DS(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 Ic(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 FS(t){let e=t||{},n=ft(e.modelKey);if(!n)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let s=Ic(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=Zo(n.provider);if(!r)throw new Error("provider "+n.provider.id+" \u7F3A\u5C11 API key");let o=n.provider.inlineCompletion||{},i=Ec.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=iu(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(),m=p&&p.choices&&p.choices[0],h=String(m&&(m.text||m.message&&m.message.content)||"");return{text:Ec.trimCompletion(h,i.suffix),rawChars:h.length,model:a.model,promptChars:i.prompt.length,suffixChars:i.suffix.length,usage:p&&p.usage||null}}finally{clearTimeout(d)}}function cN(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 iu(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 LS(t){let e=new AbortController,n=iu(t&&t.signal),s=t&&t.timeoutMs||Kp,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 RS(t,e,n,s){let r=s||{},o=DS(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=Zo(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=iu(r.signal),c=setTimeout(function(){a.abort()},r.timeoutMs||Kp);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||Kp)/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 b("web_http_error",{endpoint:t,status:u.status,body:String(d).slice(0,300)}),new Error(cN(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 uN(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 RS("/search",a,e,s),u=Array.isArray(c&&c.results)?c.results:[];return b("web_search",{provider:e.provider.id,query:r,count:i,needContent:!!s.needContent,results:u.length}),{query:r,results:u}}async function dN(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 RS("/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)+`
826
+ \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>&lt;\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9&gt;/.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__&lt;server&gt;__&lt;tool&gt;</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__&lt;\u30D7\u30E9\u30B0\u30A4\u30F3&gt;__&lt;\u30C4\u30FC\u30EB&gt;</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 m=s(d)||n,y=(e[m]||e["zh-cn"])[f];return y==null&&(y=e["zh-cn"][f]),y==null?f:(p&&(y=String(y).replace(/\{(\w+)\}/g,function(k,T){return p[T]==null?k: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 ga<"u"&&ga&&ga.exports&&(ga.exports=u),t&&(t.LubanI18n=u)})(typeof globalThis<"u"?globalThis:vx)});var Ox=Q((nR,Ax)=>{"use strict";var Jr=require("path"),Dp=/!\[([^\]]*)\]\(([^()\s]*(?:\([^()\s]*\)[^()\s]*)*)\)/g;function Hj(t){let e=[],n=new Set,s=String(t??""),r;for(Dp.lastIndex=0;(r=Dp.exec(s))!==null;){let o=String(r[2]||"").trim();o&&(n.has(o)||(n.add(o),e.push(o)))}return e}function Tx(t,e){if(!t||!e)return!1;let n=Jr.resolve(t),s=Jr.resolve(e);if(n===s)return!0;let r=Jr.relative(s,n);return!!r&&!r.startsWith("..")&&!Jr.isAbsolute(r)}function Mx(t){let e=String(t||"");return!e||e.startsWith("//")||e.startsWith("data:")||e.startsWith("#")?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)}function Cx(t,e,n){let s=String(t??"").trim();if(!s)return{kind:"invalid",url:s};if(Mx(s)){if(!/^file:/i.test(s))return{kind:"remote",url:s};let i=s.replace(/^file:\/\//i,"");return Cx(i,e,n)}let r=Jr.isAbsolute(s)?Jr.resolve(s):Jr.resolve(String(e||""),s),o=Array.isArray(n)?n:[];for(let i of o)if(Tx(r,i))return{kind:"workspace",abs:r,url:s};return{kind:"inline",abs:r,url:s}}Ax.exports={extractImageUrls:Hj,classifyImage:Cx,insideRoot:Tx,isRemoteLike:Mx,IMG_RE:Dp}});var E_=Q((sR,O_)=>{var x=require("vscode"),P=require("fs"),D=require("path"),it=require("os"),Up=require("tls"),{exec:zj,execSync:SS}=require("child_process"),wn=Xu(),Yn=rd(),Gj=Ng(),Yr=ud(),Jj=Kg(),Ee=gd(),yn=oy(),Sn=cy(),Ex=py(),Se=Oy(),Ht=Ud(),en=bw(),Ps=_w(),lt=Pw(),vS=Iw(),mr=zw(),Ec=Vw(),hr=cb(),Kt=zd(),Bn=gb(),Is=bb(),Xe=_l(),Te=_b(),wt=Bb(),Je=Ur(),js=k0(),_S=Ii(),Px=Nf(),vn=Bu(),$j=M0(),TS=L0(),_n=Yf(),us=pk(),Xa=process.platform==="linux",Xj=process.platform==="darwin",ie=Xa?Ik():process.platform==="win32"?Zk():ux(),ds=process.platform==="win32",MS=ds?"Windows":Xj?"macOS":Xa?"Linux":"\u4EC5\u652F\u6301 macOS / Windows / Linux",Vj=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":Xa?" 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",Ea=ds?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":Xa?"\u5C4F\u5E55\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9";function Yj(){return ds?{a:65,p:80,bang:49}:Xa?{a:97,p:112,bang:49}:{a:0,p:35,bang:18}}var sn=px(),br=Sx(),Cs=Ju(),CS=_x(),jx=Ox(),Nx=Tl(),Zj=Us().SKIP_DIRS,fs=Nx&&Nx.version||"0.0.0",Pc=process.env.LUBAN_OUT_DIR||"/tmp/luban-ide",Qj=Pc+"/result.json",dt=D.join(it.homedir(),".luban","providers.json"),Sa={startedAt:new Date().toISOString(),steps:[],acks:[]},eN=400,Ix=2e3,Ho=null;function AS(){try{P.mkdirSync(Pc,{recursive:!0}),P.writeFileSync(Qj,JSON.stringify(Sa,null,2))}catch{}}function um(){Ho&&(clearTimeout(Ho),Ho=null),AS()}function b(t,e){Sa.steps.push({step:t,at:new Date().toISOString(),...e}),Sa.steps.length>Ix&&Sa.steps.splice(0,Sa.steps.length-Ix),Ho||(Ho=setTimeout(function(){Ho=null,AS()},eN))}var rn="",OS=[];function ES(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 ES(t,x.env&&x.env.language)}function M(t,e){return CS.t(t,e)}function jc(t){rn=CS.setLang(Va()),Yn.setUntitled(M("store.untitled")),sN();try{bn&&bn.fire()}catch{}try{Em()}catch{}return b("language_applied",{lang:rn,reason:t||""}),rn}function tN(t){for(let e of OS.splice(0))try{e(t)}catch{}}function nN(t){return new Promise(function(e){let n=!1,s=setTimeout(function(){n||(n=!0,e(null))},t||8e3);OS.push(function(r){n||(n=!0,clearTimeout(s),e(r))})})}function sN(){let t=[Me&&Me.webview,fe&&fe.webview,Mt&&Mt.webview];for(let e of t)if(e)try{e.postMessage({type:"lang",lang:rn})}catch(n){b("broadcast_lang_failed",{message:n.message})}}var PS={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}]}]},Gt=PS,Vo="builtin",ms=Object.create(null),Tt=null,zo=[],jS=40,Wp=Object.create(null),Dx=new Map;function rN(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 ou(){try{let t=JSON.parse(P.readFileSync(dt,"utf8"));if(t&&Array.isArray(t.providers)&&t.providers.length){Gt=rN(t),Vo=dt,b("config_loaded",{source:dt,providers:t.providers.map(e=>e.id),models:Zn().length});return}}catch(t){b("config_load_failed",{message:t.message,path:dt})}Gt=PS,Vo="builtin"}function oN(){let t=[];for(let e of Gt.providers||[])for(let n of e.models||[])t.push({provider:e,model:n});return t}function Zn(){let t=oN(),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 ft(t){let e=Zn(),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===Gt.defaultModel)||e.find(s=>s.provider.id+"::"+s.model.id===Gt.defaultModel)||e[0]}function si(){let t=ft(Gt.defaultModel);return t?t.key:""}function iN(t){try{let e=P.readFileSync(D.join(it.homedir(),".hermes",".env"),"utf8");for(let n of e.split(`
827
+ `)){let s=n.match(new RegExp("^\\s*"+t+"\\s*=\\s*(.+)\\s*$"));if(s)return s[1].trim().replace(/^["']|["']$/g,"")}}catch{}return""}function Ya(t){let e=t&&t.apiKeyEnv;return e?process.env[e]?String(process.env[e]).trim():iN(e):""}function Nc(t){if(!t)return"";if(t.apiKey)return String(t.apiKey);let e=ms[t.id];return e?String(e):Ya(t)}var dm="luban-local";function aN(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 Yo(t){return t?t.keyless===!0?!0:aN(t.baseUrl):!1}function Zo(t){let e=Nc(t);return e||(Yo(t)?dm:"")}function NS(t){return String(t.baseUrl||"").replace(/\/+$/,"")+"/chat/completions"}var Kp=2e4,fm=3e3,Fx=8e3,lN="https://cn.bing.com/search",IS="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",Fp=2*1024*1024;function DS(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 Ic(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 FS(t){let e=t||{},n=ft(e.modelKey);if(!n)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let s=Ic(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=Zo(n.provider);if(!r)throw new Error("provider "+n.provider.id+" \u7F3A\u5C11 API key");let o=n.provider.inlineCompletion||{},i=Ec.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=iu(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(),m=p&&p.choices&&p.choices[0],h=String(m&&(m.text||m.message&&m.message.content)||"");return{text:Ec.trimCompletion(h,i.suffix),rawChars:h.length,model:a.model,promptChars:i.prompt.length,suffixChars:i.suffix.length,usage:p&&p.usage||null}}finally{clearTimeout(d)}}function cN(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 iu(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 LS(t){let e=new AbortController,n=iu(t&&t.signal),s=t&&t.timeoutMs||Kp,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 RS(t,e,n,s){let r=s||{},o=DS(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=Zo(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=iu(r.signal),c=setTimeout(function(){a.abort()},r.timeoutMs||Kp);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||Kp)/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 b("web_http_error",{endpoint:t,status:u.status,body:String(d).slice(0,300)}),new Error(cN(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 uN(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 RS("/search",a,e,s),u=Array.isArray(c&&c.results)?c.results:[];return b("web_search",{provider:e.provider.id,query:r,count:i,needContent:!!s.needContent,results:u.length}),{query:r,results:u}}async function dN(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 RS("/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)+`
828
828
  \u2026[\u6B63\u6587\u5DF2\u622A\u65AD]`:i;return b("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 fN={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};function Sc(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 fN[n]||e})}function Ba(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,`
829
829
  `),e=e.replace(/<br\s*\/?>/gi,`
830
830
  `),e=e.replace(/<[^>]+>/g,""),e=Sc(e),e.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
@@ -858,12 +858,12 @@ Plugins run on this machine with your permissions. After installing, you still h
858
858
  ---
859
859
  `+k+l.join(`
860
860
 
861
- `),refs:a}}var YS=Zj,PN="**/{"+YS.join(",")+"}/**",xc={at:0,files:[],dirs:[]};async function jN(){return(await km()).files}async function NN(){return(await km()).dirs}async function km(){if(Date.now()-xc.at<5e3)return xc;let t=L(),e=[];try{e=(await x.workspace.findFiles("**/*",PN,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){b("ref_findfiles_failed",{message:o.message})}if(!e.length){let o=[];try{xm(t,t,0,o)}catch{}e=o.filter(i=>i.charAt(i.length-1)!=="/").map(i=>i.replace(/\s+\(\d+B\)$/,""))}let n={};Uo.forEach(function(o,i){let a=Xn(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=IN(e);return xc={at:Date.now(),files:e,dirs:r},xc}function IN(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 au(t){return!t||t.charAt(0)==="."?!0:YS.indexOf(t)>=0}function DN(t){let e=String(t||"").split(/[\\/]+/);for(let n=0;n<e.length-1;n++)if(e[n]&&au(e[n]))return e[n];return""}async function hr(t,e){P.mkdirSync(D.dirname(t),{recursive:!0});let n=x.Uri.file(t),s=x.workspace.textDocuments.find(r=>gm(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 xm(t,e,n,s){if(n>3||s.length>=200)return;let r=[];try{r=P.readdirSync(e,{withFileTypes:!0})}catch{return}for(let o of r){if(s.length>=200)return;if(au(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+"/"),xm(t,i,n+1,s);else{let c=0;try{c=P.statSync(i).size}catch{}s.push(l+" ("+c+"B)")}}}var ZS=[/\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 FN(){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(P.existsSync(e))return e;try{let e=SS("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 QS=process.platform==="win32"?FN():"/bin/bash",xe=Ex.createRegistry({shell:QS,maxRunning:Ex.DEFAULTS.maxRunning,isDangerous:function(t){return!!ZS.find(function(e){return e.test(t)})}});function ev(t,e,n,s){return new Promise(r=>{if(ZS.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}zj(t,{cwd:e,timeout:Math.min(Math.max(n||6e4,1e3),12e4),maxBuffer:4*1024*1024,shell:QS,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"})},(i,a,l)=>{let u=((a||"")+(l?`
861
+ `),refs:a}}var YS=Zj,PN="**/{"+YS.join(",")+"}/**",xc={at:0,files:[],dirs:[]};async function jN(){return(await km()).files}async function NN(){return(await km()).dirs}async function km(){if(Date.now()-xc.at<5e3)return xc;let t=L(),e=[];try{e=(await x.workspace.findFiles("**/*",PN,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){b("ref_findfiles_failed",{message:o.message})}if(!e.length){let o=[];try{xm(t,t,0,o)}catch{}e=o.filter(i=>i.charAt(i.length-1)!=="/").map(i=>i.replace(/\s+\(\d+B\)$/,""))}let n={};Uo.forEach(function(o,i){let a=Xn(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=IN(e);return xc={at:Date.now(),files:e,dirs:r},xc}function IN(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 au(t){return!t||t.charAt(0)==="."?!0:YS.indexOf(t)>=0}function DN(t){let e=String(t||"").split(/[\\/]+/);for(let n=0;n<e.length-1;n++)if(e[n]&&au(e[n]))return e[n];return""}async function gr(t,e){P.mkdirSync(D.dirname(t),{recursive:!0});let n=x.Uri.file(t),s=x.workspace.textDocuments.find(r=>gm(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 xm(t,e,n,s){if(n>3||s.length>=200)return;let r=[];try{r=P.readdirSync(e,{withFileTypes:!0})}catch{return}for(let o of r){if(s.length>=200)return;if(au(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+"/"),xm(t,i,n+1,s);else{let c=0;try{c=P.statSync(i).size}catch{}s.push(l+" ("+c+"B)")}}}var ZS=[/\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 FN(){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(P.existsSync(e))return e;try{let e=SS("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 QS=process.platform==="win32"?FN():"/bin/bash",xe=Ex.createRegistry({shell:QS,maxRunning:Ex.DEFAULTS.maxRunning,isDangerous:function(t){return!!ZS.find(function(e){return e.test(t)})}});function ev(t,e,n,s){return new Promise(r=>{if(ZS.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}zj(t,{cwd:e,timeout:Math.min(Math.max(n||6e4,1e3),12e4),maxBuffer:4*1024*1024,shell:QS,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"})},(i,a,l)=>{let u=((a||"")+(l?`
862
862
  [stderr]
863
863
  `+l:"")).trim()||(i?String(i.message||i):""),d=tv(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 tv(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)+`
864
864
  \u2026[\u4E2D\u95F4\u7701\u7565 `+i+` \u5B57\u7B26]\u2026
865
- `+n.slice(n.length-o),truncated:!0,dropped:i}}var Jo=new Map,zp=null;function br(){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 Sm(){return br().enabled}function Za(){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 LN=/^[a-z][a-z0-9-]{0,23}$/,RN=/^[#a-zA-Z0-9.,%()\/\s-]{1,64}$/;function qN(){let t=Za().theme;if(!t)return null;try{return Je.themeOf(t)}catch{return null}}function vm(){let t=qN();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();!LN.test(n)||!RN.test(s)||(e[n]=s)}return Object.keys(e).length?e:null}function _m(){let t=vm();if(!t)return"";let e=[];for(let n of Object.keys(t))e.push("--"+n+":"+t[n]);return"<style>:root{"+e.join(";")+"}</style>"}function Tm(){let t=vm(),e={type:"theme",plugin:Za().theme,tokens:t||{}},n=[];try{Me&&n.push(Me.webview)}catch{}try{fe&&n.push(fe.webview)}catch{}try{Qn&&n.push(Qn)}catch{}for(let s of n)try{s.postMessage(e)}catch{}}function Fc(t){let e=Za();return Je.configure({root:L(),enabled:e.enabled,maxTools:e.maxTools,rec:b,confirm:sv}),e.enabled?Je.refresh(L()).then(function(){return e},function(n){return b("plugins_scan_failed",{message:n.message,reason:t||"apply"}),e}):Promise.resolve(e)}function nv(){return Xc("config_change_early"),Fc("config_change").then(function(t){if(b("plugins_config_change",{enabled:t.enabled,maxTools:t.maxTools}),Xc("config_change"),t.enabled)try{let e=Je.status();x.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}return t})}async function sv(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 Kx(t,e){e.timer&&clearTimeout(e.timer);let n=br();e.timer=setTimeout(function(){lu(t,"idle")},n.idleMs),e.timer&&typeof e.timer.unref=="function"&&e.timer.unref()}async function rv(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 Kx(e,n),n.inst;let s=br(),r={inst:null,starting:null,timer:null};return Jo.set(e,r),r.starting=wt.launch({exe:s.chromePath,headless:s.headless,width:s.width,height:s.height}).then(function(o){return r.inst=o,r.starting=null,Kx(e,r),b("browser_launch",{sessionId:e,exe:o.exe,port:o.port}),o}).catch(function(o){throw Jo.delete(e),b("browser_launch_failed",{sessionId:e,message:String(o&&o.message||o)}),o}),r.starting}async function lu(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){b("browser_close_failed",{message:o.message})}else s.starting&&s.starting.then(function(o){return o.close()}).catch(function(){});if(b("browser_close",{sessionId:n,reason:e||"manual"}),typeof zp=="function")try{zp(n)}catch{}return!0}async function BN(t){for(let e of Array.from(Jo.keys()))await lu(e,t)}function Mm(){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 Cm(){return Mm().enabled}var UN={click:!0,move:!0,drag:!0,scroll:!0,type:!0,key:!0},Lc=new Set;async function WN(t,e,n){if(!Mm().confirm)return!0;let r=String(t||"_default");if(Lc.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"?(b("computer_confirm_denied",{sessionId:r,action:e}),!1):(Lc.add(r),b("computer_confirm_ok",{sessionId:r,action:e}),!0)}var Hx={click:!0,type:!0,scroll:!0},zx=new Set;async function KN(t,e,n){if(br().confirm===!1)return!0;let r=String(t||"_default");if(zx.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"?(b("browser_confirm_denied",{sessionId:r,action:e}),!1):(zx.add(r),b("browser_confirm_ok",{sessionId:r,action:e}),!0)}function Gx(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 Jx(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(`
866
- `);return tv(r,isFinite(Number(n))&&Number(n)>200?Number(n):4e3).text}var dr=[{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"+Ea+"\uFF09"},y:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u7EB5\u5750\u6807\uFF08"+Ea+"\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'+Ea+"\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"]}}}],HN={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"]}}},zN={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"]}}},GN=["---","# \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(`
865
+ `+n.slice(n.length-o),truncated:!0,dropped:i}}var Jo=new Map,zp=null;function kr(){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 Sm(){return kr().enabled}function Za(){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 LN=/^[a-z][a-z0-9-]{0,23}$/,RN=/^[#a-zA-Z0-9.,%()\/\s-]{1,64}$/;function qN(){let t=Za().theme;if(!t)return null;try{return Je.themeOf(t)}catch{return null}}function vm(){let t=qN();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();!LN.test(n)||!RN.test(s)||(e[n]=s)}return Object.keys(e).length?e:null}function _m(){let t=vm();if(!t)return"";let e=[];for(let n of Object.keys(t))e.push("--"+n+":"+t[n]);return"<style>:root{"+e.join(";")+"}</style>"}function Tm(){let t=vm(),e={type:"theme",plugin:Za().theme,tokens:t||{}},n=[];try{Me&&n.push(Me.webview)}catch{}try{fe&&n.push(fe.webview)}catch{}try{Qn&&n.push(Qn)}catch{}for(let s of n)try{s.postMessage(e)}catch{}}function Fc(t){let e=Za();return Je.configure({root:L(),enabled:e.enabled,maxTools:e.maxTools,rec:b,confirm:sv}),e.enabled?Je.refresh(L()).then(function(){return e},function(n){return b("plugins_scan_failed",{message:n.message,reason:t||"apply"}),e}):Promise.resolve(e)}function nv(){return Xc("config_change_early"),Fc("config_change").then(function(t){if(b("plugins_config_change",{enabled:t.enabled,maxTools:t.maxTools}),Xc("config_change"),t.enabled)try{let e=Je.status();x.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}return t})}async function sv(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 Kx(t,e){e.timer&&clearTimeout(e.timer);let n=kr();e.timer=setTimeout(function(){lu(t,"idle")},n.idleMs),e.timer&&typeof e.timer.unref=="function"&&e.timer.unref()}async function rv(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 Kx(e,n),n.inst;let s=kr(),r={inst:null,starting:null,timer:null};return Jo.set(e,r),r.starting=wt.launch({exe:s.chromePath,headless:s.headless,width:s.width,height:s.height}).then(function(o){return r.inst=o,r.starting=null,Kx(e,r),b("browser_launch",{sessionId:e,exe:o.exe,port:o.port}),o}).catch(function(o){throw Jo.delete(e),b("browser_launch_failed",{sessionId:e,message:String(o&&o.message||o)}),o}),r.starting}async function lu(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){b("browser_close_failed",{message:o.message})}else s.starting&&s.starting.then(function(o){return o.close()}).catch(function(){});if(b("browser_close",{sessionId:n,reason:e||"manual"}),typeof zp=="function")try{zp(n)}catch{}return!0}async function BN(t){for(let e of Array.from(Jo.keys()))await lu(e,t)}function Mm(){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 Cm(){return Mm().enabled}var UN={click:!0,move:!0,drag:!0,scroll:!0,type:!0,key:!0},Lc=new Set;async function WN(t,e,n){if(!Mm().confirm)return!0;let r=String(t||"_default");if(Lc.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"?(b("computer_confirm_denied",{sessionId:r,action:e}),!1):(Lc.add(r),b("computer_confirm_ok",{sessionId:r,action:e}),!0)}var Hx={click:!0,type:!0,scroll:!0},zx=new Set;async function KN(t,e,n){if(kr().confirm===!1)return!0;let r=String(t||"_default");if(zx.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"?(b("browser_confirm_denied",{sessionId:r,action:e}),!1):(zx.add(r),b("browser_confirm_ok",{sessionId:r,action:e}),!0)}function Gx(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 Jx(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(`
866
+ `);return tv(r,isFinite(Number(n))&&Number(n)>200?Number(n):4e3).text}var fr=[{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"+Ea+"\uFF09"},y:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u7EB5\u5750\u6807\uFF08"+Ea+"\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'+Ea+"\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"]}}}],HN={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"]}}},zN={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"]}}},GN=["---","# \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(`
867
867
  `),JN=5,$x=1500;function Rc(t){let e=String(t??""),n=[],s=0;for(;s<e.length;){let r=e.indexOf(`
868
868
  `,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
869
869
  `:`
@@ -895,37 +895,37 @@ Plugins run on this machine with your permissions. After installing, you still h
895
895
  `),_=c+" \uFF08L "+p+"-"+w+" / \u5171 "+f+` \u884C\uFF09
896
896
  `+S;return w<f?_+=`
897
897
  ...[`+(v?"\u672C\u884C\u8D85\u957F\u5DF2\u622A\u65AD\uFF1B":"")+"\u8FD8\u6709\u540E\u7EED\uFF0C\u4F20 startLine="+(w+1)+" \u7EE7\u7EED]":v&&(_+=`
898
- ...[\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=pr.search(n,String(e.query||e.q||""),{maxFiles:r_(),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 b("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}),pr.format(d)}if(t==="write_file"){let a=tt(ya(e,"write_file"),n),l=!P.existsSync(a),c=Lp(a),u=l?"":Qr(a),d=wa(e,"content","write_file")||"";await ba(o,"write_file",[{path:ut(a),kind:l?"add":"update",before:u,after:d}]);let f=await hr(a,d),p=as(a,u,d,l,o.sessionId,o.autoKeep);return f+" | "+d.split(`
899
- `).length+" \u884C"+ar(p,o.autoKeep)+await Zx(a,l||!c)}if(t==="replace_in_file"){let a=ya(e,"replace_in_file"),l=tt(a,n);if(!P.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);let c=Lp(l),u=P.readFileSync(l,"utf8"),d=wa(e,"old_string","replace_in_file"),f=wa(e,"new_string","replace_in_file"),p=aI(u,d,f,e.replace_all===!0||e.replaceAll===!0);await ba(o,"replace_in_file",[{path:ut(l),kind:"update",before:u,after:p.next}]);let m=await hr(l,p.next),h=as(l,u,p.next,!1,o.sessionId,o.autoKeep),y=p.count>1?"\u66FF\u6362 "+p.count+" \u5904":"\u66FF\u6362 1 \u5904",k=p.level?"\uFF08\u5BB9\u9519 L"+p.level+"\uFF1A\u884C\u5C3E/\u7A7A\u767D\u5DEE\u5F02\u5DF2\u5BF9\u9F50\uFF09":"";return m+" | "+y+k+ar(h,o.autoKeep)+await Zx(l,!c)}if(t==="grep"){let a=Rx(e.dir,n),l=Math.floor(Number(e.maxHits)),c=i?i.grepHits:200,u=Kt.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 b("grep",{pattern:u.pattern,hits:u.hits.length,files:u.filesSearched,truncated:u.truncated,timedOut:!!u.timedOut}),Kt.formatGrep(u)}if(t==="glob"){let a=Rx(e.dir,n),l=Math.floor(Number(e.maxFiles)),c=i?i.globFiles:200,u=Kt.glob(a.base,e.patterns||[],{maxFiles:isFinite(l)?Math.min(Math.max(l,1),c):c,prefix:a.prefix});return b("glob",{pattern:u.pattern,matches:u.matches.length,scanned:u.scanned,truncated:u.truncated}),Kt.formatGlob(u)}if(t==="apply_patch"){let a=Bn.parsePatch(wa(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 ba(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]=Lp(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 m=Qr(p.abs)||p.before||"";try{await x.workspace.fs.delete(x.Uri.file(p.abs),{useTrash:!0})}catch{P.rmSync(p.abs,{force:!0})}c.push({kind:"delete",abs:p.abs,rel:p.rel,before:m})}}catch(p){throw await dI(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)"+ar(as(p.abs,"",p.content,!0,o.sessionId,o.autoKeep),o.autoKeep)):p.kind==="update"?d.push(p.rel+" (\u4FEE\u6539)"+ar(as(p.abs,p.before,p.content,!1,o.sessionId,o.autoKeep),o.autoKeep)):d.push(p.rel+" (\u5220\u9664)"+ar(as(p.abs,p.before,"",!1,o.sessionId,o.autoKeep),o.autoKeep));b("apply_patch",{files:d.length});let f="";if(iv()){let p=c.filter(function(k){return k.kind!=="delete"}).map(function(k){return k.abs}),m=await av(p),h=Ns.summarize(m),y=c.some(function(k){return k.kind==="add"||!u[k.abs]});h.total&&(h.error||h.warning)?f=lv+`
900
- `+Ns.formatLints(m,{maxDiags:10}):y&&(f=Gp)}return"apply_patch \u6210\u529F\uFF1A"+d.length+` \u4E2A\u6587\u4EF6
898
+ ...[\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=mr.search(n,String(e.query||e.q||""),{maxFiles:r_(),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 b("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}),mr.format(d)}if(t==="write_file"){let a=tt(ya(e,"write_file"),n),l=!P.existsSync(a),c=Lp(a),u=l?"":Qr(a),d=wa(e,"content","write_file")||"";await ba(o,"write_file",[{path:ut(a),kind:l?"add":"update",before:u,after:d}]);let f=await gr(a,d),p=ls(a,u,d,l,o.sessionId,o.autoKeep);return f+" | "+d.split(`
899
+ `).length+" \u884C"+lr(p,o.autoKeep)+await Zx(a,l||!c)}if(t==="replace_in_file"){let a=ya(e,"replace_in_file"),l=tt(a,n);if(!P.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);let c=Lp(l),u=P.readFileSync(l,"utf8"),d=wa(e,"old_string","replace_in_file"),f=wa(e,"new_string","replace_in_file"),p=aI(u,d,f,e.replace_all===!0||e.replaceAll===!0);await ba(o,"replace_in_file",[{path:ut(l),kind:"update",before:u,after:p.next}]);let m=await gr(l,p.next),h=ls(l,u,p.next,!1,o.sessionId,o.autoKeep),y=p.count>1?"\u66FF\u6362 "+p.count+" \u5904":"\u66FF\u6362 1 \u5904",k=p.level?"\uFF08\u5BB9\u9519 L"+p.level+"\uFF1A\u884C\u5C3E/\u7A7A\u767D\u5DEE\u5F02\u5DF2\u5BF9\u9F50\uFF09":"";return m+" | "+y+k+lr(h,o.autoKeep)+await Zx(l,!c)}if(t==="grep"){let a=Rx(e.dir,n),l=Math.floor(Number(e.maxHits)),c=i?i.grepHits:200,u=Kt.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 b("grep",{pattern:u.pattern,hits:u.hits.length,files:u.filesSearched,truncated:u.truncated,timedOut:!!u.timedOut}),Kt.formatGrep(u)}if(t==="glob"){let a=Rx(e.dir,n),l=Math.floor(Number(e.maxFiles)),c=i?i.globFiles:200,u=Kt.glob(a.base,e.patterns||[],{maxFiles:isFinite(l)?Math.min(Math.max(l,1),c):c,prefix:a.prefix});return b("glob",{pattern:u.pattern,matches:u.matches.length,scanned:u.scanned,truncated:u.truncated}),Kt.formatGlob(u)}if(t==="apply_patch"){let a=Bn.parsePatch(wa(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 ba(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]=Lp(p.abs));try{for(let p of l.plan)if(p.type==="add")await gr(p.abs,p.content),c.push({kind:"add",abs:p.abs,rel:p.rel,content:p.content});else if(p.type==="update")await gr(p.abs,p.content),c.push({kind:"update",abs:p.abs,rel:p.rel,before:p.before,content:p.content});else{let m=Qr(p.abs)||p.before||"";try{await x.workspace.fs.delete(x.Uri.file(p.abs),{useTrash:!0})}catch{P.rmSync(p.abs,{force:!0})}c.push({kind:"delete",abs:p.abs,rel:p.rel,before:m})}}catch(p){throw await dI(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)"+lr(ls(p.abs,"",p.content,!0,o.sessionId,o.autoKeep),o.autoKeep)):p.kind==="update"?d.push(p.rel+" (\u4FEE\u6539)"+lr(ls(p.abs,p.before,p.content,!1,o.sessionId,o.autoKeep),o.autoKeep)):d.push(p.rel+" (\u5220\u9664)"+lr(ls(p.abs,p.before,"",!1,o.sessionId,o.autoKeep),o.autoKeep));b("apply_patch",{files:d.length});let f="";if(iv()){let p=c.filter(function(k){return k.kind!=="delete"}).map(function(k){return k.abs}),m=await av(p),h=Is.summarize(m),y=c.some(function(k){return k.kind==="add"||!u[k.abs]});h.total&&(h.error||h.warning)?f=lv+`
900
+ `+Is.formatLints(m,{maxDiags:10}):y&&(f=Gp)}return"apply_patch \u6210\u529F\uFF1A"+d.length+` \u4E2A\u6587\u4EF6
901
901
  `+d.join(`
902
- `)+f}if(t==="delete_file"){let a=ya(e,"delete_file"),l=tt(a,n);if(!P.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!P.statSync(l).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u5220\u9664\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);let c=Qr(l);await ba(o,"delete_file",[{path:ut(l),kind:"delete",before:c,after:""}]);try{await x.workspace.fs.delete(x.Uri.file(l),{useTrash:!0})}catch{P.rmSync(l,{force:!0})}let u=as(l,c,"",!1,o.sessionId,o.autoKeep);return b("delete_file",{path:ut(l)}),"deleted "+ut(l)+ar(u,o.autoKeep)}if(t==="move_file"){let a=Vx(e,["from","from_path","fromPath","source","src","old_path","oldPath"]),l=Vx(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(!P.existsSync(c))throw new Error("\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!P.statSync(c).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u79FB\u52A8\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);if(P.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=Qr(c);await ba(o,"move_file",[{path:ut(c),kind:"delete",before:d,after:""},{path:ut(u),kind:"add",before:"",after:d}]),P.mkdirSync(D.dirname(u),{recursive:!0}),P.renameSync(c,u);let f=as(c,d,"",!1,o.sessionId,o.autoKeep),p=as(u,"",d,!0,o.sessionId,o.autoKeep);return b("move_file",{from:ut(c),to:ut(u)}),"moved "+ut(c)+" \u2192 "+ut(u)+ar(f,o.autoKeep)+ar(p,o.autoKeep)}if(t==="read_lints"){let a=e.path?tt(ya(e,"read_lints"),n):null,l=e.maxDiags,c=ov(a);return b("read_lints",{path:a?ut(a):"(workspace)",files:Object.keys(c).length}),Ns.formatLints(c,{maxDiags:l})}if(t==="run_command"){let a=String(e.command||""),l=mr.pathGuard(a);if(l)return b("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg}),mS(l);if(js(o.mode,Zc())){let d=mr.check(a);if(!d.ok)return b(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+`
902
+ `)+f}if(t==="delete_file"){let a=ya(e,"delete_file"),l=tt(a,n);if(!P.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!P.statSync(l).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u5220\u9664\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);let c=Qr(l);await ba(o,"delete_file",[{path:ut(l),kind:"delete",before:c,after:""}]);try{await x.workspace.fs.delete(x.Uri.file(l),{useTrash:!0})}catch{P.rmSync(l,{force:!0})}let u=ls(l,c,"",!1,o.sessionId,o.autoKeep);return b("delete_file",{path:ut(l)}),"deleted "+ut(l)+lr(u,o.autoKeep)}if(t==="move_file"){let a=Vx(e,["from","from_path","fromPath","source","src","old_path","oldPath"]),l=Vx(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(!P.existsSync(c))throw new Error("\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);if(!P.statSync(c).isFile())throw new Error("\u4E0D\u662F\u6587\u4EF6\uFF08\u79FB\u52A8\u76EE\u5F55\u8BF7\u7528 run_command\uFF09: "+a);if(P.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=Qr(c);await ba(o,"move_file",[{path:ut(c),kind:"delete",before:d,after:""},{path:ut(u),kind:"add",before:"",after:d}]),P.mkdirSync(D.dirname(u),{recursive:!0}),P.renameSync(c,u);let f=ls(c,d,"",!1,o.sessionId,o.autoKeep),p=ls(u,"",d,!0,o.sessionId,o.autoKeep);return b("move_file",{from:ut(c),to:ut(u)}),"moved "+ut(c)+" \u2192 "+ut(u)+lr(f,o.autoKeep)+lr(p,o.autoKeep)}if(t==="read_lints"){let a=e.path?tt(ya(e,"read_lints"),n):null,l=e.maxDiags,c=ov(a);return b("read_lints",{path:a?ut(a):"(workspace)",files:Object.keys(c).length}),Is.formatLints(c,{maxDiags:l})}if(t==="run_command"){let a=String(e.command||""),l=hr.pathGuard(a);if(l)return b("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg}),mS(l);if(Ns(o.mode,Zc())){let d=hr.check(a);if(!d.ok)return b(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+`
903
903
  \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 ev(a,n,e.timeout_ms,i?i.runMaxChars:0),u="exit="+c.code+`
904
904
  `+c.out;if(c.truncated&&o.spillStore&&typeof o.spillStore.put=="function")try{let d=Sn.newId();o.spillStore.put(d,"exit="+c.code+`
905
905
  `+c.full,{kind:"tool",name:"run_command",label:a.slice(0,60)}),u+=`
906
- [\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=mr.pathGuard(a);if(l)return b("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg,async:!0}),mS(l);if(js(o.mode,Zc())){let d=mr.check(a);if(!d.ok)return b(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+`
906
+ [\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=hr.pathGuard(a);if(l)return b("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg,async:!0}),mS(l);if(Ns(o.mode,Zc())){let d=hr.check(a);if(!d.ok)return b(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+`
907
907
  \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=xe.start(c,a,{cwd:n,timeout_ms:e.timeout_ms});return u.ok&&b("async_cmd_start",{job_id:u.job_id,sessionId:c,timeout_ms:u.timeout_ms}),xe.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 xe.poll(a,l,{wait_ms:e.wait_ms,tail_chars:e.tail_chars});return xe.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=xe.stop(a,l);return b("async_cmd_stop",{job_id:l,sessionId:a,status:c.status}),xe.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":"")+`
908
908
 
909
909
  `+c.content}if(t==="web_search"){let a=await pm(e.query||e.q||"",s,{count:e.count,needContent:!!e.need_content});return hm(a.results,a.query)}if(t==="web_fetch"){let a=await mm(e.url,s,{});return"# "+(a.title||"(\u65E0\u6807\u9898)")+`
910
910
  `+a.url+`
911
911
 
912
- `+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(Yp()<=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=wa(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=Av(Im().maxMinutes),d=function(y,k,T){if(typeof o.onSubProgress=="function")try{o.onSubProgress({description:l,line:String(y??""),running:k!==!1,ok:T!==!1})}catch{}},f;try{f=await Is(c,{root:n,modelKey:o.modelKey,mode:"explore",history:[],token:o.token,sessionId:o.sessionId,maxIters:Yp(),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"+cu(f.stop):"",m="\u5B50\u4EE3\u7406\u300C"+l+"\u300D\u5B8C\u6210\uFF08"+f.iters+" \u8F6E / "+f.log.length+" \u6B21\u5DE5\u5177\u8C03\u7528"+p+"\uFF09";d(m,!1);let h=Xr(f.text,f.log);return b("agent_subagent",{description:l,iters:f.iters,toolCalls:f.log.length,minutes:u,stop:f.stop&&f.stop.reason,usage:f.usage,caveat:!!h}),m+`
912
+ `+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=Cs.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(Yp()<=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=wa(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=Av(Im().maxMinutes),d=function(y,k,T){if(typeof o.onSubProgress=="function")try{o.onSubProgress({description:l,line:String(y??""),running:k!==!1,ok:T!==!1})}catch{}},f;try{f=await Ds(c,{root:n,modelKey:o.modelKey,mode:"explore",history:[],token:o.token,sessionId:o.sessionId,maxIters:Yp(),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"+cu(f.stop):"",m="\u5B50\u4EE3\u7406\u300C"+l+"\u300D\u5B8C\u6210\uFF08"+f.iters+" \u8F6E / "+f.log.length+" \u6B21\u5DE5\u5177\u8C03\u7528"+p+"\uFF09";d(m,!1);let h=Xr(f.text,f.log);return b("agent_subagent",{description:l,iters:f.iters,toolCalls:f.log.length,minutes:u,stop:f.stop&&f.stop.reason,usage:f.usage,caveat:!!h}),m+`
913
913
 
914
- `+h+zc(f.text)}if(t==="read_skill")return Ht.read(e.name,e.file);if(t==="read_rule")return en.read(e.name);if(Se.hasTool(t)){if(o.mode==="plan"&&!Se.planAllowed(t))throw b("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 Se.callTool(t,e)}if(Je.hasTool(t)){if(o.mode==="plan"&&Je.readOnlyOf(t)===!1)throw b("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 Je.callTool(t,e,{root:n,sessionId:o.sessionId,mode:o.mode,signal:o.signal,log:b})}throw new Error("\u672A\u77E5\u5DE5\u5177: "+t)}function cr(t,e,n){let s=t==="plan",r=t==="explore",o=s?Tv:r?Nm:dr,i=Jn(e&&e.provider)!=="none",a=Yp(),l=o.filter(function(d){let f=d.function.name;return f==="web_search"||f==="web_fetch"?i:f==="explore"?a>0:f==="browser"?Sm():f==="computer"?Cm()&&!s&&ie.available().ok:!0});l.push(HN),l.push(zN);let c=r?[]:Se.toolDefs({planOnly:s});for(let d of c)l.push(d);let u=r?[]:Je.toolDefs({planOnly:s});for(let d of u)l.push(d);return n&&n.compact&&(l=yn.compactTools(l,n.tier)),l}var ae=new Map,Am=new Set,kn=new Map,lI=12,Yx=0,Ko=null,bn=null,Ua=null,Uc=null,Wc=0;function cI(){Wc++}function uI(){Wc=Math.max(0,Wc-1)}function ar(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 Qr(t){let e=x.workspace.textDocuments.find(function(n){return gm(n,t)});if(e&&!e.isClosed)return e.getText();try{return P.readFileSync(t,"utf8")}catch{return""}}function ut(t){let e=t;try{e=D.relative(L(),t)}catch{}return e&&!e.startsWith("..")?e:t}function ba(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 ls(){let t=0;for(let e of ae.values())t+=e.hunks.length;return t}function ov(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 iv(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("diagnostics.afterEdit")}catch{}return t!==!1}async function av(t){let e=(t||[]).filter(Boolean),n=function(){let r={};for(let o of e){let i=ov(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 lv=`
914
+ `+h+zc(f.text)}if(t==="read_skill")return Ht.read(e.name,e.file);if(t==="read_rule")return en.read(e.name);if(Se.hasTool(t)){if(o.mode==="plan"&&!Se.planAllowed(t))throw b("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 Se.callTool(t,e)}if(Je.hasTool(t)){if(o.mode==="plan"&&Je.readOnlyOf(t)===!1)throw b("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 Je.callTool(t,e,{root:n,sessionId:o.sessionId,mode:o.mode,signal:o.signal,log:b})}throw new Error("\u672A\u77E5\u5DE5\u5177: "+t)}function ur(t,e,n){let s=t==="plan",r=t==="explore",o=s?Tv:r?Nm:fr,i=Jn(e&&e.provider)!=="none",a=Yp(),l=o.filter(function(d){let f=d.function.name;return f==="web_search"||f==="web_fetch"?i:f==="explore"?a>0:f==="browser"?Sm():f==="computer"?Cm()&&!s&&ie.available().ok:!0});l.push(HN),l.push(zN);let c=r?[]:Se.toolDefs({planOnly:s});for(let d of c)l.push(d);let u=r?[]:Je.toolDefs({planOnly:s});for(let d of u)l.push(d);return n&&n.compact&&(l=yn.compactTools(l,n.tier)),l}var ae=new Map,Am=new Set,kn=new Map,lI=12,Yx=0,Ko=null,bn=null,Ua=null,Uc=null,Wc=0;function cI(){Wc++}function uI(){Wc=Math.max(0,Wc-1)}function lr(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 Qr(t){let e=x.workspace.textDocuments.find(function(n){return gm(n,t)});if(e&&!e.isClosed)return e.getText();try{return P.readFileSync(t,"utf8")}catch{return""}}function ut(t){let e=t;try{e=D.relative(L(),t)}catch{}return e&&!e.startsWith("..")?e:t}function ba(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 ae.values())t+=e.hunks.length;return t}function ov(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 iv(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("diagnostics.afterEdit")}catch{}return t!==!1}async function av(t){let e=(t||[]).filter(Boolean),n=function(){let r={};for(let o of e){let i=ov(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 lv=`
915
915
  \uFF08\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF0C\u53EF\u80FD\u7565\u6EDE\u540E\u4E8E\u672C\u6B21\u5199\u5165\uFF09`,Gp=`
916
- \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 Lp(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 Zx(t,e){if(!iv())return"";try{let n=await av([t]),s=Ns.summarize(n);return!s.total||!s.error&&!s.warning?e?Gp:"":lv+`
917
- `+Ns.formatLints(n,{maxDiags:10})}catch{return e?Gp:""}}async function dI(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){b("apply_patch_rollback_failed",{path:ut(n.abs),error:s.message})}}}function as(t,e,n,s,r,o){let i=String(n??"");if(Wc>0||o){let l=ae.get(t);return l&&(l.baseline=i,l.hunks=[],Kc(t)),kn.delete(t)&&uv(t),0}let a=ae.get(t);return kn.delete(t),a||(a={abs:t,relPath:ut(t),baseline:s?"":String(e??""),isNew:!!s,hunks:[],stats:{add:0,del:0,hunks:0},sessionId:r||""},ae.set(t,a)),r&&(a.sessionId=r),a.hunks=wn.computeHunks(a.baseline,i),a.stats=wn.stats(a.hunks),a.hunks.length?(kr(),fv(t),a.hunks.length):(ae.delete(t),kr(),a.hunks.length)}function fI(t,e,n){for(kn.delete(t),kn.set(t,{before:String(e??""),title:n,at:Date.now()});kn.size>lI;){let s=kn.keys().next();if(!s||s.done)break;kn.delete(s.value)}}function cv(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 uv(t){for(let e of cv(t))try{await x.window.tabGroups.close(e,!0)}catch{}}function Kc(t,e){let n=ae.get(t),s=typeof e=="string"&&!!n,r=s?cv(t):[];s&&r.length?(fI(t,e,M("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del})),ae.delete(t),yI(t)):(ae.delete(t),n&&uv(t)),nn.delete(t),kr()}var Qx=Promise.resolve(),Rp=0,eS=!1,tS=!1,nn=new Map,pI=40;function mI(t){for(nn.delete(t),nn.set(t,Date.now());nn.size>pI;){let e=nn.keys().next();if(!e||e.done)break;nn.delete(e.value)}}function va(){let t=fe&&fe.webview?fe.webview:null;return t?ti.get(t)===!0:!1}function dv(){if(!nn.size||va())return;let t=Array.from(nn.keys()).pop();nn.clear(),!(!t||!ae.has(t)||!Qc())&&(b("review_auto_diff_deferred_open",{path:ut(t)}),fv(t))}function fv(t){if(!Qc()||!ae.has(t))return;let e=fe&&fe.webview?fe.webview:null;if(e&&ti.get(e)===!0){mI(t);return}Rp||(eS=e?La.get(e)===!0:!1,tS=e?ti.get(e)===!0:!1);let n=eS,s=tS;Rp++,Qx=Qx.then(async function(){try{await Om(t,{preview:!0,preserveFocus:!0})}catch(r){b("review_auto_diff_failed",{path:ut(t),error:r.message})}if(n&&!s){try{await x.commands.executeCommand("workbench.view.extension.luban")}catch(r){b("review_auto_diff_refocus_failed",{path:ut(t),error:r.message})}try{let r=fe&&fe.webview;r&&setTimeout(function(){try{r.postMessage({type:"refocus_input"})}catch{}},120)}catch{}}Rp--})}function Jp(){let t=[];for(let e of ae.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 Wa(){return{type:"review",files:Jp(),at:Date.now()}}async function hI(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 nS(t,e,n){if(e.isNew&&n==="")return await hI(t),ae.delete(t),kr(),{ok:!0,deleted:!0,hunks:0};await hr(t,n);let s=wn.computeHunks(e.baseline,n);return e.hunks=s,e.stats=wn.stats(s),s.length?kr():Kc(t),{ok:!0,hunks:s.length}}function gI(t){return{before:x.Uri.from({scheme:"luban-before",path:t}),after:P.existsSync(t)?x.Uri.file(t):x.Uri.from({scheme:"luban-after",path:t})}}async function pv(t,e,n){let s=n||{},r=gI(t);await x.commands.executeCommand("vscode.diff",r.before,r.after,e,{preview:s.preview===!0,preserveFocus:s.preserveFocus===!0})}async function Om(t,e){let n=ae.get(t);if(!n)throw new Error(M("ext.noPending",{path:ut(t)}));let s=e||{};Am.add(t);let r=M("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del});gr(),await pv(t,r,s),gr()}async function yI(t){let e=kn.get(t);if(e){Am.add(t);try{await pv(t,e.title,{preview:!1,preserveFocus:!0})}catch(n){b("review_freeze_diff_failed",{path:ut(t),error:n.message})}try{gr()}catch{}}}async function Ka(t,e,n,s){let r=L();if(t==="accept_all"||t==="reject_all"){let c=t==="accept_all"?"accept_file":"reject_file",u=ae.size;for(let d of Array.from(ae.keys())){let f=ae.get(d);s&&f&&f.sessionId&&f.sessionId!==s||await Ka(c,d,"")}return{ok:!0,files:u,hunks:0}}let o=tt(e,r,!0);if(t==="open_diff")return nn.delete(o),await Om(o),{ok:!0};let i=ae.get(o);if(!i)return{ok:!1,error:M("ext.noPending",{path:e})};let a=Qr(o);if(t==="accept_file"){let c=i.baseline;return i.baseline=a,i.hunks=[],Kc(o,c),{ok:!0,hunks:0,files:ae.size}}if(t==="reject_file")return await nS(o,i,i.baseline);i.hunks=wn.computeHunks(i.baseline,a);let l=i.hunks.find(function(c){return c.id===n});if(!l)return i.stats=wn.stats(i.hunks),kr(),{ok:!1,error:M("ext.hunkGone",{hunk:n})};if(t==="accept_hunk"){let c=i.baseline;return i.baseline=wn.applyHunkToBaseline(i.baseline,l),i.hunks=wn.computeHunks(i.baseline,a),i.stats=wn.stats(i.hunks),i.hunks.length?kr():Kc(o,c),{ok:!0,hunks:i.hunks.length}}return t==="reject_hunk"?await nS(o,i,wn.revertHunkText(a,l)):{ok:!1,error:M("ext.unknownAction",{action:t})}}function mv(){Ua||(Ua=x.window.createTextEditorDecorationType({isWholeLine:!0,backgroundColor:new x.ThemeColor("diffEditor.insertedLineBackground"),overviewRulerColor:new x.ThemeColor("editorOverviewRuler.addedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}),Uc=x.window.createTextEditorDecorationType({backgroundColor:new x.ThemeColor("diffEditor.removedLineBackground"),fontStyle:"italic",overviewRulerColor:new x.ThemeColor("editorOverviewRuler.deletedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}))}function hv(t,e){let n=[],s=[],r=[],o=Math.max(0,t.lineCount-1);for(let i of e.hunks){let a=wn.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:M("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 Em(){mv();for(let t of x.window.visibleTextEditors){let e=t.document,n=e.uri.scheme==="file"?ae.get(e.uri.fsPath):null;if(!n){t.setDecorations(Ua,[]),t.setDecorations(Uc,[]);continue}let s=hv(e,n);t.setDecorations(Ua,s.added),t.setDecorations(Uc,s.removed)}}function wI(t){if(!bn)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:M("ext.selLensChat"),command:"luban.addSelectionToChat"}),new x.CodeLens(r,{title:M("ext.selLensNewChat"),command:"luban.addSelectionToNewChat"})]}function bI(t){if(!bn)return[];let e=ae.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:M("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:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:o.id}]}))}if(za(Ha())===t.uri.fsPath)return s;let r=new x.Range(0,0,0,0);return s.push(new x.CodeLens(r,{title:M("ext.viewDiff"),command:"luban.openDiff",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:M("ext.keepFile",{add:e.stats.add,del:e.stats.del}),command:"luban.acceptFile",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:M("ext.revertFile"),command:"luban.rejectFile",arguments:[{path:e.abs}]})),s}function kI(t){if(!bn)return[];let e=ae.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:M("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:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:r.id}]}))}return s}function Ha(){try{return x.window.tabGroups.activeTabGroup.activeTab}catch{return null}}function za(t){let e=t&&t.input;if(!e)return"";let n=e.modified,s=e.original;if(n&&s){if(n.scheme==="file"&&ae.has(n.fsPath))return n.fsPath;if(s.scheme==="luban-before"&&ae.has(s.path))return s.path}return""}function xI(t){let e=za(t);if(e)return e;let n=t&&t.input;return n&&n.uri&&n.uri.scheme==="file"&&ae.has(n.uri.fsPath)?n.uri.fsPath:""}function gr(){let t=!1;try{t=!!za(Ha())}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 kr(){Yx++;try{if(Ko){let t=new Set(Array.from(ae.keys()).concat(Array.from(Am),Array.from(kn.keys())));for(let e of t)Ko.fire(x.Uri.from({scheme:"luban-before",path:e}))}}catch{}try{bn&&bn.fire()}catch{}try{Em()}catch{}try{gr()}catch{}try{typeof qe=="function"?qe(Wa()):kt&&kt.postMessage(Wa())}catch{}b("review_state",{files:ae.size,hunks:ls(),seq:Yx})}function SI(t){mv(),Ko=new x.EventEmitter,bn=new x.EventEmitter,t.subscriptions.push(Ua,Uc,Ko,bn),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-before",{onDidChange:Ko.event,provideTextDocumentContent:function(r){let o=ae.get(r.path);if(o)return o.baseline;let i=kn.get(r.path);return i?i.before:""}})),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-after",{onDidChange:Ko.event,provideTextDocumentContent:function(r){try{return P.existsSync(r.path)?Qr(r.path):""}catch{return""}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"file"},{onDidChangeCodeLenses:bn.event,provideCodeLenses:function(r){try{return bI(r).concat(wI(r))}catch{return[]}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"luban-before"},{onDidChangeCodeLenses:bn.event,provideCodeLenses:function(r){try{return kI(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&&ae.has(l))return{path:l,hunk:o||""}}else if(r&&r.path)return r;let i=xI(Ha());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:M("ext.noReviewFile")};let l;try{l=await Ka(r,a.path,o?a.hunk:"")}catch(c){l={ok:!1,error:c.message}}return b("review_action",{action:r,path:ut(s(a.path)),hunk:a.hunk||"",ok:!!l.ok,error:l.error}),l.ok||x.window.showWarningMessage(M("ext.reviewWarn",{msg:l.error||M("ext.actionFailed")})),l}}function s(r){try{return tt(r,L(),!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{Em()}catch{}}),x.window.tabGroups.onDidChangeTabs(function(){try{gr()}catch{}}),x.window.tabGroups.onDidChangeTabGroups(function(){try{gr()}catch{}}),x.window.onDidChangeActiveTextEditor(function(){try{gr()}catch{}}),x.window.onDidChangeTextEditorSelection(function(){try{bn&&bn.fire()}catch{}}),x.workspace.onDidChangeTextDocument(function(r){let o=r.document.uri.scheme==="file"?r.document.uri.fsPath:"",i=ae.get(o);if(!i)return;let a=wn.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=wn.stats(a),a.length||ae.delete(o),kr())})),gr()}function gv(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 yv={model:1,messages:1,stream:1,tools:1,tool_choice:1,max_tokens:1,stream_options:1},sS=2e3,rS=Object.create(null);function Mn(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function vI(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&&yv[a])continue;let l=o[a];Mn(l)&&Mn(r[a])?s(r[a],l,i+1):r[a]=l,i===0&&n.push(a)}};return s(t,e,0),n}function wv(t,e){let n=t&&t.thinking;if(!Mn(n))return null;let s=function(o){return Mn(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 _I(t){let e=t&&t.thinking;if(!Mn(e))return null;let n=["on","off"].filter(function(r){return Mn(e[r])});if(!n.length)return null;let s=wv(t,"");return{default:s?s.mode:n[0],tiers:n}}var bv=Up.DEFAULT_MAX_VERSION;function kv(){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 $p(t){let e=kv(),n=e==="1.2"?"TLSv1.2":bv,s=!1;try{s=Up.DEFAULT_MAX_VERSION!==n,Up.DEFAULT_MAX_VERSION=n}catch{}return s&&b("net_tls_max_version",{mode:e,maxVersion:n,reason:t||""}),e}function xv(t){let e=t;for(let n=0;n<4&&e;n++){if(e.code)return String(e.code);e=e.cause}return""}function TI(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 MI(t,e,n){let s=xv(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 Qo(t,e,n){let s=n||{},r=ft(e);if(!r)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let o=Zo(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)),!Wp[r.provider.id]&&r.provider.streamUsage!==!1&&(i.stream_options={include_usage:!0});let c=wv(r.model,s.thinking),u=r.provider.id+"::"+r.model.id+"::",d="",f=null;if(c&&!rS[u+c.mode]){let ne=vI(i,c.tier);d=c.mode,f=function(){for(let ce of ne)delete i[ce]}}let p=!!(r.model.thinking&&r.model.thinking.inline===!0&&d==="on"),m=t&&t[0]&&t[0].role==="system"?t[0].content:"",h=Es.hash(m,i.tools||[]);s.snapshot!==!1&&(Tt={at:new Date().toISOString(),model:r.model.id,prefixHash:h,thinking:d||"none",verbosity:s.verbosity||"none",roles:(t||[]).map(function(ne){return ne&&ne.role}),heads:(t||[]).map(function(ne){return gv(ne&&ne.content,120)})});let y=new AbortController,k=iu(s.signal);k.signal&&(k.isCancelled()?y.abort():k.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 w=NS(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,K=0,W=null,B=null,pe="",N=0,J=null,be="",se=new Map,Z=new Map,ge=null,H="",De="",_e=[],ht=0,xt=new TextDecoder,Ce=function(){return fetch(w,{method:"POST",headers:S,body:JSON.stringify(i),signal:y.signal})};try{for(;;){pe="",N=0,J=null,be="",se=new Map,Z=new Map,ht=0,ge=Jj.newParser({startInThink:p,onContent:function(ne){if(ne&&(ht+=ne.length),s.onToken)try{s.onToken(ne)}catch{}},onReasoning:function(ne){if(ne&&(ht+=ne.length),s.onReasoning)try{s.onReasoning(ne)}catch{}},onSplit:function(ne){if(ne&&(ht+=ne.length),s.onSplit)try{s.onSplit(ne)}catch{}}});try{for(W=await Ce();!W.ok&&W.status===400&&F<_.length;){let ne=_[F++],ce=await W.text();ne.field==="stream_options"?(Wp[r.provider.id]=!0,b("stream_usage_unsupported",{provider:r.provider.id,status:W.status,body:ce.slice(0,200)})):ne.field==="thinking"?(rS[u+d]=!0,b("thinking_unsupported",{provider:r.provider.id,model:r.model.id,mode:d,status:W.status,body:ce.slice(0,200)}),d=""):b("max_tokens_unsupported",{provider:r.provider.id,status:W.status,body:ce.slice(0,200)}),ne.undo(),W=await Ce()}if(!W.ok){let ne=await W.text();throw b("http_error",{provider:r.provider.id,model:r.model.id,status:W.status,body:ne.slice(0,300)}),new Error(r.provider.id+" HTTP "+W.status+": "+ne.slice(0,200))}for(B=W.body.getReader();;){let ne=await B.read();if(ne.done)break;pe+=xt.decode(ne.value,{stream:!0});let ce=pe.split(`
918
- `);pe=ce.pop()||"";for(let Fe of ce){let gt=Fe.trim();if(!gt.startsWith("data:"))continue;let ws=gt.slice(5).trim();if(!ws||ws==="[DONE]")continue;let an;try{an=JSON.parse(ws)}catch{continue}an&&an.usage&&(J=an.usage);let Ft=an.choices&&an.choices[0];Ft&&Ft.finish_reason&&(be=String(Ft.finish_reason));let Et=Ft&&Ft.delta;if(!Et)continue;Et.content&&(N++,ge.pushContent(Et.content));let ns=Et.reasoning_content!=null?Et.reasoning_content:Et.reasoning!=null?Et.reasoning:Et.thinking;if(typeof ns=="string"&&ns&&ge.pushReasoning(ns),Et.tool_calls)for(let Qe of Et.tool_calls){let En;typeof Qe.index=="number"?En=Qe.index:Qe.id?(Z.has(Qe.id)||Z.set(Qe.id,se.size),En=Z.get(Qe.id)):En=se.size?Math.max.apply(null,Array.from(se.keys())):0;let Kn=se.get(En);Kn||(Kn={id:"",type:"function",function:{name:"",arguments:""}},se.set(En,Kn)),Qe.id&&(Kn.id=Qe.id,Z.has(Qe.id)||Z.set(Qe.id,En)),Qe.function&&Qe.function.name&&(Kn.function.name=Qe.function.name),Qe.function&&Qe.function.arguments!=null&&(Kn.function.arguments+=typeof Qe.function.arguments=="string"?Qe.function.arguments:JSON.stringify(Qe.function.arguments))}}}break}catch(ne){if(v)throw b("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 ce=TI(ne);if(k.isCancelled()||ht>0||K>=C||!ce)throw ce?new Error(MI(ne,r.provider,K)):ne;K++;let Fe=A[K-1]||A[A.length-1];b("stream_net_retry",{provider:r.provider.id,model:r.model.id,attempt:K,message:String(ne&&ne.message||"").slice(0,120),code:xv(ne),delayMs:Fe}),await new Promise(function(gt){setTimeout(gt,Fe)})}}}finally{g&&(clearTimeout(g),g=null)}ge.end(),H=ge.content,De=ge.reasoning;let Dt=ge.rawContent;_e=Array.from(se.keys()).sort((ne,ce)=>ne-ce).map(ne=>se.get(ne));let Ot=r.provider.id+"::"+r.model.id,Ue=Dx.get(Ot)||{hash:"",tokens:0},Wn=Ue.hash,Ls=!!Wn&&Wn===h,ys=Ls?Ue.tokens:0,We=Es.stats(J,t,ys);Dx.set(Ot,{hash:h,tokens:We.promptTokens});let at={at:new Date().toISOString(),model:r.model.id,iter:Number(s.iter)||0,prefixHash:h,promptTokens:We.promptTokens,cachedTokens:We.cachedTokens,prefixTokens:We.prefixTokens,prefixSource:We.prefixSource,hit:We.hit,coverage:We.coverage};for(zo.push(at);zo.length>jS;)zo.shift();return s.snapshot!==!1&&Tt&&(Tt.prefixHash=at.prefixHash,Tt.promptTokens=at.promptTokens,Tt.cachedTokens=at.cachedTokens,Tt.prefixTokens=at.prefixTokens,Tt.hit=at.hit,Tt.coverage=at.coverage),b("stream_done",{provider:r.provider.id,model:r.model.id,chars:H.length,reasoningChars:De.length,chunks:N,toolCalls:_e.map(ne=>ne.function.name),thinking:d||"none",inline:p,verbosity:s.verbosity||"none",prefixHash:h,promptTokens:We.promptTokens,cachedTokens:We.cachedTokens,completionTokens:We.completionTokens,prefixTokens:We.prefixTokens,hit:We.hit,coverage:We.coverage,finishReason:be,usage:!!J}),J&&We.cachedTokens===0&&We.prefixTokens>0&&b("cache_miss_suspect",{prefixHash:h,prevHash:Wn,samePrefix:Ls,prefixTokens:We.prefixTokens,promptTokens:We.promptTokens}),{content:H,reasoning:De,rawContent:Dt,toolCalls:_e,target:r,usage:J,cache:We,prefixHash:h,finishReason:be,thinking:d}}function Xp(t){let e=t&&t.model?Number(t.model.maxInputTokens):0;return isFinite(e)&&e>0?e:65536}function Pm(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=Ee.estimateTokens(Ee.charsOf(e),n),u=!0),c<=0&&a.length&&(c=Ee.estimateTokens(a.length,n),u=!0),{promptTokens:l,completionTokens:c,cachedTokens:i,estimated:u,detailsStripped:!!s.detailsStripped}}function Ga(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 oS=new Set,CI=8,AI=8e3,OI=4;function EI(t,e){return!t||!e||e.estimated||Number(e.cachedTokens)>0||Number(e.requests)<CI||Number(e.contextTokens)<AI||oS.has(t)||zo.filter(function(s){return Number(s.cachedTokens)===0&&Number(s.prefixTokens)>0}).length<OI?null:(oS.add(t),e.detailsStripped?{text:M("ext.prefixHintStripped"),tip:M("ext.prefixHintStrippedTip",{n:Number(e.requests)||0})}:{text:M("ext.prefixHint"),tip:M("ext.prefixHintTip",{n:Number(e.requests)||0})})}var yr=D.join(it.homedir(),".luban","usage"),Un="7d";function jm(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("usage.record")}catch{}return t!==!1}function Vp(t,e){if(!e||!jm())return null;let n=t||{};try{let s=ft(n.modelKey),r=Xe.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=Xe.append(yr,r);return o.ok?(b("usage_log",{model:r.modelKey,mode:r.mode,source:r.source,total:r.totalTokens,estimated:r.estimated,partial:r.partial,file:o.month}),vD(),r):(b("usage_log_failed",{message:o.error,model:r.modelKey}),null)}catch(s){return b("usage_log_failed",{message:String(s&&s.message||s)}),null}}function _a(t){let e=Xe.rangeOf(t||Un),n=Xe.read(yr,e.from,e.to),s=Xe.aggregate(n.rows,e);return{type:"usage",range:{key:e.key,label:M("usage."+e.key),from:e.from,to:e.to,days:e.days},ranges:Xe.RANGES.map(function(r){return{key:r.key,label:M("usage."+r.key)}}),dir:yr,files:n.files,badLines:n.bad,record:jm(),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 Qa="\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",Sv=[Qa,"\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"],PI="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",vv=["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"],Tc=Sv.concat([PI],vv).join(`
916
+ \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 Lp(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 Zx(t,e){if(!iv())return"";try{let n=await av([t]),s=Is.summarize(n);return!s.total||!s.error&&!s.warning?e?Gp:"":lv+`
917
+ `+Is.formatLints(n,{maxDiags:10})}catch{return e?Gp:""}}async function dI(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 gr(n.abs,n.before||"")}catch(s){b("apply_patch_rollback_failed",{path:ut(n.abs),error:s.message})}}}function ls(t,e,n,s,r,o){let i=String(n??"");if(Wc>0||o){let l=ae.get(t);return l&&(l.baseline=i,l.hunks=[],Kc(t)),kn.delete(t)&&uv(t),0}let a=ae.get(t);return kn.delete(t),a||(a={abs:t,relPath:ut(t),baseline:s?"":String(e??""),isNew:!!s,hunks:[],stats:{add:0,del:0,hunks:0},sessionId:r||""},ae.set(t,a)),r&&(a.sessionId=r),a.hunks=wn.computeHunks(a.baseline,i),a.stats=wn.stats(a.hunks),a.hunks.length?(xr(),fv(t),a.hunks.length):(ae.delete(t),xr(),a.hunks.length)}function fI(t,e,n){for(kn.delete(t),kn.set(t,{before:String(e??""),title:n,at:Date.now()});kn.size>lI;){let s=kn.keys().next();if(!s||s.done)break;kn.delete(s.value)}}function cv(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 uv(t){for(let e of cv(t))try{await x.window.tabGroups.close(e,!0)}catch{}}function Kc(t,e){let n=ae.get(t),s=typeof e=="string"&&!!n,r=s?cv(t):[];s&&r.length?(fI(t,e,M("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del})),ae.delete(t),yI(t)):(ae.delete(t),n&&uv(t)),nn.delete(t),xr()}var Qx=Promise.resolve(),Rp=0,eS=!1,tS=!1,nn=new Map,pI=40;function mI(t){for(nn.delete(t),nn.set(t,Date.now());nn.size>pI;){let e=nn.keys().next();if(!e||e.done)break;nn.delete(e.value)}}function va(){let t=fe&&fe.webview?fe.webview:null;return t?ti.get(t)===!0:!1}function dv(){if(!nn.size||va())return;let t=Array.from(nn.keys()).pop();nn.clear(),!(!t||!ae.has(t)||!Qc())&&(b("review_auto_diff_deferred_open",{path:ut(t)}),fv(t))}function fv(t){if(!Qc()||!ae.has(t))return;let e=fe&&fe.webview?fe.webview:null;if(e&&ti.get(e)===!0){mI(t);return}Rp||(eS=e?La.get(e)===!0:!1,tS=e?ti.get(e)===!0:!1);let n=eS,s=tS;Rp++,Qx=Qx.then(async function(){try{await Om(t,{preview:!0,preserveFocus:!0})}catch(r){b("review_auto_diff_failed",{path:ut(t),error:r.message})}if(n&&!s){try{await x.commands.executeCommand("workbench.view.extension.luban")}catch(r){b("review_auto_diff_refocus_failed",{path:ut(t),error:r.message})}try{let r=fe&&fe.webview;r&&setTimeout(function(){try{r.postMessage({type:"refocus_input"})}catch{}},120)}catch{}}Rp--})}function Jp(){let t=[];for(let e of ae.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 Wa(){return{type:"review",files:Jp(),at:Date.now()}}async function hI(t){try{await gr(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 nS(t,e,n){if(e.isNew&&n==="")return await hI(t),ae.delete(t),xr(),{ok:!0,deleted:!0,hunks:0};await gr(t,n);let s=wn.computeHunks(e.baseline,n);return e.hunks=s,e.stats=wn.stats(s),s.length?xr():Kc(t),{ok:!0,hunks:s.length}}function gI(t){return{before:x.Uri.from({scheme:"luban-before",path:t}),after:P.existsSync(t)?x.Uri.file(t):x.Uri.from({scheme:"luban-after",path:t})}}async function pv(t,e,n){let s=n||{},r=gI(t);await x.commands.executeCommand("vscode.diff",r.before,r.after,e,{preview:s.preview===!0,preserveFocus:s.preserveFocus===!0})}async function Om(t,e){let n=ae.get(t);if(!n)throw new Error(M("ext.noPending",{path:ut(t)}));let s=e||{};Am.add(t);let r=M("ext.diffTitle",{file:D.basename(t),add:n.stats.add,del:n.stats.del});yr(),await pv(t,r,s),yr()}async function yI(t){let e=kn.get(t);if(e){Am.add(t);try{await pv(t,e.title,{preview:!1,preserveFocus:!0})}catch(n){b("review_freeze_diff_failed",{path:ut(t),error:n.message})}try{yr()}catch{}}}async function Ka(t,e,n,s){let r=L();if(t==="accept_all"||t==="reject_all"){let c=t==="accept_all"?"accept_file":"reject_file",u=ae.size;for(let d of Array.from(ae.keys())){let f=ae.get(d);s&&f&&f.sessionId&&f.sessionId!==s||await Ka(c,d,"")}return{ok:!0,files:u,hunks:0}}let o=tt(e,r,!0);if(t==="open_diff")return nn.delete(o),await Om(o),{ok:!0};let i=ae.get(o);if(!i)return{ok:!1,error:M("ext.noPending",{path:e})};let a=Qr(o);if(t==="accept_file"){let c=i.baseline;return i.baseline=a,i.hunks=[],Kc(o,c),{ok:!0,hunks:0,files:ae.size}}if(t==="reject_file")return await nS(o,i,i.baseline);i.hunks=wn.computeHunks(i.baseline,a);let l=i.hunks.find(function(c){return c.id===n});if(!l)return i.stats=wn.stats(i.hunks),xr(),{ok:!1,error:M("ext.hunkGone",{hunk:n})};if(t==="accept_hunk"){let c=i.baseline;return i.baseline=wn.applyHunkToBaseline(i.baseline,l),i.hunks=wn.computeHunks(i.baseline,a),i.stats=wn.stats(i.hunks),i.hunks.length?xr():Kc(o,c),{ok:!0,hunks:i.hunks.length}}return t==="reject_hunk"?await nS(o,i,wn.revertHunkText(a,l)):{ok:!1,error:M("ext.unknownAction",{action:t})}}function mv(){Ua||(Ua=x.window.createTextEditorDecorationType({isWholeLine:!0,backgroundColor:new x.ThemeColor("diffEditor.insertedLineBackground"),overviewRulerColor:new x.ThemeColor("editorOverviewRuler.addedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}),Uc=x.window.createTextEditorDecorationType({backgroundColor:new x.ThemeColor("diffEditor.removedLineBackground"),fontStyle:"italic",overviewRulerColor:new x.ThemeColor("editorOverviewRuler.deletedForeground"),overviewRulerLane:x.OverviewRulerLane.Left}))}function hv(t,e){let n=[],s=[],r=[],o=Math.max(0,t.lineCount-1);for(let i of e.hunks){let a=wn.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:M("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 Em(){mv();for(let t of x.window.visibleTextEditors){let e=t.document,n=e.uri.scheme==="file"?ae.get(e.uri.fsPath):null;if(!n){t.setDecorations(Ua,[]),t.setDecorations(Uc,[]);continue}let s=hv(e,n);t.setDecorations(Ua,s.added),t.setDecorations(Uc,s.removed)}}function wI(t){if(!bn)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:M("ext.selLensChat"),command:"luban.addSelectionToChat"}),new x.CodeLens(r,{title:M("ext.selLensNewChat"),command:"luban.addSelectionToNewChat"})]}function bI(t){if(!bn)return[];let e=ae.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:M("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:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:o.id}]}))}if(za(Ha())===t.uri.fsPath)return s;let r=new x.Range(0,0,0,0);return s.push(new x.CodeLens(r,{title:M("ext.viewDiff"),command:"luban.openDiff",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:M("ext.keepFile",{add:e.stats.add,del:e.stats.del}),command:"luban.acceptFile",arguments:[{path:e.abs}]})),s.push(new x.CodeLens(r,{title:M("ext.revertFile"),command:"luban.rejectFile",arguments:[{path:e.abs}]})),s}function kI(t){if(!bn)return[];let e=ae.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:M("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:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:r.id}]}))}return s}function Ha(){try{return x.window.tabGroups.activeTabGroup.activeTab}catch{return null}}function za(t){let e=t&&t.input;if(!e)return"";let n=e.modified,s=e.original;if(n&&s){if(n.scheme==="file"&&ae.has(n.fsPath))return n.fsPath;if(s.scheme==="luban-before"&&ae.has(s.path))return s.path}return""}function xI(t){let e=za(t);if(e)return e;let n=t&&t.input;return n&&n.uri&&n.uri.scheme==="file"&&ae.has(n.uri.fsPath)?n.uri.fsPath:""}function yr(){let t=!1;try{t=!!za(Ha())}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 xr(){Yx++;try{if(Ko){let t=new Set(Array.from(ae.keys()).concat(Array.from(Am),Array.from(kn.keys())));for(let e of t)Ko.fire(x.Uri.from({scheme:"luban-before",path:e}))}}catch{}try{bn&&bn.fire()}catch{}try{Em()}catch{}try{yr()}catch{}try{typeof qe=="function"?qe(Wa()):kt&&kt.postMessage(Wa())}catch{}b("review_state",{files:ae.size,hunks:cs(),seq:Yx})}function SI(t){mv(),Ko=new x.EventEmitter,bn=new x.EventEmitter,t.subscriptions.push(Ua,Uc,Ko,bn),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-before",{onDidChange:Ko.event,provideTextDocumentContent:function(r){let o=ae.get(r.path);if(o)return o.baseline;let i=kn.get(r.path);return i?i.before:""}})),t.subscriptions.push(x.workspace.registerTextDocumentContentProvider("luban-after",{onDidChange:Ko.event,provideTextDocumentContent:function(r){try{return P.existsSync(r.path)?Qr(r.path):""}catch{return""}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"file"},{onDidChangeCodeLenses:bn.event,provideCodeLenses:function(r){try{return bI(r).concat(wI(r))}catch{return[]}}})),t.subscriptions.push(x.languages.registerCodeLensProvider({scheme:"luban-before"},{onDidChangeCodeLenses:bn.event,provideCodeLenses:function(r){try{return kI(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&&ae.has(l))return{path:l,hunk:o||""}}else if(r&&r.path)return r;let i=xI(Ha());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:M("ext.noReviewFile")};let l;try{l=await Ka(r,a.path,o?a.hunk:"")}catch(c){l={ok:!1,error:c.message}}return b("review_action",{action:r,path:ut(s(a.path)),hunk:a.hunk||"",ok:!!l.ok,error:l.error}),l.ok||x.window.showWarningMessage(M("ext.reviewWarn",{msg:l.error||M("ext.actionFailed")})),l}}function s(r){try{return tt(r,L(),!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{Em()}catch{}}),x.window.tabGroups.onDidChangeTabs(function(){try{yr()}catch{}}),x.window.tabGroups.onDidChangeTabGroups(function(){try{yr()}catch{}}),x.window.onDidChangeActiveTextEditor(function(){try{yr()}catch{}}),x.window.onDidChangeTextEditorSelection(function(){try{bn&&bn.fire()}catch{}}),x.workspace.onDidChangeTextDocument(function(r){let o=r.document.uri.scheme==="file"?r.document.uri.fsPath:"",i=ae.get(o);if(!i)return;let a=wn.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=wn.stats(a),a.length||ae.delete(o),xr())})),yr()}function gv(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 yv={model:1,messages:1,stream:1,tools:1,tool_choice:1,max_tokens:1,stream_options:1},sS=2e3,rS=Object.create(null);function Mn(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function vI(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&&yv[a])continue;let l=o[a];Mn(l)&&Mn(r[a])?s(r[a],l,i+1):r[a]=l,i===0&&n.push(a)}};return s(t,e,0),n}function wv(t,e){let n=t&&t.thinking;if(!Mn(n))return null;let s=function(o){return Mn(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 _I(t){let e=t&&t.thinking;if(!Mn(e))return null;let n=["on","off"].filter(function(r){return Mn(e[r])});if(!n.length)return null;let s=wv(t,"");return{default:s?s.mode:n[0],tiers:n}}var bv=Up.DEFAULT_MAX_VERSION;function kv(){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 $p(t){let e=kv(),n=e==="1.2"?"TLSv1.2":bv,s=!1;try{s=Up.DEFAULT_MAX_VERSION!==n,Up.DEFAULT_MAX_VERSION=n}catch{}return s&&b("net_tls_max_version",{mode:e,maxVersion:n,reason:t||""}),e}function xv(t){let e=t;for(let n=0;n<4&&e;n++){if(e.code)return String(e.code);e=e.cause}return""}function TI(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 MI(t,e,n){let s=xv(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 Qo(t,e,n){let s=n||{},r=ft(e);if(!r)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let o=Zo(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)),!Wp[r.provider.id]&&r.provider.streamUsage!==!1&&(i.stream_options={include_usage:!0});let c=wv(r.model,s.thinking),u=r.provider.id+"::"+r.model.id+"::",d="",f=null;if(c&&!rS[u+c.mode]){let ne=vI(i,c.tier);d=c.mode,f=function(){for(let ce of ne)delete i[ce]}}let p=!!(r.model.thinking&&r.model.thinking.inline===!0&&d==="on"),m=t&&t[0]&&t[0].role==="system"?t[0].content:"",h=Ps.hash(m,i.tools||[]);s.snapshot!==!1&&(Tt={at:new Date().toISOString(),model:r.model.id,prefixHash:h,thinking:d||"none",verbosity:s.verbosity||"none",roles:(t||[]).map(function(ne){return ne&&ne.role}),heads:(t||[]).map(function(ne){return gv(ne&&ne.content,120)})});let y=new AbortController,k=iu(s.signal);k.signal&&(k.isCancelled()?y.abort():k.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 w=NS(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,K=0,W=null,B=null,pe="",N=0,J=null,be="",se=new Map,Z=new Map,ge=null,H="",De="",_e=[],ht=0,xt=new TextDecoder,Ce=function(){return fetch(w,{method:"POST",headers:S,body:JSON.stringify(i),signal:y.signal})};try{for(;;){pe="",N=0,J=null,be="",se=new Map,Z=new Map,ht=0,ge=Jj.newParser({startInThink:p,onContent:function(ne){if(ne&&(ht+=ne.length),s.onToken)try{s.onToken(ne)}catch{}},onReasoning:function(ne){if(ne&&(ht+=ne.length),s.onReasoning)try{s.onReasoning(ne)}catch{}},onSplit:function(ne){if(ne&&(ht+=ne.length),s.onSplit)try{s.onSplit(ne)}catch{}}});try{for(W=await Ce();!W.ok&&W.status===400&&F<_.length;){let ne=_[F++],ce=await W.text();ne.field==="stream_options"?(Wp[r.provider.id]=!0,b("stream_usage_unsupported",{provider:r.provider.id,status:W.status,body:ce.slice(0,200)})):ne.field==="thinking"?(rS[u+d]=!0,b("thinking_unsupported",{provider:r.provider.id,model:r.model.id,mode:d,status:W.status,body:ce.slice(0,200)}),d=""):b("max_tokens_unsupported",{provider:r.provider.id,status:W.status,body:ce.slice(0,200)}),ne.undo(),W=await Ce()}if(!W.ok){let ne=await W.text();throw b("http_error",{provider:r.provider.id,model:r.model.id,status:W.status,body:ne.slice(0,300)}),new Error(r.provider.id+" HTTP "+W.status+": "+ne.slice(0,200))}for(B=W.body.getReader();;){let ne=await B.read();if(ne.done)break;pe+=xt.decode(ne.value,{stream:!0});let ce=pe.split(`
918
+ `);pe=ce.pop()||"";for(let Fe of ce){let gt=Fe.trim();if(!gt.startsWith("data:"))continue;let bs=gt.slice(5).trim();if(!bs||bs==="[DONE]")continue;let an;try{an=JSON.parse(bs)}catch{continue}an&&an.usage&&(J=an.usage);let Lt=an.choices&&an.choices[0];Lt&&Lt.finish_reason&&(be=String(Lt.finish_reason));let Et=Lt&&Lt.delta;if(!Et)continue;Et.content&&(N++,ge.pushContent(Et.content));let ns=Et.reasoning_content!=null?Et.reasoning_content:Et.reasoning!=null?Et.reasoning:Et.thinking;if(typeof ns=="string"&&ns&&ge.pushReasoning(ns),Et.tool_calls)for(let Qe of Et.tool_calls){let En;typeof Qe.index=="number"?En=Qe.index:Qe.id?(Z.has(Qe.id)||Z.set(Qe.id,se.size),En=Z.get(Qe.id)):En=se.size?Math.max.apply(null,Array.from(se.keys())):0;let Kn=se.get(En);Kn||(Kn={id:"",type:"function",function:{name:"",arguments:""}},se.set(En,Kn)),Qe.id&&(Kn.id=Qe.id,Z.has(Qe.id)||Z.set(Qe.id,En)),Qe.function&&Qe.function.name&&(Kn.function.name=Qe.function.name),Qe.function&&Qe.function.arguments!=null&&(Kn.function.arguments+=typeof Qe.function.arguments=="string"?Qe.function.arguments:JSON.stringify(Qe.function.arguments))}}}break}catch(ne){if(v)throw b("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 ce=TI(ne);if(k.isCancelled()||ht>0||K>=C||!ce)throw ce?new Error(MI(ne,r.provider,K)):ne;K++;let Fe=A[K-1]||A[A.length-1];b("stream_net_retry",{provider:r.provider.id,model:r.model.id,attempt:K,message:String(ne&&ne.message||"").slice(0,120),code:xv(ne),delayMs:Fe}),await new Promise(function(gt){setTimeout(gt,Fe)})}}}finally{g&&(clearTimeout(g),g=null)}ge.end(),H=ge.content,De=ge.reasoning;let Ft=ge.rawContent;_e=Array.from(se.keys()).sort((ne,ce)=>ne-ce).map(ne=>se.get(ne));let Ot=r.provider.id+"::"+r.model.id,Ue=Dx.get(Ot)||{hash:"",tokens:0},Wn=Ue.hash,Rs=!!Wn&&Wn===h,ws=Rs?Ue.tokens:0,We=Ps.stats(J,t,ws);Dx.set(Ot,{hash:h,tokens:We.promptTokens});let at={at:new Date().toISOString(),model:r.model.id,iter:Number(s.iter)||0,prefixHash:h,promptTokens:We.promptTokens,cachedTokens:We.cachedTokens,prefixTokens:We.prefixTokens,prefixSource:We.prefixSource,hit:We.hit,coverage:We.coverage};for(zo.push(at);zo.length>jS;)zo.shift();return s.snapshot!==!1&&Tt&&(Tt.prefixHash=at.prefixHash,Tt.promptTokens=at.promptTokens,Tt.cachedTokens=at.cachedTokens,Tt.prefixTokens=at.prefixTokens,Tt.hit=at.hit,Tt.coverage=at.coverage),b("stream_done",{provider:r.provider.id,model:r.model.id,chars:H.length,reasoningChars:De.length,chunks:N,toolCalls:_e.map(ne=>ne.function.name),thinking:d||"none",inline:p,verbosity:s.verbosity||"none",prefixHash:h,promptTokens:We.promptTokens,cachedTokens:We.cachedTokens,completionTokens:We.completionTokens,prefixTokens:We.prefixTokens,hit:We.hit,coverage:We.coverage,finishReason:be,usage:!!J}),J&&We.cachedTokens===0&&We.prefixTokens>0&&b("cache_miss_suspect",{prefixHash:h,prevHash:Wn,samePrefix:Rs,prefixTokens:We.prefixTokens,promptTokens:We.promptTokens}),{content:H,reasoning:De,rawContent:Ft,toolCalls:_e,target:r,usage:J,cache:We,prefixHash:h,finishReason:be,thinking:d}}function Xp(t){let e=t&&t.model?Number(t.model.maxInputTokens):0;return isFinite(e)&&e>0?e:65536}function Pm(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=Ee.estimateTokens(Ee.charsOf(e),n),u=!0),c<=0&&a.length&&(c=Ee.estimateTokens(a.length,n),u=!0),{promptTokens:l,completionTokens:c,cachedTokens:i,estimated:u,detailsStripped:!!s.detailsStripped}}function Ga(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 oS=new Set,CI=8,AI=8e3,OI=4;function EI(t,e){return!t||!e||e.estimated||Number(e.cachedTokens)>0||Number(e.requests)<CI||Number(e.contextTokens)<AI||oS.has(t)||zo.filter(function(s){return Number(s.cachedTokens)===0&&Number(s.prefixTokens)>0}).length<OI?null:(oS.add(t),e.detailsStripped?{text:M("ext.prefixHintStripped"),tip:M("ext.prefixHintStrippedTip",{n:Number(e.requests)||0})}:{text:M("ext.prefixHint"),tip:M("ext.prefixHintTip",{n:Number(e.requests)||0})})}var wr=D.join(it.homedir(),".luban","usage"),Un="7d";function jm(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("usage.record")}catch{}return t!==!1}function Vp(t,e){if(!e||!jm())return null;let n=t||{};try{let s=ft(n.modelKey),r=Xe.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=Xe.append(wr,r);return o.ok?(b("usage_log",{model:r.modelKey,mode:r.mode,source:r.source,total:r.totalTokens,estimated:r.estimated,partial:r.partial,file:o.month}),vD(),r):(b("usage_log_failed",{message:o.error,model:r.modelKey}),null)}catch(s){return b("usage_log_failed",{message:String(s&&s.message||s)}),null}}function _a(t){let e=Xe.rangeOf(t||Un),n=Xe.read(wr,e.from,e.to),s=Xe.aggregate(n.rows,e);return{type:"usage",range:{key:e.key,label:M("usage."+e.key),from:e.from,to:e.to,days:e.days},ranges:Xe.RANGES.map(function(r){return{key:r.key,label:M("usage."+r.key)}}),dir:wr,files:n.files,badLines:n.bad,record:jm(),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 Qa="\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",Sv=[Qa,"\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"],PI="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",vv=["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"],Tc=Sv.concat([PI],vv).join(`
919
919
  `),jI=Sv.concat(vv).join(`
920
920
  `),_v=[Qa,"\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"],NI="9. \u9700\u8981\u6700\u65B0\u5916\u90E8\u4FE1\u606F\u65F6\u53EF\u7528 web_search / web_fetch\uFF0C\u5F15\u7528\u6807 [n]\u3002",Mc=_v.concat([NI]).join(`
921
921
  `),II=_v.join(`
922
- `),Tv=dr.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}),Nm=dr.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}),eo={rounds:24,minutes:8,perTurn:4,minuteRatio:.5,minMinutes:3,maxMinutes:12},Ia=[Qa,"\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(`
922
+ `),Tv=fr.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}),Nm=fr.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}),eo={rounds:24,minutes:8,perTurn:4,minuteRatio:.5,minMinutes:3,maxMinutes:12},Ia=[Qa,"\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(`
923
923
  `);function Hc(t){let e=t===!1,n=Nm.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 Mv=[Qa,"\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"],DI="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",Cv=["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"],FI=Mv.concat([DI],Cv).join(`
924
924
  `),LI=Mv.concat(Cv).join(`
925
- `);function ur(t,e,n,s,r){let o=t==="plan",i=t==="explore",a=!!(s&&s.compact)&&!o&&!i,c=[i?Ia:a?n===!1?II:Mc:o?n===!1?LI:FI:n===!1?jI:Tc],u=String(e??"")||L();u&&c.push("\u5DE5\u4F5C\u76EE\u5F55\uFF1A"+u);try{Ta(u,{refresh:!1});let f=en.block();f&&c.push(f)}catch(f){b("system_prompt_extra_failed",{message:f.message})}try{let f=Ht.block();f&&c.push(f)}catch(f){b("system_prompt_extra_failed",{message:f.message})}!i&&Sm()&&c.push(RI),!i&&!o&&Cm()&&ie.available().ok&&c.push(qI),i&&c.push(Hc(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(`
925
+ `);function dr(t,e,n,s,r){let o=t==="plan",i=t==="explore",a=!!(s&&s.compact)&&!o&&!i,c=[i?Ia:a?n===!1?II:Mc:o?n===!1?LI:FI:n===!1?jI:Tc],u=String(e??"")||L();u&&c.push("\u5DE5\u4F5C\u76EE\u5F55\uFF1A"+u);try{Ta(u,{refresh:!1});let f=en.block();f&&c.push(f)}catch(f){b("system_prompt_extra_failed",{message:f.message})}try{let f=Ht.block();f&&c.push(f)}catch(f){b("system_prompt_extra_failed",{message:f.message})}!i&&Sm()&&c.push(RI),!i&&!o&&Cm()&&ie.available().ok&&c.push(qI),i&&c.push(Hc(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(`
926
926
 
927
927
  `)}var RI=["\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(`
928
- `),qI=["\u684C\u9762\u64CD\u4F5C\uFF08"+MS+"\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 "+(us?"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"+(us?"\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"+(us?"\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",us?"\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",Vj,us?"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(`
928
+ `),qI=["\u684C\u9762\u64CD\u4F5C\uFF08"+MS+"\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",Vj,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(`
929
929
  `),BI=[Qa,"\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(`
930
930
  `),UI=["\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(`
931
931
  `),$o={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},WI={concise:512,normal:2048,detailed:4096},iS=4e3,aS="start",lS="end",Da=6e3,KI="\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",HI="\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<=Da?e:e.slice(0,Da)+`
@@ -943,34 +943,34 @@ Plugins run on this machine with your permissions. After installing, you still h
943
943
  - `+m.join(`
944
944
  - `)),Gc(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(`
945
945
 
946
- `),usage:null}}var YI=/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 ZI(t){let e=String(t&&t.message||t||"");return YI.test(e)}async function Is(t,e){let n=e||{},s=n.root||L(),r=Im(),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 Y=Date.now();try{return await n.askWait(z)}finally{u+=Date.now()-Y}}:n.askWait,p=typeof n.confirmWrite=="function"?async function(z){let Y=Date.now();try{return await n.confirmWrite(z)}finally{u+=Date.now()-Y}}:n.confirmWrite,m=n.mode==="plan"?"plan":n.mode==="explore"?"explore":"agent",h=m==="plan",y=m==="explore",k=h||y,T=y?null:{max:eo.perTurn,left:eo.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=US(t),w=!!(n.webSearch||v.web),S=ft(n.modelKey),_=Xp(S),C=yn.profile(_,{mode:Dm()}),A=m!=="agent"?"normal":n.verbosity==="concise"||n.verbosity==="detailed"?n.verbosity:n.verbosity==="normal"?"normal":JI(),F={perFile:C.refPerFile,total:C.refTotal,readMax:C.readMax},K=Zr(v.prompt,s,{budgets:F});if(n.onRefs&&K.refs.length)try{n.onRefs(K.refs)}catch{}let W=y?"":bm(K.refs,s,C,{sessionId:n.sessionId}),B=[],pe=function(){if(n.onUsage)try{n.onUsage(Ga(B,_,S&&S.model&&S.model.id))}catch{}},N=[],J=[],be=new AbortController;n.token&&n.token.onCancellationRequested&&n.token.onCancellationRequested(()=>be.abort());let se="";if(w){if(n.onProgress)try{n.onProgress("web_search "+(v.prompt||t).slice(0,40))}catch{}if(n.onTool)try{n.onTool({phase:aS,id:"web:0",name:"web_search",path:String(v.prompt||t).slice(0,60)})}catch{}let z=await WS(v.prompt||t,S,{signal:be.signal,onSearch:n.onSearch});se=z.block;let Y={phase:lS,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(N.push(Y),b("agent_tool",Y),n.onTool)try{n.onTool(Y)}catch{}}try{await Se.ready()}catch(z){b("mcp_ready_failed",{message:z.message})}let Z="";if(!y)try{Z=Se.promptBlock()}catch(z){b("mcp_prompt_failed",{message:z.message})}let ge=(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)}}),H=[{role:"system",content:ur(m,s,Jn(S&&S.provider)!=="none",C,A)}].concat(ge),De=[],_e=String(n.spillDigest||"").trim(),ht=y?"":XS(n.sessionId),xt="";if(!y)try{let z=[];for(let O of K.refs||[])O&&O.path&&z.push(String(O.path));let Y=$S(n.sessionId);if(Y)for(let O of Y)z.push(String(O));for(let O of ae.values())(!n.sessionId||!O.sessionId||O.sessionId===n.sessionId)&&z.push(O.abs);xt=en.matched(z),xt&&b("agent_rules_matched",{files:z.length,chars:xt.length})}catch(z){b("agent_rules_failed",{message:z.message})}let Ce=Es.buildUserTurn({envBlock:Z,spillBlock:_e,rule:xt,autoBlock:W,webBlock:se,worksetBlock:ht,refText:K.text});if(Yr.pushUser(H,Ce),Array.isArray(n.images)&&n.images.length){let z=H[H.length-1];z&&z.role==="user"&&typeof z.content=="string"&&(z.content=Te.toContent(z.content,n.images))}if(n.onUserTurn)try{n.onUserTurn(Ce)}catch{}ge.length&&b("agent_memory",{messages:ge.length,chars:ge.reduce(function(z,Y){return z+Ee.contentChars(Y.content)},0),plan:h});let Dt=cr(m,S,C),Ot=Ee.charsOfTools(Dt),Ue=_,Wn=Math.floor(Ue*r.windowRatio),Ls=Math.floor(Ue*r.lowRatio),ys=function(){return Ee.charsOf(H)+Ot},We=Ee.DEFAULTS.ratio,at=function(z){return Ee.estimateTokens(z,We)},ne=function(z){return Math.floor(z/Ee.ratioOf(We))-Ot},ce=0,Fe=null,gt="",ws=[],an=!1,Ft=0,Et=0,ns=!1,Qe=0,En="",Kn="",Rs=0,bs=0,co=new Map,pi=0,ml=n.spillStore&&typeof n.spillStore.put=="function"?n.spillStore:Sn.createStore(),Tu=tu(ml),uo=0;function fo(z){let Y=z>0?z:Wn;if(at(ys())<=Y)return!0;for(let V of C.keepTailSteps){let X=Ee.compact(H,{keepTail:V,spill:Tu});if(X.beforeChars===X.afterChars)break;H.length=0;for(let Ve of X.messages)H.push(Ve);if(b("agent_compact",{iters:ce,keepTail:V,beforeChars:X.beforeChars,afterChars:X.afterChars,omittedTools:X.omittedTools,omittedArgs:X.omittedArgs,spilled:X.spilled||0,tokensBefore:at(X.beforeChars+Ot),tokensAfter:at(X.afterChars+Ot),highTokens:Y,tier:C.tier}),at(X.afterChars+Ot)<=Ls)break}if(at(ys())<=Y)return!0;let O=z>0?z:Ls,I=yn.squeeze(H,ne(O),{summaryReserve:yn.DEFAULTS.summaryReserve});if(I.ok||(uo=Math.max(uo,I.minChars)),I.ok&&I.dropped>0){H.length=0;for(let V of I.messages)H.push(V);b("agent_squeeze",{iters:ce,dropped:I.dropped,beforeChars:I.beforeChars,afterChars:I.chars,tokensAfter:at(I.chars+Ot),highTokens:Y,tier:C.tier})}return at(ys())<=Y}function hl(){let z=String(H[0]&&H[0].content||"").length,Y=at(z+Ot),O=uo>0?at(uo+Ot):at(ys()),I=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 "+Y+" token\uFF0C\u538B\u7F29\u5230\u6700\u5C0F\u4ECD\u9700 "+O+" token"+I}for(;;){if(i>0&&ce>=i){Fe={reason:"maxRounds",detail:"\u8FBE\u5230\u6A21\u578B\u8BF7\u6C42\u8F6E\u6570\u4E0A\u9650 "+i};break}let z=u-Date.now();if(z<=0){Fe={reason:"timeout",detail:"\u8D85\u8FC7\u5899\u949F\u4E0A\u9650 "+l+" \u5206\u949F"};break}if(d>0&&z<=d){Fe={reason:"timeout",detail:"\u5899\u949F\u5269\u4F59 "+Math.ceil(z/1e3)+" \u79D2\uFF0C\u9884\u7559\u6536\u5C3E\u603B\u7ED3\u65F6\u95F4"};break}if(!fo()){Fe={reason:"context",detail:hl()};break}let Y;if(typeof n.onRound=="function")try{n.onRound(ce+1)}catch{}try{Y=await Qo(H,n.modelKey,{tools:Dt,onToken:n.onToken,onReasoning:n.onReasoning,onSplit:n.onSplit,signal:be.signal,thinking:n.thinking,verbosity:A,snapshot:ce===0,iter:ce,timeoutMs:Math.max(1e3,Math.min(r.requestTimeoutMs,z))})}catch(R){if(String(R&&R.message).indexOf("\u8BF7\u6C42\u8D85\u65F6")===0){Fe={reason:"timeout",detail:R.message};break}if(ZI(R)&&Qe<2){Qe++,Ue=Math.max(2048,Math.floor(Ue*.8)),Wn=Math.floor(Ue*r.windowRatio),Ls=Math.floor(Ue*r.lowRatio);let te=fo(Math.floor(Wn*.75));if(b("agent_window_guess",{iters:ce,window:Ue,highTokens:Wn,squeezed:te,message:String(R&&R.message||"").slice(0,160)}),n.onProgress)try{n.onProgress(M("ext.ctxOverflowShrink",{window:Ue}))}catch{}if(te)continue}throw R}if(ce++,Y.reasoning&&J.push(Y.reasoning),ws.push({text:Y.content||"",reasoning:Y.reasoning||"",cont:an}),typeof n.onRoundEnd=="function")try{n.onRoundEnd({iter:ce,text:Y.content||"",reasoning:Y.reasoning||"",cont:an})}catch{}an=!1;let O=Number(Y.cache&&Y.cache.promptTokens)||0;if(O>0){let R=Ee.charsOf(H)+Ot;R>0&&(We=Ee.ratioOf(O/R))}if(B.push(Pm(Y,H,We)),pe(),!Y.toolCalls.length){if(gt=Y.content||"",(Y.finishReason==="length"||Y.finishReason==="max_tokens")&&Ft<r.lengthRetry){Ft++,an=!0;let R=gt||String(Y.rawContent||"");b("agent_length_retry",{iters:ce,chars:gt.length,resumeChars:R.length,retry:Ft}),H.push({role:"assistant",content:R}),H.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(!k&&N.length>0&&!Pv(N)&&!Cc(N)&&r.noWriteNudges>0){let R=u-Date.now();if(Et<r.noWriteNudges&&R>Math.max(5e3,d)){Et++,b("agent_no_write_nudge",{iters:ce,toolCalls:N.length,chars:gt.length,nudge:Et,max:r.noWriteNudges}),H.push({role:"assistant",content:gt}),H.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}gt=XI(gt,N),Fe={reason:"final",detail:"noWrites"};break}Fe={reason:"final",detail:""};break}H.push({role:"assistant",content:Y.content||"",tool_calls:Y.toolCalls});let I=Y.finishReason==="length"||Y.finishReason==="max_tokens",V=function(R,te){let ue=te.path||te.dir||(te.command?String(te.command).slice(0,60):"")||(te.job_id?String(te.job_id).slice(0,60):"")||(te.query?String(te.query).slice(0,60):"")||(te.url?String(te.url).slice(0,60):"")||(te.name?String(te.name).slice(0,60):"")||(te.pattern?String(te.pattern).slice(0,60):"")||(Array.isArray(te.patterns)?te.patterns.join(" ").slice(0,60):"")||(te.from?String(te.from).slice(0,60):"");if(!ue&&R==="todo_write"){let re=sn.normalize(te.todos),mi=re.filter(function(Xt){return Xt.status==="completed"||Xt.status==="cancelled"}).length;ue=re.length?mi+"/"+re.length:"\u66F4\u65B0\u6E05\u5355"}if(!ue&&R==="apply_patch"){let re=String(te.patch||"").match(/\*\*\*\s*(Add|Update|Delete) File:/g);ue=re&&re.length?re.length+" \u4E2A\u6587\u4EF6":"patch"}if(!ue&&R==="ask_question"){let re=Array.isArray(te.questions)&&te.questions[0];ue=String(te.title||re&&(re.prompt||re.question)||"\u63D0\u95EE").slice(0,60)}let Ke=String(R);if(!ue&&(Ke.indexOf("mcp__")===0||Ke.indexOf("pl__")===0)){for(let re of Object.keys(te))if(typeof te[re]=="string"&&te[re].trim()){ue=te[re].trim().slice(0,60);break}}return ue},X=Y.toolCalls.map(function(R,te){let ue=R.function.name,Ke=sI(R.function.arguments),re=Ke.args;Ke.repaired&&b("tool_args_repaired",{tool:ue,how:Ke.repaired});let mi=re.path||re.file_path||re.from||re.dir||re.command||re.name||re.description||re.pattern||(Array.isArray(re.patterns)?re.patterns.join(" "):"")||re.url||re.action||"",Xt=ue+" "+mi;if(n.onProgress)try{n.onProgress(Xt.trim())}catch{}let Lt={tc:R,toolName:ue,args:re,label:Xt.trim().slice(0,80),id:"r"+ce+":"+te,brief:V(ue,re),run:!1,ok:!0,rejected:!1,result:""};return I?(Lt.ok=!1,Lt.result="ERROR: "+ue+" \u672A\u6267\u884C\uFF1A\u4E0A\u4E00\u6761\u56DE\u7B54\u89E6\u5230\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\uFF08finish_reason="+Y.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",b("tool_skipped_truncated",{tool:ue,rawLen:String(R.function.arguments||"").length})):Ke.error?(Lt.ok=!1,Lt.result="ERROR: "+ue+" \u672A\u6267\u884C\uFF1A"+Ke.error+`
947
- \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`,b("tool_args_invalid",{tool:ue,rawLen:String(R.function.arguments||"").length,hint:String(Ke.error).slice(0,_c)})):rI(Ke.args)?(Lt.ok=!1,Lt.result="ERROR: "+ue+' \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 '+ue+"\uFF0C\u5E76\u7ED9\u51FA\u5B8C\u6574\u53C2\u6570\uFF08read_file / write_file / replace_in_file \u81F3\u5C11\u8981\u7ED9 path\uFF09\u3002",b("tool_args_omitted",{tool:ue,rawLen:String(R.function.arguments||"").length})):Lt.run=!0,Lt}),Ve=async function(R){try{R.result=await $n(R.toolName,R.args,s,Y.target,{mode:m,modelKey:Y.target&&Y.target.key,readMax:F.readMax,caps:C,todosState:n.todosState,onTodos:n.onTodos,askWait:f,confirmWrite:p,spillStore:ml,sessionId:n.sessionId||"",autoKeep:n.autoKeep===!0,inSubagent:y,subBudget:T,onSubProgress:g,onSubUsage:function(te){let ue=Array.isArray(te)?te:[];for(let Ke of ue)Ke&&(Ke.subagent=!0,B.push(Ke));if(ue.length&&pe(),typeof n.onSubUsage=="function")try{n.onSubUsage(ue)}catch{}}}),(R.toolName==="run_command"||R.toolName==="run_command_start")&&js(m,Zc())&&!mr.check(String(R.args.command||"")).ok&&(R.rejected=!0)}catch(te){R.ok=!1,R.result="ERROR: "+te.message}};if(n.onTool){for(let R of X)if(R.run)try{n.onTool({phase:aS,id:R.id,name:R.toolName,path:R.brief})}catch{}}for(let R=0;R<X.length;R++){let te=X[R];if(!te.run)continue;if(!cS[te.toolName]){await Ve(te);continue}let ue=[te],Ke=R+1;for(;Ke<X.length;){let re=X[Ke];if(re.run&&!cS[re.toolName])break;re.run&&ue.push(re),Ke++}for(let re=0;re<ue.length;re+=r.parallelMax)await Promise.all(ue.slice(re,re+r.parallelMax).map(Ve));R=Ke-1}let st=null,et="";for(let R of X){let te=R.tc,ue=R.toolName,Ke=R.args,re=R.ok,mi=R.brief,Xt=String(R.result);re&&R.result&&Array.isArray(R.result.images)&&R.result.images.length&&(st=R.result.images,et=ue);let Lt={phase:lS,id:R.id,name:ue,path:mi,ok:re,result:Xt.length>iS?Xt.slice(0,iS)+"\u2026":Xt};if(N.push(Lt),b("agent_tool",{name:Lt.name,path:Lt.path,ok:Lt.ok,result:Lt.result.slice(0,GI)}),n.onTool)try{n.onTool(Lt)}catch{}let Mu=ue==="run_command_poll"&&re&&/^status=running\b/m.test(Xt),hi=Ee.fingerprint(ue,Ke),Mr=co.get(hi)||{total:0,fails:0,label:R.label};Mu||(hi===En&&Xt===Kn?Rs++:(En=hi,Kn=Xt,Rs=1),Mr=co.get(hi)||{total:0,fails:0,label:R.label},zI[ue]||Mr.total++,(!re||R.rejected)&&Mr.fails++,co.set(hi,Mr)),re&&!R.rejected?bs=0:bs++,R.rejected&&pi++;let Mh=Xt;!I&&!Mu&&Mr.fails>=2&&(Mh="\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u6B64\u5DE5\u5177\u8C03\u7528\uFF08"+R.label+"\uFF09\u6B64\u524D\u5DF2\u5931\u8D25 "+Mr.fails+` \u6B21\uFF0C\u8BF7\u52FF\u91CD\u8BD5\uFF0C\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\u3002
948
- `+Xt,b("tool_repeat_warn",{tool:ue,fails:Mr.fails})),H.push({role:"tool",tool_call_id:te.id||"call_"+(ce-1),content:Mh})}if(st&&st.length){if(De.length){let ue=new Set(De);for(let Ke=H.length-1;Ke>=0;Ke--)ue.has(H[Ke])&&H.splice(Ke,1);De.length=0}let te={role:"user",content:[{type:"text",text:et==="computer"?HI:KI}]};for(let ue of st)te.content.push({type:"image_url",image_url:{url:ue.dataUrl}});H.push(te),De.push(te),b("shot_injected",{iters:ce,images:st.length,from:et||"browser"})}if(I){if(Ft<r.lengthRetry){Ft++,b("agent_length_retry",{iters:ce,toolCalls:Y.toolCalls.length,retry:Ft,kind:"tool_args"}),H.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}Fe={reason:"length",detail:"\u8F93\u51FA\u8FDE\u7EED "+(Ft+1)+" \u6B21\u89E6\u5230\u957F\u5EA6\u4E0A\u9650\uFF0C\u5DE5\u5177\u53C2\u6570\u65E0\u6CD5\u751F\u6210\u5B8C\u6574",maxOutTokens:_t(Y.target&&Y.target.model&&Y.target.model.maxOutputTokens)};break}if(Rs>=r.repeatLimit){if(!ns&&u-Date.now()>d){ns=!0;let R=String(En).split("|")[0];b("agent_loop_nudge",{iters:ce,kind:"repeat",count:Rs,tool:R}),H.push({role:"user",content:"\u3010\u7CFB\u7EDF\u3011\u68C0\u6D4B\u5230\u91CD\u590D\u8C03\u7528\uFF1A"+(R||"\u540C\u4E00\u5DE5\u5177")+" \u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+Rs+" \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}Fe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+Rs+" \u6B21\u8FD4\u56DE\u76F8\u540C\u7ED3\u679C"};break}if(bs>=r.errorLimit){Fe={reason:"errors",detail:"\u8FDE\u7EED "+bs+" \u6B21\u5DE5\u5177\u62A5\u9519"+(pi?"\uFF08\u672C\u8F6E\u7D2F\u8BA1 "+pi+" \u6761\u88AB\u62D2\u7EDD\u6216\u7A7A\u547D\u4EE4\uFF09":"")};break}let Ye=null;for(let R of co.values())if(R.total>=r.fpTotalLimit){Ye=R;break}if(Ye){if(!ns&&u-Date.now()>d){ns=!0,b("agent_loop_nudge",{iters:ce,kind:"fpTotal",count:Ye.total,tool:Ye.label}),H.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 "+Ye.total+" \u6B21\uFF08"+Ye.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}Fe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u672C\u8F6E\u5DF2\u6267\u884C "+Ye.total+" \u6B21\uFF08"+Ye.label+"\uFF09"};break}if(!fo()){Fe={reason:"context",detail:hl()};break}}let Tr=gt;if(Fe.reason!=="final"){fo();let z=Math.max(0,u-Date.now()),Y=await VI(H,{modelKey:n.modelKey,stop:Fe,signal:be.signal,iter:ce,remainingMs:z,totalMs:c,lastText:gt,toolCalls:N.length,ratio:We,log:N,verbosity:A});Tr=Y.text,Y.usage&&(B.push(Y.usage),pe()),Tr||(Tr=M("ext.summary.fallbackShort",{reason:cu(Fe),n:N.length}))}if(Fe&&Fe.reason==="timeout"&&n.sessionId)try{let z=xe.stopAll(n.sessionId);z&&z.stopped&&b("async_cmd_stop_all",{sessionId:n.sessionId,stopped:z.stopped,reason:"agent_timeout"})}catch{}let po=Ga(B,_,S&&S.model&&S.model.id),gl=EI(S&&S.provider&&S.provider.id,po);return gl&&(po.prefixHint=gl),b("agent_done",{iters:ce,toolCalls:N.length,chars:Tr.length,model:n.modelKey,mode:m,stop:Fe.reason,detail:Fe.detail,truncated:Fe.reason!=="final",tokensRatio:Number(We.toFixed(3)),usage:po}),um(),{text:Tr,reasoning:J.join(`
946
+ `),usage:null}}var YI=/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 ZI(t){let e=String(t&&t.message||t||"");return YI.test(e)}async function Ds(t,e){let n=e||{},s=n.root||L(),r=Im(),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 Y=Date.now();try{return await n.askWait(z)}finally{u+=Date.now()-Y}}:n.askWait,p=typeof n.confirmWrite=="function"?async function(z){let Y=Date.now();try{return await n.confirmWrite(z)}finally{u+=Date.now()-Y}}:n.confirmWrite,m=n.mode==="plan"?"plan":n.mode==="explore"?"explore":"agent",h=m==="plan",y=m==="explore",k=h||y,T=y?null:{max:eo.perTurn,left:eo.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=US(t),w=!!(n.webSearch||v.web),S=ft(n.modelKey),_=Xp(S),C=yn.profile(_,{mode:Dm()}),A=m!=="agent"?"normal":n.verbosity==="concise"||n.verbosity==="detailed"?n.verbosity:n.verbosity==="normal"?"normal":JI(),F={perFile:C.refPerFile,total:C.refTotal,readMax:C.readMax},K=Zr(v.prompt,s,{budgets:F});if(n.onRefs&&K.refs.length)try{n.onRefs(K.refs)}catch{}let W=y?"":bm(K.refs,s,C,{sessionId:n.sessionId}),B=[],pe=function(){if(n.onUsage)try{n.onUsage(Ga(B,_,S&&S.model&&S.model.id))}catch{}},N=[],J=[],be=new AbortController;n.token&&n.token.onCancellationRequested&&n.token.onCancellationRequested(()=>be.abort());let se="";if(w){if(n.onProgress)try{n.onProgress("web_search "+(v.prompt||t).slice(0,40))}catch{}if(n.onTool)try{n.onTool({phase:aS,id:"web:0",name:"web_search",path:String(v.prompt||t).slice(0,60)})}catch{}let z=await WS(v.prompt||t,S,{signal:be.signal,onSearch:n.onSearch});se=z.block;let Y={phase:lS,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(N.push(Y),b("agent_tool",Y),n.onTool)try{n.onTool(Y)}catch{}}try{await Se.ready()}catch(z){b("mcp_ready_failed",{message:z.message})}let Z="";if(!y)try{Z=Se.promptBlock()}catch(z){b("mcp_prompt_failed",{message:z.message})}let ge=(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)}}),H=[{role:"system",content:dr(m,s,Jn(S&&S.provider)!=="none",C,A)}].concat(ge),De=[],_e=String(n.spillDigest||"").trim(),ht=y?"":XS(n.sessionId),xt="";if(!y)try{let z=[];for(let O of K.refs||[])O&&O.path&&z.push(String(O.path));let Y=$S(n.sessionId);if(Y)for(let O of Y)z.push(String(O));for(let O of ae.values())(!n.sessionId||!O.sessionId||O.sessionId===n.sessionId)&&z.push(O.abs);xt=en.matched(z),xt&&b("agent_rules_matched",{files:z.length,chars:xt.length})}catch(z){b("agent_rules_failed",{message:z.message})}let Ce=Ps.buildUserTurn({envBlock:Z,spillBlock:_e,rule:xt,autoBlock:W,webBlock:se,worksetBlock:ht,refText:K.text});if(Yr.pushUser(H,Ce),Array.isArray(n.images)&&n.images.length){let z=H[H.length-1];z&&z.role==="user"&&typeof z.content=="string"&&(z.content=Te.toContent(z.content,n.images))}if(n.onUserTurn)try{n.onUserTurn(Ce)}catch{}ge.length&&b("agent_memory",{messages:ge.length,chars:ge.reduce(function(z,Y){return z+Ee.contentChars(Y.content)},0),plan:h});let Ft=ur(m,S,C),Ot=Ee.charsOfTools(Ft),Ue=_,Wn=Math.floor(Ue*r.windowRatio),Rs=Math.floor(Ue*r.lowRatio),ws=function(){return Ee.charsOf(H)+Ot},We=Ee.DEFAULTS.ratio,at=function(z){return Ee.estimateTokens(z,We)},ne=function(z){return Math.floor(z/Ee.ratioOf(We))-Ot},ce=0,Fe=null,gt="",bs=[],an=!1,Lt=0,Et=0,ns=!1,Qe=0,En="",Kn="",qs=0,ks=0,co=new Map,pi=0,ml=n.spillStore&&typeof n.spillStore.put=="function"?n.spillStore:Sn.createStore(),Tu=tu(ml),uo=0;function fo(z){let Y=z>0?z:Wn;if(at(ws())<=Y)return!0;for(let V of C.keepTailSteps){let X=Ee.compact(H,{keepTail:V,spill:Tu});if(X.beforeChars===X.afterChars)break;H.length=0;for(let Ve of X.messages)H.push(Ve);if(b("agent_compact",{iters:ce,keepTail:V,beforeChars:X.beforeChars,afterChars:X.afterChars,omittedTools:X.omittedTools,omittedArgs:X.omittedArgs,spilled:X.spilled||0,tokensBefore:at(X.beforeChars+Ot),tokensAfter:at(X.afterChars+Ot),highTokens:Y,tier:C.tier}),at(X.afterChars+Ot)<=Rs)break}if(at(ws())<=Y)return!0;let O=z>0?z:Rs,I=yn.squeeze(H,ne(O),{summaryReserve:yn.DEFAULTS.summaryReserve});if(I.ok||(uo=Math.max(uo,I.minChars)),I.ok&&I.dropped>0){H.length=0;for(let V of I.messages)H.push(V);b("agent_squeeze",{iters:ce,dropped:I.dropped,beforeChars:I.beforeChars,afterChars:I.chars,tokensAfter:at(I.chars+Ot),highTokens:Y,tier:C.tier})}return at(ws())<=Y}function hl(){let z=String(H[0]&&H[0].content||"").length,Y=at(z+Ot),O=uo>0?at(uo+Ot):at(ws()),I=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 "+Y+" token\uFF0C\u538B\u7F29\u5230\u6700\u5C0F\u4ECD\u9700 "+O+" token"+I}for(;;){if(i>0&&ce>=i){Fe={reason:"maxRounds",detail:"\u8FBE\u5230\u6A21\u578B\u8BF7\u6C42\u8F6E\u6570\u4E0A\u9650 "+i};break}let z=u-Date.now();if(z<=0){Fe={reason:"timeout",detail:"\u8D85\u8FC7\u5899\u949F\u4E0A\u9650 "+l+" \u5206\u949F"};break}if(d>0&&z<=d){Fe={reason:"timeout",detail:"\u5899\u949F\u5269\u4F59 "+Math.ceil(z/1e3)+" \u79D2\uFF0C\u9884\u7559\u6536\u5C3E\u603B\u7ED3\u65F6\u95F4"};break}if(!fo()){Fe={reason:"context",detail:hl()};break}let Y;if(typeof n.onRound=="function")try{n.onRound(ce+1)}catch{}try{Y=await Qo(H,n.modelKey,{tools:Ft,onToken:n.onToken,onReasoning:n.onReasoning,onSplit:n.onSplit,signal:be.signal,thinking:n.thinking,verbosity:A,snapshot:ce===0,iter:ce,timeoutMs:Math.max(1e3,Math.min(r.requestTimeoutMs,z))})}catch(R){if(String(R&&R.message).indexOf("\u8BF7\u6C42\u8D85\u65F6")===0){Fe={reason:"timeout",detail:R.message};break}if(ZI(R)&&Qe<2){Qe++,Ue=Math.max(2048,Math.floor(Ue*.8)),Wn=Math.floor(Ue*r.windowRatio),Rs=Math.floor(Ue*r.lowRatio);let te=fo(Math.floor(Wn*.75));if(b("agent_window_guess",{iters:ce,window:Ue,highTokens:Wn,squeezed:te,message:String(R&&R.message||"").slice(0,160)}),n.onProgress)try{n.onProgress(M("ext.ctxOverflowShrink",{window:Ue}))}catch{}if(te)continue}throw R}if(ce++,Y.reasoning&&J.push(Y.reasoning),bs.push({text:Y.content||"",reasoning:Y.reasoning||"",cont:an}),typeof n.onRoundEnd=="function")try{n.onRoundEnd({iter:ce,text:Y.content||"",reasoning:Y.reasoning||"",cont:an})}catch{}an=!1;let O=Number(Y.cache&&Y.cache.promptTokens)||0;if(O>0){let R=Ee.charsOf(H)+Ot;R>0&&(We=Ee.ratioOf(O/R))}if(B.push(Pm(Y,H,We)),pe(),!Y.toolCalls.length){if(gt=Y.content||"",(Y.finishReason==="length"||Y.finishReason==="max_tokens")&&Lt<r.lengthRetry){Lt++,an=!0;let R=gt||String(Y.rawContent||"");b("agent_length_retry",{iters:ce,chars:gt.length,resumeChars:R.length,retry:Lt}),H.push({role:"assistant",content:R}),H.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(!k&&N.length>0&&!Pv(N)&&!Cc(N)&&r.noWriteNudges>0){let R=u-Date.now();if(Et<r.noWriteNudges&&R>Math.max(5e3,d)){Et++,b("agent_no_write_nudge",{iters:ce,toolCalls:N.length,chars:gt.length,nudge:Et,max:r.noWriteNudges}),H.push({role:"assistant",content:gt}),H.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}gt=XI(gt,N),Fe={reason:"final",detail:"noWrites"};break}Fe={reason:"final",detail:""};break}H.push({role:"assistant",content:Y.content||"",tool_calls:Y.toolCalls});let I=Y.finishReason==="length"||Y.finishReason==="max_tokens",V=function(R,te){let ue=te.path||te.dir||(te.command?String(te.command).slice(0,60):"")||(te.job_id?String(te.job_id).slice(0,60):"")||(te.query?String(te.query).slice(0,60):"")||(te.url?String(te.url).slice(0,60):"")||(te.name?String(te.name).slice(0,60):"")||(te.pattern?String(te.pattern).slice(0,60):"")||(Array.isArray(te.patterns)?te.patterns.join(" ").slice(0,60):"")||(te.from?String(te.from).slice(0,60):"");if(!ue&&R==="todo_write"){let re=sn.normalize(te.todos),mi=re.filter(function(Xt){return Xt.status==="completed"||Xt.status==="cancelled"}).length;ue=re.length?mi+"/"+re.length:"\u66F4\u65B0\u6E05\u5355"}if(!ue&&R==="apply_patch"){let re=String(te.patch||"").match(/\*\*\*\s*(Add|Update|Delete) File:/g);ue=re&&re.length?re.length+" \u4E2A\u6587\u4EF6":"patch"}if(!ue&&R==="ask_question"){let re=Array.isArray(te.questions)&&te.questions[0];ue=String(te.title||re&&(re.prompt||re.question)||"\u63D0\u95EE").slice(0,60)}let Ke=String(R);if(!ue&&(Ke.indexOf("mcp__")===0||Ke.indexOf("pl__")===0)){for(let re of Object.keys(te))if(typeof te[re]=="string"&&te[re].trim()){ue=te[re].trim().slice(0,60);break}}return ue},X=Y.toolCalls.map(function(R,te){let ue=R.function.name,Ke=sI(R.function.arguments),re=Ke.args;Ke.repaired&&b("tool_args_repaired",{tool:ue,how:Ke.repaired});let mi=re.path||re.file_path||re.from||re.dir||re.command||re.name||re.description||re.pattern||(Array.isArray(re.patterns)?re.patterns.join(" "):"")||re.url||re.action||"",Xt=ue+" "+mi;if(n.onProgress)try{n.onProgress(Xt.trim())}catch{}let Rt={tc:R,toolName:ue,args:re,label:Xt.trim().slice(0,80),id:"r"+ce+":"+te,brief:V(ue,re),run:!1,ok:!0,rejected:!1,result:""};return I?(Rt.ok=!1,Rt.result="ERROR: "+ue+" \u672A\u6267\u884C\uFF1A\u4E0A\u4E00\u6761\u56DE\u7B54\u89E6\u5230\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\uFF08finish_reason="+Y.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",b("tool_skipped_truncated",{tool:ue,rawLen:String(R.function.arguments||"").length})):Ke.error?(Rt.ok=!1,Rt.result="ERROR: "+ue+" \u672A\u6267\u884C\uFF1A"+Ke.error+`
947
+ \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`,b("tool_args_invalid",{tool:ue,rawLen:String(R.function.arguments||"").length,hint:String(Ke.error).slice(0,_c)})):rI(Ke.args)?(Rt.ok=!1,Rt.result="ERROR: "+ue+' \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 '+ue+"\uFF0C\u5E76\u7ED9\u51FA\u5B8C\u6574\u53C2\u6570\uFF08read_file / write_file / replace_in_file \u81F3\u5C11\u8981\u7ED9 path\uFF09\u3002",b("tool_args_omitted",{tool:ue,rawLen:String(R.function.arguments||"").length})):Rt.run=!0,Rt}),Ve=async function(R){try{R.result=await $n(R.toolName,R.args,s,Y.target,{mode:m,modelKey:Y.target&&Y.target.key,readMax:F.readMax,caps:C,todosState:n.todosState,onTodos:n.onTodos,askWait:f,confirmWrite:p,spillStore:ml,sessionId:n.sessionId||"",autoKeep:n.autoKeep===!0,inSubagent:y,subBudget:T,onSubProgress:g,onSubUsage:function(te){let ue=Array.isArray(te)?te:[];for(let Ke of ue)Ke&&(Ke.subagent=!0,B.push(Ke));if(ue.length&&pe(),typeof n.onSubUsage=="function")try{n.onSubUsage(ue)}catch{}}}),(R.toolName==="run_command"||R.toolName==="run_command_start")&&Ns(m,Zc())&&!hr.check(String(R.args.command||"")).ok&&(R.rejected=!0)}catch(te){R.ok=!1,R.result="ERROR: "+te.message}};if(n.onTool){for(let R of X)if(R.run)try{n.onTool({phase:aS,id:R.id,name:R.toolName,path:R.brief})}catch{}}for(let R=0;R<X.length;R++){let te=X[R];if(!te.run)continue;if(!cS[te.toolName]){await Ve(te);continue}let ue=[te],Ke=R+1;for(;Ke<X.length;){let re=X[Ke];if(re.run&&!cS[re.toolName])break;re.run&&ue.push(re),Ke++}for(let re=0;re<ue.length;re+=r.parallelMax)await Promise.all(ue.slice(re,re+r.parallelMax).map(Ve));R=Ke-1}let st=null,et="";for(let R of X){let te=R.tc,ue=R.toolName,Ke=R.args,re=R.ok,mi=R.brief,Xt=String(R.result);re&&R.result&&Array.isArray(R.result.images)&&R.result.images.length&&(st=R.result.images,et=ue);let Rt={phase:lS,id:R.id,name:ue,path:mi,ok:re,result:Xt.length>iS?Xt.slice(0,iS)+"\u2026":Xt};if(N.push(Rt),b("agent_tool",{name:Rt.name,path:Rt.path,ok:Rt.ok,result:Rt.result.slice(0,GI)}),n.onTool)try{n.onTool(Rt)}catch{}let Mu=ue==="run_command_poll"&&re&&/^status=running\b/m.test(Xt),hi=Ee.fingerprint(ue,Ke),Cr=co.get(hi)||{total:0,fails:0,label:R.label};Mu||(hi===En&&Xt===Kn?qs++:(En=hi,Kn=Xt,qs=1),Cr=co.get(hi)||{total:0,fails:0,label:R.label},zI[ue]||Cr.total++,(!re||R.rejected)&&Cr.fails++,co.set(hi,Cr)),re&&!R.rejected?ks=0:ks++,R.rejected&&pi++;let Mh=Xt;!I&&!Mu&&Cr.fails>=2&&(Mh="\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u6B64\u5DE5\u5177\u8C03\u7528\uFF08"+R.label+"\uFF09\u6B64\u524D\u5DF2\u5931\u8D25 "+Cr.fails+` \u6B21\uFF0C\u8BF7\u52FF\u91CD\u8BD5\uFF0C\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\u3002
948
+ `+Xt,b("tool_repeat_warn",{tool:ue,fails:Cr.fails})),H.push({role:"tool",tool_call_id:te.id||"call_"+(ce-1),content:Mh})}if(st&&st.length){if(De.length){let ue=new Set(De);for(let Ke=H.length-1;Ke>=0;Ke--)ue.has(H[Ke])&&H.splice(Ke,1);De.length=0}let te={role:"user",content:[{type:"text",text:et==="computer"?HI:KI}]};for(let ue of st)te.content.push({type:"image_url",image_url:{url:ue.dataUrl}});H.push(te),De.push(te),b("shot_injected",{iters:ce,images:st.length,from:et||"browser"})}if(I){if(Lt<r.lengthRetry){Lt++,b("agent_length_retry",{iters:ce,toolCalls:Y.toolCalls.length,retry:Lt,kind:"tool_args"}),H.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}Fe={reason:"length",detail:"\u8F93\u51FA\u8FDE\u7EED "+(Lt+1)+" \u6B21\u89E6\u5230\u957F\u5EA6\u4E0A\u9650\uFF0C\u5DE5\u5177\u53C2\u6570\u65E0\u6CD5\u751F\u6210\u5B8C\u6574",maxOutTokens:_t(Y.target&&Y.target.model&&Y.target.model.maxOutputTokens)};break}if(qs>=r.repeatLimit){if(!ns&&u-Date.now()>d){ns=!0;let R=String(En).split("|")[0];b("agent_loop_nudge",{iters:ce,kind:"repeat",count:qs,tool:R}),H.push({role:"user",content:"\u3010\u7CFB\u7EDF\u3011\u68C0\u6D4B\u5230\u91CD\u590D\u8C03\u7528\uFF1A"+(R||"\u540C\u4E00\u5DE5\u5177")+" \u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+qs+" \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}Fe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+qs+" \u6B21\u8FD4\u56DE\u76F8\u540C\u7ED3\u679C"};break}if(ks>=r.errorLimit){Fe={reason:"errors",detail:"\u8FDE\u7EED "+ks+" \u6B21\u5DE5\u5177\u62A5\u9519"+(pi?"\uFF08\u672C\u8F6E\u7D2F\u8BA1 "+pi+" \u6761\u88AB\u62D2\u7EDD\u6216\u7A7A\u547D\u4EE4\uFF09":"")};break}let Ye=null;for(let R of co.values())if(R.total>=r.fpTotalLimit){Ye=R;break}if(Ye){if(!ns&&u-Date.now()>d){ns=!0,b("agent_loop_nudge",{iters:ce,kind:"fpTotal",count:Ye.total,tool:Ye.label}),H.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 "+Ye.total+" \u6B21\uFF08"+Ye.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}Fe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u672C\u8F6E\u5DF2\u6267\u884C "+Ye.total+" \u6B21\uFF08"+Ye.label+"\uFF09"};break}if(!fo()){Fe={reason:"context",detail:hl()};break}}let Mr=gt;if(Fe.reason!=="final"){fo();let z=Math.max(0,u-Date.now()),Y=await VI(H,{modelKey:n.modelKey,stop:Fe,signal:be.signal,iter:ce,remainingMs:z,totalMs:c,lastText:gt,toolCalls:N.length,ratio:We,log:N,verbosity:A});Mr=Y.text,Y.usage&&(B.push(Y.usage),pe()),Mr||(Mr=M("ext.summary.fallbackShort",{reason:cu(Fe),n:N.length}))}if(Fe&&Fe.reason==="timeout"&&n.sessionId)try{let z=xe.stopAll(n.sessionId);z&&z.stopped&&b("async_cmd_stop_all",{sessionId:n.sessionId,stopped:z.stopped,reason:"agent_timeout"})}catch{}let po=Ga(B,_,S&&S.model&&S.model.id),gl=EI(S&&S.provider&&S.provider.id,po);return gl&&(po.prefixHint=gl),b("agent_done",{iters:ce,toolCalls:N.length,chars:Mr.length,model:n.modelKey,mode:m,stop:Fe.reason,detail:Fe.detail,truncated:Fe.reason!=="final",tokensRatio:Number(We.toFixed(3)),usage:po}),um(),{text:Mr,reasoning:J.join(`
949
949
 
950
- `),log:N,iters:ce,roundTexts:ws,modelKey:S&&S.key,stop:Fe,usage:po,window:_,usageRows:B.slice()}}function jv(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+`
950
+ `),log:N,iters:ce,roundTexts:bs,modelKey:S&&S.key,stop:Fe,usage:po,window:_,usageRows:B.slice()}}function jv(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+`
951
951
 
952
- `:"")+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 Ma="luban.providerKey.",Mt=null,Zp="settings",Qn=null,Ca=["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"],QI={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},eD={"browser.chromePath":!0},tD={"agent.smallWindow":["auto","on","off"],"agent.verbosity":["concise","normal","detailed"],"net.tlsMaxVersion":["auto","1.2"]},nD={"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},sD={"browser.viewportWidth":4096,"browser.viewportHeight":4096,"computer.screenshotWidth":4096,"plugins.maxTools":200};function Lm(t){return t==="usage"||t==="general"||t==="backup"||t==="plugins"||t==="market"||t==="mcp"?t:"settings"}function Rm(){let t=x.workspace.getConfiguration("luban"),e=Object.create(null);Ca.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 Qp(){return{type:"general",values:Rm()}}function rD(){if(Mt)try{Mt.webview.postMessage(Qp())}catch(t){b("general_push_failed",{message:t.message})}}async function Nv(t){let e=t&&typeof t=="object"?t:{},n=[],s=Object.create(null);if(Ca.forEach(function(o){if(!Object.prototype.hasOwnProperty.call(e,o)){n.push(M("ext.generalMissing",{key:o}));return}let i=e[o];if(QI[o]){if(typeof i!="boolean"){n.push(M("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(M("ext.generalBadLanguage"));return}s[o]=d;return}let a=tD[o];if(a){let d=String(i??"");if(a.indexOf(d)<0){n.push(M("ext.generalBadEnum",{key:o,values:a.join(" / ")}));return}s[o]=d;return}if(eD[o]){s[o]=String(i??"").trim();return}let l=Number(i);if(!isFinite(l)||!Number.isInteger(l)){n.push(M("ext.generalBadNumber",{key:o}));return}let c=nD[o];if(typeof c=="number"&&l<c){n.push(M("ext.generalBadMin",{key:o,min:c}));return}let u=sD[o];if(typeof u=="number"&&l>u){n.push(M("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<Ca.length;o++){let i=Ca[o];await r.update(i,s[i],x.ConfigurationTarget.Global)}}catch(o){return{ok:!1,errors:[M("ext.generalSaveFailed",{msg:String(o&&o.message||o)})]}}return b("general_saved",{keys:Ca.length}),{ok:!0,values:Rm()}}async function qm(t){let e=Object.create(null),n=0;for(let s of Gt.providers||[])if(!(!s||!s.id))try{let r=await t.secrets.get(Ma+s.id);r&&(e[s.id]=String(r),n++)}catch(r){b("secret_read_failed",{id:s.id,message:r.message})}return ps=e,b("secrets_synced",{providers:(Gt.providers||[]).length,keys:n}),n}function oD(){return{defaultModel:Gt.defaultModel||"",providers:(Gt.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:!!Ya(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:Mn(e.thinking)?e.thinking:null}})}})}}function Jc(){return{type:"settings",path:dt,source:Vo,config:oD()}}function Bm(){if(Mt)try{Mt.webview.postMessage(Jc())}catch(t){b("settings_push_failed",{message:t.message})}}async function Um(t){ou(),await qm(t),qe(ru()),Bm();let e=(Gt.providers||[]).length,n=Zn().length;return b("providers_reloaded",{providers:e,models:n}),{providers:e,models:n}}function uS(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 iD(t,e,n){if(t==null)return{ok:!0,value:null};if(!Mn(t))return{ok:!1,error:M("validate.thinkShape",{pos:e,id:n})};let s={};for(let i of["on","off"]){let a=t[i];if(a==null)continue;if(!Mn(a))return{ok:!1,error:M("validate.thinkTier",{pos:e,id:n,tier:i})};let l=Object.keys(a).filter(function(c){return yv[c]});if(l.length)return{ok:!1,error:M("validate.thinkReserved",{pos:e,id:n,tier:i,keys:l.join(", ")})};if(JSON.stringify(a).length>sS)return{ok:!1,error:M("validate.thinkTooLong",{pos:e,id:n,tier:i,n:sS})};s[i]=a}if(!s.on&&!s.off)return{ok:!1,error:M("validate.thinkEmpty",{pos:e,id:n})};if(t.inline!==void 0&&t.inline!==null&&typeof t.inline!="boolean")return{ok:!1,error:M("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 Iv(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=M("validate.pos",{id:u||M("validate.untitled")});if(!u){n.push(M("validate.providerEmpty"));continue}if(!/^[A-Za-z0-9_-]+$/.test(u)){n.push(M("validate.idChars",{pos:d}));continue}if(r[u]){n.push(M("validate.idDup",{pos:d}));continue}r[u]=!0;let f=String(c.baseUrl||"").trim();if(!/^https?:\/\/\S+$/i.test(f)){n.push(M("validate.baseUrl",{pos:d}));continue}let p=[],m=Object.create(null);for(let y of c.models||[]){let k=y||{},T=String(k.id||"").trim();if(!T){n.push(M("validate.modelIdEmpty",{pos:d}));continue}if(m[T]){n.push(M("validate.modelIdDup",{pos:d,id:T}));continue}m[T]=!0;let g=uS(k.maxInputTokens,65536),v=uS(k.maxOutputTokens,8192);if(isNaN(g)){n.push(M("validate.maxIn",{pos:d,id:T}));continue}if(isNaN(v)){n.push(M("validate.maxOut",{pos:d,id:T}));continue}let w=iD(k.thinking,d,T);if(!w.ok){n.push(w.error);continue}let S={id:T,name:String(k.name||"").trim()||T,maxInputTokens:g,maxOutputTokens:v,toolCalling:!!k.toolCalling,vision:!!k.vision};w.value&&(S.thinking=w.value),p.push(S)}if(!p.length){n.push(M("validate.noModels",{pos:d}));continue}let h={id:u,name:String(c.name||"").trim()||u,baseUrl:f};if(String(c.apiKeyEnv||"").trim()&&(h.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(M("validate.webUrl",{pos:d}));continue}let k=c.webSearch.count,T=k===""||k===void 0||k===null?8:Number(k);if(!isFinite(T)||T<1||T>50){n.push(M("validate.webCount",{pos:d}));continue}let g=String(c.webSearch.engine||"").trim().toLowerCase();if(g&&g!=="deepseek"&&g!=="bing"){n.push(M("validate.webEngine",{pos:d}));continue}if(c.webSearch.disabled!==void 0&&typeof c.webSearch.disabled!="boolean"){n.push(M("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),h.webSearch=v}h.models=p,s.push({provider:h,raw:c})}s.length||n.push(M("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 Dv(t,e){let n=Iv(e);if(!n.ok)return{ok:!1,errors:n.errors};let s=[];try{let l=JSON.parse(P.readFileSync(dt,"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 w=T[v.id],S=w?Object.assign({},w,v):v,_=g[v.id];return _&&Object.prototype.hasOwnProperty.call(_,"thinking")&&_.thinking===null&&!v.thinking&&delete S.thinking,S})}let m="",h=f&&f.id?f.id:d||c.id;h&&h!==c.id?m=ps[h]||""||await t.secrets.get(Ma+h)||"":m=ps[c.id]||"";let y=String(u.apiKeyAction||"keep"),k=m;if(y==="set"){let T=String(u.apiKeyValue||"").trim();T&&(k=T),delete p.apiKey}else y==="clear"&&(k="",delete p.apiKey);(k!==m||h&&h!==c.id)&&i.push({id:c.id,oldId:h&&h!==c.id?h:null,value:k}),o.providers.push(p)}P.mkdirSync(D.dirname(dt),{recursive:!0,mode:448});let a=dt+".tmp";if(P.writeFileSync(a,JSON.stringify(o,null,2)+`
953
- `,{mode:384}),P.existsSync(dt))try{P.copyFileSync(dt,dt+".bak")}catch(l){b("config_backup_failed",{message:l.message})}P.renameSync(a,dt);for(let l of i)l.value?await t.secrets.store(Ma+l.id,l.value):await t.secrets.delete(Ma+l.id),l.oldId&&await t.secrets.delete(Ma+l.oldId);return ou(),await qm(t),qe(ru()),Bm(),b("config_saved",{path:dt,providers:o.providers.length,models:Zn().length,secrets:i.length}),{ok:!0,path:dt,source:Vo,defaultModel:si(),models:ru().models}}async function Fv(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:M("ext.providerBaseUrl")};if(!s)return{ok:!1,error:M("ext.providerNeedModel")};let r=n.apiKey||ps[e.id]||ps[e.originalId]||""||Ya(n)||(Yo(n)?dm:"");if(!r)return{ok:!1,error:M("ext.providerNeedKey")};let o=Date.now(),i=new AbortController,a=setTimeout(function(){i.abort()},15e3);try{let l=await fetch(NS(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 b("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 b("provider_test_failed",{id:n.id,message:l.message}),{ok:!1,error:l&&l.name==="AbortError"?M("ext.providerTimeout"):String(l&&l.message||l)}}finally{clearTimeout(a)}}function _t(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function uu(t,e,n){let s=_t(t);if(!s)return null;let r=_t(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 Lv(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=_t(e.context_length)||_t(e.context_window)||_t(e.max_context_length)||_t(e.max_model_len)||_t(e.max_input_tokens)||_t(s.n_ctx_train),o=_t(e.max_output_tokens)||_t(e.max_completion_tokens)||_t(n.max_completion_tokens);if(!r&&!o)return null;let i="generic";return _t(e.max_model_len)?i="vllm":(n.context_length||n.max_completion_tokens)&&(i="openrouter"),{context:r,output:o,source:i}}function Rv(t){return String(t||"").replace(/\/+$/,"").replace(/\/v1$/i,"")}async function em(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 aD(t,e,n,s){let r=Rv(t.baseUrl);if(!(await em(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 em(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?_t(f[1]):0,m=!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=_t(u.json.model_info[y]),p)){m=!0;break}}let h=uu(p,0,"ollama");h&&(m&&(h.fromTraining=!0),n[c]=h)}}await Promise.all([l(),l(),l(),l()])}async function lD(t,e,n){if(e.length!==1||n[e[0]])return;let s=Rv(t.baseUrl),r=await em(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=_t(o.n_ctx)||_t(r.json.n_ctx),a=uu(i,0,"llamacpp");a&&(n[e[0]]=a)}async function Wm(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:M("ext.providerBaseUrl")};let s=n.apiKey||ps[e.id]||ps[e.originalId]||""||Ya(n)||(Yo(n)?dm:"");if(!s)return{ok:!1,error:M("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 m=typeof p=="string"?p:p&&(p.id||p.name),h=String(m??"").trim();if(!h)continue;c.push(h);let y=typeof p=="object"?Lv(p):null;if(y){let k=uu(y.context,y.output,y.source);k&&(u[h]=k)}}}catch{return{ok:!1,error:M("ext.providerBadJson",{head:l.slice(0,120)})}}if(c.some(function(d){return!u[d]})){let d=Date.now()+6e3;try{await aD(n,c,u,d)}catch{}try{await lD(n,c,u)}catch{}}return b("provider_models_fetched",{id:n.id,count:c.length}),b("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"?M("ext.providerTimeout"):String(a&&a.message||a)}}finally{clearTimeout(i)}}var cD=!1;function so(t){return cD?x.Uri.joinPath(t,"dist","media"):x.Uri.joinPath(t,"media")}var tm="luban.webdav.password",Ac=!1,qv=null;function zt(t,e){let n=String(t??""),s=Mn(e)?e:null;return n.indexOf("webdav.")===0?s?M(n,s):M(n):n||M("webdav.errNetwork")}async function qp(t,e){try{return!!await x.window.showWarningMessage(String(t||""),{modal:!0},M(e||"ext.confirmYes"))}catch(n){return b("native_confirm_failed",{message:String(n&&n.message||n)}),!1}}var dS={sessions:"webdav.catSessions",attachments:"webdav.catAttachments",plans:"webdav.catPlans",providers:"webdav.catProviders",mcp:"webdav.catMcp"};function fS(t){if(!t||typeof t!="object")return"";let e=[];for(let n of Object.keys(dS)){let s=Number(t[n])||0;s>0&&e.push(M(dS[n],{n:s}))}return e.length?M("webdav.catWrap",{parts:e.join(" \xB7 ")}):""}function Bv(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?M("webdav.statusProviderMerged",{p:r,m:o}):M("webdav.statusProviderNoNew");return M("webdav.mergeSep")+i}function uD(t){let e=t||{};return M("webdav.confirmOverwrite",{machine:e.machine||"?",at:String(e.createdAt||"").replace("T"," ").slice(0,19),n:e.files||0})}async function Km(t){try{return await t.secrets.get(tm)||""}catch(e){return b("webdav_secret_read_failed",{message:String(e&&e.message||e)}),""}}async function Ja(t){let e=_n.loadConfig();return{type:"webdav",path:_n.WEBDAV_CONFIG_PATH,config:e,hasPassword:!!await Km(t),busy:Ac,last:qv}}async function dD(t,e){let n=e||Mt&&Mt.webview;if(n)try{n.postMessage(await Ja(t))}catch(s){b("webdav_push_failed",{message:String(s&&s.message||s)})}}async function Hm(t,e){let n=Mn(e)?e:{},s=String(n.passwordAction||"keep"),r=String(n.passwordValue==null?"":n.passwordValue),o=_n.saveConfig(n.config||{});if(!o.ok)return b("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(tm,r),i=!0):s==="clear"&&(await t.secrets.delete(tm),i=!0)}catch(a){b("webdav_secret_write_failed",{message:String(a&&a.message||a)})}return b("webdav_saved",{path:o.path,url:o.config.url,enabled:o.config.enabled,remoteDir:o.config.remoteDir,includes:o.config.includes,secretChanged:i}),await dD(t),{ok:!0,path:o.path,config:o.config,hasPassword:!!await Km(t)}}async function ri(t,e){let n=_n.loadConfig(),s=Mn(e)?e:{},r=s.password!=null&&String(s.password)!==""?String(s.password):await Km(t);if(!Mn(s.config))return Object.assign({},n,{password:r});let o=_n.normalizeConfig(Object.assign({},n,s.config)),i=Object.assign({},o.config,{password:r});return i.__invalid=(o.errors||[]).length?o.errors:null,i}function el(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 Uv(t,e){let n=await ri(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 _n.testConnection(n);return b("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 fD(){for(let t of Tn.values())try{clearTimeout(t)}catch{}Tn.clear();for(let t of de.values())try{bt(t)}catch{}}function pD(){try{ke=null,nt(),qe(xn())}catch(t){b("webdav_session_refresh_failed",{message:String(t&&t.message||t)})}}function Wv(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 Kv(t){let e=t||{};return Number(e.restored)>0?(Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")>=0:!1}async function nm(t,e,n,s){if(Ac)return{ok:!1,error:zt("webdav.errBusy"),busy:!0};Ac=!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:it.hostname()};try{let a=await ri(t,r.override),l=el(a);if(l)return{ok:!1,error:l};delete a.__invalid,a.machine=it.hostname();let c;if(e==="backup"?c=await cs.uploadAll(a,i,o):(fD(),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(qv={kind:e,at:new Date().toISOString(),files:e==="backup"?c.files:c.restored,categories:c.categories||null,snapshot:c.snapshot||""},b(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&&(pD(),Kv(c)))try{await Um(t)}catch(d){b("providers_reload_failed",{message:String(d&&d.message||d)})}}else b(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 b("webdav_transfer_failed",{kind:e,message:String(a&&a.message||a)}),{ok:!1,error:zt(a&&a.message||"webdav.errNetwork")}}finally{Ac=!1}}async function Hv(t,e,n){let s=await ri(t,e),r=el(s);if(r)return{ok:!1,error:r};s.machine=it.hostname();let o=await cs.remoteSummary(s,{limit:200,subdir:n||""});return b("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 zv(t,e,n){let s=await ri(t,e),r=el(s);if(r)return{ok:!1,error:r};s.machine=it.hostname();let o=await cs.listRemoteProviders(s,{subdir:n||"",home:dt?D.dirname(dt):""});return b("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 Gv(t,e){let n=await ri(t,e),s=el(n);if(s)return{ok:!1,error:s};let r=await cs.listMachines(n,{machine:it.hostname()});return b("webdav_machine_list",{ok:!!r.ok,n:(r.machines||[]).length}),Object.assign({},r,{error:r.ok?"":zt(r.error||"webdav.errNetwork")})}async function mD(){let t=_n.WEBDAV_CONFIG_PATH;P.existsSync(t)||(P.mkdirSync(D.dirname(t),{recursive:!0,mode:448}),P.writeFileSync(t,JSON.stringify(_n.defaultConfig(),null,2)+`
954
- `,{mode:384}));let e=await x.workspace.openTextDocument(x.Uri.file(t));return await x.window.showTextDocument(e,{preview:!1}),t}function hD(){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 m of r(d))p+=o(m.path,m.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 gD(t){P.mkdirSync(D.join(t,"sessions"),{recursive:!0}),P.writeFileSync(D.join(t,"sessions","z1.json"),JSON.stringify({id:"z1",items:[{t:"user",text:"\u81EA\u68C0\u4E00"}]})),P.writeFileSync(D.join(t,"sessions","z2.json"),JSON.stringify({id:"z2",items:[{t:"user",text:"\u81EA\u68C0\u4E8C"}]})),P.writeFileSync(D.join(t,"sessions","index.json"),"[]"),P.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 Jv(t){let e=await hD(),n=P.mkdtempSync(D.join(it.tmpdir(),"luban-wd-check-")),s=D.join(n,"webdav.json");try{gD(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:_n.normalizeConfig(r).config,version:ds,machine:it.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");P.writeFileSync(p,'{"id":"z1","local":"edited"}');let m=new Date(Date.parse(a.createdAt)+6e4);P.utimesSync(p,m,m);let h=await cs.restoreAll(r,Object.assign({},o,{mode:"newer"})),y=P.readFileSync(p,"utf8").indexOf("edited")>=0;return{ok:!!h.ok&&(h.blocked||[]).length===1&&y,result:{blocked:h.blocked,restored:h.restored,kept:y,total:l.length}}}for(let p of l)try{P.rmSync(cs.localPathOf(n,p),{force:!0})}catch{}P.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 m=cs.localPathOf(n,p);if(!P.existsSync(m)){d=!1,f=p+":missing";break}if(require("crypto").createHash("sha1").update(P.readFileSync(m)).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{P.rmSync(n,{recursive:!0,force:!0})}catch{}}}function yD(t,e,n){let s=so(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=P.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,_m()).replace(/{{lang}}/g,rn||Va()).replace(/{{tab}}/g,Lm(n)).replace(/{{version}}/g,ds).replace(/{{nonce}}/g,d)}function $v(t,e){return Qn=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(Qp())}catch{}try{t.postMessage(Jc())}catch{}try{t.postMessage(await Ja(e))}catch{}try{t.postMessage(_a(Un))}catch{}try{t.postMessage($c())}catch{}try{t.postMessage(rm())}catch{}try{t.postMessage({type:"activate",tab:Zp})}catch{}sm("hub_ready"),b("hub_ready",{tab:Zp});return}if(s.type==="tab"){let r=Lm(s.tab);try{r==="usage"?t.postMessage(_a(Un)):r==="general"?t.postMessage(Qp()):r==="backup"?t.postMessage(await Ja(e)):r==="plugins"?t.postMessage($c()):r==="mcp"?t.postMessage(rm()):r==="market"?t.postMessage(await Yv()):t.postMessage(Jc())}catch{}b("hub_tab",{tab:r});return}if(s.type==="ack_rendered"){j=Object.assign({at:Date.now()},s),s.source==="dashboard"?b("usage_dashboard_ack",{kind:s.kind,n:s.n,groups:s.groups}):s.source==="general"?b("general_ack",{kind:s.kind,n:s.n}):b("settings_ack",{kind:s.kind,n:s.n});return}if(s.type==="save_general"){try{let r=await Nv(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:[M("ext.generalSaveFailed",{msg:String(r&&r.message||r)})]}),b("general_save_failed",{message:r.message})}return}if(s.type==="save_settings"){try{let r=await Dv(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:[M("ext.saveFailed",{msg:String(r&&r.message||r)})]}),b("settings_save_failed",{message:r.message})}return}if(s.type==="test_provider"){let r=await Fv(s.provider||{});t.postMessage(Object.assign({type:"test_result",ref:s.ref},r));return}if(s.type==="fetch_models"){let r=await Wm(s.provider||{});t.postMessage(Object.assign({type:"models_fetched",ref:s.ref},r));return}if(s.type==="open_config_file"){try{if(!P.existsSync(dt))throw new Error(M("ext.configMissing"));let r=await x.workspace.openTextDocument(x.Uri.file(dt));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{}b("settings_reload_failed",{message:String(r&&r.message||r)})}return}if(s.type==="save_webdav"){try{let r=await Hm(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))]}),b("webdav_save_failed",{message:String(r&&r.message||r)})}return}if(s.type==="test_webdav"){let r=await Uv(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=Wv(s),i=await nm(e,r,o,t);if(!i.ok&&i.needsConfirm&&r==="backup"&&(await qp(uD(i.remote),"webdav.confirmOverwriteYes")?(o.force=!0,i=await nm(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(M(a,l)+fS(i.categories))}catch{}if(r==="restore"&&i.ok&&i.restored>0)try{t.postMessage({type:"notice",message:M("webdav.restoredNotice",{n:i.restored,cat:fS(i.categories)+Bv(i),dir:i.snapshot||M("webdav.noSnapshot")})})}catch{}return}if(s.type==="webdav_remote_list"){let r=await Hv(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_list"},r));return}if(s.type==="webdav_remote_providers"){let r=await zv(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 Gv(e,s.override);t.postMessage(Object.assign({type:"webdav_machines"},r));return}if(s.type==="hub_confirm"){let r=await qp(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:M("ext.pluginsPickFolder"),title:M("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 Je.installFromDir(o,{trust:!0,replace:s.replace===!0});b("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 Wo("install");return}if(s.type==="plugins_uninstall"){let r=String(s.name||""),o=String(s.dir||"");if(!r&&!o)return;if(!await qp(M("ext.pluginsUninstallConfirm",{name:r||o}),"ext.pluginsUninstallYes")){t.postMessage({type:"plugins_result",action:"uninstall",ok:!1,cancelled:!0});return}let a=await Je.uninstall(o||r,{why:"uninstall"});b("plugins_uninstall",{name:r||o,ok:a.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"uninstall"},a)),a.ok&&await Wo("uninstall");return}if(s.type==="plugins_restore"){let r=String(s.entry||""),o=await Je.restoreFromTrash(r);b("plugins_restore",{entry:r,ok:o.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"restore"},o)),o.ok&&await Wo("restore");return}if(s.type==="plugins_trust"){let r;try{r={ok:!0,name:Je.trustDir(String(s.dir||"")).name}}catch(o){r={ok:!1,message:String(o&&o.message||o)}}b("plugins_trust",{name:r.name||"",ok:r.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"trust"},r)),r.ok&&await Wo("trust");return}if(s.type==="plugins_rescan"){await Wo("rescan");return}if(s.type==="plugins_theme"){let r=String(s.name||"").trim(),o=!0,i="";if(r){let a=null;try{a=Je.themeOf(r)}catch{a=null}a||(o=!1,i=M("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)}b("plugins_theme",{name:r,ok:o}),t.postMessage({type:"plugins_result",action:"theme",ok:o,name:r,message:i}),o&&(Xc("theme"),Tm());return}if(s.type==="plugins_open_dir"){let o=String(s.which||"global")==="trash"?Je.trashDir():Je.globalDir();try{P.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{Se.configure({root:L(),version:ds,rec:b});let o=Se.setDisabled({name:s.name,disabled:s.disabled===!0,target:r});await Se.reload(),b("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}),pS("toggle")}catch(o){b("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{Se.configure({root:L(),version:ds,rec:b}),await Se.reload(),t.postMessage({type:"mcp_result",action:"reload",ok:!0})}catch(r){b("mcp_reload_failed",{message:String(r&&r.message||r)}),t.postMessage({type:"mcp_result",action:"reload",ok:!1,message:String(r&&r.message||r)})}pS("reload");return}if(s.type==="mcp_open_file"){try{let r=s.which==="project"?"project":"global",o=Se.configPathFor(r);P.existsSync(o)||(P.mkdirSync(D.dirname(o),{recursive:!0}),P.writeFileSync(o,`{
952
+ `:"")+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 Ma="luban.providerKey.",Mt=null,Zp="settings",Qn=null,Ca=["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"],QI={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},eD={"browser.chromePath":!0},tD={"agent.smallWindow":["auto","on","off"],"agent.verbosity":["concise","normal","detailed"],"net.tlsMaxVersion":["auto","1.2"]},nD={"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},sD={"browser.viewportWidth":4096,"browser.viewportHeight":4096,"computer.screenshotWidth":4096,"plugins.maxTools":200};function Lm(t){return t==="usage"||t==="general"||t==="backup"||t==="plugins"||t==="market"||t==="mcp"?t:"settings"}function Rm(){let t=x.workspace.getConfiguration("luban"),e=Object.create(null);Ca.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 Qp(){return{type:"general",values:Rm()}}function rD(){if(Mt)try{Mt.webview.postMessage(Qp())}catch(t){b("general_push_failed",{message:t.message})}}async function Nv(t){let e=t&&typeof t=="object"?t:{},n=[],s=Object.create(null);if(Ca.forEach(function(o){if(!Object.prototype.hasOwnProperty.call(e,o)){n.push(M("ext.generalMissing",{key:o}));return}let i=e[o];if(QI[o]){if(typeof i!="boolean"){n.push(M("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(M("ext.generalBadLanguage"));return}s[o]=d;return}let a=tD[o];if(a){let d=String(i??"");if(a.indexOf(d)<0){n.push(M("ext.generalBadEnum",{key:o,values:a.join(" / ")}));return}s[o]=d;return}if(eD[o]){s[o]=String(i??"").trim();return}let l=Number(i);if(!isFinite(l)||!Number.isInteger(l)){n.push(M("ext.generalBadNumber",{key:o}));return}let c=nD[o];if(typeof c=="number"&&l<c){n.push(M("ext.generalBadMin",{key:o,min:c}));return}let u=sD[o];if(typeof u=="number"&&l>u){n.push(M("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<Ca.length;o++){let i=Ca[o];await r.update(i,s[i],x.ConfigurationTarget.Global)}}catch(o){return{ok:!1,errors:[M("ext.generalSaveFailed",{msg:String(o&&o.message||o)})]}}return b("general_saved",{keys:Ca.length}),{ok:!0,values:Rm()}}async function qm(t){let e=Object.create(null),n=0;for(let s of Gt.providers||[])if(!(!s||!s.id))try{let r=await t.secrets.get(Ma+s.id);r&&(e[s.id]=String(r),n++)}catch(r){b("secret_read_failed",{id:s.id,message:r.message})}return ms=e,b("secrets_synced",{providers:(Gt.providers||[]).length,keys:n}),n}function oD(){return{defaultModel:Gt.defaultModel||"",providers:(Gt.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:!!ms[t.id],hasEnvKey:!!Ya(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:Mn(e.thinking)?e.thinking:null}})}})}}function Jc(){return{type:"settings",path:dt,source:Vo,config:oD()}}function Bm(){if(Mt)try{Mt.webview.postMessage(Jc())}catch(t){b("settings_push_failed",{message:t.message})}}async function Um(t){ou(),await qm(t),qe(ru()),Bm();let e=(Gt.providers||[]).length,n=Zn().length;return b("providers_reloaded",{providers:e,models:n}),{providers:e,models:n}}function uS(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 iD(t,e,n){if(t==null)return{ok:!0,value:null};if(!Mn(t))return{ok:!1,error:M("validate.thinkShape",{pos:e,id:n})};let s={};for(let i of["on","off"]){let a=t[i];if(a==null)continue;if(!Mn(a))return{ok:!1,error:M("validate.thinkTier",{pos:e,id:n,tier:i})};let l=Object.keys(a).filter(function(c){return yv[c]});if(l.length)return{ok:!1,error:M("validate.thinkReserved",{pos:e,id:n,tier:i,keys:l.join(", ")})};if(JSON.stringify(a).length>sS)return{ok:!1,error:M("validate.thinkTooLong",{pos:e,id:n,tier:i,n:sS})};s[i]=a}if(!s.on&&!s.off)return{ok:!1,error:M("validate.thinkEmpty",{pos:e,id:n})};if(t.inline!==void 0&&t.inline!==null&&typeof t.inline!="boolean")return{ok:!1,error:M("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 Iv(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=M("validate.pos",{id:u||M("validate.untitled")});if(!u){n.push(M("validate.providerEmpty"));continue}if(!/^[A-Za-z0-9_-]+$/.test(u)){n.push(M("validate.idChars",{pos:d}));continue}if(r[u]){n.push(M("validate.idDup",{pos:d}));continue}r[u]=!0;let f=String(c.baseUrl||"").trim();if(!/^https?:\/\/\S+$/i.test(f)){n.push(M("validate.baseUrl",{pos:d}));continue}let p=[],m=Object.create(null);for(let y of c.models||[]){let k=y||{},T=String(k.id||"").trim();if(!T){n.push(M("validate.modelIdEmpty",{pos:d}));continue}if(m[T]){n.push(M("validate.modelIdDup",{pos:d,id:T}));continue}m[T]=!0;let g=uS(k.maxInputTokens,65536),v=uS(k.maxOutputTokens,8192);if(isNaN(g)){n.push(M("validate.maxIn",{pos:d,id:T}));continue}if(isNaN(v)){n.push(M("validate.maxOut",{pos:d,id:T}));continue}let w=iD(k.thinking,d,T);if(!w.ok){n.push(w.error);continue}let S={id:T,name:String(k.name||"").trim()||T,maxInputTokens:g,maxOutputTokens:v,toolCalling:!!k.toolCalling,vision:!!k.vision};w.value&&(S.thinking=w.value),p.push(S)}if(!p.length){n.push(M("validate.noModels",{pos:d}));continue}let h={id:u,name:String(c.name||"").trim()||u,baseUrl:f};if(String(c.apiKeyEnv||"").trim()&&(h.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(M("validate.webUrl",{pos:d}));continue}let k=c.webSearch.count,T=k===""||k===void 0||k===null?8:Number(k);if(!isFinite(T)||T<1||T>50){n.push(M("validate.webCount",{pos:d}));continue}let g=String(c.webSearch.engine||"").trim().toLowerCase();if(g&&g!=="deepseek"&&g!=="bing"){n.push(M("validate.webEngine",{pos:d}));continue}if(c.webSearch.disabled!==void 0&&typeof c.webSearch.disabled!="boolean"){n.push(M("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),h.webSearch=v}h.models=p,s.push({provider:h,raw:c})}s.length||n.push(M("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 Dv(t,e){let n=Iv(e);if(!n.ok)return{ok:!1,errors:n.errors};let s=[];try{let l=JSON.parse(P.readFileSync(dt,"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 w=T[v.id],S=w?Object.assign({},w,v):v,_=g[v.id];return _&&Object.prototype.hasOwnProperty.call(_,"thinking")&&_.thinking===null&&!v.thinking&&delete S.thinking,S})}let m="",h=f&&f.id?f.id:d||c.id;h&&h!==c.id?m=ms[h]||""||await t.secrets.get(Ma+h)||"":m=ms[c.id]||"";let y=String(u.apiKeyAction||"keep"),k=m;if(y==="set"){let T=String(u.apiKeyValue||"").trim();T&&(k=T),delete p.apiKey}else y==="clear"&&(k="",delete p.apiKey);(k!==m||h&&h!==c.id)&&i.push({id:c.id,oldId:h&&h!==c.id?h:null,value:k}),o.providers.push(p)}P.mkdirSync(D.dirname(dt),{recursive:!0,mode:448});let a=dt+".tmp";if(P.writeFileSync(a,JSON.stringify(o,null,2)+`
953
+ `,{mode:384}),P.existsSync(dt))try{P.copyFileSync(dt,dt+".bak")}catch(l){b("config_backup_failed",{message:l.message})}P.renameSync(a,dt);for(let l of i)l.value?await t.secrets.store(Ma+l.id,l.value):await t.secrets.delete(Ma+l.id),l.oldId&&await t.secrets.delete(Ma+l.oldId);return ou(),await qm(t),qe(ru()),Bm(),b("config_saved",{path:dt,providers:o.providers.length,models:Zn().length,secrets:i.length}),{ok:!0,path:dt,source:Vo,defaultModel:si(),models:ru().models}}async function Fv(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:M("ext.providerBaseUrl")};if(!s)return{ok:!1,error:M("ext.providerNeedModel")};let r=n.apiKey||ms[e.id]||ms[e.originalId]||""||Ya(n)||(Yo(n)?dm:"");if(!r)return{ok:!1,error:M("ext.providerNeedKey")};let o=Date.now(),i=new AbortController,a=setTimeout(function(){i.abort()},15e3);try{let l=await fetch(NS(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 b("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 b("provider_test_failed",{id:n.id,message:l.message}),{ok:!1,error:l&&l.name==="AbortError"?M("ext.providerTimeout"):String(l&&l.message||l)}}finally{clearTimeout(a)}}function _t(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function uu(t,e,n){let s=_t(t);if(!s)return null;let r=_t(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 Lv(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=_t(e.context_length)||_t(e.context_window)||_t(e.max_context_length)||_t(e.max_model_len)||_t(e.max_input_tokens)||_t(s.n_ctx_train),o=_t(e.max_output_tokens)||_t(e.max_completion_tokens)||_t(n.max_completion_tokens);if(!r&&!o)return null;let i="generic";return _t(e.max_model_len)?i="vllm":(n.context_length||n.max_completion_tokens)&&(i="openrouter"),{context:r,output:o,source:i}}function Rv(t){return String(t||"").replace(/\/+$/,"").replace(/\/v1$/i,"")}async function em(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 aD(t,e,n,s){let r=Rv(t.baseUrl);if(!(await em(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 em(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?_t(f[1]):0,m=!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=_t(u.json.model_info[y]),p)){m=!0;break}}let h=uu(p,0,"ollama");h&&(m&&(h.fromTraining=!0),n[c]=h)}}await Promise.all([l(),l(),l(),l()])}async function lD(t,e,n){if(e.length!==1||n[e[0]])return;let s=Rv(t.baseUrl),r=await em(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=_t(o.n_ctx)||_t(r.json.n_ctx),a=uu(i,0,"llamacpp");a&&(n[e[0]]=a)}async function Wm(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:M("ext.providerBaseUrl")};let s=n.apiKey||ms[e.id]||ms[e.originalId]||""||Ya(n)||(Yo(n)?dm:"");if(!s)return{ok:!1,error:M("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 m=typeof p=="string"?p:p&&(p.id||p.name),h=String(m??"").trim();if(!h)continue;c.push(h);let y=typeof p=="object"?Lv(p):null;if(y){let k=uu(y.context,y.output,y.source);k&&(u[h]=k)}}}catch{return{ok:!1,error:M("ext.providerBadJson",{head:l.slice(0,120)})}}if(c.some(function(d){return!u[d]})){let d=Date.now()+6e3;try{await aD(n,c,u,d)}catch{}try{await lD(n,c,u)}catch{}}return b("provider_models_fetched",{id:n.id,count:c.length}),b("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"?M("ext.providerTimeout"):String(a&&a.message||a)}}finally{clearTimeout(i)}}var cD=!1;function so(t){return cD?x.Uri.joinPath(t,"dist","media"):x.Uri.joinPath(t,"media")}var tm="luban.webdav.password",Ac=!1,qv=null;function zt(t,e){let n=String(t??""),s=Mn(e)?e:null;return n.indexOf("webdav.")===0?s?M(n,s):M(n):n||M("webdav.errNetwork")}async function qp(t,e){try{return!!await x.window.showWarningMessage(String(t||""),{modal:!0},M(e||"ext.confirmYes"))}catch(n){return b("native_confirm_failed",{message:String(n&&n.message||n)}),!1}}var dS={sessions:"webdav.catSessions",attachments:"webdav.catAttachments",plans:"webdav.catPlans",providers:"webdav.catProviders",mcp:"webdav.catMcp"};function fS(t){if(!t||typeof t!="object")return"";let e=[];for(let n of Object.keys(dS)){let s=Number(t[n])||0;s>0&&e.push(M(dS[n],{n:s}))}return e.length?M("webdav.catWrap",{parts:e.join(" \xB7 ")}):""}function Bv(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?M("webdav.statusProviderMerged",{p:r,m:o}):M("webdav.statusProviderNoNew");return M("webdav.mergeSep")+i}function uD(t){let e=t||{};return M("webdav.confirmOverwrite",{machine:e.machine||"?",at:String(e.createdAt||"").replace("T"," ").slice(0,19),n:e.files||0})}async function Km(t){try{return await t.secrets.get(tm)||""}catch(e){return b("webdav_secret_read_failed",{message:String(e&&e.message||e)}),""}}async function Ja(t){let e=_n.loadConfig();return{type:"webdav",path:_n.WEBDAV_CONFIG_PATH,config:e,hasPassword:!!await Km(t),busy:Ac,last:qv}}async function dD(t,e){let n=e||Mt&&Mt.webview;if(n)try{n.postMessage(await Ja(t))}catch(s){b("webdav_push_failed",{message:String(s&&s.message||s)})}}async function Hm(t,e){let n=Mn(e)?e:{},s=String(n.passwordAction||"keep"),r=String(n.passwordValue==null?"":n.passwordValue),o=_n.saveConfig(n.config||{});if(!o.ok)return b("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(tm,r),i=!0):s==="clear"&&(await t.secrets.delete(tm),i=!0)}catch(a){b("webdav_secret_write_failed",{message:String(a&&a.message||a)})}return b("webdav_saved",{path:o.path,url:o.config.url,enabled:o.config.enabled,remoteDir:o.config.remoteDir,includes:o.config.includes,secretChanged:i}),await dD(t),{ok:!0,path:o.path,config:o.config,hasPassword:!!await Km(t)}}async function ri(t,e){let n=_n.loadConfig(),s=Mn(e)?e:{},r=s.password!=null&&String(s.password)!==""?String(s.password):await Km(t);if(!Mn(s.config))return Object.assign({},n,{password:r});let o=_n.normalizeConfig(Object.assign({},n,s.config)),i=Object.assign({},o.config,{password:r});return i.__invalid=(o.errors||[]).length?o.errors:null,i}function el(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 Uv(t,e){let n=await ri(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 _n.testConnection(n);return b("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 fD(){for(let t of Tn.values())try{clearTimeout(t)}catch{}Tn.clear();for(let t of de.values())try{bt(t)}catch{}}function pD(){try{ke=null,nt(),qe(xn())}catch(t){b("webdav_session_refresh_failed",{message:String(t&&t.message||t)})}}function Wv(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 Kv(t){let e=t||{};return Number(e.restored)>0?(Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")>=0:!1}async function nm(t,e,n,s){if(Ac)return{ok:!1,error:zt("webdav.errBusy"),busy:!0};Ac=!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:it.hostname()};try{let a=await ri(t,r.override),l=el(a);if(l)return{ok:!1,error:l};delete a.__invalid,a.machine=it.hostname();let c;if(e==="backup"?c=await us.uploadAll(a,i,o):(fD(),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(qv={kind:e,at:new Date().toISOString(),files:e==="backup"?c.files:c.restored,categories:c.categories||null,snapshot:c.snapshot||""},b(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&&(pD(),Kv(c)))try{await Um(t)}catch(d){b("providers_reload_failed",{message:String(d&&d.message||d)})}}else b(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 b("webdav_transfer_failed",{kind:e,message:String(a&&a.message||a)}),{ok:!1,error:zt(a&&a.message||"webdav.errNetwork")}}finally{Ac=!1}}async function Hv(t,e,n){let s=await ri(t,e),r=el(s);if(r)return{ok:!1,error:r};s.machine=it.hostname();let o=await us.remoteSummary(s,{limit:200,subdir:n||""});return b("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 zv(t,e,n){let s=await ri(t,e),r=el(s);if(r)return{ok:!1,error:r};s.machine=it.hostname();let o=await us.listRemoteProviders(s,{subdir:n||"",home:dt?D.dirname(dt):""});return b("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 Gv(t,e){let n=await ri(t,e),s=el(n);if(s)return{ok:!1,error:s};let r=await us.listMachines(n,{machine:it.hostname()});return b("webdav_machine_list",{ok:!!r.ok,n:(r.machines||[]).length}),Object.assign({},r,{error:r.ok?"":zt(r.error||"webdav.errNetwork")})}async function mD(){let t=_n.WEBDAV_CONFIG_PATH;P.existsSync(t)||(P.mkdirSync(D.dirname(t),{recursive:!0,mode:448}),P.writeFileSync(t,JSON.stringify(_n.defaultConfig(),null,2)+`
954
+ `,{mode:384}));let e=await x.workspace.openTextDocument(x.Uri.file(t));return await x.window.showTextDocument(e,{preview:!1}),t}function hD(){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 m of r(d))p+=o(m.path,m.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 gD(t){P.mkdirSync(D.join(t,"sessions"),{recursive:!0}),P.writeFileSync(D.join(t,"sessions","z1.json"),JSON.stringify({id:"z1",items:[{t:"user",text:"\u81EA\u68C0\u4E00"}]})),P.writeFileSync(D.join(t,"sessions","z2.json"),JSON.stringify({id:"z2",items:[{t:"user",text:"\u81EA\u68C0\u4E8C"}]})),P.writeFileSync(D.join(t,"sessions","index.json"),"[]"),P.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 Jv(t){let e=await hD(),n=P.mkdtempSync(D.join(it.tmpdir(),"luban-wd-check-")),s=D.join(n,"webdav.json");try{gD(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:_n.normalizeConfig(r).config,version:fs,machine:it.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");P.writeFileSync(p,'{"id":"z1","local":"edited"}');let m=new Date(Date.parse(a.createdAt)+6e4);P.utimesSync(p,m,m);let h=await us.restoreAll(r,Object.assign({},o,{mode:"newer"})),y=P.readFileSync(p,"utf8").indexOf("edited")>=0;return{ok:!!h.ok&&(h.blocked||[]).length===1&&y,result:{blocked:h.blocked,restored:h.restored,kept:y,total:l.length}}}for(let p of l)try{P.rmSync(us.localPathOf(n,p),{force:!0})}catch{}P.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 m=us.localPathOf(n,p);if(!P.existsSync(m)){d=!1,f=p+":missing";break}if(require("crypto").createHash("sha1").update(P.readFileSync(m)).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{P.rmSync(n,{recursive:!0,force:!0})}catch{}}}function yD(t,e,n){let s=so(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=P.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,_m()).replace(/{{lang}}/g,rn||Va()).replace(/{{tab}}/g,Lm(n)).replace(/{{version}}/g,fs).replace(/{{nonce}}/g,d)}function $v(t,e){return Qn=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(Qp())}catch{}try{t.postMessage(Jc())}catch{}try{t.postMessage(await Ja(e))}catch{}try{t.postMessage(_a(Un))}catch{}try{t.postMessage($c())}catch{}try{t.postMessage(rm())}catch{}try{t.postMessage({type:"activate",tab:Zp})}catch{}sm("hub_ready"),b("hub_ready",{tab:Zp});return}if(s.type==="tab"){let r=Lm(s.tab);try{r==="usage"?t.postMessage(_a(Un)):r==="general"?t.postMessage(Qp()):r==="backup"?t.postMessage(await Ja(e)):r==="plugins"?t.postMessage($c()):r==="mcp"?t.postMessage(rm()):r==="market"?t.postMessage(await Yv()):t.postMessage(Jc())}catch{}b("hub_tab",{tab:r});return}if(s.type==="ack_rendered"){j=Object.assign({at:Date.now()},s),s.source==="dashboard"?b("usage_dashboard_ack",{kind:s.kind,n:s.n,groups:s.groups}):s.source==="general"?b("general_ack",{kind:s.kind,n:s.n}):b("settings_ack",{kind:s.kind,n:s.n});return}if(s.type==="save_general"){try{let r=await Nv(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:[M("ext.generalSaveFailed",{msg:String(r&&r.message||r)})]}),b("general_save_failed",{message:r.message})}return}if(s.type==="save_settings"){try{let r=await Dv(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:[M("ext.saveFailed",{msg:String(r&&r.message||r)})]}),b("settings_save_failed",{message:r.message})}return}if(s.type==="test_provider"){let r=await Fv(s.provider||{});t.postMessage(Object.assign({type:"test_result",ref:s.ref},r));return}if(s.type==="fetch_models"){let r=await Wm(s.provider||{});t.postMessage(Object.assign({type:"models_fetched",ref:s.ref},r));return}if(s.type==="open_config_file"){try{if(!P.existsSync(dt))throw new Error(M("ext.configMissing"));let r=await x.workspace.openTextDocument(x.Uri.file(dt));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{}b("settings_reload_failed",{message:String(r&&r.message||r)})}return}if(s.type==="save_webdav"){try{let r=await Hm(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))]}),b("webdav_save_failed",{message:String(r&&r.message||r)})}return}if(s.type==="test_webdav"){let r=await Uv(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=Wv(s),i=await nm(e,r,o,t);if(!i.ok&&i.needsConfirm&&r==="backup"&&(await qp(uD(i.remote),"webdav.confirmOverwriteYes")?(o.force=!0,i=await nm(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(M(a,l)+fS(i.categories))}catch{}if(r==="restore"&&i.ok&&i.restored>0)try{t.postMessage({type:"notice",message:M("webdav.restoredNotice",{n:i.restored,cat:fS(i.categories)+Bv(i),dir:i.snapshot||M("webdav.noSnapshot")})})}catch{}return}if(s.type==="webdav_remote_list"){let r=await Hv(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_list"},r));return}if(s.type==="webdav_remote_providers"){let r=await zv(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 Gv(e,s.override);t.postMessage(Object.assign({type:"webdav_machines"},r));return}if(s.type==="hub_confirm"){let r=await qp(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:M("ext.pluginsPickFolder"),title:M("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 Je.installFromDir(o,{trust:!0,replace:s.replace===!0});b("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 Wo("install");return}if(s.type==="plugins_uninstall"){let r=String(s.name||""),o=String(s.dir||"");if(!r&&!o)return;if(!await qp(M("ext.pluginsUninstallConfirm",{name:r||o}),"ext.pluginsUninstallYes")){t.postMessage({type:"plugins_result",action:"uninstall",ok:!1,cancelled:!0});return}let a=await Je.uninstall(o||r,{why:"uninstall"});b("plugins_uninstall",{name:r||o,ok:a.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"uninstall"},a)),a.ok&&await Wo("uninstall");return}if(s.type==="plugins_restore"){let r=String(s.entry||""),o=await Je.restoreFromTrash(r);b("plugins_restore",{entry:r,ok:o.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"restore"},o)),o.ok&&await Wo("restore");return}if(s.type==="plugins_trust"){let r;try{r={ok:!0,name:Je.trustDir(String(s.dir||"")).name}}catch(o){r={ok:!1,message:String(o&&o.message||o)}}b("plugins_trust",{name:r.name||"",ok:r.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"trust"},r)),r.ok&&await Wo("trust");return}if(s.type==="plugins_rescan"){await Wo("rescan");return}if(s.type==="plugins_theme"){let r=String(s.name||"").trim(),o=!0,i="";if(r){let a=null;try{a=Je.themeOf(r)}catch{a=null}a||(o=!1,i=M("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)}b("plugins_theme",{name:r,ok:o}),t.postMessage({type:"plugins_result",action:"theme",ok:o,name:r,message:i}),o&&(Xc("theme"),Tm());return}if(s.type==="plugins_open_dir"){let o=String(s.which||"global")==="trash"?Je.trashDir():Je.globalDir();try{P.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{Se.configure({root:L(),version:fs,rec:b});let o=Se.setDisabled({name:s.name,disabled:s.disabled===!0,target:r});await Se.reload(),b("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}),pS("toggle")}catch(o){b("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{Se.configure({root:L(),version:fs,rec:b}),await Se.reload(),t.postMessage({type:"mcp_result",action:"reload",ok:!0})}catch(r){b("mcp_reload_failed",{message:String(r&&r.message||r)}),t.postMessage({type:"mcp_result",action:"reload",ok:!1,message:String(r&&r.message||r)})}pS("reload");return}if(s.type==="mcp_open_file"){try{let r=s.which==="project"?"project":"global",o=Se.configPathFor(r);P.existsSync(o)||(P.mkdirSync(D.dirname(o),{recursive:!0}),P.writeFileSync(o,`{
955
955
  "mcpServers": {}
956
956
  }
957
- `,"utf8"));let i=await x.workspace.openTextDocument(x.Uri.file(o));await x.window.showTextDocument(i,{preview:!1}),b("mcp_open_file",{which:r,path:o})}catch(r){b("mcp_open_file_failed",{message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:M("ext.mcpOpenFailed",{msg:String(r&&r.message||r)})})}catch{}}return}if(s.type==="open_webdav_file"){try{let r=await mD();b("webdav_open_file",{path:r})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="market_install"){await SD(t,s);return}if(s.type==="market_refresh"){sm("refresh");return}if(s.type==="set_range"){Un=Xe.RANGES.some(function(o){return o.key===String(s.range||"")})?String(s.range):"7d";try{t.postMessage(_a(Un))}catch{}b("usage_dashboard_range",{range:Un});return}if(s.type==="refresh"){try{t.postMessage(_a(Un))}catch{}b("usage_dashboard_refresh",{range:Un});return}if(s.type==="open_usage_dir"){try{P.mkdirSync(yr,{recursive:!0,mode:448}),await x.commands.executeCommand("revealFileInOS",x.Uri.file(yr)),b("usage_dashboard_open_dir",{ok:!0})}catch(r){b("usage_dashboard_open_dir",{ok:!1,message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:M("ext.openDirFailed",{msg:String(r&&r.message||r)})})}catch{}}return}}})}function $c(){let t=Za(),e;try{e=Je.inventory()}catch(r){b("plugins_status_failed",{message:r.message}),e={dirs:[],errors:[],plugins:[],pending:[]}}let n=[];try{n=Je.trashList()}catch(r){b("plugins_trash_failed",{message:r.message})}let s=[];try{s=Je.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){b("plugins_themes_failed",{message:r.message})}return{type:"plugins",enabled:t.enabled,maxTools:t.maxTools,theme:t.theme,themes:s,root:L(),dirs:e.dirs||[],globalDir:Je.globalDir(),trashDir:Je.trashDir(),plugins:e.plugins||[],pending:e.pending||[],trash:n,errors:e.errors||[]}}function Xc(t){if(Qn)try{Qn.postMessage($c())}catch(e){b("plugins_push_failed",{message:e.message,reason:t||"push"})}}var Xv=8e3,Vv=["fsRead","fsWrite","shell","net","env"],wD={fsRead:"market.permFsRead",fsWrite:"market.permFsWrite",shell:"market.permShell",net:"market.permNet",env:"market.permEnv"};function bD(){let t={};try{let e=Je.inventory();(e.plugins||[]).concat(e.pending||[]).forEach(function(n){n&&n.name&&(t[n.name]=String(n.version||""))})}catch(e){b("market_inventory_failed",{message:e.message})}try{Px.configure({root:L()}),Px.installed().forEach(function(e){e&&e.name&&(t[e.name]=String(e.version||""))})}catch(e){b("market_skills_failed",{message:e.message})}return t}function kD(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:Vv.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 Yv(){let t=bD(),e=await xD();return{type:"market",source:e.source,offline:e.offline,error:e.error,entries:(e.entries||[]).map(function(n){let s=_S.verifyEntry(n,e.keys||{});return kD(n,t,s)})}}async function xD(){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:Xv});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){b("market_offline_read_failed",{message:a.message})}}return{entries:t,keys:e,source:n,offline:s,error:r}}function sm(t){Qn&&Yv().then(function(e){try{Qn.postMessage(e)}catch(n){b("market_push_failed",{message:n.message,reason:t||"push"})}},function(e){b("market_payload_failed",{message:String(e&&e.message||e),reason:t||"push"})})}function rm(){let t;try{t=Se.status()}catch{t={servers:[],tools:[],configPaths:[],configErrors:[]}}let e;try{e=Se.configListing()}catch(u){b("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=L(),i="",a="";try{i=Se.configPathFor("global")}catch{i=""}if(r&&r.length)try{Se.configure({root:o}),a=Se.configPathFor("project")}catch{a=""}let l=0,c=0;try{l=Se.toolDefs({}).length}catch{l=0}try{c=Se.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 pS(t){if(Qn)try{Qn.postMessage(rm())}catch(e){b("mcp_push_failed",{message:String(e&&e.message||e),reason:t||"push"})}}async function SD(t,e){let n=String(e.name||"").trim(),s=function(k){try{t.postMessage(Object.assign({type:"market_result",action:"install"},k))}catch(T){b("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 k=await Ps.readRegistryRaw({registry:i,timeoutMs:Xv});k.ok&&(r=k)}catch(k){b("market_install_read_failed",{message:String(k&&k.message||k)})}if(!r){let k=Ps.bundledRegistryPath();if(k&&k!==i)try{let T=await Ps.readRegistryRaw({registry:k});T.ok&&(r=T,o=!0)}catch(T){b("market_install_offline_failed",{message:String(T&&T.message||T)})}}if(!r){s({ok:!1,code:"registry",message:M("ext.marketRegistryFailed")});return}let l=(r.registry&&r.registry.entries||[]).find(function(k){return k&&k.name===n});if(!l){s({ok:!1,code:"not-found",message:M("ext.marketNotFound",{name:n})});return}let c=_S.verifyEntry(l,r.keys||{});if(!c.ok){s({ok:!1,code:"untrusted",message:M("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:M("ext.marketRevoked",{name:n})});return}if(u==="flagged"){s({ok:!1,code:"flagged",message:M("ext.marketFlagged",{name:n})});return}let d=Vv.filter(function(k){return(l.permissions||{})[k]===!0}),f=(l.tools||[]).map(function(k){return k.name}),p=d.length?d.map(function(k){return"\xB7 "+M(wD[k])}).join(`
957
+ `,"utf8"));let i=await x.workspace.openTextDocument(x.Uri.file(o));await x.window.showTextDocument(i,{preview:!1}),b("mcp_open_file",{which:r,path:o})}catch(r){b("mcp_open_file_failed",{message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:M("ext.mcpOpenFailed",{msg:String(r&&r.message||r)})})}catch{}}return}if(s.type==="open_webdav_file"){try{let r=await mD();b("webdav_open_file",{path:r})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="market_install"){await SD(t,s);return}if(s.type==="market_refresh"){sm("refresh");return}if(s.type==="set_range"){Un=Xe.RANGES.some(function(o){return o.key===String(s.range||"")})?String(s.range):"7d";try{t.postMessage(_a(Un))}catch{}b("usage_dashboard_range",{range:Un});return}if(s.type==="refresh"){try{t.postMessage(_a(Un))}catch{}b("usage_dashboard_refresh",{range:Un});return}if(s.type==="open_usage_dir"){try{P.mkdirSync(wr,{recursive:!0,mode:448}),await x.commands.executeCommand("revealFileInOS",x.Uri.file(wr)),b("usage_dashboard_open_dir",{ok:!0})}catch(r){b("usage_dashboard_open_dir",{ok:!1,message:String(r&&r.message||r)});try{t.postMessage({type:"notice",message:M("ext.openDirFailed",{msg:String(r&&r.message||r)})})}catch{}}return}}})}function $c(){let t=Za(),e;try{e=Je.inventory()}catch(r){b("plugins_status_failed",{message:r.message}),e={dirs:[],errors:[],plugins:[],pending:[]}}let n=[];try{n=Je.trashList()}catch(r){b("plugins_trash_failed",{message:r.message})}let s=[];try{s=Je.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){b("plugins_themes_failed",{message:r.message})}return{type:"plugins",enabled:t.enabled,maxTools:t.maxTools,theme:t.theme,themes:s,root:L(),dirs:e.dirs||[],globalDir:Je.globalDir(),trashDir:Je.trashDir(),plugins:e.plugins||[],pending:e.pending||[],trash:n,errors:e.errors||[]}}function Xc(t){if(Qn)try{Qn.postMessage($c())}catch(e){b("plugins_push_failed",{message:e.message,reason:t||"push"})}}var Xv=8e3,Vv=["fsRead","fsWrite","shell","net","env"],wD={fsRead:"market.permFsRead",fsWrite:"market.permFsWrite",shell:"market.permShell",net:"market.permNet",env:"market.permEnv"};function bD(){let t={};try{let e=Je.inventory();(e.plugins||[]).concat(e.pending||[]).forEach(function(n){n&&n.name&&(t[n.name]=String(n.version||""))})}catch(e){b("market_inventory_failed",{message:e.message})}try{Px.configure({root:L()}),Px.installed().forEach(function(e){e&&e.name&&(t[e.name]=String(e.version||""))})}catch(e){b("market_skills_failed",{message:e.message})}return t}function kD(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:Vv.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 Yv(){let t=bD(),e=await xD();return{type:"market",source:e.source,offline:e.offline,error:e.error,entries:(e.entries||[]).map(function(n){let s=_S.verifyEntry(n,e.keys||{});return kD(n,t,s)})}}async function xD(){let t=[],e={},n="",s=!1,r="",o=process.env.LUBAN_REGISTRY||js.DEFAULT_REGISTRY_URL;try{let i=await js.readRegistryRaw({registry:o,timeoutMs:Xv});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=js.bundledRegistryPath();if(i&&i!==o)try{let a=await js.readRegistryRaw({registry:i});a.ok&&a.registry&&(t=a.registry.entries||[],e=a.keys||{},n=i,s=!0)}catch(a){b("market_offline_read_failed",{message:a.message})}}return{entries:t,keys:e,source:n,offline:s,error:r}}function sm(t){Qn&&Yv().then(function(e){try{Qn.postMessage(e)}catch(n){b("market_push_failed",{message:n.message,reason:t||"push"})}},function(e){b("market_payload_failed",{message:String(e&&e.message||e),reason:t||"push"})})}function rm(){let t;try{t=Se.status()}catch{t={servers:[],tools:[],configPaths:[],configErrors:[]}}let e;try{e=Se.configListing()}catch(u){b("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=L(),i="",a="";try{i=Se.configPathFor("global")}catch{i=""}if(r&&r.length)try{Se.configure({root:o}),a=Se.configPathFor("project")}catch{a=""}let l=0,c=0;try{l=Se.toolDefs({}).length}catch{l=0}try{c=Se.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 pS(t){if(Qn)try{Qn.postMessage(rm())}catch(e){b("mcp_push_failed",{message:String(e&&e.message||e),reason:t||"push"})}}async function SD(t,e){let n=String(e.name||"").trim(),s=function(k){try{t.postMessage(Object.assign({type:"market_result",action:"install"},k))}catch(T){b("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||js.DEFAULT_REGISTRY_URL;try{let k=await js.readRegistryRaw({registry:i,timeoutMs:Xv});k.ok&&(r=k)}catch(k){b("market_install_read_failed",{message:String(k&&k.message||k)})}if(!r){let k=js.bundledRegistryPath();if(k&&k!==i)try{let T=await js.readRegistryRaw({registry:k});T.ok&&(r=T,o=!0)}catch(T){b("market_install_offline_failed",{message:String(T&&T.message||T)})}}if(!r){s({ok:!1,code:"registry",message:M("ext.marketRegistryFailed")});return}let l=(r.registry&&r.registry.entries||[]).find(function(k){return k&&k.name===n});if(!l){s({ok:!1,code:"not-found",message:M("ext.marketNotFound",{name:n})});return}let c=_S.verifyEntry(l,r.keys||{});if(!c.ok){s({ok:!1,code:"untrusted",message:M("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:M("ext.marketRevoked",{name:n})});return}if(u==="flagged"){s({ok:!1,code:"flagged",message:M("ext.marketFlagged",{name:n})});return}let d=Vv.filter(function(k){return(l.permissions||{})[k]===!0}),f=(l.tools||[]).map(function(k){return k.name}),p=d.length?d.map(function(k){return"\xB7 "+M(wD[k])}).join(`
958
958
  `):M("market.permNone"),m=M("ext.marketConfirm",{name:l.displayName||n,version:l.version||"",perms:p,tools:f.length?f.join("\u3001"):M("market.noTools"),repo:l.repo||"",review:u})+(e.replace===!0?`
959
959
 
960
- `+M("market.replaceConfirm",{name:l.displayName||n}):"");if(await x.window.showWarningMessage(m,{modal:!0},M("ext.marketInstallYes"))!==M("ext.marketInstallYes")){s({ok:!1,code:"cancelled",cancelled:!0});return}let y=await Ps.installEntry(l,{root:L(),replace:e.replace===!0,target:"global"});if(b("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 Wo("market_install"),sm("after_market_install")}async function Wo(t){try{await Je.reload({keepDisabled:!0})}catch(e){b("plugins_reload_failed",{message:e.message,action:t})}Xc("after_"+(t||"change")),Tm();try{let e=Je.status();x.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}}function Vc(t,e){let n=Lm(e);if(Zp=n,Mt){Mt.reveal();try{Mt.webview.postMessage({type:"activate",tab:n})}catch{}return Mt}let s=x.window.createWebviewPanel("luban.hub",M("ext.hubPanelTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[so(t.extensionUri)]});s.webview.html=yD(s.webview,t.extensionUri,n),Mt=s;let r=$v(s.webview,t);return s.onDidDispose(function(){Mt=null,Qn===s.webview&&(Qn=null),r.dispose(),b("hub_disposed",{ok:!0})}),b("hub_opened",{ok:!0,tab:n}),s}function zm(t){return Vc(t,"settings")}function Zv(t){return Vc(t,"usage")}function vD(){if(Mt)try{Mt.webview.postMessage(_a(Un))}catch(t){b("usage_dashboard_push_failed",{message:String(t&&t.message||t)})}}var _D=D.join(it.homedir(),".luban","sessions"),ke=null,de=new Map,Pe="",Ct=new Map,ms=new Map,xr=0,rt=new Map,Tn=new Map,we=[],Gm="",Yc=!1;function Ie(){return Pe&&de.get(Pe)||null}function no(t){if(t){let e=Ct.get(t);if(e){let n=de.get(e);if(n)return n}}return Ie()}function TD(t,e){let n=e&&de.has(String(e))?String(e):"";Ct.forEach(function(s,r){s===t&&(n?Ct.set(r,n):Ct.delete(r))})}function Qv(t,e){if(TD(t,e),Pe!==t)return;let n=[Me&&Me.webview,fe&&fe.webview];for(let r=0;r<n.length;r++){let o=n[r];if(!o)continue;let i=Ct.get(o);if(i&&de.has(i)){Pe=i;return}}if(e&&de.has(String(e))){Pe=String(e);return}let s=we.filter(function(r){return r!==t&&de.has(r)});Pe=s.length?s[s.length-1]:""}function e_(t){let e=we.filter(function(n){return n!==t&&de.has(n)});return e.length?e[e.length-1]:""}function ei(t){let e=String(t??"");return e&&de.has(e)?de.get(e):null}function qn(t,e){let n=t&&t.sessionId?String(t.sessionId):"";return n?ei(n):no(e)}function t_(){let t=Ie();if(t)return t;let e=nt().create(L());return de.set(e.id,e),ms.set(e.id,++xr),Pe=e.id,we.indexOf(e.id)<0&&we.push(e.id),e}function n_(){let t=Yn.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):Yn.DEFAULT_MAX_SESSIONS}function Vr(){let t=Object.assign({},Yr.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 Zc(){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 mS(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 om(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("fs.allowOutsideWorkspace")}catch{}return t!==!1}function Qc(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("review.autoOpenDiff")}catch{}return t!==!1}function s_(){let t=!1;try{t=x.workspace.getConfiguration("luban").get("review.autoKeep")}catch{}return t===!0}function Jm(t){let e=t||L(),n="";try{n=String(SS("git status --porcelain",{cwd:e,timeout:4e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]})||"")}catch{return{ok:!1,reason:"not-git"}}let s=n.split(`
961
- `).map(function(r){return r.trim()}).filter(Boolean);return s.length?{ok:!1,reason:"dirty",files:s.length}:{ok:!0}}function r_(){let t=pr.DEFAULTS.maxFiles;try{t=x.workspace.getConfiguration("luban").get("search.maxFiles")}catch{}let e=Number(t);return isFinite(e)&&e>=100?Math.floor(e):pr.DEFAULTS.maxFiles}var eu=new Map;function tu(t){return t?{put:function(e,n,s){return t.put(e,n,s)},summarize:Sn.summarize,newId:Sn.newId,toolPlaceholder:Sn.toolPlaceholder,memoryDigestBlock:Sn.memoryDigestBlock}:null}function o_(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=eu.get(n);return s||(s=Sn.createStore(),eu.set(n,s)),s}function MD(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=eu.get(n);if(s)try{s.clear()}catch{}eu.delete(n)}function Cs(t,e,n){let s=Vr();if(!s.enabled)return{messages:[],turns:0,chars:0,dropped:0,enabled:!1,spilledTurns:0,spillDigest:"",spillIds:[]};let r=ft(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=yn.profile(o,{mode:Dm()});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?tu(a):{summarize:Sn.summarize,newId:Sn.newId,memoryDigestBlock:Sn.memoryDigestBlock}}return delete i.spillStore,Yr.build(t,Object.assign(s,i))}function nt(){return ke||(ke=Yn.newStore(_D),ke.setMax(n_())),ke}function du(t){let e=t||Ie();return e?e.title||Yn.titleOf(e.items,e.createdAt,M("store.untitled")):""}function CD(t){return(t||[]).map(function(e){if(!e||e.ctx==null)return e;let n=Object.assign({},e);return delete n.ctx,n})}var im=20,hS=8e3,gS=0;function $m(){return gS++,"q"+Date.now().toString(36)+"-"+gS.toString(36)}function fu(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(Te.validateEntry).filter(Boolean).slice(0,Te.MAX_IMAGES);return{id:t.id?String(t.id):$m(),text:e.length>hS?e.slice(0,hS):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 Cn(t){let e=t||Ie();if(!e)return[];if(Array.isArray(e.queue)||(e.queue=[]),e.queue.length){let n=[];for(let s of e.queue){let r=fu(s);r&&n.push(r)}n.length!==e.queue.length&&(e.queue=n)}return e.queue}function i_(t){let e=t||Ie();return!!(e&&e.queuePaused&&Cn(e).length)}function Xm(t){if(!t)return t;if(!Array.isArray(t.queue))t.queue=[];else{let e=[];for(let n of t.queue){let s=fu(n);s&&e.push(s)}t.queue=e}return t.queuePaused=!!t.queuePaused&&t.queue.length>0,t}function a_(t){let e=t||Ie();return{type:"queue",id:e?e.id:"",items:Cn(e).slice(),paused:i_(e),max:im,at:Date.now()}}function fs(t){let e=t||Ie();e&&qe(a_(e))}function yS(t,e){let n=t||t_(),s=Cn(n);if(s.length>=im)return{ok:!1,error:M("ext.queueFull",{n:im})};let r=fu({id:$m(),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:eh(n,e&&e.images,e&&e.modelKey)});return r?(s.push(r),n.queuePaused=!1,bt(n),fs(n),b("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:M("ext.queueEmpty")}}function AD(t,e){let n=t||Ie();if(!n)return{ok:!1,size:0};let s=Cn(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),bt(n),fs(n),b("queue_remove",{id:n.id,size:s.length,removed:String(e||"")}),{ok:!0,size:s.length})}function OD(t){let e=t||Ie();if(!e)return{ok:!0,size:0};let n=Cn(e).length;return e.queue=[],e.queuePaused=!1,bt(e),fs(e),b("queue_clear",{id:e.id,removed:n}),{ok:!0,size:0,removed:n}}function wS(t){let e=t||Ie();return!e||!Cn(e).length?!1:(e.queuePaused=!0,!0)}function ED(t,e){let n=t||Ie();if(!n)return null;let s=Cn(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 PD(t,e,n,s){let r=t||Ie();if(!r)return{ok:!1,error:M("ext.queueMissing")};let o=ED(r,e);return o?(r.queuePaused=!1,bt(r),fs(r),b("queue_run_now",{id:r.id,itemId:o.id,size:Cn(r).length}),rt.has(r.id)?(nu(r.id),{ok:!0,deferred:!0,item:o}):(Qm(r,n,s||"queue_run_now"),{ok:!0,deferred:!1,item:o})):{ok:!1,error:M("ext.queueMissing")}}function Vm(t){let e=t||t_();return Xm(e),{type:"session",id:e.id,title:du(e),createdAt:e.createdAt,updatedAt:e.updatedAt,root:e.root,modelKey:e.modelKey||"",mode:e.mode||"",items:CD(e.items),queue:Cn(e).slice(),queuePaused:i_(e),running:rt.has(e.id),at:Date.now()}}function xn(){nt();let t=ke.list(),e=new Set(t.map(function(s){return s.id})),n=[];for(let s of de.values()){if(e.has(s.id))continue;let r=Yn.metaOf(s);r.title=du(s)||r.title,n.push(r)}return{type:"session_list",current:Pe||"",root:L(),sessions:n.concat(t),at:Date.now()}}function l_(t,e,n,s){nt();let r=String(t??"").trim(),o=e==="all"?"all":"workspace",i=Gj.search(r?ke.list(o,n||L()):[],r,{load:function(a){try{return nt().load(a)}catch{return null}}});return b("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||L(),results:i.results,scanned:i.scanned,matched:i.matched,truncated:i.truncated,ms:i.ms}}function bt(t){let e=t||Ie();if(e){let n=Tn.get(e.id);n&&(clearTimeout(n),Tn.delete(e.id))}if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return nt().save(e),e}catch(n){return b("session_save_failed",{message:n.message,id:e.id}),null}}function jD(t){let e=t||Ie();if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return nt().saveAsync(e),e}catch(n){return b("session_save_failed",{message:n.message,id:e.id}),null}}function Ym(t){let e=t||Ie();if(!e)return;let n=Tn.get(e.id);n&&clearTimeout(n),Tn.set(e.id,setTimeout(function(){if(Tn.delete(e.id),!!jD(e))try{qe(xn())}catch{}},1500))}function It(t,e){let n=e||Ie();return n?(nt().append(n,t),Ym(n),n):null}function am(t,e,n){return!t||t.t!=="user"?null:(t.ctx=String(e??""),Ym(n),t)}function Zm(t){let e=t||Ie();if(!e)return null;let n=e.items||[];return n.length?n[n.length-1]:null}function ND(t,e){if(!(!t||!t.type))if(t.type==="tool"){if(t.phase==="start")return;It({t:"tool",name:t.name,path:t.path,ok:t.ok,result:t.result},e)}else if(t.type==="todos")It({t:"todos",items:t.items||[]},e);else if(t.type==="ask_question")t.answers&&It({t:"ask_question",id:t.id,title:t.title||"",questions:t.questions||[],answers:t.answers},e);else if(t.type==="sources")It({t:"sources",items:t.items,query:t.query},e);else if(t.type==="references")It({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),It(o,e)}let s=Zm(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),It(s,e)}t.usage&&It(Object.assign({t:"usage"},t.usage),e),t.summary&&It({t:"summary",text:t.summary},e)}else t.type==="error"&&It({t:"error",message:t.message},e)}var Oc=D.join(it.homedir(),".luban","plans"),bS=200*1024,ID=32;function ka(t){return(t<10?"0":"")+t}function DD(t){let e=t||new Date;return e.getFullYear()+ka(e.getMonth()+1)+ka(e.getDate())+"-"+ka(e.getHours())+ka(e.getMinutes())+ka(e.getSeconds())}function c_(t){return String(t??"").replace(/[\\/:*?"<>|\u0000-\u001f]+/g," ").replace(/[:/\*?“”"<>|]/g," ").replace(/\s+/g," ").trim().slice(0,ID).trim()||"plan"}function xa(t,e){return t+": "+JSON.stringify(String(e??""))}function FD(t,e){let n=e||{},s=String(t??"").replace(/\s+$/,"")+`
960
+ `+M("market.replaceConfirm",{name:l.displayName||n}):"");if(await x.window.showWarningMessage(m,{modal:!0},M("ext.marketInstallYes"))!==M("ext.marketInstallYes")){s({ok:!1,code:"cancelled",cancelled:!0});return}let y=await js.installEntry(l,{root:L(),replace:e.replace===!0,target:"global"});if(b("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 Wo("market_install"),sm("after_market_install")}async function Wo(t){try{await Je.reload({keepDisabled:!0})}catch(e){b("plugins_reload_failed",{message:e.message,action:t})}Xc("after_"+(t||"change")),Tm();try{let e=Je.status();x.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}}function Vc(t,e){let n=Lm(e);if(Zp=n,Mt){Mt.reveal();try{Mt.webview.postMessage({type:"activate",tab:n})}catch{}return Mt}let s=x.window.createWebviewPanel("luban.hub",M("ext.hubPanelTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[so(t.extensionUri)]});s.webview.html=yD(s.webview,t.extensionUri,n),Mt=s;let r=$v(s.webview,t);return s.onDidDispose(function(){Mt=null,Qn===s.webview&&(Qn=null),r.dispose(),b("hub_disposed",{ok:!0})}),b("hub_opened",{ok:!0,tab:n}),s}function zm(t){return Vc(t,"settings")}function Zv(t){return Vc(t,"usage")}function vD(){if(Mt)try{Mt.webview.postMessage(_a(Un))}catch(t){b("usage_dashboard_push_failed",{message:String(t&&t.message||t)})}}var _D=D.join(it.homedir(),".luban","sessions"),ke=null,de=new Map,Pe="",Ct=new Map,hs=new Map,Sr=0,rt=new Map,Tn=new Map,we=[],Gm="",Yc=!1;function Ie(){return Pe&&de.get(Pe)||null}function no(t){if(t){let e=Ct.get(t);if(e){let n=de.get(e);if(n)return n}}return Ie()}function TD(t,e){let n=e&&de.has(String(e))?String(e):"";Ct.forEach(function(s,r){s===t&&(n?Ct.set(r,n):Ct.delete(r))})}function Qv(t,e){if(TD(t,e),Pe!==t)return;let n=[Me&&Me.webview,fe&&fe.webview];for(let r=0;r<n.length;r++){let o=n[r];if(!o)continue;let i=Ct.get(o);if(i&&de.has(i)){Pe=i;return}}if(e&&de.has(String(e))){Pe=String(e);return}let s=we.filter(function(r){return r!==t&&de.has(r)});Pe=s.length?s[s.length-1]:""}function e_(t){let e=we.filter(function(n){return n!==t&&de.has(n)});return e.length?e[e.length-1]:""}function ei(t){let e=String(t??"");return e&&de.has(e)?de.get(e):null}function qn(t,e){let n=t&&t.sessionId?String(t.sessionId):"";return n?ei(n):no(e)}function t_(){let t=Ie();if(t)return t;let e=nt().create(L());return de.set(e.id,e),hs.set(e.id,++Sr),Pe=e.id,we.indexOf(e.id)<0&&we.push(e.id),e}function n_(){let t=Yn.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):Yn.DEFAULT_MAX_SESSIONS}function Vr(){let t=Object.assign({},Yr.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 Zc(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("plan.strictReadOnly")}catch{}return t!==!1}function Ns(t,e){return t==="explore"?!0:t==="plan"&&e!==!1}function mS(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 om(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("fs.allowOutsideWorkspace")}catch{}return t!==!1}function Qc(){let t=!0;try{t=x.workspace.getConfiguration("luban").get("review.autoOpenDiff")}catch{}return t!==!1}function s_(){let t=!1;try{t=x.workspace.getConfiguration("luban").get("review.autoKeep")}catch{}return t===!0}function Jm(t){let e=t||L(),n="";try{n=String(SS("git status --porcelain",{cwd:e,timeout:4e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]})||"")}catch{return{ok:!1,reason:"not-git"}}let s=n.split(`
961
+ `).map(function(r){return r.trim()}).filter(Boolean);return s.length?{ok:!1,reason:"dirty",files:s.length}:{ok:!0}}function r_(){let t=mr.DEFAULTS.maxFiles;try{t=x.workspace.getConfiguration("luban").get("search.maxFiles")}catch{}let e=Number(t);return isFinite(e)&&e>=100?Math.floor(e):mr.DEFAULTS.maxFiles}var eu=new Map;function tu(t){return t?{put:function(e,n,s){return t.put(e,n,s)},summarize:Sn.summarize,newId:Sn.newId,toolPlaceholder:Sn.toolPlaceholder,memoryDigestBlock:Sn.memoryDigestBlock}:null}function o_(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=eu.get(n);return s||(s=Sn.createStore(),eu.set(n,s)),s}function MD(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=eu.get(n);if(s)try{s.clear()}catch{}eu.delete(n)}function As(t,e,n){let s=Vr();if(!s.enabled)return{messages:[],turns:0,chars:0,dropped:0,enabled:!1,spilledTurns:0,spillDigest:"",spillIds:[]};let r=ft(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=yn.profile(o,{mode:Dm()});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?tu(a):{summarize:Sn.summarize,newId:Sn.newId,memoryDigestBlock:Sn.memoryDigestBlock}}return delete i.spillStore,Yr.build(t,Object.assign(s,i))}function nt(){return ke||(ke=Yn.newStore(_D),ke.setMax(n_())),ke}function du(t){let e=t||Ie();return e?e.title||Yn.titleOf(e.items,e.createdAt,M("store.untitled")):""}function CD(t){return(t||[]).map(function(e){if(!e||e.ctx==null)return e;let n=Object.assign({},e);return delete n.ctx,n})}var im=20,hS=8e3,gS=0;function $m(){return gS++,"q"+Date.now().toString(36)+"-"+gS.toString(36)}function fu(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(Te.validateEntry).filter(Boolean).slice(0,Te.MAX_IMAGES);return{id:t.id?String(t.id):$m(),text:e.length>hS?e.slice(0,hS):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 Cn(t){let e=t||Ie();if(!e)return[];if(Array.isArray(e.queue)||(e.queue=[]),e.queue.length){let n=[];for(let s of e.queue){let r=fu(s);r&&n.push(r)}n.length!==e.queue.length&&(e.queue=n)}return e.queue}function i_(t){let e=t||Ie();return!!(e&&e.queuePaused&&Cn(e).length)}function Xm(t){if(!t)return t;if(!Array.isArray(t.queue))t.queue=[];else{let e=[];for(let n of t.queue){let s=fu(n);s&&e.push(s)}t.queue=e}return t.queuePaused=!!t.queuePaused&&t.queue.length>0,t}function a_(t){let e=t||Ie();return{type:"queue",id:e?e.id:"",items:Cn(e).slice(),paused:i_(e),max:im,at:Date.now()}}function ps(t){let e=t||Ie();e&&qe(a_(e))}function yS(t,e){let n=t||t_(),s=Cn(n);if(s.length>=im)return{ok:!1,error:M("ext.queueFull",{n:im})};let r=fu({id:$m(),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:eh(n,e&&e.images,e&&e.modelKey)});return r?(s.push(r),n.queuePaused=!1,bt(n),ps(n),b("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:M("ext.queueEmpty")}}function AD(t,e){let n=t||Ie();if(!n)return{ok:!1,size:0};let s=Cn(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),bt(n),ps(n),b("queue_remove",{id:n.id,size:s.length,removed:String(e||"")}),{ok:!0,size:s.length})}function OD(t){let e=t||Ie();if(!e)return{ok:!0,size:0};let n=Cn(e).length;return e.queue=[],e.queuePaused=!1,bt(e),ps(e),b("queue_clear",{id:e.id,removed:n}),{ok:!0,size:0,removed:n}}function wS(t){let e=t||Ie();return!e||!Cn(e).length?!1:(e.queuePaused=!0,!0)}function ED(t,e){let n=t||Ie();if(!n)return null;let s=Cn(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 PD(t,e,n,s){let r=t||Ie();if(!r)return{ok:!1,error:M("ext.queueMissing")};let o=ED(r,e);return o?(r.queuePaused=!1,bt(r),ps(r),b("queue_run_now",{id:r.id,itemId:o.id,size:Cn(r).length}),rt.has(r.id)?(nu(r.id),{ok:!0,deferred:!0,item:o}):(Qm(r,n,s||"queue_run_now"),{ok:!0,deferred:!1,item:o})):{ok:!1,error:M("ext.queueMissing")}}function Vm(t){let e=t||t_();return Xm(e),{type:"session",id:e.id,title:du(e),createdAt:e.createdAt,updatedAt:e.updatedAt,root:e.root,modelKey:e.modelKey||"",mode:e.mode||"",items:CD(e.items),queue:Cn(e).slice(),queuePaused:i_(e),running:rt.has(e.id),at:Date.now()}}function xn(){nt();let t=ke.list(),e=new Set(t.map(function(s){return s.id})),n=[];for(let s of de.values()){if(e.has(s.id))continue;let r=Yn.metaOf(s);r.title=du(s)||r.title,n.push(r)}return{type:"session_list",current:Pe||"",root:L(),sessions:n.concat(t),at:Date.now()}}function l_(t,e,n,s){nt();let r=String(t??"").trim(),o=e==="all"?"all":"workspace",i=Gj.search(r?ke.list(o,n||L()):[],r,{load:function(a){try{return nt().load(a)}catch{return null}}});return b("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||L(),results:i.results,scanned:i.scanned,matched:i.matched,truncated:i.truncated,ms:i.ms}}function bt(t){let e=t||Ie();if(e){let n=Tn.get(e.id);n&&(clearTimeout(n),Tn.delete(e.id))}if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return nt().save(e),e}catch(n){return b("session_save_failed",{message:n.message,id:e.id}),null}}function jD(t){let e=t||Ie();if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return nt().saveAsync(e),e}catch(n){return b("session_save_failed",{message:n.message,id:e.id}),null}}function Ym(t){let e=t||Ie();if(!e)return;let n=Tn.get(e.id);n&&clearTimeout(n),Tn.set(e.id,setTimeout(function(){if(Tn.delete(e.id),!!jD(e))try{qe(xn())}catch{}},1500))}function Dt(t,e){let n=e||Ie();return n?(nt().append(n,t),Ym(n),n):null}function am(t,e,n){return!t||t.t!=="user"?null:(t.ctx=String(e??""),Ym(n),t)}function Zm(t){let e=t||Ie();if(!e)return null;let n=e.items||[];return n.length?n[n.length-1]:null}function ND(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=Zm(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 Oc=D.join(it.homedir(),".luban","plans"),bS=200*1024,ID=32;function ka(t){return(t<10?"0":"")+t}function DD(t){let e=t||new Date;return e.getFullYear()+ka(e.getMonth()+1)+ka(e.getDate())+"-"+ka(e.getHours())+ka(e.getMinutes())+ka(e.getSeconds())}function c_(t){return String(t??"").replace(/[\\/:*?"<>|\u0000-\u001f]+/g," ").replace(/[:/\*?“”"<>|]/g," ").replace(/\s+/g," ").trim().slice(0,ID).trim()||"plan"}function xa(t,e){return t+": "+JSON.stringify(String(e??""))}function FD(t,e){let n=e||{},s=String(t??"").replace(/\s+$/,"")+`
962
962
  `;return["---",xa("title",c_(n.prompt)),xa("created",new Date().toISOString()),xa("workspace",n.workspace||""),xa("model",n.modelKey||""),xa("session",n.session||""),"---",""].join(`
963
963
  `)+s}function LD(t){let e=String(t??""),n=e.split(`
964
964
  `);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(`
965
- `).replace(/^\n+/,"");return e}function RD(){return[Oc].concat(wr.roots(it.homedir(),L()))}function u_(t){let e=String(t??"");if(!e||!/\.md$/i.test(e))return!1;let n=D.resolve(e),s=RD();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 d_(t,e){let n=e||{};try{P.mkdirSync(Oc,{recursive:!0,mode:448});let s=DD()+"-"+c_(n.prompt),r=D.join(Oc,s+".md");for(let i=2;P.existsSync(r)&&i<1e3;i++)r=D.join(Oc,s+"-"+i+".md");let o=r+".tmp";return P.writeFileSync(o,FD(t,n),{mode:384}),P.renameSync(o,r),b("plan_file_write",{file:r,chars:String(t||"").length}),r}catch(s){return b("plan_file_write_failed",{message:s.message}),""}}function qD(t){if(!u_(t))return b("plan_file_read_rejected",{path:String(t??""),reason:"\u8DEF\u5F84\u4E0D\u5728\u8BA1\u5212\u76EE\u5F55\u4E0B\u6216\u4E0D\u662F .md"}),"";try{let e=P.statSync(t);return e.isFile()?e.size>bS?(b("plan_file_read_rejected",{path:t,reason:"\u8D85\u8FC7 "+bS+" \u5B57\u8282"}),""):LD(P.readFileSync(t,"utf8")):(b("plan_file_read_rejected",{path:t,reason:"\u4E0D\u662F\u6587\u4EF6"}),"")}catch(e){return b("plan_file_read_rejected",{path:t,reason:e.message}),""}}async function f_(t){if(!u_(t))throw new Error(M("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 p_(t,e,n,s){try{let r="";try{r=L()||""}catch{r=""}vn.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 m_(t){try{vn.progress(t)}catch{}}function h_(t){try{vn.round(t)}catch{}}function g_(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 BD(t,e){return function(n){if(ms.get(e.id)!==t||!de.has(e.id))return;ND(n,e),n.sid=e.id;try{vn.applyMessage(n,{source:"extension",sessionId:e.id})}catch{}let s=[Me&&Me.webview,fe&&fe.webview];for(let r of s)if(r)try{r.postMessage(n)}catch{}}}function pu(t,e,n){let s=n||Ie();s&&(t&&(s.modelKey=String(t)),e&&(s.mode=String(e)))}function nu(t){let e=String(t??""),n=rt.get(e);try{let s=xe.stopAll(e);s&&s.stopped&&b("async_cmd_stop_all",{sessionId:e,stopped:s.stopped,reason:"cancel"})}catch{}if(!n)return!1;try{n.cts.cancel()}catch{}try{vn.get().sessionId===e&&vn.update({state:"idle",text:"\u5DF2\u505C\u6B62",tool:null})}catch{}return WD(e,"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),!0}var Vn=new Map,UD=0;function WD(t,e){let n=String(t??""),s="ask_question \u5DF2\u53D6\u6D88\uFF1A"+(e||"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),r=[];Vn.forEach(function(o,i){(!n||o.sessId===n)&&r.push(i)});for(let o=0;o<r.length;o++){let i=r[o],a=Vn.get(i);if(a){Vn.delete(i);try{a.reject(new Error(s))}catch{}}}}function KD(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 HD(t){let e=KD(t),n=M("ext.askGoChoose");Promise.resolve(x.window.showInformationMessage(M("ext.askNeeded",{detail:e}),n)).then(function(s){if(s===n){try{Me&&Me.reveal()}catch{}return x.commands.executeCommand("luban.focusView")}}).catch(function(){})}function y_(t,e,n){let s=t&&t.id?String(t.id):"";return async function(o){let i="ask_"+ ++UD+"_"+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 HD(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};Vn.set(i,u);let d=function(){Vn.has(i)&&(Vn.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 w_(t,e,n){let s=String(t??""),r=Vn.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}}Vn.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 Aa(t,e,n,s){let r=qn(e,n);if(!r||rt.has(r.id))return!1;let o=new x.CancellationTokenSource,i=ms.get(r.id)||0,a={cts:o,seq:i,sess:r};rt.set(r.id,a);let l=BD(i,r),c=Date.now(),u={last:null,done:null},d=function(m){return m&&m.usage&&(m.type==="usage_live"?u.last=m.usage:m.type==="done"&&(u.done=m.usage)),l(m)},f={modelKey:e&&e.modelKey||si(),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 zD(e,p):await GD(e,p)}catch(m){if(l({type:"error",message:m.message}),!de.has(r.id))try{P.existsSync(nt().fileOf(r.id))&&(nt().append(r,{t:"error",message:M("ext.cancelled")}),nt().save(r))}catch{}b("webview_error",{source:s,message:m.message})}finally{rt.get(r.id)===a&&rt.delete(r.id),o.dispose(),u.done?Vp(f,u.done):u.last&&Vp(f,Object.assign({},u.last,{partial:!0})),de.get(r.id)===r&&(bt(r),qe({type:"turn_end",id:r.id}),Qm(r,n,s==="queue"?"queue":s))}return!0}function Qm(t,e,n){let s=t||Ie();if(!s||rt.has(s.id))return!1;let r=Cn(s);if(!r.length||s.queuePaused)return fs(s),!1;let o=r.shift();bt(s),fs(s);let i=e||tn()||kt;return qe({type:"queue_start",id:s.id,item:o}),b("queue_start",{id:s.id,size:r.length,mode:o.mode,web:o.web}),Aa("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 b_(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 zD(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=!!t.autoAccept;pu(t.modelKey,"agent",i),p_(t.plan?String(t.plan).slice(0,80):"\u6267\u884C\u8BA1\u5212",i,t.modelKey,"agent");let l=o_(i),c=Cs(i&&i.items||[],t.modelKey,{resolveImage:As(i),spillStore:l});b("session_memory",{source:r,mode:"execute_plan",turns:c.turns,chars:c.chars,dropped:c.dropped,enabled:c.enabled,spilledTurns:c.spilledTurns||0}),bt(i);let u=t.planFile?qD(t.planFile):"",d=u||String(t.plan||"");if(!d.trim())throw new Error(M("ext.noPlan"));b("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()),m=t.planFile?wr.todosOfFile(t.planFile):[];m.length||(m=sn.parsePlanSteps(d)),m=sn.normalize(m);let h=b_(i,n,m),y=m.length?`
965
+ `).replace(/^\n+/,"");return e}function RD(){return[Oc].concat(br.roots(it.homedir(),L()))}function u_(t){let e=String(t??"");if(!e||!/\.md$/i.test(e))return!1;let n=D.resolve(e),s=RD();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 d_(t,e){let n=e||{};try{P.mkdirSync(Oc,{recursive:!0,mode:448});let s=DD()+"-"+c_(n.prompt),r=D.join(Oc,s+".md");for(let i=2;P.existsSync(r)&&i<1e3;i++)r=D.join(Oc,s+"-"+i+".md");let o=r+".tmp";return P.writeFileSync(o,FD(t,n),{mode:384}),P.renameSync(o,r),b("plan_file_write",{file:r,chars:String(t||"").length}),r}catch(s){return b("plan_file_write_failed",{message:s.message}),""}}function qD(t){if(!u_(t))return b("plan_file_read_rejected",{path:String(t??""),reason:"\u8DEF\u5F84\u4E0D\u5728\u8BA1\u5212\u76EE\u5F55\u4E0B\u6216\u4E0D\u662F .md"}),"";try{let e=P.statSync(t);return e.isFile()?e.size>bS?(b("plan_file_read_rejected",{path:t,reason:"\u8D85\u8FC7 "+bS+" \u5B57\u8282"}),""):LD(P.readFileSync(t,"utf8")):(b("plan_file_read_rejected",{path:t,reason:"\u4E0D\u662F\u6587\u4EF6"}),"")}catch(e){return b("plan_file_read_rejected",{path:t,reason:e.message}),""}}async function f_(t){if(!u_(t))throw new Error(M("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 p_(t,e,n,s){try{let r="";try{r=L()||""}catch{r=""}vn.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 m_(t){try{vn.progress(t)}catch{}}function h_(t){try{vn.round(t)}catch{}}function g_(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 BD(t,e){return function(n){if(hs.get(e.id)!==t||!de.has(e.id))return;ND(n,e),n.sid=e.id;try{vn.applyMessage(n,{source:"extension",sessionId:e.id})}catch{}let s=[Me&&Me.webview,fe&&fe.webview];for(let r of s)if(r)try{r.postMessage(n)}catch{}}}function pu(t,e,n){let s=n||Ie();s&&(t&&(s.modelKey=String(t)),e&&(s.mode=String(e)))}function nu(t){let e=String(t??""),n=rt.get(e);try{let s=xe.stopAll(e);s&&s.stopped&&b("async_cmd_stop_all",{sessionId:e,stopped:s.stopped,reason:"cancel"})}catch{}if(!n)return!1;try{n.cts.cancel()}catch{}try{vn.get().sessionId===e&&vn.update({state:"idle",text:"\u5DF2\u505C\u6B62",tool:null})}catch{}return WD(e,"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),!0}var Vn=new Map,UD=0;function WD(t,e){let n=String(t??""),s="ask_question \u5DF2\u53D6\u6D88\uFF1A"+(e||"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),r=[];Vn.forEach(function(o,i){(!n||o.sessId===n)&&r.push(i)});for(let o=0;o<r.length;o++){let i=r[o],a=Vn.get(i);if(a){Vn.delete(i);try{a.reject(new Error(s))}catch{}}}}function KD(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 HD(t){let e=KD(t),n=M("ext.askGoChoose");Promise.resolve(x.window.showInformationMessage(M("ext.askNeeded",{detail:e}),n)).then(function(s){if(s===n){try{Me&&Me.reveal()}catch{}return x.commands.executeCommand("luban.focusView")}}).catch(function(){})}function y_(t,e,n){let s=t&&t.id?String(t.id):"";return async function(o){let i="ask_"+ ++UD+"_"+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 HD(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};Vn.set(i,u);let d=function(){Vn.has(i)&&(Vn.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 w_(t,e,n){let s=String(t??""),r=Vn.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=Cs.normalizeAnswers(r.normalized,e)}catch(a){return{ok:!1,error:a.message}}Vn.delete(s);let i=Cs.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 Aa(t,e,n,s){let r=qn(e,n);if(!r||rt.has(r.id))return!1;let o=new x.CancellationTokenSource,i=hs.get(r.id)||0,a={cts:o,seq:i,sess:r};rt.set(r.id,a);let l=BD(i,r),c=Date.now(),u={last:null,done:null},d=function(m){return m&&m.usage&&(m.type==="usage_live"?u.last=m.usage:m.type==="done"&&(u.done=m.usage)),l(m)},f={modelKey:e&&e.modelKey||si(),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 zD(e,p):await GD(e,p)}catch(m){if(l({type:"error",message:m.message}),!de.has(r.id))try{P.existsSync(nt().fileOf(r.id))&&(nt().append(r,{t:"error",message:M("ext.cancelled")}),nt().save(r))}catch{}b("webview_error",{source:s,message:m.message})}finally{rt.get(r.id)===a&&rt.delete(r.id),o.dispose(),u.done?Vp(f,u.done):u.last&&Vp(f,Object.assign({},u.last,{partial:!0})),de.get(r.id)===r&&(bt(r),qe({type:"turn_end",id:r.id}),Qm(r,n,s==="queue"?"queue":s))}return!0}function Qm(t,e,n){let s=t||Ie();if(!s||rt.has(s.id))return!1;let r=Cn(s);if(!r.length||s.queuePaused)return ps(s),!1;let o=r.shift();bt(s),ps(s);let i=e||tn()||kt;return qe({type:"queue_start",id:s.id,item:o}),b("queue_start",{id:s.id,size:r.length,mode:o.mode,web:o.web}),Aa("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 b_(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 zD(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=!!t.autoAccept;pu(t.modelKey,"agent",i),p_(t.plan?String(t.plan).slice(0,80):"\u6267\u884C\u8BA1\u5212",i,t.modelKey,"agent");let l=o_(i),c=As(i&&i.items||[],t.modelKey,{resolveImage:Os(i),spillStore:l});b("session_memory",{source:r,mode:"execute_plan",turns:c.turns,chars:c.chars,dropped:c.dropped,enabled:c.enabled,spilledTurns:c.spilledTurns||0}),bt(i);let u=t.planFile?qD(t.planFile):"",d=u||String(t.plan||"");if(!d.trim())throw new Error(M("ext.noPlan"));b("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()),m=t.planFile?br.todosOfFile(t.planFile):[];m.length||(m=sn.parsePlanSteps(d)),m=sn.normalize(m);let h=b_(i,n,m),y=m.length?`
966
966
 
967
967
  `+sn.formatBlock(m)+`
968
968
  \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`:`
969
969
 
970
970
  \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`,k=(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
971
971
 
972
- `+d)+y,T=M(a?"cross.execPlanAccept":"cross.execPlan");It({t:"user",text:T,ctx:k,exec:!0},i);let g=Zm(i);bt(i),h.seedEmit();let v=y_(i,n,s.token);a&&cI();let w;try{w=await Is(k,{root:L(),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:h.state,onTodos:h.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){am(g,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:g_(n),onProgress:m_,onRound:h_,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))})}finally{a&&uI()}n({type:"done",text:w.text,think:w.reasoning||void 0,kind:"agent",usage:w.usage,rounds:jv(w),summary:M("ext.summary.exec",{n:w.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+Ev(w.stop)}),b("webview_execute_plan_done",{toolCalls:w.log.length,iters:w.iters,chars:w.text.length,todos:(h.state.items||[]).length,autoAccept:a})}function As(t){let e=t&&t.id?String(t.id):"";return function(n){return e?Te.readDataUrl(e,n):""}}function eh(t,e,n){let s=t&&t.id?String(t.id):"";if(!s||!Array.isArray(e)||!e.length)return[];let r=ft(n);if(!(r&&r.model&&r.model.vision===!0))return[];let o=[];for(let i of e.slice(0,Te.MAX_IMAGES)){if(!i||typeof i!="object")continue;let a=i.dataUrl?Te.saveImage(s,i.dataUrl):Te.validateEntry(i);a&&o.push(a)}return o}async function GD(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=US(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=eh(i,t.images,t.modelKey),d=Array.isArray(t.images)?t.images.filter(Boolean).length:0;u.length?b("ask_images",{source:r,n:u.length,bytes:u.reduce(function(S,_){return S+_.bytes},0)}):d&&(n({type:"img_blocked",n:d}),b("ask_images_blocked",{source:r,model:t.modelKey,n:d})),pu(t.modelKey,t.mode||"agent",i),p_(c,i,t.modelKey,t.mode||"agent");let f=o_(i),p=Cs(i&&i.items||[],t.modelKey,{resolveImage:As(i),spillStore:f});b("session_memory",{source:r,mode:t.mode||"agent",turns:p.turns,chars:p.chars,dropped:p.dropped,enabled:p.enabled,spilledTurns:p.spilledTurns||0}),It({t:"user",text:c,web:l,uid:t.uid?String(t.uid):void 0,images:u.length?u:void 0},i);let m=Zm(i);if(bt(i),t.mode==="chat"){let S=Xp(ft(t.modelKey)),_=Zr(c,L(),{window:S});_.refs.length&&n({type:"references",refs:_.refs});let C=bm(_.refs,L(),void 0,{sessionId:i&&i.id}),A=null;l&&(n({type:"searching",query:c.slice(0,128)}),A=await WS(c,ft(t.modelKey),{signal:s.token,onSearch:function(N){n({type:"sources",items:Lx(N.results),query:N.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"}),b("webview_chat_web",{source:r,query:A.query,results:A.results.length}));let F=Es.buildUserTurn({rule:l?UI:"",spillBlock:p.spillDigest||"",webBlock:A?A.block:"",autoBlock:C,refText:_.text});am(m,F,i);let K=u.map(function(N){return Te.readDataUrl(i.id,N)}),W=[{role:"system",content:BI}].concat(p.messages,[{role:"user",content:Te.toContent(F,K)}]),B=await Qo(W,t.modelKey,{onToken:N=>n({type:"token",text:N}),onReasoning:N=>n({type:"reasoning",text:N}),onSplit:N=>n({type:"think_split",text:N}),thinking:t.thinking,signal:s.token}),pe=Ga([Pm(B,W,Ee.DEFAULTS.ratio)],Xp(B.target),B.target.model.id);n({type:"usage_live",usage:pe}),n({type:"done",text:B.content,think:B.reasoning||void 0,summary:M("ext.summary.chat",{model:B.target.model.id}),usage:pe}),b("webview_chat_done",{source:r,chars:B.content.length,model:B.target.key,refs:_.refs.length,usage:pe});return}let h=t.mode==="plan",y=h?null:b_(i,n,[]),k=y_(i,n,s.token),T=!1;if(!h&&(t.autoKeep===!0||t.autoKeep===void 0&&s_())){let _=Jm();_.ok?(T=!0,b("review_auto_keep",{source:r,session:i&&i.id})):(b("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:L(),modelKey:t.modelKey,mode:h?"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:k,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:Lx(S.results),query:S.query})},images:u.map(function(S){return Te.readDataUrl(i.id,S)}),onUserTurn:function(S){am(m,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:g_(n),onProgress:m_,onRound:h_,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))}),v="",w=[];if(h&&(v=d_(g.text,{prompt:t.prompt,workspace:L(),modelKey:t.modelKey,session:i?i.id:""}),w=sn.parsePlanSteps(g.text)),n({type:"done",text:g.text,think:g.reasoning||void 0,kind:h?"plan":"agent",usage:g.usage,planFile:v||void 0,todos:h&&w.length?w:void 0,rounds:jv(g),summary:M(h?"ext.summary.plan":"ext.summary.done",{n:g.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+Ev(g.stop)}),b("webview_"+(h?"plan":"agent")+"_done",{source:r,toolCalls:g.log.length,iters:g.iters,chars:g.text.length,usage:g.usage,todos:h?w.length:void 0}),h&&(i&&i.id&&$a.set(i.id,{text:g.text,file:v}),b("plan_ready",{chars:g.text.length,tools:g.log.map(function(S){return S.name}),file:v,todos:w.length}),v))try{await f_(v)}catch(S){b("plan_file_open_failed",{file:v,message:S.message})}}async function ct(){if(Me||fe)return!0;try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}return await new Promise(function(t){setTimeout(t,700)}),!!kt}async function to(t,e){let n=nt().create(L());de.set(n.id,n),ms.set(n.id,++xr),Pe=n.id;let s=e||tn()||kt;return s&&Ct.set(s,n.id),we.indexOf(n.id)<0&&we.push(n.id),j=null,ni(n,s),qe(xn()),b("session_new",{reason:t||"",id:n.id,tabs:we.length,review:ae.size}),n}function Bp(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 k_(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 su(t,e,n,s){if(!(t&&t.items||[]).length)return{ok:!1,error:M("ext.forkEmpty")};let o=Yn.forkSession(t,{at:e??null,title:du(t),suffix:M("ext.forkSuffix")});de.set(o.id,o),ms.set(o.id,++xr),Pe=o.id;let i=n||tn()||kt;i&&Ct.set(i,o.id),we.indexOf(o.id)<0&&we.push(o.id),j=null;try{let a=Te.copySession(t.id,o.id);(a.copied||a.failed)&&b("session_fork_attachments",{from:t.id,to:o.id,copied:a.copied,failed:a.failed})}catch(a){b("session_fork_attachments_failed",{from:t.id,to:o.id,message:a.message})}try{nt().save(o)}catch(a){b("session_save_failed",{message:a.message,id:o.id})}return ni(o,i),qe(xn()),b("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 JD(t,e,n,s){let r=String(t||""),o=ei(r);if(!o)try{o=nt().load(r)}catch{o=null}if(!o){let c=M("ext.noSuchSession",{id:r});try{x.window.showErrorMessage(c)}catch{}return b("session_fork_failed",{id:r,reason:"missing"}),{ok:!1,error:c}}if(rt.has(o.id)){let c=M("ext.forkBusy");try{x.window.showWarningMessage(c)}catch{}return b("session_fork_failed",{id:o.id,reason:"busy"}),{ok:!1,error:c,busy:!0}}let i=o.items||[];if(!i.length){let c=M("ext.forkEmpty");try{x.window.showWarningMessage(c)}catch{}return b("session_fork_failed",{id:o.id,reason:"empty"}),{ok:!1,error:c}}if(s)return su(o,null,e,n||"fork_whole");let a=[{label:M("ext.forkWhole"),description:M("ext.forkWholeDesc",{n:i.length}),at:null}];for(let c of Yn.forkPoints(i))a.push({label:Na(c.text),description:M("ext.forkFromDesc",{n:c.rest}),at:c.index});let l=null;try{l=await x.window.showQuickPick(a,{title:M("ext.forkPickTitle"),placeHolder:M("ext.forkPickPlaceholder"),matchOnDescription:!0,ignoreFocusOut:!0})}catch(c){return b("session_fork_failed",{id:o.id,reason:"pick_error",message:c.message}),{ok:!1,error:c.message}}return l?su(o,l.at,e,n):(b("session_fork_cancel",{id:o.id}),{ok:!1,canceled:!0})}function $D(t){let e=Math.max(0,Date.now()-(Number(t)||0));return e<60*1e3?M("panel.relJustNow"):e<60*60*1e3?M("panel.relMinutes",{n:Math.floor(e/6e4)}):e<24*60*60*1e3?M("panel.relHours",{n:Math.floor(e/36e5)}):M("panel.relDays",{n:Math.floor(e/864e5)})}async function XD(){let t=wr.listPlans({home:it.homedir(),root:L()});if(!t.length){x.window.showInformationMessage(M("ext.cursorPlanNone",{dir:wr.homePlanDir(it.homedir())}));return}let e=t.map(function(s){return{label:s.name||s.base,description:$D(s.mtimeMs)+" \xB7 "+VS(s.size),detail:s.overview?Na(s.overview):s.file,file:s.file}}),n=await x.window.showQuickPick(e,{placeHolder:M("ext.cursorPlanPick"),matchOnDescription:!0,matchOnDetail:!0,ignoreFocusOut:!0});n&&await x_(n.file)}async function x_(t){let e=wr.readPlan(t);if(!e.ok){let i=e.code==="too_big"?M("ext.cursorPlanBig",{n:Math.round(wr.MAX_BYTES/1024)}):M("ext.cursorPlanReadFail",{msg:e.error});return x.window.showErrorMessage(i),b("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(M("ext.noPlan")),b("cursor_plan_read_failed",{file:t,code:"empty"}),{ok:!1,error:M("ext.noPlan")};await ct();let n=await YD(6e3);if(n&&Me&&n===Me.webview)try{Me.reveal()}catch{}else if(n&&fe&&n===fe.webview&&fe.visible!==!0)try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}if(!await ZD(n,1e4))return x.window.showErrorMessage(M("ext.cursorPlanNoPanel")),b("cursor_plan_no_panel",{webview:!!n}),{ok:!1,error:M("ext.cursorPlanNoPanel")};let r=no(n);(!r||(r.items||[]).length||Cn(r).length||rt.has(r.id))&&(r=await to("cursor_plan",n));let o=sn.normalize(e.todos||[]);return It({t:"plan",text:e.body,planFile:t,todos:o.length?o:void 0},r),bt(r),ni(r,null),qe(xn()),n.postMessage({type:"execute_plan",plan:e.body,planFile:t,sessionId:r.id}),b("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 $r(t,e){let n=de.get(String(t||"")),s=!0;if(!n){if(s=!1,n=nt().load(t),!n)return b("session_open_failed",{id:t}),{ok:!1,error:M("ext.noSuchSession",{id:t})};n=Xm(n),de.set(n.id,n),ms.set(n.id,++xr)}Pe=n.id;let r=e||tn()||kt;return r&&Ct.set(r,n.id),we.indexOf(n.id)<0&&we.push(n.id),j=null,ni(n,r),qe(xn()),b("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 lr(t){nt();let e=String(t||""),n=Pe===e;if(de.get(e)){nu(e),rt.delete(e),ms.set(e,++xr);let r=Tn.get(e);r&&(clearTimeout(r),Tn.delete(e));let o=e_(e);de.delete(e),Qv(e,o)}$a.delete(e),ke.remove(e);try{let r=Te.removeSession(e);b("attachments_remove",{id:e,removed:r.removed})}catch(r){b("attachments_remove_failed",{id:e,message:r.message})}MD(e),MN(e);try{await lu(e,"delete")}catch(r){b("browser_close_failed",{message:r.message})}Lc.delete(e),Lc.delete(e);try{let r=xe.clearSession(e);r&&r.stopped&&b("async_cmd_stop_all",{sessionId:e,stopped:r.stopped,reason:"delete"})}catch{}return we=we.filter(function(r){return r!==e}),qe({type:"session_deleted",id:e}),qe(xn()),b("session_delete",{id:e,wasCurrent:n,tabs:we.length}),{ok:!0,current:Pe||"",sessions:ke.list()}}var S_="luban.openTabs";function th(t){let e=require("crypto").createHash("sha1").update(String(t||"")).digest("hex").slice(0,16);return S_+"."+e}function Fa(t){try{if(!t||!t.globalState)return;let e=L(),n=t.globalState.update(th(e),{root:e,ids:we.slice(),active:Pe||"",at:new Date().toISOString()});n&&n.catch&&n.catch(function(){})}catch{}}function VD(t,e){let n=t&&t.globalState;if(!n)return null;let s=null;try{s=n.get(th(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(S_);return r&&Array.isArray(r.ids)?r:null}catch{return null}}function nh(t){nt();let e=L(),n=VD(t,e),s=n&&Array.isArray(n.ids)?n.ids.map(String):[],r=[],o=function(a){!a||r.indexOf(a.id)>=0||Go(a)&&(de.has(a.id)||(de.set(a.id,Xm(a)),ms.set(a.id,++xr)),r.push(a.id))};for(let a of s){if(!/^[A-Za-z0-9_-]+$/.test(a))continue;let l=de.get(a);if(!l)try{l=ke.load(a)}catch{l=null}l&&o(l)}if(!r.length){let a=[];try{a=ke.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=ke.load(l.id)}catch{c=null}o(c)}}if(!r.length){let a=ke.create(e);de.set(a.id,a),ms.set(a.id,++xr),r.push(a.id),b("session_created",{id:a.id})}we=r,Gm=e;let i=n&&n.active?String(n.active):"";Pe=r.indexOf(i)>=0?i:r[r.length-1],b("session_restored",{root:e,tabs:r.length,active:Pe,items:((de.get(Pe)||{}).items||[]).length})}function v_(t){try{nh(t)}catch(n){b("session_restore_failed",{message:n.message,reason:"workspace_change"})}Ct.clear(),qe({type:"tabs_reset"});let e=[];for(let n of we){let s=de.get(n);if(!s||!Go(s))continue;e.push(n);let r=Vm(s);r.boot=!0,qe(r)}qe({type:"open_tabs",ids:e,active:Pe}),qe(xn()),Fa(t),b("tabs_workspace_switch",{root:L(),tabs:e.length,active:Pe})}async function Oe(t,e){let n=Date.now()+(t||8e3);for(;Date.now()<n;){if(j&&e(j))return j;await new Promise(function(s){setTimeout(s,150)})}return j&&e(j)?j:null}var Me=null,fe=null,j=null,kt=null,lm=new WeakSet,La=new WeakMap,ti=new WeakMap;function tn(){let t=fe&&fe.webview,e=Me&&Me.webview;return t&&fe.visible===!0?t:e||(kt&&(kt===t||kt===e)?kt:t||null)}function Re(t){return t==="panel"?Me?Me.webview:null:t==="view"?fe?fe.webview:null:tn()||kt}async function YD(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 ZD(t,e){let n=t;return n?lm.has(n)?Promise.resolve(!0):new Promise(function(s){let r=Date.now()+(Number(e)>0?Number(e):8e3),o=setInterval(function(){if(lm.has(n)){clearInterval(o),s(!0);return}Date.now()>=r&&(clearInterval(o),s(!1))},100)}):Promise.resolve(!1)}var $a=new Map;function __(t,e){let n=so(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=P.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,_m()).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 QD=2*1024*1024,eF={".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 tF(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 Ra=null,Xo=null,qa=!1;function nF(t,e){let n=so(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=P.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,M("ext.mdPreviewTitle")).replace(/{{path}}/g,"").replace(/{{lang}}/g,rn||Va()).replace(/{{nonce}}/g,c)}function ru(){return{type:"models",current:si(),models:Zn().map(t=>({key:t.key,label:t.provider.name+" \xB7 "+t.model.name,vision:t.model.vision===!0,thinking:_I(t.model)}))}}function qe(t){let e=[Me&&Me.webview,fe&&fe.webview];for(let n of e)if(n)try{n.postMessage(t)}catch(s){b("broadcast_failed",{message:s.message})}}function T_(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 fr=null,kS="";function sF(){fr||(fr=setTimeout(function(){fr=null;let t;try{t=T_(vn.get())}catch{return}let e=t.state+"|"+t.mood+"|"+t.text;e!==kS&&(kS=e,qe({type:"status",status:t}))},200),fr.unref&&fr.unref())}function ni(t,e,n){let s=[Me&&Me.webview,fe&&fe.webview];for(let r of s){if(!r)continue;let o=Object.assign(Vm(t),n||{},{yank:r===e});try{r.postMessage(o)}catch(i){b("broadcast_failed",{message:i.message})}}}async function M_(t,e){let n=String(t||"");if(!/^https?:\/\//i.test(n))return!1;try{return await x.env.openExternal(x.Uri.parse(n)),b("webview_open_link",{source:e,url:n.slice(0,200)}),!0}catch(s){return b("webview_open_link_failed",{url:n.slice(0,200),message:s.message}),!1}}function sh(t,e,n){return kt=t,t.onDidReceiveMessage(async r=>{if(!(!r||!r.type)){if(kt=t,lm.add(t),r.type==="chat_focus"){La.set(t,r.focused===!0);return}if(r.type==="sidebar_maximized"){let o=ti.get(t)===!0;ti.set(t,r.maximized===!0),b("sidebar_maximized_report",{maximized:r.maximized===!0,was:o,widths:r.widths||null}),o&&r.maximized!==!0&&fe&&fe.webview===t&&dv();return}if(r.type==="ready"){t.postMessage({type:"lang",lang:rn}),t.postMessage(ru()),t.postMessage(Wa());try{t.postMessage({type:"status",status:T_(vn.get())})}catch(a){b("status_push_failed",{message:a.message})}let o=[];for(let a of we){let l=de.get(a);if(!l||!Go(l))continue;o.push(a);let c=Vm(l);c.boot=!0,t.postMessage(c)}t.postMessage({type:"open_tabs",ids:o,active:Ct.get(t)||Pe}),t.postMessage(xn());let i=no(t);i&&t.postMessage(a_(i)),Yc&&(Yc=!1,t.postMessage({type:"toggle_session_list"})),b("webview_ready",{source:n,tabs:o.length});return}if(r.type==="lang_applied"){j=Object.assign({at:Date.now(),source:n,kind:"lang_applied",n:0},r),b("webview_lang_applied",{source:n,lang:r.lang}),tN(r.lang);return}if(r.type==="new_session"){await to(r.from||n,t);return}if(r.type==="open_session"){let o=await $r(String(r.id||""),t);if(!o.ok)try{t.postMessage({type:"error",message:o.error})}catch{}return}if(r.type==="list_sessions"){t.postMessage(xn());return}if(r.type==="search_sessions"){t.postMessage(l_(r.q,r.scope,r.root,r.seq));return}if(r.type==="delete_session"){await lr(String(r.id||""));return}if(r.type==="fork_session"){await JD(String(r.id||""),t,n,!!r.whole);return}if(r.type==="fork_message"){let o=String(r.sessionId||""),i=o?ei(o):no(t);if(!i&&o)try{i=nt().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{}b("session_fork_failed",{id:a,reason:"fork_message",message:d})};if(!i){l(M("ext.noSuchSession",{id:a}));return}if(rt.has(i.id)){l(M("ext.forkBusy"));return}let c=Bp(i.items||[],r.uid?String(r.uid):"",Number(r.ordinal));if(c<0){l(M("ext.forkMissing"));return}let u=su(i,c,t,"fork_message");u.ok||l(u.error||M("ext.forkEmpty"));return}if(r.type==="save_session_meta"){let o=ei(r.id);o&&(pu(r.modelKey,r.mode,o),Ym(o));return}if(r.type==="tab_active"){let o=String(r.id||"");de.has(o)&&(Pe=o,Ct.set(t,o),we.indexOf(o)<0&&we.push(o),Fa(e));return}if(r.type==="tab_close"){let o=String(r.id||""),i=de.get(o),a=e_(o);if(i){wS(i),nu(o),rt.delete(o),bt(i);let l=Tn.get(o);l&&(clearTimeout(l),Tn.delete(o)),ms.set(o,++xr),de.delete(o),Qv(o,a)}$a.delete(o),we=we.filter(function(l){return l!==o}),Fa(e),qe({type:"tab_removed",id:o}),qe(xn()),b("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 de.has(c)&&Go(de.get(c))}),i=we.filter(function(c){return o.indexOf(c)<0&&de.has(c)&&Go(de.get(c))});we=o.concat(i);let a=String(r.active||""),l=a&&de.has(a)?a:we.indexOf(Pe)<0?we.length?we[we.length-1]:"":Pe;Pe=l,l?Ct.set(t,l):Ct.delete(t),Fa(e);return}if(r.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:n},r),b("webview_ack",Object.assign({source:n},r));return}if(r.type==="avatar_shown"){b("avatar_shown",{source:n,state:r.state,mood:r.mood,n:r.n});return}if(r.type==="setModel"){Gt.defaultModel=r.modelKey,b("webview_set_model",{modelKey:r.modelKey});return}if(r.type==="listFiles"){try{let o=await km();t.postMessage({type:"fileList",files:o.files,dirs:o.dirs})}catch(o){t.postMessage({type:"fileList",files:[],dirs:[],error:o.message}),b("webview_list_files_failed",{message:o.message})}return}if(r.type==="getSelection"){t.postMessage(Object.assign({type:"selectionInfo"},JS()));return}if(r.type==="openLink"){await M_(r.url,n);return}if(r.type==="open_settings"){zm(e),b("webview_open_settings",{source:n});return}if(r.type==="stop"){let o=qn(r,t);if(!o){b("stale_session_hit",{type:"stop",id:String(r.sessionId||"")});return}wS(o)&&(bt(o),fs(o),b("queue_paused",{id:o.id,size:Cn(o).length})),nu(o.id);return}if(r.type==="answer_question"){let o=qn(r,t),i=o?o.id:String(r.sessionId||""),a=w_(r.id,r.answers,i);if(a.ok)b("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{}b("ask_answer_failed",{id:r.id,error:a.error})}return}if(r.type==="review_action"){let o;try{o=await Ka(r.action,r.path,r.hunk||"",r.sessionId)}catch(i){o={ok:!1,error:i.message}}try{t.postMessage(Wa())}catch{}b("review_action",{source:n,action:r.action,path:r.path,hunk:r.hunk||"",ok:!!o.ok,error:o.error,files:ae.size,hunks:ls()});return}if(r.type==="img_preview"){let o=String(r.sessionId||""),i=String(r.file||""),a=Te.readPreview(o,i);try{t.postMessage({type:"img_preview",ok:!!a.ok,sessionId:o,file:i,dataUrl:a.dataUrl||"",mime:a.mime||""})}catch{}b("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{}b("copy_text",{source:n,n:o.length,ok:i});return}if(r.type==="open_plan_file"){try{await f_(r.path),b("plan_file_opened",{source:n,path:r.path,ok:!0})}catch(o){b("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:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(rt.has(o.id)){b("webview_busy",{prompt:"execute_plan",session:o.id});try{t.postMessage({type:"error",sid:o.id,message:M("ext.sessionBusy")})}catch{}return}await Aa("execute_plan",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="auto_keep_check"){let o=Jm();b("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:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(rt.has(o.id)){yS(o,Object.assign({},r,{echoed:!0}));return}await Aa("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,k){try{t.postMessage({type:"edit_error",sid:o?o.id:String(r.sessionId||""),message:M(y,k)})}catch{}};if(!o){a("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(rt.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=Bp(c,u,d);if(f<0){a("ext.editMissing");return}let p=c[f]||{},m={t:"user",text:l,web:!!p.web};u&&(m.uid=u),Array.isArray(p.images)&&p.images.length&&(m.images=p.images);let h=c.length-(f+1);i?c.length=f:(c[f]=Yn.clampItem(m),c.length=f+1),f===0&&(o.title=""),bt(o),ni(o,null,{keepScroll:!0}),qe(xn()),qe({type:"edit_done",sid:o.id,removed:h,resend:i}),b("session_edit",{source:n,id:o.id,removed:h,uid:u,ordinal:d,resend:i}),i&&(qe({type:"queue_start",id:o.id,item:{text:l,web:!!p.web,uid:u,images:p.images||[],mode:r.mode,modelKey:r.modelKey}}),await Aa("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:M(f,p)})}catch{}};if(!o){i("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(rt.has(o.id)){i("ext.deleteBusy");return}let a=o.items||[],l=r.uid?String(r.uid):"",c=Number(r.ordinal),u=Bp(a,l,c);if(u<0){i("ext.deleteMissing");return}let d=k_(a,u);if(!d){i("ext.deleteMissing");return}a.splice(d.start,d.removed),d.start===0&&(o.title=""),bt(o),ni(o,null,{keepScroll:!0}),qe(xn()),qe({type:"turn_deleted",sid:o.id,removed:d.removed}),b("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){b("stale_session_hit",{type:"queue_add",id:String(r.sessionId||"")});return}if(!rt.has(o.id)){let a=fu({id:$m(),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:eh(o,r.images,r.modelKey)});if(!a)return;qe({type:"queue_start",id:o.id,item:a}),fs(o),await Aa("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=yS(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){b("stale_session_hit",{type:"queue_remove",id:String(r.sessionId||"")});return}AD(o,r.id);return}if(r.type==="queue_clear"){let o=qn(r,t);if(!o){b("stale_session_hit",{type:"queue_clear",id:String(r.sessionId||"")});return}OD(o);return}if(r.type==="queue_resume"){let o=qn(r,t);if(!o)return;o.queuePaused=!1,bt(o),fs(o),b("queue_resume",{id:o.id,size:Cn(o).length}),rt.has(o.id)||Qm(o,t,n);return}if(r.type==="queue_run_now"){let o=qn(r,t);if(!o){b("stale_session_hit",{type:"queue_run_now",id:String(r.sessionId||"")});try{t.postMessage({type:"queue_error",id:"",message:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}let i=PD(o,r.id,t,n);if(!i.ok)try{t.postMessage({type:"queue_error",id:o.id,message:i.error||M("ext.queueMissing")})}catch{}return}}})}function cm(t){if(Me)return Me.reveal(),Me;let e=x.window.createWebviewPanel("luban","Luban",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[so(t.extensionUri)]});e.webview.html=__(e.webview,t.extensionUri),Me=e;let n=sh(e.webview,t,"panel");return e.onDidDispose(()=>{Me=null,kt===e.webview&&(kt=null),Ct.delete(e.webview),n.dispose(),b("panel_disposed",{ok:!0})}),b("panel_opened",{ok:!0}),e}function rF(t){let e={resolveWebviewView(n){fe=n,n.webview.options={enableScripts:!0,localResourceRoots:[so(t.extensionUri)]},n.webview.html=__(n.webview,t.extensionUri),sh(n.webview,t,"view"),n.onDidDispose(()=>{kt===n.webview&&(kt=null),Ct.delete(n.webview),fe=null}),b("view_resolved",{ok:!0})}};try{let n=x.window.registerWebviewViewProvider("luban.chatView",e,{webviewOptions:{retainContextWhenHidden:!0}});return b("view_provider_registered",{ok:!0}),n}catch(n){return b("view_provider_failed",{message:n.message}),{dispose:function(){}}}}var Os={busy:!1,stamps:[],enabled:!1,last:""};function mu(){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 Oa(t){return new Promise(function(e){setTimeout(e,Math.max(0,Number(t)||0))})}function xS(t){let e=Date.now();return Os.stamps=Os.stamps.filter(function(n){return e-n<6e4}),Os.stamps.length<t}async function oF(t,e,n,s){let r=mu();if(!r.enabled)return[];let o=function(i){return b("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=ft(si());if(!a||!Ic(a.provider))return o("provider-unsupported");if(Os.busy)return o("busy");if(!xS(r.maxPerMinute))return o("rate-limit");if(await Oa(r.debounceMs),s&&s.isCancellationRequested)return o("cancelled");if(!xS(r.maxPerMinute))return o("rate-limit");Os.busy=!0,Os.stamps.push(Date.now());let l=Date.now(),c;try{c=await FS({modelKey:a.key,path:Xn(t.uri.fsPath,L()),text:i,offset:t.offsetAt(e),signal:s})}catch(u){return b("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||"",b("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,b("inline_completion_failed",{message:String(i&&i.message||i).slice(0,160)}),[]}}function iF(t){if(!x.languages||typeof x.languages.registerInlineCompletionItemProvider!="function"){b("inline_provider_unsupported",{ok:!1});return}try{let e={provideInlineCompletionItems:oF};t.subscriptions.push(x.languages.registerInlineCompletionItemProvider({pattern:"**"},e)),b("inline_provider_registered",{enabled:mu().enabled})}catch(e){b("inline_provider_failed",{message:String(e&&e.message||e).slice(0,160)})}}async function aF(){let e=!mu().enabled;try{await x.workspace.getConfiguration("luban").update("inlineCompletion.enabled",e,x.ConfigurationTarget.Global),b("inline_toggle",{enabled:e});try{x.window.showInformationMessage(M(e?"ext.inlineOn":"ext.inlineOff"))}catch{}}catch(n){b("inline_toggle_failed",{message:String(n&&n.message||n).slice(0,160)})}return e}var lF="luban";function C_(t){return TS.register({vscode:x,context:t,vendor:lF,rec:b,version:ds,allModels:Zn,resolveModel:ft,streamChat:Qo})}function cF(t){jc("activate"),$p("activate"),ou(),b("activate",{at:new Date().toISOString(),root:L(),configSource:Vo,models:Zn().length});try{vn.autoServe()}catch(g){b("status_serve_failed",{message:g.message})}try{vn.update({source:"extension",workspace:L()||"",text:"\u7A7A\u95F2"})}catch{}Ht.configure({root:L(),rec:b});try{Ht.refresh(L())}catch(g){b("skills_scan_failed",{message:g.message})}Fc("activate"),Ta(L()),Se.configure({root:L(),version:ds,rec:b}),Se.start().then(function(g){b("mcp_start_done",{servers:g.servers.length,tools:g.tools.length})},function(g){b("mcp_start_failed",{message:g.message})}),qm(t).then(function(g){b("secrets_ready",{keys:g}),Bm()}),Pa(x.window.activeTextEditor),t.subscriptions.push(x.window.onDidChangeActiveTextEditor(Pa)),t.subscriptions.push(x.window.onDidChangeTextEditorSelection(function(g){Pa(g.textEditor)}));try{nh(t)}catch(g){b("session_restore_failed",{message:g.message})}try{let g=new Set(we.slice());for(let w of de.values())g.add(w.id);for(let w of ke.list())g.add(w.id);let v=Te.sweepOrphans(g);v.removed&&b("attachments_sweep",v)}catch(g){b("attachments_sweep_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.openPanel",()=>cm(t))),C_(t);try{let g=$j.mount({vscode:x,status:vn,tr:M,rec:b});g&&t.subscriptions.push(g)}catch(g){b("statusbar_mount_failed",{message:g.message})}try{let g=vn.subscribe(function(){sF()});t.subscriptions.push({dispose:function(){try{g()}catch{}}})}catch(g){b("status_push_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.providerSettings",()=>zm(t))),t.subscriptions.push(x.commands.registerCommand("luban.plugins",()=>Vc(t,"plugins"))),t.subscriptions.push(x.commands.registerCommand("luban.market",()=>Vc(t,"market"))),t.subscriptions.push(x.commands.registerCommand("luban.dashboard",()=>Zv(t))),t.subscriptions.push(x.commands.registerCommand("luban.rules.open",async()=>{try{let g=L()||it.homedir(),v=D.join(g,".luban","rules"),w=D.join(v,"default.md"),S=!1;P.existsSync(w)||(P.mkdirSync(v,{recursive:!0}),P.writeFileSync(w,GN,"utf8"),S=!0,Ta(g));let _=await x.workspace.openTextDocument(x.Uri.file(w));await x.window.showTextDocument(_,{preview:!1}),x.window.setStatusBarMessage(M(S?"ext.rulesCreated":"ext.rulesOpened",{file:w}),4e3)}catch(g){b("rules_open_failed",{message:g.message}),x.window.showErrorMessage(M("ext.rulesFailed",{msg:g.message}))}})),t.subscriptions.push(x.commands.registerCommand("luban.openInBrowser",async g=>{let v=Array.isArray(g)?g[0]:g;await M_(v&&typeof v=="object"?v.linkUrl:"","context")})),t.subscriptions.push(x.commands.registerCommand("luban.browserCheck",async()=>{let g=br(),v=wt.findChrome(g.chromePath);if(!v.path){x.window.showErrorMessage(M("ext.browserNotFound",{paths:v.tried.slice(0,4).map(function(w){return" "+w}).join(`
973
- `)}));return}await x.window.withProgress({location:x.ProgressLocation.Notification,title:M("ext.browserCheckRunning"),cancellable:!1},async function(){let w=null;try{w=await wt.launch({exe:g.chromePath,headless:g.headless,width:g.width,height:g.height}),await w.navigate("data:text/html,<title>Luban</title><h1>Luban browser check</h1>");let S=await w.snapshot(1200),_=await w.screenshot({});b("browser_check",{ok:!0,exe:w.exe,snapChars:S.length,shotChars:_.length}),x.window.showInformationMessage(M("ext.browserCheckOk",{exe:v.path,chars:String(Math.round(_.length/1024))}))}catch(S){b("browser_check",{ok:!1,message:String(S&&S.message||S)}),x.window.showErrorMessage(M("ext.browserCheckFailed",{message:String(S&&S.message||S)}))}finally{if(w)try{await w.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 rv(n),w=await v.screenshot({});e===g&&g.webview.postMessage({type:"shot",dataUrl:w,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=br();if(!g.enabled){x.window.showWarningMessage(M("ext.browserPreviewDisabled"));return}if(!g.preview){x.window.showWarningMessage(M("ext.browserPreviewOff"));return}let v=String(Pe||"_default");if(e){if(n===v){e.reveal();return}e.dispose()}n=v;let w=x.window.createWebviewPanel("luban.browserPreview","Luban \u6D4F\u89C8\u5668\u9884\u89C8",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0});e=w,w.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>',b("browser_preview_open",{sessionId:v}),o(w),w.onDidDispose(function(){e===w&&(e=null,n=null),r(),b("browser_preview_close",{sessionId:v})}),w.onDidChangeViewState(function(S){S.webviewPanel.visible?o(w):r()})})),zp=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 w of v)w&&w.uri&&w.uri.fsPath&&g.push(w.uri.fsPath)}catch{}return g}function f(g,v,w){let S=jx.classifyImage(v,w,d());if(S.kind==="workspace")try{return String(g.asWebviewUri(x.Uri.file(S.abs)))}catch{return null}if(S.kind==="inline")try{let _=P.statSync(S.abs);if(!_.isFile()||_.size>QD)return null;let C=P.readFileSync(S.abs),A=D.extname(S.abs).toLowerCase();return"data:"+(eF[A]||"application/octet-stream")+";base64,"+C.toString("base64")}catch{return null}return null}function p(g,v,w){let S={},_=jx.extractImageUrls(v);for(let C of _)S[C]=f(g,C,w);return S}function m(g,v){if(!g||g!==i)return;let w="";try{let C=x.workspace.textDocuments.find(function(A){return A.uri.toString()===v.toString()});w=C?C.getText():""}catch{w=""}let S={};try{let C=D.dirname(v.fsPath);S=p(g.webview,w,C)}catch{S={}}let _=v.fsPath||v.toString();try{g.webview.postMessage({type:"doc",content:w,imageMap:S,filePath:_,lang:rn||Va()})}catch{}}function h(g,v){if(i)return a=v,Xo=v,i.title=M("ext.mdPreviewTitle"),i.reveal(x.ViewColumn.Beside,!0),m(i,v),i;let w=x.window.createWebviewPanel("luban.markdownPreview",M("ext.mdPreviewTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[so(g.extensionUri)].concat(d().map(function(S){return x.Uri.file(S)}))});return i=w,a=v,u=!1,Xo=v,qa=!1,Ra=w.webview,w.webview.html=nF(w.webview,g.extensionUri),b("md_preview_open",{file:v.fsPath||v.toString()}),w.webview.onDidReceiveMessage(function(S){if(!(!S||!S.type)){if(S.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:"mdpreview"},S),b("md_preview_ack",{kind:S.kind,n:S.n,total:S.total,value:S.value||""});return}if(S.type==="ready"){u=!0,qa=!0,m(w,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()&&m(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))})),w.onDidDispose(function(){l&&(clearTimeout(l),l=null);for(let S of c)try{S.dispose()}catch{}c=[],Ra===w.webview&&(Ra=null),i===w&&(i=null,a=null,Xo=null,u=!1,qa=!1),b("md_preview_close",{})}),w}t.subscriptions.push(x.commands.registerCommand("luban.markdownPreview",async()=>{let g=x.window.activeTextEditor;if(!g||!tF(g.document)){x.window.showWarningMessage(M("ext.mdPreviewNotMarkdown"));return}try{h(t,g.document.uri)}catch(v){x.window.showWarningMessage(M("ext.mdPreviewFailed")+" "+String(v&&v.message||v))}})),iF(t),t.subscriptions.push(x.commands.registerCommand("luban.inlineCompletion.toggle",aF)),t.subscriptions.push(x.commands.registerCommand("luban.focusView",async()=>{try{await x.commands.executeCommand("workbench.view.extension.luban"),b("focus_view",{ok:!0})}catch(g){b("focus_view",{ok:!1,message:g.message})}})),t.subscriptions.push(rF(t)),SI(t),t.subscriptions.push(x.commands.registerCommand("luban.agent",async()=>{let g=await x.window.showInputBox({prompt:M("ext.agentPrompt")});g&&await x.window.withProgress({location:x.ProgressLocation.Notification,title:"Luban agent"},async v=>{let w=no(tn()),S=Cs(w&&w.items||[],"",{resolveImage:As(w)}),_=await Is(g,{root:L(),history:S.messages,sessionId:w?w.id:"",onProgress:C=>v.report({message:C})});Vp({modelKey:si(),mode:"agent",source:"command",session:w?w.id:""},_.usage),x.window.showInformationMessage(M("ext.agentDone",{n:_.log.length}))})}));async function y(){await Um(t);try{Ht.configure({root:L(),rec:b}),Ht.refresh(L())}catch(w){b("skills_scan_failed",{message:w.message})}Ta(L());let g="";try{Se.configure({root:L(),version:ds,rec:b});let w=await Se.reload();g=M("ext.mcpNote",{servers:w.servers.length,tools:w.tools.length})}catch(w){g=M("ext.mcpFail",{msg:w.message}),b("mcp_reload_failed",{message:w.message})}let v="";try{let w=Za();Je.configure({root:L(),enabled:w.enabled,maxTools:w.maxTools,rec:b,confirm:sv}),await Je.reload();let S=Je.status();v=M("ext.pluginNote",{plugins:S.plugins.length,tools:S.tools.length})}catch(w){b("plugins_reload_failed",{message:w.message})}x.window.showInformationMessage(M("ext.configReloaded",{models:Zn().length,skills:Ht.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 to("command"),await ct(),x.window.setStatusBarMessage(M("ext.newSessionNotice"),2e3)})),t.subscriptions.push(x.commands.registerCommand("luban.cursorPlan",XD)),t.subscriptions.push(x.commands.registerCommand("luban.sessionList",async()=>{Yc=!0,await ct()&&tn()&&(Yc=!1,qe({type:"toggle_session_list"}))})),t.subscriptions.push(x.commands.registerCommand("luban.mode.cycle",async()=>{await ct();let g=tn();g&&g.postMessage({type:"cycle_mode"})})),t.subscriptions.push(x.commands.registerCommand("luban.findInSession",async()=>{await ct();let g=tn();g&&g.postMessage({type:"open_find"})}));async function k(g,v,w,S){let _=(Array.isArray(w)&&w.length?w:v?[v]:[]).filter(function(W){return W&&W.scheme==="file"}),C=L(),A=[];for(let W of _){let B=zS(W.fsPath,C);B&&A.push(B)}if(!A.length)return;let F=await ct(),K=tn();if(!F||!K){x.window.showWarningMessage(M("ext.addFileNoView")),b("add_"+g+"_to_chat_failed",{n:A.length,reason:"no_webview"});return}S&&await to("add_to_new_chat",K),K.postMessage({type:"insert_ref",text:A.join(""),n:A.length,focus:!!S}),b("add_"+g+(S?"_to_new_chat":"_to_chat"),{n:A.length})}t.subscriptions.push(x.commands.registerCommand("luban.addFileToChat",(g,v)=>k("file",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToChat",(g,v)=>k("folder",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFileToNewChat",(g,v)=>k("file",g,v,!0))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToNewChat",(g,v)=>k("folder",g,v,!0)));async function T(g){let v=GS(L());if(!v){x.window.showWarningMessage(M("ext.addSelectionNone")),b("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_selection"});return}let w=await ct(),S=tn();if(!w||!S){x.window.showWarningMessage(M("ext.addFileNoView")),b("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_webview"});return}g&&await to("add_to_new_chat",S),S.postMessage({type:"insert_ref",text:v,n:1,focus:!!g}),b("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{nt().setMax(n_())}catch{}g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionMemory")&&b("session_memory_config",Vr()),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.plugins")&&nv(),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.language")&&jc("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.net.tlsMaxVersion")&&$p("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban")&&Mt&&rD()})),t.subscriptions.push(x.workspace.onDidChangeWorkspaceFolders(function(){let g=L();Ht.configure({root:g,rec:b});try{Ht.refresh(g)}catch(v){b("skills_scan_failed",{message:v.message})}if(Ta(g),Se.configure({root:g,version:ds,rec:b}),Se.reload().then(function(v){b("mcp_reload_done",{servers:v.servers.length,tools:v.tools.length})},function(v){b("mcp_reload_failed",{message:v.message})}),Fc("workspace_change"),g!==Gm)try{v_(t)}catch(v){b("session_restore_failed",{message:v.message,reason:"workspace_change"})}}));try{let g=x.workspace.getConfiguration("luban").get("autoOpen");b("auto_open_decided",{autoOpen:g}),g!==!1&&setTimeout(function(){x.commands.executeCommand("workbench.view.extension.luban").then(function(){b("auto_open_view",{ok:!0})},function(v){b("auto_open_view",{ok:!1,message:String(v&&v.message)})})},1200)}catch(g){b("auto_open_view",{ok:!1,message:g.message})}hF(t)}function hu(){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 uF(){let t=hu(),e=P.mkdtempSync(D.join(it.tmpdir(),"luban-fs-op-")),n=function(s,r){let o=D.join(e,s);P.mkdirSync(D.dirname(o),{recursive:!0}),P.writeFileSync(o,r)};try{n("a.js",`const foo1 = 1;
972
+ `+d)+y,T=M(a?"cross.execPlanAccept":"cross.execPlan");Dt({t:"user",text:T,ctx:k,exec:!0},i);let g=Zm(i);bt(i),h.seedEmit();let v=y_(i,n,s.token);a&&cI();let w;try{w=await Ds(k,{root:L(),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:h.state,onTodos:h.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){am(g,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:g_(n),onProgress:m_,onRound:h_,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))})}finally{a&&uI()}n({type:"done",text:w.text,think:w.reasoning||void 0,kind:"agent",usage:w.usage,rounds:jv(w),summary:M("ext.summary.exec",{n:w.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+Ev(w.stop)}),b("webview_execute_plan_done",{toolCalls:w.log.length,iters:w.iters,chars:w.text.length,todos:(h.state.items||[]).length,autoAccept:a})}function Os(t){let e=t&&t.id?String(t.id):"";return function(n){return e?Te.readDataUrl(e,n):""}}function eh(t,e,n){let s=t&&t.id?String(t.id):"";if(!s||!Array.isArray(e)||!e.length)return[];let r=ft(n);if(!(r&&r.model&&r.model.vision===!0))return[];let o=[];for(let i of e.slice(0,Te.MAX_IMAGES)){if(!i||typeof i!="object")continue;let a=i.dataUrl?Te.saveImage(s,i.dataUrl):Te.validateEntry(i);a&&o.push(a)}return o}async function GD(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=US(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=eh(i,t.images,t.modelKey),d=Array.isArray(t.images)?t.images.filter(Boolean).length:0;u.length?b("ask_images",{source:r,n:u.length,bytes:u.reduce(function(S,_){return S+_.bytes},0)}):d&&(n({type:"img_blocked",n:d}),b("ask_images_blocked",{source:r,model:t.modelKey,n:d})),pu(t.modelKey,t.mode||"agent",i),p_(c,i,t.modelKey,t.mode||"agent");let f=o_(i),p=As(i&&i.items||[],t.modelKey,{resolveImage:Os(i),spillStore:f});b("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 m=Zm(i);if(bt(i),t.mode==="chat"){let S=Xp(ft(t.modelKey)),_=Zr(c,L(),{window:S});_.refs.length&&n({type:"references",refs:_.refs});let C=bm(_.refs,L(),void 0,{sessionId:i&&i.id}),A=null;l&&(n({type:"searching",query:c.slice(0,128)}),A=await WS(c,ft(t.modelKey),{signal:s.token,onSearch:function(N){n({type:"sources",items:Lx(N.results),query:N.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"}),b("webview_chat_web",{source:r,query:A.query,results:A.results.length}));let F=Ps.buildUserTurn({rule:l?UI:"",spillBlock:p.spillDigest||"",webBlock:A?A.block:"",autoBlock:C,refText:_.text});am(m,F,i);let K=u.map(function(N){return Te.readDataUrl(i.id,N)}),W=[{role:"system",content:BI}].concat(p.messages,[{role:"user",content:Te.toContent(F,K)}]),B=await Qo(W,t.modelKey,{onToken:N=>n({type:"token",text:N}),onReasoning:N=>n({type:"reasoning",text:N}),onSplit:N=>n({type:"think_split",text:N}),thinking:t.thinking,signal:s.token}),pe=Ga([Pm(B,W,Ee.DEFAULTS.ratio)],Xp(B.target),B.target.model.id);n({type:"usage_live",usage:pe}),n({type:"done",text:B.content,think:B.reasoning||void 0,summary:M("ext.summary.chat",{model:B.target.model.id}),usage:pe}),b("webview_chat_done",{source:r,chars:B.content.length,model:B.target.key,refs:_.refs.length,usage:pe});return}let h=t.mode==="plan",y=h?null:b_(i,n,[]),k=y_(i,n,s.token),T=!1;if(!h&&(t.autoKeep===!0||t.autoKeep===void 0&&s_())){let _=Jm();_.ok?(T=!0,b("review_auto_keep",{source:r,session:i&&i.id})):(b("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 Ds(t.prompt,{root:L(),modelKey:t.modelKey,mode:h?"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:k,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:Lx(S.results),query:S.query})},images:u.map(function(S){return Te.readDataUrl(i.id,S)}),onUserTurn:function(S){am(m,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:g_(n),onProgress:m_,onRound:h_,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))}),v="",w=[];if(h&&(v=d_(g.text,{prompt:t.prompt,workspace:L(),modelKey:t.modelKey,session:i?i.id:""}),w=sn.parsePlanSteps(g.text)),n({type:"done",text:g.text,think:g.reasoning||void 0,kind:h?"plan":"agent",usage:g.usage,planFile:v||void 0,todos:h&&w.length?w:void 0,rounds:jv(g),summary:M(h?"ext.summary.plan":"ext.summary.done",{n:g.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+Ev(g.stop)}),b("webview_"+(h?"plan":"agent")+"_done",{source:r,toolCalls:g.log.length,iters:g.iters,chars:g.text.length,usage:g.usage,todos:h?w.length:void 0}),h&&(i&&i.id&&$a.set(i.id,{text:g.text,file:v}),b("plan_ready",{chars:g.text.length,tools:g.log.map(function(S){return S.name}),file:v,todos:w.length}),v))try{await f_(v)}catch(S){b("plan_file_open_failed",{file:v,message:S.message})}}async function ct(){if(Me||fe)return!0;try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}return await new Promise(function(t){setTimeout(t,700)}),!!kt}async function to(t,e){let n=nt().create(L());de.set(n.id,n),hs.set(n.id,++Sr),Pe=n.id;let s=e||tn()||kt;return s&&Ct.set(s,n.id),we.indexOf(n.id)<0&&we.push(n.id),j=null,ni(n,s),qe(xn()),b("session_new",{reason:t||"",id:n.id,tabs:we.length,review:ae.size}),n}function Bp(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 k_(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 su(t,e,n,s){if(!(t&&t.items||[]).length)return{ok:!1,error:M("ext.forkEmpty")};let o=Yn.forkSession(t,{at:e??null,title:du(t),suffix:M("ext.forkSuffix")});de.set(o.id,o),hs.set(o.id,++Sr),Pe=o.id;let i=n||tn()||kt;i&&Ct.set(i,o.id),we.indexOf(o.id)<0&&we.push(o.id),j=null;try{let a=Te.copySession(t.id,o.id);(a.copied||a.failed)&&b("session_fork_attachments",{from:t.id,to:o.id,copied:a.copied,failed:a.failed})}catch(a){b("session_fork_attachments_failed",{from:t.id,to:o.id,message:a.message})}try{nt().save(o)}catch(a){b("session_save_failed",{message:a.message,id:o.id})}return ni(o,i),qe(xn()),b("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 JD(t,e,n,s){let r=String(t||""),o=ei(r);if(!o)try{o=nt().load(r)}catch{o=null}if(!o){let c=M("ext.noSuchSession",{id:r});try{x.window.showErrorMessage(c)}catch{}return b("session_fork_failed",{id:r,reason:"missing"}),{ok:!1,error:c}}if(rt.has(o.id)){let c=M("ext.forkBusy");try{x.window.showWarningMessage(c)}catch{}return b("session_fork_failed",{id:o.id,reason:"busy"}),{ok:!1,error:c,busy:!0}}let i=o.items||[];if(!i.length){let c=M("ext.forkEmpty");try{x.window.showWarningMessage(c)}catch{}return b("session_fork_failed",{id:o.id,reason:"empty"}),{ok:!1,error:c}}if(s)return su(o,null,e,n||"fork_whole");let a=[{label:M("ext.forkWhole"),description:M("ext.forkWholeDesc",{n:i.length}),at:null}];for(let c of Yn.forkPoints(i))a.push({label:Na(c.text),description:M("ext.forkFromDesc",{n:c.rest}),at:c.index});let l=null;try{l=await x.window.showQuickPick(a,{title:M("ext.forkPickTitle"),placeHolder:M("ext.forkPickPlaceholder"),matchOnDescription:!0,ignoreFocusOut:!0})}catch(c){return b("session_fork_failed",{id:o.id,reason:"pick_error",message:c.message}),{ok:!1,error:c.message}}return l?su(o,l.at,e,n):(b("session_fork_cancel",{id:o.id}),{ok:!1,canceled:!0})}function $D(t){let e=Math.max(0,Date.now()-(Number(t)||0));return e<60*1e3?M("panel.relJustNow"):e<60*60*1e3?M("panel.relMinutes",{n:Math.floor(e/6e4)}):e<24*60*60*1e3?M("panel.relHours",{n:Math.floor(e/36e5)}):M("panel.relDays",{n:Math.floor(e/864e5)})}async function XD(){let t=br.listPlans({home:it.homedir(),root:L()});if(!t.length){x.window.showInformationMessage(M("ext.cursorPlanNone",{dir:br.homePlanDir(it.homedir())}));return}let e=t.map(function(s){return{label:s.name||s.base,description:$D(s.mtimeMs)+" \xB7 "+VS(s.size),detail:s.overview?Na(s.overview):s.file,file:s.file}}),n=await x.window.showQuickPick(e,{placeHolder:M("ext.cursorPlanPick"),matchOnDescription:!0,matchOnDetail:!0,ignoreFocusOut:!0});n&&await x_(n.file)}async function x_(t){let e=br.readPlan(t);if(!e.ok){let i=e.code==="too_big"?M("ext.cursorPlanBig",{n:Math.round(br.MAX_BYTES/1024)}):M("ext.cursorPlanReadFail",{msg:e.error});return x.window.showErrorMessage(i),b("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(M("ext.noPlan")),b("cursor_plan_read_failed",{file:t,code:"empty"}),{ok:!1,error:M("ext.noPlan")};await ct();let n=await YD(6e3);if(n&&Me&&n===Me.webview)try{Me.reveal()}catch{}else if(n&&fe&&n===fe.webview&&fe.visible!==!0)try{await x.commands.executeCommand("workbench.view.extension.luban")}catch{}if(!await ZD(n,1e4))return x.window.showErrorMessage(M("ext.cursorPlanNoPanel")),b("cursor_plan_no_panel",{webview:!!n}),{ok:!1,error:M("ext.cursorPlanNoPanel")};let r=no(n);(!r||(r.items||[]).length||Cn(r).length||rt.has(r.id))&&(r=await to("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),bt(r),ni(r,null),qe(xn()),n.postMessage({type:"execute_plan",plan:e.body,planFile:t,sessionId:r.id}),b("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 $r(t,e){let n=de.get(String(t||"")),s=!0;if(!n){if(s=!1,n=nt().load(t),!n)return b("session_open_failed",{id:t}),{ok:!1,error:M("ext.noSuchSession",{id:t})};n=Xm(n),de.set(n.id,n),hs.set(n.id,++Sr)}Pe=n.id;let r=e||tn()||kt;return r&&Ct.set(r,n.id),we.indexOf(n.id)<0&&we.push(n.id),j=null,ni(n,r),qe(xn()),b("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 cr(t){nt();let e=String(t||""),n=Pe===e;if(de.get(e)){nu(e),rt.delete(e),hs.set(e,++Sr);let r=Tn.get(e);r&&(clearTimeout(r),Tn.delete(e));let o=e_(e);de.delete(e),Qv(e,o)}$a.delete(e),ke.remove(e);try{let r=Te.removeSession(e);b("attachments_remove",{id:e,removed:r.removed})}catch(r){b("attachments_remove_failed",{id:e,message:r.message})}MD(e),MN(e);try{await lu(e,"delete")}catch(r){b("browser_close_failed",{message:r.message})}Lc.delete(e),Lc.delete(e);try{let r=xe.clearSession(e);r&&r.stopped&&b("async_cmd_stop_all",{sessionId:e,stopped:r.stopped,reason:"delete"})}catch{}return we=we.filter(function(r){return r!==e}),qe({type:"session_deleted",id:e}),qe(xn()),b("session_delete",{id:e,wasCurrent:n,tabs:we.length}),{ok:!0,current:Pe||"",sessions:ke.list()}}var S_="luban.openTabs";function th(t){let e=require("crypto").createHash("sha1").update(String(t||"")).digest("hex").slice(0,16);return S_+"."+e}function Fa(t){try{if(!t||!t.globalState)return;let e=L(),n=t.globalState.update(th(e),{root:e,ids:we.slice(),active:Pe||"",at:new Date().toISOString()});n&&n.catch&&n.catch(function(){})}catch{}}function VD(t,e){let n=t&&t.globalState;if(!n)return null;let s=null;try{s=n.get(th(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(S_);return r&&Array.isArray(r.ids)?r:null}catch{return null}}function nh(t){nt();let e=L(),n=VD(t,e),s=n&&Array.isArray(n.ids)?n.ids.map(String):[],r=[],o=function(a){!a||r.indexOf(a.id)>=0||Go(a)&&(de.has(a.id)||(de.set(a.id,Xm(a)),hs.set(a.id,++Sr)),r.push(a.id))};for(let a of s){if(!/^[A-Za-z0-9_-]+$/.test(a))continue;let l=de.get(a);if(!l)try{l=ke.load(a)}catch{l=null}l&&o(l)}if(!r.length){let a=[];try{a=ke.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=ke.load(l.id)}catch{c=null}o(c)}}if(!r.length){let a=ke.create(e);de.set(a.id,a),hs.set(a.id,++Sr),r.push(a.id),b("session_created",{id:a.id})}we=r,Gm=e;let i=n&&n.active?String(n.active):"";Pe=r.indexOf(i)>=0?i:r[r.length-1],b("session_restored",{root:e,tabs:r.length,active:Pe,items:((de.get(Pe)||{}).items||[]).length})}function v_(t){try{nh(t)}catch(n){b("session_restore_failed",{message:n.message,reason:"workspace_change"})}Ct.clear(),qe({type:"tabs_reset"});let e=[];for(let n of we){let s=de.get(n);if(!s||!Go(s))continue;e.push(n);let r=Vm(s);r.boot=!0,qe(r)}qe({type:"open_tabs",ids:e,active:Pe}),qe(xn()),Fa(t),b("tabs_workspace_switch",{root:L(),tabs:e.length,active:Pe})}async function Oe(t,e){let n=Date.now()+(t||8e3);for(;Date.now()<n;){if(j&&e(j))return j;await new Promise(function(s){setTimeout(s,150)})}return j&&e(j)?j:null}var Me=null,fe=null,j=null,kt=null,lm=new WeakSet,La=new WeakMap,ti=new WeakMap;function tn(){let t=fe&&fe.webview,e=Me&&Me.webview;return t&&fe.visible===!0?t:e||(kt&&(kt===t||kt===e)?kt:t||null)}function Re(t){return t==="panel"?Me?Me.webview:null:t==="view"?fe?fe.webview:null:tn()||kt}async function YD(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 ZD(t,e){let n=t;return n?lm.has(n)?Promise.resolve(!0):new Promise(function(s){let r=Date.now()+(Number(e)>0?Number(e):8e3),o=setInterval(function(){if(lm.has(n)){clearInterval(o),s(!0);return}Date.now()>=r&&(clearInterval(o),s(!1))},100)}):Promise.resolve(!1)}var $a=new Map;function __(t,e){let n=so(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=P.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,_m()).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 QD=2*1024*1024,eF={".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 tF(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 Ra=null,Xo=null,qa=!1;function nF(t,e){let n=so(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=P.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,M("ext.mdPreviewTitle")).replace(/{{path}}/g,"").replace(/{{lang}}/g,rn||Va()).replace(/{{nonce}}/g,c)}function ru(){return{type:"models",current:si(),models:Zn().map(t=>({key:t.key,label:t.provider.name+" \xB7 "+t.model.name,vision:t.model.vision===!0,thinking:_I(t.model)}))}}function qe(t){let e=[Me&&Me.webview,fe&&fe.webview];for(let n of e)if(n)try{n.postMessage(t)}catch(s){b("broadcast_failed",{message:s.message})}}function T_(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 pr=null,kS="";function sF(){pr||(pr=setTimeout(function(){pr=null;let t;try{t=T_(vn.get())}catch{return}let e=t.state+"|"+t.mood+"|"+t.text;e!==kS&&(kS=e,qe({type:"status",status:t}))},200),pr.unref&&pr.unref())}function ni(t,e,n){let s=[Me&&Me.webview,fe&&fe.webview];for(let r of s){if(!r)continue;let o=Object.assign(Vm(t),n||{},{yank:r===e});try{r.postMessage(o)}catch(i){b("broadcast_failed",{message:i.message})}}}async function M_(t,e){let n=String(t||"");if(!/^https?:\/\//i.test(n))return!1;try{return await x.env.openExternal(x.Uri.parse(n)),b("webview_open_link",{source:e,url:n.slice(0,200)}),!0}catch(s){return b("webview_open_link_failed",{url:n.slice(0,200),message:s.message}),!1}}function sh(t,e,n){return kt=t,t.onDidReceiveMessage(async r=>{if(!(!r||!r.type)){if(kt=t,lm.add(t),r.type==="chat_focus"){La.set(t,r.focused===!0);return}if(r.type==="sidebar_maximized"){let o=ti.get(t)===!0;ti.set(t,r.maximized===!0),b("sidebar_maximized_report",{maximized:r.maximized===!0,was:o,widths:r.widths||null}),o&&r.maximized!==!0&&fe&&fe.webview===t&&dv();return}if(r.type==="ready"){t.postMessage({type:"lang",lang:rn}),t.postMessage(ru()),t.postMessage(Wa());try{t.postMessage({type:"status",status:T_(vn.get())})}catch(a){b("status_push_failed",{message:a.message})}let o=[];for(let a of we){let l=de.get(a);if(!l||!Go(l))continue;o.push(a);let c=Vm(l);c.boot=!0,t.postMessage(c)}t.postMessage({type:"open_tabs",ids:o,active:Ct.get(t)||Pe}),t.postMessage(xn());let i=no(t);i&&t.postMessage(a_(i)),Yc&&(Yc=!1,t.postMessage({type:"toggle_session_list"})),b("webview_ready",{source:n,tabs:o.length});return}if(r.type==="lang_applied"){j=Object.assign({at:Date.now(),source:n,kind:"lang_applied",n:0},r),b("webview_lang_applied",{source:n,lang:r.lang}),tN(r.lang);return}if(r.type==="new_session"){await to(r.from||n,t);return}if(r.type==="open_session"){let o=await $r(String(r.id||""),t);if(!o.ok)try{t.postMessage({type:"error",message:o.error})}catch{}return}if(r.type==="list_sessions"){t.postMessage(xn());return}if(r.type==="search_sessions"){t.postMessage(l_(r.q,r.scope,r.root,r.seq));return}if(r.type==="delete_session"){await cr(String(r.id||""));return}if(r.type==="fork_session"){await JD(String(r.id||""),t,n,!!r.whole);return}if(r.type==="fork_message"){let o=String(r.sessionId||""),i=o?ei(o):no(t);if(!i&&o)try{i=nt().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{}b("session_fork_failed",{id:a,reason:"fork_message",message:d})};if(!i){l(M("ext.noSuchSession",{id:a}));return}if(rt.has(i.id)){l(M("ext.forkBusy"));return}let c=Bp(i.items||[],r.uid?String(r.uid):"",Number(r.ordinal));if(c<0){l(M("ext.forkMissing"));return}let u=su(i,c,t,"fork_message");u.ok||l(u.error||M("ext.forkEmpty"));return}if(r.type==="save_session_meta"){let o=ei(r.id);o&&(pu(r.modelKey,r.mode,o),Ym(o));return}if(r.type==="tab_active"){let o=String(r.id||"");de.has(o)&&(Pe=o,Ct.set(t,o),we.indexOf(o)<0&&we.push(o),Fa(e));return}if(r.type==="tab_close"){let o=String(r.id||""),i=de.get(o),a=e_(o);if(i){wS(i),nu(o),rt.delete(o),bt(i);let l=Tn.get(o);l&&(clearTimeout(l),Tn.delete(o)),hs.set(o,++Sr),de.delete(o),Qv(o,a)}$a.delete(o),we=we.filter(function(l){return l!==o}),Fa(e),qe({type:"tab_removed",id:o}),qe(xn()),b("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 de.has(c)&&Go(de.get(c))}),i=we.filter(function(c){return o.indexOf(c)<0&&de.has(c)&&Go(de.get(c))});we=o.concat(i);let a=String(r.active||""),l=a&&de.has(a)?a:we.indexOf(Pe)<0?we.length?we[we.length-1]:"":Pe;Pe=l,l?Ct.set(t,l):Ct.delete(t),Fa(e);return}if(r.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:n},r),b("webview_ack",Object.assign({source:n},r));return}if(r.type==="avatar_shown"){b("avatar_shown",{source:n,state:r.state,mood:r.mood,n:r.n});return}if(r.type==="setModel"){Gt.defaultModel=r.modelKey,b("webview_set_model",{modelKey:r.modelKey});return}if(r.type==="listFiles"){try{let o=await km();t.postMessage({type:"fileList",files:o.files,dirs:o.dirs})}catch(o){t.postMessage({type:"fileList",files:[],dirs:[],error:o.message}),b("webview_list_files_failed",{message:o.message})}return}if(r.type==="getSelection"){t.postMessage(Object.assign({type:"selectionInfo"},JS()));return}if(r.type==="openLink"){await M_(r.url,n);return}if(r.type==="open_settings"){zm(e),b("webview_open_settings",{source:n});return}if(r.type==="stop"){let o=qn(r,t);if(!o){b("stale_session_hit",{type:"stop",id:String(r.sessionId||"")});return}wS(o)&&(bt(o),ps(o),b("queue_paused",{id:o.id,size:Cn(o).length})),nu(o.id);return}if(r.type==="answer_question"){let o=qn(r,t),i=o?o.id:String(r.sessionId||""),a=w_(r.id,r.answers,i);if(a.ok)b("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{}b("ask_answer_failed",{id:r.id,error:a.error})}return}if(r.type==="review_action"){let o;try{o=await Ka(r.action,r.path,r.hunk||"",r.sessionId)}catch(i){o={ok:!1,error:i.message}}try{t.postMessage(Wa())}catch{}b("review_action",{source:n,action:r.action,path:r.path,hunk:r.hunk||"",ok:!!o.ok,error:o.error,files:ae.size,hunks:cs()});return}if(r.type==="img_preview"){let o=String(r.sessionId||""),i=String(r.file||""),a=Te.readPreview(o,i);try{t.postMessage({type:"img_preview",ok:!!a.ok,sessionId:o,file:i,dataUrl:a.dataUrl||"",mime:a.mime||""})}catch{}b("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{}b("copy_text",{source:n,n:o.length,ok:i});return}if(r.type==="open_plan_file"){try{await f_(r.path),b("plan_file_opened",{source:n,path:r.path,ok:!0})}catch(o){b("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:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(rt.has(o.id)){b("webview_busy",{prompt:"execute_plan",session:o.id});try{t.postMessage({type:"error",sid:o.id,message:M("ext.sessionBusy")})}catch{}return}await Aa("execute_plan",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="auto_keep_check"){let o=Jm();b("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:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(rt.has(o.id)){yS(o,Object.assign({},r,{echoed:!0}));return}await Aa("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,k){try{t.postMessage({type:"edit_error",sid:o?o.id:String(r.sessionId||""),message:M(y,k)})}catch{}};if(!o){a("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(rt.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=Bp(c,u,d);if(f<0){a("ext.editMissing");return}let p=c[f]||{},m={t:"user",text:l,web:!!p.web};u&&(m.uid=u),Array.isArray(p.images)&&p.images.length&&(m.images=p.images);let h=c.length-(f+1);i?c.length=f:(c[f]=Yn.clampItem(m),c.length=f+1),f===0&&(o.title=""),bt(o),ni(o,null,{keepScroll:!0}),qe(xn()),qe({type:"edit_done",sid:o.id,removed:h,resend:i}),b("session_edit",{source:n,id:o.id,removed:h,uid:u,ordinal:d,resend:i}),i&&(qe({type:"queue_start",id:o.id,item:{text:l,web:!!p.web,uid:u,images:p.images||[],mode:r.mode,modelKey:r.modelKey}}),await Aa("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:M(f,p)})}catch{}};if(!o){i("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(rt.has(o.id)){i("ext.deleteBusy");return}let a=o.items||[],l=r.uid?String(r.uid):"",c=Number(r.ordinal),u=Bp(a,l,c);if(u<0){i("ext.deleteMissing");return}let d=k_(a,u);if(!d){i("ext.deleteMissing");return}a.splice(d.start,d.removed),d.start===0&&(o.title=""),bt(o),ni(o,null,{keepScroll:!0}),qe(xn()),qe({type:"turn_deleted",sid:o.id,removed:d.removed}),b("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){b("stale_session_hit",{type:"queue_add",id:String(r.sessionId||"")});return}if(!rt.has(o.id)){let a=fu({id:$m(),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:eh(o,r.images,r.modelKey)});if(!a)return;qe({type:"queue_start",id:o.id,item:a}),ps(o),await Aa("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=yS(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){b("stale_session_hit",{type:"queue_remove",id:String(r.sessionId||"")});return}AD(o,r.id);return}if(r.type==="queue_clear"){let o=qn(r,t);if(!o){b("stale_session_hit",{type:"queue_clear",id:String(r.sessionId||"")});return}OD(o);return}if(r.type==="queue_resume"){let o=qn(r,t);if(!o)return;o.queuePaused=!1,bt(o),ps(o),b("queue_resume",{id:o.id,size:Cn(o).length}),rt.has(o.id)||Qm(o,t,n);return}if(r.type==="queue_run_now"){let o=qn(r,t);if(!o){b("stale_session_hit",{type:"queue_run_now",id:String(r.sessionId||"")});try{t.postMessage({type:"queue_error",id:"",message:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}let i=PD(o,r.id,t,n);if(!i.ok)try{t.postMessage({type:"queue_error",id:o.id,message:i.error||M("ext.queueMissing")})}catch{}return}}})}function cm(t){if(Me)return Me.reveal(),Me;let e=x.window.createWebviewPanel("luban","Luban",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[so(t.extensionUri)]});e.webview.html=__(e.webview,t.extensionUri),Me=e;let n=sh(e.webview,t,"panel");return e.onDidDispose(()=>{Me=null,kt===e.webview&&(kt=null),Ct.delete(e.webview),n.dispose(),b("panel_disposed",{ok:!0})}),b("panel_opened",{ok:!0}),e}function rF(t){let e={resolveWebviewView(n){fe=n,n.webview.options={enableScripts:!0,localResourceRoots:[so(t.extensionUri)]},n.webview.html=__(n.webview,t.extensionUri),sh(n.webview,t,"view"),n.onDidDispose(()=>{kt===n.webview&&(kt=null),Ct.delete(n.webview),fe=null}),b("view_resolved",{ok:!0})}};try{let n=x.window.registerWebviewViewProvider("luban.chatView",e,{webviewOptions:{retainContextWhenHidden:!0}});return b("view_provider_registered",{ok:!0}),n}catch(n){return b("view_provider_failed",{message:n.message}),{dispose:function(){}}}}var Es={busy:!1,stamps:[],enabled:!1,last:""};function mu(){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 Oa(t){return new Promise(function(e){setTimeout(e,Math.max(0,Number(t)||0))})}function xS(t){let e=Date.now();return Es.stamps=Es.stamps.filter(function(n){return e-n<6e4}),Es.stamps.length<t}async function oF(t,e,n,s){let r=mu();if(!r.enabled)return[];let o=function(i){return b("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=ft(si());if(!a||!Ic(a.provider))return o("provider-unsupported");if(Es.busy)return o("busy");if(!xS(r.maxPerMinute))return o("rate-limit");if(await Oa(r.debounceMs),s&&s.isCancellationRequested)return o("cancelled");if(!xS(r.maxPerMinute))return o("rate-limit");Es.busy=!0,Es.stamps.push(Date.now());let l=Date.now(),c;try{c=await FS({modelKey:a.key,path:Xn(t.uri.fsPath,L()),text:i,offset:t.offsetAt(e),signal:s})}catch(u){return b("inline_completion",{ms:Date.now()-l,chars:0,error:String(u&&u.message||u).slice(0,160)}),[]}finally{Es.busy=!1}return Es.last=c.text||"",b("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 Es.busy=!1,b("inline_completion_failed",{message:String(i&&i.message||i).slice(0,160)}),[]}}function iF(t){if(!x.languages||typeof x.languages.registerInlineCompletionItemProvider!="function"){b("inline_provider_unsupported",{ok:!1});return}try{let e={provideInlineCompletionItems:oF};t.subscriptions.push(x.languages.registerInlineCompletionItemProvider({pattern:"**"},e)),b("inline_provider_registered",{enabled:mu().enabled})}catch(e){b("inline_provider_failed",{message:String(e&&e.message||e).slice(0,160)})}}async function aF(){let e=!mu().enabled;try{await x.workspace.getConfiguration("luban").update("inlineCompletion.enabled",e,x.ConfigurationTarget.Global),b("inline_toggle",{enabled:e});try{x.window.showInformationMessage(M(e?"ext.inlineOn":"ext.inlineOff"))}catch{}}catch(n){b("inline_toggle_failed",{message:String(n&&n.message||n).slice(0,160)})}return e}var lF="luban";function C_(t){return TS.register({vscode:x,context:t,vendor:lF,rec:b,version:fs,allModels:Zn,resolveModel:ft,streamChat:Qo})}function cF(t){jc("activate"),$p("activate"),ou(),b("activate",{at:new Date().toISOString(),root:L(),configSource:Vo,models:Zn().length});try{vn.autoServe()}catch(g){b("status_serve_failed",{message:g.message})}try{vn.update({source:"extension",workspace:L()||"",text:"\u7A7A\u95F2"})}catch{}Ht.configure({root:L(),rec:b});try{Ht.refresh(L())}catch(g){b("skills_scan_failed",{message:g.message})}Fc("activate"),Ta(L()),Se.configure({root:L(),version:fs,rec:b}),Se.start().then(function(g){b("mcp_start_done",{servers:g.servers.length,tools:g.tools.length})},function(g){b("mcp_start_failed",{message:g.message})}),qm(t).then(function(g){b("secrets_ready",{keys:g}),Bm()}),Pa(x.window.activeTextEditor),t.subscriptions.push(x.window.onDidChangeActiveTextEditor(Pa)),t.subscriptions.push(x.window.onDidChangeTextEditorSelection(function(g){Pa(g.textEditor)}));try{nh(t)}catch(g){b("session_restore_failed",{message:g.message})}try{let g=new Set(we.slice());for(let w of de.values())g.add(w.id);for(let w of ke.list())g.add(w.id);let v=Te.sweepOrphans(g);v.removed&&b("attachments_sweep",v)}catch(g){b("attachments_sweep_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.openPanel",()=>cm(t))),C_(t);try{let g=$j.mount({vscode:x,status:vn,tr:M,rec:b});g&&t.subscriptions.push(g)}catch(g){b("statusbar_mount_failed",{message:g.message})}try{let g=vn.subscribe(function(){sF()});t.subscriptions.push({dispose:function(){try{g()}catch{}}})}catch(g){b("status_push_failed",{message:g.message})}t.subscriptions.push(x.commands.registerCommand("luban.providerSettings",()=>zm(t))),t.subscriptions.push(x.commands.registerCommand("luban.plugins",()=>Vc(t,"plugins"))),t.subscriptions.push(x.commands.registerCommand("luban.market",()=>Vc(t,"market"))),t.subscriptions.push(x.commands.registerCommand("luban.dashboard",()=>Zv(t))),t.subscriptions.push(x.commands.registerCommand("luban.rules.open",async()=>{try{let g=L()||it.homedir(),v=D.join(g,".luban","rules"),w=D.join(v,"default.md"),S=!1;P.existsSync(w)||(P.mkdirSync(v,{recursive:!0}),P.writeFileSync(w,GN,"utf8"),S=!0,Ta(g));let _=await x.workspace.openTextDocument(x.Uri.file(w));await x.window.showTextDocument(_,{preview:!1}),x.window.setStatusBarMessage(M(S?"ext.rulesCreated":"ext.rulesOpened",{file:w}),4e3)}catch(g){b("rules_open_failed",{message:g.message}),x.window.showErrorMessage(M("ext.rulesFailed",{msg:g.message}))}})),t.subscriptions.push(x.commands.registerCommand("luban.openInBrowser",async g=>{let v=Array.isArray(g)?g[0]:g;await M_(v&&typeof v=="object"?v.linkUrl:"","context")})),t.subscriptions.push(x.commands.registerCommand("luban.browserCheck",async()=>{let g=kr(),v=wt.findChrome(g.chromePath);if(!v.path){x.window.showErrorMessage(M("ext.browserNotFound",{paths:v.tried.slice(0,4).map(function(w){return" "+w}).join(`
973
+ `)}));return}await x.window.withProgress({location:x.ProgressLocation.Notification,title:M("ext.browserCheckRunning"),cancellable:!1},async function(){let w=null;try{w=await wt.launch({exe:g.chromePath,headless:g.headless,width:g.width,height:g.height}),await w.navigate("data:text/html,<title>Luban</title><h1>Luban browser check</h1>");let S=await w.snapshot(1200),_=await w.screenshot({});b("browser_check",{ok:!0,exe:w.exe,snapChars:S.length,shotChars:_.length}),x.window.showInformationMessage(M("ext.browserCheckOk",{exe:v.path,chars:String(Math.round(_.length/1024))}))}catch(S){b("browser_check",{ok:!1,message:String(S&&S.message||S)}),x.window.showErrorMessage(M("ext.browserCheckFailed",{message:String(S&&S.message||S)}))}finally{if(w)try{await w.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 rv(n),w=await v.screenshot({});e===g&&g.webview.postMessage({type:"shot",dataUrl:w,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=kr();if(!g.enabled){x.window.showWarningMessage(M("ext.browserPreviewDisabled"));return}if(!g.preview){x.window.showWarningMessage(M("ext.browserPreviewOff"));return}let v=String(Pe||"_default");if(e){if(n===v){e.reveal();return}e.dispose()}n=v;let w=x.window.createWebviewPanel("luban.browserPreview","Luban \u6D4F\u89C8\u5668\u9884\u89C8",x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0});e=w,w.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>',b("browser_preview_open",{sessionId:v}),o(w),w.onDidDispose(function(){e===w&&(e=null,n=null),r(),b("browser_preview_close",{sessionId:v})}),w.onDidChangeViewState(function(S){S.webviewPanel.visible?o(w):r()})})),zp=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 w of v)w&&w.uri&&w.uri.fsPath&&g.push(w.uri.fsPath)}catch{}return g}function f(g,v,w){let S=jx.classifyImage(v,w,d());if(S.kind==="workspace")try{return String(g.asWebviewUri(x.Uri.file(S.abs)))}catch{return null}if(S.kind==="inline")try{let _=P.statSync(S.abs);if(!_.isFile()||_.size>QD)return null;let C=P.readFileSync(S.abs),A=D.extname(S.abs).toLowerCase();return"data:"+(eF[A]||"application/octet-stream")+";base64,"+C.toString("base64")}catch{return null}return null}function p(g,v,w){let S={},_=jx.extractImageUrls(v);for(let C of _)S[C]=f(g,C,w);return S}function m(g,v){if(!g||g!==i)return;let w="";try{let C=x.workspace.textDocuments.find(function(A){return A.uri.toString()===v.toString()});w=C?C.getText():""}catch{w=""}let S={};try{let C=D.dirname(v.fsPath);S=p(g.webview,w,C)}catch{S={}}let _=v.fsPath||v.toString();try{g.webview.postMessage({type:"doc",content:w,imageMap:S,filePath:_,lang:rn||Va()})}catch{}}function h(g,v){if(i)return a=v,Xo=v,i.title=M("ext.mdPreviewTitle"),i.reveal(x.ViewColumn.Beside,!0),m(i,v),i;let w=x.window.createWebviewPanel("luban.markdownPreview",M("ext.mdPreviewTitle"),x.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[so(g.extensionUri)].concat(d().map(function(S){return x.Uri.file(S)}))});return i=w,a=v,u=!1,Xo=v,qa=!1,Ra=w.webview,w.webview.html=nF(w.webview,g.extensionUri),b("md_preview_open",{file:v.fsPath||v.toString()}),w.webview.onDidReceiveMessage(function(S){if(!(!S||!S.type)){if(S.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:"mdpreview"},S),b("md_preview_ack",{kind:S.kind,n:S.n,total:S.total,value:S.value||""});return}if(S.type==="ready"){u=!0,qa=!0,m(w,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()&&m(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))})),w.onDidDispose(function(){l&&(clearTimeout(l),l=null);for(let S of c)try{S.dispose()}catch{}c=[],Ra===w.webview&&(Ra=null),i===w&&(i=null,a=null,Xo=null,u=!1,qa=!1),b("md_preview_close",{})}),w}t.subscriptions.push(x.commands.registerCommand("luban.markdownPreview",async()=>{let g=x.window.activeTextEditor;if(!g||!tF(g.document)){x.window.showWarningMessage(M("ext.mdPreviewNotMarkdown"));return}try{h(t,g.document.uri)}catch(v){x.window.showWarningMessage(M("ext.mdPreviewFailed")+" "+String(v&&v.message||v))}})),iF(t),t.subscriptions.push(x.commands.registerCommand("luban.inlineCompletion.toggle",aF)),t.subscriptions.push(x.commands.registerCommand("luban.focusView",async()=>{try{await x.commands.executeCommand("workbench.view.extension.luban"),b("focus_view",{ok:!0})}catch(g){b("focus_view",{ok:!1,message:g.message})}})),t.subscriptions.push(rF(t)),SI(t),t.subscriptions.push(x.commands.registerCommand("luban.agent",async()=>{let g=await x.window.showInputBox({prompt:M("ext.agentPrompt")});g&&await x.window.withProgress({location:x.ProgressLocation.Notification,title:"Luban agent"},async v=>{let w=no(tn()),S=As(w&&w.items||[],"",{resolveImage:Os(w)}),_=await Ds(g,{root:L(),history:S.messages,sessionId:w?w.id:"",onProgress:C=>v.report({message:C})});Vp({modelKey:si(),mode:"agent",source:"command",session:w?w.id:""},_.usage),x.window.showInformationMessage(M("ext.agentDone",{n:_.log.length}))})}));async function y(){await Um(t);try{Ht.configure({root:L(),rec:b}),Ht.refresh(L())}catch(w){b("skills_scan_failed",{message:w.message})}Ta(L());let g="";try{Se.configure({root:L(),version:fs,rec:b});let w=await Se.reload();g=M("ext.mcpNote",{servers:w.servers.length,tools:w.tools.length})}catch(w){g=M("ext.mcpFail",{msg:w.message}),b("mcp_reload_failed",{message:w.message})}let v="";try{let w=Za();Je.configure({root:L(),enabled:w.enabled,maxTools:w.maxTools,rec:b,confirm:sv}),await Je.reload();let S=Je.status();v=M("ext.pluginNote",{plugins:S.plugins.length,tools:S.tools.length})}catch(w){b("plugins_reload_failed",{message:w.message})}x.window.showInformationMessage(M("ext.configReloaded",{models:Zn().length,skills:Ht.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 to("command"),await ct(),x.window.setStatusBarMessage(M("ext.newSessionNotice"),2e3)})),t.subscriptions.push(x.commands.registerCommand("luban.cursorPlan",XD)),t.subscriptions.push(x.commands.registerCommand("luban.sessionList",async()=>{Yc=!0,await ct()&&tn()&&(Yc=!1,qe({type:"toggle_session_list"}))})),t.subscriptions.push(x.commands.registerCommand("luban.mode.cycle",async()=>{await ct();let g=tn();g&&g.postMessage({type:"cycle_mode"})})),t.subscriptions.push(x.commands.registerCommand("luban.findInSession",async()=>{await ct();let g=tn();g&&g.postMessage({type:"open_find"})}));async function k(g,v,w,S){let _=(Array.isArray(w)&&w.length?w:v?[v]:[]).filter(function(W){return W&&W.scheme==="file"}),C=L(),A=[];for(let W of _){let B=zS(W.fsPath,C);B&&A.push(B)}if(!A.length)return;let F=await ct(),K=tn();if(!F||!K){x.window.showWarningMessage(M("ext.addFileNoView")),b("add_"+g+"_to_chat_failed",{n:A.length,reason:"no_webview"});return}S&&await to("add_to_new_chat",K),K.postMessage({type:"insert_ref",text:A.join(""),n:A.length,focus:!!S}),b("add_"+g+(S?"_to_new_chat":"_to_chat"),{n:A.length})}t.subscriptions.push(x.commands.registerCommand("luban.addFileToChat",(g,v)=>k("file",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToChat",(g,v)=>k("folder",g,v))),t.subscriptions.push(x.commands.registerCommand("luban.addFileToNewChat",(g,v)=>k("file",g,v,!0))),t.subscriptions.push(x.commands.registerCommand("luban.addFolderToNewChat",(g,v)=>k("folder",g,v,!0)));async function T(g){let v=GS(L());if(!v){x.window.showWarningMessage(M("ext.addSelectionNone")),b("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_selection"});return}let w=await ct(),S=tn();if(!w||!S){x.window.showWarningMessage(M("ext.addFileNoView")),b("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_webview"});return}g&&await to("add_to_new_chat",S),S.postMessage({type:"insert_ref",text:v,n:1,focus:!!g}),b("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{nt().setMax(n_())}catch{}g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionMemory")&&b("session_memory_config",Vr()),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.plugins")&&nv(),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.language")&&jc("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.net.tlsMaxVersion")&&$p("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban")&&Mt&&rD()})),t.subscriptions.push(x.workspace.onDidChangeWorkspaceFolders(function(){let g=L();Ht.configure({root:g,rec:b});try{Ht.refresh(g)}catch(v){b("skills_scan_failed",{message:v.message})}if(Ta(g),Se.configure({root:g,version:fs,rec:b}),Se.reload().then(function(v){b("mcp_reload_done",{servers:v.servers.length,tools:v.tools.length})},function(v){b("mcp_reload_failed",{message:v.message})}),Fc("workspace_change"),g!==Gm)try{v_(t)}catch(v){b("session_restore_failed",{message:v.message,reason:"workspace_change"})}}));try{let g=x.workspace.getConfiguration("luban").get("autoOpen");b("auto_open_decided",{autoOpen:g}),g!==!1&&setTimeout(function(){x.commands.executeCommand("workbench.view.extension.luban").then(function(){b("auto_open_view",{ok:!0})},function(v){b("auto_open_view",{ok:!1,message:String(v&&v.message)})})},1200)}catch(g){b("auto_open_view",{ok:!1,message:g.message})}hF(t)}function hu(){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 uF(){let t=hu(),e=P.mkdtempSync(D.join(it.tmpdir(),"luban-fs-op-")),n=function(s,r){let o=D.join(e,s);P.mkdirSync(D.dirname(o),{recursive:!0}),P.writeFileSync(o,r)};try{n("a.js",`const foo1 = 1;
974
974
  const foo2 = 2;
975
975
  `),n("src/b.ts",`export const bar = foo1;
976
976
  `),n("src/deep/c.md",`foo(123)
@@ -992,7 +992,7 @@ const foo2 = 2;
992
992
  +new
993
993
  *** 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
994
994
  `});t.ok("write_blocked_cache",v.indexOf("\u8DF3\u8FC7")>=0&&v.indexOf("npm-cache")>=0,v);let w=await r("write_file",{path:".m2/repository/org/apache/x/1/pom.xml",content:`x
995
- `});t.ok("write_blocked_m2",w.indexOf("\u8DF3\u8FC7")>=0&&w.indexOf(".m2")>=0,w),t.ok("blocked_no_write",!P.existsSync(D.join(e,"node_modules/dep/patch.js"))&&!P.existsSync(D.join(e,"node_modules/dep/new.js"))&&!P.existsSync(D.join(e,"npm-cache/_npx/81dd2fe1/patched.js"))&&!P.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 mr.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 $n("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{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function dF(){let t=hu(),e=P.mkdtempSync(D.join(it.tmpdir(),"luban-patch-op-")),n=function(r,o){let i=D.join(e,r);P.mkdirSync(D.dirname(i),{recursive:!0}),P.writeFileSync(i,o)},s=function(r){return P.readFileSync(D.join(e,r),"utf8")};try{n("a.js",`const a = 1;
995
+ `});t.ok("write_blocked_m2",w.indexOf("\u8DF3\u8FC7")>=0&&w.indexOf(".m2")>=0,w),t.ok("blocked_no_write",!P.existsSync(D.join(e,"node_modules/dep/patch.js"))&&!P.existsSync(D.join(e,"node_modules/dep/new.js"))&&!P.existsSync(D.join(e,"npm-cache/_npx/81dd2fe1/patched.js"))&&!P.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 hr.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 $n("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{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function dF(){let t=hu(),e=P.mkdtempSync(D.join(it.tmpdir(),"luban-patch-op-")),n=function(r,o){let i=D.join(e,r);P.mkdirSync(D.dirname(i),{recursive:!0}),P.writeFileSync(i,o)},s=function(r){return P.readFileSync(D.join(e,r),"utf8")};try{n("a.js",`const a = 1;
996
996
  const b = 2;
997
997
  `),n("old.js",`legacy
998
998
  `);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(`
@@ -1019,23 +1019,23 @@ beta
1019
1019
  *** Add File: d.js
1020
1020
  +b
1021
1021
  *** End Patch`)).ok),t.ok("patch_no_begin",!!Bn.parsePatch(`*** Add File: x
1022
- +y`).error)}finally{try{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function fF(){let t=hu(),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=Ns.summarize(n);t.ok("lints_summary",s.total===3&&s.error===2&&s.warning===1,JSON.stringify(s));let r=Ns.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(Ns.formatLints({})));let o={"/x.js":[]};for(let a=0;a<30;a++)o["/x.js"].push(e(1,a,"w"+a));let i=Ns.formatLints(o,{maxDiags:5});return t.ok("lints_truncate",(i.match(/^WARNING/gm)||[]).length===5,String((i.match(/^WARNING/gm)||[]).length)),t}async function pF(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,w){try{let S=await w();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&&!Ra;)await new Promise(function(v){setTimeout(v,100)});let a=Date.now()+15e3;for(;Date.now()<a&&!qa;)await new Promise(function(v){setTimeout(v,100)});let l=Ra;if(!l)return s.error="\u9884\u89C8\u9762\u677F\u6CA1\u8D77\u6765",s;s.opened=!0,s.ready=qa===!0,s.doc=Xo?Xo.fsPath||String(Xo):"";let c=function(v){return new Promise(function(w){setTimeout(w,v)})},u=async function(){j=null;try{l.postMessage({type:"preview_probe"})}catch{return null}let v=await Oe(5e3,function(w){return w.kind==="preview_state"});return v?{scrollTop:v.scrollTop,scrollHeight:v.scrollHeight,follow:v.follow}:null},d=function(v){let w=new x.Position(Math.max(0,Math.min(Number(v)||0,o.document.lineCount-1)),0);o.revealRange(new x.Range(w,w),x.TextEditorRevealType.AtTop)},f=async function(v){j=null;try{l.postMessage({type:"preview_follow",on:v})}catch{return null}let w=await Oe(5e3,function(S){return S.kind==="preview_follow_ok"});return w?{scrollTop:w.scrollTop,follow:w.follow}:null};j=null,l.postMessage({type:"preview_selftest"});let p=await Oe(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 m=await u();d(n.scrollLine==null?60:n.scrollLine),await c(1200);let h=await u(),y=await f(!1);d(n.holdLine==null?3:n.holdLine),await c(1200);let k=await u(),T=await f(!0);s.scroll={before:m&&m.scrollTop,after:h&&h.scrollTop,frozen:k&&k.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:!!m&&!!h&&h.scrollTop>m.scrollTop,follow_off:s.follow.off===!1&&!!k&&!!h&&k.scrollTop===h.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 mF=["ping","tab_probe","session_probe","review_probe","reset","toggle_session_list","cycle_mode","insert_ref"];function hF(t){let e=Pc+"/cmd.json",n=Pc+"/cmd_result.json";setInterval(async()=>{let s;try{if(!P.existsSync(e))return;s=JSON.parse(P.readFileSync(e,"utf8"))}catch{return}try{P.unlinkSync(e)}catch{}let r={op:s.op||s.cmd,at:new Date().toISOString()};try{if(s.op==="mdpreview"){b("headless_mdpreview_start",{file:String(s.file||"")});try{let o=await pF(String(s.file||""),s);r.ok=o.ok===!0,r.result=o,o.error&&(r.error=o.error),b("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),b("headless_mdpreview",{ok:!1,error:r.error,stack:r.stack.split(`
1022
+ +y`).error)}finally{try{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function fF(){let t=hu(),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 pF(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,w){try{let S=await w();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&&!Ra;)await new Promise(function(v){setTimeout(v,100)});let a=Date.now()+15e3;for(;Date.now()<a&&!qa;)await new Promise(function(v){setTimeout(v,100)});let l=Ra;if(!l)return s.error="\u9884\u89C8\u9762\u677F\u6CA1\u8D77\u6765",s;s.opened=!0,s.ready=qa===!0,s.doc=Xo?Xo.fsPath||String(Xo):"";let c=function(v){return new Promise(function(w){setTimeout(w,v)})},u=async function(){j=null;try{l.postMessage({type:"preview_probe"})}catch{return null}let v=await Oe(5e3,function(w){return w.kind==="preview_state"});return v?{scrollTop:v.scrollTop,scrollHeight:v.scrollHeight,follow:v.follow}:null},d=function(v){let w=new x.Position(Math.max(0,Math.min(Number(v)||0,o.document.lineCount-1)),0);o.revealRange(new x.Range(w,w),x.TextEditorRevealType.AtTop)},f=async function(v){j=null;try{l.postMessage({type:"preview_follow",on:v})}catch{return null}let w=await Oe(5e3,function(S){return S.kind==="preview_follow_ok"});return w?{scrollTop:w.scrollTop,follow:w.follow}:null};j=null,l.postMessage({type:"preview_selftest"});let p=await Oe(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 m=await u();d(n.scrollLine==null?60:n.scrollLine),await c(1200);let h=await u(),y=await f(!1);d(n.holdLine==null?3:n.holdLine),await c(1200);let k=await u(),T=await f(!0);s.scroll={before:m&&m.scrollTop,after:h&&h.scrollTop,frozen:k&&k.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:!!m&&!!h&&h.scrollTop>m.scrollTop,follow_off:s.follow.off===!1&&!!k&&!!h&&k.scrollTop===h.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 mF=["ping","tab_probe","session_probe","review_probe","reset","toggle_session_list","cycle_mode","insert_ref"];function hF(t){let e=Pc+"/cmd.json",n=Pc+"/cmd_result.json";setInterval(async()=>{let s;try{if(!P.existsSync(e))return;s=JSON.parse(P.readFileSync(e,"utf8"))}catch{return}try{P.unlinkSync(e)}catch{}let r={op:s.op||s.cmd,at:new Date().toISOString()};try{if(s.op==="mdpreview"){b("headless_mdpreview_start",{file:String(s.file||"")});try{let o=await pF(String(s.file||""),s);r.ok=o.ok===!0,r.result=o,o.error&&(r.error=o.error),b("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),b("headless_mdpreview",{ok:!1,error:r.error,stack:r.stack.split(`
1023
1023
  `).slice(0,4).join(" | ")})}}else if(s.op==="models")r.ok=!0,r.result=Zn().map(o=>({key:o.key,baseUrl:o.provider.baseUrl,keyFound:!!Zo(o.provider),keyless:Yo(o.provider)&&!Nc(o.provider),toolCalling:o.model.toolCalling!==!1,vision:o.model.vision===!0,webSearch:DS(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:M("panel.statusReady"),send:M("panel.send"),close:M("panel.menuClose"),execPlan:M("cross.execPlan"),saved:M("settings.saved",{n:2}),range7d:M("usage.7d"),lensKeep:M("ext.keepHunk",{add:3,del:1}),execSummary:M("ext.summary.exec",{n:4,s:"1.2"}),queueFull:M("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(Me||fe){let l=nN(s.waitMs||8e3);jc("headless"),i=await l}else jc("headless");let a=ES(o,x.env&&x.env.language);r.ok=rn===a&&(Me||fe?!!i:!0),r.result={setting:o,lang:rn,expected:a,ack:i},!r.ok&&!i&&(Me||fe)&&(r.error="\u804A\u5929\u9762\u677F\u6CA1\u6709\u786E\u8BA4\u8BED\u8A00\u5207\u6362")}else if(s.op==="i18ntest"){await ct();let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,o.postMessage({type:"i18n_selftest"});let i=await Oe(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=ft(s.modelKey),i=await pm(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:hm(i.results,i.query).slice(0,600)}}else if(s.op==="webfetch"){let o=ft(s.modelKey),i=await mm(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&amp;b=2</link>","<description>LTS &amp; Current &#8212; \u90FD\u652F\u6301 &lt;script&gt; \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;amp; B</title><link>http://example.com/x</link><description>\u53CC\u91CD\u7F16\u7801\u5B9E\u4F53</description></item>","</channel></rss>"].join(""),a=qS(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=Ba("<html><head><title>\u6807 &amp; \u9898</title><style>p{color:red}</style></head><body><!-- \u6CE8\u91CA --><h1>\u6807\u9898</h1><p>\u7B2C\u4E00\u6BB5&nbsp;\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
1024
1024
  \u7B2C\u4E00\u6BB5 \u6587\u5B57
1025
1025
  \u7B2C\u4E8C\u6BB5
1026
- \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 Is(s.prompt||"hi",{root:s.root||L(),modelKey:s.modelKey,thinking:s.thinking,verbosity:s.verbosity,maxIters:s.maxIters,maxMinutes:s.maxMinutes,history:s.history?Cs((Ie()||{}).items||[],s.modelKey,{resolveImage:As(Ie())}).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 Is(s.prompt||"hi",{root:s.root||L(),modelKey:s.modelKey,mode:"plan",history:s.history?Cs((Ie()||{}).items||[],s.modelKey,{resolveImage:As(Ie())}).messages:[]}),i=Ie(),a=d_(o.text,{prompt:s.prompt,workspace:s.root||L(),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
1026
+ \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 Ds(s.prompt||"hi",{root:s.root||L(),modelKey:s.modelKey,thinking:s.thinking,verbosity:s.verbosity,maxIters:s.maxIters,maxMinutes:s.maxMinutes,history:s.history?As((Ie()||{}).items||[],s.modelKey,{resolveImage:Os(Ie())}).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 Ds(s.prompt||"hi",{root:s.root||L(),modelKey:s.modelKey,mode:"plan",history:s.history?As((Ie()||{}).items||[],s.modelKey,{resolveImage:Os(Ie())}).messages:[]}),i=Ie(),a=d_(o.text,{prompt:s.prompt,workspace:s.root||L(),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
1027
1027
  \u505A X`,"## \u6B65\u9AA4","1. \u6539 a.js","2. \u8DD1\u6D4B\u8BD5",`## \u9A8C\u8BC1\u65B9\u5F0F
1028
1028
  \u770B\u8F93\u51FA`].join(`
1029
- `),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,K){o.push({name:A,ok:!!F,detail:K})},a=function(A){return(Array.isArray(A)?A:[]).map(function(F){return String(F.function&&F.function.name||"")})},l=s.root||L(),c=ft(s.modelKey),u=["write_file","replace_in_file","apply_patch","delete_file","move_file"],d=a(Nm);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(Tv).indexOf("explore")>=0);let f=a(cr("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)}},m=await p(function(){return $n("explore",{description:"x",prompt:"y"},l,c,{mode:"explore",inSubagent:!0,subBudget:{max:4,left:4}})});i("nestedBlocked",m.indexOf("\u4E0D\u80FD\u518D\u6D3E\u5B50\u4EE3\u7406")>=0,m);let h=await p(function(){return $n("explore",{description:"x",prompt:"y"},l,c,{mode:"agent",subBudget:{max:4,left:0}})});i("quotaBlocked",h.indexOf("\u6B21\u6570\u5DF2\u7528\u5B8C")>=0,h);let y=await p(function(){return $n("ask_question",{questions:[]},l,c,{mode:"explore"})});i("askBlocked",y.indexOf("\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE")>=0,y);let k=await p(function(){return $n("todo_write",{todos:[]},l,c,{mode:"explore",todosState:{items:[]}})});i("todoBlocked",k.indexOf("\u4E0D\u80FD\u7528 todo_write")>=0,k);let T=await $n("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(Da+50).join("a"),v=zc(g);i("resultCapped",v.length>Da&&v.indexOf("\u5DF2\u622A\u65AD")>=0&&zc("\u77ED\u7ED3\u8BBA")==="\u77ED\u7ED3\u8BBA"),i("explorePromptGuards",Ia.indexOf("\u5FC5\u987B\u6765\u81EA\u771F\u5B9E\u8C03\u7528")>=0&&Ia.indexOf("\u7981\u6B62\u628A\u9884\u671F\u5199\u6210\u7ED3\u679C")>=0&&Ia.indexOf("\u4E0D\u8981\u5728\u7ED3\u8BBA\u91CC\u6E05\u70B9")>=0);let w=Hc(!0),S=Hc(!1);i("exploreToolList",w.indexOf("\u5171 15 \u4E2A")>=0&&w.indexOf("read_skill")>=0&&w.indexOf("read_rule")>=0&&S.indexOf("\u5171 13 \u4E2A")>=0&&S.indexOf("web_search")<0&&String(ur("explore","/tmp",!0)).split(`
1030
- `).pop()===w,w),i("subagentCaveat",Xr("\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&&Xr("\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&&Xr("README \u91CC\u6CA1\u6709\u8BE5\u51FD\u6570\u3002",[{name:"read_file",ok:!0}])===""&&Xr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\u3002",[{name:"run_command",ok:!1}])==="",Xr("x",[]).slice(0,60));let _=Ga([{promptTokens:100,completionTokens:10},{promptTokens:30,completionTokens:5,subagent:!0}],65536,"selftest");i("usageMerged",_.requests===2&&_.promptTokens===130&&_.subagentRequests===1&&_.contextTokens===110,_),i("noWriteNudge",Cc([{name:"explore",ok:!0}])&&!Cc([{name:"explore",ok:!1}])&&!Cc([{name:"read_file",ok:!0}])&&!Pv([{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},b("headless_subagent",{ok:r.ok,failed:C})}else if(s.op==="cursorplans")if(s.file){let o=await x_(String(s.file));r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else{let o=wr.listPlans({home:it.homedir(),root:L()}),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=wr.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=[];Vn.forEach(function(d,f){u.push(f)}),o=u.length?u[u.length-1]:""}let i=Ie(),a=String(s.sessionId||i&&i.id||""),l=o?Vn.get(o):null,c=w_(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:Vn.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=Re(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&(j.kind==="plan_done"||j.kind==="dome_error")){a=j;break}let l=no(o),c=l?$a.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=Re(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){j=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)),j&&j.kind&&j.kind.indexOf("ime_")===0){d=j;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=Re(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null;let i=no(o),a=i?$a.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)),j&&(j.kind==="dome_done"||j.kind==="dome_error")){c=j;break}r.ok=!!c,r.result={ack:c}}}else if(s.op==="reftest"){let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=s.case||"file";j=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)),j&&j.kind&&j.kind.indexOf("ref_")===0){l=j;break}r.ok=!!(l&&/_ok$/.test(l.kind)),r.result=l||{kind:"timeout"}}}else if(s.op==="insertref"){await ct();let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=L(),a=Array.isArray(s.paths)&&s.paths.length?s.paths:["package.json"],l=a.map(function(c){return zS(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("");j=null,o.postMessage({type:"insert_ref",text:c,n:a.length});let u=await Oe(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},b("headless_insertref",{ok:r.ok,n:c.length,ack:u&&u.n})}}}else if(s.op==="seladd")try{let o=s.root||L(),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,Pa(l),await new Promise(p=>setTimeout(p,300)),await ct();let f=Re(s.to);if(!f)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let p=s.waitMs||8e3;j=null,f.postMessage({type:"ref_selftest",case:"clear"}),await Oe(p,function(_){return _.kind==="ref_clear_ok"}),j=null,await x.commands.executeCommand("luban.addSelectionToChat");let m=await Oe(p,function(_){return _.kind==="insert_ref"});j=null,f.postMessage({type:"ref_selftest",case:"input"});let h=await Oe(p,function(_){return _.kind==="ref_input_ok"}),y=String(h&&h.value||"").trim(),k=y?Zr(y,o):{refs:[],text:""},T=k.refs[0]||null,v=(a.getText(new x.Range(d.start,d.end)).split(`
1029
+ `),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,K){o.push({name:A,ok:!!F,detail:K})},a=function(A){return(Array.isArray(A)?A:[]).map(function(F){return String(F.function&&F.function.name||"")})},l=s.root||L(),c=ft(s.modelKey),u=["write_file","replace_in_file","apply_patch","delete_file","move_file"],d=a(Nm);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(Tv).indexOf("explore")>=0);let f=a(ur("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",Ns("explore",!1)&&Ns("explore",!0)&&!Ns("plan",!1)&&Ns("plan",!0)&&!Ns("agent",!0));let p=async function(A){try{return await A(),""}catch(F){return String(F&&F.message||F)}},m=await p(function(){return $n("explore",{description:"x",prompt:"y"},l,c,{mode:"explore",inSubagent:!0,subBudget:{max:4,left:4}})});i("nestedBlocked",m.indexOf("\u4E0D\u80FD\u518D\u6D3E\u5B50\u4EE3\u7406")>=0,m);let h=await p(function(){return $n("explore",{description:"x",prompt:"y"},l,c,{mode:"agent",subBudget:{max:4,left:0}})});i("quotaBlocked",h.indexOf("\u6B21\u6570\u5DF2\u7528\u5B8C")>=0,h);let y=await p(function(){return $n("ask_question",{questions:[]},l,c,{mode:"explore"})});i("askBlocked",y.indexOf("\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE")>=0,y);let k=await p(function(){return $n("todo_write",{todos:[]},l,c,{mode:"explore",todosState:{items:[]}})});i("todoBlocked",k.indexOf("\u4E0D\u80FD\u7528 todo_write")>=0,k);let T=await $n("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(Da+50).join("a"),v=zc(g);i("resultCapped",v.length>Da&&v.indexOf("\u5DF2\u622A\u65AD")>=0&&zc("\u77ED\u7ED3\u8BBA")==="\u77ED\u7ED3\u8BBA"),i("explorePromptGuards",Ia.indexOf("\u5FC5\u987B\u6765\u81EA\u771F\u5B9E\u8C03\u7528")>=0&&Ia.indexOf("\u7981\u6B62\u628A\u9884\u671F\u5199\u6210\u7ED3\u679C")>=0&&Ia.indexOf("\u4E0D\u8981\u5728\u7ED3\u8BBA\u91CC\u6E05\u70B9")>=0);let w=Hc(!0),S=Hc(!1);i("exploreToolList",w.indexOf("\u5171 15 \u4E2A")>=0&&w.indexOf("read_skill")>=0&&w.indexOf("read_rule")>=0&&S.indexOf("\u5171 13 \u4E2A")>=0&&S.indexOf("web_search")<0&&String(dr("explore","/tmp",!0)).split(`
1030
+ `).pop()===w,w),i("subagentCaveat",Xr("\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&&Xr("\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&&Xr("README \u91CC\u6CA1\u6709\u8BE5\u51FD\u6570\u3002",[{name:"read_file",ok:!0}])===""&&Xr("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\u3002",[{name:"run_command",ok:!1}])==="",Xr("x",[]).slice(0,60));let _=Ga([{promptTokens:100,completionTokens:10},{promptTokens:30,completionTokens:5,subagent:!0}],65536,"selftest");i("usageMerged",_.requests===2&&_.promptTokens===130&&_.subagentRequests===1&&_.contextTokens===110,_),i("noWriteNudge",Cc([{name:"explore",ok:!0}])&&!Cc([{name:"explore",ok:!1}])&&!Cc([{name:"read_file",ok:!0}])&&!Pv([{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},b("headless_subagent",{ok:r.ok,failed:C})}else if(s.op==="cursorplans")if(s.file){let o=await x_(String(s.file));r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else{let o=br.listPlans({home:it.homedir(),root:L()}),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=br.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=[];Vn.forEach(function(d,f){u.push(f)}),o=u.length?u[u.length-1]:""}let i=Ie(),a=String(s.sessionId||i&&i.id||""),l=o?Vn.get(o):null,c=w_(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:Vn.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=Cs.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&&!Cs.needsConfirm(u),c=u}catch(u){c=u.message}a("normalize",l,c)}if(o==="all"||o==="reject"){let l=!1;try{Cs.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=Cs.normalize({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),d=Cs.normalizeAnswers(u,{a:"x"}),f=Cs.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=Re(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&(j.kind==="plan_done"||j.kind==="dome_error")){a=j;break}let l=no(o),c=l?$a.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=Re(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){j=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)),j&&j.kind&&j.kind.indexOf("ime_")===0){d=j;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=Re(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null;let i=no(o),a=i?$a.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)),j&&(j.kind==="dome_done"||j.kind==="dome_error")){c=j;break}r.ok=!!c,r.result={ack:c}}}else if(s.op==="reftest"){let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=s.case||"file";j=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)),j&&j.kind&&j.kind.indexOf("ref_")===0){l=j;break}r.ok=!!(l&&/_ok$/.test(l.kind)),r.result=l||{kind:"timeout"}}}else if(s.op==="insertref"){await ct();let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=L(),a=Array.isArray(s.paths)&&s.paths.length?s.paths:["package.json"],l=a.map(function(c){return zS(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("");j=null,o.postMessage({type:"insert_ref",text:c,n:a.length});let u=await Oe(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},b("headless_insertref",{ok:r.ok,n:c.length,ack:u&&u.n})}}}else if(s.op==="seladd")try{let o=s.root||L(),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,Pa(l),await new Promise(p=>setTimeout(p,300)),await ct();let f=Re(s.to);if(!f)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let p=s.waitMs||8e3;j=null,f.postMessage({type:"ref_selftest",case:"clear"}),await Oe(p,function(_){return _.kind==="ref_clear_ok"}),j=null,await x.commands.executeCommand("luban.addSelectionToChat");let m=await Oe(p,function(_){return _.kind==="insert_ref"});j=null,f.postMessage({type:"ref_selftest",case:"input"});let h=await Oe(p,function(_){return _.kind==="ref_input_ok"}),y=String(h&&h.value||"").trim(),k=y?Zr(y,o):{refs:[],text:""},T=k.refs[0]||null,v=(a.getText(new x.Range(d.start,d.end)).split(`
1031
1031
  `).find(function(_){return _.trim()})||"").trim(),w=!!v&&String(k.text).indexOf(v)>=0,S=d.end.character===0&&u>c?u:u+1;r.ok=!!(m&&/^#selection .+:\d+-\d+$/.test(y)&&T&&T.kind==="selection"&&T.startLine===c+1&&T.endLine===S&&w),r.result={insertAck:m||null,token:y,ref:T,selectedRange:[c+1,S],injectedHasSelectedText:w},b("headless_seladd",{ok:r.ok,token:y,ack:m&&m.n})}}catch(o){r.ok=!1,r.error=o.message}else if(s.op==="webtest"){let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&j.kind&&j.kind.indexOf("web_")===0){a=j;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"}}}else if(s.op==="mdtest"){let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&j.kind&&j.kind.indexOf("md_")===0){a=j;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"}}}else if(s.op==="tooltest"){await ct();let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&j.kind&&j.kind.indexOf("tool_")===0){a=j;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"},b("headless_tooltest",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="viewscroll"){await ct();let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&j.kind&&j.kind.indexOf("scroll_")===0){a=j;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"},b("headless_viewscroll",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="thinktest"){await ct();let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&j.kind&&j.kind.indexOf("think_")===0){a=j;break}r.ok=!!(a&&/_ok$/.test(a.kind)),r.result=a||{kind:"timeout"},b("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||L(),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}),m=Math.max((s.startLine||1)-1,0),h=Math.min(s.endLine||m+2,Math.max(f.lineCount-1,0)),y=new x.Selection(new x.Position(m,0),new x.Position(h,0));p.selection=y,Pa(p),await new Promise(S=>setTimeout(S,400)),i=JS(),c=f.getText(new x.Range(y.start,y.end));let k=Zr("#selection \u89E3\u91CA\u8FD9\u6BB5",u);a=k.refs,l=k.text;let T=Re(s.to);if(T){j=null,T.postMessage({type:"ref_selftest",case:"button"});let S=Date.now()+12e3;for(;Date.now()<S;)if(await new Promise(_=>setTimeout(_,300)),j&&j.kind&&j.kind.indexOf("ref_selftest_button")===0){o=j;break}}let g=(c.split(`
1032
- `).find(function(S){return S.trim()})||"").trim(),v={ok:!0,skipped:!0,ranges:[]};if(Math.max(f.lineCount,1)>=4){let S=Xn(d,u),_=Zr("#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===m+1&&i.endLine===(y.end.character===0&&h>m?h:h+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:[m+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=Zr(s.prompt||"",s.root||L(),{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 jN(),i=await NN();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:dt,source:Vo,defaultModel:Gt.defaultModel,providers:(Gt.providers||[]).map(o=>({id:o.id,models:(o.models||[]).map(i=>i.id),keyFound:!!Zo(o),keyless:Yo(o)&&!Nc(o),inline:!!o.apiKey,secret:!!ps[o.id],env:!!Ya(o)}))};else if(s.op==="saveconfig"){let o=await Dv(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 Fv(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="fetchmodels"){let o=await Wm(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 Ja(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(_n.loadConfig()),a=await Hm(t,{config:Object.assign({},_n.loadConfig(),{url:"ftp://not-a-webdav"})});r.ok=!a.ok&&JSON.stringify(_n.loadConfig())===i,r.result={errors:a.errors||[],unchanged:JSON.stringify(_n.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 Jv(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"){zm(t),j=null;let o=Date.now()+(s.waitMs||2e4),i=null;for(;Date.now()<o;)if(await new Promise(a=>setTimeout(a,500)),j&&j.kind==="settings_rendered"){i=j;break}r.ok=!!i,r.result={ack:i,path:dt}}else if(s.op==="chat"){let o=await Qo([{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 ev(s.command||"echo hi",s.root||L(),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||L();if(o==="start_poll_stop"){let l=xe.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 xe.poll(i,l.job_id,{wait_ms:0,tail_chars:200}),u=await xe.poll(i,l.job_id,{wait_ms:5e3,tail_chars:800}),d=xe.stop(i,l.job_id);xe.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=xe.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),c=xe.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),u=xe.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),d=xe.runningCount(i);xe.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=xe.start(l,"sleep 2",{cwd:a,timeout_ms:1e4}),d=await xe.poll(c,u.job_id,{wait_ms:0});xe.clearSession(l),xe.clearSession(c),r.ok=!!(u.ok&&d.status==="missing"),r.result={a:u,cross:d}}else if(o==="cancel"){let l=xe.start(i,"sleep 5",{cwd:a,timeout_ms:2e4}),c=xe.stopAll(i),u=await xe.poll(i,l.job_id,{wait_ms:0});xe.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=mr.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=xe.start(i,"printf '\u{1F600}\u{1F600}\u{1F600}'",{cwd:a,timeout_ms:15e3}),c=await xe.poll(i,l.job_id,{wait_ms:5e3,tail_chars:3}),u=await xe.poll(i,l.job_id,{wait_ms:0,tail_chars:4});xe.clearSession(i);let d=String(c.out_tail||""),f=!1;for(let p=0;p<d.length;p++){let m=d.charCodeAt(p);if(m>=55296&&m<=56319){let h=d.charCodeAt(p+1);if(!(h>=56320&&h<=57343)){f=!0;break}p++}else if(m>=56320&&m<=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=xe.start(i,"sleep 5",{cwd:a,timeout_ms:400}),c=await xe.poll(i,l.job_id,{wait_ms:3e3});xe.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=uF(),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=dF(),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=fF(),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 $n(s.tool||"read_file",s.args||{},s.root||L(),null,{readMax:s.readMax});r.ok=!0,r.result={allowOutside:om(),text:String(o).slice(0,2e3)}}catch(o){r.ok=!1,r.error=o.message,r.result={allowOutside:om()}}else if(s.op==="fsskip")r.result=await A_(),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:Jp()};else if(s.op==="reviewdoc"){let o=tt(s.path,L()),i=await x.workspace.openTextDocument(x.Uri.from({scheme:"luban-before",path:o})),a=ae.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,L()),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(m){return{line:m.range?m.range.start.line+1:-1,title:m.command&&m.command.title,command:m.command&&m.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,L());if(!ae.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 Om(o,{preview:!0,preserveFocus:!0}),await new Promise(c=>setTimeout(c,400)));let a=i(),l={tabs:a,diffTabs:a.length,pending:ls(),frozenCount:kn.size,autoOpen:Qc(),contextActive:!!za(Ha())};if(s.accept){let c=ae.has(o)?ae.get(o).baseline:"";await Ka("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=kn.size,l.afterAcceptContext=!!za(Ha())}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=Re(s.to||"view")||tn();if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=null;s.focusInput===!0&&(j=null,o.postMessage({type:"focus_input"}),i=await Oe(s.waitMs||8e3,function(c){return c.kind==="focus_input"})?!0:null,await new Promise(function(c){setTimeout(c,200)})),j=null,o.postMessage({type:"focus_probe"});let a=await Oe(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:La.get(o)===!0,maximized:!!(a&&a.maximized),extMaximized:va(),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=Re(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;ti.set(a,l),l||dv(),await new Promise(function(c){setTimeout(c,400)}),r.result={simulated:l,maximized:va(),pendingAutoDiff:nn.size,tracked:La.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){j=null,a.postMessage({type:"focus_probe"});let p=await Oe(s.waitMs||8e3,function(m){return m.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(m){setTimeout(function(){m("<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:va(),pendingAutoDiff:nn.size};else{j=null,a.postMessage({type:"focus_probe"});let p=await Oe(s.waitMs||8e3,function(m){return m.kind==="focus_probe"});r.ok=!!p,r.ok||(r.error="focus_probe \u8D85\u65F6"),r.result={maximized:!!(p&&p.maximized),extMaximized:va(),tracked:La.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=Re(s.to);if(o||(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500)),o=Re(s.to)),!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{o.postMessage(Wa()),await new Promise(l=>setTimeout(l,400)),j=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)),j&&j.kind==="review_probe"){a=j;break}r.ok=!!a,r.result=a||{kind:"timeout"}}}else if(s.op==="reviewdeco"){let o=tt(s.path,L()),i=ae.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=hv(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:kn.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:Qc()}}catch(a){r.ok=!1,r.error=String(a&&a.stack||a).slice(0,800)}}}else if(s.op==="review_action"){let o=await Ka(s.action,s.path,s.hunk||"",s.sessionId),i="";try{i=Qr(tt(s.path,L()))}catch{i=""}r.ok=!!o.ok,o.ok||(r.error=o.error),r.result=Object.assign({},o,{remaining:ls(),fileCount:ae.size,exists:i!==""||function(){try{return P.existsSync(tt(s.path,L()))}catch{return!1}}(),current:i.slice(0,3e3)})}else if(s.op==="review_edit"){let o=tt(s.path,L()),i=P.existsSync(o),a=i?P.readFileSync(o,"utf8"):"",l=s.content==null?"":String(s.content);await hr(o,l);let c=as(o,a,l,!i);r.ok=!0,r.result={hunks:c,existed:i,total:ls(),files:Jp()}}else if(s.op==="openpanel")cm(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))):Re(s.to)||(cm(t),await new Promise(i=>setTimeout(i,2500)));let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&(j.kind==="dome_done"||j.kind==="plan_done")){a=j;break}if(j&&j.kind==="dome_error"){a=j;break}}r.ok=!!a,r.result={ack:a}}}else if(s.op==="newsession"){await ct();let o=Re(s.to);j=null;let i=await to(s.reason||"headless",o),a=o?await Oe(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:ae.size,hunks:ls()}}else if(s.op==="listsessions")nt(),r.ok=!0,r.result={current:Pe||"",openTabs:we.slice(),root:L(),sessions:ke.list(s.scope||"workspace",s.root||L()).slice(0,s.limit||50)};else if(s.op==="searchsessions"){let o=l_(s.q,s.scope||"workspace",s.root||L(),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 ct();let o=Re(s.to);j=null;let i=await $r(String(s.id||""),o),a=i.ok&&o?await Oe(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:du(Ie())}}else if(s.op==="deletesession"){let o=await lr(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=ei(o);if(!i)try{i=nt().load(o)}catch{i=null}if(!i)r.ok=!1,r.error=M("ext.noSuchSession",{id:o});else if(rt.has(i.id))r.ok=!1,r.error=M("ext.forkBusy");else{let a=s.at==null||s.at===""?null:Number(s.at),l=su(i,a,Re(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 ct();let i=Re(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{nt();let a=function(d,f){let p=ke.create(L());return ke.append(p,{t:"user",text:"\u4F1A\u8BDD "+d+" \u7684\u95EE\u9898"}),ke.append(p,{t:"tool",name:"read_file",path:d+".js",ok:!0,result:"12 \u884C"}),ke.append(p,{t:"text",text:"\u4F1A\u8BDD "+d+" \u7684\u56DE\u7B54\u3002"}),f&&ke.append(p,f),ke.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=ae.size;if(o==="list"){i.postMessage({type:"toggle_session_list"}),await new Promise(function(f){setTimeout(f,400)}),j=null,i.postMessage({type:"session_probe"});let d=await Oe(6e3,function(f){return f.kind==="session_probe"});r.ok=!!(d&&d.popupOpen&&d.sessionItems>=1),r.result={probe:d,sessions:ke.list().length},i.postMessage({type:"toggle_session_list"})}else if(o==="replay"){j=null,await $r(l.id,i);let d=await Oe(8e3,function(p){return p.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let f=await Oe(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=ke.create(L());ke.append(f,{t:"user",text:"\u5E2E\u6211\u770B\u770B\u80FD\u8017\u62A5\u544A"}),ke.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF08\u6807\u8BB0 "+d+"\uFF09\u3002"}),ke.save(f);let p=ke.create(L());ke.append(p,{t:"user",text:"\u80FD\u8017\u62A5\u544A\u7684\u6807\u9898\u547D\u4E2D"}),ke.append(p,{t:"text",text:"\u8FD9\u6761\u6B63\u6587\u91CC\u6CA1\u6709\u6807\u8BB0\u3002"}),ke.save(p),j=null,i.postMessage({type:"session_search_selftest",q:d});let m=await Oe(12e3,function(h){return String(h.kind||"").indexOf("session_search")===0});r.ok=!!(m&&/_ok$/.test(m.kind)&&m.searchRows===1&&m.searchSnippets===1&&m.searchMarks>=1&&m.searchFull>1),r.result={ack:m,mark:d},await lr(f.id),await lr(p.id)}else if(o==="find"){let d="FS"+Date.now().toString(36).toUpperCase(),f=ke.create(L());ke.append(f,{t:"user",text:"\u5E2E\u6211\u627E\u4E00\u4E0B\u6B63\u6587\u91CC\u7684\u6807\u8BB0\u3002"}),ke.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"}),ke.save(f),j=null,await $r(f.id,i);let p=await Oe(8e3,function(h){return h.kind==="session_opened"});j=null;try{await x.commands.executeCommand("luban.findInSession")}catch{}await new Promise(function(h){setTimeout(h,500)}),j=null,i.postMessage({type:"find_selftest",q:d});let m=await Oe(12e3,function(h){return String(h.kind||"").indexOf("find_")===0});r.ok=!!(p&&m&&/_ok$/.test(m.kind)&&m.findHits===2&&m.findMarks===2&&m.findCurrent===1&&m.findOpen&&m.findPreOpened===!0&&m.findLeft===0),r.result={ack:m,mark:d},await lr(f.id)}else if(o==="switch"){j=null,await $r(l.id,i),await Oe(8e3,function(m){return m.kind==="session_opened"}),j=null,i.postMessage({type:"session_probe"});let d=await Oe(8e3,function(m){return m.kind==="session_probe"});j=null,await $r(c.id,i);let f=await Oe(8e3,function(m){return m.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let p=await Oe(8e3,function(m){return m.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{j=null,await $r(l.id,i),await Oe(8e3,function(f){return f.kind==="session_opened"}),j=null,i.postMessage({type:"session_selftest",case:o});let d=await Oe(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 lr(l.id),await lr(c.id)}}else if(s.op==="tabprobe"){let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,o.postMessage({type:"tab_probe"});let i=await Oe(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:Pe}}}else if(s.op==="webview_probe")r.ok=!0,r.result={panel:!!Me,view:!!fe,viewVisible:!!(fe&&fe.visible===!0),panelActive:Me&&Ct.get(Me.webview)||"",viewActive:fe&&Ct.get(fe.webview)||"",activeId:Pe,openTabs:we.slice()};else if(s.op==="sendmsg"){let o=Re(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(mF.indexOf(a)<0)r.ok=!1,r.error="sendmsg \u4E0D\u653E\u884C "+(a||"(\u7A7A)");else{j=null,o.postMessage(i);let l=null;s.ackKind&&(l=await Oe(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 ct();let i=Re(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,i.postMessage({type:"tab_selftest",case:o});let a=await Oe(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:Pe}}}else if(s.op==="sessionpersist"){let o=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",i=await Qo([{role:"user",content:o}],s.modelKey,{});pu(s.modelKey,"chat"),It({t:"user",text:o}),It({t:"text",text:i.content}),It({t:"summary",text:"\u5B8C\u6210 \xB7 "+i.target.model.id});let a=bt(),l=a?ke.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?ke.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=(Ie()||{}).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 gv(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=Yr.build(l,Object.assign(Vr(),s.opts||{}));r.ok=!0,r.result=Object.assign(a(c),{config:Vr(),ctxUsed:c.messages.some(function(u){return u.content.indexOf("[ref 1]")>=0})})}else if(o==="spill"){let l=[];for(let h=0;h<6;h++)l.push({t:"user",text:"\u95EE\u9898"+h+" UNIQUE_MEM_"+h}),l.push({t:"text",text:"\u56DE\u7B54"+h+" \u5173\u4E8E UNIQUE_MEM_"+h});let c=Sn.createStore(),u=Yr.build(l,Object.assign(Vr(),{maxTurns:2,maxChars:2e4,spill:tu(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},m=!!(p&&p.ok&&String(p.content).indexOf("UNIQUE_MEM_0")>=0);r.ok=u.turns===2&&u.spilledTurns>=4&&d&&m,r.result={turns:u.turns,spilledTurns:u.spilledTurns,spillIds:u.spillIds,digestHead:String(u.spillDigest||"").slice(0,160),recalled:m,storeEntries:c.size()}}else if(o==="prefix"){let l=ft(s.modelKey),c=Jn(l&&l.provider)!=="none",u=Es.hash(ur("agent",L(),c),cr("agent",l)),d=Es.hash(ur("agent",L(),c),cr("agent",l)),f=Es.hash(ur("plan",L(),c),cr("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(Ie())}));r.ok=!0,r.result=Object.assign(a(l),{id:Pe||"",items:i.length})}else if(o==="last")r.ok=!!Tt,r.result=Tt||{};else if(o==="live"){let l=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",c=Cs(i,s.modelKey,{resolveImage:As(Ie())}),u={text:""},d=await Is(l,{root:L(),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(Ie())});Tt=null;let m=await Is(s.follow||"\u6211\u521A\u624D\u8BA9\u4F60\u505A\u4EC0\u4E48\uFF1F\u53EA\u56DE\u4E00\u53E5\u8BDD\u3002",{root:L(),modelKey:s.modelKey,mode:s.mode==="plan"?"plan":"agent",history:p.messages}),h=Tt&&Tt.roles||[];r.ok=!!(Tt&&h[0]==="system"&&h.indexOf("assistant")>0&&h[h.length-1]==="user"&&p.turns>=1),r.result={first:d.text.slice(0,200),follow:m.text.slice(0,200),memory:a(p),cache:zo.slice(-2),request:Tt}}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 ct();let a=Re(s.to);if(!a)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,a.postMessage({type:"img_selftest"});let l=await Oe(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=Te.saveImage(a,i),u=Te.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&&P.existsSync(d),l.readBack=!!c&&Te.readDataUrl(a,c)===i,l.preview=!!c&&Te.readPreview(a,c.file).ok===!0,l.badSession=Te.saveImage("../evil",i)===null,l.svg=Te.saveImage(a,"data:image/svg+xml;base64,PHN2Zy8+")===null,l.oversize=Te.saveImage(a,"data:image/png;base64,"+"A".repeat(Math.ceil(Te.MAX_BYTES*4/3)+1e3))===null;let f=[];for(let B=0;B<5;B++)f.push({file:"a"+B+".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=Yn.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(B){return B.file.indexOf("a")===0}),l.clampDrop=!Yn.clampItem({t:"user",text:"hi",images:[{file:"../x.png",mime:"image/png",bytes:1}]}).images,l.textOnly=Te.toContent("hi",[])==="hi";let m=Te.toContent("hi",[i]);l.multimodal=Array.isArray(m)&&m.length===2&&m[0].type==="text"&&m[1].type==="image_url"&&m[1].image_url.url===i;let h=[{t:"user",text:"\u770B\u56FE",images:[c]},{t:"text",text:"\u770B\u5230\u4E86"}],k=Yr.build(h,Object.assign(Vr(),{enabled:!0,resolveImage:function(){return i}})).messages.filter(function(B){return B.role==="user"});l.memImg=k.length===1&&Array.isArray(k[0].content)&&k[0].content[0].type==="text"&&k[0].content.some(function(B){return B.type==="image_url"});let g=Yr.build(h,Object.assign(Vr(),{enabled:!0,resolveImage:function(){return""}})).messages.filter(function(B){return B.role==="user"});l.memDegrade=g.length===1&&typeof g[0].content=="string";let v=ft(s.modelKey),w=Jn(v&&v.provider)!=="none";l.prefixStable=Es.hash(ur("agent",L(),w),cr("agent",v))===Es.hash(ur("agent",L(),w),cr("agent",v));let S="imgtest-orphan-"+Date.now().toString(36),_=D.join(Te.ATTACH_DIR,S);try{P.mkdirSync(_,{recursive:!0})}catch{}let C=[];try{C=P.readdirSync(Te.ATTACH_DIR,{withFileTypes:!0})}catch{C=[]}let A=new Set;for(let B of C)B.isDirectory()&&B.name!==S&&A.add(B.name);let F=Te.sweepOrphans(A);l.sweep=F.removed===1&&!P.existsSync(_);let K=Te.removeSession(a);l.cleanup=K.removed>=1&&!P.existsSync(u)&&(!c||Te.readDataUrl(a,c)==="");let W=Object.keys(l).filter(function(B){return!l[B]});r.ok=W.length===0,W.length&&(r.error="failed: "+W.join(",")),r.result=l}else if(o==="live"){await ct();let a=ft(s.modelKey),l=a&&a.model&&a.model.vision===!0?a:Zn().find(function(u){return u.model.vision===!0}),c=Re(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 to("imgtest_live",c);await new Promise(function(C){setTimeout(C,600)}),j=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 Oe(s.waitMs||9e4,function(C){return C.kind==="dome_done"||C.kind==="dome_error"||C.kind==="plan_done"}),f=de.get(u.id)||u,p=f&&f.items||[],m=p.slice().reverse().find(function(C){return C&&C.t==="user"}),h=Te.ATTACH_DIR+D.sep+u.id,y=[];try{y=P.readdirSync(h)}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=Tt&&Tt.heads||[],w=v.length?String(v[v.length-1]):"",S={done:!!(d&&d.kind==="dome_done"),item:!!(m&&Array.isArray(m.images)&&m.images.length===1),files:y.length>=1,snapshot:w.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 lr(u.id),S.removed=!P.existsSync(h);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=wt.encodeFrame(1,Buffer.from(a,"utf8")),c=wt.decodeFrame(l);i.frameRoundtrip=!!c&&c.opcode===1&&c.payload.toString("utf8")===a;let u=wt.encodeFrame(1,Buffer.alloc(300,97)),d=wt.decodeFrame(u);i.midLength=!!d&&d.payload.length===300;let f=wt.encodeFrame(1,Buffer.alloc(7e4,98)),p=wt.decodeFrame(f);i.bigLength=!!p&&p.payload.length===7e4,i.masked=!!(l[1]&128),i.shortFrame=wt.decodeFrame(Buffer.from([129]))===null,i.urlHttps=wt.normalizeUrl("example.com")==="https://example.com",i.urlLocalhost=wt.normalizeUrl("localhost:3000/x")==="http://localhost:3000/x",i.urlData=wt.normalizeUrl("data:text/html,hi")==="data:text/html,hi";let m=!1;try{wt.normalizeUrl("javascript:alert(1)")}catch{m=!0}i.urlBlocked=m,i.ax=wt.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 wt.findChrome("definitely-not-here.exe").path=="string";let h=Object.keys(i).filter(function(y){return!i[y]});r.ok=h.length===0,h.length&&(r.error="failed: "+h.join(",")),r.result={checks:i,failed:h}}else if(o==="live"){let i=wt.findChrome(br().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=br();a=await wt.launch({exe:l.chromePath,headless:!0,width:800,height:600});let c=function(w){return"data:text/html,"+encodeURIComponent("<title>"+w+"</title><h1>"+w+'</h1><script>console.log("'+w+'")</script>')},u=function(w){return(w||[]).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 Oa(300);let p=u(a.consoleEntries(20));await a.navigate(c("PAGE-B")),await Oa(300);let m=u(a.consoleEntries(20)),h="";try{await a.navigate("http://127.0.0.1:9/")}catch(w){h=String(w&&w.message||w)}await Oa(400);let y=u(a.networkEntries(20));await a.navigate(c("PAGE-C")),await Oa(300);let k=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:m.indexOf("PAGE-B")>=0&&m.indexOf("PAGE-A")<0,networkKeptOnFailure:/127\.0\.0\.1:9|ERR_CONNECTION_REFUSED/.test(y),networkResetOnNav:k===0,consoleResetOnNav:T.indexOf("PAGE-C")>=0&&T.indexOf("PAGE-B")<0},v=Object.keys(g).filter(function(w){return!g[w]});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:m.slice(0,200),consoleC:T.slice(0,200),networkFailed:y.slice(0,200),navFailed:h.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=Yj(),a={};a.keyLetter=ie.parseKeys("a").code===i.a&&ie.parseKeys("a").flags===0,a.keyUpper=ie.parseKeys("P").flags===ie.FLAGS.shift&&ie.parseKeys("P").code===i.p,a.keyCombo=function(){let p=ie.parseKeys("cmd+shift+p");return p.code===i.p&&p.flags===(ie.FLAGS.cmd|ie.FLAGS.shift)}();let l=!1;try{ie.parseKeys("hyper+a")}catch(p){l=/不认识的修饰键/.test(p.message)}a.keyBadModifier=l;let c=!1;try{ie.parseKeys("cmd+nope")}catch(p){c=/不认识的键/.test(p.message)}a.keyBadName=c,a.charCjk=ie.charToKey("\u4E2D")===null,a.charShiftSymbol=function(){let p=ie.charToKey("!");return p&&p.shift===!0&&p.code===i.bang}(),a.regionString=function(){let p=ie.parseRegion("10,20,300,400");return p.width===300&&p.height===400}();let u=!1;try{ie.parseRegion("1,2,3")}catch(p){u=/region 格式/.test(p.message)}a.regionBad=u;let d=ie.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=ie.TMP_DIR;P.mkdirSync(p,{recursive:!0});let m=D.join(p,"selftest-"+Date.now()+".png"),h=Buffer.alloc(33);Buffer.from([137,80,78,71,13,10,26,10]).copy(h,0),h.writeUInt32BE(13,8),h.write("IHDR",12,"ascii"),h.writeUInt32BE(7,16),h.writeUInt32BE(5,20),P.writeFileSync(m,h);let y=await ie.imageSize(m);a.imageHeader=y.width===7&&y.height===5,P.unlinkSync(m)}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 ie.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 ie.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 ie.windows({limit:10});a.windows=Array.isArray(u.windows);let d=await ie.frontmost();a.frontmost=typeof d.pid=="number";let f=await ie.cursor();a.cursor=isFinite(f.x)&&isFinite(f.y),a.click=/单击/.test(await ie.click({x:300,y:400,dry:!0})),a.drag=/拖到/.test(await ie.drag({x:300,y:400,toX:400,toY:500,dry:!0})),a.scroll=/滚动/.test(await ie.scroll({x:300,y:400,dy:50,dry:!0})),a.typeAscii=/按键码/.test(await ie.type({text:"ok",dry:!0})),a.key=/已按键/.test(await ie.key({keys:"cmd+shift+p",dry:!0}));let p=await ie.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{P.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 ct();let i=Re(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,i.postMessage({type:"copy_selftest"});let a=await Oe(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=Ee.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 m=0;m<12;m++){let h="call_"+m;i.push({role:"assistant",content:"",tool_calls:[{id:h,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+m+".js",pad:"z".repeat(2e3)})}}]}),i.push({role:"tool",tool_call_id:h,content:"r".repeat(5e3)})}let a=Ee.charsOf(i),l=Ee.compact(i,{keepTail:8}),c=[];for(let m of l.messages)for(let h of m.tool_calls||[])c.push(String(h.id));let u=l.messages.filter(function(m){return m.role==="tool"}).map(function(m){return String(m.tool_call_id)}),d=c.length===u.length&&c.every(function(m){return u.indexOf(m)>=0}),p=l.messages.slice(l.messages.length-8).every(function(m,h){let y=i[i.length-8+h];return m===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=Sn.createStore(),a=tu(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 k="call_"+y;l.push({role:"assistant",content:"",tool_calls:[{id:k,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+y+".js"})}}]}),l.push({role:"tool",tool_call_id:k,content:(y===0?c+`
1032
+ `).find(function(S){return S.trim()})||"").trim(),v={ok:!0,skipped:!0,ranges:[]};if(Math.max(f.lineCount,1)>=4){let S=Xn(d,u),_=Zr("#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===m+1&&i.endLine===(y.end.character===0&&h>m?h:h+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:[m+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=Zr(s.prompt||"",s.root||L(),{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 jN(),i=await NN();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:dt,source:Vo,defaultModel:Gt.defaultModel,providers:(Gt.providers||[]).map(o=>({id:o.id,models:(o.models||[]).map(i=>i.id),keyFound:!!Zo(o),keyless:Yo(o)&&!Nc(o),inline:!!o.apiKey,secret:!!ms[o.id],env:!!Ya(o)}))};else if(s.op==="saveconfig"){let o=await Dv(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 Fv(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="fetchmodels"){let o=await Wm(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 Ja(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(_n.loadConfig()),a=await Hm(t,{config:Object.assign({},_n.loadConfig(),{url:"ftp://not-a-webdav"})});r.ok=!a.ok&&JSON.stringify(_n.loadConfig())===i,r.result={errors:a.errors||[],unchanged:JSON.stringify(_n.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 Jv(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"){zm(t),j=null;let o=Date.now()+(s.waitMs||2e4),i=null;for(;Date.now()<o;)if(await new Promise(a=>setTimeout(a,500)),j&&j.kind==="settings_rendered"){i=j;break}r.ok=!!i,r.result={ack:i,path:dt}}else if(s.op==="chat"){let o=await Qo([{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 ev(s.command||"echo hi",s.root||L(),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||L();if(o==="start_poll_stop"){let l=xe.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 xe.poll(i,l.job_id,{wait_ms:0,tail_chars:200}),u=await xe.poll(i,l.job_id,{wait_ms:5e3,tail_chars:800}),d=xe.stop(i,l.job_id);xe.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=xe.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),c=xe.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),u=xe.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),d=xe.runningCount(i);xe.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=xe.start(l,"sleep 2",{cwd:a,timeout_ms:1e4}),d=await xe.poll(c,u.job_id,{wait_ms:0});xe.clearSession(l),xe.clearSession(c),r.ok=!!(u.ok&&d.status==="missing"),r.result={a:u,cross:d}}else if(o==="cancel"){let l=xe.start(i,"sleep 5",{cwd:a,timeout_ms:2e4}),c=xe.stopAll(i),u=await xe.poll(i,l.job_id,{wait_ms:0});xe.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=hr.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=xe.start(i,"printf '\u{1F600}\u{1F600}\u{1F600}'",{cwd:a,timeout_ms:15e3}),c=await xe.poll(i,l.job_id,{wait_ms:5e3,tail_chars:3}),u=await xe.poll(i,l.job_id,{wait_ms:0,tail_chars:4});xe.clearSession(i);let d=String(c.out_tail||""),f=!1;for(let p=0;p<d.length;p++){let m=d.charCodeAt(p);if(m>=55296&&m<=56319){let h=d.charCodeAt(p+1);if(!(h>=56320&&h<=57343)){f=!0;break}p++}else if(m>=56320&&m<=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=xe.start(i,"sleep 5",{cwd:a,timeout_ms:400}),c=await xe.poll(i,l.job_id,{wait_ms:3e3});xe.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=uF(),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=dF(),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=fF(),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 $n(s.tool||"read_file",s.args||{},s.root||L(),null,{readMax:s.readMax});r.ok=!0,r.result={allowOutside:om(),text:String(o).slice(0,2e3)}}catch(o){r.ok=!1,r.error=o.message,r.result={allowOutside:om()}}else if(s.op==="fsskip")r.result=await A_(),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:Jp()};else if(s.op==="reviewdoc"){let o=tt(s.path,L()),i=await x.workspace.openTextDocument(x.Uri.from({scheme:"luban-before",path:o})),a=ae.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,L()),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(m){return{line:m.range?m.range.start.line+1:-1,title:m.command&&m.command.title,command:m.command&&m.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,L());if(!ae.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 Om(o,{preview:!0,preserveFocus:!0}),await new Promise(c=>setTimeout(c,400)));let a=i(),l={tabs:a,diffTabs:a.length,pending:cs(),frozenCount:kn.size,autoOpen:Qc(),contextActive:!!za(Ha())};if(s.accept){let c=ae.has(o)?ae.get(o).baseline:"";await Ka("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=kn.size,l.afterAcceptContext=!!za(Ha())}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=Re(s.to||"view")||tn();if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{let i=null;s.focusInput===!0&&(j=null,o.postMessage({type:"focus_input"}),i=await Oe(s.waitMs||8e3,function(c){return c.kind==="focus_input"})?!0:null,await new Promise(function(c){setTimeout(c,200)})),j=null,o.postMessage({type:"focus_probe"});let a=await Oe(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:La.get(o)===!0,maximized:!!(a&&a.maximized),extMaximized:va(),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=Re(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;ti.set(a,l),l||dv(),await new Promise(function(c){setTimeout(c,400)}),r.result={simulated:l,maximized:va(),pendingAutoDiff:nn.size,tracked:La.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){j=null,a.postMessage({type:"focus_probe"});let p=await Oe(s.waitMs||8e3,function(m){return m.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(m){setTimeout(function(){m("<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:va(),pendingAutoDiff:nn.size};else{j=null,a.postMessage({type:"focus_probe"});let p=await Oe(s.waitMs||8e3,function(m){return m.kind==="focus_probe"});r.ok=!!p,r.ok||(r.error="focus_probe \u8D85\u65F6"),r.result={maximized:!!(p&&p.maximized),extMaximized:va(),tracked:La.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=Re(s.to);if(o||(await x.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500)),o=Re(s.to)),!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{o.postMessage(Wa()),await new Promise(l=>setTimeout(l,400)),j=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)),j&&j.kind==="review_probe"){a=j;break}r.ok=!!a,r.result=a||{kind:"timeout"}}}else if(s.op==="reviewdeco"){let o=tt(s.path,L()),i=ae.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=hv(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:kn.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:Qc()}}catch(a){r.ok=!1,r.error=String(a&&a.stack||a).slice(0,800)}}}else if(s.op==="review_action"){let o=await Ka(s.action,s.path,s.hunk||"",s.sessionId),i="";try{i=Qr(tt(s.path,L()))}catch{i=""}r.ok=!!o.ok,o.ok||(r.error=o.error),r.result=Object.assign({},o,{remaining:cs(),fileCount:ae.size,exists:i!==""||function(){try{return P.existsSync(tt(s.path,L()))}catch{return!1}}(),current:i.slice(0,3e3)})}else if(s.op==="review_edit"){let o=tt(s.path,L()),i=P.existsSync(o),a=i?P.readFileSync(o,"utf8"):"",l=s.content==null?"":String(s.content);await gr(o,l);let c=ls(o,a,l,!i);r.ok=!0,r.result={hunks:c,existed:i,total:cs(),files:Jp()}}else if(s.op==="openpanel")cm(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))):Re(s.to)||(cm(t),await new Promise(i=>setTimeout(i,2500)));let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=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)),j&&(j.kind==="dome_done"||j.kind==="plan_done")){a=j;break}if(j&&j.kind==="dome_error"){a=j;break}}r.ok=!!a,r.result={ack:a}}}else if(s.op==="newsession"){await ct();let o=Re(s.to);j=null;let i=await to(s.reason||"headless",o),a=o?await Oe(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:ae.size,hunks:cs()}}else if(s.op==="listsessions")nt(),r.ok=!0,r.result={current:Pe||"",openTabs:we.slice(),root:L(),sessions:ke.list(s.scope||"workspace",s.root||L()).slice(0,s.limit||50)};else if(s.op==="searchsessions"){let o=l_(s.q,s.scope||"workspace",s.root||L(),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 ct();let o=Re(s.to);j=null;let i=await $r(String(s.id||""),o),a=i.ok&&o?await Oe(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:du(Ie())}}else if(s.op==="deletesession"){let o=await cr(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=ei(o);if(!i)try{i=nt().load(o)}catch{i=null}if(!i)r.ok=!1,r.error=M("ext.noSuchSession",{id:o});else if(rt.has(i.id))r.ok=!1,r.error=M("ext.forkBusy");else{let a=s.at==null||s.at===""?null:Number(s.at),l=su(i,a,Re(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 ct();let i=Re(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{nt();let a=function(d,f){let p=ke.create(L());return ke.append(p,{t:"user",text:"\u4F1A\u8BDD "+d+" \u7684\u95EE\u9898"}),ke.append(p,{t:"tool",name:"read_file",path:d+".js",ok:!0,result:"12 \u884C"}),ke.append(p,{t:"text",text:"\u4F1A\u8BDD "+d+" \u7684\u56DE\u7B54\u3002"}),f&&ke.append(p,f),ke.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=ae.size;if(o==="list"){i.postMessage({type:"toggle_session_list"}),await new Promise(function(f){setTimeout(f,400)}),j=null,i.postMessage({type:"session_probe"});let d=await Oe(6e3,function(f){return f.kind==="session_probe"});r.ok=!!(d&&d.popupOpen&&d.sessionItems>=1),r.result={probe:d,sessions:ke.list().length},i.postMessage({type:"toggle_session_list"})}else if(o==="replay"){j=null,await $r(l.id,i);let d=await Oe(8e3,function(p){return p.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let f=await Oe(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=ke.create(L());ke.append(f,{t:"user",text:"\u5E2E\u6211\u770B\u770B\u80FD\u8017\u62A5\u544A"}),ke.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF08\u6807\u8BB0 "+d+"\uFF09\u3002"}),ke.save(f);let p=ke.create(L());ke.append(p,{t:"user",text:"\u80FD\u8017\u62A5\u544A\u7684\u6807\u9898\u547D\u4E2D"}),ke.append(p,{t:"text",text:"\u8FD9\u6761\u6B63\u6587\u91CC\u6CA1\u6709\u6807\u8BB0\u3002"}),ke.save(p),j=null,i.postMessage({type:"session_search_selftest",q:d});let m=await Oe(12e3,function(h){return String(h.kind||"").indexOf("session_search")===0});r.ok=!!(m&&/_ok$/.test(m.kind)&&m.searchRows===1&&m.searchSnippets===1&&m.searchMarks>=1&&m.searchFull>1),r.result={ack:m,mark:d},await cr(f.id),await cr(p.id)}else if(o==="find"){let d="FS"+Date.now().toString(36).toUpperCase(),f=ke.create(L());ke.append(f,{t:"user",text:"\u5E2E\u6211\u627E\u4E00\u4E0B\u6B63\u6587\u91CC\u7684\u6807\u8BB0\u3002"}),ke.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"}),ke.save(f),j=null,await $r(f.id,i);let p=await Oe(8e3,function(h){return h.kind==="session_opened"});j=null;try{await x.commands.executeCommand("luban.findInSession")}catch{}await new Promise(function(h){setTimeout(h,500)}),j=null,i.postMessage({type:"find_selftest",q:d});let m=await Oe(12e3,function(h){return String(h.kind||"").indexOf("find_")===0});r.ok=!!(p&&m&&/_ok$/.test(m.kind)&&m.findHits===2&&m.findMarks===2&&m.findCurrent===1&&m.findOpen&&m.findPreOpened===!0&&m.findLeft===0),r.result={ack:m,mark:d},await cr(f.id)}else if(o==="switch"){j=null,await $r(l.id,i),await Oe(8e3,function(m){return m.kind==="session_opened"}),j=null,i.postMessage({type:"session_probe"});let d=await Oe(8e3,function(m){return m.kind==="session_probe"});j=null,await $r(c.id,i);let f=await Oe(8e3,function(m){return m.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let p=await Oe(8e3,function(m){return m.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{j=null,await $r(l.id,i),await Oe(8e3,function(f){return f.kind==="session_opened"}),j=null,i.postMessage({type:"session_selftest",case:o});let d=await Oe(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 cr(l.id),await cr(c.id)}}else if(s.op==="tabprobe"){let o=Re(s.to);if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,o.postMessage({type:"tab_probe"});let i=await Oe(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:Pe}}}else if(s.op==="webview_probe")r.ok=!0,r.result={panel:!!Me,view:!!fe,viewVisible:!!(fe&&fe.visible===!0),panelActive:Me&&Ct.get(Me.webview)||"",viewActive:fe&&Ct.get(fe.webview)||"",activeId:Pe,openTabs:we.slice()};else if(s.op==="sendmsg"){let o=Re(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(mF.indexOf(a)<0)r.ok=!1,r.error="sendmsg \u4E0D\u653E\u884C "+(a||"(\u7A7A)");else{j=null,o.postMessage(i);let l=null;s.ackKind&&(l=await Oe(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 ct();let i=Re(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,i.postMessage({type:"tab_selftest",case:o});let a=await Oe(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:Pe}}}else if(s.op==="sessionpersist"){let o=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",i=await Qo([{role:"user",content:o}],s.modelKey,{});pu(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=bt(),l=a?ke.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?ke.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=(Ie()||{}).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 gv(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=Yr.build(l,Object.assign(Vr(),s.opts||{}));r.ok=!0,r.result=Object.assign(a(c),{config:Vr(),ctxUsed:c.messages.some(function(u){return u.content.indexOf("[ref 1]")>=0})})}else if(o==="spill"){let l=[];for(let h=0;h<6;h++)l.push({t:"user",text:"\u95EE\u9898"+h+" UNIQUE_MEM_"+h}),l.push({t:"text",text:"\u56DE\u7B54"+h+" \u5173\u4E8E UNIQUE_MEM_"+h});let c=Sn.createStore(),u=Yr.build(l,Object.assign(Vr(),{maxTurns:2,maxChars:2e4,spill:tu(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},m=!!(p&&p.ok&&String(p.content).indexOf("UNIQUE_MEM_0")>=0);r.ok=u.turns===2&&u.spilledTurns>=4&&d&&m,r.result={turns:u.turns,spilledTurns:u.spilledTurns,spillIds:u.spillIds,digestHead:String(u.spillDigest||"").slice(0,160),recalled:m,storeEntries:c.size()}}else if(o==="prefix"){let l=ft(s.modelKey),c=Jn(l&&l.provider)!=="none",u=Ps.hash(dr("agent",L(),c),ur("agent",l)),d=Ps.hash(dr("agent",L(),c),ur("agent",l)),f=Ps.hash(dr("plan",L(),c),ur("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=As(i,s.modelKey,Object.assign({},s.opts||{},{resolveImage:Os(Ie())}));r.ok=!0,r.result=Object.assign(a(l),{id:Pe||"",items:i.length})}else if(o==="last")r.ok=!!Tt,r.result=Tt||{};else if(o==="live"){let l=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",c=As(i,s.modelKey,{resolveImage:Os(Ie())}),u={text:""},d=await Ds(l,{root:L(),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=As(f,s.modelKey,{resolveImage:Os(Ie())});Tt=null;let m=await Ds(s.follow||"\u6211\u521A\u624D\u8BA9\u4F60\u505A\u4EC0\u4E48\uFF1F\u53EA\u56DE\u4E00\u53E5\u8BDD\u3002",{root:L(),modelKey:s.modelKey,mode:s.mode==="plan"?"plan":"agent",history:p.messages}),h=Tt&&Tt.roles||[];r.ok=!!(Tt&&h[0]==="system"&&h.indexOf("assistant")>0&&h[h.length-1]==="user"&&p.turns>=1),r.result={first:d.text.slice(0,200),follow:m.text.slice(0,200),memory:a(p),cache:zo.slice(-2),request:Tt}}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 ct();let a=Re(s.to);if(!a)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,a.postMessage({type:"img_selftest"});let l=await Oe(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=Te.saveImage(a,i),u=Te.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&&P.existsSync(d),l.readBack=!!c&&Te.readDataUrl(a,c)===i,l.preview=!!c&&Te.readPreview(a,c.file).ok===!0,l.badSession=Te.saveImage("../evil",i)===null,l.svg=Te.saveImage(a,"data:image/svg+xml;base64,PHN2Zy8+")===null,l.oversize=Te.saveImage(a,"data:image/png;base64,"+"A".repeat(Math.ceil(Te.MAX_BYTES*4/3)+1e3))===null;let f=[];for(let B=0;B<5;B++)f.push({file:"a"+B+".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=Yn.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(B){return B.file.indexOf("a")===0}),l.clampDrop=!Yn.clampItem({t:"user",text:"hi",images:[{file:"../x.png",mime:"image/png",bytes:1}]}).images,l.textOnly=Te.toContent("hi",[])==="hi";let m=Te.toContent("hi",[i]);l.multimodal=Array.isArray(m)&&m.length===2&&m[0].type==="text"&&m[1].type==="image_url"&&m[1].image_url.url===i;let h=[{t:"user",text:"\u770B\u56FE",images:[c]},{t:"text",text:"\u770B\u5230\u4E86"}],k=Yr.build(h,Object.assign(Vr(),{enabled:!0,resolveImage:function(){return i}})).messages.filter(function(B){return B.role==="user"});l.memImg=k.length===1&&Array.isArray(k[0].content)&&k[0].content[0].type==="text"&&k[0].content.some(function(B){return B.type==="image_url"});let g=Yr.build(h,Object.assign(Vr(),{enabled:!0,resolveImage:function(){return""}})).messages.filter(function(B){return B.role==="user"});l.memDegrade=g.length===1&&typeof g[0].content=="string";let v=ft(s.modelKey),w=Jn(v&&v.provider)!=="none";l.prefixStable=Ps.hash(dr("agent",L(),w),ur("agent",v))===Ps.hash(dr("agent",L(),w),ur("agent",v));let S="imgtest-orphan-"+Date.now().toString(36),_=D.join(Te.ATTACH_DIR,S);try{P.mkdirSync(_,{recursive:!0})}catch{}let C=[];try{C=P.readdirSync(Te.ATTACH_DIR,{withFileTypes:!0})}catch{C=[]}let A=new Set;for(let B of C)B.isDirectory()&&B.name!==S&&A.add(B.name);let F=Te.sweepOrphans(A);l.sweep=F.removed===1&&!P.existsSync(_);let K=Te.removeSession(a);l.cleanup=K.removed>=1&&!P.existsSync(u)&&(!c||Te.readDataUrl(a,c)==="");let W=Object.keys(l).filter(function(B){return!l[B]});r.ok=W.length===0,W.length&&(r.error="failed: "+W.join(",")),r.result=l}else if(o==="live"){await ct();let a=ft(s.modelKey),l=a&&a.model&&a.model.vision===!0?a:Zn().find(function(u){return u.model.vision===!0}),c=Re(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 to("imgtest_live",c);await new Promise(function(C){setTimeout(C,600)}),j=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 Oe(s.waitMs||9e4,function(C){return C.kind==="dome_done"||C.kind==="dome_error"||C.kind==="plan_done"}),f=de.get(u.id)||u,p=f&&f.items||[],m=p.slice().reverse().find(function(C){return C&&C.t==="user"}),h=Te.ATTACH_DIR+D.sep+u.id,y=[];try{y=P.readdirSync(h)}catch{y=[]}let T=As(p,l.key,{resolveImage:Os(f)}).messages.filter(function(C){return C.role==="user"}),g=T.length?T[T.length-1]:null,v=Tt&&Tt.heads||[],w=v.length?String(v[v.length-1]):"",S={done:!!(d&&d.kind==="dome_done"),item:!!(m&&Array.isArray(m.images)&&m.images.length===1),files:y.length>=1,snapshot:w.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 cr(u.id),S.removed=!P.existsSync(h);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=wt.encodeFrame(1,Buffer.from(a,"utf8")),c=wt.decodeFrame(l);i.frameRoundtrip=!!c&&c.opcode===1&&c.payload.toString("utf8")===a;let u=wt.encodeFrame(1,Buffer.alloc(300,97)),d=wt.decodeFrame(u);i.midLength=!!d&&d.payload.length===300;let f=wt.encodeFrame(1,Buffer.alloc(7e4,98)),p=wt.decodeFrame(f);i.bigLength=!!p&&p.payload.length===7e4,i.masked=!!(l[1]&128),i.shortFrame=wt.decodeFrame(Buffer.from([129]))===null,i.urlHttps=wt.normalizeUrl("example.com")==="https://example.com",i.urlLocalhost=wt.normalizeUrl("localhost:3000/x")==="http://localhost:3000/x",i.urlData=wt.normalizeUrl("data:text/html,hi")==="data:text/html,hi";let m=!1;try{wt.normalizeUrl("javascript:alert(1)")}catch{m=!0}i.urlBlocked=m,i.ax=wt.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 wt.findChrome("definitely-not-here.exe").path=="string";let h=Object.keys(i).filter(function(y){return!i[y]});r.ok=h.length===0,h.length&&(r.error="failed: "+h.join(",")),r.result={checks:i,failed:h}}else if(o==="live"){let i=wt.findChrome(kr().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=kr();a=await wt.launch({exe:l.chromePath,headless:!0,width:800,height:600});let c=function(w){return"data:text/html,"+encodeURIComponent("<title>"+w+"</title><h1>"+w+'</h1><script>console.log("'+w+'")</script>')},u=function(w){return(w||[]).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 Oa(300);let p=u(a.consoleEntries(20));await a.navigate(c("PAGE-B")),await Oa(300);let m=u(a.consoleEntries(20)),h="";try{await a.navigate("http://127.0.0.1:9/")}catch(w){h=String(w&&w.message||w)}await Oa(400);let y=u(a.networkEntries(20));await a.navigate(c("PAGE-C")),await Oa(300);let k=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:m.indexOf("PAGE-B")>=0&&m.indexOf("PAGE-A")<0,networkKeptOnFailure:/127\.0\.0\.1:9|ERR_CONNECTION_REFUSED/.test(y),networkResetOnNav:k===0,consoleResetOnNav:T.indexOf("PAGE-C")>=0&&T.indexOf("PAGE-B")<0},v=Object.keys(g).filter(function(w){return!g[w]});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:m.slice(0,200),consoleC:T.slice(0,200),networkFailed:y.slice(0,200),navFailed:h.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=Yj(),a={};a.keyLetter=ie.parseKeys("a").code===i.a&&ie.parseKeys("a").flags===0,a.keyUpper=ie.parseKeys("P").flags===ie.FLAGS.shift&&ie.parseKeys("P").code===i.p,a.keyCombo=function(){let p=ie.parseKeys("cmd+shift+p");return p.code===i.p&&p.flags===(ie.FLAGS.cmd|ie.FLAGS.shift)}();let l=!1;try{ie.parseKeys("hyper+a")}catch(p){l=/不认识的修饰键/.test(p.message)}a.keyBadModifier=l;let c=!1;try{ie.parseKeys("cmd+nope")}catch(p){c=/不认识的键/.test(p.message)}a.keyBadName=c,a.charCjk=ie.charToKey("\u4E2D")===null,a.charShiftSymbol=function(){let p=ie.charToKey("!");return p&&p.shift===!0&&p.code===i.bang}(),a.regionString=function(){let p=ie.parseRegion("10,20,300,400");return p.width===300&&p.height===400}();let u=!1;try{ie.parseRegion("1,2,3")}catch(p){u=/region 格式/.test(p.message)}a.regionBad=u;let d=ie.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=ie.TMP_DIR;P.mkdirSync(p,{recursive:!0});let m=D.join(p,"selftest-"+Date.now()+".png"),h=Buffer.alloc(33);Buffer.from([137,80,78,71,13,10,26,10]).copy(h,0),h.writeUInt32BE(13,8),h.write("IHDR",12,"ascii"),h.writeUInt32BE(7,16),h.writeUInt32BE(5,20),P.writeFileSync(m,h);let y=await ie.imageSize(m);a.imageHeader=y.width===7&&y.height===5,P.unlinkSync(m)}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 ie.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 ie.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 ie.windows({limit:10});a.windows=Array.isArray(u.windows);let d=await ie.frontmost();a.frontmost=typeof d.pid=="number";let f=await ie.cursor();a.cursor=isFinite(f.x)&&isFinite(f.y),a.click=/单击/.test(await ie.click({x:300,y:400,dry:!0})),a.drag=/拖到/.test(await ie.drag({x:300,y:400,toX:400,toY:500,dry:!0})),a.scroll=/滚动/.test(await ie.scroll({x:300,y:400,dy:50,dry:!0})),a.typeAscii=/按键码/.test(await ie.type({text:"ok",dry:!0})),a.key=/已按键/.test(await ie.key({keys:"cmd+shift+p",dry:!0}));let p=await ie.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{P.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 ct();let i=Re(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null,i.postMessage({type:"copy_selftest"});let a=await Oe(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=Ee.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 m=0;m<12;m++){let h="call_"+m;i.push({role:"assistant",content:"",tool_calls:[{id:h,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+m+".js",pad:"z".repeat(2e3)})}}]}),i.push({role:"tool",tool_call_id:h,content:"r".repeat(5e3)})}let a=Ee.charsOf(i),l=Ee.compact(i,{keepTail:8}),c=[];for(let m of l.messages)for(let h of m.tool_calls||[])c.push(String(h.id));let u=l.messages.filter(function(m){return m.role==="tool"}).map(function(m){return String(m.tool_call_id)}),d=c.length===u.length&&c.every(function(m){return u.indexOf(m)>=0}),p=l.messages.slice(l.messages.length-8).every(function(m,h){let y=i[i.length-8+h];return m===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=Sn.createStore(),a=tu(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 k="call_"+y;l.push({role:"assistant",content:"",tool_calls:[{id:k,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+y+".js"})}}]}),l.push({role:"tool",tool_call_id:k,content:(y===0?c+`
1033
1033
  `:"")+"r".repeat(3e3)})}let u=Ee.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]:"",m=p?i.read(p):{ok:!1},h=!!(m&&m.ok&&String(m.content).indexOf(c)>=0);r.ok=u.spilled>0&&d.indexOf("\u6458\u8981\uFF1A")>=0&&d.indexOf("read_spill")>=0&&h,r.result={spilled:u.spilled,omittedTools:u.omittedTools,storeEntries:i.size(),placeholder:d.slice(0,120),spillId:p,recalled:h}}else if(o==="repeat"){let i=Ee.fingerprint("read_file",{b:1,a:2}),a=Ee.fingerprint("read_file",{a:2,b:1}),l=Ee.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>=$o.repeatLimit,r.result={stableOrder:i===a,differsByArgs:i!==l,hits:c,limit:$o.repeatLimit}}else if(o==="summaryDigest"){let i=Fm([{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=Gc([{role:"user",content:`\u770B\u8FD9\u91CC
1034
1034
  \u5206\u6279\u5904\u7406\uFF08\u5171 6 \u6279\uFF09\uFF1A
1035
- 1. src/ \u2192 dir="src"`}]),l=!Gc([{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=yn.profile(d,{mode:i}),p=f.compact?Mc:Tc,m=f.compact?yn.compactTools(dr,f.tier):dr,h=yn.fixedChars(p,m),y=Math.floor(d*$o.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:m.length,fixedChars:h,fixedTokens:Math.ceil(h*Ee.DEFAULTS.ratio),highTokens:y,freeTokens:y-Math.ceil(h*Ee.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=Tc.length+Ee.charsOfTools(dr),a=["small","tiny"].map(function(l){let c=Ee.charsOfTools(yn.compactTools(dr,l)),u=Mc.length+c;return{tier:l,toolsChars:c,systemChars:Mc.length,chars:u,tokens:Math.ceil(u*Ee.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:Ee.charsOfTools(dr),systemChars:Tc.length,chars:i,tokens:Math.ceil(i*Ee.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=Ee.charsOf(i),c=6e3,u=yn.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}),m=u.messages[u.messages.length-1]===a,h=u.messages[0]===i[0],y=u.messages.some(function(A){return A.role==="assistant"&&!A.tool_calls&&A.content}),k=[{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;k.push({role:"assistant",content:"",tool_calls:[{id:F,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"u"+A+".js"})}}]}),k.push({role:"tool",tool_call_id:F,content:"r".repeat(3e3)})}let T=yn.squeeze(k,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)}),w=g.length===v.length&&g.every(function(A){return v.indexOf(A)>=0}),S=T.messages.some(function(A){return A===k[1]}),_=g.indexOf("call_u19")>=0&&g.indexOf("call_u0")<0,C=T.ok&&T.chars<=c&&w&&S&&_&&T.dropped>0;r.ok=u.ok&&u.chars<=c&&p&&m&&h&&y&&u.dropped>0&&C,r.result={ok:u.ok,beforeChars:l,afterChars:u.chars,cap:c,dropped:u.dropped,paired:p,tailKept:m,sysKept:h,solo:{ok:T.ok,chars:T.chars,dropped:T.dropped,paired:w,userKept:S,recentKept:_},summary:String(u.summary||"").slice(0,120)}}else if(o==="limits"){let i=ft(s.modelKey),a=Im(),l=i&&i.model&&Number(i.model.maxInputTokens)>0?Number(i.model.maxInputTokens):65536;r.ok=!0,r.result={limits:a,window:l,profile:yn.profile(l,{mode:Dm()}),highTokens:Math.floor(l*a.windowRatio),lowTokens:Math.floor(l*a.lowRatio),ratio:Ee.DEFAULTS.ratio}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="autocontext"){let o=String(s.case||"block"),i=wm();if(o==="block"){let a;if(s.text!=null){let c=String(s.text).split(`
1035
+ 1. src/ \u2192 dir="src"`}]),l=!Gc([{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=yn.profile(d,{mode:i}),p=f.compact?Mc:Tc,m=f.compact?yn.compactTools(fr,f.tier):fr,h=yn.fixedChars(p,m),y=Math.floor(d*$o.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:m.length,fixedChars:h,fixedTokens:Math.ceil(h*Ee.DEFAULTS.ratio),highTokens:y,freeTokens:y-Math.ceil(h*Ee.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=Tc.length+Ee.charsOfTools(fr),a=["small","tiny"].map(function(l){let c=Ee.charsOfTools(yn.compactTools(fr,l)),u=Mc.length+c;return{tier:l,toolsChars:c,systemChars:Mc.length,chars:u,tokens:Math.ceil(u*Ee.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:Ee.charsOfTools(fr),systemChars:Tc.length,chars:i,tokens:Math.ceil(i*Ee.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=Ee.charsOf(i),c=6e3,u=yn.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}),m=u.messages[u.messages.length-1]===a,h=u.messages[0]===i[0],y=u.messages.some(function(A){return A.role==="assistant"&&!A.tool_calls&&A.content}),k=[{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;k.push({role:"assistant",content:"",tool_calls:[{id:F,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"u"+A+".js"})}}]}),k.push({role:"tool",tool_call_id:F,content:"r".repeat(3e3)})}let T=yn.squeeze(k,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)}),w=g.length===v.length&&g.every(function(A){return v.indexOf(A)>=0}),S=T.messages.some(function(A){return A===k[1]}),_=g.indexOf("call_u19")>=0&&g.indexOf("call_u0")<0,C=T.ok&&T.chars<=c&&w&&S&&_&&T.dropped>0;r.ok=u.ok&&u.chars<=c&&p&&m&&h&&y&&u.dropped>0&&C,r.result={ok:u.ok,beforeChars:l,afterChars:u.chars,cap:c,dropped:u.dropped,paired:p,tailKept:m,sysKept:h,solo:{ok:T.ok,chars:T.chars,dropped:T.dropped,paired:w,userKept:S,recentKept:_},summary:String(u.summary||"").slice(0,120)}}else if(o==="limits"){let i=ft(s.modelKey),a=Im(),l=i&&i.model&&Number(i.model.maxInputTokens)>0?Number(i.model.maxInputTokens):65536;r.ok=!0,r.result={limits:a,window:l,profile:yn.profile(l,{mode:Dm()}),highTokens:Math.floor(l*a.windowRatio),lowTokens:Math.floor(l*a.lowRatio),ratio:Ee.DEFAULTS.ratio}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="autocontext"){let o=String(s.case||"block"),i=wm();if(o==="block"){let a;if(s.text!=null){let c=String(s.text).split(`
1036
1036
  `),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,m=s.endLine||0,h=!1;if(s.cursorLine!=null||s.lineCount!=null||s.windowLines!=null){let y=lt.windowRange({lineCount:u,cursorLine:d,windowLines:s.windowLines});y.whole?(p=1,m=u):(f=c.slice(y.start-1,y.end).join(`
1037
- `),p=y.start,m=y.end,h=!0)}a=lt.build({path:s.path||"src/demo.js",text:f,startLine:p,endLine:m,hasSelection:!!s.selection,maxChars:Number(s.maxChars)||i.maxChars,cursorLine:d,totalLines:u,windowed:h})}else a=bm([],s.root||L());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:lt.windowRange({lineCount:1200,cursorLine:1,windowLines:200}),middle:lt.windowRange({lineCount:1200,cursorLine:600,windowLines:200}),tail:lt.windowRange({lineCount:1200,cursorLine:1200,windowLines:200}),small:lt.windowRange({lineCount:105,cursorLine:50,windowLines:200}),custom:lt.windowRange({lineCount:1200,cursorLine:600,windowLines:100})}):o==="skip"?(r.ok=!0,r.result={binary:lt.shouldSkip({scheme:"file",head:"a\0b"}),virtual:lt.shouldSkip({scheme:"git"})}):o==="session"?(r.ok=!0,r.result={noSession:lt.sessionOwns(null,"a.js",!1),selection:lt.sessionOwns(new Set,"a.js",!0),owned:lt.sessionOwns(new Set(["a.js"]),"a.js",!1),other:lt.sessionOwns(new Set(["b.js"]),"a.js",!1),arrayOwned:lt.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=XS();r.ok=!0,r.result={files:ae.size,block:i,chars:i.length}}else if(o==="stub"){let i=Array.isArray(s.records)?s.records:[],a=vS.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||L();if(o==="stats")r.ok=!0,r.result=pr.stats(i);else if(o==="reset")pr.reset(i),r.ok=!0,r.result={reset:!0};else{let a=pr.search(i,s.query||"boostBudget",{maxFiles:r_(),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});b("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:pr.format(a),dir:l||"",underPrefix:c})}}else if(s.op==="fim"){let o=Ec.buildPrompt({path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0,prefixLines:s.prefixLines,suffixLines:s.suffixLines}),i=Ec.trimCompletion(s.completion||"",o.suffix),a=ft(s.modelKey);if(s.case==="request"){let l=await FS({modelKey:s.modelKey,path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0});r.ok=!0,r.result={base:Ic(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:Ic(a&&a.provider),enabled:mu().enabled,prompt:o.prompt,suffix:o.suffix,chars:o.chars,completion:i}}else if(s.op==="cache"){let o=Math.max(1,Math.min(jS,Number(s.count)||20)),i=zo.slice(-o),a=0,l=0,c=0;for(let m of i)a+=m.cachedTokens,l+=m.promptTokens,c+=m.prefixTokens;let u=i.filter(function(m){return m.prefixSource==="prev"&&m.prefixTokens>0}),d=0,f=0;for(let m of u)d+=m.cachedTokens,f+=m.prefixTokens;let p=i.filter(function(m){return m.cachedTokens===0&&m.prefixTokens>0}).length;r.ok=!0,r.result={streamUsage:(Gt.providers||[]).map(function(m){return{id:m.id,on:m.streamUsage!==!1&&!Wp[m.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=P.mkdtempSync(D.join(it.tmpdir(),"luban-usage-")),a=new Date(2026,9,27,12,0,0).getTime(),l=function(p,m,h){Xe.append(i,Xe.row(Object.assign({provider:"deepseek",model:"deepseek-flash",modelKey:"deepseek::deepseek-flash",mode:"agent",source:"view",session:"s1"},m||{}),p,h))};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()),P.appendFileSync(D.join(i,Xe.monthOf(a)+".jsonl"),`{oops
1038
- `);let c=Xe.rangeOf("7d",a),u=Xe.aggregate(Xe.read(i,c.from,c.to).rows,c),d=Xe.rangeOf("all",a),f=Xe.aggregate(Xe.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=Xe.rangeOf("today",i),l=Xe.rangeOf("7d",i),c=Xe.rangeOf("30d",i),u=Xe.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&&Xe.rangeOf("nope",i).key==="7d",r.result={today:a,d7:l,d30:c,all:u,fallback:Xe.rangeOf("nope",i).key}}else if(o==="ui"){s.range&&Xe.RANGES.some(function(l){return l.key===String(s.range)})&&(Un=String(s.range)),Zv(t),j=null;let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),j&&j.source==="dashboard"){a=j;break}r.ok=!!(a&&/_ok$/.test(String(a.kind||""))),r.result={ack:a||{kind:"timeout"},range:Un,dir:yr}}else{let i=Xe.rangeOf(s.range||Un),a=Xe.read(yr,i.from,i.to),l=Xe.aggregate(a.rows,i);r.ok=!0,r.result={dir:yr,range:i,files:a.files,badLines:a.bad,record:jm(),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=mr.check(o);r.ok=!0,r.result={cmd:o,verdict:i.ok?"allow":"deny",reason:i.reason||"",segment:i.segment||"",strict:Zc()}}else if(s.op==="mcp"){try{await Se.ready()}catch{}let o=Se.status();r.ok=!0,r.result={configPaths:o.configPaths,configErrors:o.configErrors,servers:o.servers,tools:o.tools,agentTools:Se.toolDefs({}).map(function(i){return i.function.name}),planTools:Se.toolDefs({planOnly:!0}).map(function(i){return i.function.name}),promptBlock:Se.promptBlock()}}else if(s.op==="mcp_call"){let o=String(s.name||"");if(!o&&s.server&&s.tool){let i=Se.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 Se.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"){Se.configure({root:s.root||L(),version:ds,rec:b});let o=await Se.reload();r.ok=!0,r.result={servers:o.servers,tools:o.tools}}else if(s.op==="skills"){let o=s.root||L();Ht.configure({root:o,rec:b});let i=Ht.refresh(o);r.ok=!0,r.result={count:i.length,dirs:Ht.status().dirs,skills:Ht.list(),blockHead:Ht.block().slice(0,1200)}}else if(s.op==="skill_read"){let o=Ht.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||L();en.configure(Object.assign({root:o,rec:b},Ov()));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}b("remote_cmd",{op:r.op,ok:r.ok,error:r.error}),um();try{P.writeFileSync(n,JSON.stringify(r,null,2))}catch{}},1500)}async function gF(){for(let t of Tn.values())try{clearTimeout(t)}catch{}Tn.clear();for(let t of de.values())try{bt(t)}catch{}try{await nt().flush()}catch{}for(let t of rt.values())try{t.cts.cancel()}catch{}try{let t=xe.stopEverything();t&&t.stopped&&b("async_cmd_stop_all",{stopped:t.stopped,reason:"deactivate"})}catch{}try{um()}catch{}try{vn.offline("\u7A97\u53E3\u5DF2\u5173\u95ED")}catch{}if(fr){try{clearTimeout(fr)}catch{}fr=null}try{Se.stop()}catch{}try{await BN("deactivate")}catch{}}O_.exports={activate:cF,deactivate:gF,__runAgent:Is,__applyTlsMaxVersion:$p,__tlsMaxVersionSetting:kv,__tlsBootMaxVersion:function(){return bv},__execTool:$n,__plugins:Je,__applyPluginSettings:Fc,__pluginsPayload:$c,__themeStyleTag:_m,__themeTokens:vm,__pushTheme:Tm,__onPluginsConfigChanged:nv,__webFetch:mm,__toolsFor:cr,__allModels:Zn,__resolveModel:ft,__apiKeyFor:Nc,__requestKeyFor:Zo,__isKeylessProvider:Yo,__defaultModelKey:si,__loadConfig:ou,__validateConfig:Iv,__readonlyEnforced:js,__capSubagentText:zc,__explorePrompt:Ia,__exploreToolList:Hc,__exploreSystem:function(t,e){return ur("explore",t,e)},__subagentCaveat:Xr,__subagentMinutes:Av,__exploreLimits:eo,__usageSummary:Ga,__expandReferences:Zr,__selectionTokenForCurrent:GS,__fsSkipSelftest:A_,__readGeneral:Rm,__saveGeneral:Nv,__webdavPayload:Ja,__saveWebdav:Hm,__webdavRuntime:ri,__webdavGuard:el,__testWebdav:Uv,__webdavTransfer:nm,__webdavRestoreOpts:Wv,__webdavProviderMergeText:Bv,__reloadProvidersFromDisk:Um,__webdavNeedsReload:Kv,__webdavRemoteList:Hv,__webdavRemoteProviders:zv,__webdavMachineList:Gv,__fetchProviderModels:Wm,__parseModelMetadata:Lv,__limitsFromContext:uu,__sessionInWorkspace:Go,__restoreOpenTabs:nh,__persistOpenTabs:Fa,__refreshTabsForWorkspace:v_,__openTabsIds:function(){return we.slice()},__tabsRoot:function(){return Gm},__activeId:function(){return Pe},__openTabsKeyFor:th,__webdavSelfCheck:Jv,__wireWebview:sh,__wireHub:$v,__sessions:function(){return de},__turns:function(){return rt},__sessOf:ei,__deleteTurnRange:k_,__lmProvider:TS,__registerLmProvider:C_,__gitCleanState:Jm,__recordEdit:as,__reviewKeys:function(){return Array.from(ae.keys())},__reviewAutoKeepDefault:s_}});var G_=Q((rR,z_)=>{"use strict";var yF=require("fs"),wF=require("os"),tl=require("path"),bF=["flash","lite","mini","8b","7b"],P_=/(?:^|[^a-z0-9])(?:flash|lite|mini|8b|7b)(?![a-z])/,rh=1e6,j_=80,N_=60,I_=[{key:"model",title:"1. \u9ED8\u8BA4\u6A21\u578B\u4E0E\u601D\u8003\u6863"},{key:"settings",title:"2. \u7F16\u8F91\u5668\u8BBE\u7F6E\u8986\u76D6"},{key:"usage",title:"3. \u7528\u91CF\u4E0E\u7F13\u5B58\u547D\u4E2D\u7387"},{key:"inline",title:"4. \u5185\u8054\u8865\u5168\uFF08providers.json\uFF09"}],D_=["Code","VSCodium","Code - Insiders","Cursor"];function F_(t){let e=String(t??"").toLowerCase();return e?P_.test(e):!1}function oh(t,e){let n=e??0;if(!t||typeof t!="object"||n>6)return"";let s=t.reasoning_effort||t.reasoningEffort;if(typeof s=="string"&&s.trim())return s.trim().toLowerCase();let r=t.reasoning;if(r&&typeof r=="object"){let o=r.effort;if(typeof o=="string"&&o.trim())return o.trim().toLowerCase()}for(let o of Object.keys(t)){let i=t[o];if(!i||typeof i!="object")continue;let a=oh(i,n+1);if(a)return a}return""}function L_(t){let e=t&&t.provider||{},n=t&&t.model||{},s=String(e.id||""),r=String(n.id||n.name||"");return s?s+"/"+r:r}function R_(t,e){let n=[],s=String(e??"");if(!s)n.push({id:"model.default",section:"model",level:"info",text:"\u9ED8\u8BA4\u6A21\u578B: (\u672A\u8BBE\u7F6E)",data:{defaultKey:""}});else{let o=F_(s);n.push({id:"model.default",section:"model",level:o?"ok":"warn",text:"\u9ED8\u8BA4\u6A21\u578B: "+s+(o?" \xB7 \u8D70\u4F4E\u4EF7\u6863\uFF08flash/lite\uFF09":" \xB7 \u4E0D\u662F\u4F4E\u4EF7\u6863\uFF0C\u957F\u4F1A\u8BDD\u6210\u672C\u504F\u9AD8"),data:{defaultKey:s,lowTier:o}})}let r=Array.isArray(t)?t:[];for(let o of r){let a=(o&&o.model||{}).thinking;if(!a||typeof a!="object"||a.default!=="on")continue;let l=L_(o),c=oh(a.on),u=c==="high";n.push({id:"model.thinking",section:"model",level:"warn",text:l+" thinking \u9ED8\u8BA4 on"+(u?" + effort=high\uFF08\u8F93\u51FA token \u663E\u8457\u589E\u52A0\uFF09":"\uFF08\u601D\u8003 token \u8BA1\u5165\u8F93\u51FA\uFF09"),data:{model:l,effort:c}})}return n}function q_(t){let e=t||{},n=String(e.platform||process.platform),s=String(e.home||wF.homedir()),r=e.env||process.env,o="";n==="darwin"?o=tl.join(s,"Library","Application Support"):n==="win32"?o=String(r.APPDATA||tl.join(s,"AppData","Roaming")):o=String(r.XDG_CONFIG_HOME||tl.join(s,".config"));let i=D_.map(function(a){return tl.join(o,a,"User","settings.json")});return e.root&&i.push(tl.join(String(e.root),".vscode","settings.json")),i}function B_(t){let e=String(t??""),n="",s=0,r=!1;for(;s<e.length;){let o=e[s],i=e[s+1];if(r){if(n+=o,o==="\\"){if(i!=null){n+=i,s+=2;continue}}else o==='"'&&(r=!1);s++;continue}if(o==='"'){r=!0,n+=o,s++;continue}if(o==="/"&&i==="/"){for(;s<e.length&&e[s]!==`
1037
+ `),p=y.start,m=y.end,h=!0)}a=lt.build({path:s.path||"src/demo.js",text:f,startLine:p,endLine:m,hasSelection:!!s.selection,maxChars:Number(s.maxChars)||i.maxChars,cursorLine:d,totalLines:u,windowed:h})}else a=bm([],s.root||L());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:lt.windowRange({lineCount:1200,cursorLine:1,windowLines:200}),middle:lt.windowRange({lineCount:1200,cursorLine:600,windowLines:200}),tail:lt.windowRange({lineCount:1200,cursorLine:1200,windowLines:200}),small:lt.windowRange({lineCount:105,cursorLine:50,windowLines:200}),custom:lt.windowRange({lineCount:1200,cursorLine:600,windowLines:100})}):o==="skip"?(r.ok=!0,r.result={binary:lt.shouldSkip({scheme:"file",head:"a\0b"}),virtual:lt.shouldSkip({scheme:"git"})}):o==="session"?(r.ok=!0,r.result={noSession:lt.sessionOwns(null,"a.js",!1),selection:lt.sessionOwns(new Set,"a.js",!0),owned:lt.sessionOwns(new Set(["a.js"]),"a.js",!1),other:lt.sessionOwns(new Set(["b.js"]),"a.js",!1),arrayOwned:lt.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=XS();r.ok=!0,r.result={files:ae.size,block:i,chars:i.length}}else if(o==="stub"){let i=Array.isArray(s.records)?s.records:[],a=vS.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||L();if(o==="stats")r.ok=!0,r.result=mr.stats(i);else if(o==="reset")mr.reset(i),r.ok=!0,r.result={reset:!0};else{let a=mr.search(i,s.query||"boostBudget",{maxFiles:r_(),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});b("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:mr.format(a),dir:l||"",underPrefix:c})}}else if(s.op==="fim"){let o=Ec.buildPrompt({path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0,prefixLines:s.prefixLines,suffixLines:s.suffixLines}),i=Ec.trimCompletion(s.completion||"",o.suffix),a=ft(s.modelKey);if(s.case==="request"){let l=await FS({modelKey:s.modelKey,path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0});r.ok=!0,r.result={base:Ic(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:Ic(a&&a.provider),enabled:mu().enabled,prompt:o.prompt,suffix:o.suffix,chars:o.chars,completion:i}}else if(s.op==="cache"){let o=Math.max(1,Math.min(jS,Number(s.count)||20)),i=zo.slice(-o),a=0,l=0,c=0;for(let m of i)a+=m.cachedTokens,l+=m.promptTokens,c+=m.prefixTokens;let u=i.filter(function(m){return m.prefixSource==="prev"&&m.prefixTokens>0}),d=0,f=0;for(let m of u)d+=m.cachedTokens,f+=m.prefixTokens;let p=i.filter(function(m){return m.cachedTokens===0&&m.prefixTokens>0}).length;r.ok=!0,r.result={streamUsage:(Gt.providers||[]).map(function(m){return{id:m.id,on:m.streamUsage!==!1&&!Wp[m.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=P.mkdtempSync(D.join(it.tmpdir(),"luban-usage-")),a=new Date(2026,9,27,12,0,0).getTime(),l=function(p,m,h){Xe.append(i,Xe.row(Object.assign({provider:"deepseek",model:"deepseek-flash",modelKey:"deepseek::deepseek-flash",mode:"agent",source:"view",session:"s1"},m||{}),p,h))};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()),P.appendFileSync(D.join(i,Xe.monthOf(a)+".jsonl"),`{oops
1038
+ `);let c=Xe.rangeOf("7d",a),u=Xe.aggregate(Xe.read(i,c.from,c.to).rows,c),d=Xe.rangeOf("all",a),f=Xe.aggregate(Xe.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=Xe.rangeOf("today",i),l=Xe.rangeOf("7d",i),c=Xe.rangeOf("30d",i),u=Xe.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&&Xe.rangeOf("nope",i).key==="7d",r.result={today:a,d7:l,d30:c,all:u,fallback:Xe.rangeOf("nope",i).key}}else if(o==="ui"){s.range&&Xe.RANGES.some(function(l){return l.key===String(s.range)})&&(Un=String(s.range)),Zv(t),j=null;let i=Date.now()+(s.waitMs||15e3),a=null;for(;Date.now()<i;)if(await new Promise(l=>setTimeout(l,300)),j&&j.source==="dashboard"){a=j;break}r.ok=!!(a&&/_ok$/.test(String(a.kind||""))),r.result={ack:a||{kind:"timeout"},range:Un,dir:wr}}else{let i=Xe.rangeOf(s.range||Un),a=Xe.read(wr,i.from,i.to),l=Xe.aggregate(a.rows,i);r.ok=!0,r.result={dir:wr,range:i,files:a.files,badLines:a.bad,record:jm(),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=hr.check(o);r.ok=!0,r.result={cmd:o,verdict:i.ok?"allow":"deny",reason:i.reason||"",segment:i.segment||"",strict:Zc()}}else if(s.op==="mcp"){try{await Se.ready()}catch{}let o=Se.status();r.ok=!0,r.result={configPaths:o.configPaths,configErrors:o.configErrors,servers:o.servers,tools:o.tools,agentTools:Se.toolDefs({}).map(function(i){return i.function.name}),planTools:Se.toolDefs({planOnly:!0}).map(function(i){return i.function.name}),promptBlock:Se.promptBlock()}}else if(s.op==="mcp_call"){let o=String(s.name||"");if(!o&&s.server&&s.tool){let i=Se.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 Se.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"){Se.configure({root:s.root||L(),version:fs,rec:b});let o=await Se.reload();r.ok=!0,r.result={servers:o.servers,tools:o.tools}}else if(s.op==="skills"){let o=s.root||L();Ht.configure({root:o,rec:b});let i=Ht.refresh(o);r.ok=!0,r.result={count:i.length,dirs:Ht.status().dirs,skills:Ht.list(),blockHead:Ht.block().slice(0,1200)}}else if(s.op==="skill_read"){let o=Ht.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||L();en.configure(Object.assign({root:o,rec:b},Ov()));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}b("remote_cmd",{op:r.op,ok:r.ok,error:r.error}),um();try{P.writeFileSync(n,JSON.stringify(r,null,2))}catch{}},1500)}async function gF(){for(let t of Tn.values())try{clearTimeout(t)}catch{}Tn.clear();for(let t of de.values())try{bt(t)}catch{}try{await nt().flush()}catch{}for(let t of rt.values())try{t.cts.cancel()}catch{}try{let t=xe.stopEverything();t&&t.stopped&&b("async_cmd_stop_all",{stopped:t.stopped,reason:"deactivate"})}catch{}try{um()}catch{}try{vn.offline("\u7A97\u53E3\u5DF2\u5173\u95ED")}catch{}if(pr){try{clearTimeout(pr)}catch{}pr=null}try{Se.stop()}catch{}try{await BN("deactivate")}catch{}}O_.exports={activate:cF,deactivate:gF,__runAgent:Ds,__applyTlsMaxVersion:$p,__tlsMaxVersionSetting:kv,__tlsBootMaxVersion:function(){return bv},__execTool:$n,__plugins:Je,__applyPluginSettings:Fc,__pluginsPayload:$c,__themeStyleTag:_m,__themeTokens:vm,__pushTheme:Tm,__onPluginsConfigChanged:nv,__webFetch:mm,__toolsFor:ur,__allModels:Zn,__resolveModel:ft,__apiKeyFor:Nc,__requestKeyFor:Zo,__isKeylessProvider:Yo,__defaultModelKey:si,__loadConfig:ou,__validateConfig:Iv,__readonlyEnforced:Ns,__capSubagentText:zc,__explorePrompt:Ia,__exploreToolList:Hc,__exploreSystem:function(t,e){return dr("explore",t,e)},__subagentCaveat:Xr,__subagentMinutes:Av,__exploreLimits:eo,__usageSummary:Ga,__expandReferences:Zr,__selectionTokenForCurrent:GS,__fsSkipSelftest:A_,__readGeneral:Rm,__saveGeneral:Nv,__webdavPayload:Ja,__saveWebdav:Hm,__webdavRuntime:ri,__webdavGuard:el,__testWebdav:Uv,__webdavTransfer:nm,__webdavRestoreOpts:Wv,__webdavProviderMergeText:Bv,__reloadProvidersFromDisk:Um,__webdavNeedsReload:Kv,__webdavRemoteList:Hv,__webdavRemoteProviders:zv,__webdavMachineList:Gv,__fetchProviderModels:Wm,__parseModelMetadata:Lv,__limitsFromContext:uu,__sessionInWorkspace:Go,__restoreOpenTabs:nh,__persistOpenTabs:Fa,__refreshTabsForWorkspace:v_,__openTabsIds:function(){return we.slice()},__tabsRoot:function(){return Gm},__activeId:function(){return Pe},__openTabsKeyFor:th,__webdavSelfCheck:Jv,__wireWebview:sh,__wireHub:$v,__sessions:function(){return de},__turns:function(){return rt},__sessOf:ei,__deleteTurnRange:k_,__lmProvider:TS,__registerLmProvider:C_,__gitCleanState:Jm,__recordEdit:ls,__reviewKeys:function(){return Array.from(ae.keys())},__reviewAutoKeepDefault:s_}});var G_=Q((rR,z_)=>{"use strict";var yF=require("fs"),wF=require("os"),tl=require("path"),bF=["flash","lite","mini","8b","7b"],P_=/(?:^|[^a-z0-9])(?:flash|lite|mini|8b|7b)(?![a-z])/,rh=1e6,j_=80,N_=60,I_=[{key:"model",title:"1. \u9ED8\u8BA4\u6A21\u578B\u4E0E\u601D\u8003\u6863"},{key:"settings",title:"2. \u7F16\u8F91\u5668\u8BBE\u7F6E\u8986\u76D6"},{key:"usage",title:"3. \u7528\u91CF\u4E0E\u7F13\u5B58\u547D\u4E2D\u7387"},{key:"inline",title:"4. \u5185\u8054\u8865\u5168\uFF08providers.json\uFF09"}],D_=["Code","VSCodium","Code - Insiders","Cursor"];function F_(t){let e=String(t??"").toLowerCase();return e?P_.test(e):!1}function oh(t,e){let n=e??0;if(!t||typeof t!="object"||n>6)return"";let s=t.reasoning_effort||t.reasoningEffort;if(typeof s=="string"&&s.trim())return s.trim().toLowerCase();let r=t.reasoning;if(r&&typeof r=="object"){let o=r.effort;if(typeof o=="string"&&o.trim())return o.trim().toLowerCase()}for(let o of Object.keys(t)){let i=t[o];if(!i||typeof i!="object")continue;let a=oh(i,n+1);if(a)return a}return""}function L_(t){let e=t&&t.provider||{},n=t&&t.model||{},s=String(e.id||""),r=String(n.id||n.name||"");return s?s+"/"+r:r}function R_(t,e){let n=[],s=String(e??"");if(!s)n.push({id:"model.default",section:"model",level:"info",text:"\u9ED8\u8BA4\u6A21\u578B: (\u672A\u8BBE\u7F6E)",data:{defaultKey:""}});else{let o=F_(s);n.push({id:"model.default",section:"model",level:o?"ok":"warn",text:"\u9ED8\u8BA4\u6A21\u578B: "+s+(o?" \xB7 \u8D70\u4F4E\u4EF7\u6863\uFF08flash/lite\uFF09":" \xB7 \u4E0D\u662F\u4F4E\u4EF7\u6863\uFF0C\u957F\u4F1A\u8BDD\u6210\u672C\u504F\u9AD8"),data:{defaultKey:s,lowTier:o}})}let r=Array.isArray(t)?t:[];for(let o of r){let a=(o&&o.model||{}).thinking;if(!a||typeof a!="object"||a.default!=="on")continue;let l=L_(o),c=oh(a.on),u=c==="high";n.push({id:"model.thinking",section:"model",level:"warn",text:l+" thinking \u9ED8\u8BA4 on"+(u?" + effort=high\uFF08\u8F93\u51FA token \u663E\u8457\u589E\u52A0\uFF09":"\uFF08\u601D\u8003 token \u8BA1\u5165\u8F93\u51FA\uFF09"),data:{model:l,effort:c}})}return n}function q_(t){let e=t||{},n=String(e.platform||process.platform),s=String(e.home||wF.homedir()),r=e.env||process.env,o="";n==="darwin"?o=tl.join(s,"Library","Application Support"):n==="win32"?o=String(r.APPDATA||tl.join(s,"AppData","Roaming")):o=String(r.XDG_CONFIG_HOME||tl.join(s,".config"));let i=D_.map(function(a){return tl.join(o,a,"User","settings.json")});return e.root&&i.push(tl.join(String(e.root),".vscode","settings.json")),i}function B_(t){let e=String(t??""),n="",s=0,r=!1;for(;s<e.length;){let o=e[s],i=e[s+1];if(r){if(n+=o,o==="\\"){if(i!=null){n+=i,s+=2;continue}}else o==='"'&&(r=!1);s++;continue}if(o==='"'){r=!0,n+=o,s++;continue}if(o==="/"&&i==="/"){for(;s<e.length&&e[s]!==`
1039
1039
  `;)s++;continue}if(o==="/"&&i==="*"){for(s+=2;s<e.length&&!(e[s]==="*"&&e[s+1]==="/");)s++;s+=2;continue}if(o===","){let a=s+1;for(;a<e.length&&/\s/.test(e[a]);)a++;if(e[a]==="}"||e[a]==="]"){s++;continue}}n+=o,s++}return n}function U_(t){try{return{value:JSON.parse(B_(t))}}catch(e){return{error:String(e&&e.message||e)}}}function W_(t){let e=[],n=Array.isArray(t)?t:[],s=[];for(let r of n){let o=String(r||"");if(!o)continue;let i=null;try{i=yF.readFileSync(o,"utf8")}catch{continue}s.push(o);let a=U_(i);if(a.error){e.push({id:"settings.parse",section:"settings",level:"warn",text:o+" \xB7 \u89E3\u6790\u5931\u8D25\uFF1A"+a.error,data:{file:o,error:a.error}});continue}let l=a.value&&typeof a.value=="object"?a.value:{},c=Object.keys(l).filter(function(u){return u.indexOf("luban.")===0});if(!c.length){e.push({id:"settings.keys",section:"settings",level:"ok",text:o+" \xB7 \u65E0 luban \u8986\u76D6\uFF08\u5168\u8D70\u7701 token \u9ED8\u8BA4\u503C\uFF09",data:{file:o,keys:[]}});continue}e.push({id:"settings.file",section:"settings",level:"info",text:o+" \xB7 "+c.length+" \u9879 luban \u8986\u76D6",data:{file:o,keys:c}});for(let u of c)e.push({id:"settings.key",section:"settings",level:"info",text:u+" = "+JSON.stringify(l[u]),data:{file:o,key:u,value:l[u]}});if(Object.prototype.hasOwnProperty.call(l,"luban.agent.verbosity")){let u=String(l["luban.agent.verbosity"]),d=u==="concise";e.push({id:"settings.verbosity",section:"settings",level:d?"ok":"warn",text:"verbosity="+u+(d?"\uFF08\u8F93\u51FA\u66F4\u7701\uFF09":" \xB7 \u975E concise\uFF0C\u8F93\u51FA token \u504F\u591A"),data:{file:o,verbosity:u}})}l["luban.inlineCompletion.enabled"]===!0&&e.push({id:"settings.inline",section:"settings",level:"warn",text:"\u5185\u8054\u8865\u5168\u5DF2\u5F00\uFF08\u6BCF\u6572\u51E0\u4E2A\u5B57\u5C31\u53D1\u4E00\u6B21\u8BF7\u6C42\uFF09",data:{file:o,enabled:!0}})}return s.length||e.push({id:"settings.none",section:"settings",level:"info",text:"\u672A\u627E\u5230\u7F16\u8F91\u5668 settings.json\uFF08\u4E0D\u5B58\u5728 = \u65E0\u8986\u76D6\uFF0C\u8D70\u9ED8\u8BA4\u503C\uFF09",data:{searched:n}}),e}function K_(t,e){let n=String(t||"");if(!n)return[{id:"usage.dir",section:"usage",level:"info",text:"\u672A\u63D0\u4F9B\u7528\u91CF\u76EE\u5F55",data:{}}];let s=null;try{s=_l()}catch(d){return[{id:"usage.dir",section:"usage",level:"info",text:"\u8BFB\u4E0D\u5230 usage-log.js\uFF08"+String(d&&d.message||d)+"\uFF09",data:{dir:n}}]}let r=s.rangeOf("all",e),o=s.read(n,r.from,r.to),i=o&&o.rows||[];if(!i.length)return[{id:"usage.empty",section:"usage",level:"info",text:n+" \xB7 \u65E0\u7528\u91CF\u8BB0\u5F55",data:{dir:n,rows:0}}];let a=s.aggregate(i,r),l=Number((a.hit||0)*100),c=[{id:"usage.hit",section:"usage",level:l>=j_?"ok":"warn",text:"\u6574\u4F53\u7F13\u5B58\u547D\u4E2D\u7387 "+l.toFixed(1)+"%\uFF08prompt "+ro(a.promptTokens)+" / cached "+ro(a.cachedTokens)+"\uFF09",data:{hit:a.hit,promptTokens:a.promptTokens,cachedTokens:a.cachedTokens}},{id:"usage.volume",section:"usage",level:"info",text:"\u7D2F\u8BA1\u8BF7\u6C42 "+kF(a.requests)+" \xB7 \u8F93\u51FA "+ro(a.completionTokens)+" tokens",data:{requests:a.requests,completionTokens:a.completionTokens}}],u=Array.isArray(a.byModel)?a.byModel.slice():[];u.sort(function(d,f){return f.promptTokens-d.promptTokens});for(let d of u){if(d.promptTokens<rh)continue;let f=Number((d.hit||0)*100);c.push({id:"usage.model",section:"usage",level:f<N_?"warn":"info",text:d.key+" \xB7 prompt "+ro(d.promptTokens)+" \xB7 \u547D\u4E2D "+Math.round(f)+"% \xB7 \u8F93\u51FA "+ro(d.completionTokens),data:{model:d.key,hit:d.hit,promptTokens:d.promptTokens,completionTokens:d.completionTokens}})}return c.length===2&&c.push({id:"usage.small",section:"usage",level:"info",text:"\u6309\u6A21\u578B\u660E\u7EC6\uFF1Aprompt \u4E0D\u8DB3 "+ro(rh)+" \u7684\u6A21\u578B\u4E0D\u5355\u5217\uFF08\u6837\u672C\u592A\u5C0F\uFF09",data:{}}),c}function H_(t){let e=[],n=Object.create(null),s=Array.isArray(t)?t:[];for(let r of s){let o=r&&r.provider||null;if(!o||!o.id||n[o.id])continue;n[o.id]=!0;let i=o.inlineCompletion;if(!i||typeof i!="object")continue;let a=function(l){return l??"-"};e.push({id:"inline.provider",section:"inline",level:"info",text:o.id+" \xB7 maxTokens="+a(i.maxTokens)+" prefix="+a(i.prefixLines)+"\u884C suffix="+a(i.suffixLines)+"\u884C",data:{provider:o.id,inlineCompletion:i}})}return e.length||e.push({id:"inline.none",section:"inline",level:"info",text:"\u672A\u914D\u7F6E\uFF08\u5185\u8054\u8865\u5168\u9ED8\u8BA4\u5173\u95ED\uFF09",data:{}}),e}function ro(t){let e=Math.max(0,Number(t)||0);return e<1e3?String(e):e<1e4?(e/1e3).toFixed(1)+"k":e<1e6?Math.round(e/1e3)+"k":(e/1e6).toFixed(e<1e7?1:0)+"M"}function kF(t){let e=Math.max(0,Number(t)||0);return String(Math.round(e)).replace(/\B(?=(\d{3})+(?!\d))/g,",")}function xF(t){let e=t||{},n=Array.isArray(e.models)?e.models:[],s=String(e.defaultKey==null?"":e.defaultKey),r=[];r.push.apply(r,R_(n,s));let o=Array.isArray(e.settingsFiles)?e.settingsFiles:q_({platform:e.platform,home:e.home,env:e.env,root:e.root});r.push.apply(r,W_(o)),r.push.apply(r,K_(e.usageDir,e.now)),r.push.apply(r,H_(n));let i=r.filter(function(a){return a.level==="warn"}).length;return{ok:i===0,warnings:i,checks:r}}function SF(t,e){return t==="ok"?e("green","\u2713"):t==="warn"?e("yellow","!"):"\xB7"}function vF(t,e){let n=e||{},s=t||{},r=Array.isArray(s.checks)?s.checks:[];if(n.json)return JSON.stringify({ok:!!s.ok,warnings:Number(s.warnings||0),checks:r},null,2);let o=typeof n.paint=="function"?n.paint:function(a,l){return String(l??"")},i=[];for(let a of I_){let l=r.filter(function(c){return c.section===a.key});i.push(""),i.push(o("bold",a.title));for(let c of l)i.push(" "+SF(c.level,o)+" "+c.text)}return i.push(""),i.push(o("bold","\u5C0F\u7ED3")),i.push(" \u7701 token \u5173\u952E\u9879\uFF1A\u4F4E\u4EF7\u9ED8\u8BA4\u6A21\u578B\u3001\u5DE5\u5177\u7ED3\u679C\u5360\u4F4D\u538B\u7F29\u3001\u81EA\u52A8\u4E0A\u4E0B\u6587\u7A97\u53E3\u3001\u5386\u53F2/\u8BB0\u5FC6/\u89C4\u5219\u4E0A\u9650\u3001\u7F13\u5B58\u547D\u4E2D\u7387\u3002"),i.push(" \u53EF\u4F18\u5316\u9879\u89C1\u4E0A\u9762\u7684 "+o("yellow","!")+" \u6807\u8BB0\uFF08verbosity / thinking / \u4F4E\u547D\u4E2D\u7387\u6A21\u578B\uFF09\u3002"),i.push(" \u672C\u6B21\u4F53\u68C0\uFF1A"+(s.warnings?o("yellow",s.warnings+" \u9879\u53EF\u4F18\u5316"):o("green","\u672A\u53D1\u73B0\u53EF\u4F18\u5316\u9879"))+"\uFF08\u53EA\u8BFB\uFF0C\u4E0D\u6539\u4EFB\u4F55\u914D\u7F6E\uFF09"),i.join(`
1040
1040
  `)}z_.exports={LOW_TIER:bF,LOW_TIER_RE:P_,LIST_MIN_PROMPT:rh,HIT_OK:j_,HIT_MODEL_WARN:N_,SECTIONS:I_,EDITORS:D_,isLowTier:F_,findEffort:oh,modelTag:L_,auditModels:R_,editorSettingsCandidates:q_,stripJsonc:B_,parseJsonc:U_,auditSettings:W_,auditUsage:K_,auditInline:H_,run:xF,format:vF,fmtK:ro}});var Z_=Q((oR,Y_)=>{"use strict";var _F=["up","down","left","right","submit","cancel","toggle"],TF=["modePrev","modeNext","modelPrev","modelNext"],MF={modePrev:"\u4E0A\u4E00\u6A21\u5F0F",modeNext:"\u4E0B\u4E00\u6A21\u5F0F",modelPrev:"\u4E0A\u4E00\u6A21\u578B",modelNext:"\u4E0B\u4E00\u6A21\u578B"},J_={prompt:{up:"\x1B[A",down:"\x1B[B",right:"\x1B[C",left:"\x1B[D",submit:"\r",cancel:"",toggle:""},ask:{up:"\x1B[A",down:"\x1B[B",right:"\x1B[C",left:"\x1B[D",submit:"\r",cancel:"",toggle:" "},running:{up:"",down:"",right:"",left:"",submit:"",cancel:"",toggle:""}},oo={name:"standard-hid-gamepad",buttons:{1:"submit",2:"cancel",3:"toggle"},axes:{48:"x",49:"y",50:"x",53:"y",51:"x",52:"y"},hat:57},$_={"11720:36891":{name:"8bitdo-ultimate-xbox",buttons:{4:"toggle",7:"modePrev",8:"modeNext",9:"modelPrev",10:"modelNext"}}};function X_(t){let e=t||oo;return{name:e.name||oo.name,buttons:Object.assign({},oo.buttons,e.buttons||{}),axes:Object.assign({},oo.axes,e.axes||{}),hat:e.hat===void 0?oo.hat:e.hat}}function CF(t){let e=String(t??"");return X_($_[e]||oo)}function V_(t,e){let n=Number(t);return!isFinite(n)||n<0?[]:e!=null&&n<Number(e)?[]:n>7?[]:[["up"],["up","right"],["right"],["down","right"],["down"],["down","left"],["left"],["up","left"]][n%8].slice()}function AF(t,e){let n=X_(t),s=e||{},r=typeof s.now=="function"?s.now:function(){return Date.now()},o=Object.create(null),i=Object.create(null),a="";function l(m){return typeof m=="number"&&isFinite(m)?m:r()}function c(m,h,y){let k=o[m]===!0,T=Number(h)>0;if(o[m]=T,T===k||!T)return;let g=n.buttons[m];g&&y.push(g)}function u(m,h,y,k,T,g){let v=n.axes[m];if(!v)return;let w=Number(y),S=Number(k),_=isFinite(w)&&isFinite(S)&&S>w,C=_?(w+S)/2:0,A=_?(S-w)/2:127,F=A?(Number(h)-C)/A:0,K=null;F<=-.35?K=v==="x"?"left":"up":F>=.35&&(K=v==="x"?"right":"down");let W=i[m]||(i[m]={dir:null,nextAt:0});if(K!==W.dir){if(W.dir=K,!K){W.nextAt=0;return}W.nextAt=T+350,g.push(K)}}function d(m,h){let y=[];if(!m)return y;let k=l(h),T=Number(m.page),g=Number(m.usage),v=Number(m.value);if(!isFinite(T)||!isFinite(g)||!isFinite(v))return y;if(T===9)return c(g,v,y),y;if(T!==1)return y;if(g===n.hat){let w=V_(v,m.min),S=w.join(",");if(S===a)return y;a=S;for(let _=0;_<w.length;_++)y.push(w[_]);return y}return u(g,v,m.min,m.max,k,y),y}function f(m){let h=[],y=l(m);for(let k in i){let T=i[k];!T||!T.dir||y<T.nextAt||(h.push(T.dir),T.nextAt=T.nextAt+90,T.nextAt<=y&&(T.nextAt=y+90))}return h}function p(){for(let m in o)delete o[m];for(let m in i)delete i[m];a=""}return{profile:n,decode:d,poll:f,reset:p}}function OF(t,e){let n=J_[e];if(!n)return"";let s=n[t];return typeof s=="string"?s:""}function EF(t,e,n){let s=Array.isArray(t)?t:[];if(!s.length)return null;let r=!(n>0),o=s.indexOf(e),i=o>=0?o:r?0:-1;return s[((i+(r?-1:1))%s.length+s.length)%s.length]}function PF(t){if(!t)return!1;let e=Number(t.page),n=Number(t.usage),s=Number(t.value);if(!isFinite(e)||!isFinite(n)||!isFinite(s))return!1;if(e===9)return s>0;if(e!==1)return!1;if(n===57)return s>=0&&s<=7;if(n<48||n>57)return!1;let r=Number(t.min),o=Number(t.max);if(!isFinite(r)||!isFinite(o)||o<=r)return!1;let i=(o-r)/2;return Math.abs((s-(r+o)/2)/(i||1))>=.35}function jF(t){let e=t||process.platform;return e==="darwin"?{ok:!0,platform:e,reason:""}:{ok:!1,platform:e,reason:"\u6E38\u620F\u624B\u67C4\u9002\u914D\u76EE\u524D\u53EA\u652F\u6301 macOS\uFF08Windows / Linux \u5F85\u5B9E\u73B0\uFF09"}}Y_.exports={DEADZONE:.35,REPEAT_DELAY_MS:350,REPEAT_RATE_MS:90,ACTIONS:_F,UI_ACTIONS:TF,ACTION_LABELS:MF,KEYMAP:J_,BASE_PROFILE:oo,PROFILES:$_,createDecoder:AF,profileFor:CF,hatActions:V_,keyFor:OF,cyclePick:EF,isPressedRaw:PF,isSupported:jF}});var rT=Q((aR,sT)=>{"use strict";var NF=require("crypto"),io=require("fs"),Q_=require("os"),ih=require("path"),{execFile:IF,spawn:DF}=require("child_process"),iR=process.platform==="darwin",eT=6e4,ah=`import Foundation
1041
1041
  import IOKit.hid
@@ -1131,15 +1131,15 @@ exit(0)
1131
1131
  `),process.exit(0));if(ye.version){let t="unknown";try{t=Tl().version||t}catch{}process.stdout.write("luban "+t+`
1132
1132
  `),process.exit(0)}if(ye.mascot){let t=null;try{t=Ti().paint}catch{}process.stdout.write(il.sheet(t).join(`
1133
1133
  `)+`
1134
- `),process.exit(0)}var At=lo.resolve(ye.root||process.cwd());(!ii.existsSync(At)||!ii.statSync(At).isDirectory())&&An("--root \u4E0D\u662F\u76EE\u5F55\uFF1A"+At);function yu(){let t=function(){return n},e={version:"1.100.0",env:{language:ye.lang||"zh-cn",appName:"luban-cli",uriScheme:"file"},workspace:{workspaceFolders:[{uri:{fsPath:At,scheme:"file"},name:lo.basename(At),index:0}],textDocuments:[],getConfiguration:function(){return{get:function(){},has:function(){return!1},inspect:function(){}}},onDidChangeConfiguration:function(){return{dispose:function(){}}},fs:{writeFile:function(s,r){return new Promise(function(o,i){try{ii.mkdirSync(lo.dirname(s.fsPath),{recursive:!0}),ii.writeFileSync(s.fsPath,r),o(void 0)}catch(a){i(a)}})},readFile:function(s){return new Promise(function(r,o){ii.readFile(s.fsPath,function(i,a){i?o(i):r(a)})})},stat:function(s){return new Promise(function(r,o){ii.stat(s.fsPath,function(i,a){i?o(i):r(a)})})}}},languages:{getDiagnostics:function(){return[]},onDidChangeDiagnostics:function(){return{dispose:function(){}}}},window:{activeTextEditor:null,visibleTextEditors:[],showErrorMessage:function(){return Promise.resolve(void 0)},showInformationMessage:function(){return Promise.resolve(void 0)},createOutputChannel:function(){return{appendLine:function(){},show:function(){},dispose:function(){}}},onDidChangeActiveTextEditor:function(){return{dispose:function(){}}}},commands:{executeCommand:function(s){return Promise.reject(new Error("CLI \u65E0\u7F16\u8F91\u5668\uFF0C\u4E0D\u80FD\u6267\u884C\u547D\u4EE4 "+s))},registerCommand:function(){return{dispose:function(){}}}},extensions:{getExtension:function(){return null},all:[]},Uri:{file:function(s){return{fsPath:s,scheme:"file",toString:function(){return"file://"+s}}},parse:function(s){return{fsPath:s,scheme:"file"}}},Position:function(s,r){this.line=s,this.character=r},Range:function(s,r,o,i){this.start=new e.Position(s,r),this.end=new e.Position(o,i)},CancellationTokenSource:function(){let s=[];return{token:{isCancellationRequested:!1,onCancellationRequested:function(r){return s.push(r),{dispose:function(){}}}},cancel:function(){s.forEach(function(r){try{r()}catch{}})},dispose:function(){}}},EventEmitter:function(){let s=[];return{event:function(r){return s.push(r),{dispose:function(){}}},fire:function(r){s.forEach(function(o){try{o(r)}catch{}})},dispose:function(){}}}},n=new Proxy(t,{get:function(s,r){if(!(r==="then"||r===Symbol.toPrimitive||r==="inspect"||r===Symbol.iterator))return r in e?e[r]:(r in s||(s[r]=yu()),s[r])},apply:function(){return yu()},construct:function(){return yu()}});return n}var qF=lT._load;lT._load=function(t,e,n){return t==="vscode"?yu():qF.call(this,t,e,n)};var On=E_();typeof On.__loadConfig=="function"&&On.__loadConfig();typeof On.__applyTlsMaxVersion=="function"&&On.__applyTlsMaxVersion("cli");var Sh=On.__runAgent,Sr=On.__allModels,BF=On.__apiKeyFor,bu=On.__requestKeyFor||BF;typeof Sh!="function"&&An("extension.js \u6CA1\u6709\u5BFC\u51FA __runAgent\uFF08CLI \u9700\u8981\u7684\u65E0\u5934\u53E3\u5B50\uFF09\uFF0C\u8BF7\u786E\u8BA4\u4ED3\u5E93\u7248\u672C");if(ye.auditToken){let t=G_(),e=t.run({models:Sr(),defaultKey:On.__defaultModelKey(),usageDir:xh,root:At});ye.prompt&&An("audit-token \u4E0D\u63A5\u53D7\u4EFB\u52A1\u63CF\u8FF0\uFF08\u591A\u4F59\u7684\u53C2\u6570\uFF1A"+ye.prompt+"\uFF09",2);let n=null;try{n=Ti().paint}catch{}process.stdout.write(t.format(e,{json:ye.json,paint:n})+`
1135
- `),process.exit(0)}if(ye.listModels){let t=Sr();t.length||(process.stderr.write(`luban: ~/.luban/providers.json \u91CC\u6CA1\u6709\u53EF\u7528\u6A21\u578B
1134
+ `),process.exit(0)}var At=lo.resolve(ye.root||process.cwd());(!ii.existsSync(At)||!ii.statSync(At).isDirectory())&&An("--root \u4E0D\u662F\u76EE\u5F55\uFF1A"+At);function yu(){let t=function(){return n},e={version:"1.100.0",env:{language:ye.lang||"zh-cn",appName:"luban-cli",uriScheme:"file"},workspace:{workspaceFolders:[{uri:{fsPath:At,scheme:"file"},name:lo.basename(At),index:0}],textDocuments:[],getConfiguration:function(){return{get:function(){},has:function(){return!1},inspect:function(){}}},onDidChangeConfiguration:function(){return{dispose:function(){}}},fs:{writeFile:function(s,r){return new Promise(function(o,i){try{ii.mkdirSync(lo.dirname(s.fsPath),{recursive:!0}),ii.writeFileSync(s.fsPath,r),o(void 0)}catch(a){i(a)}})},readFile:function(s){return new Promise(function(r,o){ii.readFile(s.fsPath,function(i,a){i?o(i):r(a)})})},stat:function(s){return new Promise(function(r,o){ii.stat(s.fsPath,function(i,a){i?o(i):r(a)})})}}},languages:{getDiagnostics:function(){return[]},onDidChangeDiagnostics:function(){return{dispose:function(){}}}},window:{activeTextEditor:null,visibleTextEditors:[],showErrorMessage:function(){return Promise.resolve(void 0)},showInformationMessage:function(){return Promise.resolve(void 0)},createOutputChannel:function(){return{appendLine:function(){},show:function(){},dispose:function(){}}},onDidChangeActiveTextEditor:function(){return{dispose:function(){}}}},commands:{executeCommand:function(s){return Promise.reject(new Error("CLI \u65E0\u7F16\u8F91\u5668\uFF0C\u4E0D\u80FD\u6267\u884C\u547D\u4EE4 "+s))},registerCommand:function(){return{dispose:function(){}}}},extensions:{getExtension:function(){return null},all:[]},Uri:{file:function(s){return{fsPath:s,scheme:"file",toString:function(){return"file://"+s}}},parse:function(s){return{fsPath:s,scheme:"file"}}},Position:function(s,r){this.line=s,this.character=r},Range:function(s,r,o,i){this.start=new e.Position(s,r),this.end=new e.Position(o,i)},CancellationTokenSource:function(){let s=[];return{token:{isCancellationRequested:!1,onCancellationRequested:function(r){return s.push(r),{dispose:function(){}}}},cancel:function(){s.forEach(function(r){try{r()}catch{}})},dispose:function(){}}},EventEmitter:function(){let s=[];return{event:function(r){return s.push(r),{dispose:function(){}}},fire:function(r){s.forEach(function(o){try{o(r)}catch{}})},dispose:function(){}}}},n=new Proxy(t,{get:function(s,r){if(!(r==="then"||r===Symbol.toPrimitive||r==="inspect"||r===Symbol.iterator))return r in e?e[r]:(r in s||(s[r]=yu()),s[r])},apply:function(){return yu()},construct:function(){return yu()}});return n}var qF=lT._load;lT._load=function(t,e,n){return t==="vscode"?yu():qF.call(this,t,e,n)};var On=E_();typeof On.__loadConfig=="function"&&On.__loadConfig();typeof On.__applyTlsMaxVersion=="function"&&On.__applyTlsMaxVersion("cli");var Sh=On.__runAgent,vr=On.__allModels,BF=On.__apiKeyFor,bu=On.__requestKeyFor||BF;typeof Sh!="function"&&An("extension.js \u6CA1\u6709\u5BFC\u51FA __runAgent\uFF08CLI \u9700\u8981\u7684\u65E0\u5934\u53E3\u5B50\uFF09\uFF0C\u8BF7\u786E\u8BA4\u4ED3\u5E93\u7248\u672C");if(ye.auditToken){let t=G_(),e=t.run({models:vr(),defaultKey:On.__defaultModelKey(),usageDir:xh,root:At});ye.prompt&&An("audit-token \u4E0D\u63A5\u53D7\u4EFB\u52A1\u63CF\u8FF0\uFF08\u591A\u4F59\u7684\u53C2\u6570\uFF1A"+ye.prompt+"\uFF09",2);let n=null;try{n=Ti().paint}catch{}process.stdout.write(t.format(e,{json:ye.json,paint:n})+`
1135
+ `),process.exit(0)}if(ye.listModels){let t=vr();t.length||(process.stderr.write(`luban: ~/.luban/providers.json \u91CC\u6CA1\u6709\u53EF\u7528\u6A21\u578B
1136
1136
  `),process.exit(1));let e=On.__defaultModelKey();for(let n of t){let s=n.model||{},r=[];s.toolCalling!==!1&&r.push("tool"),s.vision===!0&&r.push("vision"),process.stdout.write((n.key===e?"* ":" ")+n.key+" "+(n.provider.baseUrl||"")+" key="+(bu(n.provider)?"yes":"NO")+(r.length?" ["+r.join(",")+"]":"")+`
1137
1137
  `)}process.exit(0)}var ci=ye.mode,Jt=ye.apply,_u=!1;function UF(){return _u?"agent \u6A21\u5F0F\u9700\u8981\u5199\u6743\u9650\uFF0C\u5F53\u524D\u6CA1\u5F00":"\u672A\u52A0 --apply"}function al(t){return!Jt&&ci==="agent"?(t&&(process.stderr.write("[luban] "+UF()+`\uFF1A\u5DF2\u4ECE agent \u964D\u7EA7\u4E3A plan\uFF08\u53EA\u8BFB\uFF09\uFF0C\u5199\u64CD\u4F5C\u4F1A\u88AB\u62D2\u7EDD
1138
1138
  `),_u&&process.stderr.write(`[luban] \u6253\u5F00\u65B9\u5F0F\uFF1A/apply on\uFF0C\u6216\u4E00\u6B65\u5230\u4F4D /mode agent --apply
1139
1139
  `)),"plan"):(Jt&&ci==="explore"&&t&&process.stderr.write(`[luban] --explore \u662F\u53EA\u8BFB\u8C03\u7814\u6A21\u5F0F\uFF0C--apply \u5BF9\u5B83\u65E0\u6548
1140
1140
  `),ci)}var me=al(!0),WF=!!process.stdin.isTTY&&!!process.stderr.isTTY,vh=WF&&!process.env.CI;ye.prompt||(ye.json&&An("--json \u9700\u8981\u4EFB\u52A1\u63CF\u8FF0\uFF08\u4EA4\u4E92\u6A21\u5F0F\u4E0D\u63A5\u53D7 --json\uFF09"),vh||(ye.resume&&An("--resume \u9700\u8981\u4EA4\u4E92\u7EC8\u7AEF\uFF08TTY\uFF09\uFF1B\u7BA1\u9053 / \u91CD\u5B9A\u5411 / CI \u91CC\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5BF9\u8BDD",2),process.stderr.write(dT+`
1141
- `),An("\u7F3A\u5C11\u4EFB\u52A1\u63CF\u8FF0",2)));var fT=Ti(),Fs=fT.paint,he=fT.createUI({enabled:vh&&!ye.noTui&&!ye.json,stream:!ye.json,showThinking:ye.showThinking,onCancel:function(){cl()}});function q(t){he.line(t)}var li=!ye.yes,ll=!1;async function KF(t){if(!li||ll||!he.enabled)return!0;hT();try{let e=await he.confirmWrite(t,gs?gs.ac.signal:void 0);return e==="all"?(ll=!0,!0):e==="yes"||e===!0}finally{gh()}}async function pT(){await he.init()}var gs=null;function mT(){let t=new AbortController,e=[];return gs={ac:t,cbs:e,cancelled:!1,running:!0,token:{isCancellationRequested:!1,onCancellationRequested:function(n){return e.push(n),{dispose:function(){}}}}},gs}function cl(t){let e=gs;if(!(!e||e.token.isCancellationRequested)){e.cancelled=!0;try{e.ac.abort()}catch{}e.token.isCancellationRequested=!0,t&&q("[luban] "+t),e.cbs.forEach(function(n){try{n()}catch{}})}}var ku=!1,rl=0,xu=null;function HF(){return!!(he&&he.enabled&&process.stdin&&process.stdin.isTTY)}function _h(){if(!(ku||rl>0||!HF())){try{process.stdin.setRawMode(!0)}catch{return}process.stdin.resume(),xu=function(t){let e=String(t||"");if(e==="\x1B"){cl("\u6536\u5230 Esc\uFF0C\u6B63\u5728\u53D6\u6D88\u672C\u8F6E\u2026");return}e.indexOf("")>=0&&cl("\u6536\u5230 Ctrl-C\uFF0C\u6B63\u5728\u53D6\u6D88\u672C\u8F6E\u2026")},process.stdin.on("data",xu),ku=!0}}function di(){if(ku){ku=!1;try{process.stdin.removeListener("data",xu)}catch{}xu=null;try{process.stdin.setRawMode(!1)}catch{}try{process.stdin.pause()}catch{}}}function hT(){rl++,di()}function gh(){rl=Math.max(0,rl-1),rl===0&&_h()}process.on("SIGINT",function(){if(gs&&gs.running&&!gs.token.isCancellationRequested){cl("\u6536\u5230 Ctrl-C\uFF0C\u6B63\u5728\u53D6\u6D88\u2026");return}he.close(),process.exit(130)});var $t=null,fi=null,ui=null,hs=null,gu="",yh="",gT=!1,ul=!1,wu=null,ol=!1,ts=!1,dl=!1,Su=!1;function iT(t){if(t)try{process.stdin.emit("data",Buffer.from(t,"utf8"))}catch{}}function yT(t){if(t&&!ts){if($t.UI_ACTIONS.indexOf(t)>=0){ul&&!ol&&(t==="modePrev"||t==="modeNext"?zF(t==="modeNext"?1:-1):GF(t==="modelNext"?1:-1));return}if(ol){iT($t.keyFor(t,"ask"));return}if(gs&&gs.running){t==="cancel"&&cl("\u6536\u5230\u624B\u67C4 B\uFF0C\u6B63\u5728\u53D6\u6D88\u2026");return}ul&&iT($t.keyFor(t,"prompt"))}}var aT=["plan","explore","agent"];function zF(t){let e=Jt?aT:aT.slice(0,2),n=me,s=$t.cyclePick(e,n,t);s&&(ci=s,me=al(!1),he.setStatus({mode:me}),vr("[luban] \u6A21\u5F0F "+n+" \u2192 "+me+(Jt?"":"\uFF08agent \u9700\u5199\u6743\u9650\uFF1A/apply on \u6216 /mode agent --apply\uFF09")))}function GF(t){let e=Sr(),n=e.filter(function(i){return!!bu(i.provider)}),s=n.length?n:e;if(!s.length){vr("[luban] \u6CA1\u6709\u53EF\u7528\u6A21\u578B\uFF08"+uT+" \u91CC\u8FD8\u6CA1\u914D provider\uFF09");return}let r=on();if(s.length<2){vr("[luban] \u53EA\u6709 1 \u4E2A\u53EF\u7528\u6A21\u578B\uFF08"+r+"\uFF09\uFF0C\u6CA1\u6709\u53EF\u5207\u7684");return}let o=$t.cyclePick(s.map(function(i){return i.key}),r,t);o&&(es=o,Ds={tokens:0,window:0},vr("[luban] \u6A21\u578B "+r+" \u2192 "+es))}function JF(t){if(!t||typeof t!="object"||!$t)return;if(t.t==="device"){gT=!0;let n=String(t.dev||"");yh=n,hs=$t.createDecoder($t.profileFor(n)),gu=String(t.product||"")||n||"\u672A\u77E5\u624B\u67C4",ts?vr("[luban] \u624B\u67C4\u6D4B\u8BD5\uFF1A"+gu+" \u5C31\u7EEA\uFF0C\u6309\u952E\u5C31\u4F1A\u6253\u5370\uFF08/gamepad off \u6216 Ctrl-C \u7ED3\u675F\uFF09"):q("[luban] \u624B\u67C4\u5DF2\u5C31\u7EEA\uFF1A"+gu+"\uFF08\u5341\u5B57\u952E/\u5DE6\u6447\u6746\u9009\u62E9 \xB7 A \u63D0\u4EA4 \xB7 B \u53D6\u6D88 \xB7 LB/RB \u6A21\u5F0F \xB7 LT/RT \u6A21\u578B\uFF09");return}if(t.t==="gone"){if(!fi)return;hs&&hs.reset(),(ts?vr:q)("[luban] \u624B\u67C4\u5DF2\u65AD\u5F00\uFF1A"+(gu||String(t.dev||""))+"\uFF08\u91CD\u8FDE\u540E\u81EA\u52A8\u63A5\u7BA1\uFF09");return}if(t.t==="error"){(ts?vr:q)("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1AIOHIDManagerOpen \u8FD4\u56DE "+t.code+"\uFF08\u7CFB\u7EDF\u8BBE\u7F6E \u2192 \u9690\u79C1\u4E0E\u5B89\u5168 \u2192 \u8F93\u5165\u76D1\u63A7 \u91CC\u7ED9\u7EC8\u7AEF App \u6388\u6743\u540E\u91CD\u8BD5\uFF09"),ts=!1,dl=!1,Su=!1,fl();return}if(t.t!=="value"||!hs)return;let e=hs.decode(t);if(ts){$F(t,e);return}for(let n=0;n<e.length;n++)yT(e[n])}function vr(t){let e=wu;if(!e||!ul){q(t);return}try{hh.clearLine(process.stdout,0),hh.cursorTo(process.stdout,0)}catch{}q(t);try{e.setPrompt(_T()),e.prompt(!0)}catch{}}function $F(t,e){let n=Number(t.page),s=Number(t.usage),r=$t.isPressedRaw(t);if(!dl&&!e.length&&!r)return;let o="page=0x"+n.toString(16)+" usage=0x"+s.toString(16)+" value="+t.value+" ["+t.min+".."+t.max+"]";if(e.length){let i=[];for(let a=0;a<e.length;a++){let l=$t.keyFor(e[a],"prompt"),c=l?"":$t.ACTION_LABELS[e[a]]||"";i.push(e[a]+(l?" \u2192 "+JSON.stringify(l):c?" \u2192 "+c:""))}o+=" \u21D2 "+i.join(" \xB7 ")}else if(r){let i=n===9?"PROFILES['"+yh+"'].buttons["+s+"]":"PROFILES['"+yh+"'] \u7684 axes / hat";o+=" \u21D2 \u672A\u6620\u5C04\uFF08\u5728 gamepad.js \u7684 "+i+" \u91CC\u8865\uFF09"}else o+=" \u21D2 \u65E0\u52A8\u4F5C\uFF08\u677E\u5F00 / \u6B7B\u533A\u5185\uFF09";vr("[\u624B\u67C4] "+o)}function XF(t){if(ts){dl=!!t,q("[luban] \u624B\u67C4\u6D4B\u8BD5\u5DF2\u5728\u8FDB\u884C\u4E2D"+(t?"\uFF08raw\uFF1A\u65E0\u52A8\u4F5C\u4E0A\u62A5\u4E5F\u6253\u5370\uFF09":"")+"\uFF1B/gamepad off \u7ED3\u675F");return}let e=!fi;wT({test:!0})&&(ts=!0,dl=!!t,Su=e,q("[luban] \u624B\u67C4\u6D4B\u8BD5\uFF1A\u6309\u624B\u67C4\u4E0A\u7684\u952E\uFF0C\u8FD9\u91CC\u9010\u6761\u6253\u5370"+(t?"\u6BCF\u6761\u539F\u59CB\u4E0A\u62A5":"\u8BC6\u522B\u5230\u7684\u52A8\u4F5C\uFF08/gamepad raw \u8FDE\u539F\u59CB\u503C\u4E00\u8D77\u6253\uFF09")),q("[luban] \u7ED3\u675F\uFF1A/gamepad off \u6216 Ctrl-C\uFF1B\u672A\u6620\u5C04\u7684\u952E\u4F1A\u6307\u51FA\u8BE5\u8865\u54EA\u4E2A usage"))}function Th(t){if(!ts)return!1;ts=!1,dl=!1,hs&&hs.reset();let e=Su;return Su=!1,e&&fl(),t&&q(t),q(e?"[luban] \u624B\u67C4\u5DF2\u91CA\u653E\uFF08\u8BBE\u5907\u5C42\u5B50\u8FDB\u7A0B\u5DF2\u9000\u51FA\uFF0C/gamepad \u53EF\u518D\u770B\u4E00\u6B21\uFF09":"[luban] \u624B\u67C4\u6D4B\u8BD5\u7ED3\u675F\uFF0C\u5DF2\u6062\u590D\u63A5\u7BA1\u8F93\u5165\u884C"),!0}function fl(){ui&&(clearInterval(ui),ui=null);let t=fi;if(fi=null,t)try{t.stop()}catch{}}function wT(t){let n=(t||{}).test===!0;if(!ye.gamepad&&!n)return!1;if(fi)return!0;$t=Z_();let s=$t.isSupported();if(!s.ok)return q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A"+s.reason),!1;if(!he.enabled&&!n)return q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A\u9700\u8981\u4EA4\u4E92\u7EC8\u7AEF\uFF08--no-tui / --json / \u7BA1\u9053\u4E0B\u4E0D\u542F\u7528\uFF09"),!1;let r;try{r=rT()}catch(i){return q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A\u52A0\u8F7D\u8BBE\u5907\u5C42\u5931\u8D25\uFF08"+(i&&i.message||i)+"\uFF09"),!1}r.hasBinary()||q("[luban] \u6B63\u5728\u51C6\u5907\u624B\u67C4\u652F\u6301\uFF08\u9996\u6B21\u9700\u8981\u7F16\u8BD1\uFF0C\u7EA6 2 \u79D2\uFF09\u2026"),hs=$t.createDecoder(),fi=r.start({onEvent:function(i){JF(i)},onError:function(i){q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A"+i)}}),ui=setInterval(function(){if(!$t||!hs)return;let i=hs.poll();for(let a=0;a<i.length;a++)yT(i[a])},30),ui.unref&&ui.unref();let o=setTimeout(function(){gT||q(n?"[luban] \u8FD8\u6CA1\u53D1\u73B0\u624B\u67C4\uFF08\u786E\u8BA4\u5DF2\u8FDE\u63A5 / \u6309\u4E00\u4E0B\u5524\u9192\uFF1B\u63A5\u4E0A\u540E\u4F1A\u81EA\u52A8\u5F00\u59CB\u6253\u5370\uFF09":"[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A\u6CA1\u6709\u53D1\u73B0\u624B\u67C4\uFF08\u786E\u8BA4\u5DF2\u8FDE\u63A5\uFF1B\u84DD\u7259\u624B\u67C4\u5148\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u91CC\u914D\u5BF9\uFF09")},1500);return o.unref&&o.unref(),!0}process.on("exit",function(){try{di()}catch{}try{fl()}catch{}});var dh={items:[]},es=ye.model||"";function on(){return es||On.__defaultModelKey()}var Ds={tokens:0,window:0};function bT(t){t&&ao(function(){let e="",n="",s=on();try{let o=On.__resolveModel(s);o&&(e=o.provider||"",n=o.model||"",o.key&&(s=o.key))}catch{}let r=ai.row({provider:e,model:n,modelKey:s,mode:me,source:"cli",session:"cli-"+process.pid},t);ai.append(xh,r)})}function nl(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 VF(t,e){let n=t||{};if(!n.turns){q("[luban] "+(e&&e.label||"\u8BE5\u533A\u95F4")+"\u6CA1\u6709\u7528\u91CF\u8BB0\u5F55\uFF08CLI \u4E0E\u6269\u5C55\u5171\u7528 ~/.luban/usage \u8D26\u672C\uFF09");return}let s=function(i){return Math.round((Number(i)||0)*100)+"%"};q("[luban] \u7528\u91CF \xB7 "+(e&&e.label||"")+"\uFF1A"+n.turns+" \u8F6E / "+n.requests+" \u6B21\u8BF7\u6C42"),q(" tokens \u8F93\u5165 "+nl(n.promptTokens)+" \xB7 \u8F93\u51FA "+nl(n.completionTokens)+" \xB7 \u5408\u8BA1 "+nl(n.totalTokens)+"\uFF08\u7F13\u5B58\u547D\u4E2D "+s(n.hit)+"\uFF09");let r=n.byModel||[];if(r.length){q(" \u6309\u6A21\u578B\uFF1A");for(let i of r)q(" "+String(i.key||i.model||"\u672A\u77E5\u6A21\u578B")+" \u2014 "+nl(i.totalTokens)+" tokens \xB7 "+i.turns+" \u8F6E \xB7 \u5360 "+s(i.share))}let o=(n.byDay||[]).filter(function(i){return!i.empty&&i.totalTokens>0});if(o.length){let i=o.slice(-7);q(" \u6309\u5929"+(o.length>i.length?"\uFF08\u6700\u8FD1 "+i.length+" \u5929\uFF09":"")+"\uFF1A");for(let a of i)q(" "+a.day+" "+nl(a.totalTokens)+" tokens \xB7 "+a.turns+" \u8F6E")}}function kT(t){try{mt.startTurn({source:"cli",mode:me,model:on(),workspace:At,sessionId:"cli-"+process.pid,task:String(t??"").slice(0,80)})}catch{}}function ao(t){try{return t()}catch{return}}function xT(t,e){let n=e||{};dh.items=[];let s={root:At,mode:me,modelKey:es||void 0,maxIters:isFinite(ye.maxRounds)&&ye.maxRounds>=0?Math.floor(ye.maxRounds):void 0,maxMinutes:isFinite(ye.maxMinutes)&&ye.maxMinutes>0?ye.maxMinutes:void 0,sessionId:"cli-"+Date.now(),token:t.token,askWait:function(r){ol=!0;try{let o=r&&r.questions&&r.questions[0],i=String(r&&r.title||o&&o.prompt||"");mt.waiting(i.slice(0,80)||"\u7B49\u4F60\u9009\u62E9")}catch{}return hT(),Promise.resolve().then(function(){return he.ask(r,t.ac.signal)}).then(function(o){ol=!1;try{mt.thinking("")}catch{}return gh(),o},function(o){ol=!1;try{mt.thinking("")}catch{}throw gh(),o})},confirmWrite:function(r){return KF(r)},todosState:dh,onTodos:function(r){dh.items=r,he.todos(r)},onToken:function(r){he.stream(r),ao(function(){mt.typing()})},onReasoning:function(r){he.thinking(r),ao(function(){mt.thinking("\u601D\u8003\u4E2D")})},onSplit:function(r){he.split(r),ao(function(){mt.thinking("\u601D\u8003\u4E2D")})},onProgress:function(r){he.progress(r),ao(function(){mt.progress(r)})},onRound:function(r){ao(function(){mt.round(r)})},onTool:function(r){he.tool(r),r&&r.phase!=="start"&&ao(function(){mt.tool(r)})},onRefs:function(r){he.refs(r)},onUsage:function(r){he.usage(r),Ds={tokens:Number(r&&r.contextTokens)||0,window:Number(r&&r.window)||0}},onSubProgress:function(r){r&&r.running===!1||he.sub(r)}};return n.history&&(s.history=n.history),n.spillDigest&&(s.spillDigest=n.spillDigest),n.onUserTurn&&(s.onUserTurn=n.onUserTurn),s}async function YF(t){await pT();let e=mT();he.setStatus({mode:me}),he.beginTurn(),kT(t),_h();let n;try{n=await Sh(t,xT(e))}catch(r){di();try{e.token.isCancellationRequested?mt.update({state:"idle",text:"\u5DF2\u53D6\u6D88",tool:null}):mt.fail(r&&r.message||String(r))}catch{}e.token.isCancellationRequested&&q("[luban] \u5DF2\u53D6\u6D88"),he.close(),e.token.isCancellationRequested&&process.exit(1),An("\u4EFB\u52A1\u5931\u8D25\uFF1A"+(r&&r.message||r),2)}di();let s=n&&n.stop&&n.stop.reason||"unknown";try{mt.done(s)}catch{}bT(n.usage),ye.json?(he.close(),process.stdout.write(JSON.stringify({text:n.text,stop:n.stop,usage:n.usage,iters:n.iters,modelKey:n.modelKey,toolCalls:(n.log||[]).length,mode:me},null,2)+`
1142
- `)):(he.outputFinal(n.text==null?"":String(n.text)),he.finish({mode:me,iters:n.iters,tools:(n.log||[]).length,stop:s,model:n.modelKey||"",log:n.log||[]}),he.close()),process.exit(s==="final"?0:1)}var wh=["/help \u672C\u5E2E\u52A9","/exit \u9000\u51FA\uFF08\u4E5F\u53EF Ctrl-D\uFF09","/clear \u6E05\u7A7A\u5BF9\u8BDD\u8BB0\u5FC6","/mode <m> \u5207\u6A21\u5F0F\uFF1Aplan\uFF08\u9ED8\u8BA4\uFF0C\u53EA\u8BFB\uFF09/ explore / agent"," \u52A0 --apply \u4E00\u6B65\u6253\u5F00\u5199\u6743\u9650\uFF1A/mode agent --apply","/apply [on|off] \u5207\u5199\u6743\u9650\uFF08agent \u6A21\u5F0F\u8981\u5B83\u624D\u653E\u5F00\u5199\uFF09","/confirm [on|off] \u5199\u64CD\u4F5C\u9010\u6B21\u786E\u8BA4\uFF08\u9ED8\u8BA4 on\uFF1A\u843D\u76D8\u524D\u663E\u793A diff\uFF09","/model [<key>] \u67E5\u770B / \u5207\u6362\u6A21\u578B\uFF08\u7F3A key \u4F1A\u6807 key=NO\uFF09","/reload \u91CD\u8BFB ~/.luban/providers.json\uFF08\u6539\u5B8C key \u4E0D\u7528\u91CD\u542F\uFF09","/thinking [on|off] \u601D\u8003\u5185\u5BB9\u5B9E\u65F6\u663E\u793A\uFF08\u9ED8\u8BA4\u6298\u53E0\uFF09","/gamepad [raw|off] \u6D4B\u8BD5\u624B\u67C4\u6309\u952E\uFF08\u53EA\u56DE\u663E\u4E0D\u6CE8\u5165\uFF1Braw \u8FDE page/usage \u4E00\u8D77\u6253\uFF09","/usage [\u533A\u95F4] \u67E5\u770B token \u7528\u91CF\u7EDF\u8BA1\uFF08today|7d|30d|all\uFF0C\u9ED8\u8BA4 7d\uFF09","/sessions \u5217\u51FA\u672C\u5DE5\u4F5C\u533A\u7684\u5386\u53F2\u5BF9\u8BDD\uFF08\u53EF /resume \u56DE\u53BB\uFF09","/resume <id|\u4E0B\u6807> \u6062\u590D\u67D0\u6B21\u5BF9\u8BDD\u63A5\u7740\u804A\uFF08\u8DE8\u8FDB\u7A0B\u4E0D\u4E22\u8BB0\u5FC6\uFF09","/new \u5F00\u4E00\u4E2A\u65B0\u5BF9\u8BDD\uFF08\u65E7\u7684\u7559\u5728\u78C1\u76D8\uFF0C\u53EF\u518D /resume \u56DE\u53BB\uFF09"],ZF=cT.createCompleter({root:At,commands:wh.map(function(t){return t.trim().split(/\s+/)[0]})}),fh=[],_r=[],ph="",je=null;function pl(){return mh||(mh=rd().newStore(LF)),mh}var mh=null;function vu(t){return(t||[]).filter(function(e){return e&&e.t==="user"}).length}function ST(){return je=pl().create(At),je.modelKey=on(),je.mode=me,_r=je.items,je}function vT(){if(je){for(je.modelKey=on(),je.mode=me;je.items.length>400;)je.items.splice(0,2);try{pl().save(je)}catch(t){q("[luban] \u4F1A\u8BDD\u5B58\u76D8\u5931\u8D25\uFF08\u4E0D\u5F71\u54CD\u672C\u8F6E\uFF09\uFF1A"+(t&&t.message||t))}}}function bh(t){let e=pl(),n=e.list("workspace",At),s=String(t??"").trim();if(!s)return{ok:!1,msg:"\u7528\u6CD5\uFF1A/resume <id|\u4E0B\u6807>\uFF08/sessions \u770B\u6E05\u5355\uFF09"};let r=null;if(/^\d+$/.test(s)&&s.length<=3){let c=Number(s);if(c<1||c>n.length)return{ok:!1,msg:"\u4E0B\u6807\u8D85\u51FA\u8303\u56F4\uFF1A"+s+"\uFF08/sessions \u770B\u6E05\u5355\uFF09"};r=n[c-1]}else{let c=n.filter(function(d){return d.id===s})[0],u=c?[c]:n.filter(function(d){return d.id.indexOf(s)===0});if(!u.length)return{ok:!1,msg:"\u6CA1\u6709\u5339\u914D\u7684\u4F1A\u8BDD\uFF1A"+s+"\uFF08/sessions \u770B\u6E05\u5355\uFF09"};if(u.length>1)return{ok:!1,msg:"\u524D\u7F00 "+s+" \u5339\u914D\u5230 "+u.length+" \u6761\uFF0C\u8BF7\u591A\u6253\u51E0\u4F4D"};r=u[0]}let i=e.load(r.id);if(!i)return{ok:!1,msg:"\u4F1A\u8BDD\u6587\u4EF6\u8BFB\u4E0D\u51FA\u6765\uFF1A"+r.id};je=i,_r=je.items;let a=String(je.modelKey||"");a&&Sr().some(function(c){return c.key===a})&&(es=a);let l=String(je.mode||"");return(l==="plan"||l==="explore"||l==="agent")&&(ci=l),Jt=!1,me=al(!0),{ok:!0,msg:"",turns:vu(je.items),id:je.id}}function QF(){let t=String(on()||"");t=t.replace(/[^\x20-\x7e]+/g,"");let e=t.lastIndexOf("::");return e>=0&&(t=t.slice(e+2)),t.length>28&&(t=t.slice(0,25)+"..."),t}function eL(){let t=Number(Ds.tokens)||0,e=Number(Ds.window)||0;return t<=0||e<=0?"":Math.max(1,Math.min(999,Math.round(t/e*100)))+"%"}function _T(){let t=me==="agent"&&Jt?"agent*":me,e=me==="agent"&&Jt?"work":il.moodForMode(me),n=QF(),s=eL(),r=(n||"")+(s?(n?" ":"")+s:"");return Fs("cyan",il.face(e)+" ")+Fs("cyan","luban("+t+") ")+(r?Fs("gray",r+" "):"")+Fs("gray","\u203A ")}function TT(t){return new Promise(function(e){ul=!0;let n=hh.createInterface({input:process.stdin,output:process.stdout,terminal:!0,historySize:200,history:fh.slice(),completer:ZF});wu=n;let s=Object.getOwnPropertySymbols(n).find(function(i){return i.description==="_isMultiline"});if(process.stdin.isTTY&&typeof n._ttyWrite=="function"){let i=n._ttyWrite;n._ttyWrite=function(a,l){if(cT.isNewlineKey(a,l)){n.line=n.line.slice(0,n.cursor)+`
1141
+ `),An("\u7F3A\u5C11\u4EFB\u52A1\u63CF\u8FF0",2)));var fT=Ti(),Ls=fT.paint,he=fT.createUI({enabled:vh&&!ye.noTui&&!ye.json,stream:!ye.json,showThinking:ye.showThinking,onCancel:function(){cl()}});function q(t){he.line(t)}var li=!ye.yes,ll=!1;async function KF(t){if(!li||ll||!he.enabled)return!0;hT();try{let e=await he.confirmWrite(t,ys?ys.ac.signal:void 0);return e==="all"?(ll=!0,!0):e==="yes"||e===!0}finally{gh()}}async function pT(){await he.init()}var ys=null;function mT(){let t=new AbortController,e=[];return ys={ac:t,cbs:e,cancelled:!1,running:!0,token:{isCancellationRequested:!1,onCancellationRequested:function(n){return e.push(n),{dispose:function(){}}}}},ys}function cl(t){let e=ys;if(!(!e||e.token.isCancellationRequested)){e.cancelled=!0;try{e.ac.abort()}catch{}e.token.isCancellationRequested=!0,t&&q("[luban] "+t),e.cbs.forEach(function(n){try{n()}catch{}})}}var ku=!1,rl=0,xu=null;function HF(){return!!(he&&he.enabled&&process.stdin&&process.stdin.isTTY)}function _h(){if(!(ku||rl>0||!HF())){try{process.stdin.setRawMode(!0)}catch{return}process.stdin.resume(),xu=function(t){let e=String(t||"");if(e==="\x1B"){cl("\u6536\u5230 Esc\uFF0C\u6B63\u5728\u53D6\u6D88\u672C\u8F6E\u2026");return}e.indexOf("")>=0&&cl("\u6536\u5230 Ctrl-C\uFF0C\u6B63\u5728\u53D6\u6D88\u672C\u8F6E\u2026")},process.stdin.on("data",xu),ku=!0}}function di(){if(ku){ku=!1;try{process.stdin.removeListener("data",xu)}catch{}xu=null;try{process.stdin.setRawMode(!1)}catch{}try{process.stdin.pause()}catch{}}}function hT(){rl++,di()}function gh(){rl=Math.max(0,rl-1),rl===0&&_h()}process.on("SIGINT",function(){if(ys&&ys.running&&!ys.token.isCancellationRequested){cl("\u6536\u5230 Ctrl-C\uFF0C\u6B63\u5728\u53D6\u6D88\u2026");return}he.close(),process.exit(130)});var $t=null,fi=null,ui=null,gs=null,gu="",yh="",gT=!1,ul=!1,wu=null,ol=!1,ts=!1,dl=!1,Su=!1;function iT(t){if(t)try{process.stdin.emit("data",Buffer.from(t,"utf8"))}catch{}}function yT(t){if(t&&!ts){if($t.UI_ACTIONS.indexOf(t)>=0){ul&&!ol&&(t==="modePrev"||t==="modeNext"?zF(t==="modeNext"?1:-1):GF(t==="modelNext"?1:-1));return}if(ol){iT($t.keyFor(t,"ask"));return}if(ys&&ys.running){t==="cancel"&&cl("\u6536\u5230\u624B\u67C4 B\uFF0C\u6B63\u5728\u53D6\u6D88\u2026");return}ul&&iT($t.keyFor(t,"prompt"))}}var aT=["plan","explore","agent"];function zF(t){let e=Jt?aT:aT.slice(0,2),n=me,s=$t.cyclePick(e,n,t);s&&(ci=s,me=al(!1),he.setStatus({mode:me}),_r("[luban] \u6A21\u5F0F "+n+" \u2192 "+me+(Jt?"":"\uFF08agent \u9700\u5199\u6743\u9650\uFF1A/apply on \u6216 /mode agent --apply\uFF09")))}function GF(t){let e=vr(),n=e.filter(function(i){return!!bu(i.provider)}),s=n.length?n:e;if(!s.length){_r("[luban] \u6CA1\u6709\u53EF\u7528\u6A21\u578B\uFF08"+uT+" \u91CC\u8FD8\u6CA1\u914D provider\uFF09");return}let r=on();if(s.length<2){_r("[luban] \u53EA\u6709 1 \u4E2A\u53EF\u7528\u6A21\u578B\uFF08"+r+"\uFF09\uFF0C\u6CA1\u6709\u53EF\u5207\u7684");return}let o=$t.cyclePick(s.map(function(i){return i.key}),r,t);o&&(es=o,Fs={tokens:0,window:0},_r("[luban] \u6A21\u578B "+r+" \u2192 "+es))}function JF(t){if(!t||typeof t!="object"||!$t)return;if(t.t==="device"){gT=!0;let n=String(t.dev||"");yh=n,gs=$t.createDecoder($t.profileFor(n)),gu=String(t.product||"")||n||"\u672A\u77E5\u624B\u67C4",ts?_r("[luban] \u624B\u67C4\u6D4B\u8BD5\uFF1A"+gu+" \u5C31\u7EEA\uFF0C\u6309\u952E\u5C31\u4F1A\u6253\u5370\uFF08/gamepad off \u6216 Ctrl-C \u7ED3\u675F\uFF09"):q("[luban] \u624B\u67C4\u5DF2\u5C31\u7EEA\uFF1A"+gu+"\uFF08\u5341\u5B57\u952E/\u5DE6\u6447\u6746\u9009\u62E9 \xB7 A \u63D0\u4EA4 \xB7 B \u53D6\u6D88 \xB7 LB/RB \u6A21\u5F0F \xB7 LT/RT \u6A21\u578B\uFF09");return}if(t.t==="gone"){if(!fi)return;gs&&gs.reset(),(ts?_r:q)("[luban] \u624B\u67C4\u5DF2\u65AD\u5F00\uFF1A"+(gu||String(t.dev||""))+"\uFF08\u91CD\u8FDE\u540E\u81EA\u52A8\u63A5\u7BA1\uFF09");return}if(t.t==="error"){(ts?_r:q)("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1AIOHIDManagerOpen \u8FD4\u56DE "+t.code+"\uFF08\u7CFB\u7EDF\u8BBE\u7F6E \u2192 \u9690\u79C1\u4E0E\u5B89\u5168 \u2192 \u8F93\u5165\u76D1\u63A7 \u91CC\u7ED9\u7EC8\u7AEF App \u6388\u6743\u540E\u91CD\u8BD5\uFF09"),ts=!1,dl=!1,Su=!1,fl();return}if(t.t!=="value"||!gs)return;let e=gs.decode(t);if(ts){$F(t,e);return}for(let n=0;n<e.length;n++)yT(e[n])}function _r(t){let e=wu;if(!e||!ul){q(t);return}try{hh.clearLine(process.stdout,0),hh.cursorTo(process.stdout,0)}catch{}q(t);try{e.setPrompt(_T()),e.prompt(!0)}catch{}}function $F(t,e){let n=Number(t.page),s=Number(t.usage),r=$t.isPressedRaw(t);if(!dl&&!e.length&&!r)return;let o="page=0x"+n.toString(16)+" usage=0x"+s.toString(16)+" value="+t.value+" ["+t.min+".."+t.max+"]";if(e.length){let i=[];for(let a=0;a<e.length;a++){let l=$t.keyFor(e[a],"prompt"),c=l?"":$t.ACTION_LABELS[e[a]]||"";i.push(e[a]+(l?" \u2192 "+JSON.stringify(l):c?" \u2192 "+c:""))}o+=" \u21D2 "+i.join(" \xB7 ")}else if(r){let i=n===9?"PROFILES['"+yh+"'].buttons["+s+"]":"PROFILES['"+yh+"'] \u7684 axes / hat";o+=" \u21D2 \u672A\u6620\u5C04\uFF08\u5728 gamepad.js \u7684 "+i+" \u91CC\u8865\uFF09"}else o+=" \u21D2 \u65E0\u52A8\u4F5C\uFF08\u677E\u5F00 / \u6B7B\u533A\u5185\uFF09";_r("[\u624B\u67C4] "+o)}function XF(t){if(ts){dl=!!t,q("[luban] \u624B\u67C4\u6D4B\u8BD5\u5DF2\u5728\u8FDB\u884C\u4E2D"+(t?"\uFF08raw\uFF1A\u65E0\u52A8\u4F5C\u4E0A\u62A5\u4E5F\u6253\u5370\uFF09":"")+"\uFF1B/gamepad off \u7ED3\u675F");return}let e=!fi;wT({test:!0})&&(ts=!0,dl=!!t,Su=e,q("[luban] \u624B\u67C4\u6D4B\u8BD5\uFF1A\u6309\u624B\u67C4\u4E0A\u7684\u952E\uFF0C\u8FD9\u91CC\u9010\u6761\u6253\u5370"+(t?"\u6BCF\u6761\u539F\u59CB\u4E0A\u62A5":"\u8BC6\u522B\u5230\u7684\u52A8\u4F5C\uFF08/gamepad raw \u8FDE\u539F\u59CB\u503C\u4E00\u8D77\u6253\uFF09")),q("[luban] \u7ED3\u675F\uFF1A/gamepad off \u6216 Ctrl-C\uFF1B\u672A\u6620\u5C04\u7684\u952E\u4F1A\u6307\u51FA\u8BE5\u8865\u54EA\u4E2A usage"))}function Th(t){if(!ts)return!1;ts=!1,dl=!1,gs&&gs.reset();let e=Su;return Su=!1,e&&fl(),t&&q(t),q(e?"[luban] \u624B\u67C4\u5DF2\u91CA\u653E\uFF08\u8BBE\u5907\u5C42\u5B50\u8FDB\u7A0B\u5DF2\u9000\u51FA\uFF0C/gamepad \u53EF\u518D\u770B\u4E00\u6B21\uFF09":"[luban] \u624B\u67C4\u6D4B\u8BD5\u7ED3\u675F\uFF0C\u5DF2\u6062\u590D\u63A5\u7BA1\u8F93\u5165\u884C"),!0}function fl(){ui&&(clearInterval(ui),ui=null);let t=fi;if(fi=null,t)try{t.stop()}catch{}}function wT(t){let n=(t||{}).test===!0;if(!ye.gamepad&&!n)return!1;if(fi)return!0;$t=Z_();let s=$t.isSupported();if(!s.ok)return q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A"+s.reason),!1;if(!he.enabled&&!n)return q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A\u9700\u8981\u4EA4\u4E92\u7EC8\u7AEF\uFF08--no-tui / --json / \u7BA1\u9053\u4E0B\u4E0D\u542F\u7528\uFF09"),!1;let r;try{r=rT()}catch(i){return q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A\u52A0\u8F7D\u8BBE\u5907\u5C42\u5931\u8D25\uFF08"+(i&&i.message||i)+"\uFF09"),!1}r.hasBinary()||q("[luban] \u6B63\u5728\u51C6\u5907\u624B\u67C4\u652F\u6301\uFF08\u9996\u6B21\u9700\u8981\u7F16\u8BD1\uFF0C\u7EA6 2 \u79D2\uFF09\u2026"),gs=$t.createDecoder(),fi=r.start({onEvent:function(i){JF(i)},onError:function(i){q("[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A"+i)}}),ui=setInterval(function(){if(!$t||!gs)return;let i=gs.poll();for(let a=0;a<i.length;a++)yT(i[a])},30),ui.unref&&ui.unref();let o=setTimeout(function(){gT||q(n?"[luban] \u8FD8\u6CA1\u53D1\u73B0\u624B\u67C4\uFF08\u786E\u8BA4\u5DF2\u8FDE\u63A5 / \u6309\u4E00\u4E0B\u5524\u9192\uFF1B\u63A5\u4E0A\u540E\u4F1A\u81EA\u52A8\u5F00\u59CB\u6253\u5370\uFF09":"[luban] \u624B\u67C4\u4E0D\u53EF\u7528\uFF1A\u6CA1\u6709\u53D1\u73B0\u624B\u67C4\uFF08\u786E\u8BA4\u5DF2\u8FDE\u63A5\uFF1B\u84DD\u7259\u624B\u67C4\u5148\u5728\u7CFB\u7EDF\u8BBE\u7F6E\u91CC\u914D\u5BF9\uFF09")},1500);return o.unref&&o.unref(),!0}process.on("exit",function(){try{di()}catch{}try{fl()}catch{}});var dh={items:[]},es=ye.model||"";function on(){return es||On.__defaultModelKey()}var Fs={tokens:0,window:0};function bT(t){t&&ao(function(){let e="",n="",s=on();try{let o=On.__resolveModel(s);o&&(e=o.provider||"",n=o.model||"",o.key&&(s=o.key))}catch{}let r=ai.row({provider:e,model:n,modelKey:s,mode:me,source:"cli",session:"cli-"+process.pid},t);ai.append(xh,r)})}function nl(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 VF(t,e){let n=t||{};if(!n.turns){q("[luban] "+(e&&e.label||"\u8BE5\u533A\u95F4")+"\u6CA1\u6709\u7528\u91CF\u8BB0\u5F55\uFF08CLI \u4E0E\u6269\u5C55\u5171\u7528 ~/.luban/usage \u8D26\u672C\uFF09");return}let s=function(i){return Math.round((Number(i)||0)*100)+"%"};q("[luban] \u7528\u91CF \xB7 "+(e&&e.label||"")+"\uFF1A"+n.turns+" \u8F6E / "+n.requests+" \u6B21\u8BF7\u6C42"),q(" tokens \u8F93\u5165 "+nl(n.promptTokens)+" \xB7 \u8F93\u51FA "+nl(n.completionTokens)+" \xB7 \u5408\u8BA1 "+nl(n.totalTokens)+"\uFF08\u7F13\u5B58\u547D\u4E2D "+s(n.hit)+"\uFF09");let r=n.byModel||[];if(r.length){q(" \u6309\u6A21\u578B\uFF1A");for(let i of r)q(" "+String(i.key||i.model||"\u672A\u77E5\u6A21\u578B")+" \u2014 "+nl(i.totalTokens)+" tokens \xB7 "+i.turns+" \u8F6E \xB7 \u5360 "+s(i.share))}let o=(n.byDay||[]).filter(function(i){return!i.empty&&i.totalTokens>0});if(o.length){let i=o.slice(-7);q(" \u6309\u5929"+(o.length>i.length?"\uFF08\u6700\u8FD1 "+i.length+" \u5929\uFF09":"")+"\uFF1A");for(let a of i)q(" "+a.day+" "+nl(a.totalTokens)+" tokens \xB7 "+a.turns+" \u8F6E")}}function kT(t){try{mt.startTurn({source:"cli",mode:me,model:on(),workspace:At,sessionId:"cli-"+process.pid,task:String(t??"").slice(0,80)})}catch{}}function ao(t){try{return t()}catch{return}}function xT(t,e){let n=e||{};dh.items=[];let s={root:At,mode:me,modelKey:es||void 0,maxIters:isFinite(ye.maxRounds)&&ye.maxRounds>=0?Math.floor(ye.maxRounds):void 0,maxMinutes:isFinite(ye.maxMinutes)&&ye.maxMinutes>0?ye.maxMinutes:void 0,sessionId:"cli-"+Date.now(),token:t.token,askWait:function(r){ol=!0;try{let o=r&&r.questions&&r.questions[0],i=String(r&&r.title||o&&o.prompt||"");mt.waiting(i.slice(0,80)||"\u7B49\u4F60\u9009\u62E9")}catch{}return hT(),Promise.resolve().then(function(){return he.ask(r,t.ac.signal)}).then(function(o){ol=!1;try{mt.thinking("")}catch{}return gh(),o},function(o){ol=!1;try{mt.thinking("")}catch{}throw gh(),o})},confirmWrite:function(r){return KF(r)},todosState:dh,onTodos:function(r){dh.items=r,he.todos(r)},onToken:function(r){he.stream(r),ao(function(){mt.typing()})},onReasoning:function(r){he.thinking(r),ao(function(){mt.thinking("\u601D\u8003\u4E2D")})},onSplit:function(r){he.split(r),ao(function(){mt.thinking("\u601D\u8003\u4E2D")})},onProgress:function(r){he.progress(r),ao(function(){mt.progress(r)})},onRound:function(r){ao(function(){mt.round(r)})},onTool:function(r){he.tool(r),r&&r.phase!=="start"&&ao(function(){mt.tool(r)})},onRefs:function(r){he.refs(r)},onUsage:function(r){he.usage(r),Fs={tokens:Number(r&&r.contextTokens)||0,window:Number(r&&r.window)||0}},onSubProgress:function(r){r&&r.running===!1||he.sub(r)}};return n.history&&(s.history=n.history),n.spillDigest&&(s.spillDigest=n.spillDigest),n.onUserTurn&&(s.onUserTurn=n.onUserTurn),s}async function YF(t){await pT();let e=mT();he.setStatus({mode:me}),he.beginTurn(),kT(t),_h();let n;try{n=await Sh(t,xT(e))}catch(r){di();try{e.token.isCancellationRequested?mt.update({state:"idle",text:"\u5DF2\u53D6\u6D88",tool:null}):mt.fail(r&&r.message||String(r))}catch{}e.token.isCancellationRequested&&q("[luban] \u5DF2\u53D6\u6D88"),he.close(),e.token.isCancellationRequested&&process.exit(1),An("\u4EFB\u52A1\u5931\u8D25\uFF1A"+(r&&r.message||r),2)}di();let s=n&&n.stop&&n.stop.reason||"unknown";try{mt.done(s)}catch{}bT(n.usage),ye.json?(he.close(),process.stdout.write(JSON.stringify({text:n.text,stop:n.stop,usage:n.usage,iters:n.iters,modelKey:n.modelKey,toolCalls:(n.log||[]).length,mode:me},null,2)+`
1142
+ `)):(he.outputFinal(n.text==null?"":String(n.text)),he.finish({mode:me,iters:n.iters,tools:(n.log||[]).length,stop:s,model:n.modelKey||"",log:n.log||[]}),he.close()),process.exit(s==="final"?0:1)}var wh=["/help \u672C\u5E2E\u52A9","/exit \u9000\u51FA\uFF08\u4E5F\u53EF Ctrl-D\uFF09","/clear \u6E05\u7A7A\u5BF9\u8BDD\u8BB0\u5FC6","/mode <m> \u5207\u6A21\u5F0F\uFF1Aplan\uFF08\u9ED8\u8BA4\uFF0C\u53EA\u8BFB\uFF09/ explore / agent"," \u52A0 --apply \u4E00\u6B65\u6253\u5F00\u5199\u6743\u9650\uFF1A/mode agent --apply","/apply [on|off] \u5207\u5199\u6743\u9650\uFF08agent \u6A21\u5F0F\u8981\u5B83\u624D\u653E\u5F00\u5199\uFF09","/confirm [on|off] \u5199\u64CD\u4F5C\u9010\u6B21\u786E\u8BA4\uFF08\u9ED8\u8BA4 on\uFF1A\u843D\u76D8\u524D\u663E\u793A diff\uFF09","/model [<key>] \u67E5\u770B / \u5207\u6362\u6A21\u578B\uFF08\u7F3A key \u4F1A\u6807 key=NO\uFF09","/reload \u91CD\u8BFB ~/.luban/providers.json\uFF08\u6539\u5B8C key \u4E0D\u7528\u91CD\u542F\uFF09","/thinking [on|off] \u601D\u8003\u5185\u5BB9\u5B9E\u65F6\u663E\u793A\uFF08\u9ED8\u8BA4\u6298\u53E0\uFF09","/gamepad [raw|off] \u6D4B\u8BD5\u624B\u67C4\u6309\u952E\uFF08\u53EA\u56DE\u663E\u4E0D\u6CE8\u5165\uFF1Braw \u8FDE page/usage \u4E00\u8D77\u6253\uFF09","/usage [\u533A\u95F4] \u67E5\u770B token \u7528\u91CF\u7EDF\u8BA1\uFF08today|7d|30d|all\uFF0C\u9ED8\u8BA4 7d\uFF09","/sessions \u5217\u51FA\u672C\u5DE5\u4F5C\u533A\u7684\u5386\u53F2\u5BF9\u8BDD\uFF08\u53EF /resume \u56DE\u53BB\uFF09","/resume <id|\u4E0B\u6807> \u6062\u590D\u67D0\u6B21\u5BF9\u8BDD\u63A5\u7740\u804A\uFF08\u8DE8\u8FDB\u7A0B\u4E0D\u4E22\u8BB0\u5FC6\uFF09","/new \u5F00\u4E00\u4E2A\u65B0\u5BF9\u8BDD\uFF08\u65E7\u7684\u7559\u5728\u78C1\u76D8\uFF0C\u53EF\u518D /resume \u56DE\u53BB\uFF09"],ZF=cT.createCompleter({root:At,commands:wh.map(function(t){return t.trim().split(/\s+/)[0]})}),fh=[],Tr=[],ph="",je=null;function pl(){return mh||(mh=rd().newStore(LF)),mh}var mh=null;function vu(t){return(t||[]).filter(function(e){return e&&e.t==="user"}).length}function ST(){return je=pl().create(At),je.modelKey=on(),je.mode=me,Tr=je.items,je}function vT(){if(je){for(je.modelKey=on(),je.mode=me;je.items.length>400;)je.items.splice(0,2);try{pl().save(je)}catch(t){q("[luban] \u4F1A\u8BDD\u5B58\u76D8\u5931\u8D25\uFF08\u4E0D\u5F71\u54CD\u672C\u8F6E\uFF09\uFF1A"+(t&&t.message||t))}}}function bh(t){let e=pl(),n=e.list("workspace",At),s=String(t??"").trim();if(!s)return{ok:!1,msg:"\u7528\u6CD5\uFF1A/resume <id|\u4E0B\u6807>\uFF08/sessions \u770B\u6E05\u5355\uFF09"};let r=null;if(/^\d+$/.test(s)&&s.length<=3){let c=Number(s);if(c<1||c>n.length)return{ok:!1,msg:"\u4E0B\u6807\u8D85\u51FA\u8303\u56F4\uFF1A"+s+"\uFF08/sessions \u770B\u6E05\u5355\uFF09"};r=n[c-1]}else{let c=n.filter(function(d){return d.id===s})[0],u=c?[c]:n.filter(function(d){return d.id.indexOf(s)===0});if(!u.length)return{ok:!1,msg:"\u6CA1\u6709\u5339\u914D\u7684\u4F1A\u8BDD\uFF1A"+s+"\uFF08/sessions \u770B\u6E05\u5355\uFF09"};if(u.length>1)return{ok:!1,msg:"\u524D\u7F00 "+s+" \u5339\u914D\u5230 "+u.length+" \u6761\uFF0C\u8BF7\u591A\u6253\u51E0\u4F4D"};r=u[0]}let i=e.load(r.id);if(!i)return{ok:!1,msg:"\u4F1A\u8BDD\u6587\u4EF6\u8BFB\u4E0D\u51FA\u6765\uFF1A"+r.id};je=i,Tr=je.items;let a=String(je.modelKey||"");a&&vr().some(function(c){return c.key===a})&&(es=a);let l=String(je.mode||"");return(l==="plan"||l==="explore"||l==="agent")&&(ci=l),Jt=!1,me=al(!0),{ok:!0,msg:"",turns:vu(je.items),id:je.id}}function QF(){let t=String(on()||"");t=t.replace(/[^\x20-\x7e]+/g,"");let e=t.lastIndexOf("::");return e>=0&&(t=t.slice(e+2)),t.length>28&&(t=t.slice(0,25)+"..."),t}function eL(){let t=Number(Fs.tokens)||0,e=Number(Fs.window)||0;return t<=0||e<=0?"":Math.max(1,Math.min(999,Math.round(t/e*100)))+"%"}function _T(){let t=me==="agent"&&Jt?"agent*":me,e=me==="agent"&&Jt?"work":il.moodForMode(me),n=QF(),s=eL(),r=(n||"")+(s?(n?" ":"")+s:"");return Ls("cyan",il.face(e)+" ")+Ls("cyan","luban("+t+") ")+(r?Ls("gray",r+" "):"")+Ls("gray","\u203A ")}function TT(t){return new Promise(function(e){ul=!0;let n=hh.createInterface({input:process.stdin,output:process.stdout,terminal:!0,historySize:200,history:fh.slice(),completer:ZF});wu=n;let s=Object.getOwnPropertySymbols(n).find(function(i){return i.description==="_isMultiline"});if(process.stdin.isTTY&&typeof n._ttyWrite=="function"){let i=n._ttyWrite;n._ttyWrite=function(a,l){if(cT.isNewlineKey(a,l)){n.line=n.line.slice(0,n.cursor)+`
1143
1143
  `+n.line.slice(n.cursor),n.cursor+=1,s&&(n[s]=!0);try{n._refreshLine()}catch{}return}return i.call(n,a,l)}}let r=!1;function o(i){if(!r){r=!0,ul=!1,wu===n&&(wu=null);try{fh=(n.history||fh).slice(-200)}catch{}try{n.close()}catch{}e(i)}}n.on("SIGINT",function(){o(null)}),n.on("close",function(){o(void 0)}),n.question(t,function(i){o(typeof i=="string"?i.replace(/\r\n?/g,`
1144
- `):i)})})}function tL(t){let e=t.slice(1).split(/\s+/),n=(e[0]||"").toLowerCase(),s=e.slice(1).join(" ").trim();if(n==="exit"||n==="quit"||n==="q")return"exit";if(n==="help"||n==="?"){q("[luban] \u53EF\u7528\u547D\u4EE4\uFF1A");for(let r=0;r<wh.length;r++)q(" "+wh[r]);return"handled"}if(n==="clear"){let r=vu(_r);return je?(je.items.length=0,_r=je.items):_r=[],r&&vT(),Ds={tokens:0,window:0},q("[luban] \u5DF2\u6E05\u7A7A\u5BF9\u8BDD\u8BB0\u5FC6\uFF08"+r+" \u8F6E\uFF09"),"handled"}if(n==="sessions"){let r=pl().list("workspace",At);if(!r.length)return q("[luban] \u672C\u5DE5\u4F5C\u533A\u8FD8\u6CA1\u6709\u5386\u53F2\u5BF9\u8BDD\uFF08\u804A\u8FC7\u4E00\u8F6E\u5C31\u4F1A\u81EA\u52A8\u5B58\uFF09"),"handled";q("[luban] \u672C\u5DE5\u4F5C\u533A\u7684\u5BF9\u8BDD\uFF08"+r.length+" \u6761\uFF0C\u6700\u8FD1\u5728\u524D\uFF09\uFF1A");for(let o=0;o<r.length;o++){let i=r[o],a=je&&i.id===je.id?" *":" ",l=String(i.updatedAt||"").replace("T"," ").slice(0,16),c=String(i.title||"").replace(/\s+/g," ").slice(0,40),u=Math.ceil((i.items||0)/2);q(a+(o+1)+". "+i.id+" "+u+" \u8F6E "+l+" "+c)}return q(Fs("gray"," /resume <\u4E0B\u6807|id> \u6062\u590D\uFF1B\u5E26 * \u7684\u662F\u5F53\u524D\u5BF9\u8BDD")),"handled"}if(n==="resume"){if(!s)return q("[luban] \u7528\u6CD5\uFF1A/resume <id|\u4E0B\u6807>\uFF08/sessions \u770B\u6E05\u5355\uFF09"),"handled";let r=bh(s);return r.ok?(Ds={tokens:0,window:0},q("[luban] \u5DF2\u6062\u590D\u5BF9\u8BDD "+r.id+" \xB7 "+r.turns+" \u8F6E\uFF08\u6A21\u578B "+on()+" \xB7 "+me+"\uFF09"),me!==(je.mode||me)&&q("[luban] \u539F\u4F1A\u8BDD\u662F "+je.mode+" \u6A21\u5F0F\uFF0C\u5DF2\u6309\u53EA\u8BFB\u6062\u590D\uFF1B/apply on \u624D\u653E\u5F00\u5199"),"handled"):(q("[luban] "+r.msg),"handled")}if(n==="new"){let r=je?je.id:"";return ST(),Ds={tokens:0,window:0},q("[luban] \u5DF2\u5F00\u65B0\u5BF9\u8BDD"+(r?"\uFF08\u65E7\u7684 "+r+" \u7559\u5728\u78C1\u76D8\uFF0C/sessions \u80FD\u627E\u56DE\u6765\uFF09":"")),"handled"}if(n==="mode"){let r=s.toLowerCase().split(/\s+/).filter(Boolean),o=[],i=null;for(let l=0;l<r.length;l++)r[l]==="--apply"||r[l]==="-a"?i=!0:r[l]==="--no-apply"?i=!1:o.push(r[l]);let a=o[0]||"";return a?a!=="plan"&&a!=="explore"&&a!=="agent"?(q("[luban] \u7528\u6CD5\uFF1A/mode plan|explore|agent [--apply]"),"handled"):(i!==null&&(Jt=i),ci=a,me=al(!0),he.setStatus({mode:me}),me===a&&q("[luban] \u6A21\u5F0F\u5DF2\u5207\u6362\u4E3A "+me),"handled"):(q("[luban] \u5F53\u524D\u6A21\u5F0F "+me+(me==="agent"?"\uFF08\u5199 "+(Jt?"\u5DF2\u653E\u5F00":"\u672A\u653E\u5F00")+"\uFF09":"\uFF08\u53EA\u8BFB\uFF09")),q("[luban] \u7528\u6CD5\uFF1A/mode plan|explore|agent [--apply]"),"handled")}if(n==="apply"){let r=s.toLowerCase();if(!r)return q("[luban] \u5199\u6743\u9650\uFF1A"+(Jt?"\u5F00":"\u5173")+"\uFF08\u5F53\u524D\u6A21\u5F0F "+me+"\uFF09"),"handled";if(r!=="on"&&r!=="off")return q("[luban] \u7528\u6CD5\uFF1A/apply on|off"),"handled";let o=me;return Jt=r==="on",me=al(!1),he.setStatus({mode:me}),Jt&&me!=="agent"?(q("[luban] \u5199\u6743\u9650\u5DF2\u6253\u5F00\uFF1B\u5F53\u524D\u4ECD\u662F "+me+" \u6A21\u5F0F\uFF08\u53EA\u8BFB\uFF09\uFF0C/mode agent \u624D\u771F\u6B63\u653E\u5F00\u5199"),"handled"):!Jt&&o==="agent"&&me==="plan"?(q("[luban] \u5199\u6743\u9650\u5DF2\u5173\u95ED\uFF1Aagent \u6A21\u5F0F\u9700\u8981\u5199\u6743\u9650\uFF0C\u5DF2\u9000\u56DE plan\uFF08\u53EA\u8BFB\uFF09"),"handled"):(q("[luban] \u5199\u6743\u9650\u5DF2"+(Jt?"\u6253\u5F00":"\u5173\u95ED")+"\uFF08\u5F53\u524D\u6A21\u5F0F "+me+"\uFF09"),"handled")}if(n==="confirm"){let r=s.toLowerCase();return r?r!=="on"&&r!=="off"?(q("[luban] \u7528\u6CD5\uFF1A/confirm on|off"),"handled"):(li=r==="on",li&&(ll=!1),q("[luban] \u5199\u64CD\u4F5C\u786E\u8BA4\u5DF2"+(li?"\u6253\u5F00\uFF08\u843D\u76D8\u524D\u663E\u793A diff\uFF09":"\u5173\u95ED\uFF08\u81EA\u52A8\u653E\u884C\u5168\u90E8\u5199\u5165\uFF09")),"handled"):(q("[luban] \u5199\u64CD\u4F5C\u786E\u8BA4\uFF1A"+(li?ll?"\u5173\uFF08\u672C\u6B21\u4F1A\u8BDD\u5DF2\u9009\u62E9\u5168\u90E8\u5141\u8BB8\uFF09":"\u5F00\uFF08\u843D\u76D8\u524D\u663E\u793A diff\uFF09":"\u5173\uFF08\u81EA\u52A8\u653E\u884C\uFF09")),"handled")}if(n==="model"){if(!s){let o=Sr(),i=on();q("[luban] \u5F53\u524D\u6A21\u578B "+i);for(let a=0;a<o.length;a++){let l=o[a],c=bu(l.provider)?"":" key=NO";q(" "+(l.key===i?"* ":" ")+l.key+c)}return"handled"}let r=Sr().filter(function(o){return o.key===s})[0];return r?(es=s,Ds={tokens:0,window:0},q("[luban] \u5DF2\u5207\u6362\u6A21\u578B "+es),bu(r.provider)||(q("[luban] \u6CE8\u610F\uFF1Aprovider "+r.provider.id+" \u8FD8\u6CA1\u914D API key\uFF0C\u7528\u5B83\u8DD1\u4F1A\u76F4\u63A5\u5931\u8D25"),q("[luban] \u8865\u6CD5\uFF08CLI \u4E0D\u8BFB\u6269\u5C55\u7684 SecretStorage\uFF0C\u53EA\u8BA4\u4E0B\u9762\u4E24\u79CD\uFF09\uFF1A"),q("[luban] \u2460 ~/.luban/providers.json \u91CC\u7ED9 "+r.provider.id+' \u52A0 "apiKeyEnv": "SENSENOVA_API_KEY"'),q("[luban] \u7136\u540E export SENSENOVA_API_KEY=...\uFF08\u5199\u8FDB ~/.hermes/.env \u4E5F\u884C\uFF09"),q('[luban] \u2461 \u76F4\u63A5\u5199 "apiKey": "sk-..."\uFF08\u660E\u6587\uFF0C\u6CE8\u610F\u522B\u63D0\u4EA4\u8FDB\u4ED3\u5E93\uFF09'),q("[luban] \u6539\u5B8C\u6267\u884C /reload \u91CD\u8BFB\u914D\u7F6E\uFF08\u4E0D\u7528\u91CD\u542F\uFF09")),"handled"):(q("[luban] \u6CA1\u6709\u8FD9\u4E2A\u6A21\u578B\uFF1A"+s+"\uFF08/model \u770B\u6E05\u5355\uFF09"),"handled")}if(n==="reload"){let r=on();try{On.__loadConfig()}catch(o){return q("[luban] \u91CD\u8BFB\u914D\u7F6E\u5931\u8D25\uFF1A"+(o&&o.message||o)),"handled"}return Ds={tokens:0,window:0},q("[luban] \u5DF2\u91CD\u8BFB "+uT+"\uFF1A"+Sr().length+" \u4E2A\u6A21\u578B"),es&&!Sr().some(function(o){return o.key===es})?(q("[luban] \u5F53\u524D\u6A21\u578B "+es+" \u5DF2\u4E0D\u5728\u914D\u7F6E\u91CC\uFF0C\u56DE\u843D\u5230 "+on()),es=""):on()!==r?q("[luban] \u5F53\u524D\u6A21\u578B\uFF1A"+r+" \u2192 "+on()):q("[luban] \u5F53\u524D\u6A21\u578B "+on()),"handled"}if(n==="thinking"){let r=s.toLowerCase();return r?r!=="on"&&r!=="off"?(q("[luban] \u7528\u6CD5\uFF1A/thinking on|off"),"handled"):(he.setThinking(r==="on"),q("[luban] \u601D\u8003\u5185\u5BB9\u5DF2"+(r==="on"?"\u6539\u4E3A\u5B9E\u65F6\u663E\u793A":"\u6539\u4E3A\u6298\u53E0")),"handled"):(q("[luban] \u601D\u8003\u5185\u5BB9\uFF1A"+(he.setThinking()?"\u5B9E\u65F6\u663E\u793A":"\u6298\u53E0")),"handled")}if(n==="gamepad"||n==="pad"){let r=s.toLowerCase();return r==="off"||r==="stop"?(Th()||q("[luban] \u624B\u67C4\u6D4B\u8BD5\u6CA1\u5728\u8DD1\uFF08/gamepad \u5F00\u59CB\uFF0C/gamepad raw \u5E26\u539F\u59CB\u503C\uFF09"),"handled"):r&&r!=="on"&&r!=="raw"?(q("[luban] \u7528\u6CD5\uFF1A/gamepad [on|off|raw]\uFF08\u4E0D\u5E26\u53C2\u6570 = \u5F00\u59CB\u6D4B\u8BD5\uFF09"),"handled"):(XF(r==="raw"),"handled")}if(n==="usage"){let r=s.trim().toLowerCase()||"7d";if(!ai.RANGES.some(function(c){return c.key===r}))return q("[luban] \u7528\u6CD5\uFF1A/usage [today|7d|30d|all]\uFF08\u9ED8\u8BA4 7d\uFF09"),"handled";let i=ai.rangeOf(r,Date.now()),a=ai.read(xh,i.from,i.to),l=ai.aggregate(a.rows,i);return VF(l,i),"handled"}return q("[luban] \u672A\u77E5\u547D\u4EE4 /"+n+"\uFF08/help \u770B\u7528\u6CD5\uFF09"),"handled"}async function nL(t){ts&&Th("[luban] \u624B\u67C4\u6D4B\u8BD5\u5DF2\u7ED3\u675F\uFF08\u8FDB\u5165\u95EE\u7B54\uFF09");let e=mT();he.setStatus({mode:me}),he.beginTurn(),kT(t),je||ST();let n=ud().build(_r,{});ph="";let s=xT(e,{history:n.messages,spillDigest:n.spillDigest,onUserTurn:function(i){ph=i}});_h();let r;try{r=await Sh(t,s)}catch(i){di(),e.running=!1,he.endTurn();try{e.cancelled?mt.update({state:"idle",text:"\u5DF2\u53D6\u6D88",tool:null}):mt.fail(i&&i.message||String(i))}catch{}e.cancelled?q("[luban] \u5DF2\u53D6\u6D88"):q("[luban] \u672C\u8F6E\u5931\u8D25\uFF1A"+(i&&i.message||i));return}di(),e.running=!1,he.outputFinal(r.text==null?"":String(r.text)),he.endTurn();let o=r&&r.stop&&r.stop.reason||"unknown";he.finish({compact:!0,iters:r.iters,tools:(r.log||[]).length,stop:o,model:r.modelKey||"",log:r.log||[]});try{mt.done(e.cancelled?"cancelled":o)}catch{}bT(r.usage),!e.cancelled&&(_r.push({t:"user",text:t,ctx:ph||t}),_r.push({t:"text",text:r.text==null?"":String(r.text)}),vT())}async function sL(){_u=!0;let t="";try{t=Tl().version||""}catch{}if(await pT(),he.setStatus({mode:me}),he.enabled){let e=me==="agent"&&Jt?li&&!ll?"agent* \u5199\u5DF2\u653E\u5F00 \xB7 \u843D\u76D8\u524D\u9010\u6B21\u786E\u8BA4":"agent* \u5199\u5DF2\u653E\u5F00 \xB7 \u81EA\u52A8\u653E\u884C":me==="plan"?"plan \u53EA\u753B\u7EBF \xB7 --apply \u624D\u52A8\u624B":me+" \u53EA\u8BFB\u8C03\u7814 \xB7 \u4E0D\u52A8\u624B",n=il.banner(Fs,{mood:il.moodForMode(me),tip:e});for(let s=0;s<n.length;s++)q(n[s]);q("")}for(q(Fs("cyan","luban "+(t?t+" ":""))+"\u4EA4\u4E92\u6A21\u5F0F \xB7 \u6A21\u578B "+on()+" \xB7 \u5DE5\u4F5C\u76EE\u5F55 "+At),je&&vu(je.items)&&q(Fs("gray","\u5DF2\u6062\u590D\u5BF9\u8BDD "+je.id+" \xB7 "+vu(je.items)+" \u8F6E\uFF08/sessions \u770B\u6E05\u5355\uFF0C/new \u5F00\u65B0\u5BF9\u8BDD\uFF09")),q(Fs("gray","Enter \u53D1\u9001 \xB7 Ctrl-J/Alt+Enter \u6362\u884C \xB7 / \u8865\u547D\u4EE4 \xB7 @ \u8865\u6587\u4EF6 \xB7 Esc \u53D6\u6D88\u672C\u8F6E \xB7 Ctrl-D \u9000\u51FA")),wT();;){try{mt.update({state:"idle",text:"\u7B49\u4F60\u8F93\u5165"})}catch{}let e=await TT(_T());if(e===null){if(Th("[luban] \u624B\u67C4\u6D4B\u8BD5\u5DF2\u7ED3\u675F\uFF08Ctrl-D \u6216 /exit \u9000\u51FA CLI\uFF09"))continue;fl(),he.close(),process.exit(130)}if(e===void 0)break;let n=String(e).trim();if(n){if(n.charAt(0)==="/"){if(tL(n)==="exit")break;continue}await nL(n)}}fl(),he.close(),process.exit(0)}async function rL(t){let e=(t.tools||[]).join("\u3001")||"\u65E0\u5DE5\u5177",n=await TT("[luban] \u8981\u542F\u7528\u672C\u5730\u63D2\u4EF6\u300C"+t.name+"\u300D\uFF08"+e+"\uFF09\u5417\uFF1F\u5B83\u4F1A\u4EE5\u5DE5\u5177\u5F62\u5F0F\u5E76\u5165 agent\u3002\u63D2\u4EF6\u662F\u672C\u673A\u4EFB\u610F\u4EE3\u7801\uFF0C\u53EA\u542F\u7528\u4F60\u4FE1\u4EFB\u7684\u6765\u6E90\u3002[y/N] ");return/^y(es)?$/i.test(String(n??"").trim())}async function oL(){if(!ye.plugins)return;let t=Ur(),e=vh&&!ye.noTui&&!ye.json;t.configure({root:At,enabled:!0,maxTools:30,confirm:e?rL:null});try{let n=await t.refresh(At),s=t.status();q("[luban] \u672C\u5730\u63D2\u4EF6 "+n.length+" \u4E2A \xB7 \u5DE5\u5177 "+s.tools.length+" \u4E2A"+(s.errors.length?" \xB7 "+s.errors.length+" \u4E2A\u8DF3\u8FC7\uFF08"+s.errors[0]+"\uFF09":""))}catch(n){process.stderr.write("[luban] \u63D2\u4EF6\u626B\u63CF\u5931\u8D25\uFF1A"+(n&&n.message)+`
1144
+ `):i)})})}function tL(t){let e=t.slice(1).split(/\s+/),n=(e[0]||"").toLowerCase(),s=e.slice(1).join(" ").trim();if(n==="exit"||n==="quit"||n==="q")return"exit";if(n==="help"||n==="?"){q("[luban] \u53EF\u7528\u547D\u4EE4\uFF1A");for(let r=0;r<wh.length;r++)q(" "+wh[r]);return"handled"}if(n==="clear"){let r=vu(Tr);return je?(je.items.length=0,Tr=je.items):Tr=[],r&&vT(),Fs={tokens:0,window:0},q("[luban] \u5DF2\u6E05\u7A7A\u5BF9\u8BDD\u8BB0\u5FC6\uFF08"+r+" \u8F6E\uFF09"),"handled"}if(n==="sessions"){let r=pl().list("workspace",At);if(!r.length)return q("[luban] \u672C\u5DE5\u4F5C\u533A\u8FD8\u6CA1\u6709\u5386\u53F2\u5BF9\u8BDD\uFF08\u804A\u8FC7\u4E00\u8F6E\u5C31\u4F1A\u81EA\u52A8\u5B58\uFF09"),"handled";q("[luban] \u672C\u5DE5\u4F5C\u533A\u7684\u5BF9\u8BDD\uFF08"+r.length+" \u6761\uFF0C\u6700\u8FD1\u5728\u524D\uFF09\uFF1A");for(let o=0;o<r.length;o++){let i=r[o],a=je&&i.id===je.id?" *":" ",l=String(i.updatedAt||"").replace("T"," ").slice(0,16),c=String(i.title||"").replace(/\s+/g," ").slice(0,40),u=Math.ceil((i.items||0)/2);q(a+(o+1)+". "+i.id+" "+u+" \u8F6E "+l+" "+c)}return q(Ls("gray"," /resume <\u4E0B\u6807|id> \u6062\u590D\uFF1B\u5E26 * \u7684\u662F\u5F53\u524D\u5BF9\u8BDD")),"handled"}if(n==="resume"){if(!s)return q("[luban] \u7528\u6CD5\uFF1A/resume <id|\u4E0B\u6807>\uFF08/sessions \u770B\u6E05\u5355\uFF09"),"handled";let r=bh(s);return r.ok?(Fs={tokens:0,window:0},q("[luban] \u5DF2\u6062\u590D\u5BF9\u8BDD "+r.id+" \xB7 "+r.turns+" \u8F6E\uFF08\u6A21\u578B "+on()+" \xB7 "+me+"\uFF09"),me!==(je.mode||me)&&q("[luban] \u539F\u4F1A\u8BDD\u662F "+je.mode+" \u6A21\u5F0F\uFF0C\u5DF2\u6309\u53EA\u8BFB\u6062\u590D\uFF1B/apply on \u624D\u653E\u5F00\u5199"),"handled"):(q("[luban] "+r.msg),"handled")}if(n==="new"){let r=je?je.id:"";return ST(),Fs={tokens:0,window:0},q("[luban] \u5DF2\u5F00\u65B0\u5BF9\u8BDD"+(r?"\uFF08\u65E7\u7684 "+r+" \u7559\u5728\u78C1\u76D8\uFF0C/sessions \u80FD\u627E\u56DE\u6765\uFF09":"")),"handled"}if(n==="mode"){let r=s.toLowerCase().split(/\s+/).filter(Boolean),o=[],i=null;for(let l=0;l<r.length;l++)r[l]==="--apply"||r[l]==="-a"?i=!0:r[l]==="--no-apply"?i=!1:o.push(r[l]);let a=o[0]||"";return a?a!=="plan"&&a!=="explore"&&a!=="agent"?(q("[luban] \u7528\u6CD5\uFF1A/mode plan|explore|agent [--apply]"),"handled"):(i!==null&&(Jt=i),ci=a,me=al(!0),he.setStatus({mode:me}),me===a&&q("[luban] \u6A21\u5F0F\u5DF2\u5207\u6362\u4E3A "+me),"handled"):(q("[luban] \u5F53\u524D\u6A21\u5F0F "+me+(me==="agent"?"\uFF08\u5199 "+(Jt?"\u5DF2\u653E\u5F00":"\u672A\u653E\u5F00")+"\uFF09":"\uFF08\u53EA\u8BFB\uFF09")),q("[luban] \u7528\u6CD5\uFF1A/mode plan|explore|agent [--apply]"),"handled")}if(n==="apply"){let r=s.toLowerCase();if(!r)return q("[luban] \u5199\u6743\u9650\uFF1A"+(Jt?"\u5F00":"\u5173")+"\uFF08\u5F53\u524D\u6A21\u5F0F "+me+"\uFF09"),"handled";if(r!=="on"&&r!=="off")return q("[luban] \u7528\u6CD5\uFF1A/apply on|off"),"handled";let o=me;return Jt=r==="on",me=al(!1),he.setStatus({mode:me}),Jt&&me!=="agent"?(q("[luban] \u5199\u6743\u9650\u5DF2\u6253\u5F00\uFF1B\u5F53\u524D\u4ECD\u662F "+me+" \u6A21\u5F0F\uFF08\u53EA\u8BFB\uFF09\uFF0C/mode agent \u624D\u771F\u6B63\u653E\u5F00\u5199"),"handled"):!Jt&&o==="agent"&&me==="plan"?(q("[luban] \u5199\u6743\u9650\u5DF2\u5173\u95ED\uFF1Aagent \u6A21\u5F0F\u9700\u8981\u5199\u6743\u9650\uFF0C\u5DF2\u9000\u56DE plan\uFF08\u53EA\u8BFB\uFF09"),"handled"):(q("[luban] \u5199\u6743\u9650\u5DF2"+(Jt?"\u6253\u5F00":"\u5173\u95ED")+"\uFF08\u5F53\u524D\u6A21\u5F0F "+me+"\uFF09"),"handled")}if(n==="confirm"){let r=s.toLowerCase();return r?r!=="on"&&r!=="off"?(q("[luban] \u7528\u6CD5\uFF1A/confirm on|off"),"handled"):(li=r==="on",li&&(ll=!1),q("[luban] \u5199\u64CD\u4F5C\u786E\u8BA4\u5DF2"+(li?"\u6253\u5F00\uFF08\u843D\u76D8\u524D\u663E\u793A diff\uFF09":"\u5173\u95ED\uFF08\u81EA\u52A8\u653E\u884C\u5168\u90E8\u5199\u5165\uFF09")),"handled"):(q("[luban] \u5199\u64CD\u4F5C\u786E\u8BA4\uFF1A"+(li?ll?"\u5173\uFF08\u672C\u6B21\u4F1A\u8BDD\u5DF2\u9009\u62E9\u5168\u90E8\u5141\u8BB8\uFF09":"\u5F00\uFF08\u843D\u76D8\u524D\u663E\u793A diff\uFF09":"\u5173\uFF08\u81EA\u52A8\u653E\u884C\uFF09")),"handled")}if(n==="model"){if(!s){let o=vr(),i=on();q("[luban] \u5F53\u524D\u6A21\u578B "+i);for(let a=0;a<o.length;a++){let l=o[a],c=bu(l.provider)?"":" key=NO";q(" "+(l.key===i?"* ":" ")+l.key+c)}return"handled"}let r=vr().filter(function(o){return o.key===s})[0];return r?(es=s,Fs={tokens:0,window:0},q("[luban] \u5DF2\u5207\u6362\u6A21\u578B "+es),bu(r.provider)||(q("[luban] \u6CE8\u610F\uFF1Aprovider "+r.provider.id+" \u8FD8\u6CA1\u914D API key\uFF0C\u7528\u5B83\u8DD1\u4F1A\u76F4\u63A5\u5931\u8D25"),q("[luban] \u8865\u6CD5\uFF08CLI \u4E0D\u8BFB\u6269\u5C55\u7684 SecretStorage\uFF0C\u53EA\u8BA4\u4E0B\u9762\u4E24\u79CD\uFF09\uFF1A"),q("[luban] \u2460 ~/.luban/providers.json \u91CC\u7ED9 "+r.provider.id+' \u52A0 "apiKeyEnv": "SENSENOVA_API_KEY"'),q("[luban] \u7136\u540E export SENSENOVA_API_KEY=...\uFF08\u5199\u8FDB ~/.hermes/.env \u4E5F\u884C\uFF09"),q('[luban] \u2461 \u76F4\u63A5\u5199 "apiKey": "sk-..."\uFF08\u660E\u6587\uFF0C\u6CE8\u610F\u522B\u63D0\u4EA4\u8FDB\u4ED3\u5E93\uFF09'),q("[luban] \u6539\u5B8C\u6267\u884C /reload \u91CD\u8BFB\u914D\u7F6E\uFF08\u4E0D\u7528\u91CD\u542F\uFF09")),"handled"):(q("[luban] \u6CA1\u6709\u8FD9\u4E2A\u6A21\u578B\uFF1A"+s+"\uFF08/model \u770B\u6E05\u5355\uFF09"),"handled")}if(n==="reload"){let r=on();try{On.__loadConfig()}catch(o){return q("[luban] \u91CD\u8BFB\u914D\u7F6E\u5931\u8D25\uFF1A"+(o&&o.message||o)),"handled"}return Fs={tokens:0,window:0},q("[luban] \u5DF2\u91CD\u8BFB "+uT+"\uFF1A"+vr().length+" \u4E2A\u6A21\u578B"),es&&!vr().some(function(o){return o.key===es})?(q("[luban] \u5F53\u524D\u6A21\u578B "+es+" \u5DF2\u4E0D\u5728\u914D\u7F6E\u91CC\uFF0C\u56DE\u843D\u5230 "+on()),es=""):on()!==r?q("[luban] \u5F53\u524D\u6A21\u578B\uFF1A"+r+" \u2192 "+on()):q("[luban] \u5F53\u524D\u6A21\u578B "+on()),"handled"}if(n==="thinking"){let r=s.toLowerCase();return r?r!=="on"&&r!=="off"?(q("[luban] \u7528\u6CD5\uFF1A/thinking on|off"),"handled"):(he.setThinking(r==="on"),q("[luban] \u601D\u8003\u5185\u5BB9\u5DF2"+(r==="on"?"\u6539\u4E3A\u5B9E\u65F6\u663E\u793A":"\u6539\u4E3A\u6298\u53E0")),"handled"):(q("[luban] \u601D\u8003\u5185\u5BB9\uFF1A"+(he.setThinking()?"\u5B9E\u65F6\u663E\u793A":"\u6298\u53E0")),"handled")}if(n==="gamepad"||n==="pad"){let r=s.toLowerCase();return r==="off"||r==="stop"?(Th()||q("[luban] \u624B\u67C4\u6D4B\u8BD5\u6CA1\u5728\u8DD1\uFF08/gamepad \u5F00\u59CB\uFF0C/gamepad raw \u5E26\u539F\u59CB\u503C\uFF09"),"handled"):r&&r!=="on"&&r!=="raw"?(q("[luban] \u7528\u6CD5\uFF1A/gamepad [on|off|raw]\uFF08\u4E0D\u5E26\u53C2\u6570 = \u5F00\u59CB\u6D4B\u8BD5\uFF09"),"handled"):(XF(r==="raw"),"handled")}if(n==="usage"){let r=s.trim().toLowerCase()||"7d";if(!ai.RANGES.some(function(c){return c.key===r}))return q("[luban] \u7528\u6CD5\uFF1A/usage [today|7d|30d|all]\uFF08\u9ED8\u8BA4 7d\uFF09"),"handled";let i=ai.rangeOf(r,Date.now()),a=ai.read(xh,i.from,i.to),l=ai.aggregate(a.rows,i);return VF(l,i),"handled"}return q("[luban] \u672A\u77E5\u547D\u4EE4 /"+n+"\uFF08/help \u770B\u7528\u6CD5\uFF09"),"handled"}async function nL(t){ts&&Th("[luban] \u624B\u67C4\u6D4B\u8BD5\u5DF2\u7ED3\u675F\uFF08\u8FDB\u5165\u95EE\u7B54\uFF09");let e=mT();he.setStatus({mode:me}),he.beginTurn(),kT(t),je||ST();let n=ud().build(Tr,{});ph="";let s=xT(e,{history:n.messages,spillDigest:n.spillDigest,onUserTurn:function(i){ph=i}});_h();let r;try{r=await Sh(t,s)}catch(i){di(),e.running=!1,he.endTurn();try{e.cancelled?mt.update({state:"idle",text:"\u5DF2\u53D6\u6D88",tool:null}):mt.fail(i&&i.message||String(i))}catch{}e.cancelled?q("[luban] \u5DF2\u53D6\u6D88"):q("[luban] \u672C\u8F6E\u5931\u8D25\uFF1A"+(i&&i.message||i));return}di(),e.running=!1,he.outputFinal(r.text==null?"":String(r.text)),he.endTurn();let o=r&&r.stop&&r.stop.reason||"unknown";he.finish({compact:!0,iters:r.iters,tools:(r.log||[]).length,stop:o,model:r.modelKey||"",log:r.log||[]});try{mt.done(e.cancelled?"cancelled":o)}catch{}bT(r.usage),!e.cancelled&&(Tr.push({t:"user",text:t,ctx:ph||t}),Tr.push({t:"text",text:r.text==null?"":String(r.text)}),vT())}async function sL(){_u=!0;let t="";try{t=Tl().version||""}catch{}if(await pT(),he.setStatus({mode:me}),he.enabled){let e=me==="agent"&&Jt?li&&!ll?"agent* \u5199\u5DF2\u653E\u5F00 \xB7 \u843D\u76D8\u524D\u9010\u6B21\u786E\u8BA4":"agent* \u5199\u5DF2\u653E\u5F00 \xB7 \u81EA\u52A8\u653E\u884C":me==="plan"?"plan \u53EA\u753B\u7EBF \xB7 --apply \u624D\u52A8\u624B":me+" \u53EA\u8BFB\u8C03\u7814 \xB7 \u4E0D\u52A8\u624B",n=il.banner(Ls,{mood:il.moodForMode(me),tip:e});for(let s=0;s<n.length;s++)q(n[s]);q("")}for(q(Ls("cyan","luban "+(t?t+" ":""))+"\u4EA4\u4E92\u6A21\u5F0F \xB7 \u6A21\u578B "+on()+" \xB7 \u5DE5\u4F5C\u76EE\u5F55 "+At),je&&vu(je.items)&&q(Ls("gray","\u5DF2\u6062\u590D\u5BF9\u8BDD "+je.id+" \xB7 "+vu(je.items)+" \u8F6E\uFF08/sessions \u770B\u6E05\u5355\uFF0C/new \u5F00\u65B0\u5BF9\u8BDD\uFF09")),q(Ls("gray","Enter \u53D1\u9001 \xB7 Ctrl-J/Alt+Enter \u6362\u884C \xB7 / \u8865\u547D\u4EE4 \xB7 @ \u8865\u6587\u4EF6 \xB7 Esc \u53D6\u6D88\u672C\u8F6E \xB7 Ctrl-D \u9000\u51FA")),wT();;){try{mt.update({state:"idle",text:"\u7B49\u4F60\u8F93\u5165"})}catch{}let e=await TT(_T());if(e===null){if(Th("[luban] \u624B\u67C4\u6D4B\u8BD5\u5DF2\u7ED3\u675F\uFF08Ctrl-D \u6216 /exit \u9000\u51FA CLI\uFF09"))continue;fl(),he.close(),process.exit(130)}if(e===void 0)break;let n=String(e).trim();if(n){if(n.charAt(0)==="/"){if(tL(n)==="exit")break;continue}await nL(n)}}fl(),he.close(),process.exit(0)}async function rL(t){let e=(t.tools||[]).join("\u3001")||"\u65E0\u5DE5\u5177",n=await TT("[luban] \u8981\u542F\u7528\u672C\u5730\u63D2\u4EF6\u300C"+t.name+"\u300D\uFF08"+e+"\uFF09\u5417\uFF1F\u5B83\u4F1A\u4EE5\u5DE5\u5177\u5F62\u5F0F\u5E76\u5165 agent\u3002\u63D2\u4EF6\u662F\u672C\u673A\u4EFB\u610F\u4EE3\u7801\uFF0C\u53EA\u542F\u7528\u4F60\u4FE1\u4EFB\u7684\u6765\u6E90\u3002[y/N] ");return/^y(es)?$/i.test(String(n??"").trim())}async function oL(){if(!ye.plugins)return;let t=Ur(),e=vh&&!ye.noTui&&!ye.json;t.configure({root:At,enabled:!0,maxTools:30,confirm:e?rL:null});try{let n=await t.refresh(At),s=t.status();q("[luban] \u672C\u5730\u63D2\u4EF6 "+n.length+" \u4E2A \xB7 \u5DE5\u5177 "+s.tools.length+" \u4E2A"+(s.errors.length?" \xB7 "+s.errors.length+" \u4E2A\u8DF3\u8FC7\uFF08"+s.errors[0]+"\uFF09":""))}catch(n){process.stderr.write("[luban] \u63D2\u4EF6\u626B\u63CF\u5931\u8D25\uFF1A"+(n&&n.message)+`
1145
1145
  `)}}(async function(){await oL();try{mt.autoServe()}catch{}try{mt.update({source:"cli",workspace:At})}catch{}if(ye.prompt){ye.resume&&An("--resume \u53EA\u7528\u4E8E\u4EA4\u4E92\u6A21\u5F0F\uFF08\u4E0D\u5E26\u4EFB\u52A1\u63CF\u8FF0\uFF09\uFF1Bone-shot \u8DD1\u5B8C\u5373\u9000\uFF0C\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5BF9\u8BDD",2),await YF(ye.prompt);return}if(_u=!0,ye.resume)if(ye.resume===!0){let e=pl().list("workspace",At);if(!e.length)q("[luban] \u8FD8\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5BF9\u8BDD\uFF0C\u5F00\u4E00\u4E2A\u65B0\u4F1A\u8BDD\uFF08\u804A\u8FC7\u4E00\u8F6E\u4F1A\u81EA\u52A8\u5B58\uFF09");else{let n=bh(e[0].id);n.ok||An("--resume\uFF1A"+n.msg,2),q("[luban] --resume \u5DF2\u6062\u590D\u6700\u8FD1\u4E00\u6761 "+n.id+" \xB7 "+n.turns+" \u8F6E")}}else{let e=bh(ye.resume);e.ok||An("--resume\uFF1A"+e.msg,2),q("[luban] --resume \u5DF2\u6062\u590D "+e.id+" \xB7 "+e.turns+" \u8F6E")}await sL()})().catch(function(t){An("CLI \u5185\u90E8\u9519\u8BEF\uFF1A"+(t&&t.stack||t),2)});