@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/acp.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /*! Luban | Copyright 2026 eppen (liuhualiang) | SPDX-License-Identifier: Apache-2.0 */
3
- "use strict";var Lv=Object.create;var wm=Object.defineProperty;var Dv=Object.getOwnPropertyDescriptor;var Rv=Object.getOwnPropertyNames;var qv=Object.getPrototypeOf,Bv=Object.prototype.hasOwnProperty;var Z=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Uv=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Rv(e))!Bv.call(t,r)&&r!==n&&wm(t,r,{get:()=>e[r],enumerable:!(s=Dv(e,r))||s.enumerable});return t};var Wv=(t,e,n)=>(n=t!=null?Lv(qv(t)):{},Uv(e||!t||!t.__esModule?wm(n,"default",{value:t,enumerable:!0}):n,t));var ja=Z((GF,Kv)=>{Kv.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 km=Z((JF,bm)=>{"use strict";var Na=require("fs"),Wo=require("path"),Dc=require("module");function Ko(t){let e=function(){return s},n={version:"1.104.0",env:{language:t.language||"zh-cn",appName:"luban-acp",uriScheme:"file",appHost:"desktop"},workspace:{textDocuments:[],getConfiguration:function(){return{get:function(){},has:function(){return!1},inspect:function(){}}},onDidChangeConfiguration:function(){return{dispose:function(){}}},fs:{writeFile:function(r,o){return new Promise(function(i,a){try{Na.mkdirSync(Wo.dirname(r.fsPath),{recursive:!0}),Na.writeFileSync(r.fsPath,o),i(void 0)}catch(l){a(l)}})},readFile:function(r){return new Promise(function(o,i){Na.readFile(r.fsPath,function(a,l){a?i(a):o(l)})})},stat:function(r){return new Promise(function(o,i){Na.stat(r.fsPath,function(a,l){a?i(a):o(l)})})}}},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)},showWarningMessage:function(){return Promise.resolve(void 0)},createOutputChannel:function(){return{appendLine:function(){},append:function(){},show:function(){},dispose:function(){}}},onDidChangeActiveTextEditor:function(){return{dispose:function(){}}},createStatusBarItem:function(){return{text:"",tooltip:"",show:function(){},hide:function(){},dispose:function(){}}}},commands:{executeCommand:function(r){return Promise.reject(new Error("ACP \u8FDB\u7A0B\u6CA1\u6709\u7F16\u8F91\u5668\uFF0C\u4E0D\u80FD\u6267\u884C\u547D\u4EE4 "+r))},registerCommand:function(){return{dispose:function(){}}}},extensions:{getExtension:function(){return null},all:[]},Uri:{file:function(r){return{fsPath:r,scheme:"file",path:r,toString:function(){return"file://"+r},with:function(){return n.Uri.file(r)}}},parse:function(r){let o=/^file:\/\/(.*)$/.exec(String(r));return{fsPath:o?decodeURIComponent(o[1]):String(r),scheme:"file"}},joinPath:function(r,...o){return n.Uri.file(Wo.join(r.fsPath,...o))}},Position:function(r,o){this.line=r,this.character=o},Range:function(r,o,i,a){this.start=new n.Position(r,o),this.end=new n.Position(i,a)},CancellationTokenSource:function(){let r=[];return{token:{isCancellationRequested:!1,onCancellationRequested:function(o){return r.push(o),{dispose:function(){}}}},cancel:function(){r.forEach(function(o){try{o()}catch{}})},dispose:function(){}}},EventEmitter:function(){let r=[];return{event:function(o){return r.push(o),{dispose:function(){}}},fire:function(o){r.forEach(function(i){try{i(o)}catch{}})},dispose:function(){}}}};Object.defineProperty(n.workspace,"workspaceFolders",{enumerable:!0,get:function(){return t.root?[{uri:{fsPath:t.root,scheme:"file",toString:function(){return"file://"+t.root}},name:Wo.basename(t.root),index:0}]:[]}});let s=new Proxy(e,{get:function(r,o){if(!(o==="then"||o===Symbol.toPrimitive||o==="inspect"||o===Symbol.iterator))return o in n?n[o]:(o in r||(r[o]=Ko(t)),r[o])},apply:function(){return Ko(t)},construct:function(){return Ko(t)}});return s}function Hv(t){let e=t||{},n={root:Wo.resolve(e.root||process.cwd()),language:e.language||""},s=Ko(n),r=Dc._load;return Dc._load=function(o,i,a){return o==="vscode"?s:r.call(this,o,i,a)},{stub:s,get root(){return n.root},setRoot:function(o){n.root=Wo.resolve(o)},restore:function(){Dc._load=r}}}bm.exports={install:Hv,makeStub:Ko}});var qc=Z(($F,xm)=>{function Ho(t){let e=String(t??"");return e===""?[]:e.split(`
3
+ "use strict";var Lv=Object.create;var wm=Object.defineProperty;var Dv=Object.getOwnPropertyDescriptor;var Rv=Object.getOwnPropertyNames;var qv=Object.getPrototypeOf,Bv=Object.prototype.hasOwnProperty;var Z=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Uv=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Rv(e))!Bv.call(t,r)&&r!==n&&wm(t,r,{get:()=>e[r],enumerable:!(s=Dv(e,r))||s.enumerable});return t};var Wv=(t,e,n)=>(n=t!=null?Lv(qv(t)):{},Uv(e||!t||!t.__esModule?wm(n,"default",{value:t,enumerable:!0}):n,t));var ja=Z((GF,Kv)=>{Kv.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 km=Z((JF,bm)=>{"use strict";var Na=require("fs"),Wo=require("path"),Dc=require("module");function Ko(t){let e=function(){return s},n={version:"1.104.0",env:{language:t.language||"zh-cn",appName:"luban-acp",uriScheme:"file",appHost:"desktop"},workspace:{textDocuments:[],getConfiguration:function(){return{get:function(){},has:function(){return!1},inspect:function(){}}},onDidChangeConfiguration:function(){return{dispose:function(){}}},fs:{writeFile:function(r,o){return new Promise(function(i,a){try{Na.mkdirSync(Wo.dirname(r.fsPath),{recursive:!0}),Na.writeFileSync(r.fsPath,o),i(void 0)}catch(l){a(l)}})},readFile:function(r){return new Promise(function(o,i){Na.readFile(r.fsPath,function(a,l){a?i(a):o(l)})})},stat:function(r){return new Promise(function(o,i){Na.stat(r.fsPath,function(a,l){a?i(a):o(l)})})}}},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)},showWarningMessage:function(){return Promise.resolve(void 0)},createOutputChannel:function(){return{appendLine:function(){},append:function(){},show:function(){},dispose:function(){}}},onDidChangeActiveTextEditor:function(){return{dispose:function(){}}},createStatusBarItem:function(){return{text:"",tooltip:"",show:function(){},hide:function(){},dispose:function(){}}}},commands:{executeCommand:function(r){return Promise.reject(new Error("ACP \u8FDB\u7A0B\u6CA1\u6709\u7F16\u8F91\u5668\uFF0C\u4E0D\u80FD\u6267\u884C\u547D\u4EE4 "+r))},registerCommand:function(){return{dispose:function(){}}}},extensions:{getExtension:function(){return null},all:[]},Uri:{file:function(r){return{fsPath:r,scheme:"file",path:r,toString:function(){return"file://"+r},with:function(){return n.Uri.file(r)}}},parse:function(r){let o=/^file:\/\/(.*)$/.exec(String(r));return{fsPath:o?decodeURIComponent(o[1]):String(r),scheme:"file"}},joinPath:function(r,...o){return n.Uri.file(Wo.join(r.fsPath,...o))}},Position:function(r,o){this.line=r,this.character=o},Range:function(r,o,i,a){this.start=new n.Position(r,o),this.end=new n.Position(i,a)},CancellationTokenSource:function(){let r=[];return{token:{isCancellationRequested:!1,onCancellationRequested:function(o){return r.push(o),{dispose:function(){}}}},cancel:function(){r.forEach(function(o){try{o()}catch{}})},dispose:function(){}}},EventEmitter:function(){let r=[];return{event:function(o){return r.push(o),{dispose:function(){}}},fire:function(o){r.forEach(function(i){try{i(o)}catch{}})},dispose:function(){}}}};Object.defineProperty(n.workspace,"workspaceFolders",{enumerable:!0,get:function(){return t.root?[{uri:{fsPath:t.root,scheme:"file",toString:function(){return"file://"+t.root}},name:Wo.basename(t.root),index:0}]:[]}});let s=new Proxy(e,{get:function(r,o){if(!(o==="then"||o===Symbol.toPrimitive||o==="inspect"||o===Symbol.iterator))return o in n?n[o]:(o in r||(r[o]=Ko(t)),r[o])},apply:function(){return Ko(t)},construct:function(){return Ko(t)}});return s}function Hv(t){let e=t||{},n={root:Wo.resolve(e.root||process.cwd()),language:e.language||""},s=Ko(n),r=Dc._load;return Dc._load=function(o,i,a){return o==="vscode"?s:r.call(this,o,i,a)},{stub:s,get root(){return n.root},setRoot:function(o){n.root=Wo.resolve(o)},restore:function(){Dc._load=r}}}bm.exports={install:Hv,makeStub:Ko}});var qc=Z(($F,xm)=>{function Ho(t){let e=String(t??"");return e===""?[]:e.split(`
4
4
  `)}function Rc(t){return(t||[]).join(`
5
- `)}function zv(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 Gv(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 Jv(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(Gv(t,a,l))}return n.forEach(function(r,o){r.id="h"+(o+1)}),n}function $v(t,e){let n=Ho(t),s=Ho(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=zv(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 Jv(d)}function Xv(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 Vv(t,e){let n=Ho(t),s=[];for(let r of e.lines)r.t!=="-"&&s.push(r.s);return Rc(n.slice(0,e.oldStart).concat(s,n.slice(e.oldStart+e.oldLines)))}function Yv(t,e){let n=Ho(t),s=[];for(let r of e.lines)r.t!=="+"&&s.push(r.s);return Rc(n.slice(0,e.newStart).concat(s,n.slice(e.newStart+e.newLines)))}function Zv(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 Qv(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}}xm.exports={CONTEXT:3,splitLines:Ho,joinLines:Rc,computeHunks:$v,stats:Xv,applyHunkToBaseline:Vv,revertHunkText:Yv,revertHunkEdit:Zv,hunkRanges:Qv}});var Om=Z((XF,Am)=>{var Wt=require("fs"),Gr=require("fs").promises,Uc=require("path"),_m=500,Bc=2e4,Sm=2e4,e_=8e4,t_=4e3,n_=20,s_=40,Tm=50,r_=4,o_=5*1024*1024,i_={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},a_=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/;function is(t){return(t<10?"0":"")+t}function Wc(t){let e=t||new Date;return e.getFullYear()+is(e.getMonth()+1)+is(e.getDate())+"-"+is(e.getHours())+is(e.getMinutes())+is(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Ae(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function l_(t){if(!Array.isArray(t)||!t.length)return;let e=[];for(let n of t.slice(0,r_)){if(!n||typeof n!="object")continue;let s=Ae(n.file,120),r=String(n.mime==null?"":n.mime),o=i_[r];if(!o||!a_.test(s)||s.slice(s.lastIndexOf(".")+1)!==o)continue;let i=Math.min(o_,Math.floor(Number(n.bytes)||0));i<=0||e.push({file:s,mime:r,bytes:i})}return e.length?e:void 0}function c_(t){let e=t?new Date(t):new Date;return isNaN(e.getTime())?"":is(e.getMonth()+1)+"-"+is(e.getDate())+" "+is(e.getHours())+":"+is(e.getMinutes())}var Mm="\u65B0\u4F1A\u8BDD";function u_(t){typeof t=="string"&&t&&(Mm=t)}function zo(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||Mm)+" \xB7 "+c_(e)}var d_=40,f_={pending:1,in_progress:1,completed:1,cancelled:1},p_=4,m_=6;function vm(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,d_)){if(!n||typeof n!="object")continue;let s=Ae(n.id,64).trim(),r=Ae(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:f_[o]?o:"pending"})}return e}function h_(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,m_)){if(!n||typeof n!="object")continue;let s=Ae(n.id,64).trim(),r=Ae(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 g_(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,p_)){if(!n||typeof n!="object")continue;let s=Ae(n.id,64).trim(),r=Ae(n.prompt,240).trim(),o=h_(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 y_(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=Ae(c[f],64).trim();!p||!a[p]||d[p]||(d[p]=1,u.push(p))}u.length&&(r[i.id]=u)}else{let c=Ae(Array.isArray(l)?l[0]:l,64).trim();c&&a[c]&&(r[i.id]=c)}}return r}function Cm(t){let e=Object.assign({},t);if(e.t==="tool")return e.name=Ae(e.name,60),e.path=Ae(e.path,300),e.result=Ae(e.result,t_),e.ok=e.ok!==!1,e;if(e.t==="sources")return e.items=(e.items||[]).slice(0,n_).map(function(n){return{title:Ae(n&&n.title,200),url:Ae(n&&n.url,500),siteName:Ae(n&&n.siteName,80),date:Ae(n&&n.date,40)}}),e.query=Ae(e.query,200),e;if(e.t==="refs")return e.refs=(e.refs||[]).slice(0,s_).map(function(n){return{kind:n&&n.kind==="selection"?"selection":"file",path:Ae(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:Ae(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=Ae(e.model,120),delete e.prefixHint,e}if(e.t==="user"){e.text=Ae(e.text,Bc),e.web=!!e.web,e.ctx!=null&&(e.ctx=Ae(e.ctx,e_)),e.exec&&(e.exec=!0);let n=l_(e.images);return n?e.images=n:delete e.images,e}if(e.t==="error")return e.message=Ae(e.message,2e3),e;if(e.t==="todos")return e.items=vm(e.items),e;if(e.t==="ask_question")return e.id=Ae(e.id,80),e.title=Ae(e.title,80),e.questions=g_(e.questions),e.answers=y_(e.answers,e.questions),e;if(e.t==="plan"){e.planFile=Ae(e.planFile,1e3),typeof e.text=="string"&&(e.text=Ae(e.text,Bc)),typeof e.think=="string"&&(e.think=Ae(e.think,Sm));let n=vm(e.todos);return n.length?e.todos=n:delete e.todos,e}return typeof e.text=="string"&&(e.text=Ae(e.text,Bc)),typeof e.think=="string"&&(e.think=Ae(e.think,Sm)),e}function Kc(t){return{id:t.id,title:t.title||zo(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 Ke(t,e){this.dir=t,this.max=e&&e.max||Tm,this._listCache=null,this._listJson="",this._listMtime=0,this._wq=null,this._removed=new Set,this._syncGen=0,this._tmpSeq=0,this._cleanupTmp()}Ke.prototype._cleanupTmp=function(){let t=[];try{t=Wt.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{Wt.unlinkSync(Uc.join(this.dir,n)),e++}catch{}}return e};Ke.prototype.setMax=function(t){let e=Number(t);return isFinite(e)&&e>=1&&(this.max=Math.floor(e)),this.max};Ke.prototype.fileOf=function(t){return Uc.join(this.dir,String(t)+".json")};Ke.prototype.indexPath=function(){return Uc.join(this.dir,"index.json")};Ke.prototype._ensureDir=function(){Wt.mkdirSync(this.dir,{recursive:!0,mode:448})};Ke.prototype._write=function(t,e){this._ensureDir();let n=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(Wt.writeFileSync(n,e,{mode:384}),Wt.existsSync(t))try{Wt.copyFileSync(t,t+".bak")}catch{}Wt.renameSync(n,t)};Ke.prototype._writeAsync=async function(t,e,n){await Gr.mkdir(this.dir,{recursive:!0,mode:448});let s=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(await Gr.writeFile(s,e,{mode:384}),typeof n=="function"&&!n()){try{await Gr.unlink(s)}catch{}return!1}try{await Gr.access(t);try{await Gr.copyFile(t,t+".bak")}catch{}}catch{}return await Gr.rename(s,t),!0};Ke.prototype._mtimeOf=function(t){try{return Wt.statSync(t).mtimeMs}catch{return 0}};Ke.prototype._ids=function(){let t=[];try{t=Wt.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};Ke.prototype.rebuildIndex=function(){let t=[];for(let n of this._ids()){let s=this.load(n);s&&t.push(Kc(s))}t.sort(function(n,s){return String(s.updatedAt).localeCompare(String(n.updatedAt))});let e=JSON.stringify({v:1,sessions:t})+`
5
+ `)}function zv(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 Gv(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 Jv(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(Gv(t,a,l))}return n.forEach(function(r,o){r.id="h"+(o+1)}),n}function $v(t,e){let n=Ho(t),s=Ho(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=zv(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 Jv(d)}function Xv(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 Vv(t,e){let n=Ho(t),s=[];for(let r of e.lines)r.t!=="-"&&s.push(r.s);return Rc(n.slice(0,e.oldStart).concat(s,n.slice(e.oldStart+e.oldLines)))}function Yv(t,e){let n=Ho(t),s=[];for(let r of e.lines)r.t!=="+"&&s.push(r.s);return Rc(n.slice(0,e.newStart).concat(s,n.slice(e.newStart+e.newLines)))}function Zv(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 Qv(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}}xm.exports={CONTEXT:3,splitLines:Ho,joinLines:Rc,computeHunks:$v,stats:Xv,applyHunkToBaseline:Vv,revertHunkText:Yv,revertHunkEdit:Zv,hunkRanges:Qv}});var Om=Z((XF,Am)=>{var Wt=require("fs"),Gr=require("fs").promises,Uc=require("path"),_m=500,Bc=2e4,Sm=2e4,e_=8e4,t_=4e3,n_=20,s_=40,Tm=50,r_=4,o_=5*1024*1024,i_={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},a_=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/;function as(t){return(t<10?"0":"")+t}function Wc(t){let e=t||new Date;return e.getFullYear()+as(e.getMonth()+1)+as(e.getDate())+"-"+as(e.getHours())+as(e.getMinutes())+as(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Ae(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function l_(t){if(!Array.isArray(t)||!t.length)return;let e=[];for(let n of t.slice(0,r_)){if(!n||typeof n!="object")continue;let s=Ae(n.file,120),r=String(n.mime==null?"":n.mime),o=i_[r];if(!o||!a_.test(s)||s.slice(s.lastIndexOf(".")+1)!==o)continue;let i=Math.min(o_,Math.floor(Number(n.bytes)||0));i<=0||e.push({file:s,mime:r,bytes:i})}return e.length?e:void 0}function c_(t){let e=t?new Date(t):new Date;return isNaN(e.getTime())?"":as(e.getMonth()+1)+"-"+as(e.getDate())+" "+as(e.getHours())+":"+as(e.getMinutes())}var Mm="\u65B0\u4F1A\u8BDD";function u_(t){typeof t=="string"&&t&&(Mm=t)}function zo(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||Mm)+" \xB7 "+c_(e)}var d_=40,f_={pending:1,in_progress:1,completed:1,cancelled:1},p_=4,m_=6;function vm(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,d_)){if(!n||typeof n!="object")continue;let s=Ae(n.id,64).trim(),r=Ae(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:f_[o]?o:"pending"})}return e}function h_(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,m_)){if(!n||typeof n!="object")continue;let s=Ae(n.id,64).trim(),r=Ae(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 g_(t){if(!Array.isArray(t)||!t.length)return[];let e=[];for(let n of t.slice(0,p_)){if(!n||typeof n!="object")continue;let s=Ae(n.id,64).trim(),r=Ae(n.prompt,240).trim(),o=h_(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 y_(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=Ae(c[f],64).trim();!p||!a[p]||d[p]||(d[p]=1,u.push(p))}u.length&&(r[i.id]=u)}else{let c=Ae(Array.isArray(l)?l[0]:l,64).trim();c&&a[c]&&(r[i.id]=c)}}return r}function Cm(t){let e=Object.assign({},t);if(e.t==="tool")return e.name=Ae(e.name,60),e.path=Ae(e.path,300),e.result=Ae(e.result,t_),e.ok=e.ok!==!1,e;if(e.t==="sources")return e.items=(e.items||[]).slice(0,n_).map(function(n){return{title:Ae(n&&n.title,200),url:Ae(n&&n.url,500),siteName:Ae(n&&n.siteName,80),date:Ae(n&&n.date,40)}}),e.query=Ae(e.query,200),e;if(e.t==="refs")return e.refs=(e.refs||[]).slice(0,s_).map(function(n){return{kind:n&&n.kind==="selection"?"selection":"file",path:Ae(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:Ae(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=Ae(e.model,120),delete e.prefixHint,e}if(e.t==="user"){e.text=Ae(e.text,Bc),e.web=!!e.web,e.ctx!=null&&(e.ctx=Ae(e.ctx,e_)),e.exec&&(e.exec=!0);let n=l_(e.images);return n?e.images=n:delete e.images,e}if(e.t==="error")return e.message=Ae(e.message,2e3),e;if(e.t==="todos")return e.items=vm(e.items),e;if(e.t==="ask_question")return e.id=Ae(e.id,80),e.title=Ae(e.title,80),e.questions=g_(e.questions),e.answers=y_(e.answers,e.questions),e;if(e.t==="plan"){e.planFile=Ae(e.planFile,1e3),typeof e.text=="string"&&(e.text=Ae(e.text,Bc)),typeof e.think=="string"&&(e.think=Ae(e.think,Sm));let n=vm(e.todos);return n.length?e.todos=n:delete e.todos,e}return typeof e.text=="string"&&(e.text=Ae(e.text,Bc)),typeof e.think=="string"&&(e.think=Ae(e.think,Sm)),e}function Kc(t){return{id:t.id,title:t.title||zo(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 Ke(t,e){this.dir=t,this.max=e&&e.max||Tm,this._listCache=null,this._listJson="",this._listMtime=0,this._wq=null,this._removed=new Set,this._syncGen=0,this._tmpSeq=0,this._cleanupTmp()}Ke.prototype._cleanupTmp=function(){let t=[];try{t=Wt.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{Wt.unlinkSync(Uc.join(this.dir,n)),e++}catch{}}return e};Ke.prototype.setMax=function(t){let e=Number(t);return isFinite(e)&&e>=1&&(this.max=Math.floor(e)),this.max};Ke.prototype.fileOf=function(t){return Uc.join(this.dir,String(t)+".json")};Ke.prototype.indexPath=function(){return Uc.join(this.dir,"index.json")};Ke.prototype._ensureDir=function(){Wt.mkdirSync(this.dir,{recursive:!0,mode:448})};Ke.prototype._write=function(t,e){this._ensureDir();let n=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(Wt.writeFileSync(n,e,{mode:384}),Wt.existsSync(t))try{Wt.copyFileSync(t,t+".bak")}catch{}Wt.renameSync(n,t)};Ke.prototype._writeAsync=async function(t,e,n){await Gr.mkdir(this.dir,{recursive:!0,mode:448});let s=t+".tmp-"+process.pid+"-"+ ++this._tmpSeq;if(await Gr.writeFile(s,e,{mode:384}),typeof n=="function"&&!n()){try{await Gr.unlink(s)}catch{}return!1}try{await Gr.access(t);try{await Gr.copyFile(t,t+".bak")}catch{}}catch{}return await Gr.rename(s,t),!0};Ke.prototype._mtimeOf=function(t){try{return Wt.statSync(t).mtimeMs}catch{return 0}};Ke.prototype._ids=function(){let t=[];try{t=Wt.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};Ke.prototype.rebuildIndex=function(){let t=[];for(let n of this._ids()){let s=this.load(n);s&&t.push(Kc(s))}t.sort(function(n,s){return String(s.updatedAt).localeCompare(String(n.updatedAt))});let e=JSON.stringify({v:1,sessions:t})+`
6
6
  `;try{this._write(this.indexPath(),e),this._listJson=e,this._listMtime=this._mtimeOf(this.indexPath())}catch{}return this._listCache=t,t};Ke.prototype.readIndex=function(){if(this._listCache&&this._mtimeOf(this.indexPath())===this._listMtime)return this._listCache;let t=null;try{let e=Wt.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()};Ke.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})+`
7
7
  `;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};Ke.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||""))})};Ke.prototype.create=function(t){let e=new Date;return{v:1,id:Wc(e),title:"",createdAt:e.toISOString(),updatedAt:e.toISOString(),root:String(t??""),modelKey:"",mode:"",items:[]}};Ke.prototype.load=function(t){if(!/^[A-Za-z0-9_-]+$/.test(String(t||"")))return null;let e=null;try{e=JSON.parse(Wt.readFileSync(this.fileOf(t),"utf8"))}catch{e=null}if(!e)try{e=JSON.parse(Wt.readFileSync(this.fileOf(t)+".bak","utf8"))}catch{e=null}return!e||!e.id?null:(Array.isArray(e.items)||(e.items=[]),e.title||(e.title=zo(e.items,e.createdAt)),e)};Ke.prototype._dropFiles=function(t){let e=this.fileOf(t);for(let n of[e,e+".bak",e+".tmp"])try{Wt.existsSync(n)&&Wt.unlinkSync(n)}catch{}};Ke.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};Ke.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=zo(t.items,t.createdAt)),t.updatedAt=new Date().toISOString()};Ke.prototype._updateList=function(t){let e=Kc(t),n=this.readIndex().filter(function(s){return s.id!==t.id});return n.push(e),this._listCache=this._prune(n),e};Ke.prototype.save=function(t){this._prepare(t);let e=JSON.stringify(t)+`
8
8
  `;return t.bytes=e.length,this._syncGen++,this._write(this.fileOf(t.id),e),this._updateList(t),this.writeIndex(this._listCache),t};Ke.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)+`
@@ -11,23 +11,23 @@
11
11
  #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(Go(" Foo bar foo "))===JSON.stringify(["foo","bar"])),n("terms.empty",Go(" ").length===0),n("terms.cap",Go("a b c d e f g h",3).length===3);let i=Zt(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",Zt(r,"\u80FD\u8017\u62A5\u544A\u5206\u6790",{load:o}).results.length===0);let a=Zt(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=Zt(r,"read_file",{load:o});n("body.toolName",l.results.length===1&&l.results[0].id==="a"&&l.results[0].count===1);let c=Zt(r,"#selection",{load:o});n("body.ctx",c.results.length===1&&c.results[0].id==="a");let u=Zt(r,"\u53D8\u9891\u6CF5 ETIMEDOUT",{load:o});n("and.crossSessionMiss",u.results.length===0,JSON.stringify(u.results));let d=Zt(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",Zt(r,"\u4E0D\u5B58\u5728\u7684\u8BCD",{load:o}).results.length===0),n("emptyQuery",Zt(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=Zt(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=Zt(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 k=Zt(r,"\u80FD\u8017",{load:function(g){if(g==="a")throw new Error("boom");return o(g)}});n("load.throwing",k.results.length===0&&k.ms>=0);let x=Fa("x".repeat(300)+`
12
12
  \u5173\u952E\u8BCD
13
13
  `+"y".repeat(300),"\u5173\u952E\u8BCD",60);n("snippet.ellipsis",x.indexOf("\u2026")===0&&x.slice(-1)==="\u2026",x),n("snippet.flat",x.indexOf(`
14
- `)<0),n("snippet.hasTerm",x.indexOf("\u5173\u952E\u8BCD")>=0),n("snippet.shortText",Fa("\u77ED\u6587\u672C","\u77ED",60)==="\u77ED\u6587\u672C");let T=zc({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 Vc=Z((YF,Rm)=>{var Ia={enabled:!0,maxTurns:8,maxChars:12e3,maxItemChars:6e3},Jc="\u2026[\u5DF2\u622A\u65AD]",jm=2e4,Nm=2e3,S_=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,v_={"image/png":1,"image/jpeg":1,"image/webp":1,"image/gif":1};function __(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file),n=String(t.mime==null?"":t.mime);if(!S_.test(e)||e.length>120||!v_[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0?null:{file:e,mime:n,bytes:s}}function T_(t,e){let n=[];for(let s of Array.isArray(t)?t:[]){let r=__(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 Xc(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+=Nm));return e}return String(t??"").length}function vs(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Jc.length?n.slice(0,e):n.slice(0,e-Jc.length)+Jc:""}function $c(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function M_(t){let e=t||{};return{enabled:e.enabled!==!1,maxTurns:$c(e.maxTurns,Ia.maxTurns),maxChars:$c(e.maxChars,Ia.maxChars),maxItemChars:$c(e.maxItemChars,Ia.maxItemChars),dropTailAssistant:!!e.dropTailAssistant,resolveImage:typeof e.resolveImage=="function"?e.resolveImage:function(){return""},spill:e.spill&&typeof e.spill=="object"?e.spill:null}}function Fm(t){return!t||!t.t?"":t.t==="user"?"user":t.narr?"":t.t==="text"||t.t==="plan"?"assistant":""}function Im(t){let e=0;for(let n of t||[])e+=Xc(n&&n.content);return e}function C_(t){return t?t.ctx!=null&&t.ctx!==""?t.ctx:t.text:""}function Lm(t,e,n){let s=typeof n=="function"?n:function(){return""},r=[];for(let o of t||[]){let i=Fm(o);if(!i)continue;let a=o.ctx!=null&&o.ctx!=="",l=a?Math.max(e,jm):e,c=vs(a?o.ctx:o.text,l).trim(),u=i==="user"?T_(o.images,s):[],d=i==="user"?Math.max(e,jm):e;if(u.length){let p=r[r.length-1];p&&p.role===i&&typeof p.content=="string"?p.content=[{type:"text",text:vs(p.content+`
14
+ `)<0),n("snippet.hasTerm",x.indexOf("\u5173\u952E\u8BCD")>=0),n("snippet.shortText",Fa("\u77ED\u6587\u672C","\u77ED",60)==="\u77ED\u6587\u672C");let T=zc({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 Vc=Z((YF,Rm)=>{var Ia={enabled:!0,maxTurns:8,maxChars:12e3,maxItemChars:6e3},Jc="\u2026[\u5DF2\u622A\u65AD]",jm=2e4,Nm=2e3,S_=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,v_={"image/png":1,"image/jpeg":1,"image/webp":1,"image/gif":1};function __(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file),n=String(t.mime==null?"":t.mime);if(!S_.test(e)||e.length>120||!v_[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0?null:{file:e,mime:n,bytes:s}}function T_(t,e){let n=[];for(let s of Array.isArray(t)?t:[]){let r=__(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 Xc(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+=Nm));return e}return String(t??"").length}function _s(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Jc.length?n.slice(0,e):n.slice(0,e-Jc.length)+Jc:""}function $c(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function M_(t){let e=t||{};return{enabled:e.enabled!==!1,maxTurns:$c(e.maxTurns,Ia.maxTurns),maxChars:$c(e.maxChars,Ia.maxChars),maxItemChars:$c(e.maxItemChars,Ia.maxItemChars),dropTailAssistant:!!e.dropTailAssistant,resolveImage:typeof e.resolveImage=="function"?e.resolveImage:function(){return""},spill:e.spill&&typeof e.spill=="object"?e.spill:null}}function Fm(t){return!t||!t.t?"":t.t==="user"?"user":t.narr?"":t.t==="text"||t.t==="plan"?"assistant":""}function Im(t){let e=0;for(let n of t||[])e+=Xc(n&&n.content);return e}function C_(t){return t?t.ctx!=null&&t.ctx!==""?t.ctx:t.text:""}function Lm(t,e,n){let s=typeof n=="function"?n:function(){return""},r=[];for(let o of t||[]){let i=Fm(o);if(!i)continue;let a=o.ctx!=null&&o.ctx!=="",l=a?Math.max(e,jm):e,c=_s(a?o.ctx:o.text,l).trim(),u=i==="user"?T_(o.images,s):[],d=i==="user"?Math.max(e,jm):e;if(u.length){let p=r[r.length-1];p&&p.role===i&&typeof p.content=="string"?p.content=[{type:"text",text:_s(p.content+`
15
15
 
16
- `+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=vs(p.text+`
16
+ `+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=_s(p.text+`
17
17
 
18
- `+c,d):f.content.unshift({type:"text",text:vs(c,d)})}else f.content=vs(f.content+`
18
+ `+c,d):f.content.unshift({type:"text",text:_s(c,d)})}else f.content=_s(f.content+`
19
19
 
20
- `+c,d);else r.push({role:i,content:c})}return r}function Dm(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 A_(t,e,n){let s=Im(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(Xc(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+=Nm));if(l<=d){i++;continue}let f=[],p=vs(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+=Xc(f);continue}let c=vs(a.content,l);t.push({role:a.role,content:c}),o+=c.length}return{chars:o,dropped:i}}function O_(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 E_(t,e){let n=M_(e),s={messages:[],turns:0,chars:0,dropped:0,enabled:n.enabled,spilledTurns:0,spillDigest:"",spillIds:[]};if(!n.enabled)return s;let r=Lm(t,n.maxItemChars,n.resolveImage);if(n.dropTailAssistant)for(;r.length&&r[r.length-1].role==="assistant";)r.pop();let o=Dm(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 k=o[h],x=Im(k);if(!(i.length===0)&&a+x>n.maxChars){c=h+1;break}let g=[],v=A_(g,k,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 k of i[h])u.push(k);let d=[],f=[],p=n.spill&&typeof n.spill=="object"?n.spill:null;for(let h=0;h<c;h++){let k=O_(o[h]);for(let x of k)d.push(x);if(p&&typeof p.put=="function"&&o[h]&&o[h].length)try{let x=typeof p.newId=="function"?p.newId():"sp_mem_"+h,T=o[h].map(function(g){let v=g.role||"",y=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+": "+y}).join(`
20
+ `+c,d);else r.push({role:i,content:c})}return r}function Dm(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 A_(t,e,n){let s=Im(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(Xc(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+=Nm));if(l<=d){i++;continue}let f=[],p=_s(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+=Xc(f);continue}let c=_s(a.content,l);t.push({role:a.role,content:c}),o+=c.length}return{chars:o,dropped:i}}function O_(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 E_(t,e){let n=M_(e),s={messages:[],turns:0,chars:0,dropped:0,enabled:n.enabled,spilledTurns:0,spillDigest:"",spillIds:[]};if(!n.enabled)return s;let r=Lm(t,n.maxItemChars,n.resolveImage);if(n.dropTailAssistant)for(;r.length&&r[r.length-1].role==="assistant";)r.pop();let o=Dm(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 k=o[h],x=Im(k);if(!(i.length===0)&&a+x>n.maxChars){c=h+1;break}let g=[],v=A_(g,k,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 k of i[h])u.push(k);let d=[],f=[],p=n.spill&&typeof n.spill=="object"?n.spill:null;for(let h=0;h<c;h++){let k=O_(o[h]);for(let x of k)d.push(x);if(p&&typeof p.put=="function"&&o[h]&&o[h].length)try{let x=typeof p.newId=="function"?p.newId():"sp_mem_"+h,T=o[h].map(function(g){let v=g.role||"",y=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+": "+y}).join(`
21
21
 
22
22
  `);p.put(x,T,{kind:"memory_turn",turnIndex:h}),f.push(x)}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 k of d){let x=k.role==="assistant"?"\u52A9\u624B":k.role==="user"?"\u7528\u6237":k.role,T=String(k.summary||"").slice(0,160);T&&h.push("- "+x+"\uFF1A"+T)}m=h.join(`
23
23
  `).slice(0,1200)}return{messages:u,turns:i.length,chars:a,dropped:l,enabled:!0,spilledTurns:c,spillDigest:m,spillIds:f}}function P_(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||"")+`
24
24
 
25
- `+n:s.push({role:"user",content:n}),s}Rm.exports={DEFAULTS:Ia,build:E_,pushUser:P_,_clipText:vs,_roleOf:Fm,_textOf:C_,_flatten:Lm,_groupTurns:Dm}});var Um=Z((ZF,Bm)=>{var Zc=["<think>","<thinking>","[think]"],La=["</think>","</thinking>","[/think]"],qm=Math.max.apply(null,Zc.concat(La).map(function(t){return t.length}))-1;function Yc(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 j_(t){let e=t||{},n=e.startInThink===!0,s=n,r="",o="",i="",a="",l=n?"think":"answer",c=!n;function u(k){if(k&&(r+=k,e.onContent))try{e.onContent(k)}catch{}}function d(k){if(k&&(i+=k,e.onReasoning))try{e.onReasoning(k)}catch{}}function f(){if(!a)return;let k=a;a="",l==="think"?d(k):u(k)}function p(k){if(k==null||k==="")return;let x=String(k);for(o+=x,a+=x;a;){if(l==="think"){let y=Yc(a,La);if(!y){let S=a.length-qm;if(S<=0)return;d(a.slice(0,S)),a=a.slice(S);continue}d(a.slice(0,y.at)),a=a.slice(y.at+y.tag.length),l="answer",c=!1,s=!1;continue}if(!c){u(a),a="";return}let T=Yc(a,Zc),g=Yc(a,La);if(!T&&!g){let y=a.length-qm;if(y<=0)return;u(a.slice(0,y)),a=a.slice(y);continue}if(T&&(!g||T.at<=g.at)){let y=a.slice(0,T.at);y.trim()&&u(y),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(k){k==null||k===""||(s&&(s=!1,l="answer",c=!1,f()),d(String(k)))}function h(){f()}return{pushContent:p,pushReasoning:m,end:h,get content(){return r},get reasoning(){return i},get rawContent(){return o}}}Bm.exports={newParser:j_,OPEN_TAGS:Zc,CLOSE_TAGS:La}});var nu=Z((QF,Xm)=>{var _s={ratio:.35,minRatio:.2,maxRatio:1,keepTail:8,labelMax:60,omittedArgs:'{"_omitted":true}'},Qc="\u2026[\u5DF2\u622A\u65AD]",N_=2e3;function Hm(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+=N_));return e}return String(t??"").length}function F_(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Qc.length?n.slice(0,e):n.slice(0,e-Qc.length)+Qc:""}function Wm(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function zm(t){let e=Number(t);return!isFinite(e)||e<=0?_s.ratio:Math.min(_s.maxRatio,Math.max(_s.minRatio,e))}function eu(t){if(!t||typeof t!="object")return 0;let e=Hm(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 tu(t){let e=0;for(let n of t||[])e+=eu(n);return e}function I_(t){let e=Array.isArray(t)?t:[];if(!e.length)return 0;try{return String(JSON.stringify(e)).length}catch{return 0}}function L_(t,e){let n=Number(t);return!isFinite(n)||n<=0?0:Math.ceil(n*zm(e))}function Gm(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,_s.labelMax)}for(let s of Object.keys(e))if(typeof e[s]=="string"&&e[s].trim())return e[s].trim().slice(0,_s.labelMax);return""}function Da(t){if(Array.isArray(t))return t.map(Da);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Da(t[n]);return e}return t}function D_(t,e){let n=e;if(typeof n=="string")try{n=JSON.parse(n)}catch{n=n}try{return String(t??"")+"|"+JSON.stringify(Da(n??{}))}catch{return String(t??"")+"|"+String(n)}}function Jm(t){let e=String(t??"");if(!e)return!0;try{let n=JSON.parse(e);return!!(n&&n._omitted===!0)}catch{return!1}}function $m(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:Gm(o)})}}return e}function R_(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 q_(t){let e=t&&t.spill;return!e||typeof e!="object"||typeof e.put!="function"?null:e}function Km(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Wm(n.keepTail,_s.keepTail),o=tu(s),i=Math.max(0,s.length-r),a=$m(s),l=q_(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 k=Object.assign({},h);if(h.role==="tool"){let x=String(h.content==null?"":h.content);if(x&&x.indexOf("[\u5DF2\u7701\u7565\uFF1A")!==0){let T=a.get(String(h.tool_call_id||"")),g=R_(T,x.length);if(l){let v=Wm(n.summaryMax,240),y=typeof l.summarize=="function"?l.summarize(x,v):x.replace(/\s+/g," ").trim().slice(0,v),S=typeof l.newId=="function"?l.newId():"sp_"+m;try{l.put(S,x,{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,x.length,y,S):g.slice(0,-1)+"\uFF1B\u6458\u8981\uFF1A"+y+"\uFF1B\u5B8C\u6574\u7ED3\u679C id="+S+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}k.content=g,c++}}if(Array.isArray(h.tool_calls)&&h.tool_calls.length){let x=!1;k.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(Jm(g))return T;x=!0;let v=Object.assign({},T.function,{arguments:_s.omittedArgs});return Object.assign({},T,{function:v})}),x&&u++}f.push(k)}let p=tu(f);return{messages:f,beforeChars:o,afterChars:p,savedChars:o-p,omittedTools:c,omittedArgs:u,spilled:d,keptTail:Math.min(r,s.length)}}Xm.exports={DEFAULTS:_s,clipText:F_,contentChars:Hm,charsOfMessage:eu,charsOf:tu,charsOfTools:I_,estimateTokens:L_,ratioOf:zm,labelOf:Gm,canonical:Da,fingerprint:D_,compact:Km,_charsOfMessage:eu,_compact:Km,_callMap:$m,_isOmittedArgs:Jm}});var sh=Z((eI,lu)=>{var Qt=nu(),Jr=32768,ou=16384,iu=8192,su="\u2026",Vm={small:{desc:96,param:32},tiny:{desc:76,param:20}},B_={small:["run_command_start","run_command_poll","run_command_stop"],tiny:["run_command_start","run_command_poll","run_command_stop"]},Vo={window:65536,tierFull:Jr,tierMid:ou,tierSmall:iu,summaryReserve:240,summaryMax:220,keepRecent:2};function ru(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Ra(t,e){let n=String(t??""),s=Number(e);return!isFinite(s)||s<=0?"":n.length<=s?n:s<=su.length?n.slice(0,s):n.slice(0,s-su.length)+su}function au(t,e){let n=String(t??"").trim();if(!n)return"";let s=n.length;for(let l of["\u3002","\uFF1B",`
25
+ `+n:s.push({role:"user",content:n}),s}Rm.exports={DEFAULTS:Ia,build:E_,pushUser:P_,_clipText:_s,_roleOf:Fm,_textOf:C_,_flatten:Lm,_groupTurns:Dm}});var Um=Z((ZF,Bm)=>{var Zc=["<think>","<thinking>","[think]"],La=["</think>","</thinking>","[/think]"],qm=Math.max.apply(null,Zc.concat(La).map(function(t){return t.length}))-1;function Yc(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 j_(t){let e=t||{},n=e.startInThink===!0,s=n,r="",o="",i="",a="",l=n?"think":"answer",c=!n;function u(k){if(k&&(r+=k,e.onContent))try{e.onContent(k)}catch{}}function d(k){if(k&&(i+=k,e.onReasoning))try{e.onReasoning(k)}catch{}}function f(){if(!a)return;let k=a;a="",l==="think"?d(k):u(k)}function p(k){if(k==null||k==="")return;let x=String(k);for(o+=x,a+=x;a;){if(l==="think"){let y=Yc(a,La);if(!y){let S=a.length-qm;if(S<=0)return;d(a.slice(0,S)),a=a.slice(S);continue}d(a.slice(0,y.at)),a=a.slice(y.at+y.tag.length),l="answer",c=!1,s=!1;continue}if(!c){u(a),a="";return}let T=Yc(a,Zc),g=Yc(a,La);if(!T&&!g){let y=a.length-qm;if(y<=0)return;u(a.slice(0,y)),a=a.slice(y);continue}if(T&&(!g||T.at<=g.at)){let y=a.slice(0,T.at);y.trim()&&u(y),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(k){k==null||k===""||(s&&(s=!1,l="answer",c=!1,f()),d(String(k)))}function h(){f()}return{pushContent:p,pushReasoning:m,end:h,get content(){return r},get reasoning(){return i},get rawContent(){return o}}}Bm.exports={newParser:j_,OPEN_TAGS:Zc,CLOSE_TAGS:La}});var nu=Z((QF,Xm)=>{var Ts={ratio:.35,minRatio:.2,maxRatio:1,keepTail:8,labelMax:60,omittedArgs:'{"_omitted":true}'},Qc="\u2026[\u5DF2\u622A\u65AD]",N_=2e3;function Hm(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+=N_));return e}return String(t??"").length}function F_(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=Qc.length?n.slice(0,e):n.slice(0,e-Qc.length)+Qc:""}function Wm(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function zm(t){let e=Number(t);return!isFinite(e)||e<=0?Ts.ratio:Math.min(Ts.maxRatio,Math.max(Ts.minRatio,e))}function eu(t){if(!t||typeof t!="object")return 0;let e=Hm(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 tu(t){let e=0;for(let n of t||[])e+=eu(n);return e}function I_(t){let e=Array.isArray(t)?t:[];if(!e.length)return 0;try{return String(JSON.stringify(e)).length}catch{return 0}}function L_(t,e){let n=Number(t);return!isFinite(n)||n<=0?0:Math.ceil(n*zm(e))}function Gm(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,Ts.labelMax)}for(let s of Object.keys(e))if(typeof e[s]=="string"&&e[s].trim())return e[s].trim().slice(0,Ts.labelMax);return""}function Da(t){if(Array.isArray(t))return t.map(Da);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Da(t[n]);return e}return t}function D_(t,e){let n=e;if(typeof n=="string")try{n=JSON.parse(n)}catch{n=n}try{return String(t??"")+"|"+JSON.stringify(Da(n??{}))}catch{return String(t??"")+"|"+String(n)}}function Jm(t){let e=String(t??"");if(!e)return!0;try{let n=JSON.parse(e);return!!(n&&n._omitted===!0)}catch{return!1}}function $m(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:Gm(o)})}}return e}function R_(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 q_(t){let e=t&&t.spill;return!e||typeof e!="object"||typeof e.put!="function"?null:e}function Km(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=Wm(n.keepTail,Ts.keepTail),o=tu(s),i=Math.max(0,s.length-r),a=$m(s),l=q_(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 k=Object.assign({},h);if(h.role==="tool"){let x=String(h.content==null?"":h.content);if(x&&x.indexOf("[\u5DF2\u7701\u7565\uFF1A")!==0){let T=a.get(String(h.tool_call_id||"")),g=R_(T,x.length);if(l){let v=Wm(n.summaryMax,240),y=typeof l.summarize=="function"?l.summarize(x,v):x.replace(/\s+/g," ").trim().slice(0,v),S=typeof l.newId=="function"?l.newId():"sp_"+m;try{l.put(S,x,{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,x.length,y,S):g.slice(0,-1)+"\uFF1B\u6458\u8981\uFF1A"+y+"\uFF1B\u5B8C\u6574\u7ED3\u679C id="+S+"\uFF0C\u9700\u8981\u65F6\u7528 read_spill]"}k.content=g,c++}}if(Array.isArray(h.tool_calls)&&h.tool_calls.length){let x=!1;k.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(Jm(g))return T;x=!0;let v=Object.assign({},T.function,{arguments:Ts.omittedArgs});return Object.assign({},T,{function:v})}),x&&u++}f.push(k)}let p=tu(f);return{messages:f,beforeChars:o,afterChars:p,savedChars:o-p,omittedTools:c,omittedArgs:u,spilled:d,keptTail:Math.min(r,s.length)}}Xm.exports={DEFAULTS:Ts,clipText:F_,contentChars:Hm,charsOfMessage:eu,charsOf:tu,charsOfTools:I_,estimateTokens:L_,ratioOf:zm,labelOf:Gm,canonical:Da,fingerprint:D_,compact:Km,_charsOfMessage:eu,_compact:Km,_callMap:$m,_isOmittedArgs:Jm}});var sh=Z((eI,lu)=>{var Qt=nu(),Jr=32768,ou=16384,iu=8192,su="\u2026",Vm={small:{desc:96,param:32},tiny:{desc:76,param:20}},B_={small:["run_command_start","run_command_poll","run_command_stop"],tiny:["run_command_start","run_command_poll","run_command_stop"]},Vo={window:65536,tierFull:Jr,tierMid:ou,tierSmall:iu,summaryReserve:240,summaryMax:220,keepRecent:2};function ru(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function Ra(t,e){let n=String(t??""),s=Number(e);return!isFinite(s)||s<=0?"":n.length<=s?n:s<=su.length?n.slice(0,s):n.slice(0,s-su.length)+su}function au(t,e){let n=String(t??"").trim();if(!n)return"";let s=n.length;for(let l of["\u3002","\uFF1B",`
26
26
  `]){let c=n.indexOf(l);c>0&&c<s&&(s=c+(l===`
27
- `?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?Ra(a,e):a}var U_={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},Ym=120;function Zm(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||U_[i]?l.description=au(a.description,e):delete l.description,o[i]=l}s.properties=o}return s}function $o(t,e){let n=Array.isArray(t)?t:[],s=Vm[e];if(!s)return n;let r=B_[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:au(i.description,s.desc),parameters:Zm(i.parameters,a?Math.max(s.param,Ym):s.param,a)})})})}function Qm(t,e){let n=isFinite(t)&&t>0?Math.floor(t):Vo.window,s=n>=Jr?"full":n>=ou?"mid":n>=iu?"small":"tiny";return e==="off"?{window:n,tier:"full"}:(e==="on"&&(s==="full"||s==="mid")&&(s="small"),{window:n,tier:s})}function Ts(t,e){let s=Qm(t,(e||{}).mode),r=s.window,o=s.tier;if(o==="full"||o==="mid"){let c=r>=Jr?8e4:Math.max(2e3,Math.floor(r*.3)),u=r>=Jr?4e4:Math.max(1500,Math.floor(c/2)),d=r>=Jr?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:Vm[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 eh(t,e){return String(t??"").length+Qt.charsOfTools(e)}function W_(t){let e=t&&t.function||{},n={};try{n=JSON.parse(e.arguments||"{}")}catch{n={}}let s=Qt.labelOf(n);return String(e.name||"\u5DE5\u5177")+(s?" "+s:"")}function th(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(W_(c));if(!l.length&&a.content){let c=String(a.content).replace(/\s+/g," ").trim();c&&n.push("\u8BF4\u660E\uFF1A"+Ra(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 Ra(o+" \u5DF2\u6267\u884C\uFF1A"+r.slice(0,6).join("\u3001"),e)}function nh(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 Xo(t,e,n){let s=n||{},r=Array.isArray(t)?t:[],o=Number(e),i=Qt.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=nh(r.slice(c));if(!d.length)return l(Qt.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 z=0;z<d.length;z++){let he=N+d[z].length;if(f>=N&&f<he){p=z;break}N=he}}let m=ru(s.summaryReserve,Vo.summaryReserve),h=ru(s.keepRecent,Vo.keepRecent),k=Qt.charsOf(u),x=p>=0?Qt.charsOf(d[p]):0,T=k+x,g=function(N){let z=d.length,he=0;for(let U=d.length-1;U>=0;U--){if(d[U].some(function(ke){return ke&&ke.role==="assistant"&&Array.isArray(ke.tool_calls)&&ke.tool_calls.length>0})){if(he>=N)break;he++}z=U}for(;z>0&&z<d.length&&d[z][0]&&d[z][0].role==="tool";)z--;let ne={};for(let U=z;U<d.length;U++)ne[U]=!0;p>=0&&(ne[p]=!0);let Y=[];for(let U=0;U<d.length;U++)ne[U]||Y.push({index:U,chars:Qt.charsOf(d[U])});let pe=k+x;for(let U=z;U<d.length;U++)U!==p&&(pe+=Qt.charsOf(d[U]));return{keepFrom:z,droppable:Y,fixed:pe}},v=null;for(let N=h;N>=0;N--){let z=g(N);if(z.fixed+(z.droppable.length?m:0)<=o){v=z;break}}if(!v)return l(T);let y=v.droppable,S=v.fixed;if(!y.length)return l(S);let _=0;for(let N of y)_+=N.chars;let C=0;for(;C<y.length&&S+_+m>o;)_-=y[C].chars,C++;if(S+_+m>o)return l(S+_);let A={};for(let N=0;N<C;N++)A[y[N].index]=!0;let D=[],G=[];for(let N=0;N<d.length;N++)A[N]?D.push(d[N]):G.push(d[N]);let H=th(D,ru(s.summaryMax,Vo.summaryMax)),q=u.slice();H&&q.push({role:"assistant",content:H});for(let N of G)for(let z of N)q.push(z);let fe=Qt.charsOf(q);return{ok:fe<=o,messages:q,dropped:C,savedChars:i-fe,summary:H,chars:fe,beforeChars:i,minChars:S}}lu.exports={DEFAULTS:Vo,TIERS:{full:Jr,mid:ou,small:iu},profile:Ts,tierOf:Qm,compactTools:$o,fixedChars:eh,squeeze:Xo,_firstSentence:au,_compactParams:Zm,_groupForSqueeze:nh,_summaryOf:th,_clip:Ra};if(require.main===lu){let t=0,e=[],n=function(_,C,A){if(C){t++;return}e.push(_+(A?" \u2192 "+A:""))};n("tier.4096",Ts(4096).tier==="tiny"),n("tier.8192",Ts(8192).tier==="small"),n("tier.16384",Ts(16384).tier==="mid"),n("tier.32768",Ts(32768).tier==="full"),n("tier.on",Ts(65536,{mode:"on"}).tier==="small"),n("tier.off",Ts(4096,{mode:"off"}).tier==="full");let s=[4096,8192,12288,16384,32768,65536],r=s.map(function(_){return Ts(_)}),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=Qt.charsOfTools(i),l=Qt.charsOfTools($o(i,"small")),c=Qt.charsOfTools($o(i,"tiny"));n("compact.smallShrinks",l<a*.8,l+" / "+a),n("compact.tinyShrinks",c<=l);let u=$o(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=$o([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<=Ym),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=Qt.charsOf(p),k=Xo(p,4e3),x=[];for(let _ of k.messages)for(let C of _.tool_calls||[])x.push(String(C.id));let T=k.messages.filter(function(_){return _.role==="tool"}).map(function(_){return String(_.tool_call_id)});n("squeeze.ok",k.ok,JSON.stringify({chars:k.chars,min:k.minChars})),n("squeeze.withinCap",k.chars<=4e3,String(k.chars)),n("squeeze.paired",x.length===T.length&&x.every(function(_){return T.indexOf(_)>=0})),n("squeeze.keepsSystem",k.messages[0]===p[0]),n("squeeze.keepsLastUser",k.messages[k.messages.length-1]===m),n("squeeze.hasSummary",k.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("squeeze.dropped",k.dropped>0&&k.savedChars>0),n("squeeze.noopWhenFits",Xo(p,h+10).dropped===0),n("squeeze.tinyCapFails",Xo(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=Xo(g,4e3,{keepRecent:2}),y=[];for(let _ of v.messages)for(let C of _.tool_calls||[])y.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",y.length===S.length&&y.every(function(_){return S.indexOf(_)>=0})),n("squeeze.soloKeepsUser",v.messages.some(function(_){return _===g[1]})),n("squeeze.soloKeepsRecent",y.indexOf("solo_19")>=0&&y.indexOf("solo_0")<0),n("squeeze.soloSummary",v.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("fixedChars",eh("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 ah=Z((tI,ih)=>{var Ms={summaryMax:240,digestItemMax:160,digestMax:1200,maxEntries:64,maxTotalChars:4e5,readMax:8e3,idPrefix:"sp_"},cu="\u2026[\u5DF2\u622A\u65AD]";function Yo(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function qa(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=cu.length?n.slice(0,e):n.slice(0,e-cu.length)+cu:""}function rh(t,e){let n=Yo(e,Ms.summaryMax),s=String(t??"").replace(/\s+/g," ").trim();return qa(s,n)}function oh(){return Ms.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function K_(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 H_(t,e){let n=Array.isArray(t)?t:[];if(!n.length)return"";let s=Yo(e,Ms.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=rh(o.summary||o.text||"",Ms.digestItemMax);a&&r.push("- "+i+"\uFF1A"+a)}return r.length<=1?"":qa(r.join(`
28
- `),s)}function z_(t){let e=t||{},n=Yo(e.maxEntries,Ms.maxEntries),s=Yo(e.maxTotalChars,Ms.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 k=String(p??"").trim()||oh(),x=String(m??""),T=x.length;if(r.has(k)){let v=r.get(k);o=Math.max(0,o-(v&&v.chars||0)),r.delete(k)}for(;r.size>=n||o+T>s&&r.size>0;)i();for(;T>s&&r.size>0;)i();let g={id:k,content:x,chars:T,at:Date.now(),meta:h&&typeof h=="object"?h:{}};return r.set(k,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 k=Yo(m,Ms.readMax),x=qa(h.content,k),T=h.content.length>x.length;return{ok:!0,id:h.id,chars:h.chars,truncated:T,meta:h.meta,content:x}}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}}ih.exports={DEFAULTS:Ms,summarize:rh,newId:oh,toolPlaceholder:K_,memoryDigestBlock:H_,createStore:z_,clipText:qa}});var dh=Z((nI,uh)=>{var{spawn:uu,execFile:G_}=require("child_process"),ft={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 J_(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function du(t,e,n){let s=Number(t);return isFinite(s)?Math.min(n,Math.max(e,Math.floor(s))):e}function ch(){return ft.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function Cs(t){return String(t??"").trim()||"_anon"}function Ba(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>ft.ringMaxBytes&&t.chunks.length>1;){let s=t.chunks.shift();t.ringBytes-=s.length}if(t.ringBytes>ft.ringMaxBytes&&t.chunks.length===1){let s=t.chunks[0];t.chunks[0]=s.slice(s.length-ft.ringMaxBytes),t.ringBytes=t.chunks[0].length}}}function $_(t,e){let n=du(e,1,ft.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 lh(t,e){if(!t||t.killed)return;let n=t.pid;if(!n){try{t.kill("SIGTERM")}catch{}return}if(process.platform==="win32"){try{G_("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 X_(t){let e=t||{},n=J_(e.maxRunning,ft.maxRunning)||ft.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(y){let S=Cs(y),_=o.get(S);return _||(_=new Map,o.set(S,_)),_}function a(y){let S=o.get(Cs(y));if(!S)return 0;let _=0;return S.forEach(function(C){C&&C.status==="running"&&_++}),_}function l(y,S){let _=String(S??"").trim();if(!_)return null;let C=o.get(Cs(y));return C&&C.get(_)||null}function c(y){let S=i(y),_=Date.now(),C=[];if(S.forEach(function(A,D){!A||A.status==="running"||(_-(A.endedAt||A.startedAt||0)>ft.keepDoneMs?S.delete(D):C.push(A))}),C.length>ft.keepDoneMax){C.sort(function(A,D){return(A.endedAt||0)-(D.endedAt||0)});for(let A=0;A<C.length-ft.keepDoneMax;A++)S.delete(C[A].id)}S.size===0&&o.delete(Cs(y))}function u(y,S,_){if(!y||y.status!=="running")return;y.status=S,y.code=typeof _=="number"?_:S==="exited"?0:-1,y.endedAt=Date.now(),y.timer&&(clearTimeout(y.timer),y.timer=null);let C=y.waiters||[];y.waiters=[];for(let A=0;A<C.length;A++)try{C[A]()}catch{}c(y.sessionId)}function d(y,S){if(!y)return{status:"missing",out_tail:"",elapsed_ms:0};let _=Date.now(),C=Math.max(0,_-(y.startedAt||_)),A=y.status==="running"&&y.deadline?Math.max(0,y.deadline-_):void 0,D={status:y.status,job_id:y.id,code:y.status==="running"?void 0:y.code,out_tail:$_(y,S??ft.tailCharsDefault),elapsed_ms:C,command:y.command};return A!=null&&(D.remaining_ms=A),D}function f(y,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(y)>=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 D=du(A.timeout_ms==null?ft.timeoutMsDefault:A.timeout_ms,ft.timeoutMsMin,ft.timeoutMsMax),G=String(A.cwd||A.root||process.cwd()),H=ch(),q=Date.now(),fe=q+D,N={id:H,sessionId:Cs(y),command:C,status:"running",code:void 0,startedAt:q,endedAt:0,deadline:fe,chunks:[],ringBytes:0,waiters:[],proc:null,timer:null,pid:0},z;try{let ne=/bash(\.exe)?$/i.test(String(s));process.platform==="win32"&&!ne?z=uu(s,["/d","/s","/c",C],{cwd:G,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):process.platform==="win32"&&ne?z=uu(s,["-lc",C],{cwd:G,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):z=uu(s,["-lc",C],{cwd:G,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),detached:!0,stdio:["ignore","pipe","pipe"]})}catch(ne){return{ok:!1,error:"spawn \u5931\u8D25\uFF1A"+(ne&&ne.message?ne.message:String(ne))}}N.proc=z,N.pid=z.pid||0,i(y).set(H,N);let he=function(ne){Ba(N,ne)};return z.stdout&&z.stdout.on("data",he),z.stderr&&z.stderr.on("data",function(ne){Ba(N,`
27
+ `?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?Ra(a,e):a}var U_={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},Ym=120;function Zm(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||U_[i]?l.description=au(a.description,e):delete l.description,o[i]=l}s.properties=o}return s}function $o(t,e){let n=Array.isArray(t)?t:[],s=Vm[e];if(!s)return n;let r=B_[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:au(i.description,s.desc),parameters:Zm(i.parameters,a?Math.max(s.param,Ym):s.param,a)})})})}function Qm(t,e){let n=isFinite(t)&&t>0?Math.floor(t):Vo.window,s=n>=Jr?"full":n>=ou?"mid":n>=iu?"small":"tiny";return e==="off"?{window:n,tier:"full"}:(e==="on"&&(s==="full"||s==="mid")&&(s="small"),{window:n,tier:s})}function Ms(t,e){let s=Qm(t,(e||{}).mode),r=s.window,o=s.tier;if(o==="full"||o==="mid"){let c=r>=Jr?8e4:Math.max(2e3,Math.floor(r*.3)),u=r>=Jr?4e4:Math.max(1500,Math.floor(c/2)),d=r>=Jr?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:Vm[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 eh(t,e){return String(t??"").length+Qt.charsOfTools(e)}function W_(t){let e=t&&t.function||{},n={};try{n=JSON.parse(e.arguments||"{}")}catch{n={}}let s=Qt.labelOf(n);return String(e.name||"\u5DE5\u5177")+(s?" "+s:"")}function th(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(W_(c));if(!l.length&&a.content){let c=String(a.content).replace(/\s+/g," ").trim();c&&n.push("\u8BF4\u660E\uFF1A"+Ra(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 Ra(o+" \u5DF2\u6267\u884C\uFF1A"+r.slice(0,6).join("\u3001"),e)}function nh(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 Xo(t,e,n){let s=n||{},r=Array.isArray(t)?t:[],o=Number(e),i=Qt.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=nh(r.slice(c));if(!d.length)return l(Qt.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 z=0;z<d.length;z++){let he=N+d[z].length;if(f>=N&&f<he){p=z;break}N=he}}let m=ru(s.summaryReserve,Vo.summaryReserve),h=ru(s.keepRecent,Vo.keepRecent),k=Qt.charsOf(u),x=p>=0?Qt.charsOf(d[p]):0,T=k+x,g=function(N){let z=d.length,he=0;for(let U=d.length-1;U>=0;U--){if(d[U].some(function(ke){return ke&&ke.role==="assistant"&&Array.isArray(ke.tool_calls)&&ke.tool_calls.length>0})){if(he>=N)break;he++}z=U}for(;z>0&&z<d.length&&d[z][0]&&d[z][0].role==="tool";)z--;let ne={};for(let U=z;U<d.length;U++)ne[U]=!0;p>=0&&(ne[p]=!0);let Y=[];for(let U=0;U<d.length;U++)ne[U]||Y.push({index:U,chars:Qt.charsOf(d[U])});let pe=k+x;for(let U=z;U<d.length;U++)U!==p&&(pe+=Qt.charsOf(d[U]));return{keepFrom:z,droppable:Y,fixed:pe}},v=null;for(let N=h;N>=0;N--){let z=g(N);if(z.fixed+(z.droppable.length?m:0)<=o){v=z;break}}if(!v)return l(T);let y=v.droppable,S=v.fixed;if(!y.length)return l(S);let _=0;for(let N of y)_+=N.chars;let C=0;for(;C<y.length&&S+_+m>o;)_-=y[C].chars,C++;if(S+_+m>o)return l(S+_);let A={};for(let N=0;N<C;N++)A[y[N].index]=!0;let D=[],G=[];for(let N=0;N<d.length;N++)A[N]?D.push(d[N]):G.push(d[N]);let H=th(D,ru(s.summaryMax,Vo.summaryMax)),q=u.slice();H&&q.push({role:"assistant",content:H});for(let N of G)for(let z of N)q.push(z);let fe=Qt.charsOf(q);return{ok:fe<=o,messages:q,dropped:C,savedChars:i-fe,summary:H,chars:fe,beforeChars:i,minChars:S}}lu.exports={DEFAULTS:Vo,TIERS:{full:Jr,mid:ou,small:iu},profile:Ms,tierOf:Qm,compactTools:$o,fixedChars:eh,squeeze:Xo,_firstSentence:au,_compactParams:Zm,_groupForSqueeze:nh,_summaryOf:th,_clip:Ra};if(require.main===lu){let t=0,e=[],n=function(_,C,A){if(C){t++;return}e.push(_+(A?" \u2192 "+A:""))};n("tier.4096",Ms(4096).tier==="tiny"),n("tier.8192",Ms(8192).tier==="small"),n("tier.16384",Ms(16384).tier==="mid"),n("tier.32768",Ms(32768).tier==="full"),n("tier.on",Ms(65536,{mode:"on"}).tier==="small"),n("tier.off",Ms(4096,{mode:"off"}).tier==="full");let s=[4096,8192,12288,16384,32768,65536],r=s.map(function(_){return Ms(_)}),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=Qt.charsOfTools(i),l=Qt.charsOfTools($o(i,"small")),c=Qt.charsOfTools($o(i,"tiny"));n("compact.smallShrinks",l<a*.8,l+" / "+a),n("compact.tinyShrinks",c<=l);let u=$o(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=$o([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<=Ym),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=Qt.charsOf(p),k=Xo(p,4e3),x=[];for(let _ of k.messages)for(let C of _.tool_calls||[])x.push(String(C.id));let T=k.messages.filter(function(_){return _.role==="tool"}).map(function(_){return String(_.tool_call_id)});n("squeeze.ok",k.ok,JSON.stringify({chars:k.chars,min:k.minChars})),n("squeeze.withinCap",k.chars<=4e3,String(k.chars)),n("squeeze.paired",x.length===T.length&&x.every(function(_){return T.indexOf(_)>=0})),n("squeeze.keepsSystem",k.messages[0]===p[0]),n("squeeze.keepsLastUser",k.messages[k.messages.length-1]===m),n("squeeze.hasSummary",k.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("squeeze.dropped",k.dropped>0&&k.savedChars>0),n("squeeze.noopWhenFits",Xo(p,h+10).dropped===0),n("squeeze.tinyCapFails",Xo(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=Xo(g,4e3,{keepRecent:2}),y=[];for(let _ of v.messages)for(let C of _.tool_calls||[])y.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",y.length===S.length&&y.every(function(_){return S.indexOf(_)>=0})),n("squeeze.soloKeepsUser",v.messages.some(function(_){return _===g[1]})),n("squeeze.soloKeepsRecent",y.indexOf("solo_19")>=0&&y.indexOf("solo_0")<0),n("squeeze.soloSummary",v.messages.some(function(_){return _.role==="assistant"&&!_.tool_calls&&_.content})),n("fixedChars",eh("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 ah=Z((tI,ih)=>{var Cs={summaryMax:240,digestItemMax:160,digestMax:1200,maxEntries:64,maxTotalChars:4e5,readMax:8e3,idPrefix:"sp_"},cu="\u2026[\u5DF2\u622A\u65AD]";function Yo(t,e){let n=Number(t);return isFinite(n)&&n>=1?Math.floor(n):e}function qa(t,e){let n=String(t??"");return e>0?n.length<=e?n:e<=cu.length?n.slice(0,e):n.slice(0,e-cu.length)+cu:""}function rh(t,e){let n=Yo(e,Cs.summaryMax),s=String(t??"").replace(/\s+/g," ").trim();return qa(s,n)}function oh(){return Cs.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function K_(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 H_(t,e){let n=Array.isArray(t)?t:[];if(!n.length)return"";let s=Yo(e,Cs.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=rh(o.summary||o.text||"",Cs.digestItemMax);a&&r.push("- "+i+"\uFF1A"+a)}return r.length<=1?"":qa(r.join(`
28
+ `),s)}function z_(t){let e=t||{},n=Yo(e.maxEntries,Cs.maxEntries),s=Yo(e.maxTotalChars,Cs.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 k=String(p??"").trim()||oh(),x=String(m??""),T=x.length;if(r.has(k)){let v=r.get(k);o=Math.max(0,o-(v&&v.chars||0)),r.delete(k)}for(;r.size>=n||o+T>s&&r.size>0;)i();for(;T>s&&r.size>0;)i();let g={id:k,content:x,chars:T,at:Date.now(),meta:h&&typeof h=="object"?h:{}};return r.set(k,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 k=Yo(m,Cs.readMax),x=qa(h.content,k),T=h.content.length>x.length;return{ok:!0,id:h.id,chars:h.chars,truncated:T,meta:h.meta,content:x}}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}}ih.exports={DEFAULTS:Cs,summarize:rh,newId:oh,toolPlaceholder:K_,memoryDigestBlock:H_,createStore:z_,clipText:qa}});var dh=Z((nI,uh)=>{var{spawn:uu,execFile:G_}=require("child_process"),ft={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 J_(t,e){let n=Number(t);return isFinite(n)&&n>=0?Math.floor(n):e}function du(t,e,n){let s=Number(t);return isFinite(s)?Math.min(n,Math.max(e,Math.floor(s))):e}function ch(){return ft.idPrefix+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,8)}function As(t){return String(t??"").trim()||"_anon"}function Ba(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>ft.ringMaxBytes&&t.chunks.length>1;){let s=t.chunks.shift();t.ringBytes-=s.length}if(t.ringBytes>ft.ringMaxBytes&&t.chunks.length===1){let s=t.chunks[0];t.chunks[0]=s.slice(s.length-ft.ringMaxBytes),t.ringBytes=t.chunks[0].length}}}function $_(t,e){let n=du(e,1,ft.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 lh(t,e){if(!t||t.killed)return;let n=t.pid;if(!n){try{t.kill("SIGTERM")}catch{}return}if(process.platform==="win32"){try{G_("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 X_(t){let e=t||{},n=J_(e.maxRunning,ft.maxRunning)||ft.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(y){let S=As(y),_=o.get(S);return _||(_=new Map,o.set(S,_)),_}function a(y){let S=o.get(As(y));if(!S)return 0;let _=0;return S.forEach(function(C){C&&C.status==="running"&&_++}),_}function l(y,S){let _=String(S??"").trim();if(!_)return null;let C=o.get(As(y));return C&&C.get(_)||null}function c(y){let S=i(y),_=Date.now(),C=[];if(S.forEach(function(A,D){!A||A.status==="running"||(_-(A.endedAt||A.startedAt||0)>ft.keepDoneMs?S.delete(D):C.push(A))}),C.length>ft.keepDoneMax){C.sort(function(A,D){return(A.endedAt||0)-(D.endedAt||0)});for(let A=0;A<C.length-ft.keepDoneMax;A++)S.delete(C[A].id)}S.size===0&&o.delete(As(y))}function u(y,S,_){if(!y||y.status!=="running")return;y.status=S,y.code=typeof _=="number"?_:S==="exited"?0:-1,y.endedAt=Date.now(),y.timer&&(clearTimeout(y.timer),y.timer=null);let C=y.waiters||[];y.waiters=[];for(let A=0;A<C.length;A++)try{C[A]()}catch{}c(y.sessionId)}function d(y,S){if(!y)return{status:"missing",out_tail:"",elapsed_ms:0};let _=Date.now(),C=Math.max(0,_-(y.startedAt||_)),A=y.status==="running"&&y.deadline?Math.max(0,y.deadline-_):void 0,D={status:y.status,job_id:y.id,code:y.status==="running"?void 0:y.code,out_tail:$_(y,S??ft.tailCharsDefault),elapsed_ms:C,command:y.command};return A!=null&&(D.remaining_ms=A),D}function f(y,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(y)>=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 D=du(A.timeout_ms==null?ft.timeoutMsDefault:A.timeout_ms,ft.timeoutMsMin,ft.timeoutMsMax),G=String(A.cwd||A.root||process.cwd()),H=ch(),q=Date.now(),fe=q+D,N={id:H,sessionId:As(y),command:C,status:"running",code:void 0,startedAt:q,endedAt:0,deadline:fe,chunks:[],ringBytes:0,waiters:[],proc:null,timer:null,pid:0},z;try{let ne=/bash(\.exe)?$/i.test(String(s));process.platform==="win32"&&!ne?z=uu(s,["/d","/s","/c",C],{cwd:G,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):process.platform==="win32"&&ne?z=uu(s,["-lc",C],{cwd:G,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),windowsHide:!0,stdio:["ignore","pipe","pipe"]}):z=uu(s,["-lc",C],{cwd:G,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"}),detached:!0,stdio:["ignore","pipe","pipe"]})}catch(ne){return{ok:!1,error:"spawn \u5931\u8D25\uFF1A"+(ne&&ne.message?ne.message:String(ne))}}N.proc=z,N.pid=z.pid||0,i(y).set(H,N);let he=function(ne){Ba(N,ne)};return z.stdout&&z.stdout.on("data",he),z.stderr&&z.stderr.on("data",function(ne){Ba(N,`
29
29
  [stderr]
30
- `),Ba(N,ne)}),z.on("error",function(ne){Ba(N,String(ne&&ne.message?ne.message:ne)),u(N,"exited",1)}),z.on("close",function(ne,Y){if(N.status!=="running")return;u(N,"exited",typeof ne=="number"?ne:Y?1:0)}),N.timer=setTimeout(function(){N.status==="running"&&(lh(N.proc,s),u(N,"timeout",-1))},D),N.timer&&typeof N.timer.unref=="function"&&N.timer.unref(),{ok:!0,job_id:H,pid:N.pid||void 0,started_at:q,timeout_ms:D}}function p(y,S,_){let C=_||{},A=l(y,S);if(!A)return Promise.resolve({ok:!0,status:"missing",job_id:String(S||""),out_tail:"",elapsed_ms:0});let D=du(C.wait_ms==null?0:C.wait_ms,0,ft.waitMsMax),G=C.tail_chars==null?ft.tailCharsDefault:C.tail_chars;return A.status!=="running"||D<=0?Promise.resolve(Object.assign({ok:!0},d(A,G))):new Promise(function(H){let q=!1,fe=function(){if(q)return;q=!0,clearTimeout(N);let z=A.waiters.indexOf(fe);z>=0&&A.waiters.splice(z,1),H(Object.assign({ok:!0},d(A,G)))};A.waiters.push(fe);let N=setTimeout(fe,D);typeof N.unref=="function"&&N.unref()})}function m(y,S){let _=l(y,S);return _?_.status!=="running"?{ok:!0,status:"already_done",job_id:_.id,final_status:_.status,code:_.code}:(lh(_.proc,s),u(_,"stopped",-1),{ok:!0,status:"stopped",job_id:_.id}):{ok:!1,status:"missing",job_id:String(S||"")}}function h(y){let S=o.get(Cs(y));if(!S)return{stopped:0};let _=0,C=[];S.forEach(function(A,D){A&&A.status==="running"&&C.push(D)});for(let A=0;A<C.length;A++){let D=m(y,C[A]);D&&D.status==="stopped"&&_++}return{stopped:_}}function k(){let y=0,S=[];o.forEach(function(_,C){S.push(C)});for(let _=0;_<S.length;_++)y+=h(S[_]).stopped;return{stopped:y}}function x(y){let S=h(y);return o.delete(Cs(y)),S}function T(y){return!y||!y.ok?"ERROR: "+(y&&y.error||"start \u5931\u8D25"):`ok=true
30
+ `),Ba(N,ne)}),z.on("error",function(ne){Ba(N,String(ne&&ne.message?ne.message:ne)),u(N,"exited",1)}),z.on("close",function(ne,Y){if(N.status!=="running")return;u(N,"exited",typeof ne=="number"?ne:Y?1:0)}),N.timer=setTimeout(function(){N.status==="running"&&(lh(N.proc,s),u(N,"timeout",-1))},D),N.timer&&typeof N.timer.unref=="function"&&N.timer.unref(),{ok:!0,job_id:H,pid:N.pid||void 0,started_at:q,timeout_ms:D}}function p(y,S,_){let C=_||{},A=l(y,S);if(!A)return Promise.resolve({ok:!0,status:"missing",job_id:String(S||""),out_tail:"",elapsed_ms:0});let D=du(C.wait_ms==null?0:C.wait_ms,0,ft.waitMsMax),G=C.tail_chars==null?ft.tailCharsDefault:C.tail_chars;return A.status!=="running"||D<=0?Promise.resolve(Object.assign({ok:!0},d(A,G))):new Promise(function(H){let q=!1,fe=function(){if(q)return;q=!0,clearTimeout(N);let z=A.waiters.indexOf(fe);z>=0&&A.waiters.splice(z,1),H(Object.assign({ok:!0},d(A,G)))};A.waiters.push(fe);let N=setTimeout(fe,D);typeof N.unref=="function"&&N.unref()})}function m(y,S){let _=l(y,S);return _?_.status!=="running"?{ok:!0,status:"already_done",job_id:_.id,final_status:_.status,code:_.code}:(lh(_.proc,s),u(_,"stopped",-1),{ok:!0,status:"stopped",job_id:_.id}):{ok:!1,status:"missing",job_id:String(S||"")}}function h(y){let S=o.get(As(y));if(!S)return{stopped:0};let _=0,C=[];S.forEach(function(A,D){A&&A.status==="running"&&C.push(D)});for(let A=0;A<C.length;A++){let D=m(y,C[A]);D&&D.status==="stopped"&&_++}return{stopped:_}}function k(){let y=0,S=[];o.forEach(function(_,C){S.push(C)});for(let _=0;_<S.length;_++)y+=h(S[_]).stopped;return{stopped:y}}function x(y){let S=h(y);return o.delete(As(y)),S}function T(y){return!y||!y.ok?"ERROR: "+(y&&y.error||"start \u5931\u8D25"):`ok=true
31
31
  job_id=`+y.job_id+(y.pid?`
32
32
  pid=`+y.pid:"")+`
33
33
  started_at=`+y.started_at+`
@@ -40,14 +40,14 @@ job_id=`+(y.job_id||""):`ok=true
40
40
  status=`+y.status+`
41
41
  job_id=`+(y.job_id||"")+(y.final_status?`
42
42
  final_status=`+y.final_status:"")+(y.code!=null?`
43
- code=`+y.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:ft,maxRunning:n,start:f,poll:p,stop:m,stopAll:h,stopEverything:k,clearSession:x,runningCount:a,getJob:l,formatStartResult:T,formatPollResult:g,formatStopResult:v,_bySession:o,_snapshot:d}}uh.exports={DEFAULTS:ft,createRegistry:X_,newId:ch,sessKey:Cs}});var Ch=Z((sI,Mh)=>{var ar=require("fs"),gu=require("os"),yt=require("path"),V_=require("crypto"),{spawn:Y_}=require("child_process"),fh="2025-06-18",fu=2e4,Z_=6e4,Q_=18e4,ph=8e3,eT=500,Ua=64,tT=4096,nT=8*1024*1024,sT=20,J={root:"",version:"0",rec:function(){},servers:new Map,exposed:new Map,configPaths:[],configErrors:[],loaded:!1,starting:null};function rT(t){let e=t||{};e.root&&(J.root=String(e.root)),typeof e.rec=="function"&&(J.rec=e.rec),e.version&&(J.version=String(e.version))}function jt(t,e){try{J.rec(t,e)}catch{}}function pu(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function oT(t){return V_.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function mh(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function hh(t,e){let n="mcp__"+pu(t)+"__"+pu(e);if(n.length>Ua){let s="_"+oT(t+"/"+e);n=n.slice(0,Ua-s.length)+s}return n}function mu(){J.exposed.clear();for(let t of J.servers.values())if(t.state==="ready")for(let e of t.tools){let n=hh(t.name,e.name);if(J.exposed.has(n)){let s=2;for(;J.exposed.has(n+"_"+s);)s++;let r="_"+s;n=n.length+r.length>Ua?n.slice(0,Ua-r.length)+r:n+r}J.exposed.set(n,{server:t.name,tool:e.name,def:e})}}function gh(){let t=process.env.LUBAN_MCP_CONFIG;if(t)return String(t).split(yt.delimiter).map(function(n){return n.trim()}).filter(Boolean);let e=[yt.join(gu.homedir(),".luban","mcp.json")];return J.root&&e.push(yt.join(J.root,".luban","mcp.json")),e}function yh(){J.servers=new Map,J.exposed.clear(),J.configErrors=[];let t=gh();J.configPaths=t;let e=new Map;for(let n of t){let s;try{s=JSON.parse(ar.readFileSync(n,"utf8"))}catch(o){if(o.code==="ENOENT")continue;J.configErrors.push(n+"\uFF1A"+o.message),jt("mcp_config_bad",{path:n,message:o.message});continue}let r=s&&(s.mcpServers||s.servers);if(!r||typeof r!="object"){J.configErrors.push(n+"\uFF1A\u7F3A\u5C11 mcpServers"),jt("mcp_config_bad",{path:n,message:"\u7F3A\u5C11 mcpServers"});continue}for(let o of Object.keys(r)){let i=r[o]||{};if(i.disabled===!0){e.delete(o);continue}e.set(o,{conf:i,source:n})}}for(let n of e){let s=n[0],r=n[1].conf;if(!r.command||typeof r.command!="string"){J.configErrors.push(s+"\uFF1A\u7F3A\u5C11 command"),jt("mcp_config_bad",{server:s,message:"\u7F3A\u5C11 command"});continue}if(r.args!==void 0&&!Array.isArray(r.args)){J.configErrors.push(s+"\uFF1Aargs \u5FC5\u987B\u662F\u6570\u7EC4"),jt("mcp_config_bad",{server:s,message:"args \u5FC5\u987B\u662F\u6570\u7EC4"});continue}if(r.planAllow!==void 0){let o=r.planAllow;(!Array.isArray(o)||o.some(function(i){return typeof i!="string"}))&&(J.configErrors.push(s+"\uFF1AplanAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"),jt("mcp_config_bad",{server:s,message:"planAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"}),r.planAllow=[])}J.servers.set(s,new hu(s,r,n[1].source))}J.loaded=!0,jt("mcp_config_loaded",{paths:t,servers:Array.from(J.servers.keys()),errors:J.configErrors})}function wh(){let t=process.env.LUBAN_MCP_CONFIG;return t?String(t).split(yt.delimiter).map(function(e){return e.trim()}).filter(Boolean):null}function iT(t){let e=wh();if(e){let s=e.findIndex(function(r){return yt.resolve(r)===yt.resolve(t)});if(s===0)return"global";if(s>0)return"project"}let n=yt.join(gu.homedir(),".luban","mcp.json");return yt.resolve(t)===yt.resolve(n)?"global":J.root&&yt.resolve(t)===yt.resolve(yt.join(J.root,".luban","mcp.json"))?"project":"custom"}function bh(t){if(t!=="global"&&t!=="project")throw new Error("\u5199\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F global \u6216 project");let e=wh();if(e&&e.length){if(t==="global"&&e[0])return e[0];if(t==="project"&&e[1])return e[1]}if(t==="global")return yt.join(gu.homedir(),".luban","mcp.json");if(!J.root)throw new Error("\u5F53\u524D\u6CA1\u6709\u5DE5\u4F5C\u533A\uFF0C\u9879\u76EE\u7EA7 mcp.json \u65E0\u5904\u5B89\u653E");return yt.join(J.root,".luban","mcp.json")}function kh(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 aT(){let t=gh(),e=[],n=[],s=new Map,r=new Map;for(let i of t){let a={path:i,scope:iT(i),exists:!1,error:"",servers:[]},l=null;try{let c=ar.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[kh(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=J.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 lT(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=bh(e.target),r=ar.existsSync(s)?ar.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=kh(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){ar.mkdirSync(yt.dirname(s),{recursive:!0,mode:448});let d=JSON.stringify(o,null,2)+`
44
- `,f=s+".tmp-"+process.pid+"-"+Date.now();ar.writeFileSync(f,d,"utf8"),ar.renameSync(f,s)}return jt("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 hu=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?yt.resolve(J.root||process.cwd(),String(e.cwd)):J.root||process.cwd(),s=Object.assign({},process.env,e.env&&typeof e.env=="object"?e.env:{});return Y_(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)+`
43
+ code=`+y.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:ft,maxRunning:n,start:f,poll:p,stop:m,stopAll:h,stopEverything:k,clearSession:x,runningCount:a,getJob:l,formatStartResult:T,formatPollResult:g,formatStopResult:v,_bySession:o,_snapshot:d}}uh.exports={DEFAULTS:ft,createRegistry:X_,newId:ch,sessKey:As}});var Ch=Z((sI,Mh)=>{var zn=require("fs"),gu=require("os"),yt=require("path"),V_=require("crypto"),{spawn:Y_}=require("child_process"),fh="2025-06-18",fu=2e4,Z_=6e4,Q_=18e4,ph=8e3,eT=500,Ua=64,tT=4096,nT=8*1024*1024,sT=20,J={root:"",version:"0",rec:function(){},servers:new Map,exposed:new Map,configPaths:[],configErrors:[],loaded:!1,starting:null};function rT(t){let e=t||{};e.root&&(J.root=String(e.root)),typeof e.rec=="function"&&(J.rec=e.rec),e.version&&(J.version=String(e.version))}function Tt(t,e){try{J.rec(t,e)}catch{}}function pu(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function oT(t){return V_.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function mh(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function hh(t,e){let n="mcp__"+pu(t)+"__"+pu(e);if(n.length>Ua){let s="_"+oT(t+"/"+e);n=n.slice(0,Ua-s.length)+s}return n}function mu(){J.exposed.clear();for(let t of J.servers.values())if(t.state==="ready")for(let e of t.tools){let n=hh(t.name,e.name);if(J.exposed.has(n)){let s=2;for(;J.exposed.has(n+"_"+s);)s++;let r="_"+s;n=n.length+r.length>Ua?n.slice(0,Ua-r.length)+r:n+r}J.exposed.set(n,{server:t.name,tool:e.name,def:e})}}function gh(){let t=process.env.LUBAN_MCP_CONFIG;if(t)return String(t).split(yt.delimiter).map(function(n){return n.trim()}).filter(Boolean);let e=[yt.join(gu.homedir(),".luban","mcp.json")];return J.root&&e.push(yt.join(J.root,".luban","mcp.json")),e}function yh(){J.servers=new Map,J.exposed.clear(),J.configErrors=[];let t=gh();J.configPaths=t;let e=new Map;for(let n of t){let s;try{s=JSON.parse(zn.readFileSync(n,"utf8"))}catch(o){if(o.code==="ENOENT")continue;J.configErrors.push(n+"\uFF1A"+o.message),Tt("mcp_config_bad",{path:n,message:o.message});continue}let r=s&&(s.mcpServers||s.servers);if(!r||typeof r!="object"){J.configErrors.push(n+"\uFF1A\u7F3A\u5C11 mcpServers"),Tt("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"){J.configErrors.push(s+"\uFF1A\u7F3A\u5C11 command"),Tt("mcp_config_bad",{server:s,message:"\u7F3A\u5C11 command"});continue}if(r.args!==void 0&&!Array.isArray(r.args)){J.configErrors.push(s+"\uFF1Aargs \u5FC5\u987B\u662F\u6570\u7EC4"),Tt("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"}))&&(J.configErrors.push(s+"\uFF1AplanAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"),Tt("mcp_config_bad",{server:s,message:"planAllow \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4"}),r.planAllow=[])}J.servers.set(s,new hu(s,r,n[1].source))}J.loaded=!0,Tt("mcp_config_loaded",{paths:t,servers:Array.from(J.servers.keys()),errors:J.configErrors})}function wh(){let t=process.env.LUBAN_MCP_CONFIG;return t?String(t).split(yt.delimiter).map(function(e){return e.trim()}).filter(Boolean):null}function iT(t){let e=wh();if(e){let s=e.findIndex(function(r){return yt.resolve(r)===yt.resolve(t)});if(s===0)return"global";if(s>0)return"project"}let n=yt.join(gu.homedir(),".luban","mcp.json");return yt.resolve(t)===yt.resolve(n)?"global":J.root&&yt.resolve(t)===yt.resolve(yt.join(J.root,".luban","mcp.json"))?"project":"custom"}function bh(t){if(t!=="global"&&t!=="project")throw new Error("\u5199\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F global \u6216 project");let e=wh();if(e&&e.length){if(t==="global"&&e[0])return e[0];if(t==="project"&&e[1])return e[1]}if(t==="global")return yt.join(gu.homedir(),".luban","mcp.json");if(!J.root)throw new Error("\u5F53\u524D\u6CA1\u6709\u5DE5\u4F5C\u533A\uFF0C\u9879\u76EE\u7EA7 mcp.json \u65E0\u5904\u5B89\u653E");return yt.join(J.root,".luban","mcp.json")}function kh(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 aT(){let t=gh(),e=[],n=[],s=new Map,r=new Map;for(let i of t){let a={path:i,scope:iT(i),exists:!1,error:"",servers:[]},l=null;try{let c=zn.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[kh(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=J.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 lT(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=bh(e.target),r=zn.existsSync(s)?zn.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=kh(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{zn.existsSync(s)&&zn.unlinkSync(s),d=!zn.existsSync(s)}catch(m){Tt("mcp_config_unlink_fail",{path:s,message:m.message})}if(!d){zn.mkdirSync(yt.dirname(s),{recursive:!0,mode:448});let m=JSON.stringify(o,null,2)+`
44
+ `,h=s+".tmp-"+process.pid+"-"+Date.now();zn.writeFileSync(h,m,"utf8"),zn.renameSync(h,s)}}return Tt("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 hu=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?yt.resolve(J.root||process.cwd(),String(e.cwd)):J.root||process.cwd(),s=Object.assign({},process.env,e.env&&typeof e.env=="object"?e.env:{});return Y_(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)+`
45
45
  `)}onStderr(e){this.stderr=(this.stderr+String(e)).slice(-tT)}onExit(e,n){if(e!==this.gen)return;let s=this.state==="ready";this.state="failed",this.error=n+(this.stderr?`
46
- [stderr] `+this.stderr.trim():""),this.dropPending(n),this.child=null,s&&jt("mcp_server_exit",{server:this.name,reason:n,stderr:this.stderr.slice(-600)})}onData(e){if(this.buf+=String(e),this.buf.length>nT){jt("mcp_line_overflow",{server:this.name,bytes:this.buf.length}),this.buf="";return}let n;for(;(n=this.buf.indexOf(`
47
- `))>=0;){let s=this.buf.slice(0,n).replace(/\r$/,"").trim();if(this.buf=this.buf.slice(n+1),!s)continue;let r;try{r=JSON.parse(s)}catch{jt("mcp_bad_line",{server:this.name,head:s.slice(0,200)});continue}this.onMessage(r)}}respond(e,n,s){try{s?this.write({jsonrpc:"2.0",id:e,error:s}):this.write({jsonrpc:"2.0",id:e,result:n})}catch{}}onMessage(e){if(!e||typeof e!="object")return;if(e.method){if(e.id!==void 0&&e.id!==null){if(e.method==="ping"){this.respond(e.id,{});return}if(e.method==="roots/list"){let s=[];J.root&&s.push({uri:"file://"+encodeURI(J.root),name:yt.basename(J.root)||"workspace"}),this.respond(e.id,{roots:s});return}this.respond(e.id,null,{code:-32601,message:"Luban \u4E0D\u652F\u6301 "+e.method});return}if(e.method==="notifications/tools/list_changed"){let s=this;this.relisted||(this.relisted=this.loadTools().then(function(){jt("mcp_tools_changed",{server:s.name,tools:s.tools.length})}).catch(function(r){jt("mcp_tools_changed_failed",{server:s.name,message:r.message})}).then(function(){s.relisted=null}))}return}let n=this.pending.get(e.id);if(n)if(this.pending.delete(e.id),clearTimeout(n.timer),e.error){let s=e.error.code===void 0?"":" "+e.error.code;n.reject(new Error("MCP \u9519\u8BEF"+s+"\uFF1A"+(e.error.message||JSON.stringify(e.error))))}else n.resolve(e.result===void 0?{}:e.result)}request(e,n,s){let r=this;return new Promise(function(o,i){if(!r.child||r.child.exitCode!==null){i(new Error("MCP server\u300C"+r.name+"\u300D\u672A\u8FDE\u63A5"));return}let a=r.nextId++,l=s||fu,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<sT;s++){let r=await this.request("tools/list",e?{cursor:e}:{},fu),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,mu(),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=[],mu();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:fh,capabilities:{tools:{}},clientInfo:{name:"luban",version:J.version}},fu);e.protocolVersion=r&&r.protocolVersion||fh,e.write({jsonrpc:"2.0",method:"notifications/initialized",params:{}}),await e.loadTools(),e.state="ready",jt("mcp_ready",{server:e.name,tools:e.tools.length,protocol:e.protocolVersion,source:e.source})}catch(r){throw e.state="failed",e.error=String(r&&r.message||r),jt("mcp_failed",{server:e.name,error:e.error,stderr:e.stderr.slice(-600)}),e.stopChild(),new Error("MCP server\u300C"+e.name+"\u300D\u521D\u59CB\u5316\u5931\u8D25\uFF1A"+e.error)}return e}();try{return await this.connecting}finally{this.connecting=null}}async ensure(){return this.state==="ready"&&this.child&&this.child.exitCode===null?this:this.connect()}async call(e,n){let s=Number(this.conf.timeoutMs),r=Math.min(Math.max(isFinite(s)&&s>0?s:Z_,1e3),Q_),o=await this.request("tools/call",{name:e,arguments:n&&typeof n=="object"?n:{}},r);return xh(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 xh(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||"")+`]
46
+ [stderr] `+this.stderr.trim():""),this.dropPending(n),this.child=null,s&&Tt("mcp_server_exit",{server:this.name,reason:n,stderr:this.stderr.slice(-600)})}onData(e){if(this.buf+=String(e),this.buf.length>nT){Tt("mcp_line_overflow",{server:this.name,bytes:this.buf.length}),this.buf="";return}let n;for(;(n=this.buf.indexOf(`
47
+ `))>=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{Tt("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=[];J.root&&s.push({uri:"file://"+encodeURI(J.root),name:yt.basename(J.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(){Tt("mcp_tools_changed",{server:s.name,tools:s.tools.length})}).catch(function(r){Tt("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||fu,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<sT;s++){let r=await this.request("tools/list",e?{cursor:e}:{},fu),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,mu(),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=[],mu();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:fh,capabilities:{tools:{}},clientInfo:{name:"luban",version:J.version}},fu);e.protocolVersion=r&&r.protocolVersion||fh,e.write({jsonrpc:"2.0",method:"notifications/initialized",params:{}}),await e.loadTools(),e.state="ready",Tt("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),Tt("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:Z_,1e3),Q_),o=await this.request("tools/call",{name:e,arguments:n&&typeof n=="object"?n:{}},r);return xh(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 xh(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||"")+`]
48
48
  `+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(`
49
49
  `).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>ph?s.slice(0,ph)+`
50
- \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`:s}async function yu(){if(J.starting)return J.starting;J.starting=async function(){yh();let t=[];for(let e of J.servers.values())t.push(e.connect().catch(function(){}));return await Promise.all(t),mu(),Th()}();try{return await J.starting}finally{J.starting=null}}async function cT(){if(J.starting){try{await J.starting}catch{}return}J.loaded||await yu()}async function uT(){return await Sh(),yu()}async function Sh(){let t=Array.from(J.servers.values());J.servers=new Map,J.exposed.clear(),J.loaded=!1,await Promise.all(t.map(function(e){return e.stop()})),jt("mcp_stopped",{servers:t.length})}function dT(t){return J.exposed.has(String(t))}function wu(t){return J.exposed.get(String(t))||null}function fT(t){let e=t&&t.planAllow;return Array.isArray(e)?e:[]}function vh(t,e){let n=e||{};return n.annotations&&n.annotations.readOnlyHint===!0?!0:fT(t).indexOf(n.name)>=0}function _h(t){let e=wu(t);if(!e)return!1;let n=J.servers.get(e.server);if(!n)return!1;let s=n.tools.find(function(r){return r&&r.name===e.tool})||e.def;return vh(n.conf,s)}function pT(t){let e=!!(t&&t.planOnly),n=[];for(let s of J.exposed){let r=s[0],o=s[1],i=o.def||{};if(e){let c=J.servers.get(o.server);if(!vh(c&&c.conf,i))continue}let a=i.inputSchema&&typeof i.inputSchema=="object"?i.inputSchema:{type:"object",properties:{}},l=mh(i.description||i.title||"MCP \u5DE5\u5177 "+o.server+"/"+o.tool,eT);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 mT(){let t=[],e=[];for(let s of J.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"+mh(s.error,200));let n=[];return t.length&&n.push(["\u5DF2\u8FDE\u63A5\u7684 MCP server\uFF1A",t.join(`
50
+ \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`:s}async function yu(){if(J.starting)return J.starting;J.starting=async function(){yh();let t=[];for(let e of J.servers.values())t.push(e.connect().catch(function(){}));return await Promise.all(t),mu(),Th()}();try{return await J.starting}finally{J.starting=null}}async function cT(){if(J.starting){try{await J.starting}catch{}return}J.loaded||await yu()}async function uT(){return await Sh(),yu()}async function Sh(){let t=Array.from(J.servers.values());J.servers=new Map,J.exposed.clear(),J.loaded=!1,await Promise.all(t.map(function(e){return e.stop()})),Tt("mcp_stopped",{servers:t.length})}function dT(t){return J.exposed.has(String(t))}function wu(t){return J.exposed.get(String(t))||null}function fT(t){let e=t&&t.planAllow;return Array.isArray(e)?e:[]}function vh(t,e){let n=e||{};return n.annotations&&n.annotations.readOnlyHint===!0?!0:fT(t).indexOf(n.name)>=0}function _h(t){let e=wu(t);if(!e)return!1;let n=J.servers.get(e.server);if(!n)return!1;let s=n.tools.find(function(r){return r&&r.name===e.tool})||e.def;return vh(n.conf,s)}function pT(t){let e=!!(t&&t.planOnly),n=[];for(let s of J.exposed){let r=s[0],o=s[1],i=o.def||{};if(e){let c=J.servers.get(o.server);if(!vh(c&&c.conf,i))continue}let a=i.inputSchema&&typeof i.inputSchema=="object"?i.inputSchema:{type:"object",properties:{}},l=mh(i.description||i.title||"MCP \u5DE5\u5177 "+o.server+"/"+o.tool,eT);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 mT(){let t=[],e=[];for(let s of J.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"+mh(s.error,200));let n=[];return t.length&&n.push(["\u5DF2\u8FDE\u63A5\u7684 MCP server\uFF1A",t.join(`
51
51
  `),"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(`
52
52
  `)),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
53
53
  `+e.join(`
@@ -60,14 +60,14 @@ code=`+y.code:""):"ERROR: stop \u65E0\u7ED3\u679C"}return{DEFAULTS:ft,maxRunning
60
60
  \u2026[\u622A\u65AD]`:o;return"\u6280\u80FD "+n.name+" \xB7 "+Tu(s)+`
61
61
  \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
62
62
 
63
- `+a}function Gh(){return _e.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 $T(){return{count:_e.skills.length,root:_e.root,scannedAt:_e.scannedAt,dirs:_e.dirs.slice(),skills:Gh()}}Jh.exports={configure:LT,refresh:Wh,ensure:Mu,block:GT,read:JT,list:Gh,status:$T,find:Hh,frontmatter:_u,_frontmatter:_u,_scanDirs:qh,_clipDesc:Kh,_markChildren:Uh,_substPaths:zh,_signature:vu,_state:_e,_ttl:Dh}});var Pu=Z((aI,Eu)=>{var Ha=require("fs"),As=require("path"),Yh=new Set(lr().SKIP_DIRS),XT=512*1024,VT=8e3,$h=400,YT=200,ZT=2e3,QT=200,Zh=2e3,Xh=20;function Xr(t){let e=String(t??"").trim();if(!e)return null;let n=e.charAt(0)==="!"?e.slice(1):e,r=Qh(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+=eM(l)}return new RegExp("^"+i+"$")}).filter(Boolean);return r.length?{res:r}:null}function Qh(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,Qh(r+c+o));return l}function eM(t){return/[.*+?^${}()|[\]\\]/.test(t)?"\\"+t:t}function ls(t,e){if(!t)return!1;for(let n of t.res)if(n.test(e))return!0;return!1}function Vr(t,e){if(!t)return e;let n=String(t).replace(/\/+$/,"");return n?n+"/"+e:e}function eg(t){let e=String(t??"");return e.length>$h?e.slice(0,$h)+"\u2026":e}function Vh(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:eg(t[i])});return o}function Ou(t,e){let n=e||{},s=isFinite(n.maxDepth)?Math.min(Math.max(n.maxDepth,1),Xh):Xh,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=Ha.readdirSync(As.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)==="."||Yh.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 as(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=Xr(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=Ka(s.maxFiles,1,Zh,QT),l=s.prefix?String(s.prefix):"",c=Ou(t,{maxDepth:s.maxDepth,cap:2e4}),u=[];for(let d of c.files){let f=!1;for(let x of o)if(ls(x,d)){f=!0;break}if(!f)continue;let p=!1;for(let x of i)if(ls(x,d)){p=!0;break}if(p)continue;let m=As.join(t,d),h=0,k=0;try{let x=Ha.statSync(m);h=x.size,k=x.mtimeMs}catch{}if(u.push({rel:Vr(l,d),abs:m,size:h,mtimeMs:k}),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 tg(t,e){if(t.error)return"glob \u53C2\u6570\u6709\u8BEF\uFF1A"+t.error;if(!t.matches.length)return'glob "'+t.pattern+'" \u6CA1\u6709\u5339\u914D\u6587\u4EF6\uFF08\u626B\u63CF '+t.scanned+" \u4E2A\u6587\u4EF6\uFF09";let n=t.matches.map(function(r){return r.rel+" ("+r.size+"B)"}),s='glob "'+t.pattern+'" \u547D\u4E2D '+t.matches.length+` \u4E2A\u6587\u4EF6\uFF08\u6309\u6700\u8FD1\u6539\u52A8\u6392\u5E8F\uFF09
63
+ `+a}function Gh(){return _e.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 $T(){return{count:_e.skills.length,root:_e.root,scannedAt:_e.scannedAt,dirs:_e.dirs.slice(),skills:Gh()}}Jh.exports={configure:LT,refresh:Wh,ensure:Mu,block:GT,read:JT,list:Gh,status:$T,find:Hh,frontmatter:_u,_frontmatter:_u,_scanDirs:qh,_clipDesc:Kh,_markChildren:Uh,_substPaths:zh,_signature:vu,_state:_e,_ttl:Dh}});var Pu=Z((aI,Eu)=>{var Ha=require("fs"),Os=require("path"),Yh=new Set(lr().SKIP_DIRS),XT=512*1024,VT=8e3,$h=400,YT=200,ZT=2e3,QT=200,Zh=2e3,Xh=20;function Xr(t){let e=String(t??"").trim();if(!e)return null;let n=e.charAt(0)==="!"?e.slice(1):e,r=Qh(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+=eM(l)}return new RegExp("^"+i+"$")}).filter(Boolean);return r.length?{res:r}:null}function Qh(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,Qh(r+c+o));return l}function eM(t){return/[.*+?^${}()|[\]\\]/.test(t)?"\\"+t:t}function cs(t,e){if(!t)return!1;for(let n of t.res)if(n.test(e))return!0;return!1}function Vr(t,e){if(!t)return e;let n=String(t).replace(/\/+$/,"");return n?n+"/"+e:e}function eg(t){let e=String(t??"");return e.length>$h?e.slice(0,$h)+"\u2026":e}function Vh(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:eg(t[i])});return o}function Ou(t,e){let n=e||{},s=isFinite(n.maxDepth)?Math.min(Math.max(n.maxDepth,1),Xh):Xh,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=Ha.readdirSync(Os.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)==="."||Yh.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 ls(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=Xr(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=Ka(s.maxFiles,1,Zh,QT),l=s.prefix?String(s.prefix):"",c=Ou(t,{maxDepth:s.maxDepth,cap:2e4}),u=[];for(let d of c.files){let f=!1;for(let x of o)if(cs(x,d)){f=!0;break}if(!f)continue;let p=!1;for(let x of i)if(cs(x,d)){p=!0;break}if(p)continue;let m=Os.join(t,d),h=0,k=0;try{let x=Ha.statSync(m);h=x.size,k=x.mtimeMs}catch{}if(u.push({rel:Vr(l,d),abs:m,size:h,mtimeMs:k}),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 tg(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
64
64
  `+n.join(`
65
65
  `);return t.truncated&&(s+=`
66
- ...[\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u53EF\u52A0 patterns \u6536\u7A84\u6216\u63D0\u9AD8 maxFiles]`),s}function Kt(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=Ka(s.maxHits,1,ZT,YT),a=Ka(s.maxFiles,1,Zh,5e3),l=Ka(s.contextLines,0,5,0),c=s.prefix?String(s.prefix):"",u=isFinite(s.budgetMs)&&s.budgetMs>0?Math.floor(s.budgetMs):VT,d=Date.now()+u,f=s.glob?Xr(s.glob):null,p=Ou(t,{maxDepth:s.maxDepth,cap:2e4}),m=[],h=0,k=!1,x=!1;for(let T of p.files){if(m.length>=i){k=!0;break}if(Date.now()>d){k=!0,x=!0;break}if(f&&!ls(f,T))continue;if(h>=a){k=!0;break}let g=As.join(t,T),v;try{v=Ha.statSync(g)}catch{continue}if(!v.isFile()||v.size>XT)continue;let y;try{y=Ha.readFileSync(g,"utf8")}catch{continue}if(tM(y))continue;h++;let S=y.split(`
66
+ ...[\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u53EF\u52A0 patterns \u6536\u7A84\u6216\u63D0\u9AD8 maxFiles]`),s}function Kt(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=Ka(s.maxHits,1,ZT,YT),a=Ka(s.maxFiles,1,Zh,5e3),l=Ka(s.contextLines,0,5,0),c=s.prefix?String(s.prefix):"",u=isFinite(s.budgetMs)&&s.budgetMs>0?Math.floor(s.budgetMs):VT,d=Date.now()+u,f=s.glob?Xr(s.glob):null,p=Ou(t,{maxDepth:s.maxDepth,cap:2e4}),m=[],h=0,k=!1,x=!1;for(let T of p.files){if(m.length>=i){k=!0;break}if(Date.now()>d){k=!0,x=!0;break}if(f&&!cs(f,T))continue;if(h>=a){k=!0;break}let g=Os.join(t,T),v;try{v=Ha.statSync(g)}catch{continue}if(!v.isFile()||v.size>XT)continue;let y;try{y=Ha.readFileSync(g,"utf8")}catch{continue}if(tM(y))continue;h++;let S=y.split(`
67
67
  `);for(let _=0;_<S.length;_++){o.lastIndex=0;let C=o.exec(S[_]);if(C&&(m.push({rel:Vr(c,T),line:_+1,text:eg(S[_]),col:C.index+1,match:C[0],groups:C.slice(1),before:l>0?Vh(S,_-l,_):[],after:l>0?Vh(S,_+1,_+1+l):[]}),m.length>=i)){k=!0;break}}}return{hits:m,filesSearched:h,truncated:k,timedOut:x,contextLines:l,pattern:r}}function tM(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 Au(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":"")+`
68
68
  `+e.join(`
69
69
  `);return t.truncated&&(r+=`
70
- ...[`+(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 Ka(t,e,n,s){let r=Math.floor(Number(t));return isFinite(r)?Math.min(Math.max(r,e),n):s}Eu.exports={globToRegExp:Xr,globMatch:ls,walkFiles:Ou,glob:as,formatGlob:tg,grep:Kt,formatGrep:Au,outRel:Vr,SKIP_DIRS:Yh};require.main===Eu&&nM();function nM(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(As.join(t.tmpdir(),"luban-fs-")),s=function(x,T){let g=As.join(n,x);e.mkdirSync(As.dirname(g),{recursive:!0}),e.writeFileSync(g,T)};s("a.js",`const foo1 = 1;
70
+ ...[`+(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 Ka(t,e,n,s){let r=Math.floor(Number(t));return isFinite(r)?Math.min(Math.max(r,e),n):s}Eu.exports={globToRegExp:Xr,globMatch:cs,walkFiles:Ou,glob:ls,formatGlob:tg,grep:Kt,formatGrep:Au,outRel:Vr,SKIP_DIRS:Yh};require.main===Eu&&nM();function nM(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Os.join(t.tmpdir(),"luban-fs-")),s=function(x,T){let g=Os.join(n,x);e.mkdirSync(Os.dirname(g),{recursive:!0}),e.writeFileSync(g,T)};s("a.js",`const foo1 = 1;
71
71
  const foo2 = 2;
72
72
  `),s("src/b.ts",`export function bar(x) { return foo1 + x; }
73
73
  `),s("src/gen.js",`const generated = true;
@@ -76,8 +76,8 @@ foo(123) \u5728\u8FD9\u91CC
76
76
  `),s("node_modules/dep/index.js",`const foo9 = 9;
77
77
  `),s(".hidden/d.js",`const fooHidden = 1;
78
78
  `),s("plain.txt",`foo(456)
79
- `);let r=0,o=0,i=function(x,T,g){T?(r++,console.log(" ok "+x)):(o++,console.log(" FAIL "+x+(g?" :: "+g:"")))},a=as(n,"**/*.js");i("glob **/*.js \u547D\u4E2D a.js",a.matches.some(x=>x.rel==="a.js")),i("glob \u8DF3\u8FC7 node_modules",!a.matches.some(x=>x.rel.indexOf("node_modules")===0)),i("glob \u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55",!a.matches.some(x=>x.rel.indexOf(".hidden")===0)),a=as(n,"src/**/*.ts"),i("glob src/**/*.ts \u53EA\u4E2D b.ts",a.matches.length===1&&a.matches[0].rel==="src/b.ts"),a=as(n,"**/*.{md,txt}"),i("glob \u82B1\u62EC\u53F7 md+txt",a.matches.length===2),a=as(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(x=>x.rel))),a=as(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(x=>x.rel))),a=as(n,"**/b.?s"),i("glob ? \u5355\u5B57\u7B26",a.matches.length===1&&a.matches[0].rel==="src/b.ts");let l=Kt(n,"foo\\(\\d+\\)");i("grep \u6B63\u5219\u547D\u4E2D\u4E24\u5904",l.hits.length===2,JSON.stringify(l.hits.map(x=>x.rel+":"+x.line))),i("grep \u547D\u4E2D c.md \u4E0E plain.txt",l.hits.some(x=>x.rel==="src/deep/c.md")&&l.hits.some(x=>x.rel==="plain.txt")),l=Kt(n,"foo\\((\\d+)\\)"),i("grep \u6355\u83B7\u7EC4",l.hits.every(x=>/^\d+$/.test(x.groups[0])),JSON.stringify(l.hits.map(x=>x.groups[0]))),l=Kt(n,"FOO1",{ignoreCase:!0}),i("grep ignoreCase",l.hits.length===2&&l.hits.some(x=>x.rel==="a.js")),l=Kt(n,"foo1",{glob:"**/*.ts"}),i("grep glob \u8FC7\u6EE4\u53EA\u770B ts",l.hits.length===1&&l.hits[0].rel==="src/b.ts"),l=Kt(n,"foo9"),i("grep \u8DF3\u8FC7 node_modules",l.hits.length===0),l=Kt(n,"foo",{maxHits:3}),i("grep maxHits \u622A\u65AD",l.hits.length===3&&l.truncated===!0),l=Kt(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=Kt(n,"bar",{contextLines:1}),u=Au(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=Kt(As.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(x=>x.rel)));let f=as(As.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(x=>x.rel))),i("outRel \u7A7A\u524D\u7F00\u539F\u6837",Vr("","a.js")==="a.js"),i("outRel \u53BB\u5C3E\u90E8\u659C\u6760",Vr("src/","a.js")==="src/a.js"),i("outRel \u7EDD\u5BF9\u524D\u7F00",Vr("/tmp/x","a.js")==="/tmp/x/a.js");let p=Kt(n,"foo",{budgetMs:1});i("grep \u65F6\u95F4\u9884\u7B97\u6536\u624B",p.timedOut===!0||p.hits.length>0),l=Kt(n,"("),i("grep \u975E\u6CD5\u6B63\u5219\u62A5\u9519",!!l.error),l=Kt(n,""),i("grep \u7A7A pattern \u62A5\u9519",!!l.error);let m=Xr("**/*.spec.ts");i("globToRegExp \u5339\u914D a/b/c.spec.ts",ls(m,"a/b/c.spec.ts")),i("globToRegExp \u4E0D\u5339\u914D a/b/c.ts",!ls(m,"a/b/c.ts"));let h=Xr("src/**");i("globToRegExp src/** \u5339\u914D src/x",ls(h,"src/x")),i("globToRegExp src/** \u4E0D\u5339\u914D srcx",!ls(h,"srcx"));let k=Xr("!src/**");i("globToRegExp \u5265\u6389\u524D\u5BFC ! \u540E\u5339\u914D src/x",ls(k,"src/x")),i("formatGlob \u7A7A\u7ED3\u679C",/没有匹配/.test(tg(as(n,"**/*.zzz")))),i("formatGrep \u6709\u547D\u4E2D",/命中 \d+ 行/.test(Au(Kt(n,"foo1")))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
80
- filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var wg=Z((lI,yg)=>{var Fu=require("fs"),sg=require("os"),Tt=require("path"),sM=Cu(),rg=Pu(),rM=100,ti=4e4,oM=6,og=2e3,ig=12e3,ag=2e3,iM=200,Iu=/\.(md|mdc)$/i,lg=Object.create(null);for(let t of lr().SKIP_DIRS)lg[t]=1;var Q={root:"",rec:function(){},rules:[],dirs:[],scannedAt:"",scannedMs:0,enabled:!0,maxChars:ig,indexMaxChars:ag};function aM(t){let e=t||{};e.root&&String(e.root)!==Q.root&&(Q.scannedMs=0),e.root&&(Q.root=String(e.root)),typeof e.rec=="function"&&(Q.rec=e.rec),typeof e.enabled=="boolean"&&(Q.enabled=e.enabled);let n=Number(e.maxChars);isFinite(n)&&n>0&&(Q.maxChars=Math.floor(n));let s=Number(e.indexMaxChars);isFinite(s)&&s>0&&(Q.indexMaxChars=Math.floor(s))}function ju(t,e){try{Q.rec(t,e)}catch{}}function Nu(t){return(t||[]).map(function(e){return e.name+""+e.tier+""+e.globs.join(",")+""+e.body.length+""+e.file}).join("")}function Ga(){if(!Q.root||Q.scannedMs&&Date.now()-Q.scannedMs<og)return;let t=Nu(Q.rules),e;try{e=pg(Q.root,{quiet:!0})}catch(n){Q.scannedMs=Date.now(),ju("rules_rescan_failed",{message:n.message});return}Nu(e)!==t&&ju("rules_changed",{count:e.length,always:e.filter(function(n){return n.tier==="always"}).length})}function za(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 lM(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function cM(t){let e=Q.root;if(e){let s=Tt.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!Tt.isAbsolute(s))return s.split(Tt.sep).join("/")}let n=sg.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(Tt.sep).join("/"):t.split(Tt.sep).join("/")}function cg(t){let e=t||Q.root||process.cwd(),n=sg.homedir();return[{kind:"dir",dir:Tt.join(e,".luban","rules")},{kind:"dir",dir:Tt.join(e,".cursor","rules")},{kind:"file",file:Tt.join(e,"AGENTS.md"),agents:!0},{kind:"dir",dir:Tt.join(n,".luban","rules")}]}function ug(t,e,n){if(e>oM)return;let s;try{s=Fu.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=Tt.join(t,o.name);if(o.isDirectory()){if(lg[o.name]||o.name.startsWith("."))continue;ug(i,e+1,n);continue}!o.isFile()||!Iu.test(o.name)||n.push(i)}}function Lu(t){return String(t??"").replace(/^---\r?\n[\s\S]*?\r?\n---[ \t]*\r?\n?/,"").trim()}function uM(t){let e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(String(t??""));return e?e[1]:""}function ng(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 dg(t){let e=[],n=uM(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&&ng(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(","))ng(e,u)}return e}function dM(t){let e=Lu(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 fg(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 fM(t,e){let n;try{n=Fu.readFileSync(t,"utf8")}catch{return null}let s=n.length>ti;s&&(n=n.slice(0,ti));let r=sM.frontmatter(n),o=za(r.name)||Tt.basename(t).replace(Iu,"");if(!o)return null;let i=dg(n),a=fg(r,i,e),l=Lu(n),c=lM(za(r.description||r.trigger||r.when_to_use||"")||dM(n),iM);return{name:o,description:c,globs:i,globsRe:i.map(function(u){return rg.globToRegExp(u)}).filter(Boolean),alwaysApply:a==="always",tier:a,file:t,rel:cM(t),chars:n.length,truncated:s,body:l,text:n}}function pg(t,e){let n=e||{};t&&(String(t)!==Q.root&&(Q.scannedMs=0),Q.root=String(t));let s=cg(Q.root);Q.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=[];ug(a.dir,0,l);for(let c of l)r.push({file:c,src:a})}else{let l;try{l=Fu.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=fM(a.file,a.src);if(!l)continue;let c=l.name.toLowerCase();if(!i[c]&&(i[c]=!0,o.push(l),o.length>=rM))break}return o.sort(function(a,l){let c=a.name.toLowerCase(),u=l.name.toLowerCase();return c<u?-1:c>u?1:0}),Q.rules=o,Q.scannedAt=new Date().toISOString(),Q.scannedMs=Date.now(),n.quiet||ju("rules_scanned",{count:o.length,root:Q.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 pM(){if(!Q.enabled||(Ga(),!Q.rules.length))return"";let t=Q.rules.filter(function(i){return i.tier==="always"}),e=Q.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>Q.maxChars){o.push(i);continue}s+=l,r.push(a+`
79
+ `);let r=0,o=0,i=function(x,T,g){T?(r++,console.log(" ok "+x)):(o++,console.log(" FAIL "+x+(g?" :: "+g:"")))},a=ls(n,"**/*.js");i("glob **/*.js \u547D\u4E2D a.js",a.matches.some(x=>x.rel==="a.js")),i("glob \u8DF3\u8FC7 node_modules",!a.matches.some(x=>x.rel.indexOf("node_modules")===0)),i("glob \u8DF3\u8FC7\u9690\u85CF\u76EE\u5F55",!a.matches.some(x=>x.rel.indexOf(".hidden")===0)),a=ls(n,"src/**/*.ts"),i("glob src/**/*.ts \u53EA\u4E2D b.ts",a.matches.length===1&&a.matches[0].rel==="src/b.ts"),a=ls(n,"**/*.{md,txt}"),i("glob \u82B1\u62EC\u53F7 md+txt",a.matches.length===2),a=ls(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(x=>x.rel))),a=ls(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(x=>x.rel))),a=ls(n,"**/b.?s"),i("glob ? \u5355\u5B57\u7B26",a.matches.length===1&&a.matches[0].rel==="src/b.ts");let l=Kt(n,"foo\\(\\d+\\)");i("grep \u6B63\u5219\u547D\u4E2D\u4E24\u5904",l.hits.length===2,JSON.stringify(l.hits.map(x=>x.rel+":"+x.line))),i("grep \u547D\u4E2D c.md \u4E0E plain.txt",l.hits.some(x=>x.rel==="src/deep/c.md")&&l.hits.some(x=>x.rel==="plain.txt")),l=Kt(n,"foo\\((\\d+)\\)"),i("grep \u6355\u83B7\u7EC4",l.hits.every(x=>/^\d+$/.test(x.groups[0])),JSON.stringify(l.hits.map(x=>x.groups[0]))),l=Kt(n,"FOO1",{ignoreCase:!0}),i("grep ignoreCase",l.hits.length===2&&l.hits.some(x=>x.rel==="a.js")),l=Kt(n,"foo1",{glob:"**/*.ts"}),i("grep glob \u8FC7\u6EE4\u53EA\u770B ts",l.hits.length===1&&l.hits[0].rel==="src/b.ts"),l=Kt(n,"foo9"),i("grep \u8DF3\u8FC7 node_modules",l.hits.length===0),l=Kt(n,"foo",{maxHits:3}),i("grep maxHits \u622A\u65AD",l.hits.length===3&&l.truncated===!0),l=Kt(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=Kt(n,"bar",{contextLines:1}),u=Au(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=Kt(Os.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(x=>x.rel)));let f=ls(Os.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(x=>x.rel))),i("outRel \u7A7A\u524D\u7F00\u539F\u6837",Vr("","a.js")==="a.js"),i("outRel \u53BB\u5C3E\u90E8\u659C\u6760",Vr("src/","a.js")==="src/a.js"),i("outRel \u7EDD\u5BF9\u524D\u7F00",Vr("/tmp/x","a.js")==="/tmp/x/a.js");let p=Kt(n,"foo",{budgetMs:1});i("grep \u65F6\u95F4\u9884\u7B97\u6536\u624B",p.timedOut===!0||p.hits.length>0),l=Kt(n,"("),i("grep \u975E\u6CD5\u6B63\u5219\u62A5\u9519",!!l.error),l=Kt(n,""),i("grep \u7A7A pattern \u62A5\u9519",!!l.error);let m=Xr("**/*.spec.ts");i("globToRegExp \u5339\u914D a/b/c.spec.ts",cs(m,"a/b/c.spec.ts")),i("globToRegExp \u4E0D\u5339\u914D a/b/c.ts",!cs(m,"a/b/c.ts"));let h=Xr("src/**");i("globToRegExp src/** \u5339\u914D src/x",cs(h,"src/x")),i("globToRegExp src/** \u4E0D\u5339\u914D srcx",!cs(h,"srcx"));let k=Xr("!src/**");i("globToRegExp \u5265\u6389\u524D\u5BFC ! \u540E\u5339\u914D src/x",cs(k,"src/x")),i("formatGlob \u7A7A\u7ED3\u679C",/没有匹配/.test(tg(ls(n,"**/*.zzz")))),i("formatGrep \u6709\u547D\u4E2D",/命中 \d+ 行/.test(Au(Kt(n,"foo1")))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
80
+ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var wg=Z((lI,yg)=>{var Fu=require("fs"),sg=require("os"),Mt=require("path"),sM=Cu(),rg=Pu(),rM=100,ti=4e4,oM=6,og=2e3,ig=12e3,ag=2e3,iM=200,Iu=/\.(md|mdc)$/i,lg=Object.create(null);for(let t of lr().SKIP_DIRS)lg[t]=1;var Q={root:"",rec:function(){},rules:[],dirs:[],scannedAt:"",scannedMs:0,enabled:!0,maxChars:ig,indexMaxChars:ag};function aM(t){let e=t||{};e.root&&String(e.root)!==Q.root&&(Q.scannedMs=0),e.root&&(Q.root=String(e.root)),typeof e.rec=="function"&&(Q.rec=e.rec),typeof e.enabled=="boolean"&&(Q.enabled=e.enabled);let n=Number(e.maxChars);isFinite(n)&&n>0&&(Q.maxChars=Math.floor(n));let s=Number(e.indexMaxChars);isFinite(s)&&s>0&&(Q.indexMaxChars=Math.floor(s))}function ju(t,e){try{Q.rec(t,e)}catch{}}function Nu(t){return(t||[]).map(function(e){return e.name+""+e.tier+""+e.globs.join(",")+""+e.body.length+""+e.file}).join("")}function Ga(){if(!Q.root||Q.scannedMs&&Date.now()-Q.scannedMs<og)return;let t=Nu(Q.rules),e;try{e=pg(Q.root,{quiet:!0})}catch(n){Q.scannedMs=Date.now(),ju("rules_rescan_failed",{message:n.message});return}Nu(e)!==t&&ju("rules_changed",{count:e.length,always:e.filter(function(n){return n.tier==="always"}).length})}function za(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 lM(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function cM(t){let e=Q.root;if(e){let s=Mt.relative(e,t);if(!s)return".";if(!s.startsWith("..")&&!Mt.isAbsolute(s))return s.split(Mt.sep).join("/")}let n=sg.homedir();return t.startsWith(n)?"~"+t.slice(n.length).split(Mt.sep).join("/"):t.split(Mt.sep).join("/")}function cg(t){let e=t||Q.root||process.cwd(),n=sg.homedir();return[{kind:"dir",dir:Mt.join(e,".luban","rules")},{kind:"dir",dir:Mt.join(e,".cursor","rules")},{kind:"file",file:Mt.join(e,"AGENTS.md"),agents:!0},{kind:"dir",dir:Mt.join(n,".luban","rules")}]}function ug(t,e,n){if(e>oM)return;let s;try{s=Fu.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=Mt.join(t,o.name);if(o.isDirectory()){if(lg[o.name]||o.name.startsWith("."))continue;ug(i,e+1,n);continue}!o.isFile()||!Iu.test(o.name)||n.push(i)}}function Lu(t){return String(t??"").replace(/^---\r?\n[\s\S]*?\r?\n---[ \t]*\r?\n?/,"").trim()}function uM(t){let e=/^---\r?\n([\s\S]*?)\r?\n---/.exec(String(t??""));return e?e[1]:""}function ng(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 dg(t){let e=[],n=uM(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&&ng(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(","))ng(e,u)}return e}function dM(t){let e=Lu(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 fg(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 fM(t,e){let n;try{n=Fu.readFileSync(t,"utf8")}catch{return null}let s=n.length>ti;s&&(n=n.slice(0,ti));let r=sM.frontmatter(n),o=za(r.name)||Mt.basename(t).replace(Iu,"");if(!o)return null;let i=dg(n),a=fg(r,i,e),l=Lu(n),c=lM(za(r.description||r.trigger||r.when_to_use||"")||dM(n),iM);return{name:o,description:c,globs:i,globsRe:i.map(function(u){return rg.globToRegExp(u)}).filter(Boolean),alwaysApply:a==="always",tier:a,file:t,rel:cM(t),chars:n.length,truncated:s,body:l,text:n}}function pg(t,e){let n=e||{};t&&(String(t)!==Q.root&&(Q.scannedMs=0),Q.root=String(t));let s=cg(Q.root);Q.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=[];ug(a.dir,0,l);for(let c of l)r.push({file:c,src:a})}else{let l;try{l=Fu.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=fM(a.file,a.src);if(!l)continue;let c=l.name.toLowerCase();if(!i[c]&&(i[c]=!0,o.push(l),o.length>=rM))break}return o.sort(function(a,l){let c=a.name.toLowerCase(),u=l.name.toLowerCase();return c<u?-1:c>u?1:0}),Q.rules=o,Q.scannedAt=new Date().toISOString(),Q.scannedMs=Date.now(),n.quiet||ju("rules_scanned",{count:o.length,root:Q.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 pM(){if(!Q.enabled||(Ga(),!Q.rules.length))return"";let t=Q.rules.filter(function(i){return i.tier==="always"}),e=Q.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>Q.maxChars){o.push(i);continue}s+=l,r.push(a+`
81
81
  `+(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
82
82
 
83
83
  `+r.join(`
@@ -87,14 +87,14 @@ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var wg=
87
87
  `)+(l?`
88
88
  - \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(`
89
89
 
90
- `)}function mg(t){let e=[];for(let n of t||[]){let s=String(n??"").trim();if(!s)continue;let r=s;if(Tt.isAbsolute(s)){if(Q.root){let o=Tt.relative(Q.root,s);r=!o.startsWith("..")&&!Tt.isAbsolute(o)?o:s}}else r=s.replace(/^\.\//,"");r=r.split(Tt.sep).join("/"),e.indexOf(r)<0&&e.push(r)}return e.sort()}function mM(t){if(!Q.enabled)return"";let e=mg(t);if(!e.length)return"";Ga();let n=Q.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 rg.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>Q.maxChars){a.push(l.rule);continue}o+=u,i.push(c+`
90
+ `)}function mg(t){let e=[];for(let n of t||[]){let s=String(n??"").trim();if(!s)continue;let r=s;if(Mt.isAbsolute(s)){if(Q.root){let o=Mt.relative(Q.root,s);r=!o.startsWith("..")&&!Mt.isAbsolute(o)?o:s}}else r=s.replace(/^\.\//,"");r=r.split(Mt.sep).join("/"),e.indexOf(r)<0&&e.push(r)}return e.sort()}function mM(t){if(!Q.enabled)return"";let e=mg(t);if(!e.length)return"";Ga();let n=Q.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 rg.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>Q.maxChars){a.push(l.rule);continue}o+=u,i.push(c+`
91
91
  `+(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
92
92
 
93
93
  `+i.join(`
94
94
 
95
95
  `)),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(`
96
96
 
97
- `)}function hg(t){let e=za(t).toLowerCase();if(!e)return null;Ga();let n=Q.rules.find(function(s){return s.name.toLowerCase()===e});return n||(n=Q.rules.find(function(s){return Tt.basename(s.file).replace(Iu,"").toLowerCase()===e}),n||null)}function hM(t){let e=hg(t);if(!e){let o=Q.rules.map(function(i){return i.name}).join(", ")||"(\u65E0)";throw new Error("\u6CA1\u6709\u8FD9\u4E2A\u89C4\u5219: "+za(t)+"\uFF08\u53EF\u7528: "+o+"\uFF09")}let n=String(e.text||""),r=n.length>ti?n.slice(0,ti)+`
97
+ `)}function hg(t){let e=za(t).toLowerCase();if(!e)return null;Ga();let n=Q.rules.find(function(s){return s.name.toLowerCase()===e});return n||(n=Q.rules.find(function(s){return Mt.basename(s.file).replace(Iu,"").toLowerCase()===e}),n||null)}function hM(t){let e=hg(t);if(!e){let o=Q.rules.map(function(i){return i.name}).join(", ")||"(\u65E0)";throw new Error("\u6CA1\u6709\u8FD9\u4E2A\u89C4\u5219: "+za(t)+"\uFF08\u53EF\u7528: "+o+"\uFF09")}let n=String(e.text||""),r=n.length>ti?n.slice(0,ti)+`
98
98
  \u2026[\u622A\u65AD]`:n;return"\u89C4\u5219 "+e.name+" \xB7 "+e.rel+`
99
99
  \u6765\u6E90\uFF1A`+e.file+"\uFF08\u6863\u4F4D\uFF1A"+e.tier+(e.globs.length?"\uFF1Bglobs: "+e.globs.join(", "):"")+`\uFF09
100
100
 
@@ -107,29 +107,29 @@ filesearch selftest: `+r+" passed, "+o+" failed"),process.exit(o?1:0)}});var wg=
107
107
  `+c.join(`
108
108
  `),m=!1;if(f>0){let h="\uFF08\u5176\u4F59 "+f+" \u4E2A\u6587\u4EF6\u7701\u7565\uFF09";p.length+1+h.length<=i?p+=`
109
109
  `+h:p=p.slice(0,Math.max(0,i-Pg.length))+Pg,m=!0}return{block:p,chars:p.length,files:o.length,omitted:f,truncated:m}}qu.exports={DEFAULT_MAX_CHARS:3e3,block:cr,_lineOf:jg};if(require.main===qu){let n=function(f,p){p?(t++,console.log(" \u2713 "+f)):(e++,console.log(" \u2717 "+f))};EM=n;let t=0,e=0,s=cr([]);n("\u7A7A\u8BB0\u5F55\u8FD4\u56DE\u7A7A\u5757",s.block===""&&s.files===0&&!s.truncated);let r=cr([{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=cr([{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=cr([{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=cr([{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=cr([{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(`
110
- workset.js: `+t+" \u901A\u8FC7, "+e+" \u5931\u8D25"),process.exit(e?1:0)}var EM});var Hg=Z((fI,Kg)=>{var ur=require("fs"),PM=require("path"),jM=lr().SKIP_DIRS,Os={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:jM},Fg=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+/)),Ig=/[A-Za-z_$][A-Za-z0-9_$]*/g,Lg=/[\u4e00-\u9fff]+/g;function Dg(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 Bu(t){let e=String(t??""),n=[],s;for(Ig.lastIndex=0;s=Ig.exec(e);){let r=s[0],o=r.toLowerCase();o.length>=2&&!Fg.has(o)&&n.push(o);for(let i of Dg(r)){let a=i.toLowerCase();a.length>=2&&a!==o&&!Fg.has(a)&&n.push(a)}}for(Lg.lastIndex=0;s=Lg.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 Rg(t){let e=null;try{e=ur.openSync(t,"r");let n=Buffer.alloc(4096),s=ur.readSync(e,n,0,4096,0);return n.slice(0,s).indexOf(0)>=0}catch{return!0}finally{if(e!==null)try{ur.closeSync(e)}catch{}}}function qg(t,e){let n=Object.assign({},Os,e||{}),s=new Set(n.skipDirs||Os.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=ur.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=PM.join(a,d.name),p=l?l+"/"+d.name:d.name,m;try{m=ur.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 Bg(t,e){let n=Bu(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 Yr=new Map;function NM(){return{docs:new Map,inverted:new Map,df:new Map,avgLen:0,dirty:!1,builtAt:0}}function FM(t){let e=0;for(let n of t.values())e+=n.size;return e}function IM(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 LM(t,e){let n=Object.assign({},Os,e||{}),s=qg(t,n),r=Yr.get(t);r||(r=NM(),Yr.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||Rg(a.abs))continue;let c;try{c=ur.readFileSync(a.abs,"utf8")}catch{continue}let u=Bg(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)&&IM(r,n.maxGlobalTokens),{index:r,files:s.files.length,truncated:s.truncated,changed:i}}function DM(t,e){return Math.log(1+(e-t+.5)/(t+.5))}function Ug(t,e,n){let s=Object.assign({},Os,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=DM(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 RM(t,e){let n=String(t??"").replace(/\r$/,"");return n.length>e?n.slice(0,e)+"\u2026":n}function Wg(t,e,n){let s=Object.assign({},Os,n||{}),r;try{r=ur.readFileSync(t,"utf8")}catch{return[]}let o=r.split(`
111
- `),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:RM(o[m],s.maxLineLen),match:m===d.i}))}return u}function qM(t,e,n){let s=Date.now(),r=Object.assign({},Os,n||{}),o=String(e??"").trim();if(!o)throw new Error("\u641C\u7D22\u8BCD\u4E3A\u7A7A");let i=Array.from(new Set(Bu(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=LM(t,r),l=Ug(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 k=Wg(h.abs,i,r);k.length&&f.push({path:m,score:Number(p[1].toFixed(3)),lines:k})}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 BM(t,e){let n=Object.assign({},Os,e||{}),s=t||{},r="\u626B\u63CF "+(s.files||0)+" \u4E2A\u6587\u4EF6\uFF08\u7D22\u5F15 "+(s.indexed||0)+`\uFF09
110
+ workset.js: `+t+" \u901A\u8FC7, "+e+" \u5931\u8D25"),process.exit(e?1:0)}var EM});var Hg=Z((fI,Kg)=>{var ur=require("fs"),PM=require("path"),jM=lr().SKIP_DIRS,Es={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:jM},Fg=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+/)),Ig=/[A-Za-z_$][A-Za-z0-9_$]*/g,Lg=/[\u4e00-\u9fff]+/g;function Dg(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 Bu(t){let e=String(t??""),n=[],s;for(Ig.lastIndex=0;s=Ig.exec(e);){let r=s[0],o=r.toLowerCase();o.length>=2&&!Fg.has(o)&&n.push(o);for(let i of Dg(r)){let a=i.toLowerCase();a.length>=2&&a!==o&&!Fg.has(a)&&n.push(a)}}for(Lg.lastIndex=0;s=Lg.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 Rg(t){let e=null;try{e=ur.openSync(t,"r");let n=Buffer.alloc(4096),s=ur.readSync(e,n,0,4096,0);return n.slice(0,s).indexOf(0)>=0}catch{return!0}finally{if(e!==null)try{ur.closeSync(e)}catch{}}}function qg(t,e){let n=Object.assign({},Es,e||{}),s=new Set(n.skipDirs||Es.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=ur.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=PM.join(a,d.name),p=l?l+"/"+d.name:d.name,m;try{m=ur.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 Bg(t,e){let n=Bu(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 Yr=new Map;function NM(){return{docs:new Map,inverted:new Map,df:new Map,avgLen:0,dirty:!1,builtAt:0}}function FM(t){let e=0;for(let n of t.values())e+=n.size;return e}function IM(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 LM(t,e){let n=Object.assign({},Es,e||{}),s=qg(t,n),r=Yr.get(t);r||(r=NM(),Yr.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||Rg(a.abs))continue;let c;try{c=ur.readFileSync(a.abs,"utf8")}catch{continue}let u=Bg(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)&&IM(r,n.maxGlobalTokens),{index:r,files:s.files.length,truncated:s.truncated,changed:i}}function DM(t,e){return Math.log(1+(e-t+.5)/(t+.5))}function Ug(t,e,n){let s=Object.assign({},Es,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=DM(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 RM(t,e){let n=String(t??"").replace(/\r$/,"");return n.length>e?n.slice(0,e)+"\u2026":n}function Wg(t,e,n){let s=Object.assign({},Es,n||{}),r;try{r=ur.readFileSync(t,"utf8")}catch{return[]}let o=r.split(`
111
+ `),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:RM(o[m],s.maxLineLen),match:m===d.i}))}return u}function qM(t,e,n){let s=Date.now(),r=Object.assign({},Es,n||{}),o=String(e??"").trim();if(!o)throw new Error("\u641C\u7D22\u8BCD\u4E3A\u7A7A");let i=Array.from(new Set(Bu(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=LM(t,r),l=Ug(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 k=Wg(h.abs,i,r);k.length&&f.push({path:m,score:Number(p[1].toFixed(3)),lines:k})}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 BM(t,e){let n=Object.assign({},Es,e||{}),s=t||{},r="\u626B\u63CF "+(s.files||0)+" \u4E2A\u6587\u4EF6\uFF08\u7D22\u5F15 "+(s.indexed||0)+`\uFF09
112
112
  \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+`
113
113
  \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(`
114
- `)}function UM(t){let e=Yr.get(t);return e?{docs:e.docs.size,tokens:e.inverted.size,postings:FM(e.inverted),avgLen:Number(e.avgLen.toFixed(1)),builtAt:e.builtAt}:{docs:0,tokens:0,postings:0,avgLen:0,builtAt:0}}Kg.exports={DEFAULTS:Os,tokenize:Bu,scanFiles:qg,termFreq:Bg,search:qM,format:BM,stats:UM,reset:function(t){t?Yr.delete(t):Yr.clear()},_CACHE:Yr,_splitIdentifier:Dg,_looksBinary:Rg,_scoreFiles:Ug,_findLines:Wg}});var Xg=Z((pI,$g)=>{var WM=require("path"),Es={prefixLines:120,suffixLines:40,maxChars:6e3,maxCompletionChars:4e3,minOverlap:4},KM={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 zg(t){let e=WM.extname(String(t??"")).replace(".","").toLowerCase();return KM[e]||""}function Gg(t,e){let n=String(t).split(`
114
+ `)}function UM(t){let e=Yr.get(t);return e?{docs:e.docs.size,tokens:e.inverted.size,postings:FM(e.inverted),avgLen:Number(e.avgLen.toFixed(1)),builtAt:e.builtAt}:{docs:0,tokens:0,postings:0,avgLen:0,builtAt:0}}Kg.exports={DEFAULTS:Es,tokenize:Bu,scanFiles:qg,termFreq:Bg,search:qM,format:BM,stats:UM,reset:function(t){t?Yr.delete(t):Yr.clear()},_CACHE:Yr,_splitIdentifier:Dg,_looksBinary:Rg,_scoreFiles:Ug,_findLines:Wg}});var Xg=Z((pI,$g)=>{var WM=require("path"),Ps={prefixLines:120,suffixLines:40,maxChars:6e3,maxCompletionChars:4e3,minOverlap:4},KM={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 zg(t){let e=WM.extname(String(t??"")).replace(".","").toLowerCase();return KM[e]||""}function Gg(t,e){let n=String(t).split(`
115
115
  `);return n.length<=e?String(t):n.slice(n.length-e).join(`
116
116
  `)}function Jg(t,e){let n=String(t).split(`
117
117
  `);return n.length<=e?String(t):n.slice(0,e).join(`
118
- `)}function HM(t){let e=Object.assign({},Es,t||{}),n=Number(e.maxChars)>0?Math.floor(Number(e.maxChars)):Es.maxChars,s=Number(e.prefixLines)>0?Math.floor(Number(e.prefixLines)):Es.prefixLines,r=Number(e.suffixLines)>=0?Math.floor(Number(e.suffixLines)):Es.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=Gg(l,s),c=Jg(c,r),l.length>n&&(l=l.slice(l.length-n)),!l.trim()){let u=zg(e.path);u&&(l=u+String(e.path||"")+`
119
- `)}return{prompt:l,suffix:c,offset:a,chars:l.length}}function zM(t,e,n){let s=Object.assign({},Es,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)||Es.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):Es.maxCompletionChars;return r.length>a&&(r=r.slice(0,a)),r}$g.exports={DEFAULTS:Es,buildPrompt:HM,trimCompletion:zM,commentFor:zg,_lastLines:Gg,_firstLines:Jg}});var ly=Z((hI,ay)=>{var mI=require("path"),ty=new Set(["env","nohup","time","nice","ionice","command","xargs","watch","timeout","stdbuf","caffeinate"]),Vg=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"]]),GM=new Set(["sh","bash","zsh","dash","fish","csh","tcsh","ksh","ash","mksh"]),JM=new Set(["node","nodejs","python","python2","python3","ruby","perl","php","osascript","deno","bun","tsx","ts-node"]),$M=new Set(["-v","-V","--version","-h","--help","-?"]),Yg=new Set(["status","log","show","diff","blame","grep","ls-files","ls-tree","rev-parse","describe","shortlog","cat-file","reflog","version","help","whatchanged"]),XM=new Set(["branch","tag","remote","stash","config"]),Zg=/^(--set-upstream|--unset-upstream|--delete|--move|--copy|--edit-description|--set-url|--add|--remove|--prune|--update|--rename|--progress|--track|--no-track)/,VM=new Set(["npm","yarn","pnpm"]),Qg=new Set(["ls","list","ll","la","view","info","outdated","why","ping","search","help"]);function ni(t){let e=String(t??"");if(!e||e===".")return e;let n=e.split("/");return n[n.length-1]||e}function Wu(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===`
120
- `){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 ny(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 sy(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 YM(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(!$M.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 ZM(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(Yg.has(n))return null;if(!XM.has(n))return{reason:"git "+n+" \u4E0D\u5C5E\u4E8E\u53EA\u8BFB\u5B50\u547D\u4EE4\uFF08\u53EF\u7528\uFF1A"+Array.from(Yg).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 Zg.test(i)||/^-[dDmMcC]$/.test(i)}))return{reason:"git branch "+(s.find(function(i){return Zg.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 QM(t,e){let n=e.find(function(s){return!/^-/.test(s)});return n?Qg.has(n)?null:{reason:t+" "+n+" \u4F1A\u5199\u6587\u4EF6\u6216\u6539\u4F9D\u8D56\uFF08Plan \u6A21\u5F0F\u53EA\u5141\u8BB8 "+Array.from(Qg).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 ry(t){let e=ny(t).trim();if(!e)return null;let n=sy(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=ni(s[0]);if(!ty.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=ni(s[0]),i=s.slice(1),a=t.trim();if(GM.has(o))return{reason:o+" -c \u53EF\u4EE5\u6267\u884C\u4EFB\u610F\u547D\u4EE4\uFF0C\u65E0\u6CD5\u9010\u6761\u6821\u9A8C"};if(Vg.has(o))return{reason:Vg.get(o)};if(JM.has(o)){let l=YM(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=ZM(i);if(l)return{reason:l.reason}}if(VM.has(o)){let l=QM(o,i);if(l)return{reason:l.reason}}return null}function eC(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=Wu(e);if(!n.length)return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};for(let s of n){let r=ry(s);if(r)return{ok:!1,reason:r.reason,segment:r.segment||s.trim()}}return{ok:!0}}var tC=function(){try{return lr().SKIP_DIRS}catch{return[]}}(),oy=Object.create(null);for(let t of tC)oy[String(t).toLowerCase()]=1;var iy=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"]),nC=new Set(["powershell","pwsh","cmd","command","bash","sh","zsh","dash","fish"]),sC=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob|g)$/i,rC=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob)=/i,oC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex|not)$/i,iC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex)=/i,aC=new RegExp("(?:^|[^A-Za-z0-9_-])("+Array.from(iy).join("|")+")(?![A-Za-z0-9_-])","i");function Uu(t){return String(t??"").replace(/^["']+/,"").replace(/["']+$/,"")}function lC(t){let e=Uu(t);if(!/[/\\]/.test(e))return"";let n=e.replace(/\\/g,"/").split("/");for(let s of n){let r=s.replace(/["']+$/,"").toLowerCase();if(r&&oy[r])return r}return""}function ey(t,e){let n=!1;for(let s of t){if(n){n=!1;continue}if(rC.test(s))continue;if(sC.test(s)){n=!0;continue}if(e){if(iC.test(s))continue;if(oC.test(s)){n=!0;continue}}let r=lC(s);if(r)return r}return""}function cC(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=Uu(n[s]);if(/^-/.test(a)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(a)||/^\d+(\.\d+)?[smhd]?$/.test(a)){s++;continue}if(ty.has(ni(a))){s++;continue}break}if(s>=n.length)return null;let r=ni(Uu(n[s])).toLowerCase(),o=r==="find"||/(?:^|[^A-Za-z0-9_-])find(?![A-Za-z0-9_-])/i.test(e);if(nC.has(r)){if(!aC.test(e))return null;let a=ey(n.slice(s+1),o);return a?{seg:a,command:r}:null}if(!iy.has(r))return null;let i=ey(n.slice(s+1),o);return i?{seg:i,command:r}:null}function uC(t){let e=String(t??"");if(!e.trim())return null;for(let n of Wu(e)){let s=cC(n);if(s)return{seg:s.seg,command:s.command,segment:n.trim()}}return null}ay.exports={check:eC,pathGuard:uC,_splitSegments:Wu,_stripQuotes:ny,_redirectTarget:sy,_checkSegment:ry,_baseOf:ni}});var hy=Z((gI,zu)=>{var Gn=require("fs"),Ps=require("path"),cy="*** Begin Patch",uy="*** End Patch",dy="*** Add File:",fy="*** Update File:",py="*** Delete File:",dC="@@";function en(t){let n=String(t??"").split(`
121
- `),s=-1,r=-1;for(let c=0;c<n.length;c++){let u=n[c].trim();if(s<0&&u===cy){s=c;continue}if(u===uy){r=c;break}}if(s<0)return{ops:[],error:"\u7F3A\u5C11 "+cy+" \u8D77\u59CB\u6807\u8BB0"};if(r<0)return{ops:[],error:"\u7F3A\u5C11 "+uy+" \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(dy)===0){let f=d.slice(dy.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(fy)===0){let f=d.slice(fy.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(py)===0){let f=d.slice(py.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(dC)===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)===" "?Zr(i).seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(Zr(i).seq.push({k:"del",v:u.slice(1)}),Zr(i).del.push(u.slice(1))):u.charAt(0)==="+"?(Zr(i).seq.push({k:"add",v:u.slice(1)}),Zr(i).add.push(u.slice(1))):d===""?Zr(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 Zr(t){return t.chunks.length||t.chunks.push({context:[],del:[],add:[]}),t.chunks[t.chunks.length-1]}function zn(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 Ps.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(Gn.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(`
118
+ `)}function HM(t){let e=Object.assign({},Ps,t||{}),n=Number(e.maxChars)>0?Math.floor(Number(e.maxChars)):Ps.maxChars,s=Number(e.prefixLines)>0?Math.floor(Number(e.prefixLines)):Ps.prefixLines,r=Number(e.suffixLines)>=0?Math.floor(Number(e.suffixLines)):Ps.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=Gg(l,s),c=Jg(c,r),l.length>n&&(l=l.slice(l.length-n)),!l.trim()){let u=zg(e.path);u&&(l=u+String(e.path||"")+`
119
+ `)}return{prompt:l,suffix:c,offset:a,chars:l.length}}function zM(t,e,n){let s=Object.assign({},Ps,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)||Ps.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):Ps.maxCompletionChars;return r.length>a&&(r=r.slice(0,a)),r}$g.exports={DEFAULTS:Ps,buildPrompt:HM,trimCompletion:zM,commentFor:zg,_lastLines:Gg,_firstLines:Jg}});var ly=Z((hI,ay)=>{var mI=require("path"),ty=new Set(["env","nohup","time","nice","ionice","command","xargs","watch","timeout","stdbuf","caffeinate"]),Vg=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"]]),GM=new Set(["sh","bash","zsh","dash","fish","csh","tcsh","ksh","ash","mksh"]),JM=new Set(["node","nodejs","python","python2","python3","ruby","perl","php","osascript","deno","bun","tsx","ts-node"]),$M=new Set(["-v","-V","--version","-h","--help","-?"]),Yg=new Set(["status","log","show","diff","blame","grep","ls-files","ls-tree","rev-parse","describe","shortlog","cat-file","reflog","version","help","whatchanged"]),XM=new Set(["branch","tag","remote","stash","config"]),Zg=/^(--set-upstream|--unset-upstream|--delete|--move|--copy|--edit-description|--set-url|--add|--remove|--prune|--update|--rename|--progress|--track|--no-track)/,VM=new Set(["npm","yarn","pnpm"]),Qg=new Set(["ls","list","ll","la","view","info","outdated","why","ping","search","help"]);function ni(t){let e=String(t??"");if(!e||e===".")return e;let n=e.split("/");return n[n.length-1]||e}function Wu(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===`
120
+ `){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 ny(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 sy(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 YM(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(!$M.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 ZM(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(Yg.has(n))return null;if(!XM.has(n))return{reason:"git "+n+" \u4E0D\u5C5E\u4E8E\u53EA\u8BFB\u5B50\u547D\u4EE4\uFF08\u53EF\u7528\uFF1A"+Array.from(Yg).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 Zg.test(i)||/^-[dDmMcC]$/.test(i)}))return{reason:"git branch "+(s.find(function(i){return Zg.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 QM(t,e){let n=e.find(function(s){return!/^-/.test(s)});return n?Qg.has(n)?null:{reason:t+" "+n+" \u4F1A\u5199\u6587\u4EF6\u6216\u6539\u4F9D\u8D56\uFF08Plan \u6A21\u5F0F\u53EA\u5141\u8BB8 "+Array.from(Qg).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 ry(t){let e=ny(t).trim();if(!e)return null;let n=sy(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=ni(s[0]);if(!ty.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=ni(s[0]),i=s.slice(1),a=t.trim();if(GM.has(o))return{reason:o+" -c \u53EF\u4EE5\u6267\u884C\u4EFB\u610F\u547D\u4EE4\uFF0C\u65E0\u6CD5\u9010\u6761\u6821\u9A8C"};if(Vg.has(o))return{reason:Vg.get(o)};if(JM.has(o)){let l=YM(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=ZM(i);if(l)return{reason:l.reason}}if(VM.has(o)){let l=QM(o,i);if(l)return{reason:l.reason}}return null}function eC(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=Wu(e);if(!n.length)return{ok:!1,reason:"\u547D\u4EE4\u4E3A\u7A7A"};for(let s of n){let r=ry(s);if(r)return{ok:!1,reason:r.reason,segment:r.segment||s.trim()}}return{ok:!0}}var tC=function(){try{return lr().SKIP_DIRS}catch{return[]}}(),oy=Object.create(null);for(let t of tC)oy[String(t).toLowerCase()]=1;var iy=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"]),nC=new Set(["powershell","pwsh","cmd","command","bash","sh","zsh","dash","fish"]),sC=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob|g)$/i,rC=/^--?(exclude|exclude-dir|ignore|ignore-file|ignore-dir|glob)=/i,oC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex|not)$/i,iC=/^--?(path|ipath|wholename|iwholename|name|iname|regex|iregex)=/i,aC=new RegExp("(?:^|[^A-Za-z0-9_-])("+Array.from(iy).join("|")+")(?![A-Za-z0-9_-])","i");function Uu(t){return String(t??"").replace(/^["']+/,"").replace(/["']+$/,"")}function lC(t){let e=Uu(t);if(!/[/\\]/.test(e))return"";let n=e.replace(/\\/g,"/").split("/");for(let s of n){let r=s.replace(/["']+$/,"").toLowerCase();if(r&&oy[r])return r}return""}function ey(t,e){let n=!1;for(let s of t){if(n){n=!1;continue}if(rC.test(s))continue;if(sC.test(s)){n=!0;continue}if(e){if(iC.test(s))continue;if(oC.test(s)){n=!0;continue}}let r=lC(s);if(r)return r}return""}function cC(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=Uu(n[s]);if(/^-/.test(a)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(a)||/^\d+(\.\d+)?[smhd]?$/.test(a)){s++;continue}if(ty.has(ni(a))){s++;continue}break}if(s>=n.length)return null;let r=ni(Uu(n[s])).toLowerCase(),o=r==="find"||/(?:^|[^A-Za-z0-9_-])find(?![A-Za-z0-9_-])/i.test(e);if(nC.has(r)){if(!aC.test(e))return null;let a=ey(n.slice(s+1),o);return a?{seg:a,command:r}:null}if(!iy.has(r))return null;let i=ey(n.slice(s+1),o);return i?{seg:i,command:r}:null}function uC(t){let e=String(t??"");if(!e.trim())return null;for(let n of Wu(e)){let s=cC(n);if(s)return{seg:s.seg,command:s.command,segment:n.trim()}}return null}ay.exports={check:eC,pathGuard:uC,_splitSegments:Wu,_stripQuotes:ny,_redirectTarget:sy,_checkSegment:ry,_baseOf:ni}});var hy=Z((gI,zu)=>{var Jn=require("fs"),js=require("path"),cy="*** Begin Patch",uy="*** End Patch",dy="*** Add File:",fy="*** Update File:",py="*** Delete File:",dC="@@";function en(t){let n=String(t??"").split(`
121
+ `),s=-1,r=-1;for(let c=0;c<n.length;c++){let u=n[c].trim();if(s<0&&u===cy){s=c;continue}if(u===uy){r=c;break}}if(s<0)return{ops:[],error:"\u7F3A\u5C11 "+cy+" \u8D77\u59CB\u6807\u8BB0"};if(r<0)return{ops:[],error:"\u7F3A\u5C11 "+uy+" \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(dy)===0){let f=d.slice(dy.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(fy)===0){let f=d.slice(fy.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(py)===0){let f=d.slice(py.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(dC)===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)===" "?Zr(i).seq.push({k:"ctx",v:u.slice(1)}):u.charAt(0)==="-"?(Zr(i).seq.push({k:"del",v:u.slice(1)}),Zr(i).del.push(u.slice(1))):u.charAt(0)==="+"?(Zr(i).seq.push({k:"add",v:u.slice(1)}),Zr(i).add.push(u.slice(1))):d===""?Zr(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 Zr(t){return t.chunks.length||t.chunks.push({context:[],del:[],add:[]}),t.chunks[t.chunks.length-1]}function Gn(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 js.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(Jn.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(`
122
122
  `)+(l.lines.length?`
123
- `:"")});continue}if(l.type==="delete"){if(!Gn.existsSync(u))return{ok:!1,error:"Delete File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};if(!Gn.statSync(u).isFile())return{ok:!1,error:"Delete File \u76EE\u6807\u4E0D\u662F\u6587\u4EF6\uFF1A"+c};let d="";try{d=Gn.readFileSync(u,"utf8")}catch{d=""}a.push({type:"delete",rel:c,abs:u,before:d});continue}if(l.type==="update"){if(!Gn.existsSync(u))return{ok:!1,error:"Update File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};let d;try{d=Gn.readFileSync(u,"utf8")}catch(p){return{ok:!1,error:"\u8BFB\u53D6\u5931\u8D25 "+c+"\uFF1A"+p.message}}let f=my(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 my(t,e){if(!e.length)return{error:"Update File \u6CA1\u6709\u4EFB\u4F55 @@ \u5757"};let n=t.split(`
123
+ `:"")});continue}if(l.type==="delete"){if(!Jn.existsSync(u))return{ok:!1,error:"Delete File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};if(!Jn.statSync(u).isFile())return{ok:!1,error:"Delete File \u76EE\u6807\u4E0D\u662F\u6587\u4EF6\uFF1A"+c};let d="";try{d=Jn.readFileSync(u,"utf8")}catch{d=""}a.push({type:"delete",rel:c,abs:u,before:d});continue}if(l.type==="update"){if(!Jn.existsSync(u))return{ok:!1,error:"Update File \u4F46\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A"+c};let d;try{d=Jn.readFileSync(u,"utf8")}catch(p){return{ok:!1,error:"\u8BFB\u53D6\u5931\u8D25 "+c+"\uFF1A"+p.message}}let f=my(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 my(t,e){if(!e.length)return{error:"Update File \u6CA1\u6709\u4EFB\u4F55 @@ \u5757"};let n=t.split(`
124
124
  `),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=fC(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(`
125
- `),changed:s}}function fC(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 Ku(t,e,n){let s=zn(t,e);if(!s.ok)return{ok:!1,error:s.error};let r=[];for(let o of s.plan)o.type==="add"?(Gn.mkdirSync(Ps.dirname(o.abs),{recursive:!0}),Gn.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"add"})):o.type==="update"?(Gn.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"update"})):o.type==="delete"&&(Gn.rmSync(o.abs,{force:!0}),r.push({rel:o.rel,action:"delete"}));return{ok:!0,results:r}}function Hu(t){if(!t.ok)return"apply_patch \u5931\u8D25\uFF1A"+t.error;let e={add:0,update:0,delete:0},n=t.results.map(function(s){return e[s.action]++," "+s.action+" "+s.rel});return"apply_patch \u6210\u529F\uFF1A\u65B0\u589E "+e.add+" / \u4FEE\u6539 "+e.update+" / \u5220\u9664 "+e.delete+"\uFF0C\u5171 "+t.results.length+` \u4E2A\u6587\u4EF6
125
+ `),changed:s}}function fC(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 Ku(t,e,n){let s=Gn(t,e);if(!s.ok)return{ok:!1,error:s.error};let r=[];for(let o of s.plan)o.type==="add"?(Jn.mkdirSync(js.dirname(o.abs),{recursive:!0}),Jn.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"add"})):o.type==="update"?(Jn.writeFileSync(o.abs,o.content),r.push({rel:o.rel,action:"update"})):o.type==="delete"&&(Jn.rmSync(o.abs,{force:!0}),r.push({rel:o.rel,action:"delete"}));return{ok:!0,results:r}}function Hu(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
126
126
  `+n.join(`
127
- `)}zu.exports={parsePatch:en,validatePatch:zn,applyChunks:my,applyPatch:Ku,formatPatchResult:Hu};require.main===zu&&pC();function pC(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(Ps.join(t.tmpdir(),"luban-patch-")),s=function(G,H){let q=Ps.join(n,G);e.mkdirSync(Ps.dirname(q),{recursive:!0}),e.writeFileSync(q,H)},r=function(G){return e.readFileSync(Ps.join(n,G),"utf8")};s("a.js",`const a = 1;
127
+ `)}zu.exports={parsePatch:en,validatePatch:Gn,applyChunks:my,applyPatch:Ku,formatPatchResult:Hu};require.main===zu&&pC();function pC(){let t=require("os"),e=require("fs"),n=e.mkdtempSync(js.join(t.tmpdir(),"luban-patch-")),s=function(G,H){let q=js.join(n,G);e.mkdirSync(js.dirname(q),{recursive:!0}),e.writeFileSync(q,H)},r=function(G){return e.readFileSync(js.join(n,G),"utf8")};s("a.js",`const a = 1;
128
128
  const b = 2;
129
129
  const c = 3;
130
130
  `),s("old.js",`legacy
131
131
  `);let o=0,i=0,a=function(G,H,q){H?(o++,console.log(" ok "+G)):(i++,console.log(" FAIL "+G+(q?" :: "+q:"")))},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(`
132
- `),c=en(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=zn(n,c);a("validate \u901A\u8FC7",u.ok,u.error),a("update \u5185\u5BB9\u6B63\u786E",u.plan[1].content===`const a = 1;
132
+ `),c=en(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=Gn(n,c);a("validate \u901A\u8FC7",u.ok,u.error),a("update \u5185\u5BB9\u6B63\u786E",u.plan[1].content===`const a = 1;
133
133
  const b = 20;
134
134
  const c = 3;
135
135
  `,JSON.stringify(u.plan[1]&&u.plan[1].content));let d=Ku(n,c);a("apply \u6210\u529F",d.ok,d.error),a("add \u843D\u76D8",r("new.js")===`const fresh = true;
@@ -138,7 +138,7 @@ const two = 2;
138
138
  `),a("update \u843D\u76D8",r("a.js")===`const a = 1;
139
139
  const b = 20;
140
140
  const c = 3;
141
- `),a("delete \u843D\u76D8",!e.existsSync(Ps.join(n,"old.js"))),s("multi.js",`l1
141
+ `),a("delete \u843D\u76D8",!e.existsSync(js.join(n,"old.js"))),s("multi.js",`l1
142
142
  l2
143
143
  l3
144
144
  l4
@@ -152,30 +152,30 @@ L5
152
152
  `,JSON.stringify(r("multi.js"))),s("ctx.js",`alpha
153
153
  beta
154
154
  `);let m=["*** Begin Patch","*** Update File: ctx.js","@@"," alpha","-gamma","+delta","*** End Patch"].join(`
155
- `),h=zn(n,en(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
155
+ `),h=Gn(n,en(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
156
156
  beta
157
- `);let x=zn(n,en(`*** Begin Patch
157
+ `);let x=Gn(n,en(`*** Begin Patch
158
158
  *** Add File: a.js
159
159
  +x
160
- *** End Patch`));a("Add \u5DF2\u5B58\u5728\u62A5\u9519",!x.ok&&/已存在/.test(x.error),x.error);let g=zn(n,en(`*** Begin Patch
160
+ *** End Patch`));a("Add \u5DF2\u5B58\u5728\u62A5\u9519",!x.ok&&/已存在/.test(x.error),x.error);let g=Gn(n,en(`*** Begin Patch
161
161
  *** Delete File: nope.js
162
162
  *** End Patch`));a("Delete \u4E0D\u5B58\u5728\u62A5\u9519",!g.ok&&/不存在/.test(g.error),g.error),a("\u7F3A Begin \u62A5\u9519",!!en(`*** Add File: x
163
163
  +y`).error),a("\u7F3A End \u62A5\u9519",!!en(`*** Begin Patch
164
164
  *** Add File: x
165
165
  +y`).error),a("\u7A7A patch \u62A5\u9519",!!en(`*** Begin Patch
166
- *** End Patch`).error);let y=zn(n,en("```patch\n*** Begin Patch\n*** Add File: fenced.js\n+ok\n*** End Patch\n```"));a("\u5BB9\u9519\u4EE3\u7801\u56F4\u680F",y.ok,y.error);let _=zn(n,en(`*** Begin Patch
166
+ *** End Patch`).error);let y=Gn(n,en("```patch\n*** Begin Patch\n*** Add File: fenced.js\n+ok\n*** End Patch\n```"));a("\u5BB9\u9519\u4EE3\u7801\u56F4\u680F",y.ok,y.error);let _=Gn(n,en(`*** Begin Patch
167
167
  *** Add File: dup.js
168
168
  +a
169
169
  *** Add File: dup.js
170
170
  +b
171
171
  *** End Patch`));a("\u8DEF\u5F84\u91CD\u590D\u62A5\u9519",!_.ok&&/重复/.test(_.error),_.error),s("guard.js",`safe
172
- `);let A=zn(n,en(`*** Begin Patch
172
+ `);let A=Gn(n,en(`*** Begin Patch
173
173
  *** Update File: guard.js
174
174
  @@
175
175
  safe
176
176
  *** Delete File: old2.js
177
- *** End Patch`),{resolve:function(G){if(G==="old2.js")throw new Error("\u8DEF\u5F84\u8D8A\u754C\uFF1A"+G);return Ps.join(n,G)}});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
178
- `);let D=zn(n,en(`*** Begin Patch
177
+ *** End Patch`),{resolve:function(G){if(G==="old2.js")throw new Error("\u8DEF\u5F84\u8D8A\u754C\uFF1A"+G);return js.join(n,G)}});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
178
+ `);let D=Gn(n,en(`*** Begin Patch
179
179
  *** Delete File: del.js
180
180
  *** End Patch`));a("delete \u5E26 before \u5907\u4EFD",D.ok&&D.plan[0].before===`keep me
181
181
  `,JSON.stringify(D.plan[0]&&D.plan[0].before)),a("format \u6210\u529F",/成功/.test(Hu(d))),a("format \u5931\u8D25",/失败/.test(Hu({ok:!1,error:"x"}))),e.rmSync(n,{recursive:!0,force:!0}),console.log(`
@@ -183,15 +183,15 @@ patch selftest: `+o+" passed, "+i+" failed"),process.exit(i?1:0)}});var wy=Z((yI
183
183
  `+o.join(`
184
184
  `);return r.total>o.length&&(i+=`
185
185
  ...[\u8BCA\u65AD\u5DF2\u8FBE\u4E0A\u9650 `+o.length+" \u6761\uFF0C\u5DF2\u622A\u65AD\uFF1B\u5148\u4FEE error \u518D\u91CD\u8BFB]"),i}function Gu(t){return si(t).error>0}Ju.exports={normalizeDiag:Qr,summarize:si,formatLints:Ja,hasErrors:Gu,SEVERITY:yy};require.main===Ju&&mC();function mC(){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=si(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=Qr(s(0,9,0,"x"));n("\u884C\u53F7\u8F6C 1 \u57FA",i.line===10&&i.col===1,JSON.stringify(i));let a=Ja(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(Ja({}))),n("\u7A7A\u8BCA\u65AD hasErrors false",Gu({})===!1),n("\u6709 error \u65F6 hasErrors true",Gu(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=Ja(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",Qr(null)===null),n("normalize \u7F3A range \u5B89\u5168",Qr({message:"x"}).severity==="error"),n("summarize undefined \u5B89\u5168",si(void 0).total===0),console.log(`
186
- lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var vy=Z((wI,Sy)=>{var ai=require("fs"),hC=require("path"),by=24,ky=120,oi=[{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 $u(t){return(t<10?"0":"")+t}function li(t){let e=t instanceof Date?t:new Date(Number(t));return isNaN(e.getTime())?new Date:e}function Ya(t){let e=li(t);return e.getFullYear()+"-"+$u(e.getMonth()+1)+"-"+$u(e.getDate())}function ii(t){let e=li(t);return e.getFullYear()+"-"+$u(e.getMonth()+1)}function eo(t){let e=li(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0).getTime()}function gC(t,e){let n=e==null?Date.now():Number(e),s=oi.find(function(i){return i.key===String(t||"")})||oi[1];if(!s.days)return{key:s.key,label:s.label,from:0,to:n,days:0};let r=li(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 kn(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function cs(t,e){let n=String(t??"");return n.length>e?n.slice(0,e):n}function $a(t){let e=Number(t);return!isFinite(e)||e<=0?0:Number(Math.min(1,e).toFixed(3))}function yC(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=kn(r.promptTokens),a=kn(r.completionTokens),l=kn(r.totalTokens)||i+a,c=Math.min(kn(r.cachedTokens),i),u=kn(r.contextTokens),d=kn(r.window);return{v:1,at:new Date(o).toISOString(),ts:o,day:Ya(o),provider:cs(s.provider,60),model:cs(s.model||r.model,120),modelKey:cs(s.modelKey,160),mode:cs(s.mode,20)||"agent",source:cs(s.source,20),session:cs(s.session,80),requests:kn(r.requests),promptTokens:i,completionTokens:a,totalTokens:l,cachedTokens:c,contextTokens:u,window:d,hit:r.hit!=null?$a(r.hit):i>0?$a(c/i):0,percent:r.percent!=null?$a(r.percent):d>0?$a(u/d):0,estimated:!!r.estimated,partial:!!r.partial}}function Xu(t,e){return hC.join(t,e+".jsonl")}function wC(t){ai.mkdirSync(t,{recursive:!0,mode:448})}function Vu(t){let e=[];try{e=ai.readdirSync(t)}catch{return[]}let n=[];for(let s of e)/^\d{4}-\d{2}\.jsonl$/.test(s)&&n.push(s.slice(0,-6));return n.sort(),n}function xy(t,e){let n=function(){let r=li(e??Date.now());return new Date(r.getFullYear(),r.getMonth()-(by-1),1,0,0,0,0).getTime()}(),s=[];for(let r of Vu(t)){let o=new Date(Number(r.slice(0,4)),Number(r.slice(5,7))-1,1,0,0,0,0).getTime();if(!(!isFinite(o)||o>=n))try{ai.unlinkSync(Xu(t,r)),s.push(r)}catch{}}return s}function bC(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{wC(t);let n=Xu(t,ii(e.ts));return ai.appendFileSync(n,JSON.stringify(e)+`
186
+ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var vy=Z((wI,Sy)=>{var ai=require("fs"),hC=require("path"),by=24,ky=120,oi=[{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 $u(t){return(t<10?"0":"")+t}function li(t){let e=t instanceof Date?t:new Date(Number(t));return isNaN(e.getTime())?new Date:e}function Ya(t){let e=li(t);return e.getFullYear()+"-"+$u(e.getMonth()+1)+"-"+$u(e.getDate())}function ii(t){let e=li(t);return e.getFullYear()+"-"+$u(e.getMonth()+1)}function eo(t){let e=li(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0).getTime()}function gC(t,e){let n=e==null?Date.now():Number(e),s=oi.find(function(i){return i.key===String(t||"")})||oi[1];if(!s.days)return{key:s.key,label:s.label,from:0,to:n,days:0};let r=li(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 kn(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function us(t,e){let n=String(t??"");return n.length>e?n.slice(0,e):n}function $a(t){let e=Number(t);return!isFinite(e)||e<=0?0:Number(Math.min(1,e).toFixed(3))}function yC(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=kn(r.promptTokens),a=kn(r.completionTokens),l=kn(r.totalTokens)||i+a,c=Math.min(kn(r.cachedTokens),i),u=kn(r.contextTokens),d=kn(r.window);return{v:1,at:new Date(o).toISOString(),ts:o,day:Ya(o),provider:us(s.provider,60),model:us(s.model||r.model,120),modelKey:us(s.modelKey,160),mode:us(s.mode,20)||"agent",source:us(s.source,20),session:us(s.session,80),requests:kn(r.requests),promptTokens:i,completionTokens:a,totalTokens:l,cachedTokens:c,contextTokens:u,window:d,hit:r.hit!=null?$a(r.hit):i>0?$a(c/i):0,percent:r.percent!=null?$a(r.percent):d>0?$a(u/d):0,estimated:!!r.estimated,partial:!!r.partial}}function Xu(t,e){return hC.join(t,e+".jsonl")}function wC(t){ai.mkdirSync(t,{recursive:!0,mode:448})}function Vu(t){let e=[];try{e=ai.readdirSync(t)}catch{return[]}let n=[];for(let s of e)/^\d{4}-\d{2}\.jsonl$/.test(s)&&n.push(s.slice(0,-6));return n.sort(),n}function xy(t,e){let n=function(){let r=li(e??Date.now());return new Date(r.getFullYear(),r.getMonth()-(by-1),1,0,0,0,0).getTime()}(),s=[];for(let r of Vu(t)){let o=new Date(Number(r.slice(0,4)),Number(r.slice(5,7))-1,1,0,0,0,0).getTime();if(!(!isFinite(o)||o>=n))try{ai.unlinkSync(Xu(t,r)),s.push(r)}catch{}}return s}function bC(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{wC(t);let n=Xu(t,ii(e.ts));return ai.appendFileSync(n,JSON.stringify(e)+`
187
187
  `,{mode:384}),xy(t,Math.max(Number(e.ts)||0,Date.now())),{ok:!0,file:n,month:ii(e.ts)}}catch(n){return{ok:!1,error:String(n&&n.message||n)}}}function kC(t,e,n){let s=Number(e)>0?Number(e):0,r=Number(n)>0?Number(n):Date.now(),o=s>0?ii(s):"",i=ii(r),a=Vu(t).filter(function(u){return o&&u<o?!1:u<=i}),l=[],c=0;for(let u of a){let d="";try{d=ai.readFileSync(Xu(t,u),"utf8")}catch{continue}for(let f of d.split(`
188
- `)){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 ri(){return{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0}}function Xa(t,e){t.turns++,t.requests+=kn(e.requests),t.promptTokens+=kn(e.promptTokens),t.completionTokens+=kn(e.completionTokens),t.totalTokens+=kn(e.totalTokens),t.cachedTokens+=kn(e.cachedTokens),e.estimated&&t.estimatedTurns++,e.partial&&t.partialTurns++}function Va(t){return t.hit=t.promptTokens>0?Number(Math.min(1,t.cachedTokens/t.promptTokens).toFixed(3)):0,t}function xC(t,e,n,s){let r=Object.keys(t).sort();if(!r.length)return[];let o=e>0?eo(e):eo(t[r[0]].ts),i=n>0?eo(n):eo(t[r[r.length-1]].ts),a=Math.round((i-o)/864e5)+1,l=s>0?Math.min(a,s):a;if(l>ky)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=Ya(d.getTime());c.push(t[f]||Object.assign({day:f,ts:d.getTime()},ri(),{hit:0,empty:!0}))}return c}function SC(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=ri(),o=Object.create(null),i=Object.create(null),a=Object.create(null);for(let d of s){Xa(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:cs(d.provider,60),model:cs(d.model,120)||"\u672A\u77E5\u6A21\u578B"},ri())),Xa(o[f],d);let p=cs(d.mode,20)||"agent";i[p]||(i[p]=Object.assign({mode:p},ri())),Xa(i[p],d);let m=String(d.day||Ya(d.ts));a[m]||(a[m]=Object.assign({day:m,ts:eo(d.ts)},ri())),Xa(a[m],d)}let l=Object.keys(o).map(function(d){let f=Va(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 Va(i[d])}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.mode).localeCompare(String(f.mode))}),u=xC(a,Number(n.from)||0,Number(n.to)||0,Number(n.days)||0).map(function(d){return d.empty?d:Va(d)});return s.length?Object.assign(Va(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 vC(t){let e=oi.find(function(n){return n.key===String(t||"")});return e?e.label:oi[1].label}Sy.exports={MONTHS_KEEP:by,MAX_FILL_DAYS:ky,RANGES:oi,dayOf:Ya,monthOf:ii,startOfDay:eo,rangeOf:gC,rangeLabel:vC,row:yC,append:bC,read:kC,monthFiles:Vu,prune:xy,aggregate:SC}});var Ay=Z((bI,Cy)=>{var Nt=require("fs"),_C=require("os"),js=require("path"),Za=js.join(_C.homedir(),".luban","attachments"),TC=4,no=5*1024*1024,MC=Math.ceil(no*4/3)+64,CC=2e3,Yu={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},_y={png:"image/png",jpg:"image/jpeg",webp:"image/webp",gif:"image/gif"},AC=/^[A-Za-z0-9_-]+$/,Zu=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,OC=/^data:(image\/(?:png|jpeg|webp|gif));base64,([A-Za-z0-9+/=\s]+)$/;function ci(t){return(t<10?"0":"")+t}function EC(t){let e=t||new Date;return e.getFullYear()+ci(e.getMonth()+1)+ci(e.getDate())+"-"+ci(e.getHours())+ci(e.getMinutes())+ci(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Ty(t){let e=OC.exec(String(t??""));return e?{mime:e[1],b64:e[2].replace(/\s+/g,"")}:null}function My(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file);if(!Zu.test(e)||e.length>120)return null;let n=String(t.mime==null?"":t.mime);if(!Yu[n]||e.slice(e.lastIndexOf(".")+1)!==Yu[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0||s>no?null:{file:e,mime:n,bytes:s}}function to(t){let e=String(t??"");return AC.test(e)?js.join(Za,e):""}function PC(t,e){let n=to(t);if(!n)return null;let s=String(e??"");if(s.length>MC)return null;let r=Ty(s);if(!r)return null;let o=Buffer.from(r.b64,"base64");if(!o.length||o.length>no)return null;let i=EC()+"."+Yu[r.mime];try{Nt.mkdirSync(n,{recursive:!0,mode:448});let a=js.join(n,i),l=a+".tmp-"+Math.random().toString(36).slice(2,6);return Nt.writeFileSync(l,o,{mode:384}),Nt.renameSync(l,a),{file:i,mime:r.mime,bytes:o.length}}catch{return null}}function jC(t,e){let n=to(t),s=My(e);if(!n||!s)return"";try{let r=js.join(n,s.file),o=Nt.statSync(r);return!o.isFile()||o.size<=0||o.size>no?"":"data:"+s.mime+";base64,"+Nt.readFileSync(r).toString("base64")}catch{return""}}function NC(t,e){let n=to(t),s=String(e??"");if(!n)return{ok:!1,error:"bad_session"};if(!Zu.test(s)||s.length>120)return{ok:!1,error:"bad_file"};let r=_y[s.slice(s.lastIndexOf(".")+1)]||"";if(!r)return{ok:!1,error:"bad_file"};try{let o=js.join(n,s),i=Nt.statSync(o);return!i.isFile()||i.size<=0?{ok:!1,error:"missing"}:i.size>no?{ok:!1,error:"too_large"}:{ok:!0,mime:r,dataUrl:"data:"+r+";base64,"+Nt.readFileSync(o).toString("base64")}}catch{return{ok:!1,error:"missing"}}}function FC(t){let e=to(t);if(!e)return{removed:0};let n=0;try{n=Nt.readdirSync(e).length}catch{n=0}try{Nt.rmSync(e,{recursive:!0,force:!0})}catch{}return{removed:n}}function IC(t,e){let n=to(t),s=to(e);if(!n||!s||n===s)return{copied:0,failed:0};let r=[];try{r=Nt.readdirSync(n)}catch{return{copied:0,failed:0}}let o=0,i=0;try{Nt.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(!Zu.test(a)||a.length>120||!_y[l])continue;let c=js.join(n,a),u=js.join(s,a);try{Nt.copyFileSync(c,u);try{Nt.chmodSync(u,384)}catch{}o++}catch{i++}}return{copied:o,failed:i}}function LC(t){let e=t instanceof Set?t:new Set(t||[]),n=[];try{n=Nt.readdirSync(Za,{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{Nt.rmSync(js.join(Za,o.name),{recursive:!0,force:!0}),s++}catch{r++}}return{removed:s,kept:r}}function DC(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}Cy.exports={ATTACH_DIR:Za,MAX_IMAGES:TC,MAX_BYTES:no,IMG_CHARS:CC,parseDataUrl:Ty,validateEntry:My,saveImage:PC,readDataUrl:jC,readPreview:NC,removeSession:FC,copySession:IC,sweepOrphans:LC,toContent:DC}});var Hy=Z((kI,Ky)=>{var Ns=require("fs"),RC=require("net"),Oy=require("os"),us=require("path"),qC=require("http"),Py=require("crypto"),{spawn:BC,execSync:UC}=require("child_process"),jy=64*1024*1024,Ny=25e3,di=15e3,Qu=200;function Fy(){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&&us.join(r,"Google","Chrome","Application","chrome.exe")),n(r&&us.join(r,"Microsoft","Edge","Application","msedge.exe")),n(r&&us.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(us.delimiter).filter(Boolean);for(let o of r)for(let i of s)n(us.join(o,i))}return e}function Iy(t){let e=String(t||"");if(e.indexOf("/snap/")===0)return!0;try{let n=Ns.realpathSync(e);return n==="/usr/bin/snap"||/\/snapd\/snapd$/.test(n)}catch{return/\/bin\/snap$/.test(e)}}function Ly(t){return Iy(t)?us.join(Oy.homedir(),"luban-browser"):Oy.tmpdir()}function Dy(t){let e=String(t??(process.env&&process.env.LUBAN_CHROME_PATH||"")).trim();if(e){try{if(Ns.existsSync(e))return{path:e,tried:[e]}}catch{}return{path:"",tried:[e]}}let n=Fy();for(let s of n)try{if(Ns.existsSync(s))return{path:s,tried:n}}catch{}return{path:"",tried:n}}function Ry(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=Py.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 qy(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>jy)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 ed=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=qy(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(Ry(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 WC(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=Py.randomBytes(16).toString("base64"),a=RC.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||di)+"ms\uFF09"))}},e||di),u=Buffer.alloc(0);a.on("connect",function(){let f=["GET "+(r.pathname+(r.search||""))+" HTTP/1.1","Host: "+r.hostname+":"+o,"Upgrade: websocket","Connection: Upgrade","Sec-WebSocket-Key: "+i,"Sec-WebSocket-Version: 13"];a.write(f.join(`\r
188
+ `)){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 ri(){return{turns:0,requests:0,promptTokens:0,completionTokens:0,totalTokens:0,cachedTokens:0,estimatedTurns:0,partialTurns:0}}function Xa(t,e){t.turns++,t.requests+=kn(e.requests),t.promptTokens+=kn(e.promptTokens),t.completionTokens+=kn(e.completionTokens),t.totalTokens+=kn(e.totalTokens),t.cachedTokens+=kn(e.cachedTokens),e.estimated&&t.estimatedTurns++,e.partial&&t.partialTurns++}function Va(t){return t.hit=t.promptTokens>0?Number(Math.min(1,t.cachedTokens/t.promptTokens).toFixed(3)):0,t}function xC(t,e,n,s){let r=Object.keys(t).sort();if(!r.length)return[];let o=e>0?eo(e):eo(t[r[0]].ts),i=n>0?eo(n):eo(t[r[r.length-1]].ts),a=Math.round((i-o)/864e5)+1,l=s>0?Math.min(a,s):a;if(l>ky)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=Ya(d.getTime());c.push(t[f]||Object.assign({day:f,ts:d.getTime()},ri(),{hit:0,empty:!0}))}return c}function SC(t,e){let n=e||{},s=Array.isArray(t)?t:[],r=ri(),o=Object.create(null),i=Object.create(null),a=Object.create(null);for(let d of s){Xa(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:us(d.provider,60),model:us(d.model,120)||"\u672A\u77E5\u6A21\u578B"},ri())),Xa(o[f],d);let p=us(d.mode,20)||"agent";i[p]||(i[p]=Object.assign({mode:p},ri())),Xa(i[p],d);let m=String(d.day||Ya(d.ts));a[m]||(a[m]=Object.assign({day:m,ts:eo(d.ts)},ri())),Xa(a[m],d)}let l=Object.keys(o).map(function(d){let f=Va(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 Va(i[d])}).sort(function(d,f){return f.totalTokens!==d.totalTokens?f.totalTokens-d.totalTokens:String(d.mode).localeCompare(String(f.mode))}),u=xC(a,Number(n.from)||0,Number(n.to)||0,Number(n.days)||0).map(function(d){return d.empty?d:Va(d)});return s.length?Object.assign(Va(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 vC(t){let e=oi.find(function(n){return n.key===String(t||"")});return e?e.label:oi[1].label}Sy.exports={MONTHS_KEEP:by,MAX_FILL_DAYS:ky,RANGES:oi,dayOf:Ya,monthOf:ii,startOfDay:eo,rangeOf:gC,rangeLabel:vC,row:yC,append:bC,read:kC,monthFiles:Vu,prune:xy,aggregate:SC}});var Ay=Z((bI,Cy)=>{var Nt=require("fs"),_C=require("os"),Ns=require("path"),Za=Ns.join(_C.homedir(),".luban","attachments"),TC=4,no=5*1024*1024,MC=Math.ceil(no*4/3)+64,CC=2e3,Yu={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},_y={png:"image/png",jpg:"image/jpeg",webp:"image/webp",gif:"image/gif"},AC=/^[A-Za-z0-9_-]+$/,Zu=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,OC=/^data:(image\/(?:png|jpeg|webp|gif));base64,([A-Za-z0-9+/=\s]+)$/;function ci(t){return(t<10?"0":"")+t}function EC(t){let e=t||new Date;return e.getFullYear()+ci(e.getMonth()+1)+ci(e.getDate())+"-"+ci(e.getHours())+ci(e.getMinutes())+ci(e.getSeconds())+"-"+Math.random().toString(36).slice(2,6)}function Ty(t){let e=OC.exec(String(t??""));return e?{mime:e[1],b64:e[2].replace(/\s+/g,"")}:null}function My(t){if(!t||typeof t!="object")return null;let e=String(t.file==null?"":t.file);if(!Zu.test(e)||e.length>120)return null;let n=String(t.mime==null?"":t.mime);if(!Yu[n]||e.slice(e.lastIndexOf(".")+1)!==Yu[n])return null;let s=Math.floor(Number(t.bytes));return!isFinite(s)||s<=0||s>no?null:{file:e,mime:n,bytes:s}}function to(t){let e=String(t??"");return AC.test(e)?Ns.join(Za,e):""}function PC(t,e){let n=to(t);if(!n)return null;let s=String(e??"");if(s.length>MC)return null;let r=Ty(s);if(!r)return null;let o=Buffer.from(r.b64,"base64");if(!o.length||o.length>no)return null;let i=EC()+"."+Yu[r.mime];try{Nt.mkdirSync(n,{recursive:!0,mode:448});let a=Ns.join(n,i),l=a+".tmp-"+Math.random().toString(36).slice(2,6);return Nt.writeFileSync(l,o,{mode:384}),Nt.renameSync(l,a),{file:i,mime:r.mime,bytes:o.length}}catch{return null}}function jC(t,e){let n=to(t),s=My(e);if(!n||!s)return"";try{let r=Ns.join(n,s.file),o=Nt.statSync(r);return!o.isFile()||o.size<=0||o.size>no?"":"data:"+s.mime+";base64,"+Nt.readFileSync(r).toString("base64")}catch{return""}}function NC(t,e){let n=to(t),s=String(e??"");if(!n)return{ok:!1,error:"bad_session"};if(!Zu.test(s)||s.length>120)return{ok:!1,error:"bad_file"};let r=_y[s.slice(s.lastIndexOf(".")+1)]||"";if(!r)return{ok:!1,error:"bad_file"};try{let o=Ns.join(n,s),i=Nt.statSync(o);return!i.isFile()||i.size<=0?{ok:!1,error:"missing"}:i.size>no?{ok:!1,error:"too_large"}:{ok:!0,mime:r,dataUrl:"data:"+r+";base64,"+Nt.readFileSync(o).toString("base64")}}catch{return{ok:!1,error:"missing"}}}function FC(t){let e=to(t);if(!e)return{removed:0};let n=0;try{n=Nt.readdirSync(e).length}catch{n=0}try{Nt.rmSync(e,{recursive:!0,force:!0})}catch{}return{removed:n}}function IC(t,e){let n=to(t),s=to(e);if(!n||!s||n===s)return{copied:0,failed:0};let r=[];try{r=Nt.readdirSync(n)}catch{return{copied:0,failed:0}}let o=0,i=0;try{Nt.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(!Zu.test(a)||a.length>120||!_y[l])continue;let c=Ns.join(n,a),u=Ns.join(s,a);try{Nt.copyFileSync(c,u);try{Nt.chmodSync(u,384)}catch{}o++}catch{i++}}return{copied:o,failed:i}}function LC(t){let e=t instanceof Set?t:new Set(t||[]),n=[];try{n=Nt.readdirSync(Za,{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{Nt.rmSync(Ns.join(Za,o.name),{recursive:!0,force:!0}),s++}catch{r++}}return{removed:s,kept:r}}function DC(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}Cy.exports={ATTACH_DIR:Za,MAX_IMAGES:TC,MAX_BYTES:no,IMG_CHARS:CC,parseDataUrl:Ty,validateEntry:My,saveImage:PC,readDataUrl:jC,readPreview:NC,removeSession:FC,copySession:IC,sweepOrphans:LC,toContent:DC}});var Hy=Z((kI,Ky)=>{var Fs=require("fs"),RC=require("net"),Oy=require("os"),ds=require("path"),qC=require("http"),Py=require("crypto"),{spawn:BC,execSync:UC}=require("child_process"),jy=64*1024*1024,Ny=25e3,di=15e3,Qu=200;function Fy(){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&&ds.join(r,"Google","Chrome","Application","chrome.exe")),n(r&&ds.join(r,"Microsoft","Edge","Application","msedge.exe")),n(r&&ds.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(ds.delimiter).filter(Boolean);for(let o of r)for(let i of s)n(ds.join(o,i))}return e}function Iy(t){let e=String(t||"");if(e.indexOf("/snap/")===0)return!0;try{let n=Fs.realpathSync(e);return n==="/usr/bin/snap"||/\/snapd\/snapd$/.test(n)}catch{return/\/bin\/snap$/.test(e)}}function Ly(t){return Iy(t)?ds.join(Oy.homedir(),"luban-browser"):Oy.tmpdir()}function Dy(t){let e=String(t??(process.env&&process.env.LUBAN_CHROME_PATH||"")).trim();if(e){try{if(Fs.existsSync(e))return{path:e,tried:[e]}}catch{}return{path:"",tried:[e]}}let n=Fy();for(let s of n)try{if(Fs.existsSync(s))return{path:s,tried:n}}catch{}return{path:"",tried:n}}function Ry(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=Py.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 qy(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>jy)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 ed=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=qy(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(Ry(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 WC(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=Py.randomBytes(16).toString("base64"),a=RC.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||di)+"ms\uFF09"))}},e||di),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
189
189
  `)+`\r
190
190
  \r
191
191
  `)});let d=function(f){u=Buffer.concat([u,f]);let p=u.indexOf(`\r
192
192
  \r
193
193
  `);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
194
- `)[0]));return}l=!0,clearTimeout(c);let h=new ed(a),k=u.slice(p+4);k.length&&h._feed(k),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 td=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||di);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 KC(t){let e=us.join(t,"DevToolsActivePort"),n="";try{n=Ns.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 Ft(t){return new Promise(function(e){setTimeout(e,t)})}function HC(t,e,n){return new Promise(function(s,r){let o=qC.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 dr(t){if(!t||t.killed)return;let e=t.pid;try{if(process.platform==="win32")UC("taskkill /PID "+e+" /T /F",{stdio:"ignore",timeout:5e3});else try{process.kill(-e,"SIGKILL")}catch{try{t.kill("SIGKILL")}catch{}}}catch{}}function ui(t){try{Ns.rmSync(t,{recursive:!0,force:!0})}catch{}}var zC={StaticText:1,InlineTextBox:1,generic:1,none:1,RootWebArea:1},GC={ignored:1,presentation:1,LineBreak:1},nd=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>Qu&&this.events.splice(0,this.events.length-Qu)}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||di),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=Wy(e);this.resetEvents();let s=this.expectEvent("Page.loadEventFired",2e4),r;try{r=await this.cdp.send("Page.navigate",{url:n},2e4)}catch(l){throw s.cancel(),l}if(r&&r.errorText)throw s.cancel(),new Error("\u5BFC\u822A\u5931\u8D25\uFF1A"+r.errorText);let o=await s.promise,i=await this.pageInfo();this.url=i.url||n,this.title=i.title||"";let a=["\u5DF2\u6253\u5F00\uFF1A"+this.shortUrl()];return this.title&&a.push("\u6807\u9898\uFF1A"+this.title),o||a.push("\uFF08\u7B49\u5F85 load \u4E8B\u4EF6\u8D85\u65F6\uFF0C\u9875\u9762\u53EF\u80FD\u8FD8\u5728\u52A0\u8F7D\uFF1B\u53EF\u7528 snapshot \u518D\u770B\u4E00\u6B21\uFF09"),a.join(`
194
+ `)[0]));return}l=!0,clearTimeout(c);let h=new ed(a),k=u.slice(p+4);k.length&&h._feed(k),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 td=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||di);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 KC(t){let e=ds.join(t,"DevToolsActivePort"),n="";try{n=Fs.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 Ft(t){return new Promise(function(e){setTimeout(e,t)})}function HC(t,e,n){return new Promise(function(s,r){let o=qC.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 dr(t){if(!t||t.killed)return;let e=t.pid;try{if(process.platform==="win32")UC("taskkill /PID "+e+" /T /F",{stdio:"ignore",timeout:5e3});else try{process.kill(-e,"SIGKILL")}catch{try{t.kill("SIGKILL")}catch{}}}catch{}}function ui(t){try{Fs.rmSync(t,{recursive:!0,force:!0})}catch{}}var zC={StaticText:1,InlineTextBox:1,generic:1,none:1,RootWebArea:1},GC={ignored:1,presentation:1,LineBreak:1},nd=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>Qu&&this.events.splice(0,this.events.length-Qu)}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||di),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=Wy(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(`
195
195
  `)}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(`
196
196
  `).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=Uy(l&&l.nodes,n-600)}catch{r=""}if(o(r)>=3)break;a===0&&await Ft(250)}if(o(r)<3){let a=await this.visibleText(n-600);a.trim()&&(r=(r.trim()?r.trim()+`
197
197
 
@@ -205,14 +205,14 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var vy=Z((wI
205
205
  `)}function Wy(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 JC(t){let e=t||{},n=Dy(e.exe);if(!n.path){let T=n.tried.slice(0,6).map(function(g){return" - "+g}).join(`
206
206
  `);throw new Error(`\u6CA1\u627E\u5230 Chrome / Edge\u3002\u88C5\u4E0A Chrome\uFF0C\u6216\u5728\u8BBE\u7F6E\u91CC\u6307\u5B9A luban.browser.chromePath\u3002
207
207
  \u5DF2\u5C1D\u8BD5\uFF1A
208
- `+T)}let s=Ly(n.path);try{Ns.mkdirSync(s,{recursive:!0})}catch{}let r=Ns.mkdtempSync(us.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=Ns.mkdtempSync(us.join(s,"luban-chrome-"));c=BC(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 y=!1;c.on("exit",function(){y=!0});let S=Date.now()+(e.timeoutMs||Ny);for(;Date.now()<S&&!y;){let _=KC(g);if(_)return{port:_.port,stderr:v,dir:g};await Ft(200)}return ui(g),{port:0,stderr:v,exited:y}},f=await d(l);if(!f.port&&a==="--headless=new"){dr(c),await Ft(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||"")){dr(c),await Ft(300);let T=l.concat(["--no-sandbox"]);if(f=await d(T),!f.port&&a==="--headless=new"){dr(c),await Ft(300);let g=T.filter(function(v){return v!=="--headless=new"}).concat(["--headless"]);f=await d(g)}}if(!f.port){dr(c),ui(r);let T=f.stderr?`
209
- \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 HC(u,"/json/list")}catch{T=[]}if(Array.isArray(T)&&(p=T.find(function(g){return g&&g.type==="page"&&g.webSocketDebuggerUrl}),p))break;await Ft(200)}if(!p)throw dr(c),ui(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 WC(p.webSocketDebuggerUrl,15e3)}catch(T){throw dr(c),ui(r),T}let k=new td(h),x=new nd({proc:c,dir:r,exe:n.path,port:u,cdp:k,width:o,height:i});try{await x.init()}catch(T){throw await x.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 x}Ky.exports={findChrome:Dy,chromeCandidates:Fy,isSnapBinary:Iy,profileBaseDir:Ly,normalizeUrl:Wy,formatAxTree:Uy,clipText:By,encodeFrame:Ry,decodeFrame:qy,launch:JC,MAX_FRAME:jy,EVENTS_MAX:Qu,DEFAULT_TIMEOUT_MS:di,LAUNCH_TIMEOUT_MS:Ny}});var mr=Z((xI,yd)=>{var K=require("fs"),Fs=require("os"),B=require("path"),$y=require("crypto"),Xy=2e3,Vy=6e4,$C=18e4,zy=8e3,sd=500,tl=64,XC=30,Gy=65536,VC=["bg","fg","panel","border","accent","accent-fg","muted","code-bg","surface","surface-2","hover","link","ok","warn","error"],rd={"radius-sm":[0,48],radius:[0,48],"radius-lg":[0,48],"font-size":[8,40]},YC=24,ZC=/^#[0-9a-fA-F]{3,8}$/,QC=/^(?:rgb|rgba|hsl|hsla)\(\s*[-0-9.,%\s/]+\)$/,e1=/^[a-zA-Z]{3,22}$/,t1=/^(expression|url|var|env|attr|image|paint|element)$/i,n1=/^(0|0?\.\d+|[1-9]\d*(?:\.\d+)?)\s*(px|em|rem|%|pt)?$/,E={root:"",version:"0",rec:function(){},confirm:null,enabled:!1,maxTools:XC,timeoutMs:Vy,plugins:new Map,exposed:new Map,disabled:new Set,pending:[],trust:null,trustLoaded:!1,trustDirty:!1,dirs:[],errors:[],scannedAt:"",scannedMs:0};function fr(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),$C))}function It(t,e){try{E.rec(t,e)}catch{}}function nl(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function pr(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function s1(t){return $y.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function Yy(t,e){let n="pl__"+pr(t)+"__"+pr(e);if(n.length>tl){let s="_"+s1(t+"/"+e);n=n.slice(0,tl-s.length)+s}return n}function Zy(){return B.join(Fs.homedir(),".luban","plugins-trust.json")}function ud(){if(E.trustLoaded)return;E.trustLoaded=!0,E.trust=new Map;let t;try{t=JSON.parse(K.readFileSync(Zy(),"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 Qy(){if(!E.trustDirty||!E.trust)return;let t={trusted:{}};for(let[e,n]of E.trust)t.trusted[e]=n;try{let e=Zy();K.mkdirSync(B.dirname(e),{recursive:!0}),K.writeFileSync(e,JSON.stringify(t,null,2)+`
210
- `),E.trustDirty=!1}catch(e){It("plugin_trust_save_failed",{message:e.message})}}function pi(t){let e=[];(function s(r){let o;try{o=K.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of o){if(i.name==="node_modules"||i.name===".git")continue;let a=B.join(r,i.name);i.isDirectory()?s(a):i.isFile()&&e.push(a)}})(t),e.sort();let n=$y.createHash("sha1");for(let s of e){n.update(B.relative(t,s));try{n.update(K.readFileSync(s))}catch{}}return n.digest("hex")}function dd(t,e){return ud(),E.trust.get(t)===e}function ew(t,e){ud(),E.trust.set(t,e),E.trustDirty=!0,Qy()}function r1(t,e){let n=String(e??"").trim();if(!n||n.length>64||/[;{}<>\\"']/.test(n)||/\/\*/.test(n))return"";if(rd[t]){let s=n.match(n1);if(!s)return"";let r=Number(s[1]),o=rd[t];return!isFinite(r)||r<o[0]||r>o[1]?"":s[2]?n:r+"px"}return ZC.test(n)||QC.test(n)||e1.test(n)&&!t1.test(n)?n:""}function o1(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>=YC){s.push(i);continue}let a=String(i).replace(/^--/,"");if(VC.indexOf(a)<0&&!rd[a]){a!=="tokens"&&a!=="label"&&a!=="description"&&s.push(i);continue}let l=r1(a,e[i]);if(!l){s.push(i);continue}n[a]=l,r++}return r?{label:nl(typeof t.label=="string"?t.label.trim():"",40)||"",tokens:n,dropped:s}:{error:"theme.tokens \u91CC\u6CA1\u6709\u5408\u6CD5 token",dropped:s}}function Is(t){let e=B.join(t,"plugin.json"),n;try{n=K.statSync(e)}catch{return{error:"\u7F3A\u5C11 plugin.json"}}if(!n.isFile())return{error:"plugin.json \u4E0D\u662F\u6587\u4EF6"};if(n.size>Gy)return{error:"plugin.json \u8D85\u8FC7 "+Gy+" \u5B57\u8282"};let s;try{s=JSON.parse(K.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=pr(s.name||B.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=B.resolve(t,o),a=B.relative(t,i);if(!a||a.startsWith("..")||B.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=o1(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=pr(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:nl(typeof p.description=="string"?p.description:"",sd),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:nl(typeof s.description=="string"?s.description:"",sd),main:o,mainAbs:i,dir:t,tools:d,readOnly:u,theme:c?{label:c.label,tokens:c.tokens,dropped:c.dropped||[]}:null}}function i1(t){let e=t||E.root||process.cwd(),n=Fs.homedir();return[B.join(n,".luban","plugins"),B.join(e,".luban","plugins")]}function tw(){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=Yy(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>tl?r.slice(0,tl-i.length)+i:r+i}E.exposed.set(r,{plugin:n.name,tool:s.name,def:s,readOnly:s.readOnly===!0})}}}function oo(){let t=i1(E.root),e=[],n=new Map;for(let s of t){let r;try{r=K.readdirSync(s,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=B.join(s,o.name),a=Is(i);if(a.error){e.push(o.name+"\uFF1A"+a.error),It("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 xn(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=oo(),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=pi(d.dir);if(dd(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"),It("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?(ew(d.dir,f),a.set(c,d),It("plugin_trusted",{plugin:c,dir:d.dir})):(E.disabled.add(d.dir),l.push(d),It("plugin_rejected",{plugin:c,dir:d.dir}))}return E.plugins=a,E.pending=l,tw(),E.errors=o,E.scannedAt=new Date().toISOString(),E.scannedMs=Date.now(),n.quiet||It("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 mi(){if(!E.enabled||!E.root){E.exposed.size&&(E.plugins=new Map,E.exposed.clear());return}if(E.scannedMs&&Date.now()-E.scannedMs<Xy)return;let t=E.exposed.size,e=oo().merged,n=new Map,s=[];for(let[r,o]of e){let i=o.manifest,a=pi(i.dir);dd(i.dir,a)?n.set(r,i):s.push(i)}E.plugins=n,E.pending=s,tw(),E.scannedMs=Date.now(),E.scannedAt=new Date().toISOString(),E.exposed.size!==t&&It("plugins_changed",{count:E.plugins.size,tools:E.exposed.size})}function a1(t){let e=t||{};E.scannedMs=0,e.keepDisabled||(E.disabled=new Set);for(let n of E.plugins.values())try{delete require.cache[md(n)]}catch{}return xn(E.root)}var l1="plugins-trash";function hi(){return B.join(Fs.homedir(),".luban","plugins")}function gi(){return B.join(Fs.homedir(),".luban",l1)}function Ls(t){let e=B.resolve(String(t||"")),n=[{scope:"global",base:hi()},{scope:"project",base:B.join(B.resolve(E.root||process.cwd()),".luban","plugins")}];for(let s of n){let r=B.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!B.isAbsolute(r)&&r.indexOf(B.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function Jy(){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 sl(t,e){K.mkdirSync(e,{recursive:!0});for(let n of K.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=B.join(t,n.name),r=B.join(e,n.name);n.isDirectory()?sl(s,r):n.isFile()&&K.copyFileSync(s,r)}}function nw(t){try{let e=JSON.parse(K.readFileSync(t+".json","utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function c1(t,e){try{K.writeFileSync(t+".json",JSON.stringify(e,null,2)+`
211
- `)}catch{}}function u1(t){ud(),E.trust.delete(B.resolve(t))&&(E.trustDirty=!0,Qy())}function fd(t){let e=B.resolve(String(t||""));if(!Ls(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=Is(e);if(n.error)throw new Error("\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u76EE\u5F55\uFF1A"+n.error);return ew(e,pi(e)),E.disabled.delete(e),E.scannedMs=0,n}function sw(t,e){let n=B.resolve(t),s=Ls(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();K.mkdirSync(r,{recursive:!0,mode:448});let o=pr(s.name),i=o+"-"+Jy(),a=2;for(;K.existsSync(B.join(r,i))||K.existsSync(B.join(r,i+".json"));)i=o+"-"+Jy()+"-"+a,a++;let l=B.join(r,i);try{K.renameSync(n,l)}catch(c){if(c&&c.code==="EXDEV")sl(n,l),K.rmSync(n,{recursive:!0,force:!0});else throw c}return c1(l,{name:s.name,from:n,scope:s.scope,at:new Date().toISOString(),why:e||""}),u1(n),E.scannedMs=0,i}async function Qa(t,e){let n=e||{},s=B.resolve(String(t||"")),r;try{r=K.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=Is(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"?B.join(B.resolve(E.root||process.cwd()),".luban","plugins"):hi(),l=B.join(a,o.name);if(B.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(K.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};sw(l,"replaced-by-install"),c=!0}try{sl(s,l)}catch(d){try{K.rmSync(l,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+d.message}}let u=Is(l);if(u.error){try{K.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{fd(l)}catch(d){It("plugin_trust_failed",{dir:l,message:d.message})}return E.scannedMs=0,await xn(E.root,{quiet:!0}),It("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 od(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=B.resolve(n);else{let c=oo().merged.get(n);if(!c)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1A"+n};r=c.manifest.dir}let o=Ls(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=Is(r),a=i.error?o.name:i.name,l="";try{l=sw(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[md(i)]}catch{}return await xn(E.root,{quiet:!0}),It("plugin_uninstalled",{name:a,dir:r,trash:l}),{ok:!0,name:a,dir:r,trash:l}}function id(){let t=gi(),e;try{e=K.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=B.join(t,s.name),o=nw(r),i=Is(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 ad(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=B.join(gi(),s);if(!K.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o=nw(r),i=Is(r),a=i.error?String(o.name||s):i.name,l="",c=String(o.from||"");if(c){let u=B.resolve(c),d=B.dirname(u);K.existsSync(d)&&!K.existsSync(u)&&Ls(u)&&(l=u)}if(l||(l=B.join(hi(),pr(a))),K.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u63D2\u4EF6\uFF1A"+l};K.mkdirSync(B.dirname(l),{recursive:!0});try{K.renameSync(r,l)}catch(u){if(u&&u.code==="EXDEV")sl(r,l),K.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+u.message}}try{K.unlinkSync(r+".json")}catch{}if(n.trust!==!1)try{fd(l)}catch(u){It("plugin_restore_trust_failed",{dir:l,message:u.message})}return await xn(E.root,{quiet:!0}),It("plugin_restored",{name:a,dir:l,from:s}),{ok:!0,name:a,dir:l}}function so(t){return mi(),E.exposed.has(String(t))}function pd(t){return mi(),E.exposed.get(String(t))||null}function rw(t){let e=pd(t);return e?e.readOnly===!0:!1}function ro(t){mi();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:nl(a,sd)+"\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 md(t){let e=B.resolve(t.mainAbs);try{return K.realpathSync(e)}catch{return e}}function d1(t){let e=E.plugins.get(t.plugin);if(!e)throw new Error("\u63D2\u4EF6\u5DF2\u5378\u8F7D: "+t.plugin);let n=md(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 f1(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 fi(t,e,n){let s=pd(t);if(!s)throw new Error("\u672A\u77E5\u63D2\u4EF6\u5DE5\u5177: "+t);let r=n||{},o=Date.now(),i=!1;try{let a=d1(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 f1(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>zy&&(u=u.slice(0,zy)+`
212
- \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`),u}catch(a){let l=String(a&&a.message||a);throw It("plugin_call_failed",{plugin:s.plugin,tool:s.tool,message:l}),new Error("\u63D2\u4EF6\u5DE5\u5177 "+t+" \u5931\u8D25\uFF1A"+l)}finally{It("plugin_call",{plugin:s.plugin,tool:s.tool,ok:i,ms:Date.now()-o})}}function ow(){mi();let t=[];for(let e of E.plugins.values()){let n=Ls(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:hd(e),tools:e.tools.map(function(s){return{name:s.name,readOnly:s.readOnly===!0}})})}return t}function p1(){return mi(),E.pending.map(function(t){let e=Ls(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:hd(t),tools:t.tools.map(function(n){return{name:n.name,readOnly:n.readOnly===!0}})}})}function ld(){let t=oo(),e=[],n=[];for(let s of t.merged.values()){let r=s.manifest,o=Ls(r.dir),i={name:r.name,version:r.version,description:r.description,dir:r.dir,scope:o?o.scope:"",readOnly:r.readOnly===!0,trusted:dd(r.dir,pi(r.dir)),theme:hd(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 hd(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 gd(){let t=oo(),e=[];for(let n of t.merged.values()){let s=n.manifest;s.theme&&((s.theme.dropped||[]).length&&It("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 el(t){let e=String(t??"").trim();if(!e)return null;let n=gd();for(let s of n)if(s.name===e)return s;return null}function cd(){return{root:E.root,enabled:E.enabled,dirs:E.dirs.slice(),globalDir:hi(),trashDir:gi(),errors:E.errors.slice(),scannedAt:E.scannedAt,plugins:ow(),pending:p1(),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===yd){let t=require("assert"),e=K.promises;(async function(){let n=K.mkdtempSync(B.join(Fs.tmpdir(),"luban-plugin-test-")),s=B.join(n,"proj"),r=B.join(n,"home",".luban","plugins"),o=B.join(s,".luban","plugins");K.mkdirSync(r,{recursive:!0}),K.mkdirSync(o,{recursive:!0});let i=Fs.homedir;Fs.homedir=function(){return B.join(n,"home")};let a=B.join(r,"demo");K.mkdirSync(a,{recursive:!0}),K.writeFileSync(B.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"}}}}]})),K.writeFileSync(B.join(a,"index.js"),'module.exports={tools:{echo:{handler:async(a)=>"echo:"+(a&&a.text||"")}}};');let l=B.join(o,"demo");K.mkdirSync(l,{recursive:!0}),K.writeFileSync(B.join(l,"plugin.json"),JSON.stringify({name:"demo",version:"2.0.0",readOnly:!1,tools:[{name:"boom",description:"\u629B\u9519",parameters:{type:"object",properties:{}}}]})),K.writeFileSync(B.join(l,"index.js"),'module.exports={tools:{boom:{handler:async()=>{throw new Error("\u70B8\u4E86")}}}};');let c=B.join(r,"bad");K.mkdirSync(c,{recursive:!0}),K.writeFileSync(B.join(c,"plugin.json"),"{ not json");let u=[],d=[];fr({root:s,enabled:!0,rec:function(ve,Ot){u.push([ve,Ot])},confirm:async function(ve){return d.push(ve.name),!0}}),await xn(s);let f=cd();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(ve){return ve.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(ve){return ve.indexOf("bad")===0}),!0,"\u574F\u6E05\u5355\u8981\u8BB0 error"),t.strictEqual(so("pl__demo__boom"),!0),t.strictEqual(so("pl__demo__echo"),!1,"\u88AB\u9879\u76EE\u8986\u76D6\u7684 echo \u4E0D\u8BE5\u51FA\u73B0"),t.strictEqual(rw("pl__demo__boom"),!1);let m=JSON.stringify(ro({})),h=JSON.stringify(ro({}));t.strictEqual(m,h,"\u4E24\u6B21 toolDefs \u9010\u5B57\u8282\u76F8\u540C"),t.strictEqual(ro({planOnly:!0}).length,0,"\u975E\u53EA\u8BFB\u5DE5\u5177\u4E0D\u8FDB Plan");let k="";try{await fi("pl__demo__boom",{},{root:s})}catch(ve){k=ve.message}t.ok(k.indexOf("\u70B8\u4E86")>=0,"\u629B\u9519\u8981\u5E26\u4E0A\u539F\u56E0\uFF0C\u5B9E\u9645: "+k);let x=B.join(r,"echo");K.mkdirSync(x,{recursive:!0}),K.writeFileSync(B.join(x,"plugin.json"),JSON.stringify({name:"echo",readOnly:!0,tools:[{name:"say",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),K.writeFileSync(B.join(x,"index.js"),'module.exports={tools:{say:{handler:async(a)=>"say:"+(a&&a.text||"")}}}'),E.scannedMs=0,await xn(s,{quiet:!0});let T=await fi("pl__echo__say",{text:"hi"},{root:s});t.strictEqual(T,"say:hi","echo \u6B63\u5E38\u8FD4\u56DE\uFF0C\u5B9E\u9645: "+T);let g=B.join(r,"slow");K.mkdirSync(g,{recursive:!0}),K.writeFileSync(B.join(g,"plugin.json"),JSON.stringify({name:"slow",readOnly:!0,tools:[{name:"hang",description:"\u6302\u4F4F",parameters:{type:"object",properties:{}}}]})),K.writeFileSync(B.join(g,"index.js"),"module.exports={tools:{hang:{handler:()=>new Promise(()=>{})}}}"),fr({timeoutMs:300}),E.scannedMs=0,await xn(s,{quiet:!0});let v="";try{await fi("pl__slow__hang",{},{root:s})}catch(ve){v=ve.message}t.ok(v.indexOf("\u8D85\u65F6")>=0,"\u8981\u8D85\u65F6\uFF0C\u5B9E\u9645: "+v),fr({timeoutMs:Vy}),t.strictEqual(d.indexOf("demo")>=0,!0,"\u9996\u6B21\u8981\u786E\u8BA4 demo");let y=B.join(n,"home",".luban","plugins-trust.json");t.ok(K.existsSync(y),"\u4FE1\u4EFB\u8868\u8981\u843D\u76D8");let S=d.length;K.writeFileSync(B.join(x,"index.js"),'module.exports={tools:{say:{handler:async()=>"changed"}}}'),E.scannedMs=0,await xn(s,{quiet:!0}),t.ok(d.length>S,"\u5185\u5BB9\u53D8\u4E86\u8981\u91CD\u65B0\u786E\u8BA4"),fr({confirm:async function(){return!1}}),E.trust=new Map,E.trustDirty=!0,E.disabled=new Set,E.scannedMs=0,await xn(s,{quiet:!0}),t.strictEqual(ro({}).length,0,"\u5168\u62D2\u7EDD\u540E\u6E05\u5355\u4E3A\u7A7A"),t.ok(cd().pending.length>0,"\u88AB\u62D2\u7684\u63D2\u4EF6\u8981\u8FDB pending"),fr({enabled:!0,confirm:async function(){return!0}}),E.trust=new Map,E.disabled=new Set,E.scannedMs=0,await xn(s,{quiet:!0});let _=B.join(n,"downloads","pkgs","fresh");K.mkdirSync(_,{recursive:!0}),K.writeFileSync(B.join(_,"plugin.json"),JSON.stringify({name:"fresh",version:"3.1.0",readOnly:!0,tools:[{name:"ping",description:"ping",parameters:{type:"object",properties:{}}}]})),K.writeFileSync(B.join(_,"index.js"),'module.exports={tools:{ping:{handler:async()=>"pong"}}}'),K.mkdirSync(B.join(_,".git"),{recursive:!0}),K.writeFileSync(B.join(_,".git","HEAD"),"ref: refs/heads/main");let C=await Qa(_,{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=B.join(r,"fresh");t.strictEqual(K.existsSync(B.join(A,"plugin.json")),!0,"\u6587\u4EF6\u8981\u843D\u8FDB\u5168\u5C40\u63D2\u4EF6\u6839"),t.strictEqual(K.existsSync(B.join(A,".git")),!1,".git \u4E0D\u8BE5\u88AB\u590D\u5236"),t.strictEqual(so("pl__fresh__ping"),!0,"\u88C5\u5B8C\u7ACB\u5373\u53EF\u7528\uFF08\u4FE1\u4EFB + \u91CD\u626B\uFF09"),t.strictEqual(await fi("pl__fresh__ping",{},{root:s}),"pong");let D=await Qa(_,{trust:!0});t.strictEqual(D.ok,!1,"\u540C\u540D\u4E0D\u5E26 replace \u5E94\u62D2\u7EDD"),t.strictEqual(D.code,"exists");let G=await Qa(_,{trust:!0,replace:!0});t.strictEqual(G.ok,!0,"replace \u5E94\u6210\u529F"),t.strictEqual(G.replaced,!0);let H=id();t.ok(H.some(function(ve){return ve.why==="replaced-by-install"}),"\u65E7\u7248\u8981\u8FDB\u56DE\u6536\u7AD9");let q=await od("fresh");t.strictEqual(q.ok,!0,"\u5378\u8F7D\u5E94\u6210\u529F\uFF1A"+JSON.stringify(q)),t.strictEqual(K.existsSync(A),!1,"\u63D2\u4EF6\u76EE\u5F55\u8981\u79FB\u8D70"),t.strictEqual(so("pl__fresh__ping"),!1,"\u5378\u8F7D\u540E\u5DE5\u5177\u6D88\u5931");let N=id().find(function(ve){return ve.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 z=await ad(N.entry);t.strictEqual(z.ok,!0,"\u8FD8\u539F\u5E94\u6210\u529F\uFF1A"+JSON.stringify(z)),t.strictEqual(z.dir,A,"\u8981\u8FD8\u539F\u56DE\u539F\u4F4D\u7F6E"),t.strictEqual(so("pl__fresh__ping"),!0,"\u8FD8\u539F\u540E\u7ACB\u5373\u53EF\u7528");let he=B.join(n,"outside");K.mkdirSync(he,{recursive:!0}),K.writeFileSync(B.join(he,"plugin.json"),JSON.stringify({name:"evil",tools:[{name:"x",description:"x"}]}));let ne=await od(he);t.strictEqual(ne.ok,!1,"\u63D2\u4EF6\u6839\u4E4B\u5916\u7684\u76EE\u5F55\u5FC5\u987B\u62D2\u7EDD\u5378\u8F7D"),t.strictEqual(K.existsSync(he),!0,"\u62D2\u7EDD\u540E\u76EE\u5F55\u8FD8\u5728");let Y=await ad("../outside");t.strictEqual(Y.ok,!1,"\u5E26 / \u7684\u56DE\u6536\u7AD9\u6761\u76EE\u8981\u62D2\u7EDD"),K.writeFileSync(B.join(x,"index.js"),'module.exports={tools:{say:{handler:async()=>"dirty"}}}'),fr({enabled:!1}),await xn(s,{quiet:!0}),t.strictEqual(ro({}).length,0,"\u5173\u95ED\u540E\u6E05\u5355\u4E3A\u7A7A");let pe=ld();t.ok(pe.plugins.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u5DF2\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+pe.plugins.length),t.ok(pe.pending.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+pe.pending.length);let U=B.join(r,"theme-test");K.mkdirSync(U,{recursive:!0}),K.writeFileSync(B.join(U,"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 ke=gd().find(function(ve){return ve.name==="theme-test"});t.ok(ke,"\u5E26 theme \u7684\u63D2\u4EF6\u8981\u51FA\u73B0\u5728 themes() \u91CC\uFF08enabled=false \u4E5F\u8981\u5728\uFF09"),t.strictEqual(ke.label,"\u6D4B\u8BD5\u914D\u8272"),t.strictEqual(ke.tokens.bg,"#101014"),t.strictEqual(ke.tokens.fg,"rgb(240, 240, 245)"),t.strictEqual(ke.tokens.radius,"10px","\u65E0\u5355\u4F4D\u5C3A\u5BF8\u8981\u8865 px"),t.strictEqual(ke.tokens["font-size"],"15px"),t.strictEqual(ke.tokens.border,void 0,"\u5E26\u5206\u53F7 / \u82B1\u62EC\u53F7\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.surface,void 0,"url() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.width,void 0,"\u767D\u540D\u5355\u4E4B\u5916\u7684 token \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.link,void 0,"expression() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.ok,void 0,"\u62FC\u4E0D\u6210\u989C\u8272 / \u5177\u540D\u8272\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.ok(ke.dropped.length>=5,"\u4E22\u5F03\u8981\u6709\u7559\u75D5\uFF0C\u5B9E\u9645: "+JSON.stringify(ke.dropped)),t.strictEqual(el("theme-test").tokens.accent,"#ff5fa2","themeOf \u6309\u540D\u53D6\u5230 tokens"),t.strictEqual(el("nope"),null,"\u4E0D\u5B58\u5728\u7684\u63D2\u4EF6\u540D\u56DE null"),t.strictEqual(el(""),null,"\u7A7A\u540D\u56DE null");let ut=B.join(r,"theme-broken");K.mkdirSync(ut,{recursive:!0}),K.writeFileSync(B.join(ut,"plugin.json"),JSON.stringify({name:"theme-broken",theme:{tokens:{bg:"red;}",fg:"url(x)"}}}));let gt=ld();t.ok(gt.errors.some(function(ve){return ve.indexOf("theme-broken")===0}),"\u5168\u975E\u6CD5 token \u7684\u4E3B\u9898\u63D2\u4EF6\u8981\u8BB0 error\uFF0C\u5B9E\u9645: "+JSON.stringify(gt.errors)),t.strictEqual(gt.plugins.concat(gt.pending).some(function(ve){return ve.name==="theme-broken"}),!1,"\u574F\u4E3B\u9898\u63D2\u4EF6\u4E0D\u8BE5\u51FA\u73B0\u5728\u6E05\u5355\u91CC"),Fs.homedir=i,K.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)})}yd.exports={configure:fr,refresh:xn,reload:a1,list:ow,status:cd,toolDefs:ro,hasTool:so,findTool:pd,readOnlyOf:rw,callTool:fi,installFromDir:Qa,uninstall:od,trashList:id,restoreFromTrash:ad,trustDir:fd,inventory:ld,themes:gd,themeOf:el,scopeOf:Ls,globalDir:hi,trashDir:gi,_cleanName:pr,_exposedBase:Yy,_parseManifest:Is,_dirFingerprint:pi,_scanRaw:oo,_state:E,_ttl:Xy}});var xd=Z((SI,mw)=>{"use strict";var Ie=require("fs"),aw=require("os"),Be=require("path"),yi=Qo(),lw="skills-trash",wd=".installed.json",cw={root:""};function m1(t){let e=t||{};e.root&&(cw.root=String(e.root))}function h1(){return Be.resolve(cw.root||process.cwd())}function rl(){return Be.join(aw.homedir(),".luban","skills")}function ol(){return Be.join(aw.homedir(),".luban",lw)}function bd(t){return Be.join(t||h1(),".luban","skills")}function uw(t){return t==="project"?bd():rl()}function wi(t){let e=Be.resolve(String(t||"")),n=[{scope:"global",base:rl()},{scope:"project",base:bd()}];for(let s of n){let r=Be.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!Be.isAbsolute(r)&&r.indexOf(Be.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function iw(){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 il(t,e){Ie.mkdirSync(e,{recursive:!0});for(let n of Ie.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=Be.join(t,n.name),r=Be.join(e,n.name);n.isDirectory()?il(s,r):n.isFile()&&Ie.copyFileSync(s,r)}}function al(t){try{let e=JSON.parse(Ie.readFileSync(Be.join(t,wd),"utf8"));if(e&&typeof e=="object"&&e.skills&&typeof e.skills=="object")return e}catch{}return{version:1,skills:{}}}function kd(t,e){Ie.mkdirSync(t,{recursive:!0}),Ie.writeFileSync(Be.join(t,wd),JSON.stringify(e,null,2)+`
208
+ `+T)}let s=Ly(n.path);try{Fs.mkdirSync(s,{recursive:!0})}catch{}let r=Fs.mkdtempSync(ds.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=Fs.mkdtempSync(ds.join(s,"luban-chrome-"));c=BC(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 y=!1;c.on("exit",function(){y=!0});let S=Date.now()+(e.timeoutMs||Ny);for(;Date.now()<S&&!y;){let _=KC(g);if(_)return{port:_.port,stderr:v,dir:g};await Ft(200)}return ui(g),{port:0,stderr:v,exited:y}},f=await d(l);if(!f.port&&a==="--headless=new"){dr(c),await Ft(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||"")){dr(c),await Ft(300);let T=l.concat(["--no-sandbox"]);if(f=await d(T),!f.port&&a==="--headless=new"){dr(c),await Ft(300);let g=T.filter(function(v){return v!=="--headless=new"}).concat(["--headless"]);f=await d(g)}}if(!f.port){dr(c),ui(r);let T=f.stderr?`
209
+ \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 HC(u,"/json/list")}catch{T=[]}if(Array.isArray(T)&&(p=T.find(function(g){return g&&g.type==="page"&&g.webSocketDebuggerUrl}),p))break;await Ft(200)}if(!p)throw dr(c),ui(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 WC(p.webSocketDebuggerUrl,15e3)}catch(T){throw dr(c),ui(r),T}let k=new td(h),x=new nd({proc:c,dir:r,exe:n.path,port:u,cdp:k,width:o,height:i});try{await x.init()}catch(T){throw await x.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 x}Ky.exports={findChrome:Dy,chromeCandidates:Fy,isSnapBinary:Iy,profileBaseDir:Ly,normalizeUrl:Wy,formatAxTree:Uy,clipText:By,encodeFrame:Ry,decodeFrame:qy,launch:JC,MAX_FRAME:jy,EVENTS_MAX:Qu,DEFAULT_TIMEOUT_MS:di,LAUNCH_TIMEOUT_MS:Ny}});var mr=Z((xI,yd)=>{var K=require("fs"),Is=require("os"),B=require("path"),$y=require("crypto"),Xy=2e3,Vy=6e4,$C=18e4,zy=8e3,sd=500,tl=64,XC=30,Gy=65536,VC=["bg","fg","panel","border","accent","accent-fg","muted","code-bg","surface","surface-2","hover","link","ok","warn","error"],rd={"radius-sm":[0,48],radius:[0,48],"radius-lg":[0,48],"font-size":[8,40]},YC=24,ZC=/^#[0-9a-fA-F]{3,8}$/,QC=/^(?:rgb|rgba|hsl|hsla)\(\s*[-0-9.,%\s/]+\)$/,e1=/^[a-zA-Z]{3,22}$/,t1=/^(expression|url|var|env|attr|image|paint|element)$/i,n1=/^(0|0?\.\d+|[1-9]\d*(?:\.\d+)?)\s*(px|em|rem|%|pt)?$/,E={root:"",version:"0",rec:function(){},confirm:null,enabled:!1,maxTools:XC,timeoutMs:Vy,plugins:new Map,exposed:new Map,disabled:new Set,pending:[],trust:null,trustLoaded:!1,trustDirty:!1,dirs:[],errors:[],scannedAt:"",scannedMs:0};function fr(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),$C))}function It(t,e){try{E.rec(t,e)}catch{}}function nl(t,e){let n=String(t??"");return n.length>e?n.slice(0,e)+"\u2026":n}function pr(t){return String(t??"").replace(/[^A-Za-z0-9_-]+/g,"_").replace(/^_+|_+$/g,"")||"x"}function s1(t){return $y.createHash("sha1").update(String(t)).digest("hex").slice(0,6)}function Yy(t,e){let n="pl__"+pr(t)+"__"+pr(e);if(n.length>tl){let s="_"+s1(t+"/"+e);n=n.slice(0,tl-s.length)+s}return n}function Zy(){return B.join(Is.homedir(),".luban","plugins-trust.json")}function ud(){if(E.trustLoaded)return;E.trustLoaded=!0,E.trust=new Map;let t;try{t=JSON.parse(K.readFileSync(Zy(),"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 Qy(){if(!E.trustDirty||!E.trust)return;let t={trusted:{}};for(let[e,n]of E.trust)t.trusted[e]=n;try{let e=Zy();K.mkdirSync(B.dirname(e),{recursive:!0}),K.writeFileSync(e,JSON.stringify(t,null,2)+`
210
+ `),E.trustDirty=!1}catch(e){It("plugin_trust_save_failed",{message:e.message})}}function pi(t){let e=[];(function s(r){let o;try{o=K.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of o){if(i.name==="node_modules"||i.name===".git")continue;let a=B.join(r,i.name);i.isDirectory()?s(a):i.isFile()&&e.push(a)}})(t),e.sort();let n=$y.createHash("sha1");for(let s of e){n.update(B.relative(t,s));try{n.update(K.readFileSync(s))}catch{}}return n.digest("hex")}function dd(t,e){return ud(),E.trust.get(t)===e}function ew(t,e){ud(),E.trust.set(t,e),E.trustDirty=!0,Qy()}function r1(t,e){let n=String(e??"").trim();if(!n||n.length>64||/[;{}<>\\"']/.test(n)||/\/\*/.test(n))return"";if(rd[t]){let s=n.match(n1);if(!s)return"";let r=Number(s[1]),o=rd[t];return!isFinite(r)||r<o[0]||r>o[1]?"":s[2]?n:r+"px"}return ZC.test(n)||QC.test(n)||e1.test(n)&&!t1.test(n)?n:""}function o1(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>=YC){s.push(i);continue}let a=String(i).replace(/^--/,"");if(VC.indexOf(a)<0&&!rd[a]){a!=="tokens"&&a!=="label"&&a!=="description"&&s.push(i);continue}let l=r1(a,e[i]);if(!l){s.push(i);continue}n[a]=l,r++}return r?{label:nl(typeof t.label=="string"?t.label.trim():"",40)||"",tokens:n,dropped:s}:{error:"theme.tokens \u91CC\u6CA1\u6709\u5408\u6CD5 token",dropped:s}}function Ls(t){let e=B.join(t,"plugin.json"),n;try{n=K.statSync(e)}catch{return{error:"\u7F3A\u5C11 plugin.json"}}if(!n.isFile())return{error:"plugin.json \u4E0D\u662F\u6587\u4EF6"};if(n.size>Gy)return{error:"plugin.json \u8D85\u8FC7 "+Gy+" \u5B57\u8282"};let s;try{s=JSON.parse(K.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=pr(s.name||B.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=B.resolve(t,o),a=B.relative(t,i);if(!a||a.startsWith("..")||B.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=o1(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=pr(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:nl(typeof p.description=="string"?p.description:"",sd),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:nl(typeof s.description=="string"?s.description:"",sd),main:o,mainAbs:i,dir:t,tools:d,readOnly:u,theme:c?{label:c.label,tokens:c.tokens,dropped:c.dropped||[]}:null}}function i1(t){let e=t||E.root||process.cwd(),n=Is.homedir();return[B.join(n,".luban","plugins"),B.join(e,".luban","plugins")]}function tw(){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=Yy(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>tl?r.slice(0,tl-i.length)+i:r+i}E.exposed.set(r,{plugin:n.name,tool:s.name,def:s,readOnly:s.readOnly===!0})}}}function oo(){let t=i1(E.root),e=[],n=new Map;for(let s of t){let r;try{r=K.readdirSync(s,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=B.join(s,o.name),a=Ls(i);if(a.error){e.push(o.name+"\uFF1A"+a.error),It("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 xn(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=oo(),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=pi(d.dir);if(dd(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"),It("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?(ew(d.dir,f),a.set(c,d),It("plugin_trusted",{plugin:c,dir:d.dir})):(E.disabled.add(d.dir),l.push(d),It("plugin_rejected",{plugin:c,dir:d.dir}))}return E.plugins=a,E.pending=l,tw(),E.errors=o,E.scannedAt=new Date().toISOString(),E.scannedMs=Date.now(),n.quiet||It("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 mi(){if(!E.enabled||!E.root){E.exposed.size&&(E.plugins=new Map,E.exposed.clear());return}if(E.scannedMs&&Date.now()-E.scannedMs<Xy)return;let t=E.exposed.size,e=oo().merged,n=new Map,s=[];for(let[r,o]of e){let i=o.manifest,a=pi(i.dir);dd(i.dir,a)?n.set(r,i):s.push(i)}E.plugins=n,E.pending=s,tw(),E.scannedMs=Date.now(),E.scannedAt=new Date().toISOString(),E.exposed.size!==t&&It("plugins_changed",{count:E.plugins.size,tools:E.exposed.size})}function a1(t){let e=t||{};E.scannedMs=0,e.keepDisabled||(E.disabled=new Set);for(let n of E.plugins.values())try{delete require.cache[md(n)]}catch{}return xn(E.root)}var l1="plugins-trash";function hi(){return B.join(Is.homedir(),".luban","plugins")}function gi(){return B.join(Is.homedir(),".luban",l1)}function Ds(t){let e=B.resolve(String(t||"")),n=[{scope:"global",base:hi()},{scope:"project",base:B.join(B.resolve(E.root||process.cwd()),".luban","plugins")}];for(let s of n){let r=B.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!B.isAbsolute(r)&&r.indexOf(B.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function Jy(){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 sl(t,e){K.mkdirSync(e,{recursive:!0});for(let n of K.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=B.join(t,n.name),r=B.join(e,n.name);n.isDirectory()?sl(s,r):n.isFile()&&K.copyFileSync(s,r)}}function nw(t){try{let e=JSON.parse(K.readFileSync(t+".json","utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function c1(t,e){try{K.writeFileSync(t+".json",JSON.stringify(e,null,2)+`
211
+ `)}catch{}}function u1(t){ud(),E.trust.delete(B.resolve(t))&&(E.trustDirty=!0,Qy())}function fd(t){let e=B.resolve(String(t||""));if(!Ds(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=Ls(e);if(n.error)throw new Error("\u4E0D\u662F\u5408\u6CD5\u7684\u63D2\u4EF6\u76EE\u5F55\uFF1A"+n.error);return ew(e,pi(e)),E.disabled.delete(e),E.scannedMs=0,n}function sw(t,e){let n=B.resolve(t),s=Ds(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();K.mkdirSync(r,{recursive:!0,mode:448});let o=pr(s.name),i=o+"-"+Jy(),a=2;for(;K.existsSync(B.join(r,i))||K.existsSync(B.join(r,i+".json"));)i=o+"-"+Jy()+"-"+a,a++;let l=B.join(r,i);try{K.renameSync(n,l)}catch(c){if(c&&c.code==="EXDEV")sl(n,l),K.rmSync(n,{recursive:!0,force:!0});else throw c}return c1(l,{name:s.name,from:n,scope:s.scope,at:new Date().toISOString(),why:e||""}),u1(n),E.scannedMs=0,i}async function Qa(t,e){let n=e||{},s=B.resolve(String(t||"")),r;try{r=K.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=Ls(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"?B.join(B.resolve(E.root||process.cwd()),".luban","plugins"):hi(),l=B.join(a,o.name);if(B.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(K.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};sw(l,"replaced-by-install"),c=!0}try{sl(s,l)}catch(d){try{K.rmSync(l,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+d.message}}let u=Ls(l);if(u.error){try{K.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{fd(l)}catch(d){It("plugin_trust_failed",{dir:l,message:d.message})}return E.scannedMs=0,await xn(E.root,{quiet:!0}),It("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 od(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=B.resolve(n);else{let c=oo().merged.get(n);if(!c)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u63D2\u4EF6\uFF1A"+n};r=c.manifest.dir}let o=Ds(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=Ls(r),a=i.error?o.name:i.name,l="";try{l=sw(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[md(i)]}catch{}return await xn(E.root,{quiet:!0}),It("plugin_uninstalled",{name:a,dir:r,trash:l}),{ok:!0,name:a,dir:r,trash:l}}function id(){let t=gi(),e;try{e=K.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=B.join(t,s.name),o=nw(r),i=Ls(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 ad(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=B.join(gi(),s);if(!K.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o=nw(r),i=Ls(r),a=i.error?String(o.name||s):i.name,l="",c=String(o.from||"");if(c){let u=B.resolve(c),d=B.dirname(u);K.existsSync(d)&&!K.existsSync(u)&&Ds(u)&&(l=u)}if(l||(l=B.join(hi(),pr(a))),K.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u63D2\u4EF6\uFF1A"+l};K.mkdirSync(B.dirname(l),{recursive:!0});try{K.renameSync(r,l)}catch(u){if(u&&u.code==="EXDEV")sl(r,l),K.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+u.message}}try{K.unlinkSync(r+".json")}catch{}if(n.trust!==!1)try{fd(l)}catch(u){It("plugin_restore_trust_failed",{dir:l,message:u.message})}return await xn(E.root,{quiet:!0}),It("plugin_restored",{name:a,dir:l,from:s}),{ok:!0,name:a,dir:l}}function so(t){return mi(),E.exposed.has(String(t))}function pd(t){return mi(),E.exposed.get(String(t))||null}function rw(t){let e=pd(t);return e?e.readOnly===!0:!1}function ro(t){mi();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:nl(a,sd)+"\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 md(t){let e=B.resolve(t.mainAbs);try{return K.realpathSync(e)}catch{return e}}function d1(t){let e=E.plugins.get(t.plugin);if(!e)throw new Error("\u63D2\u4EF6\u5DF2\u5378\u8F7D: "+t.plugin);let n=md(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 f1(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 fi(t,e,n){let s=pd(t);if(!s)throw new Error("\u672A\u77E5\u63D2\u4EF6\u5DE5\u5177: "+t);let r=n||{},o=Date.now(),i=!1;try{let a=d1(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 f1(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>zy&&(u=u.slice(0,zy)+`
212
+ \u2026[\u8F93\u51FA\u5DF2\u622A\u65AD]`),u}catch(a){let l=String(a&&a.message||a);throw It("plugin_call_failed",{plugin:s.plugin,tool:s.tool,message:l}),new Error("\u63D2\u4EF6\u5DE5\u5177 "+t+" \u5931\u8D25\uFF1A"+l)}finally{It("plugin_call",{plugin:s.plugin,tool:s.tool,ok:i,ms:Date.now()-o})}}function ow(){mi();let t=[];for(let e of E.plugins.values()){let n=Ds(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:hd(e),tools:e.tools.map(function(s){return{name:s.name,readOnly:s.readOnly===!0}})})}return t}function p1(){return mi(),E.pending.map(function(t){let e=Ds(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:hd(t),tools:t.tools.map(function(n){return{name:n.name,readOnly:n.readOnly===!0}})}})}function ld(){let t=oo(),e=[],n=[];for(let s of t.merged.values()){let r=s.manifest,o=Ds(r.dir),i={name:r.name,version:r.version,description:r.description,dir:r.dir,scope:o?o.scope:"",readOnly:r.readOnly===!0,trusted:dd(r.dir,pi(r.dir)),theme:hd(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 hd(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 gd(){let t=oo(),e=[];for(let n of t.merged.values()){let s=n.manifest;s.theme&&((s.theme.dropped||[]).length&&It("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 el(t){let e=String(t??"").trim();if(!e)return null;let n=gd();for(let s of n)if(s.name===e)return s;return null}function cd(){return{root:E.root,enabled:E.enabled,dirs:E.dirs.slice(),globalDir:hi(),trashDir:gi(),errors:E.errors.slice(),scannedAt:E.scannedAt,plugins:ow(),pending:p1(),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===yd){let t=require("assert"),e=K.promises;(async function(){let n=K.mkdtempSync(B.join(Is.tmpdir(),"luban-plugin-test-")),s=B.join(n,"proj"),r=B.join(n,"home",".luban","plugins"),o=B.join(s,".luban","plugins");K.mkdirSync(r,{recursive:!0}),K.mkdirSync(o,{recursive:!0});let i=Is.homedir;Is.homedir=function(){return B.join(n,"home")};let a=B.join(r,"demo");K.mkdirSync(a,{recursive:!0}),K.writeFileSync(B.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"}}}}]})),K.writeFileSync(B.join(a,"index.js"),'module.exports={tools:{echo:{handler:async(a)=>"echo:"+(a&&a.text||"")}}};');let l=B.join(o,"demo");K.mkdirSync(l,{recursive:!0}),K.writeFileSync(B.join(l,"plugin.json"),JSON.stringify({name:"demo",version:"2.0.0",readOnly:!1,tools:[{name:"boom",description:"\u629B\u9519",parameters:{type:"object",properties:{}}}]})),K.writeFileSync(B.join(l,"index.js"),'module.exports={tools:{boom:{handler:async()=>{throw new Error("\u70B8\u4E86")}}}};');let c=B.join(r,"bad");K.mkdirSync(c,{recursive:!0}),K.writeFileSync(B.join(c,"plugin.json"),"{ not json");let u=[],d=[];fr({root:s,enabled:!0,rec:function(ve,Et){u.push([ve,Et])},confirm:async function(ve){return d.push(ve.name),!0}}),await xn(s);let f=cd();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(ve){return ve.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(ve){return ve.indexOf("bad")===0}),!0,"\u574F\u6E05\u5355\u8981\u8BB0 error"),t.strictEqual(so("pl__demo__boom"),!0),t.strictEqual(so("pl__demo__echo"),!1,"\u88AB\u9879\u76EE\u8986\u76D6\u7684 echo \u4E0D\u8BE5\u51FA\u73B0"),t.strictEqual(rw("pl__demo__boom"),!1);let m=JSON.stringify(ro({})),h=JSON.stringify(ro({}));t.strictEqual(m,h,"\u4E24\u6B21 toolDefs \u9010\u5B57\u8282\u76F8\u540C"),t.strictEqual(ro({planOnly:!0}).length,0,"\u975E\u53EA\u8BFB\u5DE5\u5177\u4E0D\u8FDB Plan");let k="";try{await fi("pl__demo__boom",{},{root:s})}catch(ve){k=ve.message}t.ok(k.indexOf("\u70B8\u4E86")>=0,"\u629B\u9519\u8981\u5E26\u4E0A\u539F\u56E0\uFF0C\u5B9E\u9645: "+k);let x=B.join(r,"echo");K.mkdirSync(x,{recursive:!0}),K.writeFileSync(B.join(x,"plugin.json"),JSON.stringify({name:"echo",readOnly:!0,tools:[{name:"say",description:"\u56DE\u663E",parameters:{type:"object",properties:{text:{type:"string"}}}}]})),K.writeFileSync(B.join(x,"index.js"),'module.exports={tools:{say:{handler:async(a)=>"say:"+(a&&a.text||"")}}}'),E.scannedMs=0,await xn(s,{quiet:!0});let T=await fi("pl__echo__say",{text:"hi"},{root:s});t.strictEqual(T,"say:hi","echo \u6B63\u5E38\u8FD4\u56DE\uFF0C\u5B9E\u9645: "+T);let g=B.join(r,"slow");K.mkdirSync(g,{recursive:!0}),K.writeFileSync(B.join(g,"plugin.json"),JSON.stringify({name:"slow",readOnly:!0,tools:[{name:"hang",description:"\u6302\u4F4F",parameters:{type:"object",properties:{}}}]})),K.writeFileSync(B.join(g,"index.js"),"module.exports={tools:{hang:{handler:()=>new Promise(()=>{})}}}"),fr({timeoutMs:300}),E.scannedMs=0,await xn(s,{quiet:!0});let v="";try{await fi("pl__slow__hang",{},{root:s})}catch(ve){v=ve.message}t.ok(v.indexOf("\u8D85\u65F6")>=0,"\u8981\u8D85\u65F6\uFF0C\u5B9E\u9645: "+v),fr({timeoutMs:Vy}),t.strictEqual(d.indexOf("demo")>=0,!0,"\u9996\u6B21\u8981\u786E\u8BA4 demo");let y=B.join(n,"home",".luban","plugins-trust.json");t.ok(K.existsSync(y),"\u4FE1\u4EFB\u8868\u8981\u843D\u76D8");let S=d.length;K.writeFileSync(B.join(x,"index.js"),'module.exports={tools:{say:{handler:async()=>"changed"}}}'),E.scannedMs=0,await xn(s,{quiet:!0}),t.ok(d.length>S,"\u5185\u5BB9\u53D8\u4E86\u8981\u91CD\u65B0\u786E\u8BA4"),fr({confirm:async function(){return!1}}),E.trust=new Map,E.trustDirty=!0,E.disabled=new Set,E.scannedMs=0,await xn(s,{quiet:!0}),t.strictEqual(ro({}).length,0,"\u5168\u62D2\u7EDD\u540E\u6E05\u5355\u4E3A\u7A7A"),t.ok(cd().pending.length>0,"\u88AB\u62D2\u7684\u63D2\u4EF6\u8981\u8FDB pending"),fr({enabled:!0,confirm:async function(){return!0}}),E.trust=new Map,E.disabled=new Set,E.scannedMs=0,await xn(s,{quiet:!0});let _=B.join(n,"downloads","pkgs","fresh");K.mkdirSync(_,{recursive:!0}),K.writeFileSync(B.join(_,"plugin.json"),JSON.stringify({name:"fresh",version:"3.1.0",readOnly:!0,tools:[{name:"ping",description:"ping",parameters:{type:"object",properties:{}}}]})),K.writeFileSync(B.join(_,"index.js"),'module.exports={tools:{ping:{handler:async()=>"pong"}}}'),K.mkdirSync(B.join(_,".git"),{recursive:!0}),K.writeFileSync(B.join(_,".git","HEAD"),"ref: refs/heads/main");let C=await Qa(_,{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=B.join(r,"fresh");t.strictEqual(K.existsSync(B.join(A,"plugin.json")),!0,"\u6587\u4EF6\u8981\u843D\u8FDB\u5168\u5C40\u63D2\u4EF6\u6839"),t.strictEqual(K.existsSync(B.join(A,".git")),!1,".git \u4E0D\u8BE5\u88AB\u590D\u5236"),t.strictEqual(so("pl__fresh__ping"),!0,"\u88C5\u5B8C\u7ACB\u5373\u53EF\u7528\uFF08\u4FE1\u4EFB + \u91CD\u626B\uFF09"),t.strictEqual(await fi("pl__fresh__ping",{},{root:s}),"pong");let D=await Qa(_,{trust:!0});t.strictEqual(D.ok,!1,"\u540C\u540D\u4E0D\u5E26 replace \u5E94\u62D2\u7EDD"),t.strictEqual(D.code,"exists");let G=await Qa(_,{trust:!0,replace:!0});t.strictEqual(G.ok,!0,"replace \u5E94\u6210\u529F"),t.strictEqual(G.replaced,!0);let H=id();t.ok(H.some(function(ve){return ve.why==="replaced-by-install"}),"\u65E7\u7248\u8981\u8FDB\u56DE\u6536\u7AD9");let q=await od("fresh");t.strictEqual(q.ok,!0,"\u5378\u8F7D\u5E94\u6210\u529F\uFF1A"+JSON.stringify(q)),t.strictEqual(K.existsSync(A),!1,"\u63D2\u4EF6\u76EE\u5F55\u8981\u79FB\u8D70"),t.strictEqual(so("pl__fresh__ping"),!1,"\u5378\u8F7D\u540E\u5DE5\u5177\u6D88\u5931");let N=id().find(function(ve){return ve.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 z=await ad(N.entry);t.strictEqual(z.ok,!0,"\u8FD8\u539F\u5E94\u6210\u529F\uFF1A"+JSON.stringify(z)),t.strictEqual(z.dir,A,"\u8981\u8FD8\u539F\u56DE\u539F\u4F4D\u7F6E"),t.strictEqual(so("pl__fresh__ping"),!0,"\u8FD8\u539F\u540E\u7ACB\u5373\u53EF\u7528");let he=B.join(n,"outside");K.mkdirSync(he,{recursive:!0}),K.writeFileSync(B.join(he,"plugin.json"),JSON.stringify({name:"evil",tools:[{name:"x",description:"x"}]}));let ne=await od(he);t.strictEqual(ne.ok,!1,"\u63D2\u4EF6\u6839\u4E4B\u5916\u7684\u76EE\u5F55\u5FC5\u987B\u62D2\u7EDD\u5378\u8F7D"),t.strictEqual(K.existsSync(he),!0,"\u62D2\u7EDD\u540E\u76EE\u5F55\u8FD8\u5728");let Y=await ad("../outside");t.strictEqual(Y.ok,!1,"\u5E26 / \u7684\u56DE\u6536\u7AD9\u6761\u76EE\u8981\u62D2\u7EDD"),K.writeFileSync(B.join(x,"index.js"),'module.exports={tools:{say:{handler:async()=>"dirty"}}}'),fr({enabled:!1}),await xn(s,{quiet:!0}),t.strictEqual(ro({}).length,0,"\u5173\u95ED\u540E\u6E05\u5355\u4E3A\u7A7A");let pe=ld();t.ok(pe.plugins.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u5DF2\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+pe.plugins.length),t.ok(pe.pending.length>0,"\u5173\u95ED\u5F00\u5173\u540E inventory \u4ECD\u5217\u51FA\u672A\u4FE1\u4EFB\u63D2\u4EF6\uFF0C\u5B9E\u9645 "+pe.pending.length);let U=B.join(r,"theme-test");K.mkdirSync(U,{recursive:!0}),K.writeFileSync(B.join(U,"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 ke=gd().find(function(ve){return ve.name==="theme-test"});t.ok(ke,"\u5E26 theme \u7684\u63D2\u4EF6\u8981\u51FA\u73B0\u5728 themes() \u91CC\uFF08enabled=false \u4E5F\u8981\u5728\uFF09"),t.strictEqual(ke.label,"\u6D4B\u8BD5\u914D\u8272"),t.strictEqual(ke.tokens.bg,"#101014"),t.strictEqual(ke.tokens.fg,"rgb(240, 240, 245)"),t.strictEqual(ke.tokens.radius,"10px","\u65E0\u5355\u4F4D\u5C3A\u5BF8\u8981\u8865 px"),t.strictEqual(ke.tokens["font-size"],"15px"),t.strictEqual(ke.tokens.border,void 0,"\u5E26\u5206\u53F7 / \u82B1\u62EC\u53F7\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.surface,void 0,"url() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.width,void 0,"\u767D\u540D\u5355\u4E4B\u5916\u7684 token \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.link,void 0,"expression() \u5FC5\u987B\u4E22\u5F03"),t.strictEqual(ke.tokens.ok,void 0,"\u62FC\u4E0D\u6210\u989C\u8272 / \u5177\u540D\u8272\u7684\u503C\u5FC5\u987B\u4E22\u5F03"),t.ok(ke.dropped.length>=5,"\u4E22\u5F03\u8981\u6709\u7559\u75D5\uFF0C\u5B9E\u9645: "+JSON.stringify(ke.dropped)),t.strictEqual(el("theme-test").tokens.accent,"#ff5fa2","themeOf \u6309\u540D\u53D6\u5230 tokens"),t.strictEqual(el("nope"),null,"\u4E0D\u5B58\u5728\u7684\u63D2\u4EF6\u540D\u56DE null"),t.strictEqual(el(""),null,"\u7A7A\u540D\u56DE null");let ut=B.join(r,"theme-broken");K.mkdirSync(ut,{recursive:!0}),K.writeFileSync(B.join(ut,"plugin.json"),JSON.stringify({name:"theme-broken",theme:{tokens:{bg:"red;}",fg:"url(x)"}}}));let gt=ld();t.ok(gt.errors.some(function(ve){return ve.indexOf("theme-broken")===0}),"\u5168\u975E\u6CD5 token \u7684\u4E3B\u9898\u63D2\u4EF6\u8981\u8BB0 error\uFF0C\u5B9E\u9645: "+JSON.stringify(gt.errors)),t.strictEqual(gt.plugins.concat(gt.pending).some(function(ve){return ve.name==="theme-broken"}),!1,"\u574F\u4E3B\u9898\u63D2\u4EF6\u4E0D\u8BE5\u51FA\u73B0\u5728\u6E05\u5355\u91CC"),Is.homedir=i,K.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)})}yd.exports={configure:fr,refresh:xn,reload:a1,list:ow,status:cd,toolDefs:ro,hasTool:so,findTool:pd,readOnlyOf:rw,callTool:fi,installFromDir:Qa,uninstall:od,trashList:id,restoreFromTrash:ad,trustDir:fd,inventory:ld,themes:gd,themeOf:el,scopeOf:Ds,globalDir:hi,trashDir:gi,_cleanName:pr,_exposedBase:Yy,_parseManifest:Ls,_dirFingerprint:pi,_scanRaw:oo,_state:E,_ttl:Xy}});var xd=Z((SI,mw)=>{"use strict";var Ie=require("fs"),aw=require("os"),Be=require("path"),yi=Qo(),lw="skills-trash",wd=".installed.json",cw={root:""};function m1(t){let e=t||{};e.root&&(cw.root=String(e.root))}function h1(){return Be.resolve(cw.root||process.cwd())}function rl(){return Be.join(aw.homedir(),".luban","skills")}function ol(){return Be.join(aw.homedir(),".luban",lw)}function bd(t){return Be.join(t||h1(),".luban","skills")}function uw(t){return t==="project"?bd():rl()}function wi(t){let e=Be.resolve(String(t||"")),n=[{scope:"global",base:rl()},{scope:"project",base:bd()}];for(let s of n){let r=Be.relative(s.base,e);if(r&&r.indexOf("..")!==0&&!Be.isAbsolute(r)&&r.indexOf(Be.sep)<0)return{scope:s.scope,base:s.base,name:r}}return null}function iw(){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 il(t,e){Ie.mkdirSync(e,{recursive:!0});for(let n of Ie.readdirSync(t,{withFileTypes:!0})){if(n.name===".git"||n.isSymbolicLink())continue;let s=Be.join(t,n.name),r=Be.join(e,n.name);n.isDirectory()?il(s,r):n.isFile()&&Ie.copyFileSync(s,r)}}function al(t){try{let e=JSON.parse(Ie.readFileSync(Be.join(t,wd),"utf8"));if(e&&typeof e=="object"&&e.skills&&typeof e.skills=="object")return e}catch{}return{version:1,skills:{}}}function kd(t,e){Ie.mkdirSync(t,{recursive:!0}),Ie.writeFileSync(Be.join(t,wd),JSON.stringify(e,null,2)+`
213
213
  `)}function dw(){let t=[];for(let e of["global","project"]){let n=uw(e),s=al(n),r;try{r=Ie.readdirSync(n,{withFileTypes:!0})}catch{continue}for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let i=Be.join(n,o.name),a=yi.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 fw(t){let e=String(t||"").trim();if(!e)return null;let n=dw();return n.find(function(s){return s.name===e&&s.scope==="project"})||n.find(function(s){return s.name===e})||null}function pw(t,e,n){let s=Be.resolve(t),r=wi(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=ol();Ie.mkdirSync(o,{recursive:!0,mode:448});let i=r.name.replace(/[^a-z0-9._-]/gi,"_"),a=i+"-"+iw(),l=2;for(;Ie.existsSync(Be.join(o,a))||Ie.existsSync(Be.join(o,a+".json"));)a=i+"-"+iw()+"-"+l,l++;let c=Be.join(o,a);try{Ie.renameSync(s,c)}catch(u){if(u&&u.code==="EXDEV")il(s,c),Ie.rmSync(s,{recursive:!0,force:!0});else throw u}return Ie.writeFileSync(c+".json",JSON.stringify(Object.assign({name:r.name,from:s,scope:r.scope,at:new Date().toISOString(),why:e||""},n||{}),null,2)+`
214
- `),a}function g1(t,e){let n=e||{},s=Be.resolve(String(t||"")),r;try{r=Ie.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=yi.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=uw(a),c=Be.join(l,i);if(Be.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(Ie.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{pw(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{il(s,c)}catch(p){try{Ie.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+p.message}}let d=yi.readSkillManifest(c);if(!d.ok){try{Ie.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=al(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()},kd(l,f),{ok:!0,name:i,dir:c,scope:a,replaced:u,version:f.skills[i].version}}function y1(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=Be.resolve(s);else{let u=fw(s);if(!u)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u6280\u80FD\uFF1A"+s};o=u.dir}let i=wi(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=pw(o,n.why||"uninstall")}catch(u){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+u.message}}let l=i.base,c=al(l);return c.skills[i.name]&&(delete c.skills[i.name],kd(l,c)),{ok:!0,name:i.name,dir:o,trash:a}}function w1(){let t=ol(),e;try{e=Ie.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=Be.join(t,s.name),o={};try{o=JSON.parse(Ie.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=yi.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 b1(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=Be.join(ol(),s);if(!Ie.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o={};try{o=JSON.parse(Ie.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=yi.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=Be.resolve(c);Ie.existsSync(Be.dirname(d))&&!Ie.existsSync(d)&&wi(d)&&(l=d)}if(l||(l=Be.join(rl(),a)),Ie.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+l};Ie.mkdirSync(Be.dirname(l),{recursive:!0});try{Ie.renameSync(r,l)}catch(d){if(d&&d.code==="EXDEV")il(r,l),Ie.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+d.message}}try{Ie.rmSync(r+".json",{force:!0})}catch{}let u=wi(l);if(u){let d=al(u.base);d.skills[u.name]||(d.skills[u.name]={version:i.ok?i.manifest.version:"",tag:"",sourceSha256:"",repo:"",installedAt:new Date().toISOString()},kd(u.base,d))}return{ok:!0,name:a,dir:l,scope:u?u.scope:""}}mw.exports={TRASH_DIRNAME:lw,LIST_FILENAME:wd,configure:m1,globalDir:rl,projectDir:bd,trashDir:ol,scopeOf:wi,installed:dw,find:fw,installFromDir:g1,uninstall:y1,trashList:w1,restoreFromTrash:b1}});var ll=Z((vI,_d)=>{function hr(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e):n:""}function k1(t,e){if(!t||typeof t!="object")return null;let n=hr(t.id,64),s=hr(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 x1(t,e){if(!t||typeof t!="object")return null;let n=hr(t.id,64),s=hr(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=k1(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 Ds(t){let e=t&&typeof t=="object"?t:{},n=hr(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=x1(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 Sd(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=hr(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=hr(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 hw(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 gw(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"+hw(o,l)+"\uFF09"}).join("\u3001"):a=i+"\uFF08"+hw(o,i)+"\uFF09",s.push("- "+o.id+"\uFF08"+o.prompt+"\uFF09: "+a)}return s.join(`
215
- `)}function vd(t){let e=t&&t.questions||[];return e.length!==1?!0:!!e[0].allow_multiple}_d.exports={MAX_QUESTIONS:4,MIN_OPTIONS:2,MAX_OPTIONS:6,normalize:Ds,normalizeAnswers:Sd,formatAnswers:gw,needsConfirm:vd};if(require.main===_d){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=Ds({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(!vd(s),"single select no confirm")}),n("normalize rejects empty / short options",function(){let s=!1;try{Ds({questions:[]})}catch{s=!0}t(s,"empty"),s=!1;try{Ds({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=Ds({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=Ds({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(vd(s),"confirm");let r=Sd(s,{a:"x",b:["p","q"]});t(r.a==="x"&&r.b.length===2,JSON.stringify(r));let o=gw(s,r);t(o.indexOf("\u7528\u6237\u56DE\u7B54")>=0&&o.indexOf("x\uFF08X\uFF09")>=0,o)}),n("normalizeAnswers rejects bad",function(){let s=Ds({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),r=!1;try{Sd(s,{a:"z"})}catch{r=!0}t(r,"bad id")}),n("normalize recommended flag",function(){let s=Ds({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 ul=Z((_I,vw)=>{"use strict";var Md="\u73ED\u73ED",Cd="Banban",Ad="\u5C0F\u6728\u5320",Od="\u5148\u91CF\u4E09\u904D\uFF0C\u518D\u4E0B\u4E00\u51FF",S1=[" _____"," / \\"," /_______\\"],v1=" \\_______/",_1=[" | |"," /| |\\"," \\|_____|/"," |_| |_|"],Ed={idle:[" | o o |"," | . |"," | \\___/ |"],think:[" | o o |"," | . |"," | ___ |"],plan:[" | o o |"," | . |"," | --- |"],explore:[" | O o |"," | . |"," | \\_/ |"],work:[" | > < |"," | . |"," | ___ |"],done:[" | ^ ^ |"," | . |"," | \\___/ |"],tired:[" | - - |"," | . |"," | --- |"],error:[" | x x |"," | . |"," | ~~~ |"]},yw={idle:"(o o)",think:"(o.o)",plan:"[o o]",explore:"(o o)?",work:"(>_<)",done:"(^ ^)",tired:"(-_-)",error:"(x_x)"},Td=[{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 cl(t,e){let n=String(t??"");return n.length>=e?n:n+" ".repeat(e-n.length)}function T1(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 ww(t){let e=String(t??""),n=0;for(let s=0;s<e.length;s++)n+=T1(e.charCodeAt(s));return n}function bw(t,e){let n=String(t??""),s=e-ww(n);return s>0?n+" ".repeat(s):n}function kw(t){return Object.prototype.hasOwnProperty.call(Ed,t)?t:"idle"}function M1(t){let e=String(t||"");return e==="plan"?"plan":e==="explore"?"explore":"idle"}function C1(t){let e=String(t||"");return e==="final"?"done":"tired"}function Pd(t){return S1.concat(Ed[kw(t)],[v1])}function xw(t){return Pd(t).concat(_1)}function Sw(t){return yw[kw(t)]}function A1(t,e){let n=e||{},s=typeof t=="function"?t:function(a,l){return String(l)},r=Pd(n.mood||"plan"),o={};o[2]=" "+s("bold",Md)+s("gray"," \xB7 "+Ad+"\uFF08"+Cd+"\uFF09"),o[3]=" "+s("gray",Od),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",cl(r[a],12))+l)}return i}function O1(t){let e=typeof t=="function"?t:function(i,a){return String(a)},n=xw("idle"),s=[e("bold",Md+"\uFF08"+Cd+"\uFF09")+e("gray"," \xB7 "+Ad),e("gray",Od),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",cl(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<Td.length;i++){let a=Td[i];r.push(" "+e("cyan",cl(Sw(a.mood),9))+e("gray",bw(a.when,22))+a.say)}return r}vw.exports={NAME:Md,NAME_EN:Cd,KIND:Ad,TAGLINE:Od,MOODS:Ed,FACES:yw,NOTES:Td,padRight:cl,padDisplay:bw,displayWidth:ww,moodForMode:M1,moodForStop:C1,portrait:Pd,full:xw,face:Sw,banner:A1,sheet:O1}});var Tw=Z((_w,bi)=>{(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(`
214
+ `),a}function g1(t,e){let n=e||{},s=Be.resolve(String(t||"")),r;try{r=Ie.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=yi.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=uw(a),c=Be.join(l,i);if(Be.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(Ie.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{pw(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{il(s,c)}catch(p){try{Ie.rmSync(c,{recursive:!0,force:!0})}catch{}return{ok:!1,code:"copy-failed",message:"\u590D\u5236\u5931\u8D25\uFF1A"+p.message}}let d=yi.readSkillManifest(c);if(!d.ok){try{Ie.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=al(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()},kd(l,f),{ok:!0,name:i,dir:c,scope:a,replaced:u,version:f.skills[i].version}}function y1(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=Be.resolve(s);else{let u=fw(s);if(!u)return{ok:!1,message:"\u6CA1\u6709\u8FD9\u4E2A\u6280\u80FD\uFF1A"+s};o=u.dir}let i=wi(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=pw(o,n.why||"uninstall")}catch(u){return{ok:!1,message:"\u5378\u8F7D\u5931\u8D25\uFF1A"+u.message}}let l=i.base,c=al(l);return c.skills[i.name]&&(delete c.skills[i.name],kd(l,c)),{ok:!0,name:i.name,dir:o,trash:a}}function w1(){let t=ol(),e;try{e=Ie.readdirSync(t,{withFileTypes:!0})}catch{return[]}let n=[];for(let s of e){if(!s.isDirectory()||s.name.startsWith("."))continue;let r=Be.join(t,s.name),o={};try{o=JSON.parse(Ie.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=yi.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 b1(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=Be.join(ol(),s);if(!Ie.existsSync(r))return{ok:!1,message:"\u56DE\u6536\u7AD9\u91CC\u6CA1\u6709\u8FD9\u4E00\u6761\uFF1A"+s};let o={};try{o=JSON.parse(Ie.readFileSync(r+".json","utf8"))||{}}catch{o={}}let i=yi.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=Be.resolve(c);Ie.existsSync(Be.dirname(d))&&!Ie.existsSync(d)&&wi(d)&&(l=d)}if(l||(l=Be.join(rl(),a)),Ie.existsSync(l))return{ok:!1,message:"\u76EE\u6807\u4F4D\u7F6E\u5DF2\u5B58\u5728\u540C\u540D\u6280\u80FD\uFF1A"+l};Ie.mkdirSync(Be.dirname(l),{recursive:!0});try{Ie.renameSync(r,l)}catch(d){if(d&&d.code==="EXDEV")il(r,l),Ie.rmSync(r,{recursive:!0,force:!0});else return{ok:!1,message:"\u8FD8\u539F\u5931\u8D25\uFF1A"+d.message}}try{Ie.rmSync(r+".json",{force:!0})}catch{}let u=wi(l);if(u){let d=al(u.base);d.skills[u.name]||(d.skills[u.name]={version:i.ok?i.manifest.version:"",tag:"",sourceSha256:"",repo:"",installedAt:new Date().toISOString()},kd(u.base,d))}return{ok:!0,name:a,dir:l,scope:u?u.scope:""}}mw.exports={TRASH_DIRNAME:lw,LIST_FILENAME:wd,configure:m1,globalDir:rl,projectDir:bd,trashDir:ol,scopeOf:wi,installed:dw,find:fw,installFromDir:g1,uninstall:y1,trashList:w1,restoreFromTrash:b1}});var ll=Z((vI,_d)=>{function hr(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e):n:""}function k1(t,e){if(!t||typeof t!="object")return null;let n=hr(t.id,64),s=hr(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 x1(t,e){if(!t||typeof t!="object")return null;let n=hr(t.id,64),s=hr(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=k1(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 Rs(t){let e=t&&typeof t=="object"?t:{},n=hr(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=x1(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 Sd(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=hr(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=hr(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 hw(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 gw(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"+hw(o,l)+"\uFF09"}).join("\u3001"):a=i+"\uFF08"+hw(o,i)+"\uFF09",s.push("- "+o.id+"\uFF08"+o.prompt+"\uFF09: "+a)}return s.join(`
215
+ `)}function vd(t){let e=t&&t.questions||[];return e.length!==1?!0:!!e[0].allow_multiple}_d.exports={MAX_QUESTIONS:4,MIN_OPTIONS:2,MAX_OPTIONS:6,normalize:Rs,normalizeAnswers:Sd,formatAnswers:gw,needsConfirm:vd};if(require.main===_d){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=Rs({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(!vd(s),"single select no confirm")}),n("normalize rejects empty / short options",function(){let s=!1;try{Rs({questions:[]})}catch{s=!0}t(s,"empty"),s=!1;try{Rs({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=Rs({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=Rs({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(vd(s),"confirm");let r=Sd(s,{a:"x",b:["p","q"]});t(r.a==="x"&&r.b.length===2,JSON.stringify(r));let o=gw(s,r);t(o.indexOf("\u7528\u6237\u56DE\u7B54")>=0&&o.indexOf("x\uFF08X\uFF09")>=0,o)}),n("normalizeAnswers rejects bad",function(){let s=Rs({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),r=!1;try{Sd(s,{a:"z"})}catch{r=!0}t(r,"bad id")}),n("normalize recommended flag",function(){let s=Rs({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 ul=Z((_I,vw)=>{"use strict";var Md="\u73ED\u73ED",Cd="Banban",Ad="\u5C0F\u6728\u5320",Od="\u5148\u91CF\u4E09\u904D\uFF0C\u518D\u4E0B\u4E00\u51FF",S1=[" _____"," / \\"," /_______\\"],v1=" \\_______/",_1=[" | |"," /| |\\"," \\|_____|/"," |_| |_|"],Ed={idle:[" | o o |"," | . |"," | \\___/ |"],think:[" | o o |"," | . |"," | ___ |"],plan:[" | o o |"," | . |"," | --- |"],explore:[" | O o |"," | . |"," | \\_/ |"],work:[" | > < |"," | . |"," | ___ |"],done:[" | ^ ^ |"," | . |"," | \\___/ |"],tired:[" | - - |"," | . |"," | --- |"],error:[" | x x |"," | . |"," | ~~~ |"]},yw={idle:"(o o)",think:"(o.o)",plan:"[o o]",explore:"(o o)?",work:"(>_<)",done:"(^ ^)",tired:"(-_-)",error:"(x_x)"},Td=[{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 cl(t,e){let n=String(t??"");return n.length>=e?n:n+" ".repeat(e-n.length)}function T1(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 ww(t){let e=String(t??""),n=0;for(let s=0;s<e.length;s++)n+=T1(e.charCodeAt(s));return n}function bw(t,e){let n=String(t??""),s=e-ww(n);return s>0?n+" ".repeat(s):n}function kw(t){return Object.prototype.hasOwnProperty.call(Ed,t)?t:"idle"}function M1(t){let e=String(t||"");return e==="plan"?"plan":e==="explore"?"explore":"idle"}function C1(t){let e=String(t||"");return e==="final"?"done":"tired"}function Pd(t){return S1.concat(Ed[kw(t)],[v1])}function xw(t){return Pd(t).concat(_1)}function Sw(t){return yw[kw(t)]}function A1(t,e){let n=e||{},s=typeof t=="function"?t:function(a,l){return String(l)},r=Pd(n.mood||"plan"),o={};o[2]=" "+s("bold",Md)+s("gray"," \xB7 "+Ad+"\uFF08"+Cd+"\uFF09"),o[3]=" "+s("gray",Od),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",cl(r[a],12))+l)}return i}function O1(t){let e=typeof t=="function"?t:function(i,a){return String(a)},n=xw("idle"),s=[e("bold",Md+"\uFF08"+Cd+"\uFF09")+e("gray"," \xB7 "+Ad),e("gray",Od),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",cl(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<Td.length;i++){let a=Td[i];r.push(" "+e("cyan",cl(Sw(a.mood),9))+e("gray",bw(a.when,22))+a.say)}return r}vw.exports={NAME:Md,NAME_EN:Cd,KIND:Ad,TAGLINE:Od,MOODS:Ed,FACES:yw,NOTES:Td,padRight:cl,padDisplay:bw,displayWidth:ww,moodForMode:M1,moodForStop:C1,portrait:Pd,full:xw,face:Sw,banner:A1,sheet:O1}});var Tw=Z((_w,bi)=>{(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(`
216
216
  `),m=[];for(let h=0;h<p.length;h++)h>0&&m.push({k:"plain",s:`
217
217
  `}),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 k=d.indexOf("*/",f+2),x=k===-1?m:d.slice(f,k+2);u.push({k:"com",s:x}),f+=x.length;continue}if(c.sql&&/^--/.test(m)){u.push({k:"com",s:m}),f=p;continue}if(m[0]==='"'||m[0]==="'"||m[0]==="`"){let k=m[0],x=1;for(;x<m.length;){if(m[x]==="\\"){x+=2;continue}if(m[x]===k){x++;break}x++}let T=m.slice(0,Math.min(x,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 k=d[f-1];if(!k||!/[A-Za-z0-9_$]/.test(k)){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 k=h[0],x=m.slice(k.length);c.kws.has(k)?u.push({k:"kw",s:k}):/^\s*\(/.test(x)?u.push({k:"fn",s:k}):u.push({k:"plain",s:k}),f+=k.length;continue}u.push({k:"plain",s:m[0]}),f++}}let a={highlight:o,normLang:s};typeof bi<"u"&&bi&&bi.exports&&(bi.exports=a),t&&(t.LubanHighlight=a)})(typeof globalThis<"u"?globalThis:_w)});var jw=Z((TI,Pw)=>{"use strict";var E1=Tw();function dl(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 Aw(t,e,n){let s=n||dl(null),r=E1.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 gr(t,e){let n=e||dl(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 Mw(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 Ow(t){return/^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(String(t))}function P1(t,e){return e+1>=t.length||String(t[e]).indexOf("|")===-1?!1:Ow(t[e+1])}function jd(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 j1(t,e){return t+" ".repeat(Math.max(0,e-jd(t)))}function Ew(t,e,n){let s=Mw(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(Mw(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=jd(s[d]);r.forEach(function(p){let m=jd(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 k=" "+j1(m,a[h])+" ";return f?n.bold(k):gr(k,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(`
218
218
  `),next:o}}function N1(t,e){let n=dl(e),r=String(t??"").split(`
@@ -221,26 +221,26 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var vy=Z((wI
221
221
  `),l,n)),o.join(`
222
222
  `)}function Cw(t,e,n){let r=Aw(t,e,n).split(`
223
223
  `),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(`
224
- `)}Pw.exports={renderBlock:N1,highlightCode:Aw,renderInline:gr,isSepRow:Ow,renderTable:Ew,mk:dl}});var Bw=Z((MI,qw)=>{"use strict";var F1=require("readline"),Nw=ll(),fl=ul(),Fw=qc(),Rs=null;try{Rs=jw()}catch{Rs=null}var I1=["write_file","replace_in_file","apply_patch","delete_file","move_file"],L1=60,D1=160,Fd={pending:"\xB7",in_progress:"\u25B6",completed:"\u2713",cancelled:"\u2298"},R1={pending:"gray",in_progress:"cyan",completed:"green",cancelled:"gray"},qs=null;try{let t=require("picocolors");t&&typeof t.createColors=="function"?qs=t.createColors(!process.env.NO_COLOR&&!!process.stderr.isTTY):t&&(qs=t)}catch{qs=null}var yr=!!(qs&&qs.isColorSupported===!0);function re(t,e){let n=String(e??""),s=qs&&qs[t];return typeof s=="function"?s(n):n}function q1(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function Lw(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 Iw(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 Dw(t){let e=String((t&&t.result)==null?"":t.result);if(!e)return"";if(t&&t.ok===!1){let r=e.split(`
224
+ `)}Pw.exports={renderBlock:N1,highlightCode:Aw,renderInline:gr,isSepRow:Ow,renderTable:Ew,mk:dl}});var Bw=Z((MI,qw)=>{"use strict";var F1=require("readline"),Nw=ll(),fl=ul(),Fw=qc(),qs=null;try{qs=jw()}catch{qs=null}var I1=["write_file","replace_in_file","apply_patch","delete_file","move_file"],L1=60,D1=160,Fd={pending:"\xB7",in_progress:"\u25B6",completed:"\u2713",cancelled:"\u2298"},R1={pending:"gray",in_progress:"cyan",completed:"green",cancelled:"gray"},Bs=null;try{let t=require("picocolors");t&&typeof t.createColors=="function"?Bs=t.createColors(!process.env.NO_COLOR&&!!process.stderr.isTTY):t&&(Bs=t)}catch{Bs=null}var yr=!!(Bs&&Bs.isColorSupported===!0);function re(t,e){let n=String(e??""),s=Bs&&Bs[t];return typeof s=="function"?s(n):n}function q1(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function Lw(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 Iw(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 Dw(t){let e=String((t&&t.result)==null?"":t.result);if(!e)return"";if(t&&t.ok===!1){let r=e.split(`
225
225
  `);for(let o=0;o<r.length;o++){let i=r[o].trim();if(i)return q1(i.replace(/^ERROR:\s*/i,""),60)}return""}let n=0,s=e.split(`
226
- `);for(let r=0;r<s.length;r++)s[r].trim()&&n++;return n>=2?n+" \u884C":""}function B1(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?re("green","\u25C7"):re("red","\u2717"))+" "+re("bold",s)+re("gray",r)+(a?re("dim",a):""):"[tool] "+s+r+a+(o?"":" \u2717")}function U1(t,e,n){let s=Number(t)||0,r=Number(e)||0;if(r<=0)return Lw(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 W1(t,e){let n=t.map(function(s){return s&&s.path}).join(", ");return e?re("gray","\xB7 \u5F15\u7528 ")+re("dim",n):"[refs] "+n}function K1(t,e){let n=(t&&t.description||"")+(t&&t.line||"");return e?re("gray","\xB7 \u5B50\u4EE3\u7406 ")+re("dim",n):"[\u5B50\u4EE3\u7406] "+n}function Nd(t,e,n){let s="+"+(Number(t)||0),r="-"+(Number(e)||0);return n?re("green",s)+" "+re("red",r):s+" "+r}function H1(t,e){let n=String(t.s==null?"":t.s);return t.t==="@"?e?re("cyan",n):n:t.t==="+"?e?re("green","+ "+n):"+ "+n:t.t==="-"?e?re("red","- "+n):"- "+n:e?re("dim"," "+n):" "+n}function Rw(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?re("cyan","\u25CF")+" "+re("bold","move_file")+re("gray"," \xB7 \u79FB\u52A8 "+u+" \u2192 "+d):"\u25CF move_file \xB7 \u79FB\u52A8 "+u+" \u2192 "+d;return o(f+(e?re("dim","\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09"):"\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09")),r}let i=s.map(function(u){let d=Fw.computeHunks(u.before||"",u.after||"");return{f:u,hunks:d,st:Fw.stats(d)}}),a=0,l=0;for(let u of i)a+=u.st.add,l+=u.st.del;i.length>1&&o((e?re("cyan","\u25CF")+" "+re("bold",n.name||"\u5199\u5165"):"\u25CF "+(n.name||"\u5199\u5165"))+" "+i.length+" \u4E2A\u6587\u4EF6 "+Nd(a,l,e));let c=D1;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?re("cyan","\u25CF")+" "+re("bold",n.name||"\u5199\u5165")+re("gray"," \xB7 "+p+" "+d.path):"\u25CF "+(n.name||"\u5199\u5165")+" \xB7 "+p+" "+d.path)+" "+Nd(f.add,f.del,e)):o((e?re("gray"," \u25B8 "):" \u25B8 ")+(e?re("bold",p+" "+d.path):p+" "+d.path)+" "+Nd(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(L1,c)),k=m.slice(0,h);c-=k.length;for(let T of k)o(" "+H1(T,e));let x=m.length-k.length;x>0&&o(" "+(e?re("dim","\u2026 \u8FD8\u6709 "+x+" \u884C\u672A\u663E\u793A"):"\u2026 \u8FD8\u6709 "+x+" \u884C\u672A\u663E\u793A"))}return r}function z1(t,e){let n=t&&Fd[t.status]?t.status:"pending",s=Fd[n],r=String(t&&t.content||"");return e?re(R1[n]||"gray",s)+" "+(n==="completed"||n==="cancelled"?re("dim",r):r):"[todo] "+s+" "+r}function G1(t){let e=t||{},n=e.output||process.stderr,s=e.stdout||process.stdout,r=e.colors!==void 0?e.colors:qs,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",k="\u601D\u8003\u4E2D",x=k,T="",g=0,v=0,y=0,S="",_=!1,C=!1,A="",D=0,G=!1,H=!1,q=0,fe="",N="",z=!1,he="",ne=!1,Y=[],pe="",U=0;function Ee(O){if(!_){ut();try{n.write(String(O)+`
226
+ `);for(let r=0;r<s.length;r++)s[r].trim()&&n++;return n>=2?n+" \u884C":""}function B1(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?re("green","\u25C7"):re("red","\u2717"))+" "+re("bold",s)+re("gray",r)+(a?re("dim",a):""):"[tool] "+s+r+a+(o?"":" \u2717")}function U1(t,e,n){let s=Number(t)||0,r=Number(e)||0;if(r<=0)return Lw(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 W1(t,e){let n=t.map(function(s){return s&&s.path}).join(", ");return e?re("gray","\xB7 \u5F15\u7528 ")+re("dim",n):"[refs] "+n}function K1(t,e){let n=(t&&t.description||"")+(t&&t.line||"");return e?re("gray","\xB7 \u5B50\u4EE3\u7406 ")+re("dim",n):"[\u5B50\u4EE3\u7406] "+n}function Nd(t,e,n){let s="+"+(Number(t)||0),r="-"+(Number(e)||0);return n?re("green",s)+" "+re("red",r):s+" "+r}function H1(t,e){let n=String(t.s==null?"":t.s);return t.t==="@"?e?re("cyan",n):n:t.t==="+"?e?re("green","+ "+n):"+ "+n:t.t==="-"?e?re("red","- "+n):"- "+n:e?re("dim"," "+n):" "+n}function Rw(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?re("cyan","\u25CF")+" "+re("bold","move_file")+re("gray"," \xB7 \u79FB\u52A8 "+u+" \u2192 "+d):"\u25CF move_file \xB7 \u79FB\u52A8 "+u+" \u2192 "+d;return o(f+(e?re("dim","\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09"):"\uFF08\u5185\u5BB9\u4E0D\u53D8\uFF09")),r}let i=s.map(function(u){let d=Fw.computeHunks(u.before||"",u.after||"");return{f:u,hunks:d,st:Fw.stats(d)}}),a=0,l=0;for(let u of i)a+=u.st.add,l+=u.st.del;i.length>1&&o((e?re("cyan","\u25CF")+" "+re("bold",n.name||"\u5199\u5165"):"\u25CF "+(n.name||"\u5199\u5165"))+" "+i.length+" \u4E2A\u6587\u4EF6 "+Nd(a,l,e));let c=D1;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?re("cyan","\u25CF")+" "+re("bold",n.name||"\u5199\u5165")+re("gray"," \xB7 "+p+" "+d.path):"\u25CF "+(n.name||"\u5199\u5165")+" \xB7 "+p+" "+d.path)+" "+Nd(f.add,f.del,e)):o((e?re("gray"," \u25B8 "):" \u25B8 ")+(e?re("bold",p+" "+d.path):p+" "+d.path)+" "+Nd(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(L1,c)),k=m.slice(0,h);c-=k.length;for(let T of k)o(" "+H1(T,e));let x=m.length-k.length;x>0&&o(" "+(e?re("dim","\u2026 \u8FD8\u6709 "+x+" \u884C\u672A\u663E\u793A"):"\u2026 \u8FD8\u6709 "+x+" \u884C\u672A\u663E\u793A"))}return r}function z1(t,e){let n=t&&Fd[t.status]?t.status:"pending",s=Fd[n],r=String(t&&t.content||"");return e?re(R1[n]||"gray",s)+" "+(n==="completed"||n==="cancelled"?re("dim",r):r):"[todo] "+s+" "+r}function G1(t){let e=t||{},n=e.output||process.stderr,s=e.stdout||process.stdout,r=e.colors!==void 0?e.colors:Bs,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",k="\u601D\u8003\u4E2D",x=k,T="",g=0,v=0,y=0,S="",_=!1,C=!1,A="",D=0,G=!1,H=!1,q=0,fe="",N="",z=!1,he="",ne=!1,Y=[],pe="",U=0;function Ee(O){if(!_){ut();try{n.write(String(O)+`
227
227
  `)}catch{}}}function ke(O){if(O)try{s.write(O)}catch{}}function ut(){H&&(ke(`
228
- `),q++,H=!1)}function gt(){let O=[x];return T&&O.push(T),y>0&&O.push(Lw(y)+" \u5B57\u601D\u8003"),g>0&&O.push("ctx "+U1(g,v,re)),O.join(" \xB7 ")}function ve(){if(!o||_)return;let O=u[f%u.length];f++;try{n.write("\r\x1B[K"+re("cyan",fl.face(h))+" "+re("magenta",O)+" "+gt())}catch{}p=!0}function Ot(O){if(O&&(x=String(O)),!(!o||_)){if(d){ve();return}ve(),d=setInterval(ve,100)}}function vt(){d&&ve()}function Le(){if(d&&(clearInterval(d),d=null),p){try{n.write("\r\x1B[K")}catch{}p=!1}}function jn(){if(!s.isTTY)return!1;let O="\r\x1B[J";return q>0&&(O+="\x1B["+q+"A\x1B[J"),ke(O),q=0,H=!1,!0}async function xs(){if(!o)return!1;try{l=await import("@clack/prompts")}catch{return l=null,C||(C=!0,Ee(re("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 ss(){return!!(Rs&&r&&s.isTTY&&r.isColorSupported===!0)}function De(O){N+=O;let F;for(;(F=N.indexOf(`
229
- `))>=0;){let X=N.slice(0,F+1);N=N.slice(F+1),st(X)}}function st(O){if(O.match(/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/)){if(!z){te(),z=!0,he=O;return}he+=O,Pe(he),he="",z=!1;return}if(z){he+=O;return}let X=O.trim(),$=X.indexOf("|")!==-1;if(ne){if(!$||/^\s*$/.test(X)){te(),le(O);return}Y.push(O);return}if($&&!/^\s*$/.test(X)){ne=!0,Y=[O];return}le(O)}function te(){if(!ne)return;let O=Y;if(ne=!1,Y=[],O.length>=2&&Rs.isSepRow(O[1])){let F=O.map(function($){return $.replace(/\n$/,"")}),X=Rs.renderTable(F,0,Rs.mk(re));dt(X.text+`
230
- `)}else O.forEach(le)}function le(O){let F=Rs.renderBlock(O,re);dt(F)}function Pe(O){dt(Rs.renderBlock(O,re))}function dt(O){if(O){ut();try{n.write(O)}catch{return}for(let F=0;F<O.length;F++)O.charCodeAt(F)===10&&q++;H=O.charCodeAt(O.length-1)!==10}}function rs(){if(ss()&&(z&&he&&(Pe(he),he="",z=!1),te(),N)){let O=N;N="",le(O.endsWith(`
228
+ `),q++,H=!1)}function gt(){let O=[x];return T&&O.push(T),y>0&&O.push(Lw(y)+" \u5B57\u601D\u8003"),g>0&&O.push("ctx "+U1(g,v,re)),O.join(" \xB7 ")}function ve(){if(!o||_)return;let O=u[f%u.length];f++;try{n.write("\r\x1B[K"+re("cyan",fl.face(h))+" "+re("magenta",O)+" "+gt())}catch{}p=!0}function Et(O){if(O&&(x=String(O)),!(!o||_)){if(d){ve();return}ve(),d=setInterval(ve,100)}}function vt(){d&&ve()}function Le(){if(d&&(clearInterval(d),d=null),p){try{n.write("\r\x1B[K")}catch{}p=!1}}function jn(){if(!s.isTTY)return!1;let O="\r\x1B[J";return q>0&&(O+="\x1B["+q+"A\x1B[J"),ke(O),q=0,H=!1,!0}async function Ss(){if(!o)return!1;try{l=await import("@clack/prompts")}catch{return l=null,C||(C=!0,Ee(re("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 rs(){return!!(qs&&r&&s.isTTY&&r.isColorSupported===!0)}function De(O){N+=O;let F;for(;(F=N.indexOf(`
229
+ `))>=0;){let X=N.slice(0,F+1);N=N.slice(F+1),st(X)}}function st(O){if(O.match(/^\s*(```+|~~~+)\s*([\w+#.-]*)\s*$/)){if(!z){te(),z=!0,he=O;return}he+=O,Pe(he),he="",z=!1;return}if(z){he+=O;return}let X=O.trim(),$=X.indexOf("|")!==-1;if(ne){if(!$||/^\s*$/.test(X)){te(),le(O);return}Y.push(O);return}if($&&!/^\s*$/.test(X)){ne=!0,Y=[O];return}le(O)}function te(){if(!ne)return;let O=Y;if(ne=!1,Y=[],O.length>=2&&qs.isSepRow(O[1])){let F=O.map(function($){return $.replace(/\n$/,"")}),X=qs.renderTable(F,0,qs.mk(re));dt(X.text+`
230
+ `)}else O.forEach(le)}function le(O){let F=qs.renderBlock(O,re);dt(F)}function Pe(O){dt(qs.renderBlock(O,re))}function dt(O){if(O){ut();try{n.write(O)}catch{return}for(let F=0;F<O.length;F++)O.charCodeAt(F)===10&&q++;H=O.charCodeAt(O.length-1)!==10}}function os(){if(rs()&&(z&&he&&(Pe(he),he="",z=!1),te(),N)){let O=N;N="",le(O.endsWith(`
231
231
  `)?O:O+`
232
- `)}}function Yt(O){let F=String(O??"");if(!(!F||!i||_)){if(H||Le(),G=!0,ss())De(F);else{ke(F);for(let X=0;X<F.length;X++)F.charCodeAt(X)===10&&q++;H=F.charCodeAt(F.length-1)!==10}fe+=F}}function Et(O){let F=String(O??"");if(!F)return;if(y+=F.length,!a){vt();return}S+=F;let X=S.lastIndexOf(`
232
+ `)}}function Yt(O){let F=String(O??"");if(!(!F||!i||_)){if(H||Le(),G=!0,rs())De(F);else{ke(F);for(let X=0;X<F.length;X++)F.charCodeAt(X)===10&&q++;H=F.charCodeAt(F.length-1)!==10}fe+=F}}function Pt(O){let F=String(O??"");if(!F)return;if(y+=F.length,!a){vt();return}S+=F;let X=S.lastIndexOf(`
233
233
  `);if(X<0)return;let $=S.slice(0,X);if(S=S.slice(X+1),!!$.trim()){Le(),ut();try{n.write(re("gray",$)+`
234
234
  `)}catch{}}}function _t(O){let F=String(O??"");if(y+=F.length,G&&(jn(),fe="",G=!1),a&&F.trim()){Le();try{n.write(re("gray",F.replace(/\s+$/,""))+`
235
- `)}catch{}}vt()}function Hn(O){let F=String(O??"");if(A=F,D=Date.now(),h="work",!o){ut(),Ee("[..] "+F);return}ut(),Ot(F)}function $e(O){if(O&&O.phase==="start")return;Le(),h=m;let F=O&&O.name||"",X={detail:Dw(O),sec:""};D>0&&F&&A.indexOf(F)===0&&(X.sec=Iw(Date.now()-D),D=0,A=""),Ee(B1(O,yr,X)),o&&Ot(k)}function bn(O){O&&(h=m,g=Number(O.contextTokens)||0,v=Number(O.window)||0,fe&&(pe=fe,fe=""))}function Nn(O){!Array.isArray(O)||!O.length||(h=m,Le(),Ee(W1(O,yr)),o&&Ot(k))}function Ss(O){h=m,Le(),Ee(K1(O,yr)),o&&Ot(k)}let os=Object.create(null);function Wr(O){let F=Array.isArray(O)?O:[];if(!F.length)return;let X=[];for(let $=0;$<F.length;$++){let ze=F[$];if(!ze||!ze.id)continue;let Ze=Fd[ze.status]?ze.status:"pending";os[ze.id]!==Ze&&(os[ze.id]=Ze,X.push(z1(ze,yr)))}if(X.length){h=m,Le();for(let $=0;$<X.length;$++)Ee(X[$]);o&&Ot(k)}}function qo(O){let F=O||{};F.mode&&(T=String(F.mode)),m=fl.moodForMode(T),h=m,vt()}async function Oa(O,F){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");Le();try{O&&O.title&&l.note(O.title,"\u63D0\u95EE",{output:n});let X={},$=O&&O.questions||[];for(let ze=0;ze<$.length;ze++){let Ze=$[ze],Xe=Ze.options.map(function(R){return{value:R.id,label:R.recommended?R.label+"\uFF08\u63A8\u8350\uFF09":R.label}}),Ge;if(Ze.allow_multiple?Ge=await l.multiselect({message:Ze.prompt,options:Xe,required:!0,output:n,signal:F}):Ge=await l.select({message:Ze.prompt,options:Xe,output:n,signal:F}),l.isCancel(Ge)){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")}X[Ze.id]=Ge}return Nw.formatAnswers(O,Nw.normalizeAnswers(O,X))}finally{o&&!(F&&F.aborted)&&Ot(k)}}function Ic(O){return new Promise(function(F){let X=null,$=!1,ze=function(Xe){if(!$){$=!0;try{X&&X.close()}catch{}F(Xe)}};try{X=F1.createInterface({input:process.stdin,output:n,terminal:!!(process.stdin.isTTY&&n.isTTY)})}catch{F(null);return}let Ze=function(){ze(null)};if(O&&typeof O.addEventListener=="function"){if(O.aborted){ze(null);return}O.addEventListener("abort",Ze,{once:!0})}X.question("\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\uFF1F[y] \u5141\u8BB8 / [a] \u672C\u6B21\u4F1A\u8BDD\u90FD\u5141\u8BB8 / [N] \u62D2\u7EDD ",function(Xe){O&&typeof O.removeEventListener=="function"&&O.removeEventListener("abort",Ze);let Ge=String(Xe||"").trim().toLowerCase();ze(Ge==="a"||Ge==="all"?"all":Ge==="y"||Ge==="yes"?"yes":null)})})}async function Kr(O,F){if(!o)return!0;let X=Rw(O,yr);X.length&&(Le(),h="work",Ee(X.join(`
236
- `)));let $=null;if(c&&l){try{$=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:F})}catch{$=null}l.isCancel($)&&($=null)}else $=await Ic(F);return D=Date.now(),o&&!(F&&F.aborted)&&Ot(k),$==="all"?"all":$==="yes"?"yes":!1}function Hr(O){let F=String(O??"");if(!F.trim())return"";if(!G)return F;let X=fe.trim()?fe:pe||"";return X.trim()?X.trimEnd()===F.trimEnd()?"":F.startsWith(X)?F.slice(X.length):F:F}function Ea(O){let F=String(O??"");if(rs(),!G){ke(F+`
235
+ `)}catch{}}vt()}function Hn(O){let F=String(O??"");if(A=F,D=Date.now(),h="work",!o){ut(),Ee("[..] "+F);return}ut(),Et(F)}function $e(O){if(O&&O.phase==="start")return;Le(),h=m;let F=O&&O.name||"",X={detail:Dw(O),sec:""};D>0&&F&&A.indexOf(F)===0&&(X.sec=Iw(Date.now()-D),D=0,A=""),Ee(B1(O,yr,X)),o&&Et(k)}function bn(O){O&&(h=m,g=Number(O.contextTokens)||0,v=Number(O.window)||0,fe&&(pe=fe,fe=""))}function Nn(O){!Array.isArray(O)||!O.length||(h=m,Le(),Ee(W1(O,yr)),o&&Et(k))}function vs(O){h=m,Le(),Ee(K1(O,yr)),o&&Et(k)}let is=Object.create(null);function Wr(O){let F=Array.isArray(O)?O:[];if(!F.length)return;let X=[];for(let $=0;$<F.length;$++){let ze=F[$];if(!ze||!ze.id)continue;let Ze=Fd[ze.status]?ze.status:"pending";is[ze.id]!==Ze&&(is[ze.id]=Ze,X.push(z1(ze,yr)))}if(X.length){h=m,Le();for(let $=0;$<X.length;$++)Ee(X[$]);o&&Et(k)}}function qo(O){let F=O||{};F.mode&&(T=String(F.mode)),m=fl.moodForMode(T),h=m,vt()}async function Oa(O,F){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");Le();try{O&&O.title&&l.note(O.title,"\u63D0\u95EE",{output:n});let X={},$=O&&O.questions||[];for(let ze=0;ze<$.length;ze++){let Ze=$[ze],Xe=Ze.options.map(function(R){return{value:R.id,label:R.recommended?R.label+"\uFF08\u63A8\u8350\uFF09":R.label}}),Ge;if(Ze.allow_multiple?Ge=await l.multiselect({message:Ze.prompt,options:Xe,required:!0,output:n,signal:F}):Ge=await l.select({message:Ze.prompt,options:Xe,output:n,signal:F}),l.isCancel(Ge)){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")}X[Ze.id]=Ge}return Nw.formatAnswers(O,Nw.normalizeAnswers(O,X))}finally{o&&!(F&&F.aborted)&&Et(k)}}function Ic(O){return new Promise(function(F){let X=null,$=!1,ze=function(Xe){if(!$){$=!0;try{X&&X.close()}catch{}F(Xe)}};try{X=F1.createInterface({input:process.stdin,output:n,terminal:!!(process.stdin.isTTY&&n.isTTY)})}catch{F(null);return}let Ze=function(){ze(null)};if(O&&typeof O.addEventListener=="function"){if(O.aborted){ze(null);return}O.addEventListener("abort",Ze,{once:!0})}X.question("\u5141\u8BB8\u8FD9\u6B21\u5199\u5165\uFF1F[y] \u5141\u8BB8 / [a] \u672C\u6B21\u4F1A\u8BDD\u90FD\u5141\u8BB8 / [N] \u62D2\u7EDD ",function(Xe){O&&typeof O.removeEventListener=="function"&&O.removeEventListener("abort",Ze);let Ge=String(Xe||"").trim().toLowerCase();ze(Ge==="a"||Ge==="all"?"all":Ge==="y"||Ge==="yes"?"yes":null)})})}async function Kr(O,F){if(!o)return!0;let X=Rw(O,yr);X.length&&(Le(),h="work",Ee(X.join(`
236
+ `)));let $=null;if(c&&l){try{$=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:F})}catch{$=null}l.isCancel($)&&($=null)}else $=await Ic(F);return D=Date.now(),o&&!(F&&F.aborted)&&Et(k),$==="all"?"all":$==="yes"?"yes":!1}function Hr(O){let F=String(O??"");if(!F.trim())return"";if(!G)return F;let X=fe.trim()?fe:pe||"";return X.trim()?X.trimEnd()===F.trimEnd()?"":F.startsWith(X)?F.slice(X.length):F:F}function Ea(O){let F=String(O??"");if(os(),!G){ke(F+`
237
237
  `),H=!1;return}let X=Hr(F),$="";H?($+=`
238
238
  `,H=!1):X&&X.charAt(0)===`
239
239
  `&&(X=X.slice(1)),X&&($+=X),$&&$.charCodeAt($.length-1)!==10&&($+=`
240
- `),ke($)}function or(O){let F=O||{};if(Le(),a&&S.trim())try{n.write(re("gray",S.replace(/\s+$/,""))+`
241
- `)}catch{}S="";let X=o?re("cyan",fl.face(fl.moodForStop(F.stop)))+" ":"";if(F.compact){let Xe=[String(F.stop||"unknown")];Xe.push((F.iters==null?0:F.iters)+" \u8F6E"),Xe.push((F.tools||0)+" \u5DE5\u5177"),U>0&&Xe.push(Iw(Date.now()-U)),Ee(o?X+re("gray",Xe.join(" \xB7 ")):"[luban] "+Xe.join(" "))}else{let Xe="\u6A21\u5F0F="+F.mode+" \u8F6E\u6570="+F.iters+" \u5DE5\u5177\u8C03\u7528="+F.tools+" \u505C\u6B62="+F.stop+" \u6A21\u578B="+(F.model||"");Ee(X+(yr?re("cyan","[luban] "):"[luban] ")+Xe)}let $=Array.isArray(F.log)?F.log:[],ze=Object.create(null),Ze=[];for(let Xe=0;Xe<$.length;Xe++){let Ge=$[Xe];if(!Ge||Ge.ok===!1||I1.indexOf(Ge.name)<0)continue;let R=Ge.path?String(Ge.path):"";!R||ze[R]||/^\d+ 个文件$/.test(R)||(ze[R]=1,Ze.push(R))}Ze.length&&Ee((yr?re("gray","\xB7 \u6539\u52A8 "):"[files] ")+Ze.length+" \u4E2A\u6587\u4EF6: "+Ze.join(", "))}function zr(){Le(),x=k,h=m,G=!1,H=!1,q=0,fe="",N="",z=!1,he="",ne=!1,Y=[],pe="",y=0,S="",A="",D=0,g=0,v=0,U=Date.now();for(let O in os)delete os[O];Ot(k)}function Pa(){if(Le(),a&&S.trim())try{n.write(re("gray",S.replace(/\s+$/,""))+`
242
- `)}catch{}S="",rs()}function W(O){return O!==void 0&&(a=!!O),a}function V(){Le(),_=!0}return process.once("exit",function(){try{Le()}catch{}}),{enabled:o,init:xs,stream:Yt,thinking:Et,split:_t,progress:Hn,tool:$e,usage:bn,refs:Nn,sub:Ss,todos:Wr,setStatus:qo,setThinking:W,beginTurn:zr,endTurn:Pa,ask:Oa,confirmWrite:Kr,outputFinal:Ea,finish:or,close:V,line:function(O){Le(),Ee(O)}}}qw.exports={createUI:G1,paint:re,resultDetail:Dw,previewLines:Rw}});var Vw=Z((CI,Xw)=>{"use strict";var Ht=require("fs"),J1=require("os"),Mt=require("path"),{execFile:$1}=require("child_process"),Lt=Qo(),ml=xd(),Ww="https://raw.githubusercontent.com/eppen/luban-plugins/main/registry/registry.json",Kw=6e4,X1=3e4,V1={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 ki(t){return/^https?:\/\//i.test(String(t||""))}function Ld(t){let e=t||process.cwd();try{mr().configure({root:e})}catch{}ml.configure({root:e})}function xi(t){let e=t||{};if(e.registry)return e.registry;if(process.env.LUBAN_REGISTRY)return process.env.LUBAN_REGISTRY;let n=[Mt.join(__dirname,"registry","registry.json"),Mt.join(__dirname,"..","registry","registry.json")];for(let s of n)if(Ht.existsSync(s))return s;return Ww}function Y1(){let t=[Mt.join(__dirname,"registry","registry.json"),Mt.join(__dirname,"..","registry","registry.json")];for(let e of t)if(Ht.existsSync(e))return e;return""}async function Z1(t,e){let n=new AbortController,s=setTimeout(function(){n.abort()},e||X1);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 Si(t,e){return ki(t)?Z1(t,e):Ht.readFileSync(Lt.expandHome(t),"utf8")}async function vi(t,e){let n={},s=ki(e)?e:Mt.resolve(Lt.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]=Lt.parsePublicKey(r.publicKey)}catch{}continue}let o=String(r.publicKey||"keys/"+r.keyId+".pub"),i=ki(s)?new URL(o,s).toString():Mt.join(Mt.dirname(s),o);try{let a=JSON.parse(await Si(i));n[r.keyId]=Lt.parsePublicKey(a.publicKey)}catch{}}return n}function Uw(t,e,n){return new Promise(function(s,r){$1(t,e,{timeout:n||Kw,maxBuffer:4*1024*1024},function(o,i,a){if(o){let l=String(a||o.message||"").trim().split(`
243
- `).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 Q1(t){let e=Mt.join(J1.tmpdir(),"luban-plugin-"+String(t||"x").replace(/[^a-z0-9-]/gi,"_")+"-"+process.pid+"-"+Date.now());return Ht.mkdirSync(e,{recursive:!0,mode:448}),e}async function Hw(t,e){let n=e||{},s=t.install||{},r=t.name,o=t.version;if(s.type==="local"){let l=Lt.expandHome(s.path||"");if(!l||!Ht.existsSync(l))throw new Error("\u672C\u5730\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A"+(s.path||"(\u7A7A)"));return{dir:Mt.resolve(l),cleanup:function(){},kind:"local"}}let i=Q1(r),a=function(){try{Ht.rmSync(i,{recursive:!0,force:!0})}catch{}};if(s.type==="git"){if(!ki(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||Lt.tagFor(r,o),c=Mt.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 Uw("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(),Ht.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?Mt.join(c,s.subdir):c;if(!Ht.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(!ki(s.url))throw a(),new Error("tarball \u6765\u6E90\u9700\u8981 http(s) \u5730\u5740");let l=Mt.join(i,"pkg.tgz"),c=Buffer.from(await async function(){let p=new AbortController,m=setTimeout(function(){p.abort()},Kw);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)}}());Ht.writeFileSync(l,c);let u=Mt.join(i,"x");Ht.mkdirSync(u,{recursive:!0});try{await Uw("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=Ht.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?Mt.join(u,d[0],s.subdir):Mt.join(u,d[0]);if(!Ht.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 zw(t,e){if(t&&t.type==="skill"){let r=Lt.readSkillManifest(e);if(!r.ok)return{ok:!1,message:r.message};let o=Lt.sameSkill(t,r.manifest);return o.ok?{ok:!0,manifest:r.manifest}:{ok:!1,message:o.message}}let n=Mt.join(e,"plugin.json");if(!Ht.existsSync(n))return{ok:!1,message:"\u5305\u91CC\u6CA1\u6709 plugin.json"};let s;try{s=JSON.parse(Ht.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}:Lt.sameTools(t.tools,s.tools)?Lt.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 Gw(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"+hl(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"+hl(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 Hw(t,n)}catch(a){return{ok:!1,code:"source",message:a.message}}try{let a=zw(t,i.dir);if(!a.ok)return{ok:!1,code:"manifest",message:"\u6E05\u5355\u6821\u9A8C\u5931\u8D25\uFF1A"+a.message};let l=Lt.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"){Ld(n.root);let p=ml.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=mr();Ld(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 Jw(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=xi(n),o;try{o=JSON.parse(await Si(r))}catch(p){return{ok:!1,code:"registry",message:"\u8BFB\u53D6\u7D22\u5F15\u5931\u8D25\uFF08"+r+"\uFF09\uFF1A"+p.message+`
240
+ `),ke($)}function ir(O){let F=O||{};if(Le(),a&&S.trim())try{n.write(re("gray",S.replace(/\s+$/,""))+`
241
+ `)}catch{}S="";let X=o?re("cyan",fl.face(fl.moodForStop(F.stop)))+" ":"";if(F.compact){let Xe=[String(F.stop||"unknown")];Xe.push((F.iters==null?0:F.iters)+" \u8F6E"),Xe.push((F.tools||0)+" \u5DE5\u5177"),U>0&&Xe.push(Iw(Date.now()-U)),Ee(o?X+re("gray",Xe.join(" \xB7 ")):"[luban] "+Xe.join(" "))}else{let Xe="\u6A21\u5F0F="+F.mode+" \u8F6E\u6570="+F.iters+" \u5DE5\u5177\u8C03\u7528="+F.tools+" \u505C\u6B62="+F.stop+" \u6A21\u578B="+(F.model||"");Ee(X+(yr?re("cyan","[luban] "):"[luban] ")+Xe)}let $=Array.isArray(F.log)?F.log:[],ze=Object.create(null),Ze=[];for(let Xe=0;Xe<$.length;Xe++){let Ge=$[Xe];if(!Ge||Ge.ok===!1||I1.indexOf(Ge.name)<0)continue;let R=Ge.path?String(Ge.path):"";!R||ze[R]||/^\d+ 个文件$/.test(R)||(ze[R]=1,Ze.push(R))}Ze.length&&Ee((yr?re("gray","\xB7 \u6539\u52A8 "):"[files] ")+Ze.length+" \u4E2A\u6587\u4EF6: "+Ze.join(", "))}function zr(){Le(),x=k,h=m,G=!1,H=!1,q=0,fe="",N="",z=!1,he="",ne=!1,Y=[],pe="",y=0,S="",A="",D=0,g=0,v=0,U=Date.now();for(let O in is)delete is[O];Et(k)}function Pa(){if(Le(),a&&S.trim())try{n.write(re("gray",S.replace(/\s+$/,""))+`
242
+ `)}catch{}S="",os()}function W(O){return O!==void 0&&(a=!!O),a}function V(){Le(),_=!0}return process.once("exit",function(){try{Le()}catch{}}),{enabled:o,init:Ss,stream:Yt,thinking:Pt,split:_t,progress:Hn,tool:$e,usage:bn,refs:Nn,sub:vs,todos:Wr,setStatus:qo,setThinking:W,beginTurn:zr,endTurn:Pa,ask:Oa,confirmWrite:Kr,outputFinal:Ea,finish:ir,close:V,line:function(O){Le(),Ee(O)}}}qw.exports={createUI:G1,paint:re,resultDetail:Dw,previewLines:Rw}});var Vw=Z((CI,Xw)=>{"use strict";var Ht=require("fs"),J1=require("os"),Ct=require("path"),{execFile:$1}=require("child_process"),Lt=Qo(),ml=xd(),Ww="https://raw.githubusercontent.com/eppen/luban-plugins/main/registry/registry.json",Kw=6e4,X1=3e4,V1={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 ki(t){return/^https?:\/\//i.test(String(t||""))}function Ld(t){let e=t||process.cwd();try{mr().configure({root:e})}catch{}ml.configure({root:e})}function xi(t){let e=t||{};if(e.registry)return e.registry;if(process.env.LUBAN_REGISTRY)return process.env.LUBAN_REGISTRY;let n=[Ct.join(__dirname,"registry","registry.json"),Ct.join(__dirname,"..","registry","registry.json")];for(let s of n)if(Ht.existsSync(s))return s;return Ww}function Y1(){let t=[Ct.join(__dirname,"registry","registry.json"),Ct.join(__dirname,"..","registry","registry.json")];for(let e of t)if(Ht.existsSync(e))return e;return""}async function Z1(t,e){let n=new AbortController,s=setTimeout(function(){n.abort()},e||X1);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 Si(t,e){return ki(t)?Z1(t,e):Ht.readFileSync(Lt.expandHome(t),"utf8")}async function vi(t,e){let n={},s=ki(e)?e:Ct.resolve(Lt.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]=Lt.parsePublicKey(r.publicKey)}catch{}continue}let o=String(r.publicKey||"keys/"+r.keyId+".pub"),i=ki(s)?new URL(o,s).toString():Ct.join(Ct.dirname(s),o);try{let a=JSON.parse(await Si(i));n[r.keyId]=Lt.parsePublicKey(a.publicKey)}catch{}}return n}function Uw(t,e,n){return new Promise(function(s,r){$1(t,e,{timeout:n||Kw,maxBuffer:4*1024*1024},function(o,i,a){if(o){let l=String(a||o.message||"").trim().split(`
243
+ `).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 Q1(t){let e=Ct.join(J1.tmpdir(),"luban-plugin-"+String(t||"x").replace(/[^a-z0-9-]/gi,"_")+"-"+process.pid+"-"+Date.now());return Ht.mkdirSync(e,{recursive:!0,mode:448}),e}async function Hw(t,e){let n=e||{},s=t.install||{},r=t.name,o=t.version;if(s.type==="local"){let l=Lt.expandHome(s.path||"");if(!l||!Ht.existsSync(l))throw new Error("\u672C\u5730\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A"+(s.path||"(\u7A7A)"));return{dir:Ct.resolve(l),cleanup:function(){},kind:"local"}}let i=Q1(r),a=function(){try{Ht.rmSync(i,{recursive:!0,force:!0})}catch{}};if(s.type==="git"){if(!ki(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||Lt.tagFor(r,o),c=Ct.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 Uw("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(),Ht.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?Ct.join(c,s.subdir):c;if(!Ht.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(!ki(s.url))throw a(),new Error("tarball \u6765\u6E90\u9700\u8981 http(s) \u5730\u5740");let l=Ct.join(i,"pkg.tgz"),c=Buffer.from(await async function(){let p=new AbortController,m=setTimeout(function(){p.abort()},Kw);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)}}());Ht.writeFileSync(l,c);let u=Ct.join(i,"x");Ht.mkdirSync(u,{recursive:!0});try{await Uw("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=Ht.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?Ct.join(u,d[0],s.subdir):Ct.join(u,d[0]);if(!Ht.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 zw(t,e){if(t&&t.type==="skill"){let r=Lt.readSkillManifest(e);if(!r.ok)return{ok:!1,message:r.message};let o=Lt.sameSkill(t,r.manifest);return o.ok?{ok:!0,manifest:r.manifest}:{ok:!1,message:o.message}}let n=Ct.join(e,"plugin.json");if(!Ht.existsSync(n))return{ok:!1,message:"\u5305\u91CC\u6CA1\u6709 plugin.json"};let s;try{s=JSON.parse(Ht.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}:Lt.sameTools(t.tools,s.tools)?Lt.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 Gw(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"+hl(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"+hl(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 Hw(t,n)}catch(a){return{ok:!1,code:"source",message:a.message}}try{let a=zw(t,i.dir);if(!a.ok)return{ok:!1,code:"manifest",message:"\u6E05\u5355\u6821\u9A8C\u5931\u8D25\uFF1A"+a.message};let l=Lt.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"){Ld(n.root);let p=ml.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=mr();Ld(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 Jw(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=xi(n),o;try{o=JSON.parse(await Si(r))}catch(p){return{ok:!1,code:"registry",message:"\u8BFB\u53D6\u7D22\u5F15\u5931\u8D25\uFF08"+r+"\uFF09\uFF1A"+p.message+`
244
244
  \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 vi(o,r),u=Lt.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"+hl(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"+hl(l)+"\u88AB\u5BA1\u6838\u6807\u8BB0\u4E3A\u6709\u95EE\u9898\uFF08flagged\uFF09\uFF0C\u62D2\u7EDD\u5B89\u88C5"};let f=await Gw(a,n);return f.ok&&f.warnings&&!u.ok&&f.warnings.push("\u6761\u76EE\u672A\u7B7E\u540D\uFF08--allow-unsigned\uFF09"),f}function hl(t){return t==="skill"?"\u6280\u80FD":"\u63D2\u4EF6"}async function $w(t,e){let n=e||{},s=n.root||process.cwd(),r=mr();Ld(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=!!ml.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=ml.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 Dd(t){let e=t||{},n=xi(e),s=JSON.parse(await Si(n)),r=await vi(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=Lt.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 eA(t){let e=t||{},n=e.registry||xi(e),s;try{s=JSON.parse(await Si(n,e.timeoutMs))}catch(i){return{ok:!1,source:n,error:String(i&&i.message||i),entries:[]}}let r=await vi(s,n),o=(s.entries||[]).map(function(i){let a=Lt.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 tA(t){let e=t||{},n=e.registry||xi(e),s;try{s=JSON.parse(await Si(n,e.timeoutMs))}catch(o){return{ok:!1,source:n,error:String(o&&o.message||o),registry:null}}let r=await vi(s,n);return{ok:!0,source:n,registry:s,keys:r,error:""}}function pl(t,e){try{return Bw().paint(t,e)}catch{return e}}function Id(t){let e=Object.keys(t||{}).filter(function(n){return t[n]===!0});return e.length?e.map(function(n){return V1[n]||n}).join("\u3001"):"\u65E0\uFF08\u7EAF\u8BA1\u7B97\uFF09"}function nA(){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(`
245
245
  `)+`
246
246
  `)}function sA(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 Je(t){process.stdout.write(t+`
@@ -256,8 +256,8 @@ lints selftest: `+t+" passed, "+e+" failed"),process.exit(e?1:0)}});var vy=Z((wI
256
256
  `),1;if(r.code==="dry-run"?Je("[dry-run] "+(r.type==="skill"?"\u6280\u80FD ":"")+r.name+" "+r.version+" \u6821\u9A8C\u901A\u8FC7\uFF0C\u672A\u843D\u76D8"):Je("\u5DF2\u5B89\u88C5"+(r.type==="skill"?"\u6280\u80FD ":" ")+r.name+" "+r.version+" \u2192 "+r.dir+(r.replaced?"\uFF08\u8986\u76D6\u4E86\u65E7\u7248\u672C\uFF0C\u65E7\u7684\u5DF2\u8FDB\u56DE\u6536\u7AD9\uFF09":"")),r.type==="skill"){Je(" sourceSha256\uFF1A"+r.sourceSha256+" \u5BA1\u6838\uFF1A"+r.review);for(let o of r.warnings)Je(" ! "+o);return r.code==="dry-run"?Je(" \u5C06\u4F1A\u88C5\u5230 "+(r.target==="project"?"<repo>/.luban/skills/":"~/.luban/skills/")+r.name):Je(" \u6280\u80FD\u662F\u7EAF Markdown\uFF0C\u5DF2\u5728\u6280\u80FD\u76EE\u5F55\u5185\u53EF\u89C1\uFF08read_skill "+r.name+"\uFF09\uFF1B\u4E0D\u9700\u8981\u4FE1\u4EFB\u786E\u8BA4\u3002"),0}Je(" \u5DE5\u5177\uFF1A"+(r.tools||[]).map(function(o){return"pl__"+r.name+"__"+o}).join("\u3001")),Je(" \u6743\u9650\uFF1A"+Id(r.permissions)),Je(" \u5BA1\u6838\uFF1A"+r.review+" sourceSha256\uFF1A"+r.sourceSha256);for(let o of r.warnings)Je(" ! "+o);return Je(" \u6CE8\u610F\uFF1A\u8FD8\u6CA1\u6709\u5199\u4FE1\u4EFB\u8868\u3002Luban \u91CC\u6253\u5F00\u63D2\u4EF6\u5F00\u5173\u540E\uFF0C\u9996\u6B21\u52A0\u8F7D\u4F1A\u5217\u51FA\u5DE5\u5177\u6E05\u5355\u8BA9\u4F60\u786E\u8BA4\u3002"),0}if(n==="remove"){if(!s)return process.stderr.write(`luban plugin: \u7528\u6CD5 luban plugin remove <name>
257
257
  `),2;let r=await $w(s,e);return e.json?(Je(JSON.stringify(r,null,2)),r.ok?0:1):r.ok?(Je("\u5DF2\u5378\u8F7D"+(r.type==="skill"?"\u6280\u80FD ":" ")+r.name+"\uFF08\u79FB\u8FDB\u56DE\u6536\u7AD9 "+r.trash+"\uFF0C\u53EF\u8FD8\u539F\uFF09"),0):(process.stderr.write("luban plugin: "+r.message+`
258
258
  `),1)}return process.stderr.write("luban plugin: \u672A\u77E5\u5B50\u547D\u4EE4 "+n+`\uFF08--help \u770B\u7528\u6CD5\uFF09
259
- `),2}Xw.exports={DEFAULT_REGISTRY_URL:Ww,registrySource:xi,bundledRegistryPath:Y1,loadKeys:vi,readRegistry:eA,readRegistryRaw:tA,fetchSource:Hw,checkManifest:zw,install:Jw,installEntry:Gw,remove:$w,list:Dd,dirHash:Lt.dirHash,runCli:rA}});var db=Z((AI,ub)=>{"use strict";var Bs=require("fs"),oA=require("os"),kr=require("path"),iA=ul(),Zw=1,Bd=process.env.LUBAN_STATUS_HOME?kr.resolve(process.env.LUBAN_STATUS_HOME):kr.join(oA.homedir(),".luban"),Qw=kr.join(Bd,"status.json"),ao=kr.join(Bd,"status"),eb=["offline","idle","thinking","typing","tool","waiting","done","error"],Ud={thinking:1,typing:1,tool:1,waiting:1},yl={offline:"idle",idle:"idle",thinking:"think",typing:"work",tool:"work",waiting:"explore",done:"done",error:"error"},tb=5*60*1e3,aA=120,lA=100,cA=10*1e3,uA=6*60*60*1e3,io=120,Rd=80,nb=200,wr=null,Fn=null,In=null,br=null,Ln=null,gl=null,qd=!1,lo=new Set;function Sn(){return Date.now()}function wt(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function sb(){let t=Sn();return{v:Zw,pid:process.pid,source:"",state:"idle",mood:yl.idle,text:"",task:"",mode:"",model:"",sessionId:"",workspace:"",tool:null,round:0,tools:0,errors:0,error:null,since:t,changedAt:t,ts:t}}function Sr(){return wr||(wr=sb()),wr}function xr(){return JSON.parse(JSON.stringify(Sr()))}function Wd(t,e){let n=yl[String(t||"")]||yl.idle;return(t==="idle"||t==="offline"||!t)&&Number(e)>=tb?"tired":iA.FACES[n]?n:"idle"}function tn(t){let e=Sr(),n=t&&typeof t=="object"?t:{},s=e.state,r=!1;if(n.state!==void 0){let i=String(n.state||"");if(eb.indexOf(i)<0)return xr();i!==s&&(e.state=i,r=!0)}if(n.source!==void 0&&(e.source=wt(n.source,24)),n.text!==void 0&&(e.text=wt(n.text,io)),n.task!==void 0&&(e.task=wt(n.task,Rd)),n.mode!==void 0&&(e.mode=wt(n.mode,16)),n.model!==void 0&&(e.model=wt(n.model,80)),n.sessionId!==void 0&&(e.sessionId=wt(n.sessionId,64)),n.workspace!==void 0&&(e.workspace=wt(n.workspace,240)),n.tool!==void 0){let i=n.tool;e.tool=i&&typeof i=="object"?{name:wt(i.name,40),label:wt(i.label,Rd),ok:i.ok===void 0?void 0:i.ok!==!1,at:Number(i.at)||Sn()}:null,e.tool&&e.tool.name&&(e.text=wt(e.tool.name+(e.tool.label?" "+e.tool.label:""),io))}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:wt(i.message,nb),at:Number(i.at)||Sn(),count:Math.max(0,Number(i.count)||0)}:null}let o=Sn();return r&&(e.since=o,e.changedAt=o),e.mood=Wd(e.state,o-e.since),e.ts=o,(r||n.write!==!1)&&dA(r),mA(),Ud[e.state]?pA():Kd(),xr()}function dA(t){if(t){_i();return}Fn||(Fn=setTimeout(function(){Fn=null,_i()},aA),Fn.unref&&Fn.unref())}function _i(){Fn&&(clearTimeout(Fn),Fn=null);let t=xr();try{Bs.mkdirSync(Bd,{recursive:!0}),Yw(Qw,t),Bs.mkdirSync(ao,{recursive:!0}),Yw(kr.join(ao,process.pid+".json"),t),qd||(qd=!0,fA())}catch{}}function Yw(t,e){let n=JSON.stringify(e),s=t+"."+process.pid+".tmp";Bs.writeFileSync(s,n+`
260
- `,"utf8"),Bs.renameSync(s,t)}function fA(){let t=Bs.readdirSync(ao),e=Sn();for(let n=0;n<t.length;n++){let s=t[n];if(!/^\d+\.json$/.test(s)||s===process.pid+".json")continue;let r=kr.join(ao,s);try{e-Bs.statSync(r).mtimeMs>uA&&Bs.unlinkSync(r)}catch{}}}function pA(){br||(br=setInterval(function(){let t=Sr();if(!Ud[t.state]){Kd();return}t.mood=Wd(t.state,Sn()-t.since),t.ts=Sn(),_i(),ob()},cA),br.unref&&br.unref())}function Kd(){br&&(clearInterval(br),br=null)}function rb(t){return typeof t!="function"?function(){}:(lo.add(t),function(){lo.delete(t)})}function mA(){In||!lo.size||(In=setTimeout(function(){In=null,ob()},lA),In.unref&&In.unref())}function ob(){if(In&&(clearTimeout(In),In=null),!lo.size)return;let t=xr();lo.forEach(function(e){try{e(t)}catch{}})}function hA(t,e){return tn(Object.assign({state:"thinking",text:t||""},e||{}))}function gA(t){return tn(Object.assign({state:"thinking",text:"",tool:null,round:0,tools:0,errors:0,error:null},t||{}))}function yA(t){return tn(Object.assign({state:"typing"},t||{}))}function wA(t,e){let n=wt(t,Rd),s=n.indexOf(" "),r={state:"tool",tool:{name:s>0?n.slice(0,s):n,label:s>0?n.slice(s+1):"",at:Sn()}};return tn(Object.assign(r,e||{}))}function ib(t,e){let n=t&&typeof t=="object"?t:{},s=Sr(),r=n.ok!==!1,o={tools:(Number(s.tools)||0)+1,tool:{name:n.name||"",label:n.path||"",ok:r,at:Sn()},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:Sn(),count:o.errors}),tn(Object.assign(o,e||{}))}function bA(t,e){return tn(Object.assign({round:Math.max(0,Number(t)||0)},e||{}))}function kA(t,e){return tn(Object.assign({state:"waiting",text:t||""},e||{}))}function xA(t,e){let n=String(t||""),s=n==="final"?"\u5B8C\u6210":"\u6536\u5DE5\uFF1A"+(n||"unknown");return tn(Object.assign({state:"done",text:s,tool:null},e||{}))}function ab(t,e){let n=Sr();return tn(Object.assign({state:"error",text:wt(t,io)||"\u51FA\u9519",errors:(Number(n.errors)||0)+1,error:{message:wt(t,nb)||"\u51FA\u9519",at:Sn(),count:(Number(n.errors)||0)+1}},e||{}))}function SA(t){return tn({state:"offline",text:t||"\u5DF2\u9000\u51FA",tool:null})}function lb(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:wt(t.title,io)||"\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:wt(t.summary,io)||"\u5B8C\u6210",tool:null};case"error":return{state:"error",text:wt(t.message,io)||"\u51FA\u9519"};default:return null}}function vA(t,e){let n=lb(t);return n?t.type==="tool"&&t.phase!=="start"?ib(t,e):n.state==="error"?ab(t.message,e):tn(Object.assign({},n,e||{})):null}function cb(t){let e=t||{},n=Number(e.port||0);if(!(n>0&&n<65536))return null;if(Ln)return Ln;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(xr());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
259
+ `),2}Xw.exports={DEFAULT_REGISTRY_URL:Ww,registrySource:xi,bundledRegistryPath:Y1,loadKeys:vi,readRegistry:eA,readRegistryRaw:tA,fetchSource:Hw,checkManifest:zw,install:Jw,installEntry:Gw,remove:$w,list:Dd,dirHash:Lt.dirHash,runCli:rA}});var db=Z((AI,ub)=>{"use strict";var Us=require("fs"),oA=require("os"),kr=require("path"),iA=ul(),Zw=1,Bd=process.env.LUBAN_STATUS_HOME?kr.resolve(process.env.LUBAN_STATUS_HOME):kr.join(oA.homedir(),".luban"),Qw=kr.join(Bd,"status.json"),ao=kr.join(Bd,"status"),eb=["offline","idle","thinking","typing","tool","waiting","done","error"],Ud={thinking:1,typing:1,tool:1,waiting:1},yl={offline:"idle",idle:"idle",thinking:"think",typing:"work",tool:"work",waiting:"explore",done:"done",error:"error"},tb=5*60*1e3,aA=120,lA=100,cA=10*1e3,uA=6*60*60*1e3,io=120,Rd=80,nb=200,wr=null,Fn=null,In=null,br=null,Ln=null,gl=null,qd=!1,lo=new Set;function Sn(){return Date.now()}function wt(t,e){let n=String(t??"").replace(/\s+/g," ").trim();return n?n.length>e?n.slice(0,e-1)+"\u2026":n:""}function sb(){let t=Sn();return{v:Zw,pid:process.pid,source:"",state:"idle",mood:yl.idle,text:"",task:"",mode:"",model:"",sessionId:"",workspace:"",tool:null,round:0,tools:0,errors:0,error:null,since:t,changedAt:t,ts:t}}function Sr(){return wr||(wr=sb()),wr}function xr(){return JSON.parse(JSON.stringify(Sr()))}function Wd(t,e){let n=yl[String(t||"")]||yl.idle;return(t==="idle"||t==="offline"||!t)&&Number(e)>=tb?"tired":iA.FACES[n]?n:"idle"}function tn(t){let e=Sr(),n=t&&typeof t=="object"?t:{},s=e.state,r=!1;if(n.state!==void 0){let i=String(n.state||"");if(eb.indexOf(i)<0)return xr();i!==s&&(e.state=i,r=!0)}if(n.source!==void 0&&(e.source=wt(n.source,24)),n.text!==void 0&&(e.text=wt(n.text,io)),n.task!==void 0&&(e.task=wt(n.task,Rd)),n.mode!==void 0&&(e.mode=wt(n.mode,16)),n.model!==void 0&&(e.model=wt(n.model,80)),n.sessionId!==void 0&&(e.sessionId=wt(n.sessionId,64)),n.workspace!==void 0&&(e.workspace=wt(n.workspace,240)),n.tool!==void 0){let i=n.tool;e.tool=i&&typeof i=="object"?{name:wt(i.name,40),label:wt(i.label,Rd),ok:i.ok===void 0?void 0:i.ok!==!1,at:Number(i.at)||Sn()}:null,e.tool&&e.tool.name&&(e.text=wt(e.tool.name+(e.tool.label?" "+e.tool.label:""),io))}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:wt(i.message,nb),at:Number(i.at)||Sn(),count:Math.max(0,Number(i.count)||0)}:null}let o=Sn();return r&&(e.since=o,e.changedAt=o),e.mood=Wd(e.state,o-e.since),e.ts=o,(r||n.write!==!1)&&dA(r),mA(),Ud[e.state]?pA():Kd(),xr()}function dA(t){if(t){_i();return}Fn||(Fn=setTimeout(function(){Fn=null,_i()},aA),Fn.unref&&Fn.unref())}function _i(){Fn&&(clearTimeout(Fn),Fn=null);let t=xr();try{Us.mkdirSync(Bd,{recursive:!0}),Yw(Qw,t),Us.mkdirSync(ao,{recursive:!0}),Yw(kr.join(ao,process.pid+".json"),t),qd||(qd=!0,fA())}catch{}}function Yw(t,e){let n=JSON.stringify(e),s=t+"."+process.pid+".tmp";Us.writeFileSync(s,n+`
260
+ `,"utf8"),Us.renameSync(s,t)}function fA(){let t=Us.readdirSync(ao),e=Sn();for(let n=0;n<t.length;n++){let s=t[n];if(!/^\d+\.json$/.test(s)||s===process.pid+".json")continue;let r=kr.join(ao,s);try{e-Us.statSync(r).mtimeMs>uA&&Us.unlinkSync(r)}catch{}}}function pA(){br||(br=setInterval(function(){let t=Sr();if(!Ud[t.state]){Kd();return}t.mood=Wd(t.state,Sn()-t.since),t.ts=Sn(),_i(),ob()},cA),br.unref&&br.unref())}function Kd(){br&&(clearInterval(br),br=null)}function rb(t){return typeof t!="function"?function(){}:(lo.add(t),function(){lo.delete(t)})}function mA(){In||!lo.size||(In=setTimeout(function(){In=null,ob()},lA),In.unref&&In.unref())}function ob(){if(In&&(clearTimeout(In),In=null),!lo.size)return;let t=xr();lo.forEach(function(e){try{e(t)}catch{}})}function hA(t,e){return tn(Object.assign({state:"thinking",text:t||""},e||{}))}function gA(t){return tn(Object.assign({state:"thinking",text:"",tool:null,round:0,tools:0,errors:0,error:null},t||{}))}function yA(t){return tn(Object.assign({state:"typing"},t||{}))}function wA(t,e){let n=wt(t,Rd),s=n.indexOf(" "),r={state:"tool",tool:{name:s>0?n.slice(0,s):n,label:s>0?n.slice(s+1):"",at:Sn()}};return tn(Object.assign(r,e||{}))}function ib(t,e){let n=t&&typeof t=="object"?t:{},s=Sr(),r=n.ok!==!1,o={tools:(Number(s.tools)||0)+1,tool:{name:n.name||"",label:n.path||"",ok:r,at:Sn()},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:Sn(),count:o.errors}),tn(Object.assign(o,e||{}))}function bA(t,e){return tn(Object.assign({round:Math.max(0,Number(t)||0)},e||{}))}function kA(t,e){return tn(Object.assign({state:"waiting",text:t||""},e||{}))}function xA(t,e){let n=String(t||""),s=n==="final"?"\u5B8C\u6210":"\u6536\u5DE5\uFF1A"+(n||"unknown");return tn(Object.assign({state:"done",text:s,tool:null},e||{}))}function ab(t,e){let n=Sr();return tn(Object.assign({state:"error",text:wt(t,io)||"\u51FA\u9519",errors:(Number(n.errors)||0)+1,error:{message:wt(t,nb)||"\u51FA\u9519",at:Sn(),count:(Number(n.errors)||0)+1}},e||{}))}function SA(t){return tn({state:"offline",text:t||"\u5DF2\u9000\u51FA",tool:null})}function lb(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:wt(t.title,io)||"\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:wt(t.summary,io)||"\u5B8C\u6210",tool:null};case"error":return{state:"error",text:wt(t.message,io)||"\u51FA\u9519"};default:return null}}function vA(t,e){let n=lb(t);return n?t.type==="tool"&&t.phase!=="start"?ib(t,e):n.state==="error"?ab(t.message,e):tn(Object.assign({},n,e||{})):null}function cb(t){let e=t||{},n=Number(e.port||0);if(!(n>0&&n<65536))return null;if(Ln)return Ln;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(xr());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
261
261
 
262
262
  `),c.write(`event: status
263
263
  data: `+JSON.stringify(xr())+`
@@ -265,28 +265,28 @@ data: `+JSON.stringify(xr())+`
265
265
  `),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(),gl=rb(function(l){if(!r.size)return;let c=`event: status
266
266
  data: `+JSON.stringify(l)+`
267
267
 
268
- `;r.forEach(function(u){try{u.write(c)}catch{r.delete(u)}})});function a(){gl&&(gl(),gl=null),r.forEach(function(l){try{l.end()}catch{}}),r.clear();try{i.close()}catch{}Ln=null}return Ln={port:n,close:a,clients:r},Ln}function _A(){let t=Number(process.env.LUBAN_STATUS_PORT||0);return t>0&&t<65536?cb({port:t}):null}function TA(t){let e=t||{};Fn&&(clearTimeout(Fn),Fn=null),In&&(clearTimeout(In),In=null),Kd(),Ln&&(Ln.close(),Ln=null),lo.clear(),qd=!1;let n=Sn();wr=Object.assign(sb(),{source:String(e.source||"")}),wr.since=n,wr.changedAt=n,wr.ts=n}function MA(){process.once("exit",function(){try{let t=Sr();Ud[t.state]&&tn({state:"offline",text:"\u5DF2\u9000\u51FA",tool:null}),_i();try{Bs.unlinkSync(kr.join(ao,process.pid+".json"))}catch{}}catch{}})}function CA(){return Qw}function AA(){return ao}function OA(){return Ln?{port:Ln.port,clients:Ln.clients.size}:null}Sr();MA();ub.exports={VERSION:Zw,STATES:eb,SLEEP_MS:tb,MOOD_OF:yl,get:xr,update:tn,moodFor:Wd,startTurn:gA,thinking:hA,typing:yA,progress:wA,round:bA,tool:ib,waiting:kA,done:xA,fail:ab,offline:SA,fromMessage:lb,applyMessage:vA,subscribe:rb,serve:cb,autoServe:_A,reset:TA,writeNow:_i,file:CA,dir:AA,sse:OA}});var yb=Z((OI,gb)=>{"use strict";var Hd=ul(),fb=26,EA="$(sync~spin)",wl={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"},PA={thinking:1,typing:1,tool:1,waiting:1},jA={tool:1,typing:1,waiting:1,thinking:1};function zd(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 wl[n]||wl.idle}function co(t,e){let n=String(t??"").replace(/\s+/g," ").trim();if(!n)return"";if(Hd.displayWidth(n)<=e)return n;let s="";for(let r of n){if(Hd.displayWidth(s+r)>e-1)break;s+=r}return s+"\u2026"}function pb(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 mb(t,e){let n=e||{},s=t&&typeof t=="object"?t:{},r=wl[s.state]?s.state:"idle",o=typeof n.now=="function"?n.now():Date.now(),i=s.mood||"idle",a=Hd.face(i),l=!!PA[r],c=jA[r]?String(s.text||"").trim():"",u=co(c||zd(r,n.tr),fb),d=(l?EA+" ":"")+a+" "+u,f=[];f.push("**\u73ED\u73ED \xB7 "+zd(r,n.tr)+"**"),f.push(""),s.text&&(f.push("`"+co(s.text,80)+"`"),f.push("")),s.task&&f.push("- \u4EFB\u52A1\uFF1A"+co(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"+co(s.workspace,100)),s.error&&s.error.message&&f.push("- \u4E0A\u6B21\u9519\u8BEF\uFF1A"+co(s.error.message,160)),s.since&&f.push("",(l?"\u5DF2\u6301\u7EED ":"\u5DF2\u7A7A\u95F2 ")+pb(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(`
268
+ `;r.forEach(function(u){try{u.write(c)}catch{r.delete(u)}})});function a(){gl&&(gl(),gl=null),r.forEach(function(l){try{l.end()}catch{}}),r.clear();try{i.close()}catch{}Ln=null}return Ln={port:n,close:a,clients:r},Ln}function _A(){let t=Number(process.env.LUBAN_STATUS_PORT||0);return t>0&&t<65536?cb({port:t}):null}function TA(t){let e=t||{};Fn&&(clearTimeout(Fn),Fn=null),In&&(clearTimeout(In),In=null),Kd(),Ln&&(Ln.close(),Ln=null),lo.clear(),qd=!1;let n=Sn();wr=Object.assign(sb(),{source:String(e.source||"")}),wr.since=n,wr.changedAt=n,wr.ts=n}function MA(){process.once("exit",function(){try{let t=Sr();Ud[t.state]&&tn({state:"offline",text:"\u5DF2\u9000\u51FA",tool:null}),_i();try{Us.unlinkSync(kr.join(ao,process.pid+".json"))}catch{}}catch{}})}function CA(){return Qw}function AA(){return ao}function OA(){return Ln?{port:Ln.port,clients:Ln.clients.size}:null}Sr();MA();ub.exports={VERSION:Zw,STATES:eb,SLEEP_MS:tb,MOOD_OF:yl,get:xr,update:tn,moodFor:Wd,startTurn:gA,thinking:hA,typing:yA,progress:wA,round:bA,tool:ib,waiting:kA,done:xA,fail:ab,offline:SA,fromMessage:lb,applyMessage:vA,subscribe:rb,serve:cb,autoServe:_A,reset:TA,writeNow:_i,file:CA,dir:AA,sse:OA}});var yb=Z((OI,gb)=>{"use strict";var Hd=ul(),fb=26,EA="$(sync~spin)",wl={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"},PA={thinking:1,typing:1,tool:1,waiting:1},jA={tool:1,typing:1,waiting:1,thinking:1};function zd(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 wl[n]||wl.idle}function co(t,e){let n=String(t??"").replace(/\s+/g," ").trim();if(!n)return"";if(Hd.displayWidth(n)<=e)return n;let s="";for(let r of n){if(Hd.displayWidth(s+r)>e-1)break;s+=r}return s+"\u2026"}function pb(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 mb(t,e){let n=e||{},s=t&&typeof t=="object"?t:{},r=wl[s.state]?s.state:"idle",o=typeof n.now=="function"?n.now():Date.now(),i=s.mood||"idle",a=Hd.face(i),l=!!PA[r],c=jA[r]?String(s.text||"").trim():"",u=co(c||zd(r,n.tr),fb),d=(l?EA+" ":"")+a+" "+u,f=[];f.push("**\u73ED\u73ED \xB7 "+zd(r,n.tr)+"**"),f.push(""),s.text&&(f.push("`"+co(s.text,80)+"`"),f.push("")),s.task&&f.push("- \u4EFB\u52A1\uFF1A"+co(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"+co(s.workspace,100)),s.error&&s.error.message&&f.push("- \u4E0A\u6B21\u9519\u8BEF\uFF1A"+co(s.error.message,160)),s.since&&f.push("",(l?"\u5DF2\u6301\u7EED ":"\u5DF2\u7A7A\u95F2 ")+pb(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(`
269
269
  `),color:p,state:r,busy:l,face:a}}function hb(t){try{return t.workspace.getConfiguration("luban").get("statusBar.enabled")!==!1}catch{return!0}}function NA(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=mb(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(!hb(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}}}}gb.exports={LABELS:wl,LABEL_MAX:fb,labelOf:zd,clipDisplay:co,elapsed:pb,render:mb,enabled:hb,mount:NA}});var Ab=Z((EI,Cb)=>{"use strict";function Gd(t){let e=String(t??"");return e?Math.max(1,Math.ceil(e.length/3)):0}function Jd(t){return!t||!t.provider||!t.model?"":String(t.provider.id)+"::"+String(t.model.id)}function wb(t,e){let n=Number(t);return isFinite(n)&&n>0?Math.floor(n):e}function bb(t,e){let n=e||{},s=t.provider||{},r=t.model||{},o=wb(r.maxInputTokens,65536),i=Math.min(wb(r.maxOutputTokens,8192),o),a=String(s.name||s.id)+" / "+String(r.id);return{id:Jd(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?`
270
270
  `+String(s.baseUrl):""),capabilities:{imageInput:r.vision===!0,toolCalling:r.toolCalling!==!1}}}function kb(t,e){let n=[];for(let s of t||[])!s||!s.provider||!s.model||n.push(bb(s,e));return n}function $d(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 xb(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 Xd(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 Sb(t,e){let n=[];for(let s of t||[]){if(!s)continue;let r=xb(s.role,e),o=Array.isArray(s.content)?s.content:[],i="",a=[],l=[];for(let c of o){let u=$d(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:Xd(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 vb(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 _b(t,e){if(!t)return 0;let n=0,s=Array.isArray(t.content)?t.content:[];for(let r of s){let o=$d(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+=Xd(r,e).length)}return n}function Tb(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 Mb(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 Jd(d)===c})||null}return{provideLanguageModelChatInformation:async function(l,c){let u=kb(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=Sb(c,n),h=vb(u&&u.tools),k=function(v){try{d.report(v)}catch(y){o("lm_report_failed",{message:String(y&&y.message||y).slice(0,160)})}},x=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,y){return v+String(y.content||"").length+(y.tool_calls?JSON.stringify(y.tool_calls).length:0)},0)});let T=await s(m,p.key,{tools:h.length?h:void 0,signal:f,snapshot:!1,maxTokens:x>0?x:void 0,onToken:function(v){v&&k(new n.LanguageModelTextPart(String(v)))}}),g=T&&T.toolCalls||[];for(let v of g){let y=v&&v.function||{},S=String(v&&v.id?v.id:"luban-call-"+Date.now());k(new n.LanguageModelToolCallPart(S,String(y.name||""),Tb(y.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 Gd(typeof c=="string"?c:_b(c,n))}}}function FA(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=Mb(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}}Cb.exports={estimateTokens:Gd,modelIdOf:Jd,modelInfoOf:bb,modelInfos:kb,toOpenAiMessages:Sb,toOpenAiTools:vb,charsOfMessage:_b,parseToolInput:Tb,createProvider:Mb,register:FA,partKind:$d,isAssistantRole:xb,toolResultText:Xd,CHARS_PER_TOKEN:3,DEFAULT_MAX_IN:65536,DEFAULT_MAX_OUT:8192}});var rf=Z((PI,Ub)=>{var vr=require("fs"),Pb=require("os"),Yd=require("path"),ef=process.env.LUBAN_WEBDAV_CONFIG?Yd.resolve(process.env.LUBAN_WEBDAV_CONFIG):Yd.join(Pb.homedir(),".luban","webdav.json"),uo="luban",tf=["sessions","attachments","plans","config","mcp"],jb=6e4,Nb=/^[A-Za-z0-9._-]+$/,nf=6;function Ob(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function IA(){let t=Object.create(null);for(let e of tf)t[e]=!0;return t}function Fb(){return{enabled:!1,url:"",username:"",remoteDir:uo,perMachine:!1,includes:IA(),lastBackupAt:"",lastRestoreAt:""}}function Eb(t){let e=String(t??"").trim();if(!e)return"";let n=Date.parse(e);return isNaN(n)?"":new Date(n).toISOString()}function Ib(t){let e=String(t??"").trim().replace(/^\/+/,"").replace(/\/+$/,"");if(!e)return{ok:!0,value:uo};let n=e.split("/");if(n.length>nf)return{ok:!1,value:uo};for(let s of n)if(!s||s==="."||s===".."||!Nb.test(s))return{ok:!1,value:uo};return{ok:!0,value:n.join("/")}}function kl(t){let e=Ob(t)?t:{},n=[],s=Fb(),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=Ib(e.remoteDir);o.ok||n.push("webdav.errRemoteDir"),s.remoteDir=o.value,s.perMachine=e.perMachine===!0,s.perMachine&&bl(s.remoteDir).length>nf-1&&n.push("webdav.errRemoteDir");let i=Ob(e.includes)?e.includes:{};for(let a of tf)if(i[a]!==void 0){if(typeof i[a]!="boolean"){n.push("webdav.errInclude");continue}s.includes[a]=i[a]}return s.lastBackupAt=Eb(e.lastBackupAt),s.lastRestoreAt=Eb(e.lastRestoreAt),{config:s,errors:n}}function LA(t){let e=t&&t.path?String(t.path):ef,n=null;try{n=JSON.parse(vr.readFileSync(e,"utf8"))}catch{n=null}return kl(n||{}).config}function DA(t,e){let n=e&&e.path?String(e.path):ef,s=kl(t);if(s.errors.length)return{ok:!1,errors:s.errors,config:s.config};vr.mkdirSync(Yd.dirname(n),{recursive:!0,mode:448});let r=n+".tmp";if(vr.writeFileSync(r,JSON.stringify(s.config,null,2)+`
271
- `,{mode:384}),vr.existsSync(n))try{vr.copyFileSync(n,n+".bak")}catch{}vr.renameSync(r,n);try{vr.chmodSync(n,384)}catch{}return{ok:!0,config:s.config,path:n}}function Ws(t){let e=kl(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 bl(t){return String(t??"").split("/").filter(function(e){return!!e})}function Lb(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 RA(t){let e=String(t??"");return!e||e.length>64||e==="."||e===".."?!1:Nb.test(e)}function Db(t){let e=String(t&&t.remoteDir||uo);return!t||t.perMachine!==!0?e:e+"/"+Lb(t.machine||Pb.hostname())}function sf(t,e,n){let s=String(t.url==null?"":t.url).replace(/\/+$/,"");if(n)return s+"/";let r=bl(Db(t)).concat(bl(e));return s+"/"+r.map(encodeURIComponent).join("/")}function Rb(t,e){return"Basic "+Buffer.from(String(t||"")+":"+String(e||""),"utf8").toString("base64")}async function Us(t,e){let n=e||{},s=Ws(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=Rb(s.username,s.password));let o=Number(n.timeoutMs)>0?Number(n.timeoutMs):jb,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=sf(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 qA(t){try{return await t.res.text()}catch{return""}}function fo(t){return t===401||t===403?"webdav.errAuth":t===404?"webdav.errRemotePath":"webdav.errHttp"}async function BA(t){let e=Ws(t);if(!e.url)return{ok:!1,error:"webdav.errNeedUrl"};let n=Date.now(),s;try{s=await Us(e,{method:"PROPFIND",path:"",headers:{Depth:"0"},body:Zd})}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 Us(e,{method:"PROPFIND",path:"",root:!0,headers:{Depth:"0"},body:Zd})}catch{r=null}if(r&&(r.ok||r.status===207))return{ok:!0,status:r.status,ms:Date.now()-n,root:"server",needsCreate:!0};if(r&&(r.status===401||r.status===403))return{ok:!1,status:r.status,error:"webdav.errAuth",ms:Date.now()-n}}return{ok:!1,status:s.status,error:fo(s.status),ms:Date.now()-n}}var Zd='<?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 UA(t,e){let n=Ws(t),s=bl(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 Us(n,{method:"MKCOL",path:a});if(l.status===201||l.status===200||l.status===204)return"created";if(l.status===405||l.status===301)return"exists";if(l.status===409)return"noparent";let c=new Error(fo(l.status));throw c.code="http",c.status=l.status,c};for(let a of r){let l=await i(a);if(l==="noparent"&&a!==""&&(await i(""),l=await i(a)),l==="created"){o++;continue}if(l==="exists")continue;let c=new Error("webdav.errHttp");throw c.code="http",c.status=409,c}return{created:o,levels:r.length}}async function WA(t,e,n,s){let r=Ws(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 Us(r,{method:"PUT",path:e,headers:a,body:i,timeoutMs:o.timeoutMs});if(l.status===200||l.status===201||l.status===204)return{ok:!0,status:l.status,bytes:i.length};let c=new Error(fo(l.status));throw c.code="http",c.status=l.status,c}async function KA(t,e,n){let s=Ws(t),o=await Us(s,{method:"GET",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return null;if(!o.ok){let a=new Error(fo(o.status));throw a.code="http",a.status=o.status,a}let i=await o.res.arrayBuffer();return Buffer.from(i)}async function HA(t,e,n){let s=Ws(t),o=await Us(s,{method:"DELETE",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return{ok:!0,status:404,missing:!0};if(!o.ok){let i=new Error(fo(o.status));throw i.code="http",i.status=o.status,i}return{ok:!0,status:o.status}}function Vd(t,e){let s=new RegExp("<(?:[\\w.-]+:)?"+e+"\\b[^>]*>([\\s\\S]*?)</(?:[\\w.-]+:)?"+e+">","i").exec(t);return s?s[1]:""}function qb(t){let e=String(t||"").trim();if(!e)return"";let n=e;try{n=decodeURIComponent(e)}catch{}return n}function Qd(t){return String(t||"").replace(/^[a-z]+:\/\/[^/]+/i,"").replace(/\/+$/,"")}function Bb(t){let e=String(t||""),n=[],s=e.match(/<(?:[\w.-]+:)?response\b[\s\S]*?<\/(?:[\w.-]+:)?response>/gi)||[];for(let r of s){let o=qb(Vd(r,"href"));if(!o)continue;let i=/<(?:[\w.-]+:)?collection\b/i.test(r),a=Number(String(Vd(r,"getcontentlength")||"").trim()),l=String(Vd(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 zA(t,e,n){let s=Ws(t),o=await Us(s,{method:"PROPFIND",path:e,headers:{Depth:"1"},body:Zd,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return[];if(!o.ok&&o.status!==207){let l=new Error(fo(o.status));throw l.code="http",l.status=o.status,l}let i=await qA(o),a=Qd(qb(sf(s,e)));return Bb(i).filter(function(l){return Qd(l.href)!==a})}Ub.exports={WEBDAV_CONFIG_PATH:ef,DEFAULT_REMOTE_DIR:uo,INCLUDE_KEYS:tf,REQUEST_TIMEOUT_MS:jb,MAX_SEGMENTS:nf,defaultConfig:Fb,normalizeConfig:kl,normalizeRemoteDir:Ib,sanitizeMachineSegment:Lb,isSafeSegment:RA,effectiveRemoteDir:Db,loadConfig:LA,saveConfig:DA,urlFor:sf,pathOfHref:Qd,basicAuth:Rb,request:Us,testConnection:BA,ensureDir:UA,putFile:WA,getFile:KA,deleteFile:HA,listDir:zA,parseMultiStatus:Bb,__requestConfig:Ws}});var r0=Z((jI,s0)=>{var Ct=require("fs"),vl=require("os"),et=require("path"),GA=require("crypto"),je=rf(),_l=et.join(vl.homedir(),".luban"),ds="manifest.json",JA=1,Tl=2,af=5,of=3,$A=500,Wb=/^[A-Za-z0-9_-]+\.json$/,Kb=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,Hb=/^[^\/\\:*?"<>|\u0000-\u001f]{1,180}\.md$/,zb=/^[A-Za-z0-9_-]+$/;function lf(t){return GA.createHash("sha1").update(t).digest("hex")}function Ti(t){return(t<10?"0":"")+t}function Gb(t){let e=t||new Date;return e.getFullYear()+Ti(e.getMonth()+1)+Ti(e.getDate())+"-"+Ti(e.getHours())+Ti(e.getMinutes())+Ti(e.getSeconds())}function XA(t){return t instanceof Date&&!isNaN(t.getTime())?t.toISOString():""}function Jb(t){let e=Object.create(null);for(let n of je.INCLUDE_KEYS)e[n]=!t||t[n]===void 0?!0:t[n]===!0;return e}function $b(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&&Wb.test(n[1])?e:"":s==="plans"?n.length===2&&Hb.test(n[1])?e:"":s==="config"?n.length===2&&(n[1]==="providers.json"||n[1]==="mcp.json")?e:"":s==="attachments"?n.length!==3?"":zb.test(n[1])&&Kb.test(n[2])?e:"":""}var Xb=["sessions","attachments","plans","providers","mcp"];function Vb(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 Ci(t){let e=Object.create(null);for(let n of Xb)e[n]=0;for(let n of Array.isArray(t)?t:[]){let s=Vb(n);s&&e[s]++}return e}function Yb(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)+`
272
- `,redacted:n}}function xl(t){try{return Ct.readdirSync(t,{withFileTypes:!0})}catch{return[]}}function Mi(t,e,n,s,r){let o=r||{},i;try{i=Ct.statSync(n)}catch{return e.push({relPath:s,reason:"stat"}),null}if(!i.isFile())return null;let a;try{a=Ct.readFileSync(n)}catch{return e.push({relPath:s,reason:"read"}),null}let l=!1;if(o.redact){let u=Yb(a.toString("utf8"));a=Buffer.from(u.text,"utf8"),l=u.redacted}let c={relPath:s,absPath:n,size:a.length,mtime:XA(i.mtime),sha1:lf(a)};return o.redact&&(c.inline=a,c.redacted=l),t.push(c),c}function cf(t){let e=t||{},n=e.home?et.resolve(e.home):_l,s=Jb(e.includes),r=[],o=[],i=!1;if(s.sessions){let a=et.join(n,"sessions");for(let l of xl(a))if(l.isFile()){if(!Wb.test(l.name)){o.push({relPath:"sessions/"+l.name,reason:"pattern"});continue}Mi(r,o,et.join(a,l.name),"sessions/"+l.name)}}if(s.attachments){let a=et.join(n,"attachments");for(let l of xl(a)){if(!l.isDirectory()||!zb.test(l.name))continue;let c=et.join(a,l.name);for(let u of xl(c))if(u.isFile()){if(!Kb.test(u.name)){o.push({relPath:"attachments/"+l.name+"/"+u.name,reason:"pattern"});continue}Mi(r,o,et.join(c,u.name),"attachments/"+l.name+"/"+u.name)}}}if(s.plans){let a=et.join(n,"plans");for(let l of xl(a))if(l.isFile()){if(!Hb.test(l.name)){o.push({relPath:"plans/"+l.name,reason:"pattern"});continue}Mi(r,o,et.join(a,l.name),"plans/"+l.name)}}if(s.config){let a=et.join(n,"providers.json");if(Ct.existsSync(a)){let l=Mi(r,o,a,"config/providers.json",{redact:!0});l&&l.redacted&&(i=!0)}}if(s.mcp){let a=et.join(n,"mcp.json");Ct.existsSync(a)&&Mi(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 Zb(t,e,n){let s=e||{},r=new Set(n||[]),o={schema:JA,app:"luban",version:String(s.version||""),machine:String(s.machine||vl.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 Qb(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 e0(t){return t&&t.inline!==void 0?Buffer.isBuffer(t.inline)?t.inline:Buffer.from(String(t.inline),"utf8"):Ct.readFileSync(t.absPath)}function Ai(t,e){let n=String(e??"").trim();if(!n)return t;if(!je.isSafeSegment(n))return null;let s=String(t&&t.remoteDir||je.DEFAULT_REMOTE_DIR).replace(/\/+$/,"");return s.split("/").filter(function(o){return!!o}).length+1>je.MAX_SEGMENTS?null:Object.assign({},t,{remoteDir:s+"/"+n,perMachine:!1,machine:""})}async function Ml(t){let e=je.effectiveRemoteDir(t),n=String(t.remoteDir||je.DEFAULT_REMOTE_DIR),s=t.perMachine===!0&&e!==n,r=null;try{r=await je.getFile(t,ds)}catch{r=null}if(r||!s)return{buf:r,base:e,legacy:!1};try{r=await je.getFile(Object.assign({},t,{perMachine:!1}),ds)}catch{r=null}return{buf:r,base:n,legacy:!!r}}function t0(t){return!!t&&(t.code==="timeout"||t.code==="network")}function VA(t){return new Promise(function(e){setTimeout(e,t)})}async function uf(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<of;){d++;try{await n(u,c),f=null;break}catch(p){if(f=p,!t0(p))break;d<of&&await VA($A*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 YA(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 ZA(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||je.loadConfig(i?{path:i}:void 0);r({phase:"test",done:0,total:0,current:""});let l=await je.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 je.getFile(o,ds);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||vl.hostname();if(c.machine&&c.machine!==A&&!isNaN(_)&&(isNaN(C)||_>C))return QA(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=cf({home:s.home,includes:s.includes||a.includes}),d=u.files,f=d.length,p=Qb(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]||_})),k=p.skip.length;await je.ensureDir(o,"");for(let _ of YA(h))await je.ensureDir(o,_);let x=0;r({phase:"upload",done:0,total:h.length,current:""});let T=[];try{T=(await uf(h,Tl,async function(C){let A=e0(C);await je.putFile(o,C.relPath,A),C.sha1=lf(A),C.size=A.length},function(C){x++,(x%af===0||x===h.length)&&r({phase:"upload",done:x,total:h.length,current:C.relPath})})).failures}catch(_){return{ok:!1,phase:"upload",error:_.message||"webdav.errNetwork",status:_.status||0,done:x,total:f,files:f}}let g=T.map(function(_){return _.item.relPath});function v(_){let C=new Set(_||[]);return Ci(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:ds});let y=new Date().toISOString(),S=Zb(d,{version:s.version,machine:s.machine,createdAt:y},g);return await je.putFile(o,ds,Buffer.from(JSON.stringify(S,null,2)+`
271
+ `,{mode:384}),vr.existsSync(n))try{vr.copyFileSync(n,n+".bak")}catch{}vr.renameSync(r,n);try{vr.chmodSync(n,384)}catch{}return{ok:!0,config:s.config,path:n}}function Ks(t){let e=kl(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 bl(t){return String(t??"").split("/").filter(function(e){return!!e})}function Lb(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 RA(t){let e=String(t??"");return!e||e.length>64||e==="."||e===".."?!1:Nb.test(e)}function Db(t){let e=String(t&&t.remoteDir||uo);return!t||t.perMachine!==!0?e:e+"/"+Lb(t.machine||Pb.hostname())}function sf(t,e,n){let s=String(t.url==null?"":t.url).replace(/\/+$/,"");if(n)return s+"/";let r=bl(Db(t)).concat(bl(e));return s+"/"+r.map(encodeURIComponent).join("/")}function Rb(t,e){return"Basic "+Buffer.from(String(t||"")+":"+String(e||""),"utf8").toString("base64")}async function Ws(t,e){let n=e||{},s=Ks(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=Rb(s.username,s.password));let o=Number(n.timeoutMs)>0?Number(n.timeoutMs):jb,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=sf(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 qA(t){try{return await t.res.text()}catch{return""}}function fo(t){return t===401||t===403?"webdav.errAuth":t===404?"webdav.errRemotePath":"webdav.errHttp"}async function BA(t){let e=Ks(t);if(!e.url)return{ok:!1,error:"webdav.errNeedUrl"};let n=Date.now(),s;try{s=await Ws(e,{method:"PROPFIND",path:"",headers:{Depth:"0"},body:Zd})}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 Ws(e,{method:"PROPFIND",path:"",root:!0,headers:{Depth:"0"},body:Zd})}catch{r=null}if(r&&(r.ok||r.status===207))return{ok:!0,status:r.status,ms:Date.now()-n,root:"server",needsCreate:!0};if(r&&(r.status===401||r.status===403))return{ok:!1,status:r.status,error:"webdav.errAuth",ms:Date.now()-n}}return{ok:!1,status:s.status,error:fo(s.status),ms:Date.now()-n}}var Zd='<?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 UA(t,e){let n=Ks(t),s=bl(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 Ws(n,{method:"MKCOL",path:a});if(l.status===201||l.status===200||l.status===204)return"created";if(l.status===405||l.status===301)return"exists";if(l.status===409)return"noparent";let c=new Error(fo(l.status));throw c.code="http",c.status=l.status,c};for(let a of r){let l=await i(a);if(l==="noparent"&&a!==""&&(await i(""),l=await i(a)),l==="created"){o++;continue}if(l==="exists")continue;let c=new Error("webdav.errHttp");throw c.code="http",c.status=409,c}return{created:o,levels:r.length}}async function WA(t,e,n,s){let r=Ks(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 Ws(r,{method:"PUT",path:e,headers:a,body:i,timeoutMs:o.timeoutMs});if(l.status===200||l.status===201||l.status===204)return{ok:!0,status:l.status,bytes:i.length};let c=new Error(fo(l.status));throw c.code="http",c.status=l.status,c}async function KA(t,e,n){let s=Ks(t),o=await Ws(s,{method:"GET",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return null;if(!o.ok){let a=new Error(fo(o.status));throw a.code="http",a.status=o.status,a}let i=await o.res.arrayBuffer();return Buffer.from(i)}async function HA(t,e,n){let s=Ks(t),o=await Ws(s,{method:"DELETE",path:e,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return{ok:!0,status:404,missing:!0};if(!o.ok){let i=new Error(fo(o.status));throw i.code="http",i.status=o.status,i}return{ok:!0,status:o.status}}function Vd(t,e){let s=new RegExp("<(?:[\\w.-]+:)?"+e+"\\b[^>]*>([\\s\\S]*?)</(?:[\\w.-]+:)?"+e+">","i").exec(t);return s?s[1]:""}function qb(t){let e=String(t||"").trim();if(!e)return"";let n=e;try{n=decodeURIComponent(e)}catch{}return n}function Qd(t){return String(t||"").replace(/^[a-z]+:\/\/[^/]+/i,"").replace(/\/+$/,"")}function Bb(t){let e=String(t||""),n=[],s=e.match(/<(?:[\w.-]+:)?response\b[\s\S]*?<\/(?:[\w.-]+:)?response>/gi)||[];for(let r of s){let o=qb(Vd(r,"href"));if(!o)continue;let i=/<(?:[\w.-]+:)?collection\b/i.test(r),a=Number(String(Vd(r,"getcontentlength")||"").trim()),l=String(Vd(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 zA(t,e,n){let s=Ks(t),o=await Ws(s,{method:"PROPFIND",path:e,headers:{Depth:"1"},body:Zd,timeoutMs:(n||{}).timeoutMs});if(o.status===404)return[];if(!o.ok&&o.status!==207){let l=new Error(fo(o.status));throw l.code="http",l.status=o.status,l}let i=await qA(o),a=Qd(qb(sf(s,e)));return Bb(i).filter(function(l){return Qd(l.href)!==a})}Ub.exports={WEBDAV_CONFIG_PATH:ef,DEFAULT_REMOTE_DIR:uo,INCLUDE_KEYS:tf,REQUEST_TIMEOUT_MS:jb,MAX_SEGMENTS:nf,defaultConfig:Fb,normalizeConfig:kl,normalizeRemoteDir:Ib,sanitizeMachineSegment:Lb,isSafeSegment:RA,effectiveRemoteDir:Db,loadConfig:LA,saveConfig:DA,urlFor:sf,pathOfHref:Qd,basicAuth:Rb,request:Ws,testConnection:BA,ensureDir:UA,putFile:WA,getFile:KA,deleteFile:HA,listDir:zA,parseMultiStatus:Bb,__requestConfig:Ks}});var r0=Z((jI,s0)=>{var At=require("fs"),vl=require("os"),et=require("path"),GA=require("crypto"),je=rf(),_l=et.join(vl.homedir(),".luban"),fs="manifest.json",JA=1,Tl=2,af=5,of=3,$A=500,Wb=/^[A-Za-z0-9_-]+\.json$/,Kb=/^[A-Za-z0-9_-]+\.[a-z]{3,4}$/,Hb=/^[^\/\\:*?"<>|\u0000-\u001f]{1,180}\.md$/,zb=/^[A-Za-z0-9_-]+$/;function lf(t){return GA.createHash("sha1").update(t).digest("hex")}function Ti(t){return(t<10?"0":"")+t}function Gb(t){let e=t||new Date;return e.getFullYear()+Ti(e.getMonth()+1)+Ti(e.getDate())+"-"+Ti(e.getHours())+Ti(e.getMinutes())+Ti(e.getSeconds())}function XA(t){return t instanceof Date&&!isNaN(t.getTime())?t.toISOString():""}function Jb(t){let e=Object.create(null);for(let n of je.INCLUDE_KEYS)e[n]=!t||t[n]===void 0?!0:t[n]===!0;return e}function $b(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&&Wb.test(n[1])?e:"":s==="plans"?n.length===2&&Hb.test(n[1])?e:"":s==="config"?n.length===2&&(n[1]==="providers.json"||n[1]==="mcp.json")?e:"":s==="attachments"?n.length!==3?"":zb.test(n[1])&&Kb.test(n[2])?e:"":""}var Xb=["sessions","attachments","plans","providers","mcp"];function Vb(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 Ci(t){let e=Object.create(null);for(let n of Xb)e[n]=0;for(let n of Array.isArray(t)?t:[]){let s=Vb(n);s&&e[s]++}return e}function Yb(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)+`
272
+ `,redacted:n}}function xl(t){try{return At.readdirSync(t,{withFileTypes:!0})}catch{return[]}}function Mi(t,e,n,s,r){let o=r||{},i;try{i=At.statSync(n)}catch{return e.push({relPath:s,reason:"stat"}),null}if(!i.isFile())return null;let a;try{a=At.readFileSync(n)}catch{return e.push({relPath:s,reason:"read"}),null}let l=!1;if(o.redact){let u=Yb(a.toString("utf8"));a=Buffer.from(u.text,"utf8"),l=u.redacted}let c={relPath:s,absPath:n,size:a.length,mtime:XA(i.mtime),sha1:lf(a)};return o.redact&&(c.inline=a,c.redacted=l),t.push(c),c}function cf(t){let e=t||{},n=e.home?et.resolve(e.home):_l,s=Jb(e.includes),r=[],o=[],i=!1;if(s.sessions){let a=et.join(n,"sessions");for(let l of xl(a))if(l.isFile()){if(!Wb.test(l.name)){o.push({relPath:"sessions/"+l.name,reason:"pattern"});continue}Mi(r,o,et.join(a,l.name),"sessions/"+l.name)}}if(s.attachments){let a=et.join(n,"attachments");for(let l of xl(a)){if(!l.isDirectory()||!zb.test(l.name))continue;let c=et.join(a,l.name);for(let u of xl(c))if(u.isFile()){if(!Kb.test(u.name)){o.push({relPath:"attachments/"+l.name+"/"+u.name,reason:"pattern"});continue}Mi(r,o,et.join(c,u.name),"attachments/"+l.name+"/"+u.name)}}}if(s.plans){let a=et.join(n,"plans");for(let l of xl(a))if(l.isFile()){if(!Hb.test(l.name)){o.push({relPath:"plans/"+l.name,reason:"pattern"});continue}Mi(r,o,et.join(a,l.name),"plans/"+l.name)}}if(s.config){let a=et.join(n,"providers.json");if(At.existsSync(a)){let l=Mi(r,o,a,"config/providers.json",{redact:!0});l&&l.redacted&&(i=!0)}}if(s.mcp){let a=et.join(n,"mcp.json");At.existsSync(a)&&Mi(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 Zb(t,e,n){let s=e||{},r=new Set(n||[]),o={schema:JA,app:"luban",version:String(s.version||""),machine:String(s.machine||vl.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 Qb(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 e0(t){return t&&t.inline!==void 0?Buffer.isBuffer(t.inline)?t.inline:Buffer.from(String(t.inline),"utf8"):At.readFileSync(t.absPath)}function Ai(t,e){let n=String(e??"").trim();if(!n)return t;if(!je.isSafeSegment(n))return null;let s=String(t&&t.remoteDir||je.DEFAULT_REMOTE_DIR).replace(/\/+$/,"");return s.split("/").filter(function(o){return!!o}).length+1>je.MAX_SEGMENTS?null:Object.assign({},t,{remoteDir:s+"/"+n,perMachine:!1,machine:""})}async function Ml(t){let e=je.effectiveRemoteDir(t),n=String(t.remoteDir||je.DEFAULT_REMOTE_DIR),s=t.perMachine===!0&&e!==n,r=null;try{r=await je.getFile(t,fs)}catch{r=null}if(r||!s)return{buf:r,base:e,legacy:!1};try{r=await je.getFile(Object.assign({},t,{perMachine:!1}),fs)}catch{r=null}return{buf:r,base:n,legacy:!!r}}function t0(t){return!!t&&(t.code==="timeout"||t.code==="network")}function VA(t){return new Promise(function(e){setTimeout(e,t)})}async function uf(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<of;){d++;try{await n(u,c),f=null;break}catch(p){if(f=p,!t0(p))break;d<of&&await VA($A*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 YA(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 ZA(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||je.loadConfig(i?{path:i}:void 0);r({phase:"test",done:0,total:0,current:""});let l=await je.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 je.getFile(o,fs);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||vl.hostname();if(c.machine&&c.machine!==A&&!isNaN(_)&&(isNaN(C)||_>C))return QA(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=cf({home:s.home,includes:s.includes||a.includes}),d=u.files,f=d.length,p=Qb(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]||_})),k=p.skip.length;await je.ensureDir(o,"");for(let _ of YA(h))await je.ensureDir(o,_);let x=0;r({phase:"upload",done:0,total:h.length,current:""});let T=[];try{T=(await uf(h,Tl,async function(C){let A=e0(C);await je.putFile(o,C.relPath,A),C.sha1=lf(A),C.size=A.length},function(C){x++,(x%af===0||x===h.length)&&r({phase:"upload",done:x,total:h.length,current:C.relPath})})).failures}catch(_){return{ok:!1,phase:"upload",error:_.message||"webdav.errNetwork",status:_.status||0,done:x,total:f,files:f}}let g=T.map(function(_){return _.item.relPath});function v(_){let C=new Set(_||[]);return Ci(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:fs});let y=new Date().toISOString(),S=Zb(d,{version:s.version,machine:s.machine,createdAt:y},g);return await je.putFile(o,fs,Buffer.from(JSON.stringify(S,null,2)+`
273
273
  `,"utf8"),{contentType:"application/json"}),s.persist!==!1&&(je.saveConfig(Object.assign({},a,{lastBackupAt:y}),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:x,total:h.length,files:f,createdAt:y,uploaded:h.length-T.length,unchanged:k,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:k,skipped:u.skipped.length,redacted:u.redacted,keys:Object.keys(S.files).length,createdAt:y,categories:v([]),includes:u.includes})}function QA(t,e){try{t(e)}catch{}}function n0(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)+`
274
274
  `,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)+`
275
- `,added:c,models:u}}function eO(t,e){Ct.mkdirSync(et.dirname(t),{recursive:!0,mode:448});let n=t+".tmp";Ct.writeFileSync(n,e,{mode:384}),Ct.renameSync(n,t);try{Ct.chmodSync(t,384)}catch{}}function Sl(t,e){return e==="config/providers.json"?et.join(t,"providers.json"):e==="config/mcp.json"?et.join(t,"mcp.json"):et.join(t,e)}async function tO(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=Ai(Object.assign({},t||{}),s.subdir);if(!o)return{ok:!1,phase:"manifest",error:"webdav.errBadMachine"};let i=s.configPath,a=s.config||je.loadConfig(i?{path:i}:void 0),l=s.home?et.resolve(s.home):_l,c=s.mode==="force"?"force":"newer";r({phase:"test",done:0,total:0,current:""});let u=await je.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:ds});let d=await Ml(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||""),k=cf({home:l,includes:s.includes||a.includes}),x=Object.create(null);for(let Y of k.files)x[Y.relPath]=Y;let T=[],g=[],v=[],y=[],S=[];for(let Y of Object.keys(p.files)){let pe=p.files[Y]||{};if(!$b(Y)){y.push(Y);continue}if(pe.ok===!1){S.push(Y);continue}let U=x[Y];if(U&&pe.sha1&&U.sha1===pe.sha1){g.push(Y);continue}if(Y==="config/providers.json"){T.push(Y);continue}if(U&&c!=="force"){let Ee=Date.parse(U.mtime||"");if(!isNaN(h)&&!isNaN(Ee)&&Ee>h){v.push(Y);continue}}T.push(Y)}let _=Array.isArray(s.providerIds)?s.providerIds.map(String):null,C=_!=null&&_.length===0,A=C?T.filter(function(Y){return Y!=="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 D="",G=A.filter(function(Y){return Ct.existsSync(Sl(l,Y))});if(G.length){D=et.join(l,"backups",Gb()),r({phase:"snapshot",done:0,total:G.length,current:D});for(let Y of G){let pe=et.join(D,Y);Ct.mkdirSync(et.dirname(pe),{recursive:!0,mode:448});try{Ct.copyFileSync(Sl(l,Y),pe)}catch{}}}let H=0,q=0,fe=[],N={added:0,models:0},z=A.length;r({phase:"download",done:0,total:z,current:""});let he=[];try{he=(await uf(A,Tl,async function(pe){let U=await je.getFile(m,pe);if(!U)return;let Ee=Sl(l,pe),ke=U;if(pe==="config/providers.json"){let ut=Ct.existsSync(Ee)?Ct.readFileSync(Ee,"utf8"):"",gt=n0(ut,U.toString("utf8"),_);ke=Buffer.from(gt.text,"utf8"),N={added:N.added+gt.added,models:N.models+gt.models}}s.dryRun||eO(Ee,ke),q++,fe.push(pe)},function(pe){H++,(H%af===0||H===z)&&r({phase:"download",done:H,total:z,current:pe})})).failures}catch(Y){return{ok:!1,phase:"download",error:Y.message||"webdav.errNetwork",status:Y.status||0,done:H,total:z,restored:q,snapshot:D,categories:Ci(fe)}}if(he.length)return{ok:!1,phase:"download",error:"webdav.errPartial",done:H,total:z,restored:q,snapshot:D,incomplete:S.length,categories:Ci(fe),failed:he.map(function(Y){return{relPath:Y.item,error:Y.error.message||String(Y.error),code:Y.code,attempts:Y.attempts}})};let ne=new Date().toISOString();return s.persist!==!1&&!s.dryRun&&je.saveConfig(Object.assign({},a,{lastRestoreAt:ne}),i?{path:i}:void 0),r({phase:"done",done:z,total:z,current:""}),{ok:!0,phase:"done",restored:q,total:z,restoredPaths:fe,categories:Ci(fe),skipped:g.length,blocked:v,unsafe:y.length,incomplete:S.length,snapshot:D,createdAt:p.createdAt||"",machine:p.machine||"",legacy:d.legacy,merge:N,restoredAt:ne}}async function nO(t,e){let n=e||{},s=Ai(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await je.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await Ml(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 sO(t,e){let n=e||{},s=Ai(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await je.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await Ml(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 je.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?et.resolve(n.home):_l,f=et.join(d,"providers.json"),p=new Set;try{let h=JSON.parse(Ct.readFileSync(f,"utf8"));for(let k of h&&Array.isArray(h.providers)?h.providers:[])k&&k.id&&p.add(String(k.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 rO(t,e){let n=e||{},s=Object.assign({},t||{}),r=await je.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||je.DEFAULT_REMOTE_DIR).replace(/\/+$/,""),a=[];try{a=await je.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===ds})&&l.push("");for(let u of a)u.isDir&&je.isSafeSegment(u.name)&&l.push(u.name);let c=[];return await uf(l.slice(0,20),Tl,async function(u){let d=u?Ai(o,u):o,f=null;try{f=await je.getFile(d,ds)}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,k){return h+(Number((p.files[k]||{}).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:je.sanitizeMachineSegment(n.machine||vl.hostname()),machines:c}}s0.exports={LUBAN_HOME:_l,MANIFEST_NAME:ds,CONCURRENCY:Tl,PROGRESS_EVERY:af,MAX_ATTEMPTS:of,isRetryable:t0,sha1:lf,stampDir:Gb,safeRelPath:$b,localPathOf:Sl,redactProviders:Yb,CATEGORIES:Xb,categoryOf:Vb,countCategories:Ci,includesOf:Jb,scanLocal:cf,buildManifest:Zb,planSync:Qb,contentOf:e0,withSubdir:Ai,fetchManifest:Ml,uploadAll:ZA,restoreAll:tO,remoteSummary:nO,listMachines:rO,listRemoteProviders:sO,mergeProviders:n0}});var Cl=Z((NI,u0)=>{var Tr=require("fs"),oO=require("os"),ff=require("path"),iO=2048,Oi=ff.join(oO.tmpdir(),"luban-computer"),aO=30*60*1e3,lO=40;function _r(t,e){let n=Number(t);return isFinite(n)?Math.round(n):e}function cO(t,e,n){let s=Number(t);return isFinite(s)?Math.max(e,Math.min(n,Math.round(s))):e}function uO(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=_r(e.width!=null?e.width:e.w,0),s=_r(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:_r(e.x,0),y:_r(e.y,0),width:n,height:s}}function dO(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 Ks=null;function fO(){return Ks?Object.assign({},Ks):null}function pO(t){Ks=t}function mO(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 hO(t,e,n){let s=n||{},r=_r(t,NaN),o=_r(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(!Ks)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(Ks.originX+r*Ks.ratio),y:Math.round(Ks.originY+o*Ks.ratio)}}function gO(t){return new Promise(function(e,n){let s=null;try{s=Tr.openSync(t,"r");let r=Buffer.alloc(262144),o=Tr.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{Tr.closeSync(s)}catch{}}})}function o0(){try{Tr.mkdirSync(Oi,{recursive:!0})}catch{}}function i0(){try{let t=Tr.readdirSync(Oi),e=[];for(let s of t){if(!/\.(jpg|png)$/.test(s))continue;let r=ff.join(Oi,s);try{e.push({p:r,t:Tr.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>=lO||n-s.t>aO)try{Tr.unlinkSync(s.p)}catch{}})}catch{}}function yO(t){o0(),i0();let e="cu-"+Date.now()+"-"+Math.random().toString(36).slice(2,8)+"."+(t||"jpg");return ff.join(Oi,e)}function a0(t){return Math.round(t.width)+"\xD7"+Math.round(t.height)}function wO(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 df(t){let e=Math.round(Number(t)||0);return(e<0?"-":"+")+Math.abs(e)}var l0={short:"\u70B9",long:"\u5C4F\u5E55\u903B\u8F91\u70B9",mid:"\u5C4F\u5E55\u70B9"};function bO(t,e){let n=e||l0,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"+a0(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"+df(t.originX)+" y"+df(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(`
275
+ `,added:c,models:u}}function eO(t,e){At.mkdirSync(et.dirname(t),{recursive:!0,mode:448});let n=t+".tmp";At.writeFileSync(n,e,{mode:384}),At.renameSync(n,t);try{At.chmodSync(t,384)}catch{}}function Sl(t,e){return e==="config/providers.json"?et.join(t,"providers.json"):e==="config/mcp.json"?et.join(t,"mcp.json"):et.join(t,e)}async function tO(t,e,n){let s=e||{},r=typeof n=="function"?n:function(){},o=Ai(Object.assign({},t||{}),s.subdir);if(!o)return{ok:!1,phase:"manifest",error:"webdav.errBadMachine"};let i=s.configPath,a=s.config||je.loadConfig(i?{path:i}:void 0),l=s.home?et.resolve(s.home):_l,c=s.mode==="force"?"force":"newer";r({phase:"test",done:0,total:0,current:""});let u=await je.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:fs});let d=await Ml(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||""),k=cf({home:l,includes:s.includes||a.includes}),x=Object.create(null);for(let Y of k.files)x[Y.relPath]=Y;let T=[],g=[],v=[],y=[],S=[];for(let Y of Object.keys(p.files)){let pe=p.files[Y]||{};if(!$b(Y)){y.push(Y);continue}if(pe.ok===!1){S.push(Y);continue}let U=x[Y];if(U&&pe.sha1&&U.sha1===pe.sha1){g.push(Y);continue}if(Y==="config/providers.json"){T.push(Y);continue}if(U&&c!=="force"){let Ee=Date.parse(U.mtime||"");if(!isNaN(h)&&!isNaN(Ee)&&Ee>h){v.push(Y);continue}}T.push(Y)}let _=Array.isArray(s.providerIds)?s.providerIds.map(String):null,C=_!=null&&_.length===0,A=C?T.filter(function(Y){return Y!=="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 D="",G=A.filter(function(Y){return At.existsSync(Sl(l,Y))});if(G.length){D=et.join(l,"backups",Gb()),r({phase:"snapshot",done:0,total:G.length,current:D});for(let Y of G){let pe=et.join(D,Y);At.mkdirSync(et.dirname(pe),{recursive:!0,mode:448});try{At.copyFileSync(Sl(l,Y),pe)}catch{}}}let H=0,q=0,fe=[],N={added:0,models:0},z=A.length;r({phase:"download",done:0,total:z,current:""});let he=[];try{he=(await uf(A,Tl,async function(pe){let U=await je.getFile(m,pe);if(!U)return;let Ee=Sl(l,pe),ke=U;if(pe==="config/providers.json"){let ut=At.existsSync(Ee)?At.readFileSync(Ee,"utf8"):"",gt=n0(ut,U.toString("utf8"),_);ke=Buffer.from(gt.text,"utf8"),N={added:N.added+gt.added,models:N.models+gt.models}}s.dryRun||eO(Ee,ke),q++,fe.push(pe)},function(pe){H++,(H%af===0||H===z)&&r({phase:"download",done:H,total:z,current:pe})})).failures}catch(Y){return{ok:!1,phase:"download",error:Y.message||"webdav.errNetwork",status:Y.status||0,done:H,total:z,restored:q,snapshot:D,categories:Ci(fe)}}if(he.length)return{ok:!1,phase:"download",error:"webdav.errPartial",done:H,total:z,restored:q,snapshot:D,incomplete:S.length,categories:Ci(fe),failed:he.map(function(Y){return{relPath:Y.item,error:Y.error.message||String(Y.error),code:Y.code,attempts:Y.attempts}})};let ne=new Date().toISOString();return s.persist!==!1&&!s.dryRun&&je.saveConfig(Object.assign({},a,{lastRestoreAt:ne}),i?{path:i}:void 0),r({phase:"done",done:z,total:z,current:""}),{ok:!0,phase:"done",restored:q,total:z,restoredPaths:fe,categories:Ci(fe),skipped:g.length,blocked:v,unsafe:y.length,incomplete:S.length,snapshot:D,createdAt:p.createdAt||"",machine:p.machine||"",legacy:d.legacy,merge:N,restoredAt:ne}}async function nO(t,e){let n=e||{},s=Ai(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await je.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await Ml(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 sO(t,e){let n=e||{},s=Ai(Object.assign({},t||{}),n.subdir);if(!s)return{ok:!1,error:"webdav.errBadMachine"};let r=await je.testConnection(s);if(!r.ok&&r.error!=="webdav.errRemotePath")return{ok:!1,error:r.error||"webdav.errNetwork",status:r.status};let o=await Ml(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 je.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?et.resolve(n.home):_l,f=et.join(d,"providers.json"),p=new Set;try{let h=JSON.parse(At.readFileSync(f,"utf8"));for(let k of h&&Array.isArray(h.providers)?h.providers:[])k&&k.id&&p.add(String(k.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 rO(t,e){let n=e||{},s=Object.assign({},t||{}),r=await je.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||je.DEFAULT_REMOTE_DIR).replace(/\/+$/,""),a=[];try{a=await je.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===fs})&&l.push("");for(let u of a)u.isDir&&je.isSafeSegment(u.name)&&l.push(u.name);let c=[];return await uf(l.slice(0,20),Tl,async function(u){let d=u?Ai(o,u):o,f=null;try{f=await je.getFile(d,fs)}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,k){return h+(Number((p.files[k]||{}).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:je.sanitizeMachineSegment(n.machine||vl.hostname()),machines:c}}s0.exports={LUBAN_HOME:_l,MANIFEST_NAME:fs,CONCURRENCY:Tl,PROGRESS_EVERY:af,MAX_ATTEMPTS:of,isRetryable:t0,sha1:lf,stampDir:Gb,safeRelPath:$b,localPathOf:Sl,redactProviders:Yb,CATEGORIES:Xb,categoryOf:Vb,countCategories:Ci,includesOf:Jb,scanLocal:cf,buildManifest:Zb,planSync:Qb,contentOf:e0,withSubdir:Ai,fetchManifest:Ml,uploadAll:ZA,restoreAll:tO,remoteSummary:nO,listMachines:rO,listRemoteProviders:sO,mergeProviders:n0}});var Cl=Z((NI,u0)=>{var Tr=require("fs"),oO=require("os"),ff=require("path"),iO=2048,Oi=ff.join(oO.tmpdir(),"luban-computer"),aO=30*60*1e3,lO=40;function _r(t,e){let n=Number(t);return isFinite(n)?Math.round(n):e}function cO(t,e,n){let s=Number(t);return isFinite(s)?Math.max(e,Math.min(n,Math.round(s))):e}function uO(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=_r(e.width!=null?e.width:e.w,0),s=_r(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:_r(e.x,0),y:_r(e.y,0),width:n,height:s}}function dO(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 Hs=null;function fO(){return Hs?Object.assign({},Hs):null}function pO(t){Hs=t}function mO(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 hO(t,e,n){let s=n||{},r=_r(t,NaN),o=_r(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(!Hs)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(Hs.originX+r*Hs.ratio),y:Math.round(Hs.originY+o*Hs.ratio)}}function gO(t){return new Promise(function(e,n){let s=null;try{s=Tr.openSync(t,"r");let r=Buffer.alloc(262144),o=Tr.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{Tr.closeSync(s)}catch{}}})}function o0(){try{Tr.mkdirSync(Oi,{recursive:!0})}catch{}}function i0(){try{let t=Tr.readdirSync(Oi),e=[];for(let s of t){if(!/\.(jpg|png)$/.test(s))continue;let r=ff.join(Oi,s);try{e.push({p:r,t:Tr.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>=lO||n-s.t>aO)try{Tr.unlinkSync(s.p)}catch{}})}catch{}}function yO(t){o0(),i0();let e="cu-"+Date.now()+"-"+Math.random().toString(36).slice(2,8)+"."+(t||"jpg");return ff.join(Oi,e)}function a0(t){return Math.round(t.width)+"\xD7"+Math.round(t.height)}function wO(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 df(t){let e=Math.round(Number(t)||0);return(e<0?"-":"+")+Math.abs(e)}var l0={short:"\u70B9",long:"\u5C4F\u5E55\u903B\u8F91\u70B9",mid:"\u5C4F\u5E55\u70B9"};function bO(t,e){let n=e||l0,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"+a0(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"+df(t.originX)+" y"+df(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
276
  `)}function kO(t,e,n,s,r){let o=s||l0,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?c0(c+`
277
277
  `+a.join(`
278
278
  `),n):c+`
279
279
  \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 c0(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)+`
280
- \u2026[\u5DF2\u622A\u65AD\uFF0C\u5171 `+n.length+" \u5B57\u7B26\uFF1B\u53EF\u8C03\u5927 maxChars \u6216\u4F20 region \u53EA\u770B\u4E00\u5757]"}u0.exports={num:_r,clamp:cO,parseRegion:uO,clampRegion:dO,imageSize:gO,lastShotInfo:fO,setLastShot:pO,pointOnScreen:mO,toScreenPoint:hO,fmtSize:a0,screenListDesc:wO,signed:df,describeShot:bO,formatOcr:kO,clipText:c0,ensureTmpDir:o0,pruneTmp:i0,tmpFile:yO,DEFAULT_MAX_WIDTH:iO,TMP_DIR:Oi}});var T0=Z((II,_0)=>{var ct=require("fs"),FI=require("os"),nn=require("path"),{execFile:xO}=require("child_process"),ae=Cl(),m0=process.platform==="linux",bf={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},Mr=2e4,d0=12e3,f0=6e4,Al=null;function SO(){return Al||(Al=String(process.env.PATH||"").split(nn.delimiter).filter(Boolean),Al)}function Ue(t){if(!t)return"";if(t.indexOf(nn.sep)>=0)try{return ct.accessSync(t,ct.constants.X_OK),t}catch{return""}for(let e of SO()){let n=nn.join(e,t);try{return ct.accessSync(n,ct.constants.X_OK),n}catch{}}return""}function Jn(){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 kf(){return{x11Shot:Ue("ffmpeg")||Ue("import")||Ue("scrot")||"",waylandShot:Ue("grim")||Ue("gnome-screenshot")||"",xdotool:Ue("xdotool")||"",wtype:Ue("wtype")||"",wmctrl:Ue("wmctrl")||"",tesseract:Ue("tesseract")||""}}function pf(){let t=Jn(),e=kf();return t.kind==="x11"?e.x11Shot:t.kind==="wayland"?e.waylandShot:""}function mf(){let t=Jn(),e=kf();return t.kind==="x11"||t.kind==="wayland"?e.xdotool||e.wtype:""}function h0(){if(!m0)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=Jn();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=pf(),n=mf();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 vn(){let t=h0();if(!t.ok)throw new Error(t.reason)}function Cr(){let t=Ue("xdotool");if(!t)throw new Error(Jn().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 be(t,e,n){let s=n||{};return new Promise(function(r,o){xO(t,e,{timeout:s.timeoutMs||d0,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(nn.basename(t)+" \u8D85\u65F6\uFF08"+(s.timeoutMs||d0)+"ms\uFF09"));return}let d=(u.split(`
280
+ \u2026[\u5DF2\u622A\u65AD\uFF0C\u5171 `+n.length+" \u5B57\u7B26\uFF1B\u53EF\u8C03\u5927 maxChars \u6216\u4F20 region \u53EA\u770B\u4E00\u5757]"}u0.exports={num:_r,clamp:cO,parseRegion:uO,clampRegion:dO,imageSize:gO,lastShotInfo:fO,setLastShot:pO,pointOnScreen:mO,toScreenPoint:hO,fmtSize:a0,screenListDesc:wO,signed:df,describeShot:bO,formatOcr:kO,clipText:c0,ensureTmpDir:o0,pruneTmp:i0,tmpFile:yO,DEFAULT_MAX_WIDTH:iO,TMP_DIR:Oi}});var T0=Z((II,_0)=>{var ct=require("fs"),FI=require("os"),nn=require("path"),{execFile:xO}=require("child_process"),ae=Cl(),m0=process.platform==="linux",bf={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},Mr=2e4,d0=12e3,f0=6e4,Al=null;function SO(){return Al||(Al=String(process.env.PATH||"").split(nn.delimiter).filter(Boolean),Al)}function Ue(t){if(!t)return"";if(t.indexOf(nn.sep)>=0)try{return ct.accessSync(t,ct.constants.X_OK),t}catch{return""}for(let e of SO()){let n=nn.join(e,t);try{return ct.accessSync(n,ct.constants.X_OK),n}catch{}}return""}function $n(){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 kf(){return{x11Shot:Ue("ffmpeg")||Ue("import")||Ue("scrot")||"",waylandShot:Ue("grim")||Ue("gnome-screenshot")||"",xdotool:Ue("xdotool")||"",wtype:Ue("wtype")||"",wmctrl:Ue("wmctrl")||"",tesseract:Ue("tesseract")||""}}function pf(){let t=$n(),e=kf();return t.kind==="x11"?e.x11Shot:t.kind==="wayland"?e.waylandShot:""}function mf(){let t=$n(),e=kf();return t.kind==="x11"||t.kind==="wayland"?e.xdotool||e.wtype:""}function h0(){if(!m0)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=$n();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=pf(),n=mf();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 vn(){let t=h0();if(!t.ok)throw new Error(t.reason)}function Cr(){let t=Ue("xdotool");if(!t)throw new Error($n().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 be(t,e,n){let s=n||{};return new Promise(function(r,o){xO(t,e,{timeout:s.timeoutMs||d0,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(nn.basename(t)+" \u8D85\u65F6\uFF08"+(s.timeoutMs||d0)+"ms\uFF09"));return}let d=(u.split(`
281
281
  `).filter(Boolean)[0]||i.message||"").trim();o(new Error(nn.basename(t)+" \u5931\u8D25\uFF1A"+d));return}r({stdout:c,stderr:u})})})}function g0(t){let e=[];return String(t||"").split(`
282
- `).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 y0(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 Pi(){vn();let t=Ue("xrandr");if(t)try{let s=await be(t,["--listmonitors"],{timeoutMs:8e3}),r=g0(s.stdout);if(r.length)return r}catch{}let e=Ue("xdpyinfo");if(e)try{let s=await be(e,[],{timeoutMs:8e3}),r=y0(s.stdout);if(r)return[r]}catch{}if(Jn().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 p0(t){return Math.max(2,Math.round(t/2)*2)}async function vO(t,e){let n=Jn(),s={x:Math.round(e.x),y:Math.round(e.y),width:p0(e.width),height:p0(e.height)},r=[];if(n.kind==="x11"){let o=Ue("ffmpeg");if(o)try{if(await be(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:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024)return"ffmpeg";r.push("ffmpeg \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let i=Ue("import");if(i)try{if(await be(i,["-silent","-window","root","-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024)return"import";r.push("import \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let a=Ue("scrot");if(a)try{if(await be(a,["-o","-z","-a",[s.x,s.y,s.width,s.height].join(","),t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.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=Ue("grim");if(o)try{if(await be(o,["-g",s.x+","+s.y+" "+s.width+"x"+s.height,t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024)return"grim";r.push("grim \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}let i=Ue("gnome-screenshot");if(i)try{if(await be(i,["-f",t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024){let l=(await Pi().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=Ue("convert")||Ue("magick");if(u){let d=ae.tmpFile("png");await be(u,[t,"-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",d],{timeoutMs:Mr});try{ct.renameSync(d,t)}catch{}}}return"gnome-screenshot"}r.push("gnome-screenshot \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}}try{ct.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 w0(t){vn();let e=t||{},n=await Pi(),s=ae.num(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F");let o=ae.parseRegion(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let x=ae.clampRegion(n,o);if(!x)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"+ae.screenListDesc(n));a=x.region,l=x.clipped?x: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=ae.tmpFile("png");await vO(u,c);let d=await ae.imageSize(u),f=a?a.width:r.width||d.width,p=a?a.height:r.height||d.height,m=ae.clamp(e.maxWidth||ae.DEFAULT_MAX_WIDTH,320,4096),h=Math.min(f,m),k=u;if(d.width>h){let x=ae.tmpFile("jpg"),T=Ue("convert")||Ue("magick");try{if(!T)throw new Error("\u6CA1\u6709 ImageMagick");await be(T,[u,"-resize",h+"x","-quality","65",x],{timeoutMs:Mr});try{ct.unlinkSync(u)}catch{}k=x}catch{try{ct.unlinkSync(x)}catch{}}}return _O(k,r,a,f,p,l,i)}async function _O(t,e,n,s,r,o,i){let a=await ae.imageSize(t),l=ct.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 ae.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 b0(t){let e=[];return String(t||"").split(`
282
+ `).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 y0(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 Pi(){vn();let t=Ue("xrandr");if(t)try{let s=await be(t,["--listmonitors"],{timeoutMs:8e3}),r=g0(s.stdout);if(r.length)return r}catch{}let e=Ue("xdpyinfo");if(e)try{let s=await be(e,[],{timeoutMs:8e3}),r=y0(s.stdout);if(r)return[r]}catch{}if($n().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 p0(t){return Math.max(2,Math.round(t/2)*2)}async function vO(t,e){let n=$n(),s={x:Math.round(e.x),y:Math.round(e.y),width:p0(e.width),height:p0(e.height)},r=[];if(n.kind==="x11"){let o=Ue("ffmpeg");if(o)try{if(await be(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:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024)return"ffmpeg";r.push("ffmpeg \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let i=Ue("import");if(i)try{if(await be(i,["-silent","-window","root","-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024)return"import";r.push("import \u8F93\u51FA\u4E3A\u7A7A")}catch(l){r.push(l.message)}let a=Ue("scrot");if(a)try{if(await be(a,["-o","-z","-a",[s.x,s.y,s.width,s.height].join(","),t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.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=Ue("grim");if(o)try{if(await be(o,["-g",s.x+","+s.y+" "+s.width+"x"+s.height,t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024)return"grim";r.push("grim \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}let i=Ue("gnome-screenshot");if(i)try{if(await be(i,["-f",t],{timeoutMs:Mr}),ct.existsSync(t)&&ct.statSync(t).size>1024){let l=(await Pi().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=Ue("convert")||Ue("magick");if(u){let d=ae.tmpFile("png");await be(u,[t,"-crop",s.width+"x"+s.height+"+"+s.x+"+"+s.y,"+repage",d],{timeoutMs:Mr});try{ct.renameSync(d,t)}catch{}}}return"gnome-screenshot"}r.push("gnome-screenshot \u8F93\u51FA\u4E3A\u7A7A")}catch(a){r.push(a.message)}}try{ct.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 w0(t){vn();let e=t||{},n=await Pi(),s=ae.num(e.display,1),r=n[s-1]||n[0];if(!r)throw new Error("\u8BFB\u4E0D\u5230\u5C4F\u5E55\u4FE1\u606F");let o=ae.parseRegion(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let x=ae.clampRegion(n,o);if(!x)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"+ae.screenListDesc(n));a=x.region,l=x.clipped?x: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=ae.tmpFile("png");await vO(u,c);let d=await ae.imageSize(u),f=a?a.width:r.width||d.width,p=a?a.height:r.height||d.height,m=ae.clamp(e.maxWidth||ae.DEFAULT_MAX_WIDTH,320,4096),h=Math.min(f,m),k=u;if(d.width>h){let x=ae.tmpFile("jpg"),T=Ue("convert")||Ue("magick");try{if(!T)throw new Error("\u6CA1\u6709 ImageMagick");await be(T,[u,"-resize",h+"x","-quality","65",x],{timeoutMs:Mr});try{ct.unlinkSync(u)}catch{}k=x}catch{try{ct.unlinkSync(x)}catch{}}}return _O(k,r,a,f,p,l,i)}async function _O(t,e,n,s,r,o,i){let a=await ae.imageSize(t),l=ct.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 ae.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 b0(t){let e=[];return String(t||"").split(`
283
283
  `).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 TO(t){vn();let e=t||{},n=Ue("wmctrl"),s=[];if(n){let a=await be(n,["-lG"],{timeoutMs:8e3});s=b0(a.stdout)}else{let a=Ue("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 be(a,["search","--onlyvisible","--name",""],{timeoutMs:8e3})).stdout.split(`
284
284
  `).map(function(u){return u.trim()}).filter(Boolean);for(let u of c.slice(0,60))try{let d=await be(a,["getwindowgeometry","--shell",u],{timeoutMs:5e3}),f={};d.stdout.split(`
285
285
  `).forEach(function(m){let h=m.match(/^([A-Z_]+)=(-?\d+)$/);h&&(f[h[1]]=Number(h[2]))});let p=await be(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=ae.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 k0(){vn();let t=Cr(),e=await be(t,["getactivewindow"],{timeoutMs:6e3}).catch(function(){return{stdout:""}}),n=String(e.stdout||"").trim();if(!n)return{name:"",bundleId:"",pid:0};let s=await be(t,["getwindowname",n],{timeoutMs:6e3}).catch(function(){return{stdout:""}}),r=await be(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 MO(){vn();let t=Cr(),e=await be(t,["getmouselocation","--shell"],{timeoutMs:6e3}),n={x:0,y:0};return e.stdout.split(`
286
286
  `).forEach(function(s){let r=s.match(/^([XY])=(-?\d+)$/);r&&(n[r[1].toLowerCase()]=Number(r[2]))}),n}function x0(t){let e=String(t||"").split(`
287
287
  `),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 CO(t){vn();let e=t||{},n=e.shot||await w0({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=ae.clamp(e.maxChars||6e3,500,2e4),r=Ue("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 be(r,[n.file,"stdout","-l","chi_sim+eng","tsv"],{timeoutMs:f0})).stdout}catch{o=(await be(r,[n.file,"stdout","-l","eng","tsv"],{timeoutMs:f0})).stdout}let i=x0(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:ae.formatOcr(i,n,s,bf,"\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 hf={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},gf={"!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/","~":"`"},yf={shift:1,ctrl:2,control:2,alt:4,option:4,opt:4,cmd:8,command:8,meta:8,super:8,win:8},AO={1:"shift",2:"ctrl",4:"alt",8:"super"},OO={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 wf(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===`
288
288
  `||e==="\r")return{code:65293,shift:!1};if(e===" ")return{code:65289,shift:!1};if(gf[e])return{code:gf[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 S0(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=yf[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)?wf(n):null,i=hf[r]!=null?{code:hf[r],shift:!1}:null,a=o||i||wf(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?yf.shift:0)}}function v0(t){let e=[];for(let s of[2,4,8,1])t.flags&s&&e.push(AO[s]);let n=OO[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 Ei(t,e){let n=await Pi();if(!ae.pointOnScreen(n,t,e))throw new Error("\u5750\u6807 ("+t+", "+e+") \u4E0D\u5728\u4EFB\u4F55\u5C4F\u5E55\u4E0A\uFF1B\u5F53\u524D\u5C4F\u5E55\uFF1A"+ae.screenListDesc(n))}async function EO(t){vn();let e=t||{},n=ae.toScreenPoint(e.x,e.y,e);await Ei(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=Cr();await be(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 be(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 PO(t){vn();let e=t||{},n=ae.toScreenPoint(e.x,e.y,e);if(await Ei(n.x,n.y),!e.dry){let s=Cr();await be(s,["mousemove","--sync",String(n.x),String(n.y)],{timeoutMs:6e3})}return"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function jO(t){vn();let e=t||{},n=ae.toScreenPoint(e.x,e.y,e),s=ae.toScreenPoint(e.toX,e.toY,e);if(await Ei(n.x,n.y),await Ei(s.x,s.y),!e.dry){let r=Cr();await be(r,["mousemove","--sync",String(n.x),String(n.y)],{timeoutMs:6e3}),await be(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 be(r,["mousemove","--sync",String(i),String(a)],{timeoutMs:6e3})}await be(r,["mouseup","1"],{timeoutMs:6e3})}return"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function NO(t){vn();let e=t||{},n=ae.toScreenPoint(e.x,e.y,e);await Ei(n.x,n.y);let s=ae.num(e.dy,0),r=ae.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=Cr();await be(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 be(o,["click","--repeat",String(i),String(a)],{timeoutMs:8e3}),r&&await be(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 FO(t){vn();let e=t||{},n=S0(e.keys);if(!e.dry){let s=Cr();await be(s,["key","--clearmodifiers",v0(n)],{timeoutMs:8e3})}return"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function IO(t){vn();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=Ue("xdotool");if(o)n&&await be(o,["type","--clearmodifiers","--delay","12","--",n],{timeoutMs:3e4}),e.submit&&await be(o,["key","--clearmodifiers","Return"],{timeoutMs:6e3}),s="xdotool \u9010\u5B57\u8F93\u5165 "+Array.from(n).length+" \u4E2A\u5B57\u7B26";else{let i=Ue("wtype");if(!i)throw new Error("\u6253\u5B57\u9700\u8981 xdotool\uFF08X11\uFF09\u6216 wtype\uFF08Wayland\uFF09\u3002Ubuntu\uFF1Asudo apt install xdotool");n&&await be(i,["--",n],{timeoutMs:3e4}),e.submit&&await be(i,["-k","Return"],{timeoutMs:6e3}),s="wtype \u8F93\u5165 "+Array.from(n).length+" \u4E2A\u5B57\u7B26\uFF08Wayland\uFF09"}}let r=await k0().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?`
289
- \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}function LO(t){return ae.describeShot(t,bf)}function DO(t,e,n,s){return ae.formatOcr(t,e,n,bf,s)}async function RO(){let t={ok:!1,platform:"linux",session:Jn().kind,screenshot:"",input:"",screens:[],notes:[]};if(!m0)return t.notes.push("\u5F53\u524D\u5E73\u53F0\u4E0D\u662F Linux"),t;let e=kf();t.screenshot=pf()?nn.basename(pf()):"",t.input=mf()?nn.basename(mf()):"",t.tools={x11Shot:e.x11Shot?nn.basename(e.x11Shot):"",waylandShot:e.waylandShot?nn.basename(e.waylandShot):"",xdotool:e.xdotool?nn.basename(e.xdotool):"",wtype:e.wtype?nn.basename(e.wtype):"",wmctrl:e.wmctrl?nn.basename(e.wmctrl):"",tesseract:e.tesseract?nn.basename(e.tesseract):""},!t.screenshot&&Jn().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&&Jn().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"),Jn().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 Pi()}catch(n){t.notes.push(String(n.message||n))}return Ue("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}_0.exports={available:h0,check:RO,screens:Pi,capture:w0,windows:TO,frontmost:k0,cursor:MO,ocr:CO,click:EO,move:PO,drag:jO,scroll:NO,type:IO,key:FO,parseKeys:S0,charToKey:wf,keySpecOf:v0,parseXrandr:g0,parseXdpyinfo:y0,parseWmctrl:b0,parseTsv:x0,describeShot:LO,formatOcr:DO,clipText:ae.clipText,parseRegion:ae.parseRegion,clampRegion:ae.clampRegion,imageSize:ae.imageSize,lastShotInfo:ae.lastShotInfo,num:ae.num,clamp:ae.clamp,toScreenPoint:ae.toScreenPoint,pointOnScreen:ae.pointOnScreen,screenListDesc:ae.screenListDesc,fmtSize:ae.fmtSize,signed:ae.signed,ensureTmpDir:ae.ensureTmpDir,pruneTmp:ae.pruneTmp,tmpFile:ae.tmpFile,KEY_CODES:hf,FLAGS:yf,SHIFT_CHARS:gf,TMP_DIR:ae.TMP_DIR,DEFAULT_MAX_WIDTH:ae.DEFAULT_MAX_WIDTH}});var K0=Z((LI,W0)=>{var qO=require("crypto"),sn=require("fs"),C0=require("os"),ji=require("path"),{execFile:BO,spawn:UO}=require("child_process"),WO=Cl(),{num:Ol,clamp:mo,parseRegion:A0,clampRegion:O0,imageSize:E0,lastShotInfo:KO,setLastShot:HO,pointOnScreen:P0,toScreenPoint:ho,fmtSize:zO,screenListDesc:vf,signed:GO,describeShot:JO,formatOcr:j0,clipText:$O,ensureTmpDir:XO,pruneTmp:VO,tmpFile:N0,DEFAULT_MAX_WIDTH:F0,TMP_DIR:YO}=WO,ZO=process.platform==="win32",QO=6e4,M0=2e4,eE=3e4,_f={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},Tf=`using System;
289
+ \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}function LO(t){return ae.describeShot(t,bf)}function DO(t,e,n,s){return ae.formatOcr(t,e,n,bf,s)}async function RO(){let t={ok:!1,platform:"linux",session:$n().kind,screenshot:"",input:"",screens:[],notes:[]};if(!m0)return t.notes.push("\u5F53\u524D\u5E73\u53F0\u4E0D\u662F Linux"),t;let e=kf();t.screenshot=pf()?nn.basename(pf()):"",t.input=mf()?nn.basename(mf()):"",t.tools={x11Shot:e.x11Shot?nn.basename(e.x11Shot):"",waylandShot:e.waylandShot?nn.basename(e.waylandShot):"",xdotool:e.xdotool?nn.basename(e.xdotool):"",wtype:e.wtype?nn.basename(e.wtype):"",wmctrl:e.wmctrl?nn.basename(e.wmctrl):"",tesseract:e.tesseract?nn.basename(e.tesseract):""},!t.screenshot&&$n().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&&$n().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"),$n().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 Pi()}catch(n){t.notes.push(String(n.message||n))}return Ue("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}_0.exports={available:h0,check:RO,screens:Pi,capture:w0,windows:TO,frontmost:k0,cursor:MO,ocr:CO,click:EO,move:PO,drag:jO,scroll:NO,type:IO,key:FO,parseKeys:S0,charToKey:wf,keySpecOf:v0,parseXrandr:g0,parseXdpyinfo:y0,parseWmctrl:b0,parseTsv:x0,describeShot:LO,formatOcr:DO,clipText:ae.clipText,parseRegion:ae.parseRegion,clampRegion:ae.clampRegion,imageSize:ae.imageSize,lastShotInfo:ae.lastShotInfo,num:ae.num,clamp:ae.clamp,toScreenPoint:ae.toScreenPoint,pointOnScreen:ae.pointOnScreen,screenListDesc:ae.screenListDesc,fmtSize:ae.fmtSize,signed:ae.signed,ensureTmpDir:ae.ensureTmpDir,pruneTmp:ae.pruneTmp,tmpFile:ae.tmpFile,KEY_CODES:hf,FLAGS:yf,SHIFT_CHARS:gf,TMP_DIR:ae.TMP_DIR,DEFAULT_MAX_WIDTH:ae.DEFAULT_MAX_WIDTH}});var K0=Z((LI,W0)=>{var qO=require("crypto"),sn=require("fs"),C0=require("os"),ji=require("path"),{execFile:BO,spawn:UO}=require("child_process"),WO=Cl(),{num:Ol,clamp:mo,parseRegion:A0,clampRegion:O0,imageSize:E0,lastShotInfo:KO,setLastShot:HO,pointOnScreen:P0,toScreenPoint:ho,fmtSize:zO,screenListDesc:vf,signed:GO,describeShot:JO,formatOcr:j0,clipText:$O,ensureTmpDir:XO,pruneTmp:VO,tmpFile:N0,DEFAULT_MAX_WIDTH:F0,TMP_DIR:YO}=WO,ZO=process.platform==="win32",QO=6e4,M0=2e4,eE=3e4,_f={short:"\u50CF\u7D20",long:"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20",mid:"\u5C4F\u5E55\u50CF\u7D20"},Tf=`using System;
290
290
  using System.Collections.Generic;
291
291
  using System.Drawing;
292
292
  using System.Drawing.Drawing2D;
@@ -740,7 +740,7 @@ class Program {
740
740
  `;function tE(){let t=process.env.WINDIR||"C:\\Windows";return[ji.join(t,"Microsoft.NET","Framework64","v4.0.30319","csc.exe"),ji.join(t,"Microsoft.NET","Framework","v4.0.30319","csc.exe")]}function Mf(){return ji.join(C0.homedir(),".luban","bin")}function Cf(){let t=qO.createHash("sha1").update(Tf,"utf8").digest("hex").slice(0,8);return ji.join(Mf(),"luban-cu-"+t+".exe")}function I0(){try{return sn.existsSync(Cf())}catch{return!1}}var po=null;function L0(){let t=Cf();if(I0())return Promise.resolve(t);if(po)return po;let e=Pl();return e.ok?(po=new Promise(function(n,s){let r=tE().filter(function(l){try{return sn.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=ji.join(C0.tmpdir(),"luban-cu-"+process.pid+"-"+Date.now()+".cs"),i=t+".tmp-"+process.pid;try{sn.mkdirSync(Mf(),{recursive:!0}),sn.writeFileSync(o,"\uFEFF"+Tf,"utf8")}catch(l){s(new Error("\u5199\u4E0D\u4E86\u4E34\u65F6\u6587\u4EF6\uFF1A"+(l&&l.message||l)));return}function a(){try{sn.rmSync(o,{force:!0})}catch{}try{sn.rmSync(i,{force:!0})}catch{}}BO(r,["/nologo","/target:exe","/reference:System.Drawing.dll","/reference:System.Web.Extensions.dll","/out:"+i,o],{timeout:QO,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{sn.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)})}),po.then(function(){},function(){po=null}),po):Promise.reject(new Error(e.reason))}function zt(t,e){return L0().then(function(n){return new Promise(function(s,r){let o;try{o=UO(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||M0)+"ms\uFF09"))},e||M0);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(`
741
741
  `).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 Pl(){return ZO?{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 Tn(){let t=Pl();if(!t.ok)throw new Error(t.reason)}async function jl(){Tn();let t=await zt({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 Ni(t,e){let n=await jl();if(!P0(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"+vf(n))}async function Af(t){Tn();let e=t||{},n=await jl(),s=Ol(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=A0(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let T=O0(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"+vf(n));a=T.region,l=T.clipped?T:null}let c=N0("jpg"),u={action:"capture",file:c,maxWidth:mo(e.maxWidth||F0,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 zt(u,eE)}catch(T){try{sn.unlinkSync(c)}catch{}throw new Error("\u622A\u5C4F\u5931\u8D25\uFF1A"+T.message)}let d=null;try{d=sn.statSync(c)}catch{d=null}if(!d||d.size<128){try{sn.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 E0(c)}catch{f={width:0,height:0}}if(!(f.width>0&&f.height>0)){try{sn.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,k=a?a.x:r.x,x=a?a.y:r.y;return HO({file:c,width:f.width,height:f.height,pointWidth:p,pointHeight:m,ratio:h,originX:k,originY:x,clipped:!!(l&&l.clipped),requestedRegion:l?l.requested:null,displayIgnored:i,at:Date.now()}),{file:c,dataUrl:"data:image/jpeg;base64,"+sn.readFileSync(c).toString("base64"),width:f.width,height:f.height,pointWidth:p,pointHeight:m,ratio:h,originX:k,originY:x,screen:r,region:a,clipped:!!(l&&l.clipped),requestedRegion:l?l.requested:null,displayIgnored:i}}async function nE(t){Tn();let n=mo((t||{}).limit||30,1,100),s=await zt({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 D0(){Tn();let t=await zt({action:"frontmost"});return{name:t.name||"",pid:t.pid||0}}async function sE(){Tn();let t=await zt({action:"cursor"});return{x:t.x||0,y:t.y||0}}var _n={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},xf={"!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/","~":"`"},Fi={win:8,cmd:8,command:8,meta:8,super:8,shift:1,ctrl:2,control:2,alt:4,option:4,opt:4},R0=[33,34,35,36,37,38,39,40,45,46,123,124];function q0(t){return R0.indexOf(t)>=0}function El(t){if(t===" ")return{code:32,shift:!1};if(t===`
742
742
  `||t==="\r")return{code:13,shift:!1};if(t===" ")return{code:9,shift:!1};let e=String(t).toLowerCase();if(xf[t]){let n=xf[t];return _n[n]==null?null:{code:_n[n],shift:!0}}return/[A-Z]/.test(t)&&_n[e]!=null?{code:_n[e],shift:!0}:_n[t]!=null?{code:_n[t],shift:!1}:null}function B0(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=Fi[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)?El(n):null)||(_n[r]!=null?{code:_n[r],shift:!1}:El(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?Fi.shift:0)}}function U0(){return zt({action:"clipboardGet"}).then(function(t){return t.text!=null?t.text:null}).catch(function(){return null})}function Sf(t){return zt({action:"clipboardSet",text:String(t)}).then(function(){})}async function rE(t){Tn();let e=t||{},n=e.shot||await Af({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=mo(e.maxChars||6e3,500,2e4);return{text:j0([],n,s,_f,"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 oE(t){Tn();let e=t||{},n=ho(e.x,e.y,e);return await Ni(n.x,n.y),await zt({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 iE(t){Tn();let e=t||{},n=ho(e.x,e.y,e);return await Ni(n.x,n.y),await zt({action:"move",x:n.x,y:n.y,dry:!!e.dry}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function aE(t){Tn();let e=t||{},n=ho(e.x,e.y,e),s=ho(e.toX,e.toY,e);return await Ni(n.x,n.y),await Ni(s.x,s.y),await zt({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 lE(t){Tn();let e=t||{},n=ho(e.x,e.y,e);await Ni(n.x,n.y);let s=Ol(e.dy,0),r=Ol(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 zt({action:"scroll",x:n.x,y:n.y,dy:mo(s,-5e3,5e3),dx:mo(r,-5e3,5e3),dry:!!e.dry}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function cE(t){Tn();let e=t||{},n=B0(e.keys);return await zt({action:"key",code:n.code,flags:n.flags,ext:q0(n.code),dry:!!e.dry}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function uE(t){Tn();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(El),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?Fi.shift:0,ext:q0(c.code)}});e.submit&&l.push({code:_n.return,flags:0,ext:!1}),l.length&&await zt({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 U0();e.dry||await Sf(n);let c=[{code:_n.v,flags:Fi.ctrl,ext:!1}];e.submit&&c.push({code:_n.return,flags:0,ext:!1}),await zt({action:"type",codes:c,dry:!!e.dry}),!e.dry&&l!=null&&setTimeout(function(){Sf(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await D0().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?`
743
- \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function dE(){let t=Pl(),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 jl()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Af({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{sn.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 fE(t){return JO(t,_f)}W0.exports={available:Pl,check:dE,screens:jl,capture:Af,describeShot:fE,windows:nE,frontmost:D0,cursor:sE,ocr:rE,click:oE,move:iE,drag:aE,scroll:lE,type:uE,key:cE,parseKeys:B0,charToKey:El,formatOcr:j0,clipText:$O,readClipboard:U0,writeClipboard:Sf,parseRegion:A0,clampRegion:O0,imageSize:E0,lastShotInfo:KO,num:Ol,clamp:mo,toScreenPoint:ho,pointOnScreen:P0,screenListDesc:vf,fmtSize:zO,signed:GO,ensureTmpDir:XO,pruneTmp:VO,tmpFile:N0,KEY_CODES:_n,FLAGS:Fi,SHIFT_CHARS:xf,EXT_KEYS:R0,WIN_UNIT:_f,CSHARP_SRC:Tf,binDir:Mf,binaryPath:Cf,hasBinary:I0,ensureBinary:L0,TMP_DIR:YO,DEFAULT_MAX_WIDTH:F0}});var tk=Z((DI,ek)=>{var go=require("fs"),{execFile:Nf}=require("child_process"),pE=Cl(),{num:Nl,clamp:yo,parseRegion:J0,clampRegion:$0,imageSize:Ff,lastShotInfo:mE,setLastShot:hE,pointOnScreen:X0,toScreenPoint:wo,fmtSize:gE,screenListDesc:If,signed:yE,describeShot:wE,formatOcr:V0,clipText:bE,ensureTmpDir:kE,pruneTmp:xE,tmpFile:Of,DEFAULT_MAX_WIDTH:Y0,TMP_DIR:SE}=pE,vE=process.platform==="darwin",H0=2e4,$n=2e4,_E=6e4;function Ef(t,e,n){let s=n||{};return new Promise(function(r,o){Nf(t,e,{timeout:s.timeoutMs||$n,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 rn(t,e){let n=e||{};return new Promise(function(s,r){let o=Nf("osascript",["-l","JavaScript"],{timeout:n.timeoutMs||$n,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 Lf(){return vE?{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 Cn(){let t=Lf();if(!t.ok)throw new Error(t.reason)}async function Il(){Cn();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(`
743
+ \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function dE(){let t=Pl(),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 jl()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Af({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{sn.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 fE(t){return JO(t,_f)}W0.exports={available:Pl,check:dE,screens:jl,capture:Af,describeShot:fE,windows:nE,frontmost:D0,cursor:sE,ocr:rE,click:oE,move:iE,drag:aE,scroll:lE,type:uE,key:cE,parseKeys:B0,charToKey:El,formatOcr:j0,clipText:$O,readClipboard:U0,writeClipboard:Sf,parseRegion:A0,clampRegion:O0,imageSize:E0,lastShotInfo:KO,num:Ol,clamp:mo,toScreenPoint:ho,pointOnScreen:P0,screenListDesc:vf,fmtSize:zO,signed:GO,ensureTmpDir:XO,pruneTmp:VO,tmpFile:N0,KEY_CODES:_n,FLAGS:Fi,SHIFT_CHARS:xf,EXT_KEYS:R0,WIN_UNIT:_f,CSHARP_SRC:Tf,binDir:Mf,binaryPath:Cf,hasBinary:I0,ensureBinary:L0,TMP_DIR:YO,DEFAULT_MAX_WIDTH:F0}});var tk=Z((DI,ek)=>{var go=require("fs"),{execFile:Nf}=require("child_process"),pE=Cl(),{num:Nl,clamp:yo,parseRegion:J0,clampRegion:$0,imageSize:Ff,lastShotInfo:mE,setLastShot:hE,pointOnScreen:X0,toScreenPoint:wo,fmtSize:gE,screenListDesc:If,signed:yE,describeShot:wE,formatOcr:V0,clipText:bE,ensureTmpDir:kE,pruneTmp:xE,tmpFile:Of,DEFAULT_MAX_WIDTH:Y0,TMP_DIR:SE}=pE,vE=process.platform==="darwin",H0=2e4,Xn=2e4,_E=6e4;function Ef(t,e,n){let s=n||{};return new Promise(function(r,o){Nf(t,e,{timeout:s.timeoutMs||Xn,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 rn(t,e){let n=e||{};return new Promise(function(s,r){let o=Nf("osascript",["-l","JavaScript"],{timeout:n.timeoutMs||Xn,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 Lf(){return vE?{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 Cn(){let t=Lf();if(!t.ok)throw new Error(t.reason)}async function Il(){Cn();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
744
  `),e=await rn(t,{timeoutMs:15e3}),n=[];try{n=JSON.parse(e)}catch{n=[]}return Array.isArray(n)?n:[]}async function Ii(t,e){let n=await Il();if(!X0(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"+If(n))}var Di=['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(`
745
745
  `);function Ri(t){return t?1:0}function TE(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[Di,"var DRY = "+Ri(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(`
746
746
  `)}function ME(t){return[Di,"var DRY = "+Ri(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(`
@@ -752,10 +752,10 @@ class Program {
752
752
  `+n+`
753
753
  ];`,"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(`
754
754
  `)}function OE(){return Ef("pbpaste",[],{timeoutMs:5e3}).then(function(t){return t.stdout}).catch(function(){return null})}function z0(t){return new Promise(function(e,n){let s=Nf("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 Df(t){Cn();let e=t||{},n=await Il(),s=Nl(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=J0(e.region),i=o&&e.display!=null?s:null,a=o,l=null;if(o){let x=$0(n,o);if(!x)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"+If(n));a=x.region,l=x.clipped?x:null}let c=Of("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 Ef("/usr/sbin/screencapture",u,{timeoutMs:H0})}catch(x){let T=/permission|not permitted|could not create image|cannot/i.test(x.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"+x.message+T)}let d=null;try{d=go.statSync(c)}catch{d=null}if(!d||d.size<1024){try{go.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 Ff(c),p=a?a.width:r.width,m=a?a.height:r.height,h=yo(e.maxWidth||Y0,320,4096),k=Math.min(p,h);if(f.width>k){let x=Of("jpg");try{await Ef("/usr/bin/sips",["-s","format","jpeg","-s","formatOptions","65","--resampleWidth",String(k),c,"--out",x],{timeoutMs:H0});try{go.unlinkSync(c)}catch{}return await G0(x,r,a,p,m,l,i)}catch{try{go.unlinkSync(x)}catch{}}}return await G0(c,r,a,p,m,l,i)}async function G0(t,e,n,s,r,o,i){let a=await Ff(t),l=go.readFileSync(t),c=a.width>0?s/a.width:1,u=n?n.x:e.x,d=n?n.y:e.y;return hE({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 EE(t){Cn();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(`
755
- `),s=await rn(n,{timeoutMs:$n}),r=[];try{r=JSON.parse(s)}catch{r=[]}Array.isArray(r)||(r=[]);let o=yo(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 Q0(){Cn();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(`
755
+ `),s=await rn(n,{timeoutMs:Xn}),r=[];try{r=JSON.parse(s)}catch{r=[]}Array.isArray(r)||(r=[]);let o=yo(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 Q0(){Cn();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
756
  `),e=await rn(t,{timeoutMs:15e3});try{return JSON.parse(e)}catch{return{name:"",bundleId:"",pid:0}}}async function PE(){Cn();let t=['ObjC.import("CoreGraphics");',"var p = $.CGEventGetLocation($.CGEventCreate($()));","JSON.stringify({ x: p.x, y: p.y });"].join(`
757
757
  `),e=await rn(t,{timeoutMs:15e3});try{return JSON.parse(e)}catch{return{x:0,y:0}}}async function jE(t){Cn();let e=t||{},n=e.shot||await Df({region:e.region,display:e.display,maxWidth:e.maxWidth}),s=yo(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(`
758
- `),o=await rn(r,{timeoutMs:_E}),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:V0(i,n,s),items:i.length,shot:n}}async function NE(t){Cn();let e=t||{},n=wo(e.x,e.y,e);return await Ii(n.x,n.y),await rn(TE({x:n.x,y:n.y,button:e.button==="right"?"right":"left",count:e.count===2?2:1,dry:e.dry}),{timeoutMs:$n}),(e.button==="right"?"\u53F3\u952E":e.count===2?"\u53CC\u51FB":"\u5355\u51FB")+" ("+n.x+", "+n.y+")\u3002"}async function FE(t){Cn();let e=t||{},n=wo(e.x,e.y,e);return await Ii(n.x,n.y),await rn(ME({x:n.x,y:n.y,dry:e.dry}),{timeoutMs:$n}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function IE(t){Cn();let e=t||{},n=wo(e.x,e.y,e),s=wo(e.toX,e.toY,e);return await Ii(n.x,n.y),await Ii(s.x,s.y),await rn(CE({x:n.x,y:n.y,toX:s.x,toY:s.y,dry:e.dry}),{timeoutMs:$n}),"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function LE(t){Cn();let e=t||{},n=wo(e.x,e.y,e);await Ii(n.x,n.y);let s=Nl(e.dy,0),r=Nl(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 rn(AE({x:n.x,y:n.y,dy:yo(s,-5e3,5e3),dx:yo(r,-5e3,5e3),dry:e.dry}),{timeoutMs:$n}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function DE(t){Cn();let e=t||{},n=Z0(e.keys);return await rn(jf([n],e.dry),{timeoutMs:$n}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function RE(t){Cn();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(Fl),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?Li.shift:0}});e.submit&&l.push({code:Mn.return,flags:0}),l.length&&await rn(jf(l,e.dry),{timeoutMs:$n}),i="\u6309\u952E\u7801\u8F93\u5165 "+s.length+" \u4E2A\u5B57\u7B26"}else{let l=e.dry?null:await OE();e.dry||await z0(n);let u=[{code:Mn.v,flags:Li.cmd}];e.submit&&u.push({code:Mn.return,flags:0}),await rn(jf(u,e.dry),{timeoutMs:$n}),!e.dry&&l!=null&&setTimeout(function(){z0(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await Q0().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?`
758
+ `),o=await rn(r,{timeoutMs:_E}),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:V0(i,n,s),items:i.length,shot:n}}async function NE(t){Cn();let e=t||{},n=wo(e.x,e.y,e);return await Ii(n.x,n.y),await rn(TE({x:n.x,y:n.y,button:e.button==="right"?"right":"left",count:e.count===2?2:1,dry:e.dry}),{timeoutMs:Xn}),(e.button==="right"?"\u53F3\u952E":e.count===2?"\u53CC\u51FB":"\u5355\u51FB")+" ("+n.x+", "+n.y+")\u3002"}async function FE(t){Cn();let e=t||{},n=wo(e.x,e.y,e);return await Ii(n.x,n.y),await rn(ME({x:n.x,y:n.y,dry:e.dry}),{timeoutMs:Xn}),"\u5149\u6807\u5DF2\u79FB\u5230 ("+n.x+", "+n.y+")\u3002"}async function IE(t){Cn();let e=t||{},n=wo(e.x,e.y,e),s=wo(e.toX,e.toY,e);return await Ii(n.x,n.y),await Ii(s.x,s.y),await rn(CE({x:n.x,y:n.y,toX:s.x,toY:s.y,dry:e.dry}),{timeoutMs:Xn}),"\u5DF2\u4ECE ("+n.x+", "+n.y+") \u62D6\u5230 ("+s.x+", "+s.y+")\u3002"}async function LE(t){Cn();let e=t||{},n=wo(e.x,e.y,e);await Ii(n.x,n.y);let s=Nl(e.dy,0),r=Nl(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 rn(AE({x:n.x,y:n.y,dy:yo(s,-5e3,5e3),dx:yo(r,-5e3,5e3),dry:e.dry}),{timeoutMs:Xn}),"\u5728 ("+n.x+", "+n.y+") \u6EDA\u52A8 dy="+s+(r?" dx="+r:"")+"\u3002"}async function DE(t){Cn();let e=t||{},n=Z0(e.keys);return await rn(jf([n],e.dry),{timeoutMs:Xn}),"\u5DF2\u6309\u952E\uFF1A"+String(e.keys)}async function RE(t){Cn();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(Fl),o=r.every(Boolean),i="";if(o){let l=r.map(function(c){return{code:c.code,flags:c.shift?Li.shift:0}});e.submit&&l.push({code:Mn.return,flags:0}),l.length&&await rn(jf(l,e.dry),{timeoutMs:Xn}),i="\u6309\u952E\u7801\u8F93\u5165 "+s.length+" \u4E2A\u5B57\u7B26"}else{let l=e.dry?null:await OE();e.dry||await z0(n);let u=[{code:Mn.v,flags:Li.cmd}];e.submit&&u.push({code:Mn.return,flags:0}),await rn(jf(u,e.dry),{timeoutMs:Xn}),!e.dry&&l!=null&&setTimeout(function(){z0(l).catch(function(){})},400),i="\u7ECF\u526A\u8D34\u677F\u7C98\u8D34 "+s.length+" \u4E2A\u5B57\u7B26\uFF08\u542B\u975E ASCII\uFF09"}let a=await Q0().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
759
  \u6587\u672C\u9884\u89C8\uFF1A`+JSON.stringify(n.slice(0,80)):"")}async function qE(){let t=Lf(),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 Il()}catch(n){e.notes.push("\u8BFB\u5C4F\u5E55\u4FE1\u606F\u5931\u8D25\uFF1A"+n.message)}try{let n=await Df({region:"0,0,60,60",maxWidth:320});e.screenRecording=!!n&&n.width>0;try{go.unlinkSync(n.file)}catch{}}catch(n){e.notes.push("\u622A\u5C4F\u4E0D\u53EF\u7528\uFF1A"+n.message)}try{let n=await rn('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}ek.exports={available:Lf,check:qE,screens:Il,capture:Df,describeShot:wE,windows:EE,frontmost:Q0,cursor:PE,ocr:jE,click:NE,move:FE,drag:IE,scroll:LE,type:RE,key:DE,parseKeys:Z0,charToKey:Fl,formatOcr:V0,clipText:bE,parseRegion:J0,clampRegion:$0,imageSize:Ff,lastShotInfo:mE,num:Nl,clamp:yo,toScreenPoint:wo,pointOnScreen:X0,screenListDesc:If,fmtSize:gE,signed:yE,ensureTmpDir:kE,pruneTmp:xE,tmpFile:Of,KEY_CODES:Mn,FLAGS:Li,SHIFT_CHARS:Pf,TMP_DIR:SE,DEFAULT_MAX_WIDTH:Y0}});var rk=Z((RI,Bf)=>{var nk={pending:1,in_progress:1,completed:1,cancelled:1},BE=/^#{1,6}\s*(?:步骤|steps?)(?:\s|[::((]|$)/i,UE=/^\s*(?:[-*·]|\d+[.)、])\s+(?:\[[ xX/~-]\]\s+)?(.+?)\s*$/;function sk(t){let e=String(t??"").replace(/\s+/g," ").trim();return e?e.length>200?e.slice(0,200):e:""}function WE(t){let e=String(t??"").trim().toLowerCase();return nk[e]?e:"pending"}function qi(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(BE.test(a)){s=!0;continue}if(s)break}if(!s||!a)continue;let l=UE.exec(i);if(!l)continue;let c=sk(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=sk(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:WE(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 Rf(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 KE(t){return t==="completed"?"[x]":t==="in_progress"?"[-]":t==="cancelled"?"[~]":"[ ]"}function qf(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("- "+KE(r.status)+" "+r.id+": "+r.content)}return n.join(`
760
760
  `)}Bf.exports={STATUSES:nk,parsePlanSteps:qi,normalize:bo,merge:Rf,formatBlock:qf};if(require.main===Bf){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(`
761
761
  `),r=qi(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(qi("").length===0,"empty"),t(qi(`## \u76EE\u6807
@@ -822,8 +822,8 @@ Plugins run on this machine with your permissions. After installing, you still h
822
822
  \u30BD\u30FC\u30B9\uFF1A{repo}
823
823
  \u30EC\u30D3\u30E5\u30FC\u72B6\u614B\uFF1A{review}
824
824
 
825
- \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,k=(e[m]||e["zh-cn"])[f];return k==null&&(k=e["zh-cn"][f]),k==null?f:(p&&(k=String(k).replace(/\{(\w+)\}/g,function(x,T){return p[T]==null?x:String(p[T])})),k)}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 Wi<"u"&&Wi&&Wi.exports&&(Wi.exports=u),t&&(t.LubanI18n=u)})(typeof globalThis<"u"?globalThis:mk)});var kk=Z((BI,bk)=>{"use strict";var Ar=require("path"),Kf=/!\[([^\]]*)\]\(([^()\s]*(?:\([^()\s]*\)[^()\s]*)*)\)/g;function JE(t){let e=[],n=new Set,s=String(t??""),r;for(Kf.lastIndex=0;(r=Kf.exec(s))!==null;){let o=String(r[2]||"").trim();o&&(n.has(o)||(n.add(o),e.push(o)))}return e}function gk(t,e){if(!t||!e)return!1;let n=Ar.resolve(t),s=Ar.resolve(e);if(n===s)return!0;let r=Ar.relative(s,n);return!!r&&!r.startsWith("..")&&!Ar.isAbsolute(r)}function yk(t){let e=String(t||"");return!e||e.startsWith("//")||e.startsWith("data:")||e.startsWith("#")?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)}function wk(t,e,n){let s=String(t??"").trim();if(!s)return{kind:"invalid",url:s};if(yk(s)){if(!/^file:/i.test(s))return{kind:"remote",url:s};let i=s.replace(/^file:\/\//i,"");return wk(i,e,n)}let r=Ar.isAbsolute(s)?Ar.resolve(s):Ar.resolve(String(e||""),s),o=Array.isArray(n)?n:[];for(let i of o)if(gk(r,i))return{kind:"workspace",abs:r,url:s};return{kind:"inline",abs:r,url:s}}bk.exports={extractImageUrls:JE,classifyImage:wk,insideRoot:gk,isRemoteLike:yk,IMG_RE:Kf}});var xv=Z((UI,kv)=>{var b=require("vscode"),P=require("fs"),I=require("path"),tt=require("os"),Xf=require("tls"),{exec:$E,execSync:px}=require("child_process"),cn=qc(),Un=Om(),XE=Pm(),jr=Vc(),VE=Um(),Me=nu(),ln=sh(),pn=ah(),xk=dh(),we=Ch(),Rt=Cu(),Gt=wg(),gs=vg(),rt=Eg(),mx=Ng(),Vs=Hg(),Jl=Xg(),Ys=ly(),Dt=Pu(),On=hy(),bs=wy(),He=vy(),xe=Ay(),pt=Hy(),We=mr(),ys=Vw(),hx=Qo(),Sk=xd(),mn=db(),YE=yb(),gx=Ab(),hn=rf(),Yn=r0(),xa=process.platform==="linux",ZE=process.platform==="darwin",oe=xa?T0():process.platform==="win32"?K0():tk(),Zn=process.platform==="win32",yx=Zn?"Windows":ZE?"macOS":xa?"Linux":"\u4EC5\u652F\u6301 macOS / Windows / Linux",QE=Zn?" \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",na=Zn?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":xa?"\u5C4F\u5E55\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9";function eP(){return Zn?{a:65,p:80,bang:49}:xa?{a:97,p:112,bang:49}:{a:0,p:35,bang:18}}var Xt=rk(),tr=pk(),fs=ll(),wx=hk(),vk=kk(),_k=ja(),tP=lr().SKIP_DIRS,Qn=_k&&_k.version||"0.0.0",$l=process.env.LUBAN_OUT_DIR||"/tmp/luban-ide",nP=$l+"/result.json",at=I.join(tt.homedir(),".luban","providers.json"),$i={startedAt:new Date().toISOString(),steps:[],acks:[]},sP=400,Tk=2e3,vo=null;function bx(){try{P.mkdirSync($l,{recursive:!0}),P.writeFileSync(nP,JSON.stringify($i,null,2))}catch{}}function wp(){vo&&(clearTimeout(vo),vo=null),bx()}function w(t,e){$i.steps.push({step:t,at:new Date().toISOString(),...e}),$i.steps.length>Tk&&$i.steps.splice(0,$i.steps.length-Tk),vo||(vo=setTimeout(function(){vo=null,bx()},sP))}var Vt="",kx=[];function xx(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 Sa(){let t="auto";try{t=b.workspace.getConfiguration("luban").get("language")}catch{}return xx(t,b.env&&b.env.language)}function M(t,e){return wx.t(t,e)}function Xl(t){Vt=wx.setLang(Sa()),Un.setUntitled(M("store.untitled")),iP();try{un&&un.fire()}catch{}try{Rp()}catch{}return w("language_applied",{lang:Vt,reason:t||""}),Vt}function rP(t){for(let e of kx.splice(0))try{e(t)}catch{}}function oP(t){return new Promise(function(e){let n=!1,s=setTimeout(function(){n||(n=!0,e(null))},t||8e3);kx.push(function(r){n||(n=!0,clearTimeout(s),e(r))})})}function iP(){let t=[Se&&Se.webview,de&&de.webview,xt&&xt.webview];for(let e of t)if(e)try{e.postMessage({type:"lang",lang:Vt})}catch(n){w("broadcast_lang_failed",{message:n.message})}}var Sx={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}]}]},Bt=Sx,Oo="builtin",ts=Object.create(null),kt=null,_o=[],vx=40,Vf=Object.create(null),Mk=new Map;function aP(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 Sc(){try{let t=JSON.parse(P.readFileSync(at,"utf8"));if(t&&Array.isArray(t.providers)&&t.providers.length){Bt=aP(t),Oo=at,w("config_loaded",{source:at,providers:t.providers.map(e=>e.id),models:Wn().length});return}}catch(t){w("config_load_failed",{message:t.message,path:at})}Bt=Sx,Oo="builtin"}function lP(){let t=[];for(let e of Bt.providers||[])for(let n of e.models||[])t.push({provider:e,model:n});return t}function Wn(){let t=lP(),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 lt(t){let e=Wn(),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===Bt.defaultModel)||e.find(s=>s.provider.id+"::"+s.model.id===Bt.defaultModel)||e[0]}function Lo(){let t=lt(Bt.defaultModel);return t?t.key:""}function cP(t){try{let e=P.readFileSync(I.join(tt.homedir(),".hermes",".env"),"utf8");for(let n of e.split(`
826
- `)){let s=n.match(new RegExp("^\\s*"+t+"\\s*=\\s*(.+)\\s*$"));if(s)return s[1].trim().replace(/^["']|["']$/g,"")}}catch{}return""}function va(t){let e=t&&t.apiKeyEnv;return e?process.env[e]?String(process.env[e]).trim():cP(e):""}function Vl(t){if(!t)return"";if(t.apiKey)return String(t.apiKey);let e=ts[t.id];return e?String(e):va(t)}var bp="luban-local";function uP(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 Eo(t){return t?t.keyless===!0?!0:uP(t.baseUrl):!1}function Po(t){let e=Vl(t);return e||(Eo(t)?bp:"")}function _x(t){return String(t.baseUrl||"").replace(/\/+$/,"")+"/chat/completions"}var Yf=2e4,kp=3e3,Ck=8e3,dP="https://cn.bing.com/search",Tx="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",Hf=2*1024*1024;function Mx(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 Dn(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 Yl(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 Cx(t){let e=t||{},n=lt(e.modelKey);if(!n)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let s=Yl(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=Po(n.provider);if(!r)throw new Error("provider "+n.provider.id+" \u7F3A\u5C11 API key");let o=n.provider.inlineCompletion||{},i=Jl.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=vc(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 k=await f.text();throw new Error("FIM HTTP "+f.status+": "+String(k).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:Jl.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 fP(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 vc(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 Ax(t){let e=new AbortController,n=vc(t&&t.signal),s=t&&t.timeoutMs||Yf,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 Ox(t,e,n,s){let r=s||{},o=Mx(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=Po(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=vc(r.signal),c=setTimeout(function(){a.abort()},r.timeoutMs||Yf);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||Yf)/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 w("web_http_error",{endpoint:t,status:u.status,body:String(d).slice(0,300)}),new Error(fP(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 pP(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 Ox("/search",a,e,s),u=Array.isArray(c&&c.results)?c.results:[];return w("web_search",{provider:e.provider.id,query:r,count:i,needContent:!!s.needContent,results:u.length}),{query:r,results:u}}async function mP(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 Ox("/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)+`
825
+ \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,k=(e[m]||e["zh-cn"])[f];return k==null&&(k=e["zh-cn"][f]),k==null?f:(p&&(k=String(k).replace(/\{(\w+)\}/g,function(x,T){return p[T]==null?x:String(p[T])})),k)}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 Wi<"u"&&Wi&&Wi.exports&&(Wi.exports=u),t&&(t.LubanI18n=u)})(typeof globalThis<"u"?globalThis:mk)});var kk=Z((BI,bk)=>{"use strict";var Ar=require("path"),Kf=/!\[([^\]]*)\]\(([^()\s]*(?:\([^()\s]*\)[^()\s]*)*)\)/g;function JE(t){let e=[],n=new Set,s=String(t??""),r;for(Kf.lastIndex=0;(r=Kf.exec(s))!==null;){let o=String(r[2]||"").trim();o&&(n.has(o)||(n.add(o),e.push(o)))}return e}function gk(t,e){if(!t||!e)return!1;let n=Ar.resolve(t),s=Ar.resolve(e);if(n===s)return!0;let r=Ar.relative(s,n);return!!r&&!r.startsWith("..")&&!Ar.isAbsolute(r)}function yk(t){let e=String(t||"");return!e||e.startsWith("//")||e.startsWith("data:")||e.startsWith("#")?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)}function wk(t,e,n){let s=String(t??"").trim();if(!s)return{kind:"invalid",url:s};if(yk(s)){if(!/^file:/i.test(s))return{kind:"remote",url:s};let i=s.replace(/^file:\/\//i,"");return wk(i,e,n)}let r=Ar.isAbsolute(s)?Ar.resolve(s):Ar.resolve(String(e||""),s),o=Array.isArray(n)?n:[];for(let i of o)if(gk(r,i))return{kind:"workspace",abs:r,url:s};return{kind:"inline",abs:r,url:s}}bk.exports={extractImageUrls:JE,classifyImage:wk,insideRoot:gk,isRemoteLike:yk,IMG_RE:Kf}});var xv=Z((UI,kv)=>{var b=require("vscode"),P=require("fs"),I=require("path"),tt=require("os"),Xf=require("tls"),{exec:$E,execSync:px}=require("child_process"),cn=qc(),Un=Om(),XE=Pm(),jr=Vc(),VE=Um(),Me=nu(),ln=sh(),pn=ah(),xk=dh(),we=Ch(),Rt=Cu(),Gt=wg(),ys=vg(),rt=Eg(),mx=Ng(),Ys=Hg(),Jl=Xg(),Zs=ly(),Dt=Pu(),On=hy(),ks=wy(),He=vy(),xe=Ay(),pt=Hy(),We=mr(),ws=Vw(),hx=Qo(),Sk=xd(),mn=db(),YE=yb(),gx=Ab(),hn=rf(),Zn=r0(),xa=process.platform==="linux",ZE=process.platform==="darwin",oe=xa?T0():process.platform==="win32"?K0():tk(),Qn=process.platform==="win32",yx=Qn?"Windows":ZE?"macOS":xa?"Linux":"\u4EC5\u652F\u6301 macOS / Windows / Linux",QE=Qn?" \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",na=Qn?"\u5C4F\u5E55\u7269\u7406\u50CF\u7D20":xa?"\u5C4F\u5E55\u50CF\u7D20":"\u5C4F\u5E55\u903B\u8F91\u70B9";function eP(){return Qn?{a:65,p:80,bang:49}:xa?{a:97,p:112,bang:49}:{a:0,p:35,bang:18}}var Xt=rk(),nr=pk(),ps=ll(),wx=hk(),vk=kk(),_k=ja(),tP=lr().SKIP_DIRS,es=_k&&_k.version||"0.0.0",$l=process.env.LUBAN_OUT_DIR||"/tmp/luban-ide",nP=$l+"/result.json",at=I.join(tt.homedir(),".luban","providers.json"),$i={startedAt:new Date().toISOString(),steps:[],acks:[]},sP=400,Tk=2e3,vo=null;function bx(){try{P.mkdirSync($l,{recursive:!0}),P.writeFileSync(nP,JSON.stringify($i,null,2))}catch{}}function wp(){vo&&(clearTimeout(vo),vo=null),bx()}function w(t,e){$i.steps.push({step:t,at:new Date().toISOString(),...e}),$i.steps.length>Tk&&$i.steps.splice(0,$i.steps.length-Tk),vo||(vo=setTimeout(function(){vo=null,bx()},sP))}var Vt="",kx=[];function xx(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 Sa(){let t="auto";try{t=b.workspace.getConfiguration("luban").get("language")}catch{}return xx(t,b.env&&b.env.language)}function M(t,e){return wx.t(t,e)}function Xl(t){Vt=wx.setLang(Sa()),Un.setUntitled(M("store.untitled")),iP();try{un&&un.fire()}catch{}try{Rp()}catch{}return w("language_applied",{lang:Vt,reason:t||""}),Vt}function rP(t){for(let e of kx.splice(0))try{e(t)}catch{}}function oP(t){return new Promise(function(e){let n=!1,s=setTimeout(function(){n||(n=!0,e(null))},t||8e3);kx.push(function(r){n||(n=!0,clearTimeout(s),e(r))})})}function iP(){let t=[Se&&Se.webview,de&&de.webview,xt&&xt.webview];for(let e of t)if(e)try{e.postMessage({type:"lang",lang:Vt})}catch(n){w("broadcast_lang_failed",{message:n.message})}}var Sx={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}]}]},Bt=Sx,Oo="builtin",ns=Object.create(null),kt=null,_o=[],vx=40,Vf=Object.create(null),Mk=new Map;function aP(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 Sc(){try{let t=JSON.parse(P.readFileSync(at,"utf8"));if(t&&Array.isArray(t.providers)&&t.providers.length){Bt=aP(t),Oo=at,w("config_loaded",{source:at,providers:t.providers.map(e=>e.id),models:Wn().length});return}}catch(t){w("config_load_failed",{message:t.message,path:at})}Bt=Sx,Oo="builtin"}function lP(){let t=[];for(let e of Bt.providers||[])for(let n of e.models||[])t.push({provider:e,model:n});return t}function Wn(){let t=lP(),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 lt(t){let e=Wn(),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===Bt.defaultModel)||e.find(s=>s.provider.id+"::"+s.model.id===Bt.defaultModel)||e[0]}function Lo(){let t=lt(Bt.defaultModel);return t?t.key:""}function cP(t){try{let e=P.readFileSync(I.join(tt.homedir(),".hermes",".env"),"utf8");for(let n of e.split(`
826
+ `)){let s=n.match(new RegExp("^\\s*"+t+"\\s*=\\s*(.+)\\s*$"));if(s)return s[1].trim().replace(/^["']|["']$/g,"")}}catch{}return""}function va(t){let e=t&&t.apiKeyEnv;return e?process.env[e]?String(process.env[e]).trim():cP(e):""}function Vl(t){if(!t)return"";if(t.apiKey)return String(t.apiKey);let e=ns[t.id];return e?String(e):va(t)}var bp="luban-local";function uP(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 Eo(t){return t?t.keyless===!0?!0:uP(t.baseUrl):!1}function Po(t){let e=Vl(t);return e||(Eo(t)?bp:"")}function _x(t){return String(t.baseUrl||"").replace(/\/+$/,"")+"/chat/completions"}var Yf=2e4,kp=3e3,Ck=8e3,dP="https://cn.bing.com/search",Tx="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",Hf=2*1024*1024;function Mx(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 Dn(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 Yl(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 Cx(t){let e=t||{},n=lt(e.modelKey);if(!n)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let s=Yl(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=Po(n.provider);if(!r)throw new Error("provider "+n.provider.id+" \u7F3A\u5C11 API key");let o=n.provider.inlineCompletion||{},i=Jl.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=vc(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 k=await f.text();throw new Error("FIM HTTP "+f.status+": "+String(k).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:Jl.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 fP(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 vc(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 Ax(t){let e=new AbortController,n=vc(t&&t.signal),s=t&&t.timeoutMs||Yf,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 Ox(t,e,n,s){let r=s||{},o=Mx(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=Po(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=vc(r.signal),c=setTimeout(function(){a.abort()},r.timeoutMs||Yf);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||Yf)/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 w("web_http_error",{endpoint:t,status:u.status,body:String(d).slice(0,300)}),new Error(fP(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 pP(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 Ox("/search",a,e,s),u=Array.isArray(c&&c.results)?c.results:[];return w("web_search",{provider:e.provider.id,query:r,count:i,needContent:!!s.needContent,results:u.length}),{query:r,results:u}}async function mP(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 Ox("/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)+`
827
827
  \u2026[\u6B63\u6587\u5DF2\u622A\u65AD]`:i;return w("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 hP={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};function ql(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 hP[n]||e})}function fa(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,`
828
828
  `),e=e.replace(/<br\s*\/?>/gi,`
829
829
  `),e=e.replace(/<[^>]+>/g,""),e=ql(e),e.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
@@ -857,12 +857,12 @@ Plugins run on this machine with your permissions. After installing, you still h
857
857
  ---
858
858
  `+x+l.join(`
859
859
 
860
- `),refs:a}}var Wx=tP,FP="**/{"+Wx.join(",")+"}/**",Rl={at:0,files:[],dirs:[]};async function IP(){return(await Ap()).files}async function LP(){return(await Ap()).dirs}async function Ap(){if(Date.now()-Rl.at<5e3)return Rl;let t=L(),e=[];try{e=(await b.workspace.findFiles("**/*",FP,1e3)).map(i=>{let a=I.relative(t,i.fsPath);return!a||a.startsWith("..")||I.isAbsolute(a)?"":a.split(I.sep).join("/")}).filter(Boolean)}catch(o){w("ref_findfiles_failed",{message:o.message})}if(!e.length){let o=[];try{Op(t,t,0,o)}catch{}e=o.filter(i=>i.charAt(i.length-1)!=="/").map(i=>i.replace(/\s+\(\d+B\)$/,""))}let n={};ko.forEach(function(o,i){let a=qn(o,t);a&&!a.startsWith("..")&&!I.isAbsolute(a)&&a!==o.split(I.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=DP(e);return Rl={at:Date.now(),files:e,dirs:r},Rl}function DP(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 _c(t){return!t||t.charAt(0)==="."?!0:Wx.indexOf(t)>=0}function RP(t){let e=String(t||"").split(/[\\/]+/);for(let n=0;n<e.length-1;n++)if(e[n]&&_c(e[n]))return e[n];return""}async function Zs(t,e){P.mkdirSync(I.dirname(t),{recursive:!0});let n=b.Uri.file(t),s=b.workspace.textDocuments.find(r=>_p(r,t));if(s){let r=new b.Range(s.positionAt(0),s.positionAt(s.getText().length)),o=new b.WorkspaceEdit;if(o.replace(n,r,e),!await b.workspace.applyEdit(o))throw new Error("applyEdit \u5931\u8D25");return await s.save(),"updated-open-doc "+I.basename(t)}return await b.workspace.fs.writeFile(n,Buffer.from(e,"utf8")),"written "+I.basename(t)}function Op(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(_c(o.name))continue;let i=I.join(e,o.name),a=I.relative(t,i),l=!a||a.startsWith("..")||I.isAbsolute(a)?i.split(I.sep).join("/"):a;if(o.isDirectory())s.push(l+"/"),Op(t,i,n+1,s);else{let c=0;try{c=P.statSync(i).size}catch{}s.push(l+" ("+c+"B)")}}}var Kx=[/\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 qP(){let t=["C:\\Program Files\\Git\\bin\\bash.exe","C:\\Program Files\\Git\\usr\\bin\\bash.exe"];process.env.LOCALAPPDATA&&t.push(I.join(process.env.LOCALAPPDATA,"Programs","Git","bin","bash.exe"));for(let e of t)if(P.existsSync(e))return e;try{let e=px("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 Hx=process.platform==="win32"?qP():"/bin/bash",ye=xk.createRegistry({shell:Hx,maxRunning:xk.DEFAULTS.maxRunning,isDangerous:function(t){return!!Kx.find(function(e){return e.test(t)})}});function zx(t,e,n,s){return new Promise(r=>{if(Kx.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}$E(t,{cwd:e,timeout:Math.min(Math.max(n||6e4,1e3),12e4),maxBuffer:4*1024*1024,shell:Hx,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"})},(i,a,l)=>{let u=((a||"")+(l?`
860
+ `),refs:a}}var Wx=tP,FP="**/{"+Wx.join(",")+"}/**",Rl={at:0,files:[],dirs:[]};async function IP(){return(await Ap()).files}async function LP(){return(await Ap()).dirs}async function Ap(){if(Date.now()-Rl.at<5e3)return Rl;let t=L(),e=[];try{e=(await b.workspace.findFiles("**/*",FP,1e3)).map(i=>{let a=I.relative(t,i.fsPath);return!a||a.startsWith("..")||I.isAbsolute(a)?"":a.split(I.sep).join("/")}).filter(Boolean)}catch(o){w("ref_findfiles_failed",{message:o.message})}if(!e.length){let o=[];try{Op(t,t,0,o)}catch{}e=o.filter(i=>i.charAt(i.length-1)!=="/").map(i=>i.replace(/\s+\(\d+B\)$/,""))}let n={};ko.forEach(function(o,i){let a=qn(o,t);a&&!a.startsWith("..")&&!I.isAbsolute(a)&&a!==o.split(I.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=DP(e);return Rl={at:Date.now(),files:e,dirs:r},Rl}function DP(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 _c(t){return!t||t.charAt(0)==="."?!0:Wx.indexOf(t)>=0}function RP(t){let e=String(t||"").split(/[\\/]+/);for(let n=0;n<e.length-1;n++)if(e[n]&&_c(e[n]))return e[n];return""}async function Qs(t,e){P.mkdirSync(I.dirname(t),{recursive:!0});let n=b.Uri.file(t),s=b.workspace.textDocuments.find(r=>_p(r,t));if(s){let r=new b.Range(s.positionAt(0),s.positionAt(s.getText().length)),o=new b.WorkspaceEdit;if(o.replace(n,r,e),!await b.workspace.applyEdit(o))throw new Error("applyEdit \u5931\u8D25");return await s.save(),"updated-open-doc "+I.basename(t)}return await b.workspace.fs.writeFile(n,Buffer.from(e,"utf8")),"written "+I.basename(t)}function Op(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(_c(o.name))continue;let i=I.join(e,o.name),a=I.relative(t,i),l=!a||a.startsWith("..")||I.isAbsolute(a)?i.split(I.sep).join("/"):a;if(o.isDirectory())s.push(l+"/"),Op(t,i,n+1,s);else{let c=0;try{c=P.statSync(i).size}catch{}s.push(l+" ("+c+"B)")}}}var Kx=[/\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 qP(){let t=["C:\\Program Files\\Git\\bin\\bash.exe","C:\\Program Files\\Git\\usr\\bin\\bash.exe"];process.env.LOCALAPPDATA&&t.push(I.join(process.env.LOCALAPPDATA,"Programs","Git","bin","bash.exe"));for(let e of t)if(P.existsSync(e))return e;try{let e=px("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 Hx=process.platform==="win32"?qP():"/bin/bash",ye=xk.createRegistry({shell:Hx,maxRunning:xk.DEFAULTS.maxRunning,isDangerous:function(t){return!!Kx.find(function(e){return e.test(t)})}});function zx(t,e,n,s){return new Promise(r=>{if(Kx.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}$E(t,{cwd:e,timeout:Math.min(Math.max(n||6e4,1e3),12e4),maxBuffer:4*1024*1024,shell:Hx,env:Object.assign({},process.env,{NO_COLOR:"1",CI:"1"})},(i,a,l)=>{let u=((a||"")+(l?`
861
861
  [stderr]
862
862
  `+l:"")).trim()||(i?String(i.message||i):""),d=Gx(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 Gx(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)+`
863
863
  \u2026[\u4E2D\u95F4\u7701\u7565 `+i+` \u5B57\u7B26]\u2026
864
- `+n.slice(n.length-o),truncated:!0,dropped:i}}var Mo=new Map,Qf=null;function nr(){let t={enabled:!1,chromePath:"",headless:!0,width:1280,height:800,idleMs:3e5,confirm:!0,preview:!1};try{let e=b.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 Ep(){return nr().enabled}function _a(){let t={enabled:!1,maxTools:30,theme:""};try{let e=b.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 BP=/^[a-z][a-z0-9-]{0,23}$/,UP=/^[#a-zA-Z0-9.,%()\/\s-]{1,64}$/;function WP(){let t=_a().theme;if(!t)return null;try{return We.themeOf(t)}catch{return null}}function Pp(){let t=WP();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();!BP.test(n)||!UP.test(s)||(e[n]=s)}return Object.keys(e).length?e:null}function jp(){let t=Pp();if(!t)return"";let e=[];for(let n of Object.keys(t))e.push("--"+n+":"+t[n]);return"<style>:root{"+e.join(";")+"}</style>"}function Np(){let t=Pp(),e={type:"theme",plugin:_a().theme,tokens:t||{}},n=[];try{Se&&n.push(Se.webview)}catch{}try{de&&n.push(de.webview)}catch{}try{Kn&&n.push(Kn)}catch{}for(let s of n)try{s.postMessage(e)}catch{}}function Ql(t){let e=_a();return We.configure({root:L(),enabled:e.enabled,maxTools:e.maxTools,rec:w,confirm:$x}),e.enabled?We.refresh(L()).then(function(){return e},function(n){return w("plugins_scan_failed",{message:n.message,reason:t||"apply"}),e}):Promise.resolve(e)}function Jx(){return fc("config_change_early"),Ql("config_change").then(function(t){if(w("plugins_config_change",{enabled:t.enabled,maxTools:t.maxTools}),fc("config_change"),t.enabled)try{let e=We.status();b.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}return t})}async function $x(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 b.window.showWarningMessage(n,{modal:!0},"\u4FE1\u4EFB\u5E76\u542F\u7528","\u672C\u6B21\u5FFD\u7565")==="\u4FE1\u4EFB\u5E76\u542F\u7528"}function Fk(t,e){e.timer&&clearTimeout(e.timer);let n=nr();e.timer=setTimeout(function(){Tc(t,"idle")},n.idleMs),e.timer&&typeof e.timer.unref=="function"&&e.timer.unref()}async function Xx(t){let e=String(t||"_default"),n=Mo.get(e);if(n&&n.starting)return n.starting;if(n&&n.inst&&!n.inst.closed)return Fk(e,n),n.inst;let s=nr(),r={inst:null,starting:null,timer:null};return Mo.set(e,r),r.starting=pt.launch({exe:s.chromePath,headless:s.headless,width:s.width,height:s.height}).then(function(o){return r.inst=o,r.starting=null,Fk(e,r),w("browser_launch",{sessionId:e,exe:o.exe,port:o.port}),o}).catch(function(o){throw Mo.delete(e),w("browser_launch_failed",{sessionId:e,message:String(o&&o.message||o)}),o}),r.starting}async function Tc(t,e){let n=String(t||"_default"),s=Mo.get(n);if(!s)return!1;Mo.delete(n),s.timer&&clearTimeout(s.timer);let r=s.inst;if(r)try{await r.close()}catch(o){w("browser_close_failed",{message:o.message})}else s.starting&&s.starting.then(function(o){return o.close()}).catch(function(){});if(w("browser_close",{sessionId:n,reason:e||"manual"}),typeof Qf=="function")try{Qf(n)}catch{}return!0}async function KP(t){for(let e of Array.from(Mo.keys()))await Tc(e,t)}function Fp(){let t={enabled:!1,confirm:!0,maxWidth:2048};try{let e=b.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 Ip(){return Fp().enabled}var HP={click:!0,move:!0,drag:!0,scroll:!0,type:!0,key:!0},ec=new Set;async function zP(t,e,n){if(!Fp().confirm)return!0;let r=String(t||"_default");if(ec.has(r))return!0;let o=null;try{o=await b.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"?(w("computer_confirm_denied",{sessionId:r,action:e}),!1):(ec.add(r),w("computer_confirm_ok",{sessionId:r,action:e}),!0)}var Ik={click:!0,type:!0,scroll:!0},Lk=new Set;async function GP(t,e,n){if(nr().confirm===!1)return!0;let r=String(t||"_default");if(Lk.has(r))return!0;let o=null;try{o=await b.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"?(w("browser_confirm_denied",{sessionId:r,action:e}),!1):(Lk.add(r),w("browser_confirm_ok",{sessionId:r,action:e}),!0)}function Dk(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 Rk(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(`
865
- `);return Gx(r,isFinite(Number(n))&&Number(n)>200?Number(n):4e3).text}var $s=[{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"+na+"\uFF09"},y:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u7EB5\u5750\u6807\uFF08"+na+"\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'+na+"\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"]}}}],JP={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"]}}},$P={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"]}}},XP=["---","# \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(`
864
+ `+n.slice(n.length-o),truncated:!0,dropped:i}}var Mo=new Map,Qf=null;function sr(){let t={enabled:!1,chromePath:"",headless:!0,width:1280,height:800,idleMs:3e5,confirm:!0,preview:!1};try{let e=b.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 Ep(){return sr().enabled}function _a(){let t={enabled:!1,maxTools:30,theme:""};try{let e=b.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 BP=/^[a-z][a-z0-9-]{0,23}$/,UP=/^[#a-zA-Z0-9.,%()\/\s-]{1,64}$/;function WP(){let t=_a().theme;if(!t)return null;try{return We.themeOf(t)}catch{return null}}function Pp(){let t=WP();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();!BP.test(n)||!UP.test(s)||(e[n]=s)}return Object.keys(e).length?e:null}function jp(){let t=Pp();if(!t)return"";let e=[];for(let n of Object.keys(t))e.push("--"+n+":"+t[n]);return"<style>:root{"+e.join(";")+"}</style>"}function Np(){let t=Pp(),e={type:"theme",plugin:_a().theme,tokens:t||{}},n=[];try{Se&&n.push(Se.webview)}catch{}try{de&&n.push(de.webview)}catch{}try{Kn&&n.push(Kn)}catch{}for(let s of n)try{s.postMessage(e)}catch{}}function Ql(t){let e=_a();return We.configure({root:L(),enabled:e.enabled,maxTools:e.maxTools,rec:w,confirm:$x}),e.enabled?We.refresh(L()).then(function(){return e},function(n){return w("plugins_scan_failed",{message:n.message,reason:t||"apply"}),e}):Promise.resolve(e)}function Jx(){return fc("config_change_early"),Ql("config_change").then(function(t){if(w("plugins_config_change",{enabled:t.enabled,maxTools:t.maxTools}),fc("config_change"),t.enabled)try{let e=We.status();b.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}return t})}async function $x(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 b.window.showWarningMessage(n,{modal:!0},"\u4FE1\u4EFB\u5E76\u542F\u7528","\u672C\u6B21\u5FFD\u7565")==="\u4FE1\u4EFB\u5E76\u542F\u7528"}function Fk(t,e){e.timer&&clearTimeout(e.timer);let n=sr();e.timer=setTimeout(function(){Tc(t,"idle")},n.idleMs),e.timer&&typeof e.timer.unref=="function"&&e.timer.unref()}async function Xx(t){let e=String(t||"_default"),n=Mo.get(e);if(n&&n.starting)return n.starting;if(n&&n.inst&&!n.inst.closed)return Fk(e,n),n.inst;let s=sr(),r={inst:null,starting:null,timer:null};return Mo.set(e,r),r.starting=pt.launch({exe:s.chromePath,headless:s.headless,width:s.width,height:s.height}).then(function(o){return r.inst=o,r.starting=null,Fk(e,r),w("browser_launch",{sessionId:e,exe:o.exe,port:o.port}),o}).catch(function(o){throw Mo.delete(e),w("browser_launch_failed",{sessionId:e,message:String(o&&o.message||o)}),o}),r.starting}async function Tc(t,e){let n=String(t||"_default"),s=Mo.get(n);if(!s)return!1;Mo.delete(n),s.timer&&clearTimeout(s.timer);let r=s.inst;if(r)try{await r.close()}catch(o){w("browser_close_failed",{message:o.message})}else s.starting&&s.starting.then(function(o){return o.close()}).catch(function(){});if(w("browser_close",{sessionId:n,reason:e||"manual"}),typeof Qf=="function")try{Qf(n)}catch{}return!0}async function KP(t){for(let e of Array.from(Mo.keys()))await Tc(e,t)}function Fp(){let t={enabled:!1,confirm:!0,maxWidth:2048};try{let e=b.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 Ip(){return Fp().enabled}var HP={click:!0,move:!0,drag:!0,scroll:!0,type:!0,key:!0},ec=new Set;async function zP(t,e,n){if(!Fp().confirm)return!0;let r=String(t||"_default");if(ec.has(r))return!0;let o=null;try{o=await b.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"?(w("computer_confirm_denied",{sessionId:r,action:e}),!1):(ec.add(r),w("computer_confirm_ok",{sessionId:r,action:e}),!0)}var Ik={click:!0,type:!0,scroll:!0},Lk=new Set;async function GP(t,e,n){if(sr().confirm===!1)return!0;let r=String(t||"_default");if(Lk.has(r))return!0;let o=null;try{o=await b.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"?(w("browser_confirm_denied",{sessionId:r,action:e}),!1):(Lk.add(r),w("browser_confirm_ok",{sessionId:r,action:e}),!0)}function Dk(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 Rk(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(`
865
+ `);return Gx(r,isFinite(Number(n))&&Number(n)>200?Number(n):4e3).text}var Xs=[{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"+na+"\uFF09"},y:{type:"number",description:"click / move / scroll / drag \u7684\u8D77\u70B9\u7EB5\u5750\u6807\uFF08"+na+"\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'+na+"\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"]}}}],JP={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"]}}},$P={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"]}}},XP=["---","# \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(`
866
866
  `),VP=5,qk=1500;function tc(t){let e=String(t??""),n=[],s=0;for(;s<e.length;){let r=e.indexOf(`
867
867
  `,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
868
868
  `:`
@@ -894,37 +894,37 @@ Plugins run on this machine with your permissions. After installing, you still h
894
894
  `),_=c+" \uFF08L "+p+"-"+y+" / \u5171 "+f+` \u884C\uFF09
895
895
  `+S;return y<f?_+=`
896
896
  ...[`+(v?"\u672C\u884C\u8D85\u957F\u5DF2\u622A\u65AD\uFF1B":"")+"\u8FD8\u6709\u540E\u7EED\uFF0C\u4F20 startLine="+(y+1)+" \u7EE7\u7EED]":v&&(_+=`
897
- ...[\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=Vs.search(n,String(e.query||e.q||""),{maxFiles:XS(),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 w("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}),Vs.format(d)}if(t==="write_file"){let a=Ve(Ki(e,"write_file"),n),l=!P.existsSync(a),c=zf(a),u=l?"":Fr(a),d=Hi(e,"content","write_file")||"";await zi(o,"write_file",[{path:it(a),kind:l?"add":"update",before:u,after:d}]);let f=await Zs(a,d),p=Xn(a,u,d,l,o.sessionId,o.autoKeep);return f+" | "+d.split(`
898
- `).length+" \u884C"+Hs(p,o.autoKeep)+await Kk(a,l||!c)}if(t==="replace_in_file"){let a=Ki(e,"replace_in_file"),l=Ve(a,n);if(!P.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);let c=zf(l),u=P.readFileSync(l,"utf8"),d=Hi(e,"old_string","replace_in_file"),f=Hi(e,"new_string","replace_in_file"),p=uj(u,d,f,e.replace_all===!0||e.replaceAll===!0);await zi(o,"replace_in_file",[{path:it(l),kind:"update",before:u,after:p.next}]);let m=await Zs(l,p.next),h=Xn(l,u,p.next,!1,o.sessionId,o.autoKeep),k=p.count>1?"\u66FF\u6362 "+p.count+" \u5904":"\u66FF\u6362 1 \u5904",x=p.level?"\uFF08\u5BB9\u9519 L"+p.level+"\uFF1A\u884C\u5C3E/\u7A7A\u767D\u5DEE\u5F02\u5DF2\u5BF9\u9F50\uFF09":"";return m+" | "+k+x+Hs(h,o.autoKeep)+await Kk(l,!c)}if(t==="grep"){let a=Ok(e.dir,n),l=Math.floor(Number(e.maxHits)),c=i?i.grepHits:200,u=Dt.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 w("grep",{pattern:u.pattern,hits:u.hits.length,files:u.filesSearched,truncated:u.truncated,timedOut:!!u.timedOut}),Dt.formatGrep(u)}if(t==="glob"){let a=Ok(e.dir,n),l=Math.floor(Number(e.maxFiles)),c=i?i.globFiles:200,u=Dt.glob(a.base,e.patterns||[],{maxFiles:isFinite(l)?Math.min(Math.max(l,1),c):c,prefix:a.prefix});return w("glob",{pattern:u.pattern,matches:u.matches.length,scanned:u.scanned,truncated:u.truncated}),Dt.formatGlob(u)}if(t==="apply_patch"){let a=On.parsePatch(Hi(e,"patch","apply_patch")),l=On.validatePatch(n,a,{resolve:function(p){return Ve(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 zi(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]=zf(p.abs));try{for(let p of l.plan)if(p.type==="add")await Zs(p.abs,p.content),c.push({kind:"add",abs:p.abs,rel:p.rel,content:p.content});else if(p.type==="update")await Zs(p.abs,p.content),c.push({kind:"update",abs:p.abs,rel:p.rel,before:p.before,content:p.content});else{let m=Fr(p.abs)||p.before||"";try{await b.workspace.fs.delete(b.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 mj(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)"+Hs(Xn(p.abs,"",p.content,!0,o.sessionId,o.autoKeep),o.autoKeep)):p.kind==="update"?d.push(p.rel+" (\u4FEE\u6539)"+Hs(Xn(p.abs,p.before,p.content,!1,o.sessionId,o.autoKeep),o.autoKeep)):d.push(p.rel+" (\u5220\u9664)"+Hs(Xn(p.abs,p.before,"",!1,o.sessionId,o.autoKeep),o.autoKeep));w("apply_patch",{files:d.length});let f="";if(Yx()){let p=c.filter(function(x){return x.kind!=="delete"}).map(function(x){return x.abs}),m=await Zx(p),h=bs.summarize(m),k=c.some(function(x){return x.kind==="add"||!u[x.abs]});h.total&&(h.error||h.warning)?f=Qx+`
899
- `+bs.formatLints(m,{maxDiags:10}):k&&(f=ep)}return"apply_patch \u6210\u529F\uFF1A"+d.length+` \u4E2A\u6587\u4EF6
897
+ ...[\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=Ys.search(n,String(e.query||e.q||""),{maxFiles:XS(),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 w("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}),Ys.format(d)}if(t==="write_file"){let a=Ve(Ki(e,"write_file"),n),l=!P.existsSync(a),c=zf(a),u=l?"":Fr(a),d=Hi(e,"content","write_file")||"";await zi(o,"write_file",[{path:it(a),kind:l?"add":"update",before:u,after:d}]);let f=await Qs(a,d),p=Vn(a,u,d,l,o.sessionId,o.autoKeep);return f+" | "+d.split(`
898
+ `).length+" \u884C"+zs(p,o.autoKeep)+await Kk(a,l||!c)}if(t==="replace_in_file"){let a=Ki(e,"replace_in_file"),l=Ve(a,n);if(!P.existsSync(l))throw new Error("\u6587\u4EF6\u4E0D\u5B58\u5728: "+a);let c=zf(l),u=P.readFileSync(l,"utf8"),d=Hi(e,"old_string","replace_in_file"),f=Hi(e,"new_string","replace_in_file"),p=uj(u,d,f,e.replace_all===!0||e.replaceAll===!0);await zi(o,"replace_in_file",[{path:it(l),kind:"update",before:u,after:p.next}]);let m=await Qs(l,p.next),h=Vn(l,u,p.next,!1,o.sessionId,o.autoKeep),k=p.count>1?"\u66FF\u6362 "+p.count+" \u5904":"\u66FF\u6362 1 \u5904",x=p.level?"\uFF08\u5BB9\u9519 L"+p.level+"\uFF1A\u884C\u5C3E/\u7A7A\u767D\u5DEE\u5F02\u5DF2\u5BF9\u9F50\uFF09":"";return m+" | "+k+x+zs(h,o.autoKeep)+await Kk(l,!c)}if(t==="grep"){let a=Ok(e.dir,n),l=Math.floor(Number(e.maxHits)),c=i?i.grepHits:200,u=Dt.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 w("grep",{pattern:u.pattern,hits:u.hits.length,files:u.filesSearched,truncated:u.truncated,timedOut:!!u.timedOut}),Dt.formatGrep(u)}if(t==="glob"){let a=Ok(e.dir,n),l=Math.floor(Number(e.maxFiles)),c=i?i.globFiles:200,u=Dt.glob(a.base,e.patterns||[],{maxFiles:isFinite(l)?Math.min(Math.max(l,1),c):c,prefix:a.prefix});return w("glob",{pattern:u.pattern,matches:u.matches.length,scanned:u.scanned,truncated:u.truncated}),Dt.formatGlob(u)}if(t==="apply_patch"){let a=On.parsePatch(Hi(e,"patch","apply_patch")),l=On.validatePatch(n,a,{resolve:function(p){return Ve(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 zi(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]=zf(p.abs));try{for(let p of l.plan)if(p.type==="add")await Qs(p.abs,p.content),c.push({kind:"add",abs:p.abs,rel:p.rel,content:p.content});else if(p.type==="update")await Qs(p.abs,p.content),c.push({kind:"update",abs:p.abs,rel:p.rel,before:p.before,content:p.content});else{let m=Fr(p.abs)||p.before||"";try{await b.workspace.fs.delete(b.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 mj(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)"+zs(Vn(p.abs,"",p.content,!0,o.sessionId,o.autoKeep),o.autoKeep)):p.kind==="update"?d.push(p.rel+" (\u4FEE\u6539)"+zs(Vn(p.abs,p.before,p.content,!1,o.sessionId,o.autoKeep),o.autoKeep)):d.push(p.rel+" (\u5220\u9664)"+zs(Vn(p.abs,p.before,"",!1,o.sessionId,o.autoKeep),o.autoKeep));w("apply_patch",{files:d.length});let f="";if(Yx()){let p=c.filter(function(x){return x.kind!=="delete"}).map(function(x){return x.abs}),m=await Zx(p),h=ks.summarize(m),k=c.some(function(x){return x.kind==="add"||!u[x.abs]});h.total&&(h.error||h.warning)?f=Qx+`
899
+ `+ks.formatLints(m,{maxDiags:10}):k&&(f=ep)}return"apply_patch \u6210\u529F\uFF1A"+d.length+` \u4E2A\u6587\u4EF6
900
900
  `+d.join(`
901
- `)+f}if(t==="delete_file"){let a=Ki(e,"delete_file"),l=Ve(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=Fr(l);await zi(o,"delete_file",[{path:it(l),kind:"delete",before:c,after:""}]);try{await b.workspace.fs.delete(b.Uri.file(l),{useTrash:!0})}catch{P.rmSync(l,{force:!0})}let u=Xn(l,c,"",!1,o.sessionId,o.autoKeep);return w("delete_file",{path:it(l)}),"deleted "+it(l)+Hs(u,o.autoKeep)}if(t==="move_file"){let a=Uk(e,["from","from_path","fromPath","source","src","old_path","oldPath"]),l=Uk(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=Ve(a,n),u=Ve(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=Fr(c);await zi(o,"move_file",[{path:it(c),kind:"delete",before:d,after:""},{path:it(u),kind:"add",before:"",after:d}]),P.mkdirSync(I.dirname(u),{recursive:!0}),P.renameSync(c,u);let f=Xn(c,d,"",!1,o.sessionId,o.autoKeep),p=Xn(u,"",d,!0,o.sessionId,o.autoKeep);return w("move_file",{from:it(c),to:it(u)}),"moved "+it(c)+" \u2192 "+it(u)+Hs(f,o.autoKeep)+Hs(p,o.autoKeep)}if(t==="read_lints"){let a=e.path?Ve(Ki(e,"read_lints"),n):null,l=e.maxDiags,c=Vx(a);return w("read_lints",{path:a?it(a):"(workspace)",files:Object.keys(c).length}),bs.formatLints(c,{maxDiags:l})}if(t==="run_command"){let a=String(e.command||""),l=Ys.pathGuard(a);if(l)return w("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg}),ox(l);if(ws(o.mode,hc())){let d=Ys.check(a);if(!d.ok)return w(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+`
901
+ `)+f}if(t==="delete_file"){let a=Ki(e,"delete_file"),l=Ve(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=Fr(l);await zi(o,"delete_file",[{path:it(l),kind:"delete",before:c,after:""}]);try{await b.workspace.fs.delete(b.Uri.file(l),{useTrash:!0})}catch{P.rmSync(l,{force:!0})}let u=Vn(l,c,"",!1,o.sessionId,o.autoKeep);return w("delete_file",{path:it(l)}),"deleted "+it(l)+zs(u,o.autoKeep)}if(t==="move_file"){let a=Uk(e,["from","from_path","fromPath","source","src","old_path","oldPath"]),l=Uk(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=Ve(a,n),u=Ve(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=Fr(c);await zi(o,"move_file",[{path:it(c),kind:"delete",before:d,after:""},{path:it(u),kind:"add",before:"",after:d}]),P.mkdirSync(I.dirname(u),{recursive:!0}),P.renameSync(c,u);let f=Vn(c,d,"",!1,o.sessionId,o.autoKeep),p=Vn(u,"",d,!0,o.sessionId,o.autoKeep);return w("move_file",{from:it(c),to:it(u)}),"moved "+it(c)+" \u2192 "+it(u)+zs(f,o.autoKeep)+zs(p,o.autoKeep)}if(t==="read_lints"){let a=e.path?Ve(Ki(e,"read_lints"),n):null,l=e.maxDiags,c=Vx(a);return w("read_lints",{path:a?it(a):"(workspace)",files:Object.keys(c).length}),ks.formatLints(c,{maxDiags:l})}if(t==="run_command"){let a=String(e.command||""),l=Zs.pathGuard(a);if(l)return w("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg}),ox(l);if(bs(o.mode,hc())){let d=Zs.check(a);if(!d.ok)return w(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
902
  \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 zx(a,n,e.timeout_ms,i?i.runMaxChars:0),u="exit="+c.code+`
903
903
  `+c.out;if(c.truncated&&o.spillStore&&typeof o.spillStore.put=="function")try{let d=pn.newId();o.spillStore.put(d,"exit="+c.code+`
904
904
  `+c.full,{kind:"tool",name:"run_command",label:a.slice(0,60)}),u+=`
905
- [\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=Ys.pathGuard(a);if(l)return w("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg,async:!0}),ox(l);if(ws(o.mode,hc())){let d=Ys.check(a);if(!d.ok)return w(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+`
905
+ [\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=Zs.pathGuard(a);if(l)return w("run_command_skipdir_blocked",{command:a.slice(0,200),seg:l.seg,async:!0}),ox(l);if(bs(o.mode,hc())){let d=Zs.check(a);if(!d.ok)return w(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
906
  \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=ye.start(c,a,{cwd:n,timeout_ms:e.timeout_ms});return u.ok&&w("async_cmd_start",{job_id:u.job_id,sessionId:c,timeout_ms:u.timeout_ms}),ye.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 ye.poll(a,l,{wait_ms:e.wait_ms,tail_chars:e.tail_chars});return ye.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=ye.stop(a,l);return w("async_cmd_stop",{job_id:l,sessionId:a,status:c.status}),ye.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":"")+`
907
907
 
908
908
  `+c.content}if(t==="web_search"){let a=await xp(e.query||e.q||"",s,{count:e.count,needContent:!!e.need_content});return vp(a.results,a.query)}if(t==="web_fetch"){let a=await Sp(e.url,s,{});return"# "+(a.title||"(\u65E0\u6807\u9898)")+`
909
909
  `+a.url+`
910
910
 
911
- `+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=Xt.merge(a.items,e.todos,{merge:l});if(a.items=c,typeof o.onTodos=="function")try{o.onTodos(c)}catch{}return Xt.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=fs.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(op()<=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=Hi(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=bS(Wp().maxMinutes),d=function(k,x,T){if(typeof o.onSubProgress=="function")try{o.onSubProgress({description:l,line:String(k??""),running:x!==!1,ok:T!==!1})}catch{}},f;try{f=await ks(c,{root:n,modelKey:o.modelKey,mode:"explore",history:[],token:o.token,sessionId:o.sessionId,maxIters:op(),maxMinutes:u,onProgress:function(k){d(k,!0)}})}catch(k){throw d("\u5B50\u4EE3\u7406\u300C"+l+"\u300D\u5931\u8D25\uFF1A"+(k&&k.message||k),!1,!1),k}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"+Mc(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=Er(f.text,f.log);return w("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+`
911
+ `+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=Xt.merge(a.items,e.todos,{merge:l});if(a.items=c,typeof o.onTodos=="function")try{o.onTodos(c)}catch{}return Xt.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=ps.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(op()<=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=Hi(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=bS(Wp().maxMinutes),d=function(k,x,T){if(typeof o.onSubProgress=="function")try{o.onSubProgress({description:l,line:String(k??""),running:x!==!1,ok:T!==!1})}catch{}},f;try{f=await xs(c,{root:n,modelKey:o.modelKey,mode:"explore",history:[],token:o.token,sessionId:o.sessionId,maxIters:op(),maxMinutes:u,onProgress:function(k){d(k,!0)}})}catch(k){throw d("\u5B50\u4EE3\u7406\u300C"+l+"\u300D\u5931\u8D25\uFF1A"+(k&&k.message||k),!1,!1),k}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"+Mc(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=Er(f.text,f.log);return w("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
912
 
913
- `+h+lc(f.text)}if(t==="read_skill")return Rt.read(e.name,e.file);if(t==="read_rule")return Gt.read(e.name);if(we.hasTool(t)){if(o.mode==="plan"&&!we.planAllowed(t))throw w("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 we.callTool(t,e)}if(We.hasTool(t)){if(o.mode==="plan"&&We.readOnlyOf(t)===!1)throw w("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 We.callTool(t,e,{root:n,sessionId:o.sessionId,mode:o.mode,signal:o.signal,log:w})}throw new Error("\u672A\u77E5\u5DE5\u5177: "+t)}function Gs(t,e,n){let s=t==="plan",r=t==="explore",o=s?gS:r?Up:$s,i=Dn(e&&e.provider)!=="none",a=op(),l=o.filter(function(d){let f=d.function.name;return f==="web_search"||f==="web_fetch"?i:f==="explore"?a>0:f==="browser"?Ep():f==="computer"?Ip()&&!s&&oe.available().ok:!0});l.push(JP),l.push($P);let c=r?[]:we.toolDefs({planOnly:s});for(let d of c)l.push(d);let u=r?[]:We.toolDefs({planOnly:s});for(let d of u)l.push(d);return n&&n.compact&&(l=ln.compactTools(l,n.tier)),l}var ie=new Map,Lp=new Set,dn=new Map,dj=12,Wk=0,So=null,un=null,pa=null,rc=null,oc=0;function fj(){oc++}function pj(){oc=Math.max(0,oc-1)}function Hs(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 Fr(t){let e=b.workspace.textDocuments.find(function(n){return _p(n,t)});if(e&&!e.isClosed)return e.getText();try{return P.readFileSync(t,"utf8")}catch{return""}}function it(t){let e=t;try{e=I.relative(L(),t)}catch{}return e&&!e.startsWith("..")?e:t}function zi(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 Vn(){let t=0;for(let e of ie.values())t+=e.hunks.length;return t}function Vx(t){let e={},n;try{n=b.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 Yx(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("diagnostics.afterEdit")}catch{}return t!==!1}async function Zx(t){let e=(t||[]).filter(Boolean),n=function(){let r={};for(let o of e){let i=Vx(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 Qx=`
913
+ `+h+lc(f.text)}if(t==="read_skill")return Rt.read(e.name,e.file);if(t==="read_rule")return Gt.read(e.name);if(we.hasTool(t)){if(o.mode==="plan"&&!we.planAllowed(t))throw w("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 we.callTool(t,e)}if(We.hasTool(t)){if(o.mode==="plan"&&We.readOnlyOf(t)===!1)throw w("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 We.callTool(t,e,{root:n,sessionId:o.sessionId,mode:o.mode,signal:o.signal,log:w})}throw new Error("\u672A\u77E5\u5DE5\u5177: "+t)}function Js(t,e,n){let s=t==="plan",r=t==="explore",o=s?gS:r?Up:Xs,i=Dn(e&&e.provider)!=="none",a=op(),l=o.filter(function(d){let f=d.function.name;return f==="web_search"||f==="web_fetch"?i:f==="explore"?a>0:f==="browser"?Ep():f==="computer"?Ip()&&!s&&oe.available().ok:!0});l.push(JP),l.push($P);let c=r?[]:we.toolDefs({planOnly:s});for(let d of c)l.push(d);let u=r?[]:We.toolDefs({planOnly:s});for(let d of u)l.push(d);return n&&n.compact&&(l=ln.compactTools(l,n.tier)),l}var ie=new Map,Lp=new Set,dn=new Map,dj=12,Wk=0,So=null,un=null,pa=null,rc=null,oc=0;function fj(){oc++}function pj(){oc=Math.max(0,oc-1)}function zs(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 Fr(t){let e=b.workspace.textDocuments.find(function(n){return _p(n,t)});if(e&&!e.isClosed)return e.getText();try{return P.readFileSync(t,"utf8")}catch{return""}}function it(t){let e=t;try{e=I.relative(L(),t)}catch{}return e&&!e.startsWith("..")?e:t}function zi(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 Yn(){let t=0;for(let e of ie.values())t+=e.hunks.length;return t}function Vx(t){let e={},n;try{n=b.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 Yx(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("diagnostics.afterEdit")}catch{}return t!==!1}async function Zx(t){let e=(t||[]).filter(Boolean),n=function(){let r={};for(let o of e){let i=Vx(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 Qx=`
914
914
  \uFF08\u8BED\u8A00\u670D\u52A1\u5668\u8BCA\u65AD\uFF0C\u53EF\u80FD\u7565\u6EDE\u540E\u4E8E\u672C\u6B21\u5199\u5165\uFF09`,ep=`
915
- \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 zf(t){try{return(b.workspace.textDocuments||[]).some(function(n){return n&&n.uri&&n.uri.scheme==="file"&&n.uri.fsPath===t})}catch{return!1}}async function Kk(t,e){if(!Yx())return"";try{let n=await Zx([t]),s=bs.summarize(n);return!s.total||!s.error&&!s.warning?e?ep:"":Qx+`
916
- `+bs.formatLints(n,{maxDiags:10})}catch{return e?ep:""}}async function mj(t){for(let e=t.length-1;e>=0;e--){let n=t[e];try{n.kind==="add"?await b.workspace.fs.delete(b.Uri.file(n.abs),{useTrash:!0}):await Zs(n.abs,n.before||"")}catch(s){w("apply_patch_rollback_failed",{path:it(n.abs),error:s.message})}}}function Xn(t,e,n,s,r,o){let i=String(n??"");if(oc>0||o){let l=ie.get(t);return l&&(l.baseline=i,l.hunks=[],ic(t)),dn.delete(t)&&tS(t),0}let a=ie.get(t);return dn.delete(t),a||(a={abs:t,relPath:it(t),baseline:s?"":String(e??""),isNew:!!s,hunks:[],stats:{add:0,del:0,hunks:0},sessionId:r||""},ie.set(t,a)),r&&(a.sessionId=r),a.hunks=cn.computeHunks(a.baseline,i),a.stats=cn.stats(a.hunks),a.hunks.length?(sr(),sS(t),a.hunks.length):(ie.delete(t),sr(),a.hunks.length)}function hj(t,e,n){for(dn.delete(t),dn.set(t,{before:String(e??""),title:n,at:Date.now()});dn.size>dj;){let s=dn.keys().next();if(!s||s.done)break;dn.delete(s.value)}}function eS(t){let e=[];try{for(let n of b.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 tS(t){for(let e of eS(t))try{await b.window.tabGroups.close(e,!0)}catch{}}function ic(t,e){let n=ie.get(t),s=typeof e=="string"&&!!n,r=s?eS(t):[];s&&r.length?(hj(t,e,M("ext.diffTitle",{file:I.basename(t),add:n.stats.add,del:n.stats.del})),ie.delete(t),kj(t)):(ie.delete(t),n&&tS(t)),$t.delete(t),sr()}var Hk=Promise.resolve(),Gf=0,zk=!1,Gk=!1,$t=new Map,gj=40;function yj(t){for($t.delete(t),$t.set(t,Date.now());$t.size>gj;){let e=$t.keys().next();if(!e||e.done)break;$t.delete(e.value)}}function Xi(){let t=de&&de.webview?de.webview:null;return t?Fo.get(t)===!0:!1}function nS(){if(!$t.size||Xi())return;let t=Array.from($t.keys()).pop();$t.clear(),!(!t||!ie.has(t)||!gc())&&(w("review_auto_diff_deferred_open",{path:it(t)}),sS(t))}function sS(t){if(!gc()||!ie.has(t))return;let e=de&&de.webview?de.webview:null;if(e&&Fo.get(e)===!0){yj(t);return}Gf||(zk=e?ca.get(e)===!0:!1,Gk=e?Fo.get(e)===!0:!1);let n=zk,s=Gk;Gf++,Hk=Hk.then(async function(){try{await Dp(t,{preview:!0,preserveFocus:!0})}catch(r){w("review_auto_diff_failed",{path:it(t),error:r.message})}if(n&&!s){try{await b.commands.executeCommand("workbench.view.extension.luban")}catch(r){w("review_auto_diff_refocus_failed",{path:it(t),error:r.message})}try{let r=de&&de.webview;r&&setTimeout(function(){try{r.postMessage({type:"refocus_input"})}catch{}},120)}catch{}}Gf--})}function tp(){let t=[];for(let e of ie.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 ma(){return{type:"review",files:tp(),at:Date.now()}}async function wj(t){try{await Zs(t,"")}catch{}try{for(let e of b.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 b.window.tabGroups.close(n,!0)}}catch{}try{await b.workspace.fs.delete(b.Uri.file(t),{useTrash:!0})}catch{}}async function Jk(t,e,n){if(e.isNew&&n==="")return await wj(t),ie.delete(t),sr(),{ok:!0,deleted:!0,hunks:0};await Zs(t,n);let s=cn.computeHunks(e.baseline,n);return e.hunks=s,e.stats=cn.stats(s),s.length?sr():ic(t),{ok:!0,hunks:s.length}}function bj(t){return{before:b.Uri.from({scheme:"luban-before",path:t}),after:P.existsSync(t)?b.Uri.file(t):b.Uri.from({scheme:"luban-after",path:t})}}async function rS(t,e,n){let s=n||{},r=bj(t);await b.commands.executeCommand("vscode.diff",r.before,r.after,e,{preview:s.preview===!0,preserveFocus:s.preserveFocus===!0})}async function Dp(t,e){let n=ie.get(t);if(!n)throw new Error(M("ext.noPending",{path:it(t)}));let s=e||{};Lp.add(t);let r=M("ext.diffTitle",{file:I.basename(t),add:n.stats.add,del:n.stats.del});Qs(),await rS(t,r,s),Qs()}async function kj(t){let e=dn.get(t);if(e){Lp.add(t);try{await rS(t,e.title,{preview:!1,preserveFocus:!0})}catch(n){w("review_freeze_diff_failed",{path:it(t),error:n.message})}try{Qs()}catch{}}}async function ha(t,e,n,s){let r=L();if(t==="accept_all"||t==="reject_all"){let c=t==="accept_all"?"accept_file":"reject_file",u=ie.size;for(let d of Array.from(ie.keys())){let f=ie.get(d);s&&f&&f.sessionId&&f.sessionId!==s||await ha(c,d,"")}return{ok:!0,files:u,hunks:0}}let o=Ve(e,r,!0);if(t==="open_diff")return $t.delete(o),await Dp(o),{ok:!0};let i=ie.get(o);if(!i)return{ok:!1,error:M("ext.noPending",{path:e})};let a=Fr(o);if(t==="accept_file"){let c=i.baseline;return i.baseline=a,i.hunks=[],ic(o,c),{ok:!0,hunks:0,files:ie.size}}if(t==="reject_file")return await Jk(o,i,i.baseline);i.hunks=cn.computeHunks(i.baseline,a);let l=i.hunks.find(function(c){return c.id===n});if(!l)return i.stats=cn.stats(i.hunks),sr(),{ok:!1,error:M("ext.hunkGone",{hunk:n})};if(t==="accept_hunk"){let c=i.baseline;return i.baseline=cn.applyHunkToBaseline(i.baseline,l),i.hunks=cn.computeHunks(i.baseline,a),i.stats=cn.stats(i.hunks),i.hunks.length?sr():ic(o,c),{ok:!0,hunks:i.hunks.length}}return t==="reject_hunk"?await Jk(o,i,cn.revertHunkText(a,l)):{ok:!1,error:M("ext.unknownAction",{action:t})}}function oS(){pa||(pa=b.window.createTextEditorDecorationType({isWholeLine:!0,backgroundColor:new b.ThemeColor("diffEditor.insertedLineBackground"),overviewRulerColor:new b.ThemeColor("editorOverviewRuler.addedForeground"),overviewRulerLane:b.OverviewRulerLane.Left}),rc=b.window.createTextEditorDecorationType({backgroundColor:new b.ThemeColor("diffEditor.removedLineBackground"),fontStyle:"italic",overviewRulerColor:new b.ThemeColor("editorOverviewRuler.deletedForeground"),overviewRulerLane:b.OverviewRulerLane.Left}))}function iS(t,e){let n=[],s=[],r=[],o=Math.max(0,t.lineCount-1);for(let i of e.hunks){let a=cn.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 b.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 b.Position(0,0),d=l.lines.slice(0,3).join(" | ");s.push({range:new b.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 Rp(){oS();for(let t of b.window.visibleTextEditors){let e=t.document,n=e.uri.scheme==="file"?ie.get(e.uri.fsPath):null;if(!n){t.setDecorations(pa,[]),t.setDecorations(rc,[]);continue}let s=iS(e,n);t.setDecorations(pa,s.added),t.setDecorations(rc,s.removed)}}function xj(t){if(!un)return[];let e=b.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 b.Range(s,0,s,0);return[new b.CodeLens(r,{title:M("ext.selLensChat"),command:"luban.addSelectionToChat"}),new b.CodeLens(r,{title:M("ext.selLensNewChat"),command:"luban.addSelectionToNewChat"})]}function Sj(t){if(!un)return[];let e=ie.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 b.Range(i,0,i,0);s.push(new b.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 b.CodeLens(a,{title:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:o.id}]}))}if(ya(ga())===t.uri.fsPath)return s;let r=new b.Range(0,0,0,0);return s.push(new b.CodeLens(r,{title:M("ext.viewDiff"),command:"luban.openDiff",arguments:[{path:e.abs}]})),s.push(new b.CodeLens(r,{title:M("ext.keepFile",{add:e.stats.add,del:e.stats.del}),command:"luban.acceptFile",arguments:[{path:e.abs}]})),s.push(new b.CodeLens(r,{title:M("ext.revertFile"),command:"luban.rejectFile",arguments:[{path:e.abs}]})),s}function vj(t){if(!un)return[];let e=ie.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 b.Range(o,0,o,0);s.push(new b.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 b.CodeLens(i,{title:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:r.id}]}))}return s}function ga(){try{return b.window.tabGroups.activeTabGroup.activeTab}catch{return null}}function ya(t){let e=t&&t.input;if(!e)return"";let n=e.modified,s=e.original;if(n&&s){if(n.scheme==="file"&&ie.has(n.fsPath))return n.fsPath;if(s.scheme==="luban-before"&&ie.has(s.path))return s.path}return""}function _j(t){let e=ya(t);if(e)return e;let n=t&&t.input;return n&&n.uri&&n.uri.scheme==="file"&&ie.has(n.uri.fsPath)?n.uri.fsPath:""}function Qs(){let t=!1;try{t=!!ya(ga())}catch{t=!1}let e=function(n,s){try{Promise.resolve(b.commands.executeCommand("setContext",n,s)).catch(function(){})}catch{}};e("luban.pendingReview",Vn()),e("luban.reviewDiffActive",t)}function sr(){Wk++;try{if(So){let t=new Set(Array.from(ie.keys()).concat(Array.from(Lp),Array.from(dn.keys())));for(let e of t)So.fire(b.Uri.from({scheme:"luban-before",path:e}))}}catch{}try{un&&un.fire()}catch{}try{Rp()}catch{}try{Qs()}catch{}try{typeof Fe=="function"?Fe(ma()):ht&&ht.postMessage(ma())}catch{}w("review_state",{files:ie.size,hunks:Vn(),seq:Wk})}function Tj(t){oS(),So=new b.EventEmitter,un=new b.EventEmitter,t.subscriptions.push(pa,rc,So,un),t.subscriptions.push(b.workspace.registerTextDocumentContentProvider("luban-before",{onDidChange:So.event,provideTextDocumentContent:function(r){let o=ie.get(r.path);if(o)return o.baseline;let i=dn.get(r.path);return i?i.before:""}})),t.subscriptions.push(b.workspace.registerTextDocumentContentProvider("luban-after",{onDidChange:So.event,provideTextDocumentContent:function(r){try{return P.existsSync(r.path)?Fr(r.path):""}catch{return""}}})),t.subscriptions.push(b.languages.registerCodeLensProvider({scheme:"file"},{onDidChangeCodeLenses:un.event,provideCodeLenses:function(r){try{return Sj(r).concat(xj(r))}catch{return[]}}})),t.subscriptions.push(b.languages.registerCodeLensProvider({scheme:"luban-before"},{onDidChangeCodeLenses:un.event,provideCodeLenses:function(r){try{return vj(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&&ie.has(l))return{path:l,hunk:o||""}}else if(r&&r.path)return r;let i=_j(ga());if(i)return{path:i,hunk:o||""};let a=b.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 ha(r,a.path,o?a.hunk:"")}catch(c){l={ok:!1,error:c.message}}return w("review_action",{action:r,path:it(s(a.path)),hunk:a.hunk||"",ok:!!l.ok,error:l.error}),l.ok||b.window.showWarningMessage(M("ext.reviewWarn",{msg:l.error||M("ext.actionFailed")})),l}}function s(r){try{return Ve(r,L(),!0)}catch{return r}}t.subscriptions.push(b.commands.registerCommand("luban.openDiff",n("open_diff",!1)),b.commands.registerCommand("luban.acceptHunk",n("accept_hunk",!0)),b.commands.registerCommand("luban.rejectHunk",n("reject_hunk",!0)),b.commands.registerCommand("luban.acceptFile",n("accept_file",!1)),b.commands.registerCommand("luban.rejectFile",n("reject_file",!1)),b.commands.registerCommand("luban.reviewAll",n("accept_all",!1)),b.commands.registerCommand("luban.revertAll",n("reject_all",!1)),b.commands.registerCommand("luban.diffAccept",n("accept_file",!1)),b.commands.registerCommand("luban.diffReject",n("reject_file",!1)),b.window.onDidChangeVisibleTextEditors(function(){try{Rp()}catch{}}),b.window.tabGroups.onDidChangeTabs(function(){try{Qs()}catch{}}),b.window.tabGroups.onDidChangeTabGroups(function(){try{Qs()}catch{}}),b.window.onDidChangeActiveTextEditor(function(){try{Qs()}catch{}}),b.window.onDidChangeTextEditorSelection(function(){try{un&&un.fire()}catch{}}),b.workspace.onDidChangeTextDocument(function(r){let o=r.document.uri.scheme==="file"?r.document.uri.fsPath:"",i=ie.get(o);if(!i)return;let a=cn.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=cn.stats(a),a.length||ie.delete(o),sr())})),Qs()}function aS(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 lS={model:1,messages:1,stream:1,tools:1,tool_choice:1,max_tokens:1,stream_options:1},$k=2e3,Xk=Object.create(null);function yn(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function Mj(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&&lS[a])continue;let l=o[a];yn(l)&&yn(r[a])?s(r[a],l,i+1):r[a]=l,i===0&&n.push(a)}};return s(t,e,0),n}function cS(t,e){let n=t&&t.thinking;if(!yn(n))return null;let s=function(o){return yn(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 Cj(t){let e=t&&t.thinking;if(!yn(e))return null;let n=["on","off"].filter(function(r){return yn(e[r])});if(!n.length)return null;let s=cS(t,"");return{default:s?s.mode:n[0],tiers:n}}var uS=Xf.DEFAULT_MAX_VERSION;function dS(){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(b.workspace.getConfiguration("luban").get("net.tlsMaxVersion")||"auto")}catch{e="auto"}return e=e.trim().toLowerCase(),e==="1.2"?"1.2":"auto"}function np(t){let e=dS(),n=e==="1.2"?"TLSv1.2":uS,s=!1;try{s=Xf.DEFAULT_MAX_VERSION!==n,Xf.DEFAULT_MAX_VERSION=n}catch{}return s&&w("net_tls_max_version",{mode:e,maxVersion:n,reason:t||""}),e}function fS(t){let e=t;for(let n=0;n<4&&e;n++){if(e.code)return String(e.code);e=e.cause}return""}function Aj(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 Oj(t,e,n){let s=fS(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 jo(t,e,n){let s=n||{},r=lt(e);if(!r)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let o=Po(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)),!Vf[r.provider.id]&&r.provider.streamUsage!==!1&&(i.stream_options={include_usage:!0});let c=cS(r.model,s.thinking),u=r.provider.id+"::"+r.model.id+"::",d="",f=null;if(c&&!Xk[u+c.mode]){let te=Mj(i,c.tier);d=c.mode,f=function(){for(let le of te)delete i[le]}}let p=!!(r.model.thinking&&r.model.thinking.inline===!0&&d==="on"),m=t&&t[0]&&t[0].role==="system"?t[0].content:"",h=gs.hash(m,i.tools||[]);s.snapshot!==!1&&(kt={at:new Date().toISOString(),model:r.model.id,prefixHash:h,thinking:d||"none",verbosity:s.verbosity||"none",roles:(t||[]).map(function(te){return te&&te.role}),heads:(t||[]).map(function(te){return aS(te&&te.content,120)})});let k=new AbortController,x=vc(s.signal);x.signal&&(x.isCancelled()?k.abort():x.signal.addEventListener("abort",()=>k.abort()));let T=Math.max(0,Number(s.timeoutMs)||0),g=null,v=!1;T>0&&(g=setTimeout(function(){v=!0,k.abort()},T));let y=_x(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],D=0,G=0,H=null,q=null,fe="",N=0,z=null,he="",ne=new Map,Y=new Map,pe=null,U="",Ee="",ke=[],ut=0,gt=new TextDecoder,ve=function(){return fetch(y,{method:"POST",headers:S,body:JSON.stringify(i),signal:k.signal})};try{for(;;){fe="",N=0,z=null,he="",ne=new Map,Y=new Map,ut=0,pe=VE.newParser({startInThink:p,onContent:function(te){if(te&&(ut+=te.length),s.onToken)try{s.onToken(te)}catch{}},onReasoning:function(te){if(te&&(ut+=te.length),s.onReasoning)try{s.onReasoning(te)}catch{}},onSplit:function(te){if(te&&(ut+=te.length),s.onSplit)try{s.onSplit(te)}catch{}}});try{for(H=await ve();!H.ok&&H.status===400&&D<_.length;){let te=_[D++],le=await H.text();te.field==="stream_options"?(Vf[r.provider.id]=!0,w("stream_usage_unsupported",{provider:r.provider.id,status:H.status,body:le.slice(0,200)})):te.field==="thinking"?(Xk[u+d]=!0,w("thinking_unsupported",{provider:r.provider.id,model:r.model.id,mode:d,status:H.status,body:le.slice(0,200)}),d=""):w("max_tokens_unsupported",{provider:r.provider.id,status:H.status,body:le.slice(0,200)}),te.undo(),H=await ve()}if(!H.ok){let te=await H.text();throw w("http_error",{provider:r.provider.id,model:r.model.id,status:H.status,body:te.slice(0,300)}),new Error(r.provider.id+" HTTP "+H.status+": "+te.slice(0,200))}for(q=H.body.getReader();;){let te=await q.read();if(te.done)break;fe+=gt.decode(te.value,{stream:!0});let le=fe.split(`
917
- `);fe=le.pop()||"";for(let Pe of le){let dt=Pe.trim();if(!dt.startsWith("data:"))continue;let rs=dt.slice(5).trim();if(!rs||rs==="[DONE]")continue;let Yt;try{Yt=JSON.parse(rs)}catch{continue}Yt&&Yt.usage&&(z=Yt.usage);let Et=Yt.choices&&Yt.choices[0];Et&&Et.finish_reason&&(he=String(Et.finish_reason));let _t=Et&&Et.delta;if(!_t)continue;_t.content&&(N++,pe.pushContent(_t.content));let Hn=_t.reasoning_content!=null?_t.reasoning_content:_t.reasoning!=null?_t.reasoning:_t.thinking;if(typeof Hn=="string"&&Hn&&pe.pushReasoning(Hn),_t.tool_calls)for(let $e of _t.tool_calls){let bn;typeof $e.index=="number"?bn=$e.index:$e.id?(Y.has($e.id)||Y.set($e.id,ne.size),bn=Y.get($e.id)):bn=ne.size?Math.max.apply(null,Array.from(ne.keys())):0;let Nn=ne.get(bn);Nn||(Nn={id:"",type:"function",function:{name:"",arguments:""}},ne.set(bn,Nn)),$e.id&&(Nn.id=$e.id,Y.has($e.id)||Y.set($e.id,bn)),$e.function&&$e.function.name&&(Nn.function.name=$e.function.name),$e.function&&$e.function.arguments!=null&&(Nn.function.arguments+=typeof $e.function.arguments=="string"?$e.function.arguments:JSON.stringify($e.function.arguments))}}}break}catch(te){if(v)throw w("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 le=Aj(te);if(x.isCancelled()||ut>0||G>=C||!le)throw le?new Error(Oj(te,r.provider,G)):te;G++;let Pe=A[G-1]||A[A.length-1];w("stream_net_retry",{provider:r.provider.id,model:r.model.id,attempt:G,message:String(te&&te.message||"").slice(0,120),code:fS(te),delayMs:Pe}),await new Promise(function(dt){setTimeout(dt,Pe)})}}}finally{g&&(clearTimeout(g),g=null)}pe.end(),U=pe.content,Ee=pe.reasoning;let Ot=pe.rawContent;ke=Array.from(ne.keys()).sort((te,le)=>te-le).map(te=>ne.get(te));let vt=r.provider.id+"::"+r.model.id,Le=Mk.get(vt)||{hash:"",tokens:0},jn=Le.hash,xs=!!jn&&jn===h,ss=xs?Le.tokens:0,De=gs.stats(z,t,ss);Mk.set(vt,{hash:h,tokens:De.promptTokens});let st={at:new Date().toISOString(),model:r.model.id,iter:Number(s.iter)||0,prefixHash:h,promptTokens:De.promptTokens,cachedTokens:De.cachedTokens,prefixTokens:De.prefixTokens,prefixSource:De.prefixSource,hit:De.hit,coverage:De.coverage};for(_o.push(st);_o.length>vx;)_o.shift();return s.snapshot!==!1&&kt&&(kt.prefixHash=st.prefixHash,kt.promptTokens=st.promptTokens,kt.cachedTokens=st.cachedTokens,kt.prefixTokens=st.prefixTokens,kt.hit=st.hit,kt.coverage=st.coverage),w("stream_done",{provider:r.provider.id,model:r.model.id,chars:U.length,reasoningChars:Ee.length,chunks:N,toolCalls:ke.map(te=>te.function.name),thinking:d||"none",inline:p,verbosity:s.verbosity||"none",prefixHash:h,promptTokens:De.promptTokens,cachedTokens:De.cachedTokens,completionTokens:De.completionTokens,prefixTokens:De.prefixTokens,hit:De.hit,coverage:De.coverage,finishReason:he,usage:!!z}),z&&De.cachedTokens===0&&De.prefixTokens>0&&w("cache_miss_suspect",{prefixHash:h,prevHash:jn,samePrefix:xs,prefixTokens:De.prefixTokens,promptTokens:De.promptTokens}),{content:U,reasoning:Ee,rawContent:Ot,toolCalls:ke,target:r,usage:z,cache:De,prefixHash:h,finishReason:he,thinking:d}}function sp(t){let e=t&&t.model?Number(t.model.maxInputTokens):0;return isFinite(e)&&e>0?e:65536}function qp(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=Me.estimateTokens(Me.charsOf(e),n),u=!0),c<=0&&a.length&&(c=Me.estimateTokens(a.length,n),u=!0),{promptTokens:l,completionTokens:c,cachedTokens:i,estimated:u,detailsStripped:!!s.detailsStripped}}function wa(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 Vk=new Set,Ej=8,Pj=8e3,jj=4;function Nj(t,e){return!t||!e||e.estimated||Number(e.cachedTokens)>0||Number(e.requests)<Ej||Number(e.contextTokens)<Pj||Vk.has(t)||_o.filter(function(s){return Number(s.cachedTokens)===0&&Number(s.prefixTokens)>0}).length<jj?null:(Vk.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 er=I.join(tt.homedir(),".luban","usage"),En="7d";function Bp(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("usage.record")}catch{}return t!==!1}function rp(t,e){if(!e||!Bp())return null;let n=t||{};try{let s=lt(n.modelKey),r=He.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=He.append(er,r);return o.ok?(w("usage_log",{model:r.modelKey,mode:r.mode,source:r.source,total:r.totalTokens,estimated:r.estimated,partial:r.partial,file:o.month}),MN(),r):(w("usage_log_failed",{message:o.error,model:r.modelKey}),null)}catch(s){return w("usage_log_failed",{message:String(s&&s.message||s)}),null}}function Vi(t){let e=He.rangeOf(t||En),n=He.read(er,e.from,e.to),s=He.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:He.RANGES.map(function(r){return{key:r.key,label:M("usage."+r.key)}}),dir:er,files:n.files,badLines:n.bad,record:Bp(),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 Ta="\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",pS=[Ta,"\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"],Fj="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",mS=["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"],Wl=pS.concat([Fj],mS).join(`
915
+ \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 zf(t){try{return(b.workspace.textDocuments||[]).some(function(n){return n&&n.uri&&n.uri.scheme==="file"&&n.uri.fsPath===t})}catch{return!1}}async function Kk(t,e){if(!Yx())return"";try{let n=await Zx([t]),s=ks.summarize(n);return!s.total||!s.error&&!s.warning?e?ep:"":Qx+`
916
+ `+ks.formatLints(n,{maxDiags:10})}catch{return e?ep:""}}async function mj(t){for(let e=t.length-1;e>=0;e--){let n=t[e];try{n.kind==="add"?await b.workspace.fs.delete(b.Uri.file(n.abs),{useTrash:!0}):await Qs(n.abs,n.before||"")}catch(s){w("apply_patch_rollback_failed",{path:it(n.abs),error:s.message})}}}function Vn(t,e,n,s,r,o){let i=String(n??"");if(oc>0||o){let l=ie.get(t);return l&&(l.baseline=i,l.hunks=[],ic(t)),dn.delete(t)&&tS(t),0}let a=ie.get(t);return dn.delete(t),a||(a={abs:t,relPath:it(t),baseline:s?"":String(e??""),isNew:!!s,hunks:[],stats:{add:0,del:0,hunks:0},sessionId:r||""},ie.set(t,a)),r&&(a.sessionId=r),a.hunks=cn.computeHunks(a.baseline,i),a.stats=cn.stats(a.hunks),a.hunks.length?(rr(),sS(t),a.hunks.length):(ie.delete(t),rr(),a.hunks.length)}function hj(t,e,n){for(dn.delete(t),dn.set(t,{before:String(e??""),title:n,at:Date.now()});dn.size>dj;){let s=dn.keys().next();if(!s||s.done)break;dn.delete(s.value)}}function eS(t){let e=[];try{for(let n of b.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 tS(t){for(let e of eS(t))try{await b.window.tabGroups.close(e,!0)}catch{}}function ic(t,e){let n=ie.get(t),s=typeof e=="string"&&!!n,r=s?eS(t):[];s&&r.length?(hj(t,e,M("ext.diffTitle",{file:I.basename(t),add:n.stats.add,del:n.stats.del})),ie.delete(t),kj(t)):(ie.delete(t),n&&tS(t)),$t.delete(t),rr()}var Hk=Promise.resolve(),Gf=0,zk=!1,Gk=!1,$t=new Map,gj=40;function yj(t){for($t.delete(t),$t.set(t,Date.now());$t.size>gj;){let e=$t.keys().next();if(!e||e.done)break;$t.delete(e.value)}}function Xi(){let t=de&&de.webview?de.webview:null;return t?Fo.get(t)===!0:!1}function nS(){if(!$t.size||Xi())return;let t=Array.from($t.keys()).pop();$t.clear(),!(!t||!ie.has(t)||!gc())&&(w("review_auto_diff_deferred_open",{path:it(t)}),sS(t))}function sS(t){if(!gc()||!ie.has(t))return;let e=de&&de.webview?de.webview:null;if(e&&Fo.get(e)===!0){yj(t);return}Gf||(zk=e?ca.get(e)===!0:!1,Gk=e?Fo.get(e)===!0:!1);let n=zk,s=Gk;Gf++,Hk=Hk.then(async function(){try{await Dp(t,{preview:!0,preserveFocus:!0})}catch(r){w("review_auto_diff_failed",{path:it(t),error:r.message})}if(n&&!s){try{await b.commands.executeCommand("workbench.view.extension.luban")}catch(r){w("review_auto_diff_refocus_failed",{path:it(t),error:r.message})}try{let r=de&&de.webview;r&&setTimeout(function(){try{r.postMessage({type:"refocus_input"})}catch{}},120)}catch{}}Gf--})}function tp(){let t=[];for(let e of ie.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 ma(){return{type:"review",files:tp(),at:Date.now()}}async function wj(t){try{await Qs(t,"")}catch{}try{for(let e of b.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 b.window.tabGroups.close(n,!0)}}catch{}try{await b.workspace.fs.delete(b.Uri.file(t),{useTrash:!0})}catch{}}async function Jk(t,e,n){if(e.isNew&&n==="")return await wj(t),ie.delete(t),rr(),{ok:!0,deleted:!0,hunks:0};await Qs(t,n);let s=cn.computeHunks(e.baseline,n);return e.hunks=s,e.stats=cn.stats(s),s.length?rr():ic(t),{ok:!0,hunks:s.length}}function bj(t){return{before:b.Uri.from({scheme:"luban-before",path:t}),after:P.existsSync(t)?b.Uri.file(t):b.Uri.from({scheme:"luban-after",path:t})}}async function rS(t,e,n){let s=n||{},r=bj(t);await b.commands.executeCommand("vscode.diff",r.before,r.after,e,{preview:s.preview===!0,preserveFocus:s.preserveFocus===!0})}async function Dp(t,e){let n=ie.get(t);if(!n)throw new Error(M("ext.noPending",{path:it(t)}));let s=e||{};Lp.add(t);let r=M("ext.diffTitle",{file:I.basename(t),add:n.stats.add,del:n.stats.del});er(),await rS(t,r,s),er()}async function kj(t){let e=dn.get(t);if(e){Lp.add(t);try{await rS(t,e.title,{preview:!1,preserveFocus:!0})}catch(n){w("review_freeze_diff_failed",{path:it(t),error:n.message})}try{er()}catch{}}}async function ha(t,e,n,s){let r=L();if(t==="accept_all"||t==="reject_all"){let c=t==="accept_all"?"accept_file":"reject_file",u=ie.size;for(let d of Array.from(ie.keys())){let f=ie.get(d);s&&f&&f.sessionId&&f.sessionId!==s||await ha(c,d,"")}return{ok:!0,files:u,hunks:0}}let o=Ve(e,r,!0);if(t==="open_diff")return $t.delete(o),await Dp(o),{ok:!0};let i=ie.get(o);if(!i)return{ok:!1,error:M("ext.noPending",{path:e})};let a=Fr(o);if(t==="accept_file"){let c=i.baseline;return i.baseline=a,i.hunks=[],ic(o,c),{ok:!0,hunks:0,files:ie.size}}if(t==="reject_file")return await Jk(o,i,i.baseline);i.hunks=cn.computeHunks(i.baseline,a);let l=i.hunks.find(function(c){return c.id===n});if(!l)return i.stats=cn.stats(i.hunks),rr(),{ok:!1,error:M("ext.hunkGone",{hunk:n})};if(t==="accept_hunk"){let c=i.baseline;return i.baseline=cn.applyHunkToBaseline(i.baseline,l),i.hunks=cn.computeHunks(i.baseline,a),i.stats=cn.stats(i.hunks),i.hunks.length?rr():ic(o,c),{ok:!0,hunks:i.hunks.length}}return t==="reject_hunk"?await Jk(o,i,cn.revertHunkText(a,l)):{ok:!1,error:M("ext.unknownAction",{action:t})}}function oS(){pa||(pa=b.window.createTextEditorDecorationType({isWholeLine:!0,backgroundColor:new b.ThemeColor("diffEditor.insertedLineBackground"),overviewRulerColor:new b.ThemeColor("editorOverviewRuler.addedForeground"),overviewRulerLane:b.OverviewRulerLane.Left}),rc=b.window.createTextEditorDecorationType({backgroundColor:new b.ThemeColor("diffEditor.removedLineBackground"),fontStyle:"italic",overviewRulerColor:new b.ThemeColor("editorOverviewRuler.deletedForeground"),overviewRulerLane:b.OverviewRulerLane.Left}))}function iS(t,e){let n=[],s=[],r=[],o=Math.max(0,t.lineCount-1);for(let i of e.hunks){let a=cn.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 b.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 b.Position(0,0),d=l.lines.slice(0,3).join(" | ");s.push({range:new b.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 Rp(){oS();for(let t of b.window.visibleTextEditors){let e=t.document,n=e.uri.scheme==="file"?ie.get(e.uri.fsPath):null;if(!n){t.setDecorations(pa,[]),t.setDecorations(rc,[]);continue}let s=iS(e,n);t.setDecorations(pa,s.added),t.setDecorations(rc,s.removed)}}function xj(t){if(!un)return[];let e=b.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 b.Range(s,0,s,0);return[new b.CodeLens(r,{title:M("ext.selLensChat"),command:"luban.addSelectionToChat"}),new b.CodeLens(r,{title:M("ext.selLensNewChat"),command:"luban.addSelectionToNewChat"})]}function Sj(t){if(!un)return[];let e=ie.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 b.Range(i,0,i,0);s.push(new b.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 b.CodeLens(a,{title:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:o.id}]}))}if(ya(ga())===t.uri.fsPath)return s;let r=new b.Range(0,0,0,0);return s.push(new b.CodeLens(r,{title:M("ext.viewDiff"),command:"luban.openDiff",arguments:[{path:e.abs}]})),s.push(new b.CodeLens(r,{title:M("ext.keepFile",{add:e.stats.add,del:e.stats.del}),command:"luban.acceptFile",arguments:[{path:e.abs}]})),s.push(new b.CodeLens(r,{title:M("ext.revertFile"),command:"luban.rejectFile",arguments:[{path:e.abs}]})),s}function vj(t){if(!un)return[];let e=ie.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 b.Range(o,0,o,0);s.push(new b.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 b.CodeLens(i,{title:M("ext.revertHunk"),command:"luban.rejectHunk",arguments:[{path:e.abs,hunk:r.id}]}))}return s}function ga(){try{return b.window.tabGroups.activeTabGroup.activeTab}catch{return null}}function ya(t){let e=t&&t.input;if(!e)return"";let n=e.modified,s=e.original;if(n&&s){if(n.scheme==="file"&&ie.has(n.fsPath))return n.fsPath;if(s.scheme==="luban-before"&&ie.has(s.path))return s.path}return""}function _j(t){let e=ya(t);if(e)return e;let n=t&&t.input;return n&&n.uri&&n.uri.scheme==="file"&&ie.has(n.uri.fsPath)?n.uri.fsPath:""}function er(){let t=!1;try{t=!!ya(ga())}catch{t=!1}let e=function(n,s){try{Promise.resolve(b.commands.executeCommand("setContext",n,s)).catch(function(){})}catch{}};e("luban.pendingReview",Yn()),e("luban.reviewDiffActive",t)}function rr(){Wk++;try{if(So){let t=new Set(Array.from(ie.keys()).concat(Array.from(Lp),Array.from(dn.keys())));for(let e of t)So.fire(b.Uri.from({scheme:"luban-before",path:e}))}}catch{}try{un&&un.fire()}catch{}try{Rp()}catch{}try{er()}catch{}try{typeof Fe=="function"?Fe(ma()):ht&&ht.postMessage(ma())}catch{}w("review_state",{files:ie.size,hunks:Yn(),seq:Wk})}function Tj(t){oS(),So=new b.EventEmitter,un=new b.EventEmitter,t.subscriptions.push(pa,rc,So,un),t.subscriptions.push(b.workspace.registerTextDocumentContentProvider("luban-before",{onDidChange:So.event,provideTextDocumentContent:function(r){let o=ie.get(r.path);if(o)return o.baseline;let i=dn.get(r.path);return i?i.before:""}})),t.subscriptions.push(b.workspace.registerTextDocumentContentProvider("luban-after",{onDidChange:So.event,provideTextDocumentContent:function(r){try{return P.existsSync(r.path)?Fr(r.path):""}catch{return""}}})),t.subscriptions.push(b.languages.registerCodeLensProvider({scheme:"file"},{onDidChangeCodeLenses:un.event,provideCodeLenses:function(r){try{return Sj(r).concat(xj(r))}catch{return[]}}})),t.subscriptions.push(b.languages.registerCodeLensProvider({scheme:"luban-before"},{onDidChangeCodeLenses:un.event,provideCodeLenses:function(r){try{return vj(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&&ie.has(l))return{path:l,hunk:o||""}}else if(r&&r.path)return r;let i=_j(ga());if(i)return{path:i,hunk:o||""};let a=b.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 ha(r,a.path,o?a.hunk:"")}catch(c){l={ok:!1,error:c.message}}return w("review_action",{action:r,path:it(s(a.path)),hunk:a.hunk||"",ok:!!l.ok,error:l.error}),l.ok||b.window.showWarningMessage(M("ext.reviewWarn",{msg:l.error||M("ext.actionFailed")})),l}}function s(r){try{return Ve(r,L(),!0)}catch{return r}}t.subscriptions.push(b.commands.registerCommand("luban.openDiff",n("open_diff",!1)),b.commands.registerCommand("luban.acceptHunk",n("accept_hunk",!0)),b.commands.registerCommand("luban.rejectHunk",n("reject_hunk",!0)),b.commands.registerCommand("luban.acceptFile",n("accept_file",!1)),b.commands.registerCommand("luban.rejectFile",n("reject_file",!1)),b.commands.registerCommand("luban.reviewAll",n("accept_all",!1)),b.commands.registerCommand("luban.revertAll",n("reject_all",!1)),b.commands.registerCommand("luban.diffAccept",n("accept_file",!1)),b.commands.registerCommand("luban.diffReject",n("reject_file",!1)),b.window.onDidChangeVisibleTextEditors(function(){try{Rp()}catch{}}),b.window.tabGroups.onDidChangeTabs(function(){try{er()}catch{}}),b.window.tabGroups.onDidChangeTabGroups(function(){try{er()}catch{}}),b.window.onDidChangeActiveTextEditor(function(){try{er()}catch{}}),b.window.onDidChangeTextEditorSelection(function(){try{un&&un.fire()}catch{}}),b.workspace.onDidChangeTextDocument(function(r){let o=r.document.uri.scheme==="file"?r.document.uri.fsPath:"",i=ie.get(o);if(!i)return;let a=cn.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=cn.stats(a),a.length||ie.delete(o),rr())})),er()}function aS(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 lS={model:1,messages:1,stream:1,tools:1,tool_choice:1,max_tokens:1,stream_options:1},$k=2e3,Xk=Object.create(null);function yn(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function Mj(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&&lS[a])continue;let l=o[a];yn(l)&&yn(r[a])?s(r[a],l,i+1):r[a]=l,i===0&&n.push(a)}};return s(t,e,0),n}function cS(t,e){let n=t&&t.thinking;if(!yn(n))return null;let s=function(o){return yn(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 Cj(t){let e=t&&t.thinking;if(!yn(e))return null;let n=["on","off"].filter(function(r){return yn(e[r])});if(!n.length)return null;let s=cS(t,"");return{default:s?s.mode:n[0],tiers:n}}var uS=Xf.DEFAULT_MAX_VERSION;function dS(){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(b.workspace.getConfiguration("luban").get("net.tlsMaxVersion")||"auto")}catch{e="auto"}return e=e.trim().toLowerCase(),e==="1.2"?"1.2":"auto"}function np(t){let e=dS(),n=e==="1.2"?"TLSv1.2":uS,s=!1;try{s=Xf.DEFAULT_MAX_VERSION!==n,Xf.DEFAULT_MAX_VERSION=n}catch{}return s&&w("net_tls_max_version",{mode:e,maxVersion:n,reason:t||""}),e}function fS(t){let e=t;for(let n=0;n<4&&e;n++){if(e.code)return String(e.code);e=e.cause}return""}function Aj(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 Oj(t,e,n){let s=fS(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 jo(t,e,n){let s=n||{},r=lt(e);if(!r)throw new Error("\u6CA1\u6709\u53EF\u7528\u6A21\u578B\u914D\u7F6E");let o=Po(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)),!Vf[r.provider.id]&&r.provider.streamUsage!==!1&&(i.stream_options={include_usage:!0});let c=cS(r.model,s.thinking),u=r.provider.id+"::"+r.model.id+"::",d="",f=null;if(c&&!Xk[u+c.mode]){let te=Mj(i,c.tier);d=c.mode,f=function(){for(let le of te)delete i[le]}}let p=!!(r.model.thinking&&r.model.thinking.inline===!0&&d==="on"),m=t&&t[0]&&t[0].role==="system"?t[0].content:"",h=ys.hash(m,i.tools||[]);s.snapshot!==!1&&(kt={at:new Date().toISOString(),model:r.model.id,prefixHash:h,thinking:d||"none",verbosity:s.verbosity||"none",roles:(t||[]).map(function(te){return te&&te.role}),heads:(t||[]).map(function(te){return aS(te&&te.content,120)})});let k=new AbortController,x=vc(s.signal);x.signal&&(x.isCancelled()?k.abort():x.signal.addEventListener("abort",()=>k.abort()));let T=Math.max(0,Number(s.timeoutMs)||0),g=null,v=!1;T>0&&(g=setTimeout(function(){v=!0,k.abort()},T));let y=_x(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],D=0,G=0,H=null,q=null,fe="",N=0,z=null,he="",ne=new Map,Y=new Map,pe=null,U="",Ee="",ke=[],ut=0,gt=new TextDecoder,ve=function(){return fetch(y,{method:"POST",headers:S,body:JSON.stringify(i),signal:k.signal})};try{for(;;){fe="",N=0,z=null,he="",ne=new Map,Y=new Map,ut=0,pe=VE.newParser({startInThink:p,onContent:function(te){if(te&&(ut+=te.length),s.onToken)try{s.onToken(te)}catch{}},onReasoning:function(te){if(te&&(ut+=te.length),s.onReasoning)try{s.onReasoning(te)}catch{}},onSplit:function(te){if(te&&(ut+=te.length),s.onSplit)try{s.onSplit(te)}catch{}}});try{for(H=await ve();!H.ok&&H.status===400&&D<_.length;){let te=_[D++],le=await H.text();te.field==="stream_options"?(Vf[r.provider.id]=!0,w("stream_usage_unsupported",{provider:r.provider.id,status:H.status,body:le.slice(0,200)})):te.field==="thinking"?(Xk[u+d]=!0,w("thinking_unsupported",{provider:r.provider.id,model:r.model.id,mode:d,status:H.status,body:le.slice(0,200)}),d=""):w("max_tokens_unsupported",{provider:r.provider.id,status:H.status,body:le.slice(0,200)}),te.undo(),H=await ve()}if(!H.ok){let te=await H.text();throw w("http_error",{provider:r.provider.id,model:r.model.id,status:H.status,body:te.slice(0,300)}),new Error(r.provider.id+" HTTP "+H.status+": "+te.slice(0,200))}for(q=H.body.getReader();;){let te=await q.read();if(te.done)break;fe+=gt.decode(te.value,{stream:!0});let le=fe.split(`
917
+ `);fe=le.pop()||"";for(let Pe of le){let dt=Pe.trim();if(!dt.startsWith("data:"))continue;let os=dt.slice(5).trim();if(!os||os==="[DONE]")continue;let Yt;try{Yt=JSON.parse(os)}catch{continue}Yt&&Yt.usage&&(z=Yt.usage);let Pt=Yt.choices&&Yt.choices[0];Pt&&Pt.finish_reason&&(he=String(Pt.finish_reason));let _t=Pt&&Pt.delta;if(!_t)continue;_t.content&&(N++,pe.pushContent(_t.content));let Hn=_t.reasoning_content!=null?_t.reasoning_content:_t.reasoning!=null?_t.reasoning:_t.thinking;if(typeof Hn=="string"&&Hn&&pe.pushReasoning(Hn),_t.tool_calls)for(let $e of _t.tool_calls){let bn;typeof $e.index=="number"?bn=$e.index:$e.id?(Y.has($e.id)||Y.set($e.id,ne.size),bn=Y.get($e.id)):bn=ne.size?Math.max.apply(null,Array.from(ne.keys())):0;let Nn=ne.get(bn);Nn||(Nn={id:"",type:"function",function:{name:"",arguments:""}},ne.set(bn,Nn)),$e.id&&(Nn.id=$e.id,Y.has($e.id)||Y.set($e.id,bn)),$e.function&&$e.function.name&&(Nn.function.name=$e.function.name),$e.function&&$e.function.arguments!=null&&(Nn.function.arguments+=typeof $e.function.arguments=="string"?$e.function.arguments:JSON.stringify($e.function.arguments))}}}break}catch(te){if(v)throw w("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 le=Aj(te);if(x.isCancelled()||ut>0||G>=C||!le)throw le?new Error(Oj(te,r.provider,G)):te;G++;let Pe=A[G-1]||A[A.length-1];w("stream_net_retry",{provider:r.provider.id,model:r.model.id,attempt:G,message:String(te&&te.message||"").slice(0,120),code:fS(te),delayMs:Pe}),await new Promise(function(dt){setTimeout(dt,Pe)})}}}finally{g&&(clearTimeout(g),g=null)}pe.end(),U=pe.content,Ee=pe.reasoning;let Et=pe.rawContent;ke=Array.from(ne.keys()).sort((te,le)=>te-le).map(te=>ne.get(te));let vt=r.provider.id+"::"+r.model.id,Le=Mk.get(vt)||{hash:"",tokens:0},jn=Le.hash,Ss=!!jn&&jn===h,rs=Ss?Le.tokens:0,De=ys.stats(z,t,rs);Mk.set(vt,{hash:h,tokens:De.promptTokens});let st={at:new Date().toISOString(),model:r.model.id,iter:Number(s.iter)||0,prefixHash:h,promptTokens:De.promptTokens,cachedTokens:De.cachedTokens,prefixTokens:De.prefixTokens,prefixSource:De.prefixSource,hit:De.hit,coverage:De.coverage};for(_o.push(st);_o.length>vx;)_o.shift();return s.snapshot!==!1&&kt&&(kt.prefixHash=st.prefixHash,kt.promptTokens=st.promptTokens,kt.cachedTokens=st.cachedTokens,kt.prefixTokens=st.prefixTokens,kt.hit=st.hit,kt.coverage=st.coverage),w("stream_done",{provider:r.provider.id,model:r.model.id,chars:U.length,reasoningChars:Ee.length,chunks:N,toolCalls:ke.map(te=>te.function.name),thinking:d||"none",inline:p,verbosity:s.verbosity||"none",prefixHash:h,promptTokens:De.promptTokens,cachedTokens:De.cachedTokens,completionTokens:De.completionTokens,prefixTokens:De.prefixTokens,hit:De.hit,coverage:De.coverage,finishReason:he,usage:!!z}),z&&De.cachedTokens===0&&De.prefixTokens>0&&w("cache_miss_suspect",{prefixHash:h,prevHash:jn,samePrefix:Ss,prefixTokens:De.prefixTokens,promptTokens:De.promptTokens}),{content:U,reasoning:Ee,rawContent:Et,toolCalls:ke,target:r,usage:z,cache:De,prefixHash:h,finishReason:he,thinking:d}}function sp(t){let e=t&&t.model?Number(t.model.maxInputTokens):0;return isFinite(e)&&e>0?e:65536}function qp(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=Me.estimateTokens(Me.charsOf(e),n),u=!0),c<=0&&a.length&&(c=Me.estimateTokens(a.length,n),u=!0),{promptTokens:l,completionTokens:c,cachedTokens:i,estimated:u,detailsStripped:!!s.detailsStripped}}function wa(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 Vk=new Set,Ej=8,Pj=8e3,jj=4;function Nj(t,e){return!t||!e||e.estimated||Number(e.cachedTokens)>0||Number(e.requests)<Ej||Number(e.contextTokens)<Pj||Vk.has(t)||_o.filter(function(s){return Number(s.cachedTokens)===0&&Number(s.prefixTokens)>0}).length<jj?null:(Vk.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 tr=I.join(tt.homedir(),".luban","usage"),En="7d";function Bp(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("usage.record")}catch{}return t!==!1}function rp(t,e){if(!e||!Bp())return null;let n=t||{};try{let s=lt(n.modelKey),r=He.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=He.append(tr,r);return o.ok?(w("usage_log",{model:r.modelKey,mode:r.mode,source:r.source,total:r.totalTokens,estimated:r.estimated,partial:r.partial,file:o.month}),MN(),r):(w("usage_log_failed",{message:o.error,model:r.modelKey}),null)}catch(s){return w("usage_log_failed",{message:String(s&&s.message||s)}),null}}function Vi(t){let e=He.rangeOf(t||En),n=He.read(tr,e.from,e.to),s=He.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:He.RANGES.map(function(r){return{key:r.key,label:M("usage."+r.key)}}),dir:tr,files:n.files,badLines:n.bad,record:Bp(),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 Ta="\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",pS=[Ta,"\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"],Fj="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",mS=["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"],Wl=pS.concat([Fj],mS).join(`
918
918
  `),Ij=pS.concat(mS).join(`
919
919
  `),hS=[Ta,"\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"],Lj="9. \u9700\u8981\u6700\u65B0\u5916\u90E8\u4FE1\u606F\u65F6\u53EF\u7528 web_search / web_fetch\uFF0C\u5F15\u7528\u6807 [n]\u3002",Kl=hS.concat([Lj]).join(`
920
920
  `),Dj=hS.join(`
921
- `),gS=$s.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}),Up=$s.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}),Ir={rounds:24,minutes:8,perTurn:4,minuteRatio:.5,minMinutes:3,maxMinutes:12},ia=[Ta,"\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(`
921
+ `),gS=Xs.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}),Up=Xs.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}),Ir={rounds:24,minutes:8,perTurn:4,minuteRatio:.5,minMinutes:3,maxMinutes:12},ia=[Ta,"\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
922
  `);function ac(t){let e=t===!1,n=Up.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 yS=[Ta,"\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"],Rj="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",wS=["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"],qj=yS.concat([Rj],wS).join(`
923
923
  `),Bj=yS.concat(wS).join(`
924
- `);function Js(t,e,n,s,r){let o=t==="plan",i=t==="explore",a=!!(s&&s.compact)&&!o&&!i,c=[i?ia:a?n===!1?Dj:Kl:o?n===!1?Bj:qj:n===!1?Ij:Wl],u=String(e??"")||L();u&&c.push("\u5DE5\u4F5C\u76EE\u5F55\uFF1A"+u);try{Yi(u,{refresh:!1});let f=Gt.block();f&&c.push(f)}catch(f){w("system_prompt_extra_failed",{message:f.message})}try{let f=Rt.block();f&&c.push(f)}catch(f){w("system_prompt_extra_failed",{message:f.message})}!i&&Ep()&&c.push(Uj),!i&&!o&&Ip()&&oe.available().ok&&c.push(Wj),i&&c.push(ac(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(`
924
+ `);function $s(t,e,n,s,r){let o=t==="plan",i=t==="explore",a=!!(s&&s.compact)&&!o&&!i,c=[i?ia:a?n===!1?Dj:Kl:o?n===!1?Bj:qj:n===!1?Ij:Wl],u=String(e??"")||L();u&&c.push("\u5DE5\u4F5C\u76EE\u5F55\uFF1A"+u);try{Yi(u,{refresh:!1});let f=Gt.block();f&&c.push(f)}catch(f){w("system_prompt_extra_failed",{message:f.message})}try{let f=Rt.block();f&&c.push(f)}catch(f){w("system_prompt_extra_failed",{message:f.message})}!i&&Ep()&&c.push(Uj),!i&&!o&&Ip()&&oe.available().ok&&c.push(Wj),i&&c.push(ac(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
925
 
926
926
  `)}var Uj=["\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(`
927
- `),Wj=["\u684C\u9762\u64CD\u4F5C\uFF08"+yx+"\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 "+(Zn?"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"+(Zn?"\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"+(Zn?"\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",Zn?"\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",QE,Zn?"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(`
927
+ `),Wj=["\u684C\u9762\u64CD\u4F5C\uFF08"+yx+"\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 "+(Qn?"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"+(Qn?"\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"+(Qn?"\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",Qn?"\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",QE,Qn?"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
928
  `),Kj=[Ta,"\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(`
929
929
  `),Hj=["\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(`
930
930
  `),Co={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},zj={concise:512,normal:2048,detailed:4096},Yk=4e3,Zk="start",Qk="end",aa=6e3,Gj="\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",Jj="\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 lc(t){let e=String(t??"");return e.length<=aa?e:e.slice(0,aa)+`
@@ -942,34 +942,34 @@ Plugins run on this machine with your permissions. After installing, you still h
942
942
  - `+m.join(`
943
943
  - `)),cc(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(`
944
944
 
945
- `),usage:null}}var eN=/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 tN(t){let e=String(t&&t.message||t||"");return eN.test(e)}async function ks(t,e){let n=e||{},s=n.root||L(),r=Wp(),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(W){let V=Date.now();try{return await n.askWait(W)}finally{u+=Date.now()-V}}:n.askWait,p=typeof n.confirmWrite=="function"?async function(W){let V=Date.now();try{return await n.confirmWrite(W)}finally{u+=Date.now()-V}}:n.confirmWrite,m=n.mode==="plan"?"plan":n.mode==="explore"?"explore":"agent",h=m==="plan",k=m==="explore",x=h||k,T=k?null:{max:Ir.perTurn,left:Ir.perTurn},g=typeof n.onSubProgress=="function"?n.onSubProgress:n.onProgress?function(W){if(!(W&&W.running===!1))try{n.onProgress("\u5B50\u4EE3\u7406\u300C"+(W&&W.description||"")+"\u300D"+(W&&W.line||""))}catch{}}:null,v=jx(t),y=!!(n.webSearch||v.web),S=lt(n.modelKey),_=sp(S),C=ln.profile(_,{mode:Kp()}),A=m!=="agent"?"normal":n.verbosity==="concise"||n.verbosity==="detailed"?n.verbosity:n.verbosity==="normal"?"normal":Vj(),D={perFile:C.refPerFile,total:C.refTotal,readMax:C.readMax},G=Nr(v.prompt,s,{budgets:D});if(n.onRefs&&G.refs.length)try{n.onRefs(G.refs)}catch{}let H=k?"":Cp(G.refs,s,C,{sessionId:n.sessionId}),q=[],fe=function(){if(n.onUsage)try{n.onUsage(wa(q,_,S&&S.model&&S.model.id))}catch{}},N=[],z=[],he=new AbortController;n.token&&n.token.onCancellationRequested&&n.token.onCancellationRequested(()=>he.abort());let ne="";if(y){if(n.onProgress)try{n.onProgress("web_search "+(v.prompt||t).slice(0,40))}catch{}if(n.onTool)try{n.onTool({phase:Zk,id:"web:0",name:"web_search",path:String(v.prompt||t).slice(0,60)})}catch{}let W=await Nx(v.prompt||t,S,{signal:he.signal,onSearch:n.onSearch});ne=W.block;let V={phase:Qk,id:"web:0",name:"web_search",path:W.query.slice(0,60),ok:W.results.length>0,result:W.results.length+" \u6761\u7ED3\u679C"};if(N.push(V),w("agent_tool",V),n.onTool)try{n.onTool(V)}catch{}}try{await we.ready()}catch(W){w("mcp_ready_failed",{message:W.message})}let Y="";if(!k)try{Y=we.promptBlock()}catch(W){w("mcp_prompt_failed",{message:W.message})}let pe=(Array.isArray(n.history)?n.history:[]).map(function(W){return{role:W.role,content:Array.isArray(W.content)?W.content:String(W.content==null?"":W.content)}}),U=[{role:"system",content:Js(m,s,Dn(S&&S.provider)!=="none",C,A)}].concat(pe),Ee=[],ke=String(n.spillDigest||"").trim(),ut=k?"":Bx(n.sessionId),gt="";if(!k)try{let W=[];for(let O of G.refs||[])O&&O.path&&W.push(String(O.path));let V=qx(n.sessionId);if(V)for(let O of V)W.push(String(O));for(let O of ie.values())(!n.sessionId||!O.sessionId||O.sessionId===n.sessionId)&&W.push(O.abs);gt=Gt.matched(W),gt&&w("agent_rules_matched",{files:W.length,chars:gt.length})}catch(W){w("agent_rules_failed",{message:W.message})}let ve=gs.buildUserTurn({envBlock:Y,spillBlock:ke,rule:gt,autoBlock:H,webBlock:ne,worksetBlock:ut,refText:G.text});if(jr.pushUser(U,ve),Array.isArray(n.images)&&n.images.length){let W=U[U.length-1];W&&W.role==="user"&&typeof W.content=="string"&&(W.content=xe.toContent(W.content,n.images))}if(n.onUserTurn)try{n.onUserTurn(ve)}catch{}pe.length&&w("agent_memory",{messages:pe.length,chars:pe.reduce(function(W,V){return W+Me.contentChars(V.content)},0),plan:h});let Ot=Gs(m,S,C),vt=Me.charsOfTools(Ot),Le=_,jn=Math.floor(Le*r.windowRatio),xs=Math.floor(Le*r.lowRatio),ss=function(){return Me.charsOf(U)+vt},De=Me.DEFAULTS.ratio,st=function(W){return Me.estimateTokens(W,De)},te=function(W){return Math.floor(W/Me.ratioOf(De))-vt},le=0,Pe=null,dt="",rs=[],Yt=!1,Et=0,_t=0,Hn=!1,$e=0,bn="",Nn="",Ss=0,os=0,Wr=new Map,qo=0,Oa=n.spillStore&&typeof n.spillStore.put=="function"?n.spillStore:pn.createStore(),Ic=wc(Oa),Kr=0;function Hr(W){let V=W>0?W:jn;if(st(ss())<=V)return!0;for(let X of C.keepTailSteps){let $=Me.compact(U,{keepTail:X,spill:Ic});if($.beforeChars===$.afterChars)break;U.length=0;for(let ze of $.messages)U.push(ze);if(w("agent_compact",{iters:le,keepTail:X,beforeChars:$.beforeChars,afterChars:$.afterChars,omittedTools:$.omittedTools,omittedArgs:$.omittedArgs,spilled:$.spilled||0,tokensBefore:st($.beforeChars+vt),tokensAfter:st($.afterChars+vt),highTokens:V,tier:C.tier}),st($.afterChars+vt)<=xs)break}if(st(ss())<=V)return!0;let O=W>0?W:xs,F=ln.squeeze(U,te(O),{summaryReserve:ln.DEFAULTS.summaryReserve});if(F.ok||(Kr=Math.max(Kr,F.minChars)),F.ok&&F.dropped>0){U.length=0;for(let X of F.messages)U.push(X);w("agent_squeeze",{iters:le,dropped:F.dropped,beforeChars:F.beforeChars,afterChars:F.chars,tokensAfter:st(F.chars+vt),highTokens:V,tier:C.tier})}return st(ss())<=V}function Ea(){let W=String(U[0]&&U[0].content||"").length,V=st(W+vt),O=Kr>0?st(Kr+vt):st(ss()),F=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 "+jn+"\uFF09\uFF1A\u7CFB\u7EDF\u63D0\u793A + \u5DE5\u5177\u5B9A\u4E49\u56FA\u5B9A\u7EA6 "+V+" token\uFF0C\u538B\u7F29\u5230\u6700\u5C0F\u4ECD\u9700 "+O+" token"+F}for(;;){if(i>0&&le>=i){Pe={reason:"maxRounds",detail:"\u8FBE\u5230\u6A21\u578B\u8BF7\u6C42\u8F6E\u6570\u4E0A\u9650 "+i};break}let W=u-Date.now();if(W<=0){Pe={reason:"timeout",detail:"\u8D85\u8FC7\u5899\u949F\u4E0A\u9650 "+l+" \u5206\u949F"};break}if(d>0&&W<=d){Pe={reason:"timeout",detail:"\u5899\u949F\u5269\u4F59 "+Math.ceil(W/1e3)+" \u79D2\uFF0C\u9884\u7559\u6536\u5C3E\u603B\u7ED3\u65F6\u95F4"};break}if(!Hr()){Pe={reason:"context",detail:Ea()};break}let V;if(typeof n.onRound=="function")try{n.onRound(le+1)}catch{}try{V=await jo(U,n.modelKey,{tools:Ot,onToken:n.onToken,onReasoning:n.onReasoning,onSplit:n.onSplit,signal:he.signal,thinking:n.thinking,verbosity:A,snapshot:le===0,iter:le,timeoutMs:Math.max(1e3,Math.min(r.requestTimeoutMs,W))})}catch(R){if(String(R&&R.message).indexOf("\u8BF7\u6C42\u8D85\u65F6")===0){Pe={reason:"timeout",detail:R.message};break}if(tN(R)&&$e<2){$e++,Le=Math.max(2048,Math.floor(Le*.8)),jn=Math.floor(Le*r.windowRatio),xs=Math.floor(Le*r.lowRatio);let ee=Hr(Math.floor(jn*.75));if(w("agent_window_guess",{iters:le,window:Le,highTokens:jn,squeezed:ee,message:String(R&&R.message||"").slice(0,160)}),n.onProgress)try{n.onProgress(M("ext.ctxOverflowShrink",{window:Le}))}catch{}if(ee)continue}throw R}if(le++,V.reasoning&&z.push(V.reasoning),rs.push({text:V.content||"",reasoning:V.reasoning||"",cont:Yt}),typeof n.onRoundEnd=="function")try{n.onRoundEnd({iter:le,text:V.content||"",reasoning:V.reasoning||"",cont:Yt})}catch{}Yt=!1;let O=Number(V.cache&&V.cache.promptTokens)||0;if(O>0){let R=Me.charsOf(U)+vt;R>0&&(De=Me.ratioOf(O/R))}if(q.push(qp(V,U,De)),fe(),!V.toolCalls.length){if(dt=V.content||"",(V.finishReason==="length"||V.finishReason==="max_tokens")&&Et<r.lengthRetry){Et++,Yt=!0;let R=dt||String(V.rawContent||"");w("agent_length_retry",{iters:le,chars:dt.length,resumeChars:R.length,retry:Et}),U.push({role:"assistant",content:R}),U.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(!x&&N.length>0&&!SS(N)&&!Hl(N)&&r.noWriteNudges>0){let R=u-Date.now();if(_t<r.noWriteNudges&&R>Math.max(5e3,d)){_t++,w("agent_no_write_nudge",{iters:le,toolCalls:N.length,chars:dt.length,nudge:_t,max:r.noWriteNudges}),U.push({role:"assistant",content:dt}),U.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}dt=Zj(dt,N),Pe={reason:"final",detail:"noWrites"};break}Pe={reason:"final",detail:""};break}U.push({role:"assistant",content:V.content||"",tool_calls:V.toolCalls});let F=V.finishReason==="length"||V.finishReason==="max_tokens",X=function(R,ee){let ce=ee.path||ee.dir||(ee.command?String(ee.command).slice(0,60):"")||(ee.job_id?String(ee.job_id).slice(0,60):"")||(ee.query?String(ee.query).slice(0,60):"")||(ee.url?String(ee.url).slice(0,60):"")||(ee.name?String(ee.name).slice(0,60):"")||(ee.pattern?String(ee.pattern).slice(0,60):"")||(Array.isArray(ee.patterns)?ee.patterns.join(" ").slice(0,60):"")||(ee.from?String(ee.from).slice(0,60):"");if(!ce&&R==="todo_write"){let se=Xt.normalize(ee.todos),Bo=se.filter(function(Ut){return Ut.status==="completed"||Ut.status==="cancelled"}).length;ce=se.length?Bo+"/"+se.length:"\u66F4\u65B0\u6E05\u5355"}if(!ce&&R==="apply_patch"){let se=String(ee.patch||"").match(/\*\*\*\s*(Add|Update|Delete) File:/g);ce=se&&se.length?se.length+" \u4E2A\u6587\u4EF6":"patch"}if(!ce&&R==="ask_question"){let se=Array.isArray(ee.questions)&&ee.questions[0];ce=String(ee.title||se&&(se.prompt||se.question)||"\u63D0\u95EE").slice(0,60)}let Re=String(R);if(!ce&&(Re.indexOf("mcp__")===0||Re.indexOf("pl__")===0)){for(let se of Object.keys(ee))if(typeof ee[se]=="string"&&ee[se].trim()){ce=ee[se].trim().slice(0,60);break}}return ce},$=V.toolCalls.map(function(R,ee){let ce=R.function.name,Re=ij(R.function.arguments),se=Re.args;Re.repaired&&w("tool_args_repaired",{tool:ce,how:Re.repaired});let Bo=se.path||se.file_path||se.from||se.dir||se.command||se.name||se.description||se.pattern||(Array.isArray(se.patterns)?se.patterns.join(" "):"")||se.url||se.action||"",Ut=ce+" "+Bo;if(n.onProgress)try{n.onProgress(Ut.trim())}catch{}let Pt={tc:R,toolName:ce,args:se,label:Ut.trim().slice(0,80),id:"r"+le+":"+ee,brief:X(ce,se),run:!1,ok:!0,rejected:!1,result:""};return F?(Pt.ok=!1,Pt.result="ERROR: "+ce+" \u672A\u6267\u884C\uFF1A\u4E0A\u4E00\u6761\u56DE\u7B54\u89E6\u5230\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\uFF08finish_reason="+V.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",w("tool_skipped_truncated",{tool:ce,rawLen:String(R.function.arguments||"").length})):Re.error?(Pt.ok=!1,Pt.result="ERROR: "+ce+" \u672A\u6267\u884C\uFF1A"+Re.error+`
946
- \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`,w("tool_args_invalid",{tool:ce,rawLen:String(R.function.arguments||"").length,hint:String(Re.error).slice(0,Ul)})):aj(Re.args)?(Pt.ok=!1,Pt.result="ERROR: "+ce+' \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 '+ce+"\uFF0C\u5E76\u7ED9\u51FA\u5B8C\u6574\u53C2\u6570\uFF08read_file / write_file / replace_in_file \u81F3\u5C11\u8981\u7ED9 path\uFF09\u3002",w("tool_args_omitted",{tool:ce,rawLen:String(R.function.arguments||"").length})):Pt.run=!0,Pt}),ze=async function(R){try{R.result=await Rn(R.toolName,R.args,s,V.target,{mode:m,modelKey:V.target&&V.target.key,readMax:D.readMax,caps:C,todosState:n.todosState,onTodos:n.onTodos,askWait:f,confirmWrite:p,spillStore:Oa,sessionId:n.sessionId||"",autoKeep:n.autoKeep===!0,inSubagent:k,subBudget:T,onSubProgress:g,onSubUsage:function(ee){let ce=Array.isArray(ee)?ee:[];for(let Re of ce)Re&&(Re.subagent=!0,q.push(Re));if(ce.length&&fe(),typeof n.onSubUsage=="function")try{n.onSubUsage(ce)}catch{}}}),(R.toolName==="run_command"||R.toolName==="run_command_start")&&ws(m,hc())&&!Ys.check(String(R.args.command||"")).ok&&(R.rejected=!0)}catch(ee){R.ok=!1,R.result="ERROR: "+ee.message}};if(n.onTool){for(let R of $)if(R.run)try{n.onTool({phase:Zk,id:R.id,name:R.toolName,path:R.brief})}catch{}}for(let R=0;R<$.length;R++){let ee=$[R];if(!ee.run)continue;if(!ex[ee.toolName]){await ze(ee);continue}let ce=[ee],Re=R+1;for(;Re<$.length;){let se=$[Re];if(se.run&&!ex[se.toolName])break;se.run&&ce.push(se),Re++}for(let se=0;se<ce.length;se+=r.parallelMax)await Promise.all(ce.slice(se,se+r.parallelMax).map(ze));R=Re-1}let Ze=null,Xe="";for(let R of $){let ee=R.tc,ce=R.toolName,Re=R.args,se=R.ok,Bo=R.brief,Ut=String(R.result);se&&R.result&&Array.isArray(R.result.images)&&R.result.images.length&&(Ze=R.result.images,Xe=ce);let Pt={phase:Qk,id:R.id,name:ce,path:Bo,ok:se,result:Ut.length>Yk?Ut.slice(0,Yk)+"\u2026":Ut};if(N.push(Pt),w("agent_tool",{name:Pt.name,path:Pt.path,ok:Pt.ok,result:Pt.result.slice(0,Xj)}),n.onTool)try{n.onTool(Pt)}catch{}let Lc=ce==="run_command_poll"&&se&&/^status=running\b/m.test(Ut),Uo=Me.fingerprint(ce,Re),ir=Wr.get(Uo)||{total:0,fails:0,label:R.label};Lc||(Uo===bn&&Ut===Nn?Ss++:(bn=Uo,Nn=Ut,Ss=1),ir=Wr.get(Uo)||{total:0,fails:0,label:R.label},$j[ce]||ir.total++,(!se||R.rejected)&&ir.fails++,Wr.set(Uo,ir)),se&&!R.rejected?os=0:os++,R.rejected&&qo++;let ym=Ut;!F&&!Lc&&ir.fails>=2&&(ym="\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u6B64\u5DE5\u5177\u8C03\u7528\uFF08"+R.label+"\uFF09\u6B64\u524D\u5DF2\u5931\u8D25 "+ir.fails+` \u6B21\uFF0C\u8BF7\u52FF\u91CD\u8BD5\uFF0C\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\u3002
947
- `+Ut,w("tool_repeat_warn",{tool:ce,fails:ir.fails})),U.push({role:"tool",tool_call_id:ee.id||"call_"+(le-1),content:ym})}if(Ze&&Ze.length){if(Ee.length){let ce=new Set(Ee);for(let Re=U.length-1;Re>=0;Re--)ce.has(U[Re])&&U.splice(Re,1);Ee.length=0}let ee={role:"user",content:[{type:"text",text:Xe==="computer"?Jj:Gj}]};for(let ce of Ze)ee.content.push({type:"image_url",image_url:{url:ce.dataUrl}});U.push(ee),Ee.push(ee),w("shot_injected",{iters:le,images:Ze.length,from:Xe||"browser"})}if(F){if(Et<r.lengthRetry){Et++,w("agent_length_retry",{iters:le,toolCalls:V.toolCalls.length,retry:Et,kind:"tool_args"}),U.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}Pe={reason:"length",detail:"\u8F93\u51FA\u8FDE\u7EED "+(Et+1)+" \u6B21\u89E6\u5230\u957F\u5EA6\u4E0A\u9650\uFF0C\u5DE5\u5177\u53C2\u6570\u65E0\u6CD5\u751F\u6210\u5B8C\u6574",maxOutTokens:bt(V.target&&V.target.model&&V.target.model.maxOutputTokens)};break}if(Ss>=r.repeatLimit){if(!Hn&&u-Date.now()>d){Hn=!0;let R=String(bn).split("|")[0];w("agent_loop_nudge",{iters:le,kind:"repeat",count:Ss,tool:R}),U.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 "+Ss+" \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}Pe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+Ss+" \u6B21\u8FD4\u56DE\u76F8\u540C\u7ED3\u679C"};break}if(os>=r.errorLimit){Pe={reason:"errors",detail:"\u8FDE\u7EED "+os+" \u6B21\u5DE5\u5177\u62A5\u9519"+(qo?"\uFF08\u672C\u8F6E\u7D2F\u8BA1 "+qo+" \u6761\u88AB\u62D2\u7EDD\u6216\u7A7A\u547D\u4EE4\uFF09":"")};break}let Ge=null;for(let R of Wr.values())if(R.total>=r.fpTotalLimit){Ge=R;break}if(Ge){if(!Hn&&u-Date.now()>d){Hn=!0,w("agent_loop_nudge",{iters:le,kind:"fpTotal",count:Ge.total,tool:Ge.label}),U.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 "+Ge.total+" \u6B21\uFF08"+Ge.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}Pe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u672C\u8F6E\u5DF2\u6267\u884C "+Ge.total+" \u6B21\uFF08"+Ge.label+"\uFF09"};break}if(!Hr()){Pe={reason:"context",detail:Ea()};break}}let or=dt;if(Pe.reason!=="final"){Hr();let W=Math.max(0,u-Date.now()),V=await Qj(U,{modelKey:n.modelKey,stop:Pe,signal:he.signal,iter:le,remainingMs:W,totalMs:c,lastText:dt,toolCalls:N.length,ratio:De,log:N,verbosity:A});or=V.text,V.usage&&(q.push(V.usage),fe()),or||(or=M("ext.summary.fallbackShort",{reason:Mc(Pe),n:N.length}))}if(Pe&&Pe.reason==="timeout"&&n.sessionId)try{let W=ye.stopAll(n.sessionId);W&&W.stopped&&w("async_cmd_stop_all",{sessionId:n.sessionId,stopped:W.stopped,reason:"agent_timeout"})}catch{}let zr=wa(q,_,S&&S.model&&S.model.id),Pa=Nj(S&&S.provider&&S.provider.id,zr);return Pa&&(zr.prefixHint=Pa),w("agent_done",{iters:le,toolCalls:N.length,chars:or.length,model:n.modelKey,mode:m,stop:Pe.reason,detail:Pe.detail,truncated:Pe.reason!=="final",tokensRatio:Number(De.toFixed(3)),usage:zr}),wp(),{text:or,reasoning:z.join(`
945
+ `),usage:null}}var eN=/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 tN(t){let e=String(t&&t.message||t||"");return eN.test(e)}async function xs(t,e){let n=e||{},s=n.root||L(),r=Wp(),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(W){let V=Date.now();try{return await n.askWait(W)}finally{u+=Date.now()-V}}:n.askWait,p=typeof n.confirmWrite=="function"?async function(W){let V=Date.now();try{return await n.confirmWrite(W)}finally{u+=Date.now()-V}}:n.confirmWrite,m=n.mode==="plan"?"plan":n.mode==="explore"?"explore":"agent",h=m==="plan",k=m==="explore",x=h||k,T=k?null:{max:Ir.perTurn,left:Ir.perTurn},g=typeof n.onSubProgress=="function"?n.onSubProgress:n.onProgress?function(W){if(!(W&&W.running===!1))try{n.onProgress("\u5B50\u4EE3\u7406\u300C"+(W&&W.description||"")+"\u300D"+(W&&W.line||""))}catch{}}:null,v=jx(t),y=!!(n.webSearch||v.web),S=lt(n.modelKey),_=sp(S),C=ln.profile(_,{mode:Kp()}),A=m!=="agent"?"normal":n.verbosity==="concise"||n.verbosity==="detailed"?n.verbosity:n.verbosity==="normal"?"normal":Vj(),D={perFile:C.refPerFile,total:C.refTotal,readMax:C.readMax},G=Nr(v.prompt,s,{budgets:D});if(n.onRefs&&G.refs.length)try{n.onRefs(G.refs)}catch{}let H=k?"":Cp(G.refs,s,C,{sessionId:n.sessionId}),q=[],fe=function(){if(n.onUsage)try{n.onUsage(wa(q,_,S&&S.model&&S.model.id))}catch{}},N=[],z=[],he=new AbortController;n.token&&n.token.onCancellationRequested&&n.token.onCancellationRequested(()=>he.abort());let ne="";if(y){if(n.onProgress)try{n.onProgress("web_search "+(v.prompt||t).slice(0,40))}catch{}if(n.onTool)try{n.onTool({phase:Zk,id:"web:0",name:"web_search",path:String(v.prompt||t).slice(0,60)})}catch{}let W=await Nx(v.prompt||t,S,{signal:he.signal,onSearch:n.onSearch});ne=W.block;let V={phase:Qk,id:"web:0",name:"web_search",path:W.query.slice(0,60),ok:W.results.length>0,result:W.results.length+" \u6761\u7ED3\u679C"};if(N.push(V),w("agent_tool",V),n.onTool)try{n.onTool(V)}catch{}}try{await we.ready()}catch(W){w("mcp_ready_failed",{message:W.message})}let Y="";if(!k)try{Y=we.promptBlock()}catch(W){w("mcp_prompt_failed",{message:W.message})}let pe=(Array.isArray(n.history)?n.history:[]).map(function(W){return{role:W.role,content:Array.isArray(W.content)?W.content:String(W.content==null?"":W.content)}}),U=[{role:"system",content:$s(m,s,Dn(S&&S.provider)!=="none",C,A)}].concat(pe),Ee=[],ke=String(n.spillDigest||"").trim(),ut=k?"":Bx(n.sessionId),gt="";if(!k)try{let W=[];for(let O of G.refs||[])O&&O.path&&W.push(String(O.path));let V=qx(n.sessionId);if(V)for(let O of V)W.push(String(O));for(let O of ie.values())(!n.sessionId||!O.sessionId||O.sessionId===n.sessionId)&&W.push(O.abs);gt=Gt.matched(W),gt&&w("agent_rules_matched",{files:W.length,chars:gt.length})}catch(W){w("agent_rules_failed",{message:W.message})}let ve=ys.buildUserTurn({envBlock:Y,spillBlock:ke,rule:gt,autoBlock:H,webBlock:ne,worksetBlock:ut,refText:G.text});if(jr.pushUser(U,ve),Array.isArray(n.images)&&n.images.length){let W=U[U.length-1];W&&W.role==="user"&&typeof W.content=="string"&&(W.content=xe.toContent(W.content,n.images))}if(n.onUserTurn)try{n.onUserTurn(ve)}catch{}pe.length&&w("agent_memory",{messages:pe.length,chars:pe.reduce(function(W,V){return W+Me.contentChars(V.content)},0),plan:h});let Et=Js(m,S,C),vt=Me.charsOfTools(Et),Le=_,jn=Math.floor(Le*r.windowRatio),Ss=Math.floor(Le*r.lowRatio),rs=function(){return Me.charsOf(U)+vt},De=Me.DEFAULTS.ratio,st=function(W){return Me.estimateTokens(W,De)},te=function(W){return Math.floor(W/Me.ratioOf(De))-vt},le=0,Pe=null,dt="",os=[],Yt=!1,Pt=0,_t=0,Hn=!1,$e=0,bn="",Nn="",vs=0,is=0,Wr=new Map,qo=0,Oa=n.spillStore&&typeof n.spillStore.put=="function"?n.spillStore:pn.createStore(),Ic=wc(Oa),Kr=0;function Hr(W){let V=W>0?W:jn;if(st(rs())<=V)return!0;for(let X of C.keepTailSteps){let $=Me.compact(U,{keepTail:X,spill:Ic});if($.beforeChars===$.afterChars)break;U.length=0;for(let ze of $.messages)U.push(ze);if(w("agent_compact",{iters:le,keepTail:X,beforeChars:$.beforeChars,afterChars:$.afterChars,omittedTools:$.omittedTools,omittedArgs:$.omittedArgs,spilled:$.spilled||0,tokensBefore:st($.beforeChars+vt),tokensAfter:st($.afterChars+vt),highTokens:V,tier:C.tier}),st($.afterChars+vt)<=Ss)break}if(st(rs())<=V)return!0;let O=W>0?W:Ss,F=ln.squeeze(U,te(O),{summaryReserve:ln.DEFAULTS.summaryReserve});if(F.ok||(Kr=Math.max(Kr,F.minChars)),F.ok&&F.dropped>0){U.length=0;for(let X of F.messages)U.push(X);w("agent_squeeze",{iters:le,dropped:F.dropped,beforeChars:F.beforeChars,afterChars:F.chars,tokensAfter:st(F.chars+vt),highTokens:V,tier:C.tier})}return st(rs())<=V}function Ea(){let W=String(U[0]&&U[0].content||"").length,V=st(W+vt),O=Kr>0?st(Kr+vt):st(rs()),F=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 "+jn+"\uFF09\uFF1A\u7CFB\u7EDF\u63D0\u793A + \u5DE5\u5177\u5B9A\u4E49\u56FA\u5B9A\u7EA6 "+V+" token\uFF0C\u538B\u7F29\u5230\u6700\u5C0F\u4ECD\u9700 "+O+" token"+F}for(;;){if(i>0&&le>=i){Pe={reason:"maxRounds",detail:"\u8FBE\u5230\u6A21\u578B\u8BF7\u6C42\u8F6E\u6570\u4E0A\u9650 "+i};break}let W=u-Date.now();if(W<=0){Pe={reason:"timeout",detail:"\u8D85\u8FC7\u5899\u949F\u4E0A\u9650 "+l+" \u5206\u949F"};break}if(d>0&&W<=d){Pe={reason:"timeout",detail:"\u5899\u949F\u5269\u4F59 "+Math.ceil(W/1e3)+" \u79D2\uFF0C\u9884\u7559\u6536\u5C3E\u603B\u7ED3\u65F6\u95F4"};break}if(!Hr()){Pe={reason:"context",detail:Ea()};break}let V;if(typeof n.onRound=="function")try{n.onRound(le+1)}catch{}try{V=await jo(U,n.modelKey,{tools:Et,onToken:n.onToken,onReasoning:n.onReasoning,onSplit:n.onSplit,signal:he.signal,thinking:n.thinking,verbosity:A,snapshot:le===0,iter:le,timeoutMs:Math.max(1e3,Math.min(r.requestTimeoutMs,W))})}catch(R){if(String(R&&R.message).indexOf("\u8BF7\u6C42\u8D85\u65F6")===0){Pe={reason:"timeout",detail:R.message};break}if(tN(R)&&$e<2){$e++,Le=Math.max(2048,Math.floor(Le*.8)),jn=Math.floor(Le*r.windowRatio),Ss=Math.floor(Le*r.lowRatio);let ee=Hr(Math.floor(jn*.75));if(w("agent_window_guess",{iters:le,window:Le,highTokens:jn,squeezed:ee,message:String(R&&R.message||"").slice(0,160)}),n.onProgress)try{n.onProgress(M("ext.ctxOverflowShrink",{window:Le}))}catch{}if(ee)continue}throw R}if(le++,V.reasoning&&z.push(V.reasoning),os.push({text:V.content||"",reasoning:V.reasoning||"",cont:Yt}),typeof n.onRoundEnd=="function")try{n.onRoundEnd({iter:le,text:V.content||"",reasoning:V.reasoning||"",cont:Yt})}catch{}Yt=!1;let O=Number(V.cache&&V.cache.promptTokens)||0;if(O>0){let R=Me.charsOf(U)+vt;R>0&&(De=Me.ratioOf(O/R))}if(q.push(qp(V,U,De)),fe(),!V.toolCalls.length){if(dt=V.content||"",(V.finishReason==="length"||V.finishReason==="max_tokens")&&Pt<r.lengthRetry){Pt++,Yt=!0;let R=dt||String(V.rawContent||"");w("agent_length_retry",{iters:le,chars:dt.length,resumeChars:R.length,retry:Pt}),U.push({role:"assistant",content:R}),U.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(!x&&N.length>0&&!SS(N)&&!Hl(N)&&r.noWriteNudges>0){let R=u-Date.now();if(_t<r.noWriteNudges&&R>Math.max(5e3,d)){_t++,w("agent_no_write_nudge",{iters:le,toolCalls:N.length,chars:dt.length,nudge:_t,max:r.noWriteNudges}),U.push({role:"assistant",content:dt}),U.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}dt=Zj(dt,N),Pe={reason:"final",detail:"noWrites"};break}Pe={reason:"final",detail:""};break}U.push({role:"assistant",content:V.content||"",tool_calls:V.toolCalls});let F=V.finishReason==="length"||V.finishReason==="max_tokens",X=function(R,ee){let ce=ee.path||ee.dir||(ee.command?String(ee.command).slice(0,60):"")||(ee.job_id?String(ee.job_id).slice(0,60):"")||(ee.query?String(ee.query).slice(0,60):"")||(ee.url?String(ee.url).slice(0,60):"")||(ee.name?String(ee.name).slice(0,60):"")||(ee.pattern?String(ee.pattern).slice(0,60):"")||(Array.isArray(ee.patterns)?ee.patterns.join(" ").slice(0,60):"")||(ee.from?String(ee.from).slice(0,60):"");if(!ce&&R==="todo_write"){let se=Xt.normalize(ee.todos),Bo=se.filter(function(Ut){return Ut.status==="completed"||Ut.status==="cancelled"}).length;ce=se.length?Bo+"/"+se.length:"\u66F4\u65B0\u6E05\u5355"}if(!ce&&R==="apply_patch"){let se=String(ee.patch||"").match(/\*\*\*\s*(Add|Update|Delete) File:/g);ce=se&&se.length?se.length+" \u4E2A\u6587\u4EF6":"patch"}if(!ce&&R==="ask_question"){let se=Array.isArray(ee.questions)&&ee.questions[0];ce=String(ee.title||se&&(se.prompt||se.question)||"\u63D0\u95EE").slice(0,60)}let Re=String(R);if(!ce&&(Re.indexOf("mcp__")===0||Re.indexOf("pl__")===0)){for(let se of Object.keys(ee))if(typeof ee[se]=="string"&&ee[se].trim()){ce=ee[se].trim().slice(0,60);break}}return ce},$=V.toolCalls.map(function(R,ee){let ce=R.function.name,Re=ij(R.function.arguments),se=Re.args;Re.repaired&&w("tool_args_repaired",{tool:ce,how:Re.repaired});let Bo=se.path||se.file_path||se.from||se.dir||se.command||se.name||se.description||se.pattern||(Array.isArray(se.patterns)?se.patterns.join(" "):"")||se.url||se.action||"",Ut=ce+" "+Bo;if(n.onProgress)try{n.onProgress(Ut.trim())}catch{}let jt={tc:R,toolName:ce,args:se,label:Ut.trim().slice(0,80),id:"r"+le+":"+ee,brief:X(ce,se),run:!1,ok:!0,rejected:!1,result:""};return F?(jt.ok=!1,jt.result="ERROR: "+ce+" \u672A\u6267\u884C\uFF1A\u4E0A\u4E00\u6761\u56DE\u7B54\u89E6\u5230\u8F93\u51FA\u957F\u5EA6\u4E0A\u9650\uFF08finish_reason="+V.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",w("tool_skipped_truncated",{tool:ce,rawLen:String(R.function.arguments||"").length})):Re.error?(jt.ok=!1,jt.result="ERROR: "+ce+" \u672A\u6267\u884C\uFF1A"+Re.error+`
946
+ \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`,w("tool_args_invalid",{tool:ce,rawLen:String(R.function.arguments||"").length,hint:String(Re.error).slice(0,Ul)})):aj(Re.args)?(jt.ok=!1,jt.result="ERROR: "+ce+' \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 '+ce+"\uFF0C\u5E76\u7ED9\u51FA\u5B8C\u6574\u53C2\u6570\uFF08read_file / write_file / replace_in_file \u81F3\u5C11\u8981\u7ED9 path\uFF09\u3002",w("tool_args_omitted",{tool:ce,rawLen:String(R.function.arguments||"").length})):jt.run=!0,jt}),ze=async function(R){try{R.result=await Rn(R.toolName,R.args,s,V.target,{mode:m,modelKey:V.target&&V.target.key,readMax:D.readMax,caps:C,todosState:n.todosState,onTodos:n.onTodos,askWait:f,confirmWrite:p,spillStore:Oa,sessionId:n.sessionId||"",autoKeep:n.autoKeep===!0,inSubagent:k,subBudget:T,onSubProgress:g,onSubUsage:function(ee){let ce=Array.isArray(ee)?ee:[];for(let Re of ce)Re&&(Re.subagent=!0,q.push(Re));if(ce.length&&fe(),typeof n.onSubUsage=="function")try{n.onSubUsage(ce)}catch{}}}),(R.toolName==="run_command"||R.toolName==="run_command_start")&&bs(m,hc())&&!Zs.check(String(R.args.command||"")).ok&&(R.rejected=!0)}catch(ee){R.ok=!1,R.result="ERROR: "+ee.message}};if(n.onTool){for(let R of $)if(R.run)try{n.onTool({phase:Zk,id:R.id,name:R.toolName,path:R.brief})}catch{}}for(let R=0;R<$.length;R++){let ee=$[R];if(!ee.run)continue;if(!ex[ee.toolName]){await ze(ee);continue}let ce=[ee],Re=R+1;for(;Re<$.length;){let se=$[Re];if(se.run&&!ex[se.toolName])break;se.run&&ce.push(se),Re++}for(let se=0;se<ce.length;se+=r.parallelMax)await Promise.all(ce.slice(se,se+r.parallelMax).map(ze));R=Re-1}let Ze=null,Xe="";for(let R of $){let ee=R.tc,ce=R.toolName,Re=R.args,se=R.ok,Bo=R.brief,Ut=String(R.result);se&&R.result&&Array.isArray(R.result.images)&&R.result.images.length&&(Ze=R.result.images,Xe=ce);let jt={phase:Qk,id:R.id,name:ce,path:Bo,ok:se,result:Ut.length>Yk?Ut.slice(0,Yk)+"\u2026":Ut};if(N.push(jt),w("agent_tool",{name:jt.name,path:jt.path,ok:jt.ok,result:jt.result.slice(0,Xj)}),n.onTool)try{n.onTool(jt)}catch{}let Lc=ce==="run_command_poll"&&se&&/^status=running\b/m.test(Ut),Uo=Me.fingerprint(ce,Re),ar=Wr.get(Uo)||{total:0,fails:0,label:R.label};Lc||(Uo===bn&&Ut===Nn?vs++:(bn=Uo,Nn=Ut,vs=1),ar=Wr.get(Uo)||{total:0,fails:0,label:R.label},$j[ce]||ar.total++,(!se||R.rejected)&&ar.fails++,Wr.set(Uo,ar)),se&&!R.rejected?is=0:is++,R.rejected&&qo++;let ym=Ut;!F&&!Lc&&ar.fails>=2&&(ym="\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u6B64\u5DE5\u5177\u8C03\u7528\uFF08"+R.label+"\uFF09\u6B64\u524D\u5DF2\u5931\u8D25 "+ar.fails+` \u6B21\uFF0C\u8BF7\u52FF\u91CD\u8BD5\uFF0C\u6362\u4E00\u79CD\u65B9\u5F0F\u83B7\u53D6\u4FE1\u606F\u3002
947
+ `+Ut,w("tool_repeat_warn",{tool:ce,fails:ar.fails})),U.push({role:"tool",tool_call_id:ee.id||"call_"+(le-1),content:ym})}if(Ze&&Ze.length){if(Ee.length){let ce=new Set(Ee);for(let Re=U.length-1;Re>=0;Re--)ce.has(U[Re])&&U.splice(Re,1);Ee.length=0}let ee={role:"user",content:[{type:"text",text:Xe==="computer"?Jj:Gj}]};for(let ce of Ze)ee.content.push({type:"image_url",image_url:{url:ce.dataUrl}});U.push(ee),Ee.push(ee),w("shot_injected",{iters:le,images:Ze.length,from:Xe||"browser"})}if(F){if(Pt<r.lengthRetry){Pt++,w("agent_length_retry",{iters:le,toolCalls:V.toolCalls.length,retry:Pt,kind:"tool_args"}),U.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}Pe={reason:"length",detail:"\u8F93\u51FA\u8FDE\u7EED "+(Pt+1)+" \u6B21\u89E6\u5230\u957F\u5EA6\u4E0A\u9650\uFF0C\u5DE5\u5177\u53C2\u6570\u65E0\u6CD5\u751F\u6210\u5B8C\u6574",maxOutTokens:bt(V.target&&V.target.model&&V.target.model.maxOutputTokens)};break}if(vs>=r.repeatLimit){if(!Hn&&u-Date.now()>d){Hn=!0;let R=String(bn).split("|")[0];w("agent_loop_nudge",{iters:le,kind:"repeat",count:vs,tool:R}),U.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 "+vs+" \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}Pe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u8FDE\u7EED "+vs+" \u6B21\u8FD4\u56DE\u76F8\u540C\u7ED3\u679C"};break}if(is>=r.errorLimit){Pe={reason:"errors",detail:"\u8FDE\u7EED "+is+" \u6B21\u5DE5\u5177\u62A5\u9519"+(qo?"\uFF08\u672C\u8F6E\u7D2F\u8BA1 "+qo+" \u6761\u88AB\u62D2\u7EDD\u6216\u7A7A\u547D\u4EE4\uFF09":"")};break}let Ge=null;for(let R of Wr.values())if(R.total>=r.fpTotalLimit){Ge=R;break}if(Ge){if(!Hn&&u-Date.now()>d){Hn=!0,w("agent_loop_nudge",{iters:le,kind:"fpTotal",count:Ge.total,tool:Ge.label}),U.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 "+Ge.total+" \u6B21\uFF08"+Ge.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}Pe={reason:"loop",detail:"\u540C\u4E00\u5DE5\u5177\u540C\u4E00\u53C2\u6570\u672C\u8F6E\u5DF2\u6267\u884C "+Ge.total+" \u6B21\uFF08"+Ge.label+"\uFF09"};break}if(!Hr()){Pe={reason:"context",detail:Ea()};break}}let ir=dt;if(Pe.reason!=="final"){Hr();let W=Math.max(0,u-Date.now()),V=await Qj(U,{modelKey:n.modelKey,stop:Pe,signal:he.signal,iter:le,remainingMs:W,totalMs:c,lastText:dt,toolCalls:N.length,ratio:De,log:N,verbosity:A});ir=V.text,V.usage&&(q.push(V.usage),fe()),ir||(ir=M("ext.summary.fallbackShort",{reason:Mc(Pe),n:N.length}))}if(Pe&&Pe.reason==="timeout"&&n.sessionId)try{let W=ye.stopAll(n.sessionId);W&&W.stopped&&w("async_cmd_stop_all",{sessionId:n.sessionId,stopped:W.stopped,reason:"agent_timeout"})}catch{}let zr=wa(q,_,S&&S.model&&S.model.id),Pa=Nj(S&&S.provider&&S.provider.id,zr);return Pa&&(zr.prefixHint=Pa),w("agent_done",{iters:le,toolCalls:N.length,chars:ir.length,model:n.modelKey,mode:m,stop:Pe.reason,detail:Pe.detail,truncated:Pe.reason!=="final",tokensRatio:Number(De.toFixed(3)),usage:zr}),wp(),{text:ir,reasoning:z.join(`
948
948
 
949
- `),log:N,iters:le,roundTexts:rs,modelKey:S&&S.key,stop:Pe,usage:zr,window:_,usageRows:q.slice()}}function vS(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+`
949
+ `),log:N,iters:le,roundTexts:os,modelKey:S&&S.key,stop:Pe,usage:zr,window:_,usageRows:q.slice()}}function vS(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
950
 
951
- `:"")+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 Zi="luban.providerKey.",xt=null,ip="settings",Kn=null,Qi=["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"],nN={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},sN={"browser.chromePath":!0},rN={"agent.smallWindow":["auto","on","off"],"agent.verbosity":["concise","normal","detailed"],"net.tlsMaxVersion":["auto","1.2"]},oN={"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},iN={"browser.viewportWidth":4096,"browser.viewportHeight":4096,"computer.screenshotWidth":4096,"plugins.maxTools":200};function zp(t){return t==="usage"||t==="general"||t==="backup"||t==="plugins"||t==="market"||t==="mcp"?t:"settings"}function Gp(){let t=b.workspace.getConfiguration("luban"),e=Object.create(null);Qi.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 ap(){return{type:"general",values:Gp()}}function aN(){if(xt)try{xt.webview.postMessage(ap())}catch(t){w("general_push_failed",{message:t.message})}}async function _S(t){let e=t&&typeof t=="object"?t:{},n=[],s=Object.create(null);if(Qi.forEach(function(o){if(!Object.prototype.hasOwnProperty.call(e,o)){n.push(M("ext.generalMissing",{key:o}));return}let i=e[o];if(nN[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=rN[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(sN[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=oN[o];if(typeof c=="number"&&l<c){n.push(M("ext.generalBadMin",{key:o,min:c}));return}let u=iN[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=b.workspace.getConfiguration("luban");try{for(let o=0;o<Qi.length;o++){let i=Qi[o];await r.update(i,s[i],b.ConfigurationTarget.Global)}}catch(o){return{ok:!1,errors:[M("ext.generalSaveFailed",{msg:String(o&&o.message||o)})]}}return w("general_saved",{keys:Qi.length}),{ok:!0,values:Gp()}}async function Jp(t){let e=Object.create(null),n=0;for(let s of Bt.providers||[])if(!(!s||!s.id))try{let r=await t.secrets.get(Zi+s.id);r&&(e[s.id]=String(r),n++)}catch(r){w("secret_read_failed",{id:s.id,message:r.message})}return ts=e,w("secrets_synced",{providers:(Bt.providers||[]).length,keys:n}),n}function lN(){return{defaultModel:Bt.defaultModel||"",providers:(Bt.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:!!ts[t.id],hasEnvKey:!!va(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:yn(e.thinking)?e.thinking:null}})}})}}function uc(){return{type:"settings",path:at,source:Oo,config:lN()}}function $p(){if(xt)try{xt.webview.postMessage(uc())}catch(t){w("settings_push_failed",{message:t.message})}}async function Xp(t){Sc(),await Jp(t),Fe(xc()),$p();let e=(Bt.providers||[]).length,n=Wn().length;return w("providers_reloaded",{providers:e,models:n}),{providers:e,models:n}}function tx(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 cN(t,e,n){if(t==null)return{ok:!0,value:null};if(!yn(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(!yn(a))return{ok:!1,error:M("validate.thinkTier",{pos:e,id:n,tier:i})};let l=Object.keys(a).filter(function(c){return lS[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>$k)return{ok:!1,error:M("validate.thinkTooLong",{pos:e,id:n,tier:i,n:$k})};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 TS(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 k of c.models||[]){let x=k||{},T=String(x.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=tx(x.maxInputTokens,65536),v=tx(x.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 y=cN(x.thinking,d,T);if(!y.ok){n.push(y.error);continue}let S={id:T,name:String(x.name||"").trim()||T,maxInputTokens:g,maxOutputTokens:v,toolCalling:!!x.toolCalling,vision:!!x.vision};y.value&&(S.thinking=y.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 k=String(c.webSearch.baseUrl||"").trim();if(k&&!/^https?:\/\/\S+$/i.test(k)){n.push(M("validate.webUrl",{pos:d}));continue}let x=c.webSearch.count,T=x===""||x===void 0||x===null?8:Number(x);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)};k&&(v.baseUrl=k.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 MS(t,e){let n=TS(e);if(!n.ok)return{ok:!1,errors:n.errors};let s=[];try{let l=JSON.parse(P.readFileSync(at,"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 y=T[v.id],S=y?Object.assign({},y,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=ts[h]||""||await t.secrets.get(Zi+h)||"":m=ts[c.id]||"";let k=String(u.apiKeyAction||"keep"),x=m;if(k==="set"){let T=String(u.apiKeyValue||"").trim();T&&(x=T),delete p.apiKey}else k==="clear"&&(x="",delete p.apiKey);(x!==m||h&&h!==c.id)&&i.push({id:c.id,oldId:h&&h!==c.id?h:null,value:x}),o.providers.push(p)}P.mkdirSync(I.dirname(at),{recursive:!0,mode:448});let a=at+".tmp";if(P.writeFileSync(a,JSON.stringify(o,null,2)+`
952
- `,{mode:384}),P.existsSync(at))try{P.copyFileSync(at,at+".bak")}catch(l){w("config_backup_failed",{message:l.message})}P.renameSync(a,at);for(let l of i)l.value?await t.secrets.store(Zi+l.id,l.value):await t.secrets.delete(Zi+l.id),l.oldId&&await t.secrets.delete(Zi+l.oldId);return Sc(),await Jp(t),Fe(xc()),$p(),w("config_saved",{path:at,providers:o.providers.length,models:Wn().length,secrets:i.length}),{ok:!0,path:at,source:Oo,defaultModel:Lo(),models:xc().models}}async function CS(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||ts[e.id]||ts[e.originalId]||""||va(n)||(Eo(n)?bp:"");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(_x(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 w("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 w("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 bt(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function Cc(t,e,n){let s=bt(t);if(!s)return null;let r=bt(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 AS(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=bt(e.context_length)||bt(e.context_window)||bt(e.max_context_length)||bt(e.max_model_len)||bt(e.max_input_tokens)||bt(s.n_ctx_train),o=bt(e.max_output_tokens)||bt(e.max_completion_tokens)||bt(n.max_completion_tokens);if(!r&&!o)return null;let i="generic";return bt(e.max_model_len)?i="vllm":(n.context_length||n.max_completion_tokens)&&(i="openrouter"),{context:r,output:o,source:i}}function OS(t){return String(t||"").replace(/\/+$/,"").replace(/\/v1$/i,"")}async function lp(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 uN(t,e,n,s){let r=OS(t.baseUrl);if(!(await lp(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 lp(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?bt(f[1]):0,m=!1;if(!p&&u.json.model_info&&typeof u.json.model_info=="object"){for(let k of Object.keys(u.json.model_info))if(/\.context_length$/i.test(k)&&(p=bt(u.json.model_info[k]),p)){m=!0;break}}let h=Cc(p,0,"ollama");h&&(m&&(h.fromTraining=!0),n[c]=h)}}await Promise.all([l(),l(),l(),l()])}async function dN(t,e,n){if(e.length!==1||n[e[0]])return;let s=OS(t.baseUrl),r=await lp(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=bt(o.n_ctx)||bt(r.json.n_ctx),a=Cc(i,0,"llamacpp");a&&(n[e[0]]=a)}async function Vp(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||ts[e.id]||ts[e.originalId]||""||va(n)||(Eo(n)?bp:"");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 k=typeof p=="object"?AS(p):null;if(k){let x=Cc(k.context,k.output,k.source);x&&(u[h]=x)}}}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 uN(n,c,u,d)}catch{}try{await dN(n,c,u)}catch{}}return w("provider_models_fetched",{id:n.id,count:c.length}),w("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 fN=!1;function Rr(t){return fN?b.Uri.joinPath(t,"dist","media"):b.Uri.joinPath(t,"media")}var cp="luban.webdav.password",zl=!1,ES=null;function qt(t,e){let n=String(t??""),s=yn(e)?e:null;return n.indexOf("webdav.")===0?s?M(n,s):M(n):n||M("webdav.errNetwork")}async function Jf(t,e){try{return!!await b.window.showWarningMessage(String(t||""),{modal:!0},M(e||"ext.confirmYes"))}catch(n){return w("native_confirm_failed",{message:String(n&&n.message||n)}),!1}}var nx={sessions:"webdav.catSessions",attachments:"webdav.catAttachments",plans:"webdav.catPlans",providers:"webdav.catProviders",mcp:"webdav.catMcp"};function sx(t){if(!t||typeof t!="object")return"";let e=[];for(let n of Object.keys(nx)){let s=Number(t[n])||0;s>0&&e.push(M(nx[n],{n:s}))}return e.length?M("webdav.catWrap",{parts:e.join(" \xB7 ")}):""}function PS(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 pN(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 Yp(t){try{return await t.secrets.get(cp)||""}catch(e){return w("webdav_secret_read_failed",{message:String(e&&e.message||e)}),""}}async function ba(t){let e=hn.loadConfig();return{type:"webdav",path:hn.WEBDAV_CONFIG_PATH,config:e,hasPassword:!!await Yp(t),busy:zl,last:ES}}async function mN(t,e){let n=e||xt&&xt.webview;if(n)try{n.postMessage(await ba(t))}catch(s){w("webdav_push_failed",{message:String(s&&s.message||s)})}}async function Zp(t,e){let n=yn(e)?e:{},s=String(n.passwordAction||"keep"),r=String(n.passwordValue==null?"":n.passwordValue),o=hn.saveConfig(n.config||{});if(!o.ok)return w("webdav_save_invalid",{errors:o.errors}),{ok:!1,errors:(o.errors||[]).map(function(a){return qt(a)})};let i=!1;try{s==="set"&&r?(await t.secrets.store(cp,r),i=!0):s==="clear"&&(await t.secrets.delete(cp),i=!0)}catch(a){w("webdav_secret_write_failed",{message:String(a&&a.message||a)})}return w("webdav_saved",{path:o.path,url:o.config.url,enabled:o.config.enabled,remoteDir:o.config.remoteDir,includes:o.config.includes,secretChanged:i}),await mN(t),{ok:!0,path:o.path,config:o.config,hasPassword:!!await Yp(t)}}async function Do(t,e){let n=hn.loadConfig(),s=yn(e)?e:{},r=s.password!=null&&String(s.password)!==""?String(s.password):await Yp(t);if(!yn(s.config))return Object.assign({},n,{password:r});let o=hn.normalizeConfig(Object.assign({},n,s.config)),i=Object.assign({},o.config,{password:r});return i.__invalid=(o.errors||[]).length?o.errors:null,i}function Ma(t){return t.__invalid&&t.__invalid.length?t.__invalid.map(function(e){return qt(e)}).join(" \xB7 "):t.url?t.enabled?"":qt("webdav.errDisabled"):qt("webdav.errNeedUrl")}async function jS(t,e){let n=await Do(t,e);if(n.__invalid&&n.__invalid.length)return{ok:!1,error:n.__invalid.map(function(r){return qt(r)}).join(" \xB7 ")};if(!n.url)return{ok:!1,error:qt("webdav.errNeedUrl")};let s=await hn.testConnection(n);return w("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?"":qt(s.error||"webdav.errNetwork",s.detail)}}function hN(){for(let t of gn.values())try{clearTimeout(t)}catch{}gn.clear();for(let t of ue.values())try{mt(t)}catch{}}function gN(){try{ge=null,Ye(),Fe(fn())}catch(t){w("webdav_session_refresh_failed",{message:String(t&&t.message||t)})}}function NS(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 FS(t){let e=t||{};return Number(e.restored)>0?(Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")>=0:!1}async function up(t,e,n,s){if(zl)return{ok:!1,error:qt("webdav.errBusy"),busy:!0};zl=!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:Qn,machine:tt.hostname()};try{let a=await Do(t,r.override),l=Ma(a);if(l)return{ok:!1,error:l};delete a.__invalid,a.machine=tt.hostname();let c;if(e==="backup"?c=await Yn.uploadAll(a,i,o):(hN(),c=await Yn.restoreAll(a,Object.assign({},i,{subdir:r.subdir||"",providerIds:Array.isArray(r.providerIds)?r.providerIds.map(String):null}),o)),c.ok){if(ES={kind:e,at:new Date().toISOString(),files:e==="backup"?c.files:c.restored,categories:c.categories||null,snapshot:c.snapshot||""},w(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&&(gN(),FS(c)))try{await Xp(t)}catch(d){w("providers_reload_failed",{message:String(d&&d.message||d)})}}else w(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?qt(c.error||"webdav.errRemoteNewer"):qt(c.error||"webdav.errNetwork",u)})}catch(a){return w("webdav_transfer_failed",{kind:e,message:String(a&&a.message||a)}),{ok:!1,error:qt(a&&a.message||"webdav.errNetwork")}}finally{zl=!1}}async function IS(t,e,n){let s=await Do(t,e),r=Ma(s);if(r)return{ok:!1,error:r};s.machine=tt.hostname();let o=await Yn.remoteSummary(s,{limit:200,subdir:n||""});return w("webdav_remote_list",{ok:!!o.ok,hasBackup:!!o.hasBackup,total:o.total||0,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":qt(o.error||"webdav.errNetwork")})}async function LS(t,e,n){let s=await Do(t,e),r=Ma(s);if(r)return{ok:!1,error:r};s.machine=tt.hostname();let o=await Yn.listRemoteProviders(s,{subdir:n||"",home:at?I.dirname(at):""});return w("webdav_remote_providers",{ok:!!o.ok,n:(o.providers||[]).length,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":qt(o.error||"webdav.errNetwork")})}async function DS(t,e){let n=await Do(t,e),s=Ma(n);if(s)return{ok:!1,error:s};let r=await Yn.listMachines(n,{machine:tt.hostname()});return w("webdav_machine_list",{ok:!!r.ok,n:(r.machines||[]).length}),Object.assign({},r,{error:r.ok?"":qt(r.error||"webdav.errNetwork")})}async function yN(){let t=hn.WEBDAV_CONFIG_PATH;P.existsSync(t)||(P.mkdirSync(I.dirname(t),{recursive:!0,mode:448}),P.writeFileSync(t,JSON.stringify(hn.defaultConfig(),null,2)+`
953
- `,{mode:384}));let e=await b.workspace.openTextDocument(b.Uri.file(t));return await b.window.showTextDocument(e,{preview:!1}),t}function wN(){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 bN(t){P.mkdirSync(I.join(t,"sessions"),{recursive:!0}),P.writeFileSync(I.join(t,"sessions","z1.json"),JSON.stringify({id:"z1",items:[{t:"user",text:"\u81EA\u68C0\u4E00"}]})),P.writeFileSync(I.join(t,"sessions","z2.json"),JSON.stringify({id:"z2",items:[{t:"user",text:"\u81EA\u68C0\u4E8C"}]})),P.writeFileSync(I.join(t,"sessions","index.json"),"[]"),P.writeFileSync(I.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 RS(t){let e=await wN(),n=P.mkdtempSync(I.join(tt.tmpdir(),"luban-wd-check-")),s=I.join(n,"webdav.json");try{bN(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:hn.normalizeConfig(r).config,version:Qn,machine:tt.hostname()},i=await Yn.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=I.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 Yn.restoreAll(r,Object.assign({},o,{mode:"newer"})),k=P.readFileSync(p,"utf8").indexOf("edited")>=0;return{ok:!!h.ok&&(h.blocked||[]).length===1&&k,result:{blocked:h.blocked,restored:h.restored,kept:k,total:l.length}}}for(let p of l)try{P.rmSync(Yn.localPathOf(n,p),{force:!0})}catch{}P.rmSync(I.join(n,"sessions"),{recursive:!0,force:!0});let u=await Yn.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=Yn.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 kN(t,e,n){let s=Rr(e),r=t.asWebviewUri(b.Uri.joinPath(s,"panel.css")),o=t.asWebviewUri(b.Uri.joinPath(s,"settings.css")),i=t.asWebviewUri(b.Uri.joinPath(s,"dashboard.css")),a=t.asWebviewUri(b.Uri.joinPath(s,"hub.css")),l=t.asWebviewUri(b.Uri.joinPath(s,"hub.js")),c=t.asWebviewUri(b.Uri.joinPath(s,"i18n.js")),u=P.readFileSync(b.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,jp()).replace(/{{lang}}/g,Vt||Sa()).replace(/{{tab}}/g,zp(n)).replace(/{{version}}/g,Qn).replace(/{{nonce}}/g,d)}function qS(t,e){return Kn=t,t.onDidReceiveMessage(async function(s){if(!(!s||!s.type)){if(s.type==="hub_ready"||s.type==="ready"){t.postMessage({type:"lang",lang:Vt});try{t.postMessage(ap())}catch{}try{t.postMessage(uc())}catch{}try{t.postMessage(await ba(e))}catch{}try{t.postMessage(Vi(En))}catch{}try{t.postMessage(dc())}catch{}try{t.postMessage(fp())}catch{}try{t.postMessage({type:"activate",tab:ip})}catch{}dp("hub_ready"),w("hub_ready",{tab:ip});return}if(s.type==="tab"){let r=zp(s.tab);try{r==="usage"?t.postMessage(Vi(En)):r==="general"?t.postMessage(ap()):r==="backup"?t.postMessage(await ba(e)):r==="plugins"?t.postMessage(dc()):r==="mcp"?t.postMessage(fp()):r==="market"?t.postMessage(await WS()):t.postMessage(uc())}catch{}w("hub_tab",{tab:r});return}if(s.type==="ack_rendered"){j=Object.assign({at:Date.now()},s),s.source==="dashboard"?w("usage_dashboard_ack",{kind:s.kind,n:s.n,groups:s.groups}):s.source==="general"?w("general_ack",{kind:s.kind,n:s.n}):w("settings_ack",{kind:s.kind,n:s.n});return}if(s.type==="save_general"){try{let r=await _S(s.values||{});r.ok?t.postMessage(Object.assign({type:"general_saved"},r)):t.postMessage({type:"general_invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"general_invalid",errors:[M("ext.generalSaveFailed",{msg:String(r&&r.message||r)})]}),w("general_save_failed",{message:r.message})}return}if(s.type==="save_settings"){try{let r=await MS(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)})]}),w("settings_save_failed",{message:r.message})}return}if(s.type==="test_provider"){let r=await CS(s.provider||{});t.postMessage(Object.assign({type:"test_result",ref:s.ref},r));return}if(s.type==="fetch_models"){let r=await Vp(s.provider||{});t.postMessage(Object.assign({type:"models_fetched",ref:s.ref},r));return}if(s.type==="open_config_file"){try{if(!P.existsSync(at))throw new Error(M("ext.configMissing"));let r=await b.workspace.openTextDocument(b.Uri.file(at));await b.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{}w("settings_reload_failed",{message:String(r&&r.message||r)})}return}if(s.type==="save_webdav"){try{let r=await Zp(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:[qt(String(r&&r.message||r))]}),w("webdav_save_failed",{message:String(r&&r.message||r)})}return}if(s.type==="test_webdav"){let r=await jS(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=NS(s),i=await up(e,r,o,t);if(!i.ok&&i.needsConfirm&&r==="backup"&&(await Jf(pN(i.remote),"webdav.confirmOverwriteYes")?(o.force=!0,i=await up(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};b.window.showInformationMessage(M(a,l)+sx(i.categories))}catch{}if(r==="restore"&&i.ok&&i.restored>0)try{t.postMessage({type:"notice",message:M("webdav.restoredNotice",{n:i.restored,cat:sx(i.categories)+PS(i),dir:i.snapshot||M("webdav.noSnapshot")})})}catch{}return}if(s.type==="webdav_remote_list"){let r=await IS(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_list"},r));return}if(s.type==="webdav_remote_providers"){let r=await LS(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 DS(e,s.override);t.postMessage(Object.assign({type:"webdav_machines"},r));return}if(s.type==="hub_confirm"){let r=await Jf(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 b.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 We.installFromDir(o,{trust:!0,replace:s.replace===!0});w("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 xo("install");return}if(s.type==="plugins_uninstall"){let r=String(s.name||""),o=String(s.dir||"");if(!r&&!o)return;if(!await Jf(M("ext.pluginsUninstallConfirm",{name:r||o}),"ext.pluginsUninstallYes")){t.postMessage({type:"plugins_result",action:"uninstall",ok:!1,cancelled:!0});return}let a=await We.uninstall(o||r,{why:"uninstall"});w("plugins_uninstall",{name:r||o,ok:a.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"uninstall"},a)),a.ok&&await xo("uninstall");return}if(s.type==="plugins_restore"){let r=String(s.entry||""),o=await We.restoreFromTrash(r);w("plugins_restore",{entry:r,ok:o.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"restore"},o)),o.ok&&await xo("restore");return}if(s.type==="plugins_trust"){let r;try{r={ok:!0,name:We.trustDir(String(s.dir||"")).name}}catch(o){r={ok:!1,message:String(o&&o.message||o)}}w("plugins_trust",{name:r.name||"",ok:r.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"trust"},r)),r.ok&&await xo("trust");return}if(s.type==="plugins_rescan"){await xo("rescan");return}if(s.type==="plugins_theme"){let r=String(s.name||"").trim(),o=!0,i="";if(r){let a=null;try{a=We.themeOf(r)}catch{a=null}a||(o=!1,i=M("ext.pluginsThemeUnknown",{name:r}))}if(o)try{await b.workspace.getConfiguration("luban").update("plugins.theme",r,b.ConfigurationTarget.Global)}catch(a){o=!1,i=String(a&&a.message||a)}w("plugins_theme",{name:r,ok:o}),t.postMessage({type:"plugins_result",action:"theme",ok:o,name:r,message:i}),o&&(fc("theme"),Np());return}if(s.type==="plugins_open_dir"){let o=String(s.which||"global")==="trash"?We.trashDir():We.globalDir();try{P.mkdirSync(o,{recursive:!0}),await b.commands.executeCommand("revealFileInOS",b.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{we.configure({root:L(),version:Qn,rec:w});let o=we.setDisabled({name:s.name,disabled:s.disabled===!0,target:r});await we.reload(),w("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}),rx("toggle")}catch(o){w("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{we.configure({root:L(),version:Qn,rec:w}),await we.reload(),t.postMessage({type:"mcp_result",action:"reload",ok:!0})}catch(r){w("mcp_reload_failed",{message:String(r&&r.message||r)}),t.postMessage({type:"mcp_result",action:"reload",ok:!1,message:String(r&&r.message||r)})}rx("reload");return}if(s.type==="mcp_open_file"){try{let r=s.which==="project"?"project":"global",o=we.configPathFor(r);P.existsSync(o)||(P.mkdirSync(I.dirname(o),{recursive:!0}),P.writeFileSync(o,`{
951
+ `:"")+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 Zi="luban.providerKey.",xt=null,ip="settings",Kn=null,Qi=["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"],nN={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},sN={"browser.chromePath":!0},rN={"agent.smallWindow":["auto","on","off"],"agent.verbosity":["concise","normal","detailed"],"net.tlsMaxVersion":["auto","1.2"]},oN={"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},iN={"browser.viewportWidth":4096,"browser.viewportHeight":4096,"computer.screenshotWidth":4096,"plugins.maxTools":200};function zp(t){return t==="usage"||t==="general"||t==="backup"||t==="plugins"||t==="market"||t==="mcp"?t:"settings"}function Gp(){let t=b.workspace.getConfiguration("luban"),e=Object.create(null);Qi.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 ap(){return{type:"general",values:Gp()}}function aN(){if(xt)try{xt.webview.postMessage(ap())}catch(t){w("general_push_failed",{message:t.message})}}async function _S(t){let e=t&&typeof t=="object"?t:{},n=[],s=Object.create(null);if(Qi.forEach(function(o){if(!Object.prototype.hasOwnProperty.call(e,o)){n.push(M("ext.generalMissing",{key:o}));return}let i=e[o];if(nN[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=rN[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(sN[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=oN[o];if(typeof c=="number"&&l<c){n.push(M("ext.generalBadMin",{key:o,min:c}));return}let u=iN[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=b.workspace.getConfiguration("luban");try{for(let o=0;o<Qi.length;o++){let i=Qi[o];await r.update(i,s[i],b.ConfigurationTarget.Global)}}catch(o){return{ok:!1,errors:[M("ext.generalSaveFailed",{msg:String(o&&o.message||o)})]}}return w("general_saved",{keys:Qi.length}),{ok:!0,values:Gp()}}async function Jp(t){let e=Object.create(null),n=0;for(let s of Bt.providers||[])if(!(!s||!s.id))try{let r=await t.secrets.get(Zi+s.id);r&&(e[s.id]=String(r),n++)}catch(r){w("secret_read_failed",{id:s.id,message:r.message})}return ns=e,w("secrets_synced",{providers:(Bt.providers||[]).length,keys:n}),n}function lN(){return{defaultModel:Bt.defaultModel||"",providers:(Bt.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:!!ns[t.id],hasEnvKey:!!va(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:yn(e.thinking)?e.thinking:null}})}})}}function uc(){return{type:"settings",path:at,source:Oo,config:lN()}}function $p(){if(xt)try{xt.webview.postMessage(uc())}catch(t){w("settings_push_failed",{message:t.message})}}async function Xp(t){Sc(),await Jp(t),Fe(xc()),$p();let e=(Bt.providers||[]).length,n=Wn().length;return w("providers_reloaded",{providers:e,models:n}),{providers:e,models:n}}function tx(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 cN(t,e,n){if(t==null)return{ok:!0,value:null};if(!yn(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(!yn(a))return{ok:!1,error:M("validate.thinkTier",{pos:e,id:n,tier:i})};let l=Object.keys(a).filter(function(c){return lS[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>$k)return{ok:!1,error:M("validate.thinkTooLong",{pos:e,id:n,tier:i,n:$k})};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 TS(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 k of c.models||[]){let x=k||{},T=String(x.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=tx(x.maxInputTokens,65536),v=tx(x.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 y=cN(x.thinking,d,T);if(!y.ok){n.push(y.error);continue}let S={id:T,name:String(x.name||"").trim()||T,maxInputTokens:g,maxOutputTokens:v,toolCalling:!!x.toolCalling,vision:!!x.vision};y.value&&(S.thinking=y.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 k=String(c.webSearch.baseUrl||"").trim();if(k&&!/^https?:\/\/\S+$/i.test(k)){n.push(M("validate.webUrl",{pos:d}));continue}let x=c.webSearch.count,T=x===""||x===void 0||x===null?8:Number(x);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)};k&&(v.baseUrl=k.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 MS(t,e){let n=TS(e);if(!n.ok)return{ok:!1,errors:n.errors};let s=[];try{let l=JSON.parse(P.readFileSync(at,"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 y=T[v.id],S=y?Object.assign({},y,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=ns[h]||""||await t.secrets.get(Zi+h)||"":m=ns[c.id]||"";let k=String(u.apiKeyAction||"keep"),x=m;if(k==="set"){let T=String(u.apiKeyValue||"").trim();T&&(x=T),delete p.apiKey}else k==="clear"&&(x="",delete p.apiKey);(x!==m||h&&h!==c.id)&&i.push({id:c.id,oldId:h&&h!==c.id?h:null,value:x}),o.providers.push(p)}P.mkdirSync(I.dirname(at),{recursive:!0,mode:448});let a=at+".tmp";if(P.writeFileSync(a,JSON.stringify(o,null,2)+`
952
+ `,{mode:384}),P.existsSync(at))try{P.copyFileSync(at,at+".bak")}catch(l){w("config_backup_failed",{message:l.message})}P.renameSync(a,at);for(let l of i)l.value?await t.secrets.store(Zi+l.id,l.value):await t.secrets.delete(Zi+l.id),l.oldId&&await t.secrets.delete(Zi+l.oldId);return Sc(),await Jp(t),Fe(xc()),$p(),w("config_saved",{path:at,providers:o.providers.length,models:Wn().length,secrets:i.length}),{ok:!0,path:at,source:Oo,defaultModel:Lo(),models:xc().models}}async function CS(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||ns[e.id]||ns[e.originalId]||""||va(n)||(Eo(n)?bp:"");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(_x(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 w("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 w("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 bt(t){let e=Number(t);return isFinite(e)&&e>0?Math.floor(e):0}function Cc(t,e,n){let s=bt(t);if(!s)return null;let r=bt(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 AS(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=bt(e.context_length)||bt(e.context_window)||bt(e.max_context_length)||bt(e.max_model_len)||bt(e.max_input_tokens)||bt(s.n_ctx_train),o=bt(e.max_output_tokens)||bt(e.max_completion_tokens)||bt(n.max_completion_tokens);if(!r&&!o)return null;let i="generic";return bt(e.max_model_len)?i="vllm":(n.context_length||n.max_completion_tokens)&&(i="openrouter"),{context:r,output:o,source:i}}function OS(t){return String(t||"").replace(/\/+$/,"").replace(/\/v1$/i,"")}async function lp(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 uN(t,e,n,s){let r=OS(t.baseUrl);if(!(await lp(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 lp(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?bt(f[1]):0,m=!1;if(!p&&u.json.model_info&&typeof u.json.model_info=="object"){for(let k of Object.keys(u.json.model_info))if(/\.context_length$/i.test(k)&&(p=bt(u.json.model_info[k]),p)){m=!0;break}}let h=Cc(p,0,"ollama");h&&(m&&(h.fromTraining=!0),n[c]=h)}}await Promise.all([l(),l(),l(),l()])}async function dN(t,e,n){if(e.length!==1||n[e[0]])return;let s=OS(t.baseUrl),r=await lp(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=bt(o.n_ctx)||bt(r.json.n_ctx),a=Cc(i,0,"llamacpp");a&&(n[e[0]]=a)}async function Vp(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||ns[e.id]||ns[e.originalId]||""||va(n)||(Eo(n)?bp:"");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 k=typeof p=="object"?AS(p):null;if(k){let x=Cc(k.context,k.output,k.source);x&&(u[h]=x)}}}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 uN(n,c,u,d)}catch{}try{await dN(n,c,u)}catch{}}return w("provider_models_fetched",{id:n.id,count:c.length}),w("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 fN=!1;function Rr(t){return fN?b.Uri.joinPath(t,"dist","media"):b.Uri.joinPath(t,"media")}var cp="luban.webdav.password",zl=!1,ES=null;function qt(t,e){let n=String(t??""),s=yn(e)?e:null;return n.indexOf("webdav.")===0?s?M(n,s):M(n):n||M("webdav.errNetwork")}async function Jf(t,e){try{return!!await b.window.showWarningMessage(String(t||""),{modal:!0},M(e||"ext.confirmYes"))}catch(n){return w("native_confirm_failed",{message:String(n&&n.message||n)}),!1}}var nx={sessions:"webdav.catSessions",attachments:"webdav.catAttachments",plans:"webdav.catPlans",providers:"webdav.catProviders",mcp:"webdav.catMcp"};function sx(t){if(!t||typeof t!="object")return"";let e=[];for(let n of Object.keys(nx)){let s=Number(t[n])||0;s>0&&e.push(M(nx[n],{n:s}))}return e.length?M("webdav.catWrap",{parts:e.join(" \xB7 ")}):""}function PS(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 pN(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 Yp(t){try{return await t.secrets.get(cp)||""}catch(e){return w("webdav_secret_read_failed",{message:String(e&&e.message||e)}),""}}async function ba(t){let e=hn.loadConfig();return{type:"webdav",path:hn.WEBDAV_CONFIG_PATH,config:e,hasPassword:!!await Yp(t),busy:zl,last:ES}}async function mN(t,e){let n=e||xt&&xt.webview;if(n)try{n.postMessage(await ba(t))}catch(s){w("webdav_push_failed",{message:String(s&&s.message||s)})}}async function Zp(t,e){let n=yn(e)?e:{},s=String(n.passwordAction||"keep"),r=String(n.passwordValue==null?"":n.passwordValue),o=hn.saveConfig(n.config||{});if(!o.ok)return w("webdav_save_invalid",{errors:o.errors}),{ok:!1,errors:(o.errors||[]).map(function(a){return qt(a)})};let i=!1;try{s==="set"&&r?(await t.secrets.store(cp,r),i=!0):s==="clear"&&(await t.secrets.delete(cp),i=!0)}catch(a){w("webdav_secret_write_failed",{message:String(a&&a.message||a)})}return w("webdav_saved",{path:o.path,url:o.config.url,enabled:o.config.enabled,remoteDir:o.config.remoteDir,includes:o.config.includes,secretChanged:i}),await mN(t),{ok:!0,path:o.path,config:o.config,hasPassword:!!await Yp(t)}}async function Do(t,e){let n=hn.loadConfig(),s=yn(e)?e:{},r=s.password!=null&&String(s.password)!==""?String(s.password):await Yp(t);if(!yn(s.config))return Object.assign({},n,{password:r});let o=hn.normalizeConfig(Object.assign({},n,s.config)),i=Object.assign({},o.config,{password:r});return i.__invalid=(o.errors||[]).length?o.errors:null,i}function Ma(t){return t.__invalid&&t.__invalid.length?t.__invalid.map(function(e){return qt(e)}).join(" \xB7 "):t.url?t.enabled?"":qt("webdav.errDisabled"):qt("webdav.errNeedUrl")}async function jS(t,e){let n=await Do(t,e);if(n.__invalid&&n.__invalid.length)return{ok:!1,error:n.__invalid.map(function(r){return qt(r)}).join(" \xB7 ")};if(!n.url)return{ok:!1,error:qt("webdav.errNeedUrl")};let s=await hn.testConnection(n);return w("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?"":qt(s.error||"webdav.errNetwork",s.detail)}}function hN(){for(let t of gn.values())try{clearTimeout(t)}catch{}gn.clear();for(let t of ue.values())try{mt(t)}catch{}}function gN(){try{ge=null,Ye(),Fe(fn())}catch(t){w("webdav_session_refresh_failed",{message:String(t&&t.message||t)})}}function NS(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 FS(t){let e=t||{};return Number(e.restored)>0?(Array.isArray(e.restoredPaths)?e.restoredPaths:[]).indexOf("config/providers.json")>=0:!1}async function up(t,e,n,s){if(zl)return{ok:!1,error:qt("webdav.errBusy"),busy:!0};zl=!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:es,machine:tt.hostname()};try{let a=await Do(t,r.override),l=Ma(a);if(l)return{ok:!1,error:l};delete a.__invalid,a.machine=tt.hostname();let c;if(e==="backup"?c=await Zn.uploadAll(a,i,o):(hN(),c=await Zn.restoreAll(a,Object.assign({},i,{subdir:r.subdir||"",providerIds:Array.isArray(r.providerIds)?r.providerIds.map(String):null}),o)),c.ok){if(ES={kind:e,at:new Date().toISOString(),files:e==="backup"?c.files:c.restored,categories:c.categories||null,snapshot:c.snapshot||""},w(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&&(gN(),FS(c)))try{await Xp(t)}catch(d){w("providers_reload_failed",{message:String(d&&d.message||d)})}}else w(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?qt(c.error||"webdav.errRemoteNewer"):qt(c.error||"webdav.errNetwork",u)})}catch(a){return w("webdav_transfer_failed",{kind:e,message:String(a&&a.message||a)}),{ok:!1,error:qt(a&&a.message||"webdav.errNetwork")}}finally{zl=!1}}async function IS(t,e,n){let s=await Do(t,e),r=Ma(s);if(r)return{ok:!1,error:r};s.machine=tt.hostname();let o=await Zn.remoteSummary(s,{limit:200,subdir:n||""});return w("webdav_remote_list",{ok:!!o.ok,hasBackup:!!o.hasBackup,total:o.total||0,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":qt(o.error||"webdav.errNetwork")})}async function LS(t,e,n){let s=await Do(t,e),r=Ma(s);if(r)return{ok:!1,error:r};s.machine=tt.hostname();let o=await Zn.listRemoteProviders(s,{subdir:n||"",home:at?I.dirname(at):""});return w("webdav_remote_providers",{ok:!!o.ok,n:(o.providers||[]).length,dir:String(n||"")}),Object.assign({},o,{error:o.ok?"":qt(o.error||"webdav.errNetwork")})}async function DS(t,e){let n=await Do(t,e),s=Ma(n);if(s)return{ok:!1,error:s};let r=await Zn.listMachines(n,{machine:tt.hostname()});return w("webdav_machine_list",{ok:!!r.ok,n:(r.machines||[]).length}),Object.assign({},r,{error:r.ok?"":qt(r.error||"webdav.errNetwork")})}async function yN(){let t=hn.WEBDAV_CONFIG_PATH;P.existsSync(t)||(P.mkdirSync(I.dirname(t),{recursive:!0,mode:448}),P.writeFileSync(t,JSON.stringify(hn.defaultConfig(),null,2)+`
953
+ `,{mode:384}));let e=await b.workspace.openTextDocument(b.Uri.file(t));return await b.window.showTextDocument(e,{preview:!1}),t}function wN(){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 bN(t){P.mkdirSync(I.join(t,"sessions"),{recursive:!0}),P.writeFileSync(I.join(t,"sessions","z1.json"),JSON.stringify({id:"z1",items:[{t:"user",text:"\u81EA\u68C0\u4E00"}]})),P.writeFileSync(I.join(t,"sessions","z2.json"),JSON.stringify({id:"z2",items:[{t:"user",text:"\u81EA\u68C0\u4E8C"}]})),P.writeFileSync(I.join(t,"sessions","index.json"),"[]"),P.writeFileSync(I.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 RS(t){let e=await wN(),n=P.mkdtempSync(I.join(tt.tmpdir(),"luban-wd-check-")),s=I.join(n,"webdav.json");try{bN(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:hn.normalizeConfig(r).config,version:es,machine:tt.hostname()},i=await Zn.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=I.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 Zn.restoreAll(r,Object.assign({},o,{mode:"newer"})),k=P.readFileSync(p,"utf8").indexOf("edited")>=0;return{ok:!!h.ok&&(h.blocked||[]).length===1&&k,result:{blocked:h.blocked,restored:h.restored,kept:k,total:l.length}}}for(let p of l)try{P.rmSync(Zn.localPathOf(n,p),{force:!0})}catch{}P.rmSync(I.join(n,"sessions"),{recursive:!0,force:!0});let u=await Zn.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=Zn.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 kN(t,e,n){let s=Rr(e),r=t.asWebviewUri(b.Uri.joinPath(s,"panel.css")),o=t.asWebviewUri(b.Uri.joinPath(s,"settings.css")),i=t.asWebviewUri(b.Uri.joinPath(s,"dashboard.css")),a=t.asWebviewUri(b.Uri.joinPath(s,"hub.css")),l=t.asWebviewUri(b.Uri.joinPath(s,"hub.js")),c=t.asWebviewUri(b.Uri.joinPath(s,"i18n.js")),u=P.readFileSync(b.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,jp()).replace(/{{lang}}/g,Vt||Sa()).replace(/{{tab}}/g,zp(n)).replace(/{{version}}/g,es).replace(/{{nonce}}/g,d)}function qS(t,e){return Kn=t,t.onDidReceiveMessage(async function(s){if(!(!s||!s.type)){if(s.type==="hub_ready"||s.type==="ready"){t.postMessage({type:"lang",lang:Vt});try{t.postMessage(ap())}catch{}try{t.postMessage(uc())}catch{}try{t.postMessage(await ba(e))}catch{}try{t.postMessage(Vi(En))}catch{}try{t.postMessage(dc())}catch{}try{t.postMessage(fp())}catch{}try{t.postMessage({type:"activate",tab:ip})}catch{}dp("hub_ready"),w("hub_ready",{tab:ip});return}if(s.type==="tab"){let r=zp(s.tab);try{r==="usage"?t.postMessage(Vi(En)):r==="general"?t.postMessage(ap()):r==="backup"?t.postMessage(await ba(e)):r==="plugins"?t.postMessage(dc()):r==="mcp"?t.postMessage(fp()):r==="market"?t.postMessage(await WS()):t.postMessage(uc())}catch{}w("hub_tab",{tab:r});return}if(s.type==="ack_rendered"){j=Object.assign({at:Date.now()},s),s.source==="dashboard"?w("usage_dashboard_ack",{kind:s.kind,n:s.n,groups:s.groups}):s.source==="general"?w("general_ack",{kind:s.kind,n:s.n}):w("settings_ack",{kind:s.kind,n:s.n});return}if(s.type==="save_general"){try{let r=await _S(s.values||{});r.ok?t.postMessage(Object.assign({type:"general_saved"},r)):t.postMessage({type:"general_invalid",errors:r.errors||[]})}catch(r){t.postMessage({type:"general_invalid",errors:[M("ext.generalSaveFailed",{msg:String(r&&r.message||r)})]}),w("general_save_failed",{message:r.message})}return}if(s.type==="save_settings"){try{let r=await MS(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)})]}),w("settings_save_failed",{message:r.message})}return}if(s.type==="test_provider"){let r=await CS(s.provider||{});t.postMessage(Object.assign({type:"test_result",ref:s.ref},r));return}if(s.type==="fetch_models"){let r=await Vp(s.provider||{});t.postMessage(Object.assign({type:"models_fetched",ref:s.ref},r));return}if(s.type==="open_config_file"){try{if(!P.existsSync(at))throw new Error(M("ext.configMissing"));let r=await b.workspace.openTextDocument(b.Uri.file(at));await b.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{}w("settings_reload_failed",{message:String(r&&r.message||r)})}return}if(s.type==="save_webdav"){try{let r=await Zp(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:[qt(String(r&&r.message||r))]}),w("webdav_save_failed",{message:String(r&&r.message||r)})}return}if(s.type==="test_webdav"){let r=await jS(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=NS(s),i=await up(e,r,o,t);if(!i.ok&&i.needsConfirm&&r==="backup"&&(await Jf(pN(i.remote),"webdav.confirmOverwriteYes")?(o.force=!0,i=await up(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};b.window.showInformationMessage(M(a,l)+sx(i.categories))}catch{}if(r==="restore"&&i.ok&&i.restored>0)try{t.postMessage({type:"notice",message:M("webdav.restoredNotice",{n:i.restored,cat:sx(i.categories)+PS(i),dir:i.snapshot||M("webdav.noSnapshot")})})}catch{}return}if(s.type==="webdav_remote_list"){let r=await IS(e,s.override,s.subdir);t.postMessage(Object.assign({type:"webdav_list"},r));return}if(s.type==="webdav_remote_providers"){let r=await LS(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 DS(e,s.override);t.postMessage(Object.assign({type:"webdav_machines"},r));return}if(s.type==="hub_confirm"){let r=await Jf(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 b.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 We.installFromDir(o,{trust:!0,replace:s.replace===!0});w("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 xo("install");return}if(s.type==="plugins_uninstall"){let r=String(s.name||""),o=String(s.dir||"");if(!r&&!o)return;if(!await Jf(M("ext.pluginsUninstallConfirm",{name:r||o}),"ext.pluginsUninstallYes")){t.postMessage({type:"plugins_result",action:"uninstall",ok:!1,cancelled:!0});return}let a=await We.uninstall(o||r,{why:"uninstall"});w("plugins_uninstall",{name:r||o,ok:a.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"uninstall"},a)),a.ok&&await xo("uninstall");return}if(s.type==="plugins_restore"){let r=String(s.entry||""),o=await We.restoreFromTrash(r);w("plugins_restore",{entry:r,ok:o.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"restore"},o)),o.ok&&await xo("restore");return}if(s.type==="plugins_trust"){let r;try{r={ok:!0,name:We.trustDir(String(s.dir||"")).name}}catch(o){r={ok:!1,message:String(o&&o.message||o)}}w("plugins_trust",{name:r.name||"",ok:r.ok}),t.postMessage(Object.assign({type:"plugins_result",action:"trust"},r)),r.ok&&await xo("trust");return}if(s.type==="plugins_rescan"){await xo("rescan");return}if(s.type==="plugins_theme"){let r=String(s.name||"").trim(),o=!0,i="";if(r){let a=null;try{a=We.themeOf(r)}catch{a=null}a||(o=!1,i=M("ext.pluginsThemeUnknown",{name:r}))}if(o)try{await b.workspace.getConfiguration("luban").update("plugins.theme",r,b.ConfigurationTarget.Global)}catch(a){o=!1,i=String(a&&a.message||a)}w("plugins_theme",{name:r,ok:o}),t.postMessage({type:"plugins_result",action:"theme",ok:o,name:r,message:i}),o&&(fc("theme"),Np());return}if(s.type==="plugins_open_dir"){let o=String(s.which||"global")==="trash"?We.trashDir():We.globalDir();try{P.mkdirSync(o,{recursive:!0}),await b.commands.executeCommand("revealFileInOS",b.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{we.configure({root:L(),version:es,rec:w});let o=we.setDisabled({name:s.name,disabled:s.disabled===!0,target:r});await we.reload(),w("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}),rx("toggle")}catch(o){w("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{we.configure({root:L(),version:es,rec:w}),await we.reload(),t.postMessage({type:"mcp_result",action:"reload",ok:!0})}catch(r){w("mcp_reload_failed",{message:String(r&&r.message||r)}),t.postMessage({type:"mcp_result",action:"reload",ok:!1,message:String(r&&r.message||r)})}rx("reload");return}if(s.type==="mcp_open_file"){try{let r=s.which==="project"?"project":"global",o=we.configPathFor(r);P.existsSync(o)||(P.mkdirSync(I.dirname(o),{recursive:!0}),P.writeFileSync(o,`{
954
954
  "mcpServers": {}
955
955
  }
956
- `,"utf8"));let i=await b.workspace.openTextDocument(b.Uri.file(o));await b.window.showTextDocument(i,{preview:!1}),w("mcp_open_file",{which:r,path:o})}catch(r){w("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 yN();w("webdav_open_file",{path:r})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="market_install"){await TN(t,s);return}if(s.type==="market_refresh"){dp("refresh");return}if(s.type==="set_range"){En=He.RANGES.some(function(o){return o.key===String(s.range||"")})?String(s.range):"7d";try{t.postMessage(Vi(En))}catch{}w("usage_dashboard_range",{range:En});return}if(s.type==="refresh"){try{t.postMessage(Vi(En))}catch{}w("usage_dashboard_refresh",{range:En});return}if(s.type==="open_usage_dir"){try{P.mkdirSync(er,{recursive:!0,mode:448}),await b.commands.executeCommand("revealFileInOS",b.Uri.file(er)),w("usage_dashboard_open_dir",{ok:!0})}catch(r){w("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 dc(){let t=_a(),e;try{e=We.inventory()}catch(r){w("plugins_status_failed",{message:r.message}),e={dirs:[],errors:[],plugins:[],pending:[]}}let n=[];try{n=We.trashList()}catch(r){w("plugins_trash_failed",{message:r.message})}let s=[];try{s=We.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){w("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:We.globalDir(),trashDir:We.trashDir(),plugins:e.plugins||[],pending:e.pending||[],trash:n,errors:e.errors||[]}}function fc(t){if(Kn)try{Kn.postMessage(dc())}catch(e){w("plugins_push_failed",{message:e.message,reason:t||"push"})}}var BS=8e3,US=["fsRead","fsWrite","shell","net","env"],xN={fsRead:"market.permFsRead",fsWrite:"market.permFsWrite",shell:"market.permShell",net:"market.permNet",env:"market.permEnv"};function SN(){let t={};try{let e=We.inventory();(e.plugins||[]).concat(e.pending||[]).forEach(function(n){n&&n.name&&(t[n.name]=String(n.version||""))})}catch(e){w("market_inventory_failed",{message:e.message})}try{Sk.configure({root:L()}),Sk.installed().forEach(function(e){e&&e.name&&(t[e.name]=String(e.version||""))})}catch(e){w("market_skills_failed",{message:e.message})}return t}function vN(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:US.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 WS(){let t=SN(),e=await _N();return{type:"market",source:e.source,offline:e.offline,error:e.error,entries:(e.entries||[]).map(function(n){let s=hx.verifyEntry(n,e.keys||{});return vN(n,t,s)})}}async function _N(){let t=[],e={},n="",s=!1,r="",o=process.env.LUBAN_REGISTRY||ys.DEFAULT_REGISTRY_URL;try{let i=await ys.readRegistryRaw({registry:o,timeoutMs:BS});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=ys.bundledRegistryPath();if(i&&i!==o)try{let a=await ys.readRegistryRaw({registry:i});a.ok&&a.registry&&(t=a.registry.entries||[],e=a.keys||{},n=i,s=!0)}catch(a){w("market_offline_read_failed",{message:a.message})}}return{entries:t,keys:e,source:n,offline:s,error:r}}function dp(t){Kn&&WS().then(function(e){try{Kn.postMessage(e)}catch(n){w("market_push_failed",{message:n.message,reason:t||"push"})}},function(e){w("market_payload_failed",{message:String(e&&e.message||e),reason:t||"push"})})}function fp(){let t;try{t=we.status()}catch{t={servers:[],tools:[],configPaths:[],configErrors:[]}}let e;try{e=we.configListing()}catch(u){w("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=b.workspace.workspaceFolders,o=L(),i="",a="";try{i=we.configPathFor("global")}catch{i=""}if(r&&r.length)try{we.configure({root:o}),a=we.configPathFor("project")}catch{a=""}let l=0,c=0;try{l=we.toolDefs({}).length}catch{l=0}try{c=we.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 rx(t){if(Kn)try{Kn.postMessage(fp())}catch(e){w("mcp_push_failed",{message:String(e&&e.message||e),reason:t||"push"})}}async function TN(t,e){let n=String(e.name||"").trim(),s=function(x){try{t.postMessage(Object.assign({type:"market_result",action:"install"},x))}catch(T){w("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||ys.DEFAULT_REGISTRY_URL;try{let x=await ys.readRegistryRaw({registry:i,timeoutMs:BS});x.ok&&(r=x)}catch(x){w("market_install_read_failed",{message:String(x&&x.message||x)})}if(!r){let x=ys.bundledRegistryPath();if(x&&x!==i)try{let T=await ys.readRegistryRaw({registry:x});T.ok&&(r=T,o=!0)}catch(T){w("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(x){return x&&x.name===n});if(!l){s({ok:!1,code:"not-found",message:M("ext.marketNotFound",{name:n})});return}let c=hx.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=US.filter(function(x){return(l.permissions||{})[x]===!0}),f=(l.tools||[]).map(function(x){return x.name}),p=d.length?d.map(function(x){return"\xB7 "+M(xN[x])}).join(`
956
+ `,"utf8"));let i=await b.workspace.openTextDocument(b.Uri.file(o));await b.window.showTextDocument(i,{preview:!1}),w("mcp_open_file",{which:r,path:o})}catch(r){w("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 yN();w("webdav_open_file",{path:r})}catch(r){t.postMessage({type:"notice",message:String(r&&r.message||r)})}return}if(s.type==="market_install"){await TN(t,s);return}if(s.type==="market_refresh"){dp("refresh");return}if(s.type==="set_range"){En=He.RANGES.some(function(o){return o.key===String(s.range||"")})?String(s.range):"7d";try{t.postMessage(Vi(En))}catch{}w("usage_dashboard_range",{range:En});return}if(s.type==="refresh"){try{t.postMessage(Vi(En))}catch{}w("usage_dashboard_refresh",{range:En});return}if(s.type==="open_usage_dir"){try{P.mkdirSync(tr,{recursive:!0,mode:448}),await b.commands.executeCommand("revealFileInOS",b.Uri.file(tr)),w("usage_dashboard_open_dir",{ok:!0})}catch(r){w("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 dc(){let t=_a(),e;try{e=We.inventory()}catch(r){w("plugins_status_failed",{message:r.message}),e={dirs:[],errors:[],plugins:[],pending:[]}}let n=[];try{n=We.trashList()}catch(r){w("plugins_trash_failed",{message:r.message})}let s=[];try{s=We.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){w("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:We.globalDir(),trashDir:We.trashDir(),plugins:e.plugins||[],pending:e.pending||[],trash:n,errors:e.errors||[]}}function fc(t){if(Kn)try{Kn.postMessage(dc())}catch(e){w("plugins_push_failed",{message:e.message,reason:t||"push"})}}var BS=8e3,US=["fsRead","fsWrite","shell","net","env"],xN={fsRead:"market.permFsRead",fsWrite:"market.permFsWrite",shell:"market.permShell",net:"market.permNet",env:"market.permEnv"};function SN(){let t={};try{let e=We.inventory();(e.plugins||[]).concat(e.pending||[]).forEach(function(n){n&&n.name&&(t[n.name]=String(n.version||""))})}catch(e){w("market_inventory_failed",{message:e.message})}try{Sk.configure({root:L()}),Sk.installed().forEach(function(e){e&&e.name&&(t[e.name]=String(e.version||""))})}catch(e){w("market_skills_failed",{message:e.message})}return t}function vN(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:US.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 WS(){let t=SN(),e=await _N();return{type:"market",source:e.source,offline:e.offline,error:e.error,entries:(e.entries||[]).map(function(n){let s=hx.verifyEntry(n,e.keys||{});return vN(n,t,s)})}}async function _N(){let t=[],e={},n="",s=!1,r="",o=process.env.LUBAN_REGISTRY||ws.DEFAULT_REGISTRY_URL;try{let i=await ws.readRegistryRaw({registry:o,timeoutMs:BS});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=ws.bundledRegistryPath();if(i&&i!==o)try{let a=await ws.readRegistryRaw({registry:i});a.ok&&a.registry&&(t=a.registry.entries||[],e=a.keys||{},n=i,s=!0)}catch(a){w("market_offline_read_failed",{message:a.message})}}return{entries:t,keys:e,source:n,offline:s,error:r}}function dp(t){Kn&&WS().then(function(e){try{Kn.postMessage(e)}catch(n){w("market_push_failed",{message:n.message,reason:t||"push"})}},function(e){w("market_payload_failed",{message:String(e&&e.message||e),reason:t||"push"})})}function fp(){let t;try{t=we.status()}catch{t={servers:[],tools:[],configPaths:[],configErrors:[]}}let e;try{e=we.configListing()}catch(u){w("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=b.workspace.workspaceFolders,o=L(),i="",a="";try{i=we.configPathFor("global")}catch{i=""}if(r&&r.length)try{we.configure({root:o}),a=we.configPathFor("project")}catch{a=""}let l=0,c=0;try{l=we.toolDefs({}).length}catch{l=0}try{c=we.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 rx(t){if(Kn)try{Kn.postMessage(fp())}catch(e){w("mcp_push_failed",{message:String(e&&e.message||e),reason:t||"push"})}}async function TN(t,e){let n=String(e.name||"").trim(),s=function(x){try{t.postMessage(Object.assign({type:"market_result",action:"install"},x))}catch(T){w("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||ws.DEFAULT_REGISTRY_URL;try{let x=await ws.readRegistryRaw({registry:i,timeoutMs:BS});x.ok&&(r=x)}catch(x){w("market_install_read_failed",{message:String(x&&x.message||x)})}if(!r){let x=ws.bundledRegistryPath();if(x&&x!==i)try{let T=await ws.readRegistryRaw({registry:x});T.ok&&(r=T,o=!0)}catch(T){w("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(x){return x&&x.name===n});if(!l){s({ok:!1,code:"not-found",message:M("ext.marketNotFound",{name:n})});return}let c=hx.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=US.filter(function(x){return(l.permissions||{})[x]===!0}),f=(l.tools||[]).map(function(x){return x.name}),p=d.length?d.map(function(x){return"\xB7 "+M(xN[x])}).join(`
957
957
  `):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?`
958
958
 
959
- `+M("market.replaceConfirm",{name:l.displayName||n}):"");if(await b.window.showWarningMessage(m,{modal:!0},M("ext.marketInstallYes"))!==M("ext.marketInstallYes")){s({ok:!1,code:"cancelled",cancelled:!0});return}let k=await ys.installEntry(l,{root:L(),replace:e.replace===!0,target:"global"});if(w("market_install",{name:n,ok:k.ok,code:k.code||"",offline:o}),!k.ok){s({ok:!1,code:k.code||"install",message:k.message||"",name:n});return}s({ok:!0,code:"installed",name:n,version:k.version||"",dir:k.dir||"",replaced:k.replaced===!0,tools:k.tools||[],warnings:k.warnings||[],needsTrust:l.type!=="skill"}),await xo("market_install"),dp("after_market_install")}async function xo(t){try{await We.reload({keepDisabled:!0})}catch(e){w("plugins_reload_failed",{message:e.message,action:t})}fc("after_"+(t||"change")),Np();try{let e=We.status();b.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}}function pc(t,e){let n=zp(e);if(ip=n,xt){xt.reveal();try{xt.webview.postMessage({type:"activate",tab:n})}catch{}return xt}let s=b.window.createWebviewPanel("luban.hub",M("ext.hubPanelTitle"),b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[Rr(t.extensionUri)]});s.webview.html=kN(s.webview,t.extensionUri,n),xt=s;let r=qS(s.webview,t);return s.onDidDispose(function(){xt=null,Kn===s.webview&&(Kn=null),r.dispose(),w("hub_disposed",{ok:!0})}),w("hub_opened",{ok:!0,tab:n}),s}function Qp(t){return pc(t,"settings")}function KS(t){return pc(t,"usage")}function MN(){if(xt)try{xt.webview.postMessage(Vi(En))}catch(t){w("usage_dashboard_push_failed",{message:String(t&&t.message||t)})}}var CN=I.join(tt.homedir(),".luban","sessions"),ge=null,ue=new Map,Ce="",St=new Map,ns=new Map,rr=0,Qe=new Map,gn=new Map,me=[],em="",mc=!1;function Oe(){return Ce&&ue.get(Ce)||null}function Dr(t){if(t){let e=St.get(t);if(e){let n=ue.get(e);if(n)return n}}return Oe()}function AN(t,e){let n=e&&ue.has(String(e))?String(e):"";St.forEach(function(s,r){s===t&&(n?St.set(r,n):St.delete(r))})}function HS(t,e){if(AN(t,e),Ce!==t)return;let n=[Se&&Se.webview,de&&de.webview];for(let r=0;r<n.length;r++){let o=n[r];if(!o)continue;let i=St.get(o);if(i&&ue.has(i)){Ce=i;return}}if(e&&ue.has(String(e))){Ce=String(e);return}let s=me.filter(function(r){return r!==t&&ue.has(r)});Ce=s.length?s[s.length-1]:""}function zS(t){let e=me.filter(function(n){return n!==t&&ue.has(n)});return e.length?e[e.length-1]:""}function No(t){let e=String(t??"");return e&&ue.has(e)?ue.get(e):null}function An(t,e){let n=t&&t.sessionId?String(t.sessionId):"";return n?No(n):Dr(e)}function GS(){let t=Oe();if(t)return t;let e=Ye().create(L());return ue.set(e.id,e),ns.set(e.id,++rr),Ce=e.id,me.indexOf(e.id)<0&&me.push(e.id),e}function JS(){let t=Un.DEFAULT_MAX_SESSIONS;try{t=b.workspace.getConfiguration("luban").get("sessionHistory.max")}catch{}let e=Number(t);return isFinite(e)&&e>=1?Math.floor(e):Un.DEFAULT_MAX_SESSIONS}function Pr(){let t=Object.assign({},jr.DEFAULTS);try{let e=b.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 hc(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("plan.strictReadOnly")}catch{}return t!==!1}function ws(t,e){return t==="explore"?!0:t==="plan"&&e!==!1}function ox(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 pp(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("fs.allowOutsideWorkspace")}catch{}return t!==!1}function gc(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("review.autoOpenDiff")}catch{}return t!==!1}function $S(){let t=!1;try{t=b.workspace.getConfiguration("luban").get("review.autoKeep")}catch{}return t===!0}function tm(t){let e=t||L(),n="";try{n=String(px("git status --porcelain",{cwd:e,timeout:4e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]})||"")}catch{return{ok:!1,reason:"not-git"}}let s=n.split(`
960
- `).map(function(r){return r.trim()}).filter(Boolean);return s.length?{ok:!1,reason:"dirty",files:s.length}:{ok:!0}}function XS(){let t=Vs.DEFAULTS.maxFiles;try{t=b.workspace.getConfiguration("luban").get("search.maxFiles")}catch{}let e=Number(t);return isFinite(e)&&e>=100?Math.floor(e):Vs.DEFAULTS.maxFiles}var yc=new Map;function wc(t){return t?{put:function(e,n,s){return t.put(e,n,s)},summarize:pn.summarize,newId:pn.newId,toolPlaceholder:pn.toolPlaceholder,memoryDigestBlock:pn.memoryDigestBlock}:null}function VS(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=yc.get(n);return s||(s=pn.createStore(),yc.set(n,s)),s}function ON(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=yc.get(n);if(s)try{s.clear()}catch{}yc.delete(n)}function ps(t,e,n){let s=Pr();if(!s.enabled)return{messages:[],turns:0,chars:0,dropped:0,enabled:!1,spilledTurns:0,spillDigest:"",spillIds:[]};let r=lt(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=ln.profile(o,{mode:Kp()});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?wc(a):{summarize:pn.summarize,newId:pn.newId,memoryDigestBlock:pn.memoryDigestBlock}}return delete i.spillStore,jr.build(t,Object.assign(s,i))}function Ye(){return ge||(ge=Un.newStore(CN),ge.setMax(JS())),ge}function Ac(t){let e=t||Oe();return e?e.title||Un.titleOf(e.items,e.createdAt,M("store.untitled")):""}function EN(t){return(t||[]).map(function(e){if(!e||e.ctx==null)return e;let n=Object.assign({},e);return delete n.ctx,n})}var mp=20,ix=8e3,ax=0;function nm(){return ax++,"q"+Date.now().toString(36)+"-"+ax.toString(36)}function Oc(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(xe.validateEntry).filter(Boolean).slice(0,xe.MAX_IMAGES);return{id:t.id?String(t.id):nm(),text:e.length>ix?e.slice(0,ix):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 wn(t){let e=t||Oe();if(!e)return[];if(Array.isArray(e.queue)||(e.queue=[]),e.queue.length){let n=[];for(let s of e.queue){let r=Oc(s);r&&n.push(r)}n.length!==e.queue.length&&(e.queue=n)}return e.queue}function YS(t){let e=t||Oe();return!!(e&&e.queuePaused&&wn(e).length)}function sm(t){if(!t)return t;if(!Array.isArray(t.queue))t.queue=[];else{let e=[];for(let n of t.queue){let s=Oc(n);s&&e.push(s)}t.queue=e}return t.queuePaused=!!t.queuePaused&&t.queue.length>0,t}function ZS(t){let e=t||Oe();return{type:"queue",id:e?e.id:"",items:wn(e).slice(),paused:YS(e),max:mp,at:Date.now()}}function es(t){let e=t||Oe();e&&Fe(ZS(e))}function lx(t,e){let n=t||GS(),s=wn(n);if(s.length>=mp)return{ok:!1,error:M("ext.queueFull",{n:mp})};let r=Oc({id:nm(),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:lm(n,e&&e.images,e&&e.modelKey)});return r?(s.push(r),n.queuePaused=!1,mt(n),es(n),w("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 PN(t,e){let n=t||Oe();if(!n)return{ok:!1,size:0};let s=wn(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),mt(n),es(n),w("queue_remove",{id:n.id,size:s.length,removed:String(e||"")}),{ok:!0,size:s.length})}function jN(t){let e=t||Oe();if(!e)return{ok:!0,size:0};let n=wn(e).length;return e.queue=[],e.queuePaused=!1,mt(e),es(e),w("queue_clear",{id:e.id,removed:n}),{ok:!0,size:0,removed:n}}function cx(t){let e=t||Oe();return!e||!wn(e).length?!1:(e.queuePaused=!0,!0)}function NN(t,e){let n=t||Oe();if(!n)return null;let s=wn(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 FN(t,e,n,s){let r=t||Oe();if(!r)return{ok:!1,error:M("ext.queueMissing")};let o=NN(r,e);return o?(r.queuePaused=!1,mt(r),es(r),w("queue_run_now",{id:r.id,itemId:o.id,size:wn(r).length}),Qe.has(r.id)?(bc(r.id),{ok:!0,deferred:!0,item:o}):(am(r,n,s||"queue_run_now"),{ok:!0,deferred:!1,item:o})):{ok:!1,error:M("ext.queueMissing")}}function rm(t){let e=t||GS();return sm(e),{type:"session",id:e.id,title:Ac(e),createdAt:e.createdAt,updatedAt:e.updatedAt,root:e.root,modelKey:e.modelKey||"",mode:e.mode||"",items:EN(e.items),queue:wn(e).slice(),queuePaused:YS(e),running:Qe.has(e.id),at:Date.now()}}function fn(){Ye();let t=ge.list(),e=new Set(t.map(function(s){return s.id})),n=[];for(let s of ue.values()){if(e.has(s.id))continue;let r=Un.metaOf(s);r.title=Ac(s)||r.title,n.push(r)}return{type:"session_list",current:Ce||"",root:L(),sessions:n.concat(t),at:Date.now()}}function QS(t,e,n,s){Ye();let r=String(t??"").trim(),o=e==="all"?"all":"workspace",i=XE.search(r?ge.list(o,n||L()):[],r,{load:function(a){try{return Ye().load(a)}catch{return null}}});return w("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 mt(t){let e=t||Oe();if(e){let n=gn.get(e.id);n&&(clearTimeout(n),gn.delete(e.id))}if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return Ye().save(e),e}catch(n){return w("session_save_failed",{message:n.message,id:e.id}),null}}function IN(t){let e=t||Oe();if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return Ye().saveAsync(e),e}catch(n){return w("session_save_failed",{message:n.message,id:e.id}),null}}function om(t){let e=t||Oe();if(!e)return;let n=gn.get(e.id);n&&clearTimeout(n),gn.set(e.id,setTimeout(function(){if(gn.delete(e.id),!!IN(e))try{Fe(fn())}catch{}},1500))}function At(t,e){let n=e||Oe();return n?(Ye().append(n,t),om(n),n):null}function hp(t,e,n){return!t||t.t!=="user"?null:(t.ctx=String(e??""),om(n),t)}function im(t){let e=t||Oe();if(!e)return null;let n=e.items||[];return n.length?n[n.length-1]:null}function LN(t,e){if(!(!t||!t.type))if(t.type==="tool"){if(t.phase==="start")return;At({t:"tool",name:t.name,path:t.path,ok:t.ok,result:t.result},e)}else if(t.type==="todos")At({t:"todos",items:t.items||[]},e);else if(t.type==="ask_question")t.answers&&At({t:"ask_question",id:t.id,title:t.title||"",questions:t.questions||[],answers:t.answers},e);else if(t.type==="sources")At({t:"sources",items:t.items,query:t.query},e);else if(t.type==="references")At({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),At(o,e)}let s=im(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),At(s,e)}t.usage&&At(Object.assign({t:"usage"},t.usage),e),t.summary&&At({t:"summary",text:t.summary},e)}else t.type==="error"&&At({t:"error",message:t.message},e)}var Gl=I.join(tt.homedir(),".luban","plans"),ux=200*1024,DN=32;function Gi(t){return(t<10?"0":"")+t}function RN(t){let e=t||new Date;return e.getFullYear()+Gi(e.getMonth()+1)+Gi(e.getDate())+"-"+Gi(e.getHours())+Gi(e.getMinutes())+Gi(e.getSeconds())}function ev(t){return String(t??"").replace(/[\\/:*?"<>|\u0000-\u001f]+/g," ").replace(/[:/\*?“”"<>|]/g," ").replace(/\s+/g," ").trim().slice(0,DN).trim()||"plan"}function Ji(t,e){return t+": "+JSON.stringify(String(e??""))}function qN(t,e){let n=e||{},s=String(t??"").replace(/\s+$/,"")+`
959
+ `+M("market.replaceConfirm",{name:l.displayName||n}):"");if(await b.window.showWarningMessage(m,{modal:!0},M("ext.marketInstallYes"))!==M("ext.marketInstallYes")){s({ok:!1,code:"cancelled",cancelled:!0});return}let k=await ws.installEntry(l,{root:L(),replace:e.replace===!0,target:"global"});if(w("market_install",{name:n,ok:k.ok,code:k.code||"",offline:o}),!k.ok){s({ok:!1,code:k.code||"install",message:k.message||"",name:n});return}s({ok:!0,code:"installed",name:n,version:k.version||"",dir:k.dir||"",replaced:k.replaced===!0,tools:k.tools||[],warnings:k.warnings||[],needsTrust:l.type!=="skill"}),await xo("market_install"),dp("after_market_install")}async function xo(t){try{await We.reload({keepDisabled:!0})}catch(e){w("plugins_reload_failed",{message:e.message,action:t})}fc("after_"+(t||"change")),Np();try{let e=We.status();b.window.setStatusBarMessage(M("ext.pluginNote",{plugins:e.plugins.length,tools:e.tools.length}),4e3)}catch{}}function pc(t,e){let n=zp(e);if(ip=n,xt){xt.reveal();try{xt.webview.postMessage({type:"activate",tab:n})}catch{}return xt}let s=b.window.createWebviewPanel("luban.hub",M("ext.hubPanelTitle"),b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[Rr(t.extensionUri)]});s.webview.html=kN(s.webview,t.extensionUri,n),xt=s;let r=qS(s.webview,t);return s.onDidDispose(function(){xt=null,Kn===s.webview&&(Kn=null),r.dispose(),w("hub_disposed",{ok:!0})}),w("hub_opened",{ok:!0,tab:n}),s}function Qp(t){return pc(t,"settings")}function KS(t){return pc(t,"usage")}function MN(){if(xt)try{xt.webview.postMessage(Vi(En))}catch(t){w("usage_dashboard_push_failed",{message:String(t&&t.message||t)})}}var CN=I.join(tt.homedir(),".luban","sessions"),ge=null,ue=new Map,Ce="",St=new Map,ss=new Map,or=0,Qe=new Map,gn=new Map,me=[],em="",mc=!1;function Oe(){return Ce&&ue.get(Ce)||null}function Dr(t){if(t){let e=St.get(t);if(e){let n=ue.get(e);if(n)return n}}return Oe()}function AN(t,e){let n=e&&ue.has(String(e))?String(e):"";St.forEach(function(s,r){s===t&&(n?St.set(r,n):St.delete(r))})}function HS(t,e){if(AN(t,e),Ce!==t)return;let n=[Se&&Se.webview,de&&de.webview];for(let r=0;r<n.length;r++){let o=n[r];if(!o)continue;let i=St.get(o);if(i&&ue.has(i)){Ce=i;return}}if(e&&ue.has(String(e))){Ce=String(e);return}let s=me.filter(function(r){return r!==t&&ue.has(r)});Ce=s.length?s[s.length-1]:""}function zS(t){let e=me.filter(function(n){return n!==t&&ue.has(n)});return e.length?e[e.length-1]:""}function No(t){let e=String(t??"");return e&&ue.has(e)?ue.get(e):null}function An(t,e){let n=t&&t.sessionId?String(t.sessionId):"";return n?No(n):Dr(e)}function GS(){let t=Oe();if(t)return t;let e=Ye().create(L());return ue.set(e.id,e),ss.set(e.id,++or),Ce=e.id,me.indexOf(e.id)<0&&me.push(e.id),e}function JS(){let t=Un.DEFAULT_MAX_SESSIONS;try{t=b.workspace.getConfiguration("luban").get("sessionHistory.max")}catch{}let e=Number(t);return isFinite(e)&&e>=1?Math.floor(e):Un.DEFAULT_MAX_SESSIONS}function Pr(){let t=Object.assign({},jr.DEFAULTS);try{let e=b.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 hc(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("plan.strictReadOnly")}catch{}return t!==!1}function bs(t,e){return t==="explore"?!0:t==="plan"&&e!==!1}function ox(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 pp(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("fs.allowOutsideWorkspace")}catch{}return t!==!1}function gc(){let t=!0;try{t=b.workspace.getConfiguration("luban").get("review.autoOpenDiff")}catch{}return t!==!1}function $S(){let t=!1;try{t=b.workspace.getConfiguration("luban").get("review.autoKeep")}catch{}return t===!0}function tm(t){let e=t||L(),n="";try{n=String(px("git status --porcelain",{cwd:e,timeout:4e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]})||"")}catch{return{ok:!1,reason:"not-git"}}let s=n.split(`
960
+ `).map(function(r){return r.trim()}).filter(Boolean);return s.length?{ok:!1,reason:"dirty",files:s.length}:{ok:!0}}function XS(){let t=Ys.DEFAULTS.maxFiles;try{t=b.workspace.getConfiguration("luban").get("search.maxFiles")}catch{}let e=Number(t);return isFinite(e)&&e>=100?Math.floor(e):Ys.DEFAULTS.maxFiles}var yc=new Map;function wc(t){return t?{put:function(e,n,s){return t.put(e,n,s)},summarize:pn.summarize,newId:pn.newId,toolPlaceholder:pn.toolPlaceholder,memoryDigestBlock:pn.memoryDigestBlock}:null}function VS(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=yc.get(n);return s||(s=pn.createStore(),yc.set(n,s)),s}function ON(t){let n=String(t&&typeof t=="object"?t.id||"":t||"")||"_anon",s=yc.get(n);if(s)try{s.clear()}catch{}yc.delete(n)}function ms(t,e,n){let s=Pr();if(!s.enabled)return{messages:[],turns:0,chars:0,dropped:0,enabled:!1,spilledTurns:0,spillDigest:"",spillIds:[]};let r=lt(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=ln.profile(o,{mode:Kp()});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?wc(a):{summarize:pn.summarize,newId:pn.newId,memoryDigestBlock:pn.memoryDigestBlock}}return delete i.spillStore,jr.build(t,Object.assign(s,i))}function Ye(){return ge||(ge=Un.newStore(CN),ge.setMax(JS())),ge}function Ac(t){let e=t||Oe();return e?e.title||Un.titleOf(e.items,e.createdAt,M("store.untitled")):""}function EN(t){return(t||[]).map(function(e){if(!e||e.ctx==null)return e;let n=Object.assign({},e);return delete n.ctx,n})}var mp=20,ix=8e3,ax=0;function nm(){return ax++,"q"+Date.now().toString(36)+"-"+ax.toString(36)}function Oc(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(xe.validateEntry).filter(Boolean).slice(0,xe.MAX_IMAGES);return{id:t.id?String(t.id):nm(),text:e.length>ix?e.slice(0,ix):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 wn(t){let e=t||Oe();if(!e)return[];if(Array.isArray(e.queue)||(e.queue=[]),e.queue.length){let n=[];for(let s of e.queue){let r=Oc(s);r&&n.push(r)}n.length!==e.queue.length&&(e.queue=n)}return e.queue}function YS(t){let e=t||Oe();return!!(e&&e.queuePaused&&wn(e).length)}function sm(t){if(!t)return t;if(!Array.isArray(t.queue))t.queue=[];else{let e=[];for(let n of t.queue){let s=Oc(n);s&&e.push(s)}t.queue=e}return t.queuePaused=!!t.queuePaused&&t.queue.length>0,t}function ZS(t){let e=t||Oe();return{type:"queue",id:e?e.id:"",items:wn(e).slice(),paused:YS(e),max:mp,at:Date.now()}}function ts(t){let e=t||Oe();e&&Fe(ZS(e))}function lx(t,e){let n=t||GS(),s=wn(n);if(s.length>=mp)return{ok:!1,error:M("ext.queueFull",{n:mp})};let r=Oc({id:nm(),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:lm(n,e&&e.images,e&&e.modelKey)});return r?(s.push(r),n.queuePaused=!1,mt(n),ts(n),w("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 PN(t,e){let n=t||Oe();if(!n)return{ok:!1,size:0};let s=wn(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),mt(n),ts(n),w("queue_remove",{id:n.id,size:s.length,removed:String(e||"")}),{ok:!0,size:s.length})}function jN(t){let e=t||Oe();if(!e)return{ok:!0,size:0};let n=wn(e).length;return e.queue=[],e.queuePaused=!1,mt(e),ts(e),w("queue_clear",{id:e.id,removed:n}),{ok:!0,size:0,removed:n}}function cx(t){let e=t||Oe();return!e||!wn(e).length?!1:(e.queuePaused=!0,!0)}function NN(t,e){let n=t||Oe();if(!n)return null;let s=wn(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 FN(t,e,n,s){let r=t||Oe();if(!r)return{ok:!1,error:M("ext.queueMissing")};let o=NN(r,e);return o?(r.queuePaused=!1,mt(r),ts(r),w("queue_run_now",{id:r.id,itemId:o.id,size:wn(r).length}),Qe.has(r.id)?(bc(r.id),{ok:!0,deferred:!0,item:o}):(am(r,n,s||"queue_run_now"),{ok:!0,deferred:!1,item:o})):{ok:!1,error:M("ext.queueMissing")}}function rm(t){let e=t||GS();return sm(e),{type:"session",id:e.id,title:Ac(e),createdAt:e.createdAt,updatedAt:e.updatedAt,root:e.root,modelKey:e.modelKey||"",mode:e.mode||"",items:EN(e.items),queue:wn(e).slice(),queuePaused:YS(e),running:Qe.has(e.id),at:Date.now()}}function fn(){Ye();let t=ge.list(),e=new Set(t.map(function(s){return s.id})),n=[];for(let s of ue.values()){if(e.has(s.id))continue;let r=Un.metaOf(s);r.title=Ac(s)||r.title,n.push(r)}return{type:"session_list",current:Ce||"",root:L(),sessions:n.concat(t),at:Date.now()}}function QS(t,e,n,s){Ye();let r=String(t??"").trim(),o=e==="all"?"all":"workspace",i=XE.search(r?ge.list(o,n||L()):[],r,{load:function(a){try{return Ye().load(a)}catch{return null}}});return w("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 mt(t){let e=t||Oe();if(e){let n=gn.get(e.id);n&&(clearTimeout(n),gn.delete(e.id))}if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return Ye().save(e),e}catch(n){return w("session_save_failed",{message:n.message,id:e.id}),null}}function IN(t){let e=t||Oe();if(!e)return null;if(!(e.items||[]).length&&e.bytes==null&&!(e.queue||[]).length)return e;try{return Ye().saveAsync(e),e}catch(n){return w("session_save_failed",{message:n.message,id:e.id}),null}}function om(t){let e=t||Oe();if(!e)return;let n=gn.get(e.id);n&&clearTimeout(n),gn.set(e.id,setTimeout(function(){if(gn.delete(e.id),!!IN(e))try{Fe(fn())}catch{}},1500))}function Ot(t,e){let n=e||Oe();return n?(Ye().append(n,t),om(n),n):null}function hp(t,e,n){return!t||t.t!=="user"?null:(t.ctx=String(e??""),om(n),t)}function im(t){let e=t||Oe();if(!e)return null;let n=e.items||[];return n.length?n[n.length-1]:null}function LN(t,e){if(!(!t||!t.type))if(t.type==="tool"){if(t.phase==="start")return;Ot({t:"tool",name:t.name,path:t.path,ok:t.ok,result:t.result},e)}else if(t.type==="todos")Ot({t:"todos",items:t.items||[]},e);else if(t.type==="ask_question")t.answers&&Ot({t:"ask_question",id:t.id,title:t.title||"",questions:t.questions||[],answers:t.answers},e);else if(t.type==="sources")Ot({t:"sources",items:t.items,query:t.query},e);else if(t.type==="references")Ot({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),Ot(o,e)}let s=im(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),Ot(s,e)}t.usage&&Ot(Object.assign({t:"usage"},t.usage),e),t.summary&&Ot({t:"summary",text:t.summary},e)}else t.type==="error"&&Ot({t:"error",message:t.message},e)}var Gl=I.join(tt.homedir(),".luban","plans"),ux=200*1024,DN=32;function Gi(t){return(t<10?"0":"")+t}function RN(t){let e=t||new Date;return e.getFullYear()+Gi(e.getMonth()+1)+Gi(e.getDate())+"-"+Gi(e.getHours())+Gi(e.getMinutes())+Gi(e.getSeconds())}function ev(t){return String(t??"").replace(/[\\/:*?"<>|\u0000-\u001f]+/g," ").replace(/[:/\*?“”"<>|]/g," ").replace(/\s+/g," ").trim().slice(0,DN).trim()||"plan"}function Ji(t,e){return t+": "+JSON.stringify(String(e??""))}function qN(t,e){let n=e||{},s=String(t??"").replace(/\s+$/,"")+`
961
961
  `;return["---",Ji("title",ev(n.prompt)),Ji("created",new Date().toISOString()),Ji("workspace",n.workspace||""),Ji("model",n.modelKey||""),Ji("session",n.session||""),"---",""].join(`
962
962
  `)+s}function BN(t){let e=String(t??""),n=e.split(`
963
963
  `);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(`
964
- `).replace(/^\n+/,"");return e}function UN(){return[Gl].concat(tr.roots(tt.homedir(),L()))}function tv(t){let e=String(t??"");if(!e||!/\.md$/i.test(e))return!1;let n=I.resolve(e),s=UN();for(let r=0;r<s.length;r++){let o=I.relative(s[r],n);if(o&&!o.startsWith("..")&&!I.isAbsolute(o))return!0}return!1}function nv(t,e){let n=e||{};try{P.mkdirSync(Gl,{recursive:!0,mode:448});let s=RN()+"-"+ev(n.prompt),r=I.join(Gl,s+".md");for(let i=2;P.existsSync(r)&&i<1e3;i++)r=I.join(Gl,s+"-"+i+".md");let o=r+".tmp";return P.writeFileSync(o,qN(t,n),{mode:384}),P.renameSync(o,r),w("plan_file_write",{file:r,chars:String(t||"").length}),r}catch(s){return w("plan_file_write_failed",{message:s.message}),""}}function WN(t){if(!tv(t))return w("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>ux?(w("plan_file_read_rejected",{path:t,reason:"\u8D85\u8FC7 "+ux+" \u5B57\u8282"}),""):BN(P.readFileSync(t,"utf8")):(w("plan_file_read_rejected",{path:t,reason:"\u4E0D\u662F\u6587\u4EF6"}),"")}catch(e){return w("plan_file_read_rejected",{path:t,reason:e.message}),""}}async function sv(t){if(!tv(t))throw new Error(M("ext.notPlanFile",{path:String(t??"")}));let e=await b.workspace.openTextDocument(b.Uri.file(I.resolve(t)));return await b.window.showTextDocument(e,{preview:!1}),!0}function rv(t,e,n,s){try{let r="";try{r=L()||""}catch{r=""}mn.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 ov(t){try{mn.progress(t)}catch{}}function iv(t){try{mn.round(t)}catch{}}function av(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 KN(t,e){return function(n){if(ns.get(e.id)!==t||!ue.has(e.id))return;LN(n,e),n.sid=e.id;try{mn.applyMessage(n,{source:"extension",sessionId:e.id})}catch{}let s=[Se&&Se.webview,de&&de.webview];for(let r of s)if(r)try{r.postMessage(n)}catch{}}}function Ec(t,e,n){let s=n||Oe();s&&(t&&(s.modelKey=String(t)),e&&(s.mode=String(e)))}function bc(t){let e=String(t??""),n=Qe.get(e);try{let s=ye.stopAll(e);s&&s.stopped&&w("async_cmd_stop_all",{sessionId:e,stopped:s.stopped,reason:"cancel"})}catch{}if(!n)return!1;try{n.cts.cancel()}catch{}try{mn.get().sessionId===e&&mn.update({state:"idle",text:"\u5DF2\u505C\u6B62",tool:null})}catch{}return zN(e,"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),!0}var Bn=new Map,HN=0;function zN(t,e){let n=String(t??""),s="ask_question \u5DF2\u53D6\u6D88\uFF1A"+(e||"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),r=[];Bn.forEach(function(o,i){(!n||o.sessId===n)&&r.push(i)});for(let o=0;o<r.length;o++){let i=r[o],a=Bn.get(i);if(a){Bn.delete(i);try{a.reject(new Error(s))}catch{}}}}function GN(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 JN(t){let e=GN(t),n=M("ext.askGoChoose");Promise.resolve(b.window.showInformationMessage(M("ext.askNeeded",{detail:e}),n)).then(function(s){if(s===n){try{Se&&Se.reveal()}catch{}return b.commands.executeCommand("luban.focusView")}}).catch(function(){})}function lv(t,e,n){let s=t&&t.id?String(t.id):"";return async function(o){let i="ask_"+ ++HN+"_"+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 JN(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};Bn.set(i,u);let d=function(){Bn.has(i)&&(Bn.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 cv(t,e,n){let s=String(t??""),r=Bn.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=fs.normalizeAnswers(r.normalized,e)}catch(a){return{ok:!1,error:a.message}}Bn.delete(s);let i=fs.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 ea(t,e,n,s){let r=An(e,n);if(!r||Qe.has(r.id))return!1;let o=new b.CancellationTokenSource,i=ns.get(r.id)||0,a={cts:o,seq:i,sess:r};Qe.set(r.id,a);let l=KN(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||Lo(),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 $N(e,p):await XN(e,p)}catch(m){if(l({type:"error",message:m.message}),!ue.has(r.id))try{P.existsSync(Ye().fileOf(r.id))&&(Ye().append(r,{t:"error",message:M("ext.cancelled")}),Ye().save(r))}catch{}w("webview_error",{source:s,message:m.message})}finally{Qe.get(r.id)===a&&Qe.delete(r.id),o.dispose(),u.done?rp(f,u.done):u.last&&rp(f,Object.assign({},u.last,{partial:!0})),ue.get(r.id)===r&&(mt(r),Fe({type:"turn_end",id:r.id}),am(r,n,s==="queue"?"queue":s))}return!0}function am(t,e,n){let s=t||Oe();if(!s||Qe.has(s.id))return!1;let r=wn(s);if(!r.length||s.queuePaused)return es(s),!1;let o=r.shift();mt(s),es(s);let i=e||Jt()||ht;return Fe({type:"queue_start",id:s.id,item:o}),w("queue_start",{id:s.id,size:r.length,mode:o.mode,web:o.web}),ea("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 uv(t,e,n){let s={items:Xt.normalize(n||[])};t&&(t.planTodos=s.items);let r=function(o){let i=Xt.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 $N(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=!!t.autoAccept;Ec(t.modelKey,"agent",i),rv(t.plan?String(t.plan).slice(0,80):"\u6267\u884C\u8BA1\u5212",i,t.modelKey,"agent");let l=VS(i),c=ps(i&&i.items||[],t.modelKey,{resolveImage:ms(i),spillStore:l});w("session_memory",{source:r,mode:"execute_plan",turns:c.turns,chars:c.chars,dropped:c.dropped,enabled:c.enabled,spilledTurns:c.spilledTurns||0}),mt(i);let u=t.planFile?WN(t.planFile):"",d=u||String(t.plan||"");if(!d.trim())throw new Error(M("ext.noPlan"));w("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?tr.todosOfFile(t.planFile):[];m.length||(m=Xt.parsePlanSteps(d)),m=Xt.normalize(m);let h=uv(i,n,m),k=m.length?`
964
+ `).replace(/^\n+/,"");return e}function UN(){return[Gl].concat(nr.roots(tt.homedir(),L()))}function tv(t){let e=String(t??"");if(!e||!/\.md$/i.test(e))return!1;let n=I.resolve(e),s=UN();for(let r=0;r<s.length;r++){let o=I.relative(s[r],n);if(o&&!o.startsWith("..")&&!I.isAbsolute(o))return!0}return!1}function nv(t,e){let n=e||{};try{P.mkdirSync(Gl,{recursive:!0,mode:448});let s=RN()+"-"+ev(n.prompt),r=I.join(Gl,s+".md");for(let i=2;P.existsSync(r)&&i<1e3;i++)r=I.join(Gl,s+"-"+i+".md");let o=r+".tmp";return P.writeFileSync(o,qN(t,n),{mode:384}),P.renameSync(o,r),w("plan_file_write",{file:r,chars:String(t||"").length}),r}catch(s){return w("plan_file_write_failed",{message:s.message}),""}}function WN(t){if(!tv(t))return w("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>ux?(w("plan_file_read_rejected",{path:t,reason:"\u8D85\u8FC7 "+ux+" \u5B57\u8282"}),""):BN(P.readFileSync(t,"utf8")):(w("plan_file_read_rejected",{path:t,reason:"\u4E0D\u662F\u6587\u4EF6"}),"")}catch(e){return w("plan_file_read_rejected",{path:t,reason:e.message}),""}}async function sv(t){if(!tv(t))throw new Error(M("ext.notPlanFile",{path:String(t??"")}));let e=await b.workspace.openTextDocument(b.Uri.file(I.resolve(t)));return await b.window.showTextDocument(e,{preview:!1}),!0}function rv(t,e,n,s){try{let r="";try{r=L()||""}catch{r=""}mn.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 ov(t){try{mn.progress(t)}catch{}}function iv(t){try{mn.round(t)}catch{}}function av(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 KN(t,e){return function(n){if(ss.get(e.id)!==t||!ue.has(e.id))return;LN(n,e),n.sid=e.id;try{mn.applyMessage(n,{source:"extension",sessionId:e.id})}catch{}let s=[Se&&Se.webview,de&&de.webview];for(let r of s)if(r)try{r.postMessage(n)}catch{}}}function Ec(t,e,n){let s=n||Oe();s&&(t&&(s.modelKey=String(t)),e&&(s.mode=String(e)))}function bc(t){let e=String(t??""),n=Qe.get(e);try{let s=ye.stopAll(e);s&&s.stopped&&w("async_cmd_stop_all",{sessionId:e,stopped:s.stopped,reason:"cancel"})}catch{}if(!n)return!1;try{n.cts.cancel()}catch{}try{mn.get().sessionId===e&&mn.update({state:"idle",text:"\u5DF2\u505C\u6B62",tool:null})}catch{}return zN(e,"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),!0}var Bn=new Map,HN=0;function zN(t,e){let n=String(t??""),s="ask_question \u5DF2\u53D6\u6D88\uFF1A"+(e||"\u7528\u6237\u505C\u6B62\u4E86\u672C\u8F6E"),r=[];Bn.forEach(function(o,i){(!n||o.sessId===n)&&r.push(i)});for(let o=0;o<r.length;o++){let i=r[o],a=Bn.get(i);if(a){Bn.delete(i);try{a.reject(new Error(s))}catch{}}}}function GN(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 JN(t){let e=GN(t),n=M("ext.askGoChoose");Promise.resolve(b.window.showInformationMessage(M("ext.askNeeded",{detail:e}),n)).then(function(s){if(s===n){try{Se&&Se.reveal()}catch{}return b.commands.executeCommand("luban.focusView")}}).catch(function(){})}function lv(t,e,n){let s=t&&t.id?String(t.id):"";return async function(o){let i="ask_"+ ++HN+"_"+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 JN(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};Bn.set(i,u);let d=function(){Bn.has(i)&&(Bn.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 cv(t,e,n){let s=String(t??""),r=Bn.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=ps.normalizeAnswers(r.normalized,e)}catch(a){return{ok:!1,error:a.message}}Bn.delete(s);let i=ps.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 ea(t,e,n,s){let r=An(e,n);if(!r||Qe.has(r.id))return!1;let o=new b.CancellationTokenSource,i=ss.get(r.id)||0,a={cts:o,seq:i,sess:r};Qe.set(r.id,a);let l=KN(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||Lo(),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 $N(e,p):await XN(e,p)}catch(m){if(l({type:"error",message:m.message}),!ue.has(r.id))try{P.existsSync(Ye().fileOf(r.id))&&(Ye().append(r,{t:"error",message:M("ext.cancelled")}),Ye().save(r))}catch{}w("webview_error",{source:s,message:m.message})}finally{Qe.get(r.id)===a&&Qe.delete(r.id),o.dispose(),u.done?rp(f,u.done):u.last&&rp(f,Object.assign({},u.last,{partial:!0})),ue.get(r.id)===r&&(mt(r),Fe({type:"turn_end",id:r.id}),am(r,n,s==="queue"?"queue":s))}return!0}function am(t,e,n){let s=t||Oe();if(!s||Qe.has(s.id))return!1;let r=wn(s);if(!r.length||s.queuePaused)return ts(s),!1;let o=r.shift();mt(s),ts(s);let i=e||Jt()||ht;return Fe({type:"queue_start",id:s.id,item:o}),w("queue_start",{id:s.id,size:r.length,mode:o.mode,web:o.web}),ea("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 uv(t,e,n){let s={items:Xt.normalize(n||[])};t&&(t.planTodos=s.items);let r=function(o){let i=Xt.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 $N(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=!!t.autoAccept;Ec(t.modelKey,"agent",i),rv(t.plan?String(t.plan).slice(0,80):"\u6267\u884C\u8BA1\u5212",i,t.modelKey,"agent");let l=VS(i),c=ms(i&&i.items||[],t.modelKey,{resolveImage:hs(i),spillStore:l});w("session_memory",{source:r,mode:"execute_plan",turns:c.turns,chars:c.chars,dropped:c.dropped,enabled:c.enabled,spilledTurns:c.spilledTurns||0}),mt(i);let u=t.planFile?WN(t.planFile):"",d=u||String(t.plan||"");if(!d.trim())throw new Error(M("ext.noPlan"));w("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?nr.todosOfFile(t.planFile):[];m.length||(m=Xt.parsePlanSteps(d)),m=Xt.normalize(m);let h=uv(i,n,m),k=m.length?`
965
965
 
966
966
  `+Xt.formatBlock(m)+`
967
967
  \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`:`
968
968
 
969
969
  \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`,x=(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
970
970
 
971
- `+d)+k,T=M(a?"cross.execPlanAccept":"cross.execPlan");At({t:"user",text:T,ctx:x,exec:!0},i);let g=im(i);mt(i),h.seedEmit();let v=lv(i,n,s.token);a&&fj();let y;try{y=await ks(x,{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){hp(g,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:av(n),onProgress:ov,onRound:iv,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))})}finally{a&&pj()}n({type:"done",text:y.text,think:y.reasoning||void 0,kind:"agent",usage:y.usage,rounds:vS(y),summary:M("ext.summary.exec",{n:y.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+xS(y.stop)}),w("webview_execute_plan_done",{toolCalls:y.log.length,iters:y.iters,chars:y.text.length,todos:(h.state.items||[]).length,autoAccept:a})}function ms(t){let e=t&&t.id?String(t.id):"";return function(n){return e?xe.readDataUrl(e,n):""}}function lm(t,e,n){let s=t&&t.id?String(t.id):"";if(!s||!Array.isArray(e)||!e.length)return[];let r=lt(n);if(!(r&&r.model&&r.model.vision===!0))return[];let o=[];for(let i of e.slice(0,xe.MAX_IMAGES)){if(!i||typeof i!="object")continue;let a=i.dataUrl?xe.saveImage(s,i.dataUrl):xe.validateEntry(i);a&&o.push(a)}return o}async function XN(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=jx(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=lm(i,t.images,t.modelKey),d=Array.isArray(t.images)?t.images.filter(Boolean).length:0;u.length?w("ask_images",{source:r,n:u.length,bytes:u.reduce(function(S,_){return S+_.bytes},0)}):d&&(n({type:"img_blocked",n:d}),w("ask_images_blocked",{source:r,model:t.modelKey,n:d})),Ec(t.modelKey,t.mode||"agent",i),rv(c,i,t.modelKey,t.mode||"agent");let f=VS(i),p=ps(i&&i.items||[],t.modelKey,{resolveImage:ms(i),spillStore:f});w("session_memory",{source:r,mode:t.mode||"agent",turns:p.turns,chars:p.chars,dropped:p.dropped,enabled:p.enabled,spilledTurns:p.spilledTurns||0}),At({t:"user",text:c,web:l,uid:t.uid?String(t.uid):void 0,images:u.length?u:void 0},i);let m=im(i);if(mt(i),t.mode==="chat"){let S=sp(lt(t.modelKey)),_=Nr(c,L(),{window:S});_.refs.length&&n({type:"references",refs:_.refs});let C=Cp(_.refs,L(),void 0,{sessionId:i&&i.id}),A=null;l&&(n({type:"searching",query:c.slice(0,128)}),A=await Nx(c,lt(t.modelKey),{signal:s.token,onSearch:function(N){n({type:"sources",items:Ak(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"}),w("webview_chat_web",{source:r,query:A.query,results:A.results.length}));let D=gs.buildUserTurn({rule:l?Hj:"",spillBlock:p.spillDigest||"",webBlock:A?A.block:"",autoBlock:C,refText:_.text});hp(m,D,i);let G=u.map(function(N){return xe.readDataUrl(i.id,N)}),H=[{role:"system",content:Kj}].concat(p.messages,[{role:"user",content:xe.toContent(D,G)}]),q=await jo(H,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}),fe=wa([qp(q,H,Me.DEFAULTS.ratio)],sp(q.target),q.target.model.id);n({type:"usage_live",usage:fe}),n({type:"done",text:q.content,think:q.reasoning||void 0,summary:M("ext.summary.chat",{model:q.target.model.id}),usage:fe}),w("webview_chat_done",{source:r,chars:q.content.length,model:q.target.key,refs:_.refs.length,usage:fe});return}let h=t.mode==="plan",k=h?null:uv(i,n,[]),x=lv(i,n,s.token),T=!1;if(!h&&(t.autoKeep===!0||t.autoKeep===void 0&&$S())){let _=tm();_.ok?(T=!0,w("review_auto_keep",{source:r,session:i&&i.id})):(w("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 ks(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:k?k.state:void 0,onTodos:k?k.onTodos:void 0,askWait:x,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:Ak(S.results),query:S.query})},images:u.map(function(S){return xe.readDataUrl(i.id,S)}),onUserTurn:function(S){hp(m,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:av(n),onProgress:ov,onRound:iv,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))}),v="",y=[];if(h&&(v=nv(g.text,{prompt:t.prompt,workspace:L(),modelKey:t.modelKey,session:i?i.id:""}),y=Xt.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&&y.length?y:void 0,rounds:vS(g),summary:M(h?"ext.summary.plan":"ext.summary.done",{n:g.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+xS(g.stop)}),w("webview_"+(h?"plan":"agent")+"_done",{source:r,toolCalls:g.log.length,iters:g.iters,chars:g.text.length,usage:g.usage,todos:h?y.length:void 0}),h&&(i&&i.id&&ka.set(i.id,{text:g.text,file:v}),w("plan_ready",{chars:g.text.length,tools:g.log.map(function(S){return S.name}),file:v,todos:y.length}),v))try{await sv(v)}catch(S){w("plan_file_open_failed",{file:v,message:S.message})}}async function ot(){if(Se||de)return!0;try{await b.commands.executeCommand("workbench.view.extension.luban")}catch{}return await new Promise(function(t){setTimeout(t,700)}),!!ht}async function Lr(t,e){let n=Ye().create(L());ue.set(n.id,n),ns.set(n.id,++rr),Ce=n.id;let s=e||Jt()||ht;return s&&St.set(s,n.id),me.indexOf(n.id)<0&&me.push(n.id),j=null,Io(n,s),Fe(fn()),w("session_new",{reason:t||"",id:n.id,tabs:me.length,review:ie.size}),n}function $f(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 dv(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 kc(t,e,n,s){if(!(t&&t.items||[]).length)return{ok:!1,error:M("ext.forkEmpty")};let o=Un.forkSession(t,{at:e??null,title:Ac(t),suffix:M("ext.forkSuffix")});ue.set(o.id,o),ns.set(o.id,++rr),Ce=o.id;let i=n||Jt()||ht;i&&St.set(i,o.id),me.indexOf(o.id)<0&&me.push(o.id),j=null;try{let a=xe.copySession(t.id,o.id);(a.copied||a.failed)&&w("session_fork_attachments",{from:t.id,to:o.id,copied:a.copied,failed:a.failed})}catch(a){w("session_fork_attachments_failed",{from:t.id,to:o.id,message:a.message})}try{Ye().save(o)}catch(a){w("session_save_failed",{message:a.message,id:o.id})}return Io(o,i),Fe(fn()),w("session_fork",{from:t.id,id:o.id,at:e??-1,items:o.items.length,source:s||"",tabs:me.length}),{ok:!0,id:o.id,from:t.id,items:o.items.length,at:e??-1}}async function VN(t,e,n,s){let r=String(t||""),o=No(r);if(!o)try{o=Ye().load(r)}catch{o=null}if(!o){let c=M("ext.noSuchSession",{id:r});try{b.window.showErrorMessage(c)}catch{}return w("session_fork_failed",{id:r,reason:"missing"}),{ok:!1,error:c}}if(Qe.has(o.id)){let c=M("ext.forkBusy");try{b.window.showWarningMessage(c)}catch{}return w("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{b.window.showWarningMessage(c)}catch{}return w("session_fork_failed",{id:o.id,reason:"empty"}),{ok:!1,error:c}}if(s)return kc(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 Un.forkPoints(i))a.push({label:oa(c.text),description:M("ext.forkFromDesc",{n:c.rest}),at:c.index});let l=null;try{l=await b.window.showQuickPick(a,{title:M("ext.forkPickTitle"),placeHolder:M("ext.forkPickPlaceholder"),matchOnDescription:!0,ignoreFocusOut:!0})}catch(c){return w("session_fork_failed",{id:o.id,reason:"pick_error",message:c.message}),{ok:!1,error:c.message}}return l?kc(o,l.at,e,n):(w("session_fork_cancel",{id:o.id}),{ok:!1,canceled:!0})}function YN(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 ZN(){let t=tr.listPlans({home:tt.homedir(),root:L()});if(!t.length){b.window.showInformationMessage(M("ext.cursorPlanNone",{dir:tr.homePlanDir(tt.homedir())}));return}let e=t.map(function(s){return{label:s.name||s.base,description:YN(s.mtimeMs)+" \xB7 "+Ux(s.size),detail:s.overview?oa(s.overview):s.file,file:s.file}}),n=await b.window.showQuickPick(e,{placeHolder:M("ext.cursorPlanPick"),matchOnDescription:!0,matchOnDetail:!0,ignoreFocusOut:!0});n&&await fv(n.file)}async function fv(t){let e=tr.readPlan(t);if(!e.ok){let i=e.code==="too_big"?M("ext.cursorPlanBig",{n:Math.round(tr.MAX_BYTES/1024)}):M("ext.cursorPlanReadFail",{msg:e.error});return b.window.showErrorMessage(i),w("cursor_plan_read_failed",{file:t,code:e.code||"",error:e.error||""}),{ok:!1,error:i}}if(!String(e.body||"").trim())return b.window.showErrorMessage(M("ext.noPlan")),w("cursor_plan_read_failed",{file:t,code:"empty"}),{ok:!1,error:M("ext.noPlan")};await ot();let n=await eF(6e3);if(n&&Se&&n===Se.webview)try{Se.reveal()}catch{}else if(n&&de&&n===de.webview&&de.visible!==!0)try{await b.commands.executeCommand("workbench.view.extension.luban")}catch{}if(!await tF(n,1e4))return b.window.showErrorMessage(M("ext.cursorPlanNoPanel")),w("cursor_plan_no_panel",{webview:!!n}),{ok:!1,error:M("ext.cursorPlanNoPanel")};let r=Dr(n);(!r||(r.items||[]).length||wn(r).length||Qe.has(r.id))&&(r=await Lr("cursor_plan",n));let o=Xt.normalize(e.todos||[]);return At({t:"plan",text:e.body,planFile:t,todos:o.length?o:void 0},r),mt(r),Io(r,null),Fe(fn()),n.postMessage({type:"execute_plan",plan:e.body,planFile:t,sessionId:r.id}),w("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 Or(t,e){let n=ue.get(String(t||"")),s=!0;if(!n){if(s=!1,n=Ye().load(t),!n)return w("session_open_failed",{id:t}),{ok:!1,error:M("ext.noSuchSession",{id:t})};n=sm(n),ue.set(n.id,n),ns.set(n.id,++rr)}Ce=n.id;let r=e||Jt()||ht;return r&&St.set(r,n.id),me.indexOf(n.id)<0&&me.push(n.id),j=null,Io(n,r),Fe(fn()),w("session_open",{id:n.id,items:(n.items||[]).length,queue:(n.queue||[]).length,cached:s,tabs:me.length}),{ok:!0,id:n.id,items:(n.items||[]).length}}async function zs(t){Ye();let e=String(t||""),n=Ce===e;if(ue.get(e)){bc(e),Qe.delete(e),ns.set(e,++rr);let r=gn.get(e);r&&(clearTimeout(r),gn.delete(e));let o=zS(e);ue.delete(e),HS(e,o)}ka.delete(e),ge.remove(e);try{let r=xe.removeSession(e);w("attachments_remove",{id:e,removed:r.removed})}catch(r){w("attachments_remove_failed",{id:e,message:r.message})}ON(e),OP(e);try{await Tc(e,"delete")}catch(r){w("browser_close_failed",{message:r.message})}ec.delete(e),ec.delete(e);try{let r=ye.clearSession(e);r&&r.stopped&&w("async_cmd_stop_all",{sessionId:e,stopped:r.stopped,reason:"delete"})}catch{}return me=me.filter(function(r){return r!==e}),Fe({type:"session_deleted",id:e}),Fe(fn()),w("session_delete",{id:e,wasCurrent:n,tabs:me.length}),{ok:!0,current:Ce||"",sessions:ge.list()}}var pv="luban.openTabs";function cm(t){let e=require("crypto").createHash("sha1").update(String(t||"")).digest("hex").slice(0,16);return pv+"."+e}function la(t){try{if(!t||!t.globalState)return;let e=L(),n=t.globalState.update(cm(e),{root:e,ids:me.slice(),active:Ce||"",at:new Date().toISOString()});n&&n.catch&&n.catch(function(){})}catch{}}function QN(t,e){let n=t&&t.globalState;if(!n)return null;let s=null;try{s=n.get(cm(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(pv);return r&&Array.isArray(r.ids)?r:null}catch{return null}}function um(t){Ye();let e=L(),n=QN(t,e),s=n&&Array.isArray(n.ids)?n.ids.map(String):[],r=[],o=function(a){!a||r.indexOf(a.id)>=0||To(a)&&(ue.has(a.id)||(ue.set(a.id,sm(a)),ns.set(a.id,++rr)),r.push(a.id))};for(let a of s){if(!/^[A-Za-z0-9_-]+$/.test(a))continue;let l=ue.get(a);if(!l)try{l=ge.load(a)}catch{l=null}l&&o(l)}if(!r.length){let a=[];try{a=ge.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=ge.load(l.id)}catch{c=null}o(c)}}if(!r.length){let a=ge.create(e);ue.set(a.id,a),ns.set(a.id,++rr),r.push(a.id),w("session_created",{id:a.id})}me=r,em=e;let i=n&&n.active?String(n.active):"";Ce=r.indexOf(i)>=0?i:r[r.length-1],w("session_restored",{root:e,tabs:r.length,active:Ce,items:((ue.get(Ce)||{}).items||[]).length})}function mv(t){try{um(t)}catch(n){w("session_restore_failed",{message:n.message,reason:"workspace_change"})}St.clear(),Fe({type:"tabs_reset"});let e=[];for(let n of me){let s=ue.get(n);if(!s||!To(s))continue;e.push(n);let r=rm(s);r.boot=!0,Fe(r)}Fe({type:"open_tabs",ids:e,active:Ce}),Fe(fn()),la(t),w("tabs_workspace_switch",{root:L(),tabs:e.length,active:Ce})}async function Te(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 Se=null,de=null,j=null,ht=null,gp=new WeakSet,ca=new WeakMap,Fo=new WeakMap;function Jt(){let t=de&&de.webview,e=Se&&Se.webview;return t&&de.visible===!0?t:e||(ht&&(ht===t||ht===e)?ht:t||null)}function Ne(t){return t==="panel"?Se?Se.webview:null:t==="view"?de?de.webview:null:Jt()||ht}async function eF(t){let e=Date.now()+(Number(t)>0?Number(t):6e3);for(;;){let n=Jt();if(n)return n;if(Date.now()>=e)return null;await new Promise(function(s){setTimeout(s,100)})}}function tF(t,e){let n=t;return n?gp.has(n)?Promise.resolve(!0):new Promise(function(s){let r=Date.now()+(Number(e)>0?Number(e):8e3),o=setInterval(function(){if(gp.has(n)){clearInterval(o),s(!0);return}Date.now()>=r&&(clearInterval(o),s(!1))},100)}):Promise.resolve(!1)}var ka=new Map;function hv(t,e){let n=Rr(e),s=t.asWebviewUri(b.Uri.joinPath(n,"panel.css")),r=t.asWebviewUri(b.Uri.joinPath(n,"panel.js")),o=t.asWebviewUri(b.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(b.Uri.joinPath(n,"avatar.js")),a=t.asWebviewUri(b.Uri.joinPath(n,"i18n.js")),l=P.readFileSync(b.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,jp()).replace(/{{jsUri}}/g,String(r)).replace(/{{mdUri}}/g,String(o)).replace(/{{avatarUri}}/g,String(i)).replace(/{{i18nUri}}/g,String(a)).replace(/{{lang}}/g,Vt||Sa()).replace(/{{nonce}}/g,c)}var nF=2*1024*1024,sF={".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 rF(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 ua=null,Ao=null,da=!1;function oF(t,e){let n=Rr(e),s=t.asWebviewUri(b.Uri.joinPath(n,"preview.css")),r=t.asWebviewUri(b.Uri.joinPath(n,"preview.js")),o=t.asWebviewUri(b.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(b.Uri.joinPath(n,"code-highlight.js")),a=t.asWebviewUri(b.Uri.joinPath(n,"i18n.js")),l=P.readFileSync(b.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,Vt||Sa()).replace(/{{nonce}}/g,c)}function xc(){return{type:"models",current:Lo(),models:Wn().map(t=>({key:t.key,label:t.provider.name+" \xB7 "+t.model.name,vision:t.model.vision===!0,thinking:Cj(t.model)}))}}function Fe(t){let e=[Se&&Se.webview,de&&de.webview];for(let n of e)if(n)try{n.postMessage(t)}catch(s){w("broadcast_failed",{message:s.message})}}function gv(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 Xs=null,dx="";function iF(){Xs||(Xs=setTimeout(function(){Xs=null;let t;try{t=gv(mn.get())}catch{return}let e=t.state+"|"+t.mood+"|"+t.text;e!==dx&&(dx=e,Fe({type:"status",status:t}))},200),Xs.unref&&Xs.unref())}function Io(t,e,n){let s=[Se&&Se.webview,de&&de.webview];for(let r of s){if(!r)continue;let o=Object.assign(rm(t),n||{},{yank:r===e});try{r.postMessage(o)}catch(i){w("broadcast_failed",{message:i.message})}}}async function yv(t,e){let n=String(t||"");if(!/^https?:\/\//i.test(n))return!1;try{return await b.env.openExternal(b.Uri.parse(n)),w("webview_open_link",{source:e,url:n.slice(0,200)}),!0}catch(s){return w("webview_open_link_failed",{url:n.slice(0,200),message:s.message}),!1}}function dm(t,e,n){return ht=t,t.onDidReceiveMessage(async r=>{if(!(!r||!r.type)){if(ht=t,gp.add(t),r.type==="chat_focus"){ca.set(t,r.focused===!0);return}if(r.type==="sidebar_maximized"){let o=Fo.get(t)===!0;Fo.set(t,r.maximized===!0),w("sidebar_maximized_report",{maximized:r.maximized===!0,was:o,widths:r.widths||null}),o&&r.maximized!==!0&&de&&de.webview===t&&nS();return}if(r.type==="ready"){t.postMessage({type:"lang",lang:Vt}),t.postMessage(xc()),t.postMessage(ma());try{t.postMessage({type:"status",status:gv(mn.get())})}catch(a){w("status_push_failed",{message:a.message})}let o=[];for(let a of me){let l=ue.get(a);if(!l||!To(l))continue;o.push(a);let c=rm(l);c.boot=!0,t.postMessage(c)}t.postMessage({type:"open_tabs",ids:o,active:St.get(t)||Ce}),t.postMessage(fn());let i=Dr(t);i&&t.postMessage(ZS(i)),mc&&(mc=!1,t.postMessage({type:"toggle_session_list"})),w("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),w("webview_lang_applied",{source:n,lang:r.lang}),rP(r.lang);return}if(r.type==="new_session"){await Lr(r.from||n,t);return}if(r.type==="open_session"){let o=await Or(String(r.id||""),t);if(!o.ok)try{t.postMessage({type:"error",message:o.error})}catch{}return}if(r.type==="list_sessions"){t.postMessage(fn());return}if(r.type==="search_sessions"){t.postMessage(QS(r.q,r.scope,r.root,r.seq));return}if(r.type==="delete_session"){await zs(String(r.id||""));return}if(r.type==="fork_session"){await VN(String(r.id||""),t,n,!!r.whole);return}if(r.type==="fork_message"){let o=String(r.sessionId||""),i=o?No(o):Dr(t);if(!i&&o)try{i=Ye().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{}w("session_fork_failed",{id:a,reason:"fork_message",message:d})};if(!i){l(M("ext.noSuchSession",{id:a}));return}if(Qe.has(i.id)){l(M("ext.forkBusy"));return}let c=$f(i.items||[],r.uid?String(r.uid):"",Number(r.ordinal));if(c<0){l(M("ext.forkMissing"));return}let u=kc(i,c,t,"fork_message");u.ok||l(u.error||M("ext.forkEmpty"));return}if(r.type==="save_session_meta"){let o=No(r.id);o&&(Ec(r.modelKey,r.mode,o),om(o));return}if(r.type==="tab_active"){let o=String(r.id||"");ue.has(o)&&(Ce=o,St.set(t,o),me.indexOf(o)<0&&me.push(o),la(e));return}if(r.type==="tab_close"){let o=String(r.id||""),i=ue.get(o),a=zS(o);if(i){cx(i),bc(o),Qe.delete(o),mt(i);let l=gn.get(o);l&&(clearTimeout(l),gn.delete(o)),ns.set(o,++rr),ue.delete(o),HS(o,a)}ka.delete(o),me=me.filter(function(l){return l!==o}),la(e),Fe({type:"tab_removed",id:o}),Fe(fn()),w("tab_closed",{id:o,tabs:me.length});return}if(r.type==="tabs_changed"){let o=(Array.isArray(r.ids)?r.ids.map(String):[]).filter(function(c){return ue.has(c)&&To(ue.get(c))}),i=me.filter(function(c){return o.indexOf(c)<0&&ue.has(c)&&To(ue.get(c))});me=o.concat(i);let a=String(r.active||""),l=a&&ue.has(a)?a:me.indexOf(Ce)<0?me.length?me[me.length-1]:"":Ce;Ce=l,l?St.set(t,l):St.delete(t),la(e);return}if(r.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:n},r),w("webview_ack",Object.assign({source:n},r));return}if(r.type==="avatar_shown"){w("avatar_shown",{source:n,state:r.state,mood:r.mood,n:r.n});return}if(r.type==="setModel"){Bt.defaultModel=r.modelKey,w("webview_set_model",{modelKey:r.modelKey});return}if(r.type==="listFiles"){try{let o=await Ap();t.postMessage({type:"fileList",files:o.files,dirs:o.dirs})}catch(o){t.postMessage({type:"fileList",files:[],dirs:[],error:o.message}),w("webview_list_files_failed",{message:o.message})}return}if(r.type==="getSelection"){t.postMessage(Object.assign({type:"selectionInfo"},Rx()));return}if(r.type==="openLink"){await yv(r.url,n);return}if(r.type==="open_settings"){Qp(e),w("webview_open_settings",{source:n});return}if(r.type==="stop"){let o=An(r,t);if(!o){w("stale_session_hit",{type:"stop",id:String(r.sessionId||"")});return}cx(o)&&(mt(o),es(o),w("queue_paused",{id:o.id,size:wn(o).length})),bc(o.id);return}if(r.type==="answer_question"){let o=An(r,t),i=o?o.id:String(r.sessionId||""),a=cv(r.id,r.answers,i);if(a.ok)w("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{}w("ask_answer_failed",{id:r.id,error:a.error})}return}if(r.type==="review_action"){let o;try{o=await ha(r.action,r.path,r.hunk||"",r.sessionId)}catch(i){o={ok:!1,error:i.message}}try{t.postMessage(ma())}catch{}w("review_action",{source:n,action:r.action,path:r.path,hunk:r.hunk||"",ok:!!o.ok,error:o.error,files:ie.size,hunks:Vn()});return}if(r.type==="img_preview"){let o=String(r.sessionId||""),i=String(r.file||""),a=xe.readPreview(o,i);try{t.postMessage({type:"img_preview",ok:!!a.ok,sessionId:o,file:i,dataUrl:a.dataUrl||"",mime:a.mime||""})}catch{}w("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 b.env.clipboard.writeText(o)}catch{i=!1}try{t.postMessage({type:"copy_done",ok:i,n:o.length})}catch{}w("copy_text",{source:n,n:o.length,ok:i});return}if(r.type==="open_plan_file"){try{await sv(r.path),w("plan_file_opened",{source:n,path:r.path,ok:!0})}catch(o){w("plan_file_opened",{source:n,path:r.path,ok:!1,error:o.message})}return}if(r.type==="execute_plan"){let o=An(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(Qe.has(o.id)){w("webview_busy",{prompt:"execute_plan",session:o.id});try{t.postMessage({type:"error",sid:o.id,message:M("ext.sessionBusy")})}catch{}return}await ea("execute_plan",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="auto_keep_check"){let o=tm();w("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=An(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(Qe.has(o.id)){lx(o,Object.assign({},r,{echoed:!0}));return}await ea("ask",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="edit_message"){let o=An(r,t),i=!!r.resend,a=function(k,x){try{t.postMessage({type:"edit_error",sid:o?o.id:String(r.sessionId||""),message:M(k,x)})}catch{}};if(!o){a("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(Qe.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=$f(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]=Un.clampItem(m),c.length=f+1),f===0&&(o.title=""),mt(o),Io(o,null,{keepScroll:!0}),Fe(fn()),Fe({type:"edit_done",sid:o.id,removed:h,resend:i}),w("session_edit",{source:n,id:o.id,removed:h,uid:u,ordinal:d,resend:i}),i&&(Fe({type:"queue_start",id:o.id,item:{text:l,web:!!p.web,uid:u,images:p.images||[],mode:r.mode,modelKey:r.modelKey}}),await ea("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=An(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(Qe.has(o.id)){i("ext.deleteBusy");return}let a=o.items||[],l=r.uid?String(r.uid):"",c=Number(r.ordinal),u=$f(a,l,c);if(u<0){i("ext.deleteMissing");return}let d=dv(a,u);if(!d){i("ext.deleteMissing");return}a.splice(d.start,d.removed),d.start===0&&(o.title=""),mt(o),Io(o,null,{keepScroll:!0}),Fe(fn()),Fe({type:"turn_deleted",sid:o.id,removed:d.removed}),w("session_turn_deleted",{source:n,id:o.id,removed:d.removed,uid:l,ordinal:c});return}if(r.type==="queue_add"){let o=An(r,t);if(!o){w("stale_session_hit",{type:"queue_add",id:String(r.sessionId||"")});return}if(!Qe.has(o.id)){let a=Oc({id:nm(),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:lm(o,r.images,r.modelKey)});if(!a)return;Fe({type:"queue_start",id:o.id,item:a}),es(o),await ea("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=lx(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=An(r,t);if(!o){w("stale_session_hit",{type:"queue_remove",id:String(r.sessionId||"")});return}PN(o,r.id);return}if(r.type==="queue_clear"){let o=An(r,t);if(!o){w("stale_session_hit",{type:"queue_clear",id:String(r.sessionId||"")});return}jN(o);return}if(r.type==="queue_resume"){let o=An(r,t);if(!o)return;o.queuePaused=!1,mt(o),es(o),w("queue_resume",{id:o.id,size:wn(o).length}),Qe.has(o.id)||am(o,t,n);return}if(r.type==="queue_run_now"){let o=An(r,t);if(!o){w("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=FN(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 yp(t){if(Se)return Se.reveal(),Se;let e=b.window.createWebviewPanel("luban","Luban",b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[Rr(t.extensionUri)]});e.webview.html=hv(e.webview,t.extensionUri),Se=e;let n=dm(e.webview,t,"panel");return e.onDidDispose(()=>{Se=null,ht===e.webview&&(ht=null),St.delete(e.webview),n.dispose(),w("panel_disposed",{ok:!0})}),w("panel_opened",{ok:!0}),e}function aF(t){let e={resolveWebviewView(n){de=n,n.webview.options={enableScripts:!0,localResourceRoots:[Rr(t.extensionUri)]},n.webview.html=hv(n.webview,t.extensionUri),dm(n.webview,t,"view"),n.onDidDispose(()=>{ht===n.webview&&(ht=null),St.delete(n.webview),de=null}),w("view_resolved",{ok:!0})}};try{let n=b.window.registerWebviewViewProvider("luban.chatView",e,{webviewOptions:{retainContextWhenHidden:!0}});return w("view_provider_registered",{ok:!0}),n}catch(n){return w("view_provider_failed",{message:n.message}),{dispose:function(){}}}}var hs={busy:!1,stamps:[],enabled:!1,last:""};function Pc(){let t={enabled:!1,maxPerMinute:30,debounceMs:250};try{let e=b.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 ta(t){return new Promise(function(e){setTimeout(e,Math.max(0,Number(t)||0))})}function fx(t){let e=Date.now();return hs.stamps=hs.stamps.filter(function(n){return e-n<6e4}),hs.stamps.length<t}async function lF(t,e,n,s){let r=Pc();if(!r.enabled)return[];let o=function(i){return w("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=lt(Lo());if(!a||!Yl(a.provider))return o("provider-unsupported");if(hs.busy)return o("busy");if(!fx(r.maxPerMinute))return o("rate-limit");if(await ta(r.debounceMs),s&&s.isCancellationRequested)return o("cancelled");if(!fx(r.maxPerMinute))return o("rate-limit");hs.busy=!0,hs.stamps.push(Date.now());let l=Date.now(),c;try{c=await Cx({modelKey:a.key,path:qn(t.uri.fsPath,L()),text:i,offset:t.offsetAt(e),signal:s})}catch(u){return w("inline_completion",{ms:Date.now()-l,chars:0,error:String(u&&u.message||u).slice(0,160)}),[]}finally{hs.busy=!1}return hs.last=c.text||"",w("inline_completion",{ms:Date.now()-l,chars:(c.text||"").length,model:c.model,promptChars:c.promptChars,suffixChars:c.suffixChars,timeout:!1}),c.text?typeof b.InlineCompletionItem!="function"?[]:[new b.InlineCompletionItem(c.text,new b.Range(e,e))]:[]}catch(i){return hs.busy=!1,w("inline_completion_failed",{message:String(i&&i.message||i).slice(0,160)}),[]}}function cF(t){if(!b.languages||typeof b.languages.registerInlineCompletionItemProvider!="function"){w("inline_provider_unsupported",{ok:!1});return}try{let e={provideInlineCompletionItems:lF};t.subscriptions.push(b.languages.registerInlineCompletionItemProvider({pattern:"**"},e)),w("inline_provider_registered",{enabled:Pc().enabled})}catch(e){w("inline_provider_failed",{message:String(e&&e.message||e).slice(0,160)})}}async function uF(){let e=!Pc().enabled;try{await b.workspace.getConfiguration("luban").update("inlineCompletion.enabled",e,b.ConfigurationTarget.Global),w("inline_toggle",{enabled:e});try{b.window.showInformationMessage(M(e?"ext.inlineOn":"ext.inlineOff"))}catch{}}catch(n){w("inline_toggle_failed",{message:String(n&&n.message||n).slice(0,160)})}return e}var dF="luban";function wv(t){return gx.register({vscode:b,context:t,vendor:dF,rec:w,version:Qn,allModels:Wn,resolveModel:lt,streamChat:jo})}function fF(t){Xl("activate"),np("activate"),Sc(),w("activate",{at:new Date().toISOString(),root:L(),configSource:Oo,models:Wn().length});try{mn.autoServe()}catch(g){w("status_serve_failed",{message:g.message})}try{mn.update({source:"extension",workspace:L()||"",text:"\u7A7A\u95F2"})}catch{}Rt.configure({root:L(),rec:w});try{Rt.refresh(L())}catch(g){w("skills_scan_failed",{message:g.message})}Ql("activate"),Yi(L()),we.configure({root:L(),version:Qn,rec:w}),we.start().then(function(g){w("mcp_start_done",{servers:g.servers.length,tools:g.tools.length})},function(g){w("mcp_start_failed",{message:g.message})}),Jp(t).then(function(g){w("secrets_ready",{keys:g}),$p()}),sa(b.window.activeTextEditor),t.subscriptions.push(b.window.onDidChangeActiveTextEditor(sa)),t.subscriptions.push(b.window.onDidChangeTextEditorSelection(function(g){sa(g.textEditor)}));try{um(t)}catch(g){w("session_restore_failed",{message:g.message})}try{let g=new Set(me.slice());for(let y of ue.values())g.add(y.id);for(let y of ge.list())g.add(y.id);let v=xe.sweepOrphans(g);v.removed&&w("attachments_sweep",v)}catch(g){w("attachments_sweep_failed",{message:g.message})}t.subscriptions.push(b.commands.registerCommand("luban.openPanel",()=>yp(t))),wv(t);try{let g=YE.mount({vscode:b,status:mn,tr:M,rec:w});g&&t.subscriptions.push(g)}catch(g){w("statusbar_mount_failed",{message:g.message})}try{let g=mn.subscribe(function(){iF()});t.subscriptions.push({dispose:function(){try{g()}catch{}}})}catch(g){w("status_push_failed",{message:g.message})}t.subscriptions.push(b.commands.registerCommand("luban.providerSettings",()=>Qp(t))),t.subscriptions.push(b.commands.registerCommand("luban.plugins",()=>pc(t,"plugins"))),t.subscriptions.push(b.commands.registerCommand("luban.market",()=>pc(t,"market"))),t.subscriptions.push(b.commands.registerCommand("luban.dashboard",()=>KS(t))),t.subscriptions.push(b.commands.registerCommand("luban.rules.open",async()=>{try{let g=L()||tt.homedir(),v=I.join(g,".luban","rules"),y=I.join(v,"default.md"),S=!1;P.existsSync(y)||(P.mkdirSync(v,{recursive:!0}),P.writeFileSync(y,XP,"utf8"),S=!0,Yi(g));let _=await b.workspace.openTextDocument(b.Uri.file(y));await b.window.showTextDocument(_,{preview:!1}),b.window.setStatusBarMessage(M(S?"ext.rulesCreated":"ext.rulesOpened",{file:y}),4e3)}catch(g){w("rules_open_failed",{message:g.message}),b.window.showErrorMessage(M("ext.rulesFailed",{msg:g.message}))}})),t.subscriptions.push(b.commands.registerCommand("luban.openInBrowser",async g=>{let v=Array.isArray(g)?g[0]:g;await yv(v&&typeof v=="object"?v.linkUrl:"","context")})),t.subscriptions.push(b.commands.registerCommand("luban.browserCheck",async()=>{let g=nr(),v=pt.findChrome(g.chromePath);if(!v.path){b.window.showErrorMessage(M("ext.browserNotFound",{paths:v.tried.slice(0,4).map(function(y){return" "+y}).join(`
972
- `)}));return}await b.window.withProgress({location:b.ProgressLocation.Notification,title:M("ext.browserCheckRunning"),cancellable:!1},async function(){let y=null;try{y=await pt.launch({exe:g.chromePath,headless:g.headless,width:g.width,height:g.height}),await y.navigate("data:text/html,<title>Luban</title><h1>Luban browser check</h1>");let S=await y.snapshot(1200),_=await y.screenshot({});w("browser_check",{ok:!0,exe:y.exe,snapChars:S.length,shotChars:_.length}),b.window.showInformationMessage(M("ext.browserCheckOk",{exe:v.path,chars:String(Math.round(_.length/1024))}))}catch(S){w("browser_check",{ok:!1,message:String(S&&S.message||S)}),b.window.showErrorMessage(M("ext.browserCheckFailed",{message:String(S&&S.message||S)}))}finally{if(y)try{await y.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 Xx(n),y=await v.screenshot({});e===g&&g.webview.postMessage({type:"shot",dataUrl:y,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(b.commands.registerCommand("luban.browserPreview",async()=>{let g=nr();if(!g.enabled){b.window.showWarningMessage(M("ext.browserPreviewDisabled"));return}if(!g.preview){b.window.showWarningMessage(M("ext.browserPreviewOff"));return}let v=String(Ce||"_default");if(e){if(n===v){e.reveal();return}e.dispose()}n=v;let y=b.window.createWebviewPanel("luban.browserPreview","Luban \u6D4F\u89C8\u5668\u9884\u89C8",b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0});e=y,y.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>',w("browser_preview_open",{sessionId:v}),o(y),y.onDidDispose(function(){e===y&&(e=null,n=null),r(),w("browser_preview_close",{sessionId:v})}),y.onDidChangeViewState(function(S){S.webviewPanel.visible?o(y):r()})})),Qf=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=b.workspace.workspaceFolders||[];for(let y of v)y&&y.uri&&y.uri.fsPath&&g.push(y.uri.fsPath)}catch{}return g}function f(g,v,y){let S=vk.classifyImage(v,y,d());if(S.kind==="workspace")try{return String(g.asWebviewUri(b.Uri.file(S.abs)))}catch{return null}if(S.kind==="inline")try{let _=P.statSync(S.abs);if(!_.isFile()||_.size>nF)return null;let C=P.readFileSync(S.abs),A=I.extname(S.abs).toLowerCase();return"data:"+(sF[A]||"application/octet-stream")+";base64,"+C.toString("base64")}catch{return null}return null}function p(g,v,y){let S={},_=vk.extractImageUrls(v);for(let C of _)S[C]=f(g,C,y);return S}function m(g,v){if(!g||g!==i)return;let y="";try{let C=b.workspace.textDocuments.find(function(A){return A.uri.toString()===v.toString()});y=C?C.getText():""}catch{y=""}let S={};try{let C=I.dirname(v.fsPath);S=p(g.webview,y,C)}catch{S={}}let _=v.fsPath||v.toString();try{g.webview.postMessage({type:"doc",content:y,imageMap:S,filePath:_,lang:Vt||Sa()})}catch{}}function h(g,v){if(i)return a=v,Ao=v,i.title=M("ext.mdPreviewTitle"),i.reveal(b.ViewColumn.Beside,!0),m(i,v),i;let y=b.window.createWebviewPanel("luban.markdownPreview",M("ext.mdPreviewTitle"),b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[Rr(g.extensionUri)].concat(d().map(function(S){return b.Uri.file(S)}))});return i=y,a=v,u=!1,Ao=v,da=!1,ua=y.webview,y.webview.html=oF(y.webview,g.extensionUri),w("md_preview_open",{file:v.fsPath||v.toString()}),y.webview.onDidReceiveMessage(function(S){if(!(!S||!S.type)){if(S.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:"mdpreview"},S),w("md_preview_ack",{kind:S.kind,n:S.n,total:S.total,value:S.value||""});return}if(S.type==="ready"){u=!0,da=!0,m(y,a);return}if(S.type==="openLink"){let _=String(S.url||"");if(/^https?:\/\//i.test(_))try{b.env.openExternal(b.Uri.parse(_))}catch{}return}}}),c.push(b.workspace.onDidChangeTextDocument(function(S){!i||!a||S.document.uri.toString()===a.toString()&&m(i,a)})),c.push(b.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))})),y.onDidDispose(function(){l&&(clearTimeout(l),l=null);for(let S of c)try{S.dispose()}catch{}c=[],ua===y.webview&&(ua=null),i===y&&(i=null,a=null,Ao=null,u=!1,da=!1),w("md_preview_close",{})}),y}t.subscriptions.push(b.commands.registerCommand("luban.markdownPreview",async()=>{let g=b.window.activeTextEditor;if(!g||!rF(g.document)){b.window.showWarningMessage(M("ext.mdPreviewNotMarkdown"));return}try{h(t,g.document.uri)}catch(v){b.window.showWarningMessage(M("ext.mdPreviewFailed")+" "+String(v&&v.message||v))}})),cF(t),t.subscriptions.push(b.commands.registerCommand("luban.inlineCompletion.toggle",uF)),t.subscriptions.push(b.commands.registerCommand("luban.focusView",async()=>{try{await b.commands.executeCommand("workbench.view.extension.luban"),w("focus_view",{ok:!0})}catch(g){w("focus_view",{ok:!1,message:g.message})}})),t.subscriptions.push(aF(t)),Tj(t),t.subscriptions.push(b.commands.registerCommand("luban.agent",async()=>{let g=await b.window.showInputBox({prompt:M("ext.agentPrompt")});g&&await b.window.withProgress({location:b.ProgressLocation.Notification,title:"Luban agent"},async v=>{let y=Dr(Jt()),S=ps(y&&y.items||[],"",{resolveImage:ms(y)}),_=await ks(g,{root:L(),history:S.messages,sessionId:y?y.id:"",onProgress:C=>v.report({message:C})});rp({modelKey:Lo(),mode:"agent",source:"command",session:y?y.id:""},_.usage),b.window.showInformationMessage(M("ext.agentDone",{n:_.log.length}))})}));async function k(){await Xp(t);try{Rt.configure({root:L(),rec:w}),Rt.refresh(L())}catch(y){w("skills_scan_failed",{message:y.message})}Yi(L());let g="";try{we.configure({root:L(),version:Qn,rec:w});let y=await we.reload();g=M("ext.mcpNote",{servers:y.servers.length,tools:y.tools.length})}catch(y){g=M("ext.mcpFail",{msg:y.message}),w("mcp_reload_failed",{message:y.message})}let v="";try{let y=_a();We.configure({root:L(),enabled:y.enabled,maxTools:y.maxTools,rec:w,confirm:$x}),await We.reload();let S=We.status();v=M("ext.pluginNote",{plugins:S.plugins.length,tools:S.tools.length})}catch(y){w("plugins_reload_failed",{message:y.message})}b.window.showInformationMessage(M("ext.configReloaded",{models:Wn().length,skills:Rt.list().length,rules:Gt.list().length})+g+v)}t.subscriptions.push(b.commands.registerCommand("luban.reloadConfig",k)),t.subscriptions.push(b.commands.registerCommand("luban.newSession",async()=>{await Lr("command"),await ot(),b.window.setStatusBarMessage(M("ext.newSessionNotice"),2e3)})),t.subscriptions.push(b.commands.registerCommand("luban.cursorPlan",ZN)),t.subscriptions.push(b.commands.registerCommand("luban.sessionList",async()=>{mc=!0,await ot()&&Jt()&&(mc=!1,Fe({type:"toggle_session_list"}))})),t.subscriptions.push(b.commands.registerCommand("luban.mode.cycle",async()=>{await ot();let g=Jt();g&&g.postMessage({type:"cycle_mode"})})),t.subscriptions.push(b.commands.registerCommand("luban.findInSession",async()=>{await ot();let g=Jt();g&&g.postMessage({type:"open_find"})}));async function x(g,v,y,S){let _=(Array.isArray(y)&&y.length?y:v?[v]:[]).filter(function(H){return H&&H.scheme==="file"}),C=L(),A=[];for(let H of _){let q=Lx(H.fsPath,C);q&&A.push(q)}if(!A.length)return;let D=await ot(),G=Jt();if(!D||!G){b.window.showWarningMessage(M("ext.addFileNoView")),w("add_"+g+"_to_chat_failed",{n:A.length,reason:"no_webview"});return}S&&await Lr("add_to_new_chat",G),G.postMessage({type:"insert_ref",text:A.join(""),n:A.length,focus:!!S}),w("add_"+g+(S?"_to_new_chat":"_to_chat"),{n:A.length})}t.subscriptions.push(b.commands.registerCommand("luban.addFileToChat",(g,v)=>x("file",g,v))),t.subscriptions.push(b.commands.registerCommand("luban.addFolderToChat",(g,v)=>x("folder",g,v))),t.subscriptions.push(b.commands.registerCommand("luban.addFileToNewChat",(g,v)=>x("file",g,v,!0))),t.subscriptions.push(b.commands.registerCommand("luban.addFolderToNewChat",(g,v)=>x("folder",g,v,!0)));async function T(g){let v=Dx(L());if(!v){b.window.showWarningMessage(M("ext.addSelectionNone")),w("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_selection"});return}let y=await ot(),S=Jt();if(!y||!S){b.window.showWarningMessage(M("ext.addFileNoView")),w("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_webview"});return}g&&await Lr("add_to_new_chat",S),S.postMessage({type:"insert_ref",text:v,n:1,focus:!!g}),w("add_selection"+(g?"_to_new_chat":"_to_chat"))}t.subscriptions.push(b.commands.registerCommand("luban.addSelectionToChat",()=>T(!1))),t.subscriptions.push(b.commands.registerCommand("luban.addSelectionToNewChat",()=>T(!0))),t.subscriptions.push(b.workspace.onDidChangeConfiguration(function(g){if(g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionHistory.max"))try{Ye().setMax(JS())}catch{}g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionMemory")&&w("session_memory_config",Pr()),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.plugins")&&Jx(),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.language")&&Xl("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.net.tlsMaxVersion")&&np("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban")&&xt&&aN()})),t.subscriptions.push(b.workspace.onDidChangeWorkspaceFolders(function(){let g=L();Rt.configure({root:g,rec:w});try{Rt.refresh(g)}catch(v){w("skills_scan_failed",{message:v.message})}if(Yi(g),we.configure({root:g,version:Qn,rec:w}),we.reload().then(function(v){w("mcp_reload_done",{servers:v.servers.length,tools:v.tools.length})},function(v){w("mcp_reload_failed",{message:v.message})}),Ql("workspace_change"),g!==em)try{mv(t)}catch(v){w("session_restore_failed",{message:v.message,reason:"workspace_change"})}}));try{let g=b.workspace.getConfiguration("luban").get("autoOpen");w("auto_open_decided",{autoOpen:g}),g!==!1&&setTimeout(function(){b.commands.executeCommand("workbench.view.extension.luban").then(function(){w("auto_open_view",{ok:!0})},function(v){w("auto_open_view",{ok:!1,message:String(v&&v.message)})})},1200)}catch(g){w("auto_open_view",{ok:!1,message:g.message})}wF(t)}function jc(){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 pF(){let t=jc(),e=P.mkdtempSync(I.join(tt.tmpdir(),"luban-fs-op-")),n=function(s,r){let o=I.join(e,s);P.mkdirSync(I.dirname(o),{recursive:!0}),P.writeFileSync(o,r)};try{n("a.js",`const foo1 = 1;
971
+ `+d)+k,T=M(a?"cross.execPlanAccept":"cross.execPlan");Ot({t:"user",text:T,ctx:x,exec:!0},i);let g=im(i);mt(i),h.seedEmit();let v=lv(i,n,s.token);a&&fj();let y;try{y=await xs(x,{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){hp(g,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:av(n),onProgress:ov,onRound:iv,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))})}finally{a&&pj()}n({type:"done",text:y.text,think:y.reasoning||void 0,kind:"agent",usage:y.usage,rounds:vS(y),summary:M("ext.summary.exec",{n:y.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+xS(y.stop)}),w("webview_execute_plan_done",{toolCalls:y.log.length,iters:y.iters,chars:y.text.length,todos:(h.state.items||[]).length,autoAccept:a})}function hs(t){let e=t&&t.id?String(t.id):"";return function(n){return e?xe.readDataUrl(e,n):""}}function lm(t,e,n){let s=t&&t.id?String(t.id):"";if(!s||!Array.isArray(e)||!e.length)return[];let r=lt(n);if(!(r&&r.model&&r.model.vision===!0))return[];let o=[];for(let i of e.slice(0,xe.MAX_IMAGES)){if(!i||typeof i!="object")continue;let a=i.dataUrl?xe.saveImage(s,i.dataUrl):xe.validateEntry(i);a&&o.push(a)}return o}async function XN(t,e){let n=e.emit,s=e.cts,r=e.source,o=e.t0,i=e.sess,a=jx(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=lm(i,t.images,t.modelKey),d=Array.isArray(t.images)?t.images.filter(Boolean).length:0;u.length?w("ask_images",{source:r,n:u.length,bytes:u.reduce(function(S,_){return S+_.bytes},0)}):d&&(n({type:"img_blocked",n:d}),w("ask_images_blocked",{source:r,model:t.modelKey,n:d})),Ec(t.modelKey,t.mode||"agent",i),rv(c,i,t.modelKey,t.mode||"agent");let f=VS(i),p=ms(i&&i.items||[],t.modelKey,{resolveImage:hs(i),spillStore:f});w("session_memory",{source:r,mode:t.mode||"agent",turns:p.turns,chars:p.chars,dropped:p.dropped,enabled:p.enabled,spilledTurns:p.spilledTurns||0}),Ot({t:"user",text:c,web:l,uid:t.uid?String(t.uid):void 0,images:u.length?u:void 0},i);let m=im(i);if(mt(i),t.mode==="chat"){let S=sp(lt(t.modelKey)),_=Nr(c,L(),{window:S});_.refs.length&&n({type:"references",refs:_.refs});let C=Cp(_.refs,L(),void 0,{sessionId:i&&i.id}),A=null;l&&(n({type:"searching",query:c.slice(0,128)}),A=await Nx(c,lt(t.modelKey),{signal:s.token,onSearch:function(N){n({type:"sources",items:Ak(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"}),w("webview_chat_web",{source:r,query:A.query,results:A.results.length}));let D=ys.buildUserTurn({rule:l?Hj:"",spillBlock:p.spillDigest||"",webBlock:A?A.block:"",autoBlock:C,refText:_.text});hp(m,D,i);let G=u.map(function(N){return xe.readDataUrl(i.id,N)}),H=[{role:"system",content:Kj}].concat(p.messages,[{role:"user",content:xe.toContent(D,G)}]),q=await jo(H,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}),fe=wa([qp(q,H,Me.DEFAULTS.ratio)],sp(q.target),q.target.model.id);n({type:"usage_live",usage:fe}),n({type:"done",text:q.content,think:q.reasoning||void 0,summary:M("ext.summary.chat",{model:q.target.model.id}),usage:fe}),w("webview_chat_done",{source:r,chars:q.content.length,model:q.target.key,refs:_.refs.length,usage:fe});return}let h=t.mode==="plan",k=h?null:uv(i,n,[]),x=lv(i,n,s.token),T=!1;if(!h&&(t.autoKeep===!0||t.autoKeep===void 0&&$S())){let _=tm();_.ok?(T=!0,w("review_auto_keep",{source:r,session:i&&i.id})):(w("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 xs(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:k?k.state:void 0,onTodos:k?k.onTodos:void 0,askWait:x,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:Ak(S.results),query:S.query})},images:u.map(function(S){return xe.readDataUrl(i.id,S)}),onUserTurn:function(S){hp(m,S,i)},onUsage:S=>n({type:"usage_live",usage:S}),onSubProgress:av(n),onProgress:ov,onRound:iv,onRoundEnd:S=>n(Object.assign({type:"round"},S)),onTool:S=>n(Object.assign({type:"tool"},S))}),v="",y=[];if(h&&(v=nv(g.text,{prompt:t.prompt,workspace:L(),modelKey:t.modelKey,session:i?i.id:""}),y=Xt.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&&y.length?y:void 0,rounds:vS(g),summary:M(h?"ext.summary.plan":"ext.summary.done",{n:g.log.length,s:((Date.now()-o)/1e3).toFixed(1)})+xS(g.stop)}),w("webview_"+(h?"plan":"agent")+"_done",{source:r,toolCalls:g.log.length,iters:g.iters,chars:g.text.length,usage:g.usage,todos:h?y.length:void 0}),h&&(i&&i.id&&ka.set(i.id,{text:g.text,file:v}),w("plan_ready",{chars:g.text.length,tools:g.log.map(function(S){return S.name}),file:v,todos:y.length}),v))try{await sv(v)}catch(S){w("plan_file_open_failed",{file:v,message:S.message})}}async function ot(){if(Se||de)return!0;try{await b.commands.executeCommand("workbench.view.extension.luban")}catch{}return await new Promise(function(t){setTimeout(t,700)}),!!ht}async function Lr(t,e){let n=Ye().create(L());ue.set(n.id,n),ss.set(n.id,++or),Ce=n.id;let s=e||Jt()||ht;return s&&St.set(s,n.id),me.indexOf(n.id)<0&&me.push(n.id),j=null,Io(n,s),Fe(fn()),w("session_new",{reason:t||"",id:n.id,tabs:me.length,review:ie.size}),n}function $f(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 dv(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 kc(t,e,n,s){if(!(t&&t.items||[]).length)return{ok:!1,error:M("ext.forkEmpty")};let o=Un.forkSession(t,{at:e??null,title:Ac(t),suffix:M("ext.forkSuffix")});ue.set(o.id,o),ss.set(o.id,++or),Ce=o.id;let i=n||Jt()||ht;i&&St.set(i,o.id),me.indexOf(o.id)<0&&me.push(o.id),j=null;try{let a=xe.copySession(t.id,o.id);(a.copied||a.failed)&&w("session_fork_attachments",{from:t.id,to:o.id,copied:a.copied,failed:a.failed})}catch(a){w("session_fork_attachments_failed",{from:t.id,to:o.id,message:a.message})}try{Ye().save(o)}catch(a){w("session_save_failed",{message:a.message,id:o.id})}return Io(o,i),Fe(fn()),w("session_fork",{from:t.id,id:o.id,at:e??-1,items:o.items.length,source:s||"",tabs:me.length}),{ok:!0,id:o.id,from:t.id,items:o.items.length,at:e??-1}}async function VN(t,e,n,s){let r=String(t||""),o=No(r);if(!o)try{o=Ye().load(r)}catch{o=null}if(!o){let c=M("ext.noSuchSession",{id:r});try{b.window.showErrorMessage(c)}catch{}return w("session_fork_failed",{id:r,reason:"missing"}),{ok:!1,error:c}}if(Qe.has(o.id)){let c=M("ext.forkBusy");try{b.window.showWarningMessage(c)}catch{}return w("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{b.window.showWarningMessage(c)}catch{}return w("session_fork_failed",{id:o.id,reason:"empty"}),{ok:!1,error:c}}if(s)return kc(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 Un.forkPoints(i))a.push({label:oa(c.text),description:M("ext.forkFromDesc",{n:c.rest}),at:c.index});let l=null;try{l=await b.window.showQuickPick(a,{title:M("ext.forkPickTitle"),placeHolder:M("ext.forkPickPlaceholder"),matchOnDescription:!0,ignoreFocusOut:!0})}catch(c){return w("session_fork_failed",{id:o.id,reason:"pick_error",message:c.message}),{ok:!1,error:c.message}}return l?kc(o,l.at,e,n):(w("session_fork_cancel",{id:o.id}),{ok:!1,canceled:!0})}function YN(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 ZN(){let t=nr.listPlans({home:tt.homedir(),root:L()});if(!t.length){b.window.showInformationMessage(M("ext.cursorPlanNone",{dir:nr.homePlanDir(tt.homedir())}));return}let e=t.map(function(s){return{label:s.name||s.base,description:YN(s.mtimeMs)+" \xB7 "+Ux(s.size),detail:s.overview?oa(s.overview):s.file,file:s.file}}),n=await b.window.showQuickPick(e,{placeHolder:M("ext.cursorPlanPick"),matchOnDescription:!0,matchOnDetail:!0,ignoreFocusOut:!0});n&&await fv(n.file)}async function fv(t){let e=nr.readPlan(t);if(!e.ok){let i=e.code==="too_big"?M("ext.cursorPlanBig",{n:Math.round(nr.MAX_BYTES/1024)}):M("ext.cursorPlanReadFail",{msg:e.error});return b.window.showErrorMessage(i),w("cursor_plan_read_failed",{file:t,code:e.code||"",error:e.error||""}),{ok:!1,error:i}}if(!String(e.body||"").trim())return b.window.showErrorMessage(M("ext.noPlan")),w("cursor_plan_read_failed",{file:t,code:"empty"}),{ok:!1,error:M("ext.noPlan")};await ot();let n=await eF(6e3);if(n&&Se&&n===Se.webview)try{Se.reveal()}catch{}else if(n&&de&&n===de.webview&&de.visible!==!0)try{await b.commands.executeCommand("workbench.view.extension.luban")}catch{}if(!await tF(n,1e4))return b.window.showErrorMessage(M("ext.cursorPlanNoPanel")),w("cursor_plan_no_panel",{webview:!!n}),{ok:!1,error:M("ext.cursorPlanNoPanel")};let r=Dr(n);(!r||(r.items||[]).length||wn(r).length||Qe.has(r.id))&&(r=await Lr("cursor_plan",n));let o=Xt.normalize(e.todos||[]);return Ot({t:"plan",text:e.body,planFile:t,todos:o.length?o:void 0},r),mt(r),Io(r,null),Fe(fn()),n.postMessage({type:"execute_plan",plan:e.body,planFile:t,sessionId:r.id}),w("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 Or(t,e){let n=ue.get(String(t||"")),s=!0;if(!n){if(s=!1,n=Ye().load(t),!n)return w("session_open_failed",{id:t}),{ok:!1,error:M("ext.noSuchSession",{id:t})};n=sm(n),ue.set(n.id,n),ss.set(n.id,++or)}Ce=n.id;let r=e||Jt()||ht;return r&&St.set(r,n.id),me.indexOf(n.id)<0&&me.push(n.id),j=null,Io(n,r),Fe(fn()),w("session_open",{id:n.id,items:(n.items||[]).length,queue:(n.queue||[]).length,cached:s,tabs:me.length}),{ok:!0,id:n.id,items:(n.items||[]).length}}async function Gs(t){Ye();let e=String(t||""),n=Ce===e;if(ue.get(e)){bc(e),Qe.delete(e),ss.set(e,++or);let r=gn.get(e);r&&(clearTimeout(r),gn.delete(e));let o=zS(e);ue.delete(e),HS(e,o)}ka.delete(e),ge.remove(e);try{let r=xe.removeSession(e);w("attachments_remove",{id:e,removed:r.removed})}catch(r){w("attachments_remove_failed",{id:e,message:r.message})}ON(e),OP(e);try{await Tc(e,"delete")}catch(r){w("browser_close_failed",{message:r.message})}ec.delete(e),ec.delete(e);try{let r=ye.clearSession(e);r&&r.stopped&&w("async_cmd_stop_all",{sessionId:e,stopped:r.stopped,reason:"delete"})}catch{}return me=me.filter(function(r){return r!==e}),Fe({type:"session_deleted",id:e}),Fe(fn()),w("session_delete",{id:e,wasCurrent:n,tabs:me.length}),{ok:!0,current:Ce||"",sessions:ge.list()}}var pv="luban.openTabs";function cm(t){let e=require("crypto").createHash("sha1").update(String(t||"")).digest("hex").slice(0,16);return pv+"."+e}function la(t){try{if(!t||!t.globalState)return;let e=L(),n=t.globalState.update(cm(e),{root:e,ids:me.slice(),active:Ce||"",at:new Date().toISOString()});n&&n.catch&&n.catch(function(){})}catch{}}function QN(t,e){let n=t&&t.globalState;if(!n)return null;let s=null;try{s=n.get(cm(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(pv);return r&&Array.isArray(r.ids)?r:null}catch{return null}}function um(t){Ye();let e=L(),n=QN(t,e),s=n&&Array.isArray(n.ids)?n.ids.map(String):[],r=[],o=function(a){!a||r.indexOf(a.id)>=0||To(a)&&(ue.has(a.id)||(ue.set(a.id,sm(a)),ss.set(a.id,++or)),r.push(a.id))};for(let a of s){if(!/^[A-Za-z0-9_-]+$/.test(a))continue;let l=ue.get(a);if(!l)try{l=ge.load(a)}catch{l=null}l&&o(l)}if(!r.length){let a=[];try{a=ge.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=ge.load(l.id)}catch{c=null}o(c)}}if(!r.length){let a=ge.create(e);ue.set(a.id,a),ss.set(a.id,++or),r.push(a.id),w("session_created",{id:a.id})}me=r,em=e;let i=n&&n.active?String(n.active):"";Ce=r.indexOf(i)>=0?i:r[r.length-1],w("session_restored",{root:e,tabs:r.length,active:Ce,items:((ue.get(Ce)||{}).items||[]).length})}function mv(t){try{um(t)}catch(n){w("session_restore_failed",{message:n.message,reason:"workspace_change"})}St.clear(),Fe({type:"tabs_reset"});let e=[];for(let n of me){let s=ue.get(n);if(!s||!To(s))continue;e.push(n);let r=rm(s);r.boot=!0,Fe(r)}Fe({type:"open_tabs",ids:e,active:Ce}),Fe(fn()),la(t),w("tabs_workspace_switch",{root:L(),tabs:e.length,active:Ce})}async function Te(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 Se=null,de=null,j=null,ht=null,gp=new WeakSet,ca=new WeakMap,Fo=new WeakMap;function Jt(){let t=de&&de.webview,e=Se&&Se.webview;return t&&de.visible===!0?t:e||(ht&&(ht===t||ht===e)?ht:t||null)}function Ne(t){return t==="panel"?Se?Se.webview:null:t==="view"?de?de.webview:null:Jt()||ht}async function eF(t){let e=Date.now()+(Number(t)>0?Number(t):6e3);for(;;){let n=Jt();if(n)return n;if(Date.now()>=e)return null;await new Promise(function(s){setTimeout(s,100)})}}function tF(t,e){let n=t;return n?gp.has(n)?Promise.resolve(!0):new Promise(function(s){let r=Date.now()+(Number(e)>0?Number(e):8e3),o=setInterval(function(){if(gp.has(n)){clearInterval(o),s(!0);return}Date.now()>=r&&(clearInterval(o),s(!1))},100)}):Promise.resolve(!1)}var ka=new Map;function hv(t,e){let n=Rr(e),s=t.asWebviewUri(b.Uri.joinPath(n,"panel.css")),r=t.asWebviewUri(b.Uri.joinPath(n,"panel.js")),o=t.asWebviewUri(b.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(b.Uri.joinPath(n,"avatar.js")),a=t.asWebviewUri(b.Uri.joinPath(n,"i18n.js")),l=P.readFileSync(b.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,jp()).replace(/{{jsUri}}/g,String(r)).replace(/{{mdUri}}/g,String(o)).replace(/{{avatarUri}}/g,String(i)).replace(/{{i18nUri}}/g,String(a)).replace(/{{lang}}/g,Vt||Sa()).replace(/{{nonce}}/g,c)}var nF=2*1024*1024,sF={".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 rF(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 ua=null,Ao=null,da=!1;function oF(t,e){let n=Rr(e),s=t.asWebviewUri(b.Uri.joinPath(n,"preview.css")),r=t.asWebviewUri(b.Uri.joinPath(n,"preview.js")),o=t.asWebviewUri(b.Uri.joinPath(n,"markdown.js")),i=t.asWebviewUri(b.Uri.joinPath(n,"code-highlight.js")),a=t.asWebviewUri(b.Uri.joinPath(n,"i18n.js")),l=P.readFileSync(b.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,Vt||Sa()).replace(/{{nonce}}/g,c)}function xc(){return{type:"models",current:Lo(),models:Wn().map(t=>({key:t.key,label:t.provider.name+" \xB7 "+t.model.name,vision:t.model.vision===!0,thinking:Cj(t.model)}))}}function Fe(t){let e=[Se&&Se.webview,de&&de.webview];for(let n of e)if(n)try{n.postMessage(t)}catch(s){w("broadcast_failed",{message:s.message})}}function gv(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 Vs=null,dx="";function iF(){Vs||(Vs=setTimeout(function(){Vs=null;let t;try{t=gv(mn.get())}catch{return}let e=t.state+"|"+t.mood+"|"+t.text;e!==dx&&(dx=e,Fe({type:"status",status:t}))},200),Vs.unref&&Vs.unref())}function Io(t,e,n){let s=[Se&&Se.webview,de&&de.webview];for(let r of s){if(!r)continue;let o=Object.assign(rm(t),n||{},{yank:r===e});try{r.postMessage(o)}catch(i){w("broadcast_failed",{message:i.message})}}}async function yv(t,e){let n=String(t||"");if(!/^https?:\/\//i.test(n))return!1;try{return await b.env.openExternal(b.Uri.parse(n)),w("webview_open_link",{source:e,url:n.slice(0,200)}),!0}catch(s){return w("webview_open_link_failed",{url:n.slice(0,200),message:s.message}),!1}}function dm(t,e,n){return ht=t,t.onDidReceiveMessage(async r=>{if(!(!r||!r.type)){if(ht=t,gp.add(t),r.type==="chat_focus"){ca.set(t,r.focused===!0);return}if(r.type==="sidebar_maximized"){let o=Fo.get(t)===!0;Fo.set(t,r.maximized===!0),w("sidebar_maximized_report",{maximized:r.maximized===!0,was:o,widths:r.widths||null}),o&&r.maximized!==!0&&de&&de.webview===t&&nS();return}if(r.type==="ready"){t.postMessage({type:"lang",lang:Vt}),t.postMessage(xc()),t.postMessage(ma());try{t.postMessage({type:"status",status:gv(mn.get())})}catch(a){w("status_push_failed",{message:a.message})}let o=[];for(let a of me){let l=ue.get(a);if(!l||!To(l))continue;o.push(a);let c=rm(l);c.boot=!0,t.postMessage(c)}t.postMessage({type:"open_tabs",ids:o,active:St.get(t)||Ce}),t.postMessage(fn());let i=Dr(t);i&&t.postMessage(ZS(i)),mc&&(mc=!1,t.postMessage({type:"toggle_session_list"})),w("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),w("webview_lang_applied",{source:n,lang:r.lang}),rP(r.lang);return}if(r.type==="new_session"){await Lr(r.from||n,t);return}if(r.type==="open_session"){let o=await Or(String(r.id||""),t);if(!o.ok)try{t.postMessage({type:"error",message:o.error})}catch{}return}if(r.type==="list_sessions"){t.postMessage(fn());return}if(r.type==="search_sessions"){t.postMessage(QS(r.q,r.scope,r.root,r.seq));return}if(r.type==="delete_session"){await Gs(String(r.id||""));return}if(r.type==="fork_session"){await VN(String(r.id||""),t,n,!!r.whole);return}if(r.type==="fork_message"){let o=String(r.sessionId||""),i=o?No(o):Dr(t);if(!i&&o)try{i=Ye().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{}w("session_fork_failed",{id:a,reason:"fork_message",message:d})};if(!i){l(M("ext.noSuchSession",{id:a}));return}if(Qe.has(i.id)){l(M("ext.forkBusy"));return}let c=$f(i.items||[],r.uid?String(r.uid):"",Number(r.ordinal));if(c<0){l(M("ext.forkMissing"));return}let u=kc(i,c,t,"fork_message");u.ok||l(u.error||M("ext.forkEmpty"));return}if(r.type==="save_session_meta"){let o=No(r.id);o&&(Ec(r.modelKey,r.mode,o),om(o));return}if(r.type==="tab_active"){let o=String(r.id||"");ue.has(o)&&(Ce=o,St.set(t,o),me.indexOf(o)<0&&me.push(o),la(e));return}if(r.type==="tab_close"){let o=String(r.id||""),i=ue.get(o),a=zS(o);if(i){cx(i),bc(o),Qe.delete(o),mt(i);let l=gn.get(o);l&&(clearTimeout(l),gn.delete(o)),ss.set(o,++or),ue.delete(o),HS(o,a)}ka.delete(o),me=me.filter(function(l){return l!==o}),la(e),Fe({type:"tab_removed",id:o}),Fe(fn()),w("tab_closed",{id:o,tabs:me.length});return}if(r.type==="tabs_changed"){let o=(Array.isArray(r.ids)?r.ids.map(String):[]).filter(function(c){return ue.has(c)&&To(ue.get(c))}),i=me.filter(function(c){return o.indexOf(c)<0&&ue.has(c)&&To(ue.get(c))});me=o.concat(i);let a=String(r.active||""),l=a&&ue.has(a)?a:me.indexOf(Ce)<0?me.length?me[me.length-1]:"":Ce;Ce=l,l?St.set(t,l):St.delete(t),la(e);return}if(r.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:n},r),w("webview_ack",Object.assign({source:n},r));return}if(r.type==="avatar_shown"){w("avatar_shown",{source:n,state:r.state,mood:r.mood,n:r.n});return}if(r.type==="setModel"){Bt.defaultModel=r.modelKey,w("webview_set_model",{modelKey:r.modelKey});return}if(r.type==="listFiles"){try{let o=await Ap();t.postMessage({type:"fileList",files:o.files,dirs:o.dirs})}catch(o){t.postMessage({type:"fileList",files:[],dirs:[],error:o.message}),w("webview_list_files_failed",{message:o.message})}return}if(r.type==="getSelection"){t.postMessage(Object.assign({type:"selectionInfo"},Rx()));return}if(r.type==="openLink"){await yv(r.url,n);return}if(r.type==="open_settings"){Qp(e),w("webview_open_settings",{source:n});return}if(r.type==="stop"){let o=An(r,t);if(!o){w("stale_session_hit",{type:"stop",id:String(r.sessionId||"")});return}cx(o)&&(mt(o),ts(o),w("queue_paused",{id:o.id,size:wn(o).length})),bc(o.id);return}if(r.type==="answer_question"){let o=An(r,t),i=o?o.id:String(r.sessionId||""),a=cv(r.id,r.answers,i);if(a.ok)w("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{}w("ask_answer_failed",{id:r.id,error:a.error})}return}if(r.type==="review_action"){let o;try{o=await ha(r.action,r.path,r.hunk||"",r.sessionId)}catch(i){o={ok:!1,error:i.message}}try{t.postMessage(ma())}catch{}w("review_action",{source:n,action:r.action,path:r.path,hunk:r.hunk||"",ok:!!o.ok,error:o.error,files:ie.size,hunks:Yn()});return}if(r.type==="img_preview"){let o=String(r.sessionId||""),i=String(r.file||""),a=xe.readPreview(o,i);try{t.postMessage({type:"img_preview",ok:!!a.ok,sessionId:o,file:i,dataUrl:a.dataUrl||"",mime:a.mime||""})}catch{}w("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 b.env.clipboard.writeText(o)}catch{i=!1}try{t.postMessage({type:"copy_done",ok:i,n:o.length})}catch{}w("copy_text",{source:n,n:o.length,ok:i});return}if(r.type==="open_plan_file"){try{await sv(r.path),w("plan_file_opened",{source:n,path:r.path,ok:!0})}catch(o){w("plan_file_opened",{source:n,path:r.path,ok:!1,error:o.message})}return}if(r.type==="execute_plan"){let o=An(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(Qe.has(o.id)){w("webview_busy",{prompt:"execute_plan",session:o.id});try{t.postMessage({type:"error",sid:o.id,message:M("ext.sessionBusy")})}catch{}return}await ea("execute_plan",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="auto_keep_check"){let o=tm();w("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=An(r,t);if(!o){try{t.postMessage({type:"error",sid:String(r.sessionId||""),message:M("ext.noSuchSession",{id:String(r.sessionId||"")})})}catch{}return}if(Qe.has(o.id)){lx(o,Object.assign({},r,{echoed:!0}));return}await ea("ask",Object.assign({},r,{sessionId:o.id}),t,n);return}if(r.type==="edit_message"){let o=An(r,t),i=!!r.resend,a=function(k,x){try{t.postMessage({type:"edit_error",sid:o?o.id:String(r.sessionId||""),message:M(k,x)})}catch{}};if(!o){a("ext.noSuchSession",{id:String(r.sessionId||"")});return}if(Qe.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=$f(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]=Un.clampItem(m),c.length=f+1),f===0&&(o.title=""),mt(o),Io(o,null,{keepScroll:!0}),Fe(fn()),Fe({type:"edit_done",sid:o.id,removed:h,resend:i}),w("session_edit",{source:n,id:o.id,removed:h,uid:u,ordinal:d,resend:i}),i&&(Fe({type:"queue_start",id:o.id,item:{text:l,web:!!p.web,uid:u,images:p.images||[],mode:r.mode,modelKey:r.modelKey}}),await ea("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=An(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(Qe.has(o.id)){i("ext.deleteBusy");return}let a=o.items||[],l=r.uid?String(r.uid):"",c=Number(r.ordinal),u=$f(a,l,c);if(u<0){i("ext.deleteMissing");return}let d=dv(a,u);if(!d){i("ext.deleteMissing");return}a.splice(d.start,d.removed),d.start===0&&(o.title=""),mt(o),Io(o,null,{keepScroll:!0}),Fe(fn()),Fe({type:"turn_deleted",sid:o.id,removed:d.removed}),w("session_turn_deleted",{source:n,id:o.id,removed:d.removed,uid:l,ordinal:c});return}if(r.type==="queue_add"){let o=An(r,t);if(!o){w("stale_session_hit",{type:"queue_add",id:String(r.sessionId||"")});return}if(!Qe.has(o.id)){let a=Oc({id:nm(),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:lm(o,r.images,r.modelKey)});if(!a)return;Fe({type:"queue_start",id:o.id,item:a}),ts(o),await ea("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=lx(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=An(r,t);if(!o){w("stale_session_hit",{type:"queue_remove",id:String(r.sessionId||"")});return}PN(o,r.id);return}if(r.type==="queue_clear"){let o=An(r,t);if(!o){w("stale_session_hit",{type:"queue_clear",id:String(r.sessionId||"")});return}jN(o);return}if(r.type==="queue_resume"){let o=An(r,t);if(!o)return;o.queuePaused=!1,mt(o),ts(o),w("queue_resume",{id:o.id,size:wn(o).length}),Qe.has(o.id)||am(o,t,n);return}if(r.type==="queue_run_now"){let o=An(r,t);if(!o){w("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=FN(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 yp(t){if(Se)return Se.reveal(),Se;let e=b.window.createWebviewPanel("luban","Luban",b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[Rr(t.extensionUri)]});e.webview.html=hv(e.webview,t.extensionUri),Se=e;let n=dm(e.webview,t,"panel");return e.onDidDispose(()=>{Se=null,ht===e.webview&&(ht=null),St.delete(e.webview),n.dispose(),w("panel_disposed",{ok:!0})}),w("panel_opened",{ok:!0}),e}function aF(t){let e={resolveWebviewView(n){de=n,n.webview.options={enableScripts:!0,localResourceRoots:[Rr(t.extensionUri)]},n.webview.html=hv(n.webview,t.extensionUri),dm(n.webview,t,"view"),n.onDidDispose(()=>{ht===n.webview&&(ht=null),St.delete(n.webview),de=null}),w("view_resolved",{ok:!0})}};try{let n=b.window.registerWebviewViewProvider("luban.chatView",e,{webviewOptions:{retainContextWhenHidden:!0}});return w("view_provider_registered",{ok:!0}),n}catch(n){return w("view_provider_failed",{message:n.message}),{dispose:function(){}}}}var gs={busy:!1,stamps:[],enabled:!1,last:""};function Pc(){let t={enabled:!1,maxPerMinute:30,debounceMs:250};try{let e=b.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 ta(t){return new Promise(function(e){setTimeout(e,Math.max(0,Number(t)||0))})}function fx(t){let e=Date.now();return gs.stamps=gs.stamps.filter(function(n){return e-n<6e4}),gs.stamps.length<t}async function lF(t,e,n,s){let r=Pc();if(!r.enabled)return[];let o=function(i){return w("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=lt(Lo());if(!a||!Yl(a.provider))return o("provider-unsupported");if(gs.busy)return o("busy");if(!fx(r.maxPerMinute))return o("rate-limit");if(await ta(r.debounceMs),s&&s.isCancellationRequested)return o("cancelled");if(!fx(r.maxPerMinute))return o("rate-limit");gs.busy=!0,gs.stamps.push(Date.now());let l=Date.now(),c;try{c=await Cx({modelKey:a.key,path:qn(t.uri.fsPath,L()),text:i,offset:t.offsetAt(e),signal:s})}catch(u){return w("inline_completion",{ms:Date.now()-l,chars:0,error:String(u&&u.message||u).slice(0,160)}),[]}finally{gs.busy=!1}return gs.last=c.text||"",w("inline_completion",{ms:Date.now()-l,chars:(c.text||"").length,model:c.model,promptChars:c.promptChars,suffixChars:c.suffixChars,timeout:!1}),c.text?typeof b.InlineCompletionItem!="function"?[]:[new b.InlineCompletionItem(c.text,new b.Range(e,e))]:[]}catch(i){return gs.busy=!1,w("inline_completion_failed",{message:String(i&&i.message||i).slice(0,160)}),[]}}function cF(t){if(!b.languages||typeof b.languages.registerInlineCompletionItemProvider!="function"){w("inline_provider_unsupported",{ok:!1});return}try{let e={provideInlineCompletionItems:lF};t.subscriptions.push(b.languages.registerInlineCompletionItemProvider({pattern:"**"},e)),w("inline_provider_registered",{enabled:Pc().enabled})}catch(e){w("inline_provider_failed",{message:String(e&&e.message||e).slice(0,160)})}}async function uF(){let e=!Pc().enabled;try{await b.workspace.getConfiguration("luban").update("inlineCompletion.enabled",e,b.ConfigurationTarget.Global),w("inline_toggle",{enabled:e});try{b.window.showInformationMessage(M(e?"ext.inlineOn":"ext.inlineOff"))}catch{}}catch(n){w("inline_toggle_failed",{message:String(n&&n.message||n).slice(0,160)})}return e}var dF="luban";function wv(t){return gx.register({vscode:b,context:t,vendor:dF,rec:w,version:es,allModels:Wn,resolveModel:lt,streamChat:jo})}function fF(t){Xl("activate"),np("activate"),Sc(),w("activate",{at:new Date().toISOString(),root:L(),configSource:Oo,models:Wn().length});try{mn.autoServe()}catch(g){w("status_serve_failed",{message:g.message})}try{mn.update({source:"extension",workspace:L()||"",text:"\u7A7A\u95F2"})}catch{}Rt.configure({root:L(),rec:w});try{Rt.refresh(L())}catch(g){w("skills_scan_failed",{message:g.message})}Ql("activate"),Yi(L()),we.configure({root:L(),version:es,rec:w}),we.start().then(function(g){w("mcp_start_done",{servers:g.servers.length,tools:g.tools.length})},function(g){w("mcp_start_failed",{message:g.message})}),Jp(t).then(function(g){w("secrets_ready",{keys:g}),$p()}),sa(b.window.activeTextEditor),t.subscriptions.push(b.window.onDidChangeActiveTextEditor(sa)),t.subscriptions.push(b.window.onDidChangeTextEditorSelection(function(g){sa(g.textEditor)}));try{um(t)}catch(g){w("session_restore_failed",{message:g.message})}try{let g=new Set(me.slice());for(let y of ue.values())g.add(y.id);for(let y of ge.list())g.add(y.id);let v=xe.sweepOrphans(g);v.removed&&w("attachments_sweep",v)}catch(g){w("attachments_sweep_failed",{message:g.message})}t.subscriptions.push(b.commands.registerCommand("luban.openPanel",()=>yp(t))),wv(t);try{let g=YE.mount({vscode:b,status:mn,tr:M,rec:w});g&&t.subscriptions.push(g)}catch(g){w("statusbar_mount_failed",{message:g.message})}try{let g=mn.subscribe(function(){iF()});t.subscriptions.push({dispose:function(){try{g()}catch{}}})}catch(g){w("status_push_failed",{message:g.message})}t.subscriptions.push(b.commands.registerCommand("luban.providerSettings",()=>Qp(t))),t.subscriptions.push(b.commands.registerCommand("luban.plugins",()=>pc(t,"plugins"))),t.subscriptions.push(b.commands.registerCommand("luban.market",()=>pc(t,"market"))),t.subscriptions.push(b.commands.registerCommand("luban.dashboard",()=>KS(t))),t.subscriptions.push(b.commands.registerCommand("luban.rules.open",async()=>{try{let g=L()||tt.homedir(),v=I.join(g,".luban","rules"),y=I.join(v,"default.md"),S=!1;P.existsSync(y)||(P.mkdirSync(v,{recursive:!0}),P.writeFileSync(y,XP,"utf8"),S=!0,Yi(g));let _=await b.workspace.openTextDocument(b.Uri.file(y));await b.window.showTextDocument(_,{preview:!1}),b.window.setStatusBarMessage(M(S?"ext.rulesCreated":"ext.rulesOpened",{file:y}),4e3)}catch(g){w("rules_open_failed",{message:g.message}),b.window.showErrorMessage(M("ext.rulesFailed",{msg:g.message}))}})),t.subscriptions.push(b.commands.registerCommand("luban.openInBrowser",async g=>{let v=Array.isArray(g)?g[0]:g;await yv(v&&typeof v=="object"?v.linkUrl:"","context")})),t.subscriptions.push(b.commands.registerCommand("luban.browserCheck",async()=>{let g=sr(),v=pt.findChrome(g.chromePath);if(!v.path){b.window.showErrorMessage(M("ext.browserNotFound",{paths:v.tried.slice(0,4).map(function(y){return" "+y}).join(`
972
+ `)}));return}await b.window.withProgress({location:b.ProgressLocation.Notification,title:M("ext.browserCheckRunning"),cancellable:!1},async function(){let y=null;try{y=await pt.launch({exe:g.chromePath,headless:g.headless,width:g.width,height:g.height}),await y.navigate("data:text/html,<title>Luban</title><h1>Luban browser check</h1>");let S=await y.snapshot(1200),_=await y.screenshot({});w("browser_check",{ok:!0,exe:y.exe,snapChars:S.length,shotChars:_.length}),b.window.showInformationMessage(M("ext.browserCheckOk",{exe:v.path,chars:String(Math.round(_.length/1024))}))}catch(S){w("browser_check",{ok:!1,message:String(S&&S.message||S)}),b.window.showErrorMessage(M("ext.browserCheckFailed",{message:String(S&&S.message||S)}))}finally{if(y)try{await y.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 Xx(n),y=await v.screenshot({});e===g&&g.webview.postMessage({type:"shot",dataUrl:y,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(b.commands.registerCommand("luban.browserPreview",async()=>{let g=sr();if(!g.enabled){b.window.showWarningMessage(M("ext.browserPreviewDisabled"));return}if(!g.preview){b.window.showWarningMessage(M("ext.browserPreviewOff"));return}let v=String(Ce||"_default");if(e){if(n===v){e.reveal();return}e.dispose()}n=v;let y=b.window.createWebviewPanel("luban.browserPreview","Luban \u6D4F\u89C8\u5668\u9884\u89C8",b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0});e=y,y.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>',w("browser_preview_open",{sessionId:v}),o(y),y.onDidDispose(function(){e===y&&(e=null,n=null),r(),w("browser_preview_close",{sessionId:v})}),y.onDidChangeViewState(function(S){S.webviewPanel.visible?o(y):r()})})),Qf=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=b.workspace.workspaceFolders||[];for(let y of v)y&&y.uri&&y.uri.fsPath&&g.push(y.uri.fsPath)}catch{}return g}function f(g,v,y){let S=vk.classifyImage(v,y,d());if(S.kind==="workspace")try{return String(g.asWebviewUri(b.Uri.file(S.abs)))}catch{return null}if(S.kind==="inline")try{let _=P.statSync(S.abs);if(!_.isFile()||_.size>nF)return null;let C=P.readFileSync(S.abs),A=I.extname(S.abs).toLowerCase();return"data:"+(sF[A]||"application/octet-stream")+";base64,"+C.toString("base64")}catch{return null}return null}function p(g,v,y){let S={},_=vk.extractImageUrls(v);for(let C of _)S[C]=f(g,C,y);return S}function m(g,v){if(!g||g!==i)return;let y="";try{let C=b.workspace.textDocuments.find(function(A){return A.uri.toString()===v.toString()});y=C?C.getText():""}catch{y=""}let S={};try{let C=I.dirname(v.fsPath);S=p(g.webview,y,C)}catch{S={}}let _=v.fsPath||v.toString();try{g.webview.postMessage({type:"doc",content:y,imageMap:S,filePath:_,lang:Vt||Sa()})}catch{}}function h(g,v){if(i)return a=v,Ao=v,i.title=M("ext.mdPreviewTitle"),i.reveal(b.ViewColumn.Beside,!0),m(i,v),i;let y=b.window.createWebviewPanel("luban.markdownPreview",M("ext.mdPreviewTitle"),b.ViewColumn.Beside,{enableScripts:!0,retainContextWhenHidden:!0,localResourceRoots:[Rr(g.extensionUri)].concat(d().map(function(S){return b.Uri.file(S)}))});return i=y,a=v,u=!1,Ao=v,da=!1,ua=y.webview,y.webview.html=oF(y.webview,g.extensionUri),w("md_preview_open",{file:v.fsPath||v.toString()}),y.webview.onDidReceiveMessage(function(S){if(!(!S||!S.type)){if(S.type==="ack_rendered"){j=Object.assign({at:Date.now(),source:"mdpreview"},S),w("md_preview_ack",{kind:S.kind,n:S.n,total:S.total,value:S.value||""});return}if(S.type==="ready"){u=!0,da=!0,m(y,a);return}if(S.type==="openLink"){let _=String(S.url||"");if(/^https?:\/\//i.test(_))try{b.env.openExternal(b.Uri.parse(_))}catch{}return}}}),c.push(b.workspace.onDidChangeTextDocument(function(S){!i||!a||S.document.uri.toString()===a.toString()&&m(i,a)})),c.push(b.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))})),y.onDidDispose(function(){l&&(clearTimeout(l),l=null);for(let S of c)try{S.dispose()}catch{}c=[],ua===y.webview&&(ua=null),i===y&&(i=null,a=null,Ao=null,u=!1,da=!1),w("md_preview_close",{})}),y}t.subscriptions.push(b.commands.registerCommand("luban.markdownPreview",async()=>{let g=b.window.activeTextEditor;if(!g||!rF(g.document)){b.window.showWarningMessage(M("ext.mdPreviewNotMarkdown"));return}try{h(t,g.document.uri)}catch(v){b.window.showWarningMessage(M("ext.mdPreviewFailed")+" "+String(v&&v.message||v))}})),cF(t),t.subscriptions.push(b.commands.registerCommand("luban.inlineCompletion.toggle",uF)),t.subscriptions.push(b.commands.registerCommand("luban.focusView",async()=>{try{await b.commands.executeCommand("workbench.view.extension.luban"),w("focus_view",{ok:!0})}catch(g){w("focus_view",{ok:!1,message:g.message})}})),t.subscriptions.push(aF(t)),Tj(t),t.subscriptions.push(b.commands.registerCommand("luban.agent",async()=>{let g=await b.window.showInputBox({prompt:M("ext.agentPrompt")});g&&await b.window.withProgress({location:b.ProgressLocation.Notification,title:"Luban agent"},async v=>{let y=Dr(Jt()),S=ms(y&&y.items||[],"",{resolveImage:hs(y)}),_=await xs(g,{root:L(),history:S.messages,sessionId:y?y.id:"",onProgress:C=>v.report({message:C})});rp({modelKey:Lo(),mode:"agent",source:"command",session:y?y.id:""},_.usage),b.window.showInformationMessage(M("ext.agentDone",{n:_.log.length}))})}));async function k(){await Xp(t);try{Rt.configure({root:L(),rec:w}),Rt.refresh(L())}catch(y){w("skills_scan_failed",{message:y.message})}Yi(L());let g="";try{we.configure({root:L(),version:es,rec:w});let y=await we.reload();g=M("ext.mcpNote",{servers:y.servers.length,tools:y.tools.length})}catch(y){g=M("ext.mcpFail",{msg:y.message}),w("mcp_reload_failed",{message:y.message})}let v="";try{let y=_a();We.configure({root:L(),enabled:y.enabled,maxTools:y.maxTools,rec:w,confirm:$x}),await We.reload();let S=We.status();v=M("ext.pluginNote",{plugins:S.plugins.length,tools:S.tools.length})}catch(y){w("plugins_reload_failed",{message:y.message})}b.window.showInformationMessage(M("ext.configReloaded",{models:Wn().length,skills:Rt.list().length,rules:Gt.list().length})+g+v)}t.subscriptions.push(b.commands.registerCommand("luban.reloadConfig",k)),t.subscriptions.push(b.commands.registerCommand("luban.newSession",async()=>{await Lr("command"),await ot(),b.window.setStatusBarMessage(M("ext.newSessionNotice"),2e3)})),t.subscriptions.push(b.commands.registerCommand("luban.cursorPlan",ZN)),t.subscriptions.push(b.commands.registerCommand("luban.sessionList",async()=>{mc=!0,await ot()&&Jt()&&(mc=!1,Fe({type:"toggle_session_list"}))})),t.subscriptions.push(b.commands.registerCommand("luban.mode.cycle",async()=>{await ot();let g=Jt();g&&g.postMessage({type:"cycle_mode"})})),t.subscriptions.push(b.commands.registerCommand("luban.findInSession",async()=>{await ot();let g=Jt();g&&g.postMessage({type:"open_find"})}));async function x(g,v,y,S){let _=(Array.isArray(y)&&y.length?y:v?[v]:[]).filter(function(H){return H&&H.scheme==="file"}),C=L(),A=[];for(let H of _){let q=Lx(H.fsPath,C);q&&A.push(q)}if(!A.length)return;let D=await ot(),G=Jt();if(!D||!G){b.window.showWarningMessage(M("ext.addFileNoView")),w("add_"+g+"_to_chat_failed",{n:A.length,reason:"no_webview"});return}S&&await Lr("add_to_new_chat",G),G.postMessage({type:"insert_ref",text:A.join(""),n:A.length,focus:!!S}),w("add_"+g+(S?"_to_new_chat":"_to_chat"),{n:A.length})}t.subscriptions.push(b.commands.registerCommand("luban.addFileToChat",(g,v)=>x("file",g,v))),t.subscriptions.push(b.commands.registerCommand("luban.addFolderToChat",(g,v)=>x("folder",g,v))),t.subscriptions.push(b.commands.registerCommand("luban.addFileToNewChat",(g,v)=>x("file",g,v,!0))),t.subscriptions.push(b.commands.registerCommand("luban.addFolderToNewChat",(g,v)=>x("folder",g,v,!0)));async function T(g){let v=Dx(L());if(!v){b.window.showWarningMessage(M("ext.addSelectionNone")),w("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_selection"});return}let y=await ot(),S=Jt();if(!y||!S){b.window.showWarningMessage(M("ext.addFileNoView")),w("add_selection"+(g?"_to_new_chat":"_to_chat")+"_failed",{reason:"no_webview"});return}g&&await Lr("add_to_new_chat",S),S.postMessage({type:"insert_ref",text:v,n:1,focus:!!g}),w("add_selection"+(g?"_to_new_chat":"_to_chat"))}t.subscriptions.push(b.commands.registerCommand("luban.addSelectionToChat",()=>T(!1))),t.subscriptions.push(b.commands.registerCommand("luban.addSelectionToNewChat",()=>T(!0))),t.subscriptions.push(b.workspace.onDidChangeConfiguration(function(g){if(g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionHistory.max"))try{Ye().setMax(JS())}catch{}g&&g.affectsConfiguration&&g.affectsConfiguration("luban.sessionMemory")&&w("session_memory_config",Pr()),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.plugins")&&Jx(),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.language")&&Xl("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban.net.tlsMaxVersion")&&np("config"),g&&g.affectsConfiguration&&g.affectsConfiguration("luban")&&xt&&aN()})),t.subscriptions.push(b.workspace.onDidChangeWorkspaceFolders(function(){let g=L();Rt.configure({root:g,rec:w});try{Rt.refresh(g)}catch(v){w("skills_scan_failed",{message:v.message})}if(Yi(g),we.configure({root:g,version:es,rec:w}),we.reload().then(function(v){w("mcp_reload_done",{servers:v.servers.length,tools:v.tools.length})},function(v){w("mcp_reload_failed",{message:v.message})}),Ql("workspace_change"),g!==em)try{mv(t)}catch(v){w("session_restore_failed",{message:v.message,reason:"workspace_change"})}}));try{let g=b.workspace.getConfiguration("luban").get("autoOpen");w("auto_open_decided",{autoOpen:g}),g!==!1&&setTimeout(function(){b.commands.executeCommand("workbench.view.extension.luban").then(function(){w("auto_open_view",{ok:!0})},function(v){w("auto_open_view",{ok:!1,message:String(v&&v.message)})})},1200)}catch(g){w("auto_open_view",{ok:!1,message:g.message})}wF(t)}function jc(){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 pF(){let t=jc(),e=P.mkdtempSync(I.join(tt.tmpdir(),"luban-fs-op-")),n=function(s,r){let o=I.join(e,s);P.mkdirSync(I.dirname(o),{recursive:!0}),P.writeFileSync(o,r)};try{n("a.js",`const foo1 = 1;
973
973
  const foo2 = 2;
974
974
  `),n("src/b.ts",`export const bar = foo1;
975
975
  `),n("src/deep/c.md",`foo(123)
@@ -991,7 +991,7 @@ const foo2 = 2;
991
991
  +new
992
992
  *** 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
993
993
  `});t.ok("write_blocked_cache",v.indexOf("\u8DF3\u8FC7")>=0&&v.indexOf("npm-cache")>=0,v);let y=await r("write_file",{path:".m2/repository/org/apache/x/1/pom.xml",content:`x
994
- `});t.ok("write_blocked_m2",y.indexOf("\u8DF3\u8FC7")>=0&&y.indexOf(".m2")>=0,y),t.ok("blocked_no_write",!P.existsSync(I.join(e,"node_modules/dep/patch.js"))&&!P.existsSync(I.join(e,"node_modules/dep/new.js"))&&!P.existsSync(I.join(e,"npm-cache/_npx/81dd2fe1/patched.js"))&&!P.existsSync(I.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(D){return Ys.pathGuard(D)};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 Rn("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=Ve("node_modules/dep/index.js",e,!0);t.ok("allowSkipped_bypass",A===I.join(e,"node_modules/dep/index.js"),A)}finally{try{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function mF(){let t=jc(),e=P.mkdtempSync(I.join(tt.tmpdir(),"luban-patch-op-")),n=function(r,o){let i=I.join(e,r);P.mkdirSync(I.dirname(i),{recursive:!0}),P.writeFileSync(i,o)},s=function(r){return P.readFileSync(I.join(e,r),"utf8")};try{n("a.js",`const a = 1;
994
+ `});t.ok("write_blocked_m2",y.indexOf("\u8DF3\u8FC7")>=0&&y.indexOf(".m2")>=0,y),t.ok("blocked_no_write",!P.existsSync(I.join(e,"node_modules/dep/patch.js"))&&!P.existsSync(I.join(e,"node_modules/dep/new.js"))&&!P.existsSync(I.join(e,"npm-cache/_npx/81dd2fe1/patched.js"))&&!P.existsSync(I.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(D){return Zs.pathGuard(D)};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 Rn("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=Ve("node_modules/dep/index.js",e,!0);t.ok("allowSkipped_bypass",A===I.join(e,"node_modules/dep/index.js"),A)}finally{try{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function mF(){let t=jc(),e=P.mkdtempSync(I.join(tt.tmpdir(),"luban-patch-op-")),n=function(r,o){let i=I.join(e,r);P.mkdirSync(I.dirname(i),{recursive:!0}),P.writeFileSync(i,o)},s=function(r){return P.readFileSync(I.join(e,r),"utf8")};try{n("a.js",`const a = 1;
995
995
  const b = 2;
996
996
  `),n("old.js",`legacy
997
997
  `);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(`
@@ -1018,23 +1018,23 @@ beta
1018
1018
  *** Add File: d.js
1019
1019
  +b
1020
1020
  *** End Patch`)).ok),t.ok("patch_no_begin",!!On.parsePatch(`*** Add File: x
1021
- +y`).error)}finally{try{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function hF(){let t=jc(),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=bs.summarize(n);t.ok("lints_summary",s.total===3&&s.error===2&&s.warning===1,JSON.stringify(s));let r=bs.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(bs.formatLints({})));let o={"/x.js":[]};for(let a=0;a<30;a++)o["/x.js"].push(e(1,a,"w"+a));let i=bs.formatLints(o,{maxDiags:5});return t.ok("lints_truncate",(i.match(/^WARNING/gm)||[]).length===5,String((i.match(/^WARNING/gm)||[]).length)),t}async function gF(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,y){try{let S=await y();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 b.commands.getCommands(!0)).indexOf("luban.markdownPreview")>=0}catch(v){s.registered="getCommands failed: "+v.message}let o=await r("show",function(){return b.window.showTextDocument(b.Uri.file(t),{preview:!1})});await r("execute",function(){return b.commands.executeCommand("luban.markdownPreview")});let i=Date.now()+15e3;for(;Date.now()<i&&!ua;)await new Promise(function(v){setTimeout(v,100)});let a=Date.now()+15e3;for(;Date.now()<a&&!da;)await new Promise(function(v){setTimeout(v,100)});let l=ua;if(!l)return s.error="\u9884\u89C8\u9762\u677F\u6CA1\u8D77\u6765",s;s.opened=!0,s.ready=da===!0,s.doc=Ao?Ao.fsPath||String(Ao):"";let c=function(v){return new Promise(function(y){setTimeout(y,v)})},u=async function(){j=null;try{l.postMessage({type:"preview_probe"})}catch{return null}let v=await Te(5e3,function(y){return y.kind==="preview_state"});return v?{scrollTop:v.scrollTop,scrollHeight:v.scrollHeight,follow:v.follow}:null},d=function(v){let y=new b.Position(Math.max(0,Math.min(Number(v)||0,o.document.lineCount-1)),0);o.revealRange(new b.Range(y,y),b.TextEditorRevealType.AtTop)},f=async function(v){j=null;try{l.postMessage({type:"preview_follow",on:v})}catch{return null}let y=await Te(5e3,function(S){return S.kind==="preview_follow_ok"});return y?{scrollTop:y.scrollTop,follow:y.follow}:null};j=null,l.postMessage({type:"preview_selftest"});let p=await Te(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(),k=await f(!1);d(n.holdLine==null?3:n.holdLine),await c(1200);let x=await u(),T=await f(!0);s.scroll={before:m&&m.scrollTop,after:h&&h.scrollTop,frozen:x&&x.scrollTop},s.follow={off:k&&k.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&&!!x&&!!h&&x.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 yF=["ping","tab_probe","session_probe","review_probe","reset","toggle_session_list","cycle_mode","insert_ref"];function wF(t){let e=$l+"/cmd.json",n=$l+"/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"){w("headless_mdpreview_start",{file:String(s.file||"")});try{let o=await gF(String(s.file||""),s);r.ok=o.ok===!0,r.result=o,o.error&&(r.error=o.error),w("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),w("headless_mdpreview",{ok:!1,error:r.error,stack:r.stack.split(`
1021
+ +y`).error)}finally{try{P.rmSync(e,{recursive:!0,force:!0})}catch{}}return t}function hF(){let t=jc(),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=ks.summarize(n);t.ok("lints_summary",s.total===3&&s.error===2&&s.warning===1,JSON.stringify(s));let r=ks.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(ks.formatLints({})));let o={"/x.js":[]};for(let a=0;a<30;a++)o["/x.js"].push(e(1,a,"w"+a));let i=ks.formatLints(o,{maxDiags:5});return t.ok("lints_truncate",(i.match(/^WARNING/gm)||[]).length===5,String((i.match(/^WARNING/gm)||[]).length)),t}async function gF(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,y){try{let S=await y();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 b.commands.getCommands(!0)).indexOf("luban.markdownPreview")>=0}catch(v){s.registered="getCommands failed: "+v.message}let o=await r("show",function(){return b.window.showTextDocument(b.Uri.file(t),{preview:!1})});await r("execute",function(){return b.commands.executeCommand("luban.markdownPreview")});let i=Date.now()+15e3;for(;Date.now()<i&&!ua;)await new Promise(function(v){setTimeout(v,100)});let a=Date.now()+15e3;for(;Date.now()<a&&!da;)await new Promise(function(v){setTimeout(v,100)});let l=ua;if(!l)return s.error="\u9884\u89C8\u9762\u677F\u6CA1\u8D77\u6765",s;s.opened=!0,s.ready=da===!0,s.doc=Ao?Ao.fsPath||String(Ao):"";let c=function(v){return new Promise(function(y){setTimeout(y,v)})},u=async function(){j=null;try{l.postMessage({type:"preview_probe"})}catch{return null}let v=await Te(5e3,function(y){return y.kind==="preview_state"});return v?{scrollTop:v.scrollTop,scrollHeight:v.scrollHeight,follow:v.follow}:null},d=function(v){let y=new b.Position(Math.max(0,Math.min(Number(v)||0,o.document.lineCount-1)),0);o.revealRange(new b.Range(y,y),b.TextEditorRevealType.AtTop)},f=async function(v){j=null;try{l.postMessage({type:"preview_follow",on:v})}catch{return null}let y=await Te(5e3,function(S){return S.kind==="preview_follow_ok"});return y?{scrollTop:y.scrollTop,follow:y.follow}:null};j=null,l.postMessage({type:"preview_selftest"});let p=await Te(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(),k=await f(!1);d(n.holdLine==null?3:n.holdLine),await c(1200);let x=await u(),T=await f(!0);s.scroll={before:m&&m.scrollTop,after:h&&h.scrollTop,frozen:x&&x.scrollTop},s.follow={off:k&&k.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&&!!x&&!!h&&x.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 yF=["ping","tab_probe","session_probe","review_probe","reset","toggle_session_list","cycle_mode","insert_ref"];function wF(t){let e=$l+"/cmd.json",n=$l+"/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"){w("headless_mdpreview_start",{file:String(s.file||"")});try{let o=await gF(String(s.file||""),s);r.ok=o.ok===!0,r.result=o,o.error&&(r.error=o.error),w("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),w("headless_mdpreview",{ok:!1,error:r.error,stack:r.stack.split(`
1022
1022
  `).slice(0,4).join(" | ")})}}else if(s.op==="models")r.ok=!0,r.result=Wn().map(o=>({key:o.key,baseUrl:o.provider.baseUrl,keyFound:!!Po(o.provider),keyless:Eo(o.provider)&&!Vl(o.provider),toolCalling:o.model.toolCalling!==!1,vision:o.model.vision===!0,webSearch:Mx(o.provider),webEngine:Dn(o.provider)}));else if(s.op==="i18n"){let o="auto";try{o=b.workspace.getConfiguration("luban").get("language")||"auto"}catch{}r.ok=!0,r.result={lang:Vt,setting:o,vscodeLanguage:b.env&&b.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 b.workspace.getConfiguration("luban").update("language",o,b.ConfigurationTarget.Global);let i=null;if(Se||de){let l=oP(s.waitMs||8e3);Xl("headless"),i=await l}else Xl("headless");let a=xx(o,b.env&&b.env.language);r.ok=Vt===a&&(Se||de?!!i:!0),r.result={setting:o,lang:Vt,expected:a,ack:i},!r.ok&&!i&&(Se||de)&&(r.error="\u804A\u5929\u9762\u677F\u6CA1\u6709\u786E\u8BA4\u8BED\u8A00\u5207\u6362")}else if(s.op==="i18ntest"){await ot();let o=Ne(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 Te(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:Vt}}}else if(s.op==="websearch"){let o=lt(s.modelKey),i=await xp(s.query||"DeepSeek",o,{count:s.count,needContent:!!s.need_content});r.ok=!0,r.result={query:i.query,count:i.results.length,engine:Dn(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:vp(i.results,i.query).slice(0,600)}}else if(s.op==="webfetch"){let o=lt(s.modelKey),i=await Sp(s.url,o,{});r.ok=!0,r.result={url:i.url,title:i.title,chars:i.fullChars,head:i.content.slice(0,300),engine:Dn(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=Ex(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=fa("<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
1023
1023
  \u7B2C\u4E00\u6BB5 \u6587\u5B57
1024
1024
  \u7B2C\u4E8C\u6BB5
1025
- \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:Dn(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 ks(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?ps((Oe()||{}).items||[],s.modelKey,{resolveImage:ms(Oe())}).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 ks(s.prompt||"hi",{root:s.root||L(),modelKey:s.modelKey,mode:"plan",history:s.history?ps((Oe()||{}).items||[],s.modelKey,{resolveImage:ms(Oe())}).messages:[]}),i=Oe(),a=nv(o.text,{prompt:s.prompt,workspace:s.root||L(),modelKey:s.modelKey,session:i?i.id:""}),l=Xt.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
1025
+ \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:Dn(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 xs(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?ms((Oe()||{}).items||[],s.modelKey,{resolveImage:hs(Oe())}).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 xs(s.prompt||"hi",{root:s.root||L(),modelKey:s.modelKey,mode:"plan",history:s.history?ms((Oe()||{}).items||[],s.modelKey,{resolveImage:hs(Oe())}).messages:[]}),i=Oe(),a=nv(o.text,{prompt:s.prompt,workspace:s.root||L(),modelKey:s.modelKey,session:i?i.id:""}),l=Xt.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
1026
  \u505A X`,"## \u6B65\u9AA4","1. \u6539 a.js","2. \u8DD1\u6D4B\u8BD5",`## \u9A8C\u8BC1\u65B9\u5F0F
1027
1027
  \u770B\u8F93\u51FA`].join(`
1028
- `),c=Xt.parsePlanSteps(l);a("parse",c.length===2&&c[0].id==="t1",c)}if(o==="all"||o==="merge"){let l=Xt.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=Xt.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,D,G){o.push({name:A,ok:!!D,detail:G})},a=function(A){return(Array.isArray(A)?A:[]).map(function(D){return String(D.function&&D.function.name||"")})},l=s.root||L(),c=lt(s.modelKey),u=["write_file","replace_in_file","apply_patch","delete_file","move_file"],d=a(Up);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(gS).indexOf("explore")>=0);let f=a(Gs("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",ws("explore",!1)&&ws("explore",!0)&&!ws("plan",!1)&&ws("plan",!0)&&!ws("agent",!0));let p=async function(A){try{return await A(),""}catch(D){return String(D&&D.message||D)}},m=await p(function(){return Rn("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 Rn("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 k=await p(function(){return Rn("ask_question",{questions:[]},l,c,{mode:"explore"})});i("askBlocked",k.indexOf("\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE")>=0,k);let x=await p(function(){return Rn("todo_write",{todos:[]},l,c,{mode:"explore",todosState:{items:[]}})});i("todoBlocked",x.indexOf("\u4E0D\u80FD\u7528 todo_write")>=0,x);let T=await Rn("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(aa+50).join("a"),v=lc(g);i("resultCapped",v.length>aa&&v.indexOf("\u5DF2\u622A\u65AD")>=0&&lc("\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 y=ac(!0),S=ac(!1);i("exploreToolList",y.indexOf("\u5171 15 \u4E2A")>=0&&y.indexOf("read_skill")>=0&&y.indexOf("read_rule")>=0&&S.indexOf("\u5171 13 \u4E2A")>=0&&S.indexOf("web_search")<0&&String(Js("explore","/tmp",!0)).split(`
1029
- `).pop()===y,y),i("subagentCaveat",Er("\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&&Er("\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&&Er("README \u91CC\u6CA1\u6709\u8BE5\u51FD\u6570\u3002",[{name:"read_file",ok:!0}])===""&&Er("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\u3002",[{name:"run_command",ok:!1}])==="",Er("x",[]).slice(0,60));let _=wa([{promptTokens:100,completionTokens:10},{promptTokens:30,completionTokens:5,subagent:!0}],65536,"selftest");i("usageMerged",_.requests===2&&_.promptTokens===130&&_.subagentRequests===1&&_.contextTokens===110,_),i("noWriteNudge",Hl([{name:"explore",ok:!0}])&&!Hl([{name:"explore",ok:!1}])&&!Hl([{name:"read_file",ok:!0}])&&!SS([{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},w("headless_subagent",{ok:r.ok,failed:C})}else if(s.op==="cursorplans")if(s.file){let o=await fv(String(s.file));r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else{let o=tr.listPlans({home:tt.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=tr.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=[];Bn.forEach(function(d,f){u.push(f)}),o=u.length?u[u.length-1]:""}let i=Oe(),a=String(s.sessionId||i&&i.id||""),l=o?Bn.get(o):null,c=cv(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:Bn.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=fs.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&&!fs.needsConfirm(u),c=u}catch(u){c=u.message}a("normalize",l,c)}if(o==="all"||o==="reject"){let l=!1;try{fs.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=fs.normalize({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),d=fs.normalizeAnswers(u,{a:"x"}),f=fs.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 b.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500));let o=Ne(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=Dr(o),c=l?ka.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=Ne(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=Ne(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null;let i=Dr(o),a=i?ka.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=Ne(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 ot();let o=Ne(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 Lx(I.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 Te(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},w("headless_insertref",{ok:r.ok,n:c.length,ack:u&&u.n})}}}else if(s.op==="seladd")try{let o=s.root||L(),i=Ve(s.file||"a.ts",o),a=await b.workspace.openTextDocument(b.Uri.file(i)),l=await b.window.showTextDocument(a,{preview:!1,viewColumn:b.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 b.Selection(new b.Position(c,0),new b.Position(u,0));l.selection=d,sa(l),await new Promise(p=>setTimeout(p,300)),await ot();let f=Ne(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 Te(p,function(_){return _.kind==="ref_clear_ok"}),j=null,await b.commands.executeCommand("luban.addSelectionToChat");let m=await Te(p,function(_){return _.kind==="insert_ref"});j=null,f.postMessage({type:"ref_selftest",case:"input"});let h=await Te(p,function(_){return _.kind==="ref_input_ok"}),k=String(h&&h.value||"").trim(),x=k?Nr(k,o):{refs:[],text:""},T=x.refs[0]||null,v=(a.getText(new b.Range(d.start,d.end)).split(`
1028
+ `),c=Xt.parsePlanSteps(l);a("parse",c.length===2&&c[0].id==="t1",c)}if(o==="all"||o==="merge"){let l=Xt.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=Xt.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,D,G){o.push({name:A,ok:!!D,detail:G})},a=function(A){return(Array.isArray(A)?A:[]).map(function(D){return String(D.function&&D.function.name||"")})},l=s.root||L(),c=lt(s.modelKey),u=["write_file","replace_in_file","apply_patch","delete_file","move_file"],d=a(Up);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(gS).indexOf("explore")>=0);let f=a(Js("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",bs("explore",!1)&&bs("explore",!0)&&!bs("plan",!1)&&bs("plan",!0)&&!bs("agent",!0));let p=async function(A){try{return await A(),""}catch(D){return String(D&&D.message||D)}},m=await p(function(){return Rn("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 Rn("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 k=await p(function(){return Rn("ask_question",{questions:[]},l,c,{mode:"explore"})});i("askBlocked",k.indexOf("\u4E0D\u80FD\u5411\u7528\u6237\u63D0\u95EE")>=0,k);let x=await p(function(){return Rn("todo_write",{todos:[]},l,c,{mode:"explore",todosState:{items:[]}})});i("todoBlocked",x.indexOf("\u4E0D\u80FD\u7528 todo_write")>=0,x);let T=await Rn("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(aa+50).join("a"),v=lc(g);i("resultCapped",v.length>aa&&v.indexOf("\u5DF2\u622A\u65AD")>=0&&lc("\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 y=ac(!0),S=ac(!1);i("exploreToolList",y.indexOf("\u5171 15 \u4E2A")>=0&&y.indexOf("read_skill")>=0&&y.indexOf("read_rule")>=0&&S.indexOf("\u5171 13 \u4E2A")>=0&&S.indexOf("web_search")<0&&String($s("explore","/tmp",!0)).split(`
1029
+ `).pop()===y,y),i("subagentCaveat",Er("\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&&Er("\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&&Er("README \u91CC\u6CA1\u6709\u8BE5\u51FD\u6570\u3002",[{name:"read_file",ok:!0}])===""&&Er("\u5199\u5165\u7C7B\u547D\u4EE4\u4F1A\u88AB\u62D2\u7EDD\u3002",[{name:"run_command",ok:!1}])==="",Er("x",[]).slice(0,60));let _=wa([{promptTokens:100,completionTokens:10},{promptTokens:30,completionTokens:5,subagent:!0}],65536,"selftest");i("usageMerged",_.requests===2&&_.promptTokens===130&&_.subagentRequests===1&&_.contextTokens===110,_),i("noWriteNudge",Hl([{name:"explore",ok:!0}])&&!Hl([{name:"explore",ok:!1}])&&!Hl([{name:"read_file",ok:!0}])&&!SS([{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},w("headless_subagent",{ok:r.ok,failed:C})}else if(s.op==="cursorplans")if(s.file){let o=await fv(String(s.file));r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else{let o=nr.listPlans({home:tt.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=nr.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=[];Bn.forEach(function(d,f){u.push(f)}),o=u.length?u[u.length-1]:""}let i=Oe(),a=String(s.sessionId||i&&i.id||""),l=o?Bn.get(o):null,c=cv(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:Bn.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=ps.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&&!ps.needsConfirm(u),c=u}catch(u){c=u.message}a("normalize",l,c)}if(o==="all"||o==="reject"){let l=!1;try{ps.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=ps.normalize({questions:[{id:"a",prompt:"\u5355\u9009",options:[{id:"x",label:"X"},{id:"y",label:"Y"}]}]}),d=ps.normalizeAnswers(u,{a:"x"}),f=ps.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 b.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500));let o=Ne(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=Dr(o),c=l?ka.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=Ne(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=Ne(s.to||"view");if(!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{j=null;let i=Dr(o),a=i?ka.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=Ne(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 ot();let o=Ne(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 Lx(I.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 Te(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},w("headless_insertref",{ok:r.ok,n:c.length,ack:u&&u.n})}}}else if(s.op==="seladd")try{let o=s.root||L(),i=Ve(s.file||"a.ts",o),a=await b.workspace.openTextDocument(b.Uri.file(i)),l=await b.window.showTextDocument(a,{preview:!1,viewColumn:b.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 b.Selection(new b.Position(c,0),new b.Position(u,0));l.selection=d,sa(l),await new Promise(p=>setTimeout(p,300)),await ot();let f=Ne(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 Te(p,function(_){return _.kind==="ref_clear_ok"}),j=null,await b.commands.executeCommand("luban.addSelectionToChat");let m=await Te(p,function(_){return _.kind==="insert_ref"});j=null,f.postMessage({type:"ref_selftest",case:"input"});let h=await Te(p,function(_){return _.kind==="ref_input_ok"}),k=String(h&&h.value||"").trim(),x=k?Nr(k,o):{refs:[],text:""},T=x.refs[0]||null,v=(a.getText(new b.Range(d.start,d.end)).split(`
1030
1030
  `).find(function(_){return _.trim()})||"").trim(),y=!!v&&String(x.text).indexOf(v)>=0,S=d.end.character===0&&u>c?u:u+1;r.ok=!!(m&&/^#selection .+:\d+-\d+$/.test(k)&&T&&T.kind==="selection"&&T.startLine===c+1&&T.endLine===S&&y),r.result={insertAck:m||null,token:k,ref:T,selectedRange:[c+1,S],injectedHasSelectedText:y},w("headless_seladd",{ok:r.ok,token:k,ack:m&&m.n})}}catch(o){r.ok=!1,r.error=o.message}else if(s.op==="webtest"){let o=Ne(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=Ne(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 ot();let o=Ne(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"},w("headless_tooltest",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="viewscroll"){await ot();let o=Ne(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"},w("headless_viewscroll",{ok:r.ok,kind:a&&a.kind,n:a&&a.n,value:a&&a.value})}}else if(s.op==="thinktest"){await ot();let o=Ne(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"},w("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=Ve(s.file||"a.ts",u),f=await b.workspace.openTextDocument(b.Uri.file(d)),p=await b.window.showTextDocument(f,{preview:!1,viewColumn:b.ViewColumn.One}),m=Math.max((s.startLine||1)-1,0),h=Math.min(s.endLine||m+2,Math.max(f.lineCount-1,0)),k=new b.Selection(new b.Position(m,0),new b.Position(h,0));p.selection=k,sa(p),await new Promise(S=>setTimeout(S,400)),i=Rx(),c=f.getText(new b.Range(k.start,k.end));let x=Nr("#selection \u89E3\u91CA\u8FD9\u6BB5",u);a=x.refs,l=x.text;let T=Ne(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(`
1031
- `).find(function(S){return S.trim()})||"").trim(),v={ok:!0,skipped:!0,ranges:[]};if(Math.max(f.lineCount,1)>=4){let S=qn(d,u),_=Nr("#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===(k.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=Nr(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 IP(),i=await LP();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:at,source:Oo,defaultModel:Bt.defaultModel,providers:(Bt.providers||[]).map(o=>({id:o.id,models:(o.models||[]).map(i=>i.id),keyFound:!!Po(o),keyless:Eo(o)&&!Vl(o),inline:!!o.apiKey,secret:!!ts[o.id],env:!!va(o)}))};else if(s.op==="saveconfig"){let o=await MS(t,s.config||uc().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 CS(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="fetchmodels"){let o=await Vp(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 ba(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(hn.loadConfig()),a=await Zp(t,{config:Object.assign({},hn.loadConfig(),{url:"ftp://not-a-webdav"})});r.ok=!a.ok&&JSON.stringify(hn.loadConfig())===i,r.result={errors:a.errors||[],unchanged:JSON.stringify(hn.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 RS(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"){Qp(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:at}}else if(s.op==="chat"){let o=await jo([{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 zx(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=ye.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 ye.poll(i,l.job_id,{wait_ms:0,tail_chars:200}),u=await ye.poll(i,l.job_id,{wait_ms:5e3,tail_chars:800}),d=ye.stop(i,l.job_id);ye.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=ye.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),c=ye.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),u=ye.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),d=ye.runningCount(i);ye.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=ye.start(l,"sleep 2",{cwd:a,timeout_ms:1e4}),d=await ye.poll(c,u.job_id,{wait_ms:0});ye.clearSession(l),ye.clearSession(c),r.ok=!!(u.ok&&d.status==="missing"),r.result={a:u,cross:d}}else if(o==="cancel"){let l=ye.start(i,"sleep 5",{cwd:a,timeout_ms:2e4}),c=ye.stopAll(i),u=await ye.poll(i,l.job_id,{wait_ms:0});ye.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=Ys.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=ye.start(i,"printf '\u{1F600}\u{1F600}\u{1F600}'",{cwd:a,timeout_ms:15e3}),c=await ye.poll(i,l.job_id,{wait_ms:5e3,tail_chars:3}),u=await ye.poll(i,l.job_id,{wait_ms:0,tail_chars:4});ye.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=ye.start(i,"sleep 5",{cwd:a,timeout_ms:400}),c=await ye.poll(i,l.job_id,{wait_ms:3e3});ye.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=pF(),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=mF(),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=hF(),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 Rn(s.tool||"read_file",s.args||{},s.root||L(),null,{readMax:s.readMax});r.ok=!0,r.result={allowOutside:pp(),text:String(o).slice(0,2e3)}}catch(o){r.ok=!1,r.error=o.message,r.result={allowOutside:pp()}}else if(s.op==="fsskip")r.result=await bv(),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:Vn(),files:tp()};else if(s.op==="reviewdoc"){let o=Ve(s.path,L()),i=await b.workspace.openTextDocument(b.Uri.from({scheme:"luban-before",path:o})),a=ie.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=Ve(s.path,L()),i=b.Uri.file(o),a=await b.workspace.openTextDocument(i);await b.window.showTextDocument(a,{preview:!1,viewColumn:b.ViewColumn.One}),await new Promise(p=>setTimeout(p,600));let l=async function(p){try{return await b.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=b.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:b.window.visibleTextEditors.some(function(p){return p.document.uri.scheme==="file"&&p.document.uri.fsPath===o})}}else if(s.op==="reviewdiff"){let o=Ve(s.path,L());if(!ie.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 b.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 Dp(o,{preview:!0,preserveFocus:!0}),await new Promise(c=>setTimeout(c,400)));let a=i(),l={tabs:a,diffTabs:a.length,pending:Vn(),frozenCount:dn.size,autoOpen:gc(),contextActive:!!ya(ga())};if(s.accept){let c=ie.has(o)?ie.get(o).baseline:"";await ha("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=Vn();let d="";try{d=(await b.workspace.openTextDocument(b.Uri.from({scheme:"luban-before",path:o}))).getText()}catch{d=""}l.afterAcceptBeforeHasText=d.length>0,l.afterAcceptBeforeMatches=d===c,l.frozenCount=dn.size,l.afterAcceptContext=!!ya(ga())}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 b.commands.executeCommand("workbench.view.extension.luban")}catch{}await new Promise(function(i){setTimeout(i,800)})}let o=Ne(s.to||"view")||Jt();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 Te(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 Te(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:ca.get(o)===!0,maximized:!!(a&&a.maximized),extMaximized:Xi(),inputFocused:!!(a&&a.inputFocused),inputFocusSet:i,pendingAutoDiff:$t.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 b.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=Ne(s.to||"view")||Jt();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;Fo.set(a,l),l||nS(),await new Promise(function(c){setTimeout(c,400)}),r.result={simulated:l,maximized:Xi(),pendingAutoDiff:$t.size,tracked:ca.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 Te(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(b.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 b.commands.executeCommand(c)};if(u||(await b.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:Xi(),pendingAutoDiff:$t.size};else{j=null,a.postMessage({type:"focus_probe"});let p=await Te(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:Xi(),tracked:ca.get(a)===!0,pendingAutoDiff:$t.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=Ne(s.to);if(o||(await b.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500)),o=Ne(s.to)),!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{o.postMessage(ma()),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=Ve(s.path,L()),i=ie.get(o);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u5F85\u5BA1\u9605\u6539\u52A8: "+s.path;else{let a=await b.workspace.openTextDocument(b.Uri.file(o)),l=iS(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 b.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:dn.size,pending:Vn()}}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 b.workspace.getConfiguration("luban").update(i,s.value,b.ConfigurationTarget.Global),r.ok=!0,r.result={key:o,value:b.workspace.getConfiguration("luban").get(i),autoOpenDiff:gc()}}catch(a){r.ok=!1,r.error=String(a&&a.stack||a).slice(0,800)}}}else if(s.op==="review_action"){let o=await ha(s.action,s.path,s.hunk||"",s.sessionId),i="";try{i=Fr(Ve(s.path,L()))}catch{i=""}r.ok=!!o.ok,o.ok||(r.error=o.error),r.result=Object.assign({},o,{remaining:Vn(),fileCount:ie.size,exists:i!==""||function(){try{return P.existsSync(Ve(s.path,L()))}catch{return!1}}(),current:i.slice(0,3e3)})}else if(s.op==="review_edit"){let o=Ve(s.path,L()),i=P.existsSync(o),a=i?P.readFileSync(o,"utf8"):"",l=s.content==null?"":String(s.content);await Zs(o,l);let c=Xn(o,a,l,!i);r.ok=!0,r.result={hunks:c,existed:i,total:Vn(),files:tp()}}else if(s.op==="openpanel")yp(t),r.ok=!0,r.result="opened";else if(s.op==="panelmsg"||s.op==="viewmsg"){s.op==="viewmsg"?(await b.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500))):Ne(s.to)||(yp(t),await new Promise(i=>setTimeout(i,2500)));let o=Ne(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 ot();let o=Ne(s.to);j=null;let i=await Lr(s.reason||"headless",o),a=o?await Te(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:ie.size,hunks:Vn()}}else if(s.op==="listsessions")Ye(),r.ok=!0,r.result={current:Ce||"",openTabs:me.slice(),root:L(),sessions:ge.list(s.scope||"workspace",s.root||L()).slice(0,s.limit||50)};else if(s.op==="searchsessions"){let o=QS(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 ot();let o=Ne(s.to);j=null;let i=await Or(String(s.id||""),o),a=i.ok&&o?await Te(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:Ac(Oe())}}else if(s.op==="deletesession"){let o=await zs(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=No(o);if(!i)try{i=Ye().load(o)}catch{i=null}if(!i)r.ok=!1,r.error=M("ext.noSuchSession",{id:o});else if(Qe.has(i.id))r.ok=!1,r.error=M("ext.forkBusy");else{let a=s.at==null||s.at===""?null:Number(s.at),l=kc(i,a,Ne(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 ot();let i=Ne(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{Ye();let a=function(d,f){let p=ge.create(L());return ge.append(p,{t:"user",text:"\u4F1A\u8BDD "+d+" \u7684\u95EE\u9898"}),ge.append(p,{t:"tool",name:"read_file",path:d+".js",ok:!0,result:"12 \u884C"}),ge.append(p,{t:"text",text:"\u4F1A\u8BDD "+d+" \u7684\u56DE\u7B54\u3002"}),f&&ge.append(p,f),ge.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=ie.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 Te(6e3,function(f){return f.kind==="session_probe"});r.ok=!!(d&&d.popupOpen&&d.sessionItems>=1),r.result={probe:d,sessions:ge.list().length},i.postMessage({type:"toggle_session_list"})}else if(o==="replay"){j=null,await Or(l.id,i);let d=await Te(8e3,function(p){return p.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let f=await Te(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=ge.create(L());ge.append(f,{t:"user",text:"\u5E2E\u6211\u770B\u770B\u80FD\u8017\u62A5\u544A"}),ge.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF08\u6807\u8BB0 "+d+"\uFF09\u3002"}),ge.save(f);let p=ge.create(L());ge.append(p,{t:"user",text:"\u80FD\u8017\u62A5\u544A\u7684\u6807\u9898\u547D\u4E2D"}),ge.append(p,{t:"text",text:"\u8FD9\u6761\u6B63\u6587\u91CC\u6CA1\u6709\u6807\u8BB0\u3002"}),ge.save(p),j=null,i.postMessage({type:"session_search_selftest",q:d});let m=await Te(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 zs(f.id),await zs(p.id)}else if(o==="find"){let d="FS"+Date.now().toString(36).toUpperCase(),f=ge.create(L());ge.append(f,{t:"user",text:"\u5E2E\u6211\u627E\u4E00\u4E0B\u6B63\u6587\u91CC\u7684\u6807\u8BB0\u3002"}),ge.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"}),ge.save(f),j=null,await Or(f.id,i);let p=await Te(8e3,function(h){return h.kind==="session_opened"});j=null;try{await b.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 Te(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 zs(f.id)}else if(o==="switch"){j=null,await Or(l.id,i),await Te(8e3,function(m){return m.kind==="session_opened"}),j=null,i.postMessage({type:"session_probe"});let d=await Te(8e3,function(m){return m.kind==="session_probe"});j=null,await Or(c.id,i);let f=await Te(8e3,function(m){return m.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let p=await Te(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 Or(l.id,i),await Te(8e3,function(f){return f.kind==="session_opened"}),j=null,i.postMessage({type:"session_selftest",case:o});let d=await Te(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 zs(l.id),await zs(c.id)}}else if(s.op==="tabprobe"){let o=Ne(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 Te(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:me.slice(),activeId:Ce}}}else if(s.op==="webview_probe")r.ok=!0,r.result={panel:!!Se,view:!!de,viewVisible:!!(de&&de.visible===!0),panelActive:Se&&St.get(Se.webview)||"",viewActive:de&&St.get(de.webview)||"",activeId:Ce,openTabs:me.slice()};else if(s.op==="sendmsg"){let o=Ne(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(yF.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 Te(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 ot();let i=Ne(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 Te(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:me.slice(),activeId:Ce}}}else if(s.op==="sessionpersist"){let o=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",i=await jo([{role:"user",content:o}],s.modelKey,{});Ec(s.modelKey,"chat"),At({t:"user",text:o}),At({t:"text",text:i.content}),At({t:"summary",text:"\u5B8C\u6210 \xB7 "+i.target.model.id});let a=mt(),l=a?ge.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?ge.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=(Oe()||{}).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 aS(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=jr.build(l,Object.assign(Pr(),s.opts||{}));r.ok=!0,r.result=Object.assign(a(c),{config:Pr(),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=pn.createStore(),u=jr.build(l,Object.assign(Pr(),{maxTurns:2,maxChars:2e4,spill:wc(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=lt(s.modelKey),c=Dn(l&&l.provider)!=="none",u=gs.hash(Js("agent",L(),c),Gs("agent",l)),d=gs.hash(Js("agent",L(),c),Gs("agent",l)),f=gs.hash(Js("plan",L(),c),Gs("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=ps(i,s.modelKey,Object.assign({},s.opts||{},{resolveImage:ms(Oe())}));r.ok=!0,r.result=Object.assign(a(l),{id:Ce||"",items:i.length})}else if(o==="last")r.ok=!!kt,r.result=kt||{};else if(o==="live"){let l=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",c=ps(i,s.modelKey,{resolveImage:ms(Oe())}),u={text:""},d=await ks(l,{root:L(),modelKey:s.modelKey,history:c.messages,onUserTurn:function(k){u.text=k}}),f=i.concat([{t:"user",text:l,ctx:u.text},{t:s.mode==="plan"?"plan":"text",text:d.text}]),p=ps(f,s.modelKey,{resolveImage:ms(Oe())});kt=null;let m=await ks(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=kt&&kt.roles||[];r.ok=!!(kt&&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:_o.slice(-2),request:kt}}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 ot();let a=Ne(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 Te(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=xe.saveImage(a,i),u=xe.ATTACH_DIR+I.sep+a,d=c?I.join(u,c.file):"";l.save=!!c&&c.mime==="image/png"&&c.bytes>0,l.file=!!d&&P.existsSync(d),l.readBack=!!c&&xe.readDataUrl(a,c)===i,l.preview=!!c&&xe.readPreview(a,c.file).ok===!0,l.badSession=xe.saveImage("../evil",i)===null,l.svg=xe.saveImage(a,"data:image/svg+xml;base64,PHN2Zy8+")===null,l.oversize=xe.saveImage(a,"data:image/png;base64,"+"A".repeat(Math.ceil(xe.MAX_BYTES*4/3)+1e3))===null;let f=[];for(let q=0;q<5;q++)f.push({file:"a"+q+".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=Un.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(q){return q.file.indexOf("a")===0}),l.clampDrop=!Un.clampItem({t:"user",text:"hi",images:[{file:"../x.png",mime:"image/png",bytes:1}]}).images,l.textOnly=xe.toContent("hi",[])==="hi";let m=xe.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"}],x=jr.build(h,Object.assign(Pr(),{enabled:!0,resolveImage:function(){return i}})).messages.filter(function(q){return q.role==="user"});l.memImg=x.length===1&&Array.isArray(x[0].content)&&x[0].content[0].type==="text"&&x[0].content.some(function(q){return q.type==="image_url"});let g=jr.build(h,Object.assign(Pr(),{enabled:!0,resolveImage:function(){return""}})).messages.filter(function(q){return q.role==="user"});l.memDegrade=g.length===1&&typeof g[0].content=="string";let v=lt(s.modelKey),y=Dn(v&&v.provider)!=="none";l.prefixStable=gs.hash(Js("agent",L(),y),Gs("agent",v))===gs.hash(Js("agent",L(),y),Gs("agent",v));let S="imgtest-orphan-"+Date.now().toString(36),_=I.join(xe.ATTACH_DIR,S);try{P.mkdirSync(_,{recursive:!0})}catch{}let C=[];try{C=P.readdirSync(xe.ATTACH_DIR,{withFileTypes:!0})}catch{C=[]}let A=new Set;for(let q of C)q.isDirectory()&&q.name!==S&&A.add(q.name);let D=xe.sweepOrphans(A);l.sweep=D.removed===1&&!P.existsSync(_);let G=xe.removeSession(a);l.cleanup=G.removed>=1&&!P.existsSync(u)&&(!c||xe.readDataUrl(a,c)==="");let H=Object.keys(l).filter(function(q){return!l[q]});r.ok=H.length===0,H.length&&(r.error="failed: "+H.join(",")),r.result=l}else if(o==="live"){await ot();let a=lt(s.modelKey),l=a&&a.model&&a.model.vision===!0?a:Wn().find(function(u){return u.model.vision===!0}),c=Ne(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 Lr("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 Te(s.waitMs||9e4,function(C){return C.kind==="dome_done"||C.kind==="dome_error"||C.kind==="plan_done"}),f=ue.get(u.id)||u,p=f&&f.items||[],m=p.slice().reverse().find(function(C){return C&&C.t==="user"}),h=xe.ATTACH_DIR+I.sep+u.id,k=[];try{k=P.readdirSync(h)}catch{k=[]}let T=ps(p,l.key,{resolveImage:ms(f)}).messages.filter(function(C){return C.role==="user"}),g=T.length?T[T.length-1]:null,v=kt&&kt.heads||[],y=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:k.length>=1,snapshot:y.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 zs(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=pt.encodeFrame(1,Buffer.from(a,"utf8")),c=pt.decodeFrame(l);i.frameRoundtrip=!!c&&c.opcode===1&&c.payload.toString("utf8")===a;let u=pt.encodeFrame(1,Buffer.alloc(300,97)),d=pt.decodeFrame(u);i.midLength=!!d&&d.payload.length===300;let f=pt.encodeFrame(1,Buffer.alloc(7e4,98)),p=pt.decodeFrame(f);i.bigLength=!!p&&p.payload.length===7e4,i.masked=!!(l[1]&128),i.shortFrame=pt.decodeFrame(Buffer.from([129]))===null,i.urlHttps=pt.normalizeUrl("example.com")==="https://example.com",i.urlLocalhost=pt.normalizeUrl("localhost:3000/x")==="http://localhost:3000/x",i.urlData=pt.normalizeUrl("data:text/html,hi")==="data:text/html,hi";let m=!1;try{pt.normalizeUrl("javascript:alert(1)")}catch{m=!0}i.urlBlocked=m,i.ax=pt.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 pt.findChrome("definitely-not-here.exe").path=="string";let h=Object.keys(i).filter(function(k){return!i[k]});r.ok=h.length===0,h.length&&(r.error="failed: "+h.join(",")),r.result={checks:i,failed:h}}else if(o==="live"){let i=pt.findChrome(nr().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=nr();a=await pt.launch({exe:l.chromePath,headless:!0,width:800,height:600});let c=function(y){return"data:text/html,"+encodeURIComponent("<title>"+y+"</title><h1>"+y+'</h1><script>console.log("'+y+'")</script>')},u=function(y){return(y||[]).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 ta(300);let p=u(a.consoleEntries(20));await a.navigate(c("PAGE-B")),await ta(300);let m=u(a.consoleEntries(20)),h="";try{await a.navigate("http://127.0.0.1:9/")}catch(y){h=String(y&&y.message||y)}await ta(400);let k=u(a.networkEntries(20));await a.navigate(c("PAGE-C")),await ta(300);let x=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(k),networkResetOnNav:x===0,consoleResetOnNav:T.indexOf("PAGE-C")>=0&&T.indexOf("PAGE-B")<0},v=Object.keys(g).filter(function(y){return!g[y]});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:k.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=eP(),a={};a.keyLetter=oe.parseKeys("a").code===i.a&&oe.parseKeys("a").flags===0,a.keyUpper=oe.parseKeys("P").flags===oe.FLAGS.shift&&oe.parseKeys("P").code===i.p,a.keyCombo=function(){let p=oe.parseKeys("cmd+shift+p");return p.code===i.p&&p.flags===(oe.FLAGS.cmd|oe.FLAGS.shift)}();let l=!1;try{oe.parseKeys("hyper+a")}catch(p){l=/不认识的修饰键/.test(p.message)}a.keyBadModifier=l;let c=!1;try{oe.parseKeys("cmd+nope")}catch(p){c=/不认识的键/.test(p.message)}a.keyBadName=c,a.charCjk=oe.charToKey("\u4E2D")===null,a.charShiftSymbol=function(){let p=oe.charToKey("!");return p&&p.shift===!0&&p.code===i.bang}(),a.regionString=function(){let p=oe.parseRegion("10,20,300,400");return p.width===300&&p.height===400}();let u=!1;try{oe.parseRegion("1,2,3")}catch(p){u=/region 格式/.test(p.message)}a.regionBad=u;let d=oe.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=oe.TMP_DIR;P.mkdirSync(p,{recursive:!0});let m=I.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 k=await oe.imageSize(m);a.imageHeader=k.width===7&&k.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 oe.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 oe.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 oe.windows({limit:10});a.windows=Array.isArray(u.windows);let d=await oe.frontmost();a.frontmost=typeof d.pid=="number";let f=await oe.cursor();a.cursor=isFinite(f.x)&&isFinite(f.y),a.click=/单击/.test(await oe.click({x:300,y:400,dry:!0})),a.drag=/拖到/.test(await oe.drag({x:300,y:400,toX:400,toY:500,dry:!0})),a.scroll=/滚动/.test(await oe.scroll({x:300,y:400,dy:50,dry:!0})),a.typeAscii=/按键码/.test(await oe.type({text:"ok",dry:!0})),a.key=/已按键/.test(await oe.key({keys:"cmd+shift+p",dry:!0}));let p=await oe.ocr({shot:c,maxChars:500});a.ocr=Zn?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 b.env.clipboard.readText()}catch{a=""}try{await b.env.clipboard.writeText(i),l=await b.env.clipboard.readText()}catch{l=""}try{await b.env.clipboard.writeText(a)}catch{}r.ok=l===i,r.result={roundtrip:l===i,len:l.length}}else if(o==="panel"){await ot();let i=Ne(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 Te(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=Me.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=Me.charsOf(i),l=Me.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 k=i[i.length-8+h];return m===k});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=pn.createStore(),a=wc(i),l=[{role:"system",content:"sys"},{role:"user",content:"\u95EE\u9898"}],c="UNIQUE_SPILL_BODY_"+Date.now();for(let k=0;k<6;k++){let x="call_"+k;l.push({role:"assistant",content:"",tool_calls:[{id:x,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+k+".js"})}}]}),l.push({role:"tool",tool_call_id:x,content:(k===0?c+`
1031
+ `).find(function(S){return S.trim()})||"").trim(),v={ok:!0,skipped:!0,ranges:[]};if(Math.max(f.lineCount,1)>=4){let S=qn(d,u),_=Nr("#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===(k.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=Nr(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 IP(),i=await LP();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:at,source:Oo,defaultModel:Bt.defaultModel,providers:(Bt.providers||[]).map(o=>({id:o.id,models:(o.models||[]).map(i=>i.id),keyFound:!!Po(o),keyless:Eo(o)&&!Vl(o),inline:!!o.apiKey,secret:!!ns[o.id],env:!!va(o)}))};else if(s.op==="saveconfig"){let o=await MS(t,s.config||uc().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 CS(s.provider||{});r.ok=!!o.ok,r.result=o,o.ok||(r.error=o.error)}else if(s.op==="fetchmodels"){let o=await Vp(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 ba(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(hn.loadConfig()),a=await Zp(t,{config:Object.assign({},hn.loadConfig(),{url:"ftp://not-a-webdav"})});r.ok=!a.ok&&JSON.stringify(hn.loadConfig())===i,r.result={errors:a.errors||[],unchanged:JSON.stringify(hn.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 RS(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"){Qp(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:at}}else if(s.op==="chat"){let o=await jo([{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 zx(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=ye.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 ye.poll(i,l.job_id,{wait_ms:0,tail_chars:200}),u=await ye.poll(i,l.job_id,{wait_ms:5e3,tail_chars:800}),d=ye.stop(i,l.job_id);ye.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=ye.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),c=ye.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),u=ye.start(i,"sleep 2",{cwd:a,timeout_ms:1e4}),d=ye.runningCount(i);ye.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=ye.start(l,"sleep 2",{cwd:a,timeout_ms:1e4}),d=await ye.poll(c,u.job_id,{wait_ms:0});ye.clearSession(l),ye.clearSession(c),r.ok=!!(u.ok&&d.status==="missing"),r.result={a:u,cross:d}}else if(o==="cancel"){let l=ye.start(i,"sleep 5",{cwd:a,timeout_ms:2e4}),c=ye.stopAll(i),u=await ye.poll(i,l.job_id,{wait_ms:0});ye.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=Zs.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=ye.start(i,"printf '\u{1F600}\u{1F600}\u{1F600}'",{cwd:a,timeout_ms:15e3}),c=await ye.poll(i,l.job_id,{wait_ms:5e3,tail_chars:3}),u=await ye.poll(i,l.job_id,{wait_ms:0,tail_chars:4});ye.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=ye.start(i,"sleep 5",{cwd:a,timeout_ms:400}),c=await ye.poll(i,l.job_id,{wait_ms:3e3});ye.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=pF(),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=mF(),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=hF(),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 Rn(s.tool||"read_file",s.args||{},s.root||L(),null,{readMax:s.readMax});r.ok=!0,r.result={allowOutside:pp(),text:String(o).slice(0,2e3)}}catch(o){r.ok=!1,r.error=o.message,r.result={allowOutside:pp()}}else if(s.op==="fsskip")r.result=await bv(),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:Yn(),files:tp()};else if(s.op==="reviewdoc"){let o=Ve(s.path,L()),i=await b.workspace.openTextDocument(b.Uri.from({scheme:"luban-before",path:o})),a=ie.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=Ve(s.path,L()),i=b.Uri.file(o),a=await b.workspace.openTextDocument(i);await b.window.showTextDocument(a,{preview:!1,viewColumn:b.ViewColumn.One}),await new Promise(p=>setTimeout(p,600));let l=async function(p){try{return await b.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=b.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:b.window.visibleTextEditors.some(function(p){return p.document.uri.scheme==="file"&&p.document.uri.fsPath===o})}}else if(s.op==="reviewdiff"){let o=Ve(s.path,L());if(!ie.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 b.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 Dp(o,{preview:!0,preserveFocus:!0}),await new Promise(c=>setTimeout(c,400)));let a=i(),l={tabs:a,diffTabs:a.length,pending:Yn(),frozenCount:dn.size,autoOpen:gc(),contextActive:!!ya(ga())};if(s.accept){let c=ie.has(o)?ie.get(o).baseline:"";await ha("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=Yn();let d="";try{d=(await b.workspace.openTextDocument(b.Uri.from({scheme:"luban-before",path:o}))).getText()}catch{d=""}l.afterAcceptBeforeHasText=d.length>0,l.afterAcceptBeforeMatches=d===c,l.frozenCount=dn.size,l.afterAcceptContext=!!ya(ga())}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 b.commands.executeCommand("workbench.view.extension.luban")}catch{}await new Promise(function(i){setTimeout(i,800)})}let o=Ne(s.to||"view")||Jt();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 Te(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 Te(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:ca.get(o)===!0,maximized:!!(a&&a.maximized),extMaximized:Xi(),inputFocused:!!(a&&a.inputFocused),inputFocusSet:i,pendingAutoDiff:$t.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 b.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=Ne(s.to||"view")||Jt();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;Fo.set(a,l),l||nS(),await new Promise(function(c){setTimeout(c,400)}),r.result={simulated:l,maximized:Xi(),pendingAutoDiff:$t.size,tracked:ca.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 Te(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(b.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 b.commands.executeCommand(c)};if(u||(await b.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:Xi(),pendingAutoDiff:$t.size};else{j=null,a.postMessage({type:"focus_probe"});let p=await Te(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:Xi(),tracked:ca.get(a)===!0,pendingAutoDiff:$t.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=Ne(s.to);if(o||(await b.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500)),o=Ne(s.to)),!o)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{o.postMessage(ma()),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=Ve(s.path,L()),i=ie.get(o);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u5F85\u5BA1\u9605\u6539\u52A8: "+s.path;else{let a=await b.workspace.openTextDocument(b.Uri.file(o)),l=iS(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 b.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:dn.size,pending:Yn()}}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 b.workspace.getConfiguration("luban").update(i,s.value,b.ConfigurationTarget.Global),r.ok=!0,r.result={key:o,value:b.workspace.getConfiguration("luban").get(i),autoOpenDiff:gc()}}catch(a){r.ok=!1,r.error=String(a&&a.stack||a).slice(0,800)}}}else if(s.op==="review_action"){let o=await ha(s.action,s.path,s.hunk||"",s.sessionId),i="";try{i=Fr(Ve(s.path,L()))}catch{i=""}r.ok=!!o.ok,o.ok||(r.error=o.error),r.result=Object.assign({},o,{remaining:Yn(),fileCount:ie.size,exists:i!==""||function(){try{return P.existsSync(Ve(s.path,L()))}catch{return!1}}(),current:i.slice(0,3e3)})}else if(s.op==="review_edit"){let o=Ve(s.path,L()),i=P.existsSync(o),a=i?P.readFileSync(o,"utf8"):"",l=s.content==null?"":String(s.content);await Qs(o,l);let c=Vn(o,a,l,!i);r.ok=!0,r.result={hunks:c,existed:i,total:Yn(),files:tp()}}else if(s.op==="openpanel")yp(t),r.ok=!0,r.result="opened";else if(s.op==="panelmsg"||s.op==="viewmsg"){s.op==="viewmsg"?(await b.commands.executeCommand("workbench.view.extension.luban"),await new Promise(i=>setTimeout(i,2500))):Ne(s.to)||(yp(t),await new Promise(i=>setTimeout(i,2500)));let o=Ne(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 ot();let o=Ne(s.to);j=null;let i=await Lr(s.reason||"headless",o),a=o?await Te(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:ie.size,hunks:Yn()}}else if(s.op==="listsessions")Ye(),r.ok=!0,r.result={current:Ce||"",openTabs:me.slice(),root:L(),sessions:ge.list(s.scope||"workspace",s.root||L()).slice(0,s.limit||50)};else if(s.op==="searchsessions"){let o=QS(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 ot();let o=Ne(s.to);j=null;let i=await Or(String(s.id||""),o),a=i.ok&&o?await Te(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:Ac(Oe())}}else if(s.op==="deletesession"){let o=await Gs(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=No(o);if(!i)try{i=Ye().load(o)}catch{i=null}if(!i)r.ok=!1,r.error=M("ext.noSuchSession",{id:o});else if(Qe.has(i.id))r.ok=!1,r.error=M("ext.forkBusy");else{let a=s.at==null||s.at===""?null:Number(s.at),l=kc(i,a,Ne(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 ot();let i=Ne(s.to);if(!i)r.ok=!1,r.error="\u6CA1\u6709\u53EF\u7528\u7684 webview";else{Ye();let a=function(d,f){let p=ge.create(L());return ge.append(p,{t:"user",text:"\u4F1A\u8BDD "+d+" \u7684\u95EE\u9898"}),ge.append(p,{t:"tool",name:"read_file",path:d+".js",ok:!0,result:"12 \u884C"}),ge.append(p,{t:"text",text:"\u4F1A\u8BDD "+d+" \u7684\u56DE\u7B54\u3002"}),f&&ge.append(p,f),ge.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=ie.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 Te(6e3,function(f){return f.kind==="session_probe"});r.ok=!!(d&&d.popupOpen&&d.sessionItems>=1),r.result={probe:d,sessions:ge.list().length},i.postMessage({type:"toggle_session_list"})}else if(o==="replay"){j=null,await Or(l.id,i);let d=await Te(8e3,function(p){return p.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let f=await Te(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=ge.create(L());ge.append(f,{t:"user",text:"\u5E2E\u6211\u770B\u770B\u80FD\u8017\u62A5\u544A"}),ge.append(f,{t:"text",text:"\u7ED3\u8BBA\uFF1A\u51B7\u5374\u5854\u529F\u8017\u504F\u9AD8\uFF08\u6807\u8BB0 "+d+"\uFF09\u3002"}),ge.save(f);let p=ge.create(L());ge.append(p,{t:"user",text:"\u80FD\u8017\u62A5\u544A\u7684\u6807\u9898\u547D\u4E2D"}),ge.append(p,{t:"text",text:"\u8FD9\u6761\u6B63\u6587\u91CC\u6CA1\u6709\u6807\u8BB0\u3002"}),ge.save(p),j=null,i.postMessage({type:"session_search_selftest",q:d});let m=await Te(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 Gs(f.id),await Gs(p.id)}else if(o==="find"){let d="FS"+Date.now().toString(36).toUpperCase(),f=ge.create(L());ge.append(f,{t:"user",text:"\u5E2E\u6211\u627E\u4E00\u4E0B\u6B63\u6587\u91CC\u7684\u6807\u8BB0\u3002"}),ge.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"}),ge.save(f),j=null,await Or(f.id,i);let p=await Te(8e3,function(h){return h.kind==="session_opened"});j=null;try{await b.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 Te(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 Gs(f.id)}else if(o==="switch"){j=null,await Or(l.id,i),await Te(8e3,function(m){return m.kind==="session_opened"}),j=null,i.postMessage({type:"session_probe"});let d=await Te(8e3,function(m){return m.kind==="session_probe"});j=null,await Or(c.id,i);let f=await Te(8e3,function(m){return m.kind==="session_opened"});j=null,i.postMessage({type:"session_probe"});let p=await Te(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 Or(l.id,i),await Te(8e3,function(f){return f.kind==="session_opened"}),j=null,i.postMessage({type:"session_selftest",case:o});let d=await Te(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 Gs(l.id),await Gs(c.id)}}else if(s.op==="tabprobe"){let o=Ne(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 Te(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:me.slice(),activeId:Ce}}}else if(s.op==="webview_probe")r.ok=!0,r.result={panel:!!Se,view:!!de,viewVisible:!!(de&&de.visible===!0),panelActive:Se&&St.get(Se.webview)||"",viewActive:de&&St.get(de.webview)||"",activeId:Ce,openTabs:me.slice()};else if(s.op==="sendmsg"){let o=Ne(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(yF.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 Te(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 ot();let i=Ne(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 Te(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:me.slice(),activeId:Ce}}}else if(s.op==="sessionpersist"){let o=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",i=await jo([{role:"user",content:o}],s.modelKey,{});Ec(s.modelKey,"chat"),Ot({t:"user",text:o}),Ot({t:"text",text:i.content}),Ot({t:"summary",text:"\u5B8C\u6210 \xB7 "+i.target.model.id});let a=mt(),l=a?ge.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?ge.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=(Oe()||{}).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 aS(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=jr.build(l,Object.assign(Pr(),s.opts||{}));r.ok=!0,r.result=Object.assign(a(c),{config:Pr(),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=pn.createStore(),u=jr.build(l,Object.assign(Pr(),{maxTurns:2,maxChars:2e4,spill:wc(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=lt(s.modelKey),c=Dn(l&&l.provider)!=="none",u=ys.hash($s("agent",L(),c),Js("agent",l)),d=ys.hash($s("agent",L(),c),Js("agent",l)),f=ys.hash($s("plan",L(),c),Js("plan",l));r.ok=u===d&&u!==f,r.result={agent:u,plan:f,stable:u===d,differsByMode:u!==f}}else if(o==="session"){let l=ms(i,s.modelKey,Object.assign({},s.opts||{},{resolveImage:hs(Oe())}));r.ok=!0,r.result=Object.assign(a(l),{id:Ce||"",items:i.length})}else if(o==="last")r.ok=!!kt,r.result=kt||{};else if(o==="live"){let l=s.prompt||"\u53EA\u56DE\u4E00\u4E2A\u5B57\uFF1A\u597D",c=ms(i,s.modelKey,{resolveImage:hs(Oe())}),u={text:""},d=await xs(l,{root:L(),modelKey:s.modelKey,history:c.messages,onUserTurn:function(k){u.text=k}}),f=i.concat([{t:"user",text:l,ctx:u.text},{t:s.mode==="plan"?"plan":"text",text:d.text}]),p=ms(f,s.modelKey,{resolveImage:hs(Oe())});kt=null;let m=await xs(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=kt&&kt.roles||[];r.ok=!!(kt&&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:_o.slice(-2),request:kt}}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 ot();let a=Ne(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 Te(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=xe.saveImage(a,i),u=xe.ATTACH_DIR+I.sep+a,d=c?I.join(u,c.file):"";l.save=!!c&&c.mime==="image/png"&&c.bytes>0,l.file=!!d&&P.existsSync(d),l.readBack=!!c&&xe.readDataUrl(a,c)===i,l.preview=!!c&&xe.readPreview(a,c.file).ok===!0,l.badSession=xe.saveImage("../evil",i)===null,l.svg=xe.saveImage(a,"data:image/svg+xml;base64,PHN2Zy8+")===null,l.oversize=xe.saveImage(a,"data:image/png;base64,"+"A".repeat(Math.ceil(xe.MAX_BYTES*4/3)+1e3))===null;let f=[];for(let q=0;q<5;q++)f.push({file:"a"+q+".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=Un.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(q){return q.file.indexOf("a")===0}),l.clampDrop=!Un.clampItem({t:"user",text:"hi",images:[{file:"../x.png",mime:"image/png",bytes:1}]}).images,l.textOnly=xe.toContent("hi",[])==="hi";let m=xe.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"}],x=jr.build(h,Object.assign(Pr(),{enabled:!0,resolveImage:function(){return i}})).messages.filter(function(q){return q.role==="user"});l.memImg=x.length===1&&Array.isArray(x[0].content)&&x[0].content[0].type==="text"&&x[0].content.some(function(q){return q.type==="image_url"});let g=jr.build(h,Object.assign(Pr(),{enabled:!0,resolveImage:function(){return""}})).messages.filter(function(q){return q.role==="user"});l.memDegrade=g.length===1&&typeof g[0].content=="string";let v=lt(s.modelKey),y=Dn(v&&v.provider)!=="none";l.prefixStable=ys.hash($s("agent",L(),y),Js("agent",v))===ys.hash($s("agent",L(),y),Js("agent",v));let S="imgtest-orphan-"+Date.now().toString(36),_=I.join(xe.ATTACH_DIR,S);try{P.mkdirSync(_,{recursive:!0})}catch{}let C=[];try{C=P.readdirSync(xe.ATTACH_DIR,{withFileTypes:!0})}catch{C=[]}let A=new Set;for(let q of C)q.isDirectory()&&q.name!==S&&A.add(q.name);let D=xe.sweepOrphans(A);l.sweep=D.removed===1&&!P.existsSync(_);let G=xe.removeSession(a);l.cleanup=G.removed>=1&&!P.existsSync(u)&&(!c||xe.readDataUrl(a,c)==="");let H=Object.keys(l).filter(function(q){return!l[q]});r.ok=H.length===0,H.length&&(r.error="failed: "+H.join(",")),r.result=l}else if(o==="live"){await ot();let a=lt(s.modelKey),l=a&&a.model&&a.model.vision===!0?a:Wn().find(function(u){return u.model.vision===!0}),c=Ne(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 Lr("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 Te(s.waitMs||9e4,function(C){return C.kind==="dome_done"||C.kind==="dome_error"||C.kind==="plan_done"}),f=ue.get(u.id)||u,p=f&&f.items||[],m=p.slice().reverse().find(function(C){return C&&C.t==="user"}),h=xe.ATTACH_DIR+I.sep+u.id,k=[];try{k=P.readdirSync(h)}catch{k=[]}let T=ms(p,l.key,{resolveImage:hs(f)}).messages.filter(function(C){return C.role==="user"}),g=T.length?T[T.length-1]:null,v=kt&&kt.heads||[],y=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:k.length>=1,snapshot:y.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 Gs(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=pt.encodeFrame(1,Buffer.from(a,"utf8")),c=pt.decodeFrame(l);i.frameRoundtrip=!!c&&c.opcode===1&&c.payload.toString("utf8")===a;let u=pt.encodeFrame(1,Buffer.alloc(300,97)),d=pt.decodeFrame(u);i.midLength=!!d&&d.payload.length===300;let f=pt.encodeFrame(1,Buffer.alloc(7e4,98)),p=pt.decodeFrame(f);i.bigLength=!!p&&p.payload.length===7e4,i.masked=!!(l[1]&128),i.shortFrame=pt.decodeFrame(Buffer.from([129]))===null,i.urlHttps=pt.normalizeUrl("example.com")==="https://example.com",i.urlLocalhost=pt.normalizeUrl("localhost:3000/x")==="http://localhost:3000/x",i.urlData=pt.normalizeUrl("data:text/html,hi")==="data:text/html,hi";let m=!1;try{pt.normalizeUrl("javascript:alert(1)")}catch{m=!0}i.urlBlocked=m,i.ax=pt.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 pt.findChrome("definitely-not-here.exe").path=="string";let h=Object.keys(i).filter(function(k){return!i[k]});r.ok=h.length===0,h.length&&(r.error="failed: "+h.join(",")),r.result={checks:i,failed:h}}else if(o==="live"){let i=pt.findChrome(sr().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=sr();a=await pt.launch({exe:l.chromePath,headless:!0,width:800,height:600});let c=function(y){return"data:text/html,"+encodeURIComponent("<title>"+y+"</title><h1>"+y+'</h1><script>console.log("'+y+'")</script>')},u=function(y){return(y||[]).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 ta(300);let p=u(a.consoleEntries(20));await a.navigate(c("PAGE-B")),await ta(300);let m=u(a.consoleEntries(20)),h="";try{await a.navigate("http://127.0.0.1:9/")}catch(y){h=String(y&&y.message||y)}await ta(400);let k=u(a.networkEntries(20));await a.navigate(c("PAGE-C")),await ta(300);let x=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(k),networkResetOnNav:x===0,consoleResetOnNav:T.indexOf("PAGE-C")>=0&&T.indexOf("PAGE-B")<0},v=Object.keys(g).filter(function(y){return!g[y]});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:k.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=eP(),a={};a.keyLetter=oe.parseKeys("a").code===i.a&&oe.parseKeys("a").flags===0,a.keyUpper=oe.parseKeys("P").flags===oe.FLAGS.shift&&oe.parseKeys("P").code===i.p,a.keyCombo=function(){let p=oe.parseKeys("cmd+shift+p");return p.code===i.p&&p.flags===(oe.FLAGS.cmd|oe.FLAGS.shift)}();let l=!1;try{oe.parseKeys("hyper+a")}catch(p){l=/不认识的修饰键/.test(p.message)}a.keyBadModifier=l;let c=!1;try{oe.parseKeys("cmd+nope")}catch(p){c=/不认识的键/.test(p.message)}a.keyBadName=c,a.charCjk=oe.charToKey("\u4E2D")===null,a.charShiftSymbol=function(){let p=oe.charToKey("!");return p&&p.shift===!0&&p.code===i.bang}(),a.regionString=function(){let p=oe.parseRegion("10,20,300,400");return p.width===300&&p.height===400}();let u=!1;try{oe.parseRegion("1,2,3")}catch(p){u=/region 格式/.test(p.message)}a.regionBad=u;let d=oe.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=oe.TMP_DIR;P.mkdirSync(p,{recursive:!0});let m=I.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 k=await oe.imageSize(m);a.imageHeader=k.width===7&&k.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 oe.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 oe.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 oe.windows({limit:10});a.windows=Array.isArray(u.windows);let d=await oe.frontmost();a.frontmost=typeof d.pid=="number";let f=await oe.cursor();a.cursor=isFinite(f.x)&&isFinite(f.y),a.click=/单击/.test(await oe.click({x:300,y:400,dry:!0})),a.drag=/拖到/.test(await oe.drag({x:300,y:400,toX:400,toY:500,dry:!0})),a.scroll=/滚动/.test(await oe.scroll({x:300,y:400,dy:50,dry:!0})),a.typeAscii=/按键码/.test(await oe.type({text:"ok",dry:!0})),a.key=/已按键/.test(await oe.key({keys:"cmd+shift+p",dry:!0}));let p=await oe.ocr({shot:c,maxChars:500});a.ocr=Qn?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 b.env.clipboard.readText()}catch{a=""}try{await b.env.clipboard.writeText(i),l=await b.env.clipboard.readText()}catch{l=""}try{await b.env.clipboard.writeText(a)}catch{}r.ok=l===i,r.result={roundtrip:l===i,len:l.length}}else if(o==="panel"){await ot();let i=Ne(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 Te(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=Me.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=Me.charsOf(i),l=Me.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 k=i[i.length-8+h];return m===k});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=pn.createStore(),a=wc(i),l=[{role:"system",content:"sys"},{role:"user",content:"\u95EE\u9898"}],c="UNIQUE_SPILL_BODY_"+Date.now();for(let k=0;k<6;k++){let x="call_"+k;l.push({role:"assistant",content:"",tool_calls:[{id:x,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+k+".js"})}}]}),l.push({role:"tool",tool_call_id:x,content:(k===0?c+`
1032
1032
  `:"")+"r".repeat(3e3)})}let u=Me.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=Me.fingerprint("read_file",{b:1,a:2}),a=Me.fingerprint("read_file",{a:2,b:1}),l=Me.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>=Co.repeatLimit,r.result={stableOrder:i===a,differsByArgs:i!==l,hits:c,limit:Co.repeatLimit}}else if(o==="summaryDigest"){let i=Hp([{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=cc([{role:"user",content:`\u770B\u8FD9\u91CC
1033
1033
  \u5206\u6279\u5904\u7406\uFF08\u5171 6 \u6279\uFF09\uFF1A
1034
- 1. src/ \u2192 dir="src"`}]),l=!cc([{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=ln.profile(d,{mode:i}),p=f.compact?Kl:Wl,m=f.compact?ln.compactTools($s,f.tier):$s,h=ln.fixedChars(p,m),k=Math.floor(d*Co.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*Me.DEFAULTS.ratio),highTokens:k,freeTokens:k-Math.ceil(h*Me.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=Wl.length+Me.charsOfTools($s),a=["small","tiny"].map(function(l){let c=Me.charsOfTools(ln.compactTools($s,l)),u=Kl.length+c;return{tier:l,toolsChars:c,systemChars:Kl.length,chars:u,tokens:Math.ceil(u*Me.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:Me.charsOfTools($s),systemChars:Wl.length,chars:i,tokens:Math.ceil(i*Me.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 D="call_s"+A;i.push({role:"assistant",content:"",tool_calls:[{id:D,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+A+".js"})}}]}),i.push({role:"tool",tool_call_id:D,content:"r".repeat(3e3)})}let a={role:"user",content:"\u6700\u540E\u4E00\u6B21\u63D0\u95EE"};i.push(a);let l=Me.charsOf(i),c=6e3,u=ln.squeeze(i,c),d=[];for(let A of u.messages)for(let D of A.tool_calls||[])d.push(String(D.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],k=u.messages.some(function(A){return A.role==="assistant"&&!A.tool_calls&&A.content}),x=[{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 D="call_u"+A;x.push({role:"assistant",content:"",tool_calls:[{id:D,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"u"+A+".js"})}}]}),x.push({role:"tool",tool_call_id:D,content:"r".repeat(3e3)})}let T=ln.squeeze(x,c,{keepRecent:2}),g=[];for(let A of T.messages)for(let D of A.tool_calls||[])g.push(String(D.id));let v=T.messages.filter(function(A){return A.role==="tool"}).map(function(A){return String(A.tool_call_id)}),y=g.length===v.length&&g.every(function(A){return v.indexOf(A)>=0}),S=T.messages.some(function(A){return A===x[1]}),_=g.indexOf("call_u19")>=0&&g.indexOf("call_u0")<0,C=T.ok&&T.chars<=c&&y&&S&&_&&T.dropped>0;r.ok=u.ok&&u.chars<=c&&p&&m&&h&&k&&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:y,userKept:S,recentKept:_},summary:String(u.summary||"").slice(0,120)}}else if(o==="limits"){let i=lt(s.modelKey),a=Wp(),l=i&&i.model&&Number(i.model.maxInputTokens)>0?Number(i.model.maxInputTokens):65536;r.ok=!0,r.result={limits:a,window:l,profile:ln.profile(l,{mode:Kp()}),highTokens:Math.floor(l*a.windowRatio),lowTokens:Math.floor(l*a.lowRatio),ratio:Me.DEFAULTS.ratio}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="autocontext"){let o=String(s.case||"block"),i=Mp();if(o==="block"){let a;if(s.text!=null){let c=String(s.text).split(`
1034
+ 1. src/ \u2192 dir="src"`}]),l=!cc([{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=ln.profile(d,{mode:i}),p=f.compact?Kl:Wl,m=f.compact?ln.compactTools(Xs,f.tier):Xs,h=ln.fixedChars(p,m),k=Math.floor(d*Co.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*Me.DEFAULTS.ratio),highTokens:k,freeTokens:k-Math.ceil(h*Me.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=Wl.length+Me.charsOfTools(Xs),a=["small","tiny"].map(function(l){let c=Me.charsOfTools(ln.compactTools(Xs,l)),u=Kl.length+c;return{tier:l,toolsChars:c,systemChars:Kl.length,chars:u,tokens:Math.ceil(u*Me.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:Me.charsOfTools(Xs),systemChars:Wl.length,chars:i,tokens:Math.ceil(i*Me.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 D="call_s"+A;i.push({role:"assistant",content:"",tool_calls:[{id:D,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"f"+A+".js"})}}]}),i.push({role:"tool",tool_call_id:D,content:"r".repeat(3e3)})}let a={role:"user",content:"\u6700\u540E\u4E00\u6B21\u63D0\u95EE"};i.push(a);let l=Me.charsOf(i),c=6e3,u=ln.squeeze(i,c),d=[];for(let A of u.messages)for(let D of A.tool_calls||[])d.push(String(D.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],k=u.messages.some(function(A){return A.role==="assistant"&&!A.tool_calls&&A.content}),x=[{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 D="call_u"+A;x.push({role:"assistant",content:"",tool_calls:[{id:D,type:"function",function:{name:"read_file",arguments:JSON.stringify({path:"u"+A+".js"})}}]}),x.push({role:"tool",tool_call_id:D,content:"r".repeat(3e3)})}let T=ln.squeeze(x,c,{keepRecent:2}),g=[];for(let A of T.messages)for(let D of A.tool_calls||[])g.push(String(D.id));let v=T.messages.filter(function(A){return A.role==="tool"}).map(function(A){return String(A.tool_call_id)}),y=g.length===v.length&&g.every(function(A){return v.indexOf(A)>=0}),S=T.messages.some(function(A){return A===x[1]}),_=g.indexOf("call_u19")>=0&&g.indexOf("call_u0")<0,C=T.ok&&T.chars<=c&&y&&S&&_&&T.dropped>0;r.ok=u.ok&&u.chars<=c&&p&&m&&h&&k&&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:y,userKept:S,recentKept:_},summary:String(u.summary||"").slice(0,120)}}else if(o==="limits"){let i=lt(s.modelKey),a=Wp(),l=i&&i.model&&Number(i.model.maxInputTokens)>0?Number(i.model.maxInputTokens):65536;r.ok=!0,r.result={limits:a,window:l,profile:ln.profile(l,{mode:Kp()}),highTokens:Math.floor(l*a.windowRatio),lowTokens:Math.floor(l*a.lowRatio),ratio:Me.DEFAULTS.ratio}}else r.ok=!1,r.error="\u672A\u77E5 case: "+o}else if(s.op==="autocontext"){let o=String(s.case||"block"),i=Mp();if(o==="block"){let a;if(s.text!=null){let c=String(s.text).split(`
1035
1035
  `),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 k=rt.windowRange({lineCount:u,cursorLine:d,windowLines:s.windowLines});k.whole?(p=1,m=u):(f=c.slice(k.start-1,k.end).join(`
1036
- `),p=k.start,m=k.end,h=!0)}a=rt.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=Cp([],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:rt.windowRange({lineCount:1200,cursorLine:1,windowLines:200}),middle:rt.windowRange({lineCount:1200,cursorLine:600,windowLines:200}),tail:rt.windowRange({lineCount:1200,cursorLine:1200,windowLines:200}),small:rt.windowRange({lineCount:105,cursorLine:50,windowLines:200}),custom:rt.windowRange({lineCount:1200,cursorLine:600,windowLines:100})}):o==="skip"?(r.ok=!0,r.result={binary:rt.shouldSkip({scheme:"file",head:"a\0b"}),virtual:rt.shouldSkip({scheme:"git"})}):o==="session"?(r.ok=!0,r.result={noSession:rt.sessionOwns(null,"a.js",!1),selection:rt.sessionOwns(new Set,"a.js",!0),owned:rt.sessionOwns(new Set(["a.js"]),"a.js",!1),other:rt.sessionOwns(new Set(["b.js"]),"a.js",!1),arrayOwned:rt.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=Bx();r.ok=!0,r.result={files:ie.size,block:i,chars:i.length}}else if(o==="stub"){let i=Array.isArray(s.records)?s.records:[],a=mx.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=Vs.stats(i);else if(o==="reset")Vs.reset(i),r.ok=!0,r.result={reset:!0};else{let a=Vs.search(i,s.query||"boostBudget",{maxFiles:XS(),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});w("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:Vs.format(a),dir:l||"",underPrefix:c})}}else if(s.op==="fim"){let o=Jl.buildPrompt({path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0,prefixLines:s.prefixLines,suffixLines:s.suffixLines}),i=Jl.trimCompletion(s.completion||"",o.suffix),a=lt(s.modelKey);if(s.case==="request"){let l=await Cx({modelKey:s.modelKey,path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0});r.ok=!0,r.result={base:Yl(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:Yl(a&&a.provider),enabled:Pc().enabled,prompt:o.prompt,suffix:o.suffix,chars:o.chars,completion:i}}else if(s.op==="cache"){let o=Math.max(1,Math.min(vx,Number(s.count)||20)),i=_o.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:(Bt.providers||[]).map(function(m){return{id:m.id,on:m.streamUsage!==!1&&!Vf[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(I.join(tt.tmpdir(),"luban-usage-")),a=new Date(2026,9,27,12,0,0).getTime(),l=function(p,m,h){He.append(i,He.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(I.join(i,He.monthOf(a)+".jsonl"),`{oops
1037
- `);let c=He.rangeOf("7d",a),u=He.aggregate(He.read(i,c.from,c.to).rows,c),d=He.rangeOf("all",a),f=He.aggregate(He.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=He.rangeOf("today",i),l=He.rangeOf("7d",i),c=He.rangeOf("30d",i),u=He.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&&He.rangeOf("nope",i).key==="7d",r.result={today:a,d7:l,d30:c,all:u,fallback:He.rangeOf("nope",i).key}}else if(o==="ui"){s.range&&He.RANGES.some(function(l){return l.key===String(s.range)})&&(En=String(s.range)),KS(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:En,dir:er}}else{let i=He.rangeOf(s.range||En),a=He.read(er,i.from,i.to),l=He.aggregate(a.rows,i);r.ok=!0,r.result={dir:er,range:i,files:a.files,badLines:a.bad,record:Bp(),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 b.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=b.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=Ys.check(o);r.ok=!0,r.result={cmd:o,verdict:i.ok?"allow":"deny",reason:i.reason||"",segment:i.segment||"",strict:hc()}}else if(s.op==="mcp"){try{await we.ready()}catch{}let o=we.status();r.ok=!0,r.result={configPaths:o.configPaths,configErrors:o.configErrors,servers:o.servers,tools:o.tools,agentTools:we.toolDefs({}).map(function(i){return i.function.name}),planTools:we.toolDefs({planOnly:!0}).map(function(i){return i.function.name}),promptBlock:we.promptBlock()}}else if(s.op==="mcp_call"){let o=String(s.name||"");if(!o&&s.server&&s.tool){let i=we.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 we.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"){we.configure({root:s.root||L(),version:Qn,rec:w});let o=await we.reload();r.ok=!0,r.result={servers:o.servers,tools:o.tools}}else if(s.op==="skills"){let o=s.root||L();Rt.configure({root:o,rec:w});let i=Rt.refresh(o);r.ok=!0,r.result={count:i.length,dirs:Rt.status().dirs,skills:Rt.list(),blockHead:Rt.block().slice(0,1200)}}else if(s.op==="skill_read"){let o=Rt.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();Gt.configure(Object.assign({root:o,rec:w},kS()));let i=Gt.refresh(o),a=Gt.block();r.ok=!0,r.result={count:i.length,enabled:Gt.status().enabled,dirs:Gt.status().dirs,rules:Gt.list(),blockChars:a.length,blockHead:a.slice(0,1200),matched:Gt.matched(s.files||[]).slice(0,1200)}}else if(s.op==="rule_read"){let o=Gt.read(s.name);r.ok=!0,r.result={chars:o.length,head:o.slice(0,1200),text:o}}else{let o=await b.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}w("remote_cmd",{op:r.op,ok:r.ok,error:r.error}),wp();try{P.writeFileSync(n,JSON.stringify(r,null,2))}catch{}},1500)}async function bF(){for(let t of gn.values())try{clearTimeout(t)}catch{}gn.clear();for(let t of ue.values())try{mt(t)}catch{}try{await Ye().flush()}catch{}for(let t of Qe.values())try{t.cts.cancel()}catch{}try{let t=ye.stopEverything();t&&t.stopped&&w("async_cmd_stop_all",{stopped:t.stopped,reason:"deactivate"})}catch{}try{wp()}catch{}try{mn.offline("\u7A97\u53E3\u5DF2\u5173\u95ED")}catch{}if(Xs){try{clearTimeout(Xs)}catch{}Xs=null}try{we.stop()}catch{}try{await KP("deactivate")}catch{}}kv.exports={activate:fF,deactivate:bF,__runAgent:ks,__applyTlsMaxVersion:np,__tlsMaxVersionSetting:dS,__tlsBootMaxVersion:function(){return uS},__execTool:Rn,__plugins:We,__applyPluginSettings:Ql,__pluginsPayload:dc,__themeStyleTag:jp,__themeTokens:Pp,__pushTheme:Np,__onPluginsConfigChanged:Jx,__webFetch:Sp,__toolsFor:Gs,__allModels:Wn,__resolveModel:lt,__apiKeyFor:Vl,__requestKeyFor:Po,__isKeylessProvider:Eo,__defaultModelKey:Lo,__loadConfig:Sc,__validateConfig:TS,__readonlyEnforced:ws,__capSubagentText:lc,__explorePrompt:ia,__exploreToolList:ac,__exploreSystem:function(t,e){return Js("explore",t,e)},__subagentCaveat:Er,__subagentMinutes:bS,__exploreLimits:Ir,__usageSummary:wa,__expandReferences:Nr,__selectionTokenForCurrent:Dx,__fsSkipSelftest:bv,__readGeneral:Gp,__saveGeneral:_S,__webdavPayload:ba,__saveWebdav:Zp,__webdavRuntime:Do,__webdavGuard:Ma,__testWebdav:jS,__webdavTransfer:up,__webdavRestoreOpts:NS,__webdavProviderMergeText:PS,__reloadProvidersFromDisk:Xp,__webdavNeedsReload:FS,__webdavRemoteList:IS,__webdavRemoteProviders:LS,__webdavMachineList:DS,__fetchProviderModels:Vp,__parseModelMetadata:AS,__limitsFromContext:Cc,__sessionInWorkspace:To,__restoreOpenTabs:um,__persistOpenTabs:la,__refreshTabsForWorkspace:mv,__openTabsIds:function(){return me.slice()},__tabsRoot:function(){return em},__activeId:function(){return Ce},__openTabsKeyFor:cm,__webdavSelfCheck:RS,__wireWebview:dm,__wireHub:qS,__sessions:function(){return ue},__turns:function(){return Qe},__sessOf:No,__deleteTurnRange:dv,__lmProvider:gx,__registerLmProvider:wv,__gitCleanState:tm,__recordEdit:Xn,__reviewKeys:function(){return Array.from(ie.keys())},__reviewAutoKeepDefault:$S}});var fm=require("path"),Ov=require("fs"),kF=process.stdout.write.bind(process.stdout),pm="";function nt(t){let e="[luban-acp] "+t+`
1036
+ `),p=k.start,m=k.end,h=!0)}a=rt.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=Cp([],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:rt.windowRange({lineCount:1200,cursorLine:1,windowLines:200}),middle:rt.windowRange({lineCount:1200,cursorLine:600,windowLines:200}),tail:rt.windowRange({lineCount:1200,cursorLine:1200,windowLines:200}),small:rt.windowRange({lineCount:105,cursorLine:50,windowLines:200}),custom:rt.windowRange({lineCount:1200,cursorLine:600,windowLines:100})}):o==="skip"?(r.ok=!0,r.result={binary:rt.shouldSkip({scheme:"file",head:"a\0b"}),virtual:rt.shouldSkip({scheme:"git"})}):o==="session"?(r.ok=!0,r.result={noSession:rt.sessionOwns(null,"a.js",!1),selection:rt.sessionOwns(new Set,"a.js",!0),owned:rt.sessionOwns(new Set(["a.js"]),"a.js",!1),other:rt.sessionOwns(new Set(["b.js"]),"a.js",!1),arrayOwned:rt.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=Bx();r.ok=!0,r.result={files:ie.size,block:i,chars:i.length}}else if(o==="stub"){let i=Array.isArray(s.records)?s.records:[],a=mx.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=Ys.stats(i);else if(o==="reset")Ys.reset(i),r.ok=!0,r.result={reset:!0};else{let a=Ys.search(i,s.query||"boostBudget",{maxFiles:XS(),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});w("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:Ys.format(a),dir:l||"",underPrefix:c})}}else if(s.op==="fim"){let o=Jl.buildPrompt({path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0,prefixLines:s.prefixLines,suffixLines:s.suffixLines}),i=Jl.trimCompletion(s.completion||"",o.suffix),a=lt(s.modelKey);if(s.case==="request"){let l=await Cx({modelKey:s.modelKey,path:s.path||"src/demo.js",text:s.text||"",offset:Number(s.offset)||0});r.ok=!0,r.result={base:Yl(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:Yl(a&&a.provider),enabled:Pc().enabled,prompt:o.prompt,suffix:o.suffix,chars:o.chars,completion:i}}else if(s.op==="cache"){let o=Math.max(1,Math.min(vx,Number(s.count)||20)),i=_o.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:(Bt.providers||[]).map(function(m){return{id:m.id,on:m.streamUsage!==!1&&!Vf[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(I.join(tt.tmpdir(),"luban-usage-")),a=new Date(2026,9,27,12,0,0).getTime(),l=function(p,m,h){He.append(i,He.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(I.join(i,He.monthOf(a)+".jsonl"),`{oops
1037
+ `);let c=He.rangeOf("7d",a),u=He.aggregate(He.read(i,c.from,c.to).rows,c),d=He.rangeOf("all",a),f=He.aggregate(He.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=He.rangeOf("today",i),l=He.rangeOf("7d",i),c=He.rangeOf("30d",i),u=He.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&&He.rangeOf("nope",i).key==="7d",r.result={today:a,d7:l,d30:c,all:u,fallback:He.rangeOf("nope",i).key}}else if(o==="ui"){s.range&&He.RANGES.some(function(l){return l.key===String(s.range)})&&(En=String(s.range)),KS(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:En,dir:tr}}else{let i=He.rangeOf(s.range||En),a=He.read(tr,i.from,i.to),l=He.aggregate(a.rows,i);r.ok=!0,r.result={dir:tr,range:i,files:a.files,badLines:a.bad,record:Bp(),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 b.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=b.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=Zs.check(o);r.ok=!0,r.result={cmd:o,verdict:i.ok?"allow":"deny",reason:i.reason||"",segment:i.segment||"",strict:hc()}}else if(s.op==="mcp"){try{await we.ready()}catch{}let o=we.status();r.ok=!0,r.result={configPaths:o.configPaths,configErrors:o.configErrors,servers:o.servers,tools:o.tools,agentTools:we.toolDefs({}).map(function(i){return i.function.name}),planTools:we.toolDefs({planOnly:!0}).map(function(i){return i.function.name}),promptBlock:we.promptBlock()}}else if(s.op==="mcp_call"){let o=String(s.name||"");if(!o&&s.server&&s.tool){let i=we.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 we.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"){we.configure({root:s.root||L(),version:es,rec:w});let o=await we.reload();r.ok=!0,r.result={servers:o.servers,tools:o.tools}}else if(s.op==="skills"){let o=s.root||L();Rt.configure({root:o,rec:w});let i=Rt.refresh(o);r.ok=!0,r.result={count:i.length,dirs:Rt.status().dirs,skills:Rt.list(),blockHead:Rt.block().slice(0,1200)}}else if(s.op==="skill_read"){let o=Rt.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();Gt.configure(Object.assign({root:o,rec:w},kS()));let i=Gt.refresh(o),a=Gt.block();r.ok=!0,r.result={count:i.length,enabled:Gt.status().enabled,dirs:Gt.status().dirs,rules:Gt.list(),blockChars:a.length,blockHead:a.slice(0,1200),matched:Gt.matched(s.files||[]).slice(0,1200)}}else if(s.op==="rule_read"){let o=Gt.read(s.name);r.ok=!0,r.result={chars:o.length,head:o.slice(0,1200),text:o}}else{let o=await b.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}w("remote_cmd",{op:r.op,ok:r.ok,error:r.error}),wp();try{P.writeFileSync(n,JSON.stringify(r,null,2))}catch{}},1500)}async function bF(){for(let t of gn.values())try{clearTimeout(t)}catch{}gn.clear();for(let t of ue.values())try{mt(t)}catch{}try{await Ye().flush()}catch{}for(let t of Qe.values())try{t.cts.cancel()}catch{}try{let t=ye.stopEverything();t&&t.stopped&&w("async_cmd_stop_all",{stopped:t.stopped,reason:"deactivate"})}catch{}try{wp()}catch{}try{mn.offline("\u7A97\u53E3\u5DF2\u5173\u95ED")}catch{}if(Vs){try{clearTimeout(Vs)}catch{}Vs=null}try{we.stop()}catch{}try{await KP("deactivate")}catch{}}kv.exports={activate:fF,deactivate:bF,__runAgent:xs,__applyTlsMaxVersion:np,__tlsMaxVersionSetting:dS,__tlsBootMaxVersion:function(){return uS},__execTool:Rn,__plugins:We,__applyPluginSettings:Ql,__pluginsPayload:dc,__themeStyleTag:jp,__themeTokens:Pp,__pushTheme:Np,__onPluginsConfigChanged:Jx,__webFetch:Sp,__toolsFor:Js,__allModels:Wn,__resolveModel:lt,__apiKeyFor:Vl,__requestKeyFor:Po,__isKeylessProvider:Eo,__defaultModelKey:Lo,__loadConfig:Sc,__validateConfig:TS,__readonlyEnforced:bs,__capSubagentText:lc,__explorePrompt:ia,__exploreToolList:ac,__exploreSystem:function(t,e){return $s("explore",t,e)},__subagentCaveat:Er,__subagentMinutes:bS,__exploreLimits:Ir,__usageSummary:wa,__expandReferences:Nr,__selectionTokenForCurrent:Dx,__fsSkipSelftest:bv,__readGeneral:Gp,__saveGeneral:_S,__webdavPayload:ba,__saveWebdav:Zp,__webdavRuntime:Do,__webdavGuard:Ma,__testWebdav:jS,__webdavTransfer:up,__webdavRestoreOpts:NS,__webdavProviderMergeText:PS,__reloadProvidersFromDisk:Xp,__webdavNeedsReload:FS,__webdavRemoteList:IS,__webdavRemoteProviders:LS,__webdavMachineList:DS,__fetchProviderModels:Vp,__parseModelMetadata:AS,__limitsFromContext:Cc,__sessionInWorkspace:To,__restoreOpenTabs:um,__persistOpenTabs:la,__refreshTabsForWorkspace:mv,__openTabsIds:function(){return me.slice()},__tabsRoot:function(){return em},__activeId:function(){return Ce},__openTabsKeyFor:cm,__webdavSelfCheck:RS,__wireWebview:dm,__wireHub:qS,__sessions:function(){return ue},__turns:function(){return Qe},__sessOf:No,__deleteTurnRange:dv,__lmProvider:gx,__registerLmProvider:wv,__gitCleanState:tm,__recordEdit:Vn,__reviewKeys:function(){return Array.from(ie.keys())},__reviewAutoKeepDefault:$S}});var fm=require("path"),Ov=require("fs"),kF=process.stdout.write.bind(process.stdout),pm="";function nt(t){let e="[luban-acp] "+t+`
1038
1038
  `;try{process.stderr.write(e)}catch{}if(pm)try{Ov.appendFileSync(pm,e)}catch{}}function mm(t){try{return JSON.stringify(t)}catch{return String(t)}}["log","info","debug","warn","trace"].forEach(function(t){console[t]=function(){nt(Array.prototype.map.call(arguments,function(e){return typeof e=="string"?e:mm(e)}).join(" "))}});function xF(t){let e={root:"",model:"",log:"",mode:"agent",plugins:!1,help:!1,version:!1};for(let n=0;n<t.length;n++){let s=t[n],r=function(){return n++,t[n]||""};s==="--root"||s==="-C"?e.root=r():s==="--model"||s==="-m"?e.model=r():s==="--log"?e.log=r():s==="--read-only"||s==="--plan"?e.mode="plan":s==="--plugins"?e.plugins=!0:s==="--no-plugins"?e.plugins=!1:s==="--help"||s==="-h"?e.help=!0:s==="--version"||s==="-v"?e.version=!0:nt("\u5FFD\u7565\u672A\u77E5\u53C2\u6570 "+s)}return e}var Pn=xF(process.argv.slice(2));if(Pn.version){let t="unknown";try{t=ja().version||t}catch{}process.stderr.write("luban-acp "+t+`
1039
1039
  `),process.exit(0)}Pn.help&&(process.stderr.write(["luban-acp \u2014 Agent Client Protocol \u5165\u53E3\uFF08stdio / JSON-RPC\uFF09",""," --root <dir> \u542F\u52A8\u65F6\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF08session/new \u7684 cwd \u4F1A\u8986\u76D6\u5B83\uFF09"," --model <key> \u9ED8\u8BA4\u6A21\u578B\uFF08key \u89C1 luban --list-models\uFF09"," --read-only plan \u6A21\u5F0F\uFF1A\u53EA\u8BFB\uFF0C\u5199\u5DE5\u5177\u4E0E\u5199\u547D\u4EE4\u90FD\u88AB\u95F8\u95E8\u62E6\u4E0B"," --plugins \u52A0\u8F7D\u672C\u673A\u63D2\u4EF6\uFF08<root>/.luban/plugins \u4E0E ~/.luban/plugins\uFF09\uFF1B\u9ED8\u8BA4\u4E0D\u52A0\u8F7D"," \u975E\u4EA4\u4E92\u573A\u666F\uFF1A\u5DF2\u4FE1\u4EFB\u7684\u63D2\u4EF6\u7167\u5E38\u52A0\u8F7D\uFF0C\u672A\u4FE1\u4EFB\u7684\u9759\u9ED8\u8DF3\u8FC7"," --no-plugins \u663E\u5F0F\u4E0D\u52A0\u8F7D\u63D2\u4EF6\uFF08\u9ED8\u8BA4\u5373\u5982\u6B64\uFF09"," --log <file> \u628A\u65E5\u5FD7\u540C\u65F6\u8FFD\u52A0\u5230\u8FD9\u4E2A\u6587\u4EF6\uFF08\u9ED8\u8BA4\u53EA\u8D70 stderr\uFF09"," --version / --help"].join(`
1040
1040
  `)+`