@ai-agent-forge/agent-forge 0.85.11 → 0.85.12

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.
@@ -273,7 +273,7 @@ ${end.comment}`:end.comment}this.doc.range[2]=end.offset;break}default:this.erro
273
273
  `:`
274
274
  `)+postfix,endIndex=index3+1,index3=string.indexOf(`
275
275
  `,endIndex)}while(index3!==-1);return returnValue+=string.slice(endIndex),returnValue}var{stdout:stdoutColor,stderr:stderrColor}=supports_color_default,GENERATOR=Symbol("GENERATOR"),STYLER=Symbol("STYLER"),IS_EMPTY=Symbol("IS_EMPTY"),levelMapping=["ansi","ansi","ansi256","ansi16m"],styles2=Object.create(null),applyOptions=(object,options={})=>{if(options.level&&!(Number.isInteger(options.level)&&options.level>=0&&options.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let colorLevel=stdoutColor?stdoutColor.level:0;object.level=options.level===void 0?colorLevel:options.level};var chalkFactory=options=>{let chalk2=(...strings)=>strings.join(" ");return applyOptions(chalk2,options),Object.setPrototypeOf(chalk2,createChalk.prototype),chalk2};function createChalk(options){return chalkFactory(options)}Object.setPrototypeOf(createChalk.prototype,Function.prototype);for(let[styleName,style]of Object.entries(ansi_styles_default))styles2[styleName]={get(){let builder=createBuilder(this,createStyler(style.open,style.close,this[STYLER]),this[IS_EMPTY]);return Object.defineProperty(this,styleName,{value:builder}),builder}};styles2.visible={get(){let builder=createBuilder(this,this[STYLER],!0);return Object.defineProperty(this,"visible",{value:builder}),builder}};var getModelAnsi=(model,level,type,...arguments_)=>model==="rgb"?level==="ansi16m"?ansi_styles_default[type].ansi16m(...arguments_):level==="ansi256"?ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_)):ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_)):model==="hex"?getModelAnsi("rgb",level,type,...ansi_styles_default.hexToRgb(...arguments_)):ansi_styles_default[type][model](...arguments_),usedModels=["rgb","hex","ansi256"];for(let model of usedModels){styles2[model]={get(){let{level}=this;return function(...arguments_){let styler=createStyler(getModelAnsi(model,levelMapping[level],"color",...arguments_),ansi_styles_default.color.close,this[STYLER]);return createBuilder(this,styler,this[IS_EMPTY])}}};let bgModel="bg"+model[0].toUpperCase()+model.slice(1);styles2[bgModel]={get(){let{level}=this;return function(...arguments_){let styler=createStyler(getModelAnsi(model,levelMapping[level],"bgColor",...arguments_),ansi_styles_default.bgColor.close,this[STYLER]);return createBuilder(this,styler,this[IS_EMPTY])}}}}var proto=Object.defineProperties(()=>{},{...styles2,level:{enumerable:!0,get(){return this[GENERATOR].level},set(level){this[GENERATOR].level=level}}}),createStyler=(open5,close,parent)=>{let openAll,closeAll;return parent===void 0?(openAll=open5,closeAll=close):(openAll=parent.openAll+open5,closeAll=close+parent.closeAll),{open:open5,close,openAll,closeAll,parent}},createBuilder=(self,_styler,_isEmpty)=>{let builder=(...arguments_)=>applyStyle(builder,arguments_.length===1?""+arguments_[0]:arguments_.join(" "));return Object.setPrototypeOf(builder,proto),builder[GENERATOR]=self,builder[STYLER]=_styler,builder[IS_EMPTY]=_isEmpty,builder},applyStyle=(self,string)=>{if(self.level<=0||!string)return self[IS_EMPTY]?"":string;let styler=self[STYLER];if(styler===void 0)return string;let{openAll,closeAll}=styler;if(string.includes("\x1B"))for(;styler!==void 0;)string=stringReplaceAll(string,styler.close,styler.open),styler=styler.parent;let lfIndex=string.indexOf(`
276
- `);return lfIndex!==-1&&(string=stringEncaseCRLFWithFirstIndex(string,closeAll,openAll,lfIndex)),openAll+string+closeAll};Object.defineProperties(createChalk.prototype,styles2);var chalk=createChalk(),chalkStderr=createChalk({level:stderrColor?stderrColor.level:0});var source_default=chalk;var VALID_THINKING_LEVELS=["off","minimal","low","medium","high","xhigh","max"],VALID_LOG_LEVELS=["debug","info","warn","error"];function isValidHostLogLevel(level){return VALID_LOG_LEVELS.includes(level)}function isValidTraceKind(kind){return TRACE_KINDS_V1.includes(kind)}var MAX_PLUGIN_CLI_ID_CHARS=128,MAX_PLUGIN_CLI_IDS=128;function isValidThinkingLevel(level){return VALID_THINKING_LEVELS.includes(level)}function normalizeSessionName(value){let name=value.trim();return name.length>0?name:void 0}function parseBoundedPluginId(args,index3,result,option,values){let raw=args[index3+1];if(raw===void 0||raw.startsWith("-"))return result.diagnostics.push({type:"error",message:`${option} requires a plugin id`}),index3;let value=raw.trim();return value.length===0?(result.diagnostics.push({type:"error",message:`${option} requires a non-empty plugin id`}),index3+1):value.length>MAX_PLUGIN_CLI_ID_CHARS?(result.diagnostics.push({type:"error",message:`${option} plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}),index3+1):values.length>=MAX_PLUGIN_CLI_IDS?(result.diagnostics.push({type:"error",message:`${option} accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`}),index3+1):(values.push(value),index3+1)}function parsePluginProfileValue(args,index3,result,rawValue){let raw=rawValue??args[index3+1];if(raw===void 0||raw.startsWith("-"))return result.diagnostics.push({type:"error",message:"--plugin-profile requires a profile id"}),index3;let value=raw.trim();return value.length===0?(result.diagnostics.push({type:"error",message:"--plugin-profile requires a non-empty profile id"}),rawValue===void 0?index3+1:index3):value.length>MAX_PLUGIN_CLI_ID_CHARS?(result.diagnostics.push({type:"error",message:`--plugin-profile id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}),rawValue===void 0?index3+1:index3):(result.pluginProfile=value,rawValue===void 0?index3+1:index3)}function parseArgs(args){let result={messages:[],fileArgs:[],diagnostics:[]};for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--"){for(let positionalArg of args.slice(i+1))positionalArg.startsWith("@")?result.fileArgs.push(positionalArg.slice(1)):result.messages.push(positionalArg);break}else if(arg==="--help"||arg==="-h")result.help=!0;else if(arg==="--version"||arg==="-v")result.version=!0;else if(arg==="--mode"&&i+1<args.length){let mode=args[++i];(mode==="text"||mode==="json"||mode==="rpc")&&(result.mode=mode)}else if(arg==="--continue"||arg==="-c")result.continue=!0;else if(arg==="--resume"||arg==="-r")result.resume=!0;else if(arg==="--provider"&&i+1<args.length)result.provider=args[++i];else if((arg==="--model"||arg==="-m")&&i+1<args.length)result.model=args[++i];else if(arg==="--api-key"&&i+1<args.length)result.apiKey=args[++i];else if(arg==="--system-prompt"&&i+1<args.length)result.systemPrompt=args[++i];else if(arg==="--append-system-prompt"&&i+1<args.length)result.appendSystemPrompt=result.appendSystemPrompt??[],result.appendSystemPrompt.push(args[++i]);else if(arg==="--name"||arg==="-n")i+1<args.length?result.name=args[++i]:result.diagnostics.push({type:"error",message:"--name requires a value"});else if(arg==="--no-session")result.noSession=!0;else if(arg==="--session"&&i+1<args.length)result.session=args[++i];else if(arg==="--session-id"&&i+1<args.length)result.sessionId=args[++i];else if(arg==="--fork"&&i+1<args.length)result.fork=args[++i];else if(arg==="--session-dir"&&i+1<args.length)result.sessionDir=args[++i];else if(arg==="--suite"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suite=id,i++):result.diagnostics.push({type:"error",message:"--suite requires a suite id"})}else if(arg==="--suite-create"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suiteCreate=id,i++):result.diagnostics.push({type:"error",message:"--suite-create requires a suite id"})}else if(arg==="--clone-from"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.cloneFrom=id,i++):result.diagnostics.push({type:"error",message:"--clone-from requires a suite id"})}else if(arg==="--suite-delete"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suiteDelete=id,i++):result.diagnostics.push({type:"error",message:"--suite-delete requires a suite id"})}else if(arg==="--suite-reset"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suiteReset=id,i++):result.diagnostics.push({type:"error",message:"--suite-reset requires a suite id"})}else if(arg==="--serve"){let raw=args[i+1],port=raw!==void 0&&/^\d+$/.test(raw)?Number(raw):Number.NaN;Number.isInteger(port)&&port<=65535?(result.serve=port,i++):(result.diagnostics.push({type:"error",message:"--serve requires a valid TCP port (0-65535)"}),raw!==void 0&&i++)}else if(arg==="--subagent-runner")result.subagentRunner=!0;else if(arg==="--serve-workspace-root"){let dir=args[i+1];dir===void 0||dir.startsWith("-")?result.diagnostics.push({type:"error",message:"--serve-workspace-root requires a directory"}):(result.serveWorkspaceRoots=result.serveWorkspaceRoots??[],result.serveWorkspaceRoots.push(dir),i++)}else if(arg==="--models"&&i+1<args.length)result.models=args[++i].split(",").map(s=>s.trim());else if(arg==="--no-tools"||arg==="-nt")result.noTools=!0;else if(arg==="--no-builtin-tools"||arg==="-nbt")result.noBuiltinTools=!0;else if((arg==="--tools"||arg==="-t")&&i+1<args.length)result.tools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if((arg==="--exclude-tools"||arg==="-xt")&&i+1<args.length)result.excludeTools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if(arg==="--thinking"&&i+1<args.length){let level=args[++i];isValidThinkingLevel(level)?result.thinking=level:result.diagnostics.push({type:"warning",message:`Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`})}else if(arg==="--print"||arg==="-p"){result.print=!0;let next=args[i+1];next!==void 0&&!next.startsWith("@")&&(!next.startsWith("-")||next.startsWith("---"))&&(result.messages.push(next),i++)}else if(arg==="--export"&&i+1<args.length)result.export=args[++i];else if(arg==="--trace"){let next=args[i+1];next!==void 0&&!next.startsWith("-")?(result.trace=next,i++):result.trace=""}else if(arg==="--trace-json")result.traceJson=!0;else if(arg==="--trace-kind"){let raw=args[i+1];if(raw===void 0||raw.startsWith("-"))result.diagnostics.push({type:"error",message:"--trace-kind requires a comma-separated kind list"});else{i++;let kinds=raw.split(",").map(kind=>kind.trim()).filter(kind=>kind.length>0),invalid2=kinds.filter(kind=>!isValidTraceKind(kind));kinds.length===0?result.diagnostics.push({type:"error",message:"--trace-kind requires at least one trace kind"}):invalid2.length>0?result.diagnostics.push({type:"error",message:`Invalid trace kind(s) "${invalid2.join(", ")}". Valid values: ${TRACE_KINDS_V1.join(", ")}`}):result.traceKind=kinds}}else if(arg==="--trace-limit"){let raw=args[i+1];if(raw===void 0||raw.startsWith("-"))result.diagnostics.push({type:"error",message:"--trace-limit requires a positive integer"});else{i++;let limit=/^\d+$/.test(raw)?Number(raw):Number.NaN;Number.isInteger(limit)&&limit>0?result.traceLimit=limit:result.diagnostics.push({type:"error",message:`Invalid trace limit "${raw}". Expected a positive integer`})}}else if(arg==="--no-plugins"||arg==="-np")result.noPlugins=!0;else if(arg==="--no-trace")result.noTrace=!0;else if(arg==="--log-level"){let level=args[i+1];level===void 0||level.startsWith("-")?result.diagnostics.push({type:"error",message:"--log-level requires a level"}):isValidHostLogLevel(level)?(result.logLevel=level,i++):(i++,result.diagnostics.push({type:"error",message:`Invalid log level "${level}". Valid values: ${VALID_LOG_LEVELS.join(", ")}`}))}else if(arg==="--plugin-profile")i=parsePluginProfileValue(args,i,result);else if(arg.startsWith("--plugin-profile="))parsePluginProfileValue(args,i,result,arg.slice(17));else if(arg==="--plugin-scope"||arg.startsWith("--plugin-scope=")){let raw=arg==="--plugin-scope"?args[i+1]:arg.slice(15);arg==="--plugin-scope"&&i++,raw!=="global"&&raw!=="project"?result.diagnostics.push({type:"error",message:"--plugin-scope must be global or project"}):result.pluginSelectionScope!==void 0?result.diagnostics.push({type:"error",message:"--plugin-scope may be specified only once"}):result.pluginSelectionScope=raw}else if(arg==="--plugin")result.plugins=result.plugins??[],i=parseBoundedPluginId(args,i,result,"--plugin",result.plugins);else if(arg.startsWith("--plugin=")){result.plugins=result.plugins??[];let value=arg.slice(9).trim();value.length===0?result.diagnostics.push({type:"error",message:"--plugin requires a non-empty plugin id"}):value.length>MAX_PLUGIN_CLI_ID_CHARS?result.diagnostics.push({type:"error",message:`--plugin plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}):result.plugins.length>=MAX_PLUGIN_CLI_IDS?result.diagnostics.push({type:"error",message:`--plugin accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`}):result.plugins.push(value)}else if(arg==="--disable-plugin")result.disabledPlugins=result.disabledPlugins??[],i=parseBoundedPluginId(args,i,result,"--disable-plugin",result.disabledPlugins);else if(arg.startsWith("--disable-plugin=")){result.disabledPlugins=result.disabledPlugins??[];let value=arg.slice(17).trim();value.length===0?result.diagnostics.push({type:"error",message:"--disable-plugin requires a non-empty plugin id"}):value.length>MAX_PLUGIN_CLI_ID_CHARS?result.diagnostics.push({type:"error",message:`--disable-plugin plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}):result.disabledPlugins.length>=MAX_PLUGIN_CLI_IDS?result.diagnostics.push({type:"error",message:`--disable-plugin accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`}):result.disabledPlugins.push(value)}else if(arg==="--skill"&&i+1<args.length)result.skills=result.skills??[],result.skills.push(args[++i]);else if(arg==="--prompt-template"&&i+1<args.length)result.promptTemplates=result.promptTemplates??[],result.promptTemplates.push(args[++i]);else if(arg==="--theme"&&i+1<args.length)result.themes=result.themes??[],result.themes.push(args[++i]);else if(arg==="--use-theme"){let themeName=args[i+1];themeName===void 0||themeName.startsWith("-")?result.diagnostics.push({type:"error",message:"--use-theme requires a theme name"}):(result.useTheme=themeName,i++)}else if(arg==="--no-skills"||arg==="-ns")result.noSkills=!0;else if(arg==="--no-prompt-templates"||arg==="-np")result.noPromptTemplates=!0;else if(arg==="--no-themes")result.noThemes=!0;else if(arg==="--no-context-files"||arg==="-nc")result.noContextFiles=!0;else if(arg==="--list-models")i+1<args.length&&!args[i+1].startsWith("-")&&!args[i+1].startsWith("@")?result.listModels=args[++i]:result.listModels=!0;else if(arg==="--tui-mode"){let mode=args[i+1];mode==="regular"||mode==="fullscreen"?(result.tuiMode=mode,i++):mode===void 0||mode.startsWith("-")?result.diagnostics.push({type:"error",message:"--tui-mode requires regular or fullscreen"}):(i++,result.diagnostics.push({type:"error",message:`Invalid TUI mode "${mode}". Valid values: regular, fullscreen`}))}else arg==="--verbose"?result.verbose=!0:arg==="--offline"?result.offline=!0:arg.startsWith("@")?result.fileArgs.push(arg.slice(1)):arg.startsWith("--")?(result.diagnostics.push({type:"error",message:`Unknown option: ${arg.split("=")[0]}`}),i++):arg.startsWith("-")&&!arg.startsWith("--")?result.diagnostics.push({type:"error",message:`Unknown option: ${arg}`}):arg.startsWith("-")||result.messages.push(arg)}return result}function printHelp(){console.log(`${source_default.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools
276
+ `);return lfIndex!==-1&&(string=stringEncaseCRLFWithFirstIndex(string,closeAll,openAll,lfIndex)),openAll+string+closeAll};Object.defineProperties(createChalk.prototype,styles2);var chalk=createChalk(),chalkStderr=createChalk({level:stderrColor?stderrColor.level:0});var source_default=chalk;var VALID_THINKING_LEVELS=["off","minimal","low","medium","high","xhigh","max"],VALID_LOG_LEVELS=["debug","info","warn","error"];function isValidHostLogLevel(level){return VALID_LOG_LEVELS.includes(level)}function isValidTraceKind(kind){return TRACE_KINDS_V1.includes(kind)}var MAX_PLUGIN_CLI_ID_CHARS=128,MAX_PLUGIN_CLI_IDS=128;function isValidThinkingLevel(level){return VALID_THINKING_LEVELS.includes(level)}function normalizeSessionName(value){let name=value.trim();return name.length>0?name:void 0}function parseBoundedPluginId(args,index3,result,option,values){let raw=args[index3+1];if(raw===void 0||raw.startsWith("-"))return result.diagnostics.push({type:"error",message:`${option} requires a plugin id`}),index3;let value=raw.trim();return value.length===0?(result.diagnostics.push({type:"error",message:`${option} requires a non-empty plugin id`}),index3+1):value.length>MAX_PLUGIN_CLI_ID_CHARS?(result.diagnostics.push({type:"error",message:`${option} plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}),index3+1):values.length>=MAX_PLUGIN_CLI_IDS?(result.diagnostics.push({type:"error",message:`${option} accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`}),index3+1):(values.push(value),index3+1)}function parsePluginProfileValue(args,index3,result,rawValue){let raw=rawValue??args[index3+1];if(raw===void 0||raw.startsWith("-"))return result.diagnostics.push({type:"error",message:"--plugin-profile requires a profile id"}),index3;let value=raw.trim();return value.length===0?(result.diagnostics.push({type:"error",message:"--plugin-profile requires a non-empty profile id"}),rawValue===void 0?index3+1:index3):value.length>MAX_PLUGIN_CLI_ID_CHARS?(result.diagnostics.push({type:"error",message:`--plugin-profile id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}),rawValue===void 0?index3+1:index3):(result.pluginProfile=value,rawValue===void 0?index3+1:index3)}function parseArgs(args){let result={messages:[],fileArgs:[],diagnostics:[]};for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--"){for(let positionalArg of args.slice(i+1))positionalArg.startsWith("@")?result.fileArgs.push(positionalArg.slice(1)):result.messages.push(positionalArg);break}else if(arg==="--help"||arg==="-h")result.help=!0;else if(arg==="--version"||arg==="-v")result.version=!0;else if(arg==="--mode"&&i+1<args.length){let mode=args[++i];(mode==="text"||mode==="json"||mode==="rpc")&&(result.mode=mode)}else if(arg==="--continue"||arg==="-c")result.continue=!0;else if(arg==="--resume"||arg==="-r")result.resume=!0;else if(arg==="--provider"&&i+1<args.length)result.provider=args[++i];else if((arg==="--model"||arg==="-m")&&i+1<args.length)result.model=args[++i];else if(arg==="--api-key"&&i+1<args.length)result.apiKey=args[++i];else if(arg==="--system-prompt"&&i+1<args.length)result.systemPrompt=args[++i];else if(arg==="--append-system-prompt"&&i+1<args.length)result.appendSystemPrompt=result.appendSystemPrompt??[],result.appendSystemPrompt.push(args[++i]);else if(arg==="--name"||arg==="-n")i+1<args.length?result.name=args[++i]:result.diagnostics.push({type:"error",message:"--name requires a value"});else if(arg==="--no-session")result.noSession=!0;else if(arg==="--rebind-suite")result.rebindSuite=!0;else if(arg==="--session"&&i+1<args.length)result.session=args[++i];else if(arg==="--session-id"&&i+1<args.length)result.sessionId=args[++i];else if(arg==="--fork"&&i+1<args.length)result.fork=args[++i];else if(arg==="--session-dir"&&i+1<args.length)result.sessionDir=args[++i];else if(arg==="--suite"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suite=id,i++):result.diagnostics.push({type:"error",message:"--suite requires a suite id"})}else if(arg==="--suite-create"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suiteCreate=id,i++):result.diagnostics.push({type:"error",message:"--suite-create requires a suite id"})}else if(arg==="--clone-from"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.cloneFrom=id,i++):result.diagnostics.push({type:"error",message:"--clone-from requires a suite id"})}else if(arg==="--suite-delete"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suiteDelete=id,i++):result.diagnostics.push({type:"error",message:"--suite-delete requires a suite id"})}else if(arg==="--suite-reset"){let id=args[i+1];id!==void 0&&!id.startsWith("-")?(result.suiteReset=id,i++):result.diagnostics.push({type:"error",message:"--suite-reset requires a suite id"})}else if(arg==="--serve"){let raw=args[i+1],port=raw!==void 0&&/^\d+$/.test(raw)?Number(raw):Number.NaN;Number.isInteger(port)&&port<=65535?(result.serve=port,i++):(result.diagnostics.push({type:"error",message:"--serve requires a valid TCP port (0-65535)"}),raw!==void 0&&i++)}else if(arg==="--subagent-runner")result.subagentRunner=!0;else if(arg==="--serve-workspace-root"){let dir=args[i+1];dir===void 0||dir.startsWith("-")?result.diagnostics.push({type:"error",message:"--serve-workspace-root requires a directory"}):(result.serveWorkspaceRoots=result.serveWorkspaceRoots??[],result.serveWorkspaceRoots.push(dir),i++)}else if(arg==="--models"&&i+1<args.length)result.models=args[++i].split(",").map(s=>s.trim());else if(arg==="--no-tools"||arg==="-nt")result.noTools=!0;else if(arg==="--no-builtin-tools"||arg==="-nbt")result.noBuiltinTools=!0;else if((arg==="--tools"||arg==="-t")&&i+1<args.length)result.tools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if((arg==="--exclude-tools"||arg==="-xt")&&i+1<args.length)result.excludeTools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if(arg==="--thinking"&&i+1<args.length){let level=args[++i];isValidThinkingLevel(level)?result.thinking=level:result.diagnostics.push({type:"warning",message:`Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`})}else if(arg==="--print"||arg==="-p"){result.print=!0;let next=args[i+1];next!==void 0&&!next.startsWith("@")&&(!next.startsWith("-")||next.startsWith("---"))&&(result.messages.push(next),i++)}else if(arg==="--export"&&i+1<args.length)result.export=args[++i];else if(arg==="--trace"){let next=args[i+1];next!==void 0&&!next.startsWith("-")?(result.trace=next,i++):result.trace=""}else if(arg==="--trace-json")result.traceJson=!0;else if(arg==="--trace-kind"){let raw=args[i+1];if(raw===void 0||raw.startsWith("-"))result.diagnostics.push({type:"error",message:"--trace-kind requires a comma-separated kind list"});else{i++;let kinds=raw.split(",").map(kind=>kind.trim()).filter(kind=>kind.length>0),invalid2=kinds.filter(kind=>!isValidTraceKind(kind));kinds.length===0?result.diagnostics.push({type:"error",message:"--trace-kind requires at least one trace kind"}):invalid2.length>0?result.diagnostics.push({type:"error",message:`Invalid trace kind(s) "${invalid2.join(", ")}". Valid values: ${TRACE_KINDS_V1.join(", ")}`}):result.traceKind=kinds}}else if(arg==="--trace-limit"){let raw=args[i+1];if(raw===void 0||raw.startsWith("-"))result.diagnostics.push({type:"error",message:"--trace-limit requires a positive integer"});else{i++;let limit=/^\d+$/.test(raw)?Number(raw):Number.NaN;Number.isInteger(limit)&&limit>0?result.traceLimit=limit:result.diagnostics.push({type:"error",message:`Invalid trace limit "${raw}". Expected a positive integer`})}}else if(arg==="--no-plugins"||arg==="-np")result.noPlugins=!0;else if(arg==="--no-trace")result.noTrace=!0;else if(arg==="--log-level"){let level=args[i+1];level===void 0||level.startsWith("-")?result.diagnostics.push({type:"error",message:"--log-level requires a level"}):isValidHostLogLevel(level)?(result.logLevel=level,i++):(i++,result.diagnostics.push({type:"error",message:`Invalid log level "${level}". Valid values: ${VALID_LOG_LEVELS.join(", ")}`}))}else if(arg==="--plugin-profile")i=parsePluginProfileValue(args,i,result);else if(arg.startsWith("--plugin-profile="))parsePluginProfileValue(args,i,result,arg.slice(17));else if(arg==="--plugin-scope"||arg.startsWith("--plugin-scope=")){let raw=arg==="--plugin-scope"?args[i+1]:arg.slice(15);arg==="--plugin-scope"&&i++,raw!=="global"&&raw!=="project"?result.diagnostics.push({type:"error",message:"--plugin-scope must be global or project"}):result.pluginSelectionScope!==void 0?result.diagnostics.push({type:"error",message:"--plugin-scope may be specified only once"}):result.pluginSelectionScope=raw}else if(arg==="--plugin")result.plugins=result.plugins??[],i=parseBoundedPluginId(args,i,result,"--plugin",result.plugins);else if(arg.startsWith("--plugin=")){result.plugins=result.plugins??[];let value=arg.slice(9).trim();value.length===0?result.diagnostics.push({type:"error",message:"--plugin requires a non-empty plugin id"}):value.length>MAX_PLUGIN_CLI_ID_CHARS?result.diagnostics.push({type:"error",message:`--plugin plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}):result.plugins.length>=MAX_PLUGIN_CLI_IDS?result.diagnostics.push({type:"error",message:`--plugin accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`}):result.plugins.push(value)}else if(arg==="--disable-plugin")result.disabledPlugins=result.disabledPlugins??[],i=parseBoundedPluginId(args,i,result,"--disable-plugin",result.disabledPlugins);else if(arg.startsWith("--disable-plugin=")){result.disabledPlugins=result.disabledPlugins??[];let value=arg.slice(17).trim();value.length===0?result.diagnostics.push({type:"error",message:"--disable-plugin requires a non-empty plugin id"}):value.length>MAX_PLUGIN_CLI_ID_CHARS?result.diagnostics.push({type:"error",message:`--disable-plugin plugin id must be at most ${MAX_PLUGIN_CLI_ID_CHARS} characters`}):result.disabledPlugins.length>=MAX_PLUGIN_CLI_IDS?result.diagnostics.push({type:"error",message:`--disable-plugin accepts at most ${MAX_PLUGIN_CLI_IDS} plugin ids`}):result.disabledPlugins.push(value)}else if(arg==="--skill"&&i+1<args.length)result.skills=result.skills??[],result.skills.push(args[++i]);else if(arg==="--prompt-template"&&i+1<args.length)result.promptTemplates=result.promptTemplates??[],result.promptTemplates.push(args[++i]);else if(arg==="--theme"&&i+1<args.length)result.themes=result.themes??[],result.themes.push(args[++i]);else if(arg==="--use-theme"){let themeName=args[i+1];themeName===void 0||themeName.startsWith("-")?result.diagnostics.push({type:"error",message:"--use-theme requires a theme name"}):(result.useTheme=themeName,i++)}else if(arg==="--no-skills"||arg==="-ns")result.noSkills=!0;else if(arg==="--no-prompt-templates"||arg==="-np")result.noPromptTemplates=!0;else if(arg==="--no-themes")result.noThemes=!0;else if(arg==="--no-context-files"||arg==="-nc")result.noContextFiles=!0;else if(arg==="--list-models")i+1<args.length&&!args[i+1].startsWith("-")&&!args[i+1].startsWith("@")?result.listModels=args[++i]:result.listModels=!0;else if(arg==="--tui-mode"){let mode=args[i+1];mode==="regular"||mode==="fullscreen"?(result.tuiMode=mode,i++):mode===void 0||mode.startsWith("-")?result.diagnostics.push({type:"error",message:"--tui-mode requires regular or fullscreen"}):(i++,result.diagnostics.push({type:"error",message:`Invalid TUI mode "${mode}". Valid values: regular, fullscreen`}))}else arg==="--verbose"?result.verbose=!0:arg==="--offline"?result.offline=!0:arg.startsWith("@")?result.fileArgs.push(arg.slice(1)):arg.startsWith("--")?(result.diagnostics.push({type:"error",message:`Unknown option: ${arg.split("=")[0]}`}),i++):arg.startsWith("-")&&!arg.startsWith("--")?result.diagnostics.push({type:"error",message:`Unknown option: ${arg}`}):arg.startsWith("-")||result.messages.push(arg)}return result}function printHelp(){console.log(`${source_default.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write tools
277
277
 
278
278
  ${source_default.bold("Usage:")}
279
279
  ${APP_NAME} [options] [--] [@files...] [messages...]
@@ -1064,8 +1064,8 @@ ${issue.fallbackCwd}`}var MissingSessionCwdError=class extends Error{issue;const
1064
1064
  `,1)[0]??"";return{header:parseHeader3(firstLine),bytes}}function readAgentSession(options){if(!isAgentSessionId2(options.sessionId))return;let dir=agentSessionsDir2(options.agentDir),filePath=findSessionFile2(dir,options.sessionId);if(filePath===void 0)return;let text,bytes;try{bytes=statSync16(filePath).size,text=readFileSync19(filePath,{encoding:"utf-8",flag:"r"})}catch{return}let maxBytes=options.maxBytes??DEFAULT_MAX_BYTES4,truncated=text.length>maxBytes,lines=(truncated?text.slice(0,maxBytes):text).split(`
1065
1065
  `).filter(line=>line.trim()!==""),header=lines.length>0?parseHeader3(lines[0]):void 0,entries=[];for(let line of lines.slice(header===void 0?0:1))try{entries.push(JSON.parse(line))}catch{}let parentAgentSession=typeof header?.parentAgentSession=="string"?header.parentAgentSession:void 0,agentRole=typeof header?.agentRole=="string"?header.agentRole:void 0,cwd=typeof header?.cwd=="string"?header.cwd:void 0,createdAt=typeof header?.timestamp=="string"?header.timestamp:void 0;return{sessionId:options.sessionId,...parentAgentSession===void 0?{}:{parentAgentSession},...agentRole===void 0?{}:{agentRole},...cwd===void 0?{}:{cwd},...createdAt===void 0?{}:{createdAt},bytes,entryCount:entries.length,truncated,entries:Object.freeze(entries)}}function listAgentSessions(options){let names2,dir;try{dir=agentSessionsDir2(options.agentDir),names2=readdirSync14(dir).filter(name=>name.endsWith(".jsonl"))}catch{return Object.freeze([])}let summaries=[];for(let name of names2){let stem=name.slice(0,-6),separator=stem.lastIndexOf("_"),sessionId=separator===-1?stem:stem.slice(separator+1);if(!isAgentSessionId2(sessionId))continue;let filePath=join48(dir,name),scanned,modifiedAt;try{scanned=readHeader(filePath),modifiedAt=statSync16(filePath).mtimeMs}catch{continue}let parentAgentSession=typeof scanned.header?.parentAgentSession=="string"?scanned.header.parentAgentSession:void 0;if(options.parentAgentSession!==void 0&&parentAgentSession!==options.parentAgentSession)continue;let agentRole=typeof scanned.header?.agentRole=="string"?scanned.header.agentRole:void 0,createdAt=typeof scanned.header?.timestamp=="string"?scanned.header.timestamp:void 0;summaries.push({sessionId,...parentAgentSession===void 0?{}:{parentAgentSession},...agentRole===void 0?{}:{agentRole},...createdAt===void 0?{}:{createdAt},modifiedAt,bytes:scanned.bytes})}return summaries.sort((left,right)=>right.modifiedAt-left.modifiedAt),Object.freeze(summaries.slice(0,options.limit??DEFAULT_LIST_LIMIT))}function createCodingAgentFacade(session){return{version:1,prompt:(text,options)=>session.prompt(text,options),steer:(text,images,options)=>session.steer(text,images,options),abort:()=>session.abort(),waitForIdle:()=>session.waitForIdle(),compact:customInstructions=>session.compact(customInstructions),navigateTree:(targetId,options)=>session.navigateTree(targetId,options),reload:options=>session.reload(options),setModel:(model,options)=>session.setModel(model,options),setThinkingLevel:(level,options)=>session.setThinkingLevel(level,options),setActiveToolsByName:toolNames=>session.setActiveToolsByName(toolNames),getQueuedMessages:()=>({steering:session.getSteeringMessages(),followUp:session.getFollowUpMessages()}),clearQueue:()=>session.clearQueue(),recordSuiteMismatch:(originalSuiteId,currentSuiteId)=>session.recordSuiteMismatch(originalSuiteId,currentSuiteId),getSessionAPI:()=>session.getSessionAPI(),isIdle:()=>session.isIdle,getState:()=>session.state,getModel:()=>session.model,getToolNames:()=>session.getActiveToolNames(),getSessionId:()=>session.sessionId,getHeader:()=>session.sessionManager.getHeader(),subscribe:listener=>session.subscribe(listener),subscribeRawEventGate:listener=>session.agent.subscribe(()=>listener()),getSessionName:()=>session.sessionName,isCompacting:()=>session.isCompacting,isStreaming:()=>session.isStreaming,getContextUsage:()=>session.getContextUsage(),getSystemPrompt:()=>session.systemPrompt,getScopedModels:()=>session.scopedModels,getTree:()=>session.sessionManager.getTree(),getLeafId:()=>session.sessionManager.getLeafId(),getPromptTemplates:()=>session.promptTemplates,getToolDefinition:name=>session.getToolDefinition(name),getCwd:()=>session.sessionManager.getCwd(),getEntries:()=>session.sessionManager.getEntries(),getPendingMessageCount:()=>session.pendingMessageCount,followUp:(text,images,options)=>session.followUp(text,images,options),setScopedModels:scopedModels=>session.setScopedModels(scopedModels),cycleModel:(direction,options)=>session.cycleModel(direction,options),cycleThinkingLevel:options=>session.cycleThinkingLevel(options),setSteeringMode:mode=>session.setSteeringMode(mode),setFollowUpMode:mode=>session.setFollowUpMode(mode),setAutoCompactionEnabled:enabled=>session.setAutoCompactionEnabled(enabled),setSessionName:name=>session.setSessionName(name),abortBash:()=>session.abortBash(),abortCompaction:()=>session.abortCompaction(),abortRetry:()=>session.abortRetry(),abortBranchSummary:()=>session.abortBranchSummary(),captureBashEpoch:()=>session.captureBashEpoch(),isBashEpochCurrent:epoch=>session.isBashEpochCurrent(epoch),emitUserBash:excludeFromContext=>session.emitUserBash(excludeFromContext),executeBash:(command,onChunk,options)=>session.executeBash(command,onChunk,options),recordBashResult:(command,result,options)=>session.recordBashResult(command,result,options),getThinkingLevel:()=>session.thinkingLevel,getSteeringMode:()=>session.steeringMode,getFollowUpMode:()=>session.followUpMode,getSessionFile:()=>session.sessionFile,isAutoCompactionEnabled:()=>session.autoCompactionEnabled,getAvailableThinkingLevels:()=>session.getAvailableThinkingLevels(),getUserMessagesForForking:()=>session.getUserMessagesForForking(),getLastAssistantText:()=>session.getLastAssistantText(),getSessionStats:()=>session.getSessionStats(),setAutoRetryEnabled:enabled=>session.setAutoRetryEnabled(enabled),exportToHtml:(outputPath,options)=>session.exportToHtml(outputPath,options),appendLabelChange:(entryId,label)=>session.sessionManager.appendLabelChange(entryId,label),getSkills:()=>session.resourceLoader.getSkills(),getPrompts:()=>session.resourceLoader.getPrompts(),getThemes:()=>session.resourceLoader.getThemes(),getAgentsFiles:()=>session.resourceLoader.getAgentsFiles(),getSystemPromptSource:()=>session.resourceLoader.getSystemPromptSource(),getAppendSystemPromptSources:()=>session.resourceLoader.getAppendSystemPromptSources(),getSuiteId:()=>readSessionSuiteBinding(session.getSessionAPI().getBranchEntries())?.suiteId,getAvailableModels:()=>session.modelRuntime.getAvailableSnapshot(),isUsingSubscription:providerId=>session.modelRuntime.isUsingSubscription(providerId),getModelsError:()=>session.modelRuntime.getError(),getModelCatalog:()=>session.modelRuntime,checkProviderAuth:providerId=>session.modelRuntime.checkAuth(providerId),getProviderAuth:providerId=>session.modelRuntime.getAuth(providerId),getModelPriceSource:()=>session.modelRuntime,getModelAuthRuntime:()=>session.modelRuntime,getContextEntries:()=>session.sessionManager.buildContextEntries(),getSteeringMessages:()=>session.getSteeringMessages(),getFollowUpMessages:()=>session.getFollowUpMessages(),getRetryAttempt:()=>session.retryAttempt,isBashRunning:()=>session.isBashRunning,exportToJsonl:outputPath=>session.exportToJsonl(outputPath),dispose:()=>session.dispose()}}function createCodingAgentRuntimeFacade(runtime){let sessionManager=()=>runtime.session.sessionManager;return{version:1,newSession:(...args)=>runtime.newSession(...args),fork:(...args)=>runtime.fork(...args),switchSession:(...args)=>runtime.switchSession(...args),importFromJsonl:(...args)=>runtime.importFromJsonl(...args),dispose:()=>runtime.dispose(),setBeforeSessionInvalidate:beforeSessionInvalidate=>runtime.setBeforeSessionInvalidate(beforeSessionInvalidate),setRebindSession:rebindSession=>runtime.setRebindSession(rebindSession),getSessionFacade:()=>createCodingAgentFacade(runtime.session),listSessions:onProgress=>SessionManager.list(sessionManager().getCwd(),sessionManager().getSessionDir(),onProgress),listAllSessions:onProgress=>sessionManager().usesDefaultSessionDir()?SessionManager.listAll(onProgress):SessionManager.listAll(sessionManager().getSessionDir(),onProgress),getSessionFile:()=>sessionManager().getSessionFile(),getSessionDir:()=>sessionManager().getSessionDir(),usesDefaultSessionDir:()=>sessionManager().usesDefaultSessionDir(),isPersisted:()=>sessionManager().isPersisted(),getSessionId:()=>sessionManager().getSessionId()}}function areTimingsEnabled(){let configuredValue=process.env.AGENT_FORGE_TIMING;return configuredValue===void 0?process.env.PI_TIMING==="1":configuredValue==="1"}var ENABLED=areTimingsEnabled(),timingNamespaces=new Map;function resetTimings(namespace="main"){ENABLED&&timingNamespaces.set(namespace,{timings:[],lastTime:Date.now()})}function time(label,namespace="main"){if(!ENABLED)return;let now=Date.now();timingNamespaces.has(namespace)||resetTimings(namespace);let timingNamespace=timingNamespaces.get(namespace);timingNamespace.timings.push({label,ms:now-timingNamespace.lastTime}),timingNamespace.lastTime=now}function printTimingGroup(title,timings){let printableTimings=timings.filter(timing=>timing.ms>=0);if(printableTimings.length!==0){console.error(`
1066
1066
  --- ${title} ---`);for(let t of printableTimings)console.error(` ${t.label}: ${t.ms}ms`);console.error(` TOTAL: ${printableTimings.reduce((a,b2)=>a+b2.ms,0)}ms`),console.error(`${"-".repeat(title.length+8)}
1067
- `)}}function printTimings(){if(ENABLED)for(let[namespace,timingNamespace]of timingNamespaces)printTimingGroup(`Startup Timings: ${namespace}`,timingNamespace.timings)}setDefaultStreamFn(streamSimple);var AGENT_TASK_SETTLED_STATUSES=new Set(["queued","admitted","running","succeeded","failed","cancelled","timed_out","drain_timeout","runner_lost"]);function parseAgentTaskSettledDigestLine(line){let parsed;try{parsed=JSON.parse(line)}catch{return}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return;let record=parsed;if(!(typeof record.taskId!="string"||record.taskId==="")&&!(typeof record.sessionId!="string"||record.sessionId==="")&&!(typeof record.status!="string"||!AGENT_TASK_SETTLED_STATUSES.has(record.status))&&!(record.reasonCode!==void 0&&(typeof record.reasonCode!="string"||record.reasonCode==="")))return{taskId:record.taskId,taskSessionId:record.sessionId,status:record.status,...record.reasonCode===void 0?{}:{reasonCode:record.reasonCode}}}function deliverAgentTaskSettledDigestLine(session,line,hostLogger){let facts=parseAgentTaskSettledDigestLine(line);if(facts===void 0){hostLogger?.warn("sdk","background delegation settlement line is not a valid agent.task.settled source",{cause:line});return}session?.dispatchAgentTaskSettled(facts)}var OBSERVABILITY_PACKAGE_ID="agent-forge.plugin.observability",SUBAGENT_DELEGATE_PACKAGE_ID="agent-forge.plugin.subagent-delegate",MEMORY_PACKAGE_ID="agent-forge.plugin.memory",isMemoryModeV1=value=>value==="off"||value==="light"||value==="full";function resolveSdkMemoryMode(explicitMode,env2,settingsMode){if(explicitMode!==void 0)return isMemoryModeV1(explicitMode)?{mode:explicitMode}:{mode:"off",invalidEnvValue:explicitMode};let configured=env2.AGENT_FORGE_MEMORY_MODE?.trim().toLowerCase();if(configured!==void 0&&configured!=="")return isMemoryModeV1(configured)?{mode:configured}:{mode:"off",invalidEnvValue:configured};let fromSettings=settingsMode?.trim().toLowerCase();if(fromSettings!==void 0&&fromSettings!=="")return isMemoryModeV1(fromSettings)?{mode:fromSettings}:{mode:"off",invalidSettingsValue:fromSettings};let legacy=env2.AGENT_FORGE_MEMORY_VECTOR?.trim().toLowerCase();return legacy!==void 0&&legacy!==""?isMemoryModeV1(legacy)?{mode:legacy}:{mode:"off",invalidEnvValue:legacy}:{mode:"off"}}function getDefaultAgentDir(){return getAgentDir()}function injectAfterLastUserMessage(messages,injection){for(let index3=messages.length-1;index3>=0;index3-=1)if(messages[index3]?.role==="user")return[...messages.slice(0,index3+1),injection,...messages.slice(index3+1)];return messages}async function readCapabilityPluginManifestForOrdering(manifestPath){let raw;try{raw=JSON.parse(await readFile9(manifestPath,"utf8"))}catch(error2){throw new Error(`Failed to read capability plugin manifest ${manifestPath}: ${error2 instanceof Error?error2.message:String(error2)}`)}return parseCapabilityPluginManifest(raw,manifestPath)}async function createAgentSession(options={}){let cwd=resolvePath(options.cwd??options.sessionManager?.getCwd()??process.cwd()),agentDir=options.agentDir?resolvePath(options.agentDir):getDefaultAgentDir(),resourceLoader=options.resourceLoader,authPath=options.agentDir?join49(agentDir,"auth.json"):void 0,modelsPath=options.agentDir?join49(agentDir,"models.json"):void 0,modelRuntime=options.modelRuntime??await ModelRuntime.create({authPath,modelsPath,credentials:options.credentials}),settingsManager=options.settingsManager??SettingsManager.create(cwd,agentDir),suiteId=resolveSuiteId({explicit:options.suite,envSuite:process.env[SUITE_ENV_VAR],settings:settingsManager,agentDir}),suiteAssembly=createSuiteAssembly({cwd,agentDir,suiteId,pluginProfileId:options.pluginProfileId,selectedPluginIds:options.selectedPluginIds,disabledPluginIds:options.disabledPluginIds,pluginHost:options.pluginHost,verifiedPlugins:options.verifiedPlugins,manifestOverrides:options.manifestOverrides,pluginProfile:options.pluginProfile}),suiteWorkspace=suiteAssembly.workspace,resolvedAgentProfile=buildResolvedAgentProfileV1({suiteId,workspace:suiteWorkspace,...suiteAssembly.pluginProfile===void 0?{}:{pluginProfile:suiteAssembly.pluginProfile}}),capabilityWiring=options.suiteCapabilityWiring??!options.resourceLoader,capabilityDiagnostics=[],suitePreferenceDiagnostics=[],capabilitySkillsFilter,communicationMailbox,selfMailbox=()=>(communicationMailbox??=createSubagentMailbox({agentDir,ownerParentSessionId:()=>agentSessionRef.current?.sessionId}),communicationMailbox),communicationWiring=options.enableAgentTasks===!1&&options.subagentCommunicationWiring===void 0?void 0:{drainEscalations:sessionId=>selfMailbox().drainEscalations(sessionId),...options.subagentCommunicationWiring??{}},backgroundDigest={pending:[]},settingsMemoryMode=settingsManager.getMemoryModeSetting(),memoryModeOption=options.memoryCapability?.mode,memoryModeResolution=resolveSdkMemoryMode(memoryModeOption,process.env,settingsMemoryMode);if(capabilityWiring){suiteWorkspace.suite.capabilities.includes("builtin.memory")&&(memoryModeResolution.invalidEnvValue!==void 0&&capabilityDiagnostics.push(`invalid AGENT_FORGE_MEMORY_MODE value "${memoryModeResolution.invalidEnvValue}"; memory stays off (fail-closed)`),memoryModeResolution.invalidSettingsValue!==void 0&&capabilityDiagnostics.push(`invalid memory.mode setting "${memoryModeResolution.invalidSettingsValue}"; memory stays off (fail-closed)`),memoryModeResolution.mode==="off"&&capabilityDiagnostics.push("memory disabled (mode=off) \u2014 set memory.mode (light|full) in settings.json to enable"));let suiteDefinition=suiteWorkspace.suite,suiteLocalSkillsDir=suiteAssembly.localSkillsDir;capabilitySkillsFilter=skills=>filterSuiteSkills(suiteDefinition,skills,{localSkillsDir:suiteLocalSkillsDir}).kept}let sessionManager=options.sessionManager??SessionManager.create(cwd,getDefaultSessionDir(cwd,agentDir)),hostLogger=options.hostLogger,traceOptions=options.traceOptions,observabilityCapture={},observabilityLogMirror={},observabilityGetMetrics={},traceService;options.traceEnabled!==!1&&(traceService={adapter:{getTraceFilePath:()=>{let sessionFilePath=sessionManager.getSessionFile();return sessionFilePath===void 0?null:getTraceFilePathForSession(sessionFilePath)},captureProviderPayload:(payload2,model2)=>{observabilityCapture.current?.(payload2,model2)},onSinkFailure:error2=>{hostLogger?.error("observability","trace sink failure",{cause:error2})},getTurnCorrelationId:()=>agentSessionRef.current?.getTurnCorrelationId(),getParentAgentSessionId:()=>sessionManager.getHeader()?.parentAgentSession,getParentTraceId:()=>sessionManager.getHeader()?.parentTraceId,registerFacade:facade=>{observabilityCapture.current=facade?.captureProviderPayload,observabilityLogMirror.current=facade?.mirrorPluginLog,observabilityGetMetrics.current=facade?.getMetrics}},...traceOptions===void 0?{}:{options:traceOptions}}),resourceLoader||(resourceLoader=new DefaultResourceLoader({cwd,agentDir,settingsManager,...suiteAssembly.loaderOverrides,...suiteAssembly.localSkillsDir===void 0?{}:{additionalSkillPaths:[suiteAssembly.localSkillsDir]}}),await resourceLoader.reload(),time("resourceLoader.reload"));let existingSession=sessionManager.buildSessionContext(),hasExistingSession=existingSession.messages.length>0,branchEntries=sessionManager.getBranch(),sessionSuiteBinding=readSessionSuiteBinding(branchEntries),hasConversation=branchEntries.some(entry=>entry.type==="message"&&entry.message?.role==="user");if(hasConversation&&sessionSuiteBinding!==void 0){if(sessionSuiteBinding.suiteId!==suiteId)throw new SuiteRebindError(`Session is bound to suite "${sessionSuiteBinding.suiteId}" and cannot resume with "${suiteId}"; create a new session or migrate explicitly`);if(sessionSuiteBinding.profileIdentity!==void 0&&!profileIdentitiesCompatible(sessionSuiteBinding.profileIdentity,suiteWorkspace.identity))throw new SuiteRebindError("Session Profile identity drift detected; create a new session or migrate explicitly before reloading plugins")}let hasThinkingEntry=sessionManager.getBranch().some(entry=>entry.type==="thinking_level_change"),model=options.model,modelFallbackMessage;if(!model&&hasExistingSession&&existingSession.model){let restoredModel=modelRuntime.getModel(existingSession.model.provider,existingSession.model.modelId);restoredModel&&modelRuntime.hasConfiguredAuth(restoredModel.provider)&&(model=restoredModel),model||(modelFallbackMessage=`Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`)}let suiteModelPreference=suiteWorkspace.suite.model;if(!model&&suiteModelPreference!==null){let suiteModel=findExactModelReferenceMatch(suiteModelPreference,[...modelRuntime.getModels()]);suiteModel&&modelRuntime.hasConfiguredAuth(suiteModel.provider)?model=suiteModel:suitePreferenceDiagnostics.push(`Suite "${suiteId}" model "${suiteModelPreference}" does not resolve to an authenticated model; using the normal model resolution instead.`)}model||(model=(await findInitialModel({scopedModels:[],isContinuing:hasExistingSession,defaultProvider:settingsManager.getDefaultProvider(),defaultModelId:settingsManager.getDefaultModel(),defaultThinkingLevel:settingsManager.getDefaultThinkingLevel(),modelThinkingLevels:settingsManager.getAllModelThinkingLevels(),modelRuntime})).model,model?modelFallbackMessage&&(modelFallbackMessage+=`. Using ${model.provider}/${model.id}`):modelFallbackMessage=formatNoModelsAvailableMessage());let thinkingLevel=options.thinkingLevel;thinkingLevel===void 0&&hasExistingSession&&hasThinkingEntry&&(thinkingLevel=existingSession.thinkingLevel);let suiteThinkingPreference=suiteWorkspace.suite.thinking;if(thinkingLevel===void 0&&suiteThinkingPreference!==null&&(isValidThinkingLevel(suiteThinkingPreference)?thinkingLevel=suiteThinkingPreference:suitePreferenceDiagnostics.push(`Suite "${suiteId}" thinking "${suiteThinkingPreference}" is not a valid thinking level; using the normal thinking resolution instead.`)),thinkingLevel===void 0&&hasExistingSession&&(thinkingLevel=settingsManager.getDefaultThinkingLevel()??DEFAULT_THINKING_LEVEL),thinkingLevel===void 0&&model){let perModel=settingsManager.getModelThinkingLevel(model.provider,model.id);perModel&&(thinkingLevel=perModel)}thinkingLevel===void 0&&(thinkingLevel=settingsManager.getDefaultThinkingLevel()??DEFAULT_THINKING_LEVEL),model?thinkingLevel=clampThinkingLevel(model,thinkingLevel):thinkingLevel="off";let defaultActiveToolNames=options.capabilityMode==="readonly"?["read","grep","find","ls"]:["read","bash","edit","write"],configuredDefaultToolNames=settingsManager.getDefaultTools(),allowedToolNames=options.tools??(options.noTools==="all"?[]:void 0),excludedToolNames=options.excludeTools,excludedToolNameSet=excludedToolNames?new Set(excludedToolNames):void 0,initialActiveToolNames=((options.tools===void 0&&options.noTools===void 0&&options.capabilityMode!=="readonly"?[...suiteWorkspace.suite.tools]:void 0)??options.tools??(options.noTools?[]:configuredDefaultToolNames??defaultActiveToolNames)).filter(name=>!excludedToolNameSet?.has(name)),agent,convertToLlmWithBlockImages=messages=>{let converted=convertToLlm2(messages);return settingsManager.getBlockImages()?converted.map(msg=>{if(msg.role==="user"||msg.role==="toolResult"){let content=msg.content;if(Array.isArray(content)&&content.some(c2=>c2.type==="image")){let filteredContent=content.map(c2=>c2.type==="image"?{type:"text",text:"Image reading is disabled."}:c2).filter((c2,i,arr)=>!(c2.type==="text"&&c2.text==="Image reading is disabled."&&i>0&&arr[i-1].type==="text"&&arr[i-1].text==="Image reading is disabled."));return{...msg,content:filteredContent}}}return msg}):converted},agentSessionRef={},customStreamFn=options.streamFn;agent=new Agent({initialState:{systemPrompt:"",model,thinkingLevel,tools:[]},convertToLlm:convertToLlmWithBlockImages,streamFn:customStreamFn?(model2,context,streamOptions)=>customStreamFn(model2,context,streamOptions):async(model2,context,options2)=>{let providerRetrySettings=settingsManager.getProviderRetrySettings(),httpIdleTimeoutMs=settingsManager.getHttpIdleTimeoutMs(),effectiveTimeoutMs=httpIdleTimeoutMs===0?2147483647:httpIdleTimeoutMs,timeoutMs=options2?.timeoutMs??providerRetrySettings.timeoutMs??effectiveTimeoutMs,websocketConnectTimeoutMs=options2?.websocketConnectTimeoutMs??settingsManager.getWebSocketConnectTimeoutMs();try{return modelRuntime.streamSimple(model2,context,{...options2,timeoutMs,websocketConnectTimeoutMs,maxRetries:options2?.maxRetries??providerRetrySettings.maxRetries,maxRetryDelayMs:options2?.maxRetryDelayMs??providerRetrySettings.maxRetryDelayMs,transformHeaders:async requestHeaders=>{let session2=agentSessionRef.current;if(!session2)throw new Error("Capability runtime is not initialized for provider request");return session2.getCapabilityRuntime().transformProviderHeaders({model:model2,...options2?.sessionId===void 0?{}:{sessionId:options2.sessionId},headers:requestHeaders})}})}catch(error2){throw hostLogger?.error("sdk","provider stream failed",{cause:error2}),error2}},onPayload:async(payload2,model2)=>{try{traceService?.adapter.captureProviderPayload(payload2,model2?.id)}catch(error2){hostLogger?.warn("sdk","trace payload capture failed",{cause:error2})}},sessionId:sessionManager.getSessionId(),transformContext:async messages=>{let result=messages;if(backgroundDigest.pending.length>0){let drained=backgroundDigest.pending.splice(0);result=injectAfterLastUserMessage(result,{role:"user",content:["Background subagent tasks settled:",...drained.map(line=>`- ${line}`)].join(`
1068
- `),timestamp:Date.now()})}return result},steeringMode:settingsManager.getSteeringMode(),followUpMode:settingsManager.getFollowUpMode(),transport:settingsManager.getTransport(),thinkingBudgets:settingsManager.getThinkingBudgets(),maxRetryDelayMs:settingsManager.getProviderRetrySettings().maxRetryDelayMs}),hasExistingSession?(agent.state.messages=existingSession.messages,hasThinkingEntry||sessionManager.appendThinkingLevelChange(thinkingLevel)):(model&&sessionManager.appendModelChange(model.provider,model.id),sessionManager.appendThinkingLevelChange(thinkingLevel));let session=new AgentSession({agent,sessionManager,settingsManager,cwd,scopedModels:options.scopedModels,resourceLoader,customTools:options.customTools,modelRuntime,initialActiveToolNames,allowedToolNames,excludedToolNames,sessionStartEvent:options.sessionStartEvent,capabilityMode:options.capabilityMode,contextStrategyName:options.contextStrategyName,retryPolicyName:options.retryPolicyName,compactionPolicyName:options.compactionPolicyName,overflowPolicyName:options.overflowPolicyName,branchSummaryPolicyName:options.branchSummaryPolicyName,runLoopStrategyName:options.runLoopStrategyName,agentTaskAdapter:options.enableAgentTasks===!1?void 0:options.agentTaskAdapter,...options.agentTaskResults===void 0?{}:{agentTaskResults:options.agentTaskResults},...options.enableAgentTasks===!1?{}:{agentSessionReader:async sessionId=>{let parentSession=agentSessionRef.current;if(parentSession===void 0)return;let read=readAgentSession({agentDir,sessionId});if(!(read===void 0||read.parentAgentSession!==parentSession.sessionId))return{sessionId:read.sessionId,...read.parentAgentSession===void 0?{}:{parentAgentSession:read.parentAgentSession},...read.agentRole===void 0?{}:{agentRole:read.agentRole},...read.createdAt===void 0?{}:{createdAt:read.createdAt},bytes:read.bytes,entryCount:read.entryCount,truncated:read.truncated,entries:read.entries}},agentSessionLister:async()=>{let parentSession=agentSessionRef.current;return parentSession===void 0?[]:listAgentSessions({agentDir,parentAgentSession:parentSession.sessionId}).map(summary=>({sessionId:summary.sessionId,...summary.agentRole===void 0?{}:{agentRole:summary.agentRole},...summary.createdAt===void 0?{}:{createdAt:summary.createdAt},modifiedAt:summary.modifiedAt,bytes:summary.bytes}))}},agentComposition:options.agentComposition,interactionHost:options.interactionHost,hostLogger:options.hostLogger,logRecordMirrorRef:observabilityLogMirror,observabilityGetMetricsRef:observabilityGetMetrics,agentDir,...communicationWiring===void 0?{}:{communication:communicationWiring},...options.enableAgentTasks===!1?{}:{turnContext:{backgroundDigestSink:line=>{backgroundDigest.pending.length>=20&&backgroundDigest.pending.shift(),backgroundDigest.pending.push(line),deliverAgentTaskSettledDigestLine(agentSessionRef.current,line,hostLogger)},getTurnCorrelationId:()=>agentSessionRef.current?.getTurnCorrelationId()}},...options.enableAgentTasks===!1?{}:{roleAssociations:suiteWorkspace.suite.associations.roles},...traceService===void 0?{}:{traceService},...options.memoryCapability?.storage===void 0?{}:{memoryStorage:options.memoryCapability.storage},orientationPrompt:ORIENTATION_PROMPTS[suiteWorkspace.suite.orientation],...capabilitySkillsFilter===void 0?{}:{capabilitySkillsFilter}});agentSessionRef.current=session,(!hasExistingSession||sessionSuiteBinding!==void 0&&!hasConversation)&&session.sessionManager.appendCustomEntry(SUITE_SESSION_ENTRY_TYPE,{suiteId,profileIdentity:suiteWorkspace.identity});let pluginRejections=[],recordRejection=async(code,manifestPath,pluginId,message)=>{let rejection=Object.freeze({code,manifestPath,...pluginId===void 0?{}:{pluginId},message});pluginRejections.push(rejection),hostLogger?.error("sdk",`capability plugin rejected: ${message}`,{sessionId:session.sessionId,fields:{code:rejection.code,pluginId:rejection.pluginId,manifestPath:rejection.manifestPath}});try{await session.getCapabilityRuntime().recordPluginRejection(rejection)}catch{}},rejectionMessage=error2=>error2 instanceof Error?error2.message:String(error2);try{let discoveredManifestPaths=options.discoverCapabilityPlugins===!1?[]:discoverCapabilityPluginManifests([join49(agentDir,"plugins"),join49(cwd,CONFIG_DIR_NAME,"plugins")]),suiteLocalManifestPaths=capabilityWiring&&options.discoverCapabilityPlugins!==!1&&suiteAssembly.localPluginsDir!==void 0?discoverCapabilityPluginManifests([suiteAssembly.localPluginsDir]):[],disabledPluginIdSet=new Set(options.disabledPluginIds??[]),profilePluginIds=suiteAssembly.pluginProfile!==void 0&&suiteAssembly.pluginProfile.status==="resolved"?new Set(suiteAssembly.pluginProfile.profile.pluginIds.filter(pluginId=>!disabledPluginIdSet.has(pluginId))):new Set,passthroughCapabilityPluginIds=[],capabilityPackageIds=suiteWorkspace.suite.capabilities.flatMap(entry=>{let mappedPluginId=BUILTIN_CAPABILITY_PACKAGE_IDS[entry];return mappedPluginId!==void 0?[mappedPluginId]:(passthroughCapabilityPluginIds.push(entry),[entry])});if(options.traceEnabled!==!1&&capabilityPackageIds.push(OBSERVABILITY_PACKAGE_ID),memoryModeResolution.mode==="off"){let memoryIndex=capabilityPackageIds.indexOf(MEMORY_PACKAGE_ID);memoryIndex>=0&&capabilityPackageIds.splice(memoryIndex,1)}for(let pluginId of capabilityPackageIds)disabledPluginIdSet.has(pluginId)||profilePluginIds.add(pluginId);if(capabilityWiring&&passthroughCapabilityPluginIds.length>0){let installedPluginIdSet=new Set((options.installedCapabilityPlugins??[]).map(plugin=>plugin.pluginId));for(let pluginId of passthroughCapabilityPluginIds)installedPluginIdSet.has(pluginId)||capabilityDiagnostics.push(`Suite "${suiteId}" capability "${pluginId}" has no installed active plugin; install it with agent-forge plugin install or remove the declaration`)}let installedPluginManifestPaths=[],skippedInstalledPluginIds=[];for(let plugin of options.installedCapabilityPlugins??[])profilePluginIds.has(plugin.pluginId)?installedPluginManifestPaths.push(plugin.manifestPath):skippedInstalledPluginIds.push(plugin.pluginId);skippedInstalledPluginIds.length>0&&capabilityDiagnostics.push(`Installed capability plugins stay unloaded because the active profile did not select them: ${skippedInstalledPluginIds.sort().join(", ")}`);let manifestPaths=[...suiteLocalManifestPaths,...installedPluginManifestPaths,...discoveredManifestPaths,...options.capabilityPluginPaths??[]],explicitCandidatePaths=new Set([...suiteLocalManifestPaths,...installedPluginManifestPaths,...options.capabilityPluginPaths??[]]),loadedManifestPaths=new Set,explicitManifestPaths=new Set,candidatePaths=[];for(let manifestPath of manifestPaths){let resolvedManifestPath=resolve18(cwd,manifestPath),manifestIdentity=existsSync22(resolvedManifestPath)?realpathSync4(resolvedManifestPath):resolvedManifestPath;loadedManifestPaths.has(manifestIdentity)||(loadedManifestPaths.add(manifestIdentity),explicitCandidatePaths.has(manifestPath)&&explicitManifestPaths.add(manifestIdentity),candidatePaths.push(manifestIdentity))}let manifestEntries=[];for(let manifestPath of candidatePaths)try{let manifest=await readCapabilityPluginManifestForOrdering(manifestPath);if(manifest.hostVersion!==void 0){if(!(0,import_semver5.satisfies)(VERSION,manifest.hostVersion)){await recordRejection("host_version_incompatible",manifestPath,manifest.id,`Plugin ${manifest.id} declares host version range "${manifest.hostVersion}", but the host is ${VERSION}. Upgrade the host into the declared range, or install a plugin version that supports host ${VERSION}.`);continue}}else capabilityDiagnostics.push(`Capability plugin ${manifest.id} (${manifestPath}) does not declare "hostVersion"; it loads, but published plugins must declare a host semver range (e.g. ">=${VERSION}").`);manifestEntries.push({path:manifestPath,manifest})}catch(error2){await recordRejection("invalid_manifest",manifestPath,void 0,rejectionMessage(error2))}let poolFilter=capabilityWiring?{suite:suiteWorkspace.suite,decide:(manifestId,manifestPath)=>decideSuiteCapabilityPlugin(suiteWorkspace.suite,{manifestId,manifestPath},{cwd})}:void 0,seenPluginIds=new Set,uniqueEntries=[],discoveredPluginIds=[];for(let entry of manifestEntries){if(discoveredPluginIds.push(entry.manifest.id),poolFilter&&!explicitManifestPaths.has(entry.path)){let decision=poolFilter.decide(entry.manifest.id,entry.path);if(!decision.keep){decision.diagnostic&&capabilityDiagnostics.push(decision.diagnostic);continue}}if(seenPluginIds.has(entry.manifest.id)){await recordRejection("duplicate_plugin_id",entry.path,entry.manifest.id,`Capability plugin is already loaded: ${entry.manifest.id}; the first manifest in discovery order wins`);continue}seenPluginIds.add(entry.manifest.id),uniqueEntries.push(entry)}poolFilter&&capabilityDiagnostics.push(...suiteDanglingPluginAssociations(poolFilter.suite,discoveredPluginIds));let capabilityIdentity=(id,version)=>`${id}\0${version}`,survivors=new Set(uniqueEntries),removedInLastPass=!0;for(;removedInLastPass;){removedInLastPass=!1;let providers=new Set;for(let entry of survivors)for(let declaration of entry.manifest.provides??[])providers.add(capabilityIdentity(declaration.id,declaration.version));for(let entry of[...survivors]){let missing=(entry.manifest.requires??[]).filter(requirement=>!requirement.optional&&!providers.has(capabilityIdentity(requirement.id,requirement.version)));missing.length!==0&&(await recordRejection("missing_dependency",entry.path,entry.manifest.id,`Plugin capability is required but unavailable: ${missing.map(requirement=>`${requirement.id}@${requirement.version}`).join(", ")} (${entry.manifest.id})`),survivors.delete(entry),removedInLastPass=!0)}}let pathByManifest=new Map([...survivors].map(entry=>[entry.manifest,entry.path]));for(let manifest of resolvePluginCapabilityOrder([...survivors].map(entry=>entry.manifest))){let manifestPath=pathByManifest.get(manifest);if(!manifestPath)throw new Error(`Capability plugin manifest path is unavailable: ${manifest.id}`);try{await session.loadCapabilityPluginManifest(manifestPath,{...manifest.id===SUBAGENT_DELEGATE_PACKAGE_ID&&options.subagentPoolFromSelfInvocation===!0?{configOverride:{runnerEntryAuto:!0}}:{},...manifest.id===MEMORY_PACKAGE_ID?{configOverride:{...memoryModeOption===void 0?{}:{memoryMode:memoryModeOption},...settingsMemoryMode===void 0?{}:{memorySettingsMode:settingsMemoryMode}}}:{}})}catch(error2){await recordRejection("plugin_load_failed",manifestPath,manifest.id,rejectionMessage(error2))}}hasExistingSession&&options.contextStrategyName&&await session.replaceContext(existingSession.messages)}catch(error2){throw await session.dispose(),error2}return hostLogger?.info("sdk","agent session created",{sessionId:session.sessionId,fields:{suite:suiteId,...model===void 0?{}:{model:`${model.provider}/${model.id}`},trace:options.traceEnabled!==!1}}),{session,modelFallbackMessage,pluginRejections:Object.freeze(pluginRejections.slice()),suiteDiagnostics:Object.freeze([...suiteAssembly.collectDiagnostics(),...capabilityDiagnostics,...suitePreferenceDiagnostics]),...suiteAssembly.pluginProfile===void 0?{}:{pluginProfile:suiteAssembly.pluginProfile},resolvedAgentProfile}}async function createStableAgentSession(options={}){let result=await createAgentSession(options);return{facade:createCodingAgentFacade(result.session),sessionAPI:result.session.getSessionAPI(),modelFallbackMessage:result.modelFallbackMessage}}async function createStableAgentSessionRuntime(createRuntime,options){let runtime=await createAgentSessionRuntime(createRuntime,options);return{runtimeFacade:createCodingAgentRuntimeFacade(runtime)}}var MCP_CONFIG_FILENAME="mcp.json",MCP_POOL_DIR="mcp/pool",MCP_POOL_BRIDGE_DIR="_bridge",MCP_SERVER_NAME_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,MCP_HTTP_PLUGIN_SOURCE_PATH=fileURLToPath5(new URL("../plugins/mcp-http.ts",import.meta.url)),MCP_HTTP_PLUGIN_DIST_PATH=fileURLToPath5(new URL("../../dist/plugins/mcp-http.js",import.meta.url));function isHttpUrl(value){try{let protocol=new URL(value).protocol;return protocol==="http:"||protocol==="https:"}catch{return!1}}function parseMcpConfig(path15){let servers=new Map,diagnostics=[],value;try{value=JSON.parse(readFileSync20(path15,"utf8"))}catch(error2){return error2.code==="ENOENT"?{servers,diagnostics}:(diagnostics.push(`MCP config at ${path15} is unreadable; ignoring it. Errors: ${error2 instanceof Error?error2.message:String(error2)}`),{servers,diagnostics})}if(typeof value!="object"||value===null||Array.isArray(value))return diagnostics.push(`MCP config at ${path15} must be an object with an "mcpServers" map; ignoring it.`),{servers,diagnostics};let mcpServers=value.mcpServers;if(mcpServers===void 0)return{servers,diagnostics};if(typeof mcpServers!="object"||mcpServers===null||Array.isArray(mcpServers))return diagnostics.push(`MCP config at ${path15} must carry an "mcpServers" object; ignoring it.`),{servers,diagnostics};for(let[name,entry]of Object.entries(mcpServers)){if(!MCP_SERVER_NAME_PATTERN.test(name)){diagnostics.push(`MCP server name "${name}" in ${path15} is invalid (must match ${MCP_SERVER_NAME_PATTERN.source}); ignoring it.`);continue}if(typeof entry!="object"||entry===null||Array.isArray(entry)){diagnostics.push(`MCP server "${name}" in ${path15} must be an object with a "command" or "url"; ignoring it.`);continue}let config=entry;if(config.url!==void 0&&(typeof config.url!="string"||config.url.trim().length===0)){diagnostics.push(`MCP server "${name}" in ${path15} requires "url" to be a non-empty string; ignoring it.`);continue}let hasCommand=typeof config.command=="string"&&config.command.trim().length>0,hasUrl=typeof config.url=="string"&&config.url.trim().length>0;if(hasCommand&&hasUrl){diagnostics.push(`MCP server "${name}" in ${path15} accepts either "command" (stdio server) or "url" (remote HTTP server), not both; ignoring it.`);continue}if(!hasCommand&&!hasUrl){diagnostics.push(`MCP server "${name}" in ${path15} requires a non-empty string "command" (stdio server) or "url" (remote HTTP server); ignoring it.`);continue}if(hasUrl&&!isHttpUrl(config.url)){diagnostics.push(`MCP server "${name}" in ${path15} requires "url" to be a valid http:// or https:// URL; ignoring it.`);continue}if(config.args!==void 0&&(!Array.isArray(config.args)||!config.args.every(arg=>typeof arg=="string"))){diagnostics.push(`MCP server "${name}" in ${path15} requires "args" to be a string array; ignoring it.`);continue}if(config.deferredTools!==void 0&&typeof config.deferredTools!="boolean"){diagnostics.push(`MCP server "${name}" in ${path15} requires "deferredTools" to be a boolean; ignoring it.`);continue}if(config.headers!==void 0){if(hasCommand)diagnostics.push(`MCP server "${name}" in ${path15} carries "headers" but headers only apply to remote "url" (HTTP) servers; ignoring them.`);else if(!(typeof config.headers=="object"&&config.headers!==null&&!Array.isArray(config.headers)&&Object.values(config.headers).every(headerValue=>typeof headerValue=="string"&&headerValue.length>0))){diagnostics.push(`MCP server "${name}" in ${path15} requires "headers" to be an object with non-empty string values; ignoring it.`);continue}}servers.set(name,{args:config.args??[],deferredTools:config.deferredTools===!0?!0:void 0,...hasCommand?{command:config.command}:{url:config.url,...config.headers===void 0?{}:{headers:config.headers}}})}return{servers,diagnostics}}var MCP_POOL_BRIDGE_SOURCE=`// Generated by the suite MCP registration pool (agent-session-services). Do not edit.
1067
+ `)}}function printTimings(){if(ENABLED)for(let[namespace,timingNamespace]of timingNamespaces)printTimingGroup(`Startup Timings: ${namespace}`,timingNamespace.timings)}setDefaultStreamFn(streamSimple);var AGENT_TASK_SETTLED_STATUSES=new Set(["queued","admitted","running","succeeded","failed","cancelled","timed_out","drain_timeout","runner_lost"]);function parseAgentTaskSettledDigestLine(line){let parsed;try{parsed=JSON.parse(line)}catch{return}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return;let record=parsed;if(!(typeof record.taskId!="string"||record.taskId==="")&&!(typeof record.sessionId!="string"||record.sessionId==="")&&!(typeof record.status!="string"||!AGENT_TASK_SETTLED_STATUSES.has(record.status))&&!(record.reasonCode!==void 0&&(typeof record.reasonCode!="string"||record.reasonCode==="")))return{taskId:record.taskId,taskSessionId:record.sessionId,status:record.status,...record.reasonCode===void 0?{}:{reasonCode:record.reasonCode}}}function deliverAgentTaskSettledDigestLine(session,line,hostLogger){let facts=parseAgentTaskSettledDigestLine(line);if(facts===void 0){hostLogger?.warn("sdk","background delegation settlement line is not a valid agent.task.settled source",{cause:line});return}session?.dispatchAgentTaskSettled(facts)}var OBSERVABILITY_PACKAGE_ID="agent-forge.plugin.observability",SUBAGENT_DELEGATE_PACKAGE_ID="agent-forge.plugin.subagent-delegate",MEMORY_PACKAGE_ID="agent-forge.plugin.memory",isMemoryModeV1=value=>value==="off"||value==="light"||value==="full";function resolveSdkMemoryMode(explicitMode,env2,settingsMode){if(explicitMode!==void 0)return isMemoryModeV1(explicitMode)?{mode:explicitMode}:{mode:"off",invalidEnvValue:explicitMode};let configured=env2.AGENT_FORGE_MEMORY_MODE?.trim().toLowerCase();if(configured!==void 0&&configured!=="")return isMemoryModeV1(configured)?{mode:configured}:{mode:"off",invalidEnvValue:configured};let fromSettings=settingsMode?.trim().toLowerCase();if(fromSettings!==void 0&&fromSettings!=="")return isMemoryModeV1(fromSettings)?{mode:fromSettings}:{mode:"off",invalidSettingsValue:fromSettings};let legacy=env2.AGENT_FORGE_MEMORY_VECTOR?.trim().toLowerCase();return legacy!==void 0&&legacy!==""?isMemoryModeV1(legacy)?{mode:legacy}:{mode:"off",invalidEnvValue:legacy}:{mode:"off"}}function getDefaultAgentDir(){return getAgentDir()}function injectAfterLastUserMessage(messages,injection){for(let index3=messages.length-1;index3>=0;index3-=1)if(messages[index3]?.role==="user")return[...messages.slice(0,index3+1),injection,...messages.slice(index3+1)];return messages}async function readCapabilityPluginManifestForOrdering(manifestPath){let raw;try{raw=JSON.parse(await readFile9(manifestPath,"utf8"))}catch(error2){throw new Error(`Failed to read capability plugin manifest ${manifestPath}: ${error2 instanceof Error?error2.message:String(error2)}`)}return parseCapabilityPluginManifest(raw,manifestPath)}async function createAgentSession(options={}){let cwd=resolvePath(options.cwd??options.sessionManager?.getCwd()??process.cwd()),agentDir=options.agentDir?resolvePath(options.agentDir):getDefaultAgentDir(),resourceLoader=options.resourceLoader,authPath=options.agentDir?join49(agentDir,"auth.json"):void 0,modelsPath=options.agentDir?join49(agentDir,"models.json"):void 0,modelRuntime=options.modelRuntime??await ModelRuntime.create({authPath,modelsPath,credentials:options.credentials}),settingsManager=options.settingsManager??SettingsManager.create(cwd,agentDir),suiteId=resolveSuiteId({explicit:options.suite,envSuite:process.env[SUITE_ENV_VAR],settings:settingsManager,agentDir}),suiteAssembly=createSuiteAssembly({cwd,agentDir,suiteId,pluginProfileId:options.pluginProfileId,selectedPluginIds:options.selectedPluginIds,disabledPluginIds:options.disabledPluginIds,pluginHost:options.pluginHost,verifiedPlugins:options.verifiedPlugins,manifestOverrides:options.manifestOverrides,pluginProfile:options.pluginProfile}),suiteWorkspace=suiteAssembly.workspace,resolvedAgentProfile=buildResolvedAgentProfileV1({suiteId,workspace:suiteWorkspace,...suiteAssembly.pluginProfile===void 0?{}:{pluginProfile:suiteAssembly.pluginProfile}}),capabilityWiring=options.suiteCapabilityWiring??!options.resourceLoader,capabilityDiagnostics=[],suitePreferenceDiagnostics=[],capabilitySkillsFilter,communicationMailbox,selfMailbox=()=>(communicationMailbox??=createSubagentMailbox({agentDir,ownerParentSessionId:()=>agentSessionRef.current?.sessionId}),communicationMailbox),communicationWiring=options.enableAgentTasks===!1&&options.subagentCommunicationWiring===void 0?void 0:{drainEscalations:sessionId=>selfMailbox().drainEscalations(sessionId),...options.subagentCommunicationWiring??{}},backgroundDigest={pending:[]},settingsMemoryMode=settingsManager.getMemoryModeSetting(),memoryModeOption=options.memoryCapability?.mode,memoryModeResolution=resolveSdkMemoryMode(memoryModeOption,process.env,settingsMemoryMode);if(capabilityWiring){suiteWorkspace.suite.capabilities.includes("builtin.memory")&&(memoryModeResolution.invalidEnvValue!==void 0&&capabilityDiagnostics.push(`invalid AGENT_FORGE_MEMORY_MODE value "${memoryModeResolution.invalidEnvValue}"; memory stays off (fail-closed)`),memoryModeResolution.invalidSettingsValue!==void 0&&capabilityDiagnostics.push(`invalid memory.mode setting "${memoryModeResolution.invalidSettingsValue}"; memory stays off (fail-closed)`),memoryModeResolution.mode==="off"&&capabilityDiagnostics.push("memory disabled (mode=off) \u2014 set memory.mode (light|full) in settings.json to enable"));let suiteDefinition=suiteWorkspace.suite,suiteLocalSkillsDir=suiteAssembly.localSkillsDir;capabilitySkillsFilter=skills=>filterSuiteSkills(suiteDefinition,skills,{localSkillsDir:suiteLocalSkillsDir}).kept}let sessionManager=options.sessionManager??SessionManager.create(cwd,getDefaultSessionDir(cwd,agentDir)),hostLogger=options.hostLogger,traceOptions=options.traceOptions,observabilityCapture={},observabilityLogMirror={},observabilityGetMetrics={},traceService;options.traceEnabled!==!1&&(traceService={adapter:{getTraceFilePath:()=>{let sessionFilePath=sessionManager.getSessionFile();return sessionFilePath===void 0?null:getTraceFilePathForSession(sessionFilePath)},captureProviderPayload:(payload2,model2)=>{observabilityCapture.current?.(payload2,model2)},onSinkFailure:error2=>{hostLogger?.error("observability","trace sink failure",{cause:error2})},getTurnCorrelationId:()=>agentSessionRef.current?.getTurnCorrelationId(),getParentAgentSessionId:()=>sessionManager.getHeader()?.parentAgentSession,getParentTraceId:()=>sessionManager.getHeader()?.parentTraceId,registerFacade:facade=>{observabilityCapture.current=facade?.captureProviderPayload,observabilityLogMirror.current=facade?.mirrorPluginLog,observabilityGetMetrics.current=facade?.getMetrics}},...traceOptions===void 0?{}:{options:traceOptions}}),resourceLoader||(resourceLoader=new DefaultResourceLoader({cwd,agentDir,settingsManager,...suiteAssembly.loaderOverrides,...suiteAssembly.localSkillsDir===void 0?{}:{additionalSkillPaths:[suiteAssembly.localSkillsDir]}}),await resourceLoader.reload(),time("resourceLoader.reload"));let existingSession=sessionManager.buildSessionContext(),hasExistingSession=existingSession.messages.length>0,branchEntries=sessionManager.getBranch(),sessionSuiteBinding=readSessionSuiteBinding(branchEntries),hasConversation=branchEntries.some(entry=>entry.type==="message"&&entry.message?.role==="user");if(hasConversation&&sessionSuiteBinding!==void 0&&!options.allowSuiteRebind){if(sessionSuiteBinding.suiteId!==suiteId)throw new SuiteRebindError(`Session is bound to suite "${sessionSuiteBinding.suiteId}" and cannot resume with "${suiteId}"; rerun with --rebind-suite to adopt the new suite, or create a new session`);if(sessionSuiteBinding.profileIdentity!==void 0&&!profileIdentitiesCompatible(sessionSuiteBinding.profileIdentity,suiteWorkspace.identity))throw new SuiteRebindError("Session Profile identity drift detected (the active plugin set changed since the conversation started); rerun with --rebind-suite to adopt the new plugin set, or create a new session")}let hasThinkingEntry=sessionManager.getBranch().some(entry=>entry.type==="thinking_level_change"),model=options.model,modelFallbackMessage;if(!model&&hasExistingSession&&existingSession.model){let restoredModel=modelRuntime.getModel(existingSession.model.provider,existingSession.model.modelId);restoredModel&&modelRuntime.hasConfiguredAuth(restoredModel.provider)&&(model=restoredModel),model||(modelFallbackMessage=`Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`)}let suiteModelPreference=suiteWorkspace.suite.model;if(!model&&suiteModelPreference!==null){let suiteModel=findExactModelReferenceMatch(suiteModelPreference,[...modelRuntime.getModels()]);suiteModel&&modelRuntime.hasConfiguredAuth(suiteModel.provider)?model=suiteModel:suitePreferenceDiagnostics.push(`Suite "${suiteId}" model "${suiteModelPreference}" does not resolve to an authenticated model; using the normal model resolution instead.`)}model||(model=(await findInitialModel({scopedModels:[],isContinuing:hasExistingSession,defaultProvider:settingsManager.getDefaultProvider(),defaultModelId:settingsManager.getDefaultModel(),defaultThinkingLevel:settingsManager.getDefaultThinkingLevel(),modelThinkingLevels:settingsManager.getAllModelThinkingLevels(),modelRuntime})).model,model?modelFallbackMessage&&(modelFallbackMessage+=`. Using ${model.provider}/${model.id}`):modelFallbackMessage=formatNoModelsAvailableMessage());let thinkingLevel=options.thinkingLevel;thinkingLevel===void 0&&hasExistingSession&&hasThinkingEntry&&(thinkingLevel=existingSession.thinkingLevel);let suiteThinkingPreference=suiteWorkspace.suite.thinking;if(thinkingLevel===void 0&&suiteThinkingPreference!==null&&(isValidThinkingLevel(suiteThinkingPreference)?thinkingLevel=suiteThinkingPreference:suitePreferenceDiagnostics.push(`Suite "${suiteId}" thinking "${suiteThinkingPreference}" is not a valid thinking level; using the normal thinking resolution instead.`)),thinkingLevel===void 0&&hasExistingSession&&(thinkingLevel=settingsManager.getDefaultThinkingLevel()??DEFAULT_THINKING_LEVEL),thinkingLevel===void 0&&model){let perModel=settingsManager.getModelThinkingLevel(model.provider,model.id);perModel&&(thinkingLevel=perModel)}thinkingLevel===void 0&&(thinkingLevel=settingsManager.getDefaultThinkingLevel()??DEFAULT_THINKING_LEVEL),model?thinkingLevel=clampThinkingLevel(model,thinkingLevel):thinkingLevel="off";let defaultActiveToolNames=options.capabilityMode==="readonly"?["read","grep","find","ls"]:["read","bash","edit","write"],configuredDefaultToolNames=settingsManager.getDefaultTools(),allowedToolNames=options.tools??(options.noTools==="all"?[]:void 0),excludedToolNames=options.excludeTools,excludedToolNameSet=excludedToolNames?new Set(excludedToolNames):void 0,initialActiveToolNames=((options.tools===void 0&&options.noTools===void 0&&options.capabilityMode!=="readonly"?[...suiteWorkspace.suite.tools]:void 0)??options.tools??(options.noTools?[]:configuredDefaultToolNames??defaultActiveToolNames)).filter(name=>!excludedToolNameSet?.has(name)),agent,convertToLlmWithBlockImages=messages=>{let converted=convertToLlm2(messages);return settingsManager.getBlockImages()?converted.map(msg=>{if(msg.role==="user"||msg.role==="toolResult"){let content=msg.content;if(Array.isArray(content)&&content.some(c2=>c2.type==="image")){let filteredContent=content.map(c2=>c2.type==="image"?{type:"text",text:"Image reading is disabled."}:c2).filter((c2,i,arr)=>!(c2.type==="text"&&c2.text==="Image reading is disabled."&&i>0&&arr[i-1].type==="text"&&arr[i-1].text==="Image reading is disabled."));return{...msg,content:filteredContent}}}return msg}):converted},agentSessionRef={},customStreamFn=options.streamFn;agent=new Agent({initialState:{systemPrompt:"",model,thinkingLevel,tools:[]},convertToLlm:convertToLlmWithBlockImages,streamFn:customStreamFn?(model2,context,streamOptions)=>customStreamFn(model2,context,streamOptions):async(model2,context,options2)=>{let providerRetrySettings=settingsManager.getProviderRetrySettings(),httpIdleTimeoutMs=settingsManager.getHttpIdleTimeoutMs(),effectiveTimeoutMs=httpIdleTimeoutMs===0?2147483647:httpIdleTimeoutMs,timeoutMs=options2?.timeoutMs??providerRetrySettings.timeoutMs??effectiveTimeoutMs,websocketConnectTimeoutMs=options2?.websocketConnectTimeoutMs??settingsManager.getWebSocketConnectTimeoutMs();try{return modelRuntime.streamSimple(model2,context,{...options2,timeoutMs,websocketConnectTimeoutMs,maxRetries:options2?.maxRetries??providerRetrySettings.maxRetries,maxRetryDelayMs:options2?.maxRetryDelayMs??providerRetrySettings.maxRetryDelayMs,transformHeaders:async requestHeaders=>{let session2=agentSessionRef.current;if(!session2)throw new Error("Capability runtime is not initialized for provider request");return session2.getCapabilityRuntime().transformProviderHeaders({model:model2,...options2?.sessionId===void 0?{}:{sessionId:options2.sessionId},headers:requestHeaders})}})}catch(error2){throw hostLogger?.error("sdk","provider stream failed",{cause:error2}),error2}},onPayload:async(payload2,model2)=>{try{traceService?.adapter.captureProviderPayload(payload2,model2?.id)}catch(error2){hostLogger?.warn("sdk","trace payload capture failed",{cause:error2})}},sessionId:sessionManager.getSessionId(),transformContext:async messages=>{let result=messages;if(backgroundDigest.pending.length>0){let drained=backgroundDigest.pending.splice(0);result=injectAfterLastUserMessage(result,{role:"user",content:["Background subagent tasks settled:",...drained.map(line=>`- ${line}`)].join(`
1068
+ `),timestamp:Date.now()})}return result},steeringMode:settingsManager.getSteeringMode(),followUpMode:settingsManager.getFollowUpMode(),transport:settingsManager.getTransport(),thinkingBudgets:settingsManager.getThinkingBudgets(),maxRetryDelayMs:settingsManager.getProviderRetrySettings().maxRetryDelayMs}),hasExistingSession?(agent.state.messages=existingSession.messages,hasThinkingEntry||sessionManager.appendThinkingLevelChange(thinkingLevel)):(model&&sessionManager.appendModelChange(model.provider,model.id),sessionManager.appendThinkingLevelChange(thinkingLevel));let session=new AgentSession({agent,sessionManager,settingsManager,cwd,scopedModels:options.scopedModels,resourceLoader,customTools:options.customTools,modelRuntime,initialActiveToolNames,allowedToolNames,excludedToolNames,sessionStartEvent:options.sessionStartEvent,capabilityMode:options.capabilityMode,contextStrategyName:options.contextStrategyName,retryPolicyName:options.retryPolicyName,compactionPolicyName:options.compactionPolicyName,overflowPolicyName:options.overflowPolicyName,branchSummaryPolicyName:options.branchSummaryPolicyName,runLoopStrategyName:options.runLoopStrategyName,agentTaskAdapter:options.enableAgentTasks===!1?void 0:options.agentTaskAdapter,...options.agentTaskResults===void 0?{}:{agentTaskResults:options.agentTaskResults},...options.enableAgentTasks===!1?{}:{agentSessionReader:async sessionId=>{let parentSession=agentSessionRef.current;if(parentSession===void 0)return;let read=readAgentSession({agentDir,sessionId});if(!(read===void 0||read.parentAgentSession!==parentSession.sessionId))return{sessionId:read.sessionId,...read.parentAgentSession===void 0?{}:{parentAgentSession:read.parentAgentSession},...read.agentRole===void 0?{}:{agentRole:read.agentRole},...read.createdAt===void 0?{}:{createdAt:read.createdAt},bytes:read.bytes,entryCount:read.entryCount,truncated:read.truncated,entries:read.entries}},agentSessionLister:async()=>{let parentSession=agentSessionRef.current;return parentSession===void 0?[]:listAgentSessions({agentDir,parentAgentSession:parentSession.sessionId}).map(summary=>({sessionId:summary.sessionId,...summary.agentRole===void 0?{}:{agentRole:summary.agentRole},...summary.createdAt===void 0?{}:{createdAt:summary.createdAt},modifiedAt:summary.modifiedAt,bytes:summary.bytes}))}},agentComposition:options.agentComposition,interactionHost:options.interactionHost,hostLogger:options.hostLogger,logRecordMirrorRef:observabilityLogMirror,observabilityGetMetricsRef:observabilityGetMetrics,agentDir,...communicationWiring===void 0?{}:{communication:communicationWiring},...options.enableAgentTasks===!1?{}:{turnContext:{backgroundDigestSink:line=>{backgroundDigest.pending.length>=20&&backgroundDigest.pending.shift(),backgroundDigest.pending.push(line),deliverAgentTaskSettledDigestLine(agentSessionRef.current,line,hostLogger)},getTurnCorrelationId:()=>agentSessionRef.current?.getTurnCorrelationId()}},...options.enableAgentTasks===!1?{}:{roleAssociations:suiteWorkspace.suite.associations.roles},...traceService===void 0?{}:{traceService},...options.memoryCapability?.storage===void 0?{}:{memoryStorage:options.memoryCapability.storage},orientationPrompt:ORIENTATION_PROMPTS[suiteWorkspace.suite.orientation],...capabilitySkillsFilter===void 0?{}:{capabilitySkillsFilter}});agentSessionRef.current=session,(!hasExistingSession||sessionSuiteBinding!==void 0&&!hasConversation||options.allowSuiteRebind)&&session.sessionManager.appendCustomEntry(SUITE_SESSION_ENTRY_TYPE,{suiteId,profileIdentity:suiteWorkspace.identity});let pluginRejections=[],recordRejection=async(code,manifestPath,pluginId,message)=>{let rejection=Object.freeze({code,manifestPath,...pluginId===void 0?{}:{pluginId},message});pluginRejections.push(rejection),hostLogger?.error("sdk",`capability plugin rejected: ${message}`,{sessionId:session.sessionId,fields:{code:rejection.code,pluginId:rejection.pluginId,manifestPath:rejection.manifestPath}});try{await session.getCapabilityRuntime().recordPluginRejection(rejection)}catch{}},rejectionMessage=error2=>error2 instanceof Error?error2.message:String(error2);try{let discoveredManifestPaths=options.discoverCapabilityPlugins===!1?[]:discoverCapabilityPluginManifests([join49(agentDir,"plugins"),join49(cwd,CONFIG_DIR_NAME,"plugins")]),suiteLocalManifestPaths=capabilityWiring&&options.discoverCapabilityPlugins!==!1&&suiteAssembly.localPluginsDir!==void 0?discoverCapabilityPluginManifests([suiteAssembly.localPluginsDir]):[],disabledPluginIdSet=new Set(options.disabledPluginIds??[]),profilePluginIds=suiteAssembly.pluginProfile!==void 0&&suiteAssembly.pluginProfile.status==="resolved"?new Set(suiteAssembly.pluginProfile.profile.pluginIds.filter(pluginId=>!disabledPluginIdSet.has(pluginId))):new Set,passthroughCapabilityPluginIds=[],capabilityPackageIds=suiteWorkspace.suite.capabilities.flatMap(entry=>{let mappedPluginId=BUILTIN_CAPABILITY_PACKAGE_IDS[entry];return mappedPluginId!==void 0?[mappedPluginId]:(passthroughCapabilityPluginIds.push(entry),[entry])});if(options.traceEnabled!==!1&&capabilityPackageIds.push(OBSERVABILITY_PACKAGE_ID),memoryModeResolution.mode==="off"){let memoryIndex=capabilityPackageIds.indexOf(MEMORY_PACKAGE_ID);memoryIndex>=0&&capabilityPackageIds.splice(memoryIndex,1)}for(let pluginId of capabilityPackageIds)disabledPluginIdSet.has(pluginId)||profilePluginIds.add(pluginId);if(capabilityWiring&&passthroughCapabilityPluginIds.length>0){let installedPluginIdSet=new Set((options.installedCapabilityPlugins??[]).map(plugin=>plugin.pluginId));for(let pluginId of passthroughCapabilityPluginIds)installedPluginIdSet.has(pluginId)||capabilityDiagnostics.push(`Suite "${suiteId}" capability "${pluginId}" has no installed active plugin; install it with agent-forge plugin install or remove the declaration`)}let installedPluginManifestPaths=[],skippedInstalledPluginIds=[];for(let plugin of options.installedCapabilityPlugins??[])profilePluginIds.has(plugin.pluginId)?installedPluginManifestPaths.push(plugin.manifestPath):skippedInstalledPluginIds.push(plugin.pluginId);skippedInstalledPluginIds.length>0&&capabilityDiagnostics.push(`Installed capability plugins stay unloaded because the active profile did not select them: ${skippedInstalledPluginIds.sort().join(", ")}`);let manifestPaths=[...suiteLocalManifestPaths,...installedPluginManifestPaths,...discoveredManifestPaths,...options.capabilityPluginPaths??[]],explicitCandidatePaths=new Set([...suiteLocalManifestPaths,...installedPluginManifestPaths,...options.capabilityPluginPaths??[]]),loadedManifestPaths=new Set,explicitManifestPaths=new Set,candidatePaths=[];for(let manifestPath of manifestPaths){let resolvedManifestPath=resolve18(cwd,manifestPath),manifestIdentity=existsSync22(resolvedManifestPath)?realpathSync4(resolvedManifestPath):resolvedManifestPath;loadedManifestPaths.has(manifestIdentity)||(loadedManifestPaths.add(manifestIdentity),explicitCandidatePaths.has(manifestPath)&&explicitManifestPaths.add(manifestIdentity),candidatePaths.push(manifestIdentity))}let manifestEntries=[];for(let manifestPath of candidatePaths)try{let manifest=await readCapabilityPluginManifestForOrdering(manifestPath);if(manifest.hostVersion!==void 0){if(!(0,import_semver5.satisfies)(VERSION,manifest.hostVersion)){await recordRejection("host_version_incompatible",manifestPath,manifest.id,`Plugin ${manifest.id} declares host version range "${manifest.hostVersion}", but the host is ${VERSION}. Upgrade the host into the declared range, or install a plugin version that supports host ${VERSION}.`);continue}}else capabilityDiagnostics.push(`Capability plugin ${manifest.id} (${manifestPath}) does not declare "hostVersion"; it loads, but published plugins must declare a host semver range (e.g. ">=${VERSION}").`);manifestEntries.push({path:manifestPath,manifest})}catch(error2){await recordRejection("invalid_manifest",manifestPath,void 0,rejectionMessage(error2))}let poolFilter=capabilityWiring?{suite:suiteWorkspace.suite,decide:(manifestId,manifestPath)=>decideSuiteCapabilityPlugin(suiteWorkspace.suite,{manifestId,manifestPath},{cwd})}:void 0,seenPluginIds=new Set,uniqueEntries=[],discoveredPluginIds=[];for(let entry of manifestEntries){if(discoveredPluginIds.push(entry.manifest.id),poolFilter&&!explicitManifestPaths.has(entry.path)){let decision=poolFilter.decide(entry.manifest.id,entry.path);if(!decision.keep){decision.diagnostic&&capabilityDiagnostics.push(decision.diagnostic);continue}}if(seenPluginIds.has(entry.manifest.id)){await recordRejection("duplicate_plugin_id",entry.path,entry.manifest.id,`Capability plugin is already loaded: ${entry.manifest.id}; the first manifest in discovery order wins`);continue}seenPluginIds.add(entry.manifest.id),uniqueEntries.push(entry)}poolFilter&&capabilityDiagnostics.push(...suiteDanglingPluginAssociations(poolFilter.suite,discoveredPluginIds));let capabilityIdentity=(id,version)=>`${id}\0${version}`,survivors=new Set(uniqueEntries),removedInLastPass=!0;for(;removedInLastPass;){removedInLastPass=!1;let providers=new Set;for(let entry of survivors)for(let declaration of entry.manifest.provides??[])providers.add(capabilityIdentity(declaration.id,declaration.version));for(let entry of[...survivors]){let missing=(entry.manifest.requires??[]).filter(requirement=>!requirement.optional&&!providers.has(capabilityIdentity(requirement.id,requirement.version)));missing.length!==0&&(await recordRejection("missing_dependency",entry.path,entry.manifest.id,`Plugin capability is required but unavailable: ${missing.map(requirement=>`${requirement.id}@${requirement.version}`).join(", ")} (${entry.manifest.id})`),survivors.delete(entry),removedInLastPass=!0)}}let pathByManifest=new Map([...survivors].map(entry=>[entry.manifest,entry.path]));for(let manifest of resolvePluginCapabilityOrder([...survivors].map(entry=>entry.manifest))){let manifestPath=pathByManifest.get(manifest);if(!manifestPath)throw new Error(`Capability plugin manifest path is unavailable: ${manifest.id}`);try{await session.loadCapabilityPluginManifest(manifestPath,{...manifest.id===SUBAGENT_DELEGATE_PACKAGE_ID&&options.subagentPoolFromSelfInvocation===!0?{configOverride:{runnerEntryAuto:!0}}:{},...manifest.id===MEMORY_PACKAGE_ID?{configOverride:{...memoryModeOption===void 0?{}:{memoryMode:memoryModeOption},...settingsMemoryMode===void 0?{}:{memorySettingsMode:settingsMemoryMode}}}:{}})}catch(error2){await recordRejection("plugin_load_failed",manifestPath,manifest.id,rejectionMessage(error2))}}hasExistingSession&&options.contextStrategyName&&await session.replaceContext(existingSession.messages)}catch(error2){throw await session.dispose(),error2}return hostLogger?.info("sdk","agent session created",{sessionId:session.sessionId,fields:{suite:suiteId,...model===void 0?{}:{model:`${model.provider}/${model.id}`},trace:options.traceEnabled!==!1}}),{session,modelFallbackMessage,pluginRejections:Object.freeze(pluginRejections.slice()),suiteDiagnostics:Object.freeze([...suiteAssembly.collectDiagnostics(),...capabilityDiagnostics,...suitePreferenceDiagnostics]),...suiteAssembly.pluginProfile===void 0?{}:{pluginProfile:suiteAssembly.pluginProfile},resolvedAgentProfile}}async function createStableAgentSession(options={}){let result=await createAgentSession(options);return{facade:createCodingAgentFacade(result.session),sessionAPI:result.session.getSessionAPI(),modelFallbackMessage:result.modelFallbackMessage}}async function createStableAgentSessionRuntime(createRuntime,options){let runtime=await createAgentSessionRuntime(createRuntime,options);return{runtimeFacade:createCodingAgentRuntimeFacade(runtime)}}var MCP_CONFIG_FILENAME="mcp.json",MCP_POOL_DIR="mcp/pool",MCP_POOL_BRIDGE_DIR="_bridge",MCP_SERVER_NAME_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,MCP_HTTP_PLUGIN_SOURCE_PATH=fileURLToPath5(new URL("../plugins/mcp-http.ts",import.meta.url)),MCP_HTTP_PLUGIN_DIST_PATH=fileURLToPath5(new URL("../../dist/plugins/mcp-http.js",import.meta.url));function isHttpUrl(value){try{let protocol=new URL(value).protocol;return protocol==="http:"||protocol==="https:"}catch{return!1}}function parseMcpConfig(path15){let servers=new Map,diagnostics=[],value;try{value=JSON.parse(readFileSync20(path15,"utf8"))}catch(error2){return error2.code==="ENOENT"?{servers,diagnostics}:(diagnostics.push(`MCP config at ${path15} is unreadable; ignoring it. Errors: ${error2 instanceof Error?error2.message:String(error2)}`),{servers,diagnostics})}if(typeof value!="object"||value===null||Array.isArray(value))return diagnostics.push(`MCP config at ${path15} must be an object with an "mcpServers" map; ignoring it.`),{servers,diagnostics};let mcpServers=value.mcpServers;if(mcpServers===void 0)return{servers,diagnostics};if(typeof mcpServers!="object"||mcpServers===null||Array.isArray(mcpServers))return diagnostics.push(`MCP config at ${path15} must carry an "mcpServers" object; ignoring it.`),{servers,diagnostics};for(let[name,entry]of Object.entries(mcpServers)){if(!MCP_SERVER_NAME_PATTERN.test(name)){diagnostics.push(`MCP server name "${name}" in ${path15} is invalid (must match ${MCP_SERVER_NAME_PATTERN.source}); ignoring it.`);continue}if(typeof entry!="object"||entry===null||Array.isArray(entry)){diagnostics.push(`MCP server "${name}" in ${path15} must be an object with a "command" or "url"; ignoring it.`);continue}let config=entry;if(config.url!==void 0&&(typeof config.url!="string"||config.url.trim().length===0)){diagnostics.push(`MCP server "${name}" in ${path15} requires "url" to be a non-empty string; ignoring it.`);continue}let hasCommand=typeof config.command=="string"&&config.command.trim().length>0,hasUrl=typeof config.url=="string"&&config.url.trim().length>0;if(hasCommand&&hasUrl){diagnostics.push(`MCP server "${name}" in ${path15} accepts either "command" (stdio server) or "url" (remote HTTP server), not both; ignoring it.`);continue}if(!hasCommand&&!hasUrl){diagnostics.push(`MCP server "${name}" in ${path15} requires a non-empty string "command" (stdio server) or "url" (remote HTTP server); ignoring it.`);continue}if(hasUrl&&!isHttpUrl(config.url)){diagnostics.push(`MCP server "${name}" in ${path15} requires "url" to be a valid http:// or https:// URL; ignoring it.`);continue}if(config.args!==void 0&&(!Array.isArray(config.args)||!config.args.every(arg=>typeof arg=="string"))){diagnostics.push(`MCP server "${name}" in ${path15} requires "args" to be a string array; ignoring it.`);continue}if(config.deferredTools!==void 0&&typeof config.deferredTools!="boolean"){diagnostics.push(`MCP server "${name}" in ${path15} requires "deferredTools" to be a boolean; ignoring it.`);continue}if(config.headers!==void 0){if(hasCommand)diagnostics.push(`MCP server "${name}" in ${path15} carries "headers" but headers only apply to remote "url" (HTTP) servers; ignoring them.`);else if(!(typeof config.headers=="object"&&config.headers!==null&&!Array.isArray(config.headers)&&Object.values(config.headers).every(headerValue=>typeof headerValue=="string"&&headerValue.length>0))){diagnostics.push(`MCP server "${name}" in ${path15} requires "headers" to be an object with non-empty string values; ignoring it.`);continue}}servers.set(name,{args:config.args??[],deferredTools:config.deferredTools===!0?!0:void 0,...hasCommand?{command:config.command}:{url:config.url,...config.headers===void 0?{}:{headers:config.headers}}})}return{servers,diagnostics}}var MCP_POOL_BRIDGE_SOURCE=`// Generated by the suite MCP registration pool (agent-session-services). Do not edit.
1069
1069
  import { spawn } from 'node:child_process';
1070
1070
  import { existsSync } from 'node:fs';
1071
1071
  import { join } from 'node:path';
@@ -1487,7 +1487,7 @@ Auth commands require at least one of --provider or --model. Checks refresh expi
1487
1487
  ${content}
1488
1488
  </file>
1489
1489
  `}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: Could not read file ${absolutePath}: ${message}`)),process.exit(1)}}return{text,images}}function buildInitialMessage({parsed,fileText,fileImages,stdinContent}){let parts=[];return stdinContent!==void 0&&parts.push(stdinContent),fileText&&parts.push(fileText),parsed.messages.length>0&&(parts.push(parsed.messages[0]),parsed.messages.shift()),{initialMessage:parts.length>0?parts.join(""):void 0,initialImages:fileImages&&fileImages.length>0?fileImages:void 0}}function formatTokenCount(count){if(count>=1e6){let millions=count/1e6;return millions%1===0?`${millions}M`:`${millions.toFixed(1)}M`}if(count>=1e3){let thousands=count/1e3;return thousands%1===0?`${thousands}K`:`${thousands.toFixed(1)}K`}return count.toString()}async function listModels(modelRuntime,searchPattern,signal){let loadError=modelRuntime.getError();loadError&&console.error(source_default.yellow(`Warning: errors loading models.json:
1490
- ${loadError}`));let models=[...await modelRuntime.getAvailable(void 0,{signal})];if(models.length===0){console.log(formatNoModelsAvailableMessage());return}let filteredModels=models;if(searchPattern&&(filteredModels=fuzzyFilter(models,searchPattern,m2=>`${m2.provider} ${m2.id}`)),filteredModels.length===0){console.log(`No models matching "${searchPattern}"`);return}filteredModels.sort((a,b2)=>{let providerCmp=a.provider.localeCompare(b2.provider);return providerCmp!==0?providerCmp:a.id.localeCompare(b2.id)});let rows=filteredModels.map(m2=>({provider:m2.provider,model:m2.id,context:formatTokenCount(m2.contextWindow),maxOut:formatTokenCount(m2.maxTokens),thinking:m2.reasoning?"yes":"no",images:m2.input.includes("image")?"yes":"no"})),headers={provider:"provider",model:"model",context:"context",maxOut:"max-out",thinking:"thinking",images:"images"},widths={provider:Math.max(headers.provider.length,...rows.map(r=>r.provider.length)),model:Math.max(headers.model.length,...rows.map(r=>r.model.length)),context:Math.max(headers.context.length,...rows.map(r=>r.context.length)),maxOut:Math.max(headers.maxOut.length,...rows.map(r=>r.maxOut.length)),thinking:Math.max(headers.thinking.length,...rows.map(r=>r.thinking.length)),images:Math.max(headers.images.length,...rows.map(r=>r.images.length))},headerLine=[headers.provider.padEnd(widths.provider),headers.model.padEnd(widths.model),headers.context.padEnd(widths.context),headers.maxOut.padEnd(widths.maxOut),headers.thinking.padEnd(widths.thinking),headers.images.padEnd(widths.images)].join(" ");console.log(headerLine);for(let row of rows){let line=[row.provider.padEnd(widths.provider),row.model.padEnd(widths.model),row.context.padEnd(widths.context),row.maxOut.padEnd(widths.maxOut),row.thinking.padEnd(widths.thinking),row.images.padEnd(widths.images)].join(" ");console.log(line)}}import{join as join59}from"node:path";var FACTORY_PLUGIN_RANGE=`^${VERSION}`,BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1=Object.freeze([{pluginId:"agent-forge.plugin.goal",npmName:"@ai-agent-forge/plugin-goal",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.plan",npmName:"@ai-agent-forge/plugin-plan",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.todo-set",npmName:"@ai-agent-forge/plugin-todo-set",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.session-share",npmName:"@ai-agent-forge/plugin-session-share",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.observability",npmName:"@ai-agent-forge/plugin-observability",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.subagent-delegate",npmName:"@ai-agent-forge/plugin-subagent-delegate",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.memory",npmName:"@ai-agent-forge/plugin-memory",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.image-generation",npmName:"@ai-agent-forge/plugin-image-generation",range:FACTORY_PLUGIN_RANGE}]);function printResponse(response2,write){write(response2.text),response2.status!=="succeeded"&&(process.exitCode=1)}function buildMarketCli(options){let{market,overrides}=options;return createPluginEcosystemCliV1({host:overrides?.host??defaultPluginHostFactsV1(),manifests:listBuiltinPluginManifestsV1(),registry:overrides?.registry??market?.cliRegistry,...overrides?.acquisition===void 0&&market?.acquisition===void 0?{}:{acquisition:overrides?.acquisition??market?.acquisition},installer:overrides?.installer??market?.installer,...overrides?.distribution!==void 0||market?.distribution!==void 0?{distribution:overrides?.distribution??market.distribution}:{},stateStore:overrides?.stateStore??market?.stateStore??createPluginStateStoreV1({filePath:join59(options.agentDir,"plugin-state.json")}),projectStateStore:overrides?.projectStateStore??market?.projectStateStore??createPluginStateStoreV1({filePath:join59(options.cwd,CONFIG_DIR_NAME,"plugin-state.json")}),projectScopeRef:projectPluginScopeRefV1(options.cwd),selectionStore:overrides?.selectionStore??createPluginSelectionStoreV1({filePath:join59(options.agentDir,".plugin-selection.json")}),projectSelectionStore:overrides?.projectSelectionStore??createPluginSelectionStoreV1({filePath:join59(options.cwd,CONFIG_DIR_NAME,".plugin-selection.json")})})}async function createDefaultPluginManagerControllerV1(options){let agentDir=options.agentDir??getAgentDir(),cwd=options.cwd??process.cwd(),market=await createDefaultPluginMarketWiringV1({agentDir,cwd}),cli=buildMarketCli({agentDir,cwd,market});return{controller:createPluginManagerControllerV1({registry:market.registry,stateStore:options.scope==="project"?market.projectStateStore:market.stateStore,cli}),close:market.close}}async function handlePluginEcosystemCommand(args,options={}){if(args[0]!=="plugin")return!1;let write=options.write??(line=>console.log(line));if(args[1]==="update"&&args[2]==="--all")return await runBatchUpdate(args.slice(3),options,write),!0;let agentDir=options.agentDir??getAgentDir(),cwd=options.cwd??process.cwd(),market=options.registry===void 0&&options.installer===void 0?await createDefaultPluginMarketWiringV1({agentDir,cwd}):void 0;try{let response2=await buildMarketCli({agentDir,cwd,market,overrides:options}).execute({argv:args.slice(1)});return printResponse(response2,write),!0}finally{await market?.close()}}async function runBatchUpdate(restArgs,options,write){let agentDir=options.agentDir??getAgentDir(),cwd=options.cwd??process.cwd(),scopeIndex=restArgs.indexOf("--scope"),scope=scopeIndex!==-1&&restArgs[scopeIndex+1]==="project"?"project":"global",market=options.registry===void 0&&options.installer===void 0?await createDefaultPluginMarketWiringV1({agentDir,cwd}):void 0;try{let cli=buildMarketCli({agentDir,cwd,market,overrides:options}),listResponse=await cli.execute({argv:["state","list","--scope",scope]});if(listResponse.status!=="succeeded"){printResponse(listResponse,write);return}let entries=(listResponse.data?.entries??[]).filter(entry=>entry.lifecycle==="active"&&entry.scope===scope);if(entries.length===0){write("No active plugins to update.");return}let updated=[],current=[],failed=[];for(let entry of entries){let factoryEntry=BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1.find(item=>item.pluginId===entry.pluginId),argv=factoryEntry?["install",`${factoryEntry.npmName}@${factoryEntry.range??"latest"}`,"--scope",scope]:["update",entry.pluginId,"--scope",scope],response2=await cli.execute({argv});response2.status==="succeeded"?(updated.push(entry.pluginId),write(response2.text)):response2.error?.code==="already_installed"?current.push(entry.pluginId):(failed.push(entry.pluginId),write(response2.text))}let summary=[`updated ${updated.length}${updated.length>0?` (${updated.join(", ")})`:""}`,`already up to date ${current.length}${current.length>0?` (${current.join(", ")})`:""}`,`failed ${failed.length}${failed.length>0?` (${failed.join(", ")})`:""}`].join("; ");write(`plugin update --all [${scope}]: ${summary}`),failed.length>0&&(process.exitCode=1)}finally{await market?.close()}}import{join as join60}from"node:path";var DEFAULT_DURABLE_LOG_RELATIVE_PATH=join60("durable","remote-server-ops.jsonl");function isAddrInUse(error2){return typeof error2=="object"&&error2!==null&&error2.code==="EADDRINUSE"}async function runServeMode(port,options){let handle,createListener=options?.createListener??(()=>createWsServerListener({port,httpRequestHandler:(request,response2)=>handle?.server.handleArtifactHttpRequest(request,response2)??!1,onError:error2=>{console.error(`remote-server error: ${error2.message}`)}})),startServer=options?.startServer??startCodingAgentRemoteServer,workspaceRoots=options?.workspaceRoots,sessionDir=options?.sessionDir,durable=options?.durable??createDurableService({backend:createFileDurableStoreBackend({path:join60(getAgentDir(),DEFAULT_DURABLE_LOG_RELATIVE_PATH)})}),writerId=readOrCreateWriterId(getAgentDir());try{handle=await startServer({sessionSourceOptions:{sessionsDir:sessionDir??getSessionsDir(),cwd:process.cwd(),agentDir:getAgentDir(),...workspaceRoots===void 0||workspaceRoots.length===0?{}:{workspaceRoots},agentTaskResults:{store:durable,writerId},subagentPoolFromSelfInvocation:!0,...options?.hostLogger===void 0?{}:{hostLogger:options.hostLogger}},listeners:[createListener()],onError:error2=>{console.error(`remote-server error: ${error2.message}`)},durable,writerId})}catch(error2){throw isAddrInUse(error2)&&(console.error(`Port ${port} is already in use`),process.exit(1)),error2}let closing=!1,shutdown=()=>{closing||(closing=!0,handle.close().then(()=>{process.exit(0)}).catch(error2=>{console.error(`Remote server shutdown failed: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}))};process.on("SIGINT",shutdown),process.on("SIGTERM",shutdown),console.log(`Remote server listening on ${handle.addresses.join(", ")}`)}import{existsSync as existsSync29}from"fs";var THEME_OPTIONS=[{value:"dark",label:"Dark"},{value:"light",label:"Light"}],ANALYTICS_OPTIONS=[{value:!0,label:"Share anonymous usage data"},{value:!1,label:"Don't share"}],SETUP_LOGO_LINES=["\u2588\u2588\u2588\u2588\u2588\u2588","\u2588\u2588 \u2588\u2588","\u2588\u2588\u2588\u2588 \u2588\u2588","\u2588\u2588 \u2588\u2588"],FirstTimeSetupComponent=class extends Container{step="theme";themeIndex;analyticsIndex=0;options;constructor(options){super(),this.options=options,this.themeIndex=Math.max(0,THEME_OPTIONS.findIndex(option=>option.value===options.detectedTheme)),this.update()}update(){this.clear(),this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("accent",SETUP_LOGO_LINES.join(`
1490
+ ${loadError}`));let models=[...await modelRuntime.getAvailable(void 0,{signal})];if(models.length===0){console.log(formatNoModelsAvailableMessage());return}let filteredModels=models;if(searchPattern&&(filteredModels=fuzzyFilter(models,searchPattern,m2=>`${m2.provider} ${m2.id}`)),filteredModels.length===0){console.log(`No models matching "${searchPattern}"`);return}filteredModels.sort((a,b2)=>{let providerCmp=a.provider.localeCompare(b2.provider);return providerCmp!==0?providerCmp:a.id.localeCompare(b2.id)});let rows=filteredModels.map(m2=>({provider:m2.provider,model:m2.id,context:formatTokenCount(m2.contextWindow),maxOut:formatTokenCount(m2.maxTokens),thinking:m2.reasoning?"yes":"no",images:m2.input.includes("image")?"yes":"no"})),headers={provider:"provider",model:"model",context:"context",maxOut:"max-out",thinking:"thinking",images:"images"},widths={provider:Math.max(headers.provider.length,...rows.map(r=>r.provider.length)),model:Math.max(headers.model.length,...rows.map(r=>r.model.length)),context:Math.max(headers.context.length,...rows.map(r=>r.context.length)),maxOut:Math.max(headers.maxOut.length,...rows.map(r=>r.maxOut.length)),thinking:Math.max(headers.thinking.length,...rows.map(r=>r.thinking.length)),images:Math.max(headers.images.length,...rows.map(r=>r.images.length))},headerLine=[headers.provider.padEnd(widths.provider),headers.model.padEnd(widths.model),headers.context.padEnd(widths.context),headers.maxOut.padEnd(widths.maxOut),headers.thinking.padEnd(widths.thinking),headers.images.padEnd(widths.images)].join(" ");console.log(headerLine);for(let row of rows){let line=[row.provider.padEnd(widths.provider),row.model.padEnd(widths.model),row.context.padEnd(widths.context),row.maxOut.padEnd(widths.maxOut),row.thinking.padEnd(widths.thinking),row.images.padEnd(widths.images)].join(" ");console.log(line)}}import{join as join59}from"node:path";var FACTORY_PLUGIN_RANGE=`^${VERSION}`,BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1=Object.freeze([{pluginId:"agent-forge.plugin.goal",npmName:"@ai-agent-forge/plugin-goal",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.plan",npmName:"@ai-agent-forge/plugin-plan",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.todo-set",npmName:"@ai-agent-forge/plugin-todo-set",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.session-share",npmName:"@ai-agent-forge/plugin-session-share",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.observability",npmName:"@ai-agent-forge/plugin-observability",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.subagent-delegate",npmName:"@ai-agent-forge/plugin-subagent-delegate",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.memory",npmName:"@ai-agent-forge/plugin-memory",range:FACTORY_PLUGIN_RANGE},{pluginId:"agent-forge.plugin.image-generation",npmName:"@ai-agent-forge/plugin-image-generation",range:FACTORY_PLUGIN_RANGE}]);function printResponse(response2,write){write(response2.text),response2.status!=="succeeded"&&(process.exitCode=1)}function buildMarketCli(options){let{market,overrides}=options;return createPluginEcosystemCliV1({host:overrides?.host??defaultPluginHostFactsV1(),manifests:listBuiltinPluginManifestsV1(),registry:overrides?.registry??market?.cliRegistry,...overrides?.acquisition===void 0&&market?.acquisition===void 0?{}:{acquisition:overrides?.acquisition??market?.acquisition},installer:overrides?.installer??market?.installer,...overrides?.distribution!==void 0||market?.distribution!==void 0?{distribution:overrides?.distribution??market.distribution}:{},stateStore:overrides?.stateStore??market?.stateStore??createPluginStateStoreV1({filePath:join59(options.agentDir,"plugin-state.json")}),projectStateStore:overrides?.projectStateStore??market?.projectStateStore??createPluginStateStoreV1({filePath:join59(options.cwd,CONFIG_DIR_NAME,"plugin-state.json")}),projectScopeRef:projectPluginScopeRefV1(options.cwd),selectionStore:overrides?.selectionStore??createPluginSelectionStoreV1({filePath:join59(options.agentDir,".plugin-selection.json")}),projectSelectionStore:overrides?.projectSelectionStore??createPluginSelectionStoreV1({filePath:join59(options.cwd,CONFIG_DIR_NAME,".plugin-selection.json")})})}async function createDefaultPluginManagerControllerV1(options){let agentDir=options.agentDir??getAgentDir(),cwd=options.cwd??process.cwd(),market=await createDefaultPluginMarketWiringV1({agentDir,cwd}),cli=buildMarketCli({agentDir,cwd,market});return{controller:createPluginManagerControllerV1({registry:market.registry,stateStore:options.scope==="project"?market.projectStateStore:market.stateStore,cli}),close:market.close}}async function handlePluginEcosystemCommand(args,options={}){if(args[0]!=="plugin")return!1;let write=options.write??(line=>console.log(line));if(args[1]==="update"&&args[2]==="--all")return await runBatchUpdate(args.slice(3),options,write),!0;let agentDir=options.agentDir??getAgentDir(),cwd=options.cwd??process.cwd(),market=options.registry===void 0&&options.installer===void 0?await createDefaultPluginMarketWiringV1({agentDir,cwd}):void 0;try{let response2=await buildMarketCli({agentDir,cwd,market,overrides:options}).execute({argv:args.slice(1)});return printResponse(response2,write),response2.status==="succeeded"&&response2.command==="install"&&write("note: this plugin is installed but not yet selected by a profile; to activate its tools run: agent-forge plugin selection set <profile> <pluginId>"),!0}finally{await market?.close()}}async function runBatchUpdate(restArgs,options,write){let agentDir=options.agentDir??getAgentDir(),cwd=options.cwd??process.cwd(),scopeIndex=restArgs.indexOf("--scope"),scope=scopeIndex!==-1&&restArgs[scopeIndex+1]==="project"?"project":"global",market=options.registry===void 0&&options.installer===void 0?await createDefaultPluginMarketWiringV1({agentDir,cwd}):void 0;try{let cli=buildMarketCli({agentDir,cwd,market,overrides:options}),listResponse=await cli.execute({argv:["state","list","--scope",scope]});if(listResponse.status!=="succeeded"){printResponse(listResponse,write);return}let entries=(listResponse.data?.entries??[]).filter(entry=>entry.lifecycle==="active"&&entry.scope===scope);if(entries.length===0){write("No active plugins to update.");return}let updated=[],current=[],failed=[];for(let entry of entries){let factoryEntry=BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1.find(item=>item.pluginId===entry.pluginId),argv=factoryEntry?["install",`${factoryEntry.npmName}@${factoryEntry.range??"latest"}`,"--scope",scope]:["update",entry.pluginId,"--scope",scope],response2=await cli.execute({argv});response2.status==="succeeded"?(updated.push(entry.pluginId),write(response2.text)):response2.error?.code==="already_installed"?current.push(entry.pluginId):(failed.push(entry.pluginId),write(response2.text))}let summary=[`updated ${updated.length}${updated.length>0?` (${updated.join(", ")})`:""}`,`already up to date ${current.length}${current.length>0?` (${current.join(", ")})`:""}`,`failed ${failed.length}${failed.length>0?` (${failed.join(", ")})`:""}`].join("; ");write(`plugin update --all [${scope}]: ${summary}`),failed.length>0&&(process.exitCode=1)}finally{await market?.close()}}import{join as join60}from"node:path";var DEFAULT_DURABLE_LOG_RELATIVE_PATH=join60("durable","remote-server-ops.jsonl");function isAddrInUse(error2){return typeof error2=="object"&&error2!==null&&error2.code==="EADDRINUSE"}async function runServeMode(port,options){let handle,createListener=options?.createListener??(()=>createWsServerListener({port,httpRequestHandler:(request,response2)=>handle?.server.handleArtifactHttpRequest(request,response2)??!1,onError:error2=>{console.error(`remote-server error: ${error2.message}`)}})),startServer=options?.startServer??startCodingAgentRemoteServer,workspaceRoots=options?.workspaceRoots,sessionDir=options?.sessionDir,durable=options?.durable??createDurableService({backend:createFileDurableStoreBackend({path:join60(getAgentDir(),DEFAULT_DURABLE_LOG_RELATIVE_PATH)})}),writerId=readOrCreateWriterId(getAgentDir());try{handle=await startServer({sessionSourceOptions:{sessionsDir:sessionDir??getSessionsDir(),cwd:process.cwd(),agentDir:getAgentDir(),...workspaceRoots===void 0||workspaceRoots.length===0?{}:{workspaceRoots},agentTaskResults:{store:durable,writerId},subagentPoolFromSelfInvocation:!0,...options?.hostLogger===void 0?{}:{hostLogger:options.hostLogger}},listeners:[createListener()],onError:error2=>{console.error(`remote-server error: ${error2.message}`)},durable,writerId})}catch(error2){throw isAddrInUse(error2)&&(console.error(`Port ${port} is already in use`),process.exit(1)),error2}let closing=!1,shutdown=()=>{closing||(closing=!0,handle.close().then(()=>{process.exit(0)}).catch(error2=>{console.error(`Remote server shutdown failed: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}))};process.on("SIGINT",shutdown),process.on("SIGTERM",shutdown),console.log(`Remote server listening on ${handle.addresses.join(", ")}`)}import{existsSync as existsSync29}from"fs";var THEME_OPTIONS=[{value:"dark",label:"Dark"},{value:"light",label:"Light"}],ANALYTICS_OPTIONS=[{value:!0,label:"Share anonymous usage data"},{value:!1,label:"Don't share"}],SETUP_LOGO_LINES=["\u2588\u2588\u2588\u2588\u2588\u2588","\u2588\u2588 \u2588\u2588","\u2588\u2588\u2588\u2588 \u2588\u2588","\u2588\u2588 \u2588\u2588"],FirstTimeSetupComponent=class extends Container{step="theme";themeIndex;analyticsIndex=0;options;constructor(options){super(),this.options=options,this.themeIndex=Math.max(0,THEME_OPTIONS.findIndex(option=>option.value===options.detectedTheme)),this.update()}update(){this.clear(),this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("accent",SETUP_LOGO_LINES.join(`
1491
1491
  `)),1,0)),this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("accent",theme.bold(`Welcome to ${APP_NAME}, the minimal coding agent.`)),1,0)),this.addChild(new Spacer(1)),this.step==="theme"?(this.addChild(new Text(theme.fg("text","Pick a theme."),1,0)),this.addChild(new Text(theme.fg("muted",`Detected system appearance: ${this.options.detectedTheme}`),1,0)),this.addChild(new Spacer(1)),this.addOptionList(THEME_OPTIONS.map(option=>option.label),this.themeIndex)):(this.addChild(new Text(theme.fg("text","Opt-in to anonymous usage data sharing?"),1,0)),this.addChild(new Text(theme.fg("muted",`Opting in stores a tracking identifier in settings.json and enables anonymous
1492
1492
  usage analytics. This helps us to better debug, reproduce, and resolve issues
1493
1493
  and bugs within Agent Forge. You can observe what is shared using /privacy and make
@@ -1576,4 +1576,4 @@ Options:
1576
1576
  `));if(command.kind!=="check"){let signal=AbortSignal.timeout(15e3),modelRuntime=await ModelRuntime.create({allowModelNetwork:!1,signal}),credential2=await resolveCredentialForPrint(parsed,modelRuntime,command.kind,command.minExpiryMs,signal);return process.stdout.write(`${credential2}
1577
1577
  `),!0}let requestedAuth=validateAuthCommandArgs(parsed,command.kind),result,credential;try{let credentials=command.noRefresh?new ReadOnlyAuthStorage:AuthStorage.create(),modelRuntime=await createAuthCheckModelRuntime(credentials);result=await checkProviderAuth(parsed,modelRuntime,{refresh:!command.noRefresh}),command.credentials&&result.status==="ready"&&(credential=await getProviderCredential(result.provider,modelRuntime,credentials,{refresh:!command.noRefresh}),credential||(result={status:"not_ready",provider:result.provider,reason:"credential_not_available"}))}catch{result={status:"invalid",provider:requestedAuth.provider??requestedAuth.model,reason:"invalid_state"}}let output=command.json?JSON.stringify({...result,...credential?{credentials:credential}:{}}):credential??result.status;process.stdout.write(`${output}
1578
1578
  `),process.exitCode=result.status==="ready"?0:result.status==="not_ready"?1:2}catch(error2){let message=error2 instanceof AuthCommandError?error2.message:"Failed to resolve credential";console.error(source_default.red(`Error: ${message}`)),process.exitCode=command.kind==="check"?2:1}return!0}async function prepareInitialMessage(parsed,autoResizeImages,stdinContent){if(parsed.fileArgs.length===0)return buildInitialMessage({parsed,stdinContent});let{text,images}=await processFileArguments(parsed.fileArgs,{autoResizeImages});return buildInitialMessage({parsed,fileText:text,fileImages:images,stdinContent})}async function findLocalSessionByExactId(sessionId,cwd,sessionDir){let localMatch=(await SessionManager.list(cwd,sessionDir)).find(s=>s.id===sessionId);return localMatch?{type:"local",path:localMatch.path}:void 0}async function promptConfirm(message){return new Promise(resolve25=>{let rl=createInterface4({input:process.stdin,output:process.stdout});rl.question(`${message} [y/N] `,answer=>{rl.close(),resolve25(answer.toLowerCase()==="y"||answer.toLowerCase()==="yes")})})}function printSuiteLifecycleError(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`))}function suiteWorkspaceExists(agentDir,id){return existsSync34(join68(getSuiteWorkspaceDir(agentDir,id),SUITE_MANIFEST_FILENAME))}async function handleSuiteLifecycleCommands(parsed,cwd,agentDir){if(parsed.suiteCreate!==void 0){try{let result=createSuite({agentDir,id:parsed.suiteCreate,...parsed.cloneFrom===void 0?{}:{cloneFrom:parsed.cloneFrom}});console.log(`Created suite "${result.suiteId}" at ${result.suiteDir}`)}catch(error2){printSuiteLifecycleError(error2),process.exit(1)}process.exit(0)}if(parsed.cloneFrom!==void 0&&(console.error(source_default.red("Error: --clone-from requires --suite-create")),process.exit(1)),parsed.suiteDelete!==void 0){let id=parsed.suiteDelete;isBuiltinSuiteId(id)&&(printSuiteLifecycleError(new SuiteLifecycleError("delete",id,[`builtin suite "${id}" cannot be deleted`])),process.exit(1)),suiteWorkspaceExists(agentDir,id)||(printSuiteLifecycleError(new SuiteResolutionError(id,listSuiteIds(agentDir))),process.exit(1));let refs=findSuiteSessionRefs(agentDir,id);if(refs.length>0){console.error(source_default.red(`Error: suite "${id}" is referenced by ${refs.length} existing session(s); deletion refused:`));for(let ref of refs)console.error(` ${ref.sessionId} ${ref.path}`);process.exit(1)}let suiteDir=getSuiteWorkspaceDir(agentDir,id);console.log(`Deleting suite "${id}": the workspace directory ${suiteDir} will be moved to the trash and released.`),process.stdin.isTTY||(console.error(source_default.red(`Refusing to delete suite "${id}" without an interactive confirmation (non-interactive stdin). Re-run in a terminal to confirm.`)),process.exit(1)),await promptConfirm(`Delete suite "${id}"?`)||(console.log(`Aborted: suite "${id}" was not deleted.`),process.exit(1));try{let result=deleteSuite({agentDir,id,refs}),cleanup=clearDanglingSuiteSettings(SettingsManager.create(cwd,agentDir),id);for(let scope of cleanup.clearedScopes)console.log(`Cleared the ${scope} settings "suite" key (pointed at "${id}").`);releaseTrashedSuite(result.trashPath),console.log(`Deleted suite "${id}"; the workspace was moved to ${result.trashPath} and is being released.`)}catch(error2){printSuiteLifecycleError(error2),process.exit(1)}process.exit(0)}if(parsed.suiteReset!==void 0){let id=parsed.suiteReset;if(!isBuiltinSuiteId(id)){let message=listSuiteIds(agentDir).includes(id)?`Suite "${id}" is a user suite; only builtin suites can be reset \u2014 use --suite-delete instead.`:new SuiteResolutionError(id,listSuiteIds(agentDir)).message;console.error(source_default.red(`Error: ${message}`)),process.exit(1)}try{let plan=resetSuite({agentDir,id});plan.diffText.length===0&&(console.log(`Suite "${id}" already matches the factory contents; nothing to reset.`),process.exit(0)),console.log(`Resetting builtin suite "${id}" to the factory contents:
1579
- `),console.log(plan.diffText),process.stdin.isTTY||(console.error(source_default.red(`Refusing to reset suite "${id}" without an interactive confirmation (non-interactive stdin). Review the diff above and re-run in a terminal to confirm.`)),process.exit(1)),await promptConfirm(`Apply reset of suite "${id}"?`)||(console.log(`Aborted: suite "${id}" was not reset.`),process.exit(1));let result=plan.apply();console.log(`Suite "${id}" was reset to the factory contents (profile lock generation ${result.lock.generation}).`)}catch(error2){printSuiteLifecycleError(error2),process.exit(1)}process.exit(0)}}function validateForkFlags(parsed){if(!parsed.fork)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --fork cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateSessionIdFlags(parsed){if(parsed.sessionId===void 0)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}. To resume that exact session, drop the other flags and use --session-id alone (or use --continue to resume the most recent session).`)),process.exit(1));try{assertValidSessionId(parsed.sessionId)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function openSessionOrExit(path15,sessionDir){try{return SessionManager.open(path15,sessionDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function forkSessionOrExit(sourcePath,cwd,sessionDir,sessionId){try{return SessionManager.forkFrom(sourcePath,cwd,sessionDir,{id:sessionId})}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}async function createSessionManager(parsed,cwd,sessionDir,settingsManager){if(parsed.noSession||parsed.help||parsed.listModels!==void 0)return SessionManager.inMemory(cwd,parsed.sessionId!==void 0?{id:parsed.sessionId}:void 0);if(parsed.fork){parsed.sessionId&&await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir)&&(console.error(source_default.red(`Session already exists with id '${parsed.sessionId}'`)),process.exit(1));let resolved=await resolveSessionPath(parsed.fork,cwd,sessionDir);switch(resolved.type){case"path":case"local":case"global":return forkSessionOrExit(resolved.path,cwd,sessionDir,parsed.sessionId);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.session){let resolved=await resolveSessionPath(parsed.session,cwd,sessionDir);switch(resolved.type){case"path":case"local":return openSessionOrExit(resolved.path,sessionDir);case"global":return console.log(source_default.yellow(`Session found in different project: ${resolved.cwd}`)),await promptConfirm("Fork this session into current directory?")||(console.log(source_default.dim("Aborted.")),process.exit(0)),forkSessionOrExit(resolved.path,cwd,sessionDir);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.resume)try{let selectedPath=await selectSession(onProgress=>SessionManager.list(cwd,sessionDir,onProgress),onProgress=>SessionManager.listAll(sessionDir,onProgress),settingsManager);return selectedPath||(console.log(source_default.dim("No session selected")),process.exit(0)),SessionManager.open(selectedPath,sessionDir)}finally{stopThemeWatcher()}if(parsed.continue)return SessionManager.continueRecent(cwd,sessionDir);if(parsed.sessionId){let existingSession=await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir);if(existingSession)return SessionManager.open(existingSession.path,sessionDir);console.error(source_default.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`))}return SessionManager.create(cwd,sessionDir,{id:parsed.sessionId})}function buildSessionOptions(parsed,scopedModels,hasExistingSession,modelRuntime,settingsManager){let options={},diagnostics=[],cliThinkingFromModel=!1;if(parsed.model){let resolved=resolveCliModel({cliProvider:parsed.provider,cliModel:parsed.model,cliThinking:parsed.thinking,modelRuntime});resolved.warning&&diagnostics.push({type:"warning",message:resolved.warning}),resolved.error&&diagnostics.push({type:"error",message:resolved.error}),resolved.model&&(options.model=resolved.model,!parsed.thinking&&resolved.thinkingLevel&&(options.thinkingLevel=resolved.thinkingLevel,cliThinkingFromModel=!0))}if(!options.model&&scopedModels.length>0&&!hasExistingSession){let savedProvider=settingsManager.getDefaultProvider(),savedModelId=settingsManager.getDefaultModel(),savedModel=savedProvider&&savedModelId?modelRuntime.getModel(savedProvider,savedModelId):void 0,savedInScope=savedModel?scopedModels.find(sm=>modelsAreEqual(sm.model,savedModel)):void 0;savedInScope?(options.model=savedInScope.model,!parsed.thinking&&savedInScope.thinkingLevel&&(options.thinkingLevel=savedInScope.thinkingLevel)):(options.model=scopedModels[0].model,!parsed.thinking&&scopedModels[0].thinkingLevel&&(options.thinkingLevel=scopedModels[0].thinkingLevel))}return parsed.thinking&&(options.thinkingLevel=parsed.thinking),scopedModels.length>0&&(options.scopedModels=scopedModels.map(sm=>({model:sm.model,thinkingLevel:sm.thinkingLevel}))),parsed.noTools?options.noTools="all":parsed.noBuiltinTools&&(options.noTools="builtin"),parsed.tools&&(options.tools=[...parsed.tools]),parsed.excludeTools&&(options.excludeTools=[...parsed.excludeTools]),parsed.suite&&(options.suite=parsed.suite),{options,cliThinkingFromModel,diagnostics}}function resolveCliPaths(cwd,paths){return paths?.map(value=>isLocalPath(value)?resolvePath(value,cwd):value)}async function promptForMissingSessionCwd(issue,settingsManager){return showStartupSelector(settingsManager,formatMissingSessionCwdPrompt(issue),[{label:"Continue",value:issue.fallbackCwd},{label:"Cancel",value:void 0}])}function isBuiltinPluginProfileId(value){return listBuiltinPluginProfilesV1().some(profile=>profile.id===value)}function selectionDiagnostics(status2,diagnostics){return diagnostics.map(item=>({type:"error",message:`Plugin selection ${status2} (${item.code}): ${item.message}`}))}async function resolveCliPluginSelection(parsed,agentDir,cwd){if(!(parsed.pluginProfile!==void 0||parsed.plugins!==void 0||parsed.disabledPlugins!==void 0||parsed.pluginSelectionScope!==void 0)||parsed.noPlugins)return{diagnostics:[]};if(parsed.pluginProfile===void 0&&parsed.plugins===void 0&&parsed.disabledPlugins===void 0)return{diagnostics:[{type:"error",message:"--plugin-scope requires an explicit plugin selection"}]};let diagnostics=[],selectionPath=(parsed.pluginSelectionScope??"global")==="project"?join68(cwd,CONFIG_DIR_NAME,".plugin-selection.json"):join68(agentDir,".plugin-selection.json"),store=createPluginSelectionStoreV1({filePath:selectionPath}),persistedResult;try{persistedResult=await store.read()}catch{return diagnostics.push({type:"error",message:"Plugin selection could not be read"}),{diagnostics}}if(persistedResult.status==="invalid"||persistedResult.status==="cancelled")return diagnostics.push(...selectionDiagnostics(persistedResult.status,persistedResult.diagnostics)),{diagnostics};let explicitProfileId=parsed.pluginProfile,profileId;if(explicitProfileId!==void 0){if(!isBuiltinPluginProfileId(explicitProfileId))return diagnostics.push({type:"error",message:`Unknown plugin profile: ${explicitProfileId}`}),{diagnostics};profileId=explicitProfileId}let persistedSelection2;if(profileId!==void 0)persistedSelection2=persistedResult.snapshot.selections.find(selection=>selection.profileId===profileId);else if(parsed.plugins!==void 0||parsed.disabledPlugins!==void 0){if(persistedResult.snapshot.selections.length!==1)return diagnostics.push({type:"error",message:persistedResult.snapshot.selections.length===0?"--plugin/--disable-plugin requires --plugin-profile or one persisted plugin profile":"--plugin/--disable-plugin requires --plugin-profile when multiple persisted profiles exist"}),{diagnostics};if(persistedSelection2=persistedResult.snapshot.selections[0],persistedSelection2!==void 0&&isBuiltinPluginProfileId(persistedSelection2.profileId))profileId=persistedSelection2.profileId;else return diagnostics.push({type:"error",message:`Unknown persisted plugin profile: ${persistedSelection2?.profileId??""}`}),{diagnostics}}return{...profileId===void 0?{}:{profileId},...parsed.plugins!==void 0?{selectedPluginIds:Object.freeze([...parsed.plugins])}:persistedSelection2===void 0?{}:{selectedPluginIds:persistedSelection2.selectedPluginIds},...parsed.disabledPlugins!==void 0?{disabledPluginIds:Object.freeze([...parsed.disabledPlugins])}:persistedSelection2===void 0?{}:{disabledPluginIds:persistedSelection2.disabledPluginIds},diagnostics}}async function main(args,options){resetTimings();let offlineMode=args.includes("--offline")||isTruthyEnvFlag(process.env.AGENT_FORGE_OFFLINE);if(offlineMode&&(process.env.AGENT_FORGE_OFFLINE="1",process.env.AGENT_FORGE_SKIP_VERSION_CHECK="1"),await runAuthCommand(args)||await handlePluginEcosystemCommand(args))return;process.platform==="win32"&&cleanupWindowsSelfUpdateQuarantine(getPackageDir()),cleanupManagedInstall();let cwd=process.cwd(),agentDir=getAgentDir(),bootstrapSettingsManager=SettingsManager.create(cwd,agentDir);if(applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(),await handlePackageCommand(args)){let exitCode=process.exitCode??0;if(process.platform==="win32"&&exitCode===0&&args[0]==="update")return;process.exit(exitCode);return}let configCommandOptions=options?.pluginManagerController===void 0&&options?.projectPluginManagerController===void 0?void 0:{...options?.pluginManagerController===void 0?{}:{pluginManagerController:options.pluginManagerController},...options?.projectPluginManagerController===void 0?{}:{projectPluginManagerController:options.projectPluginManagerController}};if(await handleConfigCommand(args,configCommandOptions))return;let parsed=parseArgs(args);if(parsed.diagnostics.length>0){for(let d2 of parsed.diagnostics){let color=d2.type==="error"?source_default.red:source_default.yellow;console.error(color(`${d2.type==="error"?"Error":"Warning"}: ${d2.message}`))}parsed.diagnostics.some(d2=>d2.type==="error")&&process.exit(1)}time("parseArgs");let envLogLevel=process.env.AGENT_FORGE_LOG_LEVEL,hostLogLevel=parsed.logLevel??(envLogLevel!==void 0&&isValidHostLogLevel(envLogLevel)?envLogLevel:void 0),rawLogMaxAgeDays=process.env.AGENT_FORGE_LOG_MAX_AGE_DAYS,hostLogMaxAgeDays=rawLogMaxAgeDays!==void 0&&/^\d+$/.test(rawLogMaxAgeDays)?Number.parseInt(rawLogMaxAgeDays,10):void 0;processHostLogger===void 0&&(processHostLogger=createHostLogger({dir:join68(agentDir,"logs"),...hostLogLevel===void 0?{}:{level:hostLogLevel},...hostLogMaxAgeDays===void 0?{}:{maxAgeDays:hostLogMaxAgeDays}}));let rawTraceMaxAgeDays=process.env.AGENT_FORGE_TRACE_MAX_AGE_DAYS,traceMaxAgeDays=rawTraceMaxAgeDays!==void 0&&/^\d+$/.test(rawTraceMaxAgeDays)?Number.parseInt(rawTraceMaxAgeDays,10):0;if(traceMaxAgeDays>0){let traceSweep=sweepTraceFiles(getSessionsDir(),{maxAgeDays:traceMaxAgeDays,now:Date.now});traceSweep.deleted>0&&processHostLogger.info("retention","trace sweep removed expired trace files",{fields:{deleted:traceSweep.deleted,failed:traceSweep.failed}}),traceSweep.failed>0&&processHostLogger.warn("retention","trace sweep finished with failures",{fields:{deleted:traceSweep.deleted,failed:traceSweep.failed}})}if(parsed.version&&(console.log(VERSION),process.exit(0)),parsed.export){let result;try{let outputPath=parsed.messages.length>0?parsed.messages[0]:void 0;result=await exportFromFile(parsed.export,outputPath)}catch(error2){let message=error2 instanceof Error?error2.message:"Failed to export session";console.error(source_default.red(`Error: ${message}`)),process.exit(1)}console.log(`Exported to: ${result}`),process.exit(0)}if(parsed.trace!==void 0){let envSessionDir2=process.env[ENV_SESSION_DIR],sessionDir2=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir2?expandTildePath(envSessionDir2):void 0)??bootstrapSettingsManager.getSessionDir(),result=await runTraceView(parsed.trace,{json:parsed.traceJson===!0,cwd,...sessionDir2===void 0?{}:{sessionDir:sessionDir2},...parsed.traceKind===void 0?{}:{kinds:parsed.traceKind},...parsed.traceLimit===void 0?{}:{limit:parsed.traceLimit}});result.ok||(console.error(source_default.red(`Error: ${result.message}`)),process.exit(1)),process.exit(0)}if(parsed.serve!==void 0){if(parsed.help||parsed.listModels!==void 0){runMigrations(cwd),reportDiagnostics(collectSettingsDiagnostics(bootstrapSettingsManager)),parsed.help&&(printHelp(),process.exit(0));let modelRuntime2=await ModelRuntime.create({signal:AbortSignal.timeout(15e3)}),searchPattern=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(modelRuntime2,searchPattern,AbortSignal.timeout(15e3)),process.exit(0)}let conflictingFlags=[parsed.print?"--print":void 0,parsed.messages.length>0?"positional args":void 0,parsed.fileArgs.length>0?"@file args":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.session?"--session":void 0,parsed.sessionId?"--session-id":void 0,parsed.fork?"--fork":void 0,parsed.noSession?"--no-session":void 0,parsed.mode?"--mode":void 0,parsed.suiteCreate?"--suite-create":void 0,parsed.suiteDelete?"--suite-delete":void 0,parsed.suiteReset?"--suite-reset":void 0,parsed.cloneFrom?"--clone-from":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --serve cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1));let ignoredFlags=[["--name",parsed.name!==void 0],["--thinking",parsed.thinking!==void 0],["--provider",parsed.provider!==void 0],["--model",parsed.model!==void 0],["--api-key",parsed.apiKey!==void 0],["--models",(parsed.models?.length??0)>0],["--verbose",parsed.verbose===!0],["--tui-mode",parsed.tuiMode!==void 0],["--suite",parsed.suite!==void 0],["--tools",(parsed.tools?.length??0)>0],["--exclude-tools",(parsed.excludeTools?.length??0)>0],["--no-tools",parsed.noTools===!0],["--no-builtin-tools",parsed.noBuiltinTools===!0],["--skill",(parsed.skills?.length??0)>0],["--prompt-template",(parsed.promptTemplates?.length??0)>0],["--no-prompt-templates",parsed.noPromptTemplates===!0],["--theme",(parsed.themes?.length??0)>0],["--use-theme",parsed.useTheme!==void 0],["--no-themes",parsed.noThemes===!0],["--no-context-files",parsed.noContextFiles===!0],["--no-skills",parsed.noSkills===!0],["--no-plugins",parsed.noPlugins===!0],["--no-trace",parsed.noTrace===!0],["--plugin-profile",parsed.pluginProfile!==void 0],["--plugin",(parsed.plugins?.length??0)>0],["--disable-plugin",(parsed.disabledPlugins?.length??0)>0],["--system-prompt",parsed.systemPrompt!==void 0],["--append-system-prompt",(parsed.appendSystemPrompt?.length??0)>0]].flatMap(([flag,passed])=>passed?[flag]:[]);ignoredFlags.length>0&&console.warn(source_default.yellow(`--serve ignores session/model/tool options: ${ignoredFlags.join(", ")}`)),await runServeMode(parsed.serve,{...parsed.serveWorkspaceRoots===void 0?{}:{workspaceRoots:parsed.serveWorkspaceRoots},...parsed.sessionDir===void 0?{}:{sessionDir:parsed.sessionDir},...processHostLogger===void 0?{}:{hostLogger:processHostLogger}});return}await handleSuiteLifecycleCommands(parsed,cwd,agentDir),sweepSuiteTrash(agentDir).catch(()=>{});let appMode=resolveAppMode(parsed,process.stdin.isTTY,process.stdout.isTTY);parsed.subagentRunner!==!0&&appMode!=="interactive"&&!isPlainRuntimeMetadataCommand(parsed)&&takeOverStdout(),parsed.mode==="rpc"&&parsed.fileArgs.length>0&&(console.error(source_default.red("Error: @file arguments are not supported in RPC mode")),process.exit(1)),validateForkFlags(parsed),validateSessionIdFlags(parsed);let{migratedAuthProviders:migratedProviders,deprecationWarnings}=runMigrations(cwd);time("runMigrations");let startupSettingsManager=SettingsManager.create(cwd,agentDir),startupSettingsDiagnostics=collectSettingsDiagnostics(startupSettingsManager);appMode==="interactive"&&!parsed.help&&parsed.listModels===void 0&&shouldRunFirstTimeSetup()&&(await showFirstTimeSetup(startupSettingsManager),time("firstTimeSetup")),appMode==="interactive"&&parsed.useTheme!==void 0&&startupSettingsManager.applyOverrides({theme:parsed.useTheme});let envSessionDir=process.env[ENV_SESSION_DIR],sessionDir=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir?expandTildePath(envSessionDir):void 0)??startupSettingsManager.getSessionDir(),sessionManager=await createSessionManager(parsed,cwd,sessionDir,startupSettingsManager),missingSessionCwdIssue=getMissingSessionCwdIssue(sessionManager,cwd);if(missingSessionCwdIssue)if(appMode==="interactive"){let selectedCwd=await promptForMissingSessionCwd(missingSessionCwdIssue,startupSettingsManager);selectedCwd||process.exit(0),sessionManager=SessionManager.open(missingSessionCwdIssue.sessionFile,sessionDir,selectedCwd)}else console.error(source_default.red(new MissingSessionCwdError(missingSessionCwdIssue).message)),process.exit(1);if(parsed.name!==void 0){let name=normalizeSessionName(parsed.name);name===void 0&&(console.error(source_default.red("Error: --name requires a non-empty value")),process.exit(1)),sessionManager.appendSessionInfo(name)}time("createSessionManager");let cliPluginSelection=await resolveCliPluginSelection(parsed,agentDir,sessionManager.getCwd()),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes),createInteractionHostSlot=()=>{let target;return{host:{notify:request=>target?.notify(request),prompt:(request,context)=>target?target.prompt(request,context):Promise.resolve({status:"unavailable"})},setTarget:next=>{target=next}}},interactionHostSlots={interactive:createInteractionHostSlot(),rpc:createInteractionHostSlot()},startupPluginBootstrap,runStartupPluginBootstrap=bootstrapCwd=>(startupPluginBootstrap??=runNodePluginBootstrapV1({agentDir,cwd:bootstrapCwd}).catch(error2=>({version:1,status:"failed",actions:[],diagnostics:[{code:"bootstrap_failed",message:`Startup plugin bootstrap failed: ${error2 instanceof Error?error2.message:String(error2)}`}],durationMs:0})),startupPluginBootstrap),createRuntime=async({cwd:cwd2,agentDir:agentDir2,sessionManager:sessionManager2,childProfile,childModelId,subagentCommunicationWiring})=>{let runtimeSettingsManager=SettingsManager.create(cwd2,agentDir2);if(!parsed.noPlugins){let bootstrapResult=await runStartupPluginBootstrap(cwd2);for(let diagnostic5 of bootstrapResult.diagnostics)console.error(source_default.yellow(`Plugin bootstrap ${diagnostic5.code}: ${diagnostic5.message}`))}let resolveActivePluginBindings=options?.resolveActivePluginBindings??createDefaultActivePluginBindingsResolverV1(),activeBindings,pluginBindingDiagnostics=[];if(!parsed.noPlugins&&options?.manifestOverrides===void 0)try{let resolvedBindings=await resolveActivePluginBindings({cwd:cwd2,agentDir:agentDir2});activeBindings=resolvedBindings,pluginBindingDiagnostics=resolvedBindings.diagnostics.map(item=>({type:resolvedBindings.status==="unavailable"?"warning":"info",message:`Active plugin binding ${item.code}: ${item.message}`}))}catch{pluginBindingDiagnostics=[{type:"error",message:"Active plugin binding resolver failed; no installed version was selected"}]}let activeManifestOverrides=activeBindings?.status==="ready"?activeBindings.manifestOverrides:void 0,activeVerifiedPlugins=activeBindings?.status==="ready"?activeBindings.verifiedPlugins:void 0,activeInstalledCapabilityPlugins=activeBindings?.status==="ready"?[...activeBindings.installedManifestPaths].map(([pluginId,manifestPath])=>({pluginId,manifestPath})):void 0,pluginHost=options?.pluginHost??(parsed.noPlugins||cliPluginSelection.profileId===void 0&&activeBindings===void 0?void 0:defaultPluginHostFactsV1()),verifiedPlugins=options?.verifiedPlugins??(cliPluginSelection.profileId===void 0?activeVerifiedPlugins:[...defaultBuiltinVerifiedPluginsV1(cliPluginSelection.profileId).filter(builtin=>!activeVerifiedPlugins?.some(active=>active.pluginId===builtin.pluginId&&active.version===builtin.version)),...activeVerifiedPlugins??[]]),services2=await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager:runtimeSettingsManager,modelRuntimeSignal:AbortSignal.timeout(15e3),suite:parsed.suite,suiteAssembly:!0,...parsed.noPlugins||cliPluginSelection.profileId===void 0?{}:{pluginProfileId:cliPluginSelection.profileId},...parsed.noPlugins||cliPluginSelection.selectedPluginIds===void 0?{}:{selectedPluginIds:cliPluginSelection.selectedPluginIds},...parsed.noPlugins||cliPluginSelection.disabledPluginIds===void 0?{}:{disabledPluginIds:cliPluginSelection.disabledPluginIds},...parsed.noPlugins||pluginHost===void 0?{}:{pluginHost},...parsed.noPlugins||verifiedPlugins===void 0?{}:{verifiedPlugins},...parsed.noPlugins||options?.manifestOverrides===void 0?activeManifestOverrides===void 0?{}:{manifestOverrides:activeManifestOverrides}:{manifestOverrides:options.manifestOverrides},...parsed.noPlugins||activeInstalledCapabilityPlugins===void 0?{}:{installedCapabilityPlugins:activeInstalledCapabilityPlugins},...pluginBindingDiagnostics.length===0?{}:{pluginBindingDiagnostics},resourceLoaderOptions:{additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,systemPrompt:parsed.systemPrompt,appendSystemPrompt:[...parsed.appendSystemPrompt??[],...childProfile?.systemPromptAppend===void 0?[]:[childProfile.systemPromptAppend]]}}),{settingsManager:settingsManager2,modelRuntime:modelRuntime2}=services2,diagnostics=[...cliPluginSelection.diagnostics,...services2.diagnostics,...collectSettingsDiagnostics(settingsManager2)],modelPatterns=parsed.models??settingsManager2.getEnabledModels(),scopedModels=modelPatterns&&modelPatterns.length>0?await resolveModelScope(modelPatterns,modelRuntime2,{signal:AbortSignal.timeout(15e3)}):[],profileModel=childModelId===void 0?void 0:(()=>{let entry=scopedModels.find(candidate=>candidate.model.id===childModelId);if(entry===void 0){let available=scopedModels.map(candidate=>candidate.model.id).sort();throw new Error(`agent task child profile model ${JSON.stringify(childModelId)} is not among the runner's scoped models`+(available.length===0?" (none configured)":`; available: ${available.join(", ")}`))}return entry.model})(),sessionContext=sessionManager2.buildSessionContext(),{options:sessionOptions,cliThinkingFromModel,diagnostics:sessionOptionDiagnostics}=buildSessionOptions(parsed,scopedModels,sessionContext.messages.length>0,modelRuntime2,settingsManager2);diagnostics.push(...sessionOptionDiagnostics);let resumedSessionModel=(()=>{if(sessionOptions.model)return;let persisted=sessionContext.model;if(persisted)return modelRuntime2.getModel(persisted.provider,persisted.modelId)??void 0})();parsed.apiKey&&(sessionOptions.model?await modelRuntime2.setRuntimeApiKey(sessionOptions.model.provider,parsed.apiKey):diagnostics.push({type:"error",message:"--api-key requires a model to be specified via --model, --provider/--model, or --models"}));let childProfileMode=childProfile!==void 0&&childProfile.mode==="readonly"&&parsed.subagentRunner===!0?"readonly":void 0,created=await createAgentSessionFromServices({services:services2,sessionManager:sessionManager2,model:profileModel??sessionOptions.model??resumedSessionModel,thinkingLevel:childProfile?.thinkingLevel??sessionOptions.thinkingLevel,scopedModels:sessionOptions.scopedModels,tools:sessionOptions.tools,excludeTools:sessionOptions.excludeTools,noTools:sessionOptions.noTools,customTools:sessionOptions.customTools,suite:sessionOptions.suite,discoverCapabilityPlugins:parsed.noPlugins?!1:void 0,traceEnabled:parsed.noTrace===!0?!1:void 0,...typeof process.env.OTEL_EXPORTER_OTLP_ENDPOINT=="string"&&process.env.OTEL_EXPORTER_OTLP_ENDPOINT.trim().length>0?{traceOptions:{otlp:{endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT.trim()}}}:{},hostLogger:processHostLogger,...childProfileMode===void 0?{}:{capabilityMode:childProfileMode},...subagentCommunicationWiring===void 0?{}:{subagentCommunicationWiring},subagentPoolFromSelfInvocation:!0,...appMode==="interactive"?{interactionHost:interactionHostSlots.interactive.host}:{},...appMode==="rpc"?{interactionHost:interactionHostSlots.rpc.host}:{}});for(let rejection of created.pluginRejections)diagnostics.push({type:"warning",message:`Capability plugin rejected (${rejection.code}): ${rejection.pluginId??rejection.manifestPath}: ${rejection.message}`});let cliThinkingOverride=parsed.thinking!==void 0||cliThinkingFromModel;if(created.session.model&&cliThinkingOverride&&created.session.setThinkingLevel(created.session.thinkingLevel),childProfile?.tools!==void 0){let narrowed=created.session.getActiveToolNames().filter(name=>childProfile.tools?.includes(name));created.session.setActiveToolsByName(narrowed)}return{...created,services:{...services2,observabilityGetMetricsRef:created.session.observabilityGetMetricsRef},diagnostics,...childProfile===void 0?{}:{childFacts:(()=>{let sessionApi=created.session.getSessionAPI(),systemPromptOptions=sessionApi.getSystemPromptOptions?.();return{activeTools:created.session.getActiveToolNames(),...childProfile?.thinkingLevel===void 0?{}:{thinkingLevel:sessionApi.getThinkingLevel?.()},...systemPromptOptions?.appendSystemPrompt===void 0?{}:{systemPromptAppend:systemPromptOptions.appendSystemPrompt},...created.session.model===void 0?{}:{model:{provider:created.session.model.provider,id:created.session.model.id,contextWindow:created.session.model.contextWindow,maxTokens:created.session.model.maxTokens,reasoning:created.session.model.reasoning}},capabilityMode:created.session.getCapabilityRuntime().host.mode}})()}}};time("createRuntime");function parseSubagentTaskChildProfile(raw){if(raw===void 0)return;let parsed2=parseAgentTaskChildProfileV1(raw);if(!parsed2.ok)throw new Error(`child task profile is invalid: ${parsed2.message}`);return parsed2.profile}if(parsed.subagentRunner===!0){let runnerSessionCwd=sessionManager.getCwd();await runSubagentTaskRunner({input:process.stdin,output:process.stdout,createSession:createSubagentTaskSessionFactoryV1({createSession:async request=>{let childProfile=parseSubagentTaskChildProfile(request.profile),resumeRead=typeof request.resumeSessionId=="string"&&request.resumeSessionId!==""?readAgentSession({agentDir,sessionId:request.resumeSessionId}):void 0;if(typeof request.resumeSessionId=="string"&&request.resumeSessionId!==""&&(resumeRead===void 0||request.parentSessionId===void 0||resumeRead.parentAgentSession!==request.parentSessionId))throw new Error(`resume target ${request.resumeSessionId} is not a persisted child of session ${String(request.parentSessionId)}`);let resumeFilePath=resumeRead!==void 0&&typeof request.resumeSessionId=="string"?findSessionFile2(agentSessionsDir2(agentDir),request.resumeSessionId):void 0,leafIdentity={current:void 0},requireIdentity=()=>{if(leafIdentity.current===void 0)throw new Error("leaf session identity is not bound yet");return leafIdentity.current},leafWiring=request.parentSessionId===void 0?{}:{postEscalate:text=>{createSubagentMailbox({agentDir,ownerParentSessionId:()=>request.parentSessionId}).postEscalate(requireIdentity(),text)},sendSibling:(toSessionId,text)=>{createSubagentMailbox({agentDir,ownerParentSessionId:()=>request.parentSessionId}).postSibling(requireIdentity(),toSessionId,text)},drainInbox:limit=>createSubagentMailbox({agentDir,ownerParentSessionId:()=>request.parentSessionId}).drainInbox(requireIdentity(),limit)},created=await createRuntime({cwd:runnerSessionCwd,agentDir,sessionManager:resumeFilePath!==void 0&&request.resumeSessionId!==void 0?SessionManager.open(resumeFilePath,agentSessionsDir2(agentDir),runnerSessionCwd):SessionManager.create(runnerSessionCwd,agentSessionsDir2(agentDir),{...request.parentSessionId===void 0?{}:{parentAgentSession:request.parentSessionId},...request.parentTraceId===void 0?{}:{parentTraceId:request.parentTraceId},...childProfile?.roleId===void 0?{}:{agentRole:childProfile.roleId}}),...childProfile===void 0?{}:{childProfile},...childProfile?.model===void 0?{}:{childModelId:childProfile.model},...Object.keys(leafWiring).length===0?{}:{subagentCommunicationWiring:leafWiring}}),session2=created.session,sessionApi=session2.getSessionAPI();return leafIdentity.current=sessionApi.getAgentSessionId?.()??sessionApi.getSessionId(),{prompt:text=>session2.prompt(text,{expandPromptTemplates:!1}),abort:reason=>session2.abort(reason),dispose:()=>session2.dispose(),getMessages:()=>sessionApi.getMessages(),getSessionId:()=>sessionApi.getSessionId(),onProgress:createTurnProgressSourceV1(session2),...sessionApi.steer===void 0?{}:{steer:text=>{let steerFn=sessionApi.steer;return steerFn===void 0?Promise.resolve():steerFn.call(sessionApi,text)}},...created.childFacts===void 0?{}:{facts:()=>created.childFacts}}}})}).done;return}let runtime,pendingSuiteSelector;try{runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager})}catch(error2){if(error2 instanceof SuiteRebindError&&(console.error(source_default.red(`Error: ${error2.message}`)),process.exit(1)),!(error2 instanceof SuiteResolutionError))throw error2;appMode!=="interactive"&&(console.error(source_default.red(`Error: ${error2.message}`)),process.exit(1)),pendingSuiteSelector={requestedId:error2.requestedId,available:error2.availableSuiteIds},parsed.suite=void 0,process.env[SUITE_ENV_VAR]===error2.requestedId&&delete process.env[SUITE_ENV_VAR];try{runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager})}catch(retryError){throw retryError instanceof SuiteResolutionError&&(console.error(source_default.red(`Error: ${retryError.message}`)),process.exit(1)),retryError}}time("createAgentSessionRuntime");let{services,session,modelFallbackMessage}=runtime,{settingsManager,modelRuntime}=services;if(setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides()),applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs()),parsed.help&&(reportDiagnostics(startupSettingsDiagnostics),printHelp(),process.exit(0)),parsed.listModels!==void 0){reportDiagnostics(startupSettingsDiagnostics);let searchPattern=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(modelRuntime,searchPattern,AbortSignal.timeout(15e3)),process.exit(0)}let stdinContent;appMode!=="rpc"&&(stdinContent=await readPipedStdin(),stdinContent!==void 0&&appMode==="interactive"&&(appMode="print")),time("readPipedStdin");let{initialMessage,initialImages}=await prepareInitialMessage(parsed,settingsManager.getImageAutoResize(),stdinContent);time("prepareInitialMessage"),initTheme(settingsManager.getTheme(),appMode==="interactive"),time("initTheme"),appMode==="interactive"&&deprecationWarnings.length>0&&await showDeprecationWarnings(deprecationWarnings),time("resolveModelScope");let allStartupDiagnostics=deduplicateDiagnostics([...startupSettingsDiagnostics,...runtime.diagnostics]),startupDiagnostics=filterAcknowledgedSuiteNotices(allStartupDiagnostics,settingsManager);await settingsManager.flush().catch(()=>{});let hasRuntimeErrors=runtime.diagnostics.some(diagnostic5=>diagnostic5.type==="error");if((appMode!=="interactive"||hasRuntimeErrors)&&reportDiagnostics(startupDiagnostics),hasRuntimeErrors&&process.exit(1),appMode==="interactive")for(let rejection of runtime.pluginRejections)console.error(source_default.yellow(`Warning: capability plugin rejected (${rejection.code}): ${rejection.pluginId??rejection.manifestPath}: ${rejection.message}`));time("createAgentSession");let noModelResolved=!session.model||session.model.provider==="unknown"&&session.model.id==="unknown";appMode!=="interactive"&&noModelResolved&&(console.error(source_default.red(modelFallbackMessage??formatNoModelsAvailableMessage())),process.exit(1));let startupBenchmark=isTruthyEnvFlag(process.env.AGENT_FORGE_STARTUP_BENCHMARK);if(startupBenchmark&&appMode!=="interactive"&&(console.error(source_default.red("Error: AGENT_FORGE_STARTUP_BENCHMARK only supports interactive mode")),process.exit(1)),!offlineMode&&appMode==="rpc"){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),15e3);modelRuntime.refresh({signal:controller.signal}).catch(()=>{}).finally(()=>clearTimeout(timeout))}if(appMode==="rpc")printTimings(),await runRpcMode(runtime,{interactionHostSlot:interactionHostSlots.rpc,getMetrics:options2=>runtime.observabilityGetMetricsRef?.current?.(options2)});else if(appMode==="interactive"){let interactiveMode=new InteractiveMode(runtime,{getMetrics:options2=>runtime.observabilityGetMetricsRef?.current?.(options2),migratedProviders,startupDiagnostics,modelFallbackMessage,initialMessage,initialImages,initialMessages:parsed.messages,verbose:parsed.verbose,tuiMode:parsed.tuiMode,initialThemeSetting:parsed.useTheme,pendingSuiteSelector,settingsManager});if(interactionHostSlots.interactive.setTarget(interactiveMode.createInteractionHostV1()),startupBenchmark){await interactiveMode.init(),time("interactiveMode.init"),await new Promise(resolve25=>setTimeout(resolve25,150)),interactiveMode.stop(),stopThemeWatcher(),printTimings(),process.stdout.writableLength>0&&await new Promise(resolve25=>process.stdout.once("drain",resolve25)),process.stderr.writableLength>0&&await new Promise(resolve25=>process.stderr.once("drain",resolve25));return}printTimings(),await interactiveMode.run()}else{printTimings();let exitCode=await runPrintMode(runtime,{mode:toPrintOutputMode(appMode),messages:parsed.messages,initialMessage,initialImages});stopThemeWatcher(),restoreStdout(),exitCode!==0&&(process.exitCode=exitCode);return}}export{getPackageDir,getReadmePath,getDocsPath,getExamplesPath,APP_NAME,CONFIG_DIR_NAME,VERSION,getAgentDir,getSessionsDir,configureHttpDispatcher,Text,Loader,CancellableLoader,Container,SelectList,Spacer,EXPERIMENTAL_PUBLIC_API_VERSION,LifecycleTransformError,LifecycleExecuteError,SUMMARY_MODEL_INVOCATION_ERROR_CODES,createDisposableRegistration,createEventEnvelope,detachedSessionSnapshot,parseCapabilityPluginManifest,MEMORY_RECALL_TOOL_NAME,dist_exports,parseArgs,resolveModelScopeWithDiagnostics,resolveCliModel,getShellConfig,getPowerShellConfig,sanitizeBinaryOutput,killProcessTree,readStoredCredential,CredentialSynchronizationError,ModelRuntime,convertToPng,resizeImage,formatDimensionNote,detectSupportedImageMimeTypeFromFile,stableJsonDigest,buildProfileIdentityV1,profileIdentitiesCompatible,PLUGIN_DISPOSE_EVENT_ID,PLUGIN_DISPOSE_EVENT_VERSION,PLUGIN_READY_EVENT_ID,PLUGIN_READY_EVENT_VERSION,SESSION_CONTEXT_REPLACED_EVENT_ID,SESSION_CONTEXT_REPLACED_EVENT_VERSION,SESSION_RELOAD_EVENT_ID,SESSION_RELOAD_EVENT_VERSION,MODEL_RESPONSE_EVENT_ID,MODEL_RESPONSE_EVENT_VERSION,MODEL_STREAM_EVENT_ID,MODEL_STREAM_EVENT_VERSION,TOOL_RESULT_EVENT_ID,TOOL_RESULT_EVENT_VERSION,TOOL_CALL_EVENT_ID,TOOL_CALL_EVENT_VERSION,TOOL_RESULT_RAW_EVENT_ID,TOOL_RESULT_RAW_EVENT_VERSION,TOOL_EXECUTE_EVENT_ID,TOOL_EXECUTE_EVENT_VERSION,TOOL_COMMIT_EVENT_ID,TOOL_COMMIT_EVENT_VERSION,OPERATION_END_EVENT_ID,OPERATION_END_EVENT_VERSION,validatePluginDisposeEventDataV1,validatePluginReadyEventDataV1,validateSessionContextReplacedEventDataV1,validateSessionReloadEventDataV1,validateModelResponseEventDataV1,validateModelStreamEventDataV1,validateToolResultEventDataV1,validateToolCallEventDataV1,validateToolExecuteEventDataV1,validateToolCommitEventDataV1,validateToolResultRawEventDataV1,TOOL_RESULT_TRANSFORM_EVENT_ID,TOOL_RESULT_TRANSFORM_EVENT_VERSION,validateToolResultTransformEventDataV1,validateOperationEndEventDataV1,CAPABILITY_CALL_EVENT_ID,CAPABILITY_CALL_EVENT_VERSION,validateCapabilityCallEventDataV1,OPERATION_START_EVENT_ID,OPERATION_START_EVENT_VERSION,OPERATION_STEP_EVENT_ID,OPERATION_STEP_EVENT_VERSION,validateOperationStartEventDataV1,validateOperationStepEventDataV1,OPERATION_CANCEL_EVENT_ID,OPERATION_CANCEL_EVENT_VERSION,validateOperationCancelEventDataV1,discoverCapabilityPluginManifests,loadCapabilityPlugin,loadCapabilityPluginSync,loadCapabilityPluginFromManifest,ecosystem_exports,assembleProfile,replaceProfilePlugin,listBuiltinPluginProfilesV1,listBuiltinPluginManifestsV1,resolveBuiltinPluginProfileV1,plugin_manager_controller_exports,DurableServiceErrorV1,durableLogPath,createFileDurableStoreBackend,createDurableService,projectSessionTranscript,CodingAgentSessionRuntime,CodingAgentServerService,assembleCodingAgentServer,DEFAULT_SUITE_ID,isBuiltinSuiteId,buildResolvedAgentProfileV1,parseFrontmatter,stripFrontmatter,createSyntheticSourceInfo,loadSkillsFromDir,formatSkillsForPrompt,loadSkills,createProfileLock,verifyProfileLock,replaceProfileLock,createProfileRegistry,SuiteResolutionError,listSuiteIds,BOOTSTRAP_LIFECYCLE_PLUGIN_ID,SESSION_COMPACTION_COMMIT_EVENT_ID,SESSION_COMPACTION_COMMIT_EVENT_VERSION,validateSessionCompactionCommitEventDataV1,installBootstrapLifecycle,defineTool,AgentCompositionRuntime,createAgentCompositionRuntime,convertToLlm2 as convertToLlm,SessionHeaderScanLimitError,FileSessionStorageProvider,CURRENT_SESSION_VERSION,migrateSessionEntries,parseSessionEntries,getLatestCompactionEntry,sessionEntryToContextMessages,buildContextEntries,buildSessionContext2 as buildSessionContext,SessionManager,serializeConversation2 as serializeConversation,DEFAULT_COMPACTION_SETTINGS2 as DEFAULT_COMPACTION_SETTINGS,calculateContextTokens2 as calculateContextTokens,getLastAssistantUsage2 as getLastAssistantUsage,shouldCompact2 as shouldCompact,estimateTokens2 as estimateTokens,findTurnStartIndex2 as findTurnStartIndex,findCutPoint2 as findCutPoint,generateSummary2 as generateSummary,generateSummaryWithUsage2 as generateSummaryWithUsage,compact2 as compact,collectEntriesForBranchSummary2 as collectEntriesForBranchSummary,prepareBranchEntries2 as prepareBranchEntries,generateBranchSummary2 as generateBranchSummary,BOOTSTRAP_COMPACTION_PLUGIN_ID,DEFAULT_COMPACTION_POLICY_NAME,installBootstrapCompactionPolicy,BOOTSTRAP_RETRY_PLUGIN_ID,DEFAULT_RETRY_POLICY_NAME,installBootstrapRetryPolicy,Theme,getAvailableThemes,initTheme,highlightCode,getLanguageFromPath,getMarkdownTheme,getSelectListTheme,getSettingsListTheme,keyText,keyHint,rawKeyHint,truncateToVisualLines,DEFAULT_MAX_LINES2 as DEFAULT_MAX_LINES,DEFAULT_MAX_BYTES3 as DEFAULT_MAX_BYTES,formatSize2 as formatSize,truncateHead2 as truncateHead,truncateTail2 as truncateTail,truncateLine,createLocalBashOperations,createBashToolDefinition,createBashTool2 as createBashTool,renderDiff,generateUnifiedPatch2 as generateUnifiedPatch,generateDiffString2 as generateDiffString,withFileMutationQueue2 as withFileMutationQueue,createEditToolDefinition,createEditTool2 as createEditTool,createFindToolDefinition,createFindTool,createGrepToolDefinition,createGrepTool,createLsToolDefinition,createLsTool,createLocalPowerShellOperations,createPowerShellToolDefinition,createPowerShellTool,createReadToolDefinition,createReadTool2 as createReadTool,createWriteToolDefinition,createWriteTool2 as createWriteTool,createCodingTools,createReadOnlyTools,BOOTSTRAP_TOOLS_PLUGIN_ID,installBootstrapTools,installSessionBootstrapTools,resolvePluginCapabilityOrder,validateExecutionFactsV1,validateRetryScheduleV1,createCapabilityRuntime,parseSkillBlock,AgentSession,DefaultPackageManager,SettingsManager,loadProjectContextFiles,DefaultResourceLoader,createAgentSessionServices,createAgentSessionFromServices,AgentSessionRuntime,createAgentSessionRuntime,createAgentSession,createStableAgentSession,createStableAgentSessionRuntime,createFileSessionSource,startCodingAgentRemoteServer,DynamicBorder,SessionSelectorComponent,DialogInputComponent,DialogSelectorComponent,createProfileMigrationPolicy,SUITE_DELETE_CONFIRM_TOKEN,SuiteLifecycleError,createSuite,findSuiteSessionRefs,deleteSuite,resetSuite,clearDanglingSuiteSettings,copyToClipboard,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BranchSummaryMessageComponent,CompactionSummaryMessageComponent,CustomEditor,CustomMessageComponent,FooterComponent,SettingsSelectorComponent,SkillInvocationMessageComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,LoginDialogComponent,OAuthSelectorComponent,DialogEditorComponent,ModelSelectorComponent,ThinkingSelectorComponent,UserMessageSelectorComponent,InteractiveMode,createStdioChannelAdapter,createHostOutputProjector,runPrintMode,RpcClient,runRpcMode,PluginManagerEntryComponent,plugin_selection_controller_exports,main};
1579
+ `),console.log(plan.diffText),process.stdin.isTTY||(console.error(source_default.red(`Refusing to reset suite "${id}" without an interactive confirmation (non-interactive stdin). Review the diff above and re-run in a terminal to confirm.`)),process.exit(1)),await promptConfirm(`Apply reset of suite "${id}"?`)||(console.log(`Aborted: suite "${id}" was not reset.`),process.exit(1));let result=plan.apply();console.log(`Suite "${id}" was reset to the factory contents (profile lock generation ${result.lock.generation}).`)}catch(error2){printSuiteLifecycleError(error2),process.exit(1)}process.exit(0)}}function validateForkFlags(parsed){if(!parsed.fork)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --fork cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateSessionIdFlags(parsed){if(parsed.sessionId===void 0)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}. To resume that exact session, drop the other flags and use --session-id alone (or use --continue to resume the most recent session).`)),process.exit(1));try{assertValidSessionId(parsed.sessionId)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function openSessionOrExit(path15,sessionDir){try{return SessionManager.open(path15,sessionDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function forkSessionOrExit(sourcePath,cwd,sessionDir,sessionId){try{return SessionManager.forkFrom(sourcePath,cwd,sessionDir,{id:sessionId})}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}async function createSessionManager(parsed,cwd,sessionDir,settingsManager){if(parsed.noSession||parsed.help||parsed.listModels!==void 0)return SessionManager.inMemory(cwd,parsed.sessionId!==void 0?{id:parsed.sessionId}:void 0);if(parsed.fork){parsed.sessionId&&await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir)&&(console.error(source_default.red(`Session already exists with id '${parsed.sessionId}'`)),process.exit(1));let resolved=await resolveSessionPath(parsed.fork,cwd,sessionDir);switch(resolved.type){case"path":case"local":case"global":return forkSessionOrExit(resolved.path,cwd,sessionDir,parsed.sessionId);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.session){let resolved=await resolveSessionPath(parsed.session,cwd,sessionDir);switch(resolved.type){case"path":case"local":return openSessionOrExit(resolved.path,sessionDir);case"global":return console.log(source_default.yellow(`Session found in different project: ${resolved.cwd}`)),await promptConfirm("Fork this session into current directory?")||(console.log(source_default.dim("Aborted.")),process.exit(0)),forkSessionOrExit(resolved.path,cwd,sessionDir);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.resume)try{let selectedPath=await selectSession(onProgress=>SessionManager.list(cwd,sessionDir,onProgress),onProgress=>SessionManager.listAll(sessionDir,onProgress),settingsManager);return selectedPath||(console.log(source_default.dim("No session selected")),process.exit(0)),SessionManager.open(selectedPath,sessionDir)}finally{stopThemeWatcher()}if(parsed.continue)return SessionManager.continueRecent(cwd,sessionDir);if(parsed.sessionId){let existingSession=await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir);if(existingSession)return SessionManager.open(existingSession.path,sessionDir);console.error(source_default.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`))}return SessionManager.create(cwd,sessionDir,{id:parsed.sessionId})}function buildSessionOptions(parsed,scopedModels,hasExistingSession,modelRuntime,settingsManager){let options={};parsed.rebindSuite&&(options.allowSuiteRebind=!0);let diagnostics=[],cliThinkingFromModel=!1;if(parsed.model){let resolved=resolveCliModel({cliProvider:parsed.provider,cliModel:parsed.model,cliThinking:parsed.thinking,modelRuntime});resolved.warning&&diagnostics.push({type:"warning",message:resolved.warning}),resolved.error&&diagnostics.push({type:"error",message:resolved.error}),resolved.model&&(options.model=resolved.model,!parsed.thinking&&resolved.thinkingLevel&&(options.thinkingLevel=resolved.thinkingLevel,cliThinkingFromModel=!0))}if(!options.model&&scopedModels.length>0&&!hasExistingSession){let savedProvider=settingsManager.getDefaultProvider(),savedModelId=settingsManager.getDefaultModel(),savedModel=savedProvider&&savedModelId?modelRuntime.getModel(savedProvider,savedModelId):void 0,savedInScope=savedModel?scopedModels.find(sm=>modelsAreEqual(sm.model,savedModel)):void 0;savedInScope?(options.model=savedInScope.model,!parsed.thinking&&savedInScope.thinkingLevel&&(options.thinkingLevel=savedInScope.thinkingLevel)):(options.model=scopedModels[0].model,!parsed.thinking&&scopedModels[0].thinkingLevel&&(options.thinkingLevel=scopedModels[0].thinkingLevel))}return parsed.thinking&&(options.thinkingLevel=parsed.thinking),scopedModels.length>0&&(options.scopedModels=scopedModels.map(sm=>({model:sm.model,thinkingLevel:sm.thinkingLevel}))),parsed.noTools?options.noTools="all":parsed.noBuiltinTools&&(options.noTools="builtin"),parsed.tools&&(options.tools=[...parsed.tools]),parsed.excludeTools&&(options.excludeTools=[...parsed.excludeTools]),parsed.suite&&(options.suite=parsed.suite),{options,cliThinkingFromModel,diagnostics}}function resolveCliPaths(cwd,paths){return paths?.map(value=>isLocalPath(value)?resolvePath(value,cwd):value)}async function promptForMissingSessionCwd(issue,settingsManager){return showStartupSelector(settingsManager,formatMissingSessionCwdPrompt(issue),[{label:"Continue",value:issue.fallbackCwd},{label:"Cancel",value:void 0}])}function isBuiltinPluginProfileId(value){return listBuiltinPluginProfilesV1().some(profile=>profile.id===value)}function selectionDiagnostics(status2,diagnostics){return diagnostics.map(item=>({type:"error",message:`Plugin selection ${status2} (${item.code}): ${item.message}`}))}async function resolveCliPluginSelection(parsed,agentDir,cwd){if(!(parsed.pluginProfile!==void 0||parsed.plugins!==void 0||parsed.disabledPlugins!==void 0||parsed.pluginSelectionScope!==void 0)||parsed.noPlugins)return{diagnostics:[]};if(parsed.pluginProfile===void 0&&parsed.plugins===void 0&&parsed.disabledPlugins===void 0)return{diagnostics:[{type:"error",message:"--plugin-scope requires an explicit plugin selection"}]};let diagnostics=[],selectionPath=(parsed.pluginSelectionScope??"global")==="project"?join68(cwd,CONFIG_DIR_NAME,".plugin-selection.json"):join68(agentDir,".plugin-selection.json"),store=createPluginSelectionStoreV1({filePath:selectionPath}),persistedResult;try{persistedResult=await store.read()}catch{return diagnostics.push({type:"error",message:"Plugin selection could not be read"}),{diagnostics}}if(persistedResult.status==="invalid"||persistedResult.status==="cancelled")return diagnostics.push(...selectionDiagnostics(persistedResult.status,persistedResult.diagnostics)),{diagnostics};let explicitProfileId=parsed.pluginProfile,profileId;if(explicitProfileId!==void 0){if(!isBuiltinPluginProfileId(explicitProfileId))return diagnostics.push({type:"error",message:`Unknown plugin profile: ${explicitProfileId}`}),{diagnostics};profileId=explicitProfileId}let persistedSelection2;if(profileId!==void 0)persistedSelection2=persistedResult.snapshot.selections.find(selection=>selection.profileId===profileId);else if(parsed.plugins!==void 0||parsed.disabledPlugins!==void 0){if(persistedResult.snapshot.selections.length!==1)return diagnostics.push({type:"error",message:persistedResult.snapshot.selections.length===0?"--plugin/--disable-plugin requires --plugin-profile or one persisted plugin profile":"--plugin/--disable-plugin requires --plugin-profile when multiple persisted profiles exist"}),{diagnostics};if(persistedSelection2=persistedResult.snapshot.selections[0],persistedSelection2!==void 0&&isBuiltinPluginProfileId(persistedSelection2.profileId))profileId=persistedSelection2.profileId;else return diagnostics.push({type:"error",message:`Unknown persisted plugin profile: ${persistedSelection2?.profileId??""}`}),{diagnostics}}return{...profileId===void 0?{}:{profileId},...parsed.plugins!==void 0?{selectedPluginIds:Object.freeze([...parsed.plugins])}:persistedSelection2===void 0?{}:{selectedPluginIds:persistedSelection2.selectedPluginIds},...parsed.disabledPlugins!==void 0?{disabledPluginIds:Object.freeze([...parsed.disabledPlugins])}:persistedSelection2===void 0?{}:{disabledPluginIds:persistedSelection2.disabledPluginIds},diagnostics}}async function main(args,options){resetTimings();let offlineMode=args.includes("--offline")||isTruthyEnvFlag(process.env.AGENT_FORGE_OFFLINE);if(offlineMode&&(process.env.AGENT_FORGE_OFFLINE="1",process.env.AGENT_FORGE_SKIP_VERSION_CHECK="1"),await runAuthCommand(args)||await handlePluginEcosystemCommand(args))return;process.platform==="win32"&&cleanupWindowsSelfUpdateQuarantine(getPackageDir()),cleanupManagedInstall();let cwd=process.cwd(),agentDir=getAgentDir(),bootstrapSettingsManager=SettingsManager.create(cwd,agentDir);if(applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(),await handlePackageCommand(args)){let exitCode=process.exitCode??0;if(process.platform==="win32"&&exitCode===0&&args[0]==="update")return;process.exit(exitCode);return}let configCommandOptions=options?.pluginManagerController===void 0&&options?.projectPluginManagerController===void 0?void 0:{...options?.pluginManagerController===void 0?{}:{pluginManagerController:options.pluginManagerController},...options?.projectPluginManagerController===void 0?{}:{projectPluginManagerController:options.projectPluginManagerController}};if(await handleConfigCommand(args,configCommandOptions))return;let parsed=parseArgs(args);if(parsed.diagnostics.length>0){for(let d2 of parsed.diagnostics){let color=d2.type==="error"?source_default.red:source_default.yellow;console.error(color(`${d2.type==="error"?"Error":"Warning"}: ${d2.message}`))}parsed.diagnostics.some(d2=>d2.type==="error")&&process.exit(1)}time("parseArgs");let envLogLevel=process.env.AGENT_FORGE_LOG_LEVEL,hostLogLevel=parsed.logLevel??(envLogLevel!==void 0&&isValidHostLogLevel(envLogLevel)?envLogLevel:void 0),rawLogMaxAgeDays=process.env.AGENT_FORGE_LOG_MAX_AGE_DAYS,hostLogMaxAgeDays=rawLogMaxAgeDays!==void 0&&/^\d+$/.test(rawLogMaxAgeDays)?Number.parseInt(rawLogMaxAgeDays,10):void 0;processHostLogger===void 0&&(processHostLogger=createHostLogger({dir:join68(agentDir,"logs"),...hostLogLevel===void 0?{}:{level:hostLogLevel},...hostLogMaxAgeDays===void 0?{}:{maxAgeDays:hostLogMaxAgeDays}}));let rawTraceMaxAgeDays=process.env.AGENT_FORGE_TRACE_MAX_AGE_DAYS,traceMaxAgeDays=rawTraceMaxAgeDays!==void 0&&/^\d+$/.test(rawTraceMaxAgeDays)?Number.parseInt(rawTraceMaxAgeDays,10):0;if(traceMaxAgeDays>0){let traceSweep=sweepTraceFiles(getSessionsDir(),{maxAgeDays:traceMaxAgeDays,now:Date.now});traceSweep.deleted>0&&processHostLogger.info("retention","trace sweep removed expired trace files",{fields:{deleted:traceSweep.deleted,failed:traceSweep.failed}}),traceSweep.failed>0&&processHostLogger.warn("retention","trace sweep finished with failures",{fields:{deleted:traceSweep.deleted,failed:traceSweep.failed}})}if(parsed.version&&(console.log(VERSION),process.exit(0)),parsed.export){let result;try{let outputPath=parsed.messages.length>0?parsed.messages[0]:void 0;result=await exportFromFile(parsed.export,outputPath)}catch(error2){let message=error2 instanceof Error?error2.message:"Failed to export session";console.error(source_default.red(`Error: ${message}`)),process.exit(1)}console.log(`Exported to: ${result}`),process.exit(0)}if(parsed.trace!==void 0){let envSessionDir2=process.env[ENV_SESSION_DIR],sessionDir2=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir2?expandTildePath(envSessionDir2):void 0)??bootstrapSettingsManager.getSessionDir(),result=await runTraceView(parsed.trace,{json:parsed.traceJson===!0,cwd,...sessionDir2===void 0?{}:{sessionDir:sessionDir2},...parsed.traceKind===void 0?{}:{kinds:parsed.traceKind},...parsed.traceLimit===void 0?{}:{limit:parsed.traceLimit}});result.ok||(console.error(source_default.red(`Error: ${result.message}`)),process.exit(1)),process.exit(0)}if(parsed.serve!==void 0){if(parsed.help||parsed.listModels!==void 0){runMigrations(cwd),reportDiagnostics(collectSettingsDiagnostics(bootstrapSettingsManager)),parsed.help&&(printHelp(),process.exit(0));let modelRuntime2=await ModelRuntime.create({signal:AbortSignal.timeout(15e3)}),searchPattern=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(modelRuntime2,searchPattern,AbortSignal.timeout(15e3)),process.exit(0)}let conflictingFlags=[parsed.print?"--print":void 0,parsed.messages.length>0?"positional args":void 0,parsed.fileArgs.length>0?"@file args":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.session?"--session":void 0,parsed.sessionId?"--session-id":void 0,parsed.fork?"--fork":void 0,parsed.noSession?"--no-session":void 0,parsed.mode?"--mode":void 0,parsed.suiteCreate?"--suite-create":void 0,parsed.suiteDelete?"--suite-delete":void 0,parsed.suiteReset?"--suite-reset":void 0,parsed.cloneFrom?"--clone-from":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --serve cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1));let ignoredFlags=[["--name",parsed.name!==void 0],["--thinking",parsed.thinking!==void 0],["--provider",parsed.provider!==void 0],["--model",parsed.model!==void 0],["--api-key",parsed.apiKey!==void 0],["--models",(parsed.models?.length??0)>0],["--verbose",parsed.verbose===!0],["--tui-mode",parsed.tuiMode!==void 0],["--suite",parsed.suite!==void 0],["--tools",(parsed.tools?.length??0)>0],["--exclude-tools",(parsed.excludeTools?.length??0)>0],["--no-tools",parsed.noTools===!0],["--no-builtin-tools",parsed.noBuiltinTools===!0],["--skill",(parsed.skills?.length??0)>0],["--prompt-template",(parsed.promptTemplates?.length??0)>0],["--no-prompt-templates",parsed.noPromptTemplates===!0],["--theme",(parsed.themes?.length??0)>0],["--use-theme",parsed.useTheme!==void 0],["--no-themes",parsed.noThemes===!0],["--no-context-files",parsed.noContextFiles===!0],["--no-skills",parsed.noSkills===!0],["--no-plugins",parsed.noPlugins===!0],["--no-trace",parsed.noTrace===!0],["--plugin-profile",parsed.pluginProfile!==void 0],["--plugin",(parsed.plugins?.length??0)>0],["--disable-plugin",(parsed.disabledPlugins?.length??0)>0],["--system-prompt",parsed.systemPrompt!==void 0],["--append-system-prompt",(parsed.appendSystemPrompt?.length??0)>0]].flatMap(([flag,passed])=>passed?[flag]:[]);ignoredFlags.length>0&&console.warn(source_default.yellow(`--serve ignores session/model/tool options: ${ignoredFlags.join(", ")}`)),await runServeMode(parsed.serve,{...parsed.serveWorkspaceRoots===void 0?{}:{workspaceRoots:parsed.serveWorkspaceRoots},...parsed.sessionDir===void 0?{}:{sessionDir:parsed.sessionDir},...processHostLogger===void 0?{}:{hostLogger:processHostLogger}});return}await handleSuiteLifecycleCommands(parsed,cwd,agentDir),sweepSuiteTrash(agentDir).catch(()=>{});let appMode=resolveAppMode(parsed,process.stdin.isTTY,process.stdout.isTTY);parsed.subagentRunner!==!0&&appMode!=="interactive"&&!isPlainRuntimeMetadataCommand(parsed)&&takeOverStdout(),parsed.mode==="rpc"&&parsed.fileArgs.length>0&&(console.error(source_default.red("Error: @file arguments are not supported in RPC mode")),process.exit(1)),validateForkFlags(parsed),validateSessionIdFlags(parsed);let{migratedAuthProviders:migratedProviders,deprecationWarnings}=runMigrations(cwd);time("runMigrations");let startupSettingsManager=SettingsManager.create(cwd,agentDir),startupSettingsDiagnostics=collectSettingsDiagnostics(startupSettingsManager);appMode==="interactive"&&!parsed.help&&parsed.listModels===void 0&&shouldRunFirstTimeSetup()&&(await showFirstTimeSetup(startupSettingsManager),time("firstTimeSetup")),appMode==="interactive"&&parsed.useTheme!==void 0&&startupSettingsManager.applyOverrides({theme:parsed.useTheme});let envSessionDir=process.env[ENV_SESSION_DIR],sessionDir=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir?expandTildePath(envSessionDir):void 0)??startupSettingsManager.getSessionDir(),sessionManager=await createSessionManager(parsed,cwd,sessionDir,startupSettingsManager),missingSessionCwdIssue=getMissingSessionCwdIssue(sessionManager,cwd);if(missingSessionCwdIssue)if(appMode==="interactive"){let selectedCwd=await promptForMissingSessionCwd(missingSessionCwdIssue,startupSettingsManager);selectedCwd||process.exit(0),sessionManager=SessionManager.open(missingSessionCwdIssue.sessionFile,sessionDir,selectedCwd)}else console.error(source_default.red(new MissingSessionCwdError(missingSessionCwdIssue).message)),process.exit(1);if(parsed.name!==void 0){let name=normalizeSessionName(parsed.name);name===void 0&&(console.error(source_default.red("Error: --name requires a non-empty value")),process.exit(1)),sessionManager.appendSessionInfo(name)}time("createSessionManager");let cliPluginSelection=await resolveCliPluginSelection(parsed,agentDir,sessionManager.getCwd()),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes),createInteractionHostSlot=()=>{let target;return{host:{notify:request=>target?.notify(request),prompt:(request,context)=>target?target.prompt(request,context):Promise.resolve({status:"unavailable"})},setTarget:next=>{target=next}}},interactionHostSlots={interactive:createInteractionHostSlot(),rpc:createInteractionHostSlot()},startupPluginBootstrap,runStartupPluginBootstrap=bootstrapCwd=>(startupPluginBootstrap??=runNodePluginBootstrapV1({agentDir,cwd:bootstrapCwd}).catch(error2=>({version:1,status:"failed",actions:[],diagnostics:[{code:"bootstrap_failed",message:`Startup plugin bootstrap failed: ${error2 instanceof Error?error2.message:String(error2)}`}],durationMs:0})),startupPluginBootstrap),createRuntime=async({cwd:cwd2,agentDir:agentDir2,sessionManager:sessionManager2,childProfile,childModelId,subagentCommunicationWiring})=>{let runtimeSettingsManager=SettingsManager.create(cwd2,agentDir2);if(!parsed.noPlugins){let bootstrapResult=await runStartupPluginBootstrap(cwd2);for(let diagnostic5 of bootstrapResult.diagnostics)console.error(source_default.yellow(`Plugin bootstrap ${diagnostic5.code}: ${diagnostic5.message}`))}let resolveActivePluginBindings=options?.resolveActivePluginBindings??createDefaultActivePluginBindingsResolverV1(),activeBindings,pluginBindingDiagnostics=[];if(!parsed.noPlugins&&options?.manifestOverrides===void 0)try{let resolvedBindings=await resolveActivePluginBindings({cwd:cwd2,agentDir:agentDir2});activeBindings=resolvedBindings,pluginBindingDiagnostics=resolvedBindings.diagnostics.map(item=>({type:resolvedBindings.status==="unavailable"?"warning":"info",message:`Active plugin binding ${item.code}: ${item.message}`}))}catch{pluginBindingDiagnostics=[{type:"error",message:"Active plugin binding resolver failed; no installed version was selected"}]}let activeManifestOverrides=activeBindings?.status==="ready"?activeBindings.manifestOverrides:void 0,activeVerifiedPlugins=activeBindings?.status==="ready"?activeBindings.verifiedPlugins:void 0,activeInstalledCapabilityPlugins=activeBindings?.status==="ready"?[...activeBindings.installedManifestPaths].map(([pluginId,manifestPath])=>({pluginId,manifestPath})):void 0,pluginHost=options?.pluginHost??(parsed.noPlugins||cliPluginSelection.profileId===void 0&&activeBindings===void 0?void 0:defaultPluginHostFactsV1()),verifiedPlugins=options?.verifiedPlugins??(cliPluginSelection.profileId===void 0?activeVerifiedPlugins:[...defaultBuiltinVerifiedPluginsV1(cliPluginSelection.profileId).filter(builtin=>!activeVerifiedPlugins?.some(active=>active.pluginId===builtin.pluginId&&active.version===builtin.version)),...activeVerifiedPlugins??[]]),services2=await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager:runtimeSettingsManager,modelRuntimeSignal:AbortSignal.timeout(15e3),suite:parsed.suite,suiteAssembly:!0,...parsed.noPlugins||cliPluginSelection.profileId===void 0?{}:{pluginProfileId:cliPluginSelection.profileId},...parsed.noPlugins||cliPluginSelection.selectedPluginIds===void 0?{}:{selectedPluginIds:cliPluginSelection.selectedPluginIds},...parsed.noPlugins||cliPluginSelection.disabledPluginIds===void 0?{}:{disabledPluginIds:cliPluginSelection.disabledPluginIds},...parsed.noPlugins||pluginHost===void 0?{}:{pluginHost},...parsed.noPlugins||verifiedPlugins===void 0?{}:{verifiedPlugins},...parsed.noPlugins||options?.manifestOverrides===void 0?activeManifestOverrides===void 0?{}:{manifestOverrides:activeManifestOverrides}:{manifestOverrides:options.manifestOverrides},...parsed.noPlugins||activeInstalledCapabilityPlugins===void 0?{}:{installedCapabilityPlugins:activeInstalledCapabilityPlugins},...pluginBindingDiagnostics.length===0?{}:{pluginBindingDiagnostics},resourceLoaderOptions:{additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,systemPrompt:parsed.systemPrompt,appendSystemPrompt:[...parsed.appendSystemPrompt??[],...childProfile?.systemPromptAppend===void 0?[]:[childProfile.systemPromptAppend]]}}),{settingsManager:settingsManager2,modelRuntime:modelRuntime2}=services2,diagnostics=[...cliPluginSelection.diagnostics,...services2.diagnostics,...collectSettingsDiagnostics(settingsManager2)],modelPatterns=parsed.models??settingsManager2.getEnabledModels(),scopedModels=modelPatterns&&modelPatterns.length>0?await resolveModelScope(modelPatterns,modelRuntime2,{signal:AbortSignal.timeout(15e3)}):[],profileModel=childModelId===void 0?void 0:(()=>{let entry=scopedModels.find(candidate=>candidate.model.id===childModelId);if(entry===void 0){let available=scopedModels.map(candidate=>candidate.model.id).sort();throw new Error(`agent task child profile model ${JSON.stringify(childModelId)} is not among the runner's scoped models`+(available.length===0?" (none configured)":`; available: ${available.join(", ")}`))}return entry.model})(),sessionContext=sessionManager2.buildSessionContext(),{options:sessionOptions,cliThinkingFromModel,diagnostics:sessionOptionDiagnostics}=buildSessionOptions(parsed,scopedModels,sessionContext.messages.length>0,modelRuntime2,settingsManager2);diagnostics.push(...sessionOptionDiagnostics);let resumedSessionModel=(()=>{if(sessionOptions.model)return;let persisted=sessionContext.model;if(persisted)return modelRuntime2.getModel(persisted.provider,persisted.modelId)??void 0})();parsed.apiKey&&(sessionOptions.model?await modelRuntime2.setRuntimeApiKey(sessionOptions.model.provider,parsed.apiKey):diagnostics.push({type:"error",message:"--api-key requires a model to be specified via --model, --provider/--model, or --models"}));let childProfileMode=childProfile!==void 0&&childProfile.mode==="readonly"&&parsed.subagentRunner===!0?"readonly":void 0,created=await createAgentSessionFromServices({services:services2,sessionManager:sessionManager2,model:profileModel??sessionOptions.model??resumedSessionModel,thinkingLevel:childProfile?.thinkingLevel??sessionOptions.thinkingLevel,scopedModels:sessionOptions.scopedModels,tools:sessionOptions.tools,excludeTools:sessionOptions.excludeTools,noTools:sessionOptions.noTools,customTools:sessionOptions.customTools,suite:sessionOptions.suite,discoverCapabilityPlugins:parsed.noPlugins?!1:void 0,traceEnabled:parsed.noTrace===!0?!1:void 0,...typeof process.env.OTEL_EXPORTER_OTLP_ENDPOINT=="string"&&process.env.OTEL_EXPORTER_OTLP_ENDPOINT.trim().length>0?{traceOptions:{otlp:{endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT.trim()}}}:{},hostLogger:processHostLogger,...childProfileMode===void 0?{}:{capabilityMode:childProfileMode},...subagentCommunicationWiring===void 0?{}:{subagentCommunicationWiring},subagentPoolFromSelfInvocation:!0,...appMode==="interactive"?{interactionHost:interactionHostSlots.interactive.host}:{},...appMode==="rpc"?{interactionHost:interactionHostSlots.rpc.host}:{}});for(let rejection of created.pluginRejections)diagnostics.push({type:"warning",message:`Capability plugin rejected (${rejection.code}): ${rejection.pluginId??rejection.manifestPath}: ${rejection.message}`});let cliThinkingOverride=parsed.thinking!==void 0||cliThinkingFromModel;if(created.session.model&&cliThinkingOverride&&created.session.setThinkingLevel(created.session.thinkingLevel),childProfile?.tools!==void 0){let narrowed=created.session.getActiveToolNames().filter(name=>childProfile.tools?.includes(name));created.session.setActiveToolsByName(narrowed)}return{...created,services:{...services2,observabilityGetMetricsRef:created.session.observabilityGetMetricsRef},diagnostics,...childProfile===void 0?{}:{childFacts:(()=>{let sessionApi=created.session.getSessionAPI(),systemPromptOptions=sessionApi.getSystemPromptOptions?.();return{activeTools:created.session.getActiveToolNames(),...childProfile?.thinkingLevel===void 0?{}:{thinkingLevel:sessionApi.getThinkingLevel?.()},...systemPromptOptions?.appendSystemPrompt===void 0?{}:{systemPromptAppend:systemPromptOptions.appendSystemPrompt},...created.session.model===void 0?{}:{model:{provider:created.session.model.provider,id:created.session.model.id,contextWindow:created.session.model.contextWindow,maxTokens:created.session.model.maxTokens,reasoning:created.session.model.reasoning}},capabilityMode:created.session.getCapabilityRuntime().host.mode}})()}}};time("createRuntime");function parseSubagentTaskChildProfile(raw){if(raw===void 0)return;let parsed2=parseAgentTaskChildProfileV1(raw);if(!parsed2.ok)throw new Error(`child task profile is invalid: ${parsed2.message}`);return parsed2.profile}if(parsed.subagentRunner===!0){let runnerSessionCwd=sessionManager.getCwd();await runSubagentTaskRunner({input:process.stdin,output:process.stdout,createSession:createSubagentTaskSessionFactoryV1({createSession:async request=>{let childProfile=parseSubagentTaskChildProfile(request.profile),resumeRead=typeof request.resumeSessionId=="string"&&request.resumeSessionId!==""?readAgentSession({agentDir,sessionId:request.resumeSessionId}):void 0;if(typeof request.resumeSessionId=="string"&&request.resumeSessionId!==""&&(resumeRead===void 0||request.parentSessionId===void 0||resumeRead.parentAgentSession!==request.parentSessionId))throw new Error(`resume target ${request.resumeSessionId} is not a persisted child of session ${String(request.parentSessionId)}`);let resumeFilePath=resumeRead!==void 0&&typeof request.resumeSessionId=="string"?findSessionFile2(agentSessionsDir2(agentDir),request.resumeSessionId):void 0,leafIdentity={current:void 0},requireIdentity=()=>{if(leafIdentity.current===void 0)throw new Error("leaf session identity is not bound yet");return leafIdentity.current},leafWiring=request.parentSessionId===void 0?{}:{postEscalate:text=>{createSubagentMailbox({agentDir,ownerParentSessionId:()=>request.parentSessionId}).postEscalate(requireIdentity(),text)},sendSibling:(toSessionId,text)=>{createSubagentMailbox({agentDir,ownerParentSessionId:()=>request.parentSessionId}).postSibling(requireIdentity(),toSessionId,text)},drainInbox:limit=>createSubagentMailbox({agentDir,ownerParentSessionId:()=>request.parentSessionId}).drainInbox(requireIdentity(),limit)},created=await createRuntime({cwd:runnerSessionCwd,agentDir,sessionManager:resumeFilePath!==void 0&&request.resumeSessionId!==void 0?SessionManager.open(resumeFilePath,agentSessionsDir2(agentDir),runnerSessionCwd):SessionManager.create(runnerSessionCwd,agentSessionsDir2(agentDir),{...request.parentSessionId===void 0?{}:{parentAgentSession:request.parentSessionId},...request.parentTraceId===void 0?{}:{parentTraceId:request.parentTraceId},...childProfile?.roleId===void 0?{}:{agentRole:childProfile.roleId}}),...childProfile===void 0?{}:{childProfile},...childProfile?.model===void 0?{}:{childModelId:childProfile.model},...Object.keys(leafWiring).length===0?{}:{subagentCommunicationWiring:leafWiring}}),session2=created.session,sessionApi=session2.getSessionAPI();return leafIdentity.current=sessionApi.getAgentSessionId?.()??sessionApi.getSessionId(),{prompt:text=>session2.prompt(text,{expandPromptTemplates:!1}),abort:reason=>session2.abort(reason),dispose:()=>session2.dispose(),getMessages:()=>sessionApi.getMessages(),getSessionId:()=>sessionApi.getSessionId(),onProgress:createTurnProgressSourceV1(session2),...sessionApi.steer===void 0?{}:{steer:text=>{let steerFn=sessionApi.steer;return steerFn===void 0?Promise.resolve():steerFn.call(sessionApi,text)}},...created.childFacts===void 0?{}:{facts:()=>created.childFacts}}}})}).done;return}let runtime,pendingSuiteSelector;try{runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager})}catch(error2){if(error2 instanceof SuiteRebindError&&(console.error(source_default.red(`Error: ${error2.message}`)),process.exit(1)),!(error2 instanceof SuiteResolutionError))throw error2;appMode!=="interactive"&&(console.error(source_default.red(`Error: ${error2.message}`)),process.exit(1)),pendingSuiteSelector={requestedId:error2.requestedId,available:error2.availableSuiteIds},parsed.suite=void 0,process.env[SUITE_ENV_VAR]===error2.requestedId&&delete process.env[SUITE_ENV_VAR];try{runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager})}catch(retryError){throw retryError instanceof SuiteResolutionError&&(console.error(source_default.red(`Error: ${retryError.message}`)),process.exit(1)),retryError}}time("createAgentSessionRuntime");let{services,session,modelFallbackMessage}=runtime,{settingsManager,modelRuntime}=services;if(setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides()),applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs()),parsed.help&&(reportDiagnostics(startupSettingsDiagnostics),printHelp(),process.exit(0)),parsed.listModels!==void 0){reportDiagnostics(startupSettingsDiagnostics);let searchPattern=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(modelRuntime,searchPattern,AbortSignal.timeout(15e3)),process.exit(0)}let stdinContent;appMode!=="rpc"&&(stdinContent=await readPipedStdin(),stdinContent!==void 0&&appMode==="interactive"&&(appMode="print")),time("readPipedStdin");let{initialMessage,initialImages}=await prepareInitialMessage(parsed,settingsManager.getImageAutoResize(),stdinContent);time("prepareInitialMessage"),initTheme(settingsManager.getTheme(),appMode==="interactive"),time("initTheme"),appMode==="interactive"&&deprecationWarnings.length>0&&await showDeprecationWarnings(deprecationWarnings),time("resolveModelScope");let allStartupDiagnostics=deduplicateDiagnostics([...startupSettingsDiagnostics,...runtime.diagnostics]),startupDiagnostics=filterAcknowledgedSuiteNotices(allStartupDiagnostics,settingsManager);await settingsManager.flush().catch(()=>{});let hasRuntimeErrors=runtime.diagnostics.some(diagnostic5=>diagnostic5.type==="error");if((appMode!=="interactive"||hasRuntimeErrors)&&reportDiagnostics(startupDiagnostics),hasRuntimeErrors&&process.exit(1),appMode==="interactive")for(let rejection of runtime.pluginRejections)console.error(source_default.yellow(`Warning: capability plugin rejected (${rejection.code}): ${rejection.pluginId??rejection.manifestPath}: ${rejection.message}`));time("createAgentSession");let noModelResolved=!session.model||session.model.provider==="unknown"&&session.model.id==="unknown";appMode!=="interactive"&&noModelResolved&&(console.error(source_default.red(modelFallbackMessage??formatNoModelsAvailableMessage())),process.exit(1));let startupBenchmark=isTruthyEnvFlag(process.env.AGENT_FORGE_STARTUP_BENCHMARK);if(startupBenchmark&&appMode!=="interactive"&&(console.error(source_default.red("Error: AGENT_FORGE_STARTUP_BENCHMARK only supports interactive mode")),process.exit(1)),!offlineMode&&appMode==="rpc"){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),15e3);modelRuntime.refresh({signal:controller.signal}).catch(()=>{}).finally(()=>clearTimeout(timeout))}if(appMode==="rpc")printTimings(),await runRpcMode(runtime,{interactionHostSlot:interactionHostSlots.rpc,getMetrics:options2=>runtime.observabilityGetMetricsRef?.current?.(options2)});else if(appMode==="interactive"){let interactiveMode=new InteractiveMode(runtime,{getMetrics:options2=>runtime.observabilityGetMetricsRef?.current?.(options2),migratedProviders,startupDiagnostics,modelFallbackMessage,initialMessage,initialImages,initialMessages:parsed.messages,verbose:parsed.verbose,tuiMode:parsed.tuiMode,initialThemeSetting:parsed.useTheme,pendingSuiteSelector,settingsManager});if(interactionHostSlots.interactive.setTarget(interactiveMode.createInteractionHostV1()),startupBenchmark){await interactiveMode.init(),time("interactiveMode.init"),await new Promise(resolve25=>setTimeout(resolve25,150)),interactiveMode.stop(),stopThemeWatcher(),printTimings(),process.stdout.writableLength>0&&await new Promise(resolve25=>process.stdout.once("drain",resolve25)),process.stderr.writableLength>0&&await new Promise(resolve25=>process.stderr.once("drain",resolve25));return}printTimings(),await interactiveMode.run()}else{printTimings();let exitCode=await runPrintMode(runtime,{mode:toPrintOutputMode(appMode),messages:parsed.messages,initialMessage,initialImages});stopThemeWatcher(),restoreStdout(),exitCode!==0&&(process.exitCode=exitCode);return}}export{getPackageDir,getReadmePath,getDocsPath,getExamplesPath,APP_NAME,CONFIG_DIR_NAME,VERSION,getAgentDir,getSessionsDir,configureHttpDispatcher,Text,Loader,CancellableLoader,Container,SelectList,Spacer,EXPERIMENTAL_PUBLIC_API_VERSION,LifecycleTransformError,LifecycleExecuteError,SUMMARY_MODEL_INVOCATION_ERROR_CODES,createDisposableRegistration,createEventEnvelope,detachedSessionSnapshot,parseCapabilityPluginManifest,MEMORY_RECALL_TOOL_NAME,dist_exports,parseArgs,resolveModelScopeWithDiagnostics,resolveCliModel,getShellConfig,getPowerShellConfig,sanitizeBinaryOutput,killProcessTree,readStoredCredential,CredentialSynchronizationError,ModelRuntime,convertToPng,resizeImage,formatDimensionNote,detectSupportedImageMimeTypeFromFile,stableJsonDigest,buildProfileIdentityV1,profileIdentitiesCompatible,PLUGIN_DISPOSE_EVENT_ID,PLUGIN_DISPOSE_EVENT_VERSION,PLUGIN_READY_EVENT_ID,PLUGIN_READY_EVENT_VERSION,SESSION_CONTEXT_REPLACED_EVENT_ID,SESSION_CONTEXT_REPLACED_EVENT_VERSION,SESSION_RELOAD_EVENT_ID,SESSION_RELOAD_EVENT_VERSION,MODEL_RESPONSE_EVENT_ID,MODEL_RESPONSE_EVENT_VERSION,MODEL_STREAM_EVENT_ID,MODEL_STREAM_EVENT_VERSION,TOOL_RESULT_EVENT_ID,TOOL_RESULT_EVENT_VERSION,TOOL_CALL_EVENT_ID,TOOL_CALL_EVENT_VERSION,TOOL_RESULT_RAW_EVENT_ID,TOOL_RESULT_RAW_EVENT_VERSION,TOOL_EXECUTE_EVENT_ID,TOOL_EXECUTE_EVENT_VERSION,TOOL_COMMIT_EVENT_ID,TOOL_COMMIT_EVENT_VERSION,OPERATION_END_EVENT_ID,OPERATION_END_EVENT_VERSION,validatePluginDisposeEventDataV1,validatePluginReadyEventDataV1,validateSessionContextReplacedEventDataV1,validateSessionReloadEventDataV1,validateModelResponseEventDataV1,validateModelStreamEventDataV1,validateToolResultEventDataV1,validateToolCallEventDataV1,validateToolExecuteEventDataV1,validateToolCommitEventDataV1,validateToolResultRawEventDataV1,TOOL_RESULT_TRANSFORM_EVENT_ID,TOOL_RESULT_TRANSFORM_EVENT_VERSION,validateToolResultTransformEventDataV1,validateOperationEndEventDataV1,CAPABILITY_CALL_EVENT_ID,CAPABILITY_CALL_EVENT_VERSION,validateCapabilityCallEventDataV1,OPERATION_START_EVENT_ID,OPERATION_START_EVENT_VERSION,OPERATION_STEP_EVENT_ID,OPERATION_STEP_EVENT_VERSION,validateOperationStartEventDataV1,validateOperationStepEventDataV1,OPERATION_CANCEL_EVENT_ID,OPERATION_CANCEL_EVENT_VERSION,validateOperationCancelEventDataV1,discoverCapabilityPluginManifests,loadCapabilityPlugin,loadCapabilityPluginSync,loadCapabilityPluginFromManifest,ecosystem_exports,assembleProfile,replaceProfilePlugin,listBuiltinPluginProfilesV1,listBuiltinPluginManifestsV1,resolveBuiltinPluginProfileV1,plugin_manager_controller_exports,DurableServiceErrorV1,durableLogPath,createFileDurableStoreBackend,createDurableService,projectSessionTranscript,CodingAgentSessionRuntime,CodingAgentServerService,assembleCodingAgentServer,DEFAULT_SUITE_ID,isBuiltinSuiteId,buildResolvedAgentProfileV1,parseFrontmatter,stripFrontmatter,createSyntheticSourceInfo,loadSkillsFromDir,formatSkillsForPrompt,loadSkills,createProfileLock,verifyProfileLock,replaceProfileLock,createProfileRegistry,SuiteResolutionError,listSuiteIds,BOOTSTRAP_LIFECYCLE_PLUGIN_ID,SESSION_COMPACTION_COMMIT_EVENT_ID,SESSION_COMPACTION_COMMIT_EVENT_VERSION,validateSessionCompactionCommitEventDataV1,installBootstrapLifecycle,defineTool,AgentCompositionRuntime,createAgentCompositionRuntime,convertToLlm2 as convertToLlm,SessionHeaderScanLimitError,FileSessionStorageProvider,CURRENT_SESSION_VERSION,migrateSessionEntries,parseSessionEntries,getLatestCompactionEntry,sessionEntryToContextMessages,buildContextEntries,buildSessionContext2 as buildSessionContext,SessionManager,serializeConversation2 as serializeConversation,DEFAULT_COMPACTION_SETTINGS2 as DEFAULT_COMPACTION_SETTINGS,calculateContextTokens2 as calculateContextTokens,getLastAssistantUsage2 as getLastAssistantUsage,shouldCompact2 as shouldCompact,estimateTokens2 as estimateTokens,findTurnStartIndex2 as findTurnStartIndex,findCutPoint2 as findCutPoint,generateSummary2 as generateSummary,generateSummaryWithUsage2 as generateSummaryWithUsage,compact2 as compact,collectEntriesForBranchSummary2 as collectEntriesForBranchSummary,prepareBranchEntries2 as prepareBranchEntries,generateBranchSummary2 as generateBranchSummary,BOOTSTRAP_COMPACTION_PLUGIN_ID,DEFAULT_COMPACTION_POLICY_NAME,installBootstrapCompactionPolicy,BOOTSTRAP_RETRY_PLUGIN_ID,DEFAULT_RETRY_POLICY_NAME,installBootstrapRetryPolicy,Theme,getAvailableThemes,initTheme,highlightCode,getLanguageFromPath,getMarkdownTheme,getSelectListTheme,getSettingsListTheme,keyText,keyHint,rawKeyHint,truncateToVisualLines,DEFAULT_MAX_LINES2 as DEFAULT_MAX_LINES,DEFAULT_MAX_BYTES3 as DEFAULT_MAX_BYTES,formatSize2 as formatSize,truncateHead2 as truncateHead,truncateTail2 as truncateTail,truncateLine,createLocalBashOperations,createBashToolDefinition,createBashTool2 as createBashTool,renderDiff,generateUnifiedPatch2 as generateUnifiedPatch,generateDiffString2 as generateDiffString,withFileMutationQueue2 as withFileMutationQueue,createEditToolDefinition,createEditTool2 as createEditTool,createFindToolDefinition,createFindTool,createGrepToolDefinition,createGrepTool,createLsToolDefinition,createLsTool,createLocalPowerShellOperations,createPowerShellToolDefinition,createPowerShellTool,createReadToolDefinition,createReadTool2 as createReadTool,createWriteToolDefinition,createWriteTool2 as createWriteTool,createCodingTools,createReadOnlyTools,BOOTSTRAP_TOOLS_PLUGIN_ID,installBootstrapTools,installSessionBootstrapTools,resolvePluginCapabilityOrder,validateExecutionFactsV1,validateRetryScheduleV1,createCapabilityRuntime,parseSkillBlock,AgentSession,DefaultPackageManager,SettingsManager,loadProjectContextFiles,DefaultResourceLoader,createAgentSessionServices,createAgentSessionFromServices,AgentSessionRuntime,createAgentSessionRuntime,createAgentSession,createStableAgentSession,createStableAgentSessionRuntime,createFileSessionSource,startCodingAgentRemoteServer,DynamicBorder,SessionSelectorComponent,DialogInputComponent,DialogSelectorComponent,createProfileMigrationPolicy,SUITE_DELETE_CONFIRM_TOKEN,SuiteLifecycleError,createSuite,findSuiteSessionRefs,deleteSuite,resetSuite,clearDanglingSuiteSettings,copyToClipboard,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BranchSummaryMessageComponent,CompactionSummaryMessageComponent,CustomEditor,CustomMessageComponent,FooterComponent,SettingsSelectorComponent,SkillInvocationMessageComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,LoginDialogComponent,OAuthSelectorComponent,DialogEditorComponent,ModelSelectorComponent,ThinkingSelectorComponent,UserMessageSelectorComponent,InteractiveMode,createStdioChannelAdapter,createHostOutputProjector,runPrintMode,RpcClient,runRpcMode,PluginManagerEntryComponent,plugin_selection_controller_exports,main};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-FN2J2CKR.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-3QKHSPQL.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-7ZY7IXZD.js";import"./chunks/chunk-V46XUTK3.js";import"./chunks/chunk-WGLBM2BP.js";import"./chunks/chunk-4L3WN2XY.js";process.title=APP_NAME;process.env.AGENT_FORGE="true";process.env.AI_AGENT="agent-forge";process.emitWarning=(()=>{});configureHttpDispatcher();main(process.argv.slice(2));
3
+ import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-AUFCGQBI.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-3QKHSPQL.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-7ZY7IXZD.js";import"./chunks/chunk-V46XUTK3.js";import"./chunks/chunk-WGLBM2BP.js";import"./chunks/chunk-4L3WN2XY.js";process.title=APP_NAME;process.env.AGENT_FORGE="true";process.env.AI_AGENT="agent-forge";process.emitWarning=(()=>{});configureHttpDispatcher();main(process.argv.slice(2));