pulse-coder-cli 0.0.1-alpha.7 → 0.0.1-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +4 -4
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -215,7 +215,7 @@ Here is some useful information about the environment you are running in:
|
|
|
215
215
|
|
|
216
216
|
</files>`,kK=/^agents\.md$/i,IK=()=>{try{let e=process.cwd(),r=Mj__namespace.default.readdirSync(e,{withFileTypes:!0}).find(o=>o.isFile()&&kK.test(o.name));if(!r)return null;let i=ss__namespace.default.join(e,r.name),n=Mj__namespace.default.readFileSync(i,"utf8").trim();return n.length>0?n:null}catch{return null}},zj=()=>IK()??SK;});var Uj=$(()=>{Dj();});var Lj,TK,$K,kp,qj,Rl=$(()=>{Vb();Ta();Uj();Lj={openai:{store:false,reasoningEffort:jj}},TK=e=>{let t=zj();return e?typeof e=="string"?e:typeof e=="function"?e():`${t}
|
|
217
217
|
|
|
218
|
-
${e.append}`:t},$K=(e,t)=>{let r={};for(let[i,n]of Object.entries(e))r[i]={...n,execute:async o=>await n.execute(o,t)};return r},kp=(e,t,r)=>{let i=r?.provider??mw,n=r?.model??hw,o=r?.toolExecutionContext?$K(t,r.toolExecutionContext):t;return sA({model:i(n),system:
|
|
218
|
+
${e.append}`:t},$K=(e,t)=>{let r={};for(let[i,n]of Object.entries(e))r[i]={...n,execute:async o=>await n.execute(o,t)};return r},kp=(e,t,r)=>{let i=r?.provider??mw,n=r?.model??hw,o=r?.toolExecutionContext?$K(t,r.toolExecutionContext):t,s=TK(r?.systemPrompt);return sA({model:i(n),system:s,messages:e,tools:o,providerOptions:Lj,abortSignal:r?.abortSignal,onStepFinish:r?.onStepFinish,onChunk:r?.onChunk})},qj=async(e,t)=>{let r=t?.provider??mw,i=t?.model??hw,n="\u4F60\u662F\u8D1F\u8D23\u538B\u7F29\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u7684\u52A9\u624B\u3002\u8BF7\u57FA\u4E8E\u7ED9\u5B9A\u5386\u53F2\u6D88\u606F\uFF0C\u63D0\u70BC\u5173\u952E\u4E8B\u5B9E\u4E0E\u51B3\u7B56\uFF0C\u907F\u514D\u81C6\u6D4B\u6216\u6269\u5C55\u3002",o=["\u8BF7\u5C06\u4EE5\u4E0A\u5BF9\u8BDD\u538B\u7F29\u4E3A\u4EE5\u4E0B\u683C\u5F0F\uFF0C\u4F7F\u7528\u4E2D\u6587\uFF1A","[COMPACTED_CONTEXT]","- \u76EE\u6807: ...","- \u8FDB\u5C55: ...","- \u5173\u952E\u7ED3\u679C: ...","- \u6587\u4EF6\u4E0E\u53D8\u66F4: ...",'- \u5173\u952E\u7247\u6BB5: "..." / `...` / "..."',"- \u5F85\u786E\u8BA4: ...","","\u8981\u6C42\uFF1A\u5185\u5BB9\u7B80\u6D01\u51C6\u786E\uFF0C\u4E0D\u8981\u7F16\u9020\u3002"].join(`
|
|
219
219
|
`);return (await nA({model:r(i),system:n,messages:[...e,{role:"user",content:o}],maxOutputTokens:t?.maxOutputTokens??Nj,providerOptions:Lj})).text??""};});var EK,CK,Fj,OK,Zj,Ml,Ip=$(()=>{Vb();Rl();Ta();EK=e=>{let t=e.trim();return t.length===0?"":t.startsWith("[COMPACTED_CONTEXT]")?t:`[COMPACTED_CONTEXT]
|
|
220
220
|
${t}`},CK=e=>{try{return JSON.stringify(e)}catch{return String(e)}},Fj=e=>{let t=0;for(let r of e)t+=r.role.length,typeof r.content=="string"?t+=r.content.length:t+=CK(r.content).length;return Math.ceil(t/4)},OK=(e,t)=>{let r=[];if(e.forEach((n,o)=>{n.role==="user"&&r.push(o);}),r.length<=t)return {oldMessages:[],recentMessages:e};let i=r[r.length-t];return {oldMessages:e.slice(0,i),recentMessages:e.slice(i)}},Zj=(e,t)=>{let r=[];if(e.forEach((n,o)=>{n.role==="user"&&r.push(o);}),r.length===0||r.length<=t)return e;let i=r[r.length-t];return e.slice(i)},Ml=async(e,t)=>{let{messages:r}=e;if(r.length===0)return {didCompact:false};let i=Fj(r);if(!t?.force&&i<Pj)return {didCompact:false};let{oldMessages:n,recentMessages:o}=OK(r,Sp);if(n.length===0)return {didCompact:false};try{let s=await qj(n,{provider:t?.provider,model:t?.model}),l=EK(s);if(!l)throw new Error("Empty summary result");let c=[{role:"assistant",content:l},...o];return Fj(c)>Aj?{didCompact:!0,reason:"summary-too-large",newMessages:Zj(r,Sp)}:{didCompact:!0,newMessages:c}}catch{let l=lA({messages:r,reasoning:"all",toolCalls:"all",emptyMessages:"remove"});return {didCompact:true,reason:"fallback",newMessages:Zj(l,Sp)}}};});function PK(e,t){let r={};for(let[i,n]of Object.entries(e))r[i]={...n,execute:async(o,s)=>{let l=t.onBeforeToolCall?await t.onBeforeToolCall(i,o)??o:o,c=await n.execute(l,s);return t.onAfterToolCall?await t.onAfterToolCall(i,l,c)??c:c}};return r}async function $a(e,t){let r=0,i=0,n=0;for(;;)try{if(n<gw){let{didCompact:p,newMessages:f}=await Ml(e,{provider:t?.provider,model:t?.model});if(p){n++,f&&t?.onCompacted?.(f);continue}}let o=t?.tools||{};t?.hooks&&(o=PK(o,t.hooks));let s={onClarificationRequest:t?.onClarificationRequest,abortSignal:t?.abortSignal},l=kp(e.messages,o,{abortSignal:t?.abortSignal,toolExecutionContext:s,provider:t?.provider,model:t?.model,systemPrompt:t?.systemPrompt,onStepFinish:p=>{t?.onStepFinish?.(p);},onChunk:({chunk:p})=>{p.type==="text-delta"&&t?.onText?.(p.text),p.type==="tool-call"&&t?.onToolCall?.(p),p.type==="tool-result"&&t?.onToolResult?.(p);}}),[c,u,d]=await Promise.all([l.text,l.steps,l.finishReason]);i+=u.length;for(let p of u)if(p.response?.messages?.length){let f=[...p.response.messages];t?.onResponse?.(f);}if(d==="stop")return c||"Task completed.";if(d==="length"){if(n<gw){let{didCompact:p,newMessages:f}=await Ml(e,{force:!0,provider:t?.provider,model:t?.model});if(p){n++,f&&t?.onCompacted?.(f);continue}}return c||"Context limit reached."}if(d==="content-filter")return c||"Content filtered.";if(d==="error")return c||"Task failed.";if(d==="tool-calls"){if(i>=Cj)return c||"Max steps reached, task may be incomplete.";continue}return c||"Task completed."}catch(o){if(t?.abortSignal?.aborted||o?.name==="AbortError")return "Request aborted.";if(r++,r>=Ej)return `Failed after ${r} errors: ${o?.message??String(o)}`;if(AK(o)){let s=Math.min(2e3*Math.pow(2,r-1),3e4);await NK(s);continue}return `Error: ${o?.message??String(o)}`}}function AK(e){let t=e?.status??e?.statusCode;return t===429||t===500||t===502||t===503}function NK(e){return new Promise(t=>setTimeout(t,e))}var zl=$(()=>{Rl();Ip();Ta();});var rr,Ea=$(()=>{Ta();rr=e=>{if(e.length<=xp)return e;let t=Math.floor(xp/2),r=e.length-xp;return e.slice(0,t)+`
|
|
221
221
|
|
|
@@ -367,7 +367,7 @@ ${r.comment}`:r.comment;}this.doc.range[2]=r.offset;break}default:this.errors.pu
|
|
|
367
367
|
`)+1;for(;r!==0;)this.onNewLine(this.offset+r),r=this.source.indexOf(`
|
|
368
368
|
`,r)+1;}yield*this.pop();break;default:yield*this.pop(),yield*this.step();}}*blockMap(t){let r=t.items[t.items.length-1];switch(this.type){case "newline":if(this.onKeyLine=false,r.value){let i="end"in r.value?r.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):t.items.push({start:[this.sourceToken]});}else r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case "space":case "comment":if(r.value)t.items.push({start:[this.sourceToken]});else if(r.sep)r.sep.push(this.sourceToken);else {if(this.atIndentedComment(r.start,t.indent)){let n=t.items[t.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,r.start),n.push(this.sourceToken),t.items.pop();return}}r.start.push(this.sourceToken);}return}if(this.indent>=t.indent){let i=!this.onKeyLine&&this.indent===t.indent,n=i&&(r.sep||r.explicitKey)&&this.type!=="seq-item-ind",o=[];if(n&&r.sep&&!r.value){let s=[];for(let l=0;l<r.sep.length;++l){let c=r.sep[l];switch(c.type){case "newline":s.push(l);break;case "space":break;case "comment":c.indent>t.indent&&(s.length=0);break;default:s.length=0;}}s.length>=2&&(o=r.sep.splice(s[1]));}switch(this.type){case "anchor":case "tag":n||r.value?(o.push(this.sourceToken),t.items.push({start:o}),this.onKeyLine=true):r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case "explicit-key-ind":!r.sep&&!r.explicitKey?(r.start.push(this.sourceToken),r.explicitKey=true):n||r.value?(o.push(this.sourceToken),t.items.push({start:o,explicitKey:true})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:true}]}),this.onKeyLine=true;return;case "map-value-ind":if(r.explicitKey)if(r.sep)if(r.value)t.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Ii(r.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(zz(r.key)&&!Ii(r.sep,"newline")){let s=Ka(r.start),l=r.key,c=r.sep;c.push(this.sourceToken),delete r.key,delete r.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:l,sep:c}]});}else o.length>0?r.sep=r.sep.concat(o,this.sourceToken):r.sep.push(this.sourceToken);else if(Ii(r.start,"newline"))Object.assign(r,{key:null,sep:[this.sourceToken]});else {let s=Ka(r.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]});}else r.sep?r.value||n?t.items.push({start:o,key:null,sep:[this.sourceToken]}):Ii(r.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):r.sep.push(this.sourceToken):Object.assign(r,{key:null,sep:[this.sourceToken]});this.onKeyLine=true;return;case "alias":case "scalar":case "single-quoted-scalar":case "double-quoted-scalar":{let s=this.flowScalar(this.type);n||r.value?(t.items.push({start:o,key:s,sep:[]}),this.onKeyLine=true):r.sep?this.stack.push(s):(Object.assign(r,{key:s,sep:[]}),this.onKeyLine=true);return}default:{let s=this.startBlockValue(t);if(s){if(s.type==="block-seq"){if(!r.explicitKey&&r.sep&&!Ii(r.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else i&&t.items.push({start:o});this.stack.push(s);return}}}}yield*this.pop(),yield*this.step();}*blockSequence(t){let r=t.items[t.items.length-1];switch(this.type){case "newline":if(r.value){let i="end"in r.value?r.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):t.items.push({start:[this.sourceToken]});}else r.start.push(this.sourceToken);return;case "space":case "comment":if(r.value)t.items.push({start:[this.sourceToken]});else {if(this.atIndentedComment(r.start,t.indent)){let n=t.items[t.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,r.start),n.push(this.sourceToken),t.items.pop();return}}r.start.push(this.sourceToken);}return;case "anchor":case "tag":if(r.value||this.indent<=t.indent)break;r.start.push(this.sourceToken);return;case "seq-item-ind":if(this.indent!==t.indent)break;r.value||Ii(r.start,"seq-item-ind")?t.items.push({start:[this.sourceToken]}):r.start.push(this.sourceToken);return}if(this.indent>t.indent){let i=this.startBlockValue(t);if(i){this.stack.push(i);return}}yield*this.pop(),yield*this.step();}*flowCollection(t){let r=t.items[t.items.length-1];if(this.type==="flow-error-end"){let i;do yield*this.pop(),i=this.peek(1);while(i?.type==="flow-collection")}else if(t.end.length===0){switch(this.type){case "comma":case "explicit-key-ind":!r||r.sep?t.items.push({start:[this.sourceToken]}):r.start.push(this.sourceToken);return;case "map-value-ind":!r||r.value?t.items.push({start:[],key:null,sep:[this.sourceToken]}):r.sep?r.sep.push(this.sourceToken):Object.assign(r,{key:null,sep:[this.sourceToken]});return;case "space":case "comment":case "newline":case "anchor":case "tag":!r||r.value?t.items.push({start:[this.sourceToken]}):r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case "alias":case "scalar":case "single-quoted-scalar":case "double-quoted-scalar":{let n=this.flowScalar(this.type);!r||r.value?t.items.push({start:[],key:n,sep:[]}):r.sep?this.stack.push(n):Object.assign(r,{key:n,sep:[]});return}case "flow-map-end":case "flow-seq-end":t.end.push(this.sourceToken);return}let i=this.startBlockValue(t);i?this.stack.push(i):(yield*this.pop(),yield*this.step());}else {let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===t.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let n=Zf(i),o=Ka(n);Mz(t);let s=t.end.splice(1,t.end.length);s.push(this.sourceToken);let l={type:"block-map",offset:t.offset,indent:t.indent,items:[{start:o,key:t,sep:s}]};this.onKeyLine=true,this.stack[this.stack.length-1]=l;}else yield*this.lineEnd(t);}}flowScalar(t){if(this.onNewLine){let r=this.source.indexOf(`
|
|
369
369
|
`)+1;for(;r!==0;)this.onNewLine(this.offset+r),r=this.source.indexOf(`
|
|
370
|
-
`,r)+1;}return {type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case "alias":case "scalar":case "single-quoted-scalar":case "double-quoted-scalar":return this.flowScalar(this.type);case "block-scalar-header":return {type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case "flow-map-start":case "flow-seq-start":return {type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case "seq-item-ind":return {type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case "explicit-key-ind":{this.onKeyLine=true;let r=Zf(t),i=Ka(r);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:true}]}}case "map-value-ind":{this.onKeyLine=true;let r=Zf(t),i=Ka(r);return {type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,r){return this.type!=="comment"||this.indent<=r?false:t.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()));}*lineEnd(t){switch(this.type){case "comma":case "doc-start":case "doc-end":case "flow-seq-end":case "flow-map-end":case "map-value-ind":yield*this.pop(),yield*this.step();break;case "newline":this.onKeyLine=false;default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop());}}};Dz.Parser=k0;});var Zz=M(Pc=>{var Uz=d0(),LX=xc(),Oc=Ic(),qX=cx(),FX=qe(),ZX=S0(),Lz=I0();function qz(e){let t=e.prettyErrors!==false;return {lineCounter:e.lineCounter||t&&new ZX.LineCounter||null,prettyErrors:t}}function VX(e,t={}){let{lineCounter:r,prettyErrors:i}=qz(t),n=new Lz.Parser(r?.addNewLine),o=new Uz.Composer(t),s=Array.from(o.compose(n.parse(e)));if(i&&r)for(let l of s)l.errors.forEach(Oc.prettifyError(e,r)),l.warnings.forEach(Oc.prettifyError(e,r));return s.length>0?s:Object.assign([],{empty:true},o.streamInfo())}function Fz(e,t={}){let{lineCounter:r,prettyErrors:i}=qz(t),n=new Lz.Parser(r?.addNewLine),o=new Uz.Composer(t),s=null;for(let l of o.compose(n.parse(e),true,e.length))if(!s)s=l;else if(s.options.logLevel!=="silent"){s.errors.push(new Oc.YAMLParseError(l.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&r&&(s.errors.forEach(Oc.prettifyError(e,r)),s.warnings.forEach(Oc.prettifyError(e,r))),s}function BX(e,t,r){let i;typeof t=="function"?i=t:r===void 0&&t&&typeof t=="object"&&(r=t);let n=Fz(e,r);if(!n)return null;if(n.warnings.forEach(o=>qX.warn(n.options.logLevel,o)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[];}return n.toJS(Object.assign({reviver:i},r))}function JX(e,t,r){let i=null;if(typeof t=="function"||Array.isArray(t)?i=t:r===void 0&&t&&(r=t),typeof r=="string"&&(r=r.length),typeof r=="number"){let n=Math.round(r);r=n<1?void 0:n>8?{indent:8}:{indent:n};}if(e===void 0){let{keepUndefined:n}=r??t??{};if(!n)return}return FX.isDocument(e)&&!i?e.toString(r):new LX.Document(e,i,r).toString(r)}Pc.parse=BX;Pc.parseAllDocuments=VX;Pc.parseDocument=Fz;Pc.stringify=JX;});var Bz=M(Be=>{var WX=d0(),KX=xc(),HX=Bx(),T0=Ic(),GX=oc(),Ti=qe(),YX=wi(),XX=yt(),QX=Si(),eQ=ki(),tQ=qf(),rQ=w0(),nQ=S0(),iQ=I0(),Vf=Zz(),Vz=tc();Be.Composer=WX.Composer;Be.Document=KX.Document;Be.Schema=HX.Schema;Be.YAMLError=T0.YAMLError;Be.YAMLParseError=T0.YAMLParseError;Be.YAMLWarning=T0.YAMLWarning;Be.Alias=GX.Alias;Be.isAlias=Ti.isAlias;Be.isCollection=Ti.isCollection;Be.isDocument=Ti.isDocument;Be.isMap=Ti.isMap;Be.isNode=Ti.isNode;Be.isPair=Ti.isPair;Be.isScalar=Ti.isScalar;Be.isSeq=Ti.isSeq;Be.Pair=YX.Pair;Be.Scalar=XX.Scalar;Be.YAMLMap=QX.YAMLMap;Be.YAMLSeq=eQ.YAMLSeq;Be.CST=tQ;Be.Lexer=rQ.Lexer;Be.LineCounter=nQ.LineCounter;Be.Parser=iQ.Parser;Be.parse=Vf.parse;Be.parseAllDocuments=Vf.parseAllDocuments;Be.parseDocument=Vf.parseDocument;Be.stringify=Vf.stringify;Be.visit=Vz.visit;Be.visitAsync=Vz.visitAsync;});var Ac,E0=$(()=>{Bw();Jw();Ac=class{enginePlugins=new Map;userConfigPlugins=[];tools=new Map;runHooks=new Map;services=new Map;protocols=new Map;config=new Map;events=new events.EventEmitter;logger;constructor(t){this.logger=t??{debug:(r,i)=>console.debug(`[PluginManager] ${r}`,i),info:(r,i)=>console.info(`[PluginManager] ${r}`,i),warn:(r,i)=>console.warn(`[PluginManager] ${r}`,i),error:(r,i,n)=>console.error(`[PluginManager] ${r}`,i,n)};}async initialize(t={}){this.logger.info("Initializing plugin system...");try{await this.loadEnginePlugins(t.enginePlugins),await this.validateCoreCapabilities(),await this.loadUserConfigPlugins(t.userConfigPlugins),this.logger.info("Plugin system initialized successfully");}catch(r){throw this.logger.error("Failed to initialize plugin system",r),r}}async loadEnginePlugins(t={}){let r=[];if(t.plugins&&r.push(...t.plugins),t.scan!==false){let n=t.dirs||[".pulse-coder/engine-plugins",".coder/engine-plugins","~/.pulse-coder/engine-plugins","~/.coder/engine-plugins"];for(let o of n){let s=await this.scanEnginePlugins(o);r.push(...s);}}let i=this.sortPluginsByDependencies(r);for(let n of i)await this.initializeEnginePlugin(n);}async scanEnginePlugins(t){let r=[],i=this.resolvePath(t);try{let o=await ec("**/*.plugin.{js,ts}",{cwd:i,absolute:!0});for(let s of o)try{let l=await this.loadEnginePluginFile(s);r.push(l),this.logger.info(`Loaded engine plugin: ${l.name} from ${s}`);}catch(l){this.logger.error(`Failed to load engine plugin from ${s}`,l);}}catch{this.logger.debug(`Directory not found: ${i}`);}return r}async loadEnginePluginFile(t){let r=await import(t),i=r.default||r;if(!i.name||!i.initialize)throw new Error(`Invalid engine plugin: ${t}`);return i}async initializeEnginePlugin(t){try{if(t.dependencies){for(let i of t.dependencies)if(!this.enginePlugins.has(i))throw new Error(`Dependency not found: ${i} for plugin ${t.name}`)}let r={registerTool:(i,n)=>{this.tools.set(i,n);},registerTools:i=>{Object.entries(i).forEach(([n,o])=>{this.tools.set(n,o);});},getTool:i=>this.tools.get(i),registerRunHook:(i,n)=>{this.runHooks.set(i,n);},getRunHook:i=>this.runHooks.get(i),registerProtocol:(i,n)=>{this.protocols.set(i,n);},getProtocol:i=>this.protocols.get(i),registerService:(i,n)=>{this.services.set(i,n);},getService:i=>this.services.get(i),getConfig:i=>this.config.get(i),setConfig:(i,n)=>this.config.set(i,n),events:this.events,logger:this.logger};t.beforeInitialize&&await t.beforeInitialize(r),await t.initialize(r),t.afterInitialize&&await t.afterInitialize(r),this.enginePlugins.set(t.name,t);}catch(r){throw new Error(`Failed to initialize engine plugin ${t.name}: ${r}`)}}async loadUserConfigPlugins(t={}){let r=[];if(t.configs&&r.push(...t.configs),t.scan!==false){let i=t.dirs||[".pulse-coder/config",".coder/config","~/.pulse-coder/config","~/.coder/config"];for(let n of i){let o=await this.scanUserConfigPlugins(n);r.push(...o);}}for(let i of r)await this.applyUserConfig(i);}async scanUserConfigPlugins(t){let r=[],i=this.resolvePath(t);try{let n=["config.{json,yaml,yml}","*.config.{json,yaml,yml}"];for(let o of n){let s=await ec(o,{cwd:i,absolute:!0});for(let l of s)try{let c=await this.loadUserConfigFile(l);r.push(c),this.logger.info(`Loaded user config: ${c.name||l}`);}catch(c){this.logger.error(`Failed to load user config from ${l}`,c);}}}catch{this.logger.debug(`Directory not found: ${i}`);}return r}async loadUserConfigFile(t){let r=await Mj.promises.readFile(t,"utf-8"),i=ss__namespace.default.extname(t),n;try{if(i===".json")n=JSON.parse(r);else if(i===".yaml"||i===".yml")n=(await Promise.resolve().then(()=>Oi(Bz(),1))).parse(r);else throw new Error(`Unsupported config format: ${i}`)}catch(s){throw new Error(`Failed to parse config file ${t}: ${s}`)}return n=new Wp().resolveObject(n),n}async applyUserConfig(t){try{if(t.tools)for(let[r,i]of Object.entries(t.tools))i.enabled!==!1&&this.logger.debug(`Configured tool: ${r}`);if(t.mcp?.servers)for(let r of t.mcp.servers)r.enabled!==!1&&this.logger.debug(`Configured MCP server: ${r.name}`);if(t.subAgents)for(let r of t.subAgents)r.enabled!==!1&&this.logger.debug(`Configured sub-agent: ${r.name}`);t.skills&&this.logger.debug("Configured skills scanning",t.skills),this.userConfigPlugins.push(t);}catch(r){this.logger.error("Failed to apply user config",r);}}async validateCoreCapabilities(){let t=["skill-registry"];for(let r of t)!this.enginePlugins.has(r)&&!this.enginePlugins.has(`pulse-coder-engine-${r}`)&&this.logger.warn(`Missing core capability: ${r}`);}sortPluginsByDependencies(t){let r=[],i=new Set,n=new Set,o=s=>{if(!i.has(s.name)){if(n.has(s.name))throw new Error(`Circular dependency detected: ${s.name}`);if(n.add(s.name),s.dependencies)for(let l of s.dependencies){let c=t.find(u=>u.name===l);c&&o(c);}n.delete(s.name),i.add(s.name),r.push(s);}};for(let s of t)o(s);return r}getTools(){return Object.fromEntries(this.tools)}getRunHooks(){return Array.from(this.runHooks.values())}getService(t){return this.services.get(t)}getProtocol(t){return this.protocols.get(t)}getStatus(){return {enginePlugins:Array.from(this.enginePlugins.keys()),userConfigPlugins:this.userConfigPlugins.map(t=>t.name||"unnamed"),tools:Array.from(this.tools.keys()),runHooks:Array.from(this.runHooks.keys()),services:Array.from(this.services.keys()),protocols:Array.from(this.protocols.keys())}}resolvePath(t){return t.startsWith("~/")?ss__namespace.default.join(process.env.HOME||process.env.USERPROFILE||"",t.slice(2)):ss__namespace.default.resolve(t)}};});async function sQ(e){return (await C0).getRandomValues(new Uint8Array(e))}async function lQ(e){let t="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r=Math.pow(2,8)-Math.pow(2,8)%t.length,i="";for(;i.length<e;){let n=await sQ(e-i.length);for(let o of n)o<r&&(i+=t[o%t.length]);}return i}async function cQ(e){return await lQ(e)}async function uQ(e){let t=await(await C0).subtle.digest("SHA-256",new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function O0(e){if(e||(e=43),e<43||e>128)throw `Expected a length between 43 and 128. Received ${e}.`;let t=await cQ(e),r=await uQ(t);return {code_verifier:t,code_challenge:r}}var C0,Jz=$(()=>{C0=globalThis.crypto?.webcrypto??globalThis.crypto??import('crypto').then(e=>e.webcrypto);});function WQ(e){let t=typeof e=="string"?new URL(e):new URL(e.href);return t.hash="",t}function KQ({requestedResource:e,configuredResource:t}){let r=typeof e=="string"?new URL(e):new URL(e.href),i=typeof t=="string"?new URL(t):new URL(t.href);if(r.origin!==i.origin||r.pathname.length<i.pathname.length)return false;let n=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",o=i.pathname.endsWith("/")?i.pathname:i.pathname+"/";return n.startsWith(o)}function Hf(e){var t;let r=(t=e.headers.get("www-authenticate"))!=null?t:e.headers.get("WWW-Authenticate");if(!r)return;let[i,n]=r.split(" ");if(i.toLowerCase()!=="bearer"||!n)return;let o=/resource_metadata="([^"]*)"/,s=r.match(o);if(s)try{return new URL(s[1])}catch{return}}function HQ(e,t="",r={}){return t.endsWith("/")&&(t=t.slice(0,-1)),r.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}async function N0(e,t,r=fetch){try{return await r(e,{headers:t})}catch(i){if(i instanceof TypeError)return t?N0(e,void 0,r):void 0;throw i}}async function Xz(e,t,r=fetch){return await N0(e,{"MCP-Protocol-Version":t},r)}function GQ(e,t){return !e||e.status>=400&&e.status<500&&t!=="/"}async function YQ(e,t,r,i){var n,o;let s=new URL(e),l=(n=i?.protocolVersion)!=null?n:Ga,c;if(i?.metadataUrl)c=new URL(i.metadataUrl);else {let d=HQ(t,s.pathname);c=new URL(d,(o=i?.metadataServerUrl)!=null?o:s),c.search=s.search;}let u=await Xz(c,l,r);if(!i?.metadataUrl&&GQ(u,s.pathname)){let d=new URL(`/.well-known/${t}`,s);u=await Xz(d,l,r);}return u}async function XQ(e,t,r=fetch){let i=await YQ(e,"oauth-protected-resource",r,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!i||i.status===404)throw new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!i.ok)throw new Error(`HTTP ${i.status} trying to load well-known OAuth protected resource metadata.`);return zQ.parse(await i.json())}function QQ(e){let t=typeof e=="string"?new URL(e):e,r=t.pathname!=="/",i=[];if(!r)return i.push({url:new URL("/.well-known/oauth-authorization-server",t.origin),type:"oauth"}),i.push({url:new URL("/.well-known/openid-configuration",t.origin),type:"oidc"}),i;let n=t.pathname;return n.endsWith("/")&&(n=n.slice(0,-1)),i.push({url:new URL(`/.well-known/oauth-authorization-server${n}`,t.origin),type:"oauth"}),i.push({url:new URL("/.well-known/oauth-authorization-server",t.origin),type:"oauth"}),i.push({url:new URL(`/.well-known/openid-configuration${n}`,t.origin),type:"oidc"}),i.push({url:new URL(`${n}/.well-known/openid-configuration`,t.origin),type:"oidc"}),i}async function eee(e,{fetchFn:t=fetch,protocolVersion:r=Ga}={}){var i;let n={"MCP-Protocol-Version":r},o=QQ(e);for(let{url:s,type:l}of o){let c=await N0(s,n,t);if(c){if(!c.ok){if(c.status>=400&&c.status<500)continue;throw new Error(`HTTP ${c.status} trying to load ${l==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`)}if(l==="oauth")return d2.parse(await c.json());{let u=UQ.parse(await c.json());if(!((i=u.code_challenge_methods_supported)!=null&&i.includes("S256")))throw new Error(`Incompatible OIDC provider at ${s}: does not support S256 code challenge method required by MCP specification`);return u}}}}async function tee(e,{metadata:t,clientInformation:r,redirectUrl:i,scope:n,state:o,resource:s}){let l="code",c="S256",u;if(t){if(u=new URL(t.authorization_endpoint),!t.response_types_supported.includes(l))throw new Error(`Incompatible auth server: does not support response type ${l}`);if(!t.code_challenge_methods_supported||!t.code_challenge_methods_supported.includes(c))throw new Error(`Incompatible auth server: does not support code challenge method ${c}`)}else u=new URL("/authorize",e);let d=await O0(),p=d.code_verifier,f=d.code_challenge;return u.searchParams.set("response_type",l),u.searchParams.set("client_id",r.client_id),u.searchParams.set("code_challenge",f),u.searchParams.set("code_challenge_method",c),u.searchParams.set("redirect_uri",String(i)),o&&u.searchParams.set("state",o),n&&u.searchParams.set("scope",n),n?.includes("offline_access")&&u.searchParams.append("prompt","consent"),s&&u.searchParams.set("resource",s.href),{authorizationUrl:u,codeVerifier:p}}function f2(e,t){let r=e.client_secret!==void 0;return t.length===0?r?"client_secret_post":"none":r&&t.includes("client_secret_basic")?"client_secret_basic":r&&t.includes("client_secret_post")?"client_secret_post":t.includes("none")?"none":r?"client_secret_post":"none"}function m2(e,t,r,i){let{client_id:n,client_secret:o}=t;switch(e){case "client_secret_basic":ree(n,o,r);return;case "client_secret_post":nee(n,o,i);return;case "none":iee(n,i);return;default:throw new Error(`Unsupported client authentication method: ${e}`)}}function ree(e,t,r){if(!t)throw new Error("client_secret_basic authentication requires a client_secret");let i=btoa(`${e}:${t}`);r.set("Authorization",`Basic ${i}`);}function nee(e,t,r){r.set("client_id",e),t&&r.set("client_secret",t);}function iee(e,t){t.set("client_id",e);}async function j0(e){let t=e instanceof Response?e.status:void 0,r=e instanceof Response?await e.text():e;try{let i=FQ.parse(JSON.parse(r)),{error:n,error_description:o,error_uri:s}=i,l=JQ[n]||Ha;return new l({message:o||"",cause:s})}catch(i){let n=`${t?`HTTP ${t}: `:""}Invalid OAuth error response: ${i}. Raw body: ${r}`;return new Ha({message:n})}}async function oee(e,{metadata:t,clientInformation:r,authorizationCode:i,codeVerifier:n,redirectUri:o,resource:s,addClientAuthentication:l,fetchFn:c}){var u;let d="authorization_code",p=t?.token_endpoint?new URL(t.token_endpoint):new URL("/token",e);if(t?.grant_types_supported&&!t.grant_types_supported.includes(d))throw new Error(`Incompatible auth server: does not support grant type ${d}`);let f=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}),m=new URLSearchParams({grant_type:d,code:i,code_verifier:n,redirect_uri:String(o)});if(l)l(f,m,e,t);else {let h=(u=t?.token_endpoint_auth_methods_supported)!=null?u:[],y=f2(r,h);m2(y,r,f,m);}s&&m.set("resource",s.href);let v=await(c??fetch)(p,{method:"POST",headers:f,body:m});if(!v.ok)throw await j0(v);return u2.parse(await v.json())}async function aee(e,{metadata:t,clientInformation:r,refreshToken:i,resource:n,addClientAuthentication:o,fetchFn:s}){var l;let c="refresh_token",u;if(t){if(u=new URL(t.token_endpoint),t.grant_types_supported&&!t.grant_types_supported.includes(c))throw new Error(`Incompatible auth server: does not support grant type ${c}`)}else u=new URL("/token",e);let d=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}),p=new URLSearchParams({grant_type:c,refresh_token:i});if(o)o(d,p,e,t);else {let m=(l=t?.token_endpoint_auth_methods_supported)!=null?l:[],v=f2(r,m);m2(v,r,d,p);}n&&p.set("resource",n.href);let f=await(s??fetch)(u,{method:"POST",headers:d,body:p});if(!f.ok)throw await j0(f);return u2.parse({refresh_token:i,...await f.json()})}async function see(e,{metadata:t,clientMetadata:r,fetchFn:i}){let n;if(t){if(!t.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");n=new URL(t.registration_endpoint);}else n=new URL("/register",e);let o=await(i??fetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!o.ok)throw await j0(o);return ZQ.parse(await o.json())}async function Gf(e,t){var r,i;try{return await P0(e,t)}catch(n){if(n instanceof Bf||n instanceof Wf)return await((r=e.invalidateCredentials)==null?void 0:r.call(e,"all")),await P0(e,t);if(n instanceof Jf)return await((i=e.invalidateCredentials)==null?void 0:i.call(e,"tokens")),await P0(e,t);throw n}}async function lee(e,t,r){let i=WQ(e);if(t.validateResourceURL)return await t.validateResourceURL(i,r?.resource);if(r){if(!KQ({requestedResource:i,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${i} (or origin)`);return new URL(r.resource)}}async function P0(e,{serverUrl:t,authorizationCode:r,scope:i,resourceMetadataUrl:n,fetchFn:o}){let s,l;try{s=await XQ(t,{resourceMetadataUrl:n},o),s.authorization_servers&&s.authorization_servers.length>0&&(l=s.authorization_servers[0]);}catch{}l||(l=t);let c=await lee(t,e,s),u=await eee(l,{fetchFn:o}),d=await Promise.resolve(e.clientInformation());if(!d){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");if(!e.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let h=await see(l,{metadata:u,clientMetadata:e.clientMetadata,fetchFn:o});await e.saveClientInformation(h),d=h;}if(r!==void 0){let h=await e.codeVerifier(),y=await oee(l,{metadata:u,clientInformation:d,authorizationCode:r,codeVerifier:h,redirectUri:e.redirectUrl,resource:c,addClientAuthentication:e.addClientAuthentication,fetchFn:o});return await e.saveTokens(y),"AUTHORIZED"}let p=await e.tokens();if(p?.refresh_token)try{let h=await aee(l,{metadata:u,clientInformation:d,refreshToken:p.refresh_token,resource:c,addClientAuthentication:e.addClientAuthentication,fetchFn:o});return await e.saveTokens(h),"AUTHORIZED"}catch(h){if(!(!(h instanceof jc)||h instanceof Ha))throw h}let f=e.state?await e.state():void 0,{authorizationUrl:m,codeVerifier:v}=await tee(l,{metadata:u,clientInformation:d,state:f,redirectUrl:e.redirectUrl,scope:i||e.clientMetadata.scope,resource:c});return await e.saveCodeVerifier(v),await e.redirectToAuthorization(m),"REDIRECT"}function dee(e){switch(e.type){case "sse":return new cee(e);case "http":return new uee(e);default:throw new Ze({message:"Unsupported or invalid transport configuration. If you are using a custom transport, make sure it implements the MCPTransport interface."})}}function pee(e){return "start"in e&&typeof e.start=="function"&&"send"in e&&typeof e.send=="function"&&"close"in e&&typeof e.close=="function"}function Qz({output:e}){let t=e;return !("content"in t)||!Array.isArray(t.content)?{type:"json",value:t}:{type:"content",value:t.content.map(i=>i.type==="text"&&"text"in i?{type:"text",text:i.text}:i.type==="image"&&"data"in i&&"mimeType"in i?{type:"image-data",data:i.data,mediaType:i.mimeType}:{type:"text",text:JSON.stringify(i)})}}async function h2(e){let t=new mee(e);return await t.init(),t}var dQ,e2,pQ,Wz,Kz,Ze,Ga,fQ,mQ,hQ,Yf,qn,t2,r2,gQ,yQ,A0,vQ,_Q,n2,i2,bQ,wQ,o2,a2,s2,l2,xQ,SQ,kQ,IQ,TQ,$Q,EQ,CQ,OQ,PQ,Hz,AQ,Xf,NQ,jQ,RQ,MQ,Nc,c2,u2,mr,zQ,d2,DQ,UQ,LQ,qQ,FQ,ZQ,VQ,p2,BQ,Gz,Yz,jc,Ha,Bf,Jf,Wf,JQ,Kf,cee,uee,fee,mee,g2=$(()=>{et();Rt();et();le();le();Jz();le();Rt();et();dQ="AI_MCPClientError",e2=`vercel.ai.error.${dQ}`,pQ=Symbol.for(e2),Ze=class extends(Kz=Le,Wz=pQ,Kz){constructor({name:e="MCPClientError",message:t,cause:r,data:i,code:n}){super({name:e,message:t,cause:r}),this[Wz]=true,this.data=i,this.code=n;}static isInstance(e){return Le.hasMarker(e,e2)}},Ga="2025-06-18",fQ=[Ga,"2025-03-26","2024-11-05"],mQ=a.optional(a.record(a.string(),a.unknown())),hQ=a.looseObject({name:a.string(),version:a.string()}),Yf=a.looseObject({_meta:a.optional(a.object({}).loose())}),qn=Yf,t2=a.object({method:a.string(),params:a.optional(Yf)}),r2=a.object({applyDefaults:a.optional(a.boolean())}).loose(),gQ=a.looseObject({experimental:a.optional(a.object({}).loose()),logging:a.optional(a.object({}).loose()),prompts:a.optional(a.looseObject({listChanged:a.optional(a.boolean())})),resources:a.optional(a.looseObject({subscribe:a.optional(a.boolean()),listChanged:a.optional(a.boolean())})),tools:a.optional(a.looseObject({listChanged:a.optional(a.boolean())})),elicitation:a.optional(r2)}),a.object({elicitation:a.optional(r2)}).loose(),yQ=qn.extend({protocolVersion:a.string(),capabilities:gQ,serverInfo:hQ,instructions:a.optional(a.string())}),A0=qn.extend({nextCursor:a.optional(a.string())}),vQ=a.object({name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),inputSchema:a.object({type:a.literal("object"),properties:a.optional(a.object({}).loose())}).loose(),outputSchema:a.optional(a.object({}).loose()),annotations:a.optional(a.object({title:a.optional(a.string())}).loose()),_meta:mQ}).loose(),_Q=A0.extend({tools:a.array(vQ)}),n2=a.object({type:a.literal("text"),text:a.string()}).loose(),i2=a.object({type:a.literal("image"),data:a.base64(),mimeType:a.string()}).loose(),bQ=a.object({uri:a.string(),name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),mimeType:a.optional(a.string()),size:a.optional(a.number())}).loose(),wQ=A0.extend({resources:a.array(bQ)}),o2=a.object({uri:a.string(),name:a.optional(a.string()),title:a.optional(a.string()),mimeType:a.optional(a.string())}).loose(),a2=o2.extend({text:a.string()}),s2=o2.extend({blob:a.base64()}),l2=a.object({type:a.literal("resource"),resource:a.union([a2,s2])}).loose(),xQ=qn.extend({content:a.array(a.union([n2,i2,l2])),structuredContent:a.optional(a.unknown()),isError:a.boolean().default(false).optional()}).or(qn.extend({toolResult:a.unknown()})),SQ=a.object({uriTemplate:a.string(),name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),mimeType:a.optional(a.string())}).loose(),kQ=qn.extend({resourceTemplates:a.array(SQ)}),IQ=qn.extend({contents:a.array(a.union([a2,s2]))}),TQ=a.object({name:a.string(),description:a.optional(a.string()),required:a.optional(a.boolean())}).loose(),$Q=a.object({name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),arguments:a.optional(a.array(TQ))}).loose(),EQ=A0.extend({prompts:a.array($Q)}),CQ=a.object({role:a.union([a.literal("user"),a.literal("assistant")]),content:a.union([n2,i2,l2])}).loose(),OQ=qn.extend({description:a.optional(a.string()),messages:a.array(CQ)}),PQ=Yf.extend({message:a.string(),requestedSchema:a.unknown()}),Hz=t2.extend({method:a.literal("elicitation/create"),params:PQ}),AQ=qn.extend({action:a.union([a.literal("accept"),a.literal("decline"),a.literal("cancel")]),content:a.optional(a.record(a.string(),a.unknown()))}),Xf="2.0",NQ=a.object({jsonrpc:a.literal(Xf),id:a.union([a.string(),a.number().int()])}).merge(t2).strict(),jQ=a.object({jsonrpc:a.literal(Xf),id:a.union([a.string(),a.number().int()]),result:qn}).strict(),RQ=a.object({jsonrpc:a.literal(Xf),id:a.union([a.string(),a.number().int()]),error:a.object({code:a.number().int(),message:a.string(),data:a.optional(a.unknown())})}).strict(),MQ=a.object({jsonrpc:a.literal(Xf)}).merge(a.object({method:a.string(),params:a.optional(Yf)})).strict(),Nc=a.union([NQ,MQ,jQ,RQ]),c2=typeof __PACKAGE_VERSION__<"u"?__PACKAGE_VERSION__:"0.0.0-test",u2=a.object({access_token:a.string(),id_token:a.string().optional(),token_type:a.string(),expires_in:a.number().optional(),scope:a.string().optional(),refresh_token:a.string().optional()}).strip(),mr=a.string().url().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:a.ZodIssueCode.custom,message:"URL must be parseable",fatal:true}),a.NEVER}).refine(e=>{let t=new URL(e);return t.protocol!=="javascript:"&&t.protocol!=="data:"&&t.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),zQ=a.object({resource:a.string().url(),authorization_servers:a.array(mr).optional(),jwks_uri:a.string().url().optional(),scopes_supported:a.array(a.string()).optional(),bearer_methods_supported:a.array(a.string()).optional(),resource_signing_alg_values_supported:a.array(a.string()).optional(),resource_name:a.string().optional(),resource_documentation:a.string().optional(),resource_policy_uri:a.string().url().optional(),resource_tos_uri:a.string().url().optional(),tls_client_certificate_bound_access_tokens:a.boolean().optional(),authorization_details_types_supported:a.array(a.string()).optional(),dpop_signing_alg_values_supported:a.array(a.string()).optional(),dpop_bound_access_tokens_required:a.boolean().optional()}).passthrough(),d2=a.object({issuer:a.string(),authorization_endpoint:mr,token_endpoint:mr,registration_endpoint:mr.optional(),scopes_supported:a.array(a.string()).optional(),response_types_supported:a.array(a.string()),grant_types_supported:a.array(a.string()).optional(),code_challenge_methods_supported:a.array(a.string()),token_endpoint_auth_methods_supported:a.array(a.string()).optional(),token_endpoint_auth_signing_alg_values_supported:a.array(a.string()).optional()}).passthrough(),DQ=a.object({issuer:a.string(),authorization_endpoint:mr,token_endpoint:mr,userinfo_endpoint:mr.optional(),jwks_uri:mr,registration_endpoint:mr.optional(),scopes_supported:a.array(a.string()).optional(),response_types_supported:a.array(a.string()),grant_types_supported:a.array(a.string()).optional(),subject_types_supported:a.array(a.string()),id_token_signing_alg_values_supported:a.array(a.string()),claims_supported:a.array(a.string()).optional(),token_endpoint_auth_methods_supported:a.array(a.string()).optional()}).passthrough(),UQ=DQ.merge(d2.pick({code_challenge_methods_supported:true})),LQ=a.object({client_id:a.string(),client_secret:a.string().optional(),client_id_issued_at:a.number().optional(),client_secret_expires_at:a.number().optional()}).strip(),qQ=a.object({redirect_uris:a.array(mr),token_endpoint_auth_method:a.string().optional(),grant_types:a.array(a.string()).optional(),response_types:a.array(a.string()).optional(),client_name:a.string().optional(),client_uri:mr.optional(),logo_uri:mr.optional(),scope:a.string().optional(),contacts:a.array(a.string()).optional(),tos_uri:mr.optional(),policy_uri:a.string().optional(),jwks_uri:mr.optional(),jwks:a.any().optional(),software_id:a.string().optional(),software_version:a.string().optional(),software_statement:a.string().optional()}).strip(),FQ=a.object({error:a.string(),error_description:a.string().optional(),error_uri:a.string().optional()}),ZQ=qQ.merge(LQ),VQ="AI_MCPClientOAuthError",p2=`vercel.ai.error.${VQ}`,BQ=Symbol.for(p2),jc=class extends(Yz=Le,Gz=BQ,Yz){constructor({name:e="MCPClientOAuthError",message:t,cause:r}){super({name:e,message:t,cause:r}),this[Gz]=true;}static isInstance(e){return Le.hasMarker(e,p2)}},Ha=class extends jc{};Ha.errorCode="server_error";Bf=class extends jc{};Bf.errorCode="invalid_client";Jf=class extends jc{};Jf.errorCode="invalid_grant";Wf=class extends jc{};Wf.errorCode="unauthorized_client";JQ={[Ha.errorCode]:Ha,[Bf.errorCode]:Bf,[Jf.errorCode]:Jf,[Wf.errorCode]:Wf};Kf=class extends Error{constructor(e="Unauthorized"){super(e),this.name="UnauthorizedError";}};cee=class{constructor({url:e,headers:t,authProvider:r}){this.connected=false,this.url=new URL(e),this.headers=t,this.authProvider=r;}async commonHeaders(e){let t={...this.headers,...e,"mcp-protocol-version":Ga};if(this.authProvider){let r=await this.authProvider.tokens();r?.access_token&&(t.Authorization=`Bearer ${r.access_token}`);}return Xi(t,`ai-sdk/${c2}`,Nl())}async start(){return new Promise((e,t)=>{if(this.connected)return e();this.abortController=new AbortController;let r=async(i=false)=>{var n,o,s,l,c;try{let u=await this.commonHeaders({Accept:"text/event-stream"}),d=await fetch(this.url.href,{headers:u,signal:(n=this.abortController)==null?void 0:n.signal});if(d.status===401&&this.authProvider&&!i){this.resourceMetadataUrl=Hf(d);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED"){let h=new Kf;return (o=this.onerror)==null||o.call(this,h),t(h)}}catch(v){return (s=this.onerror)==null||s.call(this,v),t(v)}return r(!0)}if(!d.ok||!d.body){let v=`MCP SSE Transport Error: ${d.status} ${d.statusText}`;d.status===405&&(v+=". This server does not support SSE transport. Try using `http` transport instead");let h=new Ze({message:v});return (l=this.onerror)==null||l.call(this,h),t(h)}let f=d.body.pipeThrough(new TextDecoderStream).pipeThrough(new Cr).getReader(),m=async()=>{var v,h,y;try{for(;;){let{done:w,value:S}=await f.read();if(w){if(this.connected)throw this.connected=!1,new Ze({message:"MCP SSE Transport Error: Connection closed unexpectedly"});return}let{event:_,data:x}=S;if(_==="endpoint"){if(this.endpoint=new URL(x,this.url),this.endpoint.origin!==this.url.origin)throw new Ze({message:`MCP SSE Transport Error: Endpoint origin does not match connection origin: ${this.endpoint.origin}`});this.connected=!0,e();}else if(_==="message")try{let k=Nc.parse(JSON.parse(x));(v=this.onmessage)==null||v.call(this,k);}catch(k){let g=new Ze({message:"MCP SSE Transport Error: Failed to parse message",cause:k});(h=this.onerror)==null||h.call(this,g);}}}catch(w){if(w instanceof Error&&w.name==="AbortError")return;(y=this.onerror)==null||y.call(this,w),t(w);}};this.sseConnection={close:()=>f.cancel()},m();}catch(u){if(u instanceof Error&&u.name==="AbortError")return;(c=this.onerror)==null||c.call(this,u),t(u);}};r();})}async close(){var e,t,r;this.connected=false,(e=this.sseConnection)==null||e.close(),(t=this.abortController)==null||t.abort(),(r=this.onclose)==null||r.call(this);}async send(e){if(!this.endpoint||!this.connected)throw new Ze({message:"MCP SSE Transport Error: Not connected"});let t=this.endpoint,r=async(i=false)=>{var n,o,s,l,c;try{let d={method:"POST",headers:await this.commonHeaders({"Content-Type":"application/json"}),body:JSON.stringify(e),signal:(n=this.abortController)==null?void 0:n.signal},p=await fetch(t,d);if(p.status===401&&this.authProvider&&!i){this.resourceMetadataUrl=Hf(p);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED"){let m=new Kf;(o=this.onerror)==null||o.call(this,m);return}}catch(f){(s=this.onerror)==null||s.call(this,f);return}return r(!0)}if(!p.ok){let f=await p.text().catch(()=>null),m=new Ze({message:`MCP SSE Transport Error: POSTing to endpoint (HTTP ${p.status}): ${f}`});(l=this.onerror)==null||l.call(this,m);return}}catch(u){(c=this.onerror)==null||c.call(this,u);return}};await r();}},uee=class{constructor({url:e,headers:t,authProvider:r}){this.inboundReconnectAttempts=0,this.reconnectionOptions={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},this.url=new URL(e),this.headers=t,this.authProvider=r;}async commonHeaders(e){let t={...this.headers,...e,"mcp-protocol-version":Ga};if(this.sessionId&&(t["mcp-session-id"]=this.sessionId),this.authProvider){let r=await this.authProvider.tokens();r?.access_token&&(t.Authorization=`Bearer ${r.access_token}`);}return Xi(t,`ai-sdk/${c2}`,Nl())}async start(){if(this.abortController)throw new Ze({message:"MCP HTTP Transport Error: Transport already started. Note: client.connect() calls start() automatically."});this.abortController=new AbortController,this.openInboundSse();}async close(){var e,t,r;(e=this.inboundSseConnection)==null||e.close();try{if(this.sessionId&&this.abortController&&!this.abortController.signal.aborted){let i=await this.commonHeaders({});await fetch(this.url,{method:"DELETE",headers:i,signal:this.abortController.signal}).catch(()=>{});}}catch{}(t=this.abortController)==null||t.abort(),(r=this.onclose)==null||r.call(this);}async send(e){let t=async(r=false)=>{var i,n,o,s,l,c,u;try{let p={method:"POST",headers:await this.commonHeaders({"Content-Type":"application/json",Accept:"application/json, text/event-stream"}),body:JSON.stringify(e),signal:(i=this.abortController)==null?void 0:i.signal},f=await fetch(this.url,p),m=f.headers.get("mcp-session-id");if(m&&(this.sessionId=m),f.status===401&&this.authProvider&&!r){this.resourceMetadataUrl=Hf(f);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED")throw new Kf}catch(w){throw (n=this.onerror)==null||n.call(this,w),w}return t(!0)}if(f.status===202){this.inboundSseConnection||this.openInboundSse();return}if(!f.ok){let w=await f.text().catch(()=>null),S=`MCP HTTP Transport Error: POSTing to endpoint (HTTP ${f.status}): ${w}`;f.status===404&&(S+=". This server does not support HTTP transport. Try using `sse` transport instead");let _=new Ze({message:S});throw (o=this.onerror)==null||o.call(this,_),_}if(!("id"in e))return;let h=f.headers.get("content-type")||"";if(h.includes("application/json")){let w=await f.json(),S=Array.isArray(w)?w.map(_=>Nc.parse(_)):[Nc.parse(w)];for(let _ of S)(s=this.onmessage)==null||s.call(this,_);return}if(h.includes("text/event-stream")){if(!f.body){let x=new Ze({message:"MCP HTTP Transport Error: text/event-stream response without body"});throw (l=this.onerror)==null||l.call(this,x),x}let S=f.body.pipeThrough(new TextDecoderStream).pipeThrough(new Cr).getReader();(async()=>{var x,k,g;try{for(;;){let{done:T,value:C}=await S.read();if(T)return;let{event:A,data:D}=C;if(A==="message")try{let oe=Nc.parse(JSON.parse(D));(x=this.onmessage)==null||x.call(this,oe);}catch(oe){let z=new Ze({message:"MCP HTTP Transport Error: Failed to parse message",cause:oe});(k=this.onerror)==null||k.call(this,z);}}}catch(T){if(T instanceof Error&&T.name==="AbortError")return;(g=this.onerror)==null||g.call(this,T);}})();return}let y=new Ze({message:`MCP HTTP Transport Error: Unexpected content type: ${h}`});throw (c=this.onerror)==null||c.call(this,y),y}catch(d){throw (u=this.onerror)==null||u.call(this,d),d}};await t();}getNextReconnectionDelay(e){let{initialReconnectionDelay:t,reconnectionDelayGrowFactor:r,maxReconnectionDelay:i}=this.reconnectionOptions;return Math.min(t*Math.pow(r,e),i)}scheduleInboundSseReconnection(){var e;let{maxRetries:t}=this.reconnectionOptions;if(t>0&&this.inboundReconnectAttempts>=t){(e=this.onerror)==null||e.call(this,new Ze({message:`MCP HTTP Transport Error: Maximum reconnection attempts (${t}) exceeded.`}));return}let r=this.getNextReconnectionDelay(this.inboundReconnectAttempts);this.inboundReconnectAttempts+=1,setTimeout(async()=>{var i;(i=this.abortController)!=null&&i.signal.aborted||await this.openInboundSse(false,this.lastInboundEventId);},r);}async openInboundSse(e=false,t){var r,i,n,o,s,l;try{let c=await this.commonHeaders({Accept:"text/event-stream"});t&&(c["last-event-id"]=t);let u=await fetch(this.url.href,{method:"GET",headers:c,signal:(r=this.abortController)==null?void 0:r.signal}),d=u.headers.get("mcp-session-id");if(d&&(this.sessionId=d),u.status===401&&this.authProvider&&!e){this.resourceMetadataUrl=Hf(u);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED"){let h=new Kf;(i=this.onerror)==null||i.call(this,h);return}}catch(v){(n=this.onerror)==null||n.call(this,v);return}return this.openInboundSse(!0,t)}if(u.status===405)return;if(!u.ok||!u.body){let v=new Ze({message:`MCP HTTP Transport Error: GET SSE failed: ${u.status} ${u.statusText}`});(o=this.onerror)==null||o.call(this,v);return}let f=u.body.pipeThrough(new TextDecoderStream).pipeThrough(new Cr).getReader(),m=async()=>{var v,h,y,w;try{for(;;){let{done:S,value:_}=await f.read();if(S)return;let{event:x,data:k,id:g}=_;if(g&&(this.lastInboundEventId=g),x==="message")try{let T=Nc.parse(JSON.parse(k));(v=this.onmessage)==null||v.call(this,T);}catch(T){let C=new Ze({message:"MCP HTTP Transport Error: Failed to parse message",cause:T});(h=this.onerror)==null||h.call(this,C);}}}catch(S){if(S instanceof Error&&S.name==="AbortError")return;(y=this.onerror)==null||y.call(this,S),(w=this.abortController)!=null&&w.signal.aborted||this.scheduleInboundSseReconnection();}};this.inboundSseConnection={close:()=>f.cancel()},this.inboundReconnectAttempts=0,m();}catch(c){if(c instanceof Error&&c.name==="AbortError")return;(s=this.onerror)==null||s.call(this,c),(l=this.abortController)!=null&&l.signal.aborted||this.scheduleInboundSseReconnection();}}};fee="1.0.0";mee=class{constructor({transport:e,name:t="ai-sdk-mcp-client",version:r=fee,onUncaughtError:i,capabilities:n}){this.requestMessageId=0,this.responseHandlers=new Map,this.serverCapabilities={},this.isClosed=true,this.onUncaughtError=i,this.clientCapabilities=n??{},pee(e)?this.transport=e:this.transport=dee(e),this.transport.onclose=()=>this.onClose(),this.transport.onerror=o=>this.onError(o),this.transport.onmessage=o=>{if("method"in o){"id"in o?this.onRequestMessage(o):this.onError(new Ze({message:"Unsupported message type"}));return}this.onResponse(o);},this.clientInfo={name:t,version:r};}async init(){try{await this.transport.start(),this.isClosed=!1;let e=await this.request({request:{method:"initialize",params:{protocolVersion:Ga,capabilities:this.clientCapabilities,clientInfo:this.clientInfo}},resultSchema:yQ});if(e===void 0)throw new Ze({message:"Server sent invalid initialize result"});if(!fQ.includes(e.protocolVersion))throw new Ze({message:`Server's protocol version is not supported: ${e.protocolVersion}`});return this.serverCapabilities=e.capabilities,await this.notification({method:"notifications/initialized"}),this}catch(e){throw await this.close(),e}}async close(){var e;this.isClosed||(await((e=this.transport)==null?void 0:e.close()),this.onClose());}assertCapability(e){switch(e){case "initialize":break;case "tools/list":case "tools/call":if(!this.serverCapabilities.tools)throw new Ze({message:"Server does not support tools"});break;case "resources/list":case "resources/read":case "resources/templates/list":if(!this.serverCapabilities.resources)throw new Ze({message:"Server does not support resources"});break;case "prompts/list":case "prompts/get":if(!this.serverCapabilities.prompts)throw new Ze({message:"Server does not support prompts"});break;default:throw new Ze({message:`Unsupported method: ${e}`})}}async request({request:e,resultSchema:t,options:r}){return new Promise((i,n)=>{if(this.isClosed)return n(new Ze({message:"Attempted to send a request from a closed client"}));this.assertCapability(e.method);let o=r?.signal;o?.throwIfAborted();let s=this.requestMessageId++,l={...e,jsonrpc:"2.0",id:s},c=()=>{this.responseHandlers.delete(s);};this.responseHandlers.set(s,u=>{if(o?.aborted)return n(new Ze({message:"Request was aborted",cause:o.reason}));if(u instanceof Error)return n(u);try{let d=t.parse(u.result);i(d);}catch(d){let p=new Ze({message:"Failed to parse server response",cause:d});n(p);}}),this.transport.send(l).catch(u=>{c(),n(u);});})}async listTools({params:e,options:t}={}){try{return this.request({request:{method:"tools/list",params:e},resultSchema:_Q,options:t})}catch(r){throw r}}async callTool({name:e,args:t,options:r}){try{return this.request({request:{method:"tools/call",params:{name:e,arguments:t}},resultSchema:xQ,options:{signal:r?.abortSignal}})}catch(i){throw i}}async listResourcesInternal({params:e,options:t}={}){try{return this.request({request:{method:"resources/list",params:e},resultSchema:wQ,options:t})}catch(r){throw r}}async readResourceInternal({uri:e,options:t}){try{return this.request({request:{method:"resources/read",params:{uri:e}},resultSchema:IQ,options:t})}catch(r){throw r}}async listResourceTemplatesInternal({options:e}={}){try{return this.request({request:{method:"resources/templates/list"},resultSchema:kQ,options:e})}catch(t){throw t}}async listPromptsInternal({params:e,options:t}={}){try{return this.request({request:{method:"prompts/list",params:e},resultSchema:EQ,options:t})}catch(r){throw r}}async getPromptInternal({name:e,args:t,options:r}){try{return this.request({request:{method:"prompts/get",params:{name:e,arguments:t}},resultSchema:OQ,options:r})}catch(i){throw i}}async notification(e){let t={...e,jsonrpc:"2.0"};await this.transport.send(t);}async tools({schemas:e="automatic"}={}){var t,r;let i={};try{let n=await this.listTools();for(let{name:o,title:s,description:l,inputSchema:c,annotations:u,_meta:d}of n.tools){let p=s??u?.title;if(e!=="automatic"&&!(o in e))continue;let f=this,m=e!=="automatic"?(t=e[o])==null?void 0:t.outputSchema:void 0,v=async(y,w)=>{var S;(S=w?.abortSignal)==null||S.throwIfAborted();let _=await f.callTool({name:o,args:y,options:w});return m!=null?f.extractStructuredContent(_,m,o):_},h=e==="automatic"?cj({description:l,title:p,inputSchema:Ia({...c,properties:(r=c.properties)!=null?r:{},additionalProperties:!1}),execute:v,toModelOutput:Qz}):{description:l,title:p,inputSchema:e[o].inputSchema,...m!=null?{outputSchema:m}:{},execute:v,toModelOutput:Qz};i[o]={...h,_meta:d};}return i}catch(n){throw n}}async extractStructuredContent(e,t,r){if("structuredContent"in e&&e.structuredContent!=null){let i=await jl({value:e.structuredContent,schema:aw(t)});if(!i.success)throw new Ze({message:`Tool "${r}" returned structuredContent that does not match the expected outputSchema`,cause:i.error});return i.value}if("content"in e&&Array.isArray(e.content)){let i=e.content.find(n=>n.type==="text");if(i&&"text"in i){let n=await wp({text:i.text,schema:t});if(!n.success)throw new Ze({message:`Tool "${r}" returned content that does not match the expected outputSchema`,cause:n.error});return n.value}}throw new Ze({message:`Tool "${r}" did not return structuredContent or parseable text content`})}listResources({params:e,options:t}={}){return this.listResourcesInternal({params:e,options:t})}readResource({uri:e,options:t}){return this.readResourceInternal({uri:e,options:t})}listResourceTemplates({options:e}={}){return this.listResourceTemplatesInternal({options:e})}experimental_listPrompts({params:e,options:t}={}){return this.listPromptsInternal({params:e,options:t})}experimental_getPrompt({name:e,arguments:t,options:r}){return this.getPromptInternal({name:e,args:t,options:r})}onElicitationRequest(e,t){if(e!==Hz)throw new Ze({message:"Unsupported request schema. Only ElicitationRequestSchema is supported."});this.elicitationRequestHandler=t;}async onRequestMessage(e){try{if(e.method!=="elicitation/create"){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32601,message:`Unsupported request method: ${e.method}`}});return}if(!this.elicitationRequestHandler){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32601,message:"No elicitation handler registered on client"}});return}let t=Hz.safeParse({method:e.method,params:e.params});if(!t.success){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32602,message:`Invalid elicitation request: ${t.error.message}`,data:t.error.issues}});return}try{let r=await this.elicitationRequestHandler(t.data),i=AQ.parse(r);await this.transport.send({jsonrpc:"2.0",id:e.id,result:i});}catch(r){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32603,message:r instanceof Error?r.message:"Failed to handle elicitation request"}}),this.onError(r);}}catch(t){this.onError(t);}}onClose(){if(this.isClosed)return;this.isClosed=true;let e=new Ze({message:"Connection closed"});for(let t of this.responseHandlers.values())t(e);this.responseHandlers.clear();}onError(e){this.onUncaughtError&&this.onUncaughtError(e);}onResponse(e){let t=Number(e.id),r=this.responseHandlers.get(t);if(r===void 0)throw new Ze({message:`Protocol error: Received a response for an unknown message ID: ${JSON.stringify(e)}`});this.responseHandlers.delete(t),r("result"in e?e:new Ze({message:e.error.message,code:e.error.code,data:e.error.data,cause:e.error}));}};});async function gee(e){let t=ss__namespace.join(e,".pulse-coder","mcp.json"),r=ss__namespace.join(e,".coder","mcp.json"),i=Mj.existsSync(t)?t:r;if(!Mj.existsSync(i))return {servers:{}};try{let n=Mj.readFileSync(i,"utf-8"),o=JSON.parse(n);return !o.servers||typeof o.servers!="object"?(console.warn('[MCP] Invalid config: missing "servers" object'),{servers:{}}):{servers:o.servers}}catch(n){return console.warn(`[MCP] Failed to load config: ${n instanceof Error?n.message:"Unknown error"}`),{servers:{}}}}function yee(e){return {type:"http",url:e.url}}var Qf,M0=$(()=>{g2();Qf={name:"pulse-coder-engine/built-in-mcp",version:"1.0.0",async initialize(e){let t=await gee(process.cwd()),r=Object.keys(t.servers).length;if(r===0){console.log("[MCP] No MCP servers configured");return}let i=0;for(let[n,o]of Object.entries(t.servers))try{if(!o.url){console.warn(`[MCP] Server "${n}" missing URL, skipping`);continue}let s=yee(o),l=await h2({transport:s}),c=await l.tools(),u=Object.fromEntries(Object.entries(c).map(([d,p])=>[`mcp_${n}_${d}`,p]));e.registerTools(u),i++,console.log(`[MCP] Server "${n}" loaded (${Object.keys(c).length} tools)`),e.registerService(`mcp:${n}`,l);}catch(s){console.warn(`[MCP] Failed to load server "${n}": ${s instanceof Error?s.message:"Unknown error"}`);}i>0?console.log(`[MCP] Successfully loaded ${i}/${r} MCP servers`):console.warn("[MCP] No MCP servers were loaded successfully");}};});var Rc=M((O_e,_2)=>{var vee=Object.prototype.toString;_2.exports=function(t){if(t===void 0)return "undefined";if(t===null)return "null";var r=typeof t;if(r==="boolean")return "boolean";if(r==="string")return "string";if(r==="number")return "number";if(r==="symbol")return "symbol";if(r==="function")return See(t)?"generatorfunction":"function";if(_ee(t))return "array";if(Tee(t))return "buffer";if(Iee(t))return "arguments";if(wee(t))return "date";if(bee(t))return "error";if(xee(t))return "regexp";switch(v2(t)){case "Symbol":return "symbol";case "Promise":return "promise";case "WeakMap":return "weakmap";case "WeakSet":return "weakset";case "Map":return "map";case "Set":return "set";case "Int8Array":return "int8array";case "Uint8Array":return "uint8array";case "Uint8ClampedArray":return "uint8clampedarray";case "Int16Array":return "int16array";case "Uint16Array":return "uint16array";case "Int32Array":return "int32array";case "Uint32Array":return "uint32array";case "Float32Array":return "float32array";case "Float64Array":return "float64array"}if(kee(t))return "generator";switch(r=vee.call(t),r){case "[object Object]":return "object";case "[object Map Iterator]":return "mapiterator";case "[object Set Iterator]":return "setiterator";case "[object String Iterator]":return "stringiterator";case "[object Array Iterator]":return "arrayiterator"}return r.slice(8,-1).toLowerCase().replace(/\s/g,"")};function v2(e){return typeof e.constructor=="function"?e.constructor.name:null}function _ee(e){return Array.isArray?Array.isArray(e):e instanceof Array}function bee(e){return e instanceof Error||typeof e.message=="string"&&e.constructor&&typeof e.constructor.stackTraceLimit=="number"}function wee(e){return e instanceof Date?true:typeof e.toDateString=="function"&&typeof e.getDate=="function"&&typeof e.setDate=="function"}function xee(e){return e instanceof RegExp?true:typeof e.flags=="string"&&typeof e.ignoreCase=="boolean"&&typeof e.multiline=="boolean"&&typeof e.global=="boolean"}function See(e,t){return v2(e)==="GeneratorFunction"}function kee(e){return typeof e.throw=="function"&&typeof e.return=="function"&&typeof e.next=="function"}function Iee(e){try{if(typeof e.length=="number"&&typeof e.callee=="function")return !0}catch(t){if(t.message.indexOf("callee")!==-1)return true}return false}function Tee(e){return e.constructor&&typeof e.constructor.isBuffer=="function"?e.constructor.isBuffer(e):false}});var w2=M((P_e,b2)=>{b2.exports=function(t){return typeof t<"u"&&t!==null&&(typeof t=="object"||typeof t=="function")};});var k2=M((A_e,S2)=>{var x2=w2();S2.exports=function(t){x2(t)||(t={});for(var r=arguments.length,i=1;i<r;i++){var n=arguments[i];x2(n)&&$ee(t,n);}return t};function $ee(e,t){for(var r in t)Eee(t,r)&&(e[r]=t[r]);}function Eee(e,t){return Object.prototype.hasOwnProperty.call(e,t)}});var $2=M((N_e,T2)=>{var Cee=Rc(),Oee=k2();T2.exports=function(e,t){typeof t=="function"&&(t={parse:t});var r=Aee(e),i={section_delimiter:"---",parse:jee},n=Oee({},i,t),o=n.section_delimiter,s=r.content.split(/\r?\n/),l=null,c=I2(),u=[],d=[];function p(w){r.content=w,l=[],u=[];}function f(w){d.length&&(c.key=Nee(d[0],o),c.content=w,n.parse(c,l),l.push(c),c=I2(),u=[],d=[]);}for(var m=0;m<s.length;m++){var v=s[m],h=d.length,y=v.trim();if(Pee(y,o)){if(y.length===3&&m!==0){if(h===0||h===2){u.push(v);continue}d.push(y),c.data=u.join(`
|
|
370
|
+
`,r)+1;}return {type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case "alias":case "scalar":case "single-quoted-scalar":case "double-quoted-scalar":return this.flowScalar(this.type);case "block-scalar-header":return {type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case "flow-map-start":case "flow-seq-start":return {type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case "seq-item-ind":return {type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case "explicit-key-ind":{this.onKeyLine=true;let r=Zf(t),i=Ka(r);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:true}]}}case "map-value-ind":{this.onKeyLine=true;let r=Zf(t),i=Ka(r);return {type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,r){return this.type!=="comment"||this.indent<=r?false:t.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()));}*lineEnd(t){switch(this.type){case "comma":case "doc-start":case "doc-end":case "flow-seq-end":case "flow-map-end":case "map-value-ind":yield*this.pop(),yield*this.step();break;case "newline":this.onKeyLine=false;default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop());}}};Dz.Parser=k0;});var Zz=M(Pc=>{var Uz=d0(),LX=xc(),Oc=Ic(),qX=cx(),FX=qe(),ZX=S0(),Lz=I0();function qz(e){let t=e.prettyErrors!==false;return {lineCounter:e.lineCounter||t&&new ZX.LineCounter||null,prettyErrors:t}}function VX(e,t={}){let{lineCounter:r,prettyErrors:i}=qz(t),n=new Lz.Parser(r?.addNewLine),o=new Uz.Composer(t),s=Array.from(o.compose(n.parse(e)));if(i&&r)for(let l of s)l.errors.forEach(Oc.prettifyError(e,r)),l.warnings.forEach(Oc.prettifyError(e,r));return s.length>0?s:Object.assign([],{empty:true},o.streamInfo())}function Fz(e,t={}){let{lineCounter:r,prettyErrors:i}=qz(t),n=new Lz.Parser(r?.addNewLine),o=new Uz.Composer(t),s=null;for(let l of o.compose(n.parse(e),true,e.length))if(!s)s=l;else if(s.options.logLevel!=="silent"){s.errors.push(new Oc.YAMLParseError(l.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&r&&(s.errors.forEach(Oc.prettifyError(e,r)),s.warnings.forEach(Oc.prettifyError(e,r))),s}function BX(e,t,r){let i;typeof t=="function"?i=t:r===void 0&&t&&typeof t=="object"&&(r=t);let n=Fz(e,r);if(!n)return null;if(n.warnings.forEach(o=>qX.warn(n.options.logLevel,o)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[];}return n.toJS(Object.assign({reviver:i},r))}function JX(e,t,r){let i=null;if(typeof t=="function"||Array.isArray(t)?i=t:r===void 0&&t&&(r=t),typeof r=="string"&&(r=r.length),typeof r=="number"){let n=Math.round(r);r=n<1?void 0:n>8?{indent:8}:{indent:n};}if(e===void 0){let{keepUndefined:n}=r??t??{};if(!n)return}return FX.isDocument(e)&&!i?e.toString(r):new LX.Document(e,i,r).toString(r)}Pc.parse=BX;Pc.parseAllDocuments=VX;Pc.parseDocument=Fz;Pc.stringify=JX;});var Bz=M(Be=>{var WX=d0(),KX=xc(),HX=Bx(),T0=Ic(),GX=oc(),Ti=qe(),YX=wi(),XX=yt(),QX=Si(),eQ=ki(),tQ=qf(),rQ=w0(),nQ=S0(),iQ=I0(),Vf=Zz(),Vz=tc();Be.Composer=WX.Composer;Be.Document=KX.Document;Be.Schema=HX.Schema;Be.YAMLError=T0.YAMLError;Be.YAMLParseError=T0.YAMLParseError;Be.YAMLWarning=T0.YAMLWarning;Be.Alias=GX.Alias;Be.isAlias=Ti.isAlias;Be.isCollection=Ti.isCollection;Be.isDocument=Ti.isDocument;Be.isMap=Ti.isMap;Be.isNode=Ti.isNode;Be.isPair=Ti.isPair;Be.isScalar=Ti.isScalar;Be.isSeq=Ti.isSeq;Be.Pair=YX.Pair;Be.Scalar=XX.Scalar;Be.YAMLMap=QX.YAMLMap;Be.YAMLSeq=eQ.YAMLSeq;Be.CST=tQ;Be.Lexer=rQ.Lexer;Be.LineCounter=nQ.LineCounter;Be.Parser=iQ.Parser;Be.parse=Vf.parse;Be.parseAllDocuments=Vf.parseAllDocuments;Be.parseDocument=Vf.parseDocument;Be.stringify=Vf.stringify;Be.visit=Vz.visit;Be.visitAsync=Vz.visitAsync;});var Ac,E0=$(()=>{Bw();Jw();Ac=class{enginePlugins=new Map;userConfigPlugins=[];tools=new Map;runHooks=new Map;services=new Map;protocols=new Map;config=new Map;events=new events.EventEmitter;logger;constructor(t){this.logger=t??{debug:(r,i)=>console.debug(`[PluginManager] ${r}`,i),info:(r,i)=>console.info(`[PluginManager] ${r}`,i),warn:(r,i)=>console.warn(`[PluginManager] ${r}`,i),error:(r,i,n)=>console.error(`[PluginManager] ${r}`,i,n)};}async initialize(t={}){this.logger.info("Initializing plugin system...");try{await this.loadEnginePlugins(t.enginePlugins),await this.validateCoreCapabilities(),await this.loadUserConfigPlugins(t.userConfigPlugins),this.logger.info("Plugin system initialized successfully");}catch(r){throw this.logger.error("Failed to initialize plugin system",r),r}}async loadEnginePlugins(t={}){let r=[];if(t.plugins&&r.push(...t.plugins),t.scan!==false){let n=t.dirs||[".pulse-coder/engine-plugins",".coder/engine-plugins","~/.pulse-coder/engine-plugins","~/.coder/engine-plugins"];for(let o of n){let s=await this.scanEnginePlugins(o);r.push(...s);}}let i=this.sortPluginsByDependencies(r);for(let n of i)await this.initializeEnginePlugin(n);}async scanEnginePlugins(t){let r=[],i=this.resolvePath(t);try{let o=await ec("**/*.plugin.{js,ts}",{cwd:i,absolute:!0});for(let s of o)try{let l=await this.loadEnginePluginFile(s);r.push(l),this.logger.info(`Loaded engine plugin: ${l.name} from ${s}`);}catch(l){this.logger.error(`Failed to load engine plugin from ${s}`,l);}}catch{this.logger.debug(`Directory not found: ${i}`);}return r}async loadEnginePluginFile(t){let r=await import(t),i=r.default||r;if(!i.name||!i.initialize)throw new Error(`Invalid engine plugin: ${t}`);return i}async initializeEnginePlugin(t){try{if(t.dependencies){for(let i of t.dependencies)if(!this.enginePlugins.has(i))throw new Error(`Dependency not found: ${i} for plugin ${t.name}`)}let r={registerTool:(i,n)=>{this.tools.set(i,n);},registerTools:i=>{Object.entries(i).forEach(([n,o])=>{this.tools.set(n,o);});},getTool:i=>this.tools.get(i),getTools:()=>Object.fromEntries(this.tools),registerRunHook:(i,n)=>{this.runHooks.set(i,n);},getRunHook:i=>this.runHooks.get(i),registerProtocol:(i,n)=>{this.protocols.set(i,n);},getProtocol:i=>this.protocols.get(i),registerService:(i,n)=>{this.services.set(i,n);},getService:i=>this.services.get(i),getConfig:i=>this.config.get(i),setConfig:(i,n)=>this.config.set(i,n),events:this.events,logger:this.logger};t.beforeInitialize&&await t.beforeInitialize(r),await t.initialize(r),t.afterInitialize&&await t.afterInitialize(r),this.enginePlugins.set(t.name,t);}catch(r){throw new Error(`Failed to initialize engine plugin ${t.name}: ${r}`)}}async loadUserConfigPlugins(t={}){let r=[];if(t.configs&&r.push(...t.configs),t.scan!==false){let i=t.dirs||[".pulse-coder/config",".coder/config","~/.pulse-coder/config","~/.coder/config"];for(let n of i){let o=await this.scanUserConfigPlugins(n);r.push(...o);}}for(let i of r)await this.applyUserConfig(i);}async scanUserConfigPlugins(t){let r=[],i=this.resolvePath(t);try{let n=["config.{json,yaml,yml}","*.config.{json,yaml,yml}"];for(let o of n){let s=await ec(o,{cwd:i,absolute:!0});for(let l of s)try{let c=await this.loadUserConfigFile(l);r.push(c),this.logger.info(`Loaded user config: ${c.name||l}`);}catch(c){this.logger.error(`Failed to load user config from ${l}`,c);}}}catch{this.logger.debug(`Directory not found: ${i}`);}return r}async loadUserConfigFile(t){let r=await Mj.promises.readFile(t,"utf-8"),i=ss__namespace.default.extname(t),n;try{if(i===".json")n=JSON.parse(r);else if(i===".yaml"||i===".yml")n=(await Promise.resolve().then(()=>Oi(Bz(),1))).parse(r);else throw new Error(`Unsupported config format: ${i}`)}catch(s){throw new Error(`Failed to parse config file ${t}: ${s}`)}return n=new Wp().resolveObject(n),n}async applyUserConfig(t){try{if(t.tools)for(let[r,i]of Object.entries(t.tools))i.enabled!==!1&&this.logger.debug(`Configured tool: ${r}`);if(t.mcp?.servers)for(let r of t.mcp.servers)r.enabled!==!1&&this.logger.debug(`Configured MCP server: ${r.name}`);if(t.subAgents)for(let r of t.subAgents)r.enabled!==!1&&this.logger.debug(`Configured sub-agent: ${r.name}`);t.skills&&this.logger.debug("Configured skills scanning",t.skills),this.userConfigPlugins.push(t);}catch(r){this.logger.error("Failed to apply user config",r);}}async validateCoreCapabilities(){let t=[];for(let i of t)if(!i.aliases.some(o=>this.enginePlugins.has(o)))throw new Error(`Missing required capability "${i.name}". Expected one of: ${i.aliases.join(", ")}`);let r=[{name:"skills",aliases:["pulse-coder-engine/built-in-skills"]}];for(let i of r)i.aliases.some(o=>this.enginePlugins.has(o))||this.logger.warn(`Missing recommended capability "${i.name}". Expected one of: ${i.aliases.join(", ")}`);}sortPluginsByDependencies(t){let r=[],i=new Set,n=new Set,o=s=>{if(!i.has(s.name)){if(n.has(s.name))throw new Error(`Circular dependency detected: ${s.name}`);if(n.add(s.name),s.dependencies)for(let l of s.dependencies){let c=t.find(u=>u.name===l);c&&o(c);}n.delete(s.name),i.add(s.name),r.push(s);}};for(let s of t)o(s);return r}getTools(){return Object.fromEntries(this.tools)}getRunHooks(){return Array.from(this.runHooks.values())}getService(t){return this.services.get(t)}getProtocol(t){return this.protocols.get(t)}getStatus(){return {enginePlugins:Array.from(this.enginePlugins.keys()),userConfigPlugins:this.userConfigPlugins.map(t=>t.name||"unnamed"),tools:Array.from(this.tools.keys()),runHooks:Array.from(this.runHooks.keys()),services:Array.from(this.services.keys()),protocols:Array.from(this.protocols.keys())}}resolvePath(t){return t.startsWith("~/")?ss__namespace.default.join(process.env.HOME||process.env.USERPROFILE||"",t.slice(2)):ss__namespace.default.resolve(t)}};});async function sQ(e){return (await C0).getRandomValues(new Uint8Array(e))}async function lQ(e){let t="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r=Math.pow(2,8)-Math.pow(2,8)%t.length,i="";for(;i.length<e;){let n=await sQ(e-i.length);for(let o of n)o<r&&(i+=t[o%t.length]);}return i}async function cQ(e){return await lQ(e)}async function uQ(e){let t=await(await C0).subtle.digest("SHA-256",new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(t))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function O0(e){if(e||(e=43),e<43||e>128)throw `Expected a length between 43 and 128. Received ${e}.`;let t=await cQ(e),r=await uQ(t);return {code_verifier:t,code_challenge:r}}var C0,Jz=$(()=>{C0=globalThis.crypto?.webcrypto??globalThis.crypto??import('crypto').then(e=>e.webcrypto);});function WQ(e){let t=typeof e=="string"?new URL(e):new URL(e.href);return t.hash="",t}function KQ({requestedResource:e,configuredResource:t}){let r=typeof e=="string"?new URL(e):new URL(e.href),i=typeof t=="string"?new URL(t):new URL(t.href);if(r.origin!==i.origin||r.pathname.length<i.pathname.length)return false;let n=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",o=i.pathname.endsWith("/")?i.pathname:i.pathname+"/";return n.startsWith(o)}function Hf(e){var t;let r=(t=e.headers.get("www-authenticate"))!=null?t:e.headers.get("WWW-Authenticate");if(!r)return;let[i,n]=r.split(" ");if(i.toLowerCase()!=="bearer"||!n)return;let o=/resource_metadata="([^"]*)"/,s=r.match(o);if(s)try{return new URL(s[1])}catch{return}}function HQ(e,t="",r={}){return t.endsWith("/")&&(t=t.slice(0,-1)),r.prependPathname?`${t}/.well-known/${e}`:`/.well-known/${e}${t}`}async function N0(e,t,r=fetch){try{return await r(e,{headers:t})}catch(i){if(i instanceof TypeError)return t?N0(e,void 0,r):void 0;throw i}}async function Xz(e,t,r=fetch){return await N0(e,{"MCP-Protocol-Version":t},r)}function GQ(e,t){return !e||e.status>=400&&e.status<500&&t!=="/"}async function YQ(e,t,r,i){var n,o;let s=new URL(e),l=(n=i?.protocolVersion)!=null?n:Ga,c;if(i?.metadataUrl)c=new URL(i.metadataUrl);else {let d=HQ(t,s.pathname);c=new URL(d,(o=i?.metadataServerUrl)!=null?o:s),c.search=s.search;}let u=await Xz(c,l,r);if(!i?.metadataUrl&&GQ(u,s.pathname)){let d=new URL(`/.well-known/${t}`,s);u=await Xz(d,l,r);}return u}async function XQ(e,t,r=fetch){let i=await YQ(e,"oauth-protected-resource",r,{protocolVersion:t?.protocolVersion,metadataUrl:t?.resourceMetadataUrl});if(!i||i.status===404)throw new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!i.ok)throw new Error(`HTTP ${i.status} trying to load well-known OAuth protected resource metadata.`);return zQ.parse(await i.json())}function QQ(e){let t=typeof e=="string"?new URL(e):e,r=t.pathname!=="/",i=[];if(!r)return i.push({url:new URL("/.well-known/oauth-authorization-server",t.origin),type:"oauth"}),i.push({url:new URL("/.well-known/openid-configuration",t.origin),type:"oidc"}),i;let n=t.pathname;return n.endsWith("/")&&(n=n.slice(0,-1)),i.push({url:new URL(`/.well-known/oauth-authorization-server${n}`,t.origin),type:"oauth"}),i.push({url:new URL("/.well-known/oauth-authorization-server",t.origin),type:"oauth"}),i.push({url:new URL(`/.well-known/openid-configuration${n}`,t.origin),type:"oidc"}),i.push({url:new URL(`${n}/.well-known/openid-configuration`,t.origin),type:"oidc"}),i}async function eee(e,{fetchFn:t=fetch,protocolVersion:r=Ga}={}){var i;let n={"MCP-Protocol-Version":r},o=QQ(e);for(let{url:s,type:l}of o){let c=await N0(s,n,t);if(c){if(!c.ok){if(c.status>=400&&c.status<500)continue;throw new Error(`HTTP ${c.status} trying to load ${l==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`)}if(l==="oauth")return d2.parse(await c.json());{let u=UQ.parse(await c.json());if(!((i=u.code_challenge_methods_supported)!=null&&i.includes("S256")))throw new Error(`Incompatible OIDC provider at ${s}: does not support S256 code challenge method required by MCP specification`);return u}}}}async function tee(e,{metadata:t,clientInformation:r,redirectUrl:i,scope:n,state:o,resource:s}){let l="code",c="S256",u;if(t){if(u=new URL(t.authorization_endpoint),!t.response_types_supported.includes(l))throw new Error(`Incompatible auth server: does not support response type ${l}`);if(!t.code_challenge_methods_supported||!t.code_challenge_methods_supported.includes(c))throw new Error(`Incompatible auth server: does not support code challenge method ${c}`)}else u=new URL("/authorize",e);let d=await O0(),p=d.code_verifier,f=d.code_challenge;return u.searchParams.set("response_type",l),u.searchParams.set("client_id",r.client_id),u.searchParams.set("code_challenge",f),u.searchParams.set("code_challenge_method",c),u.searchParams.set("redirect_uri",String(i)),o&&u.searchParams.set("state",o),n&&u.searchParams.set("scope",n),n?.includes("offline_access")&&u.searchParams.append("prompt","consent"),s&&u.searchParams.set("resource",s.href),{authorizationUrl:u,codeVerifier:p}}function f2(e,t){let r=e.client_secret!==void 0;return t.length===0?r?"client_secret_post":"none":r&&t.includes("client_secret_basic")?"client_secret_basic":r&&t.includes("client_secret_post")?"client_secret_post":t.includes("none")?"none":r?"client_secret_post":"none"}function m2(e,t,r,i){let{client_id:n,client_secret:o}=t;switch(e){case "client_secret_basic":ree(n,o,r);return;case "client_secret_post":nee(n,o,i);return;case "none":iee(n,i);return;default:throw new Error(`Unsupported client authentication method: ${e}`)}}function ree(e,t,r){if(!t)throw new Error("client_secret_basic authentication requires a client_secret");let i=btoa(`${e}:${t}`);r.set("Authorization",`Basic ${i}`);}function nee(e,t,r){r.set("client_id",e),t&&r.set("client_secret",t);}function iee(e,t){t.set("client_id",e);}async function j0(e){let t=e instanceof Response?e.status:void 0,r=e instanceof Response?await e.text():e;try{let i=FQ.parse(JSON.parse(r)),{error:n,error_description:o,error_uri:s}=i,l=JQ[n]||Ha;return new l({message:o||"",cause:s})}catch(i){let n=`${t?`HTTP ${t}: `:""}Invalid OAuth error response: ${i}. Raw body: ${r}`;return new Ha({message:n})}}async function oee(e,{metadata:t,clientInformation:r,authorizationCode:i,codeVerifier:n,redirectUri:o,resource:s,addClientAuthentication:l,fetchFn:c}){var u;let d="authorization_code",p=t?.token_endpoint?new URL(t.token_endpoint):new URL("/token",e);if(t?.grant_types_supported&&!t.grant_types_supported.includes(d))throw new Error(`Incompatible auth server: does not support grant type ${d}`);let f=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}),m=new URLSearchParams({grant_type:d,code:i,code_verifier:n,redirect_uri:String(o)});if(l)l(f,m,e,t);else {let h=(u=t?.token_endpoint_auth_methods_supported)!=null?u:[],y=f2(r,h);m2(y,r,f,m);}s&&m.set("resource",s.href);let v=await(c??fetch)(p,{method:"POST",headers:f,body:m});if(!v.ok)throw await j0(v);return u2.parse(await v.json())}async function aee(e,{metadata:t,clientInformation:r,refreshToken:i,resource:n,addClientAuthentication:o,fetchFn:s}){var l;let c="refresh_token",u;if(t){if(u=new URL(t.token_endpoint),t.grant_types_supported&&!t.grant_types_supported.includes(c))throw new Error(`Incompatible auth server: does not support grant type ${c}`)}else u=new URL("/token",e);let d=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}),p=new URLSearchParams({grant_type:c,refresh_token:i});if(o)o(d,p,e,t);else {let m=(l=t?.token_endpoint_auth_methods_supported)!=null?l:[],v=f2(r,m);m2(v,r,d,p);}n&&p.set("resource",n.href);let f=await(s??fetch)(u,{method:"POST",headers:d,body:p});if(!f.ok)throw await j0(f);return u2.parse({refresh_token:i,...await f.json()})}async function see(e,{metadata:t,clientMetadata:r,fetchFn:i}){let n;if(t){if(!t.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");n=new URL(t.registration_endpoint);}else n=new URL("/register",e);let o=await(i??fetch)(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!o.ok)throw await j0(o);return ZQ.parse(await o.json())}async function Gf(e,t){var r,i;try{return await P0(e,t)}catch(n){if(n instanceof Bf||n instanceof Wf)return await((r=e.invalidateCredentials)==null?void 0:r.call(e,"all")),await P0(e,t);if(n instanceof Jf)return await((i=e.invalidateCredentials)==null?void 0:i.call(e,"tokens")),await P0(e,t);throw n}}async function lee(e,t,r){let i=WQ(e);if(t.validateResourceURL)return await t.validateResourceURL(i,r?.resource);if(r){if(!KQ({requestedResource:i,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${i} (or origin)`);return new URL(r.resource)}}async function P0(e,{serverUrl:t,authorizationCode:r,scope:i,resourceMetadataUrl:n,fetchFn:o}){let s,l;try{s=await XQ(t,{resourceMetadataUrl:n},o),s.authorization_servers&&s.authorization_servers.length>0&&(l=s.authorization_servers[0]);}catch{}l||(l=t);let c=await lee(t,e,s),u=await eee(l,{fetchFn:o}),d=await Promise.resolve(e.clientInformation());if(!d){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");if(!e.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let h=await see(l,{metadata:u,clientMetadata:e.clientMetadata,fetchFn:o});await e.saveClientInformation(h),d=h;}if(r!==void 0){let h=await e.codeVerifier(),y=await oee(l,{metadata:u,clientInformation:d,authorizationCode:r,codeVerifier:h,redirectUri:e.redirectUrl,resource:c,addClientAuthentication:e.addClientAuthentication,fetchFn:o});return await e.saveTokens(y),"AUTHORIZED"}let p=await e.tokens();if(p?.refresh_token)try{let h=await aee(l,{metadata:u,clientInformation:d,refreshToken:p.refresh_token,resource:c,addClientAuthentication:e.addClientAuthentication,fetchFn:o});return await e.saveTokens(h),"AUTHORIZED"}catch(h){if(!(!(h instanceof jc)||h instanceof Ha))throw h}let f=e.state?await e.state():void 0,{authorizationUrl:m,codeVerifier:v}=await tee(l,{metadata:u,clientInformation:d,state:f,redirectUrl:e.redirectUrl,scope:i||e.clientMetadata.scope,resource:c});return await e.saveCodeVerifier(v),await e.redirectToAuthorization(m),"REDIRECT"}function dee(e){switch(e.type){case "sse":return new cee(e);case "http":return new uee(e);default:throw new Ze({message:"Unsupported or invalid transport configuration. If you are using a custom transport, make sure it implements the MCPTransport interface."})}}function pee(e){return "start"in e&&typeof e.start=="function"&&"send"in e&&typeof e.send=="function"&&"close"in e&&typeof e.close=="function"}function Qz({output:e}){let t=e;return !("content"in t)||!Array.isArray(t.content)?{type:"json",value:t}:{type:"content",value:t.content.map(i=>i.type==="text"&&"text"in i?{type:"text",text:i.text}:i.type==="image"&&"data"in i&&"mimeType"in i?{type:"image-data",data:i.data,mediaType:i.mimeType}:{type:"text",text:JSON.stringify(i)})}}async function h2(e){let t=new mee(e);return await t.init(),t}var dQ,e2,pQ,Wz,Kz,Ze,Ga,fQ,mQ,hQ,Yf,qn,t2,r2,gQ,yQ,A0,vQ,_Q,n2,i2,bQ,wQ,o2,a2,s2,l2,xQ,SQ,kQ,IQ,TQ,$Q,EQ,CQ,OQ,PQ,Hz,AQ,Xf,NQ,jQ,RQ,MQ,Nc,c2,u2,mr,zQ,d2,DQ,UQ,LQ,qQ,FQ,ZQ,VQ,p2,BQ,Gz,Yz,jc,Ha,Bf,Jf,Wf,JQ,Kf,cee,uee,fee,mee,g2=$(()=>{et();Rt();et();le();le();Jz();le();Rt();et();dQ="AI_MCPClientError",e2=`vercel.ai.error.${dQ}`,pQ=Symbol.for(e2),Ze=class extends(Kz=Le,Wz=pQ,Kz){constructor({name:e="MCPClientError",message:t,cause:r,data:i,code:n}){super({name:e,message:t,cause:r}),this[Wz]=true,this.data=i,this.code=n;}static isInstance(e){return Le.hasMarker(e,e2)}},Ga="2025-06-18",fQ=[Ga,"2025-03-26","2024-11-05"],mQ=a.optional(a.record(a.string(),a.unknown())),hQ=a.looseObject({name:a.string(),version:a.string()}),Yf=a.looseObject({_meta:a.optional(a.object({}).loose())}),qn=Yf,t2=a.object({method:a.string(),params:a.optional(Yf)}),r2=a.object({applyDefaults:a.optional(a.boolean())}).loose(),gQ=a.looseObject({experimental:a.optional(a.object({}).loose()),logging:a.optional(a.object({}).loose()),prompts:a.optional(a.looseObject({listChanged:a.optional(a.boolean())})),resources:a.optional(a.looseObject({subscribe:a.optional(a.boolean()),listChanged:a.optional(a.boolean())})),tools:a.optional(a.looseObject({listChanged:a.optional(a.boolean())})),elicitation:a.optional(r2)}),a.object({elicitation:a.optional(r2)}).loose(),yQ=qn.extend({protocolVersion:a.string(),capabilities:gQ,serverInfo:hQ,instructions:a.optional(a.string())}),A0=qn.extend({nextCursor:a.optional(a.string())}),vQ=a.object({name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),inputSchema:a.object({type:a.literal("object"),properties:a.optional(a.object({}).loose())}).loose(),outputSchema:a.optional(a.object({}).loose()),annotations:a.optional(a.object({title:a.optional(a.string())}).loose()),_meta:mQ}).loose(),_Q=A0.extend({tools:a.array(vQ)}),n2=a.object({type:a.literal("text"),text:a.string()}).loose(),i2=a.object({type:a.literal("image"),data:a.base64(),mimeType:a.string()}).loose(),bQ=a.object({uri:a.string(),name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),mimeType:a.optional(a.string()),size:a.optional(a.number())}).loose(),wQ=A0.extend({resources:a.array(bQ)}),o2=a.object({uri:a.string(),name:a.optional(a.string()),title:a.optional(a.string()),mimeType:a.optional(a.string())}).loose(),a2=o2.extend({text:a.string()}),s2=o2.extend({blob:a.base64()}),l2=a.object({type:a.literal("resource"),resource:a.union([a2,s2])}).loose(),xQ=qn.extend({content:a.array(a.union([n2,i2,l2])),structuredContent:a.optional(a.unknown()),isError:a.boolean().default(false).optional()}).or(qn.extend({toolResult:a.unknown()})),SQ=a.object({uriTemplate:a.string(),name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),mimeType:a.optional(a.string())}).loose(),kQ=qn.extend({resourceTemplates:a.array(SQ)}),IQ=qn.extend({contents:a.array(a.union([a2,s2]))}),TQ=a.object({name:a.string(),description:a.optional(a.string()),required:a.optional(a.boolean())}).loose(),$Q=a.object({name:a.string(),title:a.optional(a.string()),description:a.optional(a.string()),arguments:a.optional(a.array(TQ))}).loose(),EQ=A0.extend({prompts:a.array($Q)}),CQ=a.object({role:a.union([a.literal("user"),a.literal("assistant")]),content:a.union([n2,i2,l2])}).loose(),OQ=qn.extend({description:a.optional(a.string()),messages:a.array(CQ)}),PQ=Yf.extend({message:a.string(),requestedSchema:a.unknown()}),Hz=t2.extend({method:a.literal("elicitation/create"),params:PQ}),AQ=qn.extend({action:a.union([a.literal("accept"),a.literal("decline"),a.literal("cancel")]),content:a.optional(a.record(a.string(),a.unknown()))}),Xf="2.0",NQ=a.object({jsonrpc:a.literal(Xf),id:a.union([a.string(),a.number().int()])}).merge(t2).strict(),jQ=a.object({jsonrpc:a.literal(Xf),id:a.union([a.string(),a.number().int()]),result:qn}).strict(),RQ=a.object({jsonrpc:a.literal(Xf),id:a.union([a.string(),a.number().int()]),error:a.object({code:a.number().int(),message:a.string(),data:a.optional(a.unknown())})}).strict(),MQ=a.object({jsonrpc:a.literal(Xf)}).merge(a.object({method:a.string(),params:a.optional(Yf)})).strict(),Nc=a.union([NQ,MQ,jQ,RQ]),c2=typeof __PACKAGE_VERSION__<"u"?__PACKAGE_VERSION__:"0.0.0-test",u2=a.object({access_token:a.string(),id_token:a.string().optional(),token_type:a.string(),expires_in:a.number().optional(),scope:a.string().optional(),refresh_token:a.string().optional()}).strip(),mr=a.string().url().superRefine((e,t)=>{if(!URL.canParse(e))return t.addIssue({code:a.ZodIssueCode.custom,message:"URL must be parseable",fatal:true}),a.NEVER}).refine(e=>{let t=new URL(e);return t.protocol!=="javascript:"&&t.protocol!=="data:"&&t.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),zQ=a.object({resource:a.string().url(),authorization_servers:a.array(mr).optional(),jwks_uri:a.string().url().optional(),scopes_supported:a.array(a.string()).optional(),bearer_methods_supported:a.array(a.string()).optional(),resource_signing_alg_values_supported:a.array(a.string()).optional(),resource_name:a.string().optional(),resource_documentation:a.string().optional(),resource_policy_uri:a.string().url().optional(),resource_tos_uri:a.string().url().optional(),tls_client_certificate_bound_access_tokens:a.boolean().optional(),authorization_details_types_supported:a.array(a.string()).optional(),dpop_signing_alg_values_supported:a.array(a.string()).optional(),dpop_bound_access_tokens_required:a.boolean().optional()}).passthrough(),d2=a.object({issuer:a.string(),authorization_endpoint:mr,token_endpoint:mr,registration_endpoint:mr.optional(),scopes_supported:a.array(a.string()).optional(),response_types_supported:a.array(a.string()),grant_types_supported:a.array(a.string()).optional(),code_challenge_methods_supported:a.array(a.string()),token_endpoint_auth_methods_supported:a.array(a.string()).optional(),token_endpoint_auth_signing_alg_values_supported:a.array(a.string()).optional()}).passthrough(),DQ=a.object({issuer:a.string(),authorization_endpoint:mr,token_endpoint:mr,userinfo_endpoint:mr.optional(),jwks_uri:mr,registration_endpoint:mr.optional(),scopes_supported:a.array(a.string()).optional(),response_types_supported:a.array(a.string()),grant_types_supported:a.array(a.string()).optional(),subject_types_supported:a.array(a.string()),id_token_signing_alg_values_supported:a.array(a.string()),claims_supported:a.array(a.string()).optional(),token_endpoint_auth_methods_supported:a.array(a.string()).optional()}).passthrough(),UQ=DQ.merge(d2.pick({code_challenge_methods_supported:true})),LQ=a.object({client_id:a.string(),client_secret:a.string().optional(),client_id_issued_at:a.number().optional(),client_secret_expires_at:a.number().optional()}).strip(),qQ=a.object({redirect_uris:a.array(mr),token_endpoint_auth_method:a.string().optional(),grant_types:a.array(a.string()).optional(),response_types:a.array(a.string()).optional(),client_name:a.string().optional(),client_uri:mr.optional(),logo_uri:mr.optional(),scope:a.string().optional(),contacts:a.array(a.string()).optional(),tos_uri:mr.optional(),policy_uri:a.string().optional(),jwks_uri:mr.optional(),jwks:a.any().optional(),software_id:a.string().optional(),software_version:a.string().optional(),software_statement:a.string().optional()}).strip(),FQ=a.object({error:a.string(),error_description:a.string().optional(),error_uri:a.string().optional()}),ZQ=qQ.merge(LQ),VQ="AI_MCPClientOAuthError",p2=`vercel.ai.error.${VQ}`,BQ=Symbol.for(p2),jc=class extends(Yz=Le,Gz=BQ,Yz){constructor({name:e="MCPClientOAuthError",message:t,cause:r}){super({name:e,message:t,cause:r}),this[Gz]=true;}static isInstance(e){return Le.hasMarker(e,p2)}},Ha=class extends jc{};Ha.errorCode="server_error";Bf=class extends jc{};Bf.errorCode="invalid_client";Jf=class extends jc{};Jf.errorCode="invalid_grant";Wf=class extends jc{};Wf.errorCode="unauthorized_client";JQ={[Ha.errorCode]:Ha,[Bf.errorCode]:Bf,[Jf.errorCode]:Jf,[Wf.errorCode]:Wf};Kf=class extends Error{constructor(e="Unauthorized"){super(e),this.name="UnauthorizedError";}};cee=class{constructor({url:e,headers:t,authProvider:r}){this.connected=false,this.url=new URL(e),this.headers=t,this.authProvider=r;}async commonHeaders(e){let t={...this.headers,...e,"mcp-protocol-version":Ga};if(this.authProvider){let r=await this.authProvider.tokens();r?.access_token&&(t.Authorization=`Bearer ${r.access_token}`);}return Xi(t,`ai-sdk/${c2}`,Nl())}async start(){return new Promise((e,t)=>{if(this.connected)return e();this.abortController=new AbortController;let r=async(i=false)=>{var n,o,s,l,c;try{let u=await this.commonHeaders({Accept:"text/event-stream"}),d=await fetch(this.url.href,{headers:u,signal:(n=this.abortController)==null?void 0:n.signal});if(d.status===401&&this.authProvider&&!i){this.resourceMetadataUrl=Hf(d);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED"){let h=new Kf;return (o=this.onerror)==null||o.call(this,h),t(h)}}catch(v){return (s=this.onerror)==null||s.call(this,v),t(v)}return r(!0)}if(!d.ok||!d.body){let v=`MCP SSE Transport Error: ${d.status} ${d.statusText}`;d.status===405&&(v+=". This server does not support SSE transport. Try using `http` transport instead");let h=new Ze({message:v});return (l=this.onerror)==null||l.call(this,h),t(h)}let f=d.body.pipeThrough(new TextDecoderStream).pipeThrough(new Cr).getReader(),m=async()=>{var v,h,y;try{for(;;){let{done:w,value:S}=await f.read();if(w){if(this.connected)throw this.connected=!1,new Ze({message:"MCP SSE Transport Error: Connection closed unexpectedly"});return}let{event:_,data:x}=S;if(_==="endpoint"){if(this.endpoint=new URL(x,this.url),this.endpoint.origin!==this.url.origin)throw new Ze({message:`MCP SSE Transport Error: Endpoint origin does not match connection origin: ${this.endpoint.origin}`});this.connected=!0,e();}else if(_==="message")try{let k=Nc.parse(JSON.parse(x));(v=this.onmessage)==null||v.call(this,k);}catch(k){let g=new Ze({message:"MCP SSE Transport Error: Failed to parse message",cause:k});(h=this.onerror)==null||h.call(this,g);}}}catch(w){if(w instanceof Error&&w.name==="AbortError")return;(y=this.onerror)==null||y.call(this,w),t(w);}};this.sseConnection={close:()=>f.cancel()},m();}catch(u){if(u instanceof Error&&u.name==="AbortError")return;(c=this.onerror)==null||c.call(this,u),t(u);}};r();})}async close(){var e,t,r;this.connected=false,(e=this.sseConnection)==null||e.close(),(t=this.abortController)==null||t.abort(),(r=this.onclose)==null||r.call(this);}async send(e){if(!this.endpoint||!this.connected)throw new Ze({message:"MCP SSE Transport Error: Not connected"});let t=this.endpoint,r=async(i=false)=>{var n,o,s,l,c;try{let d={method:"POST",headers:await this.commonHeaders({"Content-Type":"application/json"}),body:JSON.stringify(e),signal:(n=this.abortController)==null?void 0:n.signal},p=await fetch(t,d);if(p.status===401&&this.authProvider&&!i){this.resourceMetadataUrl=Hf(p);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED"){let m=new Kf;(o=this.onerror)==null||o.call(this,m);return}}catch(f){(s=this.onerror)==null||s.call(this,f);return}return r(!0)}if(!p.ok){let f=await p.text().catch(()=>null),m=new Ze({message:`MCP SSE Transport Error: POSTing to endpoint (HTTP ${p.status}): ${f}`});(l=this.onerror)==null||l.call(this,m);return}}catch(u){(c=this.onerror)==null||c.call(this,u);return}};await r();}},uee=class{constructor({url:e,headers:t,authProvider:r}){this.inboundReconnectAttempts=0,this.reconnectionOptions={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},this.url=new URL(e),this.headers=t,this.authProvider=r;}async commonHeaders(e){let t={...this.headers,...e,"mcp-protocol-version":Ga};if(this.sessionId&&(t["mcp-session-id"]=this.sessionId),this.authProvider){let r=await this.authProvider.tokens();r?.access_token&&(t.Authorization=`Bearer ${r.access_token}`);}return Xi(t,`ai-sdk/${c2}`,Nl())}async start(){if(this.abortController)throw new Ze({message:"MCP HTTP Transport Error: Transport already started. Note: client.connect() calls start() automatically."});this.abortController=new AbortController,this.openInboundSse();}async close(){var e,t,r;(e=this.inboundSseConnection)==null||e.close();try{if(this.sessionId&&this.abortController&&!this.abortController.signal.aborted){let i=await this.commonHeaders({});await fetch(this.url,{method:"DELETE",headers:i,signal:this.abortController.signal}).catch(()=>{});}}catch{}(t=this.abortController)==null||t.abort(),(r=this.onclose)==null||r.call(this);}async send(e){let t=async(r=false)=>{var i,n,o,s,l,c,u;try{let p={method:"POST",headers:await this.commonHeaders({"Content-Type":"application/json",Accept:"application/json, text/event-stream"}),body:JSON.stringify(e),signal:(i=this.abortController)==null?void 0:i.signal},f=await fetch(this.url,p),m=f.headers.get("mcp-session-id");if(m&&(this.sessionId=m),f.status===401&&this.authProvider&&!r){this.resourceMetadataUrl=Hf(f);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED")throw new Kf}catch(w){throw (n=this.onerror)==null||n.call(this,w),w}return t(!0)}if(f.status===202){this.inboundSseConnection||this.openInboundSse();return}if(!f.ok){let w=await f.text().catch(()=>null),S=`MCP HTTP Transport Error: POSTing to endpoint (HTTP ${f.status}): ${w}`;f.status===404&&(S+=". This server does not support HTTP transport. Try using `sse` transport instead");let _=new Ze({message:S});throw (o=this.onerror)==null||o.call(this,_),_}if(!("id"in e))return;let h=f.headers.get("content-type")||"";if(h.includes("application/json")){let w=await f.json(),S=Array.isArray(w)?w.map(_=>Nc.parse(_)):[Nc.parse(w)];for(let _ of S)(s=this.onmessage)==null||s.call(this,_);return}if(h.includes("text/event-stream")){if(!f.body){let x=new Ze({message:"MCP HTTP Transport Error: text/event-stream response without body"});throw (l=this.onerror)==null||l.call(this,x),x}let S=f.body.pipeThrough(new TextDecoderStream).pipeThrough(new Cr).getReader();(async()=>{var x,k,g;try{for(;;){let{done:T,value:C}=await S.read();if(T)return;let{event:A,data:D}=C;if(A==="message")try{let oe=Nc.parse(JSON.parse(D));(x=this.onmessage)==null||x.call(this,oe);}catch(oe){let z=new Ze({message:"MCP HTTP Transport Error: Failed to parse message",cause:oe});(k=this.onerror)==null||k.call(this,z);}}}catch(T){if(T instanceof Error&&T.name==="AbortError")return;(g=this.onerror)==null||g.call(this,T);}})();return}let y=new Ze({message:`MCP HTTP Transport Error: Unexpected content type: ${h}`});throw (c=this.onerror)==null||c.call(this,y),y}catch(d){throw (u=this.onerror)==null||u.call(this,d),d}};await t();}getNextReconnectionDelay(e){let{initialReconnectionDelay:t,reconnectionDelayGrowFactor:r,maxReconnectionDelay:i}=this.reconnectionOptions;return Math.min(t*Math.pow(r,e),i)}scheduleInboundSseReconnection(){var e;let{maxRetries:t}=this.reconnectionOptions;if(t>0&&this.inboundReconnectAttempts>=t){(e=this.onerror)==null||e.call(this,new Ze({message:`MCP HTTP Transport Error: Maximum reconnection attempts (${t}) exceeded.`}));return}let r=this.getNextReconnectionDelay(this.inboundReconnectAttempts);this.inboundReconnectAttempts+=1,setTimeout(async()=>{var i;(i=this.abortController)!=null&&i.signal.aborted||await this.openInboundSse(false,this.lastInboundEventId);},r);}async openInboundSse(e=false,t){var r,i,n,o,s,l;try{let c=await this.commonHeaders({Accept:"text/event-stream"});t&&(c["last-event-id"]=t);let u=await fetch(this.url.href,{method:"GET",headers:c,signal:(r=this.abortController)==null?void 0:r.signal}),d=u.headers.get("mcp-session-id");if(d&&(this.sessionId=d),u.status===401&&this.authProvider&&!e){this.resourceMetadataUrl=Hf(u);try{if(await Gf(this.authProvider,{serverUrl:this.url,resourceMetadataUrl:this.resourceMetadataUrl})!=="AUTHORIZED"){let h=new Kf;(i=this.onerror)==null||i.call(this,h);return}}catch(v){(n=this.onerror)==null||n.call(this,v);return}return this.openInboundSse(!0,t)}if(u.status===405)return;if(!u.ok||!u.body){let v=new Ze({message:`MCP HTTP Transport Error: GET SSE failed: ${u.status} ${u.statusText}`});(o=this.onerror)==null||o.call(this,v);return}let f=u.body.pipeThrough(new TextDecoderStream).pipeThrough(new Cr).getReader(),m=async()=>{var v,h,y,w;try{for(;;){let{done:S,value:_}=await f.read();if(S)return;let{event:x,data:k,id:g}=_;if(g&&(this.lastInboundEventId=g),x==="message")try{let T=Nc.parse(JSON.parse(k));(v=this.onmessage)==null||v.call(this,T);}catch(T){let C=new Ze({message:"MCP HTTP Transport Error: Failed to parse message",cause:T});(h=this.onerror)==null||h.call(this,C);}}}catch(S){if(S instanceof Error&&S.name==="AbortError")return;(y=this.onerror)==null||y.call(this,S),(w=this.abortController)!=null&&w.signal.aborted||this.scheduleInboundSseReconnection();}};this.inboundSseConnection={close:()=>f.cancel()},this.inboundReconnectAttempts=0,m();}catch(c){if(c instanceof Error&&c.name==="AbortError")return;(s=this.onerror)==null||s.call(this,c),(l=this.abortController)!=null&&l.signal.aborted||this.scheduleInboundSseReconnection();}}};fee="1.0.0";mee=class{constructor({transport:e,name:t="ai-sdk-mcp-client",version:r=fee,onUncaughtError:i,capabilities:n}){this.requestMessageId=0,this.responseHandlers=new Map,this.serverCapabilities={},this.isClosed=true,this.onUncaughtError=i,this.clientCapabilities=n??{},pee(e)?this.transport=e:this.transport=dee(e),this.transport.onclose=()=>this.onClose(),this.transport.onerror=o=>this.onError(o),this.transport.onmessage=o=>{if("method"in o){"id"in o?this.onRequestMessage(o):this.onError(new Ze({message:"Unsupported message type"}));return}this.onResponse(o);},this.clientInfo={name:t,version:r};}async init(){try{await this.transport.start(),this.isClosed=!1;let e=await this.request({request:{method:"initialize",params:{protocolVersion:Ga,capabilities:this.clientCapabilities,clientInfo:this.clientInfo}},resultSchema:yQ});if(e===void 0)throw new Ze({message:"Server sent invalid initialize result"});if(!fQ.includes(e.protocolVersion))throw new Ze({message:`Server's protocol version is not supported: ${e.protocolVersion}`});return this.serverCapabilities=e.capabilities,await this.notification({method:"notifications/initialized"}),this}catch(e){throw await this.close(),e}}async close(){var e;this.isClosed||(await((e=this.transport)==null?void 0:e.close()),this.onClose());}assertCapability(e){switch(e){case "initialize":break;case "tools/list":case "tools/call":if(!this.serverCapabilities.tools)throw new Ze({message:"Server does not support tools"});break;case "resources/list":case "resources/read":case "resources/templates/list":if(!this.serverCapabilities.resources)throw new Ze({message:"Server does not support resources"});break;case "prompts/list":case "prompts/get":if(!this.serverCapabilities.prompts)throw new Ze({message:"Server does not support prompts"});break;default:throw new Ze({message:`Unsupported method: ${e}`})}}async request({request:e,resultSchema:t,options:r}){return new Promise((i,n)=>{if(this.isClosed)return n(new Ze({message:"Attempted to send a request from a closed client"}));this.assertCapability(e.method);let o=r?.signal;o?.throwIfAborted();let s=this.requestMessageId++,l={...e,jsonrpc:"2.0",id:s},c=()=>{this.responseHandlers.delete(s);};this.responseHandlers.set(s,u=>{if(o?.aborted)return n(new Ze({message:"Request was aborted",cause:o.reason}));if(u instanceof Error)return n(u);try{let d=t.parse(u.result);i(d);}catch(d){let p=new Ze({message:"Failed to parse server response",cause:d});n(p);}}),this.transport.send(l).catch(u=>{c(),n(u);});})}async listTools({params:e,options:t}={}){try{return this.request({request:{method:"tools/list",params:e},resultSchema:_Q,options:t})}catch(r){throw r}}async callTool({name:e,args:t,options:r}){try{return this.request({request:{method:"tools/call",params:{name:e,arguments:t}},resultSchema:xQ,options:{signal:r?.abortSignal}})}catch(i){throw i}}async listResourcesInternal({params:e,options:t}={}){try{return this.request({request:{method:"resources/list",params:e},resultSchema:wQ,options:t})}catch(r){throw r}}async readResourceInternal({uri:e,options:t}){try{return this.request({request:{method:"resources/read",params:{uri:e}},resultSchema:IQ,options:t})}catch(r){throw r}}async listResourceTemplatesInternal({options:e}={}){try{return this.request({request:{method:"resources/templates/list"},resultSchema:kQ,options:e})}catch(t){throw t}}async listPromptsInternal({params:e,options:t}={}){try{return this.request({request:{method:"prompts/list",params:e},resultSchema:EQ,options:t})}catch(r){throw r}}async getPromptInternal({name:e,args:t,options:r}){try{return this.request({request:{method:"prompts/get",params:{name:e,arguments:t}},resultSchema:OQ,options:r})}catch(i){throw i}}async notification(e){let t={...e,jsonrpc:"2.0"};await this.transport.send(t);}async tools({schemas:e="automatic"}={}){var t,r;let i={};try{let n=await this.listTools();for(let{name:o,title:s,description:l,inputSchema:c,annotations:u,_meta:d}of n.tools){let p=s??u?.title;if(e!=="automatic"&&!(o in e))continue;let f=this,m=e!=="automatic"?(t=e[o])==null?void 0:t.outputSchema:void 0,v=async(y,w)=>{var S;(S=w?.abortSignal)==null||S.throwIfAborted();let _=await f.callTool({name:o,args:y,options:w});return m!=null?f.extractStructuredContent(_,m,o):_},h=e==="automatic"?cj({description:l,title:p,inputSchema:Ia({...c,properties:(r=c.properties)!=null?r:{},additionalProperties:!1}),execute:v,toModelOutput:Qz}):{description:l,title:p,inputSchema:e[o].inputSchema,...m!=null?{outputSchema:m}:{},execute:v,toModelOutput:Qz};i[o]={...h,_meta:d};}return i}catch(n){throw n}}async extractStructuredContent(e,t,r){if("structuredContent"in e&&e.structuredContent!=null){let i=await jl({value:e.structuredContent,schema:aw(t)});if(!i.success)throw new Ze({message:`Tool "${r}" returned structuredContent that does not match the expected outputSchema`,cause:i.error});return i.value}if("content"in e&&Array.isArray(e.content)){let i=e.content.find(n=>n.type==="text");if(i&&"text"in i){let n=await wp({text:i.text,schema:t});if(!n.success)throw new Ze({message:`Tool "${r}" returned content that does not match the expected outputSchema`,cause:n.error});return n.value}}throw new Ze({message:`Tool "${r}" did not return structuredContent or parseable text content`})}listResources({params:e,options:t}={}){return this.listResourcesInternal({params:e,options:t})}readResource({uri:e,options:t}){return this.readResourceInternal({uri:e,options:t})}listResourceTemplates({options:e}={}){return this.listResourceTemplatesInternal({options:e})}experimental_listPrompts({params:e,options:t}={}){return this.listPromptsInternal({params:e,options:t})}experimental_getPrompt({name:e,arguments:t,options:r}){return this.getPromptInternal({name:e,args:t,options:r})}onElicitationRequest(e,t){if(e!==Hz)throw new Ze({message:"Unsupported request schema. Only ElicitationRequestSchema is supported."});this.elicitationRequestHandler=t;}async onRequestMessage(e){try{if(e.method!=="elicitation/create"){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32601,message:`Unsupported request method: ${e.method}`}});return}if(!this.elicitationRequestHandler){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32601,message:"No elicitation handler registered on client"}});return}let t=Hz.safeParse({method:e.method,params:e.params});if(!t.success){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32602,message:`Invalid elicitation request: ${t.error.message}`,data:t.error.issues}});return}try{let r=await this.elicitationRequestHandler(t.data),i=AQ.parse(r);await this.transport.send({jsonrpc:"2.0",id:e.id,result:i});}catch(r){await this.transport.send({jsonrpc:"2.0",id:e.id,error:{code:-32603,message:r instanceof Error?r.message:"Failed to handle elicitation request"}}),this.onError(r);}}catch(t){this.onError(t);}}onClose(){if(this.isClosed)return;this.isClosed=true;let e=new Ze({message:"Connection closed"});for(let t of this.responseHandlers.values())t(e);this.responseHandlers.clear();}onError(e){this.onUncaughtError&&this.onUncaughtError(e);}onResponse(e){let t=Number(e.id),r=this.responseHandlers.get(t);if(r===void 0)throw new Ze({message:`Protocol error: Received a response for an unknown message ID: ${JSON.stringify(e)}`});this.responseHandlers.delete(t),r("result"in e?e:new Ze({message:e.error.message,code:e.error.code,data:e.error.data,cause:e.error}));}};});async function gee(e){let t=ss__namespace.join(e,".pulse-coder","mcp.json"),r=ss__namespace.join(e,".coder","mcp.json"),i=Mj.existsSync(t)?t:r;if(!Mj.existsSync(i))return {servers:{}};try{let n=Mj.readFileSync(i,"utf-8"),o=JSON.parse(n);return !o.servers||typeof o.servers!="object"?(console.warn('[MCP] Invalid config: missing "servers" object'),{servers:{}}):{servers:o.servers}}catch(n){return console.warn(`[MCP] Failed to load config: ${n instanceof Error?n.message:"Unknown error"}`),{servers:{}}}}function yee(e){return {type:"http",url:e.url}}var Qf,M0=$(()=>{g2();Qf={name:"pulse-coder-engine/built-in-mcp",version:"1.0.0",async initialize(e){let t=await gee(process.cwd()),r=Object.keys(t.servers).length;if(r===0){console.log("[MCP] No MCP servers configured");return}let i=0;for(let[n,o]of Object.entries(t.servers))try{if(!o.url){console.warn(`[MCP] Server "${n}" missing URL, skipping`);continue}let s=yee(o),l=await h2({transport:s}),c=await l.tools(),u=Object.fromEntries(Object.entries(c).map(([d,p])=>[`mcp_${n}_${d}`,p]));e.registerTools(u),i++,console.log(`[MCP] Server "${n}" loaded (${Object.keys(c).length} tools)`),e.registerService(`mcp:${n}`,l);}catch(s){console.warn(`[MCP] Failed to load server "${n}": ${s instanceof Error?s.message:"Unknown error"}`);}i>0?console.log(`[MCP] Successfully loaded ${i}/${r} MCP servers`):console.warn("[MCP] No MCP servers were loaded successfully");}};});var Rc=M((O_e,_2)=>{var vee=Object.prototype.toString;_2.exports=function(t){if(t===void 0)return "undefined";if(t===null)return "null";var r=typeof t;if(r==="boolean")return "boolean";if(r==="string")return "string";if(r==="number")return "number";if(r==="symbol")return "symbol";if(r==="function")return See(t)?"generatorfunction":"function";if(_ee(t))return "array";if(Tee(t))return "buffer";if(Iee(t))return "arguments";if(wee(t))return "date";if(bee(t))return "error";if(xee(t))return "regexp";switch(v2(t)){case "Symbol":return "symbol";case "Promise":return "promise";case "WeakMap":return "weakmap";case "WeakSet":return "weakset";case "Map":return "map";case "Set":return "set";case "Int8Array":return "int8array";case "Uint8Array":return "uint8array";case "Uint8ClampedArray":return "uint8clampedarray";case "Int16Array":return "int16array";case "Uint16Array":return "uint16array";case "Int32Array":return "int32array";case "Uint32Array":return "uint32array";case "Float32Array":return "float32array";case "Float64Array":return "float64array"}if(kee(t))return "generator";switch(r=vee.call(t),r){case "[object Object]":return "object";case "[object Map Iterator]":return "mapiterator";case "[object Set Iterator]":return "setiterator";case "[object String Iterator]":return "stringiterator";case "[object Array Iterator]":return "arrayiterator"}return r.slice(8,-1).toLowerCase().replace(/\s/g,"")};function v2(e){return typeof e.constructor=="function"?e.constructor.name:null}function _ee(e){return Array.isArray?Array.isArray(e):e instanceof Array}function bee(e){return e instanceof Error||typeof e.message=="string"&&e.constructor&&typeof e.constructor.stackTraceLimit=="number"}function wee(e){return e instanceof Date?true:typeof e.toDateString=="function"&&typeof e.getDate=="function"&&typeof e.setDate=="function"}function xee(e){return e instanceof RegExp?true:typeof e.flags=="string"&&typeof e.ignoreCase=="boolean"&&typeof e.multiline=="boolean"&&typeof e.global=="boolean"}function See(e,t){return v2(e)==="GeneratorFunction"}function kee(e){return typeof e.throw=="function"&&typeof e.return=="function"&&typeof e.next=="function"}function Iee(e){try{if(typeof e.length=="number"&&typeof e.callee=="function")return !0}catch(t){if(t.message.indexOf("callee")!==-1)return true}return false}function Tee(e){return e.constructor&&typeof e.constructor.isBuffer=="function"?e.constructor.isBuffer(e):false}});var w2=M((P_e,b2)=>{b2.exports=function(t){return typeof t<"u"&&t!==null&&(typeof t=="object"||typeof t=="function")};});var k2=M((A_e,S2)=>{var x2=w2();S2.exports=function(t){x2(t)||(t={});for(var r=arguments.length,i=1;i<r;i++){var n=arguments[i];x2(n)&&$ee(t,n);}return t};function $ee(e,t){for(var r in t)Eee(t,r)&&(e[r]=t[r]);}function Eee(e,t){return Object.prototype.hasOwnProperty.call(e,t)}});var $2=M((N_e,T2)=>{var Cee=Rc(),Oee=k2();T2.exports=function(e,t){typeof t=="function"&&(t={parse:t});var r=Aee(e),i={section_delimiter:"---",parse:jee},n=Oee({},i,t),o=n.section_delimiter,s=r.content.split(/\r?\n/),l=null,c=I2(),u=[],d=[];function p(w){r.content=w,l=[],u=[];}function f(w){d.length&&(c.key=Nee(d[0],o),c.content=w,n.parse(c,l),l.push(c),c=I2(),u=[],d=[]);}for(var m=0;m<s.length;m++){var v=s[m],h=d.length,y=v.trim();if(Pee(y,o)){if(y.length===3&&m!==0){if(h===0||h===2){u.push(v);continue}d.push(y),c.data=u.join(`
|
|
371
371
|
`),u=[];continue}l===null&&p(u.join(`
|
|
372
372
|
`)),h===2&&f(u.join(`
|
|
373
373
|
`)),d.push(y);continue}u.push(v);}return l===null?p(u.join(`
|
|
@@ -415,10 +415,10 @@ ${t}`;let r=e.append.trim();return {append:r?`${r}
|
|
|
415
415
|
|
|
416
416
|
${t}`:t}}var Ane,Nne,jne,Rne,Mne,Dne,Vc,pm,eS=$(()=>{Ane={mode:"planning",allowedCategories:["read","search","other"],disallowedCategories:["write","execute"],notes:"Planning mode is prompt-constrained only. Disallowed tool attempts are observed and logged, not hard-blocked."},Nne={mode:"executing",allowedCategories:["read","search","write","execute","other"],disallowedCategories:[]},jne=[/开始执行/i,/按这个计划做/i,/可以改代码了/i,/直接实现/i,/go\s+ahead/i,/proceed/i,/implement\s+it/i,/start\s+implement/i,/start\s+coding/i],Rne=[/先不(要)?执行/i,/先别执行/i,/不要执行/i,/暂时不要执行/i,/先别改代码/i,/先不要改代码/i,/先不要实现/i,/not\s+now/i,/hold\s+off/i,/do\s+not\s+(start|execute|implement|proceed)/i,/don't\s+(start|execute|implement|proceed)/i],Mne=[/先计划/i,/先分析/i,/先出方案/i,/plan\s+first/i,/analysis\s+first/i];Dne={read:{category:"read",risk:"low",description:"Read file contents from the workspace."},ls:{category:"read",risk:"low",description:"List files and directories."},grep:{category:"search",risk:"low",description:"Search text content across files."},tavily:{category:"search",risk:"low",description:"Search web results from external sources."},skill:{category:"search",risk:"low",description:"Load procedural guidance from installed skills."},write:{category:"write",risk:"high",description:"Create or overwrite file content."},edit:{category:"write",risk:"high",description:"Modify existing files using exact replacements."},bash:{category:"execute",risk:"high",description:"Execute shell commands."},clarify:{category:"other",risk:"low",description:"Ask the user a targeted clarification question."}},Vc=class{constructor(t,r,i="executing"){this.logger=t;this.eventEmitter=r;this.mode=i,this.emitEvent("mode_entered",{reason:"initialize"});}mode;events=[];getMode(){return this.mode}setMode(t,r="manual"){this.mode!==t&&(this.mode=t,this.emitEvent("mode_entered",{reason:r}));}detectIntent(t){let r=t.trim();return r?Rne.some(i=>i.test(r))?"PLAN_ONLY":jne.some(i=>i.test(r))?"EXECUTE_NOW":Mne.some(i=>i.test(r))?"PLAN_ONLY":"UNCLEAR":"UNCLEAR"}processContextMessages(t){let r=this.getLatestUserText(t),i=this.mode;if(!r)return {modeBefore:i,modeAfter:this.mode,switched:false,intent:"UNCLEAR",userInput:""};let n=this.detectIntent(r);return n==="EXECUTE_NOW"&&(this.emitEvent("execution_intent_detected",{intent:n,userInput:r}),this.mode==="planning"&&(this.mode="executing",this.emitEvent("mode_switched_by_intent",{from:"planning",to:"executing",userInput:r}),this.emitEvent("mode_entered",{reason:"intent",from:"planning"}))),{modeBefore:i,modeAfter:this.mode,switched:i!==this.mode,intent:n,userInput:r}}getModePolicy(t=this.mode){return t==="planning"?Ane:Nne}getToolMetadata(t){return Array.from(new Set(t)).sort().map(r=>this.inferToolMeta(r))}buildPromptAppend(t,r){let i=this.mode,n=this.getModePolicy(i),o=this.getToolMetadata(t),s=o.slice(0,40),l=o.length-s.length,c=["## Plan Mode Policy (Built-in Plugin)",`Current mode: ${i.toUpperCase()}`,`Allowed tool categories: ${n.allowedCategories.join(", ")}`,`Disallowed tool categories: ${n.disallowedCategories.join(", ")||"none"}`,n.notes?`Policy notes: ${n.notes}`:""].filter(Boolean);i==="planning"?c.push("Planning objective: prioritize reading, analysis, and plan generation.","In planning mode, do not intentionally perform write/edit/execute actions.","If implementation is requested but intent is not explicit, ask for execution authorization.","Before each tool call in planning mode, self-check category compliance.","Plan format must include: goals, assumptions, steps, risks, validation approach."):c.push("Executing objective: follow the agreed plan before broad exploration.","Make targeted edits and keep changes scoped.","Report what changed and how it was validated."),r?.switched&&r.modeAfter==="executing"&&c.push("Mode transition: the latest user message explicitly authorized execution.","In your next reply, acknowledge switching to EXECUTING mode before implementation details."),c.push("Tool metadata (prompt-level policy reference):");for(let u of s)c.push(`- ${u.name}: category=${u.category}, risk=${u.risk}, ${u.description}`);return l>0&&c.push(`- ... ${l} additional tool(s) omitted for brevity.`),c.join(`
|
|
417
417
|
`)}applyHooks(t){return {onBeforeToolCall:async(r,i)=>(this.observePotentialPolicyViolation(r,i),t?.onBeforeToolCall?await t.onBeforeToolCall(r,i)??i:i),onAfterToolCall:async(r,i,n)=>t?.onAfterToolCall?await t.onAfterToolCall(r,i,n)??n:n}}getEvents(t=50){return this.events.slice(-Math.max(0,t))}observePotentialPolicyViolation(t,r){if(this.mode!=="planning")return;let i=this.inferToolMeta(t);this.getModePolicy("planning").disallowedCategories.includes(i.category)&&this.emitEvent("disallowed_tool_attempt_in_planning",{toolName:t,category:i.category,risk:i.risk,input:r});}inferToolMeta(t){let r=Dne[t];return r?{name:t,...r}:t.startsWith("mcp_")?{name:t,category:"execute",risk:"medium",description:"MCP external tool invocation."}:t.endsWith("_agent")?{name:t,category:"execute",risk:"high",description:"Sub-agent task execution tool."}:/read|list|cat/i.test(t)?{name:t,category:"read",risk:"low",description:"Likely a read-only inspection tool inferred by name."}:/search|find|query|grep/i.test(t)?{name:t,category:"search",risk:"low",description:"Likely a search tool inferred by name."}:/write|edit|patch|update|create|delete|remove/i.test(t)?{name:t,category:"write",risk:"high",description:"Likely a file-modifying tool inferred by name."}:/bash|exec|run|shell|deploy|build|test/i.test(t)?{name:t,category:"execute",risk:"high",description:"Likely a command execution tool inferred by name."}:{name:t,category:"other",risk:"low",description:"Tool category could not be inferred with high confidence."}}getLatestUserText(t){for(let r=t.length-1;r>=0;r-=1){let i=t[r];if(i.role==="user")return this.messageContentToText(i.content)}return ""}messageContentToText(t){if(typeof t=="string")return t;if(!Array.isArray(t))return "";let r=[];for(let i of t){if(typeof i=="string"){r.push(i);continue}i&&typeof i=="object"&&"text"in i&&typeof i.text=="string"&&r.push(i.text);}return r.join(`
|
|
418
|
-
`)}emitEvent(t,r){let i={name:t,mode:this.mode,timestamp:Date.now(),payload:r};if(this.events.push(i),this.events.length>500&&this.events.shift(),this.eventEmitter.emit(t,i),this.eventEmitter.emit("plan_mode_event",i),t==="disallowed_tool_attempt_in_planning"){this.logger.warn("[PlanMode] Soft violation detected in planning mode",r);return}this.logger.info(`[PlanMode] ${t}`,r);}},pm={name:"pulse-coder-engine/built-in-plan-mode",version:"1.0.0",async initialize(e){let t=new Vc(e.logger,e.events,"executing");e.registerRunHook("plan-mode",({context:r,tools:i,systemPrompt:n,hooks:o})=>{let
|
|
418
|
+
`)}emitEvent(t,r){let i={name:t,mode:this.mode,timestamp:Date.now(),payload:r};if(this.events.push(i),this.events.length>500&&this.events.shift(),this.eventEmitter.emit(t,i),this.eventEmitter.emit("plan_mode_event",i),t==="disallowed_tool_attempt_in_planning"){this.logger.warn("[PlanMode] Soft violation detected in planning mode",r);return}this.logger.info(`[PlanMode] ${t}`,r);}},pm={name:"pulse-coder-engine/built-in-plan-mode",version:"1.0.0",async initialize(e){let t=new Vc(e.logger,e.events,"executing");e.registerRunHook("plan-mode",({context:r,tools:i,systemPrompt:n,hooks:o})=>{if(t.getMode()==="executing")return {systemPrompt:n,hooks:o};let l=t.processContextMessages(r.messages),c=t.buildPromptAppend(Object.keys(i),l);return {systemPrompt:zne(n,c),hooks:t.applyHooks(o)}}),e.registerService("planMode",t),e.registerService("planModeService",t),e.logger.info("[PlanMode] Built-in plan mode plugin initialized",{mode:t.getMode()});}};});var rS,nS,Bc,iS=$(()=>{dr();zl();Dl();rS=class{async getAgentFilesInfo(t){let r=[];for(let i of t)try{await Mj.promises.access(i);let n=await Mj.promises.readdir(i);r.push({files:n,configDir:i});}catch{continue}return r}async loadAgentConfigs(t=[".pulse-coder/agents",".coder/agents"]){let r=[],i=Array.isArray(t)?t:[t];try{let n=await this.getAgentFilesInfo(i);for(let o of n){let s=o.files;for(let l of s)if(l.endsWith(".md")){let c=await this.parseConfig(ss__namespace.default.join(o.configDir,l));c&&r.push(c);}}}catch(n){console.warn(`Failed to scan agent configs: ${n}`);}return r}async parseConfig(t){try{let i=(await Mj.promises.readFile(t,"utf-8")).split(`
|
|
419
419
|
`),n="",o="",s="",l=!1,c=!1;for(let u of i){if(u.trim()==="---")if(l){c=!0;continue}else {l=!0;continue}if(l&&!c){let d=u.match(/^\s*(\w+)\s*:\s*(.+)$/);if(d){let[,p,f]=d;p==="name"&&(n=f.trim()),p==="description"&&(o=f.trim());}}else c&&(s+=u+`
|
|
420
420
|
`);}return n||(n=ss__namespace.default.basename(t,".md")),{name:n.trim(),description:o.trim(),systemPrompt:s.trim(),filePath:t}}catch(r){return console.warn(`Failed to parse agent config ${t}: ${r}`),null}}},nS=class{async runAgent(t,r,i,n){let o={messages:[{role:"user",content:r}]};return i&&Object.keys(i).length>0&&o.messages.push({role:"user",content:`\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF1A
|
|
421
|
-
${JSON.stringify(i,null,2)}`}),await $a(o,{tools:n,systemPrompt:t.systemPrompt})}},Bc=class{name="sub-agent";version="1.0.0";configLoader=new rS;agentRunner=new nS;async initialize(t){try{let r=await this.configLoader.loadAgentConfigs()
|
|
421
|
+
${JSON.stringify(i,null,2)}`}),await $a(o,{tools:n,systemPrompt:t.systemPrompt})}},Bc=class{name="sub-agent";version="1.0.0";configLoader=new rS;agentRunner=new nS;async initialize(t){try{let r=await this.configLoader.loadAgentConfigs();for(let i of r)this.registerAgentTool(t,i);t.logger.info(`SubAgentPlugin loaded ${r.length} agents.`);}catch(r){t.logger.error("Failed to initialize SubAgentPlugin",r);}}registerAgentTool(t,r){let i=`${r.name}_agent`,n={description:r.description,inputSchema:a.object({task:a.string().describe("\u8981\u6267\u884C\u7684\u4EFB\u52A1\u63CF\u8FF0"),context:a.any().optional().describe("\u4EFB\u52A1\u4E0A\u4E0B\u6587\u4FE1\u606F")}),execute:async({task:o,context:s})=>{let l={...Tp,...t.getTools()};try{t.logger.info(`Running agent ${r.name}: ${o}`);let c=await this.agentRunner.runAgent(r,o,s,l);return t.logger.info(`Agent ${r.name} completed successfully`),c}catch(c){throw t.logger.error(`Agent ${r.name} failed`,c),new Error(`Agent ${r.name} failed: ${c}`)}}};t.registerTool(i,n);}async destroy(t){t.logger.info("SubAgentPlugin destroyed");}};});var oS,aS=$(()=>{M0();Q0();eS();iS();M0();Q0();eS();iS();oS=[Qf,dm,pm,new Bc];});var sS=$(()=>{});var LU=$(()=>{});var as,lS=$(()=>{zl();Dl();E0();aS();sS();LU();Jw();zl();Rl();Ip();Dl();as=class{pluginManager;tools={...Tp};options={};config={};constructor(t){this.pluginManager=new Ac(t?.logger),this.config=t?.config||{},this.options=t||{};}async initialize(){(this.options.logger??console).info("Initializing engine...");let r=this.prepareEnginePlugins();await this.pluginManager.initialize({enginePlugins:{...r},userConfigPlugins:{...this.options.userConfigPlugins||{}}});let i=this.pluginManager.getTools();this.tools={...this.tools,...i},this.options.tools&&(this.tools={...this.tools,...this.options.tools});}prepareEnginePlugins(){let t=this.options.enginePlugins||{};if(this.options.disableBuiltInPlugins)return t;let r=[...oS],i=t.plugins||[];return {plugins:[...r,...i],dirs:t.dirs||[".pulse-coder/engine-plugins",".coder/engine-plugins","~/.pulse-coder/engine-plugins","~/.coder/engine-plugins"],scan:t.scan!==false}}async applyRunHooks(t,r,i){let n=r,o=i;for(let s of this.pluginManager.getRunHooks()){let l=await s({context:t,messages:t.messages,tools:this.tools,systemPrompt:n,hooks:o});l&&("systemPrompt"in l&&(n=l.systemPrompt),"hooks"in l&&(o=l.hooks));}return {systemPrompt:n,hooks:o}}async run(t,r){let i=r?.systemPrompt??this.options.systemPrompt,n=r?.hooks??this.options.hooks,{systemPrompt:o,hooks:s}=await this.applyRunHooks(t,i,n);return $a(t,{...r,tools:this.tools,provider:r?.provider??this.options.llmProvider,model:r?.model??this.options.model,systemPrompt:o,hooks:s,onToolCall:l=>{r?.onToolCall?.(l);},onClarificationRequest:r?.onClarificationRequest})}getPluginStatus(){return this.pluginManager.getStatus()}getTools(){return {...this.tools}}getService(t){return this.pluginManager.getService(t)}getConfig(t){return this.config[t]}setConfig(t,r){this.config[t]=r;}};});var qU=$(()=>{lS();lS();E0();aS();sS();zl();Rl();Ip();Dl();});function cS(e){return e instanceof Error?e.message:String(e)}function Jne(e,t,r){let i=e+t;return i.length<=r?{value:i,truncated:false}:{value:i.slice(0,r),truncated:true}}function ZU(e,t){return e.length<=t?{value:e,truncated:false}:{value:e.slice(0,t),truncated:true}}function VU(e,t){return e?t?`${e}
|
|
422
422
|
${t}`:e:t}function Wne(e,t){return e==="SIGABRT"||/heap out of memory/i.test(t)?"OOM":"INTERNAL"}function Vn(e,t,r,i,n,o){return {ok:false,stdout:t,stderr:r,durationMs:Date.now()-e,outputTruncated:o,error:{code:i,message:n}}}function Kne(){let e=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),t=ss__namespace.default.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))),r=[ss__namespace.default.join(t,"runner.js"),ss__namespace.default.join(t,"runner.cjs")];for(let i of r)if(Mj.existsSync(i))return i;try{let i=e.resolve("pulse-sandbox"),n=ss__namespace.default.dirname(i),o=[ss__namespace.default.join(n,"runner.js"),ss__namespace.default.join(n,"runner.cjs")];for(let s of o)if(Mj.existsSync(s))return s}catch{}return r[0]}function BU(e={}){let t=e.timeoutMs??Fne,r=e.memoryLimitMb??Zne,i=e.maxOutputChars??Vne,n=e.maxCodeLength??Bne;return {async execute(o){let s=Date.now(),l=o.timeoutMs??t;if(!Number.isInteger(l)||l<=0)return Vn(s,"","","POLICY_BLOCKED","timeoutMs must be a positive integer.",false);if(!o.code||o.code.trim().length===0)return Vn(s,"","","POLICY_BLOCKED","code must be a non-empty string.",false);if(o.code.length>n)return Vn(s,"","","POLICY_BLOCKED",`code exceeds maxCodeLength (${n}).`,false);let c=Kne();return new Promise(u=>{let d,p=false,f=false,m="",v="",h=false,y=x=>{p||(p=true,u(x));};try{d=child_process.fork(c,{stdio:["ignore","pipe","pipe","ipc"],serialization:"advanced",execArgv:[`--max-old-space-size=${r}`]});}catch(x){y(Vn(s,"","","INTERNAL",`Failed to start sandbox process: ${cS(x)}`,false));return}let w=setTimeout(()=>{p||(f=true,d?.kill("SIGKILL"));},l),S=(x,k)=>{let T=Jne(x==="stdout"?m:v,k,i);if(T.truncated&&(h=true),x==="stdout"){m=T.value;return}v=T.value;};d.stdout?.on("data",x=>{S("stdout",String(x));}),d.stderr?.on("data",x=>{S("stderr",String(x));}),d.once("error",x=>{clearTimeout(w),y(Vn(s,m,v,"INTERNAL",`Sandbox process error: ${cS(x)}`,h));}),d.once("message",x=>{clearTimeout(w);let k=VU(x.stdout,m),g=VU(x.stderr,v),T=ZU(k,i),C=ZU(g,i),A=x.outputTruncated||h||T.truncated||C.truncated;if(x.type==="success"){y({ok:true,result:x.result,stdout:T.value,stderr:C.value,durationMs:Date.now()-s,outputTruncated:A}),d.connected&&d.disconnect();return}y(Vn(s,T.value,C.value,x.errorCode,x.errorMessage,A)),d.connected&&d.disconnect();}),d.once("exit",(x,k)=>{if(clearTimeout(w),p)return;if(f){y(Vn(s,m,v,"TIMEOUT",`Execution timed out after ${l}ms.`,h));return}let g=Wne(k,v);y(Vn(s,m,v,g,"Sandbox process exited unexpectedly.",h));});let _={code:o.code,input:o.input,maxOutputChars:i};try{d.send(_);}catch(x){clearTimeout(w),d.kill("SIGKILL"),y(Vn(s,m,v,"INTERNAL",`Failed to send payload to sandbox: ${cS(x)}`,h));}})}}}function JU(e){let t=e.name??Hne,r=e.description??Gne;return {name:t,description:r,inputSchema:be.object({code:be.string().describe("JavaScript source code to execute in sandbox."),input:be.any().optional().describe("Optional input object exposed as global `input` in sandbox."),timeoutMs:be.number().int().positive().optional().describe("Optional timeout in milliseconds. Defaults to executor timeout.")}),execute:async i=>e.executor.execute(i)}}var Fne,Zne,Vne,Bne,Hne,Gne,WU=$(()=>{dr();Fne=2e3,Zne=64,Vne=2e4,Bne=2e4;Hne="run_js",Gne="Execute JavaScript in an isolated sandbox process. Returns result, stdout, stderr, and execution metadata.";});var fm,KU=$(()=>{fm=class{sessionsDir;constructor(){this.sessionsDir=ss__namespace.join(os.homedir(),".pulse-coder","sessions");}async initialize(){try{await on__namespace.mkdir(this.sessionsDir,{recursive:!0});}catch{}}async createSession(t){let r={id:crypto.randomUUID(),title:t||`Session ${new Date().toLocaleString()}`,createdAt:Date.now(),updatedAt:Date.now(),messages:[],metadata:{totalMessages:0}};return await this.saveSession(r),r}async saveSession(t){t.updatedAt=Date.now(),t.metadata.totalMessages=t.messages.length,t.messages.length>0&&(t.metadata.lastMessageAt=t.messages[t.messages.length-1].timestamp);let r=ss__namespace.join(this.sessionsDir,`${t.id}.json`);await on__namespace.writeFile(r,JSON.stringify(t,null,2));}async loadSession(t){try{let r=ss__namespace.join(this.sessionsDir,`${t}.json`),i=await on__namespace.readFile(r,"utf-8");return JSON.parse(i)}catch{return null}}safeContent(t){return typeof t=="string"?t:t==null?"":String(t)}async listSessions(t=20){try{let i=(await on__namespace.readdir(this.sessionsDir)).filter(o=>o.endsWith(".json")),n=[];for(let o of i){let s=await on__namespace.readFile(ss__namespace.join(this.sessionsDir,o),"utf-8");n.push(JSON.parse(s));}return n.sort((o,s)=>s.updatedAt-o.updatedAt).slice(0,t).map(o=>({id:o.id,title:o.title,createdAt:o.createdAt,updatedAt:o.updatedAt,messageCount:o.messages.length,preview:o.messages.length>0?this.safeContent(o.messages[o.messages.length-1].content).substring(0,100)+"...":"No messages"}))}catch{return []}}async deleteSession(t){try{let r=ss__namespace.join(this.sessionsDir,`${t}.json`);return await on__namespace.unlink(r),!0}catch{return false}}async updateSessionTitle(t,r){let i=await this.loadSession(t);return i?(i.title=r,await this.saveSession(i),true):false}async addMessage(t,r){let i=await this.loadSession(t);return i?(i.messages.push({...r,timestamp:Date.now()}),await this.saveSession(i),true):false}async searchSessions(t){let r=await this.listSessions(100),i=t.toLowerCase();return r.filter(n=>n.title.toLowerCase().includes(i)||n.preview.toLowerCase().includes(i))}};});var mm,HU=$(()=>{KU();mm=class{sessionManager;currentSessionId=null;constructor(){this.sessionManager=new fm;}async initialize(){await this.sessionManager.initialize();}getCurrentSessionId(){return this.currentSessionId}async createSession(t){let r=await this.sessionManager.createSession(t);return this.currentSessionId=r.id,console.log(`
|
|
423
423
|
\u2705 New session created: ${r.title} (ID: ${r.id})`),r.id}async resumeSession(t){let r=await this.sessionManager.loadSession(t);if(!r)return console.log(`
|
|
424
424
|
\u274C Session not found: ${t}`),false;this.currentSessionId=r.id,console.log(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pulse-coder-cli",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.8",
|
|
4
4
|
"description": "CLI interface for Pulse Coder",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"pulse-coder-engine": "0.0.1-alpha.
|
|
14
|
+
"pulse-coder-engine": "0.0.1-alpha.7",
|
|
15
15
|
"pulse-sandbox": "0.0.1-alpha.0"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|