@burtson-labs/bandit-stealth-cli 1.7.236 → 1.7.237

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 (2) hide show
  1. package/dist/cli.js +2 -2
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -336,7 +336,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
336
336
  `}t(bfr,"serializeMessage")});var Rlt=Ot(sE=>{"use strict";var Flt=sE&&sE.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(sE,"__esModule",{value:!0});sE.StdioClientTransport=sE.DEFAULT_INHERITED_ENV_VARS=void 0;sE.getDefaultEnvironment=Mlt;var Sfr=Flt(Alt()),lNe=Flt(require("node:process")),Tfr=require("node:stream"),Olt=oNe();sE.DEFAULT_INHERITED_ENV_VARS=lNe.default.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function Mlt(){let a={};for(let s of sE.DEFAULT_INHERITED_ENV_VARS){let c=lNe.default.env[s];c!==void 0&&(c.startsWith("()")||(a[s]=c))}return a}t(Mlt,"getDefaultEnvironment");var cNe=class{static{t(this,"StdioClientTransport")}constructor(s){this._readBuffer=new Olt.ReadBuffer,this._stderrStream=null,this._serverParams=s,(s.stderr==="pipe"||s.stderr==="overlapped")&&(this._stderrStream=new Tfr.PassThrough)}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((s,c)=>{this._process=(0,Sfr.default)(this._serverParams.command,this._serverParams.args??[],{env:{...Mlt(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:lNe.default.platform==="win32",cwd:this._serverParams.cwd}),this._process.on("error",_=>{c(_),this.onerror?.(_)}),this._process.on("spawn",()=>{s()}),this._process.on("close",_=>{this._process=void 0,this.onclose?.()}),this._process.stdin?.on("error",_=>{this.onerror?.(_)}),this._process.stdout?.on("data",_=>{this._readBuffer.append(_),this.processReadBuffer()}),this._process.stdout?.on("error",_=>{this.onerror?.(_)}),this._stderrStream&&this._process.stderr&&this._process.stderr.pipe(this._stderrStream)})}get stderr(){return this._stderrStream?this._stderrStream:this._process?.stderr??null}get pid(){return this._process?.pid??null}processReadBuffer(){for(;;)try{let s=this._readBuffer.readMessage();if(s===null)break;this.onmessage?.(s)}catch(s){this.onerror?.(s)}}async close(){if(this._process){let s=this._process;this._process=void 0;let c=new Promise(_=>{s.once("close",()=>{_()})});try{s.stdin?.end()}catch{}if(await Promise.race([c,new Promise(_=>setTimeout(_,2e3).unref())]),s.exitCode===null){try{s.kill("SIGTERM")}catch{}await Promise.race([c,new Promise(_=>setTimeout(_,2e3).unref())])}if(s.exitCode===null)try{s.kill("SIGKILL")}catch{}}this._readBuffer.clear()}send(s){return new Promise(c=>{if(!this._process?.stdin)throw new Error("Not connected");let _=(0,Olt.serializeMessage)(s);this._process.stdin.write(_)?c():this._process.stdin.once("drain",c)})}};sE.StdioClientTransport=cNe});var Llt=Ot(Hw=>{"use strict";var kfr=Hw&&Hw.__createBinding||(Object.create?(function(a,s,c,_){_===void 0&&(_=c);var u=Object.getOwnPropertyDescriptor(s,c);(!u||("get"in u?!s.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:t(function(){return s[c]},"get")}),Object.defineProperty(a,_,u)}):(function(a,s,c,_){_===void 0&&(_=c),a[_]=s[c]})),xfr=Hw&&Hw.__setModuleDefault||(Object.create?(function(a,s){Object.defineProperty(a,"default",{enumerable:!0,value:s})}):function(a,s){a.default=s}),wfr=Hw&&Hw.__importStar||(function(){var a=t(function(s){return a=Object.getOwnPropertyNames||function(c){var _=[];for(var u in c)Object.prototype.hasOwnProperty.call(c,u)&&(_[_.length]=u);return _},a(s)},"ownKeys");return function(s){if(s&&s.__esModule)return s;var c={};if(s!=null)for(var _=a(s),u=0;u<_.length;u++)_[u]!=="default"&&kfr(c,s,_[u]);return xfr(c,s),c}})();Object.defineProperty(Hw,"__esModule",{value:!0});Hw.McpClientPool=void 0;Hw.fingerprintServerConfig=jlt;var Cfr=wfr(require("crypto"));function jlt(a,s){let c={name:a,command:s.command,args:s.args??[],envKeys:Object.keys(s.env??{}).sort()};return Cfr.createHash("sha256").update(JSON.stringify(c)).digest("hex").slice(0,16)}t(jlt,"fingerprintServerConfig");var uNe=null,fNe=null;function Pfr(){return uNe||(uNe=qct().Client),fNe||(fNe=Rlt().StdioClientTransport),{Client:uNe,StdioClientTransport:fNe}}t(Pfr,"loadMcpSdk");var _Ne=class{static{t(this,"McpClientPool")}constructor(s={}){this.entries=new Map,this.trustedFingerprints=new Set,this.trustGate=s.trustGate}trustFingerprint(s){this.trustedFingerprints.add(s)}register(s,c){this.entries.get(s)&&this.disposeOne(s);let u=c.disabled?{state:"disabled"}:{state:"idle"};this.entries.set(s,{config:c,status:u})}list(){return[...this.entries.keys()]}snapshot(){return[...this.entries.entries()].map(([s,c])=>({name:s,config:c.config,status:c.status}))}async ensureConnected(s){let c=this.entries.get(s);return!c||c.status.state==="disabled"?!1:c.status.state==="connected"?!0:c.pendingConnect?(await c.pendingConnect,c.status.state==="connected"):c.status.state==="error"?!1:(c.status={state:"connecting"},c.pendingConnect=this.spawnAndHandshake(s,c).catch(_=>{let u=_ instanceof Error?_.message:String(_);c.status={state:"error",message:u}}).finally(()=>{c.pendingConnect=void 0}),await c.pendingConnect,c.status.state==="connected")}async reconnect(s){let c=this.entries.get(s);return c?(c.status.state==="connected"||c.status.state==="connecting"?(this.disposeOne(s),this.register(s,c.config)):c.status.state==="error"&&(c.status={state:"idle"}),this.ensureConnected(s)):!1}async discoverTools(s){let c=this.entries.get(s);if(!c)return[];if(!await this.ensureConnected(s))return[];if(c.cachedTools)return c.cachedTools;try{let u=await c.client.listTools(),y=Array.isArray(u?.tools)?u.tools:[];return c.cachedTools=y,c.status={state:"connected",toolCount:y.length},y}catch(u){let y=u instanceof Error?u.message:String(u);return c.status={state:"error",message:y},[]}}async callTool(s,c,_){let u=this.entries.get(s);if(!u)throw new Error(`MCP server "${s}" is not registered.`);if(!await this.ensureConnected(s)){let P=u.status.state==="error"?u.status.message:`state=${u.status.state}`;throw new Error(`MCP server "${s}" is not connected (${P}).`)}return await u.client.callTool({name:c,arguments:_})}async dispose(){for(let s of[...this.entries.keys()])this.disposeOne(s)}disposeOne(s){let c=this.entries.get(s);if(c){try{c.transport?.close?.()}catch{}try{c.client?.close?.()}catch{}this.entries.delete(s)}}async spawnAndHandshake(s,c){let{Client:_,StdioClientTransport:u}=Pfr();if(this.trustGate){let P=jlt(s,c.config);if(!this.trustedFingerprints.has(P)){if(!await this.trustGate({name:s,command:c.config.command,args:c.config.args??[],envKeys:Object.keys(c.config.env??{})}))throw new Error(`Trust denied: spawning "${c.config.command} ${(c.config.args??[]).join(" ")}" requires user approval. Approve in the Connections panel (extension) or via /mcp trust ${s} (CLI).`);this.trustedFingerprints.add(P)}}let y=new u({command:c.config.command,args:c.config.args??[],env:c.config.env??void 0,stderr:"pipe"}),k=new _({name:"bandit",version:"1.0.0"},{capabilities:{}});await k.connect(y),c.client=k,c.transport=y,c.status={state:"connected",toolCount:0}}};Hw.McpClientPool=_Ne});var dNe=Ot(eZ=>{"use strict";Object.defineProperty(eZ,"__esModule",{value:!0});eZ.inferProviderHint=Blt;eZ.effectiveTriggers=zlt;eZ.shouldActivateServer=Efr;var $lt={slack:["slack","channel","workspace","dm","message"],github:["github","repo","repository","pr","pull request","issue","commit"],gmail:["gmail","email","inbox","mail"],gdrive:["drive","gdrive","docs","spreadsheet","document","folder"],google:["google"],calendar:["calendar","meeting","schedule","event","appointment"],outlook:["outlook","email","inbox","mail"],teams:["teams","channel","meeting"],microsoft:["microsoft","office","sharepoint","onedrive"],filesystem:["file","folder","directory"],postgres:["postgres","sql","database","query"],mongo:["mongo","mongodb","database","query"]};function Blt(a){let s=a.toLowerCase();for(let c of Object.keys($lt))if(s.includes(c))return c;return null}t(Blt,"inferProviderHint");function zlt(a,s){let c=new Set;c.add(a.toLowerCase());for(let u of s.triggers??[])c.add(u.toLowerCase());let _=Blt(a);if(_)for(let u of $lt[_])c.add(u);return[...c]}t(zlt,"effectiveTriggers");function Efr(a,s,c){if(s.disabled)return!1;if((s.activation??"always")==="always")return!0;if(!c)return!1;let u=c.toLowerCase();return zlt(a,s).some(k=>u.includes(k))}t(Efr,"shouldActivateServer")});var qlt=Ot(Mle=>{"use strict";Object.defineProperty(Mle,"__esModule",{value:!0});Mle.mcpToolToAgentTool=Ult;Mle.getAllMcpAgentTools=Nfr;var Dfr=dNe();function Ifr(a){if(!a||a.type!=="object"||!a.properties)return[];let s=new Set(a.required??[]);return Object.entries(a.properties).map(([c,_])=>({name:c,description:_?.description??`(${_?.type??"any"})`,required:s.has(c)}))}t(Ifr,"convertInputSchema");function Afr(a){let s=a?.content??[],c=[];for(let u of s)u.type==="text"&&typeof u.text=="string"?c.push(u.text):c.push(`[mcp:${u.type}] (non-text content omitted)`);return{output:c.join(`
