@ai-agent-forge/agent-forge 0.88.7 → 0.88.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
  3. package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
  4. package/bundled-plugins/alignment/agent-forge.json +1 -1
  5. package/bundled-plugins/alignment/dist/engine.d.ts.map +1 -1
  6. package/bundled-plugins/alignment/dist/engine.js +6 -0
  7. package/bundled-plugins/alignment/dist/engine.js.map +1 -1
  8. package/bundled-plugins/alignment/dist/index.d.ts.map +1 -1
  9. package/bundled-plugins/alignment/dist/index.js +1 -0
  10. package/bundled-plugins/alignment/dist/index.js.map +1 -1
  11. package/bundled-plugins/alignment/dist/page.d.ts.map +1 -1
  12. package/bundled-plugins/alignment/dist/page.js +12 -0
  13. package/bundled-plugins/alignment/dist/page.js.map +1 -1
  14. package/bundled-plugins/alignment/dist/types.d.ts +1 -1
  15. package/bundled-plugins/alignment/dist/types.d.ts.map +1 -1
  16. package/bundled-plugins/alignment/dist/types.js.map +1 -1
  17. package/bundled-plugins/alignment/plugin.json +1 -1
  18. package/bundled-plugins/browser-playwright/agent-forge.json +1 -1
  19. package/bundled-plugins/browser-playwright/plugin.json +1 -1
  20. package/bundled-plugins/coding-tools/agent-forge.json +1 -1
  21. package/bundled-plugins/coding-tools/plugin.json +1 -1
  22. package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
  23. package/bundled-plugins/compaction-policy/plugin.json +1 -1
  24. package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
  25. package/bundled-plugins/overflow-policy/plugin.json +1 -1
  26. package/bundled-plugins/provider-failover/agent-forge.json +1 -1
  27. package/bundled-plugins/provider-failover/plugin.json +1 -1
  28. package/bundled-plugins/retry-policy/agent-forge.json +1 -1
  29. package/bundled-plugins/retry-policy/plugin.json +1 -1
  30. package/dist/bundle/.build-manifest.json +9 -9
  31. package/dist/bundle/chunks/{chunk-ZS5JEI76.js → chunk-4BD6FSZA.js} +1 -1
  32. package/dist/bundle/chunks/{chunk-ISLHFRER.js → chunk-F73USSXE.js} +1 -1
  33. package/dist/bundle/chunks/{chunk-WJSKB3FC.js → chunk-HXGAAJQQ.js} +1 -1
  34. package/dist/bundle/chunks/{chunk-L2SXIPI5.js → chunk-VWNIFYQA.js} +3 -3
  35. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  36. package/dist/bundle/chunks/{virtual-modules-2QGILFV7.js → virtual-modules-UQRUJLPM.js} +1 -1
  37. package/dist/bundle/cli.js +1 -1
  38. package/dist/bundle/client.js +1 -1
  39. package/dist/bundle/index.js +1 -1
  40. package/dist/bundle/rpc-entry.js +1 -1
  41. package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
  42. package/dist/core/i18n/locales/zh-cn/cli.js +2 -1
  43. package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -1
  44. package/dist/plugins/ecosystem/catalog.d.ts +1 -1
  45. package/dist/plugins/ecosystem/catalog.d.ts.map +1 -1
  46. package/dist/plugins/ecosystem/catalog.js +10 -4
  47. package/dist/plugins/ecosystem/catalog.js.map +1 -1
  48. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +6 -1
  49. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  50. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +11 -3
  51. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  52. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +10 -0
  53. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
  54. package/dist/plugins/ecosystem/plugin-bootstrap.js +66 -23
  55. package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
  56. package/examples/extensions/with-deps/package-lock.json +2 -2
  57. package/examples/extensions/with-deps/package.json +1 -1
  58. package/examples/extensions/with-deps/plugin.json +1 -1
  59. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{APP_NAME,APP_TITLE,Agent,Box,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,ClientMessageDecoder,CombinedAutocompleteProvider,Compile,Container,DEFAULT_MAX_AGENT_RETRY_DELAY_MS,DEFAULT_MAX_BYTES,DEFAULT_MAX_FRAME_LENGTH,DEFAULT_MAX_LINES,ENV_AGENT_DIR,ENV_SESSION_DIR,EXPERIMENTAL_PUBLIC_API_VERSION,Editor,FS_WATCH_RETRY_DELAY_MS,Image,Input,KeybindingsManager,LifecycleExecuteError,LifecycleTransformError,Loader,Markdown,PACKAGE_NAME,PROTOCOL_VERSION,ProcessTerminal,ProtocolValidationError,SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES,SUMMARY_MODEL_INVOCATION_ERROR_CODES,ScrollView,SelectList,SessionManager,SettingsList,Spacer,TRACE_KINDS_V1,TUI_KEYBINDINGS,Text,Theme,TruncatedText,TuiAltScreen,TuiMainScreen,VERSION,VStack,agentSessionsDir,assertValidSessionId,builtinProviders,calculateContextTokens,canonicalizePath,closeWatcher,collectEntriesForBranchSummary,completeSimple,contentText,convertToLlm,convertToPng,createCompactionSummaryMessage,createDisposableRegistration,createEventEnvelope,createLocalBashOperations,createSubagentMailbox,createSubagentTaskServer,createSubagentTaskStdioChannelV1,createTurnProgressSourceV1,detachedFreeze,detachedSessionSnapshot,detectInstallMethod,detectSupportedImageMimeTypeFromFile,detectTerminalBackgroundFromEnv,detectTerminalBackgroundTheme,detectTerminalThemeForAuto,effectiveKeepRecentTokens,encodeServerMessage,ensureTool,estimateContextTokens,estimateTokens,expandTildePath,fetchWithRetry,findMostRecentSession,formatKeyText,formatSkillsForSystemPrompt,formatToolCallWithArgs,fuzzyFilter,fuzzyMatch,generateDiffString,getAgentDir,getApiProvider,getAuthPath,getAvailableThemes,getBinDir,getBuiltinModelDataGeneratedAt,getCapabilities,getChangelogPath,getCwdRelativePath,getDebugLogPath,getDefaultSessionDir,getDocsPath,getEditorTheme,getExamplesPath,getExportTemplateDir,getFileRevision,getKeybindings,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getReadmePath,getResolvedThemeColors,getSelectListTheme,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,getSessionsDir,getSettingsListTheme,getSettingsPath,getShellConfig,getTextOutput,getThemeByName,getThemeExportColors,getTraceFilePathForSession,hyperlink,initTheme,isLocalPath,isPlainRecord,isSupportedProtocolVersion,isTurnStartMessage,isViewportTUI,keyDisplayText,keyHint,keyText,killTrackedDetachedChildren,loadAllHighlightLanguages,loadPhoton,loadThemeFromPath,markPathIgnoredByCloudSync,normalizePath,onThemeChange,parseAgentTaskChildProfileV1,parseAutoThemeSetting,parseCapabilityPluginManifest,processImage,q,radiusProvider,rawKeyHint,removeSessionFromIndex,require_dist,require_semver,require_undici,resolvePath,resolveReadPath,resolveThemeSetting,retryAssistantCall,retryDelayMs,sanitizeBinaryOutput,sessionEntryToContextMessages,setCapabilityOverrides,setDefaultStreamFn,setKeybindings,setRegisteredThemes,setTheme,setThemeInstance,sleepSync,sliceByColumn,source_default,spawnProcess,spawnProcessSync,stopThemeWatcher,streamSimple,stripAnsi,stripBom,theme,truncateTail,truncateToVisualLines,truncateToWidth,typebox_exports,visibleWidth,waitForChildProcess,watchWithErrorHandler,wrapTextWithAnsi}from"./chunk-ISLHFRER.js";import{cleanupSessionResources,uuidv7}from"./chunk-JUUC5AZY.js";import{import_websocket,import_websocket_server}from"./chunk-3QKHSPQL.js";import{setI18nLanguage,t}from"./chunk-WJSKB3FC.js";import{ModelsError,clampThinkingLevel,createModels,getSupportedThinkingLevels,lazyStream,modelsAreEqual}from"./chunk-K3S6GTL7.js";import{__commonJS,__export,__require,__toESM}from"./chunk-4L3WN2XY.js";var require_polyfills=__commonJS({"node_modules/graceful-fs/polyfills.js"(exports,module){var constants2=__require("constants"),origCwd=process.cwd,cwd=null,platform2=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return cwd||(cwd=origCwd.call(process)),cwd};try{process.cwd()}catch{}typeof process.chdir=="function"&&(chdir=process.chdir,process.chdir=function(d){cwd=null,chdir.call(process,d)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,chdir));var chdir;module.exports=patch;function patch(fs3){constants2.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&patchLchmod(fs3),fs3.lutimes||patchLutimes(fs3),fs3.chown=chownFix(fs3.chown),fs3.fchown=chownFix(fs3.fchown),fs3.lchown=chownFix(fs3.lchown),fs3.chmod=chmodFix(fs3.chmod),fs3.fchmod=chmodFix(fs3.fchmod),fs3.lchmod=chmodFix(fs3.lchmod),fs3.chownSync=chownFixSync(fs3.chownSync),fs3.fchownSync=chownFixSync(fs3.fchownSync),fs3.lchownSync=chownFixSync(fs3.lchownSync),fs3.chmodSync=chmodFixSync(fs3.chmodSync),fs3.fchmodSync=chmodFixSync(fs3.fchmodSync),fs3.lchmodSync=chmodFixSync(fs3.lchmodSync),fs3.stat=statFix(fs3.stat),fs3.fstat=statFix(fs3.fstat),fs3.lstat=statFix(fs3.lstat),fs3.statSync=statFixSync(fs3.statSync),fs3.fstatSync=statFixSync(fs3.fstatSync),fs3.lstatSync=statFixSync(fs3.lstatSync),fs3.chmod&&!fs3.lchmod&&(fs3.lchmod=function(path8,mode,cb){cb&&process.nextTick(cb)},fs3.lchmodSync=function(){}),fs3.chown&&!fs3.lchown&&(fs3.lchown=function(path8,uid,gid,cb){cb&&process.nextTick(cb)},fs3.lchownSync=function(){}),platform2==="win32"&&(fs3.rename=typeof fs3.rename!="function"?fs3.rename:(function(fs$rename){function rename6(from,to,cb){var start=Date.now(),backoff=0;fs$rename(from,to,function CB(er){if(er&&(er.code==="EACCES"||er.code==="EPERM"||er.code==="EBUSY")&&Date.now()-start<6e4){setTimeout(function(){fs3.stat(to,function(stater,st){stater&&stater.code==="ENOENT"?fs$rename(from,to,CB):cb(er)})},backoff),backoff<100&&(backoff+=10);return}cb&&cb(er)})}return Object.setPrototypeOf&&Object.setPrototypeOf(rename6,fs$rename),rename6})(fs3.rename)),fs3.read=typeof fs3.read!="function"?fs3.read:(function(fs$read){function read(fd,buffer,offset,length,position,callback_){var callback;if(callback_&&typeof callback_=="function"){var eagCounter=0;callback=function(er,_,__){if(er&&er.code==="EAGAIN"&&eagCounter<10)return eagCounter++,fs$read.call(fs3,fd,buffer,offset,length,position,callback);callback_.apply(this,arguments)}}return fs$read.call(fs3,fd,buffer,offset,length,position,callback)}return Object.setPrototypeOf&&Object.setPrototypeOf(read,fs$read),read})(fs3.read),fs3.readSync=typeof fs3.readSync!="function"?fs3.readSync:(function(fs$readSync){return function(fd,buffer,offset,length,position){for(var eagCounter=0;;)try{return fs$readSync.call(fs3,fd,buffer,offset,length,position)}catch(er){if(er.code==="EAGAIN"&&eagCounter<10){eagCounter++;continue}throw er}}})(fs3.readSync);function patchLchmod(fs4){fs4.lchmod=function(path8,mode,callback){fs4.open(path8,constants2.O_WRONLY|constants2.O_SYMLINK,mode,function(err,fd){if(err){callback&&callback(err);return}fs4.fchmod(fd,mode,function(err2){fs4.close(fd,function(err22){callback&&callback(err2||err22)})})})},fs4.lchmodSync=function(path8,mode){var fd=fs4.openSync(path8,constants2.O_WRONLY|constants2.O_SYMLINK,mode),threw=!0,ret;try{ret=fs4.fchmodSync(fd,mode),threw=!1}finally{if(threw)try{fs4.closeSync(fd)}catch{}else fs4.closeSync(fd)}return ret}}function patchLutimes(fs4){constants2.hasOwnProperty("O_SYMLINK")&&fs4.futimes?(fs4.lutimes=function(path8,at,mt,cb){fs4.open(path8,constants2.O_SYMLINK,function(er,fd){if(er){cb&&cb(er);return}fs4.futimes(fd,at,mt,function(er2){fs4.close(fd,function(er22){cb&&cb(er2||er22)})})})},fs4.lutimesSync=function(path8,at,mt){var fd=fs4.openSync(path8,constants2.O_SYMLINK),ret,threw=!0;try{ret=fs4.futimesSync(fd,at,mt),threw=!1}finally{if(threw)try{fs4.closeSync(fd)}catch{}else fs4.closeSync(fd)}return ret}):fs4.futimes&&(fs4.lutimes=function(_a2,_b,_c,cb){cb&&process.nextTick(cb)},fs4.lutimesSync=function(){})}function chmodFix(orig){return orig&&function(target,mode,cb){return orig.call(fs3,target,mode,function(er){chownErOk(er)&&(er=null),cb&&cb.apply(this,arguments)})}}function chmodFixSync(orig){return orig&&function(target,mode){try{return orig.call(fs3,target,mode)}catch(er){if(!chownErOk(er))throw er}}}function chownFix(orig){return orig&&function(target,uid,gid,cb){return orig.call(fs3,target,uid,gid,function(er){chownErOk(er)&&(er=null),cb&&cb.apply(this,arguments)})}}function chownFixSync(orig){return orig&&function(target,uid,gid){try{return orig.call(fs3,target,uid,gid)}catch(er){if(!chownErOk(er))throw er}}}function statFix(orig){return orig&&function(target,options,cb){typeof options=="function"&&(cb=options,options=null);function callback(er,stats){stats&&(stats.uid<0&&(stats.uid+=4294967296),stats.gid<0&&(stats.gid+=4294967296)),cb&&cb.apply(this,arguments)}return options?orig.call(fs3,target,options,callback):orig.call(fs3,target,callback)}}function statFixSync(orig){return orig&&function(target,options){var stats=options?orig.call(fs3,target,options):orig.call(fs3,target);return stats&&(stats.uid<0&&(stats.uid+=4294967296),stats.gid<0&&(stats.gid+=4294967296)),stats}}function chownErOk(er){if(!er||er.code==="ENOSYS")return!0;var nonroot=!process.getuid||process.getuid()!==0;return!!(nonroot&&(er.code==="EINVAL"||er.code==="EPERM"))}}}});var require_legacy_streams=__commonJS({"node_modules/graceful-fs/legacy-streams.js"(exports,module){var Stream=__require("stream").Stream;module.exports=legacy;function legacy(fs3){return{ReadStream,WriteStream};function ReadStream(path8,options){if(!(this instanceof ReadStream))return new ReadStream(path8,options);Stream.call(this);var self=this;this.path=path8,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,options=options||{};for(var keys=Object.keys(options),index=0,length=keys.length;index<length;index++){var key=keys[index];this[key]=options[key]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){self._read()});return}fs3.open(this.path,this.flags,this.mode,function(err,fd){if(err){self.emit("error",err),self.readable=!1;return}self.fd=fd,self.emit("open",fd),self._read()})}function WriteStream(path8,options){if(!(this instanceof WriteStream))return new WriteStream(path8,options);Stream.call(this),this.path=path8,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,options=options||{};for(var keys=Object.keys(options),index=0,length=keys.length;index<length;index++){var key=keys[index];this[key]=options[key]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=fs3.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}}});var require_clone=__commonJS({"node_modules/graceful-fs/clone.js"(exports,module){"use strict";module.exports=clone;var getPrototypeOf=Object.getPrototypeOf||function(obj){return obj.__proto__};function clone(obj){if(obj===null||typeof obj!="object")return obj;if(obj instanceof Object)var copy={__proto__:getPrototypeOf(obj)};else var copy=Object.create(null);return Object.getOwnPropertyNames(obj).forEach(function(key){Object.defineProperty(copy,key,Object.getOwnPropertyDescriptor(obj,key))}),copy}}});var require_graceful_fs=__commonJS({"node_modules/graceful-fs/graceful-fs.js"(exports,module){var fs3=__require("fs"),polyfills=require_polyfills(),legacy=require_legacy_streams(),clone=require_clone(),util=__require("util"),gracefulQueue,previousSymbol;typeof Symbol=="function"&&typeof Symbol.for=="function"?(gracefulQueue=Symbol.for("graceful-fs.queue"),previousSymbol=Symbol.for("graceful-fs.previous")):(gracefulQueue="___graceful-fs.queue",previousSymbol="___graceful-fs.previous");function noop(){}function publishQueue(context,queue2){Object.defineProperty(context,gracefulQueue,{get:function(){return queue2}})}var debug=noop;util.debuglog?debug=util.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(debug=function(){var m=util.format.apply(util,arguments);m="GFS4: "+m.split(/\n/).join(`
2
+ import{APP_NAME,APP_TITLE,Agent,Box,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,ClientMessageDecoder,CombinedAutocompleteProvider,Compile,Container,DEFAULT_MAX_AGENT_RETRY_DELAY_MS,DEFAULT_MAX_BYTES,DEFAULT_MAX_FRAME_LENGTH,DEFAULT_MAX_LINES,ENV_AGENT_DIR,ENV_SESSION_DIR,EXPERIMENTAL_PUBLIC_API_VERSION,Editor,FS_WATCH_RETRY_DELAY_MS,Image,Input,KeybindingsManager,LifecycleExecuteError,LifecycleTransformError,Loader,Markdown,PACKAGE_NAME,PROTOCOL_VERSION,ProcessTerminal,ProtocolValidationError,SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES,SUMMARY_MODEL_INVOCATION_ERROR_CODES,ScrollView,SelectList,SessionManager,SettingsList,Spacer,TRACE_KINDS_V1,TUI_KEYBINDINGS,Text,Theme,TruncatedText,TuiAltScreen,TuiMainScreen,VERSION,VStack,agentSessionsDir,assertValidSessionId,builtinProviders,calculateContextTokens,canonicalizePath,closeWatcher,collectEntriesForBranchSummary,completeSimple,contentText,convertToLlm,convertToPng,createCompactionSummaryMessage,createDisposableRegistration,createEventEnvelope,createLocalBashOperations,createSubagentMailbox,createSubagentTaskServer,createSubagentTaskStdioChannelV1,createTurnProgressSourceV1,detachedFreeze,detachedSessionSnapshot,detectInstallMethod,detectSupportedImageMimeTypeFromFile,detectTerminalBackgroundFromEnv,detectTerminalBackgroundTheme,detectTerminalThemeForAuto,effectiveKeepRecentTokens,encodeServerMessage,ensureTool,estimateContextTokens,estimateTokens,expandTildePath,fetchWithRetry,findMostRecentSession,formatKeyText,formatSkillsForSystemPrompt,formatToolCallWithArgs,fuzzyFilter,fuzzyMatch,generateDiffString,getAgentDir,getApiProvider,getAuthPath,getAvailableThemes,getBinDir,getBuiltinModelDataGeneratedAt,getCapabilities,getChangelogPath,getCwdRelativePath,getDebugLogPath,getDefaultSessionDir,getDocsPath,getEditorTheme,getExamplesPath,getExportTemplateDir,getFileRevision,getKeybindings,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getReadmePath,getResolvedThemeColors,getSelectListTheme,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,getSessionsDir,getSettingsListTheme,getSettingsPath,getShellConfig,getTextOutput,getThemeByName,getThemeExportColors,getTraceFilePathForSession,hyperlink,initTheme,isLocalPath,isPlainRecord,isSupportedProtocolVersion,isTurnStartMessage,isViewportTUI,keyDisplayText,keyHint,keyText,killTrackedDetachedChildren,loadAllHighlightLanguages,loadPhoton,loadThemeFromPath,markPathIgnoredByCloudSync,normalizePath,onThemeChange,parseAgentTaskChildProfileV1,parseAutoThemeSetting,parseCapabilityPluginManifest,processImage,q,radiusProvider,rawKeyHint,removeSessionFromIndex,require_dist,require_semver,require_undici,resolvePath,resolveReadPath,resolveThemeSetting,retryAssistantCall,retryDelayMs,sanitizeBinaryOutput,sessionEntryToContextMessages,setCapabilityOverrides,setDefaultStreamFn,setKeybindings,setRegisteredThemes,setTheme,setThemeInstance,sleepSync,sliceByColumn,source_default,spawnProcess,spawnProcessSync,stopThemeWatcher,streamSimple,stripAnsi,stripBom,theme,truncateTail,truncateToVisualLines,truncateToWidth,typebox_exports,visibleWidth,waitForChildProcess,watchWithErrorHandler,wrapTextWithAnsi}from"./chunk-F73USSXE.js";import{cleanupSessionResources,uuidv7}from"./chunk-JUUC5AZY.js";import{import_websocket,import_websocket_server}from"./chunk-3QKHSPQL.js";import{setI18nLanguage,t}from"./chunk-HXGAAJQQ.js";import{ModelsError,clampThinkingLevel,createModels,getSupportedThinkingLevels,lazyStream,modelsAreEqual}from"./chunk-K3S6GTL7.js";import{__commonJS,__export,__require,__toESM}from"./chunk-4L3WN2XY.js";var require_polyfills=__commonJS({"node_modules/graceful-fs/polyfills.js"(exports,module){var constants2=__require("constants"),origCwd=process.cwd,cwd=null,platform2=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return cwd||(cwd=origCwd.call(process)),cwd};try{process.cwd()}catch{}typeof process.chdir=="function"&&(chdir=process.chdir,process.chdir=function(d){cwd=null,chdir.call(process,d)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,chdir));var chdir;module.exports=patch;function patch(fs3){constants2.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&patchLchmod(fs3),fs3.lutimes||patchLutimes(fs3),fs3.chown=chownFix(fs3.chown),fs3.fchown=chownFix(fs3.fchown),fs3.lchown=chownFix(fs3.lchown),fs3.chmod=chmodFix(fs3.chmod),fs3.fchmod=chmodFix(fs3.fchmod),fs3.lchmod=chmodFix(fs3.lchmod),fs3.chownSync=chownFixSync(fs3.chownSync),fs3.fchownSync=chownFixSync(fs3.fchownSync),fs3.lchownSync=chownFixSync(fs3.lchownSync),fs3.chmodSync=chmodFixSync(fs3.chmodSync),fs3.fchmodSync=chmodFixSync(fs3.fchmodSync),fs3.lchmodSync=chmodFixSync(fs3.lchmodSync),fs3.stat=statFix(fs3.stat),fs3.fstat=statFix(fs3.fstat),fs3.lstat=statFix(fs3.lstat),fs3.statSync=statFixSync(fs3.statSync),fs3.fstatSync=statFixSync(fs3.fstatSync),fs3.lstatSync=statFixSync(fs3.lstatSync),fs3.chmod&&!fs3.lchmod&&(fs3.lchmod=function(path8,mode,cb){cb&&process.nextTick(cb)},fs3.lchmodSync=function(){}),fs3.chown&&!fs3.lchown&&(fs3.lchown=function(path8,uid,gid,cb){cb&&process.nextTick(cb)},fs3.lchownSync=function(){}),platform2==="win32"&&(fs3.rename=typeof fs3.rename!="function"?fs3.rename:(function(fs$rename){function rename6(from,to,cb){var start=Date.now(),backoff=0;fs$rename(from,to,function CB(er){if(er&&(er.code==="EACCES"||er.code==="EPERM"||er.code==="EBUSY")&&Date.now()-start<6e4){setTimeout(function(){fs3.stat(to,function(stater,st){stater&&stater.code==="ENOENT"?fs$rename(from,to,CB):cb(er)})},backoff),backoff<100&&(backoff+=10);return}cb&&cb(er)})}return Object.setPrototypeOf&&Object.setPrototypeOf(rename6,fs$rename),rename6})(fs3.rename)),fs3.read=typeof fs3.read!="function"?fs3.read:(function(fs$read){function read(fd,buffer,offset,length,position,callback_){var callback;if(callback_&&typeof callback_=="function"){var eagCounter=0;callback=function(er,_,__){if(er&&er.code==="EAGAIN"&&eagCounter<10)return eagCounter++,fs$read.call(fs3,fd,buffer,offset,length,position,callback);callback_.apply(this,arguments)}}return fs$read.call(fs3,fd,buffer,offset,length,position,callback)}return Object.setPrototypeOf&&Object.setPrototypeOf(read,fs$read),read})(fs3.read),fs3.readSync=typeof fs3.readSync!="function"?fs3.readSync:(function(fs$readSync){return function(fd,buffer,offset,length,position){for(var eagCounter=0;;)try{return fs$readSync.call(fs3,fd,buffer,offset,length,position)}catch(er){if(er.code==="EAGAIN"&&eagCounter<10){eagCounter++;continue}throw er}}})(fs3.readSync);function patchLchmod(fs4){fs4.lchmod=function(path8,mode,callback){fs4.open(path8,constants2.O_WRONLY|constants2.O_SYMLINK,mode,function(err,fd){if(err){callback&&callback(err);return}fs4.fchmod(fd,mode,function(err2){fs4.close(fd,function(err22){callback&&callback(err2||err22)})})})},fs4.lchmodSync=function(path8,mode){var fd=fs4.openSync(path8,constants2.O_WRONLY|constants2.O_SYMLINK,mode),threw=!0,ret;try{ret=fs4.fchmodSync(fd,mode),threw=!1}finally{if(threw)try{fs4.closeSync(fd)}catch{}else fs4.closeSync(fd)}return ret}}function patchLutimes(fs4){constants2.hasOwnProperty("O_SYMLINK")&&fs4.futimes?(fs4.lutimes=function(path8,at,mt,cb){fs4.open(path8,constants2.O_SYMLINK,function(er,fd){if(er){cb&&cb(er);return}fs4.futimes(fd,at,mt,function(er2){fs4.close(fd,function(er22){cb&&cb(er2||er22)})})})},fs4.lutimesSync=function(path8,at,mt){var fd=fs4.openSync(path8,constants2.O_SYMLINK),ret,threw=!0;try{ret=fs4.futimesSync(fd,at,mt),threw=!1}finally{if(threw)try{fs4.closeSync(fd)}catch{}else fs4.closeSync(fd)}return ret}):fs4.futimes&&(fs4.lutimes=function(_a2,_b,_c,cb){cb&&process.nextTick(cb)},fs4.lutimesSync=function(){})}function chmodFix(orig){return orig&&function(target,mode,cb){return orig.call(fs3,target,mode,function(er){chownErOk(er)&&(er=null),cb&&cb.apply(this,arguments)})}}function chmodFixSync(orig){return orig&&function(target,mode){try{return orig.call(fs3,target,mode)}catch(er){if(!chownErOk(er))throw er}}}function chownFix(orig){return orig&&function(target,uid,gid,cb){return orig.call(fs3,target,uid,gid,function(er){chownErOk(er)&&(er=null),cb&&cb.apply(this,arguments)})}}function chownFixSync(orig){return orig&&function(target,uid,gid){try{return orig.call(fs3,target,uid,gid)}catch(er){if(!chownErOk(er))throw er}}}function statFix(orig){return orig&&function(target,options,cb){typeof options=="function"&&(cb=options,options=null);function callback(er,stats){stats&&(stats.uid<0&&(stats.uid+=4294967296),stats.gid<0&&(stats.gid+=4294967296)),cb&&cb.apply(this,arguments)}return options?orig.call(fs3,target,options,callback):orig.call(fs3,target,callback)}}function statFixSync(orig){return orig&&function(target,options){var stats=options?orig.call(fs3,target,options):orig.call(fs3,target);return stats&&(stats.uid<0&&(stats.uid+=4294967296),stats.gid<0&&(stats.gid+=4294967296)),stats}}function chownErOk(er){if(!er||er.code==="ENOSYS")return!0;var nonroot=!process.getuid||process.getuid()!==0;return!!(nonroot&&(er.code==="EINVAL"||er.code==="EPERM"))}}}});var require_legacy_streams=__commonJS({"node_modules/graceful-fs/legacy-streams.js"(exports,module){var Stream=__require("stream").Stream;module.exports=legacy;function legacy(fs3){return{ReadStream,WriteStream};function ReadStream(path8,options){if(!(this instanceof ReadStream))return new ReadStream(path8,options);Stream.call(this);var self=this;this.path=path8,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,options=options||{};for(var keys=Object.keys(options),index=0,length=keys.length;index<length;index++){var key=keys[index];this[key]=options[key]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){self._read()});return}fs3.open(this.path,this.flags,this.mode,function(err,fd){if(err){self.emit("error",err),self.readable=!1;return}self.fd=fd,self.emit("open",fd),self._read()})}function WriteStream(path8,options){if(!(this instanceof WriteStream))return new WriteStream(path8,options);Stream.call(this),this.path=path8,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,options=options||{};for(var keys=Object.keys(options),index=0,length=keys.length;index<length;index++){var key=keys[index];this[key]=options[key]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=fs3.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}}});var require_clone=__commonJS({"node_modules/graceful-fs/clone.js"(exports,module){"use strict";module.exports=clone;var getPrototypeOf=Object.getPrototypeOf||function(obj){return obj.__proto__};function clone(obj){if(obj===null||typeof obj!="object")return obj;if(obj instanceof Object)var copy={__proto__:getPrototypeOf(obj)};else var copy=Object.create(null);return Object.getOwnPropertyNames(obj).forEach(function(key){Object.defineProperty(copy,key,Object.getOwnPropertyDescriptor(obj,key))}),copy}}});var require_graceful_fs=__commonJS({"node_modules/graceful-fs/graceful-fs.js"(exports,module){var fs3=__require("fs"),polyfills=require_polyfills(),legacy=require_legacy_streams(),clone=require_clone(),util=__require("util"),gracefulQueue,previousSymbol;typeof Symbol=="function"&&typeof Symbol.for=="function"?(gracefulQueue=Symbol.for("graceful-fs.queue"),previousSymbol=Symbol.for("graceful-fs.previous")):(gracefulQueue="___graceful-fs.queue",previousSymbol="___graceful-fs.previous");function noop(){}function publishQueue(context,queue2){Object.defineProperty(context,gracefulQueue,{get:function(){return queue2}})}var debug=noop;util.debuglog?debug=util.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(debug=function(){var m=util.format.apply(util,arguments);m="GFS4: "+m.split(/\n/).join(`
3
3
  GFS4: `),console.error(m)});fs3[gracefulQueue]||(queue=global[gracefulQueue]||[],publishQueue(fs3,queue),fs3.close=(function(fs$close){function close(fd,cb){return fs$close.call(fs3,fd,function(err){err||resetQueue(),typeof cb=="function"&&cb.apply(this,arguments)})}return Object.defineProperty(close,previousSymbol,{value:fs$close}),close})(fs3.close),fs3.closeSync=(function(fs$closeSync){function closeSync6(fd){fs$closeSync.apply(fs3,arguments),resetQueue()}return Object.defineProperty(closeSync6,previousSymbol,{value:fs$closeSync}),closeSync6})(fs3.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){debug(fs3[gracefulQueue]),__require("assert").equal(fs3[gracefulQueue].length,0)}));var queue;global[gracefulQueue]||publishQueue(global,fs3[gracefulQueue]);module.exports=patch(clone(fs3));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!fs3.__patched&&(module.exports=patch(fs3),fs3.__patched=!0);function patch(fs4){polyfills(fs4),fs4.gracefulify=patch,fs4.createReadStream=createReadStream2,fs4.createWriteStream=createWriteStream2;var fs$readFile=fs4.readFile;fs4.readFile=readFile10;function readFile10(path8,options,cb){return typeof options=="function"&&(cb=options,options=null),go$readFile(path8,options,cb);function go$readFile(path9,options2,cb2,startTime){return fs$readFile(path9,options2,function(err){err&&(err.code==="EMFILE"||err.code==="ENFILE")?enqueue([go$readFile,[path9,options2,cb2],err,startTime||Date.now(),Date.now()]):typeof cb2=="function"&&cb2.apply(this,arguments)})}}var fs$writeFile=fs4.writeFile;fs4.writeFile=writeFile5;function writeFile5(path8,data,options,cb){return typeof options=="function"&&(cb=options,options=null),go$writeFile(path8,data,options,cb);function go$writeFile(path9,data2,options2,cb2,startTime){return fs$writeFile(path9,data2,options2,function(err){err&&(err.code==="EMFILE"||err.code==="ENFILE")?enqueue([go$writeFile,[path9,data2,options2,cb2],err,startTime||Date.now(),Date.now()]):typeof cb2=="function"&&cb2.apply(this,arguments)})}}var fs$appendFile=fs4.appendFile;fs$appendFile&&(fs4.appendFile=appendFile2);function appendFile2(path8,data,options,cb){return typeof options=="function"&&(cb=options,options=null),go$appendFile(path8,data,options,cb);function go$appendFile(path9,data2,options2,cb2,startTime){return fs$appendFile(path9,data2,options2,function(err){err&&(err.code==="EMFILE"||err.code==="ENFILE")?enqueue([go$appendFile,[path9,data2,options2,cb2],err,startTime||Date.now(),Date.now()]):typeof cb2=="function"&&cb2.apply(this,arguments)})}}var fs$copyFile=fs4.copyFile;fs$copyFile&&(fs4.copyFile=copyFile);function copyFile(src,dest,flags,cb){return typeof flags=="function"&&(cb=flags,flags=0),go$copyFile(src,dest,flags,cb);function go$copyFile(src2,dest2,flags2,cb2,startTime){return fs$copyFile(src2,dest2,flags2,function(err){err&&(err.code==="EMFILE"||err.code==="ENFILE")?enqueue([go$copyFile,[src2,dest2,flags2,cb2],err,startTime||Date.now(),Date.now()]):typeof cb2=="function"&&cb2.apply(this,arguments)})}}var fs$readdir=fs4.readdir;fs4.readdir=readdir4;var noReaddirOptionVersions=/^v[0-5]\./;function readdir4(path8,options,cb){typeof options=="function"&&(cb=options,options=null);var go$readdir=noReaddirOptionVersions.test(process.version)?function(path9,options2,cb2,startTime){return fs$readdir(path9,fs$readdirCallback(path9,options2,cb2,startTime))}:function(path9,options2,cb2,startTime){return fs$readdir(path9,options2,fs$readdirCallback(path9,options2,cb2,startTime))};return go$readdir(path8,options,cb);function fs$readdirCallback(path9,options2,cb2,startTime){return function(err,files){err&&(err.code==="EMFILE"||err.code==="ENFILE")?enqueue([go$readdir,[path9,options2,cb2],err,startTime||Date.now(),Date.now()]):(files&&files.sort&&files.sort(),typeof cb2=="function"&&cb2.call(this,err,files))}}}if(process.version.substr(0,4)==="v0.8"){var legStreams=legacy(fs4);ReadStream=legStreams.ReadStream,WriteStream=legStreams.WriteStream}var fs$ReadStream=fs4.ReadStream;fs$ReadStream&&(ReadStream.prototype=Object.create(fs$ReadStream.prototype),ReadStream.prototype.open=ReadStream$open);var fs$WriteStream=fs4.WriteStream;fs$WriteStream&&(WriteStream.prototype=Object.create(fs$WriteStream.prototype),WriteStream.prototype.open=WriteStream$open),Object.defineProperty(fs4,"ReadStream",{get:function(){return ReadStream},set:function(val){ReadStream=val},enumerable:!0,configurable:!0}),Object.defineProperty(fs4,"WriteStream",{get:function(){return WriteStream},set:function(val){WriteStream=val},enumerable:!0,configurable:!0});var FileReadStream=ReadStream;Object.defineProperty(fs4,"FileReadStream",{get:function(){return FileReadStream},set:function(val){FileReadStream=val},enumerable:!0,configurable:!0});var FileWriteStream=WriteStream;Object.defineProperty(fs4,"FileWriteStream",{get:function(){return FileWriteStream},set:function(val){FileWriteStream=val},enumerable:!0,configurable:!0});function ReadStream(path8,options){return this instanceof ReadStream?(fs$ReadStream.apply(this,arguments),this):ReadStream.apply(Object.create(ReadStream.prototype),arguments)}function ReadStream$open(){var that=this;open4(that.path,that.flags,that.mode,function(err,fd){err?(that.autoClose&&that.destroy(),that.emit("error",err)):(that.fd=fd,that.emit("open",fd),that.read())})}function WriteStream(path8,options){return this instanceof WriteStream?(fs$WriteStream.apply(this,arguments),this):WriteStream.apply(Object.create(WriteStream.prototype),arguments)}function WriteStream$open(){var that=this;open4(that.path,that.flags,that.mode,function(err,fd){err?(that.destroy(),that.emit("error",err)):(that.fd=fd,that.emit("open",fd))})}function createReadStream2(path8,options){return new fs4.ReadStream(path8,options)}function createWriteStream2(path8,options){return new fs4.WriteStream(path8,options)}var fs$open=fs4.open;fs4.open=open4;function open4(path8,flags,mode,cb){return typeof mode=="function"&&(cb=mode,mode=null),go$open(path8,flags,mode,cb);function go$open(path9,flags2,mode2,cb2,startTime){return fs$open(path9,flags2,mode2,function(err,fd){err&&(err.code==="EMFILE"||err.code==="ENFILE")?enqueue([go$open,[path9,flags2,mode2,cb2],err,startTime||Date.now(),Date.now()]):typeof cb2=="function"&&cb2.apply(this,arguments)})}}return fs4}function enqueue(elem){debug("ENQUEUE",elem[0].name,elem[1]),fs3[gracefulQueue].push(elem),retry()}var retryTimer;function resetQueue(){for(var now=Date.now(),i=0;i<fs3[gracefulQueue].length;++i)fs3[gracefulQueue][i].length>2&&(fs3[gracefulQueue][i][3]=now,fs3[gracefulQueue][i][4]=now);retry()}function retry(){if(clearTimeout(retryTimer),retryTimer=void 0,fs3[gracefulQueue].length!==0){var elem=fs3[gracefulQueue].shift(),fn=elem[0],args=elem[1],err=elem[2],startTime=elem[3],lastTime=elem[4];if(startTime===void 0)debug("RETRY",fn.name,args),fn.apply(null,args);else if(Date.now()-startTime>=6e4){debug("TIMEOUT",fn.name,args);var cb=args.pop();typeof cb=="function"&&cb.call(null,err)}else{var sinceAttempt=Date.now()-lastTime,sinceStart=Math.max(lastTime-startTime,1),desiredDelay=Math.min(sinceStart*1.2,100);sinceAttempt>=desiredDelay?(debug("RETRY",fn.name,args),fn.apply(null,args.concat([startTime]))):fs3[gracefulQueue].push(elem)}retryTimer===void 0&&(retryTimer=setTimeout(retry,0))}}}});var require_retry_operation=__commonJS({"node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js"(exports,module){function RetryOperation(timeouts,options){typeof options=="boolean"&&(options={forever:options}),this._originalTimeouts=JSON.parse(JSON.stringify(timeouts)),this._timeouts=timeouts,this._options=options||{},this._maxRetryTime=options&&options.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}module.exports=RetryOperation;RetryOperation.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};RetryOperation.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null};RetryOperation.prototype.retry=function(err){if(this._timeout&&clearTimeout(this._timeout),!err)return!1;var currentTime=new Date().getTime();if(err&&currentTime-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(err);var timeout=this._timeouts.shift();if(timeout===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),timeout=this._timeouts.shift();else return!1;var self=this,timer=setTimeout(function(){self._attempts++,self._operationTimeoutCb&&(self._timeout=setTimeout(function(){self._operationTimeoutCb(self._attempts)},self._operationTimeout),self._options.unref&&self._timeout.unref()),self._fn(self._attempts)},timeout);return this._options.unref&&timer.unref(),!0};RetryOperation.prototype.attempt=function(fn,timeoutOps){this._fn=fn,timeoutOps&&(timeoutOps.timeout&&(this._operationTimeout=timeoutOps.timeout),timeoutOps.cb&&(this._operationTimeoutCb=timeoutOps.cb));var self=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){self._operationTimeoutCb()},self._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};RetryOperation.prototype.try=function(fn){console.log("Using RetryOperation.try() is deprecated"),this.attempt(fn)};RetryOperation.prototype.start=function(fn){console.log("Using RetryOperation.start() is deprecated"),this.attempt(fn)};RetryOperation.prototype.start=RetryOperation.prototype.try;RetryOperation.prototype.errors=function(){return this._errors};RetryOperation.prototype.attempts=function(){return this._attempts};RetryOperation.prototype.mainError=function(){if(this._errors.length===0)return null;for(var counts={},mainError=null,mainErrorCount=0,i=0;i<this._errors.length;i++){var error=this._errors[i],message=error.message,count=(counts[message]||0)+1;counts[message]=count,count>=mainErrorCount&&(mainError=error,mainErrorCount=count)}return mainError}}});var require_retry=__commonJS({"node_modules/proper-lockfile/node_modules/retry/lib/retry.js"(exports){var RetryOperation=require_retry_operation();exports.operation=function(options){var timeouts=exports.timeouts(options);return new RetryOperation(timeouts,{forever:options&&options.forever,unref:options&&options.unref,maxRetryTime:options&&options.maxRetryTime})};exports.timeouts=function(options){if(options instanceof Array)return[].concat(options);var opts={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var key in options)opts[key]=options[key];if(opts.minTimeout>opts.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var timeouts=[],i=0;i<opts.retries;i++)timeouts.push(this.createTimeout(i,opts));return options&&options.forever&&!timeouts.length&&timeouts.push(this.createTimeout(i,opts)),timeouts.sort(function(a,b){return a-b}),timeouts};exports.createTimeout=function(attempt2,opts){var random=opts.randomize?Math.random()+1:1,timeout=Math.round(random*opts.minTimeout*Math.pow(opts.factor,attempt2));return timeout=Math.min(timeout,opts.maxTimeout),timeout};exports.wrap=function(obj,options,methods){if(options instanceof Array&&(methods=options,options=null),!methods){methods=[];for(var key in obj)typeof obj[key]=="function"&&methods.push(key)}for(var i=0;i<methods.length;i++){var method=methods[i],original=obj[method];obj[method]=function(original2){var op=exports.operation(options),args=Array.prototype.slice.call(arguments,1),callback=args.pop();args.push(function(err){op.retry(err)||(err&&(arguments[0]=op.mainError()),callback.apply(this,arguments))}),op.attempt(function(){original2.apply(obj,args)})}.bind(obj,original),obj[method].options=options}}}});var require_retry2=__commonJS({"node_modules/proper-lockfile/node_modules/retry/index.js"(exports,module){module.exports=require_retry()}});var require_signals=__commonJS({"node_modules/signal-exit/signals.js"(exports,module){module.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&module.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&module.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")}});var require_signal_exit=__commonJS({"node_modules/signal-exit/index.js"(exports,module){var process2=global.process,processOk=function(process3){return process3&&typeof process3=="object"&&typeof process3.removeListener=="function"&&typeof process3.emit=="function"&&typeof process3.reallyExit=="function"&&typeof process3.listeners=="function"&&typeof process3.kill=="function"&&typeof process3.pid=="number"&&typeof process3.on=="function"};processOk(process2)?(assert=__require("assert"),signals=require_signals(),isWin=/^win/i.test(process2.platform),EE=__require("events"),typeof EE!="function"&&(EE=EE.EventEmitter),process2.__signal_exit_emitter__?emitter=process2.__signal_exit_emitter__:(emitter=process2.__signal_exit_emitter__=new EE,emitter.count=0,emitter.emitted={}),emitter.infinite||(emitter.setMaxListeners(1/0),emitter.infinite=!0),module.exports=function(cb,opts){if(!processOk(global.process))return function(){};assert.equal(typeof cb,"function","a callback must be provided for exit handler"),loaded===!1&&load();var ev="exit";opts&&opts.alwaysLast&&(ev="afterexit");var remove=function(){emitter.removeListener(ev,cb),emitter.listeners("exit").length===0&&emitter.listeners("afterexit").length===0&&unload()};return emitter.on(ev,cb),remove},unload=function(){!loaded||!processOk(global.process)||(loaded=!1,signals.forEach(function(sig){try{process2.removeListener(sig,sigListeners[sig])}catch{}}),process2.emit=originalProcessEmit,process2.reallyExit=originalProcessReallyExit,emitter.count-=1)},module.exports.unload=unload,emit=function(event,code,signal){emitter.emitted[event]||(emitter.emitted[event]=!0,emitter.emit(event,code,signal))},sigListeners={},signals.forEach(function(sig){sigListeners[sig]=function(){if(processOk(global.process)){var listeners=process2.listeners(sig);listeners.length===emitter.count&&(unload(),emit("exit",null,sig),emit("afterexit",null,sig),isWin&&sig==="SIGHUP"&&(sig="SIGINT"),process2.kill(process2.pid,sig))}}}),module.exports.signals=function(){return signals},loaded=!1,load=function(){loaded||!processOk(global.process)||(loaded=!0,emitter.count+=1,signals=signals.filter(function(sig){try{return process2.on(sig,sigListeners[sig]),!0}catch{return!1}}),process2.emit=processEmit,process2.reallyExit=processReallyExit)},module.exports.load=load,originalProcessReallyExit=process2.reallyExit,processReallyExit=function(code){processOk(global.process)&&(process2.exitCode=code||0,emit("exit",process2.exitCode,null),emit("afterexit",process2.exitCode,null),originalProcessReallyExit.call(process2,process2.exitCode))},originalProcessEmit=process2.emit,processEmit=function(ev,arg){if(ev==="exit"&&processOk(global.process)){arg!==void 0&&(process2.exitCode=arg);var ret=originalProcessEmit.apply(this,arguments);return emit("exit",process2.exitCode,null),emit("afterexit",process2.exitCode,null),ret}else return originalProcessEmit.apply(this,arguments)}):module.exports=function(){return function(){}};var assert,signals,isWin,EE,emitter,unload,emit,sigListeners,loaded,load,originalProcessReallyExit,processReallyExit,originalProcessEmit,processEmit}});var require_mtime_precision=__commonJS({"node_modules/proper-lockfile/lib/mtime-precision.js"(exports,module){"use strict";var cacheSymbol=Symbol();function probe(file,fs3,callback){let cachedPrecision=fs3[cacheSymbol];if(cachedPrecision)return fs3.stat(file,(err,stat5)=>{if(err)return callback(err);callback(null,stat5.mtime,cachedPrecision)});let mtime=new Date(Math.ceil(Date.now()/1e3)*1e3+5);fs3.utimes(file,mtime,mtime,err=>{if(err)return callback(err);fs3.stat(file,(err2,stat5)=>{if(err2)return callback(err2);let precision=stat5.mtime.getTime()%1e3===0?"s":"ms";Object.defineProperty(fs3,cacheSymbol,{value:precision}),callback(null,stat5.mtime,precision)})})}function getMtime(precision){let now=Date.now();return precision==="s"&&(now=Math.ceil(now/1e3)*1e3),new Date(now)}module.exports.probe=probe;module.exports.getMtime=getMtime}});var require_lockfile=__commonJS({"node_modules/proper-lockfile/lib/lockfile.js"(exports,module){"use strict";var path8=__require("path"),fs3=require_graceful_fs(),retry=require_retry2(),onExit=require_signal_exit(),mtimePrecision=require_mtime_precision(),locks={};function getLockFile(file,options){return options.lockfilePath||`${file}.lock`}function resolveCanonicalPath(file,options,callback){if(!options.realpath)return callback(null,path8.resolve(file));options.fs.realpath(file,callback)}function acquireLock(file,options,callback){let lockfilePath=getLockFile(file,options);options.fs.mkdir(lockfilePath,err=>{if(!err)return mtimePrecision.probe(lockfilePath,options.fs,(err2,mtime,mtimePrecision2)=>{if(err2)return options.fs.rmdir(lockfilePath,()=>{}),callback(err2);callback(null,mtime,mtimePrecision2)});if(err.code!=="EEXIST")return callback(err);if(options.stale<=0)return callback(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file}));options.fs.stat(lockfilePath,(err2,stat5)=>{if(err2)return err2.code==="ENOENT"?acquireLock(file,{...options,stale:0},callback):callback(err2);if(!isLockStale(stat5,options))return callback(Object.assign(new Error("Lock file is already being held"),{code:"ELOCKED",file}));removeLock(file,options,err3=>{if(err3)return callback(err3);acquireLock(file,{...options,stale:0},callback)})})})}function isLockStale(stat5,options){return stat5.mtime.getTime()<Date.now()-options.stale}function removeLock(file,options,callback){options.fs.rmdir(getLockFile(file,options),err=>{if(err&&err.code!=="ENOENT")return callback(err);callback()})}function updateLock(file,options){let lock2=locks[file];lock2.updateTimeout||(lock2.updateDelay=lock2.updateDelay||options.update,lock2.updateTimeout=setTimeout(()=>{lock2.updateTimeout=null,options.fs.stat(lock2.lockfilePath,(err,stat5)=>{let isOverThreshold=lock2.lastUpdate+options.stale<Date.now();if(err)return err.code==="ENOENT"||isOverThreshold?setLockAsCompromised(file,lock2,Object.assign(err,{code:"ECOMPROMISED"})):(lock2.updateDelay=1e3,updateLock(file,options));if(!(lock2.mtime.getTime()===stat5.mtime.getTime()))return setLockAsCompromised(file,lock2,Object.assign(new Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let mtime=mtimePrecision.getMtime(lock2.mtimePrecision);options.fs.utimes(lock2.lockfilePath,mtime,mtime,err2=>{let isOverThreshold2=lock2.lastUpdate+options.stale<Date.now();if(!lock2.released){if(err2)return err2.code==="ENOENT"||isOverThreshold2?setLockAsCompromised(file,lock2,Object.assign(err2,{code:"ECOMPROMISED"})):(lock2.updateDelay=1e3,updateLock(file,options));lock2.mtime=mtime,lock2.lastUpdate=Date.now(),lock2.updateDelay=null,updateLock(file,options)}})})},lock2.updateDelay),lock2.updateTimeout.unref&&lock2.updateTimeout.unref())}function setLockAsCompromised(file,lock2,err){lock2.released=!0,lock2.updateTimeout&&clearTimeout(lock2.updateTimeout),locks[file]===lock2&&delete locks[file],lock2.options.onCompromised(err)}function lock(file,options,callback){options={stale:1e4,update:null,realpath:!0,retries:0,fs:fs3,onCompromised:err=>{throw err},...options},options.retries=options.retries||0,options.retries=typeof options.retries=="number"?{retries:options.retries}:options.retries,options.stale=Math.max(options.stale||0,2e3),options.update=options.update==null?options.stale/2:options.update||0,options.update=Math.max(Math.min(options.update,options.stale/2),1e3),resolveCanonicalPath(file,options,(err,file2)=>{if(err)return callback(err);let operation=retry.operation(options.retries);operation.attempt(()=>{acquireLock(file2,options,(err2,mtime,mtimePrecision2)=>{if(operation.retry(err2))return;if(err2)return callback(operation.mainError());let lock2=locks[file2]={lockfilePath:getLockFile(file2,options),mtime,mtimePrecision:mtimePrecision2,options,lastUpdate:Date.now()};updateLock(file2,options),callback(null,releasedCallback=>{if(lock2.released)return releasedCallback&&releasedCallback(Object.assign(new Error("Lock is already released"),{code:"ERELEASED"}));unlock(file2,{...options,realpath:!1},releasedCallback)})})})})}function unlock(file,options,callback){options={fs:fs3,realpath:!0,...options},resolveCanonicalPath(file,options,(err,file2)=>{if(err)return callback(err);let lock2=locks[file2];if(!lock2)return callback(Object.assign(new Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));lock2.updateTimeout&&clearTimeout(lock2.updateTimeout),lock2.released=!0,delete locks[file2],removeLock(file2,options,callback)})}function check(file,options,callback){options={stale:1e4,realpath:!0,fs:fs3,...options},options.stale=Math.max(options.stale||0,2e3),resolveCanonicalPath(file,options,(err,file2)=>{if(err)return callback(err);options.fs.stat(getLockFile(file2,options),(err2,stat5)=>err2?err2.code==="ENOENT"?callback(null,!1):callback(err2):callback(null,!isLockStale(stat5,options)))})}function getLocks(){return locks}onExit(()=>{for(let file in locks){let options=locks[file].options;try{options.fs.rmdirSync(getLockFile(file,options))}catch{}}});module.exports.lock=lock;module.exports.unlock=unlock;module.exports.check=check;module.exports.getLocks=getLocks}});var require_adapter=__commonJS({"node_modules/proper-lockfile/lib/adapter.js"(exports,module){"use strict";var fs3=require_graceful_fs();function createSyncFs(fs4){let methods=["mkdir","realpath","stat","rmdir","utimes"],newFs={...fs4};return methods.forEach(method=>{newFs[method]=(...args)=>{let callback=args.pop(),ret;try{ret=fs4[`${method}Sync`](...args)}catch(err){return callback(err)}callback(null,ret)}}),newFs}function toPromise(method){return(...args)=>new Promise((resolve22,reject2)=>{args.push((err,result)=>{err?reject2(err):resolve22(result)}),method(...args)})}function toSync(method){return(...args)=>{let err,result;if(args.push((_err,_result)=>{err=_err,result=_result}),method(...args),err)throw err;return result}}function toSyncOptions(options){if(options={...options},options.fs=createSyncFs(options.fs||fs3),typeof options.retries=="number"&&options.retries>0||options.retries&&typeof options.retries.retries=="number"&&options.retries.retries>0)throw Object.assign(new Error("Cannot use retries with the sync api"),{code:"ESYNC"});return options}module.exports={toPromise,toSync,toSyncOptions}}});var require_proper_lockfile=__commonJS({"node_modules/proper-lockfile/index.js"(exports,module){"use strict";var lockfile4=require_lockfile(),{toPromise,toSync,toSyncOptions}=require_adapter();async function lock(file,options){let release=await toPromise(lockfile4.lock)(file,options);return toPromise(release)}function lockSync(file,options){let release=toSync(lockfile4.lock)(file,toSyncOptions(options));return toSync(release)}function unlock(file,options){return toPromise(lockfile4.unlock)(file,options)}function unlockSync(file,options){return toSync(lockfile4.unlock)(file,toSyncOptions(options))}function check(file,options){return toPromise(lockfile4.check)(file,options)}function checkSync(file,options){return toSync(lockfile4.check)(file,toSyncOptions(options))}module.exports=lock;module.exports.lock=lock;module.exports.unlock=unlock;module.exports.lockSync=lockSync;module.exports.unlockSync=unlockSync;module.exports.check=check;module.exports.checkSync=checkSync}});var require_ignore=__commonJS({"node_modules/ignore/index.js"(exports,module){function makeArray(subject){return Array.isArray(subject)?subject:[subject]}var UNDEFINED=void 0,EMPTY="",SPACE=" ",ESCAPE="\\",REGEX_LITERAL_SPECIAL=/[.*+?()[\]{}^$|\\/]/,REGEX_TEST_BLANK_LINE=/^ +$/,REGEX_INVALID_TRAILING_BACKSLASH=/(?:[^\\]|^)\\$/,REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION=/^\\!/,REGEX_REPLACE_LEADING_EXCAPED_HASH=/^\\#/,REGEX_SPLITALL_CRLF=/\r?\n/g,DOUBLE_SLASH="//",SLASH_CODE=47,DOT_CODE=46,SLASH="/",TMP_KEY_IGNORE="node-ignore";typeof Symbol<"u"&&(TMP_KEY_IGNORE=Symbol.for("node-ignore"));var KEY_IGNORE=TMP_KEY_IGNORE,define=(object,key,value)=>(Object.defineProperty(object,key,{value}),value),RETURN_FALSE=()=>!1,cleanRangeBackSlash=slashes=>{let{length}=slashes;return slashes.slice(0,length-length%2)},POSIX_CLASSES={alnum:"0-9A-Za-z",alpha:"A-Za-z",blank:" \\t",cntrl:"\\x00-\\x1f\\x7f",digit:"0-9",graph:"!-.0-~",lower:"a-z",print:" -.0-~",punct:"!-.:-@\\[-`{-~",space:" \\t\\n\\r",upper:"A-Z",xdigit:"0-9A-Fa-f"},CLASS_MEMBERS_TO_ESCAPE="\\]^-[",escapeMember=char=>CLASS_MEMBERS_TO_ESCAPE.indexOf(char)<0?char:ESCAPE+char,NON_SLASH="(?!\\/)",classSource=(negated,body)=>{if(negated)return`[^\\/${body}]`;let source=`[${body}]`;return new RegExp(source).test("/")?NON_SLASH+source:source},scanBracket=(pattern,start)=>{let{length}=pattern,index=start+1,negated=EMPTY,lead=pattern[index];(lead==="!"||lead==="^")&&(negated="^",index++);let body=EMPTY,prev=EMPTY;for(;;){let char=pattern[index];if(char===UNDEFINED)return null;if(char===ESCAPE){let escaped=pattern[index+1];if(escaped===UNDEFINED)return null;body+=escapeMember(escaped),prev=escaped,index++}else if(char==="-"&&prev&&index+1<length&&pattern[index+1]!=="]"){index++;let to=pattern[index];to===ESCAPE&&(to=pattern[index+=1]),prev<=to&&(body+=`-${escapeMember(to)}`),prev=EMPTY}else if(char==="["&&pattern[index+1]===":"){let nameStart=index+2,end=nameStart;for(;end<length&&pattern[end]!=="]";)end++;if(end===length)return null;if(end>nameStart&&pattern[end-1]===":"){let expanded=POSIX_CLASSES[pattern.slice(nameStart,end-1)];if(expanded===UNDEFINED)return null;body+=expanded,prev=EMPTY,index=end}else body+=escapeMember("["),prev="[",index=nameStart-2}else body+=escapeMember(char),prev=char;if(index++,pattern[index]==="]")return{end:index,source:classSource(negated,body)}}},NEVER_MATCH="[]",PLACEHOLDER="\0",REGEX_RESTORE_PLACEHOLDER=new RegExp(`${PLACEHOLDER}(\\d+)${PLACEHOLDER}`,"g"),TRAILING_WILDCARD="\uE000",extractBrackets=pattern=>{let sources=[],hold=source=>`${PLACEHOLDER}${sources.push(source)-1}${PLACEHOLDER}`,{length}=pattern,out=EMPTY,index=0;for(;index<length;){let char=pattern[index];if(char===ESCAPE){let escaped=pattern[index+1];escaped==="*"||escaped==="["||escaped===SPACE||escaped===ESCAPE?out+=pattern.slice(index,index+2):out+=hold(REGEX_LITERAL_SPECIAL.test(escaped)?ESCAPE+escaped:escaped),index+=2}else if(char===PLACEHOLDER)out+=hold(`[${PLACEHOLDER}]`),index++;else if(char==="["){let scanned=scanBracket(pattern,index);scanned===null?(out+=hold(NEVER_MATCH),index=length):(out+=hold(scanned.source),index=scanned.end+1)}else out+=char,index++}return{source:out,sources}},DIRECT=null,REGEX_INNER_SLASH=/\/(?!$)/,REPLACERS=[[/^\uFEFF/,()=>EMPTY,"\uFEFF"],[/[\r\n]+$/,()=>EMPTY],[/((?:\\\\)*?)(\\? +)$/,(_,m1,m2)=>m1+(m2.indexOf("\\")===0?SPACE:EMPTY)],[/(\\+?) /g,(_,m1)=>{let{length}=m1;return m1.slice(0,length-length%2)+SPACE}],[/[\\$.|*+(){^]/g,match2=>`\\${match2}`],[/(?!\\)\?/g,()=>"[^/]","?"],[/^\//,()=>"^",SLASH],[/\//g,()=>"\\/",SLASH],[/^\^*(?:\\\*\\\*\\\/)+/,()=>"^(?:.*\\/)?","*"],[DIRECT,(source,pattern)=>!source||source[0]==="^"?source:(REGEX_INNER_SLASH.test(pattern)?"^":"(?:^|\\/)")+source],[/\\\/\\\*\\\*(?=\\\/|$)/g,(_,index,str)=>index+6<str.length?str.slice(index+6)==="\\/"?"(?:\\/[^\\/]+)+":"(?:\\/[^\\/]+)*":"\\/.+","*"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(_,p1,p2)=>{let unescaped=p2.replace(/\\\*/g,"[^\\/]*");return p1+unescaped},"*"],[/(^|[^\\])((?:\\\\)*)\\\*$/,(match2,p1,p2)=>p2.length/2%2===0?p1+p2+TRAILING_WILDCARD:match2,"*"],[/\\\\\\(?=[$.|*+(){^])/g,()=>ESCAPE,ESCAPE+ESCAPE],[/\\\\/g,()=>ESCAPE,ESCAPE+ESCAPE],[/\\\[([^\]/]*?)(\\*)($|\])/g,(match2,range2,endEscape,close)=>`\\[${range2}${cleanRangeBackSlash(endEscape)}${close}`,"["],[DIRECT,source=>{let last=source[source.length-1];return!last||last===TRAILING_WILDCARD?source:last===SLASH?`${source}$`:`${source}(?=$|\\/$)`}]],REGEX_REPLACE_TRAILING_WILDCARD=/(^|\\\/)?\uE000$/,MODE_IGNORE="regex",MODE_CHECK_IGNORE="checkRegex",UNDERSCORE="_",TRAILING_WILD_CARD_REPLACERS={[MODE_IGNORE](_,p1){return`${p1?`${p1}[^/]+`:"[^/]*"}(?=$|\\/$)`},[MODE_CHECK_IGNORE](_,p1){return`${p1?`${p1}[^/]*`:"[^/]*"}(?=$|\\/$)`}},WILDCARD="[^\\/]*",pinWildcards=source=>{if(source.indexOf(WILDCARD)<0)return source;let tokens=[],{length}=source,index=0;for(;index<length;){let char=source[index];if(source.startsWith(WILDCARD,index))tokens.push({wildcard:!0}),index+=WILDCARD.length;else if(char==="["){let end=index+1;for(source[end]==="^"&&end++,source[end]==="]"&&end++;end<length&&source[end]!=="]";)end+=source[end]===ESCAPE?2:1;end++,tokens.push({single:source.slice(index,end)}),index=end}else if(char===ESCAPE)tokens.push({single:source.slice(index,index+2)}),index+=2;else if(char==="("){let depth=0,end=index;do source[end]===ESCAPE?end++:source[end]==="("?depth++:source[end]===")"&&depth--,end++;while(end<length&&depth>0);"*+?".indexOf(source[end])>=0&&end++,tokens.push({boundary:source.slice(index,end)}),index=end}else char==="^"||char==="$"?(tokens.push({boundary:char}),index++):(tokens.push({single:char}),index++)}let out=EMPTY,run=[],flush=()=>{let lastWildcard;run.forEach((token,at)=>{token.wildcard&&(lastWildcard=at)}),run.forEach((token,at)=>{if(!token.wildcard){out+=token.single;return}out+=at===lastWildcard?WILDCARD:`(?:(?!${run[at+1].single})[^\\/])*`}),run=[]};return tokens.forEach(token=>{if(token.boundary===void 0){run.push(token);return}flush(),out+=token.boundary}),flush(),out},makeRegexPrefix=pattern=>{let{source,sources}=extractBrackets(pattern),replaced=REPLACERS.reduce((prev,[matcher,replacer,required])=>matcher===DIRECT?replacer(prev,pattern):required!==UNDEFINED&&prev.indexOf(required)<0?prev:matcher.test(prev)?prev.replace(matcher,replacer.bind(pattern)):prev,source);return sources.length?replaced.replace(REGEX_RESTORE_PLACEHOLDER,(match2,index)=>sources[index]):replaced},matchesBasename=body=>{let index=body.indexOf(SLASH);return index<0||index===body.length-1},basenameOf=path8=>{let end=path8.length-1,index=path8.lastIndexOf(SLASH,path8[end]===SLASH?end-1:end);return index<0?path8:path8.slice(index+1)},parentOf=path8=>{if(path8.charCodeAt(0)===SLASH_CODE||path8.indexOf(DOUBLE_SLASH)>=0){let slices=path8.split(SLASH).filter(Boolean);return slices.pop(),slices.length?slices.join(SLASH)+SLASH:EMPTY}let end=path8.length-1,cut=path8.lastIndexOf(SLASH,path8.charCodeAt(end)===SLASH_CODE?end-1:end);return cut<0?EMPTY:path8.slice(0,cut+1)},isString2=subject=>typeof subject=="string",checkPattern=pattern=>pattern&&isString2(pattern)&&!REGEX_TEST_BLANK_LINE.test(pattern)&&!REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)&&pattern.indexOf("#")!==0,splitPattern=pattern=>pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean),IgnoreRule=class{constructor(pattern,mark,body,ignoreCase,negative,prefix){this.pattern=pattern,this.mark=mark,this.negative=negative,define(this,"body",body),define(this,"ignoreCase",ignoreCase),define(this,"regexPrefix",prefix)}get _basenameOnly(){return define(this,"_basenameOnly",matchesBasename(this.body))}get regex(){let key=UNDERSCORE+MODE_IGNORE;return this[key]?this[key]:this._make(MODE_IGNORE,key)}get checkRegex(){let key=UNDERSCORE+MODE_CHECK_IGNORE;return this[key]?this[key]:this._make(MODE_CHECK_IGNORE,key)}_make(mode,key){let str=pinWildcards(this.regexPrefix.replace(REGEX_REPLACE_TRAILING_WILDCARD,TRAILING_WILD_CARD_REPLACERS[mode])),regex=this.ignoreCase?new RegExp(str,"i"):new RegExp(str);return define(this,key,regex)}},createRule=({pattern,mark},ignoreCase)=>{let negative=!1,body=pattern;body.indexOf("!")===0&&(negative=!0,body=body.substr(1)),body=body.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION,"!").replace(REGEX_REPLACE_LEADING_EXCAPED_HASH,"#");let regexPrefix=makeRegexPrefix(body);return new IgnoreRule(pattern,mark,body,ignoreCase,negative,regexPrefix)},RuleManager=class{constructor(ignoreCase){this._ignoreCase=ignoreCase,this._rules=[],this._basenameCount=0}_add(pattern){if(pattern&&pattern[KEY_IGNORE]){this._rules=this._rules.concat(pattern._rules._rules),this._basenameCount+=pattern._rules._basenameCount,this._added=!0;return}if(isString2(pattern)&&(pattern={pattern}),checkPattern(pattern.pattern)){let rule=createRule(pattern,this._ignoreCase);this._added=!0,this._rules.push(rule),matchesBasename(rule.body)&&this._basenameCount++}}add(pattern){return this._added=!1,makeArray(isString2(pattern)?splitPattern(pattern):pattern).forEach(this._add,this),this._added}test(path8,checkUnignored,mode){let ignored=!1,unignored=!1,matchedRule,rules=this._rules,{length}=rules,shortcut=this._basenameCount*2>=length,basename16=shortcut?basenameOf(path8):path8;for(let index=0;index<length;index++){let rule=rules[index],{negative}=rule;!(unignored===negative&&ignored!==unignored||negative&&!ignored&&!unignored&&!checkUnignored)&&rule[mode].test(shortcut&&rule._basenameOnly?basename16:path8)&&(ignored=!negative,unignored=negative,matchedRule=negative?UNDEFINED:rule)}let ret={ignored,unignored};return matchedRule&&(ret.rule=matchedRule),ret}},throwError=(message,Ctor)=>{throw new Ctor(message)},checkPath=(path8,originalPath,doThrow)=>isString2(path8)?path8?checkPath.isNotRelative(path8)?doThrow(`path should be a \`path.relative()\`d string, but got "${originalPath}"`,RangeError):!0:doThrow("path must not be empty",TypeError):doThrow(`path must be a string, but got \`${originalPath}\``,TypeError),isNotRelative=path8=>{let first=path8.charCodeAt(0);if(first===SLASH_CODE)return!0;if(first!==DOT_CODE)return!1;if(path8.length===1)return!0;let second=path8.charCodeAt(1);return second===SLASH_CODE?!0:second!==DOT_CODE?!1:path8.length===2||path8.charCodeAt(2)===SLASH_CODE};checkPath.isNotRelative=isNotRelative;checkPath.convert=p=>p;var Ignore=class{constructor({ignorecase=!0,ignoreCase=ignorecase,allowRelativePaths=!1}={}){define(this,KEY_IGNORE,!0),this._rules=new RuleManager(ignoreCase),this._strictPathCheck=!allowRelativePaths,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(pattern){return this._rules.add(pattern)&&this._initCache(),this}addPattern(pattern){return this.add(pattern)}_test(originalPath,cache,checkUnignored){let path8=originalPath&&checkPath.convert(originalPath);return checkPath(path8,originalPath,this._strictPathCheck?throwError:RETURN_FALSE),this._t(path8,cache,checkUnignored)}checkIgnore(path8){if(path8.charCodeAt(path8.length-1)!==SLASH_CODE)return this.test(path8);let parentPath=parentOf(path8);if(parentPath){let parent=this._t(parentPath,this._testCache,!0);if(parent.ignored)return parent}return this._rules.test(path8,!1,MODE_CHECK_IGNORE)}_t(path8,cache,checkUnignored){if(path8 in cache)return cache[path8];let parentPath=parentOf(path8),parent=parentPath?this._t(parentPath,cache,checkUnignored):UNDEFINED;return cache[path8]=parent&&parent.ignored?parent:this._rules.test(path8,checkUnignored,MODE_IGNORE)}ignores(path8){return this._test(path8,this._ignoreCache,!1).ignored}createFilter(){return path8=>!this.ignores(path8)}filter(paths){return makeArray(paths).filter(this.createFilter())}test(path8){return this._test(path8,this._testCache,!0)}},factory=options=>new Ignore(options),isPathValid=path8=>checkPath(path8&&checkPath.convert(path8),path8,RETURN_FALSE),setupWindows=()=>{let makePosix=str=>/^\\\\\?\\/.test(str)||/["<>|\u0000-\u001F]+/u.test(str)?str:str.replace(/\\/g,"/");checkPath.convert=makePosix;let REGEX_TEST_WINDOWS_PATH_ABSOLUTE=/^[a-z]:\//i;checkPath.isNotRelative=path8=>REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path8)||isNotRelative(path8)};typeof process<"u"&&process.platform==="win32"&&setupWindows();module.exports=factory;factory.default=factory;module.exports.isPathValid=isPathValid;define(module.exports,Symbol.for("setupWindows"),setupWindows)}});var require_index_min=__commonJS({"node_modules/lru-cache/dist/commonjs/node/index.min.js"(exports){"use strict";var M=(c,t2)=>()=>(t2||c((t2={exports:{}}).exports,t2),t2.exports),U2=M(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0}),O.tracing=O.metrics=void 0;var j=__require("node:diagnostics_channel");O.metrics=(0,j.channel)("lru-cache:metrics"),O.tracing=(0,j.tracingChannel)("lru-cache")}),I=M(R2=>{"use strict";Object.defineProperty(R2,"__esModule",{value:!0}),R2.defaultPerf=void 0,R2.defaultPerf=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date});Object.defineProperty(exports,"__esModule",{value:!0});exports.LRUCache=void 0;var d=U2(),N=I(),C=()=>d.metrics.hasSubscribers||d.tracing.hasSubscribers,G=new Set,P=typeof process=="object"&&process?process:{},V=(c,t2,e,i)=>{typeof P.emitWarning=="function"?P.emitWarning(c,t2,e,i):console.error(`[${e}] ${t2}: ${c}`)},q2=c=>!G.has(c),T=c=>!!c&&c===Math.floor(c)&&c>0&&isFinite(c),H=c=>T(c)?c<=Math.pow(2,8)?Uint8Array:c<=Math.pow(2,16)?Uint16Array:c<=Math.pow(2,32)?Uint32Array:c<=Number.MAX_SAFE_INTEGER?W:null:null,W=class extends Array{constructor(t2){super(t2),this.fill(0)}},x=class c{heap;length;static#o=!1;static create(t2){let e=H(t2);if(!e)return[];c.#o=!0;let i=new c(t2,e);return c.#o=!1,i}constructor(t2,e){if(!c.#o)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t2),this.length=0}push(t2){this.heap[this.length++]=t2}pop(){return this.heap[--this.length]}},L2=class c{#o;#c;#m;#W;#w;#M;#j;#S;get perf(){return this.#S}ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#b;#s;#i;#t;#l;#u;#a;#h;#_;#r;#y;#F;#d;#g;#T;#U;#f;#D;static unsafeExposeInternals(t2){return{starts:t2.#F,ttls:t2.#d,autopurgeTimers:t2.#g,sizes:t2.#y,keyMap:t2.#s,keyList:t2.#i,valList:t2.#t,next:t2.#l,prev:t2.#u,get head(){return t2.#a},get tail(){return t2.#h},free:t2.#_,isBackgroundFetch:e=>t2.#e(e),backgroundFetch:(e,i,s,n)=>t2.#G(e,i,s,n),moveToTail:e=>t2.#L(e),indexes:e=>t2.#A(e),rindexes:e=>t2.#v(e),isStale:e=>t2.#p(e)}}get max(){return this.#o}get maxSize(){return this.#c}get calculatedSize(){return this.#b}get size(){return this.#n}get fetchMethod(){return this.#M}get memoMethod(){return this.#j}get dispose(){return this.#m}get onInsert(){return this.#W}get disposeAfter(){return this.#w}constructor(t2){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:r,updateAgeOnHas:h,allowStale:a,dispose:o,onInsert:m,disposeAfter:S,noDisposeOnSet:y,noUpdateTTL:u,maxSize:g=0,maxEntrySize:f=0,sizeCalculation:_,fetchMethod:l,memoMethod:w,noDeleteOnFetchRejection:F,noDeleteOnStaleGet:b,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:A,ignoreFetchAbort:v,perf:D2}=t2;if(D2!==void 0&&typeof D2?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(this.#S=D2??N.defaultPerf,e!==0&&!T(e))throw new TypeError("max option must be a nonnegative integer");let z=e?H(e):Array;if(!z)throw new Error("invalid max value: "+e);if(this.#o=e,this.#c=g,this.maxEntrySize=f||this.#c,this.sizeCalculation=_,this.sizeCalculation){if(!this.#c&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(w!==void 0&&typeof w!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#j=w,l!==void 0&&typeof l!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#M=l,this.#U=!!l,this.#s=new Map,this.#i=Array.from({length:e}).fill(void 0),this.#t=Array.from({length:e}).fill(void 0),this.#l=new z(e),this.#u=new z(e),this.#a=0,this.#h=0,this.#_=x.create(e),this.#n=0,this.#b=0,typeof o=="function"&&(this.#m=o),typeof m=="function"&&(this.#W=m),typeof S=="function"?(this.#w=S,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#T=!!this.#m,this.#D=!!this.#W,this.#f=!!this.#w,this.noDisposeOnSet=!!y,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!F,this.allowStaleOnFetchRejection=!!p,this.allowStaleOnFetchAbort=!!A,this.ignoreFetchAbort=!!v,this.maxEntrySize!==0){if(this.#c!==0&&!T(this.#c))throw new TypeError("maxSize must be a positive integer if specified");if(!T(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#X()}if(this.allowStale=!!a,this.noDeleteOnStaleGet=!!b,this.updateAgeOnGet=!!r,this.updateAgeOnHas=!!h,this.ttlResolution=T(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!T(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#H()}if(this.#o===0&&this.ttl===0&&this.#c===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#o&&!this.#c){let E="LRU_CACHE_UNBOUNDED";q2(E)&&(G.add(E),V("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",E,c))}}getRemainingTTL(t2){return this.#s.has(t2)?1/0:0}#H(){let t2=new W(this.#o),e=new W(this.#o);this.#d=t2,this.#F=e;let i=this.ttlAutopurge?Array.from({length:this.#o}):void 0;this.#g=i,this.#N=(h,a,o=this.#S.now())=>{e[h]=a!==0?o:0,t2[h]=a,s(h,a)},this.#R=h=>{e[h]=t2[h]!==0?this.#S.now():0,s(h,t2[h])};let s=this.ttlAutopurge?(h,a)=>{if(i?.[h]&&(clearTimeout(i[h]),i[h]=void 0),a&&a!==0&&i){let o=setTimeout(()=>{this.#p(h)&&this.#z(this.#i[h],"expire")},a+1);o.unref&&o.unref(),i[h]=o}}:()=>{};this.#E=(h,a)=>{if(t2[a]){let o=t2[a],m=e[a];if(!o||!m)return;h.ttl=o,h.start=m,h.now=n||r();let S=h.now-m;h.remainingTTL=o-S}};let n=0,r=()=>{let h=this.#S.now();if(this.ttlResolution>0){n=h;let a=setTimeout(()=>n=0,this.ttlResolution);a.unref&&a.unref()}return h};this.getRemainingTTL=h=>{let a=this.#s.get(h);if(a===void 0)return 0;let o=t2[a],m=e[a];if(!o||!m)return 1/0;let S=(n||r())-m;return o-S},this.#p=h=>{let a=e[h],o=t2[h];return!!o&&!!a&&(n||r())-a>o}}#R=()=>{};#E=()=>{};#N=()=>{};#p=()=>!1;#X(){let t2=new W(this.#o);this.#b=0,this.#y=t2,this.#C=e=>{this.#b-=t2[e],t2[e]=0},this.#V=(e,i,s,n)=>{if(this.#e(i))return 0;if(!T(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!T(s))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return s},this.#I=(e,i,s)=>{if(t2[e]=i,this.#c){let n=this.#c-t2[e];for(;this.#b>n;)this.#P(!0)}this.#b+=t2[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#b)}}#C=t2=>{};#I=(t2,e,i)=>{};#V=(t2,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t2=this.allowStale}={}){if(this.#n)for(let e=this.#h;this.#q(e)&&((t2||!this.#p(e))&&(yield e),e!==this.#a);)e=this.#u[e]}*#v({allowStale:t2=this.allowStale}={}){if(this.#n)for(let e=this.#a;this.#q(e)&&((t2||!this.#p(e))&&(yield e),e!==this.#h);)e=this.#l[e]}#q(t2){return t2!==void 0&&this.#s.get(this.#i[t2])===t2}*entries(){for(let t2 of this.#A())this.#t[t2]!==void 0&&this.#i[t2]!==void 0&&!this.#e(this.#t[t2])&&(yield[this.#i[t2],this.#t[t2]])}*rentries(){for(let t2 of this.#v())this.#t[t2]!==void 0&&this.#i[t2]!==void 0&&!this.#e(this.#t[t2])&&(yield[this.#i[t2],this.#t[t2]])}*keys(){for(let t2 of this.#A()){let e=this.#i[t2];e!==void 0&&!this.#e(this.#t[t2])&&(yield e)}}*rkeys(){for(let t2 of this.#v()){let e=this.#i[t2];e!==void 0&&!this.#e(this.#t[t2])&&(yield e)}}*values(){for(let t2 of this.#A())this.#t[t2]!==void 0&&!this.#e(this.#t[t2])&&(yield this.#t[t2])}*rvalues(){for(let t2 of this.#v())this.#t[t2]!==void 0&&!this.#e(this.#t[t2])&&(yield this.#t[t2])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t2,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t2(n,this.#i[i],this))return this.#x(this.#i[i],e)}}forEach(t2,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t2.call(e,n,this.#i[i],this)}}rforEach(t2,e=this){for(let i of this.#v()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t2.call(e,n,this.#i[i],this)}}purgeStale(){let t2=!1;for(let e of this.#v({allowStale:!0}))this.#p(e)&&(this.#z(this.#i[e],"expire"),t2=!0);return t2}info(t2){let e=this.#s.get(t2);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#d&&this.#F){let r=this.#d[e],h=this.#F[e];if(r&&h){let a=r-(this.#S.now()-h);n.ttl=a,n.start=Date.now()}}return this.#y&&(n.size=this.#y[e]),n}dump(){let t2=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let r={value:n};if(this.#d&&this.#F){r.ttl=this.#d[e];let h=this.#S.now()-this.#F[e];r.start=Math.floor(Date.now()-h)}this.#y&&(r.size=this.#y[e]),t2.unshift([i,r])}return t2}load(t2){this.clear();for(let[e,i]of t2){if(i.start){let s=Date.now()-i.start;i.start=this.#S.now()-s}this.#O(e,i.value,i)}}set(t2,e,i={}){let{status:s=d.metrics.hasSubscribers?{}:void 0}=i;i.status=s,s&&(s.op="set",s.key=t2,e!==void 0&&(s.value=e),s.cache=this);let n=this.#O(t2,e,i);return s&&d.metrics.hasSubscribers&&d.metrics.publish(s),n}#O(t2,e,i,s){let{ttl:n=this.ttl,start:r,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:o}=i;if(e===void 0)return o&&(o.set="deleted"),this.delete(t2),this;let{noUpdateTTL:m=this.noUpdateTTL}=i,S=this.#e(e);o&&!S&&(o.value=e);let y=this.#V(t2,e,i.size||0,a,o);if(this.maxEntrySize&&y>this.maxEntrySize)return this.#z(t2,"set"),o&&(o.set="miss",o.maxEntrySizeExceeded=!0),this;let u=this.#n===0?void 0:this.#s.get(t2);if(u===void 0)u=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#o?this.#P(!1):this.#n,this.#i[u]=t2,this.#t[u]=e,this.#s.set(t2,u),this.#l[this.#h]=u,this.#u[u]=this.#h,this.#h=u,this.#n++,this.#I(u,y,o),o&&(o.set="add"),m=!1,this.#D&&!S&&this.#W?.(e,t2,"add");else{this.#L(u);let g=this.#t[u];if(e!==g){if(!h)if(this.#e(g)){g!==s&&g.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:f}=g;f!==void 0&&f!==e&&(this.#T&&this.#m?.(f,t2,"set"),this.#f&&this.#r?.push([f,t2,"set"]))}else this.#T&&this.#m?.(g,t2,"set"),this.#f&&this.#r?.push([g,t2,"set"]);if(this.#C(u),this.#I(u,y,o),this.#t[u]=e,!S){let f=g&&this.#e(g)?g.__staleWhileFetching:g,_=f===void 0?"add":e!==f?"replace":"update";o&&(o.set=_,f!==void 0&&(o.oldValue=f)),this.#D&&this.onInsert?.(e,t2,_)}}else S||(o&&(o.set="update"),this.#D&&this.onInsert?.(e,t2,"update"))}if(n!==0&&!this.#d&&this.#H(),this.#d&&(m||this.#N(u,n,r),o&&this.#E(o,u)),!h&&this.#f&&this.#r){let g=this.#r,f;for(;f=g?.shift();)this.#w?.(...f)}return this}pop(){try{for(;this.#n;){let t2=this.#t[this.#a];if(this.#P(!0),this.#e(t2)){if(t2.__staleWhileFetching)return t2.__staleWhileFetching}else if(t2!==void 0)return t2}}finally{if(this.#f&&this.#r){let t2=this.#r,e;for(;e=t2?.shift();)this.#w?.(...e)}}}#P(t2){let e=this.#a,i=this.#i[e],s=this.#t[e],n=this.#e(s);n&&s.__abortController.abort(new Error("evicted"));let r=n?s.__staleWhileFetching:s;return(this.#T||this.#f)&&r!==void 0&&(this.#T&&this.#m?.(r,i,"evict"),this.#f&&this.#r?.push([r,i,"evict"])),this.#C(e),this.#g?.[e]&&(clearTimeout(this.#g[e]),this.#g[e]=void 0),t2&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#a=this.#h=0,this.#_.length=0):this.#a=this.#l[e],this.#s.delete(i),this.#n--,e}has(t2,e={}){let{status:i=d.metrics.hasSubscribers?{}:void 0}=e;e.status=i,i&&(i.op="has",i.key=t2,i.cache=this);let s=this.#Y(t2,e);return d.metrics.hasSubscribers&&d.metrics.publish(i),s}#Y(t2,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t2);if(n!==void 0){let r=this.#t[n];if(this.#e(r)&&r.__staleWhileFetching===void 0)return!1;if(this.#p(n))s&&(s.has="stale",this.#E(s,n));else return i&&this.#R(n),s&&(s.has="hit",this.#E(s,n)),!0}else s&&(s.has="miss");return!1}peek(t2,e={}){let{status:i=C()?{}:void 0}=e;i&&(i.op="peek",i.key=t2,i.cache=this),e.status=i;let s=this.#J(t2,e);return d.metrics.hasSubscribers&&d.metrics.publish(i),s}#J(t2,e){let{status:i,allowStale:s=this.allowStale}=e,n=this.#s.get(t2);if(n===void 0||!s&&this.#p(n)){i&&(i.peek=n===void 0?"miss":"stale");return}let r=this.#t[n],h=this.#e(r)?r.__staleWhileFetching:r;return i&&(h!==void 0?(i.peek="hit",i.value=h):i.peek="miss"),h}#G(t2,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let r=new AbortController,{signal:h}=i;h?.addEventListener("abort",()=>r.abort(h.reason),{signal:r.signal});let a={signal:r.signal,options:i,context:s},o=(f,_=!1)=>{let{aborted:l}=r.signal,w=i.ignoreFetchAbort&&f!==void 0,F=i.ignoreFetchAbort||!!(i.allowStaleOnFetchAbort&&f!==void 0);if(i.status&&(l&&!_?(i.status.fetchAborted=!0,i.status.fetchError=r.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),l&&!w&&!_)return S(r.signal.reason,F);let b=u,p=this.#t[e];return(p===u||p===void 0&&w&&_)&&(f===void 0?b.__staleWhileFetching!==void 0?this.#t[e]=b.__staleWhileFetching:this.#z(t2,"fetch"):(i.status&&(i.status.fetchUpdated=!0),this.#O(t2,f,a.options,b))),f},m=f=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=f),S(f,!1)),S=(f,_)=>{let{aborted:l}=r.signal,w=l&&i.allowStaleOnFetchAbort,F=w||i.allowStaleOnFetchRejection,b=F||i.noDeleteOnFetchRejection,p=u;if(this.#t[e]===u&&(!b||!_&&p.__staleWhileFetching===void 0?this.#z(t2,"fetch"):w||(this.#t[e]=p.__staleWhileFetching)),F)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw f},y=(f,_)=>{let l=this.#M?.(t2,n,a);r.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(f(void 0),i.allowStaleOnFetchAbort&&(f=w=>o(w,!0)))}),l&&l instanceof Promise?l.then(w=>f(w===void 0?void 0:w),_):l!==void 0&&f(l)};i.status&&(i.status.fetchDispatched=!0);let u=new Promise(y).then(o,m),g=Object.assign(u,{__abortController:r,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.#O(t2,g,{...a.options,status:void 0}),e=this.#s.get(t2)):this.#t[e]=g,g}#e(t2){if(!this.#U)return!1;let e=t2;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof AbortController}fetch(t2,e={}){let i=d.tracing.hasSubscribers,{status:s=C()?{}:void 0}=e;e.status=s,s&&e.context&&(s.context=e.context);let n=this.#B(t2,e);return s&&i&&(s.trace=!0,d.tracing.tracePromise(()=>n,s).catch(()=>{})),n}async#B(t2,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:r=this.ttl,noDisposeOnSet:h=this.noDisposeOnSet,size:a=0,sizeCalculation:o=this.sizeCalculation,noUpdateTTL:m=this.noUpdateTTL,noDeleteOnFetchRejection:S=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:y=this.allowStaleOnFetchRejection,ignoreFetchAbort:u=this.ignoreFetchAbort,allowStaleOnFetchAbort:g=this.allowStaleOnFetchAbort,context:f,forceRefresh:_=!1,status:l,signal:w}=e;if(l&&(l.op="fetch",l.key=t2,_&&(l.forceRefresh=!0),l.cache=this),!this.#U)return l&&(l.fetch="get"),this.#x(t2,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:l});let F={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:r,noDisposeOnSet:h,size:a,sizeCalculation:o,noUpdateTTL:m,noDeleteOnFetchRejection:S,allowStaleOnFetchRejection:y,allowStaleOnFetchAbort:g,ignoreFetchAbort:u,status:l,signal:w},b=this.#s.get(t2);if(b===void 0){l&&(l.fetch="miss");let p=this.#G(t2,b,F,f);return p.__returned=p}else{let p=this.#t[b];if(this.#e(p)){let E=i&&p.__staleWhileFetching!==void 0;return l&&(l.fetch="inflight",E&&(l.returnedStale=!0)),E?p.__staleWhileFetching:p.__returned=p}let A=this.#p(b);if(!_&&!A)return l&&(l.fetch="hit"),this.#L(b),s&&this.#R(b),l&&this.#E(l,b),p;let v=this.#G(t2,b,F,f),z=v.__staleWhileFetching!==void 0&&i;return l&&(l.fetch=A?"stale":"refresh",z&&A&&(l.returnedStale=!0)),z?v.__staleWhileFetching:v.__returned=v}}forceFetch(t2,e={}){let i=d.tracing.hasSubscribers,{status:s=C()?{}:void 0}=e;e.status=s,s&&e.context&&(s.context=e.context);let n=this.#K(t2,e);return s&&i&&(s.trace=!0,d.tracing.tracePromise(()=>n,s).catch(()=>{})),n}async#K(t2,e={}){let i=await this.#B(t2,e);if(i===void 0)throw new Error("fetch() returned undefined");return i}memo(t2,e={}){let{status:i=d.metrics.hasSubscribers?{}:void 0}=e;e.status=i,i&&(i.op="memo",i.key=t2,e.context&&(i.context=e.context),i.cache=this);let s=this.#Q(t2,e);return i&&(i.value=s),d.metrics.hasSubscribers&&d.metrics.publish(i),s}#Q(t2,e={}){let i=this.#j;if(!i)throw new Error("no memoMethod provided to constructor");let{context:s,status:n,forceRefresh:r,...h}=e;n&&r&&(n.forceRefresh=!0);let a=this.#x(t2,h),o=r||a===void 0;if(n&&(n.memo=o?"miss":"hit",o||(n.value=a)),!o)return a;let m=i(t2,a,{options:h,context:s});return n&&(n.value=m),this.#O(t2,m,h),m}get(t2,e={}){let{status:i=d.metrics.hasSubscribers?{}:void 0}=e;e.status=i,i&&(i.op="get",i.key=t2,i.cache=this);let s=this.#x(t2,e);return i&&(s!==void 0&&(i.value=s),d.metrics.hasSubscribers&&d.metrics.publish(i)),s}#x(t2,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:r}=e,h=this.#s.get(t2);if(h===void 0){r&&(r.get="miss");return}let a=this.#t[h],o=this.#e(a);return r&&this.#E(r,h),this.#p(h)?o?(r&&(r.get="stale-fetching"),i&&a.__staleWhileFetching!==void 0?(r&&(r.returnedStale=!0),a.__staleWhileFetching):void 0):(n||this.#z(t2,"expire"),r&&(r.get="stale"),i?(r&&(r.returnedStale=!0),a):void 0):(r&&(r.get=o?"fetching":"hit"),this.#L(h),s&&this.#R(h),o?a.__staleWhileFetching:a)}#k(t2,e){this.#u[e]=t2,this.#l[t2]=e}#L(t2){t2!==this.#h&&(t2===this.#a?this.#a=this.#l[t2]:this.#k(this.#u[t2],this.#l[t2]),this.#k(this.#h,t2),this.#h=t2)}delete(t2){return this.#z(t2,"delete")}#z(t2,e){d.metrics.hasSubscribers&&d.metrics.publish({op:"delete",delete:e,key:t2,cache:this});let i=!1;if(this.#n!==0){let s=this.#s.get(t2);if(s!==void 0)if(this.#g?.[s]&&(clearTimeout(this.#g?.[s]),this.#g[s]=void 0),i=!0,this.#n===1)this.#$(e);else{this.#C(s);let n=this.#t[s];if(this.#e(n)?n.__abortController.abort(new Error("deleted")):(this.#T||this.#f)&&(this.#T&&this.#m?.(n,t2,e),this.#f&&this.#r?.push([n,t2,e])),this.#s.delete(t2),this.#i[s]=void 0,this.#t[s]=void 0,s===this.#h)this.#h=this.#u[s];else if(s===this.#a)this.#a=this.#l[s];else{let r=this.#u[s];this.#l[r]=this.#l[s];let h=this.#l[s];this.#u[h]=this.#u[s]}this.#n--,this.#_.push(s)}}if(this.#f&&this.#r?.length){let s=this.#r,n;for(;n=s?.shift();)this.#w?.(...n)}return i}clear(){return this.#$("delete")}#$(t2){for(let e of this.#v({allowStale:!0})){let i=this.#t[e];if(this.#e(i))i.__abortController.abort(new Error("deleted"));else{let s=this.#i[e];this.#T&&this.#m?.(i,s,t2),this.#f&&this.#r?.push([i,s,t2])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#d&&this.#F){this.#d.fill(0),this.#F.fill(0);for(let e of this.#g??[])e!==void 0&&clearTimeout(e);this.#g?.fill(void 0)}if(this.#y&&this.#y.fill(0),this.#a=0,this.#h=0,this.#_.length=0,this.#b=0,this.#n=0,this.#f&&this.#r){let e=this.#r,i;for(;i=e?.shift();)this.#w?.(...i)}}};exports.LRUCache=L2}});var require_hosts=__commonJS({"node_modules/hosted-git-info/lib/hosts.js"(exports,module){"use strict";var maybeJoin=(...args)=>args.every(arg=>arg)?args.join(""):"",maybeEncode=arg=>arg?encodeURIComponent(arg):"",formatHashFragment=f=>f.toLowerCase().replace(/^\W+/g,"").replace(/(?<!\W)\W+$/,"").replace(/\//g,"").replace(/\W+/g,"-"),defaults2={sshtemplate:({domain,user,project,committish})=>`git@${domain}:${user}/${project}.git${maybeJoin("#",committish)}`,sshurltemplate:({domain,user,project,committish})=>`git+ssh://git@${domain}/${user}/${project}.git${maybeJoin("#",committish)}`,edittemplate:({domain,user,project,committish,editpath,path:path8})=>`https://${domain}/${user}/${project}${maybeJoin("/",editpath,"/",maybeEncode(committish||"HEAD"),"/",path8)}`,browsetemplate:({domain,user,project,committish,treepath})=>`https://${domain}/${user}/${project}${maybeJoin("/",treepath,"/",maybeEncode(committish))}`,browsetreetemplate:({domain,user,project,committish,treepath,path:path8,fragment,hashformat})=>`https://${domain}/${user}/${project}/${treepath}/${maybeEncode(committish||"HEAD")}/${path8}${maybeJoin("#",hashformat(fragment||""))}`,browseblobtemplate:({domain,user,project,committish,blobpath,path:path8,fragment,hashformat})=>`https://${domain}/${user}/${project}/${blobpath}/${maybeEncode(committish||"HEAD")}/${path8}${maybeJoin("#",hashformat(fragment||""))}`,docstemplate:({domain,user,project,treepath,committish})=>`https://${domain}/${user}/${project}${maybeJoin("/",treepath,"/",maybeEncode(committish))}#readme`,httpstemplate:({auth,domain,user,project,committish})=>`git+https://${maybeJoin(auth,"@")}${domain}/${user}/${project}.git${maybeJoin("#",committish)}`,filetemplate:({domain,user,project,committish,path:path8})=>`https://${domain}/${user}/${project}/raw/${maybeEncode(committish||"HEAD")}/${path8}`,shortcuttemplate:({type,user,project,committish})=>`${type}:${user}/${project}${maybeJoin("#",committish)}`,pathtemplate:({user,project,committish})=>`${user}/${project}${maybeJoin("#",committish)}`,bugstemplate:({domain,user,project})=>`https://${domain}/${user}/${project}/issues`,hashformat:formatHashFragment},hosts={};hosts.github={protocols:["git:","http:","git+ssh:","git+https:","ssh:","https:"],domain:"github.com",treepath:"tree",blobpath:"blob",editpath:"edit",filetemplate:({auth,user,project,committish,path:path8})=>`https://${maybeJoin(auth,"@")}raw.githubusercontent.com/${user}/${project}/${maybeEncode(committish||"HEAD")}/${path8}`,gittemplate:({auth,domain,user,project,committish})=>`git://${maybeJoin(auth,"@")}${domain}/${user}/${project}.git${maybeJoin("#",committish)}`,tarballtemplate:({domain,user,project,committish})=>`https://codeload.${domain}/${user}/${project}/tar.gz/${maybeEncode(committish||"HEAD")}`,extract:url=>{let[,user,project,type,committish]=url.pathname.split("/",5);if(!(type&&type!=="tree")&&(type||(committish=url.hash.slice(1)),project&&project.endsWith(".git")&&(project=project.slice(0,-4)),!(!user||!project)))return{user,project,committish}}};hosts.bitbucket={protocols:["git+ssh:","git+https:","ssh:","https:"],domain:"bitbucket.org",treepath:"src",blobpath:"src",editpath:"?mode=edit",edittemplate:({domain,user,project,committish,treepath,path:path8,editpath})=>`https://${domain}/${user}/${project}${maybeJoin("/",treepath,"/",maybeEncode(committish||"HEAD"),"/",path8,editpath)}`,tarballtemplate:({domain,user,project,committish})=>`https://${domain}/${user}/${project}/get/${maybeEncode(committish||"HEAD")}.tar.gz`,extract:url=>{let[,user,project,aux]=url.pathname.split("/",4);if(!["get"].includes(aux)&&(project&&project.endsWith(".git")&&(project=project.slice(0,-4)),!(!user||!project)))return{user,project,committish:url.hash.slice(1)}}};hosts.gitlab={protocols:["git+ssh:","git+https:","ssh:","https:"],domain:"gitlab.com",treepath:"tree",blobpath:"tree",editpath:"-/edit",tarballtemplate:({domain,user,project,committish})=>`https://${domain}/api/v4/projects/${maybeEncode(user+"/"+project)}/repository/archive.tar.gz?sha=${maybeEncode(committish||"HEAD")}`,extract:url=>{let path8=url.pathname.slice(1);if(path8.includes("/-/")||path8.includes("/archive.tar.gz"))return;let segments=path8.split("/"),project=segments.pop();project.endsWith(".git")&&(project=project.slice(0,-4));let user=segments.join("/");if(!(!user||!project))return{user,project,committish:url.hash.slice(1)}}};hosts.gist={protocols:["git:","git+ssh:","git+https:","ssh:","https:"],domain:"gist.github.com",editpath:"edit",sshtemplate:({domain,project,committish})=>`git@${domain}:${project}.git${maybeJoin("#",committish)}`,sshurltemplate:({domain,project,committish})=>`git+ssh://git@${domain}/${project}.git${maybeJoin("#",committish)}`,edittemplate:({domain,user,project,committish,editpath})=>`https://${domain}/${user}/${project}${maybeJoin("/",maybeEncode(committish))}/${editpath}`,browsetemplate:({domain,project,committish})=>`https://${domain}/${project}${maybeJoin("/",maybeEncode(committish))}`,browsetreetemplate:({domain,project,committish,path:path8,hashformat})=>`https://${domain}/${project}${maybeJoin("/",maybeEncode(committish))}${maybeJoin("#",hashformat(path8))}`,browseblobtemplate:({domain,project,committish,path:path8,hashformat})=>`https://${domain}/${project}${maybeJoin("/",maybeEncode(committish))}${maybeJoin("#",hashformat(path8))}`,docstemplate:({domain,project,committish})=>`https://${domain}/${project}${maybeJoin("/",maybeEncode(committish))}`,httpstemplate:({domain,project,committish})=>`git+https://${domain}/${project}.git${maybeJoin("#",committish)}`,filetemplate:({user,project,committish,path:path8})=>`https://gist.githubusercontent.com/${user}/${project}/raw${maybeJoin("/",maybeEncode(committish))}/${path8}`,shortcuttemplate:({type,project,committish})=>`${type}:${project}${maybeJoin("#",committish)}`,pathtemplate:({project,committish})=>`${project}${maybeJoin("#",committish)}`,bugstemplate:({domain,project})=>`https://${domain}/${project}`,gittemplate:({domain,project,committish})=>`git://${domain}/${project}.git${maybeJoin("#",committish)}`,tarballtemplate:({project,committish})=>`https://codeload.github.com/gist/${project}/tar.gz/${maybeEncode(committish||"HEAD")}`,extract:url=>{let[,user,project,aux]=url.pathname.split("/",4);if(aux!=="raw"){if(!project){if(!user)return;project=user,user=null}return project.endsWith(".git")&&(project=project.slice(0,-4)),{user,project,committish:url.hash.slice(1)}}},hashformat:function(fragment){return fragment&&"file-"+formatHashFragment(fragment)}};hosts.sourcehut={protocols:["git+ssh:","https:"],domain:"git.sr.ht",treepath:"tree",blobpath:"tree",filetemplate:({domain,user,project,committish,path:path8})=>`https://${domain}/${user}/${project}/blob/${maybeEncode(committish)||"HEAD"}/${path8}`,httpstemplate:({domain,user,project,committish})=>`https://${domain}/${user}/${project}${maybeJoin("#",committish)}`,tarballtemplate:({domain,user,project,committish})=>`https://${domain}/${user}/${project}/archive/${maybeEncode(committish)||"HEAD"}.tar.gz`,bugstemplate:()=>null,extract:url=>{let[,user,project,aux]=url.pathname.split("/",4);if(!["archive"].includes(aux)&&(project&&project.endsWith(".git")&&(project=project.slice(0,-4)),!(!user||!project)))return{user,project,committish:url.hash.slice(1)}}};for(let[name,host]of Object.entries(hosts))hosts[name]=Object.assign({},defaults2,host);module.exports=hosts}});var require_parse_url=__commonJS({"node_modules/hosted-git-info/lib/parse-url.js"(exports,module){var url=__require("url"),lastIndexOfBefore=(str,char,beforeChar)=>{let startPosition=str.indexOf(beforeChar);return str.lastIndexOf(char,startPosition>-1?startPosition:1/0)},safeUrl=u=>{try{return new url.URL(u)}catch{}},correctProtocol=(arg,protocols)=>{let firstColon=arg.indexOf(":"),proto=arg.slice(0,firstColon+1);if(Object.prototype.hasOwnProperty.call(protocols,proto)||arg.substr(firstColon,3)==="://")return arg;let firstAt=arg.indexOf("@");return firstAt>-1?firstAt>firstColon?`git+ssh://${arg}`:arg:`${arg.slice(0,firstColon+1)}//${arg.slice(firstColon+1)}`},correctUrl=giturl=>{let firstAt=lastIndexOfBefore(giturl,"@","#"),lastColonBeforeHash=lastIndexOfBefore(giturl,":","#");return lastColonBeforeHash>firstAt&&(giturl=giturl.slice(0,lastColonBeforeHash)+"/"+giturl.slice(lastColonBeforeHash+1)),lastIndexOfBefore(giturl,":","#")===-1&&giturl.indexOf("//")===-1&&(giturl=`git+ssh://${giturl}`),giturl};module.exports=(giturl,protocols)=>{let withProtocol=protocols?correctProtocol(giturl,protocols):giturl;return safeUrl(withProtocol)||safeUrl(correctUrl(withProtocol))}}});var require_from_url=__commonJS({"node_modules/hosted-git-info/lib/from-url.js"(exports,module){"use strict";var parseUrl=require_parse_url(),isGitHubShorthand=arg=>{let firstHash=arg.indexOf("#"),firstSlash=arg.indexOf("/"),secondSlash=arg.indexOf("/",firstSlash+1),firstColon=arg.indexOf(":"),firstSpace=/\s/.exec(arg),firstAt=arg.indexOf("@"),spaceOnlyAfterHash=!firstSpace||firstHash>-1&&firstSpace.index>firstHash,atOnlyAfterHash=firstAt===-1||firstHash>-1&&firstAt>firstHash,colonOnlyAfterHash=firstColon===-1||firstHash>-1&&firstColon>firstHash,secondSlashOnlyAfterHash=secondSlash===-1||firstHash>-1&&secondSlash>firstHash,hasSlash=firstSlash>0,doesNotEndWithSlash=firstHash>-1?arg[firstHash-1]!=="/":!arg.endsWith("/"),doesNotStartWithDot=!arg.startsWith(".");return spaceOnlyAfterHash&&hasSlash&&doesNotEndWithSlash&&doesNotStartWithDot&&atOnlyAfterHash&&colonOnlyAfterHash&&secondSlashOnlyAfterHash};module.exports=(giturl,opts,{gitHosts,protocols})=>{if(!giturl)return;let correctedUrl=isGitHubShorthand(giturl)?`github:${giturl}`:giturl,parsed=parseUrl(correctedUrl,protocols);if(!parsed)return;let gitHostShortcut=gitHosts.byShortcut[parsed.protocol],gitHostDomain=gitHosts.byDomain[parsed.hostname.startsWith("www.")?parsed.hostname.slice(4):parsed.hostname],gitHostName=gitHostShortcut||gitHostDomain;if(!gitHostName)return;let gitHostInfo=gitHosts[gitHostShortcut||gitHostDomain],auth=null;protocols[parsed.protocol]?.auth&&(parsed.username||parsed.password)&&(auth=`${parsed.username}${parsed.password?":"+parsed.password:""}`);let committish=null,user=null,project=null,defaultRepresentation=null;try{if(gitHostShortcut){let pathname=parsed.pathname.startsWith("/")?parsed.pathname.slice(1):parsed.pathname,firstAt=pathname.indexOf("@");firstAt>-1&&(pathname=pathname.slice(firstAt+1));let lastSlash=pathname.lastIndexOf("/");lastSlash>-1?(user=decodeURIComponent(pathname.slice(0,lastSlash)),user||(user=null),project=decodeURIComponent(pathname.slice(lastSlash+1))):project=decodeURIComponent(pathname),project.endsWith(".git")&&(project=project.slice(0,-4)),parsed.hash&&(committish=decodeURIComponent(parsed.hash.slice(1))),defaultRepresentation="shortcut"}else{if(!gitHostInfo.protocols.includes(parsed.protocol))return;let segments=gitHostInfo.extract(parsed);if(!segments)return;user=segments.user&&decodeURIComponent(segments.user),project=decodeURIComponent(segments.project),committish=decodeURIComponent(segments.committish),defaultRepresentation=protocols[parsed.protocol]?.name||parsed.protocol.slice(0,-1)}}catch(err){if(err instanceof URIError)return;throw err}return[gitHostName,user,auth,project,committish,defaultRepresentation,opts]}}});var require_lib=__commonJS({"node_modules/hosted-git-info/lib/index.js"(exports,module){"use strict";var{LRUCache}=require_index_min(),hosts=require_hosts(),fromUrl=require_from_url(),parseUrl=require_parse_url(),cache=new LRUCache({max:1e3});function unknownHostedUrl(url){try{let{protocol,hostname,pathname}=new URL(url);if(!hostname)return null;let proto=/(?:git\+)http:$/.test(protocol)?"http:":"https:",path8=pathname.replace(/\.git$/,"");return`${proto}//${hostname}${path8}`}catch{return null}}var GitHost=class _GitHost{constructor(type,user,auth,project,committish,defaultRepresentation,opts={}){Object.assign(this,_GitHost.#gitHosts[type],{type,user,auth,project,committish,default:defaultRepresentation,opts})}static#gitHosts={byShortcut:{},byDomain:{}};static#protocols={"git+ssh:":{name:"sshurl"},"ssh:":{name:"sshurl"},"git+https:":{name:"https",auth:!0},"git:":{auth:!0},"http:":{auth:!0},"https:":{auth:!0},"git+http:":{auth:!0}};static addHost(name,host){_GitHost.#gitHosts[name]=host,_GitHost.#gitHosts.byDomain[host.domain]=name,_GitHost.#gitHosts.byShortcut[`${name}:`]=name,_GitHost.#protocols[`${name}:`]={name}}static fromUrl(giturl,opts){if(typeof giturl!="string")return;let key=giturl+JSON.stringify(opts||{});if(!cache.has(key)){let hostArgs=fromUrl(giturl,opts,{gitHosts:_GitHost.#gitHosts,protocols:_GitHost.#protocols});cache.set(key,hostArgs?new _GitHost(...hostArgs):void 0)}return cache.get(key)}static fromManifest(manifest,opts={}){if(!manifest||typeof manifest!="object")return;let r=manifest.repository,rurl=r&&(typeof r=="string"?r:typeof r=="object"&&typeof r.url=="string"?r.url:null);if(!rurl)throw new Error("no repository");let info=rurl&&_GitHost.fromUrl(rurl.replace(/^git\+/,""),opts)||null;if(info)return info;let unk=unknownHostedUrl(rurl);return _GitHost.fromUrl(unk,opts)||unk}static parseUrl(url){return parseUrl(url)}#fill(template,opts){if(typeof template!="function")return null;let options={...this,...this.opts,...opts};options.path||(options.path=""),options.path.startsWith("/")&&(options.path=options.path.slice(1)),options.noCommittish&&(options.committish=null);let result=template(options);return options.noGitPlus&&result.startsWith("git+")?result.slice(4):result}hash(){return this.committish?`#${this.committish}`:""}ssh(opts){return this.#fill(this.sshtemplate,opts)}sshurl(opts){return this.#fill(this.sshurltemplate,opts)}browse(path8,...args){return typeof path8!="string"?this.#fill(this.browsetemplate,path8):typeof args[0]!="string"?this.#fill(this.browsetreetemplate,{...args[0],path:path8}):this.#fill(this.browsetreetemplate,{...args[1],fragment:args[0],path:path8})}browseFile(path8,...args){return typeof args[0]!="string"?this.#fill(this.browseblobtemplate,{...args[0],path:path8}):this.#fill(this.browseblobtemplate,{...args[1],fragment:args[0],path:path8})}docs(opts){return this.#fill(this.docstemplate,opts)}bugs(opts){return this.#fill(this.bugstemplate,opts)}https(opts){return this.#fill(this.httpstemplate,opts)}git(opts){return this.#fill(this.gittemplate,opts)}shortcut(opts){return this.#fill(this.shortcuttemplate,opts)}path(opts){return this.#fill(this.pathtemplate,opts)}tarball(opts){return this.#fill(this.tarballtemplate,{...opts,noCommittish:!1})}file(path8,opts){return this.#fill(this.filetemplate,{...opts,path:path8})}edit(path8,opts){return this.#fill(this.edittemplate,{...opts,path:path8})}getDefaultRepresentation(){return this.default}toString(opts){return this.default&&typeof this[this.default]=="function"?this[this.default](opts):this.sshurl(opts)}};for(let[name,host]of Object.entries(hosts))GitHost.addHost(name,host);module.exports=GitHost}});var undici=__toESM(require_undici(),1);import{EventEmitter}from"node:events";var DEFAULT_HTTP_IDLE_TIMEOUT_MS=3e5,DEFAULT_AUTO_SELECT_FAMILY_ATTEMPT_TIMEOUT_MS=2e3,HTTP_IDLE_TIMEOUT_CHOICES=[{label:"30 sec",timeoutMs:3e4},{label:"1 min",timeoutMs:6e4},{label:"2 min",timeoutMs:12e4},{label:"5 min",timeoutMs:3e5},{label:"disabled",timeoutMs:0}],originalGlobalFetch=globalThis.fetch,installedGlobalFetch;function parseHttpIdleTimeoutMs(value){if(typeof value=="string"){let trimmed=value.trim();return trimmed.toLowerCase()==="disabled"?0:trimmed.length===0?void 0:parseHttpIdleTimeoutMs(Number(trimmed))}if(!(typeof value!="number"||!Number.isFinite(value)||value<0))return Math.floor(value)}function formatHttpIdleTimeoutMs(timeoutMs){let choice=HTTP_IDLE_TIMEOUT_CHOICES.find(item=>item.timeoutMs===timeoutMs);return choice?choice.label:`${timeoutMs/1e3} sec`}function applyHttpProxySettings(httpProxy){let proxy=httpProxy?.trim();proxy&&(process.env.HTTP_PROXY??=proxy,process.env.HTTPS_PROXY??=proxy)}var PROXY_ENV_KEYS=["HTTP_PROXY","http_proxy","HTTPS_PROXY","https_proxy"],SOCKS_URL_PATTERN=/^socks[45]?[ah]?:\/\//iu;function dropUnsupportedSocksProxyEnv(){for(let key of PROXY_ENV_KEYS){let value=process.env[key];typeof value!="string"||!SOCKS_URL_PATTERN.test(value.trim())||(console.error(`warning: ${key}=${value.trim()} is a socks proxy URL, which this tool does not support; ignoring it and connecting directly. Set it to your VPN client's http/mixed port instead (e.g. http://127.0.0.1:7897).`),delete process.env[key])}}var ignoreUndiciDispatcherError=_error=>{};function withUndiciErrorListener(dispatcher){return dispatcher instanceof EventEmitter&&EventEmitter.prototype.on.call(dispatcher,"error",ignoreUndiciDispatcherError),dispatcher}function createUndiciClient(origin,options){return withUndiciErrorListener(new undici.Client(origin,options))}function createUndiciOriginDispatcher(origin,options){let dispatcherOptions=options;return dispatcherOptions.connections===1?createUndiciClient(origin,dispatcherOptions):withUndiciErrorListener(new undici.Pool(origin,{...dispatcherOptions,factory:createUndiciClient}))}function configureHttpDispatcher(timeoutMs=DEFAULT_HTTP_IDLE_TIMEOUT_MS){let normalizedTimeoutMs=parseHttpIdleTimeoutMs(timeoutMs);if(normalizedTimeoutMs===void 0)throw new Error(t("Invalid HTTP idle timeout: {value}",{value:String(timeoutMs)}));dropUnsupportedSocksProxyEnv();let dispatcher=withUndiciErrorListener(new undici.EnvHttpProxyAgent({allowH2:!1,proxyTunnel:!0,bodyTimeout:normalizedTimeoutMs,connect:{autoSelectFamilyAttemptTimeout:DEFAULT_AUTO_SELECT_FAMILY_ATTEMPT_TIMEOUT_MS},headersTimeout:normalizedTimeoutMs,clientFactory:createUndiciClient,factory:createUndiciOriginDispatcher}));undici.setGlobalDispatcher(dispatcher),(installedGlobalFetch===void 0?globalThis.fetch===originalGlobalFetch:globalThis.fetch===installedGlobalFetch)&&(undici.install?.(),installedGlobalFetch=globalThis.fetch)}var balanced=(a,b,str)=>{let ma=a instanceof RegExp?maybeMatch(a,str):a,mb=b instanceof RegExp?maybeMatch(b,str):b,r=ma!==null&&mb!=null&&range(ma,mb,str);return r&&{start:r[0],end:r[1],pre:str.slice(0,r[0]),body:str.slice(r[0]+ma.length,r[1]),post:str.slice(r[1]+mb.length)}},maybeMatch=(reg,str)=>{let m=str.match(reg);return m?m[0]:null},range=(a,b,str)=>{let begs,beg,left,right,result,ai=str.indexOf(a),bi=str.indexOf(b,ai+1),i=ai;if(ai>=0&&bi>0){if(a===b)return[ai,bi];for(begs=[],left=str.length;i>=0&&!result;){if(i===ai)begs.push(i),ai=str.indexOf(a,i+1);else if(begs.length===1){let r=begs.pop();r!==void 0&&(result=[r,bi])}else beg=begs.pop(),beg!==void 0&&beg<left&&(left=beg,right=bi),bi=str.indexOf(b,i+1);i=ai<bi&&ai>=0?ai:bi}begs.length&&right!==void 0&&(result=[left,right])}return result};var escSlash="\0SLASH"+Math.random()+"\0",escOpen="\0OPEN"+Math.random()+"\0",escClose="\0CLOSE"+Math.random()+"\0",escComma="\0COMMA"+Math.random()+"\0",escPeriod="\0PERIOD"+Math.random()+"\0",escSlashPattern=new RegExp(escSlash,"g"),escOpenPattern=new RegExp(escOpen,"g"),escClosePattern=new RegExp(escClose,"g"),escCommaPattern=new RegExp(escComma,"g"),escPeriodPattern=new RegExp(escPeriod,"g"),slashPattern=/\\\\/g,openPattern=/\\{/g,closePattern=/\\}/g,commaPattern=/\\,/g,periodPattern=/\\\./g,EXPANSION_MAX=1e5,EXPANSION_MAX_LENGTH=4e6;function numeric(str){return isNaN(str)?str.charCodeAt(0):parseInt(str,10)}function escapeBraces(str){return str.replace(slashPattern,escSlash).replace(openPattern,escOpen).replace(closePattern,escClose).replace(commaPattern,escComma).replace(periodPattern,escPeriod)}function unescapeBraces(str){return str.replace(escSlashPattern,"\\").replace(escOpenPattern,"{").replace(escClosePattern,"}").replace(escCommaPattern,",").replace(escPeriodPattern,".")}function parseCommaParts(str){if(!str)return[""];let parts=[],m=balanced("{","}",str);if(!m)return str.split(",");let{pre,body,post}=m,p=pre.split(",");p[p.length-1]+="{"+body+"}";let postParts=parseCommaParts(post);return post.length&&(p[p.length-1]+=postParts.shift(),p.push.apply(p,postParts)),parts.push.apply(parts,p),parts}function expand(str,options={}){if(!str)return[];let{max=EXPANSION_MAX,maxLength=EXPANSION_MAX_LENGTH}=options;return str.slice(0,2)==="{}"&&(str="\\{\\}"+str.slice(2)),expand_(escapeBraces(str),max,maxLength,!0).map(unescapeBraces)}function embrace(str){return"{"+str+"}"}function isPadded(el){return/^-?0\d/.test(el)}function lte(i,y){return i<=y}function gte(i,y){return i>=y}function combine(acc,pre,values,max,maxLength,dropEmpties){let out=[],length=0;for(let a=0;a<acc.length;a++)for(let v=0;v<values.length;v++){if(out.length>=max)return out;let expansion=acc[a]+pre+values[v];if(!(dropEmpties&&!expansion)){if(length+expansion.length>maxLength)return out;out.push(expansion),length+=expansion.length}}return out}function expandSequence(body,isAlphaSequence,max,maxLength){let n=body.split(/\.\./),N=[];if(n[0]===void 0||n[1]===void 0)return N;let x=numeric(n[0]),y=numeric(n[1]),width=Math.max(n[0].length,n[1].length),incr=n.length===3&&n[2]!==void 0?Math.max(Math.abs(numeric(n[2])),1):1,test=lte;y<x&&(incr*=-1,test=gte);let pad=n.some(isPadded),length=0;for(let i=x;test(i,y)&&N.length<max;i+=incr){let c;if(isAlphaSequence)c=String.fromCharCode(i),c==="\\"&&(c="");else if(c=String(i),pad){let need=width-c.length;if(need>0){let z=new Array(need+1).join("0");i<0?c="-"+z+c.slice(1):c=z+c}}if(length+c.length>maxLength)break;N.push(c),length+=c.length}return N}function expand_(str,max,maxLength,isTop){let acc=[""],dropEmpties=!1,firstGroup=!0;for(;;){let m=balanced("{","}",str);if(!m)return combine(acc,str,[""],max,maxLength,dropEmpties);let pre=m.pre;if(/\$$/.test(pre)){if(acc=combine(acc,pre+"{"+m.body+"}",[""],max,maxLength,dropEmpties&&!m.post.length),firstGroup=!1,!m.post.length)break;str=m.post;continue}let isNumericSequence=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body),isAlphaSequence=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body),isSequence=isNumericSequence||isAlphaSequence,isOptions=m.body.indexOf(",")>=0;if(!isSequence&&!isOptions){if(m.post.match(/,(?!,).*\}/)){str=m.pre+"{"+m.body+escClose+m.post,isTop=!0;continue}return combine(acc,pre+"{"+m.body+"}"+m.post,[""],max,maxLength,dropEmpties)}firstGroup&&(dropEmpties=isTop&&!isSequence,firstGroup=!1);let values;if(isSequence)values=expandSequence(m.body,isAlphaSequence,max,maxLength);else{let n=parseCommaParts(m.body);if(n.length===1&&n[0]!==void 0&&(n=expand_(n[0],max,maxLength,!1).map(embrace),n.length===1)){if(acc=combine(acc,pre+n[0],[""],max,maxLength,dropEmpties&&!m.post.length),!m.post.length)break;str=m.post;continue}let dropsEmpties=dropEmpties&&!m.post.length&&!pre;for(let d=0;dropsEmpties&&d<acc.length;d++)acc[d]&&(dropsEmpties=!1);values=[];let valuesLength=0;outer:for(let j=0;j<n.length;j++){let expanded=expand_(n[j],max,maxLength,!1);for(let k=0;k<expanded.length;k++){let v=expanded[k];if(!(dropsEmpties&&!v)){if(values.length>=max||valuesLength+v.length>maxLength)break outer;values.push(v),valuesLength+=v.length}}}}if(acc=combine(acc,pre,values,max,maxLength,dropEmpties&&!m.post.length),!m.post.length)break;str=m.post}return acc}var assertValidPattern=pattern=>{if(typeof pattern!="string")throw new TypeError("invalid pattern");if(pattern.length>65536)throw new TypeError("pattern is too long")};var posixClasses={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},braceEscape=s=>s.replace(/[[\]\\-]/g,"\\$&"),regexpEscape=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),rangesToString=ranges=>ranges.join(""),parseClass=(glob,position)=>{let pos=position;if(glob.charAt(pos)!=="[")throw new Error("not in a brace expression");let ranges=[],negs=[],i=pos+1,sawStart=!1,uflag=!1,escaping=!1,negate=!1,endPos=pos,rangeStart="";WHILE:for(;i<glob.length;){let c=glob.charAt(i);if((c==="!"||c==="^")&&i===pos+1){negate=!0,i++;continue}if(c==="]"&&sawStart&&!escaping){endPos=i+1;break}if(sawStart=!0,c==="\\"&&!escaping){escaping=!0,i++;continue}if(c==="["&&!escaping){for(let[cls,[unip,u,neg]]of Object.entries(posixClasses))if(glob.startsWith(cls,i)){if(rangeStart)return["$.",!1,glob.length-pos,!0];i+=cls.length,neg?negs.push(unip):ranges.push(unip),uflag=uflag||u;continue WHILE}}if(escaping=!1,rangeStart){c>rangeStart?ranges.push(braceEscape(rangeStart)+"-"+braceEscape(c)):c===rangeStart&&ranges.push(braceEscape(c)),rangeStart="",i++;continue}if(glob.startsWith("-]",i+1)){ranges.push(braceEscape(c+"-")),i+=2;continue}if(glob.startsWith("-",i+1)){rangeStart=c,i+=2;continue}ranges.push(braceEscape(c)),i++}if(endPos<i)return["",!1,0,!1];if(!ranges.length&&!negs.length)return["$.",!1,glob.length-pos,!0];if(negs.length===0&&ranges.length===1&&/^\\?.$/.test(ranges[0])&&!negate){let r=ranges[0].length===2?ranges[0].slice(-1):ranges[0];return[regexpEscape(r),!1,endPos-pos,!1]}let sranges="["+(negate?"^":"")+rangesToString(ranges)+"]",snegs="["+(negate?"":"^")+rangesToString(negs)+"]";return[ranges.length&&negs.length?"("+sranges+"|"+snegs+")":ranges.length?sranges:snegs,uflag,endPos-pos,!0]};var unescape=(s,{windowsPathsNoEscape=!1,magicalBraces=!0}={})=>magicalBraces?windowsPathsNoEscape?s.replace(/\[([^/\\])\]/g,"$1"):s.replace(/((?!\\).|^)\[([^/\\])\]/g,"$1$2").replace(/\\([^/])/g,"$1"):windowsPathsNoEscape?s.replace(/\[([^/\\{}])\]/g,"$1"):s.replace(/((?!\\).|^)\[([^/\\{}])\]/g,"$1$2").replace(/\\([^/{}])/g,"$1");var _a,types=new Set(["!","?","+","*","@"]),isExtglobType=c=>types.has(c),isExtglobAST=c=>isExtglobType(c.type),adoptionMap=new Map([["!",["@"]],["?",["?","@"]],["@",["@"]],["*",["*","+","?","@"]],["+",["+","@"]]]),adoptionWithSpaceMap=new Map([["!",["?"]],["@",["?"]],["+",["?","*"]]]),adoptionAnyMap=new Map([["!",["?","@"]],["?",["?","@"]],["@",["?","@"]],["*",["*","+","?","@"]],["+",["+","@","?","*"]]]),usurpMap=new Map([["!",new Map([["!","@"]])],["?",new Map([["*","*"],["+","*"]])],["@",new Map([["!","!"],["?","?"],["@","@"],["*","*"],["+","+"]])],["+",new Map([["?","*"],["*","*"]])]]),startNoTraversal="(?!(?:^|/)\\.\\.?(?:$|/))",startNoDot="(?!\\.)",addPatternStart=new Set(["[","."]),justDots=new Set(["..","."]),reSpecials=new Set("().*{}+?[]^$\\!"),regExpEscape=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),qmark="[^/]",star=qmark+"*?",starNoEmpty=qmark+"+?",ID=0,AST=class{type;#root;#hasMagic;#uflag=!1;#parts=[];#parent;#parentIndex;#negs;#filledNegs=!1;#options;#toString;#emptyExt=!1;id=++ID;get depth(){return(this.#parent?.depth??-1)+1}[Symbol.for("nodejs.util.inspect.custom")](){return{"@@type":"AST",id:this.id,type:this.type,root:this.#root.id,parent:this.#parent?.id,depth:this.depth,partsLength:this.#parts.length,parts:this.#parts}}constructor(type,parent,options={}){this.type=type,type&&(this.#hasMagic=!0),this.#parent=parent,this.#root=this.#parent?this.#parent.#root:this,this.#options=this.#root===this?options:this.#root.#options,this.#negs=this.#root===this?[]:this.#root.#negs,type==="!"&&!this.#root.#filledNegs&&this.#negs.push(this),this.#parentIndex=this.#parent?this.#parent.#parts.length:0}get hasMagic(){if(this.#hasMagic!==void 0)return this.#hasMagic;for(let p of this.#parts)if(typeof p!="string"&&(p.type||p.hasMagic))return this.#hasMagic=!0;return this.#hasMagic}toString(){return this.#toString!==void 0?this.#toString:this.type?this.#toString=this.type+"("+this.#parts.map(p=>String(p)).join("|")+")":this.#toString=this.#parts.map(p=>String(p)).join("")}#fillNegs(){if(this!==this.#root)throw new Error("should only call on root");if(this.#filledNegs)return this;this.toString(),this.#filledNegs=!0;let n;for(;n=this.#negs.pop();){if(n.type!=="!")continue;let p=n,pp=p.#parent;for(;pp;){for(let i=p.#parentIndex+1;!pp.type&&i<pp.#parts.length;i++)for(let part of n.#parts){if(typeof part=="string")throw new Error("string part in extglob AST??");part.copyIn(pp.#parts[i])}p=pp,pp=p.#parent}}return this}push(...parts){for(let p of parts)if(p!==""){if(typeof p!="string"&&!(p instanceof _a&&p.#parent===this))throw new Error("invalid part: "+p);this.#parts.push(p)}}toJSON(){let ret=this.type===null?this.#parts.slice().map(p=>typeof p=="string"?p:p.toJSON()):[this.type,...this.#parts.map(p=>p.toJSON())];return this.isStart()&&!this.type&&ret.unshift([]),this.isEnd()&&(this===this.#root||this.#root.#filledNegs&&this.#parent?.type==="!")&&ret.push({}),ret}isStart(){if(this.#root===this)return!0;if(!this.#parent?.isStart())return!1;if(this.#parentIndex===0)return!0;let p=this.#parent;for(let i=0;i<this.#parentIndex;i++){let pp=p.#parts[i];if(!(pp instanceof _a&&pp.type==="!"))return!1}return!0}isEnd(){if(this.#root===this||this.#parent?.type==="!")return!0;if(!this.#parent?.isEnd())return!1;if(!this.type)return this.#parent?.isEnd();let pl=this.#parent?this.#parent.#parts.length:0;return this.#parentIndex===pl-1}copyIn(part){typeof part=="string"?this.push(part):this.push(part.clone(this))}clone(parent){let c=new _a(this.type,parent);for(let p of this.#parts)c.copyIn(p);return c}static#parseAST(str,ast,pos,opt,extDepth){let maxDepth=opt.maxExtglobRecursion??2,escaping=!1,inBrace=!1,braceStart=-1,braceNeg=!1;if(ast.type===null){let i2=pos,acc2="";for(;i2<str.length;){let c=str.charAt(i2++);if(escaping||c==="\\"){escaping=!escaping,acc2+=c;continue}if(inBrace){i2===braceStart+1?(c==="^"||c==="!")&&(braceNeg=!0):c==="]"&&!(i2===braceStart+2&&braceNeg)&&(inBrace=!1),acc2+=c;continue}else if(c==="["){inBrace=!0,braceStart=i2,braceNeg=!1,acc2+=c;continue}if(!opt.noext&&isExtglobType(c)&&str.charAt(i2)==="("&&extDepth<=maxDepth){ast.push(acc2),acc2="";let ext2=new _a(c,ast);i2=_a.#parseAST(str,ext2,i2,opt,extDepth+1),ast.push(ext2);continue}acc2+=c}return ast.push(acc2),i2}let i=pos+1,part=new _a(null,ast),parts=[],acc="";for(;i<str.length;){let c=str.charAt(i++);if(escaping||c==="\\"){escaping=!escaping,acc+=c;continue}if(inBrace){i===braceStart+1?(c==="^"||c==="!")&&(braceNeg=!0):c==="]"&&!(i===braceStart+2&&braceNeg)&&(inBrace=!1),acc+=c;continue}else if(c==="["){inBrace=!0,braceStart=i,braceNeg=!1,acc+=c;continue}if(!opt.noext&&isExtglobType(c)&&str.charAt(i)==="("&&(extDepth<=maxDepth||ast&&ast.#canAdoptType(c))){let depthAdd=ast&&ast.#canAdoptType(c)?0:1;part.push(acc),acc="";let ext2=new _a(c,part);part.push(ext2),i=_a.#parseAST(str,ext2,i,opt,extDepth+depthAdd);continue}if(c==="|"){part.push(acc),acc="",parts.push(part),part=new _a(null,ast);continue}if(c===")")return acc===""&&ast.#parts.length===0&&(ast.#emptyExt=!0),part.push(acc),acc="",ast.push(...parts,part),i;acc+=c}return ast.type=null,ast.#hasMagic=void 0,ast.#parts=[str.substring(pos-1)],i}#canAdoptWithSpace(child){return this.#canAdopt(child,adoptionWithSpaceMap)}#canAdopt(child,map=adoptionMap){if(!child||typeof child!="object"||child.type!==null||child.#parts.length!==1||this.type===null)return!1;let gc=child.#parts[0];return!gc||typeof gc!="object"||gc.type===null?!1:this.#canAdoptType(gc.type,map)}#canAdoptType(c,map=adoptionAnyMap){return!!map.get(this.type)?.includes(c)}#adoptWithSpace(child,index){let gc=child.#parts[0],blank=new _a(null,gc,this.options);blank.#parts.push(""),gc.push(blank),this.#adopt(child,index)}#adopt(child,index){let gc=child.#parts[0];this.#parts.splice(index,1,...gc.#parts);for(let p of gc.#parts)typeof p=="object"&&(p.#parent=this);this.#toString=void 0}#canUsurpType(c){return!!usurpMap.get(this.type)?.has(c)}#canUsurp(child){if(!child||typeof child!="object"||child.type!==null||child.#parts.length!==1||this.type===null||this.#parts.length!==1)return!1;let gc=child.#parts[0];return!gc||typeof gc!="object"||gc.type===null?!1:this.#canUsurpType(gc.type)}#usurp(child){let m=usurpMap.get(this.type),gc=child.#parts[0],nt=m?.get(gc.type);if(!nt)return!1;this.#parts=gc.#parts;for(let p of this.#parts)typeof p=="object"&&(p.#parent=this);this.type=nt,this.#toString=void 0,this.#emptyExt=!1}static fromGlob(pattern,options={}){let ast=new _a(null,void 0,options);return _a.#parseAST(pattern,ast,0,options,0),ast}toMMPattern(){if(this!==this.#root)return this.#root.toMMPattern();let glob=this.toString(),[re,body,hasMagic,uflag]=this.toRegExpSource();if(!(hasMagic||this.#hasMagic||this.#options.nocase&&!this.#options.nocaseMagicOnly&&glob.toUpperCase()!==glob.toLowerCase()))return body;let flags=(this.#options.nocase?"i":"")+(uflag?"u":"");return Object.assign(new RegExp(`^${re}$`,flags),{_src:re,_glob:glob})}get options(){return this.#options}toRegExpSource(allowDot){let dot=allowDot??!!this.#options.dot;if(this.#root===this&&(this.#flatten(),this.#fillNegs()),!isExtglobAST(this)){let noEmpty=this.isStart()&&this.isEnd()&&!this.#parts.some(s=>typeof s!="string"),src=this.#parts.map(p=>{let[re,_,hasMagic,uflag]=typeof p=="string"?_a.#parseGlob(p,this.#hasMagic,noEmpty):p.toRegExpSource(allowDot);return this.#hasMagic=this.#hasMagic||hasMagic,this.#uflag=this.#uflag||uflag,re}).join(""),start2="";if(this.isStart()&&typeof this.#parts[0]=="string"&&!(this.#parts.length===1&&justDots.has(this.#parts[0]))){let aps=addPatternStart,needNoTrav=dot&&aps.has(src.charAt(0))||src.startsWith("\\.")&&aps.has(src.charAt(2))||src.startsWith("\\.\\.")&&aps.has(src.charAt(4)),needNoDot=!dot&&!allowDot&&aps.has(src.charAt(0));start2=needNoTrav?startNoTraversal:needNoDot?startNoDot:""}let end="";return this.isEnd()&&this.#root.#filledNegs&&this.#parent?.type==="!"&&(end="(?:$|\\/)"),[start2+src+end,unescape(src),this.#hasMagic=!!this.#hasMagic,this.#uflag]}let repeated=this.type==="*"||this.type==="+",start=this.type==="!"?"(?:(?!(?:":"(?:",body=this.#partsToRegExp(dot);if(this.isStart()&&this.isEnd()&&!body&&this.type!=="!"){let s=this.toString(),me=this;return me.#parts=[s],me.type=null,me.#hasMagic=void 0,[s,unescape(this.toString()),!1,!1]}let bodyDotAllowed=!repeated||allowDot||dot||!startNoDot?"":this.#partsToRegExp(!0);bodyDotAllowed===body&&(bodyDotAllowed=""),bodyDotAllowed&&(body=`(?:${body})(?:${bodyDotAllowed})*?`);let final="";if(this.type==="!"&&this.#emptyExt)final=(this.isStart()&&!dot?startNoDot:"")+starNoEmpty;else{let close=this.type==="!"?"))"+(this.isStart()&&!dot&&!allowDot?startNoDot:"")+star+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&bodyDotAllowed?")":this.type==="*"&&bodyDotAllowed?")?":`)${this.type}`;final=start+body+close}return[final,unescape(body),this.#hasMagic=!!this.#hasMagic,this.#uflag]}#flatten(){if(isExtglobAST(this)){let iterations=0,done=!1;do{done=!0;for(let i=0;i<this.#parts.length;i++){let c=this.#parts[i];typeof c=="object"&&(c.#flatten(),this.#canAdopt(c)?(done=!1,this.#adopt(c,i)):this.#canAdoptWithSpace(c)?(done=!1,this.#adoptWithSpace(c,i)):this.#canUsurp(c)&&(done=!1,this.#usurp(c)))}}while(!done&&++iterations<10)}else for(let p of this.#parts)typeof p=="object"&&p.#flatten();this.#toString=void 0}#partsToRegExp(dot){return this.#parts.map(p=>{if(typeof p=="string")throw new Error("string type in extglob ast??");let[re,_,_hasMagic,uflag]=p.toRegExpSource(dot);return this.#uflag=this.#uflag||uflag,re}).filter(p=>!(this.isStart()&&this.isEnd())||!!p).join("|")}static#parseGlob(glob,hasMagic,noEmpty=!1){let escaping=!1,re="",uflag=!1,inStar=!1;for(let i=0;i<glob.length;i++){let c=glob.charAt(i);if(escaping){escaping=!1,re+=(reSpecials.has(c)?"\\":"")+c;continue}if(c==="*"){if(inStar)continue;inStar=!0,re+=noEmpty&&/^[*]+$/.test(glob)?starNoEmpty:star,hasMagic=!0;continue}else inStar=!1;if(c==="\\"){i===glob.length-1?re+="\\\\":escaping=!0;continue}if(c==="["){let[src,needUflag,consumed,magic]=parseClass(glob,i);if(consumed){re+=src,uflag=uflag||needUflag,i+=consumed-1,hasMagic=hasMagic||magic;continue}}if(c==="?"){re+=qmark,hasMagic=!0;continue}re+=regExpEscape(c)}return[re,unescape(glob),!!hasMagic,uflag]}};_a=AST;var escape=(s,{windowsPathsNoEscape=!1,magicalBraces=!1}={})=>magicalBraces?windowsPathsNoEscape?s.replace(/[?*()[\]{}]/g,"[$&]"):s.replace(/[?*()[\]\\{}]/g,"\\$&"):windowsPathsNoEscape?s.replace(/[?*()[\]]/g,"[$&]"):s.replace(/[?*()[\]\\]/g,"\\$&");var minimatch=(p,pattern,options={})=>(assertValidPattern(pattern),!options.nocomment&&pattern.charAt(0)==="#"?!1:new Minimatch(pattern,options).match(p)),starDotExtRE=/^\*+([^+@!?*[(]*)$/,starDotExtTest=ext2=>f=>!f.startsWith(".")&&f.endsWith(ext2),starDotExtTestDot=ext2=>f=>f.endsWith(ext2),starDotExtTestNocase=ext2=>(ext2=ext2.toLowerCase(),f=>!f.startsWith(".")&&f.toLowerCase().endsWith(ext2)),starDotExtTestNocaseDot=ext2=>(ext2=ext2.toLowerCase(),f=>f.toLowerCase().endsWith(ext2)),starDotStarRE=/^\*+\.\*+$/,starDotStarTest=f=>!f.startsWith(".")&&f.includes("."),starDotStarTestDot=f=>f!=="."&&f!==".."&&f.includes("."),dotStarRE=/^\.\*+$/,dotStarTest=f=>f!=="."&&f!==".."&&f.startsWith("."),starRE=/^\*+$/,starTest=f=>f.length!==0&&!f.startsWith("."),starTestDot=f=>f.length!==0&&f!=="."&&f!=="..",qmarksRE=/^\?+([^+@!?*[(]*)?$/,qmarksTestNocase=([$0,ext2=""])=>{let noext=qmarksTestNoExt([$0]);return ext2?(ext2=ext2.toLowerCase(),f=>noext(f)&&f.toLowerCase().endsWith(ext2)):noext},qmarksTestNocaseDot=([$0,ext2=""])=>{let noext=qmarksTestNoExtDot([$0]);return ext2?(ext2=ext2.toLowerCase(),f=>noext(f)&&f.toLowerCase().endsWith(ext2)):noext},qmarksTestDot=([$0,ext2=""])=>{let noext=qmarksTestNoExtDot([$0]);return ext2?f=>noext(f)&&f.endsWith(ext2):noext},qmarksTest=([$0,ext2=""])=>{let noext=qmarksTestNoExt([$0]);return ext2?f=>noext(f)&&f.endsWith(ext2):noext},qmarksTestNoExt=([$0])=>{let len=$0.length;return f=>f.length===len&&!f.startsWith(".")},qmarksTestNoExtDot=([$0])=>{let len=$0.length;return f=>f.length===len&&f!=="."&&f!==".."},defaultPlatform=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",path={win32:{sep:"\\"},posix:{sep:"/"}},sep=defaultPlatform==="win32"?path.win32.sep:path.posix.sep;minimatch.sep=sep;var GLOBSTAR=Symbol("globstar **");minimatch.GLOBSTAR=GLOBSTAR;var qmark2="[^/]",star2=qmark2+"*?",twoStarDot="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",twoStarNoDot="(?:(?!(?:\\/|^)\\.).)*?",filter=(pattern,options={})=>p=>minimatch(p,pattern,options);minimatch.filter=filter;var ext=(a,b={})=>Object.assign({},a,b),defaults=def=>{if(!def||typeof def!="object"||!Object.keys(def).length)return minimatch;let orig=minimatch;return Object.assign((p,pattern,options={})=>orig(p,pattern,ext(def,options)),{Minimatch:class extends orig.Minimatch{constructor(pattern,options={}){super(pattern,ext(def,options))}static defaults(options){return orig.defaults(ext(def,options)).Minimatch}},AST:class extends orig.AST{constructor(type,parent,options={}){super(type,parent,ext(def,options))}static fromGlob(pattern,options={}){return orig.AST.fromGlob(pattern,ext(def,options))}},unescape:(s,options={})=>orig.unescape(s,ext(def,options)),escape:(s,options={})=>orig.escape(s,ext(def,options)),filter:(pattern,options={})=>orig.filter(pattern,ext(def,options)),defaults:options=>orig.defaults(ext(def,options)),makeRe:(pattern,options={})=>orig.makeRe(pattern,ext(def,options)),braceExpand:(pattern,options={})=>orig.braceExpand(pattern,ext(def,options)),match:(list,pattern,options={})=>orig.match(list,pattern,ext(def,options)),sep:orig.sep,GLOBSTAR})};minimatch.defaults=defaults;var braceExpand=(pattern,options={})=>(assertValidPattern(pattern),options.nobrace||!/\{(?:(?!\{).)*\}/.test(pattern)?[pattern]:expand(pattern,{max:options.braceExpandMax}));minimatch.braceExpand=braceExpand;var makeRe=(pattern,options={})=>new Minimatch(pattern,options).makeRe();minimatch.makeRe=makeRe;var match=(list,pattern,options={})=>{let mm=new Minimatch(pattern,options);return list=list.filter(f=>mm.match(f)),mm.options.nonull&&!list.length&&list.push(pattern),list};minimatch.match=match;var globMagic=/[?*]|[+@!]\(.*?\)|\[|\]/,regExpEscape2=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Minimatch=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(pattern,options={}){assertValidPattern(pattern),options=options||{},this.options=options,this.maxGlobstarRecursion=options.maxGlobstarRecursion??200,this.pattern=pattern,this.platform=options.platform||defaultPlatform,this.isWindows=this.platform==="win32";let awe="allowWindowsEscape";this.windowsPathsNoEscape=!!options.windowsPathsNoEscape||options[awe]===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!options.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!options.nonegate,this.comment=!1,this.empty=!1,this.partial=!!options.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=options.windowsNoMagicRoot!==void 0?options.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let pattern of this.set)for(let part of pattern)if(typeof part!="string")return!0;return!1}debug(..._){}make(){let pattern=this.pattern,options=this.options;if(!options.nocomment&&pattern.charAt(0)==="#"){this.comment=!0;return}if(!pattern){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],options.debug&&(this.debug=(...args)=>console.error(...args)),this.debug(this.pattern,this.globSet);let rawGlobParts=this.globSet.map(s=>this.slashSplit(s));this.globParts=this.preprocess(rawGlobParts),this.debug(this.pattern,this.globParts);let set=this.globParts.map((s,_,__)=>{if(this.isWindows&&this.windowsNoMagicRoot){let isUNC=s[0]===""&&s[1]===""&&(s[2]==="?"||!globMagic.test(s[2]))&&!globMagic.test(s[3]),isDrive=/^[a-z]:/i.test(s[0]);if(isUNC)return[...s.slice(0,4),...s.slice(4).map(ss=>this.parse(ss))];if(isDrive)return[s[0],...s.slice(1).map(ss=>this.parse(ss))]}return s.map(ss=>this.parse(ss))});if(this.debug(this.pattern,set),this.set=set.filter(s=>s.indexOf(!1)===-1),this.isWindows)for(let i=0;i<this.set.length;i++){let p=this.set[i];p[0]===""&&p[1]===""&&this.globParts[i][2]==="?"&&typeof p[3]=="string"&&/^[a-z]:$/i.test(p[3])&&(p[2]="?")}this.debug(this.pattern,this.set)}preprocess(globParts){if(this.options.noglobstar)for(let partset of globParts)for(let j=0;j<partset.length;j++)partset[j]==="**"&&(partset[j]="*");let{optimizationLevel=1}=this.options;return optimizationLevel>=2?(globParts=this.firstPhasePreProcess(globParts),globParts=this.secondPhasePreProcess(globParts)):optimizationLevel>=1?globParts=this.levelOneOptimize(globParts):globParts=this.adjascentGlobstarOptimize(globParts),globParts}adjascentGlobstarOptimize(globParts){return globParts.map(parts=>{let gs=-1;for(;(gs=parts.indexOf("**",gs+1))!==-1;){let i=gs;for(;parts[i+1]==="**";)i++;i!==gs&&parts.splice(gs,i-gs)}return parts})}levelOneOptimize(globParts){return globParts.map(parts=>(parts=parts.reduce((set,part)=>{let prev=set[set.length-1];return part==="**"&&prev==="**"?set:part===".."&&prev&&prev!==".."&&prev!=="."&&prev!=="**"?(set.pop(),set):(set.push(part),set)},[]),parts.length===0?[""]:parts))}levelTwoFileOptimize(parts){Array.isArray(parts)||(parts=this.slashSplit(parts));let didSomething=!1;do{if(didSomething=!1,!this.preserveMultipleSlashes){for(let i=1;i<parts.length-1;i++){let p=parts[i];i===1&&p===""&&parts[0]===""||(p==="."||p==="")&&(didSomething=!0,parts.splice(i,1),i--)}parts[0]==="."&&parts.length===2&&(parts[1]==="."||parts[1]==="")&&(didSomething=!0,parts.pop())}let dd=0;for(;(dd=parts.indexOf("..",dd+1))!==-1;){let p=parts[dd-1];p&&p!=="."&&p!==".."&&p!=="**"&&!(this.isWindows&&/^[a-z]:$/i.test(p))&&(didSomething=!0,parts.splice(dd-1,2),dd-=2)}}while(didSomething);return parts.length===0?[""]:parts}firstPhasePreProcess(globParts){let didSomething=!1;do{didSomething=!1;for(let parts of globParts){let gs=-1;for(;(gs=parts.indexOf("**",gs+1))!==-1;){let gss=gs;for(;parts[gss+1]==="**";)gss++;gss>gs&&parts.splice(gs+1,gss-gs);let next=parts[gs+1],p=parts[gs+2],p2=parts[gs+3];if(next!==".."||!p||p==="."||p===".."||!p2||p2==="."||p2==="..")continue;didSomething=!0,parts.splice(gs,1);let other=parts.slice(0);other[gs]="**",globParts.push(other),gs--}if(!this.preserveMultipleSlashes){for(let i=1;i<parts.length-1;i++){let p=parts[i];i===1&&p===""&&parts[0]===""||(p==="."||p==="")&&(didSomething=!0,parts.splice(i,1),i--)}parts[0]==="."&&parts.length===2&&(parts[1]==="."||parts[1]==="")&&(didSomething=!0,parts.pop())}let dd=0;for(;(dd=parts.indexOf("..",dd+1))!==-1;){let p=parts[dd-1];if(p&&p!=="."&&p!==".."&&p!=="**"){didSomething=!0;let splin=dd===1&&parts[dd+1]==="**"?["."]:[];parts.splice(dd-1,2,...splin),parts.length===0&&parts.push(""),dd-=2}}}}while(didSomething);return globParts}secondPhasePreProcess(globParts){for(let i=0;i<globParts.length-1;i++)for(let j=i+1;j<globParts.length;j++){let matched=this.partsMatch(globParts[i],globParts[j],!this.preserveMultipleSlashes);if(matched){globParts[i]=[],globParts[j]=matched;break}}return globParts.filter(gs=>gs.length)}partsMatch(a,b,emptyGSMatch=!1){let ai=0,bi=0,result=[],which="";for(;ai<a.length&&bi<b.length;)if(a[ai]===b[bi])result.push(which==="b"?b[bi]:a[ai]),ai++,bi++;else if(emptyGSMatch&&a[ai]==="**"&&b[bi]===a[ai+1])result.push(a[ai]),ai++;else if(emptyGSMatch&&b[bi]==="**"&&a[ai]===b[bi+1])result.push(b[bi]),bi++;else if(a[ai]==="*"&&b[bi]&&(this.options.dot||!b[bi].startsWith("."))&&b[bi]!=="**"){if(which==="b")return!1;which="a",result.push(a[ai]),ai++,bi++}else if(b[bi]==="*"&&a[ai]&&(this.options.dot||!a[ai].startsWith("."))&&a[ai]!=="**"){if(which==="a")return!1;which="b",result.push(b[bi]),ai++,bi++}else return!1;return a.length===b.length&&result}parseNegate(){if(this.nonegate)return;let pattern=this.pattern,negate=!1,negateOffset=0;for(let i=0;i<pattern.length&&pattern.charAt(i)==="!";i++)negate=!negate,negateOffset++;negateOffset&&(this.pattern=pattern.slice(negateOffset)),this.negate=negate}matchOne(file,pattern,partial=!1){let fileStartIndex=0,patternStartIndex=0;if(this.isWindows){let fileDrive=typeof file[0]=="string"&&/^[a-z]:$/i.test(file[0]),fileUNC=!fileDrive&&file[0]===""&&file[1]===""&&file[2]==="?"&&/^[a-z]:$/i.test(file[3]),patternDrive=typeof pattern[0]=="string"&&/^[a-z]:$/i.test(pattern[0]),patternUNC=!patternDrive&&pattern[0]===""&&pattern[1]===""&&pattern[2]==="?"&&typeof pattern[3]=="string"&&/^[a-z]:$/i.test(pattern[3]),fdi=fileUNC?3:fileDrive?0:void 0,pdi=patternUNC?3:patternDrive?0:void 0;if(typeof fdi=="number"&&typeof pdi=="number"){let[fd,pd]=[file[fdi],pattern[pdi]];fd.toLowerCase()===pd.toLowerCase()&&(pattern[pdi]=fd,patternStartIndex=pdi,fileStartIndex=fdi)}}let{optimizationLevel=1}=this.options;return optimizationLevel>=2&&(file=this.levelTwoFileOptimize(file)),pattern.includes(GLOBSTAR)?this.#matchGlobstar(file,pattern,partial,fileStartIndex,patternStartIndex):this.#matchOne(file,pattern,partial,fileStartIndex,patternStartIndex)}#matchGlobstar(file,pattern,partial,fileIndex,patternIndex){let firstgs=pattern.indexOf(GLOBSTAR,patternIndex),lastgs=pattern.lastIndexOf(GLOBSTAR),[head,body,tail]=partial?[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1),[]]:[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1,lastgs),pattern.slice(lastgs+1)];if(head.length){let fileHead=file.slice(fileIndex,fileIndex+head.length);if(!this.#matchOne(fileHead,head,partial,0,0))return!1;fileIndex+=head.length,patternIndex+=head.length}let fileTailMatch=0;if(tail.length){if(tail.length+fileIndex>file.length)return!1;let tailStart=file.length-tail.length;if(this.#matchOne(file,tail,partial,tailStart,0))fileTailMatch=tail.length;else{if(file[file.length-1]!==""||fileIndex+tail.length===file.length||(tailStart--,!this.#matchOne(file,tail,partial,tailStart,0)))return!1;fileTailMatch=tail.length+1}}if(!body.length){let sawSome=!!fileTailMatch;for(let i2=fileIndex;i2<file.length-fileTailMatch;i2++){let f=String(file[i2]);if(sawSome=!0,f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1}return partial||sawSome}let bodySegments=[[[],0]],currentBody=bodySegments[0],nonGsParts=0,nonGsPartsSums=[0];for(let b of body)b===GLOBSTAR?(nonGsPartsSums.push(nonGsParts),currentBody=[[],0],bodySegments.push(currentBody)):(currentBody[0].push(b),nonGsParts++);let i=bodySegments.length-1,fileLength=file.length-fileTailMatch;for(let b of bodySegments)b[1]=fileLength-(nonGsPartsSums[i--]+b[0].length);return!!this.#matchGlobStarBodySections(file,bodySegments,fileIndex,0,partial,0,!!fileTailMatch)}#matchGlobStarBodySections(file,bodySegments,fileIndex,bodyIndex,partial,globStarDepth,sawTail){let bs=bodySegments[bodyIndex];if(!bs){for(let i=fileIndex;i<file.length;i++){sawTail=!0;let f=file[i];if(f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1}return sawTail}let[body,after]=bs;for(;fileIndex<=after;){if(this.#matchOne(file.slice(0,fileIndex+body.length),body,partial,fileIndex,0)&&globStarDepth<this.maxGlobstarRecursion){let sub=this.#matchGlobStarBodySections(file,bodySegments,fileIndex+body.length,bodyIndex+1,partial,globStarDepth+1,sawTail);if(sub!==!1)return sub}let f=file[fileIndex];if(f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1;fileIndex++}return partial||null}#matchOne(file,pattern,partial,fileIndex,patternIndex){let fi,pi,pl,fl;for(fi=fileIndex,pi=patternIndex,fl=file.length,pl=pattern.length;fi<fl&&pi<pl;fi++,pi++){this.debug("matchOne loop");let p=pattern[pi],f=file[fi];if(this.debug(pattern,p,f),p===!1||p===GLOBSTAR)return!1;let hit;if(typeof p=="string"?(hit=f===p,this.debug("string match",p,f,hit)):(hit=p.test(f),this.debug("pattern match",p,f,hit)),!hit)return!1}if(fi===fl&&pi===pl)return!0;if(fi===fl)return partial;if(pi===pl)return fi===fl-1&&file[fi]==="";throw new Error("wtf?")}braceExpand(){return braceExpand(this.pattern,this.options)}parse(pattern){assertValidPattern(pattern);let options=this.options;if(pattern==="**")return GLOBSTAR;if(pattern==="")return"";let m,fastTest=null;(m=pattern.match(starRE))?fastTest=options.dot?starTestDot:starTest:(m=pattern.match(starDotExtRE))?fastTest=(options.nocase?options.dot?starDotExtTestNocaseDot:starDotExtTestNocase:options.dot?starDotExtTestDot:starDotExtTest)(m[1]):(m=pattern.match(qmarksRE))?fastTest=(options.nocase?options.dot?qmarksTestNocaseDot:qmarksTestNocase:options.dot?qmarksTestDot:qmarksTest)(m):(m=pattern.match(starDotStarRE))?fastTest=options.dot?starDotStarTestDot:starDotStarTest:(m=pattern.match(dotStarRE))&&(fastTest=dotStarTest);let re=AST.fromGlob(pattern,this.options).toMMPattern();return fastTest&&typeof re=="object"&&Reflect.defineProperty(re,"test",{value:fastTest}),re}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let set=this.set;if(!set.length)return this.regexp=!1,this.regexp;let options=this.options,twoStar=options.noglobstar?star2:options.dot?twoStarDot:twoStarNoDot,flags=new Set(options.nocase?["i"]:[]),re=set.map(pattern=>{let pp=pattern.map(p=>{if(p instanceof RegExp)for(let f of p.flags.split(""))flags.add(f);return typeof p=="string"?regExpEscape2(p):p===GLOBSTAR?GLOBSTAR:p._src});pp.forEach((p,i)=>{let next=pp[i+1],prev=pp[i-1];p!==GLOBSTAR||prev===GLOBSTAR||(prev===void 0?next!==void 0&&next!==GLOBSTAR?pp[i+1]="(?:\\/|"+twoStar+"\\/)?"+next:pp[i]=twoStar:next===void 0?pp[i-1]=prev+"(?:\\/|\\/"+twoStar+")?":next!==GLOBSTAR&&(pp[i-1]=prev+"(?:\\/|\\/"+twoStar+"\\/)"+next,pp[i+1]=GLOBSTAR))});let filtered=pp.filter(p=>p!==GLOBSTAR);if(this.partial&&filtered.length>=1){let prefixes=[];for(let i=1;i<=filtered.length;i++)prefixes.push(filtered.slice(0,i).join("/"));return"(?:"+prefixes.join("|")+")"}return filtered.join("/")}).join("|"),[open4,close]=set.length>1?["(?:",")"]:["",""];re="^"+open4+re+close+"$",this.partial&&(re="^(?:\\/|"+open4+re.slice(1,-1)+close+")$"),this.negate&&(re="^(?!"+re+").+$");try{this.regexp=new RegExp(re,[...flags].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(p){return this.preserveMultipleSlashes?p.split("/"):this.isWindows&&/^\/\/[^/]+/.test(p)?["",...p.split(/\/+/)]:p.split(/\/+/)}match(f,partial=this.partial){if(this.debug("match",f,this.pattern),this.comment)return!1;if(this.empty)return f==="";if(f==="/"&&partial)return!0;let options=this.options;this.isWindows&&(f=f.split("\\").join("/"));let ff=this.slashSplit(f);this.debug(this.pattern,"split",ff);let set=this.set;this.debug(this.pattern,"set",set);let filename=ff[ff.length-1];if(!filename)for(let i=ff.length-2;!filename&&i>=0;i--)filename=ff[i];for(let pattern of set){let file=ff;if(options.matchBase&&pattern.length===1&&(file=[filename]),this.matchOne(file,pattern,partial))return options.flipNegate?!0:!this.negate}return options.flipNegate?!1:this.negate}static defaults(def){return minimatch.defaults(def).Minimatch}};minimatch.AST=AST;minimatch.Minimatch=Minimatch;minimatch.escape=escape;minimatch.unescape=unescape;var DEFAULT_THINKING_LEVEL="medium",THINKING_LEVEL_OPTIONS=["off","minimal","low","medium","high","xhigh","max"];var VALID_THINKING_LEVELS=["off","minimal","low","medium","high","xhigh","max"];function isValidThinkingLevel(level){return VALID_THINKING_LEVELS.includes(level)}var defaultModelPerProvider={"amazon-bedrock":"us.anthropic.claude-opus-4-6-v1","ant-ling":"Ring-2.6-1T",anthropic:"claude-opus-4-8",openai:"gpt-5.5","azure-openai-responses":"gpt-5.4","openai-codex":"gpt-6.1-sol",radius:"auto",nvidia:"nvidia/nemotron-3-super-120b-a12b",deepseek:"deepseek-v4-pro",google:"gemini-3.1-pro-preview","google-vertex":"gemini-3.1-pro-preview","github-copilot":"gpt-5.4",openrouter:"moonshotai/kimi-k2.6","vercel-ai-gateway":"zai/glm-5.1",xai:"grok-4.6",groq:"openai/gpt-oss-120b",cerebras:"gpt-oss-120b",zai:"glm-5.3","zai-coding-cn":"glm-5.3",mistral:"devstral-medium-latest",minimax:"MiniMax-M2.7","minimax-cn":"MiniMax-M2.7",moonshotai:"kimi-k2.6","moonshotai-cn":"kimi-k2.6",huggingface:"moonshotai/Kimi-K2.6",fireworks:"accounts/fireworks/models/kimi-k3",together:"moonshotai/Kimi-K3",baseten:"zai-org/GLM-5.2",opencode:"kimi-k2.6","opencode-go":"kimi-k3","kimi-coding":"kimi-for-coding","cloudflare-workers-ai":"@cf/moonshotai/kimi-k2.6","cloudflare-ai-gateway":"workers-ai/@cf/moonshotai/kimi-k2.6","qwen-token-plan":"qwen3.7-max","qwen-token-plan-cn":"qwen3.7-max","qwen-token-plan-individual":"qwen3.8-max",xiaomi:"mimo-v2.5-pro","xiaomi-token-plan-cn":"mimo-v2.5-pro","xiaomi-token-plan-ams":"mimo-v2.5-pro","xiaomi-token-plan-sgp":"mimo-v2.5-pro"};function isAlias(id){return id.endsWith("-latest")?!0:!/-\d{8}$/.test(id)}function findExactModelReferenceMatch(modelReference,availableModels){let trimmedReference=modelReference.trim();if(!trimmedReference)return;let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels.filter(model=>`${model.provider}/${model.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length===1)return canonicalMatches[0];if(canonicalMatches.length>1)return;let slashIndex=trimmedReference.indexOf("/");if(slashIndex!==-1){let provider=trimmedReference.substring(0,slashIndex).trim(),modelId=trimmedReference.substring(slashIndex+1).trim();if(provider&&modelId){let providerMatches=availableModels.filter(model=>model.provider.toLowerCase()===provider.toLowerCase()&&model.id.toLowerCase()===modelId.toLowerCase());if(providerMatches.length===1)return providerMatches[0];if(providerMatches.length>1)return}}let idMatches=availableModels.filter(model=>model.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches[0]:void 0}function tryMatchModel(modelPattern,availableModels){let exactMatch=findExactModelReferenceMatch(modelPattern,availableModels);if(exactMatch)return exactMatch;let matches=availableModels.filter(m=>m.id.toLowerCase().includes(modelPattern.toLowerCase())||m.name?.toLowerCase().includes(modelPattern.toLowerCase()));if(matches.length===0)return;let aliases=matches.filter(m=>isAlias(m.id)),datedVersions=matches.filter(m=>!isAlias(m.id));return aliases.length>0?(aliases.sort((a,b)=>b.id.localeCompare(a.id)),aliases[0]):(datedVersions.sort((a,b)=>b.id.localeCompare(a.id)),datedVersions[0])}function buildFallbackModel(provider,modelId,availableModels){let providerModels=availableModels.filter(m=>m.provider===provider);if(providerModels.length===0)return;let defaultId=defaultModelPerProvider[provider];return{...defaultId?providerModels.find(m=>m.id===defaultId)??providerModels[0]:providerModels[0],id:modelId,name:modelId}}function parseModelPattern(pattern,availableModels,options){let exactMatch=tryMatchModel(pattern,availableModels);if(exactMatch)return{model:exactMatch,thinkingLevel:void 0,warning:void 0};let lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex===-1)return{model:void 0,thinkingLevel:void 0,warning:void 0};let prefix=pattern.substring(0,lastColonIndex),suffix=pattern.substring(lastColonIndex+1);if(isValidThinkingLevel(suffix)){let result=parseModelPattern(prefix,availableModels,options);return result.model?{model:result.model,thinkingLevel:result.warning?void 0:suffix,warning:result.warning}:result}else{if(!(options?.allowInvalidThinkingLevelFallback??!0))return{model:void 0,thinkingLevel:void 0,warning:void 0};let result=parseModelPattern(prefix,availableModels,options);return result.model?{model:result.model,thinkingLevel:void 0,warning:`Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`}:result}}function resolveModelScopeFromModels(patterns,models){let availableModels=[...models],scopedModels=[],diagnostics=[];for(let pattern of patterns){if(pattern.includes("*")||pattern.includes("?")||pattern.includes("[")){let colonIdx=pattern.lastIndexOf(":"),globPattern=pattern,thinkingLevel2;if(colonIdx!==-1){let suffix=pattern.substring(colonIdx+1);isValidThinkingLevel(suffix)&&(thinkingLevel2=suffix,globPattern=pattern.substring(0,colonIdx))}let exactMatch=findExactModelReferenceMatch(globPattern,availableModels);if(exactMatch){scopedModels.find(sm=>modelsAreEqual(sm.model,exactMatch))||scopedModels.push({model:exactMatch,thinkingLevel:thinkingLevel2});continue}let matchingModels=availableModels.filter(m=>{let fullId=`${m.provider}/${m.id}`;return minimatch(fullId,globPattern,{nocase:!0})||minimatch(m.id,globPattern,{nocase:!0})});if(matchingModels.length===0){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern});continue}for(let model2 of matchingModels)scopedModels.find(sm=>modelsAreEqual(sm.model,model2))||scopedModels.push({model:model2,thinkingLevel:thinkingLevel2});continue}let{model,thinkingLevel,warning}=parseModelPattern(pattern,availableModels);if(warning&&diagnostics.push({type:"warning",code:"invalid-thinking-level",message:warning,pattern}),!model){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern});continue}scopedModels.find(sm=>modelsAreEqual(sm.model,model))||scopedModels.push({model,thinkingLevel})}return{scopedModels,diagnostics}}async function resolveModelScopeWithDiagnostics(patterns,modelRuntime,options){return resolveModelScopeFromModels(patterns,await modelRuntime.getAvailable(void 0,options))}async function resolveModelScope(patterns,modelRuntime,options){let{scopedModels,diagnostics}=await resolveModelScopeWithDiagnostics(patterns,modelRuntime,options);for(let diagnostic5 of diagnostics)console.warn(source_default.yellow(`Warning: ${diagnostic5.message}`));return scopedModels}function resolveCliModel(options){let{cliProvider,cliModel,cliThinking,modelRuntime}=options;if(!cliModel)return{model:void 0,warning:void 0,error:void 0};let availableModels=[...modelRuntime.getModels()];if(availableModels.length===0)return{model:void 0,warning:void 0,error:"No models available. Check your installation or add models to models.json."};let providerMap=new Map;for(let m of availableModels)providerMap.set(m.provider.toLowerCase(),m.provider);let provider=cliProvider?providerMap.get(cliProvider.toLowerCase()):void 0;if(cliProvider&&!provider)return{model:void 0,warning:void 0,error:`Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`};let pattern=cliModel,inferredProvider=!1;if(!provider){let slashIndex=cliModel.indexOf("/");if(slashIndex!==-1){let maybeProvider=cliModel.substring(0,slashIndex),canonical=providerMap.get(maybeProvider.toLowerCase());canonical&&(provider=canonical,pattern=cliModel.substring(slashIndex+1),inferredProvider=!0)}}if(!provider){let lower=cliModel.toLowerCase(),exactMatches=availableModels.filter(m=>m.id.toLowerCase()===lower||`${m.provider}/${m.id}`.toLowerCase()===lower);if(exactMatches.length===1)return{model:exactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};if(exactMatches.length>1){let authenticatedExactMatches=exactMatches.filter(m=>modelRuntime.hasConfiguredAuth(m.provider));if(authenticatedExactMatches.length===1)return{model:authenticatedExactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};let matches=exactMatches.map(m=>`${m.provider}/${m.id}`).sort((a,b)=>a.localeCompare(b)).join(", "),authHint=authenticatedExactMatches.length===0?"No matching provider is authenticated.":"More than one matching provider is authenticated.";return{model:void 0,warning:void 0,thinkingLevel:void 0,error:`Model "${cliModel}" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`}}}if(cliProvider&&provider){let prefix=`${provider}/`;cliModel.toLowerCase().startsWith(prefix.toLowerCase())&&(pattern=cliModel.substring(prefix.length))}let candidates=provider?availableModels.filter(m=>m.provider===provider):availableModels,{model,thinkingLevel,warning}=parseModelPattern(pattern,candidates,{allowInvalidThinkingLevelFallback:!1});if(model){if(inferredProvider){let rawExactMatches=availableModels.filter(m=>m.id.toLowerCase()===cliModel.toLowerCase()&&!modelsAreEqual(m,model));if(rawExactMatches.length>0&&!modelRuntime.hasConfiguredAuth(model.provider)){let authenticatedRawMatches=rawExactMatches.filter(m=>modelRuntime.hasConfiguredAuth(m.provider));if(authenticatedRawMatches.length===1)return{model:authenticatedRawMatches[0],thinkingLevel:void 0,warning:void 0,error:void 0}}}return{model,thinkingLevel,warning,error:void 0}}if(inferredProvider){let lower=cliModel.toLowerCase(),exact=availableModels.find(m=>m.id.toLowerCase()===lower||`${m.provider}/${m.id}`.toLowerCase()===lower);if(exact)return{model:exact,warning:void 0,thinkingLevel:void 0,error:void 0};let fallback=parseModelPattern(cliModel,availableModels,{allowInvalidThinkingLevelFallback:!1});if(fallback.model)return{model:fallback.model,thinkingLevel:fallback.thinkingLevel,warning:fallback.warning,error:void 0}}if(provider){let fallbackPattern=pattern,fallbackThinking;if(!cliThinking){let lastColon=pattern.lastIndexOf(":");if(lastColon!==-1){let suffix=pattern.substring(lastColon+1);isValidThinkingLevel(suffix)&&(fallbackPattern=pattern.substring(0,lastColon),fallbackThinking=suffix)}}let fallbackModel=buildFallbackModel(provider,fallbackPattern,availableModels);if(fallbackModel){let requestedThinking=cliThinking??fallbackThinking,model2=requestedThinking&&requestedThinking!=="off"?{...fallbackModel,reasoning:!0}:fallbackModel,fallbackWarning=warning?`${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`:`Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`;return{model:model2,thinkingLevel:fallbackThinking,warning:fallbackWarning,error:void 0}}}let display=provider?`${provider}/${pattern}`:cliModel;return{model:void 0,thinkingLevel:void 0,warning,error:`Model "${display}" not found. Use --list-models to see available models.`}}async function findInitialModel(options){let{cliProvider,cliModel,scopedModels,isContinuing,defaultProvider,defaultModelId,defaultThinkingLevel,modelThinkingLevels,modelRuntime}=options,model,thinkingLevel=DEFAULT_THINKING_LEVEL;if(cliProvider&&cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error&&(console.error(source_default.red(resolved.error)),process.exit(1)),resolved.model)return{model:resolved.model,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}if(scopedModels.length>0&&!isContinuing){let scopedModel=scopedModels[0],perModel=modelThinkingLevels?.[`${scopedModel.model.provider}/${scopedModel.model.id}`];return{model:scopedModel.model,thinkingLevel:scopedModel.thinkingLevel??perModel??defaultThinkingLevel??DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}if(defaultProvider&&defaultModelId){let found=modelRuntime.getModel(defaultProvider,defaultModelId);if(found&&modelRuntime.hasConfiguredAuth(found.provider)){model=found;let perModel=modelThinkingLevels?.[`${defaultProvider}/${defaultModelId}`];return perModel?thinkingLevel=perModel:defaultThinkingLevel&&(thinkingLevel=defaultThinkingLevel),{model,thinkingLevel,fallbackMessage:void 0}}}let availableModels=[...modelRuntime.getAvailableSnapshot()];if(availableModels.length>0){for(let provider of Object.keys(defaultModelPerProvider)){let defaultId=defaultModelPerProvider[provider],match2=availableModels.find(m=>m.provider===provider&&m.id===defaultId);if(match2)return{model:match2,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}return{model:availableModels[0],thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}return{model:void 0,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}var 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 normalizeSessionName(value){let name=value.trim();return name.length>0?name:void 0}function parseBoundedPluginId(args,index,result,option,values){let raw=args[index+1];if(raw===void 0||raw.startsWith("-"))return result.diagnostics.push({type:"error",message:t("{option} requires a plugin id",{option})}),index;let value=raw.trim();return value.length===0?(result.diagnostics.push({type:"error",message:t("{option} requires a non-empty plugin id",{option})}),index+1):value.length>MAX_PLUGIN_CLI_ID_CHARS?(result.diagnostics.push({type:"error",message:t("{option} plugin id must be at most {max} characters",{option,max:MAX_PLUGIN_CLI_ID_CHARS})}),index+1):values.length>=MAX_PLUGIN_CLI_IDS?(result.diagnostics.push({type:"error",message:t("{option} accepts at most {max} plugin ids",{option,max:MAX_PLUGIN_CLI_IDS})}),index+1):(values.push(value),index+1)}function parsePluginProfileValue(args,index,result,rawValue){let raw=rawValue??args[index+1];if(raw===void 0||raw.startsWith("-"))return result.diagnostics.push({type:"error",message:t("--plugin-profile requires a profile id")}),index;let value=raw.trim();return value.length===0?(result.diagnostics.push({type:"error",message:t("--plugin-profile requires a non-empty profile id")}),rawValue===void 0?index+1:index):value.length>MAX_PLUGIN_CLI_ID_CHARS?(result.diagnostics.push({type:"error",message:t("--plugin-profile id must be at most {max} characters",{max:MAX_PLUGIN_CLI_ID_CHARS})}),rawValue===void 0?index+1:index):(result.pluginProfile=value,rawValue===void 0?index+1:index)}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"){let mode=args[i+1];if(mode===void 0||mode.startsWith("-")){result.diagnostics.push({type:"error",message:t("--mode requires text, json, or rpc")});continue}if(i++,mode!=="text"&&mode!=="json"&&mode!=="rpc"){result.diagnostics.push({type:"error",message:t('Invalid mode "{mode}". Valid values: text, json, rpc',{mode})});continue}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:t("--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:t("--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:t("--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:t("--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:t("--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:t("--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:t("--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:t("--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:t('Invalid thinking level "{level}". Valid values: {levels}',{level,levels: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:t("--trace-kind requires a comma-separated kind list")});else{i++;let kinds=raw.split(",").map(kind=>kind.trim()).filter(kind=>kind.length>0),invalid=kinds.filter(kind=>!isValidTraceKind(kind));kinds.length===0?result.diagnostics.push({type:"error",message:t("--trace-kind requires at least one trace kind")}):invalid.length>0?result.diagnostics.push({type:"error",message:t('Invalid trace kind(s) "{kinds}". Valid values: {valid}',{kinds:invalid.join(", "),valid: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:t("--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:t('Invalid trace limit "{limit}". Expected a positive integer',{limit:raw})})}}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:t("--log-level requires a level")}):isValidHostLogLevel(level)?(result.logLevel=level,i++):(i++,result.diagnostics.push({type:"error",message:t('Invalid log level "{level}". Valid values: {levels}',{level,levels: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:t("--plugin-scope must be global or project")}):result.pluginSelectionScope!==void 0?result.diagnostics.push({type:"error",message:t("--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:t("{option} requires a non-empty plugin id",{option:"--plugin"})}):value.length>MAX_PLUGIN_CLI_ID_CHARS?result.diagnostics.push({type:"error",message:t("{option} plugin id must be at most {max} characters",{option:"--plugin",max:MAX_PLUGIN_CLI_ID_CHARS})}):result.plugins.length>=MAX_PLUGIN_CLI_IDS?result.diagnostics.push({type:"error",message:t("{option} accepts at most {max} plugin ids",{option:"--plugin",max:MAX_PLUGIN_CLI_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:t("{option} requires a non-empty plugin id",{option:"--disable-plugin"})}):value.length>MAX_PLUGIN_CLI_ID_CHARS?result.diagnostics.push({type:"error",message:t("{option} plugin id must be at most {max} characters",{option:"--disable-plugin",max:MAX_PLUGIN_CLI_ID_CHARS})}):result.disabledPlugins.length>=MAX_PLUGIN_CLI_IDS?result.diagnostics.push({type:"error",message:t("{option} accepts at most {max} plugin ids",{option:"--disable-plugin",max:MAX_PLUGIN_CLI_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:t("--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:t("--tui-mode requires regular or fullscreen")}):(i++,result.diagnostics.push({type:"error",message:t('Invalid TUI mode "{mode}". Valid values: regular, fullscreen',{mode})}))}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)} - ${t("AI coding assistant with read, bash, edit, write tools")}
4
4
 
5
5
  ${source_default.bold(t("Usage:"))}
@@ -210,7 +210,7 @@ ${details}
210
210
 
211
211
  File: ${path8}`)}let providers=new Map;for(let[providerId,provider]of Object.entries(config.providers))providers.set(providerId,deepFreeze(structuredClone(provider)));return new _ModelConfig(providers)}getProvider(providerId){return this.providers.get(providerId)}getProviderIds(){return[...this.providers.keys()]}getError(){return this.error}getImageModelCatalog(){let catalog={};for(let[providerId,provider]of this.providers){let imageModels=(provider.models??[]).filter(model=>Array.isArray(model.output)&&model.output.includes("image"));imageModels.length!==0&&(catalog[providerId]=imageModels.map(model=>({id:model.id,...model.name===void 0?{}:{name:model.name}})))}return deepFreeze(catalog)}};import{join as join2}from"node:path";var sharedModelsFileReadState,InMemoryCodingAgentModelsStore=class{entries=new Map;async read(providerId,options){options?.signal?.throwIfAborted();let entry=this.entries.get(providerId);return entry?structuredClone(entry):void 0}async write(providerId,entry,options){options?.signal?.throwIfAborted(),this.entries.set(providerId,structuredClone(entry))}async delete(providerId,options){options?.signal?.throwIfAborted(),this.entries.delete(providerId)}},FileModelsStore=class{storage;path;readState;constructor(path8=join2(getAgentDir(),"models-store.json")){this.path=normalizePath(path8),this.storage=new FileAuthStorageBackend(this.path),this.readState=sharedModelsFileReadState?.path===this.path?sharedModelsFileReadState.readState:{data:{}},sharedModelsFileReadState||(sharedModelsFileReadState={path:this.path,readState:this.readState})}parse(content){return content?JSON.parse(stripBom(content)):{}}updateReadState(readState,data,revision){readState.data=data,readState.revision=revision}reloadFromStorage(readState,options){return this.storage.withLockAsync(async content=>{let data=this.parse(content);return this.updateReadState(readState,data,getFileRevision(this.path)),{result:data}},options)}async readLatest(readState,options){options?.signal?.throwIfAborted();let revision=getFileRevision(this.path);if(revision!==void 0&&revision===readState.revision)return readState.data;if(!readState.reload){let controller=new AbortController,reload2={controller,promise:this.reloadFromStorage(readState,{signal:controller.signal}),readers:0};readState.reload=reload2,reload2.promise.then(()=>{readState.reload===reload2&&(readState.reload=void 0)},()=>{readState.reload===reload2&&(readState.reload=void 0)})}let reload=readState.reload;reload.readers++;try{return await raceWithAbortSignal(reload.promise,options?.signal)}finally{reload.readers--,reload.readers===0&&readState.reload===reload&&(readState.reload=void 0,reload.controller.abort())}}async read(providerId,options){let entry=(await this.readLatest(this.readState,options))[providerId];return options?.signal?.throwIfAborted(),entry?structuredClone(entry):void 0}async write(providerId,entry,options){let latest;await this.storage.withLockAsync(async content=>{let current=this.parse(content);return current[providerId]=structuredClone(entry),latest=current,{result:void 0,next:JSON.stringify(current,null,2)}},options),latest&&this.updateReadState(this.readState,latest)}async delete(providerId,options){let latest;await this.storage.withLockAsync(async content=>{let current=this.parse(content);return delete current[providerId],latest=current,{result:void 0,next:JSON.stringify(current,null,2)}},options),latest&&this.updateReadState(this.readState,latest)}};function mergeCompat(base,override){if(!override)return base;let merged={...base,...override},baseNested=base,overrideNested=override,mergedNested=merged;for(let key of["openRouterRouting","vercelGatewayRouting","chatTemplateKwargs","chatTemplateArgs"]){let baseValue=baseNested?.[key],overrideValue=overrideNested[key];(typeof baseValue=="object"&&baseValue!==null||typeof overrideValue=="object"&&overrideValue!==null)&&(mergedNested[key]={...baseValue,...overrideValue})}return merged}function applyModelOverride(model,override){return{...model,name:override.name??model.name,reasoning:override.reasoning??model.reasoning,thinkingLevelMap:override.thinkingLevelMap?{...model.thinkingLevelMap,...override.thinkingLevelMap}:model.thinkingLevelMap,input:override.input??model.input,cost:override.cost?{input:override.cost.input??model.cost.input,output:override.cost.output??model.cost.output,cacheRead:override.cost.cacheRead??model.cost.cacheRead,cacheWrite:override.cost.cacheWrite??model.cost.cacheWrite,tiers:override.cost.tiers??model.cost.tiers}:model.cost,contextWindow:override.contextWindow??model.contextWindow,maxTokens:override.maxTokens??model.maxTokens,samplingParams:override.samplingParams?{...model.samplingParams,...override.samplingParams}:model.samplingParams,compat:mergeCompat(model.compat,override.compat)}}function modelFromJson(providerId,definition,providerConfig,defaults2){let api=definition.api??providerConfig.api??defaults2?.api;if(!api)throw new Error(t('Provider {providerId}, model {modelId}: no "api" specified. Set at provider or model level.',{providerId,modelId:definition.id}));let baseUrl=definition.baseUrl??providerConfig.baseUrl??defaults2?.baseUrl;if(!baseUrl)throw new Error(t('Provider {providerId}: "baseUrl" is required when defining custom models.',{providerId}));if(definition.contextWindow!==void 0&&definition.contextWindow<=0)throw new Error(t("Provider {providerId}, model {modelId}: invalid contextWindow",{providerId,modelId:definition.id}));if(definition.maxTokens!==void 0&&definition.maxTokens<=0)throw new Error(t("Provider {providerId}, model {modelId}: invalid maxTokens",{providerId,modelId:definition.id}));return{id:definition.id,name:definition.name??definition.id,api,provider:providerId,baseUrl,reasoning:definition.reasoning??!0,thinkingLevelMap:definition.thinkingLevelMap,input:definition.input??["text"],cost:definition.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:definition.contextWindow??256e3,maxTokens:definition.maxTokens??32768,samplingParams:definition.samplingParams,headers:void 0,compat:mergeCompat(providerConfig.compat,definition.compat)}}function findModelDefaults(models,modelId,api){return models.find(model=>model.id===modelId)??(api?models.find(model=>model.api===api):void 0)??models.find(model=>model.api==="openai-completions")??models[0]}function applyModelsJson(providerId,baseModels,config){if(!config)return[...baseModels];if(config.oauth&&!config.baseUrl)throw new Error(t('Provider {providerId}: "baseUrl" is required when "oauth" is set.',{providerId}));let hasOverrides=config.modelOverrides&&Object.keys(config.modelOverrides).length>0;if(!config.models?.length&&!config.baseUrl&&!config.headers&&!config.compat&&!hasOverrides&&!config.oauth&&config.authHeader===void 0)throw new Error(t('Provider {providerId}: must specify "baseUrl", "headers", "compat", "modelOverrides", or "models".',{providerId}));let models=baseModels.map(model=>({...model,baseUrl:config.oauth==="radius"?model.baseUrl:config.baseUrl??model.baseUrl,compat:mergeCompat(model.compat,config.compat)}));for(let definition of config.models??[]){let existingIndex=models.findIndex(model2=>model2.id===definition.id),defaults2=findModelDefaults(models,definition.id,definition.api??config.api),model=modelFromJson(providerId,definition,config,defaults2);existingIndex>=0?models[existingIndex]=model:models.push(model)}return models}function applyExtension(providerId,models,config){return config?config.models?config.models.map(definition=>{let defaults2=findModelDefaults(models,definition.id,definition.api??config.api),api=definition.api??config.api??defaults2?.api;if(!api)throw new Error(t('Provider {providerId}, model {modelId}: no "api" specified. Set at provider or model level.',{providerId,modelId:definition.id}));let baseUrl=definition.baseUrl??config.baseUrl??defaults2?.baseUrl;if(!baseUrl)throw new Error(t('Provider {providerId}: "baseUrl" is required when defining custom models.',{providerId}));return{...definition,api,provider:providerId,baseUrl,headers:void 0}}):config.baseUrl?models.map(model=>({...model,baseUrl:config.baseUrl})):[...models]:[...models]}function adaptOAuth(config){return{name:config.name,isSubscription:config.isSubscription,login:async callbacks=>({...await config.login({onAuth:info=>callbacks.notify({type:"auth_url",...info}),onDeviceCode:info=>callbacks.notify({type:"device_code",...info}),onPrompt:prompt=>callbacks.prompt({type:"text",...prompt}),onProgress:message=>callbacks.notify({type:"progress",message}),onManualCodeInput:()=>callbacks.prompt({type:"manual_code",message:t("Paste the authorization code")}),onSelect:prompt=>callbacks.prompt({type:"select",...prompt}),signal:callbacks.signal}),type:"oauth"}),refresh:async(credential,signal)=>({...await config.refreshToken(credential,signal),type:"oauth"}),toAuth:async credential=>({apiKey:config.getApiKey(credential)})}}function withConfiguredAuth(auth,headers,authHeader){let mergedHeaders=auth.headers||headers?{...auth.headers,...headers}:void 0;if(authHeader){if(!auth.apiKey)throw new Error("authHeader requires a resolved API key");mergedHeaders={...mergedHeaders,Authorization:`Bearer ${auth.apiKey}`}}return{...auth,headers:mergedHeaders}}function configuredApiKey(extension){return extension?.apiKey}function configuredHeaders(config,extension){if(!(!config?.headers&&!extension?.headers))return{...config?.headers,...extension?.headers}}async function configContextEnv(values,ctx,explicit){let env={...explicit};for(let name of new Set(values.flatMap(getConfigValueEnvVarNames))){if(env[name]!==void 0)continue;let value=await ctx.env(name);value!==void 0&&(env[name]=value)}return Object.keys(env).length>0?env:void 0}function composeApiKeyAuth(providerId,base,config,extension){let inherited=base?.auth.apiKey,rawKey=configuredApiKey(extension),oauth=extension?.oauth??base?.auth.oauth;if(!inherited&&rawKey===void 0&&oauth)return;let rawHeaders=configuredHeaders(config,extension),authHeader=extension?.authHeader??config?.authHeader??!1;return{name:inherited?.name??"API key",login:inherited?.login??(async interaction=>({type:"api_key",key:await interaction.prompt({type:"secret",message:"Enter API key"})})),check:async input=>{if(input.credential){if(inherited?.check)return inherited.check(input);if(input.credential.key)return{type:"api_key",source:"stored credential"};let resolved2=await inherited?.resolve(input);return resolved2?{type:"api_key",source:resolved2.source}:void 0}if(rawKey!==void 0){if(isCommandConfigValue(rawKey))return{type:"api_key",source:"configured API key"};let envNames=getConfigValueEnvVarNames(rawKey);for(let name of envNames)if(await input.ctx.env(name)===void 0)return;return{type:"api_key",source:"configured API key"}}if(inherited?.check)return inherited.check(input);let resolved=await inherited?.resolve(input);return resolved?{type:"api_key",source:resolved.source}:void 0},resolve:async input=>{let result;if(input.credential)result=inherited?await inherited.resolve(input):input.credential.key?{auth:{apiKey:input.credential.key},env:input.credential.env,source:"stored credential"}:void 0;else if(rawKey!==void 0){let env=await configContextEnv([rawKey],input.ctx),key=resolveConfigValueOrThrow(rawKey,t('API key for provider "{providerId}"',{providerId}),env);result=inherited?await inherited.resolve({...input,credential:{type:"api_key",key}}):{auth:{apiKey:key},source:"configured API key"}}else result=await inherited?.resolve(input);if(!result)return;let explicitEnv={...input.credential?.env??{},...result.env??{}},headerEnv=await configContextEnv(Object.values(rawHeaders??{}),input.ctx,explicitEnv),headers=resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,headerEnv);return{...result,auth:withConfiguredAuth(result.auth,headers,authHeader)}}}}function composeOAuthAuth(providerId,base,config,extension){let oauth=extension?.oauth?adaptOAuth(extension.oauth):base?.auth.oauth;if(!oauth)return;let rawHeaders=configuredHeaders(config,extension),authHeader=extension?.authHeader??config?.authHeader??!1;return{...oauth,toAuth:async credential=>{let auth=await oauth.toAuth(credential),env=credential.env,headers=resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,typeof env=="object"&&env!==null?env:void 0);return withConfiguredAuth(auth,headers,authHeader)}}}function rawModelHeaders(model,config,extension){let definition=config?.models?.find(entry=>entry.id===model.id),extensionModel=extension?.models?.find(entry=>entry.id===model.id),headers={...config?.modelOverrides?.[model.id]?.headers,...definition?.headers,...extensionModel?.headers};return Object.keys(headers).length>0?headers:void 0}function validateExtensionProvider(providerId,base,modelsConfig,extension){if(extension.streamSimple&&!extension.api)throw new Error(t('Provider {providerId}: "api" is required when registering streamSimple.',{providerId}));applyExtension(providerId,applyModelsJson(providerId,base?.getModels()??[],modelsConfig),extension)}function composeModelProvider(providerId,base,modelConfig,extension){let config=modelConfig.getProvider(providerId),extensionOAuthCredential,refreshedExtensionModels,currentExtension=()=>extension&&refreshedExtensionModels?{...extension,models:refreshedExtensionModels}:extension,getModels=()=>{let models=applyExtension(providerId,applyModelsJson(providerId,base?.getModels()??[],config),currentExtension());return extensionOAuthCredential&&extension?.oauth?.modifyModels&&(models=extension.oauth.modifyModels(models,extensionOAuthCredential)),models.map(model=>{let override=config?.modelOverrides?.[model.id];return override?applyModelOverride(model,override):model})};getModels();let apiKey=composeApiKeyAuth(providerId,base,config,extension),oauth=composeOAuthAuth(providerId,base,config,extension);if(!apiKey&&!oauth)throw new Error(t("Provider {providerId}: no authentication method configured.",{providerId}));let supportsBaseApi=model=>base?.getModels().some(entry=>entry.api===model.api)??!1,streamWith=(model,context,options,simple)=>lazyStream(model,async()=>{if(extension?.streamSimple&&model.api===extension.api)return extension.streamSimple(model,context,options);if(base&&supportsBaseApi(model))return simple?base.streamSimple(model,context,options):base.stream(model,context,options);let api=getApiProvider(model.api);if(!api)throw new Error(t("No API provider registered for api: {api}",{api:model.api}));return simple?api.streamSimple(model,context,options):api.stream(model,context,options)}),provider={id:providerId,name:extension?.name??config?.name??base?.name??extension?.oauth?.name??providerId,baseUrl:extension?.baseUrl??config?.baseUrl??base?.baseUrl,headers:base?.headers,auth:{...apiKey?{apiKey}:{},...oauth?{oauth}:{}},getModels,refreshModels:base?.refreshModels||extension?.refreshModels||extension?.oauth?.modifyModels?async context=>{await base?.refreshModels?.(context);let refreshed;if(extension?.refreshModels&&(refreshed=await extension.refreshModels(context)),context.signal.aborted)return;let oauthCredential=context.credential?.type==="oauth"?context.credential:void 0;await context.publish({update:()=>{refreshed&&(applyExtension(providerId,applyModelsJson(providerId,base?.getModels()??[],config),{...extension,models:refreshed}),refreshedExtensionModels=refreshed),extensionOAuthCredential=oauthCredential}})}:void 0,filterModels:base?.filterModels?(models,credential)=>base.filterModels(models,credential):void 0,stream:(model,context,options)=>streamWith(model,context,options,!1),streamSimple:(model,context,options)=>streamWith(model,context,options,!0)},fetchDeferred=base?.fetchDeferred;fetchDeferred&&(provider.fetchDeferred=(model,handle,options)=>fetchDeferred(model,handle,options));let cancelDeferred=base?.cancelDeferred;return cancelDeferred&&(provider.cancelDeferred=(model,handle,options)=>cancelDeferred(model,handle,options)),provider}function resolveConfiguredModelHeaders(model,config,extension,env){return resolveHeadersOrThrow(rawModelHeaders(model,config,extension),`model "${model.provider}/${model.id}"`,env)}function resolveCompatibilityRequestConfig(model,config,extension){let configured=resolveHeadersOrThrow({...configuredHeaders(config,extension),...rawModelHeaders(model,config,extension)},`model "${model.provider}/${model.id}"`);return{headers:model.headers||configured?{...model.headers,...configured}:void 0,authHeader:extension?.authHeader??config?.authHeader??!1}}function configuredRequestAuthStatus(extension){let value=configuredApiKey(extension);if(value===void 0)return;if(isCommandConfigValue(value))return{configured:!0,source:"fallback"};let names=getConfigValueEnvVarNames(value);return names.length>0?isConfigValueConfigured(value)?{configured:!0,source:"environment",label:names.join(", ")}:{configured:!1}:{configured:!0,source:"fallback"}}function getAgentForgeUserAgent(version){let runtime=process.versions.bun?`bun/${process.versions.bun}`:`node/${process.version}`;return`agent-forge/${version} (${process.platform}; ${runtime}; ${process.arch})`}var REMOTE_CATALOG_ATTEMPT_TIMEOUT_MS=4e3,REMOTE_CATALOG_REFRESH_INTERVAL_MS=14400*1e3;function mergeModels(baseline,dynamic){let merged=new Map;for(let model of[...baseline,...dynamic])merged.set(model.id,model);return[...merged.values()]}function parseCatalog(providerId,value){let entries=Array.isArray(value)?value:typeof value=="object"&&value!==null&&"models"in value&&Array.isArray(value.models)?value.models:typeof value=="object"&&value!==null?Object.values(value):void 0;if(!entries)throw new Error(t('Invalid model catalog for provider "{providerId}"',{providerId}));return entries.filter(entry=>typeof entry=="object"&&entry!==null&&"id"in entry).map(model=>({...model,provider:providerId}))}function remoteModels(entry,localGeneratedAt){return entry?localGeneratedAt!==void 0&&(entry.lastModified===void 0||entry.lastModified<=localGeneratedAt)?[]:entry.models:[]}function withRemoteCatalog(provider,catalogBaseUrl,localGeneratedAt){let dynamicModels=[];return{...provider,getModels:()=>mergeModels(provider.getModels(),dynamicModels),refreshModels:async context=>{let stored=context.stored,restored=remoteModels(stored,localGeneratedAt).filter(model=>model.provider===provider.id);if(!await context.publish({update:()=>{dynamicModels=restored}})||!catalogBaseUrl||!context.allowNetwork||context.signal.aborted||!context.force&&stored?.checkedAt!==void 0&&stored.lastModified!==void 0&&Date.now()-stored.checkedAt<REMOTE_CATALOG_REFRESH_INTERVAL_MS)return;let validator=stored?.models.length?stored.etag:void 0,url=new URL(`/api/models/providers/${encodeURIComponent(provider.id)}`,catalogBaseUrl),response2=await fetchWithRetry(url,{headers:{accept:"application/json","User-Agent":getAgentForgeUserAgent(VERSION),...validator?{"if-none-match":validator}:{}},signal:context.signal},{attemptTimeoutMs:REMOTE_CATALOG_ATTEMPT_TIMEOUT_MS});if(context.signal.aborted)return;let checkedAt=Date.now();if(response2.status===304&&stored){await context.publish({persist:{...stored,checkedAt}});return}if(response2.status===404||response2.status===501){await context.publish({persist:{...stored??{models:[]},checkedAt,lastModified:0,etag:void 0}});return}if(!response2.ok)throw await context.publish({persist:{...stored??{models:[]},checkedAt}}),new Error(t("Model catalog request failed for {providerId}: {status}",{providerId:provider.id,status:response2.status}));let refreshed=parseCatalog(provider.id,await response2.json()),lastModified=Date.parse(response2.headers.get("last-modified")??"");if(context.signal.aborted)return;let entry={models:refreshed,checkedAt,lastModified:Number.isNaN(lastModified)?0:lastModified,etag:response2.headers.get("etag")??void 0},published=remoteModels(entry,localGeneratedAt);await context.publish({persist:entry,update:()=>{dynamicModels=published}})}}}var RuntimeCredentials=class{store;overrides=new Map;constructor(store){this.store=store}setRuntimeApiKey(providerId,apiKey){this.overrides.set(providerId,apiKey)}removeRuntimeApiKey(providerId){this.overrides.delete(providerId)}hasRuntimeApiKey(providerId){return this.overrides.has(providerId)}async read(providerId,options){options?.signal?.throwIfAborted();let override=this.overrides.get(providerId);return override?{type:"api_key",key:override}:this.store.read(providerId,options)}async list(options){let entries=new Map((await this.store.list(options)).map(entry=>[entry.providerId,entry]));options?.signal?.throwIfAborted();for(let providerId of this.overrides.keys())entries.set(providerId,{providerId,type:"api_key"});return[...entries.values()]}modify(providerId,fn,options){return this.store.modify(providerId,fn,options)}async delete(providerId,options){options?.signal?.throwIfAborted(),await this.store.delete(providerId,options),this.overrides.delete(providerId)}};var CredentialSynchronizationError=class extends Error{providerId;operation;credential;constructor(providerId,operation,credential,options){super(t("Credential {operation} committed for {providerId}, but local synchronization failed",{operation,providerId}),options),this.name="CredentialSynchronizationError",this.providerId=providerId,this.operation=operation,this.credential=credential}};function mergeHeaders(base,override){if(!base&&!override)return;let merged={...base};for(let[name,value]of Object.entries(override??{})){let lowerName=name.toLowerCase();for(let existingName of Object.keys(merged))existingName.toLowerCase()===lowerName&&delete merged[existingName];merged[name]=value}return merged}var ModelRuntime=class _ModelRuntime{models;credentials;defaultBuiltins;builtins=new Map;nativeExtensionProviders=new Map;extensionProviders=new Map;compositionErrors=new Map;modelsPath;modelNetworkEnabled;config;snapshot={all:[],available:[],configuredProviders:new Set,storedProviders:new Set,auth:new Map};availabilityRefreshSeq=0;availabilityErrorSeq=0;providerAvailabilitySeq=new Map;availabilityError;credentialOperations=new Map;constructor(credentials,config,modelsPath,modelsStore,providers,modelNetworkEnabled){this.credentials=credentials,this.config=config,this.modelsPath=modelsPath,this.modelNetworkEnabled=modelNetworkEnabled,this.defaultBuiltins=new Map(providers.map(provider=>[provider.id,provider]));for(let[providerId,provider]of this.defaultBuiltins)this.builtins.set(providerId,provider);this.models=createModels({credentials,modelsStore}),this.rebuildProviders()}static async create(options={}){let credentials=new RuntimeCredentials(options.credentials??AuthStorage.create(options.authPath)),modelsPath=options.modelsPath===null?void 0:options.modelsPath??join3(getAgentDir(),"models.json"),config=await ModelConfig.load(modelsPath),modelsStore=options.modelsStore??(modelsPath?new FileModelsStore(options.modelsStorePath??join3(dirname2(modelsPath),"models-store.json")):new InMemoryCodingAgentModelsStore),builtinModelDataGeneratedAt=getBuiltinModelDataGeneratedAt(),providers=builtinProviders().map(provider=>provider.id==="radius"?provider:withRemoteCatalog(provider,options.catalogBaseUrl,builtinModelDataGeneratedAt)),runtime=new _ModelRuntime(credentials,config,modelsPath,modelsStore,providers,process.env.AGENT_FORGE_OFFLINE===void 0);runtime.configureRadiusProviders(),runtime.rebuildProviders();let refreshFromNetwork=runtime.modelNetworkEnabled&&options.allowModelNetwork===!0,controller=refreshFromNetwork&&options.modelRefreshTimeoutMs!==void 0?new AbortController:void 0,timeout=controller?setTimeout(()=>controller.abort(),options.modelRefreshTimeoutMs):void 0,signal=controller?options.signal?AbortSignal.any([options.signal,controller.signal]):controller.signal:options.signal;try{options.refreshOnCreate!==!1&&await runtime.refresh({allowNetwork:refreshFromNetwork,signal})}finally{timeout&&clearTimeout(timeout)}return runtime}configureRadiusProviders(){this.builtins.clear();for(let[providerId,provider]of this.defaultBuiltins)this.builtins.set(providerId,provider);for(let providerId of this.config.getProviderIds()){let config=this.config.getProvider(providerId);config?.oauth!=="radius"||!config.baseUrl||this.builtins.set(providerId,radiusProvider({id:providerId,name:config.name??providerId,gateway:config.baseUrl.replace(/\/v1\/?$/u,"")}))}}providerIds(){return new Set([...this.builtins.keys(),...this.nativeExtensionProviders.keys(),...this.config.getProviderIds(),...this.extensionProviders.keys()])}recomposeProvider(providerId){let base=this.nativeExtensionProviders.get(providerId)??this.builtins.get(providerId),extension=this.extensionProviders.get(providerId);if(!base&&!this.config.getProvider(providerId)&&!extension){this.models.deleteProvider(providerId),this.compositionErrors.delete(providerId);return}if(base&&!this.config.getProvider(providerId)&&!extension){this.models.setProvider(base),this.compositionErrors.delete(providerId);return}try{this.models.setProvider(composeModelProvider(providerId,base,this.config,extension)),this.compositionErrors.delete(providerId)}catch(error){this.compositionErrors.set(providerId,error instanceof Error?error.message:String(error)),base?this.models.setProvider(base):this.models.deleteProvider(providerId)}}rebuildProviders(){this.models.clearProviders(),this.compositionErrors.clear();for(let providerId of this.providerIds())this.recomposeProvider(providerId);this.updateModelSnapshot()}updateModelSnapshot(){let all=[...this.models.getModels()];this.snapshot={...this.snapshot,all,available:all.filter(model=>this.snapshot.configuredProviders.has(model.provider))}}async runAvailabilityRefresh(seq,errorSeq,signal){let providers=this.models.getProviders(),[available,checks,credentials]=await Promise.all([this.models.getAvailable(void 0,{signal}),Promise.all(providers.map(async provider=>[provider.id,await this.models.checkAuth(provider.id,{signal})])),this.credentials.list({signal})]);if(seq!==this.availabilityRefreshSeq)return;let auth=new Map(checks),configuredProviders=new Set(checks.filter(entry=>entry[1]!==void 0).map(([providerId])=>providerId));this.snapshot={all:[...this.models.getModels()],available:[...available],configuredProviders,storedProviders:new Set(credentials.map(entry=>entry.providerId)),auth},errorSeq===this.availabilityErrorSeq&&(this.availabilityError=void 0)}queueAvailabilityRefresh(signal){let seq=++this.availabilityRefreshSeq;for(let[providerId,providerSeq]of this.providerAvailabilitySeq)this.providerAvailabilitySeq.set(providerId,providerSeq+1);let errorSeq=++this.availabilityErrorSeq,effectiveSignal=operationSignal(signal);return this.runAvailabilityRefresh(seq,errorSeq,effectiveSignal).catch(error=>{throw errorSeq===this.availabilityErrorSeq&&!effectiveSignal.aborted&&(this.availabilityError=error instanceof Error?error.message:String(error)),error})}async refreshProviderAvailability(providerId,signal){++this.availabilityRefreshSeq;let providerSeq=(this.providerAvailabilitySeq.get(providerId)??0)+1;this.providerAvailabilitySeq.set(providerId,providerSeq);let errorSeq=++this.availabilityErrorSeq;try{let[available,auth,credential]=await Promise.all([this.models.getAvailable(providerId,{signal}),this.models.checkAuth(providerId,{signal}),this.credentials.read(providerId,{signal})]);if(signal.throwIfAborted(),this.providerAvailabilitySeq.get(providerId)!==providerSeq)return;let configuredProviders=new Set(this.snapshot.configuredProviders),storedProviders=new Set(this.snapshot.storedProviders),authByProvider=new Map(this.snapshot.auth);auth?(configuredProviders.add(providerId),authByProvider.set(providerId,auth)):(configuredProviders.delete(providerId),authByProvider.delete(providerId)),credential?storedProviders.add(providerId):storedProviders.delete(providerId);let all=[...this.models.getModels()],availableById=new Map([...this.snapshot.available.filter(model=>model.provider!==providerId),...available].map(model=>[`${model.provider}\0${model.id}`,model]));this.snapshot={all,available:all.flatMap(model=>availableById.get(`${model.provider}\0${model.id}`)??[]),configuredProviders,storedProviders,auth:authByProvider},errorSeq===this.availabilityErrorSeq&&(this.availabilityError=void 0)}catch(error){throw this.providerAvailabilitySeq.get(providerId)===providerSeq&&errorSeq===this.availabilityErrorSeq&&!signal.aborted&&(this.availabilityError=error instanceof Error?error.message:String(error)),error}}getProviders(){return this.models.getProviders()}getProvider(providerId){return this.models.getProvider(providerId)}getModels(providerId){return this.models.getModels(providerId)}getModel(providerId,modelId){return this.models.getModel(providerId,modelId)}async checkAuth(providerId,options){return this.models.checkAuth(providerId,options)}async getAvailable(providerId,options){if(providerId){let errorSeq=++this.availabilityErrorSeq;try{let available=await this.models.getAvailable(providerId,options);return errorSeq===this.availabilityErrorSeq&&(this.availabilityError=void 0),available}catch(error){throw errorSeq===this.availabilityErrorSeq&&!options?.signal?.aborted&&(this.availabilityError=error instanceof Error?error.message:String(error)),error}}return await this.queueAvailabilityRefresh(options?.signal),this.snapshot.available}getAvailableSnapshot(){return this.snapshot.available}getError(){let errors=[],configError=this.config.getError();configError&&errors.push(configError);for(let[providerId,error]of this.compositionErrors)errors.push(`Provider "${providerId}": ${error}`);return this.availabilityError&&errors.push(`Availability refresh: ${this.availabilityError}`),errors.length>0?errors.join(`
212
212
 
213
- `):void 0}getRegisteredProviderConfig(providerId){return this.extensionProviders.get(providerId)}getRegisteredProviderIds(){return[...new Set([...this.extensionProviders.keys(),...this.nativeExtensionProviders.keys()])]}getRegisteredNativeProvider(providerId){return this.nativeExtensionProviders.get(providerId)}getCompatibilityRequestConfig(model){return resolveCompatibilityRequestConfig(model,this.config.getProvider(model.provider),this.extensionProviders.get(model.provider))}isUsingOAuth(providerId){return this.snapshot.auth.get(providerId)?.type==="oauth"}isUsingSubscription(providerId){return this.isUsingOAuth(providerId)&&this.models.getProvider(providerId)?.auth.oauth?.isSubscription===!0}hasConfiguredAuth(providerId){return this.snapshot.configuredProviders.has(providerId)}getImageModelCatalog(){return this.config.getImageModelCatalog()}async getAuth(providerOrModel,overrides={}){if(typeof providerOrModel=="string")return this.models.getAuth(providerOrModel,overrides);let resolution=await this.models.getAuth(providerOrModel,overrides);if(!resolution)return;let configuredHeaders2=resolveConfiguredModelHeaders(providerOrModel,this.config.getProvider(providerOrModel.provider),this.extensionProviders.get(providerOrModel.provider),{...resolution.env??{},...overrides.env??{}});return{...resolution,auth:{...resolution.auth,headers:mergeHeaders(resolution.auth.headers,configuredHeaders2)}}}enqueueCredentialOperation(providerId,signal,task){let previous=this.credentialOperations.get(providerId)??Promise.resolve(),markStarted,started=new Promise(resolve22=>{markStarted=resolve22}),operation=(async()=>(await previous.catch(()=>{}),signal.throwIfAborted(),markStarted?.(),task()))(),tail=operation.catch(()=>{});return this.credentialOperations.set(providerId,tail),tail.then(()=>{this.credentialOperations.get(providerId)===tail&&this.credentialOperations.delete(providerId)}),raceWithAbortSignal(started,signal).then(()=>operation)}async synchronizeCredentialState(providerId,operation,credential,signal){try{signal.throwIfAborted(),this.recomposeProvider(providerId);let compositionError=this.compositionErrors.get(providerId);if(compositionError)throw new Error(compositionError);let result=await this.models.refresh({allowNetwork:!1,providers:[providerId],signal});result.aborted&&signal.throwIfAborted();let refreshError=result.errors.get(providerId);if(refreshError)throw refreshError;this.updateModelSnapshot(),await this.refreshProviderAvailability(providerId,signal)}catch(cause){throw new CredentialSynchronizationError(providerId,operation,credential,{cause})}}setRuntimeApiKey(providerId,apiKey,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.setRuntimeApiKey(providerId,apiKey),await this.synchronizeCredentialState(providerId,"setRuntimeApiKey",{type:"api_key",key:apiKey},signal)})}removeRuntimeApiKey(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.removeRuntimeApiKey(providerId),await this.synchronizeCredentialState(providerId,"removeRuntimeApiKey",void 0,signal)})}listCredentials(options){return this.credentials.list(options)}getProviderAuthStatus(providerId){if(this.credentials.hasRuntimeApiKey(providerId))return{configured:!0,source:"runtime"};if(this.snapshot.storedProviders.has(providerId))return{configured:!0,source:"stored"};let configured=configuredRequestAuthStatus(this.extensionProviders.get(providerId));if(configured)return configured;let check=this.snapshot.auth.get(providerId);return check?{configured:!0,source:"environment",label:check.source}:{configured:!1}}async prepareRequest(model,options){let provider=this.models.getProvider(model.provider);if(!provider)throw new ModelsError("provider",t("Unknown provider: {provider}",{provider:model.provider}));let resolution=await this.getAuth(model,{apiKey:options?.apiKey,env:options?.env,signal:options?.signal});if(!resolution)throw new ModelsError("auth",t("Provider is not configured: {provider}",{provider:model.provider}));let{transformHeaders,...rawProviderOptions}=options??{},providerOptions=rawProviderOptions,headers=mergeHeaders(resolution.auth.headers,providerOptions.headers);transformHeaders&&(headers=await transformHeaders(headers??{}));let env=resolution.env||providerOptions.env?{...resolution.env??{},...providerOptions.env??{}}:void 0;return{provider,model:resolution.auth.baseUrl?{...model,baseUrl:resolution.auth.baseUrl}:model,options:{...providerOptions,apiKey:providerOptions.apiKey??resolution.auth.apiKey,headers,env}}}stream(model,context,options){return lazyStream(model,async()=>{let prepared=await this.prepareRequest(model,options);return prepared.provider.stream(prepared.model,context,prepared.options)})}complete(model,context,options){return this.stream(model,context,options).result()}streamSimple(model,context,options){return lazyStream(model,async()=>{let prepared=await this.prepareRequest(model,options);return prepared.provider.streamSimple(prepared.model,context,prepared.options)})}completeSimple(model,context,options){return this.streamSimple(model,context,options).result()}async fetchDeferred(model,handle,options){return lazyStream(model,async()=>{let prepared=await this.prepareRequest(model,options);if(!prepared.provider.fetchDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);return prepared.provider.fetchDeferred(prepared.model,handle,prepared.options)}).result()}async cancelDeferred(model,handle,options){let prepared=await this.prepareRequest(model,options);if(!prepared.provider.cancelDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);await prepared.provider.cancelDeferred(prepared.model,handle,prepared.options)}login(providerId,type,interaction){let signal=operationSignal(interaction.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{let credential=await this.models.login(providerId,type,{...interaction,signal});return await this.synchronizeCredentialState(providerId,"login",credential,signal),credential})}logout(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{await this.models.logout(providerId,{signal}),await this.synchronizeCredentialState(providerId,"logout",void 0,signal)})}async refresh(options={}){if(this.config=await ModelConfig.load(this.modelsPath),this.configureRadiusProviders(),options.providers){for(let providerId of new Set(options.providers))this.recomposeProvider(providerId);this.updateModelSnapshot()}else this.rebuildProviders();let refreshOptions={...options,allowNetwork:options.allowNetwork??this.modelNetworkEnabled},result=await this.models.refresh(refreshOptions),errors=new Map(result.errors);if(this.updateModelSnapshot(),options.providers)await Promise.all([...new Set(options.providers)].map(async providerId=>{try{await this.refreshProviderAvailability(providerId,operationSignal(options.signal))}catch(error){options.signal?.aborted||errors.set(providerId,error instanceof Error?error:new Error(String(error)))}}));else try{await this.queueAvailabilityRefresh(options.signal)}catch{}return{aborted:result.aborted||(options.signal?.aborted??!1),errors}}registerNativeProvider(provider){if(!provider.id.trim())throw new Error(t("Provider id must not be empty."));this.extensionProviders.delete(provider.id),this.nativeExtensionProviders.set(provider.id,provider),this.recomposeProvider(provider.id),this.updateModelSnapshot(),this.markProvisionallyConfigured(provider.id,configuredRequestAuthStatus(void 0),provider.auth.oauth&&!provider.auth.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}markProvisionallyConfigured(providerId,configuredStatus,type){if(!this.snapshot.storedProviders.has(providerId)&&!configuredStatus?.configured)return;let configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId),auth=new Map(this.snapshot.auth);auth.get(providerId)||auth.set(providerId,{type,source:"configured provider"}),this.snapshot={...this.snapshot,auth,configuredProviders,available:this.snapshot.all.filter(model=>configuredProviders.has(model.provider))}}registerProvider(providerId,config){validateExtensionProvider(providerId,this.builtins.get(providerId),this.config.getProvider(providerId),config),this.nativeExtensionProviders.delete(providerId);let effective={...this.extensionProviders.get(providerId)};for(let[key,value]of Object.entries(config))value!==void 0&&(effective[key]=value);this.extensionProviders.set(providerId,effective),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.markProvisionallyConfigured(providerId,configuredRequestAuthStatus(effective),effective.oauth&&!effective.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}unregisterProvider(providerId){this.extensionProviders.delete(providerId),this.nativeExtensionProviders.delete(providerId),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}};function assertNonEmpty(value,label){if(typeof value!="string"||value.trim().length===0)throw new Error(t("{label} must be a non-empty string",{label}))}function matchesList(value,allowed){return allowed===void 0||allowed.length>0&&(allowed.includes(value)||allowed.includes("any"))}function hasAllFeatures(hostFeatures,required){if(required===void 0)return;let available=new Set(hostFeatures);return required.find(feature=>!available.has(feature))}function runtimeVersion(host,name){return host.runtime.find(runtime=>runtime.name===name)?.version}function diagnostic(code,message,details){return details===void 0?{code,message}:{code,message,details}}function adapterMatches(adapter,host){return matchesList(host.os,adapter.os)&&matchesList(host.arch,adapter.arch)&&hasAllFeatures(host.hostFeatures,adapter.hostFeatures)===void 0}function hostAdapterMatches(adapter,hostAdapter,host){return hostAdapter.id===adapter.id&&hostAdapter.version===adapter.version&&adapterMatches(adapter,host)&&(hostAdapter.os===void 0||hostAdapter.os===host.os||hostAdapter.os==="any")&&(hostAdapter.arch===void 0||hostAdapter.arch===host.arch||hostAdapter.arch==="any")&&hasAllFeatures(hostAdapter.hostFeatures??[],adapter.hostFeatures)===void 0}function selectAdapter(manifest,host){let adapters=manifest.platform?.adapters;if(adapters===void 0||adapters.length===0)return;let installed=host.adapters??[],selected=adapters.filter(adapter=>adapterMatches(adapter,host)).filter(adapter=>installed.some(hostAdapter=>hostAdapterMatches(adapter,hostAdapter,host))).sort((left,right)=>{let idOrder=left.id.localeCompare(right.id);return idOrder===0?comparePluginVersionsV1(right.version,left.version):idOrder})[0];return selected===void 0?{diagnostic:diagnostic("adapter-unavailable",`No installed adapter satisfies plugin ${manifest.id} on ${host.os}/${host.arch}`)}:{selected:{id:selected.id,version:selected.version}}}function normalizeRefs(refs){let normalized=[...refs??[]].map(ref=>{if(assertNonEmpty(ref.id,"capability id"),!Number.isSafeInteger(ref.version)||ref.version<1)throw new Error(t("capability {id} version must be a positive safe integer",{id:ref.id}));return{id:ref.id,version:ref.version}});return normalized.sort((left,right)=>left.id===right.id?left.version-right.version:left.id.localeCompare(right.id)),normalized}function hasCapability(ref,available){return available.some(candidate=>candidate.id===ref.id&&candidate.version===ref.version)}function resolvePlatform(manifest,host){let platform2=manifest.platform;if(platform2===void 0)return{diagnostics:[]};if(!matchesList(host.os,platform2.os))return{status:"installed-unavailable",diagnostics:[diagnostic("unsupported-platform",`Plugin ${manifest.id} does not support host OS ${host.os}`)]};if(!matchesList(host.arch,platform2.arch))return{status:"installed-unavailable",diagnostics:[diagnostic("unsupported-architecture",`Plugin ${manifest.id} does not support host architecture ${host.arch}`)]};let missingFeature=hasAllFeatures(host.hostFeatures,platform2.hostFeatures);if(missingFeature!==void 0)return{status:"installed-unavailable",diagnostics:[diagnostic("missing-host-feature",`Host feature is missing: ${missingFeature}`,{feature:missingFeature})]};for(let constraint of platform2.runtime??[]){let actual=runtimeVersion(host,constraint.name);if(actual===void 0)return{status:"version-incompatible",diagnostics:[diagnostic("missing-runtime",`Required runtime is missing: ${constraint.name}`,{runtime:constraint.name})]};if(constraint.minVersion!==void 0&&comparePluginVersionsV1(actual,constraint.minVersion)<0||constraint.maxVersion!==void 0&&comparePluginVersionsV1(actual,constraint.maxVersion)>0)return{status:"version-incompatible",diagnostics:[diagnostic("runtime-version-incompatible",`Runtime ${constraint.name}@${actual} is outside the supported range`,{runtime:constraint.name,actual})]}}let selected=selectAdapter(manifest,host);return selected?.diagnostic!==void 0?{status:"dependency-unavailable",diagnostics:[selected.diagnostic]}:{diagnostics:[],selectedAdapter:selected?.selected}}function resolvePluginCompatibilityV1(input){let{manifest,host}=input;assertNonEmpty(manifest.id,"plugin id"),assertNonEmpty(manifest.pluginVersion,"pluginVersion"),assertNonEmpty(manifest.apiVersion,"apiVersion");let required=input.required??!0;if(input.disabled===!0)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"disabled",diagnostics:[diagnostic("plugin-disabled",`Plugin ${manifest.id} is disabled`)]};if(manifest.testOnly===!0)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-unavailable",diagnostics:[diagnostic("test-only-plugin",`Plugin ${manifest.id} is test-only and cannot be selected for production`)]};if(!["windows","macos","linux"].includes(host.os))return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-unavailable",diagnostics:[diagnostic("unsupported-platform",`Host OS is unknown: ${host.os}`)]};if(!["x64","arm64"].includes(host.arch))return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-unavailable",diagnostics:[diagnostic("unsupported-architecture",`Host architecture is unknown: ${host.arch}`)]};if((manifest.minHostVersion!==void 0||manifest.maxHostVersion!==void 0)&&(manifest.minHostVersion!==void 0&&assertNonEmpty(manifest.minHostVersion,"minHostVersion"),manifest.maxHostVersion!==void 0&&assertNonEmpty(manifest.maxHostVersion,"maxHostVersion"),input.hostVersion!==void 0)){let belowFloor=manifest.minHostVersion!==void 0&&comparePluginVersionsV1(input.hostVersion,manifest.minHostVersion)<0,aboveCeiling=manifest.maxHostVersion!==void 0&&comparePluginVersionsV1(input.hostVersion,manifest.maxHostVersion)>0;if(belowFloor||aboveCeiling){let requiredRange=[manifest.minHostVersion!==void 0?`>= ${manifest.minHostVersion}`:void 0,manifest.maxHostVersion!==void 0?`<= ${manifest.maxHostVersion}`:void 0].filter(bound=>bound!==void 0).join(" and "),guidance=belowFloor?`Upgrade the host to at least ${manifest.minHostVersion} to load this plugin.`:`Install a plugin version whose declared host range includes ${input.hostVersion}.`;return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"version-incompatible",diagnostics:[diagnostic("host-version-incompatible",`Plugin ${manifest.id} requires host version ${requiredRange}, but the host is ${input.hostVersion}. ${guidance}`,{required:requiredRange,actual:input.hostVersion})]}}}if(manifest.apiVersion!==host.apiVersion)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"version-incompatible",diagnostics:[diagnostic("api-version-incompatible",`Plugin requires API ${manifest.apiVersion}, host provides ${host.apiVersion}`)]};let platform2=resolvePlatform(manifest,host);if(platform2.status!==void 0)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:platform2.status,diagnostics:platform2.diagnostics};let available=input.availableCapabilities??[],dependencyDiagnostics=[];for(let requirement of manifest.requires??[])hasCapability(requirement,available)||dependencyDiagnostics.push(diagnostic(requirement.optional===!0?"optional-capability-unavailable":"missing-capability",`Capability ${requirement.id}@${requirement.version} is unavailable`,{capability:requirement.id,version:String(requirement.version)}));if(dependencyDiagnostics.some(item=>item.code==="missing-capability"))return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"dependency-unavailable",diagnostics:dependencyDiagnostics};let capabilityRefs=normalizeRefs(manifest.capabilityRefs),resolved={pluginId:manifest.id,pluginVersion:manifest.pluginVersion,capabilityRefs,...platform2.selectedAdapter===void 0?{}:{selectedAdapter:platform2.selectedAdapter}};return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-ready",diagnostics:dependencyDiagnostics,resolved,...platform2.selectedAdapter===void 0?{}:{selectedAdapter:platform2.selectedAdapter}}}function compareResolvedPlugins(left,right){return left.pluginId===right.pluginId?comparePluginVersionsV1(left.pluginVersion,right.pluginVersion):left.pluginId.localeCompare(right.pluginId)}function compareRefs(left,right){return left.id===right.id?left.version-right.version:left.id.localeCompare(right.id)}function buildResolvedManifestV1(input){assertNonEmpty(input.profileId,"profileId"),assertNonEmpty(input.profileVersion,"profileVersion");let plugins=[...input.plugins].map(plugin=>({pluginId:plugin.pluginId,pluginVersion:plugin.pluginVersion,capabilityRefs:normalizeRefs(plugin.capabilityRefs),...plugin.selectedAdapter===void 0?{}:{selectedAdapter:{...plugin.selectedAdapter}}})).sort(compareResolvedPlugins),capabilityRefs=plugins.flatMap(plugin=>plugin.capabilityRefs).sort(compareRefs).filter((ref,index,all)=>index===0||all[index-1].id!==ref.id||all[index-1].version!==ref.version),digestInput={profileId:input.profileId,profileVersion:input.profileVersion,plugins,capabilityRefs};return Object.freeze({profileId:input.profileId,profileVersion:input.profileVersion,plugins:Object.freeze(plugins.map(plugin=>Object.freeze({...plugin,capabilityRefs:Object.freeze(plugin.capabilityRefs)}))),capabilityRefs:Object.freeze(capabilityRefs),manifestDigest:stableJsonDigest(digestInput)})}function resolvePluginProfileV1(input){let plugins=input.plugins.map(candidate=>resolvePluginCompatibilityV1({manifest:candidate.manifest,host:input.host,required:candidate.required,disabled:candidate.disabled,availableCapabilities:input.availableCapabilities,hostVersion:input.hostVersion})).sort((left,right)=>left.pluginId===right.pluginId?comparePluginVersionsV1(left.pluginVersion,right.pluginVersion):left.pluginId.localeCompare(right.pluginId)),diagnostics=plugins.flatMap(plugin=>plugin.diagnostics),blocked=plugins.some(plugin=>plugin.required&&plugin.status!=="installed-ready"),resolvedPlugins=plugins.flatMap(plugin=>plugin.resolved===void 0?[]:[plugin.resolved]);return Object.freeze({profileId:input.profileId,profileVersion:input.profileVersion,status:blocked?"blocked":"ready",plugins:Object.freeze(plugins),diagnostics:Object.freeze(diagnostics),resolvedManifest:buildResolvedManifestV1({profileId:input.profileId,profileVersion:input.profileVersion,plugins:resolvedPlugins})})}function manifestPayload(manifest){return{id:manifest.id,pluginVersion:manifest.pluginVersion,apiVersion:manifest.apiVersion,...manifest.capabilityRefs===void 0?{}:{capabilityRefs:manifest.capabilityRefs},...manifest.requires===void 0?{}:{requires:manifest.requires},...manifest.platform===void 0?{}:{platform:manifest.platform},testOnly:manifest.testOnly??!1}}function pluginManifestDigestV1(manifest){return stableJsonDigest(manifestPayload(manifest))}function snapshotManifest(manifest){let capabilityRefs=manifest.capabilityRefs?.map(ref=>Object.freeze({...ref})),requires=manifest.requires?.map(requirement=>Object.freeze({...requirement})),platform2=manifest.platform,runtime=platform2?.runtime?.map(constraint=>Object.freeze({...constraint})),adapters=platform2?.adapters?.map(adapter=>Object.freeze({...adapter,os:Object.freeze([...adapter.os]),...adapter.arch===void 0?{}:{arch:Object.freeze([...adapter.arch])},...adapter.hostFeatures===void 0?{}:{hostFeatures:Object.freeze([...adapter.hostFeatures])}})),platformSnapshot=platform2===void 0?void 0:Object.freeze({...platform2,os:Object.freeze([...platform2.os]),...platform2.arch===void 0?{}:{arch:Object.freeze([...platform2.arch])},...runtime===void 0?{}:{runtime:Object.freeze(runtime)},...platform2.hostFeatures===void 0?{}:{hostFeatures:Object.freeze([...platform2.hostFeatures])},...adapters===void 0?{}:{adapters:Object.freeze(adapters)}});return Object.freeze({...manifest,...capabilityRefs===void 0?{}:{capabilityRefs:Object.freeze(capabilityRefs)},...requires===void 0?{}:{requires:Object.freeze(requires)},...platformSnapshot===void 0?{}:{platform:platformSnapshot}})}function stagePluginUpdateV1(input){if(input.source.trim().length===0)throw new Error(t("update source must be a non-empty string"));return Object.freeze({pluginId:input.manifest.id,pluginVersion:input.manifest.pluginVersion,source:input.source,manifest:snapshotManifest(input.manifest),manifestDigest:pluginManifestDigestV1(input.manifest),state:"staged"})}function verifyPluginUpdateV1(input){let actualDigest=pluginManifestDigestV1(input.record.manifest);if(input.record.state!=="staged")return{status:"rejected",record:input.record,reason:`Update must be staged before verification: ${input.record.state}`};if(input.record.pluginId!==input.record.manifest.id)return{status:"rejected",record:input.record,reason:"Update record plugin ID does not match embedded manifest"};if(input.record.pluginVersion!==input.record.manifest.pluginVersion)return{status:"rejected",record:input.record,reason:"Update record plugin version does not match embedded manifest"};if(input.record.manifestDigest!==actualDigest)return{status:"rejected",record:input.record,reason:"Staged manifest digest drifted"};if(input.expectedDigest!==void 0&&input.expectedDigest!==actualDigest)return{status:"rejected",record:input.record,reason:"Manifest digest does not match expectation"};let resolution=resolvePluginCompatibilityV1({manifest:input.record.manifest,host:input.host,required:!0,availableCapabilities:input.availableCapabilities,hostVersion:VERSION});if(resolution.status!=="installed-ready")return{status:"rejected",record:input.record,reason:`Plugin is not ready on host: ${resolution.status}`};if(input.verifier!==void 0)try{if(input.verifier({pluginId:input.record.pluginId,pluginVersion:input.record.pluginVersion,source:input.record.source,manifestDigest:actualDigest}).status!=="accepted")return{status:"rejected",record:input.record,reason:"Plugin source was rejected by the configured verifier"}}catch{return{status:"rejected",record:input.record,reason:"Plugin source verifier failed"}}return{status:"verified",record:Object.freeze({...input.record,state:"verified"})}}function activatePluginUpdateV1(record){if(record.state!=="verified")throw new Error(t("Only a verified update can become active: {pluginId}",{pluginId:record.pluginId}));return Object.freeze({...record,state:"active"})}function rollbackPluginUpdateV1(input){if(input.previous.pluginId!==input.failed.pluginId)throw new Error(t("Cannot rollback updates for different plugins"));if(input.previous.state!=="active")throw new Error(t("Rollback target must be active"));return Object.freeze({...input.previous,state:"active"})}var PluginCatalogErrorV1=class extends Error{code;constructor(code,message){super(message),this.name="PluginCatalogErrorV1",this.code=code}},DEFAULT_MAX_ENTRIES=128,MAX_ENTRIES=256;function comparePluginVersionsV1(left,right){let parse3=value=>value.trim().replace(/^[vV]/u,"").split(/[.+-]/u).map(part=>/^\d+$/u.test(part)?Number.parseInt(part,10):part),leftParts=parse3(left),rightParts=parse3(right);for(let index=0;index<Math.max(leftParts.length,rightParts.length);index+=1){let a=leftParts[index]??0,b=rightParts[index]??0;if(a!==b)return typeof a=="number"&&typeof b=="number"?a<b?-1:1:typeof a=="number"?1:typeof b=="number"||a<b?-1:1}return 0}function compareCatalogEntries(left,right){let idOrder=left.id.localeCompare(right.id);return idOrder!==0?idOrder:comparePluginVersionsV1(right.pluginVersion,left.pluginVersion)}function buildPluginCatalogV1(input){let maxEntries=input.maxEntries??DEFAULT_MAX_ENTRIES;if(!Number.isSafeInteger(maxEntries)||maxEntries<1||maxEntries>MAX_ENTRIES)throw new PluginCatalogErrorV1("invalid_limit",t("maxEntries must be an integer between 1 and {max}",{max:MAX_ENTRIES}));let manifests2=[...input.manifests].sort(compareCatalogEntries),seen=new Set;for(let manifest of manifests2){let identity=`${manifest.id}@${manifest.pluginVersion}`;if(seen.has(identity))throw new PluginCatalogErrorV1("duplicate_plugin_version",t("Catalog contains duplicate plugin version: {identity}",{identity}));seen.add(identity)}let disabled=new Set(input.disabledPluginIds??[]),entries=manifests2.slice(0,maxEntries).map(manifest=>{let resolution=resolvePluginCompatibilityV1({manifest,host:input.host,required:input.required,disabled:disabled.has(manifest.id),availableCapabilities:input.availableCapabilities,hostVersion:VERSION});return Object.freeze({pluginId:manifest.id,pluginVersion:manifest.pluginVersion,manifestDigest:pluginManifestDigestV1(manifest),resolution})});return Object.freeze({version:1,entries:Object.freeze(entries),truncated:manifests2.length>maxEntries})}function findPluginCatalogEntryV1(snapshot2,pluginId,pluginVersion){return snapshot2.entries.find(entry=>entry.pluginId===pluginId&&(pluginVersion===void 0||entry.pluginVersion===pluginVersion))}function stableStringify(value){return value===null||typeof value=="boolean"||typeof value=="number"||typeof value=="string"?JSON.stringify(value):Array.isArray(value)?`[${value.map(item=>stableStringify(item)).join(",")}]`:`{${Object.keys(value).sort().map(key=>`${JSON.stringify(key)}:${stableStringify(value[key])}`).join(",")}}`}function stableJsonDigest(value){let serialized=stableStringify(value),digest=14695981039346656037n;for(let byte of new TextEncoder().encode(serialized))digest^=BigInt(byte),digest=BigInt.asUintN(64,digest*1099511628211n);return digest.toString(16).padStart(16,"0")}function assertNonEmptyString(value,label){if(typeof value!="string"||value.trim().length===0)throw new Error(t("{label} must be a non-empty string",{label}))}function assertPluginEntries(value,label){if(!Array.isArray(value))throw new Error(t("{label} must be an array",{label}));let seen=new Set;return value.map((item,index)=>{if(item===null||typeof item!="object"||Array.isArray(item))throw new Error(t("{label}[{index}] must be a plain object",{label,index}));let record=item;assertNonEmptyString(record.pluginId,`${label}[${index}].pluginId`),assertNonEmptyString(record.pluginVersion,`${label}[${index}].pluginVersion`);let key=`${record.pluginId}@${record.pluginVersion}`;if(seen.has(key))throw new Error(t("{label} contains duplicate entry: {key}",{label,key}));seen.add(key);let selectedAdapter=record.selectedAdapter;if(selectedAdapter===void 0)return{pluginId:record.pluginId,pluginVersion:record.pluginVersion};if(selectedAdapter===null||typeof selectedAdapter!="object"||Array.isArray(selectedAdapter))throw new Error(t("{label}[{index}].selectedAdapter must be an object",{label,index}));let adapter=selectedAdapter;return assertNonEmptyString(adapter.id,`${label}[${index}].selectedAdapter.id`),assertNonEmptyString(adapter.version,`${label}[${index}].selectedAdapter.version`),{pluginId:record.pluginId,pluginVersion:record.pluginVersion,selectedAdapter:{id:adapter.id,version:adapter.version}}}).sort((left,right)=>left.pluginId===right.pluginId?comparePluginVersionsV1(left.pluginVersion,right.pluginVersion):left.pluginId.localeCompare(right.pluginId))}function buildProfileIdentityV1(input){assertNonEmptyString(input.profileId,"Profile identity.profileId"),assertNonEmptyString(input.profileVersion,"Profile identity.profileVersion");let pluginEntries=assertPluginEntries(input.resolvedPlugins,"Profile identity.resolvedPlugins"),capabilityVersions=[...input.capabilityVersions].map(ref=>{if(typeof ref.version!="number"||!Number.isSafeInteger(ref.version)||ref.version<1)throw new Error(t("Profile identity.capabilityVersions version must be a positive safe integer: {id}",{id:ref.id}));return assertNonEmptyString(ref.id,"Profile identity.capabilityVersions.id"),{id:ref.id,version:ref.version}}).sort((left,right)=>left.id===right.id?left.version-right.version:left.id.localeCompare(right.id)),manifestDigest=stableJsonDigest({profileId:input.profileId,profileVersion:input.profileVersion,plugins:pluginEntries.map(entry=>({pluginId:entry.pluginId,pluginVersion:entry.pluginVersion,...entry.selectedAdapter===void 0?{}:{selectedAdapter:entry.selectedAdapter}})),capabilityVersions:capabilityVersions.map(ref=>({id:ref.id,version:ref.version}))});return Object.freeze({profileId:input.profileId,profileVersion:input.profileVersion,manifestDigest,capabilityVersions:Object.freeze(capabilityVersions.map(ref=>Object.freeze({...ref})))})}function profileIdentitiesCompatible(left,right){return left.manifestDigest===right.manifestDigest}var PLUGIN_DISPOSE_EVENT_ID="plugin.dispose",PLUGIN_DISPOSE_EVENT_VERSION=1,PLUGIN_READY_EVENT_ID="plugin.ready",PLUGIN_READY_EVENT_VERSION=1,SESSION_CONTEXT_REPLACED_EVENT_ID="session.context.replaced",SESSION_CONTEXT_REPLACED_EVENT_VERSION=1,SESSION_RELOAD_EVENT_ID="session.reload",SESSION_RELOAD_EVENT_VERSION=1,AGENT_START_EVENT_ID="agent.start",AGENT_START_EVENT_VERSION=1,AGENT_SETTLED_EVENT_ID="agent.settled",AGENT_SETTLED_EVENT_VERSION=1,TURN_START_EVENT_ID="turn.start",TURN_START_EVENT_VERSION=1,TURN_END_EVENT_ID="turn.end",TURN_END_EVENT_VERSION=1,MESSAGE_START_EVENT_ID="message.start",MESSAGE_START_EVENT_VERSION=1,MESSAGE_END_EVENT_ID="message.end",MESSAGE_END_EVENT_VERSION=1,TOOL_EXECUTION_START_EVENT_ID="tool.execution.start",TOOL_EXECUTION_START_EVENT_VERSION=1,MODEL_SELECT_EVENT_ID="model.select",MODEL_SELECT_EVENT_VERSION=1,THINKING_LEVEL_SELECT_EVENT_ID="thinking_level.select",THINKING_LEVEL_SELECT_EVENT_VERSION=1,SESSION_INFO_CHANGED_EVENT_ID="session.info.changed",SESSION_INFO_CHANGED_EVENT_VERSION=1,SESSION_ENTRY_APPENDED_EVENT_ID="session.entry.appended",SESSION_ENTRY_APPENDED_EVENT_VERSION=1,AGENT_END_EVENT_ID="agent.end",AGENT_END_EVENT_VERSION=1,BEFORE_AGENT_START_EVENT_ID="before.agent.start",BEFORE_AGENT_START_EVENT_VERSION=1,BEFORE_AGENT_START_EVENT_VERSION_V2=2,UI_PROMPT_START_EVENT_ID="ui.prompt.start",UI_PROMPT_START_EVENT_VERSION=1,UI_PROMPT_END_EVENT_ID="ui.prompt.end",UI_PROMPT_END_EVENT_VERSION=1,RESOURCES_DISCOVER_EVENT_ID="resources.discover",RESOURCES_DISCOVER_EVENT_VERSION=1,RESOURCES_DISCOVER_EVENT_VERSION_V2=2,CONTEXT_ASSEMBLED_EVENT_ID="context.assembled",CONTEXT_ASSEMBLED_EVENT_VERSION=1,INPUT_RECEIVED_EVENT_ID="input.received",INPUT_RECEIVED_EVENT_VERSION=1,USER_BASH_EVENT_ID="user.bash",USER_BASH_EVENT_VERSION=1,SESSION_START_EVENT_ID="session.start",SESSION_START_EVENT_VERSION=1,MODEL_RESPONSE_EVENT_ID="model.response",MODEL_RESPONSE_EVENT_VERSION=1,MODEL_STREAM_EVENT_ID="model.stream",MODEL_STREAM_EVENT_VERSION=1,TOOL_RESULT_EVENT_ID="tool.result",TOOL_RESULT_EVENT_VERSION=1,TOOL_CALL_EVENT_ID="tool.call",TOOL_CALL_EVENT_VERSION=1,TOOL_RESULT_RAW_EVENT_ID="tool.result.raw",TOOL_RESULT_RAW_EVENT_VERSION=1,TOOL_EXECUTE_EVENT_ID="tool.execute",TOOL_EXECUTE_EVENT_VERSION=1,TOOL_COMMIT_EVENT_ID="tool.commit",TOOL_COMMIT_EVENT_VERSION=1,TOOL_GATE_BLOCKED_EVENT_ID="tool.gate.blocked",TOOL_GATE_BLOCKED_EVENT_VERSION=1,INPUT_GATE_BLOCKED_EVENT_ID="input.gate.blocked",INPUT_GATE_BLOCKED_EVENT_VERSION=1,OPERATION_END_EVENT_ID="operation.end",OPERATION_END_EVENT_VERSION=1;function assertString(value,label){if(typeof value!="string"||value.trim()==="")throw new Error(t("{label} must be a non-empty string",{label}))}function assertJsonSafe(value,label,seen=new Set){if(!(value===null||typeof value=="string"||typeof value=="boolean")){if(typeof value=="number"){if(Number.isFinite(value))return;throw new Error(t("{label} must contain only finite JSON numbers",{label}))}if(typeof value!="object")throw new Error(t("{label} must be JSON-safe",{label}));if(seen.has(value))throw new Error(t("{label} must not contain cycles",{label}));if(seen.add(value),Array.isArray(value))for(let[index,entry]of value.entries())assertJsonSafe(entry,`${label}[${index}]`,seen);else if(isPlainRecord2(value))for(let[key,entry]of Object.entries(value))assertJsonSafe(entry,`${label}.${key}`,seen);else throw new Error(t("{label} must contain only JSON arrays and plain objects",{label}));seen.delete(value)}}function validatePluginDisposeEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("plugin.dispose data must be a plain object"));let record=value;if(Object.keys(record).sort().join(",")!=="pluginId,pluginVersion,status,version")throw new Error(t("plugin.dispose data has unsupported fields"));if(record.version!==1)throw new Error(t("plugin.dispose data.version must be 1"));if(assertString(record.pluginId,"plugin.dispose data.pluginId"),assertString(record.pluginVersion,"plugin.dispose data.pluginVersion"),record.status!=="disposed"&&record.status!=="failed")throw new Error(t("plugin.dispose data.status is invalid"));return value}function pluginDisposeEventDefinition(){return{id:PLUGIN_DISPOSE_EVENT_ID,version:PLUGIN_DISPOSE_EVENT_VERSION,phase:"committed",schema:"agent-forge/plugin.dispose@1",allowedRegistrationKinds:["observe","after-commit"],validate:validatePluginDisposeEventDataV1}}function validatePluginReadyEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("plugin.ready data must be a plain object"));let record=value;if(Object.keys(record).sort().join(",")!=="pluginId,pluginVersion,version")throw new Error(t("plugin.ready data has unsupported fields"));if(record.version!==1)throw new Error(t("plugin.ready data.version must be 1"));return assertString(record.pluginId,"plugin.ready data.pluginId"),assertString(record.pluginVersion,"plugin.ready data.pluginVersion"),value}function pluginReadyEventDefinition(){return{id:PLUGIN_READY_EVENT_ID,version:PLUGIN_READY_EVENT_VERSION,phase:"committed",schema:"agent-forge/plugin.ready@1",allowedRegistrationKinds:["observe","after-commit"],validate:validatePluginReadyEventDataV1}}var PLUGIN_REJECTED_EVENT_ID="plugin.rejected",PLUGIN_REJECTED_EVENT_VERSION=1;function validatePluginRejectedEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("plugin.rejected data must be a plain object"));let record=value;if(Object.keys(record).filter(key=>key!=="pluginId").sort().join(",")!=="code,manifestPath,message,version")throw new Error(t("plugin.rejected data has unsupported fields"));if(record.version!==1)throw new Error(t("plugin.rejected data.version must be 1"));if(record.pluginId!==void 0&&typeof record.pluginId!="string")throw new Error(t("plugin.rejected data.pluginId must be a string when present"));if(assertString(record.manifestPath,"plugin.rejected data.manifestPath"),assertString(record.message,"plugin.rejected data.message"),record.code!=="invalid_manifest"&&record.code!=="duplicate_plugin_id"&&record.code!=="missing_dependency"&&record.code!=="plugin_load_failed")throw new Error(t("plugin.rejected data.code is invalid"));return value}function pluginRejectedEventDefinition(){return{id:PLUGIN_REJECTED_EVENT_ID,version:PLUGIN_REJECTED_EVENT_VERSION,phase:"committed",schema:"agent-forge/plugin.rejected@1",allowedRegistrationKinds:["observe","after-commit"],validate:validatePluginRejectedEventDataV1}}var contextReasons=new Set(["request","reload","session_replace","compaction","overflow_recovery","retry","tree"]);function validateSessionContextReplacedEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("session.context.replaced data must be a plain object"));let record=value,allowed=new Set(["version","sessionId","reason","messageCount","strategyName"]),unsupported=Object.keys(record).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.context.replaced data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","reason","messageCount"])if(!(key in record))throw new Error(t("session.context.replaced data is missing required field: {key}",{key}));if(record.version!==1)throw new Error(t("session.context.replaced data.version must be 1"));if(assertString(record.sessionId,"session.context.replaced data.sessionId"),typeof record.reason!="string"||!contextReasons.has(record.reason))throw new Error(t("session.context.replaced data.reason is invalid"));if(typeof record.messageCount!="number"||!Number.isSafeInteger(record.messageCount)||record.messageCount<0)throw new Error(t("session.context.replaced data.messageCount must be a non-negative safe integer"));return record.strategyName!==void 0&&assertString(record.strategyName,"session.context.replaced data.strategyName"),value}function sessionContextReplacedEventDefinition(){return{id:SESSION_CONTEXT_REPLACED_EVENT_ID,version:SESSION_CONTEXT_REPLACED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.context.replaced@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionContextReplacedEventDataV1}}function validateSessionReloadEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.reload data must be a plain object"));if(Object.keys(value).sort().join(",")!=="generation,reason,sessionId,version")throw new Error(t("session.reload data has unsupported fields"));if(value.version!==1)throw new Error(t("session.reload data.version must be 1"));if(assertString(value.sessionId,"session.reload data.sessionId"),typeof value.generation!="number"||!Number.isSafeInteger(value.generation)||value.generation<1)throw new Error(t("session.reload data.generation must be a positive safe integer"));if(value.reason!=="reload")throw new Error(t("session.reload data.reason is invalid"));return value}function sessionReloadEventDefinition(){return{id:SESSION_RELOAD_EVENT_ID,version:SESSION_RELOAD_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.reload@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionReloadEventDataV1}}function validateAgentLifecycleEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("agent lifecycle data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,version")throw new Error(t("agent lifecycle data has unsupported fields"));if(value.version!==1)throw new Error(t("agent lifecycle data.version must be 1"));return assertString(value.sessionId,"agent lifecycle data.sessionId"),value}function agentStartEventDefinition(){return{id:AGENT_START_EVENT_ID,version:AGENT_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentLifecycleEventDataV1}}function agentSettledEventDefinition(){return{id:AGENT_SETTLED_EVENT_ID,version:AGENT_SETTLED_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.settled@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentLifecycleEventDataV1}}function validateTurnStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("turn.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,turnIndex,version")throw new Error(t("turn.start data has unsupported fields"));if(value.version!==1)throw new Error(t("turn.start data.version must be 1"));if(assertString(value.sessionId,"turn.start data.sessionId"),typeof value.turnIndex!="number"||!Number.isSafeInteger(value.turnIndex)||value.turnIndex<0)throw new Error(t("turn.start data.turnIndex must be a non-negative safe integer"));return value}function validateTurnEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("turn.end data must be a plain object"));let keys=Object.keys(value).sort().join(",");if(keys!=="messageCount,sessionId,turnIndex,version"&&keys!=="messageCount,outcome,sessionId,turnIndex,version")throw new Error(t("turn.end data has unsupported fields"));if(value.version!==1)throw new Error(t("turn.end data.version must be 1"));if(assertString(value.sessionId,"turn.end data.sessionId"),typeof value.turnIndex!="number"||!Number.isSafeInteger(value.turnIndex)||value.turnIndex<0)throw new Error(t("turn.end data.turnIndex must be a non-negative safe integer"));if(typeof value.messageCount!="number"||!Number.isSafeInteger(value.messageCount)||value.messageCount<0)throw new Error(t("turn.end data.messageCount must be a non-negative safe integer"));if(value.outcome!==void 0&&value.outcome!=="aborted"&&value.outcome!=="error")throw new Error(t("turn.end data.outcome is invalid"));return value}function validateMessageBoundaryEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("message lifecycle data must be a plain object"));if(Object.keys(value).sort().join(",")!=="role,sessionId,version")throw new Error(t("message lifecycle data has unsupported fields"));if(value.version!==1)throw new Error(t("message lifecycle data.version must be 1"));return assertString(value.sessionId,"message lifecycle data.sessionId"),assertString(value.role,"message lifecycle data.role"),value}function turnStartEventDefinition(){return{id:TURN_START_EVENT_ID,version:TURN_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/turn.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateTurnStartEventDataV1}}function turnEndEventDefinition(){return{id:TURN_END_EVENT_ID,version:TURN_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/turn.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateTurnEndEventDataV1}}function messageStartEventDefinition(){return{id:MESSAGE_START_EVENT_ID,version:MESSAGE_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/message.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateMessageBoundaryEventDataV1}}function messageEndEventDefinition(){return{id:MESSAGE_END_EVENT_ID,version:MESSAGE_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/message.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateMessageBoundaryEventDataV1}}function validateToolExecutionStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.execution.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,toolCallId,toolName,version")throw new Error(t("tool.execution.start data has unsupported fields"));if(value.version!==1)throw new Error(t("tool.execution.start data.version must be 1"));return assertString(value.sessionId,"tool.execution.start data.sessionId"),assertString(value.toolCallId,"tool.execution.start data.toolCallId"),assertString(value.toolName,"tool.execution.start data.toolName"),value}function toolExecutionStartEventDefinition(){return{id:TOOL_EXECUTION_START_EVENT_ID,version:TOOL_EXECUTION_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.execution.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolExecutionStartEventDataV1}}function validateModelSelectEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("model.select data must be a plain object"));if(Object.keys(value).sort().join(",")!=="id,provider,sessionId,source,version")throw new Error(t("model.select data has unsupported fields"));if(value.version!==1)throw new Error(t("model.select data.version must be 1"));if(assertString(value.sessionId,"model.select data.sessionId"),assertString(value.provider,"model.select data.provider"),assertString(value.id,"model.select data.id"),value.source!=="set"&&value.source!=="cycle"&&value.source!=="restore")throw new Error(t("model.select data.source is invalid"));return value}function validateThinkingLevelSelectEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("thinking_level.select data must be a plain object"));if(Object.keys(value).sort().join(",")!=="level,previousLevel,sessionId,version")throw new Error(t("thinking_level.select data has unsupported fields"));if(value.version!==1)throw new Error(t("thinking_level.select data.version must be 1"));return assertString(value.sessionId,"thinking_level.select data.sessionId"),assertString(value.level,"thinking_level.select data.level"),assertString(value.previousLevel,"thinking_level.select data.previousLevel"),value}function modelSelectEventDefinition(){return{id:MODEL_SELECT_EVENT_ID,version:MODEL_SELECT_EVENT_VERSION,phase:"committed",schema:"agent-forge/model.select@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateModelSelectEventDataV1}}function thinkingLevelSelectEventDefinition(){return{id:THINKING_LEVEL_SELECT_EVENT_ID,version:THINKING_LEVEL_SELECT_EVENT_VERSION,phase:"committed",schema:"agent-forge/thinking_level.select@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateThinkingLevelSelectEventDataV1}}function validateSessionInfoChangedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.info.changed data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,version"&&Object.keys(value).sort().join(",")!=="name,sessionId,version")throw new Error(t("session.info.changed data has unsupported fields"));if(value.version!==1)throw new Error(t("session.info.changed data.version must be 1"));return assertString(value.sessionId,"session.info.changed data.sessionId"),value.name!==void 0&&assertString(value.name,"session.info.changed data.name"),value}function validateSessionEntryAppendedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.entry.appended data must be a plain object"));if(Object.keys(value).sort().join(",")!=="entryId,entryType,sessionId,version")throw new Error(t("session.entry.appended data has unsupported fields"));if(value.version!==1)throw new Error(t("session.entry.appended data.version must be 1"));return assertString(value.sessionId,"session.entry.appended data.sessionId"),assertString(value.entryId,"session.entry.appended data.entryId"),assertString(value.entryType,"session.entry.appended data.entryType"),value}function sessionInfoChangedEventDefinition(){return{id:SESSION_INFO_CHANGED_EVENT_ID,version:SESSION_INFO_CHANGED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.info.changed@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionInfoChangedEventDataV1}}function sessionEntryAppendedEventDefinition(){return{id:SESSION_ENTRY_APPENDED_EVENT_ID,version:SESSION_ENTRY_APPENDED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.entry.appended@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionEntryAppendedEventDataV1}}function validateAgentEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("agent.end data must be a plain object"));if(Object.keys(value).sort().join(",")!=="messageCount,sessionId,version")throw new Error(t("agent.end data has unsupported fields"));if(value.version!==1)throw new Error(t("agent.end data.version must be 1"));if(assertString(value.sessionId,"agent.end data.sessionId"),typeof value.messageCount!="number"||!Number.isSafeInteger(value.messageCount)||value.messageCount<0)throw new Error(t("agent.end data.messageCount must be a non-negative safe integer"));return value}function validateBeforeAgentStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("before.agent.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="hasImages,sessionId,version")throw new Error(t("before.agent.start data has unsupported fields"));if(value.version!==1)throw new Error(t("before.agent.start data.version must be 1"));if(assertString(value.sessionId,"before.agent.start data.sessionId"),typeof value.hasImages!="boolean")throw new Error(t("before.agent.start data.hasImages must be a boolean"));return value}function agentEndEventDefinition(){return{id:AGENT_END_EVENT_ID,version:AGENT_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentEndEventDataV1}}function beforeAgentStartEventDefinition(){return{id:BEFORE_AGENT_START_EVENT_ID,version:BEFORE_AGENT_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/before.agent.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateBeforeAgentStartEventDataV1}}function validateBeforeAgentStartEventDataV2(value){if(!isPlainRecord2(value))throw new Error(t("before.agent.start data must be a plain object"));let allowed=new Set(["version","sessionId","systemPrompt","systemPromptOptions"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("before.agent.start data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","systemPrompt","systemPromptOptions"])if(!(key in value))throw new Error(t("before.agent.start data is missing required field: {key}",{key}));if(value.version!==2)throw new Error(t("before.agent.start data.version must be 2"));if(assertString(value.sessionId,"before.agent.start data.sessionId"),typeof value.systemPrompt!="string")throw new Error(t("before.agent.start data.systemPrompt must be a string"));if(!isPlainRecord2(value.systemPromptOptions))throw new Error(t("before.agent.start data.systemPromptOptions must be a plain object"));return value}function beforeAgentStartV2EventDefinition(){return{id:BEFORE_AGENT_START_EVENT_ID,version:BEFORE_AGENT_START_EVENT_VERSION_V2,phase:"candidate",schema:"agent-forge/before.agent.start@2",allowedRegistrationKinds:["observe","transform"],validate:validateBeforeAgentStartEventDataV2}}function validateUIPromptBoundaryEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("ui.prompt lifecycle data must be a plain object"));let keys=Object.keys(value).sort();if(keys.join(",")!=="kind,sessionId,version"&&keys.join(",")!=="kind,sessionId,title,version")throw new Error(t("ui.prompt lifecycle data has unsupported fields"));if(value.version!==1)throw new Error(t("ui.prompt lifecycle data.version must be 1"));return assertString(value.sessionId,"ui.prompt lifecycle data.sessionId"),assertString(value.kind,"ui.prompt lifecycle data.kind"),value.title!==void 0&&assertString(value.title,"ui.prompt lifecycle data.title"),value}function validateResourcesDiscoverEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("resources.discover data must be a plain object"));if(Object.keys(value).sort().join(",")!=="cwd,reason,sessionId,version")throw new Error(t("resources.discover data has unsupported fields"));if(value.version!==1)throw new Error(t("resources.discover data.version must be 1"));if(assertString(value.sessionId,"resources.discover data.sessionId"),assertString(value.cwd,"resources.discover data.cwd"),value.reason!=="startup"&&value.reason!=="reload")throw new Error(t("resources.discover data.reason is invalid"));return value}function uiPromptStartEventDefinition(){return{id:UI_PROMPT_START_EVENT_ID,version:UI_PROMPT_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/ui.prompt.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateUIPromptBoundaryEventDataV1}}function uiPromptEndEventDefinition(){return{id:UI_PROMPT_END_EVENT_ID,version:UI_PROMPT_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/ui.prompt.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateUIPromptBoundaryEventDataV1}}function resourcesDiscoverEventDefinition(){return{id:RESOURCES_DISCOVER_EVENT_ID,version:RESOURCES_DISCOVER_EVENT_VERSION,phase:"committed",schema:"agent-forge/resources.discover@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateResourcesDiscoverEventDataV1}}function validateResourcesDiscoverContributionV2(value,label){if(!Array.isArray(value))throw new Error(t("{label} must be an array",{label}));for(let[index,entry]of value.entries()){if(!isPlainRecord2(entry))throw new Error(t("{label}[{index}] must be a plain object",{label,index}));if(Object.keys(entry).sort().join(",")!=="extensionPath,path")throw new Error(t("{label}[{index}] has unsupported fields",{label,index}));assertString(entry.path,`${label}[${index}].path`),assertString(entry.extensionPath,`${label}[${index}].extensionPath`)}}function validateResourcesDiscoverEventDataV2(value){if(!isPlainRecord2(value))throw new Error(t("resources.discover data must be a plain object"));let allowed=new Set(["version","sessionId","cwd","reason","skillPaths","promptPaths","themePaths"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("resources.discover data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","cwd","reason"])if(!(key in value))throw new Error(t("resources.discover data is missing required field: {key}",{key}));if(value.version!==2)throw new Error(t("resources.discover data.version must be 2"));if(assertString(value.sessionId,"resources.discover data.sessionId"),assertString(value.cwd,"resources.discover data.cwd"),value.reason!=="startup"&&value.reason!=="reload")throw new Error(t("resources.discover data.reason is invalid"));return value.skillPaths!==void 0&&validateResourcesDiscoverContributionV2(value.skillPaths,"resources.discover data.skillPaths"),value.promptPaths!==void 0&&validateResourcesDiscoverContributionV2(value.promptPaths,"resources.discover data.promptPaths"),value.themePaths!==void 0&&validateResourcesDiscoverContributionV2(value.themePaths,"resources.discover data.themePaths"),value}function resourcesDiscoverV2EventDefinition(){return{id:RESOURCES_DISCOVER_EVENT_ID,version:RESOURCES_DISCOVER_EVENT_VERSION_V2,phase:"candidate",schema:"agent-forge/resources.discover@2",allowedRegistrationKinds:["observe","transform"],validate:validateResourcesDiscoverEventDataV2}}function validateContextAssembledEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("context.assembled data must be a plain object"));if(Object.keys(value).sort().join(",")!=="messageCount,sessionId,version")throw new Error(t("context.assembled data has unsupported fields"));if(value.version!==1)throw new Error(t("context.assembled data.version must be 1"));if(assertString(value.sessionId,"context.assembled data.sessionId"),typeof value.messageCount!="number"||!Number.isSafeInteger(value.messageCount)||value.messageCount<0)throw new Error(t("context.assembled data.messageCount must be a non-negative safe integer"));return value}function validateInputReceivedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("input.received data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,textLength,version,source".split(",").sort().join(","))throw new Error(t("input.received data has unsupported fields"));if(value.version!==1)throw new Error(t("input.received data.version must be 1"));if(assertString(value.sessionId,"input.received data.sessionId"),assertString(value.source,"input.received data.source"),typeof value.textLength!="number"||!Number.isSafeInteger(value.textLength)||value.textLength<0)throw new Error(t("input.received data.textLength must be a non-negative safe integer"));return value}function validateUserBashEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("user.bash data must be a plain object"));if(Object.keys(value).sort().join(",")!=="cwd,excludeFromContext,sessionId,version")throw new Error(t("user.bash data has unsupported fields"));if(value.version!==1)throw new Error(t("user.bash data.version must be 1"));if(assertString(value.sessionId,"user.bash data.sessionId"),assertString(value.cwd,"user.bash data.cwd"),typeof value.excludeFromContext!="boolean")throw new Error(t("user.bash data.excludeFromContext must be a boolean"));return value}function contextAssembledEventDefinition(){return{id:CONTEXT_ASSEMBLED_EVENT_ID,version:CONTEXT_ASSEMBLED_EVENT_VERSION,phase:"committed",schema:"agent-forge/context.assembled@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateContextAssembledEventDataV1}}function inputReceivedEventDefinition(){return{id:INPUT_RECEIVED_EVENT_ID,version:INPUT_RECEIVED_EVENT_VERSION,phase:"committed",schema:"agent-forge/input.received@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateInputReceivedEventDataV1}}function userBashEventDefinition(){return{id:USER_BASH_EVENT_ID,version:USER_BASH_EVENT_VERSION,phase:"committed",schema:"agent-forge/user.bash@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateUserBashEventDataV1}}function validateSessionStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.start data must be a plain object"));let keys=Object.keys(value).sort();if(keys.join(",")!=="reason,sessionId,version"&&keys.join(",")!=="previousSessionFile,reason,sessionId,version")throw new Error(t("session.start data has unsupported fields"));if(value.version!==1)throw new Error(t("session.start data.version must be 1"));if(assertString(value.sessionId,"session.start data.sessionId"),value.reason!=="startup"&&value.reason!=="reload"&&value.reason!=="new"&&value.reason!=="resume"&&value.reason!=="fork")throw new Error(t("session.start data.reason is invalid"));return value.previousSessionFile!==void 0&&assertString(value.previousSessionFile,"session.start data.previousSessionFile"),value}function sessionStartEventDefinition(){return{id:SESSION_START_EVENT_ID,version:SESSION_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionStartEventDataV1}}function validateModelResponseEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("model.response data must be a plain object"));let record=value,allowed=new Set(["version","sessionId","entryId","revision","provider","model","stopReason","message","errorMessage"]),unsupported=Object.keys(record).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("model.response data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","entryId","revision","provider","model","stopReason","message"])if(!(key in record))throw new Error(t("model.response data is missing required field: {key}",{key}));if(record.version!==1)throw new Error(t("model.response data.version must be 1"));if(assertString(record.sessionId,"model.response data.sessionId"),assertString(record.entryId,"model.response data.entryId"),assertString(record.provider,"model.response data.provider"),assertString(record.model,"model.response data.model"),record.stopReason!=="pending"&&record.stopReason!=="stop"&&record.stopReason!=="length"&&record.stopReason!=="toolUse"&&record.stopReason!=="error"&&record.stopReason!=="aborted"&&record.stopReason!=="deferred")throw new Error(t("model.response data.stopReason is invalid"));if(!record.message||typeof record.message!="object"||Array.isArray(record.message))throw new Error(t("model.response data.message must be an assistant message object"));if(record.message.role!=="assistant")throw new Error(t("model.response data.message.role must be assistant"));if(!isPlainRecord2(record.revision))throw new Error(t("model.response data.revision must be a plain object"));let revision=record.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("model.response data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("model.response data.revision.version must be 1"));if(assertString(revision.sessionId,"model.response data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("model.response data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"model.response data.revision.leafId"),revision.sessionId!==record.sessionId)throw new Error(t("model.response data.revision.sessionId must match sessionId"));return record.errorMessage!==void 0&&assertString(record.errorMessage,"model.response data.errorMessage"),value}function isPlainRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Object.getPrototypeOf(value)===Object.prototype}function modelResponseEventDefinition(){return{id:MODEL_RESPONSE_EVENT_ID,version:MODEL_RESPONSE_EVENT_VERSION,phase:"committed",schema:"agent-forge/model.response@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateModelResponseEventDataV1}}var modelStreamEvents=new Set(["start","text_start","text_delta","text_end","thinking_start","thinking_delta","thinking_end","toolcall_start","toolcall_delta","toolcall_end","done","error"]);function validateModelStreamEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("model.stream data must be a plain object"));let allowed=new Set(["version","sessionId","streamId","sequence","phase","event","partial","terminal","error"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("model.stream data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","streamId","sequence","phase","event","partial","terminal","error"])if(!(key in value))throw new Error(t("model.stream data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("model.stream data.version must be 1"));if(assertString(value.sessionId,"model.stream data.sessionId"),assertString(value.streamId,"model.stream data.streamId"),typeof value.sequence!="number"||!Number.isSafeInteger(value.sequence)||value.sequence<1)throw new Error(t("model.stream data.sequence must be a positive safe integer"));if(value.phase!=="raw"&&value.phase!=="candidate"&&value.phase!=="committed")throw new Error(t("model.stream data.phase is invalid"));if(typeof value.event!="string"||!modelStreamEvents.has(value.event))throw new Error(t("model.stream data.event is invalid"));if(value.phase==="committed"&&value.event!=="done"&&value.event!=="error")throw new Error(t("model.stream committed phase only permits terminal events"));let terminal=value.event==="done"||value.event==="error";if(value.terminal!==terminal)throw new Error(t("model.stream data.terminal does not match event"));if(value.partial!==null&&assertJsonSafe(value.partial,"model.stream data.partial"),terminal&&value.event==="done"&&value.error!==null)throw new Error(t("model.stream done event cannot contain error"));if(terminal&&value.event==="error"){if(!isPlainRecord2(value.error))throw new Error(t("model.stream error event requires error object"));if(Object.keys(value.error).some(key=>key!=="code"&&key!=="message"&&key!=="name"))throw new Error(t("model.stream error has unsupported fields"));assertString(value.error.code,"model.stream data.error.code"),assertString(value.error.message,"model.stream data.error.message"),value.error.name!==void 0&&assertString(value.error.name,"model.stream data.error.name")}else if(value.error!==null)throw new Error(t("model.stream non-terminal event cannot contain error"));return value}function modelStreamEventDefinition(){return{id:MODEL_STREAM_EVENT_ID,version:MODEL_STREAM_EVENT_VERSION,phase:"raw",allowedPhases:["raw","candidate","committed"],schema:"agent-forge/model.stream@1",allowedRegistrationKinds:["observe"],validate:validateModelStreamEventDataV1}}function validateToolResultEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.result data must be a plain object"));let allowed=new Set(["version","sessionId","entryId","revision","toolCallId","toolName","isError","message"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.result data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","entryId","revision","toolCallId","toolName","isError","message"])if(!(key in value))throw new Error(t("tool.result data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.result data.version must be 1"));if(assertString(value.sessionId,"tool.result data.sessionId"),assertString(value.entryId,"tool.result data.entryId"),assertString(value.toolCallId,"tool.result data.toolCallId"),assertString(value.toolName,"tool.result data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.result data.isError must be boolean"));if(!isPlainRecord2(value.message))throw new Error(t("tool.result data.message must be a tool result message object"));if(value.message.role!=="toolResult")throw new Error(t("tool.result data.message.role must be toolResult"));if(assertString(value.message.toolCallId,"tool.result data.message.toolCallId"),assertString(value.message.toolName,"tool.result data.message.toolName"),!Array.isArray(value.message.content))throw new Error(t("tool.result data.message.content must be an array"));if(typeof value.message.isError!="boolean")throw new Error(t("tool.result data.message.isError must be boolean"));if(value.message.toolCallId!==value.toolCallId)throw new Error(t("tool.result data.message.toolCallId must match toolCallId"));if(value.message.toolName!==value.toolName)throw new Error(t("tool.result data.message.toolName must match toolName"));if(value.message.isError!==value.isError)throw new Error(t("tool.result data.message.isError must match isError"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.result data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.result data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.result data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.result data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.result data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.result data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.result data.revision.sessionId must match sessionId"));return value}function toolResultEventDefinition(){return{id:TOOL_RESULT_EVENT_ID,version:TOOL_RESULT_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.result@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolResultEventDataV1}}function validateToolCallEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.call data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","input"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.call data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","input"])if(!(key in value))throw new Error(t("tool.call data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.call data.version must be 1"));if(assertString(value.sessionId,"tool.call data.sessionId"),assertString(value.toolCallId,"tool.call data.toolCallId"),assertString(value.toolName,"tool.call data.toolName"),!isPlainRecord2(value.revision))throw new Error(t("tool.call data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.call data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.call data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.call data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.call data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.call data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.call data.revision.sessionId must match sessionId"));return assertJsonSafe(value.input,"tool.call data.input"),value}function toolCallEventDefinition(){return{id:TOOL_CALL_EVENT_ID,version:TOOL_CALL_EVENT_VERSION,phase:"candidate",schema:"agent-forge/tool.call@1",allowedRegistrationKinds:["observe","transform"],validate:validateToolCallEventDataV1}}function validateToolExecuteEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.execute data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","input","isError","content"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.execute data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","input","isError","content"])if(!(key in value))throw new Error(t("tool.execute data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.execute data.version must be 1"));if(assertString(value.sessionId,"tool.execute data.sessionId"),assertString(value.toolCallId,"tool.execute data.toolCallId"),assertString(value.toolName,"tool.execute data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.execute data.isError must be boolean"));return assertJsonSafe(value.input,"tool.execute data.input"),validateToolResultRawEventDataV1({version:1,sessionId:value.sessionId,revision:value.revision,toolCallId:value.toolCallId,toolName:value.toolName,isError:value.isError,content:value.content}),value}function toolExecuteEventDefinition(){return{id:TOOL_EXECUTE_EVENT_ID,version:TOOL_EXECUTE_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.execute@1",allowedRegistrationKinds:["observe","execute"],validate:validateToolExecuteEventDataV1}}function validateToolCommitEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.commit data must be a plain object"));let allowed=new Set(["version","sessionId","entryId","revision","toolCallId","toolName","isError"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.commit data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","entryId","revision","toolCallId","toolName","isError"])if(!(key in value))throw new Error(t("tool.commit data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.commit data.version must be 1"));if(assertString(value.sessionId,"tool.commit data.sessionId"),assertString(value.entryId,"tool.commit data.entryId"),assertString(value.toolCallId,"tool.commit data.toolCallId"),assertString(value.toolName,"tool.commit data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.commit data.isError must be boolean"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.commit data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.commit data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.commit data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.commit data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.commit data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.commit data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.commit data.revision.sessionId must match sessionId"));return value}function toolCommitEventDefinition(){return{id:TOOL_COMMIT_EVENT_ID,version:TOOL_COMMIT_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.commit@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolCommitEventDataV1}}function validateToolResultRawEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.result.raw data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","isError","content"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.result.raw data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","isError","content"])if(!(key in value))throw new Error(t("tool.result.raw data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.result.raw data.version must be 1"));if(assertString(value.sessionId,"tool.result.raw data.sessionId"),assertString(value.toolCallId,"tool.result.raw data.toolCallId"),assertString(value.toolName,"tool.result.raw data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.result.raw data.isError must be boolean"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.result.raw data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.result.raw data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.result.raw data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.result.raw data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.result.raw data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.result.raw data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.result.raw data.revision.sessionId must match sessionId"));if(!Array.isArray(value.content))throw new Error(t("tool.result.raw data.content must be an array"));for(let[index,content]of value.content.entries()){if(!isPlainRecord2(content))throw new Error(t("tool.result.raw data.content[{index}] must be a plain object",{index}));if(content.type==="text"){let keys=Object.keys(content).sort().join(",");if(keys!=="text,type"&&keys!=="text,textSignature,type")throw new Error(t("tool.result.raw data.content[{index}] has unsupported text fields",{index}));assertString(content.text,`tool.result.raw data.content[${index}].text`),content.textSignature!==void 0&&assertString(content.textSignature,`tool.result.raw data.content[${index}].textSignature`);continue}if(content.type==="image"){if(Object.keys(content).sort().join(",")!=="data,mimeType,type")throw new Error(t("tool.result.raw data.content[{index}] has unsupported image fields",{index}));assertString(content.data,`tool.result.raw data.content[${index}].data`),assertString(content.mimeType,`tool.result.raw data.content[${index}].mimeType`);continue}throw new Error(t("tool.result.raw data.content[{index}].type is invalid",{index}))}return value}function toolResultRawEventDefinition(){return{id:TOOL_RESULT_RAW_EVENT_ID,version:TOOL_RESULT_RAW_EVENT_VERSION,phase:"raw",schema:"agent-forge/tool.result.raw@1",allowedRegistrationKinds:["observe"],validate:validateToolResultRawEventDataV1}}var TOOL_RESULT_TRANSFORM_EVENT_ID="tool.result.transform",TOOL_RESULT_TRANSFORM_EVENT_VERSION=1;function validateToolResultTransformEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.result.transform data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","isError","content"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.result.transform data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","isError","content"])if(!(key in value))throw new Error(t("tool.result.transform data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.result.transform data.version must be 1"));if(assertString(value.sessionId,"tool.result.transform data.sessionId"),assertString(value.toolCallId,"tool.result.transform data.toolCallId"),assertString(value.toolName,"tool.result.transform data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.result.transform data.isError must be boolean"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.result.transform data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.result.transform data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.result.transform data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.result.transform data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.result.transform data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.result.transform data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.result.transform data.revision.sessionId must match sessionId"));if(!Array.isArray(value.content))throw new Error(t("tool.result.transform data.content must be an array"));for(let[index,content]of value.content.entries()){if(!isPlainRecord2(content))throw new Error(t("tool.result.transform data.content[{index}] must be a plain object",{index}));if(content.type==="text"){let keys=Object.keys(content).sort().join(",");if(keys!=="text,type"&&keys!=="text,textSignature,type")throw new Error(t("tool.result.transform data.content[{index}] has unsupported text fields",{index}));assertString(content.text,`tool.result.transform data.content[${index}].text`),content.textSignature!==void 0&&assertString(content.textSignature,`tool.result.transform data.content[${index}].textSignature`);continue}if(content.type==="image"){if(Object.keys(content).sort().join(",")!=="data,mimeType,type")throw new Error(t("tool.result.transform data.content[{index}] has unsupported image fields",{index}));assertString(content.data,`tool.result.transform data.content[${index}].data`),assertString(content.mimeType,`tool.result.transform data.content[${index}].mimeType`);continue}throw new Error(t("tool.result.transform data.content[{index}].type is invalid",{index}))}return value}function toolResultTransformEventDefinition(){return{id:TOOL_RESULT_TRANSFORM_EVENT_ID,version:TOOL_RESULT_TRANSFORM_EVENT_VERSION,phase:"candidate",schema:"agent-forge/tool.result.transform@1",allowedRegistrationKinds:["observe","transform"],validate:validateToolResultTransformEventDataV1}}function validateOperationEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.end data must be a plain object"));let allowed=new Set(["version","operationId","operationKind","status","errorMessage","reason"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("operation.end data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","operationId","operationKind","status"])if(!(key in value))throw new Error(t("operation.end data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("operation.end data.version must be 1"));if(assertString(value.operationId,"operation.end data.operationId"),assertString(value.operationKind,"operation.end data.operationKind"),value.status!=="succeeded"&&value.status!=="failed"&&value.status!=="cancelled")throw new Error(t("operation.end data.status is invalid"));return value.errorMessage!==void 0&&assertString(value.errorMessage,"operation.end data.errorMessage"),value.reason!==void 0&&assertString(value.reason,"operation.end data.reason"),value}function operationEndEventDefinition(){return{id:OPERATION_END_EVENT_ID,version:OPERATION_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationEndEventDataV1}}var CAPABILITY_CALL_EVENT_ID="capability.call",CAPABILITY_CALL_EVENT_VERSION=1,capabilityCallEvents=new Set(["start","cancel","end"]),capabilityCallStatuses=new Set(["succeeded","failed","cancelled"]);function validateCapabilityCallEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("capability.call data must be a plain object"));let allowed=new Set(["version","operationId","capabilityId","capabilityVersion","capabilityKind","callerPluginId","providerPluginId","event","status","error"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("capability.call data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","operationId","capabilityId","capabilityVersion","capabilityKind","callerPluginId","providerPluginId","event"])if(!(key in value))throw new Error(t("capability.call data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("capability.call data.version must be 1"));if(assertString(value.operationId,"capability.call data.operationId"),assertString(value.capabilityId,"capability.call data.capabilityId"),typeof value.capabilityVersion!="number"||!Number.isSafeInteger(value.capabilityVersion)||value.capabilityVersion<1)throw new Error(t("capability.call data.capabilityVersion must be a positive safe integer"));if(value.capabilityKind!=="service"&&value.capabilityKind!=="contribution"&&value.capabilityKind!=="transform")throw new Error(t("capability.call data.capabilityKind is invalid"));if(assertString(value.callerPluginId,"capability.call data.callerPluginId"),assertString(value.providerPluginId,"capability.call data.providerPluginId"),typeof value.event!="string"||!capabilityCallEvents.has(value.event))throw new Error(t("capability.call data.event is invalid"));if((value.event==="start"||value.event==="cancel")&&value.status!==void 0)throw new Error(t("capability.call start/cancel must not include status"));if(value.event==="end"&&value.status===void 0)throw new Error(t("capability.call end requires status"));if(value.status!==void 0&&(typeof value.status!="string"||!capabilityCallStatuses.has(value.status)))throw new Error(t("capability.call data.status is invalid"));if(value.error!==void 0){if(!isPlainRecord2(value.error))throw new Error(t("capability.call data.error must be a plain object"));if(Object.keys(value.error).some(key=>key!=="code"&&key!=="message"&&key!=="name"))throw new Error(t("capability.call data.error has unsupported fields"));if(!("code"in value.error))throw new Error(t("capability.call data.error is missing required field: code"));if(!("message"in value.error))throw new Error(t("capability.call data.error is missing required field: message"));assertString(value.error.code,"capability.call data.error.code"),assertString(value.error.message,"capability.call data.error.message"),value.error.name!==void 0&&assertString(value.error.name,"capability.call data.error.name")}if(value.event!=="end"&&value.error!==void 0)throw new Error(t("capability.call start/cancel must not include error"));if(value.event==="end"&&value.status==="succeeded"&&value.error!==void 0)throw new Error(t("capability.call succeeded end must not include error"));return value}function capabilityCallEventDefinition(){return{id:CAPABILITY_CALL_EVENT_ID,version:CAPABILITY_CALL_EVENT_VERSION,phase:"committed",schema:"agent-forge/capability.call@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateCapabilityCallEventDataV1}}var OPERATION_START_EVENT_ID="operation.start",OPERATION_START_EVENT_VERSION=1,OPERATION_STEP_EVENT_ID="operation.step",OPERATION_STEP_EVENT_VERSION=1;function validateOperationStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="operationId,operationKind,version")throw new Error(t("operation.start data has unsupported fields"));if(value.version!==1)throw new Error(t("operation.start data.version must be 1"));return assertString(value.operationId,"operation.start data.operationId"),assertString(value.operationKind,"operation.start data.operationKind"),value}function operationStartEventDefinition(){return{id:OPERATION_START_EVENT_ID,version:OPERATION_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationStartEventDataV1}}function validateOperationStepEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.step data must be a plain object"));let allowed=new Set(["version","operationId","operationKind","step","message","data"]);if(Object.keys(value).filter(key=>!allowed.has(key)).length>0)throw new Error(t("operation.step data has unsupported fields"));if(value.version!==1)throw new Error(t("operation.step data.version must be 1"));if(assertString(value.operationId,"operation.step data.operationId"),assertString(value.operationKind,"operation.step data.operationKind"),typeof value.step!="number"||!Number.isSafeInteger(value.step)||value.step<1)throw new Error(t("operation.step data.step must be a positive safe integer"));return value.message!==void 0&&assertString(value.message,"operation.step data.message"),value.data!==void 0&&assertJsonSafe(value.data,"operation.step data.data"),value}function operationStepEventDefinition(){return{id:OPERATION_STEP_EVENT_ID,version:OPERATION_STEP_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.step@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationStepEventDataV1}}var OPERATION_CANCEL_EVENT_ID="operation.cancel",OPERATION_CANCEL_EVENT_VERSION=1;function validateOperationCancelEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.cancel data must be a plain object"));if(Object.keys(value).sort().join(",")!=="operationId,operationKind,version")throw new Error(t("operation.cancel data has unsupported fields"));if(value.version!==1)throw new Error(t("operation.cancel data.version must be 1"));return assertString(value.operationId,"operation.cancel data.operationId"),assertString(value.operationKind,"operation.cancel data.operationKind"),value}function operationCancelEventDefinition(){return{id:OPERATION_CANCEL_EVENT_ID,version:OPERATION_CANCEL_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.cancel@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationCancelEventDataV1}}var SESSION_AUTO_RETRY_EVENT_ID="session.auto.retry",SESSION_AUTO_RETRY_EVENT_VERSION=1,SESSION_COMPACTION_DECISION_EVENT_ID="session.compaction.decision",SESSION_COMPACTION_DECISION_EVENT_VERSION=1,SESSION_COMPACTION_FAILED_EVENT_ID="session.compaction.failed",SESSION_COMPACTION_FAILED_EVENT_VERSION=1;function assertNonNegativeSafeInteger(value,label){if(typeof value!="number"||!Number.isSafeInteger(value)||value<0)throw new Error(t("{label} must be a non-negative safe integer",{label}))}function assertPositiveSafeInteger(value,label){if(typeof value!="number"||!Number.isSafeInteger(value)||value<1)throw new Error(t("{label} must be a positive safe integer",{label}))}function validateSessionAutoRetryEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.auto.retry data must be a plain object"));let allowed=new Set(["version","sessionId","attempt","maxAttempts","delayMs","errorMessage"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.auto.retry data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","attempt","maxAttempts","delayMs","errorMessage"])if(!(key in value))throw new Error(t("session.auto.retry data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("session.auto.retry data.version must be 1"));return assertString(value.sessionId,"session.auto.retry data.sessionId"),assertPositiveSafeInteger(value.attempt,"session.auto.retry data.attempt"),assertPositiveSafeInteger(value.maxAttempts,"session.auto.retry data.maxAttempts"),assertNonNegativeSafeInteger(value.delayMs,"session.auto.retry data.delayMs"),assertString(value.errorMessage,"session.auto.retry data.errorMessage"),value}function sessionAutoRetryEventDefinition(){return{id:SESSION_AUTO_RETRY_EVENT_ID,version:SESSION_AUTO_RETRY_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.auto.retry@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionAutoRetryEventDataV1}}var sessionCompactionDecisionReasons=new Set(["overflow","threshold"]);function assertOptionalPositiveSafeInteger(value,label){value!==void 0&&assertPositiveSafeInteger(value,label)}function validateSessionCompactionDecisionEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.compaction.decision data must be a plain object"));let allowed=new Set(["version","sessionId","reason","compact","willRetry","contextTokens","contextWindow","reserveTokens","failureMessage"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.compaction.decision data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","reason","compact","willRetry"])if(!(key in value))throw new Error(t("session.compaction.decision data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("session.compaction.decision data.version must be 1"));if(assertString(value.sessionId,"session.compaction.decision data.sessionId"),typeof value.reason!="string"||!sessionCompactionDecisionReasons.has(value.reason))throw new Error(t("session.compaction.decision data.reason is invalid"));if(typeof value.compact!="boolean")throw new Error(t("session.compaction.decision data.compact must be a boolean"));if(typeof value.willRetry!="boolean")throw new Error(t("session.compaction.decision data.willRetry must be a boolean"));return assertOptionalPositiveSafeInteger(value.contextTokens,"session.compaction.decision data.contextTokens"),assertOptionalPositiveSafeInteger(value.contextWindow,"session.compaction.decision data.contextWindow"),assertOptionalPositiveSafeInteger(value.reserveTokens,"session.compaction.decision data.reserveTokens"),value.failureMessage!==void 0&&assertString(value.failureMessage,"session.compaction.decision data.failureMessage"),value}function sessionCompactionDecisionEventDefinition(){return{id:SESSION_COMPACTION_DECISION_EVENT_ID,version:SESSION_COMPACTION_DECISION_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.compaction.decision@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionCompactionDecisionEventDataV1}}var sessionCompactionFailedReasons=new Set(["manual","overflow","threshold"]);function validateSessionCompactionFailedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.compaction.failed data must be a plain object"));let allowed=new Set(["version","sessionId","reason","errorMessage"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.compaction.failed data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","reason","errorMessage"])if(!(key in value))throw new Error(t("session.compaction.failed data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("session.compaction.failed data.version must be 1"));if(assertString(value.sessionId,"session.compaction.failed data.sessionId"),typeof value.reason!="string"||!sessionCompactionFailedReasons.has(value.reason))throw new Error(t("session.compaction.failed data.reason is invalid"));return assertString(value.errorMessage,"session.compaction.failed data.errorMessage"),value}function sessionCompactionFailedEventDefinition(){return{id:SESSION_COMPACTION_FAILED_EVENT_ID,version:SESSION_COMPACTION_FAILED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.compaction.failed@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionCompactionFailedEventDataV1}}var SESSION_END_EVENT_ID="session.end",SESSION_END_EVENT_VERSION=1;function validateSessionEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.end data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,version")throw new Error(t("session.end data has unsupported fields"));if(value.version!==1)throw new Error(t("session.end data.version must be 1"));return assertString(value.sessionId,"session.end data.sessionId"),value}function sessionEndEventDefinition(){return{id:SESSION_END_EVENT_ID,version:SESSION_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionEndEventDataV1}}var AGENT_TASK_SETTLED_EVENT_ID="agent.task.settled",AGENT_TASK_SETTLED_EVENT_VERSION=1,agentTaskSettledStatuses=new Set(["queued","admitted","running","succeeded","failed","cancelled","timed_out","drain_timeout","runner_lost"]);function validateAgentTaskSettledEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("agent.task.settled data must be a plain object"));let allowed=new Set(["version","sessionId","taskSessionId","taskId","status","reasonCode"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("agent.task.settled data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","taskSessionId","taskId","status"])if(!(key in value))throw new Error(t("agent.task.settled data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("agent.task.settled data.version must be 1"));if(assertString(value.sessionId,"agent.task.settled data.sessionId"),assertString(value.taskSessionId,"agent.task.settled data.taskSessionId"),assertString(value.taskId,"agent.task.settled data.taskId"),typeof value.status!="string"||!agentTaskSettledStatuses.has(value.status))throw new Error(t("agent.task.settled data.status is invalid"));return value.reasonCode!==void 0&&assertString(value.reasonCode,"agent.task.settled data.reasonCode"),value}function agentTaskSettledEventDefinition(){return{id:AGENT_TASK_SETTLED_EVENT_ID,version:AGENT_TASK_SETTLED_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.task.settled@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentTaskSettledEventDataV1}}function validateToolGateBlockedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.gate.blocked data must be a plain object"));let allowed=new Set(["version","sessionId","toolCallId","toolName","reason"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.gate.blocked data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","toolCallId","toolName"])if(!(key in value))throw new Error(t("tool.gate.blocked data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.gate.blocked data.version must be 1"));return assertString(value.sessionId,"tool.gate.blocked data.sessionId"),assertString(value.toolCallId,"tool.gate.blocked data.toolCallId"),assertString(value.toolName,"tool.gate.blocked data.toolName"),value.reason!==void 0&&assertString(value.reason,"tool.gate.blocked data.reason"),value}function toolGateBlockedEventDefinition(){return{id:TOOL_GATE_BLOCKED_EVENT_ID,version:TOOL_GATE_BLOCKED_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.gate.blocked@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolGateBlockedEventDataV1}}function validateInputGateBlockedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("input.gate.blocked data must be a plain object"));let allowed=new Set(["version","sessionId","source","textLength","reason"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("input.gate.blocked data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","source","textLength"])if(!(key in value))throw new Error(t("input.gate.blocked data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("input.gate.blocked data.version must be 1"));if(assertString(value.sessionId,"input.gate.blocked data.sessionId"),assertString(value.source,"input.gate.blocked data.source"),typeof value.textLength!="number"||!Number.isInteger(value.textLength)||value.textLength<0)throw new Error(t("input.gate.blocked data.textLength must be a non-negative integer"));return value.reason!==void 0&&assertString(value.reason,"input.gate.blocked data.reason"),value}function inputGateBlockedEventDefinition(){return{id:INPUT_GATE_BLOCKED_EVENT_ID,version:INPUT_GATE_BLOCKED_EVENT_VERSION,phase:"committed",schema:"agent-forge/input.gate.blocked@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateInputGateBlockedEventDataV1}}var PROVIDER_FAILOVER_SWITCHED_EVENT_ID="provider.failover.switched",PROVIDER_FAILOVER_SWITCHED_EVENT_VERSION=1,PROVIDER_FAILOVER_RECOVERED_EVENT_ID="provider.failover.recovered",PROVIDER_FAILOVER_RECOVERED_EVENT_VERSION=1,PROVIDER_FAILOVER_PROBE_FAILED_EVENT_ID="provider.failover.probe.failed",PROVIDER_FAILOVER_PROBE_FAILED_EVENT_VERSION=1,isModelReference=value=>{let separator=value.indexOf("/");return separator>0&&separator<value.length-1};function validateFailoverModelReference(value,label){if(assertString(value,label),!isModelReference(value))throw new Error(t("{label} must be a provider/modelId reference",{label}))}function validateProviderFailoverSwitchedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("provider.failover.switched data must be a plain object"));let allowed=new Set(["version","chainId","from","to","attempt","rawError"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("provider.failover.switched data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","chainId","from","to","attempt","rawError"])if(!(key in value))throw new Error(t("provider.failover.switched data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("provider.failover.switched data.version must be 1"));return validateFailoverModelReference(value.chainId,"provider.failover.switched data.chainId"),validateFailoverModelReference(value.from,"provider.failover.switched data.from"),validateFailoverModelReference(value.to,"provider.failover.switched data.to"),assertPositiveSafeInteger(value.attempt,"provider.failover.switched data.attempt"),assertString(value.rawError,"provider.failover.switched data.rawError"),value}function providerFailoverSwitchedEventDefinition(){return{id:PROVIDER_FAILOVER_SWITCHED_EVENT_ID,version:PROVIDER_FAILOVER_SWITCHED_EVENT_VERSION,phase:"committed",schema:"agent-forge/provider.failover.switched@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateProviderFailoverSwitchedEventDataV1}}function validateProviderFailoverRecoveredEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("provider.failover.recovered data must be a plain object"));if(Object.keys(value).sort().join(",")!=="chainId,provider,version")throw new Error(t("provider.failover.recovered data has unsupported fields"));if(value.version!==1)throw new Error(t("provider.failover.recovered data.version must be 1"));return validateFailoverModelReference(value.chainId,"provider.failover.recovered data.chainId"),assertString(value.provider,"provider.failover.recovered data.provider"),value}function providerFailoverRecoveredEventDefinition(){return{id:PROVIDER_FAILOVER_RECOVERED_EVENT_ID,version:PROVIDER_FAILOVER_RECOVERED_EVENT_VERSION,phase:"committed",schema:"agent-forge/provider.failover.recovered@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateProviderFailoverRecoveredEventDataV1}}function validateProviderFailoverProbeFailedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("provider.failover.probe.failed data must be a plain object"));let allowed=new Set(["version","chainId","provider","rawError","nextCooldownMs"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("provider.failover.probe.failed data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","chainId","provider","rawError","nextCooldownMs"])if(!(key in value))throw new Error(t("provider.failover.probe.failed data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("provider.failover.probe.failed data.version must be 1"));return validateFailoverModelReference(value.chainId,"provider.failover.probe.failed data.chainId"),assertString(value.provider,"provider.failover.probe.failed data.provider"),assertString(value.rawError,"provider.failover.probe.failed data.rawError"),assertPositiveSafeInteger(value.nextCooldownMs,"provider.failover.probe.failed data.nextCooldownMs"),value}function providerFailoverProbeFailedEventDefinition(){return{id:PROVIDER_FAILOVER_PROBE_FAILED_EVENT_ID,version:PROVIDER_FAILOVER_PROBE_FAILED_EVENT_VERSION,phase:"committed",schema:"agent-forge/provider.failover.probe.failed@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateProviderFailoverProbeFailedEventDataV1}}import{lstatSync,readdirSync,realpathSync,statSync}from"node:fs";import{readFile as readFile2}from"node:fs/promises";import{createRequire}from"node:module";import*as path2 from"node:path";var activePlugins=new WeakMap,createJitiPromise;function getCreateJiti(){return createJitiPromise??=import("./jiti-static-loader-CDSTNEDU.js").then(module=>module.createJiti),createJitiPromise}var virtualModulesPromise;function getVirtualModules(){return virtualModulesPromise??=import("./virtual-modules-2QGILFV7.js").then(module=>module.VIRTUAL_MODULES),virtualModulesPromise}var hostHeavyDependencyAliases=new Set(["@lancedb/lancedb","@huggingface/transformers","onnxruntime-node"]),resolvedHeavyDependencyAliases=new Map,defaultHostDependencyAliasResolution={resolve:specifier=>createRequire(import.meta.url).resolve(specifier),cache:resolvedHeavyDependencyAliases};function buildHostDependencyAliases(specifiers,resolution){let aliases={};for(let specifier of specifiers){let cached=resolution.cache.get(specifier);if(cached!==void 0){aliases[specifier]=cached;continue}try{let resolved=resolution.resolve(specifier);resolution.cache.set(specifier,resolved),aliases[specifier]=resolved}catch{}}return aliases}function hostDependencyPathsConfig(){let paths={};for(let[specifier,entryPath]of Object.entries(buildHostDependencyAliases(hostHeavyDependencyAliases,defaultHostDependencyAliasResolution)))paths[camelCaseDependencyKey(specifier)]=entryPath;return paths}function camelCaseDependencyKey(specifier){return specifier.replace(/^@[^/]+\//,"").replace(/[-.](.)/g,(_,character)=>character.toUpperCase())}function isPluginInstance(value){return typeof value=="object"&&value!==null&&typeof value.dispose=="function"}function normalizePluginInstance(value,manifest){if(value!==void 0){if(!isPluginInstance(value))throw new Error(t("Capability plugin factory must return void or an instance with dispose(): {id}",{id:manifest.id}));return value}}function normalizePluginSyncInstance(value,manifest){if(value!==void 0){if(!isPluginInstance(value))throw new Error(t("Synchronous capability plugin factory must return void or an instance with dispose(): {id}",{id:manifest.id}));return value}}function throwCleanupErrors(errors,manifestId){if(errors.length!==0)throw errors.length===1?errors[0]:new AggregateError(errors,`Capability plugin cleanup failed: ${manifestId}`)}async function dispatchPluginDisposeEvent(runtime,manifest,status){runtime.hasLifecycleEvent(PLUGIN_DISPOSE_EVENT_ID,PLUGIN_DISPOSE_EVENT_VERSION)&&await runtime.dispatchLifecycle({type:PLUGIN_DISPOSE_EVENT_ID,version:PLUGIN_DISPOSE_EVENT_VERSION,phase:"committed",data:{version:1,pluginId:manifest.id,pluginVersion:manifest.version,status},source:"capability-plugin"})}async function dispatchPluginReadyEvent(runtime,manifest){runtime.hasLifecycleEvent(PLUGIN_READY_EVENT_ID,PLUGIN_READY_EVENT_VERSION)&&await runtime.dispatchLifecycle({type:PLUGIN_READY_EVENT_ID,version:PLUGIN_READY_EVENT_VERSION,phase:"committed",data:{version:1,pluginId:manifest.id,pluginVersion:manifest.version},source:"capability-plugin"})}function isMissingPathError(error){return typeof error=="object"&&error!==null&&"code"in error&&error.code==="ENOENT"}function compareNames(left,right){return left<right?-1:left>right?1:0}function discoverCapabilityPluginManifests(pluginDirectories){let manifests2=[],seenDirectories=new Set,seenManifests=new Set,visit=(directory,optional)=>{let resolvedDirectory=path2.resolve(directory),stats;try{stats=statSync(resolvedDirectory)}catch(error){if(optional&&isMissingPathError(error))try{if(!lstatSync(resolvedDirectory).isSymbolicLink())return}catch(linkError){if(isMissingPathError(linkError))return;throw new Error(t("Failed to inspect capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:linkError instanceof Error?linkError.message:String(linkError)}))}throw new Error(t("Failed to inspect capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:error instanceof Error?error.message:String(error)}))}if(!stats.isDirectory())throw new Error(t("Capability plugin path must be a directory: {directory}",{directory:resolvedDirectory}));let canonicalDirectory;try{canonicalDirectory=realpathSync(resolvedDirectory)}catch(error){throw new Error(t("Failed to resolve capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:error instanceof Error?error.message:String(error)}))}if(seenDirectories.has(canonicalDirectory))return;seenDirectories.add(canonicalDirectory);let entries;try{entries=readdirSync(resolvedDirectory,{withFileTypes:!0,encoding:"utf8"})}catch(error){throw new Error(t("Failed to read capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:error instanceof Error?error.message:String(error)}))}for(let entry of entries.sort((left,right)=>compareNames(left.name,right.name))){if(entry.name==="node_modules"||entry.name.startsWith("."))continue;let entryPath=path2.join(resolvedDirectory,entry.name);if(entry.isDirectory()){visit(entryPath,!1);continue}if(!entry.isFile()||entry.name!=="plugin.json")continue;let canonicalManifest;try{canonicalManifest=realpathSync(entryPath)}catch(error){throw new Error(t("Failed to resolve capability plugin manifest {path}: {reason}",{path:entryPath,reason:error instanceof Error?error.message:String(error)}))}seenManifests.has(canonicalManifest)||(seenManifests.add(canonicalManifest),manifests2.push(canonicalManifest))}};for(let pluginDirectory of pluginDirectories)visit(pluginDirectory,!0);return manifests2}async function loadCapabilityPlugin(runtime,manifest,factory){let active=activePlugins.get(runtime)??new Map;if(active.has(manifest.id))throw new Error(t("Capability plugin is already loaded: {id}",{id:manifest.id}));let ownerToken=Symbol(manifest.id);active.set(manifest.id,ownerToken),activePlugins.set(runtime,active);let api,instance,cleanup=async notifyDispose=>{let errors=[];api&&runtime.revokeAPI(api);try{await runtime.disposePlugin(manifest.id)}catch(error){errors.push(error)}try{await instance?.dispose()}catch(error){errors.push(error)}if(notifyDispose)try{await dispatchPluginDisposeEvent(runtime,manifest,errors.length===0?"disposed":"failed")}catch(error){errors.push(error)}throwCleanupErrors(errors,manifest.id)};try{api=runtime.createAPI(manifest),instance=normalizePluginInstance(await factory(api),manifest),await dispatchPluginReadyEvent(runtime,manifest);let pluginApi=api,disposePromise;return{manifest,api:pluginApi,ready:Promise.resolve(),dispose:async()=>(disposePromise??=(async()=>{try{await cleanup(!0)}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}})(),disposePromise)}}catch(error){try{await cleanup(!1)}catch(cleanupError){throw new AggregateError([error,cleanupError],`Capability plugin startup cleanup failed: ${manifest.id}`)}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}throw error}}function loadCapabilityPluginSync(runtime,manifest,factory){let active=activePlugins.get(runtime)??new Map;if(active.has(manifest.id))throw new Error(t("Capability plugin is already loaded: {id}",{id:manifest.id}));let ownerToken=Symbol(manifest.id);active.set(manifest.id,ownerToken),activePlugins.set(runtime,active);let api,instance,cleanupRegistrationsSync=()=>{let errors=[];api&&runtime.revokeAPI(api);try{runtime.disposePluginSync(manifest.id)}catch(error){errors.push(error)}return errors},cleanupSync=async()=>{let errors=cleanupRegistrationsSync(),result;try{result=instance?.dispose()}catch(error){errors.push(error)}if(result&&typeof result.then=="function"){let contractError=new Error(`Synchronous capability plugin disposer must not return a Promise: ${manifest.id}`);try{await result}catch(error){errors.push(error)}errors.push(contractError)}try{await dispatchPluginDisposeEvent(runtime,manifest,errors.length===0?"disposed":"failed")}catch(error){errors.push(error)}throwCleanupErrors(errors,manifest.id)};try{api=runtime.createAPI(manifest),instance=normalizePluginSyncInstance(factory(api),manifest)}catch(error){try{throwCleanupErrors(cleanupRegistrationsSync(),manifest.id)}catch(cleanupError){throw new AggregateError([error,cleanupError],`Capability plugin startup cleanup failed: ${manifest.id}`)}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}throw error}let ready=dispatchPluginReadyEvent(runtime,manifest);ready.catch(()=>{});let disposePromise;return{manifest,api,ready,dispose:async()=>(disposePromise??=(async()=>{let readyError;try{await ready}catch(error){readyError=error}try{if(await cleanupSync(),readyError!==void 0)throw readyError}catch(error){throw readyError!==void 0&&error!==readyError?new AggregateError([readyError,error],`Capability plugin cleanup failed: ${manifest.id}`):error}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}})(),disposePromise)}}async function loadCapabilityPluginFromManifest(runtime,manifestPath,options){let raw;try{raw=JSON.parse(await readFile2(manifestPath,"utf8"))}catch(error){throw new Error(t("Failed to read capability plugin manifest {path}: {reason}",{path:manifestPath,reason:error instanceof Error?error.message:String(error)}))}let parsed=parseCapabilityPluginManifest(raw,manifestPath),hostDependencyOverride={hostDependencyPaths:hostDependencyPathsConfig()},callerOverride=options?.configOverride,manifest=callerOverride===void 0||Object.keys(callerOverride).length===0?{...parsed,config:{...parsed.config,...hostDependencyOverride}}:{...parsed,config:{...parsed.config,...hostDependencyOverride,...callerOverride}},entryPath=path2.resolve(path2.dirname(manifestPath),manifest.entry),[createJitiImpl,virtualModules]=await Promise.all([getCreateJiti(),getVirtualModules()]),jiti=createJitiImpl(import.meta.url,{moduleCache:!1,tsconfigPaths:!0,alias:buildHostDependencyAliases(hostHeavyDependencyAliases,defaultHostDependencyAliasResolution),virtualModules}),factory;try{factory=await jiti.import(entryPath,{default:!0})}catch(error){throw new Error(t("Failed to import capability plugin entry {path}: {reason}",{path:entryPath,reason:error instanceof Error?error.message:String(error)}))}if(typeof factory!="function")throw new Error(t("Capability plugin entry must default-export a factory function: {entryPath}",{entryPath}));return loadCapabilityPlugin(runtime,manifest,factory)}var ecosystem_exports={};__export(ecosystem_exports,{AGENT_FORGE_NPM_REGISTRY_ENV_V1:()=>AGENT_FORGE_NPM_REGISTRY_ENV_V1,AGENT_FORGE_NPM_TOKEN_ENV_V1:()=>AGENT_FORGE_NPM_TOKEN_ENV_V1,DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1:()=>DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,DEFAULT_PLUGIN_INSTALL_STORE_DIR_V1:()=>DEFAULT_PLUGIN_INSTALL_STORE_DIR_V1,DEFAULT_PLUGIN_STATE_FILE_V1:()=>DEFAULT_PLUGIN_STATE_FILE_V1,MAX_NODE_DISK_REGISTRY_INDEX_BYTES_V1:()=>MAX_NODE_DISK_REGISTRY_INDEX_BYTES_V1,MAX_NODE_DISK_REGISTRY_MANIFEST_BYTES_V1:()=>MAX_NODE_DISK_REGISTRY_MANIFEST_BYTES_V1,MAX_NODE_DISK_REGISTRY_RECORDS_V1:()=>MAX_NODE_DISK_REGISTRY_RECORDS_V1,MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1:()=>MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1,MAX_PLUGIN_ACQUISITION_REF_CHARS_V1:()=>MAX_PLUGIN_ACQUISITION_REF_CHARS_V1,MAX_PLUGIN_DISTRIBUTION_ARTIFACT_BYTES_V1:()=>MAX_PLUGIN_DISTRIBUTION_ARTIFACT_BYTES_V1,MAX_PLUGIN_DISTRIBUTION_ARTIFACT_REF_CHARS_V1:()=>MAX_PLUGIN_DISTRIBUTION_ARTIFACT_REF_CHARS_V1,MAX_PLUGIN_DISTRIBUTION_DESCRIPTOR_BYTES_V1:()=>MAX_PLUGIN_DISTRIBUTION_DESCRIPTOR_BYTES_V1,MAX_PLUGIN_DISTRIBUTION_FIELD_CHARS_V1:()=>MAX_PLUGIN_DISTRIBUTION_FIELD_CHARS_V1,MAX_PLUGIN_DISTRIBUTION_METADATA_BYTES_V1:()=>MAX_PLUGIN_DISTRIBUTION_METADATA_BYTES_V1,MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1:()=>MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1,MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1:()=>MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1,MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1:()=>MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1,MAX_PLUGIN_REGISTRY_MANIFESTS_V1:()=>MAX_PLUGIN_REGISTRY_MANIFESTS_V1,MAX_PLUGIN_REGISTRY_MANIFEST_BYTES_V1:()=>MAX_PLUGIN_REGISTRY_MANIFEST_BYTES_V1,MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1:()=>MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1,MAX_PLUGIN_REGISTRY_SOURCE_CHARS_V1:()=>MAX_PLUGIN_REGISTRY_SOURCE_CHARS_V1,MAX_PLUGIN_SCOPE_REF_CHARS_V1:()=>MAX_PLUGIN_SCOPE_REF_CHARS_V1,MAX_PLUGIN_SELECTION_IDS_V1:()=>MAX_PLUGIN_SELECTION_IDS_V1,MAX_PLUGIN_SELECTION_ID_CHARS_V1:()=>MAX_PLUGIN_SELECTION_ID_CHARS_V1,MAX_PLUGIN_SELECTION_PROFILES_V1:()=>MAX_PLUGIN_SELECTION_PROFILES_V1,MAX_PLUGIN_SELECTION_STORE_PATH_CHARS_V1:()=>MAX_PLUGIN_SELECTION_STORE_PATH_CHARS_V1,MAX_PLUGIN_STATE_ID_CHARS_V1:()=>MAX_PLUGIN_STATE_ID_CHARS_V1,MAX_PLUGIN_STATE_INSTALLATION_REF_CHARS_V1:()=>MAX_PLUGIN_STATE_INSTALLATION_REF_CHARS_V1,MAX_PLUGIN_STATE_RECORDS_V1:()=>MAX_PLUGIN_STATE_RECORDS_V1,MAX_PLUGIN_STATE_SOURCE_CHARS_V1:()=>MAX_PLUGIN_STATE_SOURCE_CHARS_V1,MAX_PLUGIN_STATE_STRING_CHARS_V1:()=>MAX_PLUGIN_STATE_STRING_CHARS_V1,NODE_PACKAGE_FORMAT_VERSION_V1:()=>NODE_PACKAGE_FORMAT_VERSION_V12,NODE_PLUGIN_TRUST_ROOT_VERSION_V1:()=>NODE_PLUGIN_TRUST_ROOT_VERSION_V1,NodeDiskRegistrySourceErrorV1:()=>NodeDiskRegistrySourceErrorV1,NodeHttpPluginRegistrySourceErrorV1:()=>NodeHttpPluginRegistrySourceErrorV1,NodeNpmRegistrySourceErrorV1:()=>NodeNpmRegistrySourceErrorV1,NodePackageInstallErrorV1:()=>NodePackageInstallErrorV1,NodePackageInstallPersistenceErrorV1:()=>NodePackageInstallPersistenceErrorV1,NodeReleasePackageSourceErrorV1:()=>NodeReleasePackageSourceErrorV1,NodeTarWriterErrorV1:()=>NodeTarWriterErrorV1,NodeUrlPackageSourceErrorV1:()=>NodeUrlPackageSourceErrorV1,PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1:()=>PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1,PLUGIN_ECOSYSTEM_CLI_VERSION_V1:()=>PLUGIN_ECOSYSTEM_CLI_VERSION_V1,PLUGIN_SELECTION_STORE_VERSION_V1:()=>PLUGIN_SELECTION_STORE_VERSION_V1,PLUGIN_SELECTION_VERSION_V1:()=>PLUGIN_SELECTION_VERSION_V1,PLUGIN_STATE_SNAPSHOT_VERSION_V1:()=>PLUGIN_STATE_SNAPSHOT_VERSION_V1,PluginAcquisitionErrorV1:()=>PluginAcquisitionErrorV1,PluginCatalogErrorV1:()=>PluginCatalogErrorV1,PluginDistributionErrorV1:()=>PluginDistributionErrorV1,PluginRegistryErrorV1:()=>PluginRegistryErrorV1,PluginSelectionErrorV1:()=>PluginSelectionErrorV1,activatePluginUpdateV1:()=>activatePluginUpdateV1,buildNodePluginDistributionSignaturePayloadV1:()=>buildNodePluginDistributionSignaturePayloadV1,buildNodeTarBytesV1:()=>buildNodeTarBytesV1,buildNodeTarGzBytesV1:()=>buildNodeTarGzBytesV1,buildPluginCatalogV1:()=>buildPluginCatalogV1,buildResolvedManifestV1:()=>buildResolvedManifestV1,collectLocalDirectoryPackageEntriesV1:()=>collectLocalDirectoryPackageEntriesV1,comparePluginVersionsV1:()=>comparePluginVersionsV1,createDefaultActivePluginBindingsResolverV1:()=>createDefaultActivePluginBindingsResolverV1,createDefaultPluginMarketWiringV1:()=>createDefaultPluginMarketWiringV1,createNodeDiskPluginRegistrySourceV1:()=>createNodeDiskPluginRegistrySourceV1,createNodeHttpPluginDistributionHostV1:()=>createNodeHttpPluginDistributionHostV1,createNodeHttpPluginDistributionStackV1:()=>createNodeHttpPluginDistributionStackV1,createNodeHttpPluginRegistrySourceV1:()=>createNodeHttpPluginRegistrySourceV1,createNodeNpmRegistrySourceV1:()=>createNodeNpmRegistrySourceV1,createNodePackageInstallHostForSessionV1:()=>createNodePackageInstallHostForSessionV1,createNodePackageInstallHostV1:()=>createNodePackageInstallHostV1,createNodePackageInstallPersistenceV1:()=>createNodePackageInstallPersistenceV1,createNodePackageInstallSessionLoaderV1:()=>createNodePackageInstallSessionLoaderV1,createNodePluginAcquisitionHostV1:()=>createNodePluginAcquisitionHostV1,createNodePluginPackageInstallStackV1:()=>createNodePluginPackageInstallStackV1,createNodePluginTrustRootV1:()=>createNodePluginTrustRootV1,createNodeReleasePackageSourceV1:()=>createNodeReleasePackageSourceV1,createPluginDistributionV1:()=>createPluginDistributionV1,createPluginEcosystemCliV1:()=>createPluginEcosystemCliV1,createPluginEcosystemRegistryAdapterV1:()=>createPluginEcosystemRegistryAdapterV1,createPluginInstallerV1:()=>createPluginInstallerV1,createPluginRegistryV1:()=>createPluginRegistryV1,createPluginSelectionStoreV1:()=>createPluginSelectionStoreV1,createPluginSelectionV1:()=>createPluginSelectionV1,createPluginStateStoreV1:()=>createPluginStateStoreV1,defaultPluginHostFactsV1:()=>defaultPluginHostFactsV1,defaultPluginInstallStoreDirectoryV1:()=>defaultPluginInstallStoreDirectoryV1,detectPluginPackageMediaTypeV1:()=>detectPluginPackageMediaTypeV1,downloadNodeUrlPackageV1:()=>downloadNodeUrlPackageV1,findPluginCatalogEntryV1:()=>findPluginCatalogEntryV1,isPluginAcquisitionRefTargetV1:()=>isPluginAcquisitionRefTargetV1,parseNodeTarGzPackageV1:()=>parseNodeTarGzPackageV1,parseNodeZipPackageV1:()=>parseNodeZipPackageV1,parsePluginAcquisitionRefV1:()=>parsePluginAcquisitionRefV1,parsePluginEcosystemCliCommandV1:()=>parsePluginEcosystemCliCommandV1,pluginAcquisitionManifestFromEntriesV1:()=>pluginAcquisitionManifestFromEntriesV1,pluginManifestDigestV1:()=>pluginManifestDigestV1,projectPluginScopeRefV1:()=>projectPluginScopeRefV1,readLocalPackageFileV1:()=>readLocalPackageFileV1,resolveActivePluginBindingsForScopesV1:()=>resolveActivePluginBindingsForScopesV1,resolveActivePluginBindingsV1:()=>resolveActivePluginBindingsV1,resolvePluginCompatibilityV1:()=>resolvePluginCompatibilityV1,resolvePluginProfileV1:()=>resolvePluginProfileV1,resolvePluginSelectionV1:()=>resolvePluginSelectionV1,rollbackPluginUpdateV1:()=>rollbackPluginUpdateV1,runPluginEcosystemCliV1:()=>runPluginEcosystemCliV1,selectNpmPackageVersionV1:()=>selectNpmPackageVersionV1,serializePluginSelectionV1:()=>serializePluginSelectionV1,sriToIntegrityV1:()=>sriToIntegrityV1,stagePluginUpdateV1:()=>stagePluginUpdateV1,verifyPluginUpdateV1:()=>verifyPluginUpdateV1});function diagnostic2(code,message,pluginId,pluginVersion){return Object.freeze({code,message,...pluginId===void 0?{}:{pluginId},...pluginVersion===void 0?{}:{pluginVersion}})}function unavailable(diagnostics){return Object.freeze({status:"unavailable",manifestOverrides:Object.freeze({}),verifiedPlugins:Object.freeze([]),installedManifestPaths:Object.freeze(new Map),diagnostics:Object.freeze([...diagnostics])})}async function resolveActivePluginBindingsV1(options){let stateResult2=await options.stateStore.read({signal:options.signal});if(stateResult2.status!=="ok"&&stateResult2.status!=="missing")return unavailable([diagnostic2("state_unavailable","Active plugin state is unavailable; no installed version was selected")]);let active=stateResult2.snapshot.records.filter(record=>record.state.scope===options.scope&&record.state.scopeRef===options.scopeRef&&record.state.enabled&&record.state.lifecycle==="active").sort((left,right)=>`${left.pluginId}@${left.pluginVersion}`.localeCompare(`${right.pluginId}@${right.pluginVersion}`));if(active.length===0)return Object.freeze({status:"ready",manifestOverrides:Object.freeze({}),verifiedPlugins:Object.freeze([]),installedManifestPaths:Object.freeze(new Map),diagnostics:Object.freeze([])});if(options.registry.resolve===void 0)return unavailable([diagnostic2("registry_unavailable","Active plugin registry cannot resolve manifests; no installed version was selected")]);let seen=new Set,selectedRecords=[],diagnostics=[];for(let record of active){if(seen.has(record.pluginId)){diagnostics.push(diagnostic2("duplicate_active","Multiple active versions exist for one plugin; no installed version was selected",record.pluginId,record.pluginVersion));continue}seen.add(record.pluginId),selectedRecords.push(record)}if(diagnostics.length>0)return unavailable(diagnostics);let resolved=new Map;for(let record of selectedRecords){let packageValue;try{packageValue=await options.registry.resolve({pluginId:record.pluginId,pluginVersion:record.pluginVersion,signal:options.signal})}catch{diagnostics.push(diagnostic2("manifest_unavailable","Active plugin manifest resolution failed; no installed version was selected",record.pluginId,record.pluginVersion));continue}if(packageValue===void 0){diagnostics.push(diagnostic2("manifest_unavailable","Active plugin manifest is unavailable; no installed version was selected",record.pluginId,record.pluginVersion));continue}let computedDigest=pluginManifestDigestV1(packageValue.manifest);if(packageValue.manifest.id!==record.pluginId||packageValue.manifest.pluginVersion!==record.pluginVersion||computedDigest!==record.manifestDigest||packageValue.expectedDigest!==record.manifestDigest){diagnostics.push(diagnostic2("manifest_mismatch","Active plugin manifest identity or digest does not match state; no installed version was selected",record.pluginId,record.pluginVersion));continue}let manifestPath;if(options.resolveInstallationManifestPath!==void 0&&(manifestPath=await options.resolveInstallationManifestPath({pluginId:record.pluginId,pluginVersion:record.pluginVersion,signal:options.signal}),manifestPath===void 0)){diagnostics.push(diagnostic2("manifest_unavailable","Active plugin installation manifest path is unavailable; no installed version was selected",record.pluginId,record.pluginVersion));continue}resolved.set(record.pluginId,{record,package:packageValue,...manifestPath===void 0?{}:{manifestPath}})}if(diagnostics.length>0)return unavailable(diagnostics);let manifestOverrides={},verifiedPlugins=[],installedManifestPaths=new Map;for(let[pluginId,value]of resolved)manifestOverrides[pluginId]=value.package.manifest,verifiedPlugins.push({pluginId,version:value.record.pluginVersion}),value.manifestPath!==void 0&&installedManifestPaths.set(pluginId,value.manifestPath);return Object.freeze({status:"ready",manifestOverrides:Object.freeze(manifestOverrides),verifiedPlugins:Object.freeze(verifiedPlugins),installedManifestPaths:Object.freeze(installedManifestPaths),diagnostics:Object.freeze([])})}async function resolveActivePluginBindingsForScopesV1(options){let scopes=[options.project,options.global].filter(scope=>scope!==void 0);if(scopes.length===0)return Object.freeze({status:"ready",manifestOverrides:Object.freeze({}),verifiedPlugins:Object.freeze([]),installedManifestPaths:Object.freeze(new Map),diagnostics:Object.freeze([])});let results=await Promise.all(scopes.map(scope=>resolveActivePluginBindingsV1({stateStore:scope.stateStore,registry:options.registry,scope:scope.scope,scopeRef:scope.scopeRef,...options.resolveInstallationManifestPath===void 0?{}:{resolveInstallationManifestPath:options.resolveInstallationManifestPath},signal:options.signal}))),unavailableDiagnostics=results.flatMap(result=>result.status==="unavailable"?result.diagnostics:[]);if(unavailableDiagnostics.length>0)return unavailable(unavailableDiagnostics);let manifestOverrides={},verifiedPlugins=[],installedManifestPaths=new Map,seen=new Set;for(let result of results){for(let[pluginId,manifest]of Object.entries(result.manifestOverrides))seen.has(pluginId)||(seen.add(pluginId),manifestOverrides[pluginId]=manifest);for(let verified of result.verifiedPlugins)verifiedPlugins.some(entry=>entry.pluginId===verified.pluginId)||verifiedPlugins.push(verified);for(let[pluginId,manifestPath]of result.installedManifestPaths)installedManifestPaths.has(pluginId)||installedManifestPaths.set(pluginId,manifestPath)}return Object.freeze({status:"ready",manifestOverrides:Object.freeze(manifestOverrides),verifiedPlugins:Object.freeze(verifiedPlugins),installedManifestPaths:Object.freeze(installedManifestPaths),diagnostics:Object.freeze([])})}import{Buffer as Buffer2}from"node:buffer";var MAX_INSTALLATION_REF_CHARS_V1=2048,MAX_PLUGIN_SCOPE_REF_CHARS_V1=2048,DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1="global:default";function opaqueInstallationRef(value){if(typeof value!="string"||value.trim()===""||value.length>MAX_INSTALLATION_REF_CHARS_V1)throw new Error(t("installation reference is invalid"));if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(value)||/\s/u.test(value))throw new Error(t("installation reference must be opaque"));return value}function opaqueScopeRef(value){if(typeof value!="string"||value.trim()===""||value.length>MAX_PLUGIN_SCOPE_REF_CHARS_V1)throw new Error("plugin installation scope reference is invalid");if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(value)||/\s/u.test(value))throw new Error("plugin installation scope reference must be opaque");return value}function installationFrom(record,installationRef,scopeIdentity,state){return Object.freeze({version:1,pluginId:record.pluginId,pluginVersion:record.pluginVersion,manifestDigest:record.manifestDigest,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,installationRef:opaqueInstallationRef(installationRef),state})}function cancelled(){return{status:"cancelled",error:{code:"cancelled",message:"Plugin installation operation was cancelled"}}}function failure(code){return{status:"failed",error:{code,message:code==="invalid_installation"?"The plugin installation handle is invalid":code==="unsupported_scope"?"The plugin installer does not support this scope":code==="install_failed"?"The host plugin installer failed":code==="activation_failed"?"The host plugin activation failed":code==="rollback_failed"?"The host plugin rollback failed":"The host plugin uninstall failed"}}}function validateInstallation(installation){if(installation.version!==1||typeof installation.pluginId!="string"||typeof installation.pluginVersion!="string"||typeof installation.manifestDigest!="string"||installation.pluginId.trim()===""||installation.pluginVersion.trim()===""||installation.manifestDigest.trim()==="")throw new Error("plugin installation handle is invalid");if(installation.scope!=="global"&&installation.scope!=="project")throw new Error("plugin installation scope is invalid");let scopeRef=installation.scopeRef===void 0?installation.scope==="global"?DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1:(()=>{throw new Error("project installation scope reference is required")})():opaqueScopeRef(installation.scopeRef);if(installation.scope==="global"&&scopeRef!==DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)throw new Error("plugin global installation scope reference is invalid");opaqueInstallationRef(installation.installationRef)}function ensureIdentity(installation,record,scopeIdentity){if(validateInstallation(installation),installation.pluginId!==record.pluginId||installation.pluginVersion!==record.pluginVersion||installation.manifestDigest!==record.manifestDigest||installation.scope!==scopeIdentity.scope||(installation.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef)throw new Error("plugin installation identity mismatch")}function normalizeScope(scope){if(scope===void 0)return"global";if(scope==="global"||scope==="project")return scope;throw new Error("plugin installation scope is invalid")}function normalizeScopeIdentity(scope,scopeRef){let normalizedScope=normalizeScope(scope);if(scopeRef===void 0){if(normalizedScope!=="global")throw new Error("project installation scope reference is required");return Object.freeze({scope:normalizedScope,scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1})}let normalizedScopeRef=opaqueScopeRef(scopeRef);if(normalizedScope==="global"&&normalizedScopeRef!==DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)throw new Error("plugin global installation scope reference is invalid");return Object.freeze({scope:normalizedScope,scopeRef:normalizedScopeRef})}function declaredScopes(host){return host.supportedScopes===void 0?Object.freeze(["global"]):!Array.isArray(host.supportedScopes)||new Set(host.supportedScopes).size!==host.supportedScopes.length||host.supportedScopes.some(scope=>scope!=="global"&&scope!=="project")?Object.freeze([]):Object.freeze([...host.supportedScopes])}function hostAcceptedScope(installation,scopeIdentity){if(!(scopeIdentity.scope==="global"&&installation.scope===void 0&&installation.scopeRef===void 0)&&(installation.scope!==scopeIdentity.scope||installation.scopeRef!==scopeIdentity.scopeRef))throw new Error("plugin installation scope mismatch")}function ensureArtifactIdentity(artifact,record){if(artifact.version!==1||artifact.pluginId!==record.pluginId||artifact.pluginVersion!==record.pluginVersion||artifact.manifestDigest!==record.manifestDigest||typeof artifact.artifactRef!="string"||artifact.artifactRef.trim()==="")throw new Error("plugin distribution artifact identity mismatch");opaqueInstallationRef(artifact.artifactRef)}function isInvalidInstallationError(value){return value instanceof Error&&(value.message==="plugin installation handle is invalid"||value.message==="plugin installation scope is invalid"||value.message==="plugin installation scope reference is invalid"||value.message==="plugin installation scope reference must be opaque"||value.message==="plugin global installation scope reference is invalid"||value.message==="project installation scope reference is required"||value.message==="plugin installation identity mismatch"||value.message==="plugin installation scope mismatch"||value.message==="plugin distribution artifact identity mismatch")}function createPluginInstallerV1(options){let supportedScopes=declaredScopes(options.host),supportsScope=scope=>supportedScopes.includes(scope);return{supportedScopes,prepare(input){let staged=stagePluginUpdateV1({manifest:input.manifest,source:input.source});return verifyPluginUpdateV1({record:staged,host:input.host,expectedDigest:input.expectedDigest,verifier:options.verifier})},async install(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef)}catch{return failure("invalid_installation")}if(!supportsScope(scopeIdentity.scope))return failure("unsupported_scope");if(input.record.state!=="verified")return failure("invalid_installation");try{input.artifact!==void 0&&ensureArtifactIdentity(input.artifact,input.record);let installed=await options.host.install({record:input.record,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,...input.artifact===void 0?{}:{artifact:input.artifact},signal:input.signal});return hostAcceptedScope(installed,scopeIdentity),{status:"succeeded",installation:installationFrom(input.record,installed.installationRef,scopeIdentity,"installed")}}catch(error){return isInvalidInstallationError(error)?failure("invalid_installation"):input.signal?.aborted?cancelled():failure("install_failed")}},async activate(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{return scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef),supportsScope(scopeIdentity.scope)?(ensureIdentity(input.installation,input.record,scopeIdentity),input.installation.state!=="installed"||input.record.state!=="verified"?failure("invalid_installation"):(await options.host.activate({installation:input.installation,record:input.record,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,signal:input.signal}),{status:"succeeded",installation:Object.freeze({...input.installation,state:"active"})})):failure("unsupported_scope")}catch(error){return isInvalidInstallationError(error)?failure("invalid_installation"):input.signal?.aborted?cancelled():failure("activation_failed")}},async rollback(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{return scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef),supportsScope(scopeIdentity.scope)?(validateInstallation(input.failed),validateInstallation(input.previous),input.failed.state!=="installed"&&input.failed.state!=="active"||input.previous.state!=="active"||input.failed.pluginId!==input.previous.pluginId||input.failed.scope!==scopeIdentity.scope||input.previous.scope!==scopeIdentity.scope||(input.failed.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef||(input.previous.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef?failure("invalid_installation"):(await options.host.rollback({failed:input.failed,previous:input.previous,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,signal:input.signal}),{status:"succeeded",installation:Object.freeze({...input.previous,state:"active"})})):failure("unsupported_scope")}catch(error){return isInvalidInstallationError(error)?failure("invalid_installation"):input.signal?.aborted?cancelled():failure("rollback_failed")}},async remove(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{if(scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef),!supportsScope(scopeIdentity.scope))return failure("unsupported_scope");validateInstallation(input.installation)}catch{return failure("invalid_installation")}if(input.installation.state!=="installed"&&input.installation.state!=="active"&&input.installation.state!=="retained"||input.installation.scope!==scopeIdentity.scope||(input.installation.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef)return failure("invalid_installation");if(options.host.uninstall===void 0)return failure("uninstall_failed");try{return await options.host.uninstall({installation:input.installation,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,signal:input.signal}),{status:"succeeded",installation:Object.freeze({...input.installation,state:"retained"})}}catch{return input.signal?.aborted?cancelled():failure("uninstall_failed")}}}}var MAX_PLUGIN_ACQUISITION_REF_CHARS_V1=2048,MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1=214,ACQUISITION_ERROR_MESSAGES_V1={invalid_ref:"Plugin ref is invalid",unsupported_local_ref:"Local plugin ref exists but is neither a directory nor a .zip/.tgz file",unsupported_scheme:"Plugin ref URL scheme is not supported",invalid_digest_fragment:"Plugin ref #sha256 digest fragment is invalid",invalid_npm_ref:"Plugin npm package ref is invalid",cancelled:"Plugin package acquisition was cancelled",download_failed:"Plugin package download failed",package_not_found:"Plugin npm package was not found on the registry",version_not_found:"No npm package version matches the requested range",digest_mismatch:"Plugin package bytes do not match the expected digest",unsupported_media_type:"Plugin package bytes are neither a zip nor a tgz",package_invalid:"Plugin package contents are invalid",budget_exceeded:"Plugin package exceeds the configured size budget",release_not_found:"Plugin release was not found",release_asset_not_found:"Plugin release has no .zip/.tgz asset",release_asset_ambiguous:"Plugin release has multiple .zip/.tgz assets",rate_limited:"Plugin release API rate limit was exceeded"},PluginAcquisitionErrorV1=class extends Error{code;constructor(code,detail){super(detail===void 0||detail.length===0?t(ACQUISITION_ERROR_MESSAGES_V1[code]):`${t(ACQUISITION_ERROR_MESSAGES_V1[code])}: ${detail}`),this.name="PluginAcquisitionErrorV1",this.code=code}},DIGEST_FRAGMENT_SUFFIX_V1=/^#sha256:([0-9a-fA-F]{64})$/u;function boundedRef(ref){if(typeof ref!="string"||ref.length===0||ref.length>MAX_PLUGIN_ACQUISITION_REF_CHARS_V1||/[\u0000-\u001f\s]/u.test(ref))throw new PluginAcquisitionErrorV1("invalid_ref");return ref}function splitDigestFragment(ref){let hash=ref.lastIndexOf("#");if(hash<0)return{value:ref};let fragment=ref.slice(hash),match2=DIGEST_FRAGMENT_SUFFIX_V1.exec(fragment);if(match2===null)throw new PluginAcquisitionErrorV1("invalid_digest_fragment");return{value:ref.slice(0,hash),digestHex:match2[1].toLowerCase()}}function ownerRepoTag(kind,value,digestHex){let match2=/^([A-Za-z0-9][A-Za-z0-9._-]{0,99})\/([A-Za-z0-9][A-Za-z0-9._-]{0,99})(?:@([A-Za-z0-9][A-Za-z0-9._+-]{0,127}))?$/u.exec(value);if(match2===null)throw new PluginAcquisitionErrorV1("invalid_ref");return{kind,owner:match2[1],repo:match2[2],...match2[3]===void 0?{}:{tag:match2[3]},...digestHex===void 0?{}:{expectedDigestHex:digestHex}}}function parseUrlRef(value,digestHex){let parsed;try{parsed=new URL(value)}catch{throw new PluginAcquisitionErrorV1("invalid_ref")}if(parsed.username!==""||parsed.password!=="")throw new PluginAcquisitionErrorV1("invalid_ref");if(parsed.hash!=="")throw new PluginAcquisitionErrorV1("invalid_digest_fragment");return{kind:"url",url:parsed.toString(),...digestHex===void 0?{}:{expectedDigestHex:digestHex}}}var NPM_RANGE_V1=/^(?:latest|[~^]?\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/u,NPM_NAME_V1=/^@?[a-z0-9][a-z0-9-._]*(?:\/[a-z0-9][a-z0-9-._]*)?$/u;function parseNpmRef(ref){let at=ref.lastIndexOf("@"),name=at>0?ref.slice(0,at):ref,range2=at>0?ref.slice(at+1):void 0;if(name.length===0||name.length>MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1||!NPM_NAME_V1.test(name)||name.startsWith("@")&&!name.includes("/")||!name.startsWith("@")&&name.includes("/"))throw new PluginAcquisitionErrorV1("invalid_npm_ref");if(range2!==void 0&&!NPM_RANGE_V1.test(range2))throw new PluginAcquisitionErrorV1("invalid_npm_ref");return{kind:"npm",name,...range2===void 0?{}:{range:range2}}}function isLocalPackageFile(path8){let value=path8.toLowerCase();return value.endsWith(".zip")||value.endsWith(".tgz")||value.endsWith(".tar.gz")}function parsePluginAcquisitionRefV1(ref,probe){let value=boundedRef(ref);if(/^[a-zA-Z]:[\\/]/u.test(value))return localRef(value,probe);let scheme=/^([a-zA-Z][a-zA-Z\d+.-]*):/u.exec(value);if(scheme!==null){let prefix=scheme[1].toLowerCase(),stripped=splitDigestFragment(value);if(prefix==="github"||prefix==="gitee")return ownerRepoTag(prefix,stripped.value.slice(prefix.length+1),stripped.digestHex);if(prefix==="http"||prefix==="https")return parseUrlRef(stripped.value,stripped.digestHex);throw new PluginAcquisitionErrorV1("unsupported_scheme")}return localRef(value,probe)}function localRef(value,probe){let stat5=probe.statLocalRef(value);if(stat5==="directory")return{kind:"local-path",path:value};if(stat5==="file"){if(!isLocalPackageFile(value))throw new PluginAcquisitionErrorV1("unsupported_local_ref");return{kind:"local-file",path:value}}if(stat5==="other")throw new PluginAcquisitionErrorV1("unsupported_local_ref");return parseNpmRef(value)}function isPluginAcquisitionRefTargetV1(target){if(typeof target!="string"||target.length===0)return!1;if(target.startsWith("@")||/^[a-zA-Z]:[\\/]/u.test(target)||target.startsWith("/")||target.startsWith("\\")||target.startsWith("./")||target.startsWith(".\\")||target.startsWith("../")||target.startsWith("..\\")||/[:#]/u.test(target)||/[\\/]/u.test(target))return!0;let at=target.lastIndexOf("@");if(at>0){let suffix=target.slice(at+1);if(suffix==="latest"||suffix.startsWith("^")||suffix.startsWith("~"))return!0}return!1}var PLUGIN_SELECTION_VERSION_V1=1,MAX_PLUGIN_SELECTION_ID_CHARS_V1=128,MAX_PLUGIN_SELECTION_IDS_V1=128,PluginSelectionErrorV1=class extends Error{code;pluginId;constructor(code,message,pluginId){super(message),this.name="PluginSelectionErrorV1",this.code=code,this.pluginId=pluginId}};function validateId(value,label){if(typeof value!="string"||value.trim().length===0)throw new PluginSelectionErrorV1(label==="profileId"?"invalid_profile_id":"invalid_plugin_id",t("{label} must be a non-empty string",{label}),typeof value=="string"?value:void 0);if(value.length>MAX_PLUGIN_SELECTION_ID_CHARS_V1)throw new PluginSelectionErrorV1(label==="profileId"?"profile_id_too_long":"plugin_id_too_long",t("{label} must be at most {max} characters",{label,max:MAX_PLUGIN_SELECTION_ID_CHARS_V1}),value);return value}function normalizeIds(ids,label){if(ids===void 0)return[];if(!Array.isArray(ids)||ids.length>MAX_PLUGIN_SELECTION_IDS_V1)throw new PluginSelectionErrorV1("too_many_plugin_ids",t("{label} must contain at most {max} plugin IDs",{label,max:MAX_PLUGIN_SELECTION_IDS_V1}));let seen=new Set,normalized=[];for(let candidate of ids){let id=validateId(candidate,"pluginId");if(seen.has(id))throw new PluginSelectionErrorV1("duplicate_plugin_id",t("{label} contains duplicate plugin ID: {id}",{label,id}),id);seen.add(id),normalized.push(id)}return normalized.sort((left,right)=>left.localeCompare(right)),Object.freeze(normalized)}function assertKnownIds(ids,knownIds){for(let id of ids)if(!knownIds.has(id))throw new PluginSelectionErrorV1("unknown_plugin_id",t("Selection references unknown plugin ID: {id}",{id}),id)}function createPluginSelectionV1(input){let profileId=validateId(input.profileId,"profileId"),selectedPluginIds=normalizeIds(input.selectedPluginIds,"selectedPluginIds"),disabledPluginIds=normalizeIds(input.disabledPluginIds,"disabledPluginIds");return Object.freeze({version:PLUGIN_SELECTION_VERSION_V1,profileId,selectedPluginIds,disabledPluginIds})}function resolvePluginSelectionV1(input){for(let manifest of input.manifests)validateId(manifest.id,"pluginId");let knownIds=new Set(input.manifests.map(manifest=>manifest.id)),provisional=createPluginSelectionV1(input.selection);if(input.selection.selectedPluginIds===void 0&&knownIds.size>MAX_PLUGIN_SELECTION_IDS_V1)throw new PluginSelectionErrorV1("too_many_plugin_ids",t("discovered plugin IDs exceed the selection limit of {limit}",{limit:MAX_PLUGIN_SELECTION_IDS_V1}));let selectedPluginIds=input.selection.selectedPluginIds===void 0?Object.freeze([...knownIds].sort((a,b)=>a.localeCompare(b))):provisional.selectedPluginIds,selection=Object.freeze({...provisional,selectedPluginIds});assertKnownIds(selection.selectedPluginIds,knownIds),assertKnownIds(selection.disabledPluginIds,knownIds);let catalog=buildPluginCatalogV1({manifests:input.manifests,host:input.host,required:input.required,disabledPluginIds:selection.disabledPluginIds,availableCapabilities:input.availableCapabilities,maxEntries:input.maxEntries}),selected=new Set(selection.selectedPluginIds),selectedCatalog=buildPluginCatalogV1({manifests:input.manifests.filter(manifest=>selected.has(manifest.id)),host:input.host,required:input.required,disabledPluginIds:selection.disabledPluginIds,availableCapabilities:input.availableCapabilities,maxEntries:Math.max(input.maxEntries??MAX_PLUGIN_SELECTION_IDS_V1,selection.selectedPluginIds.length)});if(selectedCatalog.truncated){let selectedEntryIds=new Set(selectedCatalog.entries.map(entry=>entry.pluginId)),omitted=selection.selectedPluginIds.find(id=>!selectedEntryIds.has(id));if(omitted!==void 0)throw new PluginSelectionErrorV1("catalog_truncated",t("Catalog truncation omitted selected plugin ID: {id}",{id:omitted}),omitted)}let entries=Object.freeze(selectedCatalog.entries),diagnostics=Object.freeze(entries.flatMap(entry=>entry.resolution.diagnostics));return Object.freeze({selection,catalog,entries,diagnostics})}function serializePluginSelectionV1(selection){let normalized=createPluginSelectionV1(selection);return JSON.stringify(normalized)}var PLUGIN_ECOSYSTEM_CLI_VERSION_V1=1,MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1=64*1024,MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1=128,MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1=MAX_PLUGIN_SELECTION_IDS_V1+8,PLUGIN_ECOSYSTEM_CLI_COMMAND_USAGE_V1="catalog list | catalog-list | state list | state-list | selection list | selection-list | selection set <builtinPluginProfileId> <pluginId\u2026> | selection-set <builtinPluginProfileId> <pluginId\u2026> | selection clear <profile> | selection-clear <profile> | enable <pluginId[@version]> | disable <pluginId[@version]> | remove <pluginId[@version]> | state enable|disable|remove <pluginId[@version]> | install <pluginId[@version] | ref> | update <pluginId[@version]> [--scope global|project] [--json | --text | --format json|text]";function invalidInput(message){throw new Error(message)}var COMMAND_NAME_ALIASES_V1=Object.freeze({"catalog-list":["catalog","list"],"state-list":["state","list"],"selection-list":["selection","list"],"selection-set":["selection","set"],"selection-clear":["selection","clear"]});function validateToken(value,label){return(value.length===0||value.length>256||/[\u0000-\u001f\s]/u.test(value))&&invalidInput(`${label} is invalid`),value}function parseIdentity(value){let token=validateToken(value,"plugin identity"),at=token.lastIndexOf("@");if(at<=0)return{pluginId:token};let pluginId=token.slice(0,at),pluginVersion=token.slice(at+1);return pluginVersion.length===0&&invalidInput("plugin version is invalid"),{pluginId:validateToken(pluginId,"plugin ID"),pluginVersion:validateToken(pluginVersion,"plugin version")}}function parsePluginEcosystemCliCommandV1(argv,defaultFormat="text"){(!Array.isArray(argv)||argv.length===0||argv.length>MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1)&&invalidInput("ecosystem command is invalid");let format=defaultFormat;format!=="json"&&format!=="text"&&invalidInput("output format is invalid");let args=[...argv],explicitFormat,scope,pluginIdsOption;for(let index=args.length-1;index>=0;index-=1){let token=args[index],selectedScope=(token.startsWith("--scope=")?token.slice(8):void 0)??(token==="--scope"?args[index+1]:void 0);if(selectedScope!==void 0){selectedScope!=="global"&&selectedScope!=="project"&&invalidInput("state scope is invalid"),scope!==void 0&&scope!==selectedScope&&invalidInput("state scope is specified more than once"),scope=selectedScope,args.splice(index,token==="--scope"?2:1);continue}let inlineFormat=token.startsWith("--format=")?token.slice(9):void 0,selected=token==="--json"||token==="--text"?token==="--json"?"json":"text":inlineFormat??(token==="--format"?args[index+1]:void 0);if(selected!==void 0){selected!=="json"&&selected!=="text"&&invalidInput("output format is invalid"),explicitFormat!==void 0&&explicitFormat!==selected&&invalidInput("output format is specified more than once"),explicitFormat=selected,format=explicitFormat,args.splice(index,token==="--format"?2:1);continue}let selectedPlugins=(token.startsWith("--plugins=")?token.slice(10):void 0)??(token==="--plugins"?args[index+1]:void 0);if(selectedPlugins!==void 0){pluginIdsOption!==void 0&&invalidInput("plugin IDs are specified more than once");let ids=selectedPlugins.split(",");ids.length>MAX_PLUGIN_SELECTION_IDS_V1&&invalidInput("too many plugin IDs"),pluginIdsOption=Object.freeze(ids.map(id=>validateToken(id,"plugin ID"))),args.splice(index,token==="--plugins"?2:1)}}args.length===0&&invalidInput("ecosystem command is invalid");let commandAlias=COMMAND_NAME_ALIASES_V1[args[0]];commandAlias!==void 0&&(args=[...commandAlias,...args.slice(1)]);let[group,action,target,...rest]=args;if(group==="selection"&&action==="set"&&target!==void 0){pluginIdsOption!==void 0&&rest.length>0&&invalidInput("plugin IDs must use one input form");let selectedPluginIds=pluginIdsOption??Object.freeze(rest.map(id=>validateToken(id,"plugin ID")));return selectedPluginIds.length>MAX_PLUGIN_SELECTION_IDS_V1&&invalidInput("too many plugin IDs"),Object.freeze({version:1,command:"selection-set",format,profileId:validateToken(target,"profile ID"),selectedPluginIds,...scope===void 0?{}:{scope}})}if(rest.length>0&&invalidInput("ecosystem command has unsupported arguments"),group==="catalog"&&action==="list"&&target===void 0)return Object.freeze({version:1,command:"catalog-list",format,...scope===void 0?{}:{scope}});if(group==="state"&&action==="list"&&target===void 0)return Object.freeze({version:1,command:"state-list",format,...scope===void 0?{}:{scope}});if(group==="selection"&&action==="list"&&target===void 0)return Object.freeze({version:1,command:"selection-list",format,...scope===void 0?{}:{scope}});if(group==="selection"&&action==="clear"&&target!==void 0)return Object.freeze({version:1,command:"selection-clear",format,profileId:validateToken(target,"profile ID"),...scope===void 0?{}:{scope}});if(group==="state"&&(action==="enable"||action==="disable"||action==="remove")&&target){let identity=parseIdentity(target);return Object.freeze({version:1,command:action,format,...scope===void 0?{}:{scope},...identity})}if((group==="enable"||group==="disable"||group==="remove")&&action){let identity=parseIdentity(action);return Object.freeze({version:1,command:group,format,...scope===void 0?{}:{scope},...identity})}if((group==="install"||group==="update")&&action){let identity=parseIdentity(action);return Object.freeze({version:1,command:group,format,target:action,...scope===void 0?{}:{scope},...identity})}invalidInput("ecosystem command is invalid")}function response(command,format,status,error,data){let safeData=data===void 0?void 0:boundData(data);if(safeData!==void 0&&Array.isArray(safeData.entries)){let entries=[...safeData.entries],originalEntryCount=entries.length;for(;entries.length>0;){let candidate={...safeData,entries,...entries.length<safeData.entries.length?{truncated:!0}:{}};if(responseWithinBudget(command,format,status,error,candidate)){safeData=Object.freeze(candidate);break}entries=entries.slice(0,-1)}entries.length===0&&originalEntryCount>0&&(safeData=Object.freeze({entries:Object.freeze([]),truncated:!0}))}responseWithinBudget(command,format,status,error,safeData)||(safeData=Object.freeze({truncated:!0}));let base=responseBase(command,format,status,error,safeData),humanText=error?`${status}: ${error.message}`:formatText(command,status,safeData),text=format==="json"?JSON.stringify(base):humanText;return Object.freeze({...base,text:boundText(text)})}function responseWithinBudget(command,format,status,error,data){let base=responseBase(command,format,status,error,data),humanText=error?`${status}: ${error.message}`:formatText(command,status,data),text=format==="json"?JSON.stringify(base):humanText;return responseByteLength({...base,text:boundText(text)})<=MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1}function responseBase(command,format,status,error,data){return{version:PLUGIN_ECOSYSTEM_CLI_VERSION_V1,command,format,status,...data===void 0?{}:{data},...error===void 0?{}:{error}}}function responseByteLength(value){return Buffer2.byteLength(JSON.stringify(value),"utf8")}function boundText(value){if(Buffer2.byteLength(value,"utf8")<=MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1)return value;let suffix=`
213
+ `):void 0}getRegisteredProviderConfig(providerId){return this.extensionProviders.get(providerId)}getRegisteredProviderIds(){return[...new Set([...this.extensionProviders.keys(),...this.nativeExtensionProviders.keys()])]}getRegisteredNativeProvider(providerId){return this.nativeExtensionProviders.get(providerId)}getCompatibilityRequestConfig(model){return resolveCompatibilityRequestConfig(model,this.config.getProvider(model.provider),this.extensionProviders.get(model.provider))}isUsingOAuth(providerId){return this.snapshot.auth.get(providerId)?.type==="oauth"}isUsingSubscription(providerId){return this.isUsingOAuth(providerId)&&this.models.getProvider(providerId)?.auth.oauth?.isSubscription===!0}hasConfiguredAuth(providerId){return this.snapshot.configuredProviders.has(providerId)}getImageModelCatalog(){return this.config.getImageModelCatalog()}async getAuth(providerOrModel,overrides={}){if(typeof providerOrModel=="string")return this.models.getAuth(providerOrModel,overrides);let resolution=await this.models.getAuth(providerOrModel,overrides);if(!resolution)return;let configuredHeaders2=resolveConfiguredModelHeaders(providerOrModel,this.config.getProvider(providerOrModel.provider),this.extensionProviders.get(providerOrModel.provider),{...resolution.env??{},...overrides.env??{}});return{...resolution,auth:{...resolution.auth,headers:mergeHeaders(resolution.auth.headers,configuredHeaders2)}}}enqueueCredentialOperation(providerId,signal,task){let previous=this.credentialOperations.get(providerId)??Promise.resolve(),markStarted,started=new Promise(resolve22=>{markStarted=resolve22}),operation=(async()=>(await previous.catch(()=>{}),signal.throwIfAborted(),markStarted?.(),task()))(),tail=operation.catch(()=>{});return this.credentialOperations.set(providerId,tail),tail.then(()=>{this.credentialOperations.get(providerId)===tail&&this.credentialOperations.delete(providerId)}),raceWithAbortSignal(started,signal).then(()=>operation)}async synchronizeCredentialState(providerId,operation,credential,signal){try{signal.throwIfAborted(),this.recomposeProvider(providerId);let compositionError=this.compositionErrors.get(providerId);if(compositionError)throw new Error(compositionError);let result=await this.models.refresh({allowNetwork:!1,providers:[providerId],signal});result.aborted&&signal.throwIfAborted();let refreshError=result.errors.get(providerId);if(refreshError)throw refreshError;this.updateModelSnapshot(),await this.refreshProviderAvailability(providerId,signal)}catch(cause){throw new CredentialSynchronizationError(providerId,operation,credential,{cause})}}setRuntimeApiKey(providerId,apiKey,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.setRuntimeApiKey(providerId,apiKey),await this.synchronizeCredentialState(providerId,"setRuntimeApiKey",{type:"api_key",key:apiKey},signal)})}removeRuntimeApiKey(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.removeRuntimeApiKey(providerId),await this.synchronizeCredentialState(providerId,"removeRuntimeApiKey",void 0,signal)})}listCredentials(options){return this.credentials.list(options)}getProviderAuthStatus(providerId){if(this.credentials.hasRuntimeApiKey(providerId))return{configured:!0,source:"runtime"};if(this.snapshot.storedProviders.has(providerId))return{configured:!0,source:"stored"};let configured=configuredRequestAuthStatus(this.extensionProviders.get(providerId));if(configured)return configured;let check=this.snapshot.auth.get(providerId);return check?{configured:!0,source:"environment",label:check.source}:{configured:!1}}async prepareRequest(model,options){let provider=this.models.getProvider(model.provider);if(!provider)throw new ModelsError("provider",t("Unknown provider: {provider}",{provider:model.provider}));let resolution=await this.getAuth(model,{apiKey:options?.apiKey,env:options?.env,signal:options?.signal});if(!resolution)throw new ModelsError("auth",t("Provider is not configured: {provider}",{provider:model.provider}));let{transformHeaders,...rawProviderOptions}=options??{},providerOptions=rawProviderOptions,headers=mergeHeaders(resolution.auth.headers,providerOptions.headers);transformHeaders&&(headers=await transformHeaders(headers??{}));let env=resolution.env||providerOptions.env?{...resolution.env??{},...providerOptions.env??{}}:void 0;return{provider,model:resolution.auth.baseUrl?{...model,baseUrl:resolution.auth.baseUrl}:model,options:{...providerOptions,apiKey:providerOptions.apiKey??resolution.auth.apiKey,headers,env}}}stream(model,context,options){return lazyStream(model,async()=>{let prepared=await this.prepareRequest(model,options);return prepared.provider.stream(prepared.model,context,prepared.options)})}complete(model,context,options){return this.stream(model,context,options).result()}streamSimple(model,context,options){return lazyStream(model,async()=>{let prepared=await this.prepareRequest(model,options);return prepared.provider.streamSimple(prepared.model,context,prepared.options)})}completeSimple(model,context,options){return this.streamSimple(model,context,options).result()}async fetchDeferred(model,handle,options){return lazyStream(model,async()=>{let prepared=await this.prepareRequest(model,options);if(!prepared.provider.fetchDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);return prepared.provider.fetchDeferred(prepared.model,handle,prepared.options)}).result()}async cancelDeferred(model,handle,options){let prepared=await this.prepareRequest(model,options);if(!prepared.provider.cancelDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);await prepared.provider.cancelDeferred(prepared.model,handle,prepared.options)}login(providerId,type,interaction){let signal=operationSignal(interaction.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{let credential=await this.models.login(providerId,type,{...interaction,signal});return await this.synchronizeCredentialState(providerId,"login",credential,signal),credential})}logout(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{await this.models.logout(providerId,{signal}),await this.synchronizeCredentialState(providerId,"logout",void 0,signal)})}async refresh(options={}){if(this.config=await ModelConfig.load(this.modelsPath),this.configureRadiusProviders(),options.providers){for(let providerId of new Set(options.providers))this.recomposeProvider(providerId);this.updateModelSnapshot()}else this.rebuildProviders();let refreshOptions={...options,allowNetwork:options.allowNetwork??this.modelNetworkEnabled},result=await this.models.refresh(refreshOptions),errors=new Map(result.errors);if(this.updateModelSnapshot(),options.providers)await Promise.all([...new Set(options.providers)].map(async providerId=>{try{await this.refreshProviderAvailability(providerId,operationSignal(options.signal))}catch(error){options.signal?.aborted||errors.set(providerId,error instanceof Error?error:new Error(String(error)))}}));else try{await this.queueAvailabilityRefresh(options.signal)}catch{}return{aborted:result.aborted||(options.signal?.aborted??!1),errors}}registerNativeProvider(provider){if(!provider.id.trim())throw new Error(t("Provider id must not be empty."));this.extensionProviders.delete(provider.id),this.nativeExtensionProviders.set(provider.id,provider),this.recomposeProvider(provider.id),this.updateModelSnapshot(),this.markProvisionallyConfigured(provider.id,configuredRequestAuthStatus(void 0),provider.auth.oauth&&!provider.auth.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}markProvisionallyConfigured(providerId,configuredStatus,type){if(!this.snapshot.storedProviders.has(providerId)&&!configuredStatus?.configured)return;let configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId),auth=new Map(this.snapshot.auth);auth.get(providerId)||auth.set(providerId,{type,source:"configured provider"}),this.snapshot={...this.snapshot,auth,configuredProviders,available:this.snapshot.all.filter(model=>configuredProviders.has(model.provider))}}registerProvider(providerId,config){validateExtensionProvider(providerId,this.builtins.get(providerId),this.config.getProvider(providerId),config),this.nativeExtensionProviders.delete(providerId);let effective={...this.extensionProviders.get(providerId)};for(let[key,value]of Object.entries(config))value!==void 0&&(effective[key]=value);this.extensionProviders.set(providerId,effective),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.markProvisionallyConfigured(providerId,configuredRequestAuthStatus(effective),effective.oauth&&!effective.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}unregisterProvider(providerId){this.extensionProviders.delete(providerId),this.nativeExtensionProviders.delete(providerId),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}};function assertNonEmpty(value,label){if(typeof value!="string"||value.trim().length===0)throw new Error(t("{label} must be a non-empty string",{label}))}function matchesList(value,allowed){return allowed===void 0||allowed.length>0&&(allowed.includes(value)||allowed.includes("any"))}function hasAllFeatures(hostFeatures,required){if(required===void 0)return;let available=new Set(hostFeatures);return required.find(feature=>!available.has(feature))}function runtimeVersion(host,name){return host.runtime.find(runtime=>runtime.name===name)?.version}function diagnostic(code,message,details){return details===void 0?{code,message}:{code,message,details}}function adapterMatches(adapter,host){return matchesList(host.os,adapter.os)&&matchesList(host.arch,adapter.arch)&&hasAllFeatures(host.hostFeatures,adapter.hostFeatures)===void 0}function hostAdapterMatches(adapter,hostAdapter,host){return hostAdapter.id===adapter.id&&hostAdapter.version===adapter.version&&adapterMatches(adapter,host)&&(hostAdapter.os===void 0||hostAdapter.os===host.os||hostAdapter.os==="any")&&(hostAdapter.arch===void 0||hostAdapter.arch===host.arch||hostAdapter.arch==="any")&&hasAllFeatures(hostAdapter.hostFeatures??[],adapter.hostFeatures)===void 0}function selectAdapter(manifest,host){let adapters=manifest.platform?.adapters;if(adapters===void 0||adapters.length===0)return;let installed=host.adapters??[],selected=adapters.filter(adapter=>adapterMatches(adapter,host)).filter(adapter=>installed.some(hostAdapter=>hostAdapterMatches(adapter,hostAdapter,host))).sort((left,right)=>{let idOrder=left.id.localeCompare(right.id);return idOrder===0?comparePluginVersionsV1(right.version,left.version):idOrder})[0];return selected===void 0?{diagnostic:diagnostic("adapter-unavailable",`No installed adapter satisfies plugin ${manifest.id} on ${host.os}/${host.arch}`)}:{selected:{id:selected.id,version:selected.version}}}function normalizeRefs(refs){let normalized=[...refs??[]].map(ref=>{if(assertNonEmpty(ref.id,"capability id"),!Number.isSafeInteger(ref.version)||ref.version<1)throw new Error(t("capability {id} version must be a positive safe integer",{id:ref.id}));return{id:ref.id,version:ref.version}});return normalized.sort((left,right)=>left.id===right.id?left.version-right.version:left.id.localeCompare(right.id)),normalized}function hasCapability(ref,available){return available.some(candidate=>candidate.id===ref.id&&candidate.version===ref.version)}function resolvePlatform(manifest,host){let platform2=manifest.platform;if(platform2===void 0)return{diagnostics:[]};if(!matchesList(host.os,platform2.os))return{status:"installed-unavailable",diagnostics:[diagnostic("unsupported-platform",`Plugin ${manifest.id} does not support host OS ${host.os}`)]};if(!matchesList(host.arch,platform2.arch))return{status:"installed-unavailable",diagnostics:[diagnostic("unsupported-architecture",`Plugin ${manifest.id} does not support host architecture ${host.arch}`)]};let missingFeature=hasAllFeatures(host.hostFeatures,platform2.hostFeatures);if(missingFeature!==void 0)return{status:"installed-unavailable",diagnostics:[diagnostic("missing-host-feature",`Host feature is missing: ${missingFeature}`,{feature:missingFeature})]};for(let constraint of platform2.runtime??[]){let actual=runtimeVersion(host,constraint.name);if(actual===void 0)return{status:"version-incompatible",diagnostics:[diagnostic("missing-runtime",`Required runtime is missing: ${constraint.name}`,{runtime:constraint.name})]};if(constraint.minVersion!==void 0&&comparePluginVersionsV1(actual,constraint.minVersion)<0||constraint.maxVersion!==void 0&&comparePluginVersionsV1(actual,constraint.maxVersion)>0)return{status:"version-incompatible",diagnostics:[diagnostic("runtime-version-incompatible",`Runtime ${constraint.name}@${actual} is outside the supported range`,{runtime:constraint.name,actual})]}}let selected=selectAdapter(manifest,host);return selected?.diagnostic!==void 0?{status:"dependency-unavailable",diagnostics:[selected.diagnostic]}:{diagnostics:[],selectedAdapter:selected?.selected}}function resolvePluginCompatibilityV1(input){let{manifest,host}=input;assertNonEmpty(manifest.id,"plugin id"),assertNonEmpty(manifest.pluginVersion,"pluginVersion"),assertNonEmpty(manifest.apiVersion,"apiVersion");let required=input.required??!0;if(input.disabled===!0)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"disabled",diagnostics:[diagnostic("plugin-disabled",`Plugin ${manifest.id} is disabled`)]};if(manifest.testOnly===!0)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-unavailable",diagnostics:[diagnostic("test-only-plugin",`Plugin ${manifest.id} is test-only and cannot be selected for production`)]};if(!["windows","macos","linux"].includes(host.os))return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-unavailable",diagnostics:[diagnostic("unsupported-platform",`Host OS is unknown: ${host.os}`)]};if(!["x64","arm64"].includes(host.arch))return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-unavailable",diagnostics:[diagnostic("unsupported-architecture",`Host architecture is unknown: ${host.arch}`)]};if((manifest.minHostVersion!==void 0||manifest.maxHostVersion!==void 0)&&(manifest.minHostVersion!==void 0&&assertNonEmpty(manifest.minHostVersion,"minHostVersion"),manifest.maxHostVersion!==void 0&&assertNonEmpty(manifest.maxHostVersion,"maxHostVersion"),input.hostVersion!==void 0)){let belowFloor=manifest.minHostVersion!==void 0&&comparePluginVersionsV1(input.hostVersion,manifest.minHostVersion)<0,aboveCeiling=manifest.maxHostVersion!==void 0&&comparePluginVersionsV1(input.hostVersion,manifest.maxHostVersion)>0;if(belowFloor||aboveCeiling){let requiredRange=[manifest.minHostVersion!==void 0?`>= ${manifest.minHostVersion}`:void 0,manifest.maxHostVersion!==void 0?`<= ${manifest.maxHostVersion}`:void 0].filter(bound=>bound!==void 0).join(" and "),guidance=belowFloor?`Upgrade the host to at least ${manifest.minHostVersion} to load this plugin.`:`Install a plugin version whose declared host range includes ${input.hostVersion}.`;return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"version-incompatible",diagnostics:[diagnostic("host-version-incompatible",`Plugin ${manifest.id} requires host version ${requiredRange}, but the host is ${input.hostVersion}. ${guidance}`,{required:requiredRange,actual:input.hostVersion})]}}}if(manifest.apiVersion!==host.apiVersion)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"version-incompatible",diagnostics:[diagnostic("api-version-incompatible",`Plugin requires API ${manifest.apiVersion}, host provides ${host.apiVersion}`)]};let platform2=resolvePlatform(manifest,host);if(platform2.status!==void 0)return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:platform2.status,diagnostics:platform2.diagnostics};let available=input.availableCapabilities??[],dependencyDiagnostics=[];for(let requirement of manifest.requires??[])hasCapability(requirement,available)||dependencyDiagnostics.push(diagnostic(requirement.optional===!0?"optional-capability-unavailable":"missing-capability",`Capability ${requirement.id}@${requirement.version} is unavailable`,{capability:requirement.id,version:String(requirement.version)}));if(dependencyDiagnostics.some(item=>item.code==="missing-capability"))return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"dependency-unavailable",diagnostics:dependencyDiagnostics};let capabilityRefs=normalizeRefs(manifest.capabilityRefs),resolved={pluginId:manifest.id,pluginVersion:manifest.pluginVersion,capabilityRefs,...platform2.selectedAdapter===void 0?{}:{selectedAdapter:platform2.selectedAdapter}};return{pluginId:manifest.id,pluginVersion:manifest.pluginVersion,required,status:"installed-ready",diagnostics:dependencyDiagnostics,resolved,...platform2.selectedAdapter===void 0?{}:{selectedAdapter:platform2.selectedAdapter}}}function compareResolvedPlugins(left,right){return left.pluginId===right.pluginId?comparePluginVersionsV1(left.pluginVersion,right.pluginVersion):left.pluginId.localeCompare(right.pluginId)}function compareRefs(left,right){return left.id===right.id?left.version-right.version:left.id.localeCompare(right.id)}function buildResolvedManifestV1(input){assertNonEmpty(input.profileId,"profileId"),assertNonEmpty(input.profileVersion,"profileVersion");let plugins=[...input.plugins].map(plugin=>({pluginId:plugin.pluginId,pluginVersion:plugin.pluginVersion,capabilityRefs:normalizeRefs(plugin.capabilityRefs),...plugin.selectedAdapter===void 0?{}:{selectedAdapter:{...plugin.selectedAdapter}}})).sort(compareResolvedPlugins),capabilityRefs=plugins.flatMap(plugin=>plugin.capabilityRefs).sort(compareRefs).filter((ref,index,all)=>index===0||all[index-1].id!==ref.id||all[index-1].version!==ref.version),digestInput={profileId:input.profileId,profileVersion:input.profileVersion,plugins,capabilityRefs};return Object.freeze({profileId:input.profileId,profileVersion:input.profileVersion,plugins:Object.freeze(plugins.map(plugin=>Object.freeze({...plugin,capabilityRefs:Object.freeze(plugin.capabilityRefs)}))),capabilityRefs:Object.freeze(capabilityRefs),manifestDigest:stableJsonDigest(digestInput)})}function resolvePluginProfileV1(input){let plugins=input.plugins.map(candidate=>resolvePluginCompatibilityV1({manifest:candidate.manifest,host:input.host,required:candidate.required,disabled:candidate.disabled,availableCapabilities:input.availableCapabilities,hostVersion:input.hostVersion})).sort((left,right)=>left.pluginId===right.pluginId?comparePluginVersionsV1(left.pluginVersion,right.pluginVersion):left.pluginId.localeCompare(right.pluginId)),diagnostics=plugins.flatMap(plugin=>plugin.diagnostics),blocked=plugins.some(plugin=>plugin.required&&plugin.status!=="installed-ready"),resolvedPlugins=plugins.flatMap(plugin=>plugin.resolved===void 0?[]:[plugin.resolved]);return Object.freeze({profileId:input.profileId,profileVersion:input.profileVersion,status:blocked?"blocked":"ready",plugins:Object.freeze(plugins),diagnostics:Object.freeze(diagnostics),resolvedManifest:buildResolvedManifestV1({profileId:input.profileId,profileVersion:input.profileVersion,plugins:resolvedPlugins})})}function manifestPayload(manifest){return{id:manifest.id,pluginVersion:manifest.pluginVersion,apiVersion:manifest.apiVersion,...manifest.capabilityRefs===void 0?{}:{capabilityRefs:manifest.capabilityRefs},...manifest.requires===void 0?{}:{requires:manifest.requires},...manifest.platform===void 0?{}:{platform:manifest.platform},testOnly:manifest.testOnly??!1}}function pluginManifestDigestV1(manifest){return stableJsonDigest(manifestPayload(manifest))}function snapshotManifest(manifest){let capabilityRefs=manifest.capabilityRefs?.map(ref=>Object.freeze({...ref})),requires=manifest.requires?.map(requirement=>Object.freeze({...requirement})),platform2=manifest.platform,runtime=platform2?.runtime?.map(constraint=>Object.freeze({...constraint})),adapters=platform2?.adapters?.map(adapter=>Object.freeze({...adapter,os:Object.freeze([...adapter.os]),...adapter.arch===void 0?{}:{arch:Object.freeze([...adapter.arch])},...adapter.hostFeatures===void 0?{}:{hostFeatures:Object.freeze([...adapter.hostFeatures])}})),platformSnapshot=platform2===void 0?void 0:Object.freeze({...platform2,os:Object.freeze([...platform2.os]),...platform2.arch===void 0?{}:{arch:Object.freeze([...platform2.arch])},...runtime===void 0?{}:{runtime:Object.freeze(runtime)},...platform2.hostFeatures===void 0?{}:{hostFeatures:Object.freeze([...platform2.hostFeatures])},...adapters===void 0?{}:{adapters:Object.freeze(adapters)}});return Object.freeze({...manifest,...capabilityRefs===void 0?{}:{capabilityRefs:Object.freeze(capabilityRefs)},...requires===void 0?{}:{requires:Object.freeze(requires)},...platformSnapshot===void 0?{}:{platform:platformSnapshot}})}function stagePluginUpdateV1(input){if(input.source.trim().length===0)throw new Error(t("update source must be a non-empty string"));return Object.freeze({pluginId:input.manifest.id,pluginVersion:input.manifest.pluginVersion,source:input.source,manifest:snapshotManifest(input.manifest),manifestDigest:pluginManifestDigestV1(input.manifest),state:"staged"})}function verifyPluginUpdateV1(input){let actualDigest=pluginManifestDigestV1(input.record.manifest);if(input.record.state!=="staged")return{status:"rejected",record:input.record,reason:`Update must be staged before verification: ${input.record.state}`};if(input.record.pluginId!==input.record.manifest.id)return{status:"rejected",record:input.record,reason:"Update record plugin ID does not match embedded manifest"};if(input.record.pluginVersion!==input.record.manifest.pluginVersion)return{status:"rejected",record:input.record,reason:"Update record plugin version does not match embedded manifest"};if(input.record.manifestDigest!==actualDigest)return{status:"rejected",record:input.record,reason:"Staged manifest digest drifted"};if(input.expectedDigest!==void 0&&input.expectedDigest!==actualDigest)return{status:"rejected",record:input.record,reason:"Manifest digest does not match expectation"};let resolution=resolvePluginCompatibilityV1({manifest:input.record.manifest,host:input.host,required:!0,availableCapabilities:input.availableCapabilities,hostVersion:VERSION});if(resolution.status!=="installed-ready")return{status:"rejected",record:input.record,reason:`Plugin is not ready on host: ${resolution.status}`};if(input.verifier!==void 0)try{if(input.verifier({pluginId:input.record.pluginId,pluginVersion:input.record.pluginVersion,source:input.record.source,manifestDigest:actualDigest}).status!=="accepted")return{status:"rejected",record:input.record,reason:"Plugin source was rejected by the configured verifier"}}catch{return{status:"rejected",record:input.record,reason:"Plugin source verifier failed"}}return{status:"verified",record:Object.freeze({...input.record,state:"verified"})}}function activatePluginUpdateV1(record){if(record.state!=="verified")throw new Error(t("Only a verified update can become active: {pluginId}",{pluginId:record.pluginId}));return Object.freeze({...record,state:"active"})}function rollbackPluginUpdateV1(input){if(input.previous.pluginId!==input.failed.pluginId)throw new Error(t("Cannot rollback updates for different plugins"));if(input.previous.state!=="active")throw new Error(t("Rollback target must be active"));return Object.freeze({...input.previous,state:"active"})}var PluginCatalogErrorV1=class extends Error{code;constructor(code,message){super(message),this.name="PluginCatalogErrorV1",this.code=code}},DEFAULT_MAX_ENTRIES=128,MAX_ENTRIES=256;function comparePluginVersionsV1(left,right){let parse3=value=>value.trim().replace(/^[vV]/u,"").split(/[.+-]/u).map(part=>/^\d+$/u.test(part)?Number.parseInt(part,10):part),leftParts=parse3(left),rightParts=parse3(right);for(let index=0;index<Math.max(leftParts.length,rightParts.length);index+=1){let a=leftParts[index]??0,b=rightParts[index]??0;if(a!==b)return typeof a=="number"&&typeof b=="number"?a<b?-1:1:typeof a=="number"?1:typeof b=="number"||a<b?-1:1}return 0}function compareCatalogEntries(left,right){let idOrder=left.id.localeCompare(right.id);return idOrder!==0?idOrder:comparePluginVersionsV1(right.pluginVersion,left.pluginVersion)}function buildPluginCatalogV1(input){let maxEntries=input.maxEntries??DEFAULT_MAX_ENTRIES;if(!Number.isSafeInteger(maxEntries)||maxEntries<1||maxEntries>MAX_ENTRIES)throw new PluginCatalogErrorV1("invalid_limit",t("maxEntries must be an integer between 1 and {max}",{max:MAX_ENTRIES}));let manifests2=[...input.manifests].sort(compareCatalogEntries),seen=new Set,unique=[];for(let manifest of manifests2){let identity=`${manifest.id}@${manifest.pluginVersion}`;seen.has(identity)||(seen.add(identity),unique.push(manifest))}let disabled=new Set(input.disabledPluginIds??[]),entries=unique.slice(0,maxEntries).map(manifest=>{let resolution=resolvePluginCompatibilityV1({manifest,host:input.host,required:input.required,disabled:disabled.has(manifest.id),availableCapabilities:input.availableCapabilities,hostVersion:VERSION});return Object.freeze({pluginId:manifest.id,pluginVersion:manifest.pluginVersion,manifestDigest:pluginManifestDigestV1(manifest),resolution})});return Object.freeze({version:1,entries:Object.freeze(entries),truncated:manifests2.length>maxEntries})}function findPluginCatalogEntryV1(snapshot2,pluginId,pluginVersion){return snapshot2.entries.find(entry=>entry.pluginId===pluginId&&(pluginVersion===void 0||entry.pluginVersion===pluginVersion))}function stableStringify(value){return value===null||typeof value=="boolean"||typeof value=="number"||typeof value=="string"?JSON.stringify(value):Array.isArray(value)?`[${value.map(item=>stableStringify(item)).join(",")}]`:`{${Object.keys(value).sort().map(key=>`${JSON.stringify(key)}:${stableStringify(value[key])}`).join(",")}}`}function stableJsonDigest(value){let serialized=stableStringify(value),digest=14695981039346656037n;for(let byte of new TextEncoder().encode(serialized))digest^=BigInt(byte),digest=BigInt.asUintN(64,digest*1099511628211n);return digest.toString(16).padStart(16,"0")}function assertNonEmptyString(value,label){if(typeof value!="string"||value.trim().length===0)throw new Error(t("{label} must be a non-empty string",{label}))}function assertPluginEntries(value,label){if(!Array.isArray(value))throw new Error(t("{label} must be an array",{label}));let seen=new Set;return value.map((item,index)=>{if(item===null||typeof item!="object"||Array.isArray(item))throw new Error(t("{label}[{index}] must be a plain object",{label,index}));let record=item;assertNonEmptyString(record.pluginId,`${label}[${index}].pluginId`),assertNonEmptyString(record.pluginVersion,`${label}[${index}].pluginVersion`);let key=`${record.pluginId}@${record.pluginVersion}`;if(seen.has(key))throw new Error(t("{label} contains duplicate entry: {key}",{label,key}));seen.add(key);let selectedAdapter=record.selectedAdapter;if(selectedAdapter===void 0)return{pluginId:record.pluginId,pluginVersion:record.pluginVersion};if(selectedAdapter===null||typeof selectedAdapter!="object"||Array.isArray(selectedAdapter))throw new Error(t("{label}[{index}].selectedAdapter must be an object",{label,index}));let adapter=selectedAdapter;return assertNonEmptyString(adapter.id,`${label}[${index}].selectedAdapter.id`),assertNonEmptyString(adapter.version,`${label}[${index}].selectedAdapter.version`),{pluginId:record.pluginId,pluginVersion:record.pluginVersion,selectedAdapter:{id:adapter.id,version:adapter.version}}}).sort((left,right)=>left.pluginId===right.pluginId?comparePluginVersionsV1(left.pluginVersion,right.pluginVersion):left.pluginId.localeCompare(right.pluginId))}function buildProfileIdentityV1(input){assertNonEmptyString(input.profileId,"Profile identity.profileId"),assertNonEmptyString(input.profileVersion,"Profile identity.profileVersion");let pluginEntries=assertPluginEntries(input.resolvedPlugins,"Profile identity.resolvedPlugins"),capabilityVersions=[...input.capabilityVersions].map(ref=>{if(typeof ref.version!="number"||!Number.isSafeInteger(ref.version)||ref.version<1)throw new Error(t("Profile identity.capabilityVersions version must be a positive safe integer: {id}",{id:ref.id}));return assertNonEmptyString(ref.id,"Profile identity.capabilityVersions.id"),{id:ref.id,version:ref.version}}).sort((left,right)=>left.id===right.id?left.version-right.version:left.id.localeCompare(right.id)),manifestDigest=stableJsonDigest({profileId:input.profileId,profileVersion:input.profileVersion,plugins:pluginEntries.map(entry=>({pluginId:entry.pluginId,pluginVersion:entry.pluginVersion,...entry.selectedAdapter===void 0?{}:{selectedAdapter:entry.selectedAdapter}})),capabilityVersions:capabilityVersions.map(ref=>({id:ref.id,version:ref.version}))});return Object.freeze({profileId:input.profileId,profileVersion:input.profileVersion,manifestDigest,capabilityVersions:Object.freeze(capabilityVersions.map(ref=>Object.freeze({...ref})))})}function profileIdentitiesCompatible(left,right){return left.manifestDigest===right.manifestDigest}var PLUGIN_DISPOSE_EVENT_ID="plugin.dispose",PLUGIN_DISPOSE_EVENT_VERSION=1,PLUGIN_READY_EVENT_ID="plugin.ready",PLUGIN_READY_EVENT_VERSION=1,SESSION_CONTEXT_REPLACED_EVENT_ID="session.context.replaced",SESSION_CONTEXT_REPLACED_EVENT_VERSION=1,SESSION_RELOAD_EVENT_ID="session.reload",SESSION_RELOAD_EVENT_VERSION=1,AGENT_START_EVENT_ID="agent.start",AGENT_START_EVENT_VERSION=1,AGENT_SETTLED_EVENT_ID="agent.settled",AGENT_SETTLED_EVENT_VERSION=1,TURN_START_EVENT_ID="turn.start",TURN_START_EVENT_VERSION=1,TURN_END_EVENT_ID="turn.end",TURN_END_EVENT_VERSION=1,MESSAGE_START_EVENT_ID="message.start",MESSAGE_START_EVENT_VERSION=1,MESSAGE_END_EVENT_ID="message.end",MESSAGE_END_EVENT_VERSION=1,TOOL_EXECUTION_START_EVENT_ID="tool.execution.start",TOOL_EXECUTION_START_EVENT_VERSION=1,MODEL_SELECT_EVENT_ID="model.select",MODEL_SELECT_EVENT_VERSION=1,THINKING_LEVEL_SELECT_EVENT_ID="thinking_level.select",THINKING_LEVEL_SELECT_EVENT_VERSION=1,SESSION_INFO_CHANGED_EVENT_ID="session.info.changed",SESSION_INFO_CHANGED_EVENT_VERSION=1,SESSION_ENTRY_APPENDED_EVENT_ID="session.entry.appended",SESSION_ENTRY_APPENDED_EVENT_VERSION=1,AGENT_END_EVENT_ID="agent.end",AGENT_END_EVENT_VERSION=1,BEFORE_AGENT_START_EVENT_ID="before.agent.start",BEFORE_AGENT_START_EVENT_VERSION=1,BEFORE_AGENT_START_EVENT_VERSION_V2=2,UI_PROMPT_START_EVENT_ID="ui.prompt.start",UI_PROMPT_START_EVENT_VERSION=1,UI_PROMPT_END_EVENT_ID="ui.prompt.end",UI_PROMPT_END_EVENT_VERSION=1,RESOURCES_DISCOVER_EVENT_ID="resources.discover",RESOURCES_DISCOVER_EVENT_VERSION=1,RESOURCES_DISCOVER_EVENT_VERSION_V2=2,CONTEXT_ASSEMBLED_EVENT_ID="context.assembled",CONTEXT_ASSEMBLED_EVENT_VERSION=1,INPUT_RECEIVED_EVENT_ID="input.received",INPUT_RECEIVED_EVENT_VERSION=1,USER_BASH_EVENT_ID="user.bash",USER_BASH_EVENT_VERSION=1,SESSION_START_EVENT_ID="session.start",SESSION_START_EVENT_VERSION=1,MODEL_RESPONSE_EVENT_ID="model.response",MODEL_RESPONSE_EVENT_VERSION=1,MODEL_STREAM_EVENT_ID="model.stream",MODEL_STREAM_EVENT_VERSION=1,TOOL_RESULT_EVENT_ID="tool.result",TOOL_RESULT_EVENT_VERSION=1,TOOL_CALL_EVENT_ID="tool.call",TOOL_CALL_EVENT_VERSION=1,TOOL_RESULT_RAW_EVENT_ID="tool.result.raw",TOOL_RESULT_RAW_EVENT_VERSION=1,TOOL_EXECUTE_EVENT_ID="tool.execute",TOOL_EXECUTE_EVENT_VERSION=1,TOOL_COMMIT_EVENT_ID="tool.commit",TOOL_COMMIT_EVENT_VERSION=1,TOOL_GATE_BLOCKED_EVENT_ID="tool.gate.blocked",TOOL_GATE_BLOCKED_EVENT_VERSION=1,INPUT_GATE_BLOCKED_EVENT_ID="input.gate.blocked",INPUT_GATE_BLOCKED_EVENT_VERSION=1,OPERATION_END_EVENT_ID="operation.end",OPERATION_END_EVENT_VERSION=1;function assertString(value,label){if(typeof value!="string"||value.trim()==="")throw new Error(t("{label} must be a non-empty string",{label}))}function assertJsonSafe(value,label,seen=new Set){if(!(value===null||typeof value=="string"||typeof value=="boolean")){if(typeof value=="number"){if(Number.isFinite(value))return;throw new Error(t("{label} must contain only finite JSON numbers",{label}))}if(typeof value!="object")throw new Error(t("{label} must be JSON-safe",{label}));if(seen.has(value))throw new Error(t("{label} must not contain cycles",{label}));if(seen.add(value),Array.isArray(value))for(let[index,entry]of value.entries())assertJsonSafe(entry,`${label}[${index}]`,seen);else if(isPlainRecord2(value))for(let[key,entry]of Object.entries(value))assertJsonSafe(entry,`${label}.${key}`,seen);else throw new Error(t("{label} must contain only JSON arrays and plain objects",{label}));seen.delete(value)}}function validatePluginDisposeEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("plugin.dispose data must be a plain object"));let record=value;if(Object.keys(record).sort().join(",")!=="pluginId,pluginVersion,status,version")throw new Error(t("plugin.dispose data has unsupported fields"));if(record.version!==1)throw new Error(t("plugin.dispose data.version must be 1"));if(assertString(record.pluginId,"plugin.dispose data.pluginId"),assertString(record.pluginVersion,"plugin.dispose data.pluginVersion"),record.status!=="disposed"&&record.status!=="failed")throw new Error(t("plugin.dispose data.status is invalid"));return value}function pluginDisposeEventDefinition(){return{id:PLUGIN_DISPOSE_EVENT_ID,version:PLUGIN_DISPOSE_EVENT_VERSION,phase:"committed",schema:"agent-forge/plugin.dispose@1",allowedRegistrationKinds:["observe","after-commit"],validate:validatePluginDisposeEventDataV1}}function validatePluginReadyEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("plugin.ready data must be a plain object"));let record=value;if(Object.keys(record).sort().join(",")!=="pluginId,pluginVersion,version")throw new Error(t("plugin.ready data has unsupported fields"));if(record.version!==1)throw new Error(t("plugin.ready data.version must be 1"));return assertString(record.pluginId,"plugin.ready data.pluginId"),assertString(record.pluginVersion,"plugin.ready data.pluginVersion"),value}function pluginReadyEventDefinition(){return{id:PLUGIN_READY_EVENT_ID,version:PLUGIN_READY_EVENT_VERSION,phase:"committed",schema:"agent-forge/plugin.ready@1",allowedRegistrationKinds:["observe","after-commit"],validate:validatePluginReadyEventDataV1}}var PLUGIN_REJECTED_EVENT_ID="plugin.rejected",PLUGIN_REJECTED_EVENT_VERSION=1;function validatePluginRejectedEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("plugin.rejected data must be a plain object"));let record=value;if(Object.keys(record).filter(key=>key!=="pluginId").sort().join(",")!=="code,manifestPath,message,version")throw new Error(t("plugin.rejected data has unsupported fields"));if(record.version!==1)throw new Error(t("plugin.rejected data.version must be 1"));if(record.pluginId!==void 0&&typeof record.pluginId!="string")throw new Error(t("plugin.rejected data.pluginId must be a string when present"));if(assertString(record.manifestPath,"plugin.rejected data.manifestPath"),assertString(record.message,"plugin.rejected data.message"),record.code!=="invalid_manifest"&&record.code!=="duplicate_plugin_id"&&record.code!=="missing_dependency"&&record.code!=="plugin_load_failed")throw new Error(t("plugin.rejected data.code is invalid"));return value}function pluginRejectedEventDefinition(){return{id:PLUGIN_REJECTED_EVENT_ID,version:PLUGIN_REJECTED_EVENT_VERSION,phase:"committed",schema:"agent-forge/plugin.rejected@1",allowedRegistrationKinds:["observe","after-commit"],validate:validatePluginRejectedEventDataV1}}var contextReasons=new Set(["request","reload","session_replace","compaction","overflow_recovery","retry","tree"]);function validateSessionContextReplacedEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("session.context.replaced data must be a plain object"));let record=value,allowed=new Set(["version","sessionId","reason","messageCount","strategyName"]),unsupported=Object.keys(record).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.context.replaced data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","reason","messageCount"])if(!(key in record))throw new Error(t("session.context.replaced data is missing required field: {key}",{key}));if(record.version!==1)throw new Error(t("session.context.replaced data.version must be 1"));if(assertString(record.sessionId,"session.context.replaced data.sessionId"),typeof record.reason!="string"||!contextReasons.has(record.reason))throw new Error(t("session.context.replaced data.reason is invalid"));if(typeof record.messageCount!="number"||!Number.isSafeInteger(record.messageCount)||record.messageCount<0)throw new Error(t("session.context.replaced data.messageCount must be a non-negative safe integer"));return record.strategyName!==void 0&&assertString(record.strategyName,"session.context.replaced data.strategyName"),value}function sessionContextReplacedEventDefinition(){return{id:SESSION_CONTEXT_REPLACED_EVENT_ID,version:SESSION_CONTEXT_REPLACED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.context.replaced@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionContextReplacedEventDataV1}}function validateSessionReloadEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.reload data must be a plain object"));if(Object.keys(value).sort().join(",")!=="generation,reason,sessionId,version")throw new Error(t("session.reload data has unsupported fields"));if(value.version!==1)throw new Error(t("session.reload data.version must be 1"));if(assertString(value.sessionId,"session.reload data.sessionId"),typeof value.generation!="number"||!Number.isSafeInteger(value.generation)||value.generation<1)throw new Error(t("session.reload data.generation must be a positive safe integer"));if(value.reason!=="reload")throw new Error(t("session.reload data.reason is invalid"));return value}function sessionReloadEventDefinition(){return{id:SESSION_RELOAD_EVENT_ID,version:SESSION_RELOAD_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.reload@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionReloadEventDataV1}}function validateAgentLifecycleEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("agent lifecycle data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,version")throw new Error(t("agent lifecycle data has unsupported fields"));if(value.version!==1)throw new Error(t("agent lifecycle data.version must be 1"));return assertString(value.sessionId,"agent lifecycle data.sessionId"),value}function agentStartEventDefinition(){return{id:AGENT_START_EVENT_ID,version:AGENT_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentLifecycleEventDataV1}}function agentSettledEventDefinition(){return{id:AGENT_SETTLED_EVENT_ID,version:AGENT_SETTLED_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.settled@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentLifecycleEventDataV1}}function validateTurnStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("turn.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,turnIndex,version")throw new Error(t("turn.start data has unsupported fields"));if(value.version!==1)throw new Error(t("turn.start data.version must be 1"));if(assertString(value.sessionId,"turn.start data.sessionId"),typeof value.turnIndex!="number"||!Number.isSafeInteger(value.turnIndex)||value.turnIndex<0)throw new Error(t("turn.start data.turnIndex must be a non-negative safe integer"));return value}function validateTurnEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("turn.end data must be a plain object"));let keys=Object.keys(value).sort().join(",");if(keys!=="messageCount,sessionId,turnIndex,version"&&keys!=="messageCount,outcome,sessionId,turnIndex,version")throw new Error(t("turn.end data has unsupported fields"));if(value.version!==1)throw new Error(t("turn.end data.version must be 1"));if(assertString(value.sessionId,"turn.end data.sessionId"),typeof value.turnIndex!="number"||!Number.isSafeInteger(value.turnIndex)||value.turnIndex<0)throw new Error(t("turn.end data.turnIndex must be a non-negative safe integer"));if(typeof value.messageCount!="number"||!Number.isSafeInteger(value.messageCount)||value.messageCount<0)throw new Error(t("turn.end data.messageCount must be a non-negative safe integer"));if(value.outcome!==void 0&&value.outcome!=="aborted"&&value.outcome!=="error")throw new Error(t("turn.end data.outcome is invalid"));return value}function validateMessageBoundaryEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("message lifecycle data must be a plain object"));if(Object.keys(value).sort().join(",")!=="role,sessionId,version")throw new Error(t("message lifecycle data has unsupported fields"));if(value.version!==1)throw new Error(t("message lifecycle data.version must be 1"));return assertString(value.sessionId,"message lifecycle data.sessionId"),assertString(value.role,"message lifecycle data.role"),value}function turnStartEventDefinition(){return{id:TURN_START_EVENT_ID,version:TURN_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/turn.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateTurnStartEventDataV1}}function turnEndEventDefinition(){return{id:TURN_END_EVENT_ID,version:TURN_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/turn.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateTurnEndEventDataV1}}function messageStartEventDefinition(){return{id:MESSAGE_START_EVENT_ID,version:MESSAGE_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/message.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateMessageBoundaryEventDataV1}}function messageEndEventDefinition(){return{id:MESSAGE_END_EVENT_ID,version:MESSAGE_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/message.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateMessageBoundaryEventDataV1}}function validateToolExecutionStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.execution.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,toolCallId,toolName,version")throw new Error(t("tool.execution.start data has unsupported fields"));if(value.version!==1)throw new Error(t("tool.execution.start data.version must be 1"));return assertString(value.sessionId,"tool.execution.start data.sessionId"),assertString(value.toolCallId,"tool.execution.start data.toolCallId"),assertString(value.toolName,"tool.execution.start data.toolName"),value}function toolExecutionStartEventDefinition(){return{id:TOOL_EXECUTION_START_EVENT_ID,version:TOOL_EXECUTION_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.execution.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolExecutionStartEventDataV1}}function validateModelSelectEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("model.select data must be a plain object"));if(Object.keys(value).sort().join(",")!=="id,provider,sessionId,source,version")throw new Error(t("model.select data has unsupported fields"));if(value.version!==1)throw new Error(t("model.select data.version must be 1"));if(assertString(value.sessionId,"model.select data.sessionId"),assertString(value.provider,"model.select data.provider"),assertString(value.id,"model.select data.id"),value.source!=="set"&&value.source!=="cycle"&&value.source!=="restore")throw new Error(t("model.select data.source is invalid"));return value}function validateThinkingLevelSelectEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("thinking_level.select data must be a plain object"));if(Object.keys(value).sort().join(",")!=="level,previousLevel,sessionId,version")throw new Error(t("thinking_level.select data has unsupported fields"));if(value.version!==1)throw new Error(t("thinking_level.select data.version must be 1"));return assertString(value.sessionId,"thinking_level.select data.sessionId"),assertString(value.level,"thinking_level.select data.level"),assertString(value.previousLevel,"thinking_level.select data.previousLevel"),value}function modelSelectEventDefinition(){return{id:MODEL_SELECT_EVENT_ID,version:MODEL_SELECT_EVENT_VERSION,phase:"committed",schema:"agent-forge/model.select@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateModelSelectEventDataV1}}function thinkingLevelSelectEventDefinition(){return{id:THINKING_LEVEL_SELECT_EVENT_ID,version:THINKING_LEVEL_SELECT_EVENT_VERSION,phase:"committed",schema:"agent-forge/thinking_level.select@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateThinkingLevelSelectEventDataV1}}function validateSessionInfoChangedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.info.changed data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,version"&&Object.keys(value).sort().join(",")!=="name,sessionId,version")throw new Error(t("session.info.changed data has unsupported fields"));if(value.version!==1)throw new Error(t("session.info.changed data.version must be 1"));return assertString(value.sessionId,"session.info.changed data.sessionId"),value.name!==void 0&&assertString(value.name,"session.info.changed data.name"),value}function validateSessionEntryAppendedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.entry.appended data must be a plain object"));if(Object.keys(value).sort().join(",")!=="entryId,entryType,sessionId,version")throw new Error(t("session.entry.appended data has unsupported fields"));if(value.version!==1)throw new Error(t("session.entry.appended data.version must be 1"));return assertString(value.sessionId,"session.entry.appended data.sessionId"),assertString(value.entryId,"session.entry.appended data.entryId"),assertString(value.entryType,"session.entry.appended data.entryType"),value}function sessionInfoChangedEventDefinition(){return{id:SESSION_INFO_CHANGED_EVENT_ID,version:SESSION_INFO_CHANGED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.info.changed@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionInfoChangedEventDataV1}}function sessionEntryAppendedEventDefinition(){return{id:SESSION_ENTRY_APPENDED_EVENT_ID,version:SESSION_ENTRY_APPENDED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.entry.appended@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionEntryAppendedEventDataV1}}function validateAgentEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("agent.end data must be a plain object"));if(Object.keys(value).sort().join(",")!=="messageCount,sessionId,version")throw new Error(t("agent.end data has unsupported fields"));if(value.version!==1)throw new Error(t("agent.end data.version must be 1"));if(assertString(value.sessionId,"agent.end data.sessionId"),typeof value.messageCount!="number"||!Number.isSafeInteger(value.messageCount)||value.messageCount<0)throw new Error(t("agent.end data.messageCount must be a non-negative safe integer"));return value}function validateBeforeAgentStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("before.agent.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="hasImages,sessionId,version")throw new Error(t("before.agent.start data has unsupported fields"));if(value.version!==1)throw new Error(t("before.agent.start data.version must be 1"));if(assertString(value.sessionId,"before.agent.start data.sessionId"),typeof value.hasImages!="boolean")throw new Error(t("before.agent.start data.hasImages must be a boolean"));return value}function agentEndEventDefinition(){return{id:AGENT_END_EVENT_ID,version:AGENT_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentEndEventDataV1}}function beforeAgentStartEventDefinition(){return{id:BEFORE_AGENT_START_EVENT_ID,version:BEFORE_AGENT_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/before.agent.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateBeforeAgentStartEventDataV1}}function validateBeforeAgentStartEventDataV2(value){if(!isPlainRecord2(value))throw new Error(t("before.agent.start data must be a plain object"));let allowed=new Set(["version","sessionId","systemPrompt","systemPromptOptions"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("before.agent.start data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","systemPrompt","systemPromptOptions"])if(!(key in value))throw new Error(t("before.agent.start data is missing required field: {key}",{key}));if(value.version!==2)throw new Error(t("before.agent.start data.version must be 2"));if(assertString(value.sessionId,"before.agent.start data.sessionId"),typeof value.systemPrompt!="string")throw new Error(t("before.agent.start data.systemPrompt must be a string"));if(!isPlainRecord2(value.systemPromptOptions))throw new Error(t("before.agent.start data.systemPromptOptions must be a plain object"));return value}function beforeAgentStartV2EventDefinition(){return{id:BEFORE_AGENT_START_EVENT_ID,version:BEFORE_AGENT_START_EVENT_VERSION_V2,phase:"candidate",schema:"agent-forge/before.agent.start@2",allowedRegistrationKinds:["observe","transform"],validate:validateBeforeAgentStartEventDataV2}}function validateUIPromptBoundaryEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("ui.prompt lifecycle data must be a plain object"));let keys=Object.keys(value).sort();if(keys.join(",")!=="kind,sessionId,version"&&keys.join(",")!=="kind,sessionId,title,version")throw new Error(t("ui.prompt lifecycle data has unsupported fields"));if(value.version!==1)throw new Error(t("ui.prompt lifecycle data.version must be 1"));return assertString(value.sessionId,"ui.prompt lifecycle data.sessionId"),assertString(value.kind,"ui.prompt lifecycle data.kind"),value.title!==void 0&&assertString(value.title,"ui.prompt lifecycle data.title"),value}function validateResourcesDiscoverEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("resources.discover data must be a plain object"));if(Object.keys(value).sort().join(",")!=="cwd,reason,sessionId,version")throw new Error(t("resources.discover data has unsupported fields"));if(value.version!==1)throw new Error(t("resources.discover data.version must be 1"));if(assertString(value.sessionId,"resources.discover data.sessionId"),assertString(value.cwd,"resources.discover data.cwd"),value.reason!=="startup"&&value.reason!=="reload")throw new Error(t("resources.discover data.reason is invalid"));return value}function uiPromptStartEventDefinition(){return{id:UI_PROMPT_START_EVENT_ID,version:UI_PROMPT_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/ui.prompt.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateUIPromptBoundaryEventDataV1}}function uiPromptEndEventDefinition(){return{id:UI_PROMPT_END_EVENT_ID,version:UI_PROMPT_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/ui.prompt.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateUIPromptBoundaryEventDataV1}}function resourcesDiscoverEventDefinition(){return{id:RESOURCES_DISCOVER_EVENT_ID,version:RESOURCES_DISCOVER_EVENT_VERSION,phase:"committed",schema:"agent-forge/resources.discover@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateResourcesDiscoverEventDataV1}}function validateResourcesDiscoverContributionV2(value,label){if(!Array.isArray(value))throw new Error(t("{label} must be an array",{label}));for(let[index,entry]of value.entries()){if(!isPlainRecord2(entry))throw new Error(t("{label}[{index}] must be a plain object",{label,index}));if(Object.keys(entry).sort().join(",")!=="extensionPath,path")throw new Error(t("{label}[{index}] has unsupported fields",{label,index}));assertString(entry.path,`${label}[${index}].path`),assertString(entry.extensionPath,`${label}[${index}].extensionPath`)}}function validateResourcesDiscoverEventDataV2(value){if(!isPlainRecord2(value))throw new Error(t("resources.discover data must be a plain object"));let allowed=new Set(["version","sessionId","cwd","reason","skillPaths","promptPaths","themePaths"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("resources.discover data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","cwd","reason"])if(!(key in value))throw new Error(t("resources.discover data is missing required field: {key}",{key}));if(value.version!==2)throw new Error(t("resources.discover data.version must be 2"));if(assertString(value.sessionId,"resources.discover data.sessionId"),assertString(value.cwd,"resources.discover data.cwd"),value.reason!=="startup"&&value.reason!=="reload")throw new Error(t("resources.discover data.reason is invalid"));return value.skillPaths!==void 0&&validateResourcesDiscoverContributionV2(value.skillPaths,"resources.discover data.skillPaths"),value.promptPaths!==void 0&&validateResourcesDiscoverContributionV2(value.promptPaths,"resources.discover data.promptPaths"),value.themePaths!==void 0&&validateResourcesDiscoverContributionV2(value.themePaths,"resources.discover data.themePaths"),value}function resourcesDiscoverV2EventDefinition(){return{id:RESOURCES_DISCOVER_EVENT_ID,version:RESOURCES_DISCOVER_EVENT_VERSION_V2,phase:"candidate",schema:"agent-forge/resources.discover@2",allowedRegistrationKinds:["observe","transform"],validate:validateResourcesDiscoverEventDataV2}}function validateContextAssembledEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("context.assembled data must be a plain object"));if(Object.keys(value).sort().join(",")!=="messageCount,sessionId,version")throw new Error(t("context.assembled data has unsupported fields"));if(value.version!==1)throw new Error(t("context.assembled data.version must be 1"));if(assertString(value.sessionId,"context.assembled data.sessionId"),typeof value.messageCount!="number"||!Number.isSafeInteger(value.messageCount)||value.messageCount<0)throw new Error(t("context.assembled data.messageCount must be a non-negative safe integer"));return value}function validateInputReceivedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("input.received data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,textLength,version,source".split(",").sort().join(","))throw new Error(t("input.received data has unsupported fields"));if(value.version!==1)throw new Error(t("input.received data.version must be 1"));if(assertString(value.sessionId,"input.received data.sessionId"),assertString(value.source,"input.received data.source"),typeof value.textLength!="number"||!Number.isSafeInteger(value.textLength)||value.textLength<0)throw new Error(t("input.received data.textLength must be a non-negative safe integer"));return value}function validateUserBashEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("user.bash data must be a plain object"));if(Object.keys(value).sort().join(",")!=="cwd,excludeFromContext,sessionId,version")throw new Error(t("user.bash data has unsupported fields"));if(value.version!==1)throw new Error(t("user.bash data.version must be 1"));if(assertString(value.sessionId,"user.bash data.sessionId"),assertString(value.cwd,"user.bash data.cwd"),typeof value.excludeFromContext!="boolean")throw new Error(t("user.bash data.excludeFromContext must be a boolean"));return value}function contextAssembledEventDefinition(){return{id:CONTEXT_ASSEMBLED_EVENT_ID,version:CONTEXT_ASSEMBLED_EVENT_VERSION,phase:"committed",schema:"agent-forge/context.assembled@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateContextAssembledEventDataV1}}function inputReceivedEventDefinition(){return{id:INPUT_RECEIVED_EVENT_ID,version:INPUT_RECEIVED_EVENT_VERSION,phase:"committed",schema:"agent-forge/input.received@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateInputReceivedEventDataV1}}function userBashEventDefinition(){return{id:USER_BASH_EVENT_ID,version:USER_BASH_EVENT_VERSION,phase:"committed",schema:"agent-forge/user.bash@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateUserBashEventDataV1}}function validateSessionStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.start data must be a plain object"));let keys=Object.keys(value).sort();if(keys.join(",")!=="reason,sessionId,version"&&keys.join(",")!=="previousSessionFile,reason,sessionId,version")throw new Error(t("session.start data has unsupported fields"));if(value.version!==1)throw new Error(t("session.start data.version must be 1"));if(assertString(value.sessionId,"session.start data.sessionId"),value.reason!=="startup"&&value.reason!=="reload"&&value.reason!=="new"&&value.reason!=="resume"&&value.reason!=="fork")throw new Error(t("session.start data.reason is invalid"));return value.previousSessionFile!==void 0&&assertString(value.previousSessionFile,"session.start data.previousSessionFile"),value}function sessionStartEventDefinition(){return{id:SESSION_START_EVENT_ID,version:SESSION_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionStartEventDataV1}}function validateModelResponseEventDataV1(value){if(!value||typeof value!="object"||Array.isArray(value)||Object.getPrototypeOf(value)!==Object.prototype)throw new Error(t("model.response data must be a plain object"));let record=value,allowed=new Set(["version","sessionId","entryId","revision","provider","model","stopReason","message","errorMessage"]),unsupported=Object.keys(record).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("model.response data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","entryId","revision","provider","model","stopReason","message"])if(!(key in record))throw new Error(t("model.response data is missing required field: {key}",{key}));if(record.version!==1)throw new Error(t("model.response data.version must be 1"));if(assertString(record.sessionId,"model.response data.sessionId"),assertString(record.entryId,"model.response data.entryId"),assertString(record.provider,"model.response data.provider"),assertString(record.model,"model.response data.model"),record.stopReason!=="pending"&&record.stopReason!=="stop"&&record.stopReason!=="length"&&record.stopReason!=="toolUse"&&record.stopReason!=="error"&&record.stopReason!=="aborted"&&record.stopReason!=="deferred")throw new Error(t("model.response data.stopReason is invalid"));if(!record.message||typeof record.message!="object"||Array.isArray(record.message))throw new Error(t("model.response data.message must be an assistant message object"));if(record.message.role!=="assistant")throw new Error(t("model.response data.message.role must be assistant"));if(!isPlainRecord2(record.revision))throw new Error(t("model.response data.revision must be a plain object"));let revision=record.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("model.response data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("model.response data.revision.version must be 1"));if(assertString(revision.sessionId,"model.response data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("model.response data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"model.response data.revision.leafId"),revision.sessionId!==record.sessionId)throw new Error(t("model.response data.revision.sessionId must match sessionId"));return record.errorMessage!==void 0&&assertString(record.errorMessage,"model.response data.errorMessage"),value}function isPlainRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Object.getPrototypeOf(value)===Object.prototype}function modelResponseEventDefinition(){return{id:MODEL_RESPONSE_EVENT_ID,version:MODEL_RESPONSE_EVENT_VERSION,phase:"committed",schema:"agent-forge/model.response@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateModelResponseEventDataV1}}var modelStreamEvents=new Set(["start","text_start","text_delta","text_end","thinking_start","thinking_delta","thinking_end","toolcall_start","toolcall_delta","toolcall_end","done","error"]);function validateModelStreamEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("model.stream data must be a plain object"));let allowed=new Set(["version","sessionId","streamId","sequence","phase","event","partial","terminal","error"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("model.stream data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","streamId","sequence","phase","event","partial","terminal","error"])if(!(key in value))throw new Error(t("model.stream data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("model.stream data.version must be 1"));if(assertString(value.sessionId,"model.stream data.sessionId"),assertString(value.streamId,"model.stream data.streamId"),typeof value.sequence!="number"||!Number.isSafeInteger(value.sequence)||value.sequence<1)throw new Error(t("model.stream data.sequence must be a positive safe integer"));if(value.phase!=="raw"&&value.phase!=="candidate"&&value.phase!=="committed")throw new Error(t("model.stream data.phase is invalid"));if(typeof value.event!="string"||!modelStreamEvents.has(value.event))throw new Error(t("model.stream data.event is invalid"));if(value.phase==="committed"&&value.event!=="done"&&value.event!=="error")throw new Error(t("model.stream committed phase only permits terminal events"));let terminal=value.event==="done"||value.event==="error";if(value.terminal!==terminal)throw new Error(t("model.stream data.terminal does not match event"));if(value.partial!==null&&assertJsonSafe(value.partial,"model.stream data.partial"),terminal&&value.event==="done"&&value.error!==null)throw new Error(t("model.stream done event cannot contain error"));if(terminal&&value.event==="error"){if(!isPlainRecord2(value.error))throw new Error(t("model.stream error event requires error object"));if(Object.keys(value.error).some(key=>key!=="code"&&key!=="message"&&key!=="name"))throw new Error(t("model.stream error has unsupported fields"));assertString(value.error.code,"model.stream data.error.code"),assertString(value.error.message,"model.stream data.error.message"),value.error.name!==void 0&&assertString(value.error.name,"model.stream data.error.name")}else if(value.error!==null)throw new Error(t("model.stream non-terminal event cannot contain error"));return value}function modelStreamEventDefinition(){return{id:MODEL_STREAM_EVENT_ID,version:MODEL_STREAM_EVENT_VERSION,phase:"raw",allowedPhases:["raw","candidate","committed"],schema:"agent-forge/model.stream@1",allowedRegistrationKinds:["observe"],validate:validateModelStreamEventDataV1}}function validateToolResultEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.result data must be a plain object"));let allowed=new Set(["version","sessionId","entryId","revision","toolCallId","toolName","isError","message"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.result data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","entryId","revision","toolCallId","toolName","isError","message"])if(!(key in value))throw new Error(t("tool.result data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.result data.version must be 1"));if(assertString(value.sessionId,"tool.result data.sessionId"),assertString(value.entryId,"tool.result data.entryId"),assertString(value.toolCallId,"tool.result data.toolCallId"),assertString(value.toolName,"tool.result data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.result data.isError must be boolean"));if(!isPlainRecord2(value.message))throw new Error(t("tool.result data.message must be a tool result message object"));if(value.message.role!=="toolResult")throw new Error(t("tool.result data.message.role must be toolResult"));if(assertString(value.message.toolCallId,"tool.result data.message.toolCallId"),assertString(value.message.toolName,"tool.result data.message.toolName"),!Array.isArray(value.message.content))throw new Error(t("tool.result data.message.content must be an array"));if(typeof value.message.isError!="boolean")throw new Error(t("tool.result data.message.isError must be boolean"));if(value.message.toolCallId!==value.toolCallId)throw new Error(t("tool.result data.message.toolCallId must match toolCallId"));if(value.message.toolName!==value.toolName)throw new Error(t("tool.result data.message.toolName must match toolName"));if(value.message.isError!==value.isError)throw new Error(t("tool.result data.message.isError must match isError"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.result data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.result data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.result data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.result data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.result data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.result data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.result data.revision.sessionId must match sessionId"));return value}function toolResultEventDefinition(){return{id:TOOL_RESULT_EVENT_ID,version:TOOL_RESULT_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.result@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolResultEventDataV1}}function validateToolCallEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.call data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","input"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.call data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","input"])if(!(key in value))throw new Error(t("tool.call data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.call data.version must be 1"));if(assertString(value.sessionId,"tool.call data.sessionId"),assertString(value.toolCallId,"tool.call data.toolCallId"),assertString(value.toolName,"tool.call data.toolName"),!isPlainRecord2(value.revision))throw new Error(t("tool.call data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.call data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.call data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.call data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.call data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.call data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.call data.revision.sessionId must match sessionId"));return assertJsonSafe(value.input,"tool.call data.input"),value}function toolCallEventDefinition(){return{id:TOOL_CALL_EVENT_ID,version:TOOL_CALL_EVENT_VERSION,phase:"candidate",schema:"agent-forge/tool.call@1",allowedRegistrationKinds:["observe","transform"],validate:validateToolCallEventDataV1}}function validateToolExecuteEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.execute data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","input","isError","content"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.execute data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","input","isError","content"])if(!(key in value))throw new Error(t("tool.execute data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.execute data.version must be 1"));if(assertString(value.sessionId,"tool.execute data.sessionId"),assertString(value.toolCallId,"tool.execute data.toolCallId"),assertString(value.toolName,"tool.execute data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.execute data.isError must be boolean"));return assertJsonSafe(value.input,"tool.execute data.input"),validateToolResultRawEventDataV1({version:1,sessionId:value.sessionId,revision:value.revision,toolCallId:value.toolCallId,toolName:value.toolName,isError:value.isError,content:value.content}),value}function toolExecuteEventDefinition(){return{id:TOOL_EXECUTE_EVENT_ID,version:TOOL_EXECUTE_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.execute@1",allowedRegistrationKinds:["observe","execute"],validate:validateToolExecuteEventDataV1}}function validateToolCommitEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.commit data must be a plain object"));let allowed=new Set(["version","sessionId","entryId","revision","toolCallId","toolName","isError"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.commit data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","entryId","revision","toolCallId","toolName","isError"])if(!(key in value))throw new Error(t("tool.commit data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.commit data.version must be 1"));if(assertString(value.sessionId,"tool.commit data.sessionId"),assertString(value.entryId,"tool.commit data.entryId"),assertString(value.toolCallId,"tool.commit data.toolCallId"),assertString(value.toolName,"tool.commit data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.commit data.isError must be boolean"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.commit data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.commit data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.commit data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.commit data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.commit data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.commit data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.commit data.revision.sessionId must match sessionId"));return value}function toolCommitEventDefinition(){return{id:TOOL_COMMIT_EVENT_ID,version:TOOL_COMMIT_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.commit@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolCommitEventDataV1}}function validateToolResultRawEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.result.raw data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","isError","content"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.result.raw data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","isError","content"])if(!(key in value))throw new Error(t("tool.result.raw data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.result.raw data.version must be 1"));if(assertString(value.sessionId,"tool.result.raw data.sessionId"),assertString(value.toolCallId,"tool.result.raw data.toolCallId"),assertString(value.toolName,"tool.result.raw data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.result.raw data.isError must be boolean"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.result.raw data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.result.raw data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.result.raw data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.result.raw data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.result.raw data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.result.raw data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.result.raw data.revision.sessionId must match sessionId"));if(!Array.isArray(value.content))throw new Error(t("tool.result.raw data.content must be an array"));for(let[index,content]of value.content.entries()){if(!isPlainRecord2(content))throw new Error(t("tool.result.raw data.content[{index}] must be a plain object",{index}));if(content.type==="text"){let keys=Object.keys(content).sort().join(",");if(keys!=="text,type"&&keys!=="text,textSignature,type")throw new Error(t("tool.result.raw data.content[{index}] has unsupported text fields",{index}));assertString(content.text,`tool.result.raw data.content[${index}].text`),content.textSignature!==void 0&&assertString(content.textSignature,`tool.result.raw data.content[${index}].textSignature`);continue}if(content.type==="image"){if(Object.keys(content).sort().join(",")!=="data,mimeType,type")throw new Error(t("tool.result.raw data.content[{index}] has unsupported image fields",{index}));assertString(content.data,`tool.result.raw data.content[${index}].data`),assertString(content.mimeType,`tool.result.raw data.content[${index}].mimeType`);continue}throw new Error(t("tool.result.raw data.content[{index}].type is invalid",{index}))}return value}function toolResultRawEventDefinition(){return{id:TOOL_RESULT_RAW_EVENT_ID,version:TOOL_RESULT_RAW_EVENT_VERSION,phase:"raw",schema:"agent-forge/tool.result.raw@1",allowedRegistrationKinds:["observe"],validate:validateToolResultRawEventDataV1}}var TOOL_RESULT_TRANSFORM_EVENT_ID="tool.result.transform",TOOL_RESULT_TRANSFORM_EVENT_VERSION=1;function validateToolResultTransformEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.result.transform data must be a plain object"));let allowed=new Set(["version","sessionId","revision","toolCallId","toolName","isError","content"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.result.transform data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","revision","toolCallId","toolName","isError","content"])if(!(key in value))throw new Error(t("tool.result.transform data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.result.transform data.version must be 1"));if(assertString(value.sessionId,"tool.result.transform data.sessionId"),assertString(value.toolCallId,"tool.result.transform data.toolCallId"),assertString(value.toolName,"tool.result.transform data.toolName"),typeof value.isError!="boolean")throw new Error(t("tool.result.transform data.isError must be boolean"));if(!isPlainRecord2(value.revision))throw new Error(t("tool.result.transform data.revision must be a plain object"));let revision=value.revision;if(Object.keys(revision).sort().join(",")!=="leafId,sequence,sessionId,version")throw new Error(t("tool.result.transform data.revision has unsupported fields"));if(revision.version!==1)throw new Error(t("tool.result.transform data.revision.version must be 1"));if(assertString(revision.sessionId,"tool.result.transform data.revision.sessionId"),typeof revision.sequence!="number"||!Number.isSafeInteger(revision.sequence)||revision.sequence<0)throw new Error(t("tool.result.transform data.revision.sequence must be a non-negative safe integer"));if(revision.leafId!==null&&assertString(revision.leafId,"tool.result.transform data.revision.leafId"),revision.sessionId!==value.sessionId)throw new Error(t("tool.result.transform data.revision.sessionId must match sessionId"));if(!Array.isArray(value.content))throw new Error(t("tool.result.transform data.content must be an array"));for(let[index,content]of value.content.entries()){if(!isPlainRecord2(content))throw new Error(t("tool.result.transform data.content[{index}] must be a plain object",{index}));if(content.type==="text"){let keys=Object.keys(content).sort().join(",");if(keys!=="text,type"&&keys!=="text,textSignature,type")throw new Error(t("tool.result.transform data.content[{index}] has unsupported text fields",{index}));assertString(content.text,`tool.result.transform data.content[${index}].text`),content.textSignature!==void 0&&assertString(content.textSignature,`tool.result.transform data.content[${index}].textSignature`);continue}if(content.type==="image"){if(Object.keys(content).sort().join(",")!=="data,mimeType,type")throw new Error(t("tool.result.transform data.content[{index}] has unsupported image fields",{index}));assertString(content.data,`tool.result.transform data.content[${index}].data`),assertString(content.mimeType,`tool.result.transform data.content[${index}].mimeType`);continue}throw new Error(t("tool.result.transform data.content[{index}].type is invalid",{index}))}return value}function toolResultTransformEventDefinition(){return{id:TOOL_RESULT_TRANSFORM_EVENT_ID,version:TOOL_RESULT_TRANSFORM_EVENT_VERSION,phase:"candidate",schema:"agent-forge/tool.result.transform@1",allowedRegistrationKinds:["observe","transform"],validate:validateToolResultTransformEventDataV1}}function validateOperationEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.end data must be a plain object"));let allowed=new Set(["version","operationId","operationKind","status","errorMessage","reason"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("operation.end data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","operationId","operationKind","status"])if(!(key in value))throw new Error(t("operation.end data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("operation.end data.version must be 1"));if(assertString(value.operationId,"operation.end data.operationId"),assertString(value.operationKind,"operation.end data.operationKind"),value.status!=="succeeded"&&value.status!=="failed"&&value.status!=="cancelled")throw new Error(t("operation.end data.status is invalid"));return value.errorMessage!==void 0&&assertString(value.errorMessage,"operation.end data.errorMessage"),value.reason!==void 0&&assertString(value.reason,"operation.end data.reason"),value}function operationEndEventDefinition(){return{id:OPERATION_END_EVENT_ID,version:OPERATION_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationEndEventDataV1}}var CAPABILITY_CALL_EVENT_ID="capability.call",CAPABILITY_CALL_EVENT_VERSION=1,capabilityCallEvents=new Set(["start","cancel","end"]),capabilityCallStatuses=new Set(["succeeded","failed","cancelled"]);function validateCapabilityCallEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("capability.call data must be a plain object"));let allowed=new Set(["version","operationId","capabilityId","capabilityVersion","capabilityKind","callerPluginId","providerPluginId","event","status","error"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("capability.call data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","operationId","capabilityId","capabilityVersion","capabilityKind","callerPluginId","providerPluginId","event"])if(!(key in value))throw new Error(t("capability.call data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("capability.call data.version must be 1"));if(assertString(value.operationId,"capability.call data.operationId"),assertString(value.capabilityId,"capability.call data.capabilityId"),typeof value.capabilityVersion!="number"||!Number.isSafeInteger(value.capabilityVersion)||value.capabilityVersion<1)throw new Error(t("capability.call data.capabilityVersion must be a positive safe integer"));if(value.capabilityKind!=="service"&&value.capabilityKind!=="contribution"&&value.capabilityKind!=="transform")throw new Error(t("capability.call data.capabilityKind is invalid"));if(assertString(value.callerPluginId,"capability.call data.callerPluginId"),assertString(value.providerPluginId,"capability.call data.providerPluginId"),typeof value.event!="string"||!capabilityCallEvents.has(value.event))throw new Error(t("capability.call data.event is invalid"));if((value.event==="start"||value.event==="cancel")&&value.status!==void 0)throw new Error(t("capability.call start/cancel must not include status"));if(value.event==="end"&&value.status===void 0)throw new Error(t("capability.call end requires status"));if(value.status!==void 0&&(typeof value.status!="string"||!capabilityCallStatuses.has(value.status)))throw new Error(t("capability.call data.status is invalid"));if(value.error!==void 0){if(!isPlainRecord2(value.error))throw new Error(t("capability.call data.error must be a plain object"));if(Object.keys(value.error).some(key=>key!=="code"&&key!=="message"&&key!=="name"))throw new Error(t("capability.call data.error has unsupported fields"));if(!("code"in value.error))throw new Error(t("capability.call data.error is missing required field: code"));if(!("message"in value.error))throw new Error(t("capability.call data.error is missing required field: message"));assertString(value.error.code,"capability.call data.error.code"),assertString(value.error.message,"capability.call data.error.message"),value.error.name!==void 0&&assertString(value.error.name,"capability.call data.error.name")}if(value.event!=="end"&&value.error!==void 0)throw new Error(t("capability.call start/cancel must not include error"));if(value.event==="end"&&value.status==="succeeded"&&value.error!==void 0)throw new Error(t("capability.call succeeded end must not include error"));return value}function capabilityCallEventDefinition(){return{id:CAPABILITY_CALL_EVENT_ID,version:CAPABILITY_CALL_EVENT_VERSION,phase:"committed",schema:"agent-forge/capability.call@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateCapabilityCallEventDataV1}}var OPERATION_START_EVENT_ID="operation.start",OPERATION_START_EVENT_VERSION=1,OPERATION_STEP_EVENT_ID="operation.step",OPERATION_STEP_EVENT_VERSION=1;function validateOperationStartEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.start data must be a plain object"));if(Object.keys(value).sort().join(",")!=="operationId,operationKind,version")throw new Error(t("operation.start data has unsupported fields"));if(value.version!==1)throw new Error(t("operation.start data.version must be 1"));return assertString(value.operationId,"operation.start data.operationId"),assertString(value.operationKind,"operation.start data.operationKind"),value}function operationStartEventDefinition(){return{id:OPERATION_START_EVENT_ID,version:OPERATION_START_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.start@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationStartEventDataV1}}function validateOperationStepEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.step data must be a plain object"));let allowed=new Set(["version","operationId","operationKind","step","message","data"]);if(Object.keys(value).filter(key=>!allowed.has(key)).length>0)throw new Error(t("operation.step data has unsupported fields"));if(value.version!==1)throw new Error(t("operation.step data.version must be 1"));if(assertString(value.operationId,"operation.step data.operationId"),assertString(value.operationKind,"operation.step data.operationKind"),typeof value.step!="number"||!Number.isSafeInteger(value.step)||value.step<1)throw new Error(t("operation.step data.step must be a positive safe integer"));return value.message!==void 0&&assertString(value.message,"operation.step data.message"),value.data!==void 0&&assertJsonSafe(value.data,"operation.step data.data"),value}function operationStepEventDefinition(){return{id:OPERATION_STEP_EVENT_ID,version:OPERATION_STEP_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.step@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationStepEventDataV1}}var OPERATION_CANCEL_EVENT_ID="operation.cancel",OPERATION_CANCEL_EVENT_VERSION=1;function validateOperationCancelEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("operation.cancel data must be a plain object"));if(Object.keys(value).sort().join(",")!=="operationId,operationKind,version")throw new Error(t("operation.cancel data has unsupported fields"));if(value.version!==1)throw new Error(t("operation.cancel data.version must be 1"));return assertString(value.operationId,"operation.cancel data.operationId"),assertString(value.operationKind,"operation.cancel data.operationKind"),value}function operationCancelEventDefinition(){return{id:OPERATION_CANCEL_EVENT_ID,version:OPERATION_CANCEL_EVENT_VERSION,phase:"committed",schema:"agent-forge/operation.cancel@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateOperationCancelEventDataV1}}var SESSION_AUTO_RETRY_EVENT_ID="session.auto.retry",SESSION_AUTO_RETRY_EVENT_VERSION=1,SESSION_COMPACTION_DECISION_EVENT_ID="session.compaction.decision",SESSION_COMPACTION_DECISION_EVENT_VERSION=1,SESSION_COMPACTION_FAILED_EVENT_ID="session.compaction.failed",SESSION_COMPACTION_FAILED_EVENT_VERSION=1;function assertNonNegativeSafeInteger(value,label){if(typeof value!="number"||!Number.isSafeInteger(value)||value<0)throw new Error(t("{label} must be a non-negative safe integer",{label}))}function assertPositiveSafeInteger(value,label){if(typeof value!="number"||!Number.isSafeInteger(value)||value<1)throw new Error(t("{label} must be a positive safe integer",{label}))}function validateSessionAutoRetryEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.auto.retry data must be a plain object"));let allowed=new Set(["version","sessionId","attempt","maxAttempts","delayMs","errorMessage"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.auto.retry data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","attempt","maxAttempts","delayMs","errorMessage"])if(!(key in value))throw new Error(t("session.auto.retry data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("session.auto.retry data.version must be 1"));return assertString(value.sessionId,"session.auto.retry data.sessionId"),assertPositiveSafeInteger(value.attempt,"session.auto.retry data.attempt"),assertPositiveSafeInteger(value.maxAttempts,"session.auto.retry data.maxAttempts"),assertNonNegativeSafeInteger(value.delayMs,"session.auto.retry data.delayMs"),assertString(value.errorMessage,"session.auto.retry data.errorMessage"),value}function sessionAutoRetryEventDefinition(){return{id:SESSION_AUTO_RETRY_EVENT_ID,version:SESSION_AUTO_RETRY_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.auto.retry@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionAutoRetryEventDataV1}}var sessionCompactionDecisionReasons=new Set(["overflow","threshold"]);function assertOptionalPositiveSafeInteger(value,label){value!==void 0&&assertPositiveSafeInteger(value,label)}function validateSessionCompactionDecisionEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.compaction.decision data must be a plain object"));let allowed=new Set(["version","sessionId","reason","compact","willRetry","contextTokens","contextWindow","reserveTokens","failureMessage"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.compaction.decision data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","reason","compact","willRetry"])if(!(key in value))throw new Error(t("session.compaction.decision data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("session.compaction.decision data.version must be 1"));if(assertString(value.sessionId,"session.compaction.decision data.sessionId"),typeof value.reason!="string"||!sessionCompactionDecisionReasons.has(value.reason))throw new Error(t("session.compaction.decision data.reason is invalid"));if(typeof value.compact!="boolean")throw new Error(t("session.compaction.decision data.compact must be a boolean"));if(typeof value.willRetry!="boolean")throw new Error(t("session.compaction.decision data.willRetry must be a boolean"));return assertOptionalPositiveSafeInteger(value.contextTokens,"session.compaction.decision data.contextTokens"),assertOptionalPositiveSafeInteger(value.contextWindow,"session.compaction.decision data.contextWindow"),assertOptionalPositiveSafeInteger(value.reserveTokens,"session.compaction.decision data.reserveTokens"),value.failureMessage!==void 0&&assertString(value.failureMessage,"session.compaction.decision data.failureMessage"),value}function sessionCompactionDecisionEventDefinition(){return{id:SESSION_COMPACTION_DECISION_EVENT_ID,version:SESSION_COMPACTION_DECISION_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.compaction.decision@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionCompactionDecisionEventDataV1}}var sessionCompactionFailedReasons=new Set(["manual","overflow","threshold"]);function validateSessionCompactionFailedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.compaction.failed data must be a plain object"));let allowed=new Set(["version","sessionId","reason","errorMessage"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("session.compaction.failed data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","reason","errorMessage"])if(!(key in value))throw new Error(t("session.compaction.failed data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("session.compaction.failed data.version must be 1"));if(assertString(value.sessionId,"session.compaction.failed data.sessionId"),typeof value.reason!="string"||!sessionCompactionFailedReasons.has(value.reason))throw new Error(t("session.compaction.failed data.reason is invalid"));return assertString(value.errorMessage,"session.compaction.failed data.errorMessage"),value}function sessionCompactionFailedEventDefinition(){return{id:SESSION_COMPACTION_FAILED_EVENT_ID,version:SESSION_COMPACTION_FAILED_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.compaction.failed@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionCompactionFailedEventDataV1}}var SESSION_END_EVENT_ID="session.end",SESSION_END_EVENT_VERSION=1;function validateSessionEndEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("session.end data must be a plain object"));if(Object.keys(value).sort().join(",")!=="sessionId,version")throw new Error(t("session.end data has unsupported fields"));if(value.version!==1)throw new Error(t("session.end data.version must be 1"));return assertString(value.sessionId,"session.end data.sessionId"),value}function sessionEndEventDefinition(){return{id:SESSION_END_EVENT_ID,version:SESSION_END_EVENT_VERSION,phase:"committed",schema:"agent-forge/session.end@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateSessionEndEventDataV1}}var AGENT_TASK_SETTLED_EVENT_ID="agent.task.settled",AGENT_TASK_SETTLED_EVENT_VERSION=1,agentTaskSettledStatuses=new Set(["queued","admitted","running","succeeded","failed","cancelled","timed_out","drain_timeout","runner_lost"]);function validateAgentTaskSettledEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("agent.task.settled data must be a plain object"));let allowed=new Set(["version","sessionId","taskSessionId","taskId","status","reasonCode"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("agent.task.settled data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","taskSessionId","taskId","status"])if(!(key in value))throw new Error(t("agent.task.settled data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("agent.task.settled data.version must be 1"));if(assertString(value.sessionId,"agent.task.settled data.sessionId"),assertString(value.taskSessionId,"agent.task.settled data.taskSessionId"),assertString(value.taskId,"agent.task.settled data.taskId"),typeof value.status!="string"||!agentTaskSettledStatuses.has(value.status))throw new Error(t("agent.task.settled data.status is invalid"));return value.reasonCode!==void 0&&assertString(value.reasonCode,"agent.task.settled data.reasonCode"),value}function agentTaskSettledEventDefinition(){return{id:AGENT_TASK_SETTLED_EVENT_ID,version:AGENT_TASK_SETTLED_EVENT_VERSION,phase:"committed",schema:"agent-forge/agent.task.settled@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateAgentTaskSettledEventDataV1}}function validateToolGateBlockedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("tool.gate.blocked data must be a plain object"));let allowed=new Set(["version","sessionId","toolCallId","toolName","reason"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("tool.gate.blocked data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","toolCallId","toolName"])if(!(key in value))throw new Error(t("tool.gate.blocked data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("tool.gate.blocked data.version must be 1"));return assertString(value.sessionId,"tool.gate.blocked data.sessionId"),assertString(value.toolCallId,"tool.gate.blocked data.toolCallId"),assertString(value.toolName,"tool.gate.blocked data.toolName"),value.reason!==void 0&&assertString(value.reason,"tool.gate.blocked data.reason"),value}function toolGateBlockedEventDefinition(){return{id:TOOL_GATE_BLOCKED_EVENT_ID,version:TOOL_GATE_BLOCKED_EVENT_VERSION,phase:"committed",schema:"agent-forge/tool.gate.blocked@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateToolGateBlockedEventDataV1}}function validateInputGateBlockedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("input.gate.blocked data must be a plain object"));let allowed=new Set(["version","sessionId","source","textLength","reason"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("input.gate.blocked data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","sessionId","source","textLength"])if(!(key in value))throw new Error(t("input.gate.blocked data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("input.gate.blocked data.version must be 1"));if(assertString(value.sessionId,"input.gate.blocked data.sessionId"),assertString(value.source,"input.gate.blocked data.source"),typeof value.textLength!="number"||!Number.isInteger(value.textLength)||value.textLength<0)throw new Error(t("input.gate.blocked data.textLength must be a non-negative integer"));return value.reason!==void 0&&assertString(value.reason,"input.gate.blocked data.reason"),value}function inputGateBlockedEventDefinition(){return{id:INPUT_GATE_BLOCKED_EVENT_ID,version:INPUT_GATE_BLOCKED_EVENT_VERSION,phase:"committed",schema:"agent-forge/input.gate.blocked@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateInputGateBlockedEventDataV1}}var PROVIDER_FAILOVER_SWITCHED_EVENT_ID="provider.failover.switched",PROVIDER_FAILOVER_SWITCHED_EVENT_VERSION=1,PROVIDER_FAILOVER_RECOVERED_EVENT_ID="provider.failover.recovered",PROVIDER_FAILOVER_RECOVERED_EVENT_VERSION=1,PROVIDER_FAILOVER_PROBE_FAILED_EVENT_ID="provider.failover.probe.failed",PROVIDER_FAILOVER_PROBE_FAILED_EVENT_VERSION=1,isModelReference=value=>{let separator=value.indexOf("/");return separator>0&&separator<value.length-1};function validateFailoverModelReference(value,label){if(assertString(value,label),!isModelReference(value))throw new Error(t("{label} must be a provider/modelId reference",{label}))}function validateProviderFailoverSwitchedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("provider.failover.switched data must be a plain object"));let allowed=new Set(["version","chainId","from","to","attempt","rawError"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("provider.failover.switched data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","chainId","from","to","attempt","rawError"])if(!(key in value))throw new Error(t("provider.failover.switched data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("provider.failover.switched data.version must be 1"));return validateFailoverModelReference(value.chainId,"provider.failover.switched data.chainId"),validateFailoverModelReference(value.from,"provider.failover.switched data.from"),validateFailoverModelReference(value.to,"provider.failover.switched data.to"),assertPositiveSafeInteger(value.attempt,"provider.failover.switched data.attempt"),assertString(value.rawError,"provider.failover.switched data.rawError"),value}function providerFailoverSwitchedEventDefinition(){return{id:PROVIDER_FAILOVER_SWITCHED_EVENT_ID,version:PROVIDER_FAILOVER_SWITCHED_EVENT_VERSION,phase:"committed",schema:"agent-forge/provider.failover.switched@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateProviderFailoverSwitchedEventDataV1}}function validateProviderFailoverRecoveredEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("provider.failover.recovered data must be a plain object"));if(Object.keys(value).sort().join(",")!=="chainId,provider,version")throw new Error(t("provider.failover.recovered data has unsupported fields"));if(value.version!==1)throw new Error(t("provider.failover.recovered data.version must be 1"));return validateFailoverModelReference(value.chainId,"provider.failover.recovered data.chainId"),assertString(value.provider,"provider.failover.recovered data.provider"),value}function providerFailoverRecoveredEventDefinition(){return{id:PROVIDER_FAILOVER_RECOVERED_EVENT_ID,version:PROVIDER_FAILOVER_RECOVERED_EVENT_VERSION,phase:"committed",schema:"agent-forge/provider.failover.recovered@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateProviderFailoverRecoveredEventDataV1}}function validateProviderFailoverProbeFailedEventDataV1(value){if(!isPlainRecord2(value))throw new Error(t("provider.failover.probe.failed data must be a plain object"));let allowed=new Set(["version","chainId","provider","rawError","nextCooldownMs"]),unsupported=Object.keys(value).filter(key=>!allowed.has(key));if(unsupported.length>0)throw new Error(t("provider.failover.probe.failed data has unsupported fields: {unsupported}",{unsupported:unsupported.join(", ")}));for(let key of["version","chainId","provider","rawError","nextCooldownMs"])if(!(key in value))throw new Error(t("provider.failover.probe.failed data is missing required field: {key}",{key}));if(value.version!==1)throw new Error(t("provider.failover.probe.failed data.version must be 1"));return validateFailoverModelReference(value.chainId,"provider.failover.probe.failed data.chainId"),assertString(value.provider,"provider.failover.probe.failed data.provider"),assertString(value.rawError,"provider.failover.probe.failed data.rawError"),assertPositiveSafeInteger(value.nextCooldownMs,"provider.failover.probe.failed data.nextCooldownMs"),value}function providerFailoverProbeFailedEventDefinition(){return{id:PROVIDER_FAILOVER_PROBE_FAILED_EVENT_ID,version:PROVIDER_FAILOVER_PROBE_FAILED_EVENT_VERSION,phase:"committed",schema:"agent-forge/provider.failover.probe.failed@1",allowedRegistrationKinds:["observe","after-commit"],validate:validateProviderFailoverProbeFailedEventDataV1}}import{lstatSync,readdirSync,realpathSync,statSync}from"node:fs";import{readFile as readFile2}from"node:fs/promises";import{createRequire}from"node:module";import*as path2 from"node:path";var activePlugins=new WeakMap,createJitiPromise;function getCreateJiti(){return createJitiPromise??=import("./jiti-static-loader-CDSTNEDU.js").then(module=>module.createJiti),createJitiPromise}var virtualModulesPromise;function getVirtualModules(){return virtualModulesPromise??=import("./virtual-modules-UQRUJLPM.js").then(module=>module.VIRTUAL_MODULES),virtualModulesPromise}var hostHeavyDependencyAliases=new Set(["@lancedb/lancedb","@huggingface/transformers","onnxruntime-node"]),resolvedHeavyDependencyAliases=new Map,defaultHostDependencyAliasResolution={resolve:specifier=>createRequire(import.meta.url).resolve(specifier),cache:resolvedHeavyDependencyAliases};function buildHostDependencyAliases(specifiers,resolution){let aliases={};for(let specifier of specifiers){let cached=resolution.cache.get(specifier);if(cached!==void 0){aliases[specifier]=cached;continue}try{let resolved=resolution.resolve(specifier);resolution.cache.set(specifier,resolved),aliases[specifier]=resolved}catch{}}return aliases}function hostDependencyPathsConfig(){let paths={};for(let[specifier,entryPath]of Object.entries(buildHostDependencyAliases(hostHeavyDependencyAliases,defaultHostDependencyAliasResolution)))paths[camelCaseDependencyKey(specifier)]=entryPath;return paths}function camelCaseDependencyKey(specifier){return specifier.replace(/^@[^/]+\//,"").replace(/[-.](.)/g,(_,character)=>character.toUpperCase())}function isPluginInstance(value){return typeof value=="object"&&value!==null&&typeof value.dispose=="function"}function normalizePluginInstance(value,manifest){if(value!==void 0){if(!isPluginInstance(value))throw new Error(t("Capability plugin factory must return void or an instance with dispose(): {id}",{id:manifest.id}));return value}}function normalizePluginSyncInstance(value,manifest){if(value!==void 0){if(!isPluginInstance(value))throw new Error(t("Synchronous capability plugin factory must return void or an instance with dispose(): {id}",{id:manifest.id}));return value}}function throwCleanupErrors(errors,manifestId){if(errors.length!==0)throw errors.length===1?errors[0]:new AggregateError(errors,`Capability plugin cleanup failed: ${manifestId}`)}async function dispatchPluginDisposeEvent(runtime,manifest,status){runtime.hasLifecycleEvent(PLUGIN_DISPOSE_EVENT_ID,PLUGIN_DISPOSE_EVENT_VERSION)&&await runtime.dispatchLifecycle({type:PLUGIN_DISPOSE_EVENT_ID,version:PLUGIN_DISPOSE_EVENT_VERSION,phase:"committed",data:{version:1,pluginId:manifest.id,pluginVersion:manifest.version,status},source:"capability-plugin"})}async function dispatchPluginReadyEvent(runtime,manifest){runtime.hasLifecycleEvent(PLUGIN_READY_EVENT_ID,PLUGIN_READY_EVENT_VERSION)&&await runtime.dispatchLifecycle({type:PLUGIN_READY_EVENT_ID,version:PLUGIN_READY_EVENT_VERSION,phase:"committed",data:{version:1,pluginId:manifest.id,pluginVersion:manifest.version},source:"capability-plugin"})}function isMissingPathError(error){return typeof error=="object"&&error!==null&&"code"in error&&error.code==="ENOENT"}function compareNames(left,right){return left<right?-1:left>right?1:0}function discoverCapabilityPluginManifests(pluginDirectories){let manifests2=[],seenDirectories=new Set,seenManifests=new Set,visit=(directory,optional)=>{let resolvedDirectory=path2.resolve(directory),stats;try{stats=statSync(resolvedDirectory)}catch(error){if(optional&&isMissingPathError(error))try{if(!lstatSync(resolvedDirectory).isSymbolicLink())return}catch(linkError){if(isMissingPathError(linkError))return;throw new Error(t("Failed to inspect capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:linkError instanceof Error?linkError.message:String(linkError)}))}throw new Error(t("Failed to inspect capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:error instanceof Error?error.message:String(error)}))}if(!stats.isDirectory())throw new Error(t("Capability plugin path must be a directory: {directory}",{directory:resolvedDirectory}));let canonicalDirectory;try{canonicalDirectory=realpathSync(resolvedDirectory)}catch(error){throw new Error(t("Failed to resolve capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:error instanceof Error?error.message:String(error)}))}if(seenDirectories.has(canonicalDirectory))return;seenDirectories.add(canonicalDirectory);let entries;try{entries=readdirSync(resolvedDirectory,{withFileTypes:!0,encoding:"utf8"})}catch(error){throw new Error(t("Failed to read capability plugin directory {directory}: {reason}",{directory:resolvedDirectory,reason:error instanceof Error?error.message:String(error)}))}for(let entry of entries.sort((left,right)=>compareNames(left.name,right.name))){if(entry.name==="node_modules"||entry.name.startsWith("."))continue;let entryPath=path2.join(resolvedDirectory,entry.name);if(entry.isDirectory()){visit(entryPath,!1);continue}if(!entry.isFile()||entry.name!=="plugin.json")continue;let canonicalManifest;try{canonicalManifest=realpathSync(entryPath)}catch(error){throw new Error(t("Failed to resolve capability plugin manifest {path}: {reason}",{path:entryPath,reason:error instanceof Error?error.message:String(error)}))}seenManifests.has(canonicalManifest)||(seenManifests.add(canonicalManifest),manifests2.push(canonicalManifest))}};for(let pluginDirectory of pluginDirectories)visit(pluginDirectory,!0);return manifests2}async function loadCapabilityPlugin(runtime,manifest,factory){let active=activePlugins.get(runtime)??new Map;if(active.has(manifest.id))throw new Error(t("Capability plugin is already loaded: {id}",{id:manifest.id}));let ownerToken=Symbol(manifest.id);active.set(manifest.id,ownerToken),activePlugins.set(runtime,active);let api,instance,cleanup=async notifyDispose=>{let errors=[];api&&runtime.revokeAPI(api);try{await runtime.disposePlugin(manifest.id)}catch(error){errors.push(error)}try{await instance?.dispose()}catch(error){errors.push(error)}if(notifyDispose)try{await dispatchPluginDisposeEvent(runtime,manifest,errors.length===0?"disposed":"failed")}catch(error){errors.push(error)}throwCleanupErrors(errors,manifest.id)};try{api=runtime.createAPI(manifest),instance=normalizePluginInstance(await factory(api),manifest),await dispatchPluginReadyEvent(runtime,manifest);let pluginApi=api,disposePromise;return{manifest,api:pluginApi,ready:Promise.resolve(),dispose:async()=>(disposePromise??=(async()=>{try{await cleanup(!0)}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}})(),disposePromise)}}catch(error){try{await cleanup(!1)}catch(cleanupError){throw new AggregateError([error,cleanupError],`Capability plugin startup cleanup failed: ${manifest.id}`)}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}throw error}}function loadCapabilityPluginSync(runtime,manifest,factory){let active=activePlugins.get(runtime)??new Map;if(active.has(manifest.id))throw new Error(t("Capability plugin is already loaded: {id}",{id:manifest.id}));let ownerToken=Symbol(manifest.id);active.set(manifest.id,ownerToken),activePlugins.set(runtime,active);let api,instance,cleanupRegistrationsSync=()=>{let errors=[];api&&runtime.revokeAPI(api);try{runtime.disposePluginSync(manifest.id)}catch(error){errors.push(error)}return errors},cleanupSync=async()=>{let errors=cleanupRegistrationsSync(),result;try{result=instance?.dispose()}catch(error){errors.push(error)}if(result&&typeof result.then=="function"){let contractError=new Error(`Synchronous capability plugin disposer must not return a Promise: ${manifest.id}`);try{await result}catch(error){errors.push(error)}errors.push(contractError)}try{await dispatchPluginDisposeEvent(runtime,manifest,errors.length===0?"disposed":"failed")}catch(error){errors.push(error)}throwCleanupErrors(errors,manifest.id)};try{api=runtime.createAPI(manifest),instance=normalizePluginSyncInstance(factory(api),manifest)}catch(error){try{throwCleanupErrors(cleanupRegistrationsSync(),manifest.id)}catch(cleanupError){throw new AggregateError([error,cleanupError],`Capability plugin startup cleanup failed: ${manifest.id}`)}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}throw error}let ready=dispatchPluginReadyEvent(runtime,manifest);ready.catch(()=>{});let disposePromise;return{manifest,api,ready,dispose:async()=>(disposePromise??=(async()=>{let readyError;try{await ready}catch(error){readyError=error}try{if(await cleanupSync(),readyError!==void 0)throw readyError}catch(error){throw readyError!==void 0&&error!==readyError?new AggregateError([readyError,error],`Capability plugin cleanup failed: ${manifest.id}`):error}finally{active.get(manifest.id)===ownerToken&&active.delete(manifest.id)}})(),disposePromise)}}async function loadCapabilityPluginFromManifest(runtime,manifestPath,options){let raw;try{raw=JSON.parse(await readFile2(manifestPath,"utf8"))}catch(error){throw new Error(t("Failed to read capability plugin manifest {path}: {reason}",{path:manifestPath,reason:error instanceof Error?error.message:String(error)}))}let parsed=parseCapabilityPluginManifest(raw,manifestPath),hostDependencyOverride={hostDependencyPaths:hostDependencyPathsConfig()},callerOverride=options?.configOverride,manifest=callerOverride===void 0||Object.keys(callerOverride).length===0?{...parsed,config:{...parsed.config,...hostDependencyOverride}}:{...parsed,config:{...parsed.config,...hostDependencyOverride,...callerOverride}},entryPath=path2.resolve(path2.dirname(manifestPath),manifest.entry),[createJitiImpl,virtualModules]=await Promise.all([getCreateJiti(),getVirtualModules()]),jiti=createJitiImpl(import.meta.url,{moduleCache:!1,tsconfigPaths:!0,alias:buildHostDependencyAliases(hostHeavyDependencyAliases,defaultHostDependencyAliasResolution),virtualModules}),factory;try{factory=await jiti.import(entryPath,{default:!0})}catch(error){throw new Error(t("Failed to import capability plugin entry {path}: {reason}",{path:entryPath,reason:error instanceof Error?error.message:String(error)}))}if(typeof factory!="function")throw new Error(t("Capability plugin entry must default-export a factory function: {entryPath}",{entryPath}));return loadCapabilityPlugin(runtime,manifest,factory)}var ecosystem_exports={};__export(ecosystem_exports,{AGENT_FORGE_NPM_REGISTRY_ENV_V1:()=>AGENT_FORGE_NPM_REGISTRY_ENV_V1,AGENT_FORGE_NPM_TOKEN_ENV_V1:()=>AGENT_FORGE_NPM_TOKEN_ENV_V1,DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1:()=>DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,DEFAULT_PLUGIN_INSTALL_STORE_DIR_V1:()=>DEFAULT_PLUGIN_INSTALL_STORE_DIR_V1,DEFAULT_PLUGIN_STATE_FILE_V1:()=>DEFAULT_PLUGIN_STATE_FILE_V1,MAX_NODE_DISK_REGISTRY_INDEX_BYTES_V1:()=>MAX_NODE_DISK_REGISTRY_INDEX_BYTES_V1,MAX_NODE_DISK_REGISTRY_MANIFEST_BYTES_V1:()=>MAX_NODE_DISK_REGISTRY_MANIFEST_BYTES_V1,MAX_NODE_DISK_REGISTRY_RECORDS_V1:()=>MAX_NODE_DISK_REGISTRY_RECORDS_V1,MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1:()=>MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1,MAX_PLUGIN_ACQUISITION_REF_CHARS_V1:()=>MAX_PLUGIN_ACQUISITION_REF_CHARS_V1,MAX_PLUGIN_DISTRIBUTION_ARTIFACT_BYTES_V1:()=>MAX_PLUGIN_DISTRIBUTION_ARTIFACT_BYTES_V1,MAX_PLUGIN_DISTRIBUTION_ARTIFACT_REF_CHARS_V1:()=>MAX_PLUGIN_DISTRIBUTION_ARTIFACT_REF_CHARS_V1,MAX_PLUGIN_DISTRIBUTION_DESCRIPTOR_BYTES_V1:()=>MAX_PLUGIN_DISTRIBUTION_DESCRIPTOR_BYTES_V1,MAX_PLUGIN_DISTRIBUTION_FIELD_CHARS_V1:()=>MAX_PLUGIN_DISTRIBUTION_FIELD_CHARS_V1,MAX_PLUGIN_DISTRIBUTION_METADATA_BYTES_V1:()=>MAX_PLUGIN_DISTRIBUTION_METADATA_BYTES_V1,MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1:()=>MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1,MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1:()=>MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1,MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1:()=>MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1,MAX_PLUGIN_REGISTRY_MANIFESTS_V1:()=>MAX_PLUGIN_REGISTRY_MANIFESTS_V1,MAX_PLUGIN_REGISTRY_MANIFEST_BYTES_V1:()=>MAX_PLUGIN_REGISTRY_MANIFEST_BYTES_V1,MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1:()=>MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1,MAX_PLUGIN_REGISTRY_SOURCE_CHARS_V1:()=>MAX_PLUGIN_REGISTRY_SOURCE_CHARS_V1,MAX_PLUGIN_SCOPE_REF_CHARS_V1:()=>MAX_PLUGIN_SCOPE_REF_CHARS_V1,MAX_PLUGIN_SELECTION_IDS_V1:()=>MAX_PLUGIN_SELECTION_IDS_V1,MAX_PLUGIN_SELECTION_ID_CHARS_V1:()=>MAX_PLUGIN_SELECTION_ID_CHARS_V1,MAX_PLUGIN_SELECTION_PROFILES_V1:()=>MAX_PLUGIN_SELECTION_PROFILES_V1,MAX_PLUGIN_SELECTION_STORE_PATH_CHARS_V1:()=>MAX_PLUGIN_SELECTION_STORE_PATH_CHARS_V1,MAX_PLUGIN_STATE_ID_CHARS_V1:()=>MAX_PLUGIN_STATE_ID_CHARS_V1,MAX_PLUGIN_STATE_INSTALLATION_REF_CHARS_V1:()=>MAX_PLUGIN_STATE_INSTALLATION_REF_CHARS_V1,MAX_PLUGIN_STATE_RECORDS_V1:()=>MAX_PLUGIN_STATE_RECORDS_V1,MAX_PLUGIN_STATE_SOURCE_CHARS_V1:()=>MAX_PLUGIN_STATE_SOURCE_CHARS_V1,MAX_PLUGIN_STATE_STRING_CHARS_V1:()=>MAX_PLUGIN_STATE_STRING_CHARS_V1,NODE_PACKAGE_FORMAT_VERSION_V1:()=>NODE_PACKAGE_FORMAT_VERSION_V12,NODE_PLUGIN_TRUST_ROOT_VERSION_V1:()=>NODE_PLUGIN_TRUST_ROOT_VERSION_V1,NodeDiskRegistrySourceErrorV1:()=>NodeDiskRegistrySourceErrorV1,NodeHttpPluginRegistrySourceErrorV1:()=>NodeHttpPluginRegistrySourceErrorV1,NodeNpmRegistrySourceErrorV1:()=>NodeNpmRegistrySourceErrorV1,NodePackageInstallErrorV1:()=>NodePackageInstallErrorV1,NodePackageInstallPersistenceErrorV1:()=>NodePackageInstallPersistenceErrorV1,NodeReleasePackageSourceErrorV1:()=>NodeReleasePackageSourceErrorV1,NodeTarWriterErrorV1:()=>NodeTarWriterErrorV1,NodeUrlPackageSourceErrorV1:()=>NodeUrlPackageSourceErrorV1,PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1:()=>PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1,PLUGIN_ECOSYSTEM_CLI_VERSION_V1:()=>PLUGIN_ECOSYSTEM_CLI_VERSION_V1,PLUGIN_SELECTION_STORE_VERSION_V1:()=>PLUGIN_SELECTION_STORE_VERSION_V1,PLUGIN_SELECTION_VERSION_V1:()=>PLUGIN_SELECTION_VERSION_V1,PLUGIN_STATE_SNAPSHOT_VERSION_V1:()=>PLUGIN_STATE_SNAPSHOT_VERSION_V1,PluginAcquisitionErrorV1:()=>PluginAcquisitionErrorV1,PluginCatalogErrorV1:()=>PluginCatalogErrorV1,PluginDistributionErrorV1:()=>PluginDistributionErrorV1,PluginRegistryErrorV1:()=>PluginRegistryErrorV1,PluginSelectionErrorV1:()=>PluginSelectionErrorV1,activatePluginUpdateV1:()=>activatePluginUpdateV1,buildNodePluginDistributionSignaturePayloadV1:()=>buildNodePluginDistributionSignaturePayloadV1,buildNodeTarBytesV1:()=>buildNodeTarBytesV1,buildNodeTarGzBytesV1:()=>buildNodeTarGzBytesV1,buildPluginCatalogV1:()=>buildPluginCatalogV1,buildResolvedManifestV1:()=>buildResolvedManifestV1,collectLocalDirectoryPackageEntriesV1:()=>collectLocalDirectoryPackageEntriesV1,comparePluginVersionsV1:()=>comparePluginVersionsV1,createDefaultActivePluginBindingsResolverV1:()=>createDefaultActivePluginBindingsResolverV1,createDefaultPluginMarketWiringV1:()=>createDefaultPluginMarketWiringV1,createNodeDiskPluginRegistrySourceV1:()=>createNodeDiskPluginRegistrySourceV1,createNodeHttpPluginDistributionHostV1:()=>createNodeHttpPluginDistributionHostV1,createNodeHttpPluginDistributionStackV1:()=>createNodeHttpPluginDistributionStackV1,createNodeHttpPluginRegistrySourceV1:()=>createNodeHttpPluginRegistrySourceV1,createNodeNpmRegistrySourceV1:()=>createNodeNpmRegistrySourceV1,createNodePackageInstallHostForSessionV1:()=>createNodePackageInstallHostForSessionV1,createNodePackageInstallHostV1:()=>createNodePackageInstallHostV1,createNodePackageInstallPersistenceV1:()=>createNodePackageInstallPersistenceV1,createNodePackageInstallSessionLoaderV1:()=>createNodePackageInstallSessionLoaderV1,createNodePluginAcquisitionHostV1:()=>createNodePluginAcquisitionHostV1,createNodePluginPackageInstallStackV1:()=>createNodePluginPackageInstallStackV1,createNodePluginTrustRootV1:()=>createNodePluginTrustRootV1,createNodeReleasePackageSourceV1:()=>createNodeReleasePackageSourceV1,createPluginDistributionV1:()=>createPluginDistributionV1,createPluginEcosystemCliV1:()=>createPluginEcosystemCliV1,createPluginEcosystemRegistryAdapterV1:()=>createPluginEcosystemRegistryAdapterV1,createPluginInstallerV1:()=>createPluginInstallerV1,createPluginRegistryV1:()=>createPluginRegistryV1,createPluginSelectionStoreV1:()=>createPluginSelectionStoreV1,createPluginSelectionV1:()=>createPluginSelectionV1,createPluginStateStoreV1:()=>createPluginStateStoreV1,defaultPluginHostFactsV1:()=>defaultPluginHostFactsV1,defaultPluginInstallStoreDirectoryV1:()=>defaultPluginInstallStoreDirectoryV1,detectPluginPackageMediaTypeV1:()=>detectPluginPackageMediaTypeV1,downloadNodeUrlPackageV1:()=>downloadNodeUrlPackageV1,findPluginCatalogEntryV1:()=>findPluginCatalogEntryV1,isPluginAcquisitionRefTargetV1:()=>isPluginAcquisitionRefTargetV1,parseNodeTarGzPackageV1:()=>parseNodeTarGzPackageV1,parseNodeZipPackageV1:()=>parseNodeZipPackageV1,parsePluginAcquisitionRefV1:()=>parsePluginAcquisitionRefV1,parsePluginEcosystemCliCommandV1:()=>parsePluginEcosystemCliCommandV1,pluginAcquisitionManifestFromEntriesV1:()=>pluginAcquisitionManifestFromEntriesV1,pluginManifestDigestV1:()=>pluginManifestDigestV1,projectPluginScopeRefV1:()=>projectPluginScopeRefV1,readLocalPackageFileV1:()=>readLocalPackageFileV1,resolveActivePluginBindingsForScopesV1:()=>resolveActivePluginBindingsForScopesV1,resolveActivePluginBindingsV1:()=>resolveActivePluginBindingsV1,resolvePluginCompatibilityV1:()=>resolvePluginCompatibilityV1,resolvePluginProfileV1:()=>resolvePluginProfileV1,resolvePluginSelectionV1:()=>resolvePluginSelectionV1,rollbackPluginUpdateV1:()=>rollbackPluginUpdateV1,runPluginEcosystemCliV1:()=>runPluginEcosystemCliV1,selectNpmPackageVersionV1:()=>selectNpmPackageVersionV1,serializePluginSelectionV1:()=>serializePluginSelectionV1,sriToIntegrityV1:()=>sriToIntegrityV1,stagePluginUpdateV1:()=>stagePluginUpdateV1,verifyPluginUpdateV1:()=>verifyPluginUpdateV1});function diagnostic2(code,message,pluginId,pluginVersion){return Object.freeze({code,message,...pluginId===void 0?{}:{pluginId},...pluginVersion===void 0?{}:{pluginVersion}})}function unavailable(diagnostics){return Object.freeze({status:"unavailable",manifestOverrides:Object.freeze({}),verifiedPlugins:Object.freeze([]),installedManifestPaths:Object.freeze(new Map),diagnostics:Object.freeze([...diagnostics])})}async function resolveActivePluginBindingsV1(options){let stateResult2=await options.stateStore.read({signal:options.signal});if(stateResult2.status!=="ok"&&stateResult2.status!=="missing")return unavailable([diagnostic2("state_unavailable","Active plugin state is unavailable; no installed version was selected")]);let active=stateResult2.snapshot.records.filter(record=>record.state.scope===options.scope&&record.state.scopeRef===options.scopeRef&&record.state.enabled&&record.state.lifecycle==="active").sort((left,right)=>`${left.pluginId}@${left.pluginVersion}`.localeCompare(`${right.pluginId}@${right.pluginVersion}`));if(active.length===0)return Object.freeze({status:"ready",manifestOverrides:Object.freeze({}),verifiedPlugins:Object.freeze([]),installedManifestPaths:Object.freeze(new Map),diagnostics:Object.freeze([])});if(options.registry.resolve===void 0)return unavailable([diagnostic2("registry_unavailable","Active plugin registry cannot resolve manifests; no installed version was selected")]);let seen=new Set,selectedRecords=[],diagnostics=[];for(let record of active){if(seen.has(record.pluginId)){diagnostics.push(diagnostic2("duplicate_active","Multiple active versions exist for one plugin; no installed version was selected",record.pluginId,record.pluginVersion));continue}seen.add(record.pluginId),selectedRecords.push(record)}if(diagnostics.length>0)return unavailable(diagnostics);let resolved=new Map;for(let record of selectedRecords){let packageValue;try{packageValue=await options.registry.resolve({pluginId:record.pluginId,pluginVersion:record.pluginVersion,signal:options.signal})}catch{diagnostics.push(diagnostic2("manifest_unavailable","Active plugin manifest resolution failed; no installed version was selected",record.pluginId,record.pluginVersion));continue}if(packageValue===void 0){diagnostics.push(diagnostic2("manifest_unavailable","Active plugin manifest is unavailable; no installed version was selected",record.pluginId,record.pluginVersion));continue}let computedDigest=pluginManifestDigestV1(packageValue.manifest);if(packageValue.manifest.id!==record.pluginId||packageValue.manifest.pluginVersion!==record.pluginVersion||computedDigest!==record.manifestDigest||packageValue.expectedDigest!==record.manifestDigest){diagnostics.push(diagnostic2("manifest_mismatch","Active plugin manifest identity or digest does not match state; no installed version was selected",record.pluginId,record.pluginVersion));continue}let manifestPath;if(options.resolveInstallationManifestPath!==void 0&&(manifestPath=await options.resolveInstallationManifestPath({pluginId:record.pluginId,pluginVersion:record.pluginVersion,signal:options.signal}),manifestPath===void 0)){diagnostics.push(diagnostic2("manifest_unavailable","Active plugin installation manifest path is unavailable; no installed version was selected",record.pluginId,record.pluginVersion));continue}resolved.set(record.pluginId,{record,package:packageValue,...manifestPath===void 0?{}:{manifestPath}})}if(diagnostics.length>0)return unavailable(diagnostics);let manifestOverrides={},verifiedPlugins=[],installedManifestPaths=new Map;for(let[pluginId,value]of resolved)manifestOverrides[pluginId]=value.package.manifest,verifiedPlugins.push({pluginId,version:value.record.pluginVersion}),value.manifestPath!==void 0&&installedManifestPaths.set(pluginId,value.manifestPath);return Object.freeze({status:"ready",manifestOverrides:Object.freeze(manifestOverrides),verifiedPlugins:Object.freeze(verifiedPlugins),installedManifestPaths:Object.freeze(installedManifestPaths),diagnostics:Object.freeze([])})}async function resolveActivePluginBindingsForScopesV1(options){let scopes=[options.project,options.global].filter(scope=>scope!==void 0);if(scopes.length===0)return Object.freeze({status:"ready",manifestOverrides:Object.freeze({}),verifiedPlugins:Object.freeze([]),installedManifestPaths:Object.freeze(new Map),diagnostics:Object.freeze([])});let results=await Promise.all(scopes.map(scope=>resolveActivePluginBindingsV1({stateStore:scope.stateStore,registry:options.registry,scope:scope.scope,scopeRef:scope.scopeRef,...options.resolveInstallationManifestPath===void 0?{}:{resolveInstallationManifestPath:options.resolveInstallationManifestPath},signal:options.signal}))),unavailableDiagnostics=results.flatMap(result=>result.status==="unavailable"?result.diagnostics:[]);if(unavailableDiagnostics.length>0)return unavailable(unavailableDiagnostics);let manifestOverrides={},verifiedPlugins=[],installedManifestPaths=new Map,seen=new Set;for(let result of results){for(let[pluginId,manifest]of Object.entries(result.manifestOverrides))seen.has(pluginId)||(seen.add(pluginId),manifestOverrides[pluginId]=manifest);for(let verified of result.verifiedPlugins)verifiedPlugins.some(entry=>entry.pluginId===verified.pluginId)||verifiedPlugins.push(verified);for(let[pluginId,manifestPath]of result.installedManifestPaths)installedManifestPaths.has(pluginId)||installedManifestPaths.set(pluginId,manifestPath)}return Object.freeze({status:"ready",manifestOverrides:Object.freeze(manifestOverrides),verifiedPlugins:Object.freeze(verifiedPlugins),installedManifestPaths:Object.freeze(installedManifestPaths),diagnostics:Object.freeze([])})}import{Buffer as Buffer2}from"node:buffer";var MAX_INSTALLATION_REF_CHARS_V1=2048,MAX_PLUGIN_SCOPE_REF_CHARS_V1=2048,DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1="global:default";function opaqueInstallationRef(value){if(typeof value!="string"||value.trim()===""||value.length>MAX_INSTALLATION_REF_CHARS_V1)throw new Error(t("installation reference is invalid"));if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(value)||/\s/u.test(value))throw new Error(t("installation reference must be opaque"));return value}function opaqueScopeRef(value){if(typeof value!="string"||value.trim()===""||value.length>MAX_PLUGIN_SCOPE_REF_CHARS_V1)throw new Error("plugin installation scope reference is invalid");if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(value)||/\s/u.test(value))throw new Error("plugin installation scope reference must be opaque");return value}function installationFrom(record,installationRef,scopeIdentity,state){return Object.freeze({version:1,pluginId:record.pluginId,pluginVersion:record.pluginVersion,manifestDigest:record.manifestDigest,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,installationRef:opaqueInstallationRef(installationRef),state})}function cancelled(){return{status:"cancelled",error:{code:"cancelled",message:"Plugin installation operation was cancelled"}}}function failure(code){return{status:"failed",error:{code,message:code==="invalid_installation"?"The plugin installation handle is invalid":code==="unsupported_scope"?"The plugin installer does not support this scope":code==="install_failed"?"The host plugin installer failed":code==="activation_failed"?"The host plugin activation failed":code==="rollback_failed"?"The host plugin rollback failed":"The host plugin uninstall failed"}}}function validateInstallation(installation){if(installation.version!==1||typeof installation.pluginId!="string"||typeof installation.pluginVersion!="string"||typeof installation.manifestDigest!="string"||installation.pluginId.trim()===""||installation.pluginVersion.trim()===""||installation.manifestDigest.trim()==="")throw new Error("plugin installation handle is invalid");if(installation.scope!=="global"&&installation.scope!=="project")throw new Error("plugin installation scope is invalid");let scopeRef=installation.scopeRef===void 0?installation.scope==="global"?DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1:(()=>{throw new Error("project installation scope reference is required")})():opaqueScopeRef(installation.scopeRef);if(installation.scope==="global"&&scopeRef!==DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)throw new Error("plugin global installation scope reference is invalid");opaqueInstallationRef(installation.installationRef)}function ensureIdentity(installation,record,scopeIdentity){if(validateInstallation(installation),installation.pluginId!==record.pluginId||installation.pluginVersion!==record.pluginVersion||installation.manifestDigest!==record.manifestDigest||installation.scope!==scopeIdentity.scope||(installation.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef)throw new Error("plugin installation identity mismatch")}function normalizeScope(scope){if(scope===void 0)return"global";if(scope==="global"||scope==="project")return scope;throw new Error("plugin installation scope is invalid")}function normalizeScopeIdentity(scope,scopeRef){let normalizedScope=normalizeScope(scope);if(scopeRef===void 0){if(normalizedScope!=="global")throw new Error("project installation scope reference is required");return Object.freeze({scope:normalizedScope,scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1})}let normalizedScopeRef=opaqueScopeRef(scopeRef);if(normalizedScope==="global"&&normalizedScopeRef!==DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)throw new Error("plugin global installation scope reference is invalid");return Object.freeze({scope:normalizedScope,scopeRef:normalizedScopeRef})}function declaredScopes(host){return host.supportedScopes===void 0?Object.freeze(["global"]):!Array.isArray(host.supportedScopes)||new Set(host.supportedScopes).size!==host.supportedScopes.length||host.supportedScopes.some(scope=>scope!=="global"&&scope!=="project")?Object.freeze([]):Object.freeze([...host.supportedScopes])}function hostAcceptedScope(installation,scopeIdentity){if(!(scopeIdentity.scope==="global"&&installation.scope===void 0&&installation.scopeRef===void 0)&&(installation.scope!==scopeIdentity.scope||installation.scopeRef!==scopeIdentity.scopeRef))throw new Error("plugin installation scope mismatch")}function ensureArtifactIdentity(artifact,record){if(artifact.version!==1||artifact.pluginId!==record.pluginId||artifact.pluginVersion!==record.pluginVersion||artifact.manifestDigest!==record.manifestDigest||typeof artifact.artifactRef!="string"||artifact.artifactRef.trim()==="")throw new Error("plugin distribution artifact identity mismatch");opaqueInstallationRef(artifact.artifactRef)}function isInvalidInstallationError(value){return value instanceof Error&&(value.message==="plugin installation handle is invalid"||value.message==="plugin installation scope is invalid"||value.message==="plugin installation scope reference is invalid"||value.message==="plugin installation scope reference must be opaque"||value.message==="plugin global installation scope reference is invalid"||value.message==="project installation scope reference is required"||value.message==="plugin installation identity mismatch"||value.message==="plugin installation scope mismatch"||value.message==="plugin distribution artifact identity mismatch")}function createPluginInstallerV1(options){let supportedScopes=declaredScopes(options.host),supportsScope=scope=>supportedScopes.includes(scope);return{supportedScopes,prepare(input){let staged=stagePluginUpdateV1({manifest:input.manifest,source:input.source});return verifyPluginUpdateV1({record:staged,host:input.host,expectedDigest:input.expectedDigest,verifier:options.verifier})},async install(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef)}catch{return failure("invalid_installation")}if(!supportsScope(scopeIdentity.scope))return failure("unsupported_scope");if(input.record.state!=="verified")return failure("invalid_installation");try{input.artifact!==void 0&&ensureArtifactIdentity(input.artifact,input.record);let installed=await options.host.install({record:input.record,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,...input.artifact===void 0?{}:{artifact:input.artifact},signal:input.signal});return hostAcceptedScope(installed,scopeIdentity),{status:"succeeded",installation:installationFrom(input.record,installed.installationRef,scopeIdentity,"installed")}}catch(error){return isInvalidInstallationError(error)?failure("invalid_installation"):input.signal?.aborted?cancelled():failure("install_failed")}},async activate(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{return scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef),supportsScope(scopeIdentity.scope)?(ensureIdentity(input.installation,input.record,scopeIdentity),input.installation.state!=="installed"||input.record.state!=="verified"?failure("invalid_installation"):(await options.host.activate({installation:input.installation,record:input.record,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,signal:input.signal}),{status:"succeeded",installation:Object.freeze({...input.installation,state:"active"})})):failure("unsupported_scope")}catch(error){return isInvalidInstallationError(error)?failure("invalid_installation"):input.signal?.aborted?cancelled():failure("activation_failed")}},async rollback(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{return scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef),supportsScope(scopeIdentity.scope)?(validateInstallation(input.failed),validateInstallation(input.previous),input.failed.state!=="installed"&&input.failed.state!=="active"||input.previous.state!=="active"||input.failed.pluginId!==input.previous.pluginId||input.failed.scope!==scopeIdentity.scope||input.previous.scope!==scopeIdentity.scope||(input.failed.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef||(input.previous.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef?failure("invalid_installation"):(await options.host.rollback({failed:input.failed,previous:input.previous,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,signal:input.signal}),{status:"succeeded",installation:Object.freeze({...input.previous,state:"active"})})):failure("unsupported_scope")}catch(error){return isInvalidInstallationError(error)?failure("invalid_installation"):input.signal?.aborted?cancelled():failure("rollback_failed")}},async remove(input){if(input.signal?.aborted)return cancelled();let scopeIdentity;try{if(scopeIdentity=normalizeScopeIdentity(input.scope,input.scopeRef),!supportsScope(scopeIdentity.scope))return failure("unsupported_scope");validateInstallation(input.installation)}catch{return failure("invalid_installation")}if(input.installation.state!=="installed"&&input.installation.state!=="active"&&input.installation.state!=="retained"||input.installation.scope!==scopeIdentity.scope||(input.installation.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)!==scopeIdentity.scopeRef)return failure("invalid_installation");if(options.host.uninstall===void 0)return failure("uninstall_failed");try{return await options.host.uninstall({installation:input.installation,scope:scopeIdentity.scope,scopeRef:scopeIdentity.scopeRef,signal:input.signal}),{status:"succeeded",installation:Object.freeze({...input.installation,state:"retained"})}}catch{return input.signal?.aborted?cancelled():failure("uninstall_failed")}}}}var MAX_PLUGIN_ACQUISITION_REF_CHARS_V1=2048,MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1=214,ACQUISITION_ERROR_MESSAGES_V1={invalid_ref:"Plugin ref is invalid",unsupported_local_ref:"Local plugin ref exists but is neither a directory nor a .zip/.tgz file",unsupported_scheme:"Plugin ref URL scheme is not supported",invalid_digest_fragment:"Plugin ref #sha256 digest fragment is invalid",invalid_npm_ref:"Plugin npm package ref is invalid",cancelled:"Plugin package acquisition was cancelled",download_failed:"Plugin package download failed",package_not_found:"Plugin npm package was not found on the registry",version_not_found:"No npm package version matches the requested range",digest_mismatch:"Plugin package bytes do not match the expected digest",unsupported_media_type:"Plugin package bytes are neither a zip nor a tgz",package_invalid:"Plugin package contents are invalid",budget_exceeded:"Plugin package exceeds the configured size budget",release_not_found:"Plugin release was not found",release_asset_not_found:"Plugin release has no .zip/.tgz asset",release_asset_ambiguous:"Plugin release has multiple .zip/.tgz assets",rate_limited:"Plugin release API rate limit was exceeded"},PluginAcquisitionErrorV1=class extends Error{code;constructor(code,detail){super(detail===void 0||detail.length===0?t(ACQUISITION_ERROR_MESSAGES_V1[code]):`${t(ACQUISITION_ERROR_MESSAGES_V1[code])}: ${detail}`),this.name="PluginAcquisitionErrorV1",this.code=code}},DIGEST_FRAGMENT_SUFFIX_V1=/^#sha256:([0-9a-fA-F]{64})$/u;function boundedRef(ref){if(typeof ref!="string"||ref.length===0||ref.length>MAX_PLUGIN_ACQUISITION_REF_CHARS_V1||/[\u0000-\u001f\s]/u.test(ref))throw new PluginAcquisitionErrorV1("invalid_ref");return ref}function splitDigestFragment(ref){let hash=ref.lastIndexOf("#");if(hash<0)return{value:ref};let fragment=ref.slice(hash),match2=DIGEST_FRAGMENT_SUFFIX_V1.exec(fragment);if(match2===null)throw new PluginAcquisitionErrorV1("invalid_digest_fragment");return{value:ref.slice(0,hash),digestHex:match2[1].toLowerCase()}}function ownerRepoTag(kind,value,digestHex){let match2=/^([A-Za-z0-9][A-Za-z0-9._-]{0,99})\/([A-Za-z0-9][A-Za-z0-9._-]{0,99})(?:@([A-Za-z0-9][A-Za-z0-9._+-]{0,127}))?$/u.exec(value);if(match2===null)throw new PluginAcquisitionErrorV1("invalid_ref");return{kind,owner:match2[1],repo:match2[2],...match2[3]===void 0?{}:{tag:match2[3]},...digestHex===void 0?{}:{expectedDigestHex:digestHex}}}function parseUrlRef(value,digestHex){let parsed;try{parsed=new URL(value)}catch{throw new PluginAcquisitionErrorV1("invalid_ref")}if(parsed.username!==""||parsed.password!=="")throw new PluginAcquisitionErrorV1("invalid_ref");if(parsed.hash!=="")throw new PluginAcquisitionErrorV1("invalid_digest_fragment");return{kind:"url",url:parsed.toString(),...digestHex===void 0?{}:{expectedDigestHex:digestHex}}}var NPM_RANGE_V1=/^(?:latest|[~^]?\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/u,NPM_NAME_V1=/^@?[a-z0-9][a-z0-9-._]*(?:\/[a-z0-9][a-z0-9-._]*)?$/u;function parseNpmRef(ref){let at=ref.lastIndexOf("@"),name=at>0?ref.slice(0,at):ref,range2=at>0?ref.slice(at+1):void 0;if(name.length===0||name.length>MAX_PLUGIN_ACQUISITION_NPM_NAME_CHARS_V1||!NPM_NAME_V1.test(name)||name.startsWith("@")&&!name.includes("/")||!name.startsWith("@")&&name.includes("/"))throw new PluginAcquisitionErrorV1("invalid_npm_ref");if(range2!==void 0&&!NPM_RANGE_V1.test(range2))throw new PluginAcquisitionErrorV1("invalid_npm_ref");return{kind:"npm",name,...range2===void 0?{}:{range:range2}}}function isLocalPackageFile(path8){let value=path8.toLowerCase();return value.endsWith(".zip")||value.endsWith(".tgz")||value.endsWith(".tar.gz")}function parsePluginAcquisitionRefV1(ref,probe){let value=boundedRef(ref);if(/^[a-zA-Z]:[\\/]/u.test(value))return localRef(value,probe);let scheme=/^([a-zA-Z][a-zA-Z\d+.-]*):/u.exec(value);if(scheme!==null){let prefix=scheme[1].toLowerCase(),stripped=splitDigestFragment(value);if(prefix==="github"||prefix==="gitee")return ownerRepoTag(prefix,stripped.value.slice(prefix.length+1),stripped.digestHex);if(prefix==="http"||prefix==="https")return parseUrlRef(stripped.value,stripped.digestHex);throw new PluginAcquisitionErrorV1("unsupported_scheme")}return localRef(value,probe)}function localRef(value,probe){let stat5=probe.statLocalRef(value);if(stat5==="directory")return{kind:"local-path",path:value};if(stat5==="file"){if(!isLocalPackageFile(value))throw new PluginAcquisitionErrorV1("unsupported_local_ref");return{kind:"local-file",path:value}}if(stat5==="other")throw new PluginAcquisitionErrorV1("unsupported_local_ref");return parseNpmRef(value)}function isPluginAcquisitionRefTargetV1(target){if(typeof target!="string"||target.length===0)return!1;if(target.startsWith("@")||/^[a-zA-Z]:[\\/]/u.test(target)||target.startsWith("/")||target.startsWith("\\")||target.startsWith("./")||target.startsWith(".\\")||target.startsWith("../")||target.startsWith("..\\")||/[:#]/u.test(target)||/[\\/]/u.test(target))return!0;let at=target.lastIndexOf("@");if(at>0){let suffix=target.slice(at+1);if(suffix==="latest"||suffix.startsWith("^")||suffix.startsWith("~"))return!0}return!1}var PLUGIN_SELECTION_VERSION_V1=1,MAX_PLUGIN_SELECTION_ID_CHARS_V1=128,MAX_PLUGIN_SELECTION_IDS_V1=128,PluginSelectionErrorV1=class extends Error{code;pluginId;constructor(code,message,pluginId){super(message),this.name="PluginSelectionErrorV1",this.code=code,this.pluginId=pluginId}};function validateId(value,label){if(typeof value!="string"||value.trim().length===0)throw new PluginSelectionErrorV1(label==="profileId"?"invalid_profile_id":"invalid_plugin_id",t("{label} must be a non-empty string",{label}),typeof value=="string"?value:void 0);if(value.length>MAX_PLUGIN_SELECTION_ID_CHARS_V1)throw new PluginSelectionErrorV1(label==="profileId"?"profile_id_too_long":"plugin_id_too_long",t("{label} must be at most {max} characters",{label,max:MAX_PLUGIN_SELECTION_ID_CHARS_V1}),value);return value}function normalizeIds(ids,label){if(ids===void 0)return[];if(!Array.isArray(ids)||ids.length>MAX_PLUGIN_SELECTION_IDS_V1)throw new PluginSelectionErrorV1("too_many_plugin_ids",t("{label} must contain at most {max} plugin IDs",{label,max:MAX_PLUGIN_SELECTION_IDS_V1}));let seen=new Set,normalized=[];for(let candidate of ids){let id=validateId(candidate,"pluginId");if(seen.has(id))throw new PluginSelectionErrorV1("duplicate_plugin_id",t("{label} contains duplicate plugin ID: {id}",{label,id}),id);seen.add(id),normalized.push(id)}return normalized.sort((left,right)=>left.localeCompare(right)),Object.freeze(normalized)}function assertKnownIds(ids,knownIds){for(let id of ids)if(!knownIds.has(id))throw new PluginSelectionErrorV1("unknown_plugin_id",t("Selection references unknown plugin ID: {id}",{id}),id)}function createPluginSelectionV1(input){let profileId=validateId(input.profileId,"profileId"),selectedPluginIds=normalizeIds(input.selectedPluginIds,"selectedPluginIds"),disabledPluginIds=normalizeIds(input.disabledPluginIds,"disabledPluginIds");return Object.freeze({version:PLUGIN_SELECTION_VERSION_V1,profileId,selectedPluginIds,disabledPluginIds})}function resolvePluginSelectionV1(input){for(let manifest of input.manifests)validateId(manifest.id,"pluginId");let knownIds=new Set(input.manifests.map(manifest=>manifest.id)),provisional=createPluginSelectionV1(input.selection);if(input.selection.selectedPluginIds===void 0&&knownIds.size>MAX_PLUGIN_SELECTION_IDS_V1)throw new PluginSelectionErrorV1("too_many_plugin_ids",t("discovered plugin IDs exceed the selection limit of {limit}",{limit:MAX_PLUGIN_SELECTION_IDS_V1}));let selectedPluginIds=input.selection.selectedPluginIds===void 0?Object.freeze([...knownIds].sort((a,b)=>a.localeCompare(b))):provisional.selectedPluginIds,selection=Object.freeze({...provisional,selectedPluginIds});assertKnownIds(selection.selectedPluginIds,knownIds),assertKnownIds(selection.disabledPluginIds,knownIds);let catalog=buildPluginCatalogV1({manifests:input.manifests,host:input.host,required:input.required,disabledPluginIds:selection.disabledPluginIds,availableCapabilities:input.availableCapabilities,maxEntries:input.maxEntries}),selected=new Set(selection.selectedPluginIds),selectedCatalog=buildPluginCatalogV1({manifests:input.manifests.filter(manifest=>selected.has(manifest.id)),host:input.host,required:input.required,disabledPluginIds:selection.disabledPluginIds,availableCapabilities:input.availableCapabilities,maxEntries:Math.max(input.maxEntries??MAX_PLUGIN_SELECTION_IDS_V1,selection.selectedPluginIds.length)});if(selectedCatalog.truncated){let selectedEntryIds=new Set(selectedCatalog.entries.map(entry=>entry.pluginId)),omitted=selection.selectedPluginIds.find(id=>!selectedEntryIds.has(id));if(omitted!==void 0)throw new PluginSelectionErrorV1("catalog_truncated",t("Catalog truncation omitted selected plugin ID: {id}",{id:omitted}),omitted)}let entries=Object.freeze(selectedCatalog.entries),diagnostics=Object.freeze(entries.flatMap(entry=>entry.resolution.diagnostics));return Object.freeze({selection,catalog,entries,diagnostics})}function serializePluginSelectionV1(selection){let normalized=createPluginSelectionV1(selection);return JSON.stringify(normalized)}var PLUGIN_ECOSYSTEM_CLI_VERSION_V1=1,MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1=64*1024,MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1=128,MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1=MAX_PLUGIN_SELECTION_IDS_V1+8,PLUGIN_ECOSYSTEM_CLI_COMMAND_USAGE_V1="catalog list | catalog-list | state list | state-list | selection list | selection-list | selection set <builtinPluginProfileId> <pluginId\u2026> | selection-set <builtinPluginProfileId> <pluginId\u2026> | selection clear <profile> | selection-clear <profile> | enable <pluginId[@version]> | disable <pluginId[@version]> | remove <pluginId[@version]> | state enable|disable|remove <pluginId[@version]> | install <pluginId[@version] | ref> | update <pluginId[@version]> [--scope global|project] [--json | --text | --format json|text]";function invalidInput(message){throw new Error(message)}var COMMAND_NAME_ALIASES_V1=Object.freeze({"catalog-list":["catalog","list"],"state-list":["state","list"],"selection-list":["selection","list"],"selection-set":["selection","set"],"selection-clear":["selection","clear"]});function validateToken(value,label){return(value.length===0||value.length>256||/[\u0000-\u001f\s]/u.test(value))&&invalidInput(`${label} is invalid`),value}function parseIdentity(value){let token=validateToken(value,"plugin identity"),at=token.lastIndexOf("@");if(at<=0)return{pluginId:token};let pluginId=token.slice(0,at),pluginVersion=token.slice(at+1);return pluginVersion.length===0&&invalidInput("plugin version is invalid"),{pluginId:validateToken(pluginId,"plugin ID"),pluginVersion:validateToken(pluginVersion,"plugin version")}}function parsePluginEcosystemCliCommandV1(argv,defaultFormat="text"){(!Array.isArray(argv)||argv.length===0||argv.length>MAX_PLUGIN_ECOSYSTEM_CLI_ARGS_V1)&&invalidInput("ecosystem command is invalid");let format=defaultFormat;format!=="json"&&format!=="text"&&invalidInput("output format is invalid");let args=[...argv],explicitFormat,scope,pluginIdsOption;for(let index=args.length-1;index>=0;index-=1){let token=args[index],selectedScope=(token.startsWith("--scope=")?token.slice(8):void 0)??(token==="--scope"?args[index+1]:void 0);if(selectedScope!==void 0){selectedScope!=="global"&&selectedScope!=="project"&&invalidInput("state scope is invalid"),scope!==void 0&&scope!==selectedScope&&invalidInput("state scope is specified more than once"),scope=selectedScope,args.splice(index,token==="--scope"?2:1);continue}let inlineFormat=token.startsWith("--format=")?token.slice(9):void 0,selected=token==="--json"||token==="--text"?token==="--json"?"json":"text":inlineFormat??(token==="--format"?args[index+1]:void 0);if(selected!==void 0){selected!=="json"&&selected!=="text"&&invalidInput("output format is invalid"),explicitFormat!==void 0&&explicitFormat!==selected&&invalidInput("output format is specified more than once"),explicitFormat=selected,format=explicitFormat,args.splice(index,token==="--format"?2:1);continue}let selectedPlugins=(token.startsWith("--plugins=")?token.slice(10):void 0)??(token==="--plugins"?args[index+1]:void 0);if(selectedPlugins!==void 0){pluginIdsOption!==void 0&&invalidInput("plugin IDs are specified more than once");let ids=selectedPlugins.split(",");ids.length>MAX_PLUGIN_SELECTION_IDS_V1&&invalidInput("too many plugin IDs"),pluginIdsOption=Object.freeze(ids.map(id=>validateToken(id,"plugin ID"))),args.splice(index,token==="--plugins"?2:1)}}args.length===0&&invalidInput("ecosystem command is invalid");let commandAlias=COMMAND_NAME_ALIASES_V1[args[0]];commandAlias!==void 0&&(args=[...commandAlias,...args.slice(1)]);let[group,action,target,...rest]=args;if(group==="selection"&&action==="set"&&target!==void 0){pluginIdsOption!==void 0&&rest.length>0&&invalidInput("plugin IDs must use one input form");let selectedPluginIds=pluginIdsOption??Object.freeze(rest.map(id=>validateToken(id,"plugin ID")));return selectedPluginIds.length>MAX_PLUGIN_SELECTION_IDS_V1&&invalidInput("too many plugin IDs"),Object.freeze({version:1,command:"selection-set",format,profileId:validateToken(target,"profile ID"),selectedPluginIds,...scope===void 0?{}:{scope}})}if(rest.length>0&&invalidInput("ecosystem command has unsupported arguments"),group==="catalog"&&action==="list"&&target===void 0)return Object.freeze({version:1,command:"catalog-list",format,...scope===void 0?{}:{scope}});if(group==="state"&&action==="list"&&target===void 0)return Object.freeze({version:1,command:"state-list",format,...scope===void 0?{}:{scope}});if(group==="selection"&&action==="list"&&target===void 0)return Object.freeze({version:1,command:"selection-list",format,...scope===void 0?{}:{scope}});if(group==="selection"&&action==="clear"&&target!==void 0)return Object.freeze({version:1,command:"selection-clear",format,profileId:validateToken(target,"profile ID"),...scope===void 0?{}:{scope}});if(group==="state"&&(action==="enable"||action==="disable"||action==="remove")&&target){let identity=parseIdentity(target);return Object.freeze({version:1,command:action,format,...scope===void 0?{}:{scope},...identity})}if((group==="enable"||group==="disable"||group==="remove")&&action){let identity=parseIdentity(action);return Object.freeze({version:1,command:group,format,...scope===void 0?{}:{scope},...identity})}if((group==="install"||group==="update")&&action){let identity=parseIdentity(action);return Object.freeze({version:1,command:group,format,target:action,...scope===void 0?{}:{scope},...identity})}invalidInput("ecosystem command is invalid")}function response(command,format,status,error,data){let safeData=data===void 0?void 0:boundData(data);if(safeData!==void 0&&Array.isArray(safeData.entries)){let entries=[...safeData.entries],originalEntryCount=entries.length;for(;entries.length>0;){let candidate={...safeData,entries,...entries.length<safeData.entries.length?{truncated:!0}:{}};if(responseWithinBudget(command,format,status,error,candidate)){safeData=Object.freeze(candidate);break}entries=entries.slice(0,-1)}entries.length===0&&originalEntryCount>0&&(safeData=Object.freeze({entries:Object.freeze([]),truncated:!0}))}responseWithinBudget(command,format,status,error,safeData)||(safeData=Object.freeze({truncated:!0}));let base=responseBase(command,format,status,error,safeData),humanText=error?`${status}: ${error.message}`:formatText(command,status,safeData),text=format==="json"?JSON.stringify(base):humanText;return Object.freeze({...base,text:boundText(text)})}function responseWithinBudget(command,format,status,error,data){let base=responseBase(command,format,status,error,data),humanText=error?`${status}: ${error.message}`:formatText(command,status,data),text=format==="json"?JSON.stringify(base):humanText;return responseByteLength({...base,text:boundText(text)})<=MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1}function responseBase(command,format,status,error,data){return{version:PLUGIN_ECOSYSTEM_CLI_VERSION_V1,command,format,status,...data===void 0?{}:{data},...error===void 0?{}:{error}}}function responseByteLength(value){return Buffer2.byteLength(JSON.stringify(value),"utf8")}function boundText(value){if(Buffer2.byteLength(value,"utf8")<=MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1)return value;let suffix=`
214
214
  [output truncated]`,lower=0,upper=value.length;for(;lower<upper;){let middle=Math.ceil((lower+upper)/2);Buffer2.byteLength(`${value.slice(0,middle)}${suffix}`,"utf8")<=MAX_PLUGIN_ECOSYSTEM_CLI_OUTPUT_BYTES_V1?lower=middle:upper=middle-1}return`${value.slice(0,lower)}${suffix}`}function boundData(data){let list=data.entries;return!Array.isArray(list)||list.length<=MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1?Object.freeze({...data}):Object.freeze({...data,entries:Object.freeze(list.slice(0,MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1)),truncated:!0})}function formatText(command,status,data){if(data===void 0)return`${status}: ${command}`;let entries=data.entries;if(Array.isArray(entries)){let lines=entries.map(entry=>{if(typeof entry!="object"||entry===null)return String(entry);let item=entry,id=typeof item.profileId=="string"?`profile:${item.profileId}`:typeof item.pluginId=="string"?item.pluginId:"plugin",version=typeof item.pluginVersion=="string"?`@${item.pluginVersion}`:"",state=typeof item.status=="string"?` ${item.status}`:typeof item.lifecycle=="string"?` ${item.lifecycle}`:"",visibility=item.enabled===!1?" disabled":"";return`${id}${version}${state}${visibility}`});return[`${status}: ${command}`,...lines,...data.truncated===!0?["[output truncated]"]:[]].join(`
215
215
  `)}if(typeof data.profileId=="string"){let selected=Array.isArray(data.selectedPluginIds)?` selected=${data.selectedPluginIds.join(",")}`:"",disabled=Array.isArray(data.disabledPluginIds)?` disabled=${data.disabledPluginIds.join(",")}`:"";return`${status}: ${command} profile:${data.profileId}${selected}${disabled}`}let note=typeof data.note=="string"?` ${data.note}`:"";return`${status}: ${command}${note}`}function safeError(code,cause){let messages={invalid_command:"The plugin ecosystem command is invalid",unsupported_dependencies:"The plugin ecosystem operation is unavailable on this host",not_found:"The requested plugin was not found",not_installed:"The requested plugin is not installed",registry_failed:"The plugin registry operation failed",acquisition_failed:"The plugin package acquisition failed",distribution_failed:"The plugin distribution operation failed",incompatible:"The requested plugin is incompatible with this host",already_installed:"This plugin version is already installed in the requested scope",installer_failed:"The plugin installer operation failed",uninstall_failed:"The host plugin uninstall operation failed",state_failed:"The plugin state operation failed",selection_failed:"The plugin selection operation failed",cancelled:"Plugin ecosystem operation was cancelled"};return Object.freeze({code,message:cause!==void 0&&cause!==""?`${messages[code]} (${cause})`:messages[code]})}function invalidCommandError(argv,cause){let genericCauses=new Set(["ecosystem command is invalid","ecosystem command has unsupported arguments"]),causeMessage=cause instanceof Error?cause.message:void 0,reason=causeMessage!==void 0&&!genericCauses.has(causeMessage)?` (${causeMessage})`:"";return Object.freeze({code:"invalid_command",message:`The plugin ecosystem command is invalid: received argv [${argv.join(" ")}]${reason}; valid commands: ${PLUGIN_ECOSYSTEM_CLI_COMMAND_USAGE_V1}`})}function isCancelled(signal){return signal?.aborted===!0}function stateStoreOf(options,scope){return scope==="project"?options.projectStateStore:options.stateStore??options.stateHost}function operationScope(scope){return scope??"global"}function scopeRefOf(options,scope){return scope==="global"?DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1:options.projectScopeRef}function installerSupportsScope(installer,scope){return installer?.supportedScopes?.includes(scope)===!0}function selectionStoreOf(options,scope){return scope==="project"?options.projectSelectionStore:options.selectionStore??options.selectionHost}function stateEntry(record){return Object.freeze({pluginId:record.pluginId,pluginVersion:record.pluginVersion,manifestDigest:record.manifestDigest,scope:record.state.scope,scopeRef:record.state.scopeRef,enabled:record.state.enabled,lifecycle:record.state.lifecycle,...record.source===void 0?{}:{source:record.source}})}function selectionEntry(selection){return Object.freeze({profileId:selection.profileId,selectedPluginIds:Object.freeze([...selection.selectedPluginIds]),disabledPluginIds:Object.freeze([...selection.disabledPluginIds])})}function catalogEntry(entry){return Object.freeze({pluginId:entry.pluginId,pluginVersion:entry.pluginVersion,manifestDigest:entry.manifestDigest,status:entry.resolution.status,diagnosticCodes:Object.freeze(entry.resolution.diagnostics.map(item=>item.code).slice(0,16))})}function findStateRecord(records,pluginId,pluginVersion,scope,scopeRef){return records.find(record=>record.pluginId===pluginId&&(pluginVersion===void 0||record.pluginVersion===pluginVersion)&&(scope===void 0||record.state.scope===scope)&&(scopeRef===void 0||record.state.scopeRef===scopeRef))}function findCurrentStateRecord(records,pluginId,scope,scopeRef){return records.find(record=>record.pluginId===pluginId&&(scope===void 0||record.state.scope===scope)&&(scopeRef===void 0||record.state.scopeRef===scopeRef)&&record.state.lifecycle==="active")??findStateRecord(records,pluginId,void 0,scope,scopeRef)}function requireDependencies(options,scope,scopeRef){let requestedScope=operationScope(scope);if(!options.registry||!options.installer||scopeRef===void 0||!installerSupportsScope(options.installer,requestedScope)||!stateStoreOf(options,requestedScope)||!options.host)throw new Error("unsupported dependencies")}async function listManifests(options,signal){if(options.registry?.list)return await options.registry.list({signal});if(options.manifests)return options.manifests;throw new Error("unsupported dependencies")}function checkSignal(signal){if(isCancelled(signal))throw new Error("cancelled")}function createPluginEcosystemCliV1(options){let installTransactionTail=Promise.resolve();async function acquireInstallTransaction(){let release,turn=new Promise(resolve22=>{release=resolve22}),previous=installTransactionTail;return installTransactionTail=previous.then(()=>turn,()=>turn),await previous,release}async function execute(input){let parsed;try{parsed=parsePluginEcosystemCliCommandV1(input.argv,input.format??"text")}catch(error){return response("invalid",input.format==="json"?"json":"text","failed",invalidCommandError(input.argv,error))}let releaseInstallTransaction=parsed.command==="install"||parsed.command==="update"?await acquireInstallTransaction():void 0;try{let signal=input.signal,requestedScope=operationScope(parsed.scope),scopeRef=scopeRefOf(options,requestedScope);if(isCancelled(signal))return response(parsed.command,parsed.format,"cancelled",safeError("cancelled"));if(scopeRef===void 0)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let phase="registry";try{if(parsed.command==="catalog-list"){if(!options.host)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let manifests2=await listManifests(options,signal);checkSignal(signal);let snapshot2=buildPluginCatalogV1({manifests:manifests2,host:options.host,maxEntries:MAX_PLUGIN_ECOSYSTEM_CLI_LIST_ENTRIES_V1});return response(parsed.command,parsed.format,"succeeded",void 0,{version:snapshot2.version,entries:snapshot2.entries.map(catalogEntry),truncated:snapshot2.truncated})}if(parsed.command==="selection-list"){phase="selection";let selectionStore=selectionStoreOf(options,parsed.scope);if(!selectionStore)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let result=await selectionStore.read({signal});return result.status==="cancelled"?response(parsed.command,parsed.format,"cancelled",safeError("cancelled")):result.status==="invalid"?response(parsed.command,parsed.format,"failed",safeError("selection_failed")):response(parsed.command,parsed.format,"succeeded",void 0,{version:result.snapshot.version,scope:parsed.scope??"global",entries:result.snapshot.selections.map(selectionEntry),truncated:!1})}if(parsed.command==="selection-set"){phase="selection";let selectionStore=selectionStoreOf(options,parsed.scope);if(!selectionStore)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let selection;try{selection=createPluginSelectionV1({profileId:parsed.profileId,selectedPluginIds:parsed.selectedPluginIds??[],disabledPluginIds:[]})}catch{return response(parsed.command,parsed.format,"failed",safeError("selection_failed"))}let result=await selectionStore.set({selection,signal});return result.status==="cancelled"?response(parsed.command,parsed.format,"cancelled",safeError("cancelled")):result.status!=="ok"?response(parsed.command,parsed.format,"failed",safeError("selection_failed")):response(parsed.command,parsed.format,"succeeded",void 0,{profileId:selection.profileId,scope:parsed.scope??"global",selectedPluginIds:selection.selectedPluginIds,disabledPluginIds:selection.disabledPluginIds,changed:result.changed})}if(parsed.command==="selection-clear"){phase="selection";let selectionStore=selectionStoreOf(options,parsed.scope);if(!selectionStore)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let result=await selectionStore.clear({profileId:parsed.profileId,signal});return result.status==="cancelled"?response(parsed.command,parsed.format,"cancelled",safeError("cancelled")):result.status!=="ok"?response(parsed.command,parsed.format,"failed",safeError("selection_failed")):response(parsed.command,parsed.format,"succeeded",void 0,{profileId:parsed.profileId,scope:parsed.scope??"global",changed:result.changed})}if(parsed.command==="state-list"){phase="state";let stateStore2=stateStoreOf(options,requestedScope);if(!stateStore2)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let result=await stateStore2.read({signal});if(result.status==="cancelled")return response(parsed.command,parsed.format,"cancelled",safeError("cancelled"));if(result.status==="invalid")return response(parsed.command,parsed.format,"failed",safeError("state_failed"));let records=result.snapshot.records.filter(record=>record.state.scope===requestedScope&&record.state.scopeRef===scopeRef);return response(parsed.command,parsed.format,"succeeded",void 0,{version:result.snapshot.version,entries:records.map(stateEntry),truncated:!1})}if(parsed.command==="enable"||parsed.command==="disable"||parsed.command==="remove"){if(phase="state",parsed.command==="remove"&&requestedScope==="project"&&!installerSupportsScope(options.installer,requestedScope))return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let stateStore2=stateStoreOf(options,requestedScope);if(!stateStore2)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let current=await stateStore2.read({signal});if(current.status==="cancelled")return response(parsed.command,parsed.format,"cancelled",safeError("cancelled"));if(current.status==="invalid")return response(parsed.command,parsed.format,"failed",safeError("state_failed"));let record=parsed.pluginVersion===void 0?findCurrentStateRecord(current.snapshot.records,parsed.pluginId,requestedScope,scopeRef):findStateRecord(current.snapshot.records,parsed.pluginId,parsed.pluginVersion,requestedScope,scopeRef);if(!record)return response(parsed.command,parsed.format,"failed",safeError("not_installed"));if(parsed.command==="remove"){if(options.installer!==void 0){let removedFromHost;try{removedFromHost=await options.installer.remove({installation:{version:1,pluginId:record.pluginId,pluginVersion:record.pluginVersion,manifestDigest:record.manifestDigest,scope:record.state.scope,scopeRef:record.state.scopeRef,installationRef:record.installationRef,state:record.state.lifecycle},scope:requestedScope,scopeRef,signal})}catch{return response(parsed.command,parsed.format,"failed",safeError("uninstall_failed"))}if(removedFromHost.status!=="succeeded")return response(parsed.command,parsed.format,removedFromHost.status==="cancelled"?"cancelled":"failed",safeError(removedFromHost.status==="cancelled"?"cancelled":"uninstall_failed"))}let removed=await stateStore2.remove({pluginId:record.pluginId,pluginVersion:record.pluginVersion,scope:requestedScope,scopeRef,signal});return removed.status==="cancelled"?response(parsed.command,parsed.format,"cancelled",safeError("cancelled")):removed.status!=="ok"?response(parsed.command,parsed.format,"failed",safeError("state_failed")):response(parsed.command,parsed.format,"succeeded",void 0,{pluginId:record.pluginId,pluginVersion:record.pluginVersion,...options.installer===void 0?{}:{hostRemoved:!0},changed:removed.changed})}let enabled=parsed.command==="enable",updated=await stateStore2.upsert({installation:{version:1,pluginId:record.pluginId,pluginVersion:record.pluginVersion,manifestDigest:record.manifestDigest,scope:record.state.scope,scopeRef:record.state.scopeRef,installationRef:record.installationRef,state:record.state.lifecycle},scope:requestedScope,enabled,...record.source===void 0?{}:{source:record.source},signal});if(updated.status==="cancelled")return response(parsed.command,parsed.format,"cancelled",safeError("cancelled"));if(updated.status!=="ok")return response(parsed.command,parsed.format,"failed",safeError("state_failed"));let retainedNote=parsed.command==="enable"&&record.state.lifecycle!=="active"?t("only toggles the enabled flag; the record lifecycle is {lifecycle} and the runtime will not load it",{lifecycle:record.state.lifecycle}):void 0;return response(parsed.command,parsed.format,"succeeded",void 0,{pluginId:record.pluginId,pluginVersion:record.pluginVersion,enabled,changed:updated.changed,...retainedNote===void 0?{}:{note:retainedNote}})}let stateStore=stateStoreOf(options,requestedScope),installer=options.installer,host=options.host,acquisitionTarget=parsed.command==="install"&&parsed.target!==void 0&&isPluginAcquisitionRefTargetV1(parsed.target)?parsed.target:void 0;if(!stateStore||!installer||!host||!installerSupportsScope(installer,requestedScope)||acquisitionTarget===void 0&&!options.registry)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));let runInstallFlow=async resolved=>{phase="state";let current=await stateStore.read({signal});if(current.status==="cancelled")return response(parsed.command,parsed.format,"cancelled",safeError("cancelled"));if(current.status==="invalid")return response(parsed.command,parsed.format,"failed",safeError("state_failed"));let previous=findCurrentStateRecord(current.snapshot.records,resolved.manifest.id,requestedScope,scopeRef);if(findStateRecord(current.snapshot.records,resolved.manifest.id,resolved.manifest.pluginVersion,requestedScope,scopeRef)!==void 0)return response(parsed.command,parsed.format,"failed",safeError("already_installed"));if(parsed.command==="update"&&(!previous||previous.state.lifecycle!=="active"))return response(parsed.command,parsed.format,"failed",safeError("not_installed"));phase="installer";let verified=installer.prepare({manifest:resolved.manifest,source:resolved.source,host,...resolved.expectedDigest===void 0?{}:{expectedDigest:resolved.expectedDigest}});if(verified.status!=="verified")return response(parsed.command,parsed.format,"failed",safeError("incompatible"));let artifact=resolved.acquired?.artifact;if(resolved.distribution!==void 0){if(options.distribution===void 0)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));phase="distribution";let descriptor=options.distribution.validateDescriptor(resolved.distribution);if(descriptor.pluginId!==verified.record.pluginId||descriptor.pluginVersion!==verified.record.pluginVersion||descriptor.manifestDigest!==verified.record.manifestDigest)return response(parsed.command,parsed.format,"failed",safeError("incompatible"));artifact=await options.distribution.acquireArtifact({descriptor,signal})}let artifactReleased=!1,releaseArtifact=async()=>{if(artifact===void 0||artifactReleased)return!0;let previousPhase=phase;phase="distribution";try{return resolved.acquired!==void 0?await resolved.acquired.release()?(artifactReleased=!0,phase=previousPhase,!0):!1:options.distribution===void 0?!1:(await options.distribution.releaseArtifact({artifact}),artifactReleased=!0,phase=previousPhase,!0)}catch{return!1}},transactionResponse,transactionError,artifactCleanupFailed=!1;try{transactionResponse=await(async()=>{checkSignal(signal),phase="installer";let installed=await installer.install({record:verified.record,scope:requestedScope,scopeRef,...artifact===void 0?{}:{artifact},signal});if(installed.status!=="succeeded")return await releaseArtifact()?response(parsed.command,parsed.format,installed.status==="cancelled"?"cancelled":"failed",safeError(installed.status==="cancelled"?"cancelled":"installer_failed",installed.status==="failed"?installed.error.message:void 0)):response(parsed.command,parsed.format,isCancelled(signal)?"cancelled":"failed",safeError(isCancelled(signal)?"cancelled":"distribution_failed"));let activated=await installer.activate({installation:installed.installation,record:verified.record,scope:requestedScope,scopeRef,signal});if(activated.status!=="succeeded")return previous&&previous.state.lifecycle==="active"&&(await installer.rollback({failed:installed.installation,previous:{version:1,pluginId:previous.pluginId,pluginVersion:previous.pluginVersion,manifestDigest:previous.manifestDigest,scope:previous.state.scope,scopeRef:previous.state.scopeRef,installationRef:previous.installationRef,state:"active"},scope:requestedScope,scopeRef,signal:void 0})).status!=="succeeded"||(await installer.remove({installation:installed.installation,scope:requestedScope,scopeRef})).status!=="succeeded"?response(parsed.command,parsed.format,"failed",safeError("installer_failed")):await releaseArtifact()?response(parsed.command,parsed.format,activated.status==="cancelled"?"cancelled":"failed",safeError(activated.status==="cancelled"?"cancelled":"installer_failed")):response(parsed.command,parsed.format,isCancelled(signal)?"cancelled":"failed",safeError(isCancelled(signal)?"cancelled":"distribution_failed"));let restoreActivatedInstallation=async()=>{let replacesPrevious=previous!==void 0&&`${previous.pluginId}@${previous.pluginVersion}`!=`${activated.installation.pluginId}@${activated.installation.pluginVersion}`;return replacesPrevious&&previous.state.lifecycle==="active"&&(await installer.rollback({failed:activated.installation,previous:{version:1,pluginId:previous.pluginId,pluginVersion:previous.pluginVersion,manifestDigest:previous.manifestDigest,scope:previous.state.scope,scopeRef:previous.state.scopeRef,installationRef:previous.installationRef,state:"active"},scope:requestedScope,scopeRef})).status!=="succeeded"?!1:previous!==void 0&&!replacesPrevious?!0:(await installer.remove({installation:activated.installation,scope:requestedScope,scopeRef})).status==="succeeded"},restoreState=async()=>{let replacesPrevious=previous!==void 0&&`${previous.pluginId}@${previous.pluginVersion}`!=`${activated.installation.pluginId}@${activated.installation.pluginVersion}`,restored=!0;if((previous===void 0||replacesPrevious)&&(restored=(await stateStore.remove({pluginId:activated.installation.pluginId,pluginVersion:activated.installation.pluginVersion,scope:requestedScope,scopeRef}).catch(()=>{}))?.status==="ok"),previous!==void 0){let restoredPrevious=await stateStore.upsert({installation:{version:1,pluginId:previous.pluginId,pluginVersion:previous.pluginVersion,manifestDigest:previous.manifestDigest,scope:previous.state.scope,scopeRef:previous.state.scopeRef,installationRef:previous.installationRef,state:"active"},scope:requestedScope,enabled:previous.state.enabled,...previous.source===void 0?{}:{source:previous.source}}).catch(()=>{});restored=restored&&restoredPrevious?.status==="ok"}return restored},stateFailure=async status=>{let[hostRestored,stateRestored]=await Promise.all([restoreActivatedInstallation().catch(()=>!1),restoreState().catch(()=>!1)]);return response(parsed.command,parsed.format,hostRestored&&stateRestored?status:"failed",safeError(hostRestored&&stateRestored?status==="cancelled"?"cancelled":"state_failed":"installer_failed"))};if(!await releaseArtifact()){phase="installer";let restored=await restoreActivatedInstallation().catch(()=>!1);return response(parsed.command,parsed.format,"failed",safeError(restored?"distribution_failed":"installer_failed"))}if(phase="state",previous&&`${previous.pluginId}@${previous.pluginVersion}`!=`${installed.installation.pluginId}@${installed.installation.pluginVersion}`&&(await stateStore.upsert({installation:{version:1,pluginId:previous.pluginId,pluginVersion:previous.pluginVersion,manifestDigest:previous.manifestDigest,scope:previous.state.scope,scopeRef:previous.state.scopeRef,installationRef:previous.installationRef,state:"retained"},scope:requestedScope,enabled:previous.state.enabled,...previous.source===void 0?{}:{source:previous.source},signal:void 0})).status!=="ok")return await stateFailure("failed");let persisted=await stateStore.upsert({installation:activated.installation,scope:requestedScope,enabled:previous?.state.enabled??!0,...resolved.acquired===void 0?{}:{source:resolved.source},signal});return persisted.status==="cancelled"?await stateFailure("cancelled"):persisted.status!=="ok"?await stateFailure("failed"):response(parsed.command,parsed.format,"succeeded",void 0,{pluginId:activated.installation.pluginId,pluginVersion:activated.installation.pluginVersion,lifecycle:"active",changed:persisted.changed,...resolved.acquired===void 0?{}:{source:resolved.source}})})()}catch(error){transactionError=error}finally{artifactCleanupFailed=!await releaseArtifact()}if(artifactCleanupFailed)return response(parsed.command,parsed.format,"failed",safeError("distribution_failed"));if(transactionError!==void 0)throw transactionError;if(transactionResponse===void 0)throw new Error(t("plugin installation transaction did not complete"));return transactionResponse};if(acquisitionTarget!==void 0){if(options.acquisition===void 0)return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"));phase="distribution";let acquired;try{acquired=await options.acquisition.resolvePackage({ref:acquisitionTarget,signal})}catch(error){if(isCancelled(signal)||error instanceof PluginAcquisitionErrorV1&&error.code==="cancelled")return response(parsed.command,parsed.format,"cancelled",safeError("cancelled"));if(error instanceof PluginAcquisitionErrorV1)return response(parsed.command,parsed.format,"failed",{code:"acquisition_failed",message:error.message});throw error}return checkSignal(signal),await runInstallFlow({manifest:acquired.manifest,source:acquired.source,acquired})}try{requireDependencies(options,requestedScope,scopeRef)}catch{return response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies"))}let identity=parsed.pluginId,packageValue=await options.registry.resolve({pluginId:identity,pluginVersion:parsed.pluginVersion,signal});return checkSignal(signal),!packageValue||packageValue.manifest.id!==identity||parsed.pluginVersion!==void 0&&packageValue.manifest.pluginVersion!==parsed.pluginVersion?response(parsed.command,parsed.format,"failed",safeError("not_found")):await runInstallFlow({manifest:packageValue.manifest,source:packageValue.source,...packageValue.expectedDigest===void 0?{}:{expectedDigest:packageValue.expectedDigest},...packageValue.distribution===void 0?{}:{distribution:packageValue.distribution}})}catch(error){return isCancelled(signal)||error instanceof Error&&error.message==="cancelled"?response(parsed.command,parsed.format,"cancelled",safeError("cancelled")):error instanceof Error&&error.message==="unsupported dependencies"?response(parsed.command,parsed.format,"unsupported",safeError("unsupported_dependencies")):response(parsed.command,parsed.format,"failed",safeError(phase==="registry"?"registry_failed":phase==="distribution"?"distribution_failed":phase==="state"?"state_failed":phase==="selection"?"selection_failed":"installer_failed"))}}finally{releaseInstallTransaction?.()}}return{execute}}async function runPluginEcosystemCliV1(options,input){return await createPluginEcosystemCliV1(options).execute(input)}import{createHash}from"node:crypto";import{join as join8,resolve as resolve3}from"node:path";import{open}from"node:fs/promises";import{isAbsolute as isAbsolute2,join as join6}from"node:path";import{realpathSync as realpathSync2}from"node:fs";import{basename,dirname as dirname4,isAbsolute,join as join5,relative}from"node:path";var stripDevicePrefix=value=>value.replace(/^\\\\\?\\/,""),normalizePath2=value=>{try{return stripDevicePrefix(realpathSync2.native(value))}catch{return}},normalizeWithAncestry=value=>{let missing=[],current=value;for(;;){let normalized=normalizePath2(current);if(normalized!==void 0)return missing.length===0?normalized:join5(normalized,...missing.reverse());let parent=dirname4(current);if(parent===current)return;missing.push(basename(current)),current=parent}};function withinInstallStoreRoot(root,value){if(!isAbsolute(value))return!1;let normalizedRoot=normalizeWithAncestry(root),normalizedValue=normalizeWithAncestry(value),relativePath=relative(normalizedRoot!==void 0&&normalizedValue!==void 0?normalizedRoot:root,normalizedRoot!==void 0&&normalizedValue!==void 0?normalizedValue:value);return relativePath!==""&&!relativePath.startsWith("..")&&!isAbsolute(relativePath)}var NODE_DISK_REGISTRY_SOURCE_VERSION_V1=1,MAX_NODE_DISK_REGISTRY_INDEX_BYTES_V1=1024*1024,MAX_NODE_DISK_REGISTRY_MANIFEST_BYTES_V1=64*1024,MAX_NODE_DISK_REGISTRY_RECORDS_V1=256,INDEX_FILE_V1="index.v1.json",ECOSYSTEM_MANIFEST_FILE_V1="agent-forge.json",CAPABILITY_MANIFEST_FILE_V1="plugin.json",NODE_PACKAGE_FORMAT_VERSION_V1=1,NodeDiskRegistrySourceErrorV1=class extends Error{code;constructor(code,message){super(message),this.name="NodeDiskRegistrySourceErrorV1",this.code=code}},INDEX_KEYS_V1=["installationRef","directory","pluginId","pluginVersion","manifestDigest","scope","scopeRef","state"];function opaqueField(value,max){return typeof value=="string"&&value.length>0&&value.length<=max&&!/[\u0000-\u001f\u007f]/u.test(value)&&!/\s/u.test(value)&&!/^(?:file:|[a-z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(value)}function boundedField(value,max){return typeof value=="string"&&value.length>0&&value.length<=max&&!/[\u0000-\u001f\u007f]/u.test(value)}function validateRecord(root,value,index){if(value===null||typeof value!="object"||Array.isArray(value))throw new NodeDiskRegistrySourceErrorV1("invalid_index",t("Index record {index} is not an object",{index}));let record=value,keys=INDEX_KEYS_V1;if(Object.keys(record).length!==keys.length||keys.some(key=>!(key in record)))throw new NodeDiskRegistrySourceErrorV1("invalid_index",t("Index record {index} has an invalid schema",{index}));if(!opaqueField(record.installationRef,2048)||!boundedField(record.directory,2048)||!boundedField(record.pluginId,256)||!boundedField(record.pluginVersion,256)||!boundedField(record.manifestDigest,512)||!opaqueField(record.scopeRef,2048)||record.scope!=="global"&&record.scope!=="project"||record.state!=="installed"&&record.state!=="active"&&record.state!=="retained"||!withinInstallStoreRoot(root,record.directory))throw new NodeDiskRegistrySourceErrorV1("invalid_index",t("Index record {index} is invalid",{index}));return{installationRef:record.installationRef,directory:record.directory,pluginId:record.pluginId,pluginVersion:record.pluginVersion,manifestDigest:record.manifestDigest,scope:record.scope,scopeRef:record.scopeRef,state:record.state}}function parseIndex(root,raw){let parsed;try{parsed=JSON.parse(raw)}catch{throw new NodeDiskRegistrySourceErrorV1("invalid_index",t("Install store index JSON is invalid"))}if(parsed===null||typeof parsed!="object"||Array.isArray(parsed))throw new NodeDiskRegistrySourceErrorV1("invalid_index",t("Install store index is not an object"));let value=parsed;if(Object.keys(value).length!==2||value.version!==NODE_DISK_REGISTRY_SOURCE_VERSION_V1||!Array.isArray(value.records))throw new NodeDiskRegistrySourceErrorV1("invalid_index",t("Install store index schema is unsupported"));if(value.records.length>MAX_NODE_DISK_REGISTRY_RECORDS_V1)throw new NodeDiskRegistrySourceErrorV1("too_many_records",t("Install store index exceeds the record limit"));return value.records.map((record,index)=>validateRecord(root,record,index))}async function readBoundedFile(path8,maxBytes,label){let handle=await open(path8,"r");try{let stat5=await handle.stat();if(!stat5.isFile()||stat5.size>maxBytes)throw new NodeDiskRegistrySourceErrorV1(label==="index"?"invalid_index":"invalid_manifest",t("{label} exceeds the size limit",{label}));return await handle.readFile("utf8")}finally{await handle.close().catch(()=>{})}}function parseManifest(record,raw){let parsed;try{parsed=JSON.parse(raw)}catch{throw new NodeDiskRegistrySourceErrorV1("invalid_manifest",t("Installed plugin manifest JSON is invalid"))}if(parsed===null||typeof parsed!="object"||Array.isArray(parsed))throw new NodeDiskRegistrySourceErrorV1("invalid_manifest",t("Installed plugin manifest is not an object"));let value={...parsed};if(value.packageFormatVersion!==void 0&&value.packageFormatVersion!==NODE_PACKAGE_FORMAT_VERSION_V1)throw new NodeDiskRegistrySourceErrorV1("invalid_manifest",t("Installed plugin package format is unsupported"));if(delete value.packageFormatVersion,value.id!==record.pluginId||value.pluginVersion!==record.pluginVersion)throw new NodeDiskRegistrySourceErrorV1("identity_mismatch",t("Installed plugin manifest identity does not match index record for {identity}",{identity:`${record.pluginId}@${record.pluginVersion}`}));return value}async function readIndexRecords(rootDirectory,signal){if(signal?.aborted)throw new NodeDiskRegistrySourceErrorV1("cancelled",t("Disk registry source read was cancelled"));let rawIndex;try{rawIndex=await readBoundedFile(join6(rootDirectory,INDEX_FILE_V1),MAX_NODE_DISK_REGISTRY_INDEX_BYTES_V1,"index")}catch(error){if(error instanceof NodeDiskRegistrySourceErrorV1)throw error;if(error instanceof Error&&"code"in error&&error.code==="ENOENT")return;throw new NodeDiskRegistrySourceErrorV1("io_failed",t("Install store index could not be read"))}return parseIndex(rootDirectory,rawIndex)}function createNodeDiskPluginRegistrySourceV1(options){let rootDirectory=options.rootDirectory;if(typeof rootDirectory!="string"||!isAbsolute2(rootDirectory)||rootDirectory.trim()==="")throw new NodeDiskRegistrySourceErrorV1("invalid_configuration",t("Install store root directory must be absolute"));return{version:NODE_DISK_REGISTRY_SOURCE_VERSION_V1,list:async({signal}={})=>{let records=await readIndexRecords(rootDirectory,signal);if(records===void 0)return Object.freeze([]);let envelopes=[];for(let record of records){if(signal?.aborted)throw new NodeDiskRegistrySourceErrorV1("cancelled",t("Disk registry source read was cancelled"));let rawManifest;try{rawManifest=await readBoundedFile(join6(record.directory,ECOSYSTEM_MANIFEST_FILE_V1),MAX_NODE_DISK_REGISTRY_MANIFEST_BYTES_V1,"manifest")}catch(error){throw error instanceof NodeDiskRegistrySourceErrorV1?error:new NodeDiskRegistrySourceErrorV1("io_failed",t("Installed plugin manifest could not be read"))}let manifest=parseManifest(record,rawManifest);envelopes.push({manifest,source:record.installationRef,manifestDigest:record.manifestDigest})}return Object.freeze(envelopes)},resolveCapabilityManifestPath:async({pluginId,pluginVersion,signal})=>{let records=await readIndexRecords(rootDirectory,signal);if(records===void 0)return;let record=records.find(candidate=>candidate.pluginId===pluginId&&candidate.pluginVersion===pluginVersion);if(record===void 0)return;let manifestPath=join6(record.directory,CAPABILITY_MANIFEST_FILE_V1);try{await(await open(manifestPath,"r")).close().catch(()=>{})}catch{return}return manifestPath}}}var PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1=1,MAX_PLUGIN_DISTRIBUTION_DESCRIPTOR_BYTES_V1=16*1024,MAX_PLUGIN_DISTRIBUTION_FIELD_CHARS_V1=2048,MAX_PLUGIN_DISTRIBUTION_METADATA_BYTES_V1=16*1024,MAX_PLUGIN_DISTRIBUTION_ARTIFACT_REF_CHARS_V1=2048,MAX_PLUGIN_DISTRIBUTION_ARTIFACT_BYTES_V1=512*1024*1024,ERROR_MESSAGES={unsupported:"Plugin distribution is unsupported on this host",cancelled:"Plugin distribution operation was cancelled",invalid_descriptor:"Plugin distribution descriptor is invalid",invalid_metadata:"Plugin distribution metadata is invalid",invalid_artifact:"Plugin distribution artifact handle is invalid",source_mismatch:"Plugin distribution source does not match the descriptor",identity_mismatch:"Plugin distribution plugin identity does not match the descriptor",digest_mismatch:"Plugin distribution digest does not match the descriptor",signature_invalid:"Plugin distribution signature was rejected",expired:"Plugin distribution descriptor has expired",size_mismatch:"Plugin distribution size does not match the descriptor",media_type_mismatch:"Plugin distribution media type does not match the descriptor",host_failed:"Plugin distribution host operation failed",release_failed:"Plugin distribution artifact release failed"},PluginDistributionErrorV1=class extends Error{code;constructor(code){super(t(ERROR_MESSAGES[code])),this.name="PluginDistributionErrorV1",this.code=code}},DESCRIPTOR_KEYS=["version","source","pluginId","pluginVersion","manifestDigest","artifactDigest","signature","expiresAt","sizeBytes","mediaType"],METADATA_KEYS=["version","source","pluginId","pluginVersion","manifestDigest","artifactDigest","expiresAt","sizeBytes","mediaType"],ARTIFACT_KEYS=["artifactRef","artifactDigest","sizeBytes","mediaType"];function reject(code){throw new PluginDistributionErrorV1(code)}function hasExactKeys(value,keys){let expected=new Set(keys);return Object.keys(value).every(key=>expected.has(key)&&expected.size===keys.length)&&keys.every(key=>key in value)}function boundedString(value,code){return(typeof value!="string"||value.trim().length===0||value.length>MAX_PLUGIN_DISTRIBUTION_FIELD_CHARS_V1||/[\u0000-\u001f\u007f]/u.test(value))&&reject(code),value}function identityString(value,code){let result=boundedString(value,code);return/\s/u.test(result)&&reject(code),result}function sourceString(value,code){let source=boundedString(value,code);if((/\s/u.test(source)||/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(source))&&reject(code),/^https?:\/\//iu.test(source))try{let parsed=new URL(source);(parsed.username!==""||parsed.password!=="")&&(parsed.username="",parsed.password=""),parsed.search="",parsed.hash="";let pathname=parsed.pathname.length>512?`${parsed.pathname.slice(0,509)}...`:parsed.pathname;return`${parsed.origin}${pathname||"/"}`}catch{reject(code)}return source}function digestString(value,code){let digest=identityString(value,code);return/^(?:[a-z][a-z0-9+.-]{0,15}:[A-Za-z0-9._~-]{1,128}|[0-9a-f]{16,128})$/u.test(digest)||reject(code),digest}function signatureString(value){let signature=boundedString(value,"invalid_descriptor");return(signature.length>512||/\s/u.test(signature))&&reject("invalid_descriptor"),signature}function expiryString(value,code){let expiry=boundedString(value,code);/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/u.test(expiry)||reject(code);let timestamp=Date.parse(expiry);return(!Number.isFinite(timestamp)||new Date(timestamp).toISOString()!==expiry)&&reject(code),expiry}function positiveSize(value,code){return(typeof value!="number"||!Number.isSafeInteger(value)||value<1||value>MAX_PLUGIN_DISTRIBUTION_ARTIFACT_BYTES_V1)&&reject(code),value}function mediaTypeString(value,code){let mediaType=boundedString(value,code).toLowerCase();return(mediaType.length>256||!/^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+(?:\s*;\s*[a-z0-9!#$&^_.+-]+=[a-z0-9!#$&^_.+-]+)*$/u.test(mediaType))&&reject(code),mediaType}function serializedBytes(value,code){try{let serialized=JSON.stringify(value);return serialized===void 0&&reject(code),new TextEncoder().encode(serialized).byteLength}catch{reject(code)}}function descriptorValue(value){(!isPlainRecord(value)||!hasExactKeys(value,DESCRIPTOR_KEYS))&&reject("invalid_descriptor"),value.version!==PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1&&reject("invalid_descriptor");let descriptor={version:PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1,source:sourceString(value.source,"invalid_descriptor"),pluginId:identityString(value.pluginId,"invalid_descriptor"),pluginVersion:identityString(value.pluginVersion,"invalid_descriptor"),manifestDigest:digestString(value.manifestDigest,"invalid_descriptor"),artifactDigest:digestString(value.artifactDigest,"invalid_descriptor"),signature:signatureString(value.signature),expiresAt:expiryString(value.expiresAt,"invalid_descriptor"),sizeBytes:positiveSize(value.sizeBytes,"invalid_descriptor"),mediaType:mediaTypeString(value.mediaType,"invalid_descriptor")};return serializedBytes(descriptor,"invalid_descriptor")>MAX_PLUGIN_DISTRIBUTION_DESCRIPTOR_BYTES_V1&&reject("invalid_descriptor"),detachedFreeze(descriptor)}function metadataValue(value){(!isPlainRecord(value)||!hasExactKeys(value,METADATA_KEYS))&&reject("invalid_metadata"),value.version!==PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1&&reject("invalid_metadata");let metadata={version:PLUGIN_DISTRIBUTION_CONTRACT_VERSION_V1,source:sourceString(value.source,"invalid_metadata"),pluginId:identityString(value.pluginId,"invalid_metadata"),pluginVersion:identityString(value.pluginVersion,"invalid_metadata"),manifestDigest:digestString(value.manifestDigest,"invalid_metadata"),artifactDigest:digestString(value.artifactDigest,"invalid_metadata"),expiresAt:expiryString(value.expiresAt,"invalid_metadata"),sizeBytes:positiveSize(value.sizeBytes,"invalid_metadata"),mediaType:mediaTypeString(value.mediaType,"invalid_metadata")};return serializedBytes(metadata,"invalid_metadata")>MAX_PLUGIN_DISTRIBUTION_METADATA_BYTES_V1&&reject("invalid_metadata"),detachedFreeze(metadata)}function artifactHandleValue(value){(!isPlainRecord(value)||!hasExactKeys(value,ARTIFACT_KEYS))&&reject("invalid_artifact");let artifact={artifactRef:boundedString(value.artifactRef,"invalid_artifact"),artifactDigest:digestString(value.artifactDigest,"invalid_artifact"),sizeBytes:positiveSize(value.sizeBytes,"invalid_artifact"),mediaType:mediaTypeString(value.mediaType,"invalid_artifact")};return(/[\s\u0000-\u001f\u007f]/u.test(artifact.artifactRef)||/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(artifact.artifactRef)||artifact.artifactRef.length>MAX_PLUGIN_DISTRIBUTION_ARTIFACT_REF_CHARS_V1)&&reject("invalid_artifact"),detachedFreeze(artifact)}function assertDescriptorMetadataMatch(descriptor,metadata){metadata.source!==descriptor.source&&reject("source_mismatch"),(metadata.pluginId!==descriptor.pluginId||metadata.pluginVersion!==descriptor.pluginVersion)&&reject("identity_mismatch"),(metadata.manifestDigest!==descriptor.manifestDigest||metadata.artifactDigest!==descriptor.artifactDigest)&&reject("digest_mismatch"),metadata.expiresAt!==descriptor.expiresAt&&reject("expired"),metadata.sizeBytes!==descriptor.sizeBytes&&reject("size_mismatch"),metadata.mediaType!==descriptor.mediaType&&reject("media_type_mismatch")}function assertArtifactMatch(descriptor,artifact){artifact.artifactDigest!==descriptor.artifactDigest&&reject("digest_mismatch"),artifact.sizeBytes!==descriptor.sizeBytes&&reject("size_mismatch"),artifact.mediaType!==descriptor.mediaType&&reject("media_type_mismatch")}function isCancelled2(error,signal){return signal?.aborted===!0||error instanceof Error&&(error.name==="AbortError"||error.name==="AbortSignalError")}function assertNotExpired(descriptor,now){let current;try{current=now()}catch{reject("expired")}Number.isFinite(current)||reject("expired"),Date.parse(descriptor.expiresAt)<=current&&reject("expired")}async function verifyDescriptor(descriptor,verifySignature,now,signal){signal?.aborted&&reject("cancelled"),assertNotExpired(descriptor,now),verifySignature===void 0&&reject("unsupported");let verification;try{verification=await verifySignature({descriptor})}catch{reject("signature_invalid")}signal?.aborted&&reject("cancelled"),(!isPlainRecord(verification)||verification.status!=="accepted")&&reject("signature_invalid")}function createPluginDistributionV1(options={}){let verifySignature=options.verifySignature??options.verify,now=options.now??(()=>Date.now()),resolveMetadataForDescriptor=async(descriptor,signal)=>{signal?.aborted&&reject("cancelled"),options.host?.resolveMetadata===void 0&&reject("unsupported");let result;try{result=await options.host.resolveMetadata({descriptor,signal})}catch(error){isCancelled2(error,signal)&&reject("cancelled"),reject("host_failed")}signal?.aborted&&reject("cancelled");let metadata=metadataValue(result);return assertDescriptorMetadataMatch(descriptor,metadata),assertNotExpired(descriptor,now),metadata};return{validateDescriptor(input){return descriptorValue(input)},resolveMetadata:async input=>{let descriptor=descriptorValue(input.descriptor);return await verifyDescriptor(descriptor,verifySignature,now,input.signal),resolveMetadataForDescriptor(descriptor,input.signal)},acquireArtifact:async input=>{let descriptor=descriptorValue(input.descriptor);await verifyDescriptor(descriptor,verifySignature,now,input.signal),options.host?.acquireArtifact===void 0&&reject("unsupported");let metadata=input.metadata===void 0?await resolveMetadataForDescriptor(descriptor,input.signal):metadataValue(input.metadata);assertDescriptorMetadataMatch(descriptor,metadata),assertNotExpired(descriptor,now);let result,acquired;try{result=await options.host.acquireArtifact({descriptor,metadata,signal:input.signal});let handle=artifactHandleValue(result);return acquired=detachedFreeze({...metadata,artifactRef:handle.artifactRef}),assertArtifactMatch(descriptor,handle),assertNotExpired(descriptor,now),input.signal?.aborted&&reject("cancelled"),acquired}catch(error){if(acquired!==void 0&&options.host.releaseArtifact!==void 0&&await options.host.releaseArtifact({artifact:acquired}).catch(()=>{}),error instanceof PluginDistributionErrorV1)throw error;isCancelled2(error,input.signal)&&reject("cancelled"),reject("host_failed")}},releaseArtifact:async input=>{input.signal?.aborted&&reject("cancelled"),options.host?.releaseArtifact===void 0&&reject("unsupported");let value=input.artifact;(!isPlainRecord(value)||!hasExactKeys(value,[...METADATA_KEYS,"artifactRef"]))&&reject("invalid_artifact");let metadataInput=Object.fromEntries(METADATA_KEYS.map(key=>[key,value[key]])),artifact={...metadataValue(metadataInput),artifactRef:artifactHandleValue({artifactRef:value.artifactRef,artifactDigest:value.artifactDigest,sizeBytes:value.sizeBytes,mediaType:value.mediaType}).artifactRef};try{await options.host.releaseArtifact({artifact:detachedFreeze(artifact),signal:input.signal})}catch(error){isCancelled2(error,input.signal)&&reject("cancelled"),reject("release_failed")}input.signal?.aborted&&reject("cancelled")}}}var MAX_PLUGIN_REGISTRY_MANIFEST_BYTES_V1=64*1024,MAX_PLUGIN_REGISTRY_MANIFESTS_V1=256,MAX_PLUGIN_REGISTRY_PAYLOAD_BYTES_V1=4*1024*1024,MAX_PLUGIN_REGISTRY_SOURCE_CHARS_V1=2048,MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1=512,PluginRegistryErrorV1=class extends Error{code;cause;constructor(code,message,cause){super(message,cause===void 0?void 0:{cause}),this.name="PluginRegistryErrorV1",this.code=code,this.cause=cause}};function isAbortLike(error,signal){return signal?.aborted===!0||error instanceof Error&&(error.name==="AbortError"||error.name==="AbortSignalError")}function boundedString2(value,label,max,code="invalid_source"){if(typeof value!="string"||value.trim()===""||value.length>max||/[\u0000-\u001f]/u.test(value))throw new PluginRegistryErrorV1(code,t("{label} must be a non-empty bounded string",{label}));return value}function assertAllowedKeys(value,allowed,label){let expected=new Set(allowed);if(Object.keys(value).some(key=>!expected.has(key)))throw new PluginRegistryErrorV1("invalid_manifest",t("{label} contains an unsupported field",{label}))}function validateSource(source){let value=boundedString2(source,"source",MAX_PLUGIN_REGISTRY_SOURCE_CHARS_V1);if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/iu.test(value)||/\s/u.test(value))throw new PluginRegistryErrorV1("invalid_source",t("Plugin registry source must be an opaque URI, not a local path"));if(/^https?:\/\//iu.test(value))try{let parsed=new URL(value),pathname=parsed.pathname.length>512?`${parsed.pathname.slice(0,511)}\u2026`:parsed.pathname;return`${parsed.origin}${pathname||"/"}`}catch(error){throw new PluginRegistryErrorV1("invalid_source",t("Plugin registry source URL is invalid"),error)}return value}function validateManifest(manifest){if(typeof manifest!="object"||manifest===null||Array.isArray(manifest))throw new PluginRegistryErrorV1("invalid_manifest",t("Registry manifest must be an object"));let value=manifest;if(assertAllowedKeys(value,["id","pluginVersion","apiVersion","minHostVersion","maxHostVersion","capabilityRefs","requires","platform","testOnly"],"Registry manifest"),typeof value.id!="string"||value.id.trim()===""||value.id.length>256)throw new PluginRegistryErrorV1("invalid_manifest",t("Registry manifest id is invalid"));if(typeof value.pluginVersion!="string"||value.pluginVersion.trim()===""||value.pluginVersion.length>256)throw new PluginRegistryErrorV1("invalid_manifest",t("Registry manifest pluginVersion is invalid"));if(typeof value.apiVersion!="string"||value.apiVersion.trim()===""||value.apiVersion.length>256)throw new PluginRegistryErrorV1("invalid_manifest",t("Registry manifest apiVersion is invalid"));if(value.minHostVersion===void 0&&value.maxHostVersion===void 0)throw new PluginRegistryErrorV1("invalid_manifest",t("Published plugins must declare host version compatibility range: set minHostVersion and/or maxHostVersion"));let bytes;try{bytes=new TextEncoder().encode(JSON.stringify(manifest)).byteLength}catch(error){throw new PluginRegistryErrorV1("invalid_manifest",t("Registry manifest cannot be serialized"),error)}if(bytes>MAX_PLUGIN_REGISTRY_MANIFEST_BYTES_V1)throw new PluginRegistryErrorV1("payload_too_large",t("Registry manifest exceeds the size limit"));return Object.freeze({...value})}function validateEnvelope(value){if(typeof value!="object"||value===null||Array.isArray(value))throw new PluginRegistryErrorV1("invalid_manifest",t("Registry response entry must be an object"));let entry=value;assertAllowedKeys(entry,["manifest","source","manifestDigest","signature","distribution"],"Registry response entry");let manifest=validateManifest(entry.manifest),source=validateSource(entry.source),manifestDigest=boundedString2(entry.manifestDigest,"manifestDigest",MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1);entry.signature!==void 0&&boundedString2(entry.signature,"signature",MAX_PLUGIN_REGISTRY_PROOF_CHARS_V1);let distribution;if(entry.distribution!==void 0){try{distribution=createPluginDistributionV1().validateDescriptor(entry.distribution)}catch(error){throw new PluginRegistryErrorV1("invalid_manifest",t("Registry distribution descriptor is invalid"),error)}if(distribution.pluginId!==manifest.id||distribution.pluginVersion!==manifest.pluginVersion||distribution.manifestDigest!==manifestDigest)throw new PluginRegistryErrorV1("invalid_manifest",t("Registry distribution descriptor does not match the manifest identity"))}return Object.freeze({manifest,source,manifestDigest,...entry.signature===void 0?{}:{signature:entry.signature},...distribution===void 0?{}:{distribution}})}function validateMax(value){let max=value??MAX_PLUGIN_REGISTRY_MANIFESTS_V1;if(!Number.isSafeInteger(max)||max<1||max>MAX_PLUGIN_REGISTRY_MANIFESTS_V1)throw new PluginRegistryErrorV1("invalid_limit",t("maxManifests must be an integer between 1 and {max}",{max:MAX_PLUGIN_REGISTRY_MANIFESTS_V1}));return max}async function validateSourceProof(entry,verifier,sourceVerifier){let actualDigest=pluginManifestDigestV1(entry.manifest);if(entry.manifestDigest!==actualDigest)throw new PluginRegistryErrorV1("invalid_digest",t("Manifest digest mismatch for {identity}",{identity:`${entry.manifest.id}@${entry.manifest.pluginVersion}`}));try{let result2=await verifier.verify({manifest:entry.manifest,source:entry.source,manifestDigest:actualDigest,expectedDigest:entry.manifestDigest,signature:entry.signature});if(result2.status!=="accepted")throw new PluginRegistryErrorV1("source_rejected",result2.reason??t("Registry source proof was rejected"))}catch(error){throw error instanceof PluginRegistryErrorV1?error:new PluginRegistryErrorV1("source_rejected",t("Registry source proof was rejected"),error)}let result;try{result=sourceVerifier({pluginId:entry.manifest.id,pluginVersion:entry.manifest.pluginVersion,source:entry.source,manifestDigest:actualDigest})}catch(error){throw new PluginRegistryErrorV1("source_rejected",t("Plugin source verifier failed"),error)}if(result.status!=="accepted")throw new PluginRegistryErrorV1("source_rejected",result.reason??t("Plugin source was rejected"))}function sourceIdentity(entries){return[...new Set(entries.map(entry=>entry.source))].sort((left,right)=>left.localeCompare(right)).join(",")}function createPluginRegistryV1(options){let maxManifests=validateMax(options.maxManifests);if(options.source===void 0||typeof options.source.list!="function")throw new PluginRegistryErrorV1("invalid_source",t("Registry source must provide list()"));if(options.source.source!==void 0&&validateSource(options.source.source),options.verify===void 0||typeof options.verify.verify!="function")throw new PluginRegistryErrorV1("source_rejected",t("Registry source/digest verifier is required"));if(options.sourceVerifier===void 0||typeof options.sourceVerifier!="function")throw new PluginRegistryErrorV1("source_rejected",t("Registry source verifier is required"));let load=async(input={})=>{if(input.signal?.aborted)throw new PluginRegistryErrorV1("cancelled",t("Plugin registry operation was cancelled"));let raw;try{raw=await options.source.list({signal:input.signal})}catch(error){throw isAbortLike(error,input.signal)?new PluginRegistryErrorV1("cancelled",t("Plugin registry operation was cancelled"),error):new PluginRegistryErrorV1("source_rejected",t("Plugin registry source failed"),error)}if(input.signal?.aborted)throw new PluginRegistryErrorV1("cancelled",t("Plugin registry operation was cancelled"));if(!Array.isArray(raw))throw new PluginRegistryErrorV1("invalid_manifest",t("Registry source must return an array"));if(raw.length>maxManifests)throw new PluginRegistryErrorV1("too_many_manifests",t("Registry response contains too many manifests"));let entries=raw.map(validateEnvelope);if(entries.reduce((total,entry)=>{let manifestBytes=new TextEncoder().encode(JSON.stringify(entry.manifest)).byteLength,distributionBytes=entry.distribution===void 0?0:new TextEncoder().encode(JSON.stringify(entry.distribution)).byteLength;return total+manifestBytes+distributionBytes+new TextEncoder().encode(entry.source).byteLength+new TextEncoder().encode(entry.manifestDigest).byteLength+(entry.signature===void 0?0:new TextEncoder().encode(entry.signature).byteLength)},0)>MAX_PLUGIN_REGISTRY_PAYLOAD_BYTES_V1)throw new PluginRegistryErrorV1("payload_too_large",t("Registry response exceeds the aggregate size limit"));let seen=new Set,accepted=[],rejected=[];for(let entry of entries){let identity=`${entry.manifest.id}@${entry.manifest.pluginVersion}`;if(seen.has(identity))throw new PluginRegistryErrorV1("invalid_manifest",t("Duplicate registry manifest: {identity}",{identity}));seen.add(identity);try{await validateSourceProof(entry,options.verify,options.sourceVerifier)}catch(error){if(!(error instanceof PluginRegistryErrorV1)||error.cause!==void 0||error.code!=="source_rejected"&&error.code!=="invalid_digest")throw error;rejected.push({pluginId:entry.manifest.id,pluginVersion:entry.manifest.pluginVersion,code:error.code==="invalid_digest"?"digest_rejected":"source_rejected",reason:error.code==="invalid_digest"?"Manifest digest mismatch":"Registry source proof was rejected"});continue}if(input.signal?.aborted)throw new PluginRegistryErrorV1("cancelled",t("Plugin registry operation was cancelled"));accepted.push(entry)}let manifests2=accepted.map(entry=>entry.manifest),catalog=buildPluginCatalogV1({manifests:manifests2,host:options.host,availableCapabilities:options.availableCapabilities,maxEntries:maxManifests}),publicEntries=Object.freeze([...accepted].sort((left,right)=>{let idOrder=left.manifest.id.localeCompare(right.manifest.id);return idOrder===0?comparePluginVersionsV1(right.manifest.pluginVersion,left.manifest.pluginVersion):idOrder}).map(entry=>Object.freeze({pluginId:entry.manifest.id,pluginVersion:entry.manifest.pluginVersion,source:entry.source,manifestDigest:entry.manifestDigest,signed:entry.signature!==void 0}))),catalogByIdentity=new Map(catalog.entries.map(entry=>[`${entry.pluginId}@${entry.pluginVersion}`,entry])),verified=Object.freeze(publicEntries.flatMap(entry=>{let catalogEntry2=catalogByIdentity.get(`${entry.pluginId}@${entry.pluginVersion}`);if(catalogEntry2?.resolution.status==="installed-ready")return[{...entry,resolutionStatus:"installed-ready"}];let reason=catalogEntry2?.resolution.diagnostics[0]?.message??"Plugin is incompatible with this host";return rejected.push({pluginId:entry.pluginId,pluginVersion:entry.pluginVersion,code:"incompatible",reason}),[]}));return{accepted:Object.freeze(accepted),snapshot:Object.freeze({version:1,source:options.source.source===void 0?sourceIdentity(accepted):validateSource(options.source.source),entries:publicEntries,catalog,verified,rejected:Object.freeze(rejected)})}};return{list:async(input={})=>(await load(input)).snapshot,listManifests:async(input={})=>{let loaded=await load(input);return Object.freeze(loaded.snapshot.catalog.entries.flatMap(catalogEntry2=>loaded.accepted.filter(entry=>entry.manifest.id===catalogEntry2.pluginId&&entry.manifest.pluginVersion===catalogEntry2.pluginVersion).map(entry=>entry.manifest)))},resolve:async input=>{let loaded=await load({signal:input.signal}),verified=new Set(loaded.snapshot.verified.map(entry2=>`${entry2.pluginId}@${entry2.pluginVersion}`)),identity=input.pluginVersion===void 0?loaded.snapshot.catalog.entries.find(candidate=>candidate.pluginId===input.pluginId&&candidate.resolution.status==="installed-ready"&&verified.has(`${candidate.pluginId}@${candidate.pluginVersion}`)):loaded.snapshot.catalog.entries.find(candidate=>candidate.pluginId===input.pluginId&&candidate.pluginVersion===input.pluginVersion&&candidate.resolution.status==="installed-ready"&&verified.has(`${candidate.pluginId}@${candidate.pluginVersion}`)),entry=identity===void 0?void 0:loaded.accepted.find(candidate=>candidate.manifest.id===identity.pluginId&&candidate.manifest.pluginVersion===identity.pluginVersion);if(entry!==void 0)return Object.freeze({manifest:entry.manifest,source:entry.source,expectedDigest:entry.manifestDigest,...entry.distribution===void 0?{}:{distribution:entry.distribution}})}}}import{randomUUID}from"node:crypto";import{mkdir,readFile as readFile3,rename,unlink,writeFile}from"node:fs/promises";import{basename as basename2,dirname as dirname5,isAbsolute as isAbsolute3,join as join7,resolve as resolve2}from"node:path";var PLUGIN_STATE_SNAPSHOT_VERSION_V1=1,MAX_PLUGIN_STATE_RECORDS_V1=256,MAX_PLUGIN_STATE_STRING_CHARS_V1=4096,MAX_PLUGIN_STATE_ID_CHARS_V1=256,MAX_PLUGIN_STATE_INSTALLATION_REF_CHARS_V1=2048,MAX_PLUGIN_STATE_SOURCE_CHARS_V1=128,EMPTY_SNAPSHOT=Object.freeze({version:PLUGIN_STATE_SNAPSHOT_VERSION_V1,records:Object.freeze([])});function diagnostic3(code,message,identity){return Object.freeze(identity===void 0?{code,message}:{code,message,identity})}function isAbortError(error){return error instanceof Error&&(error.name==="AbortError"||error.name==="AbortSignalError")}function isMissingError(error){return typeof error!="object"||error===null?!1:"code"in error&&error.code==="ENOENT"}function validateFilePath(value){if(typeof value!="string"||value.trim()===""||value.length>MAX_PLUGIN_STATE_STRING_CHARS_V1)throw new Error(t("invalid plugin state file path"));if(value.includes("\0")||/[\u0000-\u001f]/u.test(value))throw new Error(t("invalid plugin state file path"));if(/^file:/iu.test(value)||/^[a-z][a-z\d+.-]*:/iu.test(value)&&!/^[a-z]:[\\/]/iu.test(value))throw new Error(t("invalid plugin state file path"));let normalized=isAbsolute3(value)?value:resolve2(value);if(basename2(normalized).length===0||basename2(normalized)==="."||basename2(normalized)==="..")throw new Error(t("invalid plugin state file path"));return normalized}function validateOpaqueInstallationRef(value){if(typeof value!="string"||value.trim()===""||value.length>MAX_PLUGIN_STATE_INSTALLATION_REF_CHARS_V1)throw new Error("invalid installation reference");if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/u.test(value)||/\s/u.test(value))throw new Error("invalid installation reference");if(value.includes("\0")||/[\u0000-\u001f]/u.test(value))throw new Error("invalid installation reference");return value}function validateScopeRef(scope,value){if(typeof value!="string"||value.trim()===""||value.length>MAX_PLUGIN_SCOPE_REF_CHARS_V1)throw new Error(t("invalid plugin scope reference"));if(/^(?:file:|[a-zA-Z]:[\\/]|[\\/]{1,2}|\\\\)/u.test(value)||/\s/u.test(value))throw new Error(t("invalid plugin scope reference"));if(value.includes("\0")||/[\u0000-\u001f]/u.test(value))throw new Error(t("invalid plugin scope reference"));if(scope==="global"&&value!==DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1)throw new Error(t("invalid plugin scope reference"));return value}function validateString(value,label,max=MAX_PLUGIN_STATE_STRING_CHARS_V1){if(typeof value!="string"||value.trim().length===0||value.length>max||/[\u0000-\u001f]/u.test(value))throw new Error(t("{label} is invalid",{label}));return value}function validateSourceLabel(value){if(typeof value!="string"||value.length===0||value.length>MAX_PLUGIN_STATE_SOURCE_CHARS_V1||!/^[a-z][a-z0-9.:[\]_/@-]*$/u.test(value))throw new Error(t("record source label is invalid"));return value}function identityOf(record){return`${record.state.scope}:${record.state.scopeRef}:${record.pluginId}@${record.pluginVersion}`}function isObject(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function hasExactKeys2(value,keys){let expected=new Set(keys);return Object.keys(value).length===expected.size&&Object.keys(value).every(key=>expected.has(key))}function validateRecord2(value){let requiredKeys=["pluginId","pluginVersion","manifestDigest","installationRef","state"],allowedKeys=new Set([...requiredKeys,"source"]);if(!isObject(value)||Object.keys(value).some(key=>!allowedKeys.has(key)))throw new Error(t("record schema is invalid"));for(let key of requiredKeys)if(!(key in value))throw new Error(t("record schema is invalid"));let pluginId=validateString(value.pluginId,"pluginId",MAX_PLUGIN_STATE_ID_CHARS_V1),pluginVersion=validateString(value.pluginVersion,"pluginVersion",MAX_PLUGIN_STATE_ID_CHARS_V1),manifestDigest=validateString(value.manifestDigest,"manifestDigest"),installationRef=validateOpaqueInstallationRef(value.installationRef),source=value.source===void 0?void 0:validateSourceLabel(value.source);if(!isObject(value.state)||!hasExactKeys2(value.state,["scope","scopeRef","enabled","lifecycle"]))throw new Error(t("state schema is invalid"));if(value.state.scope!=="global"&&value.state.scope!=="project")throw new Error(t("state scope is invalid"));let scopeRef=validateScopeRef(value.state.scope,value.state.scopeRef);if(typeof value.state.enabled!="boolean")throw new Error(t("state enabled flag is invalid"));if(value.state.lifecycle!=="installed"&&value.state.lifecycle!=="active"&&value.state.lifecycle!=="retained")throw new Error(t("state lifecycle is invalid"));return Object.freeze({pluginId,pluginVersion,manifestDigest,installationRef,...source===void 0?{}:{source},state:Object.freeze({scope:value.state.scope,scopeRef,enabled:value.state.enabled,lifecycle:value.state.lifecycle})})}function validateSnapshot(value){if(!isObject(value)||!hasExactKeys2(value,["version","records"]))throw new Error(t("snapshot schema is invalid"));if(value.version!==PLUGIN_STATE_SNAPSHOT_VERSION_V1)throw new Error(t("snapshot version is unsupported"));if(!Array.isArray(value.records))throw new Error(t("records must be an array"));if(value.records.length>MAX_PLUGIN_STATE_RECORDS_V1)throw new Error("too many plugin state records");let records=value.records.map(validateRecord2),identities=new Set;for(let record of records){let identity=identityOf(record);if(identities.has(identity))throw new Error(`duplicate identity: ${identity}`);identities.add(identity)}return records.sort((left,right)=>identityOf(left).localeCompare(identityOf(right))),Object.freeze({version:PLUGIN_STATE_SNAPSHOT_VERSION_V1,records:Object.freeze(records)})}function invalidFromError(error){let message=error instanceof Error?error.message:"plugin state schema is invalid",duplicatePrefix="duplicate identity: ";return message.startsWith(duplicatePrefix)?diagnostic3("duplicate_identity",message,message.slice(duplicatePrefix.length)):diagnostic3(message==="too many plugin state records"?"too_many_records":message==="invalid installation reference"?"invalid_installation_ref":"invalid_schema",message)}function defaultFileSystem(){return{readFile:async path8=>await readFile3(path8,"utf8"),mkdir:async path8=>{await mkdir(path8,{recursive:!0})},writeFile:async(path8,data)=>{await writeFile(path8,data,"utf8")},rename,unlink}}function cancelledResult(){return Object.freeze({status:"cancelled",diagnostics:Object.freeze([diagnostic3("cancelled","Plugin state operation was cancelled")])})}function sortRecords(records){return Object.freeze([...records].sort((left,right)=>identityOf(left).localeCompare(identityOf(right))))}function makeRecord(installation,scope,enabled,source){if(installation.version!==1)throw new Error("plugin installation handle is invalid");let pluginId=validateString(installation.pluginId,"pluginId",MAX_PLUGIN_STATE_ID_CHARS_V1),pluginVersion=validateString(installation.pluginVersion,"pluginVersion",MAX_PLUGIN_STATE_ID_CHARS_V1),manifestDigest=validateString(installation.manifestDigest,"manifestDigest"),installationRef=validateOpaqueInstallationRef(installation.installationRef);if(scope!=="global"&&scope!=="project")throw new Error(t("state scope is invalid"));if(installation.scope!==scope)throw new Error(t("installation scope does not match state scope"));let scopeRef=validateScopeRef(scope,scope==="global"?installation.scopeRef??DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1:installation.scopeRef);if(typeof enabled!="boolean")throw new Error(t("state enabled flag is invalid"));let sourceLabel=source===void 0?void 0:validateSourceLabel(source);return Object.freeze({pluginId,pluginVersion,manifestDigest,installationRef,...sourceLabel===void 0?{}:{source:sourceLabel},state:Object.freeze({scope,scopeRef,enabled,lifecycle:installation.state})})}function createPluginStateStoreV1(options){let filePath=validateFilePath(options.filePath),fileSystem=options.fileSystem??defaultFileSystem();async function read(signal){if(signal?.aborted)return cancelledResult();let content;try{content=await fileSystem.readFile(filePath)}catch(error){if(isMissingError(error))return Object.freeze({status:"missing",snapshot:EMPTY_SNAPSHOT});if(isAbortError(error)||signal?.aborted)return cancelledResult();throw error}if(signal?.aborted)return cancelledResult();let parsed;try{parsed=JSON.parse(content)}catch{return Object.freeze({status:"invalid",diagnostics:Object.freeze([diagnostic3("invalid_json","plugin state JSON is invalid")])})}try{return Object.freeze({status:"ok",snapshot:validateSnapshot(parsed)})}catch(error){return Object.freeze({status:"invalid",diagnostics:Object.freeze([invalidFromError(error)])})}}async function write(snapshot2,signal){if(signal?.aborted)return cancelledResult();let parent=dirname5(filePath),temporaryPath=join7(parent,`.${basename2(filePath)}.${randomUUID()}.tmp`);try{return await fileSystem.mkdir(parent),signal?.aborted||(await fileSystem.writeFile(temporaryPath,`${JSON.stringify(snapshot2)}
216
216
  `),signal?.aborted)?cancelledResult():(await fileSystem.rename(temporaryPath,filePath),Object.freeze({status:"ok",snapshot:snapshot2,changed:!0}))}finally{try{await fileSystem.unlink(temporaryPath)}catch{}}}let mutationTail=Promise.resolve();function enqueueMutation(operation){let result=mutationTail.then(operation,operation);return mutationTail=result.then(()=>{},()=>{}),result}return{read:async({signal}={})=>await read(signal),upsert:input=>enqueueMutation(async()=>{let record;try{record=makeRecord(input.installation,input.scope,input.enabled,input.source)}catch(error){return Object.freeze({status:"invalid",diagnostics:Object.freeze([invalidFromError(error)])})}let current=await read(input.signal);if(current.status!=="ok"&&current.status!=="missing")return current;if(input.signal?.aborted)return cancelledResult();let records=current.snapshot.records.filter(candidate=>identityOf(candidate)!==identityOf(record));if(records.length>=MAX_PLUGIN_STATE_RECORDS_V1&&!current.snapshot.records.some(candidate=>identityOf(candidate)===identityOf(record)))return Object.freeze({status:"invalid",diagnostics:Object.freeze([diagnostic3("too_many_records","too many plugin state records")])});let snapshot2=Object.freeze({version:PLUGIN_STATE_SNAPSHOT_VERSION_V1,records:sortRecords([...records,record])});return await write(snapshot2,input.signal)}),remove:input=>enqueueMutation(async()=>{let pluginId,pluginVersion,scope,scopeRef;try{if(pluginId=validateString(input.pluginId,"pluginId",MAX_PLUGIN_STATE_ID_CHARS_V1),pluginVersion=validateString(input.pluginVersion,"pluginVersion",MAX_PLUGIN_STATE_ID_CHARS_V1),input.scope!=="global"&&input.scope!=="project")throw new Error(t("state scope is invalid"));scope=input.scope,scopeRef=validateScopeRef(scope,input.scopeRef)}catch(error){return Object.freeze({status:"invalid",diagnostics:Object.freeze([invalidFromError(error)])})}let current=await read(input.signal);if(current.status!=="ok"&&current.status!=="missing")return current;if(input.signal?.aborted)return cancelledResult();let identity=`${scope}:${scopeRef}:${pluginId}@${pluginVersion}`,records=current.snapshot.records.filter(candidate=>identityOf(candidate)!==identity);if(records.length===current.snapshot.records.length)return Object.freeze({status:"ok",snapshot:current.snapshot,changed:!1});let snapshot2=Object.freeze({version:PLUGIN_STATE_SNAPSHOT_VERSION_V1,records:sortRecords(records)});return await write(snapshot2,input.signal)})}}var DEFAULT_PLUGIN_INSTALL_STORE_DIR_V1="plugin-install-store-v1",DEFAULT_PLUGIN_STATE_FILE_V1="plugin-state.json";function projectPluginScopeRefV1(cwd){let canonicalPath=resolve3(cwd),identityPath=process.platform==="win32"?canonicalPath.toLowerCase():canonicalPath;return`project:sha256:${createHash("sha256").update(identityPath).digest("hex")}`}function defaultPluginInstallStoreDirectoryV1(agentDir){return join8(agentDir,DEFAULT_PLUGIN_INSTALL_STORE_DIR_V1)}function defaultPluginInstallStoreInstanceRootV1(agentDir){return join8(defaultPluginInstallStoreDirectoryV1(agentDir),"agent-forge-plugin-install-store-v1")}function defaultPluginHostFactsV1(){return{os:process.platform==="win32"?"windows":process.platform==="darwin"?"macos":process.platform,arch:process.arch,runtime:[{name:"node",version:process.versions.node}],apiVersion:"1",hostFeatures:[]}}function digestOnlyVerifierV1(){return{verify:({manifestDigest,expectedDigest:expectedDigest2})=>expectedDigest2===void 0||expectedDigest2===manifestDigest?{status:"accepted"}:{status:"rejected",reason:"Manifest digest does not match the expected digest"}}}function installStoreSourceVerifierV1(){return()=>({status:"accepted"})}function createDefaultActivePluginBindingsResolverV1(){return async input=>{let registrySource=createNodeDiskPluginRegistrySourceV1({rootDirectory:defaultPluginInstallStoreInstanceRootV1(input.agentDir)}),registry=createPluginRegistryV1({source:registrySource,host:defaultPluginHostFactsV1(),verify:digestOnlyVerifierV1(),sourceVerifier:installStoreSourceVerifierV1()});return await resolveActivePluginBindingsForScopesV1({registry,...registrySource.resolveCapabilityManifestPath===void 0?{}:{resolveInstallationManifestPath:registrySource.resolveCapabilityManifestPath},project:{stateStore:createPluginStateStoreV1({filePath:join8(input.cwd,CONFIG_DIR_NAME,DEFAULT_PLUGIN_STATE_FILE_V1)}),scope:"project",scopeRef:projectPluginScopeRefV1(input.cwd)},global:{stateStore:createPluginStateStoreV1({filePath:join8(input.agentDir,DEFAULT_PLUGIN_STATE_FILE_V1)}),scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1}})}}import{join as join13}from"node:path";import{createHash as createHash2,randomUUID as randomUUID2}from"node:crypto";import{createReadStream}from"node:fs";import{mkdir as mkdir2,mkdtemp,open as open2,rename as rename2,rm}from"node:fs/promises";import{tmpdir}from"node:os";import{isAbsolute as isAbsolute4,join as join9}from"node:path";import{createPublicKey,verify}from"node:crypto";var NODE_PLUGIN_TRUST_ROOT_VERSION_V1=1,MAX_KEY_ID_CHARS_V1=128,MAX_KEYS_V1=256,SIGNATURE_PREFIX_V1="ed25519-v1";function validKeyId(value){return value.length>0&&value.length<=MAX_KEY_ID_CHARS_V1&&/^[A-Za-z0-9_-]+$/u.test(value)}function parseValidity(value,label){if(value===void 0)return;if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/u.test(value))throw new Error(t("{label} must be an ISO-8601 UTC timestamp",{label}));let timestamp=Date.parse(value);if(!Number.isFinite(timestamp)||new Date(timestamp).toISOString()!==value)throw new Error(t("{label} must be a valid ISO-8601 UTC timestamp",{label}));return timestamp}function parsePublicKey(value){if(value.length===0||value.length>16*1024||/\u0000/u.test(value))throw new Error(t("publicKeyPem is invalid"));let key;try{key=createPublicKey(value)}catch{throw new Error(t("publicKeyPem is invalid"))}if(key.type!=="public"||key.asymmetricKeyType!=="ed25519")throw new Error(t("publicKeyPem must be an Ed25519 public key"));return key}function payload(input){return Buffer.from(`agent-forge-plugin-distribution-v${NODE_PLUGIN_TRUST_ROOT_VERSION_V1}
@@ -796,7 +796,7 @@ changes anytime in settings.json.`)),1,0)),this.addChild(new Spacer(1)),this.add
796
796
  ${value.stack}`}
797
797
  `}return`${JSON.stringify(toSafeJson(value))}
798
798
  `}function createHostLogger(options){if(options.level!==void 0&&!HOST_LOG_LEVELS.includes(options.level))throw new Error(t("Host logger level must be one of {levels}; got {value}",{levels:HOST_LOG_LEVELS.map(level=>`"${level}"`).join(" | "),value:JSON.stringify(options.level)}));let minRank=LEVEL_RANK[options.level??"info"],now=options.now??Date.now,maxAgeDays=options.maxAgeDays??DEFAULT_MAX_AGE_DAYS,processHost=options.processHost??NODE_PROCESS_HOST,closed=!1,dirReady=!1,written=0,failed=0,write=(level,src,msg,context)=>{if(closed||LEVEL_RANK[level]<minRank)return;let entry={v:1,t:now(),level,src,msg,sessionId:context?.sessionId,traceId:context?.traceId,fields:context?.fields===void 0?void 0:toSafeJson(context.fields),cause:context?.cause===void 0?void 0:boundCause(context.cause)};try{dirReady||(mkdirSync13(options.dir,{recursive:!0}),dirReady=!0),appendFileSync(join46(options.dir,logFileName(entry.t)),`${JSON.stringify(entry)}
799
- `),written+=1}catch{failed+=1,dirReady=!1}};(()=>{if(maxAgeDays<=0)return;let cutoff=now()-maxAgeDays*DAY_MS2,currentName=logFileName(now()),names;try{names=readdirSync11(options.dir)}catch(error){if(error.code==="ENOENT")return;write("warn","logger","log sweep failed: cannot read log directory",{cause:error});return}let removed=0,errors=0;for(let name of names){if(!name.endsWith(".log")||name===currentName)continue;let fullPath=join46(options.dir,name);try{let stats=statSync12(fullPath);if(!stats.isFile()||stats.mtimeMs>=cutoff)continue;unlinkSync4(fullPath),removed+=1}catch{errors+=1}}errors>0&&write("warn","logger","log sweep finished with failures",{fields:{removed,errors}})})();let exit=processHost.exit??NODE_PROCESS_CRASH_HOST.exit,writeStderr=processHost.writeStderr??NODE_PROCESS_CRASH_HOST.writeStderr,deferThrow=processHost.deferThrow??NODE_PROCESS_CRASH_HOST.deferThrow,loggedFatalValues=new WeakSet,isFatalValueLogged=value=>value!==null&&(typeof value=="object"||typeof value=="function")&&loggedFatalValues.has(value),markFatalValueLogged=value=>{value!==null&&(typeof value=="object"||typeof value=="function")&&loggedFatalValues.add(value)};return processHost.onUncaughtException&&processHost.onUncaughtException(error=>{isFatalValueLogged(error)||(markFatalValueLogged(error),write("error","process","uncaughtException",{cause:error})),writeStderr(fatalStderrText(error)),exit(1)}),processHost.onUnhandledRejection&&processHost.onUnhandledRejection(reason=>{markFatalValueLogged(reason),write("error","process","unhandledRejection",{cause:reason}),deferThrow(()=>{throw reason})}),{debug:(src,msg,context)=>write("debug",src,msg,context),info:(src,msg,context)=>write("info",src,msg,context),warn:(src,msg,context)=>write("warn",src,msg,context),error:(src,msg,context)=>write("error",src,msg,context),close:()=>(closed=!0,{written,failed})}}function collectSettingsDiagnostics(settingsManager){return settingsManager.drainErrors().map(({scope,path:path8,error})=>({type:"warning",message:path8?`Invalid settings file ${path8}: ${error.message}`:`Invalid ${scope} settings: ${error.message}`}))}function deduplicateDiagnostics(diagnostics){let seen=new Set;return diagnostics.filter(diagnostic5=>{let key=`${diagnostic5.type}\0${diagnostic5.message}`;return seen.has(key)?!1:(seen.add(key),!0)})}import{readdirSync as readdirSync12,statSync as statSync13,unlinkSync as unlinkSync5}from"node:fs";import{join as join47}from"node:path";var DAY_MS3=1440*60*1e3,TRACE_FILE_SUFFIX=".trace.jsonl",DEFAULT_TRACE_MAX_AGE_DAYS=14,DEFAULT_TRACE_MAX_FILES_PER_DIRECTORY=500;function sweepTraceFiles(sessionsRoot,options){let capActive=options.maxFilesPerDirectory!==void 0&&options.maxFilesPerDirectory>0;if(options.maxAgeDays<=0&&!capActive)return{scanned:0,deleted:0,failed:0};let now=options.now??Date.now,unlink5=options.unlink??(path8=>unlinkSync5(path8)),cutoff=now()-options.maxAgeDays*DAY_MS3,maxFilesPerDirectory=capActive?options.maxFilesPerDirectory:0,scanned=0,deleted=0,failed=0,readEntries=dir=>{try{return readdirSync12(dir,{withFileTypes:!0})}catch{return}},sweepFilesIn=(dir,entries)=>{let traceFiles=[];for(let entry of entries){if(!entry.name.endsWith(TRACE_FILE_SUFFIX))continue;let fullPath=join47(dir,entry.name);try{let stats=statSync13(fullPath);stats.isFile()&&traceFiles.push({path:fullPath,mtimeMs:stats.mtimeMs})}catch{}}scanned+=traceFiles.length;let expiredPaths=new Set(options.maxAgeDays>0?traceFiles.filter(file=>file.mtimeMs<cutoff).map(file=>file.path):[]),survivors=traceFiles.filter(file=>!expiredPaths.has(file.path)).sort((a,b)=>a.mtimeMs-b.mtimeMs),overCapCount=capActive?Math.max(0,survivors.length-maxFilesPerDirectory):0,removals=[...traceFiles.filter(file=>expiredPaths.has(file.path)),...survivors.slice(0,overCapCount)];for(let file of removals)try{unlink5(file.path),deleted+=1}catch{failed+=1}},rootEntries=readEntries(sessionsRoot);if(rootEntries===void 0)return{scanned:0,deleted:0,failed:0};sweepFilesIn(sessionsRoot,rootEntries);for(let entry of rootEntries){if(!entry.isDirectory())continue;let subdirectory=join47(sessionsRoot,entry.name),subEntries=readEntries(subdirectory);subEntries!==void 0&&sweepFilesIn(subdirectory,subEntries)}return{scanned,deleted,failed}}import{join as join48}from"node:path";var PLUGIN_BOOTSTRAP_VERSION_V1=1;function satisfiesRangeV1(version,range2){return selectNpmPackageVersionV1([version],range2)===version}function pluginBootstrapInstallCommandV1(entry){return`agent-forge plugin install ${entry.npmName}@${entry.range??"latest"}`}function errorMessage(error){return error instanceof Error?error.message:String(error)}function acquireErrorCode(error){return error instanceof PluginAcquisitionErrorV1?error.code:"install_failed"}function actionOf(entry,status,reason){return Object.freeze({pluginId:entry.pluginId,status,reason,npmName:entry.npmName,...entry.range===void 0?{}:{range:entry.range}})}async function runPluginBootstrapV1(input){let now=input.deps.now??Date.now,startedAt=now(),finish=(status2,actions2,diagnostics2)=>Object.freeze({version:PLUGIN_BOOTSTRAP_VERSION_V1,status:status2,actions:Object.freeze([...actions2]),diagnostics:Object.freeze([...diagnostics2]),durationMs:Math.max(0,now()-startedAt)});if(input.manifest.length===0)return finish("succeeded",[],[]);let signal=input.deps.signal,active;try{active=await input.deps.listActive({...signal===void 0?{}:{signal}})}catch(error){return finish("failed",[],[{code:"list_active_failed",message:`Active plugin state could not be read; bootstrap installed nothing: ${errorMessage(error)}`}])}let actions=[],diagnostics=[],record=action=>{actions.push(action),input.onAction?.(action)};if(input.onPendingInstalls!==void 0){let pending=input.manifest.filter(entry=>!active.has(entry.pluginId)).length;pending>0&&input.onPendingInstalls(pending)}for(let entry of input.manifest){if(signal?.aborted===!0){diagnostics.push({code:"cancelled",message:"Plugin bootstrap was cancelled before all factory entries were processed"});break}let activeVersion=active.get(entry.pluginId);if(activeVersion!==void 0&&satisfiesRangeV1(activeVersion,entry.range)){record(Object.freeze({...actionOf(entry,"skipped","satisfies_range"),activeVersion}));continue}try{let installed=await input.deps.installFromNpm({npmName:entry.npmName,...entry.range===void 0?{}:{range:entry.range},...signal===void 0?{}:{signal}});record(Object.freeze({...actionOf(entry,"installed",activeVersion===void 0?"installed":"range_aligned"),installedVersion:installed.pluginVersion,source:installed.source}))}catch(error){let errorCode2=acquireErrorCode(error),aligning=activeVersion!==void 0;record(Object.freeze({...actionOf(entry,"failed",aligning?"align_failed":"install_failed"),errorCode:errorCode2})),diagnostics.push({code:"install_failed",pluginId:entry.pluginId,message:aligning?`Bootstrap could not align ${entry.pluginId} (active ${activeVersion}) to the factory range ${entry.range??"latest"} from npm (${errorCode2}: ${errorMessage(error)}). Startup continues; the factory range stays unsatisfied, so the next startup retries automatically. Run \`${pluginBootstrapInstallCommandV1(entry)}\` to align it now.`:`Bootstrap could not install ${entry.pluginId} from npm (${errorCode2}: ${errorMessage(error)}). Startup continues without it; its capabilities stay unavailable until installed, and the next startup retries automatically. Run \`${pluginBootstrapInstallCommandV1(entry)}\` to install it manually.`})}}let status=actions.some(action=>action.status==="failed")?"failed":"succeeded";return finish(status,actions,diagnostics)}var AGENT_FORGE_PLUGIN_BOOTSTRAP_ENV_V1="AGENT_FORGE_PLUGIN_BOOTSTRAP",PLUGIN_BOOTSTRAP_DISABLED_VALUE_V1="off";function readActiveVersions(store,scope,scopeRef,signal){return(async()=>{let result=await store.read({...signal===void 0?{}:{signal}});if(result.status!=="ok"&&result.status!=="missing")throw new Error(t("plugin state read failed ({detail}) for the {scope} scope",{detail:result.diagnostics[0]?.code??result.status,scope}));let versions=new Map;for(let record of result.snapshot.records)record.state.scope!==scope||record.state.scopeRef!==scopeRef||record.state.lifecycle==="active"&&versions.set(record.pluginId,record.pluginVersion);return versions})()}async function readPreviousActiveRecord(store,pluginId,signal){let result=await store.read({...signal===void 0?{}:{signal}});if(result.status!=="ok"&&result.status!=="missing")throw new Error(t("plugin state read failed ({detail}) for the {scope} scope",{detail:result.diagnostics[0]?.code??result.status,scope:"global"}));return result.snapshot.records.find(record=>record.pluginId===pluginId&&record.state.scope==="global"&&record.state.scopeRef===DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1&&record.state.lifecycle==="active")}async function runNodePluginBootstrapV1(options){if(process.env[AGENT_FORGE_PLUGIN_BOOTSTRAP_ENV_V1]?.trim()===PLUGIN_BOOTSTRAP_DISABLED_VALUE_V1)return Object.freeze({version:1,status:"succeeded",actions:Object.freeze([]),diagnostics:Object.freeze([]),durationMs:0,skipped:"disabled"});if(isOfflineModeEnabled())return Object.freeze({version:1,status:"succeeded",actions:Object.freeze([]),diagnostics:Object.freeze([{code:"bootstrap_skipped_offline",message:t("Offline posture (AGENT_FORGE_OFFLINE) skips the startup plugin bootstrap; run `agent-forge plugin install <package>` explicitly to install plugins.")}]),durationMs:0,skipped:"offline"});if(options.deps!==void 0)return await runPluginBootstrapV1({manifest:options.manifest??BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1,deps:options.deps,...options.onPendingInstalls===void 0?{}:{onPendingInstalls:options.onPendingInstalls},...options.onAction===void 0?{}:{onAction:options.onAction}});let session,ensureSession=async()=>{if(session!==void 0)return session;let acquisition=createNodePluginAcquisitionHostV1({...options.npmRegistry===void 0?{}:{npmRegistry:options.npmRegistry},...options.npmToken===void 0?{}:{npmToken:options.npmToken},...options.fetch===void 0?{}:{fetch:options.fetch},...options.limits===void 0?{}:{limits:options.limits}}),installHost=await createNodePackageInstallHostV1({openArtifact:input=>acquisition.openArtifact(input),installationDirectory:defaultPluginInstallStoreDirectoryV1(options.agentDir),persistence:"persistent",supportedScopes:["global","project"],...options.limits===void 0?{}:{...options.limits}});return session={acquisition,installHost,installer:createPluginInstallerV1({host:installHost}),stateStore:createPluginStateStoreV1({filePath:join48(options.agentDir,DEFAULT_PLUGIN_STATE_FILE_V1)})},session},deps={listActive:async({signal})=>{let globalVersions=readActiveVersions(createPluginStateStoreV1({filePath:join48(options.agentDir,DEFAULT_PLUGIN_STATE_FILE_V1)}),"global",DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,signal),projectVersions=readActiveVersions(createPluginStateStoreV1({filePath:join48(options.cwd,CONFIG_DIR_NAME,DEFAULT_PLUGIN_STATE_FILE_V1)}),"project",projectPluginScopeRefV1(options.cwd),signal),[globalResult,projectResult]=await Promise.all([globalVersions,projectVersions]);return new Map([...globalResult,...projectResult])},installFromNpm:async({npmName,range:range2,signal})=>{let lastError;for(let attempt2=1;attempt2<=3;attempt2++){if(signal?.aborted===!0)throw lastError??new Error("install aborted");try{return await installFromNpmOnce({npmName,range:range2,signal})}catch(error){if(lastError=error,attempt2===3)throw error;await new Promise((resolve22,reject2)=>{let timer=setTimeout(resolve22,400*2**(attempt2-1));signal?.addEventListener("abort",()=>{clearTimeout(timer),reject2(lastError)},{once:!0})})}}throw lastError},...options.signal===void 0?{}:{signal:options.signal}},installFromNpmOnce=async input=>{let{npmName,range:range2,signal}=input;{let active=await ensureSession(),ref=range2===void 0?npmName:`${npmName}@${range2}`,acquired=await active.acquisition.resolvePackage({ref,...signal===void 0?{}:{signal}}),released=!1,release=async()=>{released||(released=!0,await acquired.release())};try{let verified=active.installer.prepare({manifest:acquired.manifest,source:acquired.source,host:defaultPluginHostFactsV1()});if(verified.status!=="verified")throw new Error(t("installer prepare rejected {pluginId}: {reason}",{pluginId:acquired.manifest.id,reason:verified.reason}));let installed=await active.installer.install({record:verified.record,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,artifact:acquired.artifact,...signal===void 0?{}:{signal}});if(installed.status!=="succeeded")throw new Error(t("plugin install failed ({code}) for {pluginId}",{code:installed.error.code,pluginId:acquired.manifest.id}));let activated=await active.installer.activate({installation:installed.installation,record:verified.record,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,...signal===void 0?{}:{signal}});if(activated.status!=="succeeded"){let restoreFailure;try{let previous=await readPreviousActiveRecord(active.stateStore,acquired.manifest.id,signal);if(previous!==void 0){let rolledBack=await active.installer.rollback({failed:installed.installation,previous:{version:1,pluginId:previous.pluginId,pluginVersion:previous.pluginVersion,manifestDigest:previous.manifestDigest,scope:previous.state.scope,scopeRef:previous.state.scopeRef,installationRef:previous.installationRef,state:"active"},scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,...signal===void 0?{}:{signal}});rolledBack.status!=="succeeded"&&(restoreFailure=rolledBack.error.code)}}catch(error){restoreFailure=error instanceof Error?error.message:String(error)}await active.installer.remove({installation:installed.installation,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1}).catch(()=>{});let activationMessage=t("plugin activation failed ({code}) for {pluginId}",{code:activated.error.code,pluginId:acquired.manifest.id});throw new Error(restoreFailure===void 0?activationMessage:`${activationMessage}; previous version restore failed: ${restoreFailure}`)}let persisted=await active.stateStore.upsert({installation:activated.installation,scope:"global",enabled:!0,source:acquired.source,...signal===void 0?{}:{signal}});if(persisted.status!=="ok")throw await active.installer.remove({installation:activated.installation,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1}).catch(()=>{}),new Error(t("plugin state persist failed ({status}) for {pluginId}",{status:persisted.status,pluginId:acquired.manifest.id}));let allRecords=await active.stateStore.read({...signal===void 0?{}:{signal}});if(allRecords.status==="ok")for(let record of allRecords.snapshot.records)record.pluginId===activated.installation.pluginId&&record.pluginVersion!==activated.installation.pluginVersion&&record.state.scope==="global"&&record.state.scopeRef===DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1&&record.state.lifecycle==="active"&&await active.stateStore.remove({pluginId:record.pluginId,pluginVersion:record.pluginVersion,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,...signal===void 0?{}:{signal}}).catch(()=>{});return{pluginVersion:activated.installation.pluginVersion,source:acquired.source}}finally{await release()}}};try{return await runPluginBootstrapV1({manifest:options.manifest??BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1,deps,onPendingInstalls:options.onPendingInstalls??(count=>{console.error(t("First run: installing {count} factory plugins\u2026",{count}))}),onAction:options.onAction??(action=>{action.status==="installed"?console.error(t("{pluginId}: installed {version}",{pluginId:action.pluginId,version:action.installedVersion??""})):action.status==="failed"&&console.error(t("{pluginId}: install failed ({code}) \u2014 startup continues; the next startup retries automatically",{pluginId:action.pluginId,code:action.errorCode??"install_failed"}))})})}finally{let active=session;session=void 0,active!==void 0&&(await active.installHost.close().catch(()=>{}),await active.acquisition.close().catch(()=>{}))}}import{existsSync as existsSync25,mkdirSync as mkdirSync14,readdirSync as readdirSync13,readFileSync as readFileSync24,renameSync as renameSync2,rmSync as rmSync4,writeFileSync as writeFileSync16}from"fs";import{dirname as dirname26,join as join49}from"path";var MIGRATION_GUIDE_URL="https://github.com/agent-forge/agent-forge/blob/main/packages/agent-forge/CHANGELOG.md#extensions-migration",EXTENSIONS_DOC_URL="https://github.com/agent-forge/agent-forge/blob/main/packages/agent-forge/docs/extensions.md";function migrateAuthToAuthJson(){let agentDir=getAgentDir(),authPath=join49(agentDir,"auth.json"),oauthPath=join49(agentDir,"oauth.json"),settingsPath=join49(agentDir,"settings.json");if(existsSync25(authPath))return[];let migrated={},providers=[];if(existsSync25(oauthPath))try{let oauth=JSON.parse(stripBom(readFileSync24(oauthPath,"utf-8")));for(let[provider,cred]of Object.entries(oauth))migrated[provider]={type:"oauth",...cred},providers.push(provider);renameSync2(oauthPath,`${oauthPath}.migrated`)}catch{}if(existsSync25(settingsPath))try{let content=readFileSync24(settingsPath,"utf-8"),settings=JSON.parse(stripBom(content));if(settings.apiKeys&&typeof settings.apiKeys=="object"){for(let[provider,key]of Object.entries(settings.apiKeys))!migrated[provider]&&typeof key=="string"&&(migrated[provider]={type:"api_key",key},providers.push(provider));delete settings.apiKeys,writeFileSync16(settingsPath,JSON.stringify(settings,null,2))}}catch{}return Object.keys(migrated).length>0&&(mkdirSync14(dirname26(authPath),{recursive:!0}),writeFileSync16(authPath,JSON.stringify(migrated,null,2),{mode:384})),providers}function migrateSessionsFromAgentRoot(){let agentDir=getAgentDir(),files;try{files=readdirSync13(agentDir).filter(f=>f.endsWith(".jsonl")).map(f=>join49(agentDir,f))}catch{return}if(files.length!==0)for(let file of files)try{let firstLine=readFileSync24(file,"utf8").split(`
799
+ `),written+=1}catch{failed+=1,dirReady=!1}};(()=>{if(maxAgeDays<=0)return;let cutoff=now()-maxAgeDays*DAY_MS2,currentName=logFileName(now()),names;try{names=readdirSync11(options.dir)}catch(error){if(error.code==="ENOENT")return;write("warn","logger","log sweep failed: cannot read log directory",{cause:error});return}let removed=0,errors=0;for(let name of names){if(!name.endsWith(".log")||name===currentName)continue;let fullPath=join46(options.dir,name);try{let stats=statSync12(fullPath);if(!stats.isFile()||stats.mtimeMs>=cutoff)continue;unlinkSync4(fullPath),removed+=1}catch{errors+=1}}errors>0&&write("warn","logger","log sweep finished with failures",{fields:{removed,errors}})})();let exit=processHost.exit??NODE_PROCESS_CRASH_HOST.exit,writeStderr=processHost.writeStderr??NODE_PROCESS_CRASH_HOST.writeStderr,deferThrow=processHost.deferThrow??NODE_PROCESS_CRASH_HOST.deferThrow,loggedFatalValues=new WeakSet,isFatalValueLogged=value=>value!==null&&(typeof value=="object"||typeof value=="function")&&loggedFatalValues.has(value),markFatalValueLogged=value=>{value!==null&&(typeof value=="object"||typeof value=="function")&&loggedFatalValues.add(value)};return processHost.onUncaughtException&&processHost.onUncaughtException(error=>{isFatalValueLogged(error)||(markFatalValueLogged(error),write("error","process","uncaughtException",{cause:error})),writeStderr(fatalStderrText(error)),exit(1)}),processHost.onUnhandledRejection&&processHost.onUnhandledRejection(reason=>{markFatalValueLogged(reason),write("error","process","unhandledRejection",{cause:reason}),deferThrow(()=>{throw reason})}),{debug:(src,msg,context)=>write("debug",src,msg,context),info:(src,msg,context)=>write("info",src,msg,context),warn:(src,msg,context)=>write("warn",src,msg,context),error:(src,msg,context)=>write("error",src,msg,context),close:()=>(closed=!0,{written,failed})}}function collectSettingsDiagnostics(settingsManager){return settingsManager.drainErrors().map(({scope,path:path8,error})=>({type:"warning",message:path8?`Invalid settings file ${path8}: ${error.message}`:`Invalid ${scope} settings: ${error.message}`}))}function deduplicateDiagnostics(diagnostics){let seen=new Set;return diagnostics.filter(diagnostic5=>{let key=`${diagnostic5.type}\0${diagnostic5.message}`;return seen.has(key)?!1:(seen.add(key),!0)})}import{readdirSync as readdirSync12,statSync as statSync13,unlinkSync as unlinkSync5}from"node:fs";import{join as join47}from"node:path";var DAY_MS3=1440*60*1e3,TRACE_FILE_SUFFIX=".trace.jsonl",DEFAULT_TRACE_MAX_AGE_DAYS=14,DEFAULT_TRACE_MAX_FILES_PER_DIRECTORY=500;function sweepTraceFiles(sessionsRoot,options){let capActive=options.maxFilesPerDirectory!==void 0&&options.maxFilesPerDirectory>0;if(options.maxAgeDays<=0&&!capActive)return{scanned:0,deleted:0,failed:0};let now=options.now??Date.now,unlink5=options.unlink??(path8=>unlinkSync5(path8)),cutoff=now()-options.maxAgeDays*DAY_MS3,maxFilesPerDirectory=capActive?options.maxFilesPerDirectory:0,scanned=0,deleted=0,failed=0,readEntries=dir=>{try{return readdirSync12(dir,{withFileTypes:!0})}catch{return}},sweepFilesIn=(dir,entries)=>{let traceFiles=[];for(let entry of entries){if(!entry.name.endsWith(TRACE_FILE_SUFFIX))continue;let fullPath=join47(dir,entry.name);try{let stats=statSync13(fullPath);stats.isFile()&&traceFiles.push({path:fullPath,mtimeMs:stats.mtimeMs})}catch{}}scanned+=traceFiles.length;let expiredPaths=new Set(options.maxAgeDays>0?traceFiles.filter(file=>file.mtimeMs<cutoff).map(file=>file.path):[]),survivors=traceFiles.filter(file=>!expiredPaths.has(file.path)).sort((a,b)=>a.mtimeMs-b.mtimeMs),overCapCount=capActive?Math.max(0,survivors.length-maxFilesPerDirectory):0,removals=[...traceFiles.filter(file=>expiredPaths.has(file.path)),...survivors.slice(0,overCapCount)];for(let file of removals)try{unlink5(file.path),deleted+=1}catch{failed+=1}},rootEntries=readEntries(sessionsRoot);if(rootEntries===void 0)return{scanned:0,deleted:0,failed:0};sweepFilesIn(sessionsRoot,rootEntries);for(let entry of rootEntries){if(!entry.isDirectory())continue;let subdirectory=join47(sessionsRoot,entry.name),subEntries=readEntries(subdirectory);subEntries!==void 0&&sweepFilesIn(subdirectory,subEntries)}return{scanned,deleted,failed}}import{join as join48}from"node:path";var PLUGIN_BOOTSTRAP_VERSION_V1=1;function satisfiesRangeV1(version,range2){return selectNpmPackageVersionV1([version],range2)===version}function pluginBootstrapInstallCommandV1(entry){return`agent-forge plugin install ${entry.npmName}@${entry.range??"latest"}`}function errorMessage(error){return error instanceof Error?error.message:String(error)}function acquireErrorCode(error){return error instanceof PluginAcquisitionErrorV1?error.code:"install_failed"}function actionOf(entry,status,reason){return Object.freeze({pluginId:entry.pluginId,status,reason,npmName:entry.npmName,...entry.range===void 0?{}:{range:entry.range}})}async function runPluginBootstrapV1(input){let now=input.deps.now??Date.now,startedAt=now(),finish=(status2,actions2,diagnostics2)=>Object.freeze({version:PLUGIN_BOOTSTRAP_VERSION_V1,status:status2,actions:Object.freeze([...actions2]),diagnostics:Object.freeze([...diagnostics2]),durationMs:Math.max(0,now()-startedAt)});if(input.manifest.length===0)return finish("succeeded",[],[]);let signal=input.deps.signal,active;try{active=await input.deps.listActive({...signal===void 0?{}:{signal}})}catch(error){return finish("failed",[],[{code:"list_active_failed",message:`Active plugin state could not be read; bootstrap installed nothing: ${errorMessage(error)}`}])}let actions=[],diagnostics=[],slots=input.manifest.map(()=>({actions:[],diagnostics:[]})),record=(index,action)=>{slots[index].actions.push(action),input.onAction?.(action)},addDiagnostic=(index,diagnostic5)=>{slots[index].diagnostics.push(diagnostic5)};if(input.onPendingInstalls!==void 0){let pending=input.manifest.filter(entry=>{let activeVersion=active.get(entry.pluginId);return activeVersion===void 0||!satisfiesRangeV1(activeVersion,entry.range)}).length;pending>0&&input.onPendingInstalls(pending)}let processEntry=async(index,entry)=>{let signal2=input.deps.signal,activeVersion=active.get(entry.pluginId);if(activeVersion!==void 0&&satisfiesRangeV1(activeVersion,entry.range)){record(index,Object.freeze({...actionOf(entry,"skipped","satisfies_range"),activeVersion}));return}input.onInstallStart?.({npmName:entry.npmName,pluginId:entry.pluginId});try{let installed=await input.deps.installFromNpm({npmName:entry.npmName,...entry.range===void 0?{}:{range:entry.range},...signal2===void 0?{}:{signal:signal2}});record(index,Object.freeze({...actionOf(entry,"installed",activeVersion===void 0?"installed":"range_aligned"),installedVersion:installed.pluginVersion,source:installed.source}))}catch(error){let errorCode2=acquireErrorCode(error),aligning=activeVersion!==void 0;record(index,Object.freeze({...actionOf(entry,"failed",aligning?"align_failed":"install_failed"),errorCode:errorCode2})),addDiagnostic(index,aligning?{code:"install_failed",pluginId:entry.pluginId,message:`Bootstrap could not align ${entry.pluginId} (active ${activeVersion}) to the factory range ${entry.range??"latest"} from npm (${errorCode2}: ${errorMessage(error)}). Startup continues; the factory range stays unsatisfied, so the next startup retries automatically. Run \`${pluginBootstrapInstallCommandV1(entry)}\` to align it now.`}:{code:"install_failed",pluginId:entry.pluginId,message:`Bootstrap could not install ${entry.pluginId} from npm (${errorCode2}: ${errorMessage(error)}). Startup continues without it; its capabilities stay unavailable until installed, and the next startup retries automatically. Run \`${pluginBootstrapInstallCommandV1(entry)}\` to install it manually.`})}},WORKERS=4,cursor=0,cancelNoted=!1,worker=async()=>{for(;cursor<input.manifest.length;){if(input.deps.signal?.aborted===!0){cancelNoted||(cancelNoted=!0,diagnostics.push({code:"cancelled",message:"Plugin bootstrap was cancelled before all factory entries were processed"}));return}let index=cursor++;await processEntry(index,input.manifest[index])}};await Promise.all(Array.from({length:Math.min(WORKERS,input.manifest.length)},worker));for(let slot of slots)actions.push(...slot.actions),diagnostics.push(...slot.diagnostics);let status=actions.some(action=>action.status==="failed")?"failed":"succeeded";return finish(status,actions,diagnostics)}var AGENT_FORGE_PLUGIN_BOOTSTRAP_ENV_V1="AGENT_FORGE_PLUGIN_BOOTSTRAP",PLUGIN_BOOTSTRAP_DISABLED_VALUE_V1="off";function readActiveVersions(store,scope,scopeRef,signal){return(async()=>{let result=await store.read({...signal===void 0?{}:{signal}});if(result.status!=="ok"&&result.status!=="missing")throw new Error(t("plugin state read failed ({detail}) for the {scope} scope",{detail:result.diagnostics[0]?.code??result.status,scope}));let versions=new Map;for(let record of result.snapshot.records)record.state.scope!==scope||record.state.scopeRef!==scopeRef||record.state.lifecycle==="active"&&versions.set(record.pluginId,record.pluginVersion);return versions})()}async function readPreviousActiveRecord(store,pluginId,signal){let result=await store.read({...signal===void 0?{}:{signal}});if(result.status!=="ok"&&result.status!=="missing")throw new Error(t("plugin state read failed ({detail}) for the {scope} scope",{detail:result.diagnostics[0]?.code??result.status,scope:"global"}));return result.snapshot.records.find(record=>record.pluginId===pluginId&&record.state.scope==="global"&&record.state.scopeRef===DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1&&record.state.lifecycle==="active")}async function runNodePluginBootstrapV1(options){if(process.env[AGENT_FORGE_PLUGIN_BOOTSTRAP_ENV_V1]?.trim()===PLUGIN_BOOTSTRAP_DISABLED_VALUE_V1)return Object.freeze({version:1,status:"succeeded",actions:Object.freeze([]),diagnostics:Object.freeze([]),durationMs:0,skipped:"disabled"});if(isOfflineModeEnabled())return Object.freeze({version:1,status:"succeeded",actions:Object.freeze([]),diagnostics:Object.freeze([{code:"bootstrap_skipped_offline",message:t("Offline posture (AGENT_FORGE_OFFLINE) skips the startup plugin bootstrap; run `agent-forge plugin install <package>` explicitly to install plugins.")}]),durationMs:0,skipped:"offline"});if(options.deps!==void 0)return await runPluginBootstrapV1({manifest:options.manifest??BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1,deps:options.deps,...options.onPendingInstalls===void 0?{}:{onPendingInstalls:options.onPendingInstalls},...options.onAction===void 0?{}:{onAction:options.onAction}});let session,ensureSession=async()=>{if(session!==void 0)return session;let acquisition=createNodePluginAcquisitionHostV1({...options.npmRegistry===void 0?{}:{npmRegistry:options.npmRegistry},...options.npmToken===void 0?{}:{npmToken:options.npmToken},...options.fetch===void 0?{}:{fetch:options.fetch},...options.limits===void 0?{}:{limits:options.limits}}),installHost=await createNodePackageInstallHostV1({openArtifact:input=>acquisition.openArtifact(input),installationDirectory:defaultPluginInstallStoreDirectoryV1(options.agentDir),persistence:"persistent",supportedScopes:["global","project"],...options.limits===void 0?{}:{...options.limits}});return session={acquisition,installHost,installer:createPluginInstallerV1({host:installHost}),stateStore:createPluginStateStoreV1({filePath:join48(options.agentDir,DEFAULT_PLUGIN_STATE_FILE_V1)})},session},deps={listActive:async({signal})=>{let globalVersions=readActiveVersions(createPluginStateStoreV1({filePath:join48(options.agentDir,DEFAULT_PLUGIN_STATE_FILE_V1)}),"global",DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,signal),projectVersions=readActiveVersions(createPluginStateStoreV1({filePath:join48(options.cwd,CONFIG_DIR_NAME,DEFAULT_PLUGIN_STATE_FILE_V1)}),"project",projectPluginScopeRefV1(options.cwd),signal),[globalResult,projectResult]=await Promise.all([globalVersions,projectVersions]);return new Map([...globalResult,...projectResult])},installFromNpm:async({npmName,range:range2,signal})=>{let lastError;for(let attempt2=1;attempt2<=3;attempt2++){if(signal?.aborted===!0)throw lastError??new Error("install aborted");try{return await installFromNpmOnce({npmName,range:range2,signal})}catch(error){if(lastError=error,attempt2===3)throw error;await new Promise((resolve22,reject2)=>{let timer=setTimeout(resolve22,400*2**(attempt2-1));signal?.addEventListener("abort",()=>{clearTimeout(timer),reject2(lastError)},{once:!0})})}}throw lastError},...options.signal===void 0?{}:{signal:options.signal}},installFromNpmOnce=async input=>{let{npmName,range:range2,signal}=input;{let active=await ensureSession(),ref=range2===void 0?npmName:`${npmName}@${range2}`,acquired=await active.acquisition.resolvePackage({ref,...signal===void 0?{}:{signal}}),released=!1,release=async()=>{released||(released=!0,await acquired.release())};try{let verified=active.installer.prepare({manifest:acquired.manifest,source:acquired.source,host:defaultPluginHostFactsV1()});if(verified.status!=="verified")throw new Error(t("installer prepare rejected {pluginId}: {reason}",{pluginId:acquired.manifest.id,reason:verified.reason}));let installed=await active.installer.install({record:verified.record,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,artifact:acquired.artifact,...signal===void 0?{}:{signal}});if(installed.status!=="succeeded")throw new Error(t("plugin install failed ({code}) for {pluginId}",{code:installed.error.code,pluginId:acquired.manifest.id}));let activated=await active.installer.activate({installation:installed.installation,record:verified.record,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,...signal===void 0?{}:{signal}});if(activated.status!=="succeeded"){let restoreFailure;try{let previous=await readPreviousActiveRecord(active.stateStore,acquired.manifest.id,signal);if(previous!==void 0){let rolledBack=await active.installer.rollback({failed:installed.installation,previous:{version:1,pluginId:previous.pluginId,pluginVersion:previous.pluginVersion,manifestDigest:previous.manifestDigest,scope:previous.state.scope,scopeRef:previous.state.scopeRef,installationRef:previous.installationRef,state:"active"},scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,...signal===void 0?{}:{signal}});rolledBack.status!=="succeeded"&&(restoreFailure=rolledBack.error.code)}}catch(error){restoreFailure=error instanceof Error?error.message:String(error)}await active.installer.remove({installation:installed.installation,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1}).catch(()=>{});let activationMessage=t("plugin activation failed ({code}) for {pluginId}",{code:activated.error.code,pluginId:acquired.manifest.id});throw new Error(restoreFailure===void 0?activationMessage:`${activationMessage}; previous version restore failed: ${restoreFailure}`)}let persisted=await active.stateStore.upsert({installation:activated.installation,scope:"global",enabled:!0,source:acquired.source,...signal===void 0?{}:{signal}});if(persisted.status!=="ok")throw await active.installer.remove({installation:activated.installation,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1}).catch(()=>{}),new Error(t("plugin state persist failed ({status}) for {pluginId}",{status:persisted.status,pluginId:acquired.manifest.id}));let allRecords=await active.stateStore.read({...signal===void 0?{}:{signal}});if(allRecords.status==="ok")for(let record of allRecords.snapshot.records)record.pluginId===activated.installation.pluginId&&record.pluginVersion!==activated.installation.pluginVersion&&record.state.scope==="global"&&record.state.scopeRef===DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1&&record.state.lifecycle==="active"&&await active.stateStore.remove({pluginId:record.pluginId,pluginVersion:record.pluginVersion,scope:"global",scopeRef:DEFAULT_GLOBAL_PLUGIN_SCOPE_REF_V1,...signal===void 0?{}:{signal}}).catch(()=>{});return{pluginVersion:activated.installation.pluginVersion,source:acquired.source}}finally{await release()}}};try{return await runPluginBootstrapV1({manifest:options.manifest??BOOTSTRAP_FACTORY_PLUGIN_MANIFEST_V1,deps,onPendingInstalls:options.onPendingInstalls??(count=>{console.error(t("Aligning {count} factory plugin(s) from npm\u2026",{count}))}),onInstallStart:options.onInstallStart??(entry=>{console.error(t("{pluginId}: installing\u2026",{pluginId:entry.pluginId}))}),onAction:options.onAction??(action=>{action.status==="installed"?console.error(t("{pluginId}: installed {version}",{pluginId:action.pluginId,version:action.installedVersion??""})):action.status==="failed"&&console.error(t("{pluginId}: install failed ({code}) \u2014 startup continues; the next startup retries automatically",{pluginId:action.pluginId,code:action.errorCode??"install_failed"}))})})}finally{let active=session;session=void 0,active!==void 0&&(await active.installHost.close().catch(()=>{}),await active.acquisition.close().catch(()=>{}))}}import{existsSync as existsSync25,mkdirSync as mkdirSync14,readdirSync as readdirSync13,readFileSync as readFileSync24,renameSync as renameSync2,rmSync as rmSync4,writeFileSync as writeFileSync16}from"fs";import{dirname as dirname26,join as join49}from"path";var MIGRATION_GUIDE_URL="https://github.com/agent-forge/agent-forge/blob/main/packages/agent-forge/CHANGELOG.md#extensions-migration",EXTENSIONS_DOC_URL="https://github.com/agent-forge/agent-forge/blob/main/packages/agent-forge/docs/extensions.md";function migrateAuthToAuthJson(){let agentDir=getAgentDir(),authPath=join49(agentDir,"auth.json"),oauthPath=join49(agentDir,"oauth.json"),settingsPath=join49(agentDir,"settings.json");if(existsSync25(authPath))return[];let migrated={},providers=[];if(existsSync25(oauthPath))try{let oauth=JSON.parse(stripBom(readFileSync24(oauthPath,"utf-8")));for(let[provider,cred]of Object.entries(oauth))migrated[provider]={type:"oauth",...cred},providers.push(provider);renameSync2(oauthPath,`${oauthPath}.migrated`)}catch{}if(existsSync25(settingsPath))try{let content=readFileSync24(settingsPath,"utf-8"),settings=JSON.parse(stripBom(content));if(settings.apiKeys&&typeof settings.apiKeys=="object"){for(let[provider,key]of Object.entries(settings.apiKeys))!migrated[provider]&&typeof key=="string"&&(migrated[provider]={type:"api_key",key},providers.push(provider));delete settings.apiKeys,writeFileSync16(settingsPath,JSON.stringify(settings,null,2))}}catch{}return Object.keys(migrated).length>0&&(mkdirSync14(dirname26(authPath),{recursive:!0}),writeFileSync16(authPath,JSON.stringify(migrated,null,2),{mode:384})),providers}function migrateSessionsFromAgentRoot(){let agentDir=getAgentDir(),files;try{files=readdirSync13(agentDir).filter(f=>f.endsWith(".jsonl")).map(f=>join49(agentDir,f))}catch{return}if(files.length!==0)for(let file of files)try{let firstLine=readFileSync24(file,"utf8").split(`
800
800
  `)[0];if(!firstLine?.trim())continue;let header=JSON.parse(firstLine);if(header.type!=="session"||!header.cwd)continue;let safePath=`--${header.cwd.replace(/^[/\\]/,"").replace(/[/\\:]/g,"-")}--`,correctDir=join49(agentDir,"sessions",safePath);existsSync25(correctDir)||mkdirSync14(correctDir,{recursive:!0});let fileName=file.split("/").pop()||file.split("\\").pop(),newPath=join49(correctDir,fileName);if(existsSync25(newPath))continue;renameSync2(file,newPath)}catch{}}function migrateCommandsToPrompts(baseDir,label){let commandsDir=join49(baseDir,"commands"),promptsDir=join49(baseDir,"prompts");if(existsSync25(commandsDir)&&!existsSync25(promptsDir))try{return renameSync2(commandsDir,promptsDir),console.log(source_default.green(`Migrated ${label} commands/ \u2192 prompts/`)),!0}catch(err){console.log(source_default.yellow(`Warning: Could not migrate ${label} commands/ to prompts/: ${err instanceof Error?err.message:err}`))}return!1}function migrateKeybindingsConfigFile(){let configPath=join49(getAgentDir(),"keybindings.json");if(existsSync25(configPath))try{let parsed=JSON.parse(stripBom(readFileSync24(configPath,"utf-8")));if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))return;let{config,migrated}=migrateKeybindingsConfig(parsed);if(!migrated)return;writeFileSync16(configPath,`${JSON.stringify(config,null,2)}
801
801
  `,"utf-8")}catch{}}function migrateToolsToBin(){let agentDir=getAgentDir(),toolsDir=join49(agentDir,"tools"),binDir=getBinDir();if(!existsSync25(toolsDir))return;let binaries=["fd","rg","fd.exe","rg.exe"],movedAny=!1;for(let bin of binaries){let oldPath=join49(toolsDir,bin),newPath=join49(binDir,bin);if(existsSync25(oldPath))if(existsSync25(binDir)||mkdirSync14(binDir,{recursive:!0}),existsSync25(newPath))try{rmSync4?.(oldPath,{force:!0})}catch{}else try{renameSync2(oldPath,newPath),movedAny=!0}catch{}}movedAny&&console.log(source_default.green("Migrated managed binaries tools/ \u2192 bin/"))}function checkDeprecatedExtensionDirs(baseDir,label){let hooksDir=join49(baseDir,"hooks"),toolsDir=join49(baseDir,"tools"),warnings=[];if(existsSync25(hooksDir)&&warnings.push(`${label} hooks/ directory found. Hooks have been renamed to extensions.`),existsSync25(toolsDir))try{readdirSync13(toolsDir).filter(e=>{let lower=e.toLowerCase();return lower!=="fd"&&lower!=="rg"&&lower!=="fd.exe"&&lower!=="rg.exe"&&!e.startsWith(".")}).length>0&&warnings.push(`${label} tools/ directory contains custom tools. Custom tools have been merged into extensions.`)}catch{}return warnings}function migrateExtensionSystem(cwd){let agentDir=getAgentDir(),projectDir=join49(cwd,CONFIG_DIR_NAME);return migrateCommandsToPrompts(agentDir,"Global"),migrateCommandsToPrompts(projectDir,"Project"),[...checkDeprecatedExtensionDirs(agentDir,"Global"),...checkDeprecatedExtensionDirs(projectDir,"Project")]}async function showDeprecationWarnings(warnings){if(warnings.length!==0){for(let warning of warnings)console.log(source_default.yellow(`Warning: ${warning}`));console.log(source_default.yellow(`
802
802
  Move your extensions to the extensions/ directory.`)),console.log(source_default.yellow(`Migration guide: ${MIGRATION_GUIDE_URL}`)),console.log(source_default.yellow(`Documentation: ${EXTENSIONS_DOC_URL}`)),console.log()}}function runMigrations(cwd){let migratedAuthProviders=migrateAuthToAuthJson();migrateSessionsFromAgentRoot(),migrateToolsToBin(),migrateKeybindingsConfigFile();let deprecationWarnings=migrateExtensionSystem(cwd);return{migratedAuthProviders,deprecationWarnings}}import{existsSync as existsSync27,mkdirSync as mkdirSync16,mkdtempSync as mkdtempSync2,readdirSync as readdirSync14,readFileSync as readFileSync25,renameSync as renameSync4,rmSync as rmSync6,writeFileSync as writeFileSync17}from"node:fs";import{join as join52,resolve as resolve21}from"node:path";var import_proper_lockfile3=__toESM(require_proper_lockfile(),1);import{homedir as homedir4}from"node:os";import{basename as basename14,dirname as dirname27,join as join50,relative as relative9}from"node:path";var MAX_PROFILE_ID_CHARS=128,MAX_SELECTION_IDS=128,MAX_CATALOG_ENTRIES=256,MAX_DIAGNOSTIC_CODES2=16;function boundedCount(value,maximum){return value===void 0?{count:0,truncated:!1}:{count:Math.min(value.length,maximum),truncated:value.length>maximum}}function summarizePluginSelectionV1(selection){if(selection===void 0)return Object.freeze({present:!1,selectedCount:0,disabledCount:0,truncated:!1});let selected=boundedCount(selection.selectedPluginIds,MAX_SELECTION_IDS),disabled=boundedCount(selection.disabledPluginIds,MAX_SELECTION_IDS);return Object.freeze({present:!0,selectedCount:selected.count,disabledCount:disabled.count,truncated:selected.truncated||disabled.truncated})}function summarizePluginCatalogV1(catalog){if(catalog===void 0)return Object.freeze({present:!1,entryCount:0,readyCount:0,unavailableCount:0,truncated:!1});let entries=catalog.entries.slice(0,MAX_CATALOG_ENTRIES),readyCount=entries.filter(entry=>entry.resolution.status==="installed-ready").length;return Object.freeze({present:!0,entryCount:entries.length,readyCount,unavailableCount:entries.length-readyCount,truncated:catalog.truncated||catalog.entries.length>MAX_CATALOG_ENTRIES})}function validateProfileId(profileId){if(typeof profileId!="string"||profileId.trim().length===0||profileId.length>MAX_PROFILE_ID_CHARS||/[\u0000-\u001f]/u.test(profileId))throw new Error(t("invalid plugin selection profile ID"));return profileId}function emptySelectionSummary(){return Object.freeze({present:!1,selectedCount:0,disabledCount:0,truncated:!1})}function diagnosticCodes2(result){return result.status==="ok"||result.status==="missing"?Object.freeze([]):Object.freeze(result.diagnostics.slice(0,MAX_DIAGNOSTIC_CODES2).map(item=>item.code))}function selectionForProfile2(result,profileId){return result.snapshot.selections.find(selection=>selection.profileId===profileId)}var PluginSelectionEntryComponent=class{profileId;store;controller;onOpen;onClose;requestRender;selection;catalog;uiProfile;uiPluginIndex=0;_focused=!1;get focused(){return this._focused}set focused(value){this._focused=value}constructor(options){if(this.profileId=validateProfileId(options.profileId),options.selection!==void 0&&options.selection.profileId!==this.profileId)throw new Error(t("plugin selection profile does not match the entry profile"));this.store=options.store,this.controller=options.controller,this.onOpen=options.onOpen,this.onClose=options.onClose,this.requestRender=options.requestRender,this.selection=summarizePluginSelectionV1(options.selection),this.catalog=summarizePluginCatalogV1(options.catalog),this.uiProfile=options.snapshot?.profiles.find(profile=>profile.profileId===this.profileId)}hasHostEntry(){return this.store!==void 0||this.controller!==void 0||this.onOpen!==void 0}render(width){if(!this.hasHostEntry())return[truncateToWidth(theme.fg("dim",` ${t("Plugins: unsupported (host selection entry not injected)")}`),width,"...")];if(this._focused&&this.uiProfile!==void 0){let lines=[truncateToWidth(theme.bold(` ${t("Plugins \xB7 {profile}",{profile:this.uiProfile.profileId})}`),width,"...")];for(let[index,plugin]of this.uiProfile.plugins.entries()){let cursor=index===this.uiPluginIndex?">":" ",state=plugin.state==="selected"?"on":plugin.state==="disabled"?"off":"available",availability=plugin.availability==="ready"?"ready":"unavailable";lines.push(truncateToWidth(` ${cursor} [${state}] ${plugin.pluginId} (${availability})`,width,"..."))}return lines.push(truncateToWidth(theme.fg("dim",` ${t("Enter/Space toggle \xB7 Esc close")}`),width,"...")),lines}let selectionText=this.selection.present?t("selected {selected}, disabled {disabled}",{selected:this.selection.selectedCount,disabled:this.selection.disabledCount})+(this.selection.truncated?t(", bounded"):""):this.store===void 0?t("selection pending"):t("selection not loaded"),catalogText=this.catalog.present?t("catalog {count} ({ready} ready, {unavailable} unavailable)",{count:this.catalog.entryCount,ready:this.catalog.readyCount,unavailable:this.catalog.unavailableCount})+(this.catalog.truncated?t(", bounded"):""):t("catalog unavailable"),suffix=this.onOpen===void 0?t("host store"):t("open via host callback");return[truncateToWidth(theme.fg("muted",` ${t("Plugins: profile {profile} \xB7 {selection} \xB7 {catalog} \xB7 {suffix}",{profile:this.profileId,selection:selectionText,catalog:catalogText,suffix})}`),width,"...")]}setUiSnapshot(result){result.status==="ok"&&(this.uiProfile=result.snapshot.profiles.find(profile=>profile.profileId===this.profileId),this.uiProfile!==void 0&&(this.uiPluginIndex=Math.min(this.uiPluginIndex,Math.max(0,this.uiProfile.plugins.length-1))))}currentUiPlugin(){return this.uiProfile?.plugins[this.uiPluginIndex]}handleInput(data){if(!this._focused||this.uiProfile===void 0)return;let keybindings=getKeybindings();if(keybindings.matches(data,"tui.select.up")){this.uiPluginIndex=Math.max(0,this.uiPluginIndex-1),this.requestRender?.();return}if(keybindings.matches(data,"tui.select.down")){this.uiPluginIndex=Math.min(this.uiProfile.plugins.length-1,this.uiPluginIndex+1),this.requestRender?.();return}if(keybindings.matches(data,"tui.select.cancel")){this._focused=!1,this.onClose?.(),this.requestRender?.();return}if(!keybindings.matches(data,"tui.select.confirm")&&data!==" ")return;let plugin=this.currentUiPlugin();plugin===void 0||this.controller===void 0||plugin.state==="disabled"&&plugin.availability!=="ready"||this.controller.toggle({profileId:this.profileId,pluginId:plugin.pluginId}).then(result=>{this.setUiSnapshot(result),this.requestRender?.()}).catch(()=>this.requestRender?.())}async openPluginSelection(){let controllerResult;this.controller!==void 0&&(controllerResult=await this.controller.getSnapshot(),this.setUiSnapshot(controllerResult));let status=this.hasHostEntry()?"ready":"unsupported",selection=this.selection,codes=Object.freeze([]);if(controllerResult?.status==="error"&&(status=controllerResult.code==="store-cancelled"?"cancelled":"invalid"),this.store!==void 0){let result=await this.store.read();if(codes=diagnosticCodes2(result),result.status==="ok"||result.status==="missing"){let storedSelection=selectionForProfile2(result,this.profileId);selection=summarizePluginSelectionV1(storedSelection),status=result.status==="ok"?"ready":"missing"}else selection=emptySelectionSummary(),status=result.status;this.selection=selection}let context=Object.freeze({profileId:this.profileId,status,selection,catalog:this.catalog,diagnosticCodes:codes});return this.onOpen!==void 0&&await this.onOpen(context),context}invalidate(){}getSelectionSummary(){return this.selection}getCatalogSummary(){return this.catalog}};var RESOURCE_TYPES2=["skills","prompts","themes"],RESOURCE_TYPE_LABELS={skills:"Skills",prompts:"Prompts",themes:"Themes"};function formatBaseDir(baseDir){let homeDir=homedir4(),displayPath;return baseDir===homeDir?displayPath="~":baseDir.startsWith(homeDir)?displayPath=`~${baseDir.slice(homeDir.length).replace(/\\/g,"/")}`:displayPath=baseDir.replace(/\\/g,"/"),displayPath.endsWith("/")?displayPath:`${displayPath}/`}function getGroupLabel(metadata,agentDir){return metadata.origin==="package"?`${metadata.source} (${metadata.scope})`:metadata.source==="auto"?metadata.baseDir?metadata.scope==="user"?t("User ({dir})",{dir:formatBaseDir(metadata.baseDir)}):t("Project ({dir})",{dir:formatBaseDir(metadata.baseDir)}):metadata.scope==="user"?t("User ({dir})",{dir:formatBaseDir(agentDir)}):t("Project ({dir})",{dir:`${CONFIG_DIR_NAME}/`}):metadata.scope==="user"?t("User settings"):t("Project settings")}function buildGroups(resolved,agentDir){let groupMap=new Map,addToGroup=(resources,resourceType)=>{for(let res of resources){let{path:path8,enabled,metadata}=res,groupKey2=`${metadata.origin}:${metadata.scope}:${metadata.source}:${metadata.baseDir??""}`;groupMap.has(groupKey2)||groupMap.set(groupKey2,{key:groupKey2,label:getGroupLabel(metadata,agentDir),scope:metadata.scope,origin:metadata.origin,source:metadata.source,subgroups:[]});let group=groupMap.get(groupKey2),subgroupKey=`${groupKey2}:${resourceType}`,subgroup=group.subgroups.find(sg=>sg.type===resourceType);subgroup||(subgroup={type:resourceType,label:t(RESOURCE_TYPE_LABELS[resourceType]),items:[]},group.subgroups.push(subgroup));let fileName=basename14(path8),parentFolder=basename14(dirname27(path8)),displayName;resourceType==="skills"&&fileName==="SKILL.md"?displayName=parentFolder:displayName=fileName,subgroup.items.push({path:path8,enabled,metadata,resourceType,displayName,groupKey:groupKey2,subgroupKey})}};addToGroup(resolved.skills,"skills"),addToGroup(resolved.prompts,"prompts"),addToGroup(resolved.themes,"themes");let groups=Array.from(groupMap.values());groups.sort((a,b)=>a.origin!==b.origin?a.origin==="package"?-1:1:a.scope!==b.scope?a.scope==="user"?-1:1:a.source.localeCompare(b.source));let typeOrder={skills:0,prompts:1,themes:2};for(let group of groups){group.subgroups.sort((a,b)=>typeOrder[a.type]-typeOrder[b.type]);for(let subgroup of group.subgroups)subgroup.items.sort((a,b)=>a.displayName.localeCompare(b.displayName))}return groups}var ConfigSelectorHeader=class{writeScope;projectModeAvailable;constructor(writeScope,projectModeAvailable){this.writeScope=writeScope,this.projectModeAvailable=projectModeAvailable}setWriteScope(writeScope){this.writeScope=writeScope}invalidate(){}render(width){let title=theme.bold(this.writeScope==="project"?t("Project Local Resources"):t("Global Resources")),sep12=theme.fg("muted"," \xB7 "),switchHint=this.projectModeAvailable?keyHint("tui.input.tab",t("switch mode"))+sep12:"",actionHint=this.writeScope==="project"?rawKeyHint("space",t("cycle inherit/+/-")):rawKeyHint("space",t("toggle")),hint=switchHint+actionHint+sep12+rawKeyHint("esc",t("close")),spacing=Math.max(1,width-visibleWidth(title)-visibleWidth(hint)),scopeHint=this.writeScope==="project"?theme.fg("muted",t("{config}/settings.json \xB7 inherited global resources are dimmed",{config:CONFIG_DIR_NAME})):theme.fg("muted",`~/${CONFIG_DIR_NAME}/agent/settings.json`);return[truncateToWidth(`${title}${" ".repeat(spacing)}${hint}`,width,""),truncateToWidth(scopeHint,width,"")]}},ResourceList=class{groupsByScope;flatItems=[];filteredItems=[];selectedIndex=0;searchInput;maxVisible;settingsManager;cwd;agentDir;writeScope;inheritedEnabledByKey;pluginSelectionEntry;pluginManagerEntry;pluginManagerScope;onCancel;onExit;onToggle;onSwitchMode;_focused=!1;get focused(){return this._focused}set focused(value){this._focused=value,this.searchInput.focused=value}constructor(groupsByScope,settingsManager,cwd,agentDir,terminalHeight,writeScope="global",pluginSelectionEntry,pluginManagerEntry,pluginManagerScope="global"){this.groupsByScope=groupsByScope,this.settingsManager=settingsManager,this.cwd=cwd,this.agentDir=agentDir,this.writeScope=writeScope,this.pluginSelectionEntry=pluginSelectionEntry,this.pluginManagerEntry=pluginManagerEntry,this.pluginManagerScope=pluginManagerScope,this.inheritedEnabledByKey=this.buildInheritedEnabledMap(groupsByScope.global),this.searchInput=new Input;let chrome=8;this.maxVisible=Math.max(5,(terminalHeight??24)-chrome),this.buildFlatList(),this.filteredItems=[...this.flatItems]}setWriteScope(writeScope){this.writeScope=writeScope,this.buildFlatList(),this.filterItems(this.searchInput.getValue())}get groups(){return this.groupsByScope[this.writeScope]}buildInheritedEnabledMap(groups){let result=new Map;for(let group of groups)for(let subgroup of group.subgroups)for(let item of subgroup.items)result.set(this.getResourceItemKey(item),item.enabled);return result}buildFlatList(){this.flatItems=[];for(let group of this.groups){this.flatItems.push({type:"group",group});for(let subgroup of group.subgroups){this.flatItems.push({type:"subgroup",subgroup,group});for(let item of subgroup.items)this.flatItems.push({type:"item",item})}}this.pluginSelectionEntry!==void 0&&this.flatItems.push({type:"plugin",entry:this.pluginSelectionEntry}),this.pluginManagerEntry!==void 0&&this.writeScope===this.pluginManagerScope&&this.flatItems.push({type:"plugin-manager",entry:this.pluginManagerEntry}),this.selectedIndex=this.flatItems.findIndex(e=>e.type==="item"||e.type==="plugin"||e.type==="plugin-manager"),this.selectedIndex<0&&(this.selectedIndex=0)}findNextItem(fromIndex,direction){let idx=fromIndex+direction;for(;idx>=0&&idx<this.filteredItems.length;){if(this.filteredItems[idx].type==="item"||this.filteredItems[idx].type==="plugin"||this.filteredItems[idx].type==="plugin-manager")return idx;idx+=direction}return fromIndex}filterItems(query){if(!query.trim()){this.filteredItems=[...this.flatItems],this.selectFirstItem();return}let lowerQuery=query.toLowerCase(),matchingItems=new Set,matchingSubgroups=new Set,matchingGroups=new Set;for(let entry of this.flatItems)if(entry.type==="item"){let item=entry.item;(item.displayName.toLowerCase().includes(lowerQuery)||item.resourceType.toLowerCase().includes(lowerQuery)||item.path.toLowerCase().includes(lowerQuery))&&matchingItems.add(item)}for(let group of this.groups)for(let subgroup of group.subgroups)for(let item of subgroup.items)matchingItems.has(item)&&(matchingSubgroups.add(subgroup),matchingGroups.add(group));this.filteredItems=[];for(let entry of this.flatItems)entry.type==="group"&&matchingGroups.has(entry.group)?this.filteredItems.push(entry):entry.type==="subgroup"&&matchingSubgroups.has(entry.subgroup)?this.filteredItems.push(entry):entry.type==="item"&&matchingItems.has(entry.item)&&this.filteredItems.push(entry);this.selectFirstItem()}selectFirstItem(){let firstItemIndex=this.filteredItems.findIndex(e=>e.type==="item"||e.type==="plugin"||e.type==="plugin-manager");this.selectedIndex=firstItemIndex>=0?firstItemIndex:0}updateItem(item,enabled){item.enabled=enabled;for(let group of this.groups)for(let subgroup of group.subgroups){let found=subgroup.items.find(i=>i.path===item.path&&i.resourceType===item.resourceType);if(found){found.enabled=enabled;return}}}invalidate(){}render(width){let lines=[];if(lines.push(...this.searchInput.render(width)),lines.push(""),this.filteredItems.length===0)return lines.push(theme.fg("muted",` ${t("No resources found")}`)),lines;let startIndex=Math.max(0,Math.min(this.selectedIndex-Math.floor(this.maxVisible/2),this.filteredItems.length-this.maxVisible)),endIndex=Math.min(startIndex+this.maxVisible,this.filteredItems.length);for(let i=startIndex;i<endIndex;i++){let entry=this.filteredItems[i],isSelected=i===this.selectedIndex;if(entry.type==="group"){let inherited=this.writeScope==="project"&&entry.group.scope==="user",label=theme.bold(`${entry.group.label}${inherited?` \xB7 ${t("inherited global")}`:""}`),groupLine=theme.fg(inherited?"dim":"accent",label);lines.push(truncateToWidth(` ${groupLine}`,width,""))}else if(entry.type==="subgroup"){let color=this.writeScope==="project"&&entry.group.scope==="user"?"dim":"muted",subgroupLine=theme.fg(color,entry.subgroup.label);lines.push(truncateToWidth(` ${subgroupLine}`,width,""))}else if(entry.type==="plugin"){let prefix=isSelected?"> ":" ";for(let line of entry.entry.render(width))lines.push(truncateToWidth(`${prefix}${line.trimStart()}`,width,"..."))}else if(entry.type==="plugin-manager"){let prefix=isSelected?"> ":" ";for(let line of entry.entry.render(width))lines.push(truncateToWidth(`${prefix}${line.trimStart()}`,width,"..."))}else{let item=entry.item,cursor=isSelected?"> ":" ",dimmed=this.isDimmedItem(item),nameText=isSelected&&!dimmed?theme.bold(item.displayName):item.displayName,name=dimmed?theme.fg("dim",nameText):nameText;lines.push(truncateToWidth(`${cursor} ${this.renderCheckbox(item)} ${name}${this.getItemSuffix(item)}`,width,"..."))}}if(startIndex>0||endIndex<this.filteredItems.length){let itemCount=this.filteredItems.filter(e=>e.type==="item"||e.type==="plugin"||e.type==="plugin-manager").length,currentItemIndex=this.filteredItems.slice(0,this.selectedIndex).filter(e=>e.type==="item"||e.type==="plugin"||e.type==="plugin-manager").length+1;lines.push(theme.fg("dim",` (${currentItemIndex}/${itemCount})`))}return lines}handleInput(data){let kb=getKeybindings();if(this.pluginSelectionEntry?.focused===!0){this.pluginSelectionEntry.handleInput(data);return}if(this.pluginManagerEntry?.focused===!0){this.pluginManagerEntry.handleInput(data);return}if(kb.matches(data,"tui.select.up")){this.selectedIndex=this.findNextItem(this.selectedIndex,-1);return}if(kb.matches(data,"tui.select.down")){this.selectedIndex=this.findNextItem(this.selectedIndex,1);return}if(kb.matches(data,"tui.select.pageUp")){let target=Math.max(0,this.selectedIndex-this.maxVisible);for(;target<this.filteredItems.length&&this.filteredItems[target].type!=="item"&&this.filteredItems[target].type!=="plugin"&&this.filteredItems[target].type!=="plugin-manager";)target++;target<this.filteredItems.length&&(this.selectedIndex=target);return}if(kb.matches(data,"tui.select.pageDown")){let target=Math.min(this.filteredItems.length-1,this.selectedIndex+this.maxVisible);for(;target>=0&&this.filteredItems[target].type!=="item"&&this.filteredItems[target].type!=="plugin"&&this.filteredItems[target].type!=="plugin-manager";)target--;target>=0&&(this.selectedIndex=target);return}if(kb.matches(data,"tui.select.cancel")){this.onCancel?.();return}if(kb.matches(data,"app.config.exit")){this.onExit?.();return}if(kb.matches(data,"tui.input.tab")){this.onSwitchMode?.();return}if(data===" "||kb.matches(data,"tui.select.confirm")){let entry=this.filteredItems[this.selectedIndex];if(entry?.type==="plugin"&&this.writeScope==="global"){entry.entry.focused=!0,entry.entry.openPluginSelection();return}if(entry?.type==="plugin-manager"&&this.writeScope===this.pluginManagerScope){entry.entry.focused=!0,entry.entry.openPluginManager();return}if(entry?.type==="item"&&(this.writeScope==="project"||this.getItemScope(entry.item)==="user")){let newEnabled=this.toggleResource(entry.item);newEnabled!==void 0&&(this.updateItem(entry.item,newEnabled),this.onToggle?.(entry.item,newEnabled))}return}this.searchInput.handleInput(data),this.filterItems(this.searchInput.getValue())}toggleResource(item){if(this.writeScope==="project"){let state=this.getNextOverrideState(item);return this.setProjectResourceOverride(item,state)?state==="inherit"?this.getInheritedEnabled(item):state==="load":void 0}let enabled=!item.enabled;return item.metadata.origin==="top-level"?this.toggleTopLevelResource(item,enabled):this.togglePackageResource(item,enabled),enabled}toggleTopLevelResource(item,enabled){let scope=item.metadata.scope,settings=scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings(),arrayKey=item.resourceType,current=settings[arrayKey]??[],pattern=this.getResourcePattern(item),disablePattern=`-${pattern}`,enablePattern=`+${pattern}`,updated=current.filter(p=>(p.startsWith("!")||p.startsWith("+")||p.startsWith("-")?p.slice(1):p)!==pattern);enabled?updated.push(enablePattern):updated.push(disablePattern),scope==="project"?arrayKey==="skills"?this.settingsManager.setProjectSkillPaths(updated):arrayKey==="prompts"?this.settingsManager.setProjectPromptTemplatePaths(updated):arrayKey==="themes"&&this.settingsManager.setProjectThemePaths(updated):arrayKey==="skills"?this.settingsManager.setSkillPaths(updated):arrayKey==="prompts"?this.settingsManager.setPromptTemplatePaths(updated):arrayKey==="themes"&&this.settingsManager.setThemePaths(updated)}togglePackageResource(item,enabled){let scope=item.metadata.scope,packages=[...(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]],pkgIndex=packages.findIndex(pkg2=>(typeof pkg2=="string"?pkg2:pkg2.source)===item.metadata.source);if(pkgIndex===-1)return;let pkg=packages[pkgIndex];typeof pkg=="string"&&(pkg={source:pkg},packages[pkgIndex]=pkg);let arrayKey=item.resourceType,current=pkg[arrayKey]??[],pattern=this.getPackageResourcePattern(item),disablePattern=`-${pattern}`,enablePattern=`+${pattern}`,updated=current.filter(p=>(p.startsWith("!")||p.startsWith("+")||p.startsWith("-")?p.slice(1):p)!==pattern);enabled?updated.push(enablePattern):updated.push(disablePattern),pkg[arrayKey]=updated.length>0?updated:void 0,["skills","prompts","themes"].some(k=>pkg[k]!==void 0)||(packages[pkgIndex]=pkg.source),scope==="project"?this.settingsManager.setProjectPackages(packages):this.settingsManager.setPackages(packages)}renderCheckbox(item){if(this.writeScope==="project"){let state=this.getProjectOverrideState(item);return state==="load"?theme.fg("success","[+]"):state==="unload"?theme.fg("warning","[-]"):theme.fg("dim",item.enabled?"[x]":"[ ]")}return item.enabled?theme.fg("success","[x]"):theme.fg("dim","[ ]")}getItemSuffix(item){if(this.writeScope!=="project")return"";let state=this.getProjectOverrideState(item);return state==="load"?theme.fg("muted",` ${t("project load")}`):state==="unload"?theme.fg("muted",` ${t("project unload")}`):this.isInheritedGlobalItem(item)?theme.fg("dim",` ${t("inherited global")}`):""}isDimmedItem(item){return this.writeScope==="project"&&this.isInheritedGlobalItem(item)&&this.getProjectOverrideState(item)==="inherit"}setProjectResourceOverride(item,state){return item.metadata.origin==="top-level"?this.setProjectTopLevelOverride(item,state):this.setProjectPackageOverride(item,state)}setProjectTopLevelOverride(item,state){let current=this.settingsManager.getProjectSettings()[item.resourceType]??[],pattern=this.isInheritedGlobalItem(item)?item.path:this.getResourcePatternForScope(item,"project"),patterns=this.getTopLevelOverridePatterns(item,"project"),updated=current.filter(entry=>{let target=this.getPatternEntryTarget(entry);return(entry.startsWith("!")||entry.startsWith("+")||entry.startsWith("-"))&&patterns.has(target)?!1:!(state==="inherit"&&this.isInheritedGlobalItem(item)&&target===pattern)});return state!=="inherit"&&(this.isInheritedGlobalItem(item)&&!updated.includes(pattern)&&updated.push(pattern),updated.push(`${state==="load"?"+":"-"}${pattern}`)),this.setProjectTopLevelPaths(item.resourceType,updated),!0}setProjectTopLevelPaths(key,paths){key==="skills"?this.settingsManager.setProjectSkillPaths(paths):key==="prompts"?this.settingsManager.setProjectPromptTemplatePaths(paths):this.settingsManager.setProjectThemePaths(paths)}setProjectPackageOverride(item,state){let packages=[...this.settingsManager.getProjectSettings().packages??[]],pkgIndex=packages.findIndex(pkg2=>this.packageSourceStringMatches(item.metadata.source,this.getItemScope(item),typeof pkg2=="string"?pkg2:pkg2.source,"project"));if(pkgIndex===-1){if(state==="inherit")return!1;packages.push(this.createPackageOverrideSource(item)),pkgIndex=packages.length-1}let pkg=packages[pkgIndex];if(pkg===void 0)return!1;typeof pkg=="string"&&(pkg={source:pkg},packages[pkgIndex]=pkg);let pattern=this.getPackageResourcePattern(item),updated=(pkg[item.resourceType]??[]).filter(entry=>this.getPatternEntryTarget(entry)!==pattern);return state!=="inherit"&&updated.push(`${state==="load"?"+":"-"}${pattern}`),pkg[item.resourceType]=updated.length>0?updated:void 0,RESOURCE_TYPES2.some(key=>pkg[key]!==void 0)||(pkg.autoload===!1?packages.splice(pkgIndex,1):packages[pkgIndex]=pkg.source),this.settingsManager.setProjectPackages(packages),!0}getNextOverrideState(item){let state=this.getProjectOverrideState(item),inheritedEnabled=this.getInheritedEnabled(item);return state==="inherit"?inheritedEnabled?"unload":"load":state==="unload"?inheritedEnabled?"load":"inherit":inheritedEnabled?"inherit":"unload"}getProjectOverrideState(item){if(this.writeScope!=="project")return"inherit";if(item.metadata.origin==="top-level")return this.getOverrideStateFromEntries(this.settingsManager.getProjectSettings()[item.resourceType]??[],this.getTopLevelOverridePatterns(item,"project"),!1);let pkg=this.findMatchingPackageSource(item,"project");if(typeof pkg!="object")return"inherit";let entries=pkg[item.resourceType];return entries===void 0?"inherit":this.getOverrideStateFromEntries(entries,new Set([this.getPackageResourcePattern(item)]),pkg.autoload!==!1)}getOverrideStateFromEntries(entries,patterns,emptyArrayIsUnload){if(entries.length===0&&emptyArrayIsUnload)return"unload";let state="inherit";for(let entry of entries)patterns.has(this.getPatternEntryTarget(entry))&&(entry.startsWith("!")||entry.startsWith("-")?state="unload":state="load");return state}getInheritedEnabled(item){return this.inheritedEnabledByKey.get(this.getResourceItemKey(item))??(this.getItemScope(item)==="user"?item.enabled:!0)}isInheritedGlobalItem(item){return this.getItemScope(item)==="user"||this.inheritedEnabledByKey.has(this.getResourceItemKey(item))}getTopLevelOverridePatterns(item,scope){let baseDir=this.getTopLevelBaseDir(scope),patterns=new Set([this.getResourcePatternForScope(item,scope),item.path,relative9(baseDir,item.path)]);return item.metadata.baseDir&&patterns.add(relative9(item.metadata.baseDir,item.path)),patterns}getResourcePatternForScope(item,scope){let sourceScope=this.getItemScope(item);if(scope!==sourceScope)return item.path;let baseDir=item.metadata.baseDir??this.getTopLevelBaseDir(sourceScope);return relative9(baseDir,item.path)}createPackageOverrideSource(item){let source=item.metadata.source;if(!isLocalPath(source))return{source,autoload:!1};let sourcePath=resolvePath(source,this.getTopLevelBaseDir(this.getItemScope(item)),{trim:!0});return{source:relative9(this.getTopLevelBaseDir("project"),sourcePath)||".",autoload:!1}}packageSourceStringMatches(leftSource,leftScope,rightSource,rightScope){if(leftSource===rightSource)return!0;if(!isLocalPath(leftSource)||!isLocalPath(rightSource))return!1;let left=resolvePath(leftSource,this.getTopLevelBaseDir(leftScope),{trim:!0}),right=resolvePath(rightSource,this.getTopLevelBaseDir(rightScope),{trim:!0});return left===right}findMatchingPackageSource(item,targetScope){return((targetScope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]).find(pkg=>this.packageSourceStringMatches(item.metadata.source,this.getItemScope(item),typeof pkg=="string"?pkg:pkg.source,targetScope))}getPatternEntryTarget(entry){return entry.startsWith("!")||entry.startsWith("+")||entry.startsWith("-")?entry.slice(1):entry}getResourceItemKey(item){return`${item.resourceType}:${canonicalizePath(item.path)}`}getItemScope(item){return item.metadata.scope==="project"?"project":"user"}getTopLevelBaseDir(scope){return scope==="project"?join50(this.cwd,CONFIG_DIR_NAME):this.agentDir}getResourcePattern(item){let scope=item.metadata.scope,baseDir=item.metadata.baseDir??this.getTopLevelBaseDir(scope);return relative9(baseDir,item.path)}getPackageResourcePattern(item){let baseDir=item.metadata.baseDir??dirname27(item.path);return relative9(baseDir,item.path)}},ConfigSelectorComponent=class extends Container{header;resourceList;pluginSelectionEntry;pluginManagerEntry;writeScope;_focused=!1;get focused(){return this._focused}set focused(value){this._focused=value,this.resourceList.focused=value}constructor(resolvedPaths,settingsManager,cwd,agentDir,onClose,onExit,requestRender,terminalHeight,writeScope="global",projectModeAvailable=!0,pluginSelection,pluginManager,pluginManagerScope="global"){super(),this.writeScope=writeScope;let groupsByScope={global:buildGroups(resolvedPaths.global,agentDir),project:buildGroups(resolvedPaths.project,agentDir)},pluginSelectionEntry=pluginSelection===void 0?void 0:new PluginSelectionEntryComponent({...pluginSelection,onClose:()=>{pluginSelection.onClose?.()},requestRender});this.pluginSelectionEntry=pluginSelectionEntry;let pluginManagerEntry=pluginManager===void 0?void 0:new PluginManagerEntryComponent({...pluginManager,onClose:()=>{pluginManager.onClose?.()},requestRender});this.pluginManagerEntry=pluginManagerEntry,this.addChild(new Spacer(1)),this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.header=new ConfigSelectorHeader(this.writeScope,projectModeAvailable),this.addChild(this.header),this.addChild(new Spacer(1)),this.resourceList=new ResourceList(groupsByScope,settingsManager,cwd,agentDir,terminalHeight===void 0?void 0:Math.max(5,terminalHeight-(pluginSelection===void 0?0:2)-(pluginManager===void 0?0:2)),this.writeScope,pluginSelectionEntry,pluginManagerEntry,pluginManagerScope),this.resourceList.onCancel=onClose,this.resourceList.onExit=onExit,this.resourceList.onToggle=()=>requestRender(),projectModeAvailable&&(this.resourceList.onSwitchMode=()=>{this.switchWriteScope(),requestRender()}),this.addChild(this.resourceList),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder)}switchWriteScope(){this.writeScope=this.writeScope==="global"?"project":"global",this.header.setWriteScope(this.writeScope),this.resourceList.setWriteScope(this.writeScope)}getResourceList(){return this.resourceList}getPluginSelectionEntry(){return this.pluginSelectionEntry}getPluginManagerEntry(){return this.pluginManagerEntry}async openPluginSelection(){return this.pluginSelectionEntry===void 0?void 0:await this.pluginSelectionEntry.openPluginSelection()}async openPluginManager(){return this.pluginManagerEntry===void 0?void 0:await this.pluginManagerEntry.openPluginManager()}};async function selectConfig(options){initTheme(options.settingsManager.getTheme(),!0);let pluginSnapshot=options.pluginSelectionController?await options.pluginSelectionController.getSnapshot():void 0,pluginManagerSnapshot=options.pluginManagerController?await options.pluginManagerController.getSnapshot():void 0;return new Promise(resolve22=>{let ui=new TuiMainScreen(new ProcessTerminal,void 0,options.agentDir),resolved=!1,selector=new ConfigSelectorComponent(options.resolvedPaths,options.settingsManager,options.cwd,options.agentDir,()=>{resolved||(resolved=!0,ui.stop(),stopThemeWatcher(),resolve22())},()=>{ui.stop(),stopThemeWatcher(),process.exit(0)},()=>ui.requestRender(),ui.terminal.rows,options.writeScope,options.projectModeAvailable,options.pluginSelectionController===void 0?void 0:{profileId:options.pluginSelectionProfileId??"coding-core",controller:options.pluginSelectionController,snapshot:pluginSnapshot?.status==="ok"?pluginSnapshot.snapshot:void 0,onOpen:()=>ui.requestRender(),requestRender:()=>ui.requestRender()},options.pluginManagerController===void 0?void 0:{controller:options.pluginManagerController,snapshot:pluginManagerSnapshot?.status==="ok"?pluginManagerSnapshot.snapshot:void 0,requestRender:()=>ui.requestRender()},options.pluginManagerScope);ui.addChild(selector),ui.setFocus(selector.getResourceList()),ui.start()})}import{randomUUID as randomUUID19}from"node:crypto";import{copyFileSync as copyFileSync2,existsSync as existsSync26,mkdirSync as mkdirSync15,renameSync as renameSync3,rmSync as rmSync5}from"node:fs";import{basename as basename15,dirname as dirname28,join as join51,relative as relative10,resolve as resolve20,toNamespacedPath}from"node:path";var QUARANTINE_DIR_NAME=".agent-forge-native-quarantine";function normalizePath3(path8){return toNamespacedPath(resolve20(path8))}function getQuarantineRoot(packageDir){let current=resolve20(packageDir);for(;;){if(basename15(current).toLowerCase()==="node_modules")return join51(current,QUARANTINE_DIR_NAME);let parent=dirname28(current);if(parent===current)return;current=parent}}function getLoadedSharedObjectsInPackageDir(packageDir){let sharedObjects=process.report.getReport().sharedObjects;if(!Array.isArray(sharedObjects))return[];let root=normalizePath3(packageDir).toLowerCase(),seen=new Set,loadedFiles=[];for(let value of sharedObjects){if(typeof value!="string")continue;let filePath=normalizePath3(value),comparisonPath=filePath.toLowerCase();getCwdRelativePath(comparisonPath,root)===void 0||seen.has(comparisonPath)||(seen.add(comparisonPath),loadedFiles.push(filePath))}return loadedFiles}function cleanupWindowsSelfUpdateQuarantine(packageDir){let quarantineRoot=getQuarantineRoot(packageDir);if(quarantineRoot)try{rmSync5(quarantineRoot,{recursive:!0,force:!0})}catch{}}function quarantineWindowsNativeDependencies(packageDir){let resolvedPackageDir=normalizePath3(packageDir),quarantineRoot=getQuarantineRoot(resolvedPackageDir);if(!quarantineRoot)return;let loadedFiles=getLoadedSharedObjectsInPackageDir(resolvedPackageDir);if(loadedFiles.length===0)return;let quarantineRunDir=join51(quarantineRoot,`${Date.now()}-${process.pid}-${randomUUID19()}`);for(let loadedFile of loadedFiles){if(!existsSync26(loadedFile))continue;let quarantinePath=join51(quarantineRunDir,relative10(resolvedPackageDir,loadedFile));mkdirSync15(dirname28(quarantinePath),{recursive:!0}),renameSync3(loadedFile,quarantinePath),copyFileSync2(quarantinePath,loadedFile)}}var MANAGED_INSTALL_MARKER="managed-install.json",MANAGED_RELEASE_VERSION_RE=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function getActiveManagedInstallRoot(){let configuredRoot=process.env.AGENT_FORGE_MANAGED_INSTALL_ROOT?.trim();if(!configuredRoot)return;let managedRoot=resolve21(configuredRoot),releasesDir=canonicalizePath(join52(managedRoot,"releases"));if(getCwdRelativePath(canonicalizePath(getPackageDir()),releasesDir)===void 0)return;let markerPath=join52(managedRoot,MANAGED_INSTALL_MARKER);try{let marker=JSON.parse(readFileSync25(markerPath,"utf8"));if(marker.kind!=="agent-forge-managed-install"||marker.schemaVersion!==1||marker.layout!=="releases-v1")throw new Error}catch{throw new Error(t("Managed install marker is missing or invalid: {path}",{path:markerPath}))}return managedRoot}async function fetchInstallerArtifact(url,label){let response2=await fetch(url,{headers:{"User-Agent":getAgentForgeUserAgent(VERSION)}});if(!response2.ok)throw new Error(t("Could not download managed installer {label} from {url}: HTTP {status}",{label,url,status:response2.status}));return await response2.text()}async function runManagedNpmCi(stageDir){let args=["ci","--ignore-scripts","--min-release-age=0","--omit=dev","--include=optional","--no-fund","--no-audit","--loglevel=error","--progress=false"],code=await waitForChildProcess(spawnProcess("npm",args,{cwd:stageDir,stdio:"inherit"}));if(code!==0)throw new Error(t("npm {args} exited with code {code}",{args:args.join(" "),code:code??"unknown"}))}function verifyManagedRelease(releaseDir,expectedVersion){let binPath=join52(releaseDir,"node_modules",".bin",process.platform==="win32"?`${APP_NAME}.cmd`:APP_NAME),result=spawnProcessSync(binPath,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(result.error||result.status!==0){let reason=result.error?.message||result.stderr.trim()||`exit code ${result.status??"unknown"}`;throw new Error(t("Could not verify managed {app} {version}: {reason}",{app:APP_NAME,version:expectedVersion,reason}))}let installedVersion=result.stdout.trim();if(installedVersion!==expectedVersion)throw new Error(t("Managed {app} smoke test returned version {installed}; expected {expected}.",{app:APP_NAME,installed:installedVersion,expected:expectedVersion}))}async function activateStagedRelease(stageDir,releaseDir){for(let attempt2=0;;attempt2++)try{renameSync4(stageDir,releaseDir);return}catch(error){if(attempt2>=9||!existsSync27(stageDir))throw error;await sleep2(1e3)}}function activateManagedRelease(managedRoot,version){let currentPath=join52(managedRoot,"current-version"),temporaryPath=join52(managedRoot,`current-version.tmp.${process.pid}-${Date.now()}`);try{writeFileSync17(temporaryPath,`${version}