337
337
  `).trim()||"(empty MCP response)",isError:!!a?.isError}}t(Afr,"renderMcpResult");function Ult(a,s,c){let _=`${a}.${s.name}`,u=s.description?`${s.description} (via MCP server "${a}")`:`MCP tool "${s.name}" exposed by server "${a}".`,y=Ifr(s.inputSchema);return{name:_,description:u,parameters:y,async execute(k,P){try{let O={};for(let[U,Z]of Object.entries(k)){if(typeof Z!="string"){O[U]=Z;continue}let q=Z.trim();if(q===""){O[U]=Z;continue}if(/^(-?\d+(\.\d+)?|true|false|null|\[|\{|".*")$/.test(q))try{O[U]=JSON.parse(q)}catch{O[U]=Z}else O[U]=Z}let L=await c.callTool(a,s.name,O);return Afr(L)}catch(O){let L=O instanceof Error?O.message:String(O);return{output:`Error invoking ${_}: ${L}`,isError:!0}}}}}t(Ult,"mcpToolToAgentTool");async function Nfr(a,s){let c=[];for(let _ of a.snapshot()){if(!(0,Dfr.shouldActivateServer)(_.name,_.config,s))continue;let u=await a.discoverTools(_.name);for(let y of u)c.push(Ult(_.name,y,a))}return c}t(Nfr,"getAllMcpAgentTools")});var Wlt=Ot(Rle=>{"use strict";Object.defineProperty(Rle,"__esModule",{value:!0});Rle.ExperimentalServerTasks=void 0;var Jlt=_6(),pNe=class{static{t(this,"ExperimentalServerTasks")}constructor(s){this._server=s}requestStream(s,c,_){return this._server.requestStream(s,c,_)}createMessageStream(s,c){let _=this._server.getClientCapabilities();if((s.tools||s.toolChoice)&&!_?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(s.messages.length>0){let u=s.messages[s.messages.length-1],y=Array.isArray(u.content)?u.content:[u.content],k=y.some(U=>U.type==="tool_result"),P=s.messages.length>1?s.messages[s.messages.length-2]:void 0,O=P?Array.isArray(P.content)?P.content:[P.content]:[],L=O.some(U=>U.type==="tool_use");if(k){if(y.some(U=>U.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!L)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(L){let U=new Set(O.filter(q=>q.type==="tool_use").map(q=>q.id)),Z=new Set(y.filter(q=>q.type==="tool_result").map(q=>q.toolUseId));if(U.size!==Z.size||![...U].every(q=>Z.has(q)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:s},Jlt.CreateMessageResultSchema,c)}elicitInputStream(s,c){let _=this._server.getClientCapabilities(),u=s.mode??"form";switch(u){case"url":{if(!_?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!_?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let y=u==="form"&&s.mode===void 0?{...s,mode:"form"}:s;return this.requestStream({method:"elicitation/create",params:y},Jlt.ElicitResultSchema,c)}async getTask(s,c){return this._server.getTask({taskId:s},c)}async getTaskResult(s,c,_){return this._server.getTaskResult({taskId:s},c,_)}async listTasks(s,c){return this._server.listTasks(s?{cursor:s}:void 0,c)}async cancelTask(s,c){return this._server.cancelTask({taskId:s},c)}};Rle.ExperimentalServerTasks=pNe});var Hlt=Ot(jle=>{"use strict";Object.defineProperty(jle,"__esModule",{value:!0});jle.Server=void 0;var Vlt=QDe(),tp=_6(),Ofr=ZAe(),tZ=gV(),Ffr=Wlt(),Zlt=GAe(),mNe=class extends Vlt.Protocol{static{t(this,"Server")}constructor(s,c){super(c),this._serverInfo=s,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(tp.LoggingLevelSchema.options.map((_,u)=>[_,u])),this.isMessageIgnored=(_,u)=>{let y=this._loggingLevels.get(u);return y?this.LOG_LEVEL_SEVERITY.get(_)<this.LOG_LEVEL_SEVERITY.get(y):!1},this._capabilities=c?.capabilities??{},this._instructions=c?.instructions,this._jsonSchemaValidator=c?.jsonSchemaValidator??new Ofr.AjvJsonSchemaValidator,this.setRequestHandler(tp.InitializeRequestSchema,_=>this._oninitialize(_)),this.setNotificationHandler(tp.InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(tp.SetLevelRequestSchema,async(_,u)=>{let y=u.sessionId||u.requestInfo?.headers["mcp-session-id"]||void 0,{level:k}=_.params,P=tp.LoggingLevelSchema.safeParse(k);return P.success&&this._loggingLevels.set(y,P.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new Ffr.ExperimentalServerTasks(this)}),this._experimental}registerCapabilities(s){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=(0,Vlt.mergeCapabilities)(this._capabilities,s)}setRequestHandler(s,c){let u=(0,tZ.getObjectShape)(s)?.method;if(!u)throw new Error("Schema is missing a method literal");let y;if((0,tZ.isZ4Schema)(u)){let P=u;y=P._zod?.def?.value??P.value}else{let P=u;y=P._def?.value??P.value}if(typeof y!="string")throw new Error("Schema method literal must be a string");if(y==="tools/call"){let P=t(async(O,L)=>{let U=(0,tZ.safeParse)(tp.CallToolRequestSchema,O);if(!U.success){let ge=U.error instanceof Error?U.error.message:String(U.error);throw new tp.McpError(tp.ErrorCode.InvalidParams,`Invalid tools/call request: ${ge}`)}let{params:Z}=U.data,q=await Promise.resolve(c(O,L));if(Z.task){let ge=(0,tZ.safeParse)(tp.CreateTaskResultSchema,q);if(!ge.success){let Te=ge.error instanceof Error?ge.error.message:String(ge.error);throw new tp.McpError(tp.ErrorCode.InvalidParams,`Invalid task creation result: ${Te}`)}return ge.data}let ye=(0,tZ.safeParse)(tp.CallToolResultSchema,q);if(!ye.success){let ge=ye.error instanceof Error?ye.error.message:String(ye.error);throw new tp.McpError(tp.ErrorCode.InvalidParams,`Invalid tools/call result: ${ge}`)}return ye.data},"wrappedHandler");return super.setRequestHandler(s,P)}return super.setRequestHandler(s,c)}assertCapabilityForMethod(s){switch(s){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${s})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${s})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${s})`);break;case"ping":break}}assertNotificationCapability(s){switch(s){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${s})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${s})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${s})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${s})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${s})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(s){if(this._capabilities)switch(s){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${s})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${s})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${s})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${s})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${s})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${s})`);break;case"ping":case"initialize":break}}assertTaskCapability(s){(0,Zlt.assertClientRequestTaskCapability)(this._clientCapabilities?.tasks?.requests,s,"Client")}assertTaskHandlerCapability(s){this._capabilities&&(0,Zlt.assertToolsCallTaskCapability)(this._capabilities.tasks?.requests,s,"Server")}async _oninitialize(s){let c=s.params.protocolVersion;return this._clientCapabilities=s.params.capabilities,this._clientVersion=s.params.clientInfo,{protocolVersion:tp.SUPPORTED_PROTOCOL_VERSIONS.includes(c)?c:tp.LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},tp.EmptyResultSchema)}async createMessage(s,c){if((s.tools||s.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(s.messages.length>0){let _=s.messages[s.messages.length-1],u=Array.isArray(_.content)?_.content:[_.content],y=u.some(L=>L.type==="tool_result"),k=s.messages.length>1?s.messages[s.messages.length-2]:void 0,P=k?Array.isArray(k.content)?k.content:[k.content]:[],O=P.some(L=>L.type==="tool_use");if(y){if(u.some(L=>L.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!O)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(O){let L=new Set(P.filter(Z=>Z.type==="tool_use").map(Z=>Z.id)),U=new Set(u.filter(Z=>Z.type==="tool_result").map(Z=>Z.toolUseId));if(L.size!==U.size||![...L].every(Z=>U.has(Z)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return s.tools?this.request({method:"sampling/createMessage",params:s},tp.CreateMessageResultWithToolsSchema,c):this.request({method:"sampling/createMessage",params:s},tp.CreateMessageResultSchema,c)}async elicitInput(s,c){switch(s.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let u=s;return this.request({method:"elicitation/create",params:u},tp.ElicitResultSchema,c)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let u=s.mode==="form"?s:{...s,mode:"form"},y=await this.request({method:"elicitation/create",params:u},tp.ElicitResultSchema,c);if(y.action==="accept"&&y.content&&u.requestedSchema)try{let P=this._jsonSchemaValidator.getValidator(u.requestedSchema)(y.content);if(!P.valid)throw new tp.McpError(tp.ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${P.errorMessage}`)}catch(k){throw k instanceof tp.McpError?k:new tp.McpError(tp.ErrorCode.InternalError,`Error validating elicitation response: ${k instanceof Error?k.message:String(k)}`)}return y}}}createElicitationCompletionNotifier(s,c){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:s}},c)}async listRoots(s,c){return this.request({method:"roots/list",params:s},tp.ListRootsResultSchema,c)}async sendLoggingMessage(s,c){if(this._capabilities.logging&&!this.isMessageIgnored(s.level,c))return this.notification({method:"notifications/message",params:s})}async sendResourceUpdated(s){return this.notification({method:"notifications/resources/updated",params:s})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};jle.Server=mNe});var Xlt=Ot(a9=>{"use strict";var Mfr=a9&&a9.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(a9,"__esModule",{value:!0});a9.StdioServerTransport=void 0;var Glt=Mfr(require("node:process")),Klt=oNe(),gNe=class{static{t(this,"StdioServerTransport")}constructor(s=Glt.default.stdin,c=Glt.default.stdout){this._stdin=s,this._stdout=c,this._readBuffer=new Klt.ReadBuffer,this._started=!1,this._ondata=_=>{this._readBuffer.append(_),this.processReadBuffer()},this._onerror=_=>{this.onerror?.(_)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let s=this._readBuffer.readMessage();if(s===null)break;this.onmessage?.(s)}catch(s){this.onerror?.(s)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(s){return new Promise(c=>{let _=(0,Klt.serializeMessage)(s);this._stdout.write(_)?c():this._stdout.once("drain",c)})}};a9.StdioServerTransport=gNe});var Ylt=Ot(hNe=>{"use strict";Object.defineProperty(hNe,"__esModule",{value:!0});hNe.serveBanditMcp=Lfr;function Rfr(a){let s={},c=[];for(let _ of a.parameters)s[_.name]={type:"string",description:_.description},_.required&&c.push(_.name);return{type:"object",properties:s,required:c}}t(Rfr,"toolInputSchema");function jfr(a){if(!a||typeof a!="object"||Array.isArray(a))return{};let s={};for(let[c,_]of Object.entries(a))if(typeof _=="string")s[c]=_;else{if(_==null)continue;s[c]=JSON.stringify(_)}return s}t(jfr,"coerceArgs");async function Lfr(a){let s=Hlt(),c=Xlt(),_=_6(),{Server:u}=s,{StdioServerTransport:y}=c,{ListToolsRequestSchema:k,CallToolRequestSchema:P}=_,O=a.log??(ye=>process.stderr.write(ye+`
338
338
  `)),L=a.tools,U=new Map;for(let ye of L)U.set(ye.name,ye);let Z=new u({name:a.name??"bandit",version:a.version??"1.0.0"},{capabilities:{tools:{}}});Z.setRequestHandler(k,async()=>({tools:L.map(ye=>({name:ye.name,description:ye.description,inputSchema:Rfr(ye)}))})),Z.setRequestHandler(P,async ye=>{let ge=U.get(ye.params.name);if(!ge)return{isError:!0,content:[{type:"text",text:`Unknown tool: ${ye.params.name}`}]};try{let Te=jfr(ye.params.arguments),dt=await ge.execute(Te,a.toolCtx);return{isError:!!dt.isError,content:[{type:"text",text:dt.output}]}}catch(Te){let dt=Te instanceof Error?Te.message:String(Te);return O(`tool call ${ye.params.name} threw: ${dt}`),{isError:!0,content:[{type:"text",text:`Tool error: ${dt}`}]}}}),O(`bandit MCP server: ready on stdio with ${L.length} tool${L.length===1?"":"s"}`);let q=new y;await Z.connect(q),await new Promise(ye=>{q.onclose=()=>ye()})}t(Lfr,"serveBanditMcp")});var tut=Ot(Ny=>{"use strict";Object.defineProperty(Ny,"__esModule",{value:!0});Ny.inferProviderHint=Ny.effectiveTriggers=Ny.shouldActivateServer=Ny.serveBanditMcp=Ny.getAllMcpAgentTools=Ny.mcpToolToAgentTool=Ny.fingerprintServerConfig=Ny.McpClientPool=void 0;var Qlt=Llt();Object.defineProperty(Ny,"McpClientPool",{enumerable:!0,get:t(function(){return Qlt.McpClientPool},"get")});Object.defineProperty(Ny,"fingerprintServerConfig",{enumerable:!0,get:t(function(){return Qlt.fingerprintServerConfig},"get")});var eut=qlt();Object.defineProperty(Ny,"mcpToolToAgentTool",{enumerable:!0,get:t(function(){return eut.mcpToolToAgentTool},"get")});Object.defineProperty(Ny,"getAllMcpAgentTools",{enumerable:!0,get:t(function(){return eut.getAllMcpAgentTools},"get")});var $fr=Ylt();Object.defineProperty(Ny,"serveBanditMcp",{enumerable:!0,get:t(function(){return $fr.serveBanditMcp},"get")});var yNe=dNe();Object.defineProperty(Ny,"shouldActivateServer",{enumerable:!0,get:t(function(){return yNe.shouldActivateServer},"get")});Object.defineProperty(Ny,"effectiveTriggers",{enumerable:!0,get:t(function(){return yNe.effectiveTriggers},"get")});Object.defineProperty(Ny,"inferProviderHint",{enumerable:!0,get:t(function(){return yNe.inferProviderHint},"get")})});var rZ=Ot(nh=>{"use strict";var Bfr=nh&&nh.__createBinding||(Object.create?(function(a,s,c,_){_===void 0&&(_=c);var u=Object.getOwnPropertyDescriptor(s,c);(!u||("get"in u?!s.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:t(function(){return s[c]},"get")}),Object.defineProperty(a,_,u)}):(function(a,s,c,_){_===void 0&&(_=c),a[_]=s[c]})),Lle=nh&&nh.__exportStar||function(a,s){for(var c in a)c!=="default"&&!Object.prototype.hasOwnProperty.call(s,c)&&Bfr(s,a,c)};Object.defineProperty(nh,"__esModule",{value:!0});nh.createAgentRuntime=nh.AgentRuntime=nh.DeterministicProviderClient=nh.collectFromStream=nh.validateAgentPlan=void 0;var zfr=qPe(),Ufr=WPe();Lle(ZPe(),nh);Lle(Iet(),nh);var qfr=ZPe();Object.defineProperty(nh,"validateAgentPlan",{enumerable:!0,get:t(function(){return qfr.validateAgentPlan},"get")});var Jfr=Aet();Object.defineProperty(nh,"collectFromStream",{enumerable:!0,get:t(function(){return Jfr.collectFromStream},"get")});var Wfr=WPe();Object.defineProperty(nh,"DeterministicProviderClient",{enumerable:!0,get:t(function(){return Wfr.DeterministicProviderClient},"get")});var Vfr=qPe();Object.defineProperty(nh,"AgentRuntime",{enumerable:!0,get:t(function(){return Vfr.AgentRuntime},"get")});var Zfr=t((a={})=>{let{provider:s,...c}=a,_=s??new Ufr.DeterministicProviderClient;return new zfr.AgentRuntime({provider:_,...c})},"createAgentRuntime");nh.createAgentRuntime=Zfr;Lle(Ntt(),nh);Lle(tut(),nh)});var nut=Ot(rut=>{"use strict";Object.defineProperty(rut,"__esModule",{value:!0})});var aut=Ot(iut=>{"use strict";Object.defineProperty(iut,"__esModule",{value:!0})});var vNe=Ot(pv=>{"use strict";Object.defineProperty(pv,"__esModule",{value:!0});pv.STOP_WORDS=pv.FILE_NAME_PATTERN=pv.PATH_PATTERN=void 0;pv.inferGoal=Yfr;pv.classifyIntent=cut;pv.extractExplicitPaths=lut;pv.extractKeywords=uut;pv.PATH_PATTERN=/(?:[^\s"'`]+\/)*[A-Za-z0-9_.-]+\.[A-Za-z0-9]{1,6}/g;pv.FILE_NAME_PATTERN=/\b[A-Za-z0-9_.-]+\.[a-z0-9]{1,6}\b/g;var Hfr=/\.(tsx|ts|jsx|js|json|md|css|scss|sass|less|html|yml|yaml|vue|svelte|cs|csx|java|kt|kts|sql|go|py|rb|php|c|cc|cpp|h|hpp|rs|swift|sh|bash|ps1|psm1)$/i,Gfr=/^\s*(?:[-*•]|\d+[.)])\s+(.*)$/,Kfr=/\b(?:then|next|after(?:ward|wards)?|follow(?:ed)? by|plus|as well as|finally)\b/gi;pv.STOP_WORDS=new Set(["the","and","for","with","that","this","there","about","please","could","would","should","bandit","stealth","agent","mode","question","repo","code","file","files","explain","describe","thank","thanks","have","need","maybe","really","just","like","into","from","your","you","what","where","when","why","which","how","does","make","using","are","roughly","currently","actually","around","after","before","goal","task","work","project","component","components","comnponent","comnponents","page","pages","little"]);var Xfr={refactor:[/refactor/i,/cleanup/i,/restructure/i,/modular/i,/extract/i,/split/i],fix:[/fix/i,/bug/i,/issue/i,/error/i,/broken/i,/correct/i],feature:[/add/i,/implement/i,/create/i,/support/i,/feature/i,/build/i,/introduce/i],analyze:[/investigate/i,/analy[sz]e/i,/review/i,/audit/i,/inspect/i,/debug/i],doc:[/doc/i,/readme/i,/comment/i,/explain/i,/write documentation/i,/guide/i],style:[/style/i,/css/i,/theme/i,/color/i,/spacing/i,/layout/i,/visual/i]};async function Yfr(a){let s=a.prompt?.trim()??"",c=Qfr(s),_=cut(s),u=e_r(s,a.workspaceIndex??[]),y=h_r(s,a.workspaceIndex??[]),k=p_r([...u,...y]),P=t_r(_,k),O=i_r(s,k,_);return{title:c,intent:_,files:k,rationale:P,tasks:O}}t(Yfr,"inferGoal");function Qfr(a){if(!a)return"Bandit agent goal";let s=a.replace(/\s+/g," ").trim();return s.length<=120?nZ(s):`${nZ(s.slice(0,117).trimEnd())}\u2026`}t(Qfr,"buildTitle");function nZ(a){return a&&a.charAt(0).toUpperCase()+a.slice(1)}t(nZ,"capitalize");function cut(a){let s=a.toLowerCase();for(let[c,_]of Object.entries(Xfr))if(_.some(u=>u.test(s)))return c;return/bug|error|exception|stack trace/.test(s)?"fix":/doc|readme|documentation|comment/.test(s)?"doc":"feature"}t(cut,"classifyIntent");function e_r(a,s,c=6){if(!s.length)return[];let _=s.map(O=>O.replace(/\\/g,"/")).filter(O=>Hfr.test(O)),u=new Set,y=t(O=>{!O||u.size>=c||u.add(O)},"addMatch");for(let O of lut(a)){let U=_.find(Z=>Z.toLowerCase()===O.toLowerCase())??_.find(Z=>Z.toLowerCase().endsWith(O.toLowerCase()));if(U&&y(U),u.size>=c)return Array.from(u)}let k=uut(a);if(!k.length)return Array.from(u);let P=[];for(let O of _){if(u.has(O))continue;let L=O.toLowerCase(),U=0;for(let Z of k)L.includes(Z)&&(U+=Z.length,L.endsWith(`/${Z}.tsx`)||L.endsWith(`/${Z}.ts`)||L.endsWith(`/${Z}.jsx`)||L.endsWith(`/${Z}.js`)?U+=3:(L.endsWith(`/${Z}.md`)||L.endsWith(`/${Z}.mdx`))&&(U+=2),L.includes(`/${Z}/`)&&(U+=2));U>0&&P.push({file:O,score:U})}P.sort((O,L)=>L.score-O.score);for(let O of P)if(y(O.file),u.size>=c)break;return Array.from(u)}t(e_r,"selectCandidateFiles");function lut(a){let s=new Set,c;for(;(c=pv.PATH_PATTERN.exec(a))!==null;){let _=c[0].replace(/\\/g,"/").replace(/^\.\/+/,"").replace(/^\/+/,"").trim();_&&s.add(_)}return Array.from(s)}t(lut,"extractExplicitPaths");function uut(a){let s=a.toLowerCase().match(/[a-z0-9][a-z0-9_-]{2,}/g);return s?s.filter(c=>!pv.STOP_WORDS.has(c)).slice(0,24):[]}t(uut,"extractKeywords");function t_r(a,s){let c=d_r(a);if(!s.length)return`Detected ${c} intent from the prompt.`;let _=s.slice(0,3).join(", ");return`Detected ${c} intent and shortlisted ${_} as likely impacted files.`}t(t_r,"buildRationale");function r_r(a,s){let c=a.toLowerCase().replace(/\s+/g," ").trim(),_=c.match(/\b(add\s+\w[\w\s]{0,30}?\s+(?:to|for|in))\b/);if(_)return nZ(_[1].trim());let u=[[/\b(add\s+comments)\b/i,"Add comments to"],[/\b(add\s+documentation)\b/i,"Add documentation to"],[/\b(add\s+types?\s+annotations?)\b/i,"Add type annotations to"],[/\b(add\s+error\s+handling)\b/i,"Add error handling to"],[/\b(add\s+validation)\b/i,"Add validation to"],[/\b(add\s+logging)\b/i,"Add logging to"],[/\b(add\s+tests?\s+for)\b/i,"Add tests for"],[/\brefactor\b/i,"Refactor"],[/\bfix\b/i,"Fix"],[/\bupdate\b/i,"Update"],[/\bclean\s*up\b/i,"Clean up"],[/\boptimize\b/i,"Optimize"],[/\bdocument\b/i,"Document"]];for(let[y,k]of u)if(y.test(c))return k}t(r_r,"inferActionVerb");function n_r(a){switch(a){case"refactor":return"Refactor";case"fix":return"Fix";case"feature":return"Update";case"analyze":return"Analyze";case"doc":return"Document";case"style":return"Style"}}t(n_r,"intentVerb");function i_r(a,s,c){let _=a_r(a),u=[],y=s.slice(0,6),k=r_r(a,c),P=a.toLowerCase(),O=/\b(all|other|each|every|similar|same)\b/.test(P)&&y.length>1;if(k&&O)y.forEach(Z=>{let q=Z.split("/").pop()??Z;u.push({title:`${k} ${q}`,description:`${k} in ${Z}`,files:[Z]})});else if(!_.length&&y.length){let Z=k??n_r(c);y.forEach(q=>{let ye=q.split("/").pop()??q;u.push({title:`${Z} ${ye}`,description:`Apply the requested goal to ${q}.`,files:[q]})})}else _.forEach(Z=>{let q=f_r(Z);if(!q)return;let ye=__r(Z,y);u.push({title:q,description:ye.length?`Likely touched files: ${ye.join(", ")}`:void 0,files:ye.length?ye:void 0})});!u.length&&a.trim()&&u.push({title:nZ(a.trim()),description:y.length?`Review ${y.join(", ")}`:void 0,files:y.length?y:void 0}),c!=="analyze"&&u.push({title:"Review and validate changes",description:"Self-review the diff and run any necessary checks.",files:y.slice(0,2)});let L=[],U=new Set;for(let Z of u){let q=Z.title.toLowerCase();if(!U.has(q)&&(U.add(q),L.push(Z),L.length>=6))break}return L}t(i_r,"buildTaskSuggestions");function a_r(a){let s=o_r(a),c=l_r(s);if(c.length>0)return c.slice(0,8);let _=c_r(s);if(!_)return[];let u=_.split(/[.!?]+(?=\s|$)/).map(k=>k.trim()).filter(Boolean);u.length||u.push(_);let y=[];for(let k of u){let P=k.split(Kfr).map(O=>O.trim()).filter(Boolean);if(P.length)for(let O of P){let L=fut(O);if(L&&(y.push(L),y.length>=8))return y}}return y}t(a_r,"extractGoalClauses");function s_r(a){return a?a.split(/\r?\n/).filter(_=>!u_r(_)).join(" "):""}t(s_r,"stripLikelyCodeLines");function o_r(a){if(!a)return"";let s=a.search(/\brelevant files\s*:/i);return s<=0?a:a.slice(0,s)}t(o_r,"stripRelevantFilesSection");function c_r(a){return s_r(a).replace(/[\r\n]+/g," ").replace(/\s+/g," ").trim()}t(c_r,"normalizePromptForClauseExtraction");function l_r(a){if(!a)return[];let s=a.split(/\r?\n/),c=[];for(let _ of s){let u=_.match(Gfr);if(!u?.[1])continue;let y=fut(u[1]);if(y&&(c.push(y),c.length>=8))break}return c}t(l_r,"extractBulletListClauses");function fut(a){let s=a.replace(/\s+/g," ").trim();return s.length<4?"":s}t(fut,"normalizeClauseSegment");function u_r(a){let s=a.trim();return!!(!s||s==="{"||s==="}"||/^\s*(public|private|protected|internal)\b/.test(s)||/\bclass\b/.test(s)&&/[{;]$/.test(s)||/\b(get;|set;)\b/.test(s))}t(u_r,"isLikelyCodeLine");function f_r(a){let s=a.trim().replace(/^\b(to|please|kindly)\b/i,"").trim();if(!s)return"";let c=s.replace(/\s+/g," "),_=c.length>120?`${c.slice(0,117).trimEnd()}\u2026`:c;return nZ(_)}t(f_r,"formatClauseTitle");function __r(a,s){if(!s.length)return[];let _=a.toLowerCase().match(/[a-z0-9][a-z0-9_-]{3,}/g);if(!_||!_.length)return[];let u=[];for(let y of s){let k=y.toLowerCase(),P=k.split(/[\\/]/).pop()??k;_.some(O=>k.includes(`/${O}`)||P.includes(O))&&u.push(y)}return u.slice(0,3)}t(__r,"matchClauseToFiles");function d_r(a){switch(a){case"fix":return"a bug fix";case"refactor":return"a refactor";case"analyze":return"an investigation";case"doc":return"a documentation update";case"style":return"a styling update";default:return"a feature implementation"}}t(d_r,"intentLabel");function p_r(a){let s=new Set,c=[];for(let _ of a){if(!_)continue;let u=_.replace(/\\/g,"/");s.has(u)||(s.add(u),c.push(u))}return c}t(p_r,"dedupeFiles");var sut=/\b(?:create|add|build|use|have|refactor|split|extract|introduce|make)\s+(?:an?\s+|the\s+)?([a-z][a-z0-9\s-]{3,}?)\s+(?:component|components|comnponent|comnponents)\b/gi,out=/\b([a-z][a-z0-9\s-]{3,})\s+(?:component|components|comnponent|comnponents)\b/gi,m_r=["src/components/shared","src/components/ui","src/components","components","src"],g_r=new Set(["to","into","with","using","use","and","while","when","that","which","for","of","by","a","an","the"]);function h_r(a,s){let c=y_r(a),_=v_r(a),u=_.size>0?_:c;if(!u.size)return[];let y=S_r(s),k=new Set(s.map(L=>L.replace(/\\/g,"/").toLowerCase())),P=new Set(Array.from(k).map(L=>L.split("/").pop()).filter(L=>!!L)),O=[];for(let L of u){let U=b_r(L);if(!U)continue;let Z=T_r(U,y,k,P);Z&&!k.has(Z)&&O.push(Z)}return O}t(h_r,"inferSyntheticComponentFiles");function y_r(a){let s=new Set;sut.lastIndex=0;let c;for(;(c=sut.exec(a))!==null;)c[1]&&s.add(c[1]);return s}t(y_r,"extractActionDrivenComponentNames");function v_r(a){let s=new Set;out.lastIndex=0;let c;for(;(c=out.exec(a))!==null;)c[1]&&s.add(c[1]);return s}t(v_r,"extractInlineComponentNames");function b_r(a){if(!a)return;let s=a.replace(/[^a-z0-9\s-]/gi," ").replace(/\s+/g," ").trim().toLowerCase();if(!s)return;let c=s.split(" "),_=0;for(let P=c.length-1;P>=0;P-=1)if(g_r.has(c[P])){_=P+1;break}let u=c.slice(_).filter(P=>P&&!pv.STOP_WORDS.has(P));if(!u.length)return;let k=u.slice(-3).join(" ").trim();return k.length>=3?k:void 0}t(b_r,"refineComponentName");function S_r(a){let s=new Set;for(let c of a){let _=c.replace(/\\/g,"/"),u=_.lastIndexOf("/");if(u===-1)continue;let y=_.slice(0,u);y&&s.add(y)}return Array.from(s).sort((c,_)=>c.length-_.length)}t(S_r,"collectWorkspaceDirectories");function T_r(a,s,c,_){let u=w_r(a);if(!u||_.has(`${u}.tsx`))return;let y=x_r(a),k=k_r(s,y),P=k?k.replace(/\\/g,"/").replace(/\/+$/,""):"",O=P?`${P}/${u}.tsx`:`${u}.tsx`;if(!c.has(O.toLowerCase()))return O}t(T_r,"buildComponentPathSuggestion");function k_r(a,s){let c=a.find(u=>{let y=u.toLowerCase();return s.some(k=>k&&y.includes(k))});if(c)return c;for(let u of m_r){let y=u.toLowerCase(),k=a.find(P=>{let O=P.toLowerCase();return O===y||O.endsWith(`/${y}`)});if(k)return k}let _=a.find(u=>u.includes("component"));return _||(a.length?a[0]:void 0)}t(k_r,"selectComponentDirectory");function x_r(a){return a.toLowerCase().split(/[\s_-]+/).map(s=>s.trim()).filter(s=>s.length>=3&&!pv.STOP_WORDS.has(s))}t(x_r,"extractNameKeywords");function w_r(a){let s=a.trim().split(/[\s_-]+/).map(c=>c.toLowerCase().replace(/[^a-z0-9]/g,"")).filter(c=>c.length>0);return s.length?s.join("-"):""}t(w_r,"toKebabCase")});var TNe=Ot(oE=>{"use strict";var C_r=oE&&oE.__createBinding||(Object.create?(function(a,s,c,_){_===void 0&&(_=c);var u=Object.getOwnPropertyDescriptor(s,c);(!u||("get"in u?!s.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:t(function(){return s[c]},"get")}),Object.defineProperty(a,_,u)}):(function(a,s,c,_){_===void 0&&(_=c),a[_]=s[c]})),P_r=oE&&oE.__setModuleDefault||(Object.create?(function(a,s){Object.defineProperty(a,"default",{enumerable:!0,value:s})}):function(a,s){a.default=s}),_ut=oE&&oE.__importStar||(function(){var a=t(function(s){return a=Object.getOwnPropertyNames||function(c){var _=[];for(var u in c)Object.prototype.hasOwnProperty.call(c,u)&&(_[_.length]=u);return _},a(s)},"ownKeys");return function(s){if(s&&s.__esModule)return s;var c={};if(s!=null)for(var _=a(s),u=0;u<_.length;u++)_[u]!=="default"&&C_r(c,s,_[u]);return P_r(c,s),c}})();Object.defineProperty(oE,"__esModule",{value:!0});oE.EmbeddingCache=void 0;var o9=typeof window<"u";async function s9(){if(o9)throw new Error("EmbeddingCache is unavailable in browser hosts.");let[a,s]=await Promise.all([Promise.resolve().then(()=>_ut(require("fs"))),Promise.resolve().then(()=>_ut(require("path")))]);return{fs:a.promises,path:s}}t(s9,"getNodeDeps");var dut=1,bNe=32,E_r=t(a=>{let s=2166136261,c=[];for(let _=0;_<a.length&&c.length<bNe;_+=2){s^=a.charCodeAt(_),s+=(s<<1)+(s<<4)+(s<<7)+(s<<8)+(s<<24);let u=(s>>>0)/4294967295;c.push(u)}for(;c.length<bNe;){s^=2654435769;let _=(s>>>0)/4294967295;c.push(_)}return c.slice(0,bNe)},"hashString"),D_r=t((a,s)=>E_r(`${s}:${a}`),"computeVector"),SNe=class{static{t(this,"EmbeddingCache")}constructor(){this.entries=new Map,this.dirty=!1}async prepare(s,c){if(o9){this.workspaceRoot=s,this.artifactRoot=c,this.entries.clear(),this.dirty=!1,this.cachePath=void 0;return}let{fs:_,path:u}=await s9();this.workspaceRoot=s,this.artifactRoot=c,await _.mkdir(c,{recursive:!0}).catch(()=>{}),this.cachePath=u.join(c,"embeddings.json"),this.entries.clear(),this.dirty=!1,await this.load()}async flush(){if(!this.cachePath||!this.dirty)return;if(o9){this.dirty=!1;return}let{fs:s}=await s9(),c={version:dut,entries:Object.fromEntries(this.entries)};await s.writeFile(this.cachePath,JSON.stringify(c,null,2),"utf8"),this.dirty=!1}async indexFiles(s,c){if(o9)return{reused:0,computed:0};if(!this.cachePath||!this.workspaceRoot||!this.artifactRoot||this.workspaceRoot!==s){let{path:P}=await s9(),O=this.artifactRoot??P.join(s,".bandit");await this.prepare(s,O)}let{fs:_,path:u}=await s9(),y={reused:0,computed:0},k=Date.now();for(let P of c)try{let O=u.join(s,P),L=await _.stat(O),U=P,Z=this.entries.get(U);if(Z&&Math.abs(Z.mtimeMs-L.mtimeMs)<1&&Z.size===L.size){this.entries.set(U,{...Z,lastUsed:k}),y.reused+=1;continue}let q=await this.readSample(O),ye=D_r(q,P);this.entries.set(U,{vector:ye,mtimeMs:L.mtimeMs,size:L.size,lastUsed:k}),this.dirty=!0,y.computed+=1}catch{}return y}getEmbedding(s){let c=this.entries.get(s);return c&&this.entries.set(s,{...c,lastUsed:Date.now()}),c}async load(){if(!this.cachePath||o9)return;let{fs:s}=await s9();try{let c=await s.readFile(this.cachePath,"utf8"),_=JSON.parse(c);if(_.version!==dut||typeof _.entries!="object"||!_.entries)return;for(let[u,y]of Object.entries(_.entries))Array.isArray(y.vector)&&y.vector.length>0&&this.entries.set(u,y)}catch{}}async readSample(s){if(o9)return"";let{fs:c}=await s9();try{let _=await c.open(s,"r");try{let u=Buffer.alloc(4096),{bytesRead:y}=await _.read(u,0,u.length,0);return u.toString("utf8",0,y)}finally{await _.close()}}catch{return""}}};oE.EmbeddingCache=SNe});var xNe=Ot($le=>{"use strict";Object.defineProperty($le,"__esModule",{value:!0});$le.StealthEmbeddingClient=void 0;var I_r=t(a=>{let s=2166136261;for(let _=0;_<a.length;_+=1)s^=a.charCodeAt(_),s+=(s<<1)+(s<<4)+(s<<7)+(s<<8)+(s<<24);return(s>>>0).toString(16).padStart(16,"0")},"hashString"),A_r="https://api.burtson.ai/api/stealth/embeddings",put=8e3,kNe=class a{static{t(this,"StealthEmbeddingClient")}constructor(s){this.baseUrl=a.normalizeBaseUrl(s.baseUrl),this.apiKey=s.apiKey,this.workspaceRoot=s.workspaceRoot}matches(s){return this.baseUrl===a.normalizeBaseUrl(s.baseUrl)&&this.apiKey===s.apiKey&&this.workspaceRoot===s.workspaceRoot}async upsertDocument(s){let c=this.prepareText(s.content);if(!c)return;let _={path:s.path,workspace:this.workspaceRoot,language:s.language,...s.metadata??{}};await this.post("/upsert",{id:this.buildVectorId(s.path),text:c,metadata:_})}async searchDocuments(s,c=6){let _=s.trim();if(!_)return[];let u={query:_,limit:c},y=await this.post("/search",u);return Array.isArray(y)?y.map(k=>this.mapSearchEntry(k)).filter(k=>!!(k&&k.path)):[]}mapSearchEntry(s){if(!s||typeof s!="object")return;let c=s.payload,_=s.id,u=s.score,y=c??{},k=this.extractPathFromMetadata(y);if(k)return{id:_,score:u,path:k,metadata:y}}extractPathFromMetadata(s){let c=[s.path,s.file,s.filePath,s.filepath,s.source];for(let _ of c)if(typeof _=="string"&&_.trim().length>0)return _.trim()}async post(s,c){let _=`${this.baseUrl}${s}`,u=await fetch(_,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(c)});if(!u.ok){let k=await a.safeReadText(u);throw new Error(`Embedding request failed: ${u.status} ${u.statusText}${k?` \u2013 ${k}`:""}`)}let y=await u.text();if(y)try{return JSON.parse(y)}catch(k){console.warn("Failed to parse embedding response JSON",k);return}}buildHeaders(){let s={"Content-Type":"application/json"};return this.apiKey&&(s.Authorization=`Bearer ${this.apiKey}`),s}buildVectorId(s){return I_r(`${this.workspaceRoot}:${s}`)}prepareText(s){if(!s)return"";let c=s.replace(/\r\n/g,`
339
- `).trim();return c.length<=put?c:c.slice(0,put)}static async safeReadText(s){try{return await s.text()}catch{return""}}static normalizeBaseUrl(s){let c=A_r;if(!s)return c;let _=s.trim();return _?_.replace(/\/$/,""):c}};$le.StealthEmbeddingClient=kNe});var Ble=Ot(cE=>{"use strict";Object.defineProperty(cE,"__esModule",{value:!0});cE.registerModelCapabilities=O_r;cE.getModelCapabilities=hut;cE.queryOllamaModelCapabilities=M_r;cE.checkOllamaLoadedContext=R_r;cE.getContextFileLimit=j_r;cE.getContextTokenBudget=L_r;cE.getOutputTokenBudget=$_r;cE.resolveOllamaRuntimeOptions=B_r;var N_r=[{prefix:"bandit-core:4b",caps:{contextWindow:8192,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"small",label:"Bandit Core 4B"}},{prefix:"bandit-core:12b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"medium",label:"Bandit Core 12B"}},{prefix:"bandit-core:27b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"medium",label:"Bandit Core 27B"}},{prefix:"bandit-core:31b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"large",label:"Bandit Core 31B"}},{prefix:"bandit-core-1",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"large",label:"Bandit Core (hosted, 31B)"}},{prefix:"bandit-core-2",caps:{contextWindow:131072,supportsJsonMode:!1,supportsToolCalling:!1,supportsVision:!1,tier:"large",label:"Bandit Core 2 (RunPod 70B)"}},{prefix:"bandit-logic",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Bandit Logic (Qwen 3.6 27B)"}},{prefix:"gemma3:4b",caps:{contextWindow:8192,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"Gemma 3 4B"}},{prefix:"gemma3:12b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 3 12B"}},{prefix:"gemma3:27b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 3 27B"}},{prefix:"gemma4:e2b",caps:{contextWindow:16384,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"Gemma 4 e2B"}},{prefix:"gemma4:e4b",caps:{contextWindow:16384,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"Gemma 4 e4B"}},{prefix:"gemma4:31b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"large",label:"Gemma 4 31B"}},{prefix:"gemma4:26b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 4 26B"}},{prefix:"gemma4",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 4"}},{prefix:"llama3.2-vision",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Llama 3.2 Vision"}},{prefix:"llama3.1",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Llama 3.1"}},{prefix:"llama3",caps:{contextWindow:8192,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"small",label:"Llama 3"}},{prefix:"qwen3.6:35b",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Qwen 3.6 35B"}},{prefix:"qwen3.6:27b",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Qwen 3.6 27B"}},{prefix:"qwen3.6",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Qwen 3.6"}},{prefix:"qwen2.5-coder:72b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 Coder 72B"}},{prefix:"qwen2.5-coder:32b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 Coder 32B"}},{prefix:"qwen2.5-coder:14b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Qwen 2.5 Coder 14B"}},{prefix:"qwen2.5-coder",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Qwen 2.5 Coder"}},{prefix:"qwen2.5vl",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"medium",label:"Qwen 2.5 VL"}},{prefix:"qwen2-vl",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"medium",label:"Qwen 2 VL"}},{prefix:"qwen2.5:72b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 72B"}},{prefix:"qwen2.5:32b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 32B"}},{prefix:"qwen2.5",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Qwen 2.5"}},{prefix:"llava",caps:{contextWindow:4096,supportsJsonMode:!1,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"LLaVA"}},{prefix:"deepseek-coder:6.7b",caps:{contextWindow:16384,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"small",label:"DeepSeek Coder 6.7B"}}],mut={contextWindow:8192,supportsJsonMode:!1,supportsToolCalling:!1,supportsVision:!1,tier:"small"},gut=new Map;function O_r(a,s){a&&gut.set(a.toLowerCase(),s)}t(O_r,"registerModelCapabilities");function hut(a){if(!a)return mut;let s=a.toLowerCase(),c=gut.get(s);if(c)return c;for(let{prefix:_,caps:u}of N_r)if(s.startsWith(_.toLowerCase()))return u;return mut}t(hut,"getModelCapabilities");function F_r(a){let s=a.match(/(\d+(?:\.\d+)?)\s*[Bb]/);if(!s)return"small";let c=parseFloat(s[1]);return c<=5?"small":c<=35?"medium":"large"}t(F_r,"deriveTierFromParamSize");async function M_r(a,s){try{let c=`${s.replace(/\/$/,"")}/api/show`,_=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:a}),signal:AbortSignal.timeout(5e3)});if(!_.ok)return null;let u=await _.json(),y=u.details?.parameter_size??"",k=F_r(y),P=u.model_info?.["llm.context_length"]??(k==="large"?131072:k==="medium"?32768:8192),O=(u.details?.family??"").toLowerCase(),L=!0,U=O.includes("llava")||O.includes("vision")||O.includes("vl");return{tier:k,contextWindow:P,supportsJsonMode:L,supportsToolCalling:!1,supportsVision:U,label:a}}catch{return null}}t(M_r,"queryOllamaModelCapabilities");async function R_r(a,s,c){let _=Math.max(16384,Math.ceil(c*1.1/1024)*1024),u={loadedContext:null,requestedContext:c,underweight:!1,suggestionCommand:`OLLAMA_CONTEXT_LENGTH=${_} ollama serve`};try{let y=`${a.replace(/\/$/,"")}/api/ps`,k=await fetch(y,{signal:AbortSignal.timeout(3e3)});if(!k.ok)return u;let P=await k.json(),O=s.toLowerCase(),L=(P.models??[]).find(q=>(q.model??"").toLowerCase()===O||(q.name??"").toLowerCase()===O);if(!L||typeof L.context_length!="number")return u;let U=L.context_length,Z=U<8192&&U<c*.75;return{loadedContext:U,requestedContext:c,underweight:Z,suggestionCommand:`OLLAMA_CONTEXT_LENGTH=${_} ollama serve`}}catch{return u}}t(R_r,"checkOllamaLoadedContext");function j_r(a){switch(a){case"large":return 20;case"medium":return 8;case"small":return 3}}t(j_r,"getContextFileLimit");function L_r(a){return Math.floor(a.contextWindow*.4)}t(L_r,"getContextTokenBudget");function $_r(a){switch(a.tier){case"small":return 1024;case"medium":return 2048;case"large":return 8192;default:return 1024}}t($_r,"getOutputTokenBudget");function B_r(a){let s=hut(a),c;switch(s.tier){case"small":c=12288;break;case"medium":c=24576;break;case"large":c=32768;break;default:c=12288}s.contextWindow>0&&c>s.contextWindow&&(c=s.contextWindow);let _=a.toLowerCase(),u=_.startsWith("qwen3.6")||_.startsWith("bandit-logic")||_.startsWith("deepseek-r1");return{num_ctx:c,keep_alive:-1,...u?{think:!0}:{}}}t(B_r,"resolveOllamaRuntimeOptions")});var DNe=Ot(iZ=>{"use strict";Object.defineProperty(iZ,"__esModule",{value:!0});iZ.normalizeOllamaMessages=kut;iZ.createProvider=G_r;iZ.serializeBanditPayload=CNe;var vut=Ble(),z_r="https://api.burtson.ai/completions",U_r="http://localhost:11434",q_r="gemma3:12b",J_r=[/<\/?end_of_turn>/g,/<\/?start_of_turn>/g,/<\|eot_id\|>/g,/<\|start_header_id\|>/g,/<\|end_header_id\|>/g,/<\|begin_of_text\|>/g,/\[INST\]/g,/\[\/INST\]/g,/<<SYS>>/g,/<\/SYS>>/g];function but(a){let s=a;for(let c of J_r)s=s.replace(c,"");return s=Sut(s),s}t(but,"sanitizeOllamaOutput");function Sut(a){let s=/(?:data:[\w/.+-]+;base64,)?[A-Za-z0-9+/]{120,}={0,2}/g;return a.replace(s,c=>`[base64 stripped: ${c.length} chars]`)}t(Sut,"stripBase64BlobsInline");function W_r(a){let s=t(P=>(typeof P=="string"?P:P.map(L=>L.type==="text"?L.text:"").join(" ")).toLowerCase(),"getLowerText"),c=a.messages.filter(P=>P.role==="system").map(P=>s(P.content)).join(`
339
+ `).trim();return c.length<=put?c:c.slice(0,put)}static async safeReadText(s){try{return await s.text()}catch{return""}}static normalizeBaseUrl(s){let c=A_r;if(!s)return c;let _=s.trim();return _?_.replace(/\/$/,""):c}};$le.StealthEmbeddingClient=kNe});var Ble=Ot(cE=>{"use strict";Object.defineProperty(cE,"__esModule",{value:!0});cE.registerModelCapabilities=O_r;cE.getModelCapabilities=hut;cE.queryOllamaModelCapabilities=M_r;cE.checkOllamaLoadedContext=R_r;cE.getContextFileLimit=j_r;cE.getContextTokenBudget=L_r;cE.getOutputTokenBudget=$_r;cE.resolveOllamaRuntimeOptions=B_r;var N_r=[{prefix:"bandit-core:4b",caps:{contextWindow:8192,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"small",label:"Bandit Core 4B"}},{prefix:"bandit-core:12b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Bandit Core 12B"}},{prefix:"bandit-core:27b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Bandit Core 27B"}},{prefix:"bandit-core:31b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Bandit Core 31B"}},{prefix:"bandit-core-1",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Bandit Core (hosted, 31B)"}},{prefix:"bandit-core-2",caps:{contextWindow:131072,supportsJsonMode:!1,supportsToolCalling:!1,supportsVision:!1,tier:"large",label:"Bandit Core 2 (RunPod 70B)"}},{prefix:"bandit-logic",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Bandit Logic (Qwen 3.6 27B)"}},{prefix:"gemma3:4b",caps:{contextWindow:8192,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"Gemma 3 4B"}},{prefix:"gemma3:12b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 3 12B"}},{prefix:"gemma3:27b",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 3 27B"}},{prefix:"gemma4:e2b",caps:{contextWindow:16384,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"Gemma 4 e2B"}},{prefix:"gemma4:e4b",caps:{contextWindow:16384,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"Gemma 4 e4B"}},{prefix:"gemma4:31b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"large",label:"Gemma 4 31B"}},{prefix:"gemma4:26b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 4 26B"}},{prefix:"gemma4",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Gemma 4"}},{prefix:"llama3.2-vision",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!0,tier:"medium",label:"Llama 3.2 Vision"}},{prefix:"llama3.1",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Llama 3.1"}},{prefix:"llama3",caps:{contextWindow:8192,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"small",label:"Llama 3"}},{prefix:"qwen3.6:35b",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Qwen 3.6 35B"}},{prefix:"qwen3.6:27b",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Qwen 3.6 27B"}},{prefix:"qwen3.6",caps:{contextWindow:262144,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"large",label:"Qwen 3.6"}},{prefix:"qwen2.5-coder:72b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 Coder 72B"}},{prefix:"qwen2.5-coder:32b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 Coder 32B"}},{prefix:"qwen2.5-coder:14b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Qwen 2.5 Coder 14B"}},{prefix:"qwen2.5-coder",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Qwen 2.5 Coder"}},{prefix:"qwen2.5vl",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"medium",label:"Qwen 2.5 VL"}},{prefix:"qwen2-vl",caps:{contextWindow:32768,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!0,tier:"medium",label:"Qwen 2 VL"}},{prefix:"qwen2.5:72b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 72B"}},{prefix:"qwen2.5:32b",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"large",label:"Qwen 2.5 32B"}},{prefix:"qwen2.5",caps:{contextWindow:131072,supportsJsonMode:!0,supportsToolCalling:!0,supportsVision:!1,tier:"medium",label:"Qwen 2.5"}},{prefix:"llava",caps:{contextWindow:4096,supportsJsonMode:!1,supportsToolCalling:!1,supportsVision:!0,tier:"small",label:"LLaVA"}},{prefix:"deepseek-coder:6.7b",caps:{contextWindow:16384,supportsJsonMode:!0,supportsToolCalling:!1,supportsVision:!1,tier:"small",label:"DeepSeek Coder 6.7B"}}],mut={contextWindow:8192,supportsJsonMode:!1,supportsToolCalling:!1,supportsVision:!1,tier:"small"},gut=new Map;function O_r(a,s){a&&gut.set(a.toLowerCase(),s)}t(O_r,"registerModelCapabilities");function hut(a){if(!a)return mut;let s=a.toLowerCase(),c=gut.get(s);if(c)return c;for(let{prefix:_,caps:u}of N_r)if(s.startsWith(_.toLowerCase()))return u;return mut}t(hut,"getModelCapabilities");function F_r(a){let s=a.match(/(\d+(?:\.\d+)?)\s*[Bb]/);if(!s)return"small";let c=parseFloat(s[1]);return c<=5?"small":c<=35?"medium":"large"}t(F_r,"deriveTierFromParamSize");async function M_r(a,s){try{let c=`${s.replace(/\/$/,"")}/api/show`,_=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:a}),signal:AbortSignal.timeout(5e3)});if(!_.ok)return null;let u=await _.json(),y=u.details?.parameter_size??"",k=F_r(y),P=u.model_info?.["llm.context_length"]??(k==="large"?131072:k==="medium"?32768:8192),O=(u.details?.family??"").toLowerCase(),L=!0,U=O.includes("llava")||O.includes("vision")||O.includes("vl");return{tier:k,contextWindow:P,supportsJsonMode:L,supportsToolCalling:!1,supportsVision:U,label:a}}catch{return null}}t(M_r,"queryOllamaModelCapabilities");async function R_r(a,s,c){let _=Math.max(16384,Math.ceil(c*1.1/1024)*1024),u={loadedContext:null,requestedContext:c,underweight:!1,suggestionCommand:`OLLAMA_CONTEXT_LENGTH=${_} ollama serve`};try{let y=`${a.replace(/\/$/,"")}/api/ps`,k=await fetch(y,{signal:AbortSignal.timeout(3e3)});if(!k.ok)return u;let P=await k.json(),O=s.toLowerCase(),L=(P.models??[]).find(q=>(q.model??"").toLowerCase()===O||(q.name??"").toLowerCase()===O);if(!L||typeof L.context_length!="number")return u;let U=L.context_length,Z=U<8192&&U<c*.75;return{loadedContext:U,requestedContext:c,underweight:Z,suggestionCommand:`OLLAMA_CONTEXT_LENGTH=${_} ollama serve`}}catch{return u}}t(R_r,"checkOllamaLoadedContext");function j_r(a){switch(a){case"large":return 20;case"medium":return 8;case"small":return 3}}t(j_r,"getContextFileLimit");function L_r(a){return Math.floor(a.contextWindow*.4)}t(L_r,"getContextTokenBudget");function $_r(a){switch(a.tier){case"small":return 1024;case"medium":return 2048;case"large":return 8192;default:return 1024}}t($_r,"getOutputTokenBudget");function B_r(a){let s=hut(a),c;switch(s.tier){case"small":c=12288;break;case"medium":c=24576;break;case"large":c=32768;break;default:c=12288}s.contextWindow>0&&c>s.contextWindow&&(c=s.contextWindow);let _=a.toLowerCase(),u=_.startsWith("qwen3.6")||_.startsWith("bandit-logic")||_.startsWith("deepseek-r1");return{num_ctx:c,keep_alive:-1,...u?{think:!0}:{}}}t(B_r,"resolveOllamaRuntimeOptions")});var DNe=Ot(iZ=>{"use strict";Object.defineProperty(iZ,"__esModule",{value:!0});iZ.normalizeOllamaMessages=kut;iZ.createProvider=G_r;iZ.serializeBanditPayload=CNe;var vut=Ble(),z_r="https://api.burtson.ai/completions",U_r="http://localhost:11434",q_r="gemma3:12b",J_r=[/<\/?end_of_turn>/g,/<\/?start_of_turn>/g,/<\|eot_id\|>/g,/<\|start_header_id\|>/g,/<\|end_header_id\|>/g,/<\|begin_of_text\|>/g,/\[INST\]/g,/\[\/INST\]/g,/<<SYS>>/g,/<\/SYS>>/g];function but(a){let s=a;for(let c of J_r)s=s.replace(c,"");return s=Sut(s),s}t(but,"sanitizeOllamaOutput");function Sut(a){let s=/(?:data:[\w/.+-]+;base64,)?[A-Za-z0-9+/]{120,}={0,2}/g;return a.replace(s,c=>`[base64 stripped: ${c.length} chars]`)}t(Sut,"stripBase64BlobsInline");function W_r(a){let s=t(P=>(typeof P=="string"?P:P.map(L=>L.type==="text"?L.text:"").join(" ")).toLowerCase(),"getLowerText"),c=a.messages.filter(P=>P.role==="system").map(P=>s(P.content)).join(`
340
340
  `),_=[...a.messages].reverse().find(P=>P.role==="user"),u=`${c}
341
341
  ${_?s(_.content):""}`;return/\b(respond with json(?: only)?|return (?:valid )?json|output (?:valid )?json|json only|format\s*[:=]\s*"?json"?|strictly json)\b/.test(u)?/\b(plan|planning|steps?)\b|execution plan|agent plan|schema|"steps"|"id"|"title"|"description"/.test(u):!1}t(W_r,"detectJsonRequest");function Tut(a){if(typeof a=="string")return{text:a,imageUrls:[]};if(!Array.isArray(a))return{text:"",imageUrls:[]};let s=[],c=[];for(let _ of a)if(_){if(_.type==="text"){let u=typeof _.text=="string"?_.text:_.text!=null?String(_.text):"";u.length>0&&s.push(u);continue}if(_.type==="image_url"){let u=xut(_);u&&c.push(u)}}return{text:s.join(`
342
342
  `),imageUrls:wNe(c)}}t(Tut,"splitMessageContent");function wNe(a){let s=new Set,c=[];for(let _ of a){let u=_.trim();!u||s.has(u)||(s.add(u),c.push(u))}return c}t(wNe,"dedupeStrings");function yut(a){let s=zle(a);if(!s||/^https?:/i.test(s))return;if(!/^data:/i.test(s))return s;let c=s.indexOf(",");if(!(c<0||c===s.length-1))return s.slice(c+1).trim()}t(yut,"normalizeOllamaImage");function kut(a){let s=a.messages.map(_=>{let{text:u,imageUrls:y}=Tut(_.content),k=y.map(P=>yut(P)).filter(P=>!!P);return k.length>0?{role:_.role,content:u,images:k}:{role:_.role,content:u}}),c=(Array.isArray(a.images)?a.images:[]).map(_=>yut(_)).filter(_=>!!_);if(c.length===0)return s;for(let _=s.length-1;_>=0;_-=1){if(s[_]?.role!=="user")continue;let u=s[_].images??[];return s[_].images=wNe([...u,...c]),s}return s.push({role:"user",content:"",images:c}),s}t(kut,"normalizeOllamaMessages");function V_r(a){let s=(Array.isArray(a.images)?a.images:[]).map(u=>zle(u)).filter(u=>!!u),c=[...a.messages].reverse().find(u=>u.role==="user"),_=c?Tut(c.content).imageUrls:[];return wNe([...s,..._])}t(V_r,"collectBanditPayloadImages");async function*Z_r(a){let s=a.body;if(!s)throw new Error("Ollama response has no body.");let c=s.getReader(),_=new TextDecoder,u="";for(;;){let{value:y,done:k}=await c.read();if(k)break;u+=_.decode(y,{stream:!0});let P=u.split(`
@@ -1361,7 +1361,7 @@ ${(()=>{let Z=`Bandit insights \u2014 ${new Date(s).toISOString().slice(0,10)}`,
1361
1361
  <h1>You're signed in.</h1>
1362
1362
  <p>Bandit picked up your session. You can close this tab and return to your terminal.</p>
1363
1363
  </div>
1364
- </body></html>`;t(MSr,"startLoopbackListener");t(RSr,"openBrowser");t(jSr,"buildDefaultDeviceLabel");t(LSr,"runOAuthSignIn")});var Bue=Ot((Z6r,$Sr)=>{$Sr.exports={name:"@burtson-labs/bandit-stealth-cli",version:"1.7.236",description:"Bandit \u2014 a local-first AI coding agent for your terminal. Same runtime as the Bandit Stealth VS Code / Cursor extension.",keywords:["ai","agent","cli","coding-agent","llm","ollama","local-first","bandit","burtson-labs","terminal","repl","developer-tools"],homepage:"https://burtson.ai",bugs:{email:"team@burtson.ai"},license:"MIT",author:{name:"Burtson Labs",email:"team@burtson.ai",url:"https://burtson.ai"},bin:{bandit:"./dist/cli.js"},main:"dist/cli.js",files:["dist/cli.js","README.md","LICENSE"],engines:{node:">=20"},publishConfig:{access:"public"},scripts:{typecheck:"tsc -p tsconfig.json --noEmit",build:"node build.mjs","build:publish":"node build.mjs --publish",dev:"node build.mjs --watch",start:"node dist/cli.js",smoke:"node build.mjs && node dist/__smoke__/smoke.js",integration:"node build.mjs && node dist/__integration__/ollama.js",eval:"node build.mjs && node dist/__eval__/eval.js",benchmark:"node build.mjs && node dist/__eval__/benchmark.js","gen-logo":"node scripts/gen-logo.mjs","preview-banner":"node scripts/preview-banner.mjs",clean:"rm -rf dist",prepack:"node scripts/prepack.mjs",postpack:"node scripts/postpack.mjs",prepublishOnly:"pnpm run clean && pnpm run typecheck && pnpm run build:publish"},dependencies:{"pdf-parse":"^2.4.5"},devDependencies:{"@burtson-labs/agent-core":"workspace:*","@burtson-labs/host-kit":"workspace:*","@burtson-labs/stealth-core-runtime":"workspace:*","@types/node":"^20.11.0","@types/pdf-parse":"^1.1.5","@types/pngjs":"^6.0.5",esbuild:"^0.28.0",pngjs:"^7.0.0",typescript:"^5.4.0"}}});var yTr={};module.exports=Cet(yTr);var Pm=ku(require("fs")),zue=ku(require("os")),Qp=ku(require("path")),w9=ku(require("readline")),Uue=ku(require("child_process")),em=ku(rZ()),h0=ku(SOe());var M6=ku(require("fs")),TOe=ku(require("os")),aT=ku(require("path")),yZ=ku(require("child_process"));function m1(a){return a==="~"?TOe.homedir():a.startsWith("~/")?aT.join(TOe.homedir(),a.slice(2)):a}t(m1,"expandHome");var y9=16*1024,hZ=32*1024,c_t=1e4,b1r=3e4,kOe=200,xOe=new Set(["node_modules",".git","dist","build","out",".next",".turbo","coverage","target","__pycache__",".venv","venv"]);function S1r(a){let s=t(_=>{let u=_.match(/^(.*?)\{([^}]+)\}(.*)$/);if(!u)return[_];let[,y,k,P]=u;return k.split(",").map(O=>`${y}${O.trim()}${P}`)},"braceExpand"),c=a.match(/^([^*{}]+?)\/\*\*\/(.+)$/);if(c){let[,_,u]=c;return{includes:s(u),subDir:_}}return{includes:s(a),subDir:""}}t(S1r,"expandGlobForGrep");var sM=class{constructor(s,c,_={}){this.workspaceRoot=s;this.languageAdapters=c;this.options=_;this._readFiles=new Set;this.customRepoRoots=_.customRepoRoots&&_.customRepoRoots.length>0?_.customRepoRoots:void 0}static{t(this,"CliToolExecutionContext")}markFileRead(s){this._readFiles.add(m1(s))}hasFileBeenRead(s){return this._readFiles.has(m1(s))}async readFile(s){return M6.promises.readFile(m1(s),"utf-8")}async writeFile(s,c){let _=m1(s);if(this.options.approveWrite&&!await this.options.approveWrite(_,c))throw new Error(`Write to ${_} rejected by user`);await M6.promises.mkdir(aT.dirname(_),{recursive:!0}),await M6.promises.writeFile(_,c,"utf-8")}async deleteFile(s){let c=aT.resolve(m1(s)),_=aT.resolve(this.workspaceRoot);if(!c.startsWith(_+aT.sep)&&c!==_)throw new Error(`Refusing to delete outside workspace: ${s}`);await M6.promises.unlink(c)}async listFiles(s,c){let _=m1(c??this.workspaceRoot),u=T1r(s),y=[];return await l_t(_,_,u,y),y.slice(0,kOe).sort()}async listDirectoryEntries(s){let c=m1(s),_=await M6.promises.readdir(c,{withFileTypes:!0}),u=[];for(let y of _){if(y.name.startsWith("."))continue;let k=y.isDirectory();if(y.isSymbolicLink())try{k=(await M6.promises.stat(aT.join(c,y.name))).isDirectory()}catch{k=!1}u.push(k?`${y.name}/`:y.name)}return u.sort()}async searchCode(s,c,_){let u=m1(c??this.workspaceRoot);return this.runRipgrep(s,u,_).catch(()=>this.runGrep(s,u,_))}async runCommand(s,c,_){let u=c.map(m1),y=_?m1(_):this.workspaceRoot,k={...process.env};if((s.split(/[\\/]/).pop()??s)==="gh")for(let O of["GITHUB_TOKEN","GH_TOKEN"]){let L=k[O];typeof L=="string"&&L.trim()===""&&delete k[O]}return new Promise(O=>{let L="",U="",Z=yZ.spawn(s,u,{cwd:y,shell:process.platform==="win32",env:k}),q=setTimeout(()=>{Z.kill("SIGTERM"),O({stdout:L.slice(0,hZ),stderr:U+`
1364
+ </body></html>`;t(MSr,"startLoopbackListener");t(RSr,"openBrowser");t(jSr,"buildDefaultDeviceLabel");t(LSr,"runOAuthSignIn")});var Bue=Ot((Z6r,$Sr)=>{$Sr.exports={name:"@burtson-labs/bandit-stealth-cli",version:"1.7.237",description:"Bandit \u2014 a local-first AI coding agent for your terminal. Same runtime as the Bandit Stealth VS Code / Cursor extension.",keywords:["ai","agent","cli","coding-agent","llm","ollama","local-first","bandit","burtson-labs","terminal","repl","developer-tools"],homepage:"https://burtson.ai",bugs:{email:"team@burtson.ai"},license:"MIT",author:{name:"Burtson Labs",email:"team@burtson.ai",url:"https://burtson.ai"},bin:{bandit:"./dist/cli.js"},main:"dist/cli.js",files:["dist/cli.js","README.md","LICENSE"],engines:{node:">=20"},publishConfig:{access:"public"},scripts:{typecheck:"tsc -p tsconfig.json --noEmit",build:"node build.mjs","build:publish":"node build.mjs --publish",dev:"node build.mjs --watch",start:"node dist/cli.js",smoke:"node build.mjs && node dist/__smoke__/smoke.js",integration:"node build.mjs && node dist/__integration__/ollama.js",eval:"node build.mjs && node dist/__eval__/eval.js",benchmark:"node build.mjs && node dist/__eval__/benchmark.js","gen-logo":"node scripts/gen-logo.mjs","preview-banner":"node scripts/preview-banner.mjs",clean:"rm -rf dist",prepack:"node scripts/prepack.mjs",postpack:"node scripts/postpack.mjs",prepublishOnly:"pnpm run clean && pnpm run typecheck && pnpm run build:publish"},dependencies:{"pdf-parse":"^2.4.5"},devDependencies:{"@burtson-labs/agent-core":"workspace:*","@burtson-labs/host-kit":"workspace:*","@burtson-labs/stealth-core-runtime":"workspace:*","@types/node":"^20.11.0","@types/pdf-parse":"^1.1.5","@types/pngjs":"^6.0.5",esbuild:"^0.28.0",pngjs:"^7.0.0",typescript:"^5.4.0"}}});var yTr={};module.exports=Cet(yTr);var Pm=ku(require("fs")),zue=ku(require("os")),Qp=ku(require("path")),w9=ku(require("readline")),Uue=ku(require("child_process")),em=ku(rZ()),h0=ku(SOe());var M6=ku(require("fs")),TOe=ku(require("os")),aT=ku(require("path")),yZ=ku(require("child_process"));function m1(a){return a==="~"?TOe.homedir():a.startsWith("~/")?aT.join(TOe.homedir(),a.slice(2)):a}t(m1,"expandHome");var y9=16*1024,hZ=32*1024,c_t=1e4,b1r=3e4,kOe=200,xOe=new Set(["node_modules",".git","dist","build","out",".next",".turbo","coverage","target","__pycache__",".venv","venv"]);function S1r(a){let s=t(_=>{let u=_.match(/^(.*?)\{([^}]+)\}(.*)$/);if(!u)return[_];let[,y,k,P]=u;return k.split(",").map(O=>`${y}${O.trim()}${P}`)},"braceExpand"),c=a.match(/^([^*{}]+?)\/\*\*\/(.+)$/);if(c){let[,_,u]=c;return{includes:s(u),subDir:_}}return{includes:s(a),subDir:""}}t(S1r,"expandGlobForGrep");var sM=class{constructor(s,c,_={}){this.workspaceRoot=s;this.languageAdapters=c;this.options=_;this._readFiles=new Set;this.customRepoRoots=_.customRepoRoots&&_.customRepoRoots.length>0?_.customRepoRoots:void 0}static{t(this,"CliToolExecutionContext")}markFileRead(s){this._readFiles.add(m1(s))}hasFileBeenRead(s){return this._readFiles.has(m1(s))}async readFile(s){return M6.promises.readFile(m1(s),"utf-8")}async writeFile(s,c){let _=m1(s);if(this.options.approveWrite&&!await this.options.approveWrite(_,c))throw new Error(`Write to ${_} rejected by user`);await M6.promises.mkdir(aT.dirname(_),{recursive:!0}),await M6.promises.writeFile(_,c,"utf-8")}async deleteFile(s){let c=aT.resolve(m1(s)),_=aT.resolve(this.workspaceRoot);if(!c.startsWith(_+aT.sep)&&c!==_)throw new Error(`Refusing to delete outside workspace: ${s}`);await M6.promises.unlink(c)}async listFiles(s,c){let _=m1(c??this.workspaceRoot),u=T1r(s),y=[];return await l_t(_,_,u,y),y.slice(0,kOe).sort()}async listDirectoryEntries(s){let c=m1(s),_=await M6.promises.readdir(c,{withFileTypes:!0}),u=[];for(let y of _){if(y.name.startsWith("."))continue;let k=y.isDirectory();if(y.isSymbolicLink())try{k=(await M6.promises.stat(aT.join(c,y.name))).isDirectory()}catch{k=!1}u.push(k?`${y.name}/`:y.name)}return u.sort()}async searchCode(s,c,_){let u=m1(c??this.workspaceRoot);return this.runRipgrep(s,u,_).catch(()=>this.runGrep(s,u,_))}async runCommand(s,c,_){let u=c.map(m1),y=_?m1(_):this.workspaceRoot,k={...process.env};if((s.split(/[\\/]/).pop()??s)==="gh")for(let O of["GITHUB_TOKEN","GH_TOKEN"]){let L=k[O];typeof L=="string"&&L.trim()===""&&delete k[O]}return new Promise(O=>{let L="",U="",Z=yZ.spawn(s,u,{cwd:y,shell:process.platform==="win32",env:k}),q=setTimeout(()=>{Z.kill("SIGTERM"),O({stdout:L.slice(0,hZ),stderr:U+`
1365
1365
  [process timed out]`,exitCode:124})},b1r),ye=process.stdout.isTTY===!0,ge=t((Te,dt)=>{if(!ye)return;(dt?process.stderr:process.stdout).write("\r\x1B[2K\x1B[2m"+Te+"\x1B[0m")},"writeLive");Z.stdout?.on("data",Te=>{let dt=Te.toString();L+=dt,ge(dt,!1),L.length>hZ&&Z.kill("SIGTERM")}),Z.stderr?.on("data",Te=>{let dt=Te.toString();U+=dt,ge(dt,!0)}),Z.on("close",Te=>{clearTimeout(q);let dt=L.slice(0,hZ);if(Te===0&&/Operation cancelled/i.test(dt)&&/(create-vite|create-react-app|create-next|create-svelte|create-astro|create-remix|@clack)/i.test(`${s} ${u.join(" ")} ${dt}`)){let bt=[s,...u].join(" ");O({stdout:dt,stderr:`Interactive scaffolder detected \u2014 \`${s}\` aborted with "Operation cancelled" because Bandit captures stdout/stderr (no TTY on stdin) and modern scaffolders refuse to start without one. Tell the user to run this directly in their shell: \`!${bt}\`. The \`!\`-prefix runs through their terminal with real stdin, so the scaffolder's prompts work. After they finish, you can pick up from the resulting filesystem state. Do NOT retry the same command \u2014 it will loop forever.`,exitCode:1});return}O({stdout:dt,stderr:U.slice(0,4*1024),exitCode:Te??0})}),Z.on("error",Te=>{if(clearTimeout(q),Te.code==="ENOENT"){O({stdout:"",stderr:`spawn ${s} ENOENT \u2014 '${s}' not found on PATH. Verify the tool is installed (\`which ${s}\` in a fresh terminal). If you use nvm/asdf/volta, your shim PATH may not be inherited; relaunching this CLI from the same terminal session that has \`${s}\` on PATH usually fixes it.`,exitCode:127});return}O({stdout:"",stderr:Te.message,exitCode:1})})})}async watchCommand(s,c,_,u){let y=c.map(m1),k=_?m1(_):this.workspaceRoot;return new Promise(P=>{let O="",L="",U=!1,Z=!1,q=yZ.spawn(s,y,{cwd:k,shell:process.platform==="win32",env:{...process.env}}),ye=t(mt=>{Z||(Z=!0,P({stdout:O.slice(0,hZ),stderr:L.slice(0,4*1024),exitCode:mt,endedEarly:U}))},"finish"),ge=setTimeout(()=>{try{q.kill("SIGTERM")}catch{}let mt=setTimeout(()=>{try{q.kill("SIGKILL")}catch{}ye(null)},1e3);q.once("close",bt=>{clearTimeout(mt),ye(typeof bt=="number"?bt:null)})},u),Te=process.stdout.isTTY===!0,dt=t((mt,bt)=>{if(!Te)return;(bt?process.stderr:process.stdout).write("\r\x1B[2K\x1B[2m"+mt+"\x1B[0m")},"writeLive");q.stdout?.on("data",mt=>{let bt=mt.toString();if(O+=bt,dt(bt,!1),O.length>hZ)try{q.kill("SIGTERM")}catch{}}),q.stderr?.on("data",mt=>{let bt=mt.toString();L+=bt,dt(bt,!0)}),q.on("close",mt=>{Z||(clearTimeout(ge),U=!0,ye(typeof mt=="number"?mt:null))}),q.on("error",mt=>{Z||(clearTimeout(ge),U=!0,L+=mt.message,ye(1))})})}runRipgrep(s,c,_){return new Promise((u,y)=>{let k=["--color=never","--line-number","--max-count=25","--max-filesize=1M",...[...xOe].map(U=>["--glob",`!${U}`]).flat()];_&&k.push("--glob",_),k.push(s,c);let P="",O=yZ.spawn("rg",k,{shell:!1}),L=setTimeout(()=>{O.kill("SIGTERM"),u(P.slice(0,y9))},c_t);O.stdout?.on("data",U=>{P+=U.toString(),P.length>y9&&O.kill("SIGTERM")}),O.on("close",U=>{clearTimeout(L),U!=null&&U>=2&&P.length===0?y(new Error(`rg exited with code ${U}`)):u(P.slice(0,y9))}),O.on("error",y)})}runGrep(s,c,_){return new Promise((u,y)=>{let k=[...xOe].map(ge=>["--exclude-dir",ge]).flat(),P=_?S1r(_):{includes:[],subDir:""},O=P.includes.flatMap(ge=>["--include",ge]),L=P.subDir?`${c}/${P.subDir}`:c,U=["-rn","-E","--color=never",...k,...O,s,L],Z="",q=yZ.spawn("grep",U,{shell:!1}),ye=setTimeout(()=>{q.kill("SIGTERM"),u(Z.slice(0,y9))},c_t);q.stdout?.on("data",ge=>{Z+=ge.toString(),Z.length>y9&&q.kill("SIGTERM")}),q.on("close",ge=>{clearTimeout(ye),ge!=null&&ge>=2&&Z.length===0?y(new Error(`grep exited with code ${ge}`)):u(Z.slice(0,y9))}),q.on("error",y)})}};function T1r(a){let s=k1r(a);return c=>s.test(c.replace(/\\/g,"/"))}t(T1r,"compileGlob");function k1r(a){let s="^";for(let c=0;c<a.length;c++){let _=a[c];if(_==="*")a[c+1]==="*"?(s+=".*",c++,a[c+1]==="/"&&c++):s+="[^/]*";else if(_==="?")s+="[^/]";else if(_==="{"){let u=a.indexOf("}",c);if(u===-1){s+="\\{";continue}let y=a.slice(c+1,u).split(",").map(x1r).join("|");s+=`(?:${y})`,c=u}else/[.+^$()|\\]/.test(_)?s+="\\"+_:s+=_}return s+="$",new RegExp(s)}t(k1r,"globToRegex");function x1r(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}t(x1r,"escapeRegex");async function l_t(a,s,c,_){if(_.length>=kOe)return;let u;try{u=await M6.promises.readdir(a,{withFileTypes:!0})}catch{return}for(let y of u){if(_.length>=kOe)return;if(xOe.has(y.name))continue;let k=aT.join(a,y.name),P=aT.relative(s,k);y.isDirectory()?await l_t(k,s,c,_):y.isFile()&&c(P)&&_.push(k)}}t(l_t,"walk");var f_t=ku(require("child_process")),pE=ku(require("fs")),__t=ku(require("os")),wOe=ku(require("path")),d_t=ku(require("crypto"));function COe(){let a=d_t.randomBytes(4).toString("hex");return wOe.join(__t.tmpdir(),`bandit-paste-${Date.now()}-${a}.png`)}t(COe,"freshTempPath");function bue(a,s,c={}){try{let _=f_t.spawnSync(a,s,{...c,encoding:void 0});return{stdout:Buffer.isBuffer(_.stdout)?_.stdout:Buffer.from(_.stdout??""),code:_.status}}catch{return{stdout:Buffer.alloc(0),code:null}}}t(bue,"tryExec");async function Sue(){return process.platform==="darwin"?w1r():process.platform==="linux"?C1r():process.platform==="win32"?P1r():null}t(Sue,"readClipboardImage");function w1r(){let a=COe(),s=`set pngData to (the clipboard as \xABclass PNGf\xBB)
1366
1366
  set outFile to (open for access (POSIX file "${a}") with write permission)
1367
1367
  write pngData to outFile
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burtson-labs/bandit-stealth-cli",
3
- "version": "1.7.236",
3
+ "version": "1.7.237",
4
4
  "description": "Bandit — a local-first AI coding agent for your terminal. Same runtime as the Bandit Stealth VS Code / Cursor extension.",
5
5
  "keywords": [
6
6
  "ai",