@code-yeongyu/senpi 2026.10.16-3 → 2026.10.16-4

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 (99) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/bundle/chunks/{chunk-I5ZJEXTM.js → chunk-2NO5ZOYE.js} +6 -6
  3. package/dist/bundle/chunks/{chunk-4R4PRTF5.js → chunk-CJRE5LLR.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-X5VCHHXR.js → chunk-GY5O7NIQ.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-AVALXFDW.js → chunk-JD4CV3GH.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-SSEGIXRL.js → chunk-KUQ3K33L.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-FMYLLJBQ.js → chunk-KWC3MCLP.js} +1 -1
  8. package/dist/bundle/chunks/chunk-MLL7AGVM.js +3 -0
  9. package/dist/bundle/chunks/chunk-PAJKEG2L.js +8 -0
  10. package/dist/bundle/chunks/{chunk-DPRV3FR7.js → chunk-PWHAOWNH.js} +1 -1
  11. package/dist/bundle/chunks/{chunk-HJPX7PBL.js → chunk-XCRGEMY2.js} +125 -118
  12. package/dist/bundle/chunks/{cli-main-JVPFJGP5.js → cli-main-I6JF2GPS.js} +1 -1
  13. package/dist/bundle/chunks/{help-fast-path-SVCMHCYG.js → help-fast-path-APSHUDY6.js} +1 -1
  14. package/dist/bundle/chunks/{host-session-command-46PTZGIB.js → host-session-command-BUJUJHDA.js} +1 -1
  15. package/dist/bundle/chunks/{interactive-mode-BROZRY34.js → interactive-mode-4Q3TIXOZ.js} +1 -1
  16. package/dist/bundle/chunks/{multi-session-host-SMQR5SCJ.js → multi-session-host-XEZB2XVR.js} +5 -4
  17. package/dist/bundle/chunks/{package-manager-cli-2QFJY2AS.js → package-manager-cli-YWZHOZOY.js} +1 -1
  18. package/dist/bundle/chunks/{rotation-stream-QX7YSKDU.js → rotation-stream-HY3JPQCX.js} +1 -1
  19. package/dist/bundle/chunks/{rpc-mode-Z45T3NZO.js → rpc-mode-SLWXVXXE.js} +1 -1
  20. package/dist/bundle/chunks/{schedule-command-2RHSWBQO.js → schedule-command-JRWZGEDU.js} +1 -1
  21. package/dist/bundle/chunks/{session-control-endpoint-H7FFWF2A.js → session-control-endpoint-E2ZSEWXW.js} +1 -1
  22. package/dist/bundle/chunks/session-picker-5IZY7E3G.js +2 -0
  23. package/dist/bundle/chunks/session-worker.js +243 -235
  24. package/dist/bundle/cli.js +2 -2
  25. package/dist/bundle/index.js +1 -1
  26. package/dist/bundle/rpc-entry.js +1 -1
  27. package/dist/bundle/runtime-manifest.json +1 -1
  28. package/dist/core/agent-session-runtime.d.ts +15 -0
  29. package/dist/core/agent-session-runtime.js +53 -2
  30. package/dist/core/agent-session.d.ts +12 -0
  31. package/dist/core/agent-session.js +42 -1
  32. package/dist/core/context-files.d.ts +21 -0
  33. package/dist/core/context-files.js +175 -0
  34. package/dist/core/diagnostics.d.ts +1 -0
  35. package/dist/core/extensions/builtin/anthropic-subscription/account-command.js +26 -3
  36. package/dist/core/extensions/builtin/anthropic-subscription/account-management.d.ts +5 -0
  37. package/dist/core/extensions/builtin/anthropic-subscription/account-management.js +40 -0
  38. package/dist/core/extensions/builtin/anthropic-subscription/accounts.d.ts +3 -0
  39. package/dist/core/extensions/builtin/anthropic-subscription/accounts.js +1 -1
  40. package/dist/core/extensions/builtin/anthropic-subscription/affinity.js +1 -1
  41. package/dist/core/extensions/builtin/anthropic-subscription/auth-lane.js +1 -0
  42. package/dist/core/extensions/builtin/anthropic-subscription/failover.d.ts +10 -5
  43. package/dist/core/extensions/builtin/anthropic-subscription/failover.js +158 -17
  44. package/dist/core/extensions/builtin/anthropic-subscription/usage-limit-block.d.ts +13 -0
  45. package/dist/core/extensions/builtin/anthropic-subscription/usage-limit-block.js +89 -0
  46. package/dist/core/extensions/builtin/permission-system/always-scope.d.ts +34 -0
  47. package/dist/core/extensions/builtin/permission-system/always-scope.js +77 -0
  48. package/dist/core/extensions/builtin/permission-system/index.js +3 -1
  49. package/dist/core/extensions/builtin/permission-system/parsers.d.ts +1 -1
  50. package/dist/core/extensions/builtin/permission-system/parsers.js +24 -3
  51. package/dist/core/extensions/builtin/permission-system/prompt.js +5 -1
  52. package/dist/core/extensions/builtin/permission-system/service.js +1 -1
  53. package/dist/core/extensions/builtin/permission-system/types.d.ts +7 -0
  54. package/dist/core/package-manager.js +4 -32
  55. package/dist/core/project-trust.d.ts +8 -0
  56. package/dist/core/project-trust.js +12 -0
  57. package/dist/core/resource-loader.d.ts +5 -7
  58. package/dist/core/resource-loader.js +11 -84
  59. package/dist/core/retry-fallback/circuit-probes.d.ts +1 -0
  60. package/dist/core/retry-fallback/circuit-probes.js +3 -0
  61. package/dist/core/retry-fallback/circuit.d.ts +5 -0
  62. package/dist/core/retry-fallback/circuit.js +27 -4
  63. package/dist/core/retry-fallback/controller.d.ts +9 -4
  64. package/dist/core/retry-fallback/controller.js +21 -4
  65. package/dist/core/settings-manager.d.ts +15 -0
  66. package/dist/core/settings-manager.js +21 -1
  67. package/dist/core/skills-prompt.d.ts +18 -0
  68. package/dist/core/skills-prompt.js +131 -0
  69. package/dist/core/skills.d.ts +1 -9
  70. package/dist/core/skills.js +1 -59
  71. package/dist/core/trust-manager.d.ts +13 -4
  72. package/dist/core/trust-manager.js +52 -21
  73. package/dist/main.js +23 -4
  74. package/dist/modes/interactive/interactive-mode.js +10 -3
  75. package/dist/modes/rpc/abort-grace.d.ts +9 -0
  76. package/dist/modes/rpc/abort-grace.js +11 -0
  77. package/dist/modes/rpc/effect-commands.d.ts +0 -2
  78. package/dist/modes/rpc/effect-commands.js +2 -3
  79. package/dist/modes/rpc/host-handover-parked.d.ts +6 -0
  80. package/dist/modes/rpc/host-handover-parked.js +1 -0
  81. package/dist/modes/rpc/host-handover-reopen.js +11 -2
  82. package/dist/modes/rpc/rpc-client.d.ts +28 -2
  83. package/dist/modes/rpc/rpc-client.js +24 -11
  84. package/dist/modes/rpc/rpc-request-deadline.d.ts +12 -0
  85. package/dist/modes/rpc/rpc-request-deadline.js +15 -0
  86. package/dist/modes/rpc/session-command-router.js +7 -4
  87. package/dist/modes/rpc/session-registry-attach.js +6 -1
  88. package/dist/modes/rpc/session-registry-claims.d.ts +22 -2
  89. package/dist/modes/rpc/session-registry-claims.js +68 -0
  90. package/dist/modes/rpc/session-registry-opening.d.ts +23 -0
  91. package/dist/modes/rpc/session-registry-opening.js +57 -0
  92. package/dist/modes/rpc/session-registry.d.ts +1 -0
  93. package/dist/modes/rpc/session-registry.js +48 -60
  94. package/docs/rpc.md +6 -2
  95. package/docs/settings.md +13 -0
  96. package/package.json +6 -6
  97. package/dist/bundle/chunks/chunk-6MEETY7N.js +0 -8
  98. package/dist/bundle/chunks/chunk-TEGEPQIA.js +0 -3
  99. package/dist/bundle/chunks/session-picker-2O2BNBVE.js +0 -2
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-TEGEPQIA.js";import{parseArgs,printHelp}from"./chunk-BJ7LHDCD.js";import{CONFIG_DIR_NAME,DISPLAY_VERSION,getAgentDir}from"./chunk-NP42HAJO.js";import{createHash}from"node:crypto";import{existsSync,mkdirSync,readFileSync,renameSync,rmSync,statSync,writeFileSync}from"node:fs";import{dirname,isAbsolute,join}from"node:path";var CACHE_FILE_VERSION=1,MAX_CACHED_SCOPES=8;function cachePath(agentDir){return join(agentDir,"cache","help-flags.json")}function scopeKey(scope){let material=[scope.cwd,scope.noExtensions?"no-extensions":"extensions",scope.projectTrusted?"trusted":"untrusted",...scope.cliExtensionPaths].join("\0");return createHash("sha256").update(material).digest("hex").slice(0,32)}function stamp(path){try{let stats=statSync(path);return stats.isDirectory()?`d:${stats.mtimeMs}`:`f:${stats.mtimeMs}:${stats.size}`}catch{return"absent"}}function discoveryInputs(scope,extensionPaths){let paths=new Set([join(scope.agentDir,"settings.json"),join(scope.agentDir,"extensions"),join(scope.agentDir,"trust.json"),join(scope.cwd,CONFIG_DIR_NAME,"settings.json"),join(scope.cwd,CONFIG_DIR_NAME,"extensions")]);for(let path of extensionPaths)isAbsolute(path)&&(paths.add(path),paths.add(dirname(path)));for(let path of scope.cliExtensionPaths)isAbsolute(path)&&paths.add(path);return[...paths].sort()}function readCacheFile(agentDir){try{let parsed=JSON.parse(readFileSync(cachePath(agentDir),"utf8"));return parsed.version!==CACHE_FILE_VERSION||typeof parsed.scopes!="object"||parsed.scopes===null?void 0:parsed}catch{return}}function readHelpFlagsCache(scope){let cached=readCacheFile(scope.agentDir)?.scopes[scopeKey(scope)];if(!(!cached||cached.appVersion!==DISPLAY_VERSION||!Array.isArray(cached.inputs))){for(let input of cached.inputs)if(stamp(input.path)!==input.state)return;return[...cached.flags]}}function writeHelpFlagsCache(options){let{scope,flags,extensionPaths}=options;try{let scopes={...readCacheFile(scope.agentDir)?.scopes??{}};scopes[scopeKey(scope)]={writtenAt:Date.now(),appVersion:DISPLAY_VERSION,inputs:discoveryInputs(scope,extensionPaths).map(path=>({path,state:stamp(path)})),flags:[...flags]};let keptEntries=Object.entries(scopes).sort(([,left],[,right])=>right.writtenAt-left.writtenAt).slice(0,MAX_CACHED_SCOPES),file={version:CACHE_FILE_VERSION,scopes:Object.fromEntries(keptEntries)},target=cachePath(scope.agentDir);mkdirSync(dirname(target),{recursive:!0});let temporary=`${target}.${process.pid}.tmp`;writeFileSync(temporary,JSON.stringify(file),{mode:384});try{renameSync(temporary,target)}catch(error){throw existsSync(temporary)&&rmSync(temporary,{force:!0}),error}}catch{return}}function isPlainHelpRequest(parsed){return parsed.help===!0&&parsed.print!==!0&&parsed.mode===void 0}function resolveHelpProjectTrust(parsed,cwd,agentDir){return parsed.projectTrustOverride!==void 0?parsed.projectTrustOverride:hasTrustRequiringProjectResources(cwd)?new ProjectTrustStore(agentDir).get(cwd)===!0:!0}function helpFlagsScope(parsed,cwd,agentDir,projectTrusted){return{cwd,agentDir,cliExtensionPaths:[...parsed.extensions??[]],noExtensions:parsed.noExtensions===!0,projectTrusted}}function tryPrintHelpWithoutEngine(argv){let parsed;try{parsed=parseArgs([...argv])}catch{return!1}if(!isPlainHelpRequest(parsed)||parsed.diagnostics.length>0)return!1;if(parsed.noExtensions===!0)return printHelp([]),!0;let flags;try{let cwd=process.cwd(),agentDir=getAgentDir();flags=readHelpFlagsCache(helpFlagsScope(parsed,cwd,agentDir,resolveHelpProjectTrust(parsed,cwd,agentDir)))}catch{return!1}return flags?(printHelp(flags),!0):!1}export{writeHelpFlagsCache,isPlainHelpRequest,resolveHelpProjectTrust,helpFlagsScope,tryPrintHelpWithoutEngine};
2
+ import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-MLL7AGVM.js";import{parseArgs,printHelp}from"./chunk-BJ7LHDCD.js";import{CONFIG_DIR_NAME,DISPLAY_VERSION,getAgentDir}from"./chunk-NP42HAJO.js";import{createHash}from"node:crypto";import{existsSync,mkdirSync,readFileSync,renameSync,rmSync,statSync,writeFileSync}from"node:fs";import{dirname,isAbsolute,join}from"node:path";var CACHE_FILE_VERSION=1,MAX_CACHED_SCOPES=8;function cachePath(agentDir){return join(agentDir,"cache","help-flags.json")}function scopeKey(scope){let material=[scope.cwd,scope.noExtensions?"no-extensions":"extensions",scope.projectTrusted?"trusted":"untrusted",...scope.cliExtensionPaths].join("\0");return createHash("sha256").update(material).digest("hex").slice(0,32)}function stamp(path){try{let stats=statSync(path);return stats.isDirectory()?`d:${stats.mtimeMs}`:`f:${stats.mtimeMs}:${stats.size}`}catch{return"absent"}}function discoveryInputs(scope,extensionPaths){let paths=new Set([join(scope.agentDir,"settings.json"),join(scope.agentDir,"extensions"),join(scope.agentDir,"trust.json"),join(scope.cwd,CONFIG_DIR_NAME,"settings.json"),join(scope.cwd,CONFIG_DIR_NAME,"extensions")]);for(let path of extensionPaths)isAbsolute(path)&&(paths.add(path),paths.add(dirname(path)));for(let path of scope.cliExtensionPaths)isAbsolute(path)&&paths.add(path);return[...paths].sort()}function readCacheFile(agentDir){try{let parsed=JSON.parse(readFileSync(cachePath(agentDir),"utf8"));return parsed.version!==CACHE_FILE_VERSION||typeof parsed.scopes!="object"||parsed.scopes===null?void 0:parsed}catch{return}}function readHelpFlagsCache(scope){let cached=readCacheFile(scope.agentDir)?.scopes[scopeKey(scope)];if(!(!cached||cached.appVersion!==DISPLAY_VERSION||!Array.isArray(cached.inputs))){for(let input of cached.inputs)if(stamp(input.path)!==input.state)return;return[...cached.flags]}}function writeHelpFlagsCache(options){let{scope,flags,extensionPaths}=options;try{let scopes={...readCacheFile(scope.agentDir)?.scopes??{}};scopes[scopeKey(scope)]={writtenAt:Date.now(),appVersion:DISPLAY_VERSION,inputs:discoveryInputs(scope,extensionPaths).map(path=>({path,state:stamp(path)})),flags:[...flags]};let keptEntries=Object.entries(scopes).sort(([,left],[,right])=>right.writtenAt-left.writtenAt).slice(0,MAX_CACHED_SCOPES),file={version:CACHE_FILE_VERSION,scopes:Object.fromEntries(keptEntries)},target=cachePath(scope.agentDir);mkdirSync(dirname(target),{recursive:!0});let temporary=`${target}.${process.pid}.tmp`;writeFileSync(temporary,JSON.stringify(file),{mode:384});try{renameSync(temporary,target)}catch(error){throw existsSync(temporary)&&rmSync(temporary,{force:!0}),error}}catch{return}}function isPlainHelpRequest(parsed){return parsed.help===!0&&parsed.print!==!0&&parsed.mode===void 0}function resolveHelpProjectTrust(parsed,cwd,agentDir){return parsed.projectTrustOverride!==void 0?parsed.projectTrustOverride:hasTrustRequiringProjectResources(cwd)?new ProjectTrustStore(agentDir).get(cwd)===!0:!0}function helpFlagsScope(parsed,cwd,agentDir,projectTrusted){return{cwd,agentDir,cliExtensionPaths:[...parsed.extensions??[]],noExtensions:parsed.noExtensions===!0,projectTrusted}}function tryPrintHelpWithoutEngine(argv){let parsed;try{parsed=parseArgs([...argv])}catch{return!1}if(!isPlainHelpRequest(parsed)||parsed.diagnostics.length>0)return!1;if(parsed.noExtensions===!0)return printHelp([]),!0;let flags;try{let cwd=process.cwd(),agentDir=getAgentDir();flags=readHelpFlagsCache(helpFlagsScope(parsed,cwd,agentDir,resolveHelpProjectTrust(parsed,cwd,agentDir)))}catch{return!1}return flags?(printHelp(flags),!0):!1}export{writeHelpFlagsCache,isPlainHelpRequest,resolveHelpProjectTrust,helpFlagsScope,tryPrintHelpWithoutEngine};
@@ -1,3 +1,3 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
2
  import{require_semver}from"./chunk-ZOFZRJSL.js";import{fetchWithRetry}from"./chunk-2SOVDETB.js";import{APP_NAME,BRAND,DISPLAY_VERSION,PACKAGE_NAME,brandProfile,envValue}from"./chunk-NP42HAJO.js";import{__toESM}from"./chunk-IKOFCODM.js";import{spawnSync}from"node:child_process";import{homedir as osHomedir}from"node:os";import{posix,win32}from"node:path";var RUNTIME_ENV_VAR="SENPI_RUNTIME",MIN_BUN_VERSION="1.4.0";function normalize(path){return path.replaceAll("\\","/")}function paths(options){return options.platform==="win32"?win32:posix}function bunRoot(options){let configured=options.env.BUN_INSTALL;return configured!==void 0&&configured.trim()!==""?configured:paths(options).join(options.homedir,".bun")}function resolveOrSelf(path,options){try{return options.realpath(path)}catch{return path}}function isUnderBunGlobalTree(scriptRealPath,options){let globalRoot=paths(options).join(bunRoot(options),"install","global"),script=normalize(scriptRealPath);for(let candidate of new Set([globalRoot,resolveOrSelf(globalRoot,options)]))if(script.startsWith(`${normalize(candidate)}/`))return!0;return!1}function isInstalledPackageScript(scriptRealPath){return normalize(scriptRealPath).includes("/node_modules/")}function bunVersionSatisfies(version){let actual=/^v?(\d+)\.(\d+)\.(\d+)/.exec(version?.trim()??""),minimum=/^(\d+)\.(\d+)\.(\d+)/.exec(MIN_BUN_VERSION);if(!actual||!minimum)return!1;for(let index=1;index<=3;index++){let difference=Number(actual[index])-Number(minimum[index]);if(difference!==0)return difference>0}return!0}function bunExecutableName(options){return options.platform==="win32"?"bun.exe":"bun"}function pathCandidateNames(options){if(options.platform!=="win32")return["bun"];let extensions=(options.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").map(extension=>extension.trim()).filter(extension=>extension.length>0);return extensions.length>0?extensions.map(extension=>`bun${extension}`):["bun.exe"]}function findBunBinary(options){let path=paths(options),executable=bunExecutableName(options),rootCandidates=[path.join(bunRoot(options),"bin",executable),path.join(options.homedir,".bun","bin",executable)];for(let candidate of rootCandidates)if(options.exists(candidate))return candidate;let pathValue=options.env.PATH??options.env.Path;if(pathValue===void 0||pathValue==="")return;let names=pathCandidateNames(options);for(let directory of pathValue.split(path.delimiter))if(directory!=="")for(let name of names){let candidate=path.join(directory,name);if(options.exists(candidate))return candidate}}function readRuntimePin(options){let value=options.env[RUNTIME_ENV_VAR];if(value==="node"||value==="bun")return value}function resolveBunReexec(input){if(input.versions.bun!==void 0)return{action:"stay",reason:"already-bun"};let pinned=readRuntimePin(input.options);if(pinned==="node")return{action:"stay",reason:"runtime-pinned-node"};if(input.hasInheritedInspectorOption)return{action:"stay",reason:"inspector"};let trustsInstalledBun=pinned==="bun"||isUnderBunGlobalTree(input.scriptRealPath,input.options);if(!trustsInstalledBun&&!isInstalledPackageScript(input.scriptRealPath))return{action:"stay",reason:"not-bun-install"};let bunPath=findBunBinary(input.options);return bunPath===void 0?{action:"stay",reason:"bun-not-found"}:!trustsInstalledBun&&!bunVersionSatisfies(input.options.bunVersion(bunPath))?{action:"stay",reason:"bun-too-old"}:{action:"reexec",bunPath}}function readBunVersion(bunPath){try{let result=spawnSync(bunPath,["--version"],{encoding:"utf8",timeout:5e3,windowsHide:!0});if(result.status!==0)return;let version=result.stdout.trim();return version===""?void 0:version}catch{return}}function processBunRuntimeOptions(exists,realpath){return{env:process.env,homedir:osHomedir(),platform:process.platform,exists,realpath,bunVersion:readBunVersion}}import{format}from"node:util";var OUTPUT_DELIVERY_LIMIT_MS=3e4,nativeLog=console.log,nativeStdoutWrite=process.stdout.write;async function captureStdout(print){if(console.log!==nativeLog||process.stdout.write!==nativeStdoutWrite)return{result:await print(),output:""};let chunks=[];console.log=(...args)=>{chunks.push(`${format(...args)}
3
- `)},process.stdout.write=((chunk,encodingOrCallback,callback)=>(chunks.push(typeof chunk=="string"?chunk:Buffer.from(chunk).toString()),(typeof encodingOrCallback=="function"?encodingOrCallback:callback)?.(),!0));let printed=!1;try{let result=await print();return printed=!0,{result,output:chunks.join("")}}finally{console.log=nativeLog,process.stdout.write=nativeStdoutWrite,!printed&&chunks.length>0&&process.stdout.write(chunks.join(""))}}function delivered(stream,text){return stream.destroyed||stream.writableEnded?Promise.resolve():new Promise(resolve=>{let timer=setTimeout(resolve,OUTPUT_DELIVERY_LIMIT_MS);timer.unref();let done=()=>{clearTimeout(timer),resolve()};stream.once("error",done);try{stream.write(text,done)}catch{done()}})}async function exitAfterOutput(output="",code){await Promise.all([delivered(process.stdout,output),delivered(process.stderr,"")]),process.exit(code)}async function printThenExit(print,code){let{output}=await captureStdout(print);return exitAfterOutput(output,code)}function getPiUserAgent(version=DISPLAY_VERSION){let runtime=process.versions.bun?`bun/${process.versions.bun}`:`node/${process.version}`;return`${BRAND?.userAgent??APP_NAME}/${version} (${process.platform}; ${runtime}; ${process.arch})`}var modeHandlers=new WeakSet;function markModeCrashHandler(listener){modeHandlers.add(listener)}function hasModeCrashHandler(event){return process.listeners(event).some(listener=>modeHandlers.has(listener))}import{close as closeInspector,url as inspectorUrl}from"node:inspector";var StaleExtensionContextError=class extends Error{constructor(){super(...arguments),this.name="StaleExtensionContextError"}};var STALE_EXTENSION_CONTEXT_ERROR_PREFIX="This extension ctx is stale after session replacement or reload.",STALE_EXTENSION_GENERATION_AFTER_RELOAD_MESSAGE="stale extension generation after reload";function isStaleExtensionContextError(error){return error instanceof StaleExtensionContextError?!0:error instanceof Error&&(error.message.startsWith(STALE_EXTENSION_CONTEXT_ERROR_PREFIX)||error.message===STALE_EXTENSION_GENERATION_AFTER_RELOAD_MESSAGE)}var VM_DYNAMIC_IMPORT_CALLBACK_MISSING="ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING",INSPECTOR_IMPORT_FRAME="at importModuleDynamicallyCallback (node:internal/modules/esm/",INSPECTOR_TIMEOUT_FRAME=/\bat Timeout\._onTimeout \(<anonymous>:\d+:\d+\)/,RECOVER_INSPECTOR_VM_IMPORT=envValue("RECOVER_INSPECTOR_VM_IMPORT")==="1",INSPECTOR_VM_IMPORT_WARNING="Node Inspector dynamic import is unsupported; use require() or a target-side loader. Senpi kept running.";function hasInheritedInspectorOption(){return process.execArgv.some(argument=>argument.startsWith("--inspect"))||process.env.NODE_OPTIONS?.includes("--inspect")===!0}function releaseInheritedInspectorForChild(){inspectorUrl()!==void 0&&hasInheritedInspectorOption()&&closeInspector()}function isRecoverableInspectorVmImportError(error,origin){if(!RECOVER_INSPECTOR_VM_IMPORT||origin!=="unhandledRejection")return!1;try{return inspectorUrl()===void 0||typeof error!="object"||error===null||!("code"in error)||!("stack"in error)?!1:error.code===VM_DYNAMIC_IMPORT_CALLBACK_MISSING&&typeof error.stack=="string"&&error.stack.includes(INSPECTOR_IMPORT_FRAME)&&INSPECTOR_TIMEOUT_FRAME.test(error.stack)}catch{return!1}}var earlyRecoveryCount=0,earlyRecoveryInstalled=!1;function installEarlyInspectorVmImportRecovery(){if(!RECOVER_INSPECTOR_VM_IMPORT||earlyRecoveryInstalled)return;earlyRecoveryInstalled=!0;let listener=(error,origin)=>{let otherHandlerActive=hasModeCrashHandler("uncaughtException");if(isRecoverableInspectorVmImportError(error,origin)){otherHandlerActive||earlyRecoveryCount++;return}otherHandlerActive||isStaleExtensionContextError(error)||(console.error(error),process.exit(1))};process.on("uncaughtException",listener)}function consumeEarlyInspectorVmImportRecoveries(){let count=earlyRecoveryCount;return earlyRecoveryCount=0,count}var import_semver=__toESM(require_semver(),1);var REGISTRY_BASE_URL="https://registry.npmjs.org",LATEST_VERSION_URL=`${REGISTRY_BASE_URL}/${encodeURIComponent(PACKAGE_NAME)}/latest`;function latestVersionUrl(channel){return channel?`${REGISTRY_BASE_URL}/-/package/${encodeURIComponent(channel.packageName)}/dist-tags`:LATEST_VERSION_URL}function readAvailableVersion(payload,channel){if(typeof payload!="object"||payload===null)return;let source=payload,raw=channel?source[channel.distTag]:source.version;return typeof raw=="string"&&raw.trim()?raw.trim():void 0}var DEFAULT_VERSION_CHECK_TIMEOUT_MS=1e4,RELEASE_CHANGELOG_BASE_URL="https://github.com/code-yeongyu/senpi/blob",RELEASE_CHANGELOG_PATH="packages/coding-agent/CHANGELOG.md",SENPI_CALVER_PATTERN=/^(\d{4})\.(\d{1,2})\.(\d{1,2})(?:-([2-9]\d*))?$/;function parseSenpiCalVer(version){let match=SENPI_CALVER_PATTERN.exec(version);if(match)return[Number(match[1]),Number(match[2]),Number(match[3]),Number(match[4]??1)]}function formatVersionCheckError(error){let rootMessage=error instanceof Error&&error.message?error.message:String(error),cause=error instanceof Error?error.cause:void 0,causes=cause instanceof AggregateError?cause.errors:cause===void 0?[]:[cause],codes=causes.map(value=>typeof value=="object"&&value!==null&&"code"in value&&typeof value.code=="string"?value.code:void 0).filter(code=>code!==void 0);if(codes.length>0)return`${rootMessage} (${[...new Set(codes)].join(", ")})`;let causeMessage=causes.find(value=>value instanceof Error&&!!value.message)?.message;return causeMessage?`${rootMessage} (cause: ${causeMessage})`:rootMessage}function comparePackageVersions(leftVersion,rightVersion){let leftTrimmed=leftVersion.trim(),rightTrimmed=rightVersion.trim(),leftCalVer=parseSenpiCalVer(leftTrimmed),rightCalVer=parseSenpiCalVer(rightTrimmed);if(leftCalVer&&rightCalVer){for(let index=0;index<leftCalVer.length;index++)if(leftCalVer[index]!==rightCalVer[index])return leftCalVer[index]<rightCalVer[index]?-1:1;return 0}let left=(0,import_semver.valid)(leftTrimmed),right=(0,import_semver.valid)(rightTrimmed);if(!(!left||!right))return(0,import_semver.compare)(left,right)}function isNewerPackageVersion(candidateVersion,currentVersion){let comparison=comparePackageVersions(candidateVersion,currentVersion);return comparison!==void 0&&comparison>0}function getReleaseChangelogUrl(version){let trimmedVersion=version.trim(),channel=brandProfile()?.update;if(channel?.changelogUrl)return channel.changelogUrl.replace("{version}",trimmedVersion);let tag=trimmedVersion.startsWith("v")?trimmedVersion:`v${trimmedVersion}`;return`${RELEASE_CHANGELOG_BASE_URL}/${tag}/${RELEASE_CHANGELOG_PATH}`}async function getLatestPiRelease(currentVersion,options={}){if(envValue("OFFLINE"))return;let brand=brandProfile(),channel=brand?.update;if(brand&&!channel)return;let response=await fetchWithRetry(latestVersionUrl(channel),{headers:{"User-Agent":getPiUserAgent(currentVersion),accept:"application/json"}},{maxRetries:options.retry?2:0,timeoutMs:options.timeoutMs??DEFAULT_VERSION_CHECK_TIMEOUT_MS});if(!response.ok)return;let data=await response.json(),availableVersion=readAvailableVersion(data,channel);if(!availableVersion)return;if(channel)return{version:availableVersion,packageName:channel.packageName};let packageName=typeof data.packageName=="string"&&data.packageName.trim()?data.packageName.trim():void 0,note=typeof data.note=="string"&&data.note.trim()?data.note.trim():void 0;return{version:availableVersion,packageName,note}}async function checkForNewPiVersion(currentVersion){if(!envValue("SKIP_VERSION_CHECK"))try{let latestRelease=await getLatestPiRelease(currentVersion);return latestRelease&&isNewerPackageVersion(latestRelease.version,currentVersion)?latestRelease:void 0}catch{return}}var PACKAGE_COMMAND_ARGV={install:!0,remove:!0,update:!0,list:!0},PACKAGE_COMMAND_ALIAS="uninstall",CONFIG_COMMAND_ARGV="config",HOST_COMMAND_ARGV="host",SCHEDULE_COMMAND_ARGV="schedule";function isPackageCommandArgv(args){let command=args[0]??"";return Object.hasOwn(PACKAGE_COMMAND_ARGV,command)||command===PACKAGE_COMMAND_ALIAS}async function dispatchPackageCommand(args,runtimeOptions={}){if(!isPackageCommandArgv(args))return!1;let{handlePackageCommand}=await import("./package-manager-cli-2QFJY2AS.js");return await handlePackageCommand(args,runtimeOptions)}async function dispatchConfigCommand(args,runtimeOptions={}){if(args[0]!==CONFIG_COMMAND_ARGV)return!1;let{handleConfigCommand}=await import("./package-manager-cli-2QFJY2AS.js");return await handleConfigCommand(args,runtimeOptions)}async function dispatchHostCommand(args){if(args[0]!==HOST_COMMAND_ARGV)return;if(args[1]==="session"){let{runHostSessionCommand}=await import("./host-session-command-46PTZGIB.js");return await runHostSessionCommand(args.slice(2))}let{runHostCommand}=await import("./host-command-NP3HHQJ3.js");return await runHostCommand(args.slice(1))}async function dispatchScheduleCommand(args){if(args[0]!==SCHEDULE_COMMAND_ARGV)return;let{runScheduleCommand}=await import("./schedule-command-2RHSWBQO.js");return await runScheduleCommand(args.slice(1))}export{RUNTIME_ENV_VAR,MIN_BUN_VERSION,bunVersionSatisfies,findBunBinary,resolveBunReexec,processBunRuntimeOptions,captureStdout,exitAfterOutput,printThenExit,getPiUserAgent,StaleExtensionContextError,isStaleExtensionContextError,markModeCrashHandler,hasModeCrashHandler,INSPECTOR_VM_IMPORT_WARNING,hasInheritedInspectorOption,releaseInheritedInspectorForChild,isRecoverableInspectorVmImportError,installEarlyInspectorVmImportRecovery,consumeEarlyInspectorVmImportRecoveries,formatVersionCheckError,isNewerPackageVersion,getReleaseChangelogUrl,getLatestPiRelease,checkForNewPiVersion,CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,isPackageCommandArgv,dispatchPackageCommand,dispatchConfigCommand,dispatchHostCommand,dispatchScheduleCommand};
3
+ `)},process.stdout.write=((chunk,encodingOrCallback,callback)=>(chunks.push(typeof chunk=="string"?chunk:Buffer.from(chunk).toString()),(typeof encodingOrCallback=="function"?encodingOrCallback:callback)?.(),!0));let printed=!1;try{let result=await print();return printed=!0,{result,output:chunks.join("")}}finally{console.log=nativeLog,process.stdout.write=nativeStdoutWrite,!printed&&chunks.length>0&&process.stdout.write(chunks.join(""))}}function delivered(stream,text){return stream.destroyed||stream.writableEnded?Promise.resolve():new Promise(resolve=>{let timer=setTimeout(resolve,OUTPUT_DELIVERY_LIMIT_MS);timer.unref();let done=()=>{clearTimeout(timer),resolve()};stream.once("error",done);try{stream.write(text,done)}catch{done()}})}async function exitAfterOutput(output="",code){await Promise.all([delivered(process.stdout,output),delivered(process.stderr,"")]),process.exit(code)}async function printThenExit(print,code){let{output}=await captureStdout(print);return exitAfterOutput(output,code)}function getPiUserAgent(version=DISPLAY_VERSION){let runtime=process.versions.bun?`bun/${process.versions.bun}`:`node/${process.version}`;return`${BRAND?.userAgent??APP_NAME}/${version} (${process.platform}; ${runtime}; ${process.arch})`}var modeHandlers=new WeakSet;function markModeCrashHandler(listener){modeHandlers.add(listener)}function hasModeCrashHandler(event){return process.listeners(event).some(listener=>modeHandlers.has(listener))}import{close as closeInspector,url as inspectorUrl}from"node:inspector";var StaleExtensionContextError=class extends Error{constructor(){super(...arguments),this.name="StaleExtensionContextError"}};var STALE_EXTENSION_CONTEXT_ERROR_PREFIX="This extension ctx is stale after session replacement or reload.",STALE_EXTENSION_GENERATION_AFTER_RELOAD_MESSAGE="stale extension generation after reload";function isStaleExtensionContextError(error){return error instanceof StaleExtensionContextError?!0:error instanceof Error&&(error.message.startsWith(STALE_EXTENSION_CONTEXT_ERROR_PREFIX)||error.message===STALE_EXTENSION_GENERATION_AFTER_RELOAD_MESSAGE)}var VM_DYNAMIC_IMPORT_CALLBACK_MISSING="ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING",INSPECTOR_IMPORT_FRAME="at importModuleDynamicallyCallback (node:internal/modules/esm/",INSPECTOR_TIMEOUT_FRAME=/\bat Timeout\._onTimeout \(<anonymous>:\d+:\d+\)/,RECOVER_INSPECTOR_VM_IMPORT=envValue("RECOVER_INSPECTOR_VM_IMPORT")==="1",INSPECTOR_VM_IMPORT_WARNING="Node Inspector dynamic import is unsupported; use require() or a target-side loader. Senpi kept running.";function hasInheritedInspectorOption(){return process.execArgv.some(argument=>argument.startsWith("--inspect"))||process.env.NODE_OPTIONS?.includes("--inspect")===!0}function releaseInheritedInspectorForChild(){inspectorUrl()!==void 0&&hasInheritedInspectorOption()&&closeInspector()}function isRecoverableInspectorVmImportError(error,origin){if(!RECOVER_INSPECTOR_VM_IMPORT||origin!=="unhandledRejection")return!1;try{return inspectorUrl()===void 0||typeof error!="object"||error===null||!("code"in error)||!("stack"in error)?!1:error.code===VM_DYNAMIC_IMPORT_CALLBACK_MISSING&&typeof error.stack=="string"&&error.stack.includes(INSPECTOR_IMPORT_FRAME)&&INSPECTOR_TIMEOUT_FRAME.test(error.stack)}catch{return!1}}var earlyRecoveryCount=0,earlyRecoveryInstalled=!1;function installEarlyInspectorVmImportRecovery(){if(!RECOVER_INSPECTOR_VM_IMPORT||earlyRecoveryInstalled)return;earlyRecoveryInstalled=!0;let listener=(error,origin)=>{let otherHandlerActive=hasModeCrashHandler("uncaughtException");if(isRecoverableInspectorVmImportError(error,origin)){otherHandlerActive||earlyRecoveryCount++;return}otherHandlerActive||isStaleExtensionContextError(error)||(console.error(error),process.exit(1))};process.on("uncaughtException",listener)}function consumeEarlyInspectorVmImportRecoveries(){let count=earlyRecoveryCount;return earlyRecoveryCount=0,count}var import_semver=__toESM(require_semver(),1);var REGISTRY_BASE_URL="https://registry.npmjs.org",LATEST_VERSION_URL=`${REGISTRY_BASE_URL}/${encodeURIComponent(PACKAGE_NAME)}/latest`;function latestVersionUrl(channel){return channel?`${REGISTRY_BASE_URL}/-/package/${encodeURIComponent(channel.packageName)}/dist-tags`:LATEST_VERSION_URL}function readAvailableVersion(payload,channel){if(typeof payload!="object"||payload===null)return;let source=payload,raw=channel?source[channel.distTag]:source.version;return typeof raw=="string"&&raw.trim()?raw.trim():void 0}var DEFAULT_VERSION_CHECK_TIMEOUT_MS=1e4,RELEASE_CHANGELOG_BASE_URL="https://github.com/code-yeongyu/senpi/blob",RELEASE_CHANGELOG_PATH="packages/coding-agent/CHANGELOG.md",SENPI_CALVER_PATTERN=/^(\d{4})\.(\d{1,2})\.(\d{1,2})(?:-([2-9]\d*))?$/;function parseSenpiCalVer(version){let match=SENPI_CALVER_PATTERN.exec(version);if(match)return[Number(match[1]),Number(match[2]),Number(match[3]),Number(match[4]??1)]}function formatVersionCheckError(error){let rootMessage=error instanceof Error&&error.message?error.message:String(error),cause=error instanceof Error?error.cause:void 0,causes=cause instanceof AggregateError?cause.errors:cause===void 0?[]:[cause],codes=causes.map(value=>typeof value=="object"&&value!==null&&"code"in value&&typeof value.code=="string"?value.code:void 0).filter(code=>code!==void 0);if(codes.length>0)return`${rootMessage} (${[...new Set(codes)].join(", ")})`;let causeMessage=causes.find(value=>value instanceof Error&&!!value.message)?.message;return causeMessage?`${rootMessage} (cause: ${causeMessage})`:rootMessage}function comparePackageVersions(leftVersion,rightVersion){let leftTrimmed=leftVersion.trim(),rightTrimmed=rightVersion.trim(),leftCalVer=parseSenpiCalVer(leftTrimmed),rightCalVer=parseSenpiCalVer(rightTrimmed);if(leftCalVer&&rightCalVer){for(let index=0;index<leftCalVer.length;index++)if(leftCalVer[index]!==rightCalVer[index])return leftCalVer[index]<rightCalVer[index]?-1:1;return 0}let left=(0,import_semver.valid)(leftTrimmed),right=(0,import_semver.valid)(rightTrimmed);if(!(!left||!right))return(0,import_semver.compare)(left,right)}function isNewerPackageVersion(candidateVersion,currentVersion){let comparison=comparePackageVersions(candidateVersion,currentVersion);return comparison!==void 0&&comparison>0}function getReleaseChangelogUrl(version){let trimmedVersion=version.trim(),channel=brandProfile()?.update;if(channel?.changelogUrl)return channel.changelogUrl.replace("{version}",trimmedVersion);let tag=trimmedVersion.startsWith("v")?trimmedVersion:`v${trimmedVersion}`;return`${RELEASE_CHANGELOG_BASE_URL}/${tag}/${RELEASE_CHANGELOG_PATH}`}async function getLatestPiRelease(currentVersion,options={}){if(envValue("OFFLINE"))return;let brand=brandProfile(),channel=brand?.update;if(brand&&!channel)return;let response=await fetchWithRetry(latestVersionUrl(channel),{headers:{"User-Agent":getPiUserAgent(currentVersion),accept:"application/json"}},{maxRetries:options.retry?2:0,timeoutMs:options.timeoutMs??DEFAULT_VERSION_CHECK_TIMEOUT_MS});if(!response.ok)return;let data=await response.json(),availableVersion=readAvailableVersion(data,channel);if(!availableVersion)return;if(channel)return{version:availableVersion,packageName:channel.packageName};let packageName=typeof data.packageName=="string"&&data.packageName.trim()?data.packageName.trim():void 0,note=typeof data.note=="string"&&data.note.trim()?data.note.trim():void 0;return{version:availableVersion,packageName,note}}async function checkForNewPiVersion(currentVersion){if(!envValue("SKIP_VERSION_CHECK"))try{let latestRelease=await getLatestPiRelease(currentVersion);return latestRelease&&isNewerPackageVersion(latestRelease.version,currentVersion)?latestRelease:void 0}catch{return}}var PACKAGE_COMMAND_ARGV={install:!0,remove:!0,update:!0,list:!0},PACKAGE_COMMAND_ALIAS="uninstall",CONFIG_COMMAND_ARGV="config",HOST_COMMAND_ARGV="host",SCHEDULE_COMMAND_ARGV="schedule";function isPackageCommandArgv(args){let command=args[0]??"";return Object.hasOwn(PACKAGE_COMMAND_ARGV,command)||command===PACKAGE_COMMAND_ALIAS}async function dispatchPackageCommand(args,runtimeOptions={}){if(!isPackageCommandArgv(args))return!1;let{handlePackageCommand}=await import("./package-manager-cli-YWZHOZOY.js");return await handlePackageCommand(args,runtimeOptions)}async function dispatchConfigCommand(args,runtimeOptions={}){if(args[0]!==CONFIG_COMMAND_ARGV)return!1;let{handleConfigCommand}=await import("./package-manager-cli-YWZHOZOY.js");return await handleConfigCommand(args,runtimeOptions)}async function dispatchHostCommand(args){if(args[0]!==HOST_COMMAND_ARGV)return;if(args[1]==="session"){let{runHostSessionCommand}=await import("./host-session-command-BUJUJHDA.js");return await runHostSessionCommand(args.slice(2))}let{runHostCommand}=await import("./host-command-NP3HHQJ3.js");return await runHostCommand(args.slice(1))}async function dispatchScheduleCommand(args){if(args[0]!==SCHEDULE_COMMAND_ARGV)return;let{runScheduleCommand}=await import("./schedule-command-JRWZGEDU.js");return await runScheduleCommand(args.slice(1))}export{RUNTIME_ENV_VAR,MIN_BUN_VERSION,bunVersionSatisfies,findBunBinary,resolveBunReexec,processBunRuntimeOptions,captureStdout,exitAfterOutput,printThenExit,getPiUserAgent,StaleExtensionContextError,isStaleExtensionContextError,markModeCrashHandler,hasModeCrashHandler,INSPECTOR_VM_IMPORT_WARNING,hasInheritedInspectorOption,releaseInheritedInspectorForChild,isRecoverableInspectorVmImportError,installEarlyInspectorVmImportRecovery,consumeEarlyInspectorVmImportRecoveries,formatVersionCheckError,isNewerPackageVersion,getReleaseChangelogUrl,getLatestPiRelease,checkForNewPiVersion,CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,isPackageCommandArgv,dispatchPackageCommand,dispatchConfigCommand,dispatchHostCommand,dispatchScheduleCommand};
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{clientMessageIdentitySchema}from"./chunk-IRKWZZKD.js";import{ProjectTrustStore}from"./chunk-TEGEPQIA.js";import{watchWithErrorHandler}from"./chunk-JABBHOD5.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{modelSupportsAssistantPrefill}from"./chunk-ZDTNH3XU.js";import{sanitizeProviderDiagnostic}from"./chunk-UAQW2T7G.js";import{getSupportedThinkingLevels,supportsMax,supportsXhigh}from"./chunk-2ON6BFHO.js";function supportsXhigh2(model){return supportsXhigh(model)}function supportsMax2(model){return supportsMax(model)}function getSupportedThinkingLevels2(model){let supportedLevels=getSupportedThinkingLevels(model);return supportedLevels.length>0?supportedLevels:["off"]}function clampThinkingSelection(selection,requested,level,model){if(selection===void 0)return;let{requested:_staleRequested,clampReason:_staleReason,...base}=selection;return requested===level||model===void 0?{...base,level}:{...base,level,requested,clampReason:model.reasoning?"level-unsupported":"model-not-reasoning"}}function getThinkingClampNotice(selection,model){let clamped=selection;if(!(model===void 0||clamped?.requested===void 0||clamped.clampReason===void 0))return{provider:model.provider,modelId:model.id,requestedLevel:clamped.requested,appliedLevel:clamped.level,reason:clamped.clampReason}}function formatThinkingClampWarning(notice){let model=`${notice.provider}/${notice.modelId}`;return notice.reason==="model-not-reasoning"?`Thinking level "${notice.requestedLevel}" was requested, but ${model} is not marked as a reasoning model, so thinking is "${notice.appliedLevel}". If the model supports reasoning, set "reasoning": true for it in models.json.`:`Thinking level "${notice.requestedLevel}" is not available on ${model}; using "${notice.appliedLevel}".`}function classifyReasoningCapability(model){if(!model.reasoning)return{kind:"none",levels:["off"],nonOffLevels:[]};let levels=getSupportedThinkingLevels2(model),nonOffLevels=levels.filter(level=>level!=="off");return levels.includes("off")?nonOffLevels.length===1?{kind:"on-off",levels,nonOffLevels}:nonOffLevels.length===0?{kind:"none",levels,nonOffLevels}:{kind:"graded",levels,nonOffLevels}:{kind:"always-on",levels,nonOffLevels}}var BROWSER_ENGINES=["connected","builtin","none"];function isBrowserEngine(value){return BROWSER_ENGINES.some(engine=>engine===value)}var MAX_RPC_MESSAGE_CHARACTERS=1e6,SESSION_CONTEXT_LIMITS={keys:32,valueBytes:16*1024,totalBytes:32*1024},SESSION_CONTEXT_KEY_PATTERN=/^[a-z][a-z0-9_]*$/;function validContent(content){return typeof content=="string"?!0:Array.isArray(content)&&content.every(item=>{if(typeof item!="object"||item===null)return!1;let value=item;return value.type==="text"?typeof value.text=="string":value.type==="image"&&typeof value.data=="string"&&typeof value.mimeType=="string"})}function validBaseEntry(entry){return typeof entry.id=="string"&&(entry.parentId===null||typeof entry.parentId=="string")&&typeof entry.timestamp=="string"}function validSessionEntry(entry){if(typeof entry!="object"||entry===null||Array.isArray(entry))return!1;let value=entry;if(!validBaseEntry(value))return!1;switch(value.type){case"message":{let message=value.message;if(typeof message!="object"||message===null)return!1;let item=message;return["user","assistant","tool"].includes(item.role)&&validContent(item.content)}case"thinking_level_change":return typeof value.thinkingLevel=="string";case"model_change":return typeof value.provider=="string"&&typeof value.modelId=="string";case"model_change_rejected":return typeof value.provider=="string"&&typeof value.modelId=="string"&&typeof value.detail=="string";case"compaction":return typeof value.summary=="string"&&typeof value.firstKeptEntryId=="string"&&typeof value.tokensBefore=="number";case"branch_summary":return typeof value.fromId=="string"&&typeof value.summary=="string";case"custom":return typeof value.customType=="string";case"custom_message":return typeof value.customType=="string"&&validContent(value.content)&&typeof value.display=="boolean";case"label":return typeof value.targetId=="string"&&(value.label===void 0||typeof value.label=="string");case"session_info":return value.name===void 0||typeof value.name=="string";default:return!1}}function rpcCommandPayloadError(command){if(rpcCommandShapeError(command))return;let value=command;if((value.type==="prompt"||value.type==="steer"||value.type==="follow_up")&&!clientMessageIdentitySchema.safeParse(value).success)return"clientMessageId and clientTurnId must be non-empty strings of at most 256 characters.";if((value.type==="dequeue_message"||value.type==="edit_queued_message")&&!(typeof value.queuedId=="string"&&value.queuedId.length>0&&value.queuedId.length<=256))return"queuedId must be a non-empty string of at most 256 characters; read it from get_state or queue_update.";if(value.type==="edit_queued_message"&&!(typeof value.text=="string"&&value.text.length>0&&value.text.length<=MAX_RPC_MESSAGE_CHARACTERS))return`text must be a non-empty string of at most ${MAX_RPC_MESSAGE_CHARACTERS} characters; dequeue_message removes an input.`;if(value.type==="resolve_path"&&!(typeof value.path=="string"&&value.path.trim().length>0&&value.path.length<=4096))return"path must be a non-empty string of at most 4096 characters.";if(value.type==="unload_session"){if(value.children!==void 0&&value.children!=="refuse"&&value.children!=="detach")return'children must be "refuse" or "detach".';for(let flag of["interrupt","clearQueue","force"])if(value[flag]!==void 0&&typeof value[flag]!="boolean")return`${flag} must be a boolean.`}if((value.type==="steer"||value.type==="follow_up")&&value.enqueueOrder!==void 0&&!(typeof value.enqueueOrder=="number"&&Number.isFinite(value.enqueueOrder)))return"enqueueOrder must be a finite number.";if((value.type==="steer"||value.type==="follow_up")&&value.whenIdle!==void 0&&value.whenIdle!=="queue"&&value.whenIdle!=="start")return'whenIdle must be "queue" or "start"; omit it to queue on an idle session.';if((value.type==="abort"||value.type==="set_model"||value.type==="set_thinking_level"||value.type==="get_effect_status")&&(value.effectId!==void 0||value.type==="get_effect_status")&&!(typeof value.effectId=="string"&&value.effectId.length>0&&value.effectId.length<=256))return"effectId must be a non-empty string of at most 256 characters.";if(value.type==="get_effect_status"&&value.sessionPath!==void 0&&typeof value.sessionPath!="string")return"sessionPath must be a string.";if(value.type==="append_user_message"&&!validContent(value.content))return"append_user_message content must be a string or text/image content array.";if(value.type==="append_session_entry"&&!validSessionEntry(value.entry))return"append_session_entry entry is malformed."}function sessionContextError(context){if(context===void 0)return;if(typeof context!="object"||context===null||Array.isArray(context))return"context must be an object of string values.";let entries=Object.entries(context);if(entries.length>SESSION_CONTEXT_LIMITS.keys)return`context has ${entries.length} keys, at most ${SESSION_CONTEXT_LIMITS.keys} are accepted.`;for(let[key,value]of entries){if(!SESSION_CONTEXT_KEY_PATTERN.test(key))return`context key "${key}" must match ${SESSION_CONTEXT_KEY_PATTERN.source}.`;if(typeof value!="string")return`context value for key "${key}" must be a string.`;let valueBytes=Buffer.byteLength(value);if(valueBytes>SESSION_CONTEXT_LIMITS.valueBytes)return`context value for key "${key}" is ${valueBytes} bytes, at most ${SESSION_CONTEXT_LIMITS.valueBytes} bytes are accepted.`}let totalBytes=Buffer.byteLength(JSON.stringify(context));if(totalBytes>SESSION_CONTEXT_LIMITS.totalBytes)return`context is ${totalBytes} bytes of JSON, at most ${SESSION_CONTEXT_LIMITS.totalBytes} bytes are accepted.`}function sessionKindError(kind){if(!(kind===void 0||kind==="interactive"||kind==="worker"))return'kind must be "interactive" or "worker".'}function sessionAutoTitleError(value){if(!(value===void 0||typeof value=="boolean"))return"auto_title must be a boolean."}function sessionPromptSurfaceError(value){if(!(value===void 0||value==="terminal"||value==="app"||value==="chat"))return'promptSurface must be "terminal", "app" or "chat".'}function sessionBrowserEngineError(value){if(!(value===void 0||isBrowserEngine(value)))return'browserEngine must be "connected", "builtin" or "none".'}var MAX_RETRY_FALLBACK_CHAINS=32,MAX_RETRY_FALLBACK_ENTRIES=32,MAX_RETRY_FALLBACK_SELECTOR_LENGTH=512;function sessionRetryFallbackError(value){if(value===void 0)return;let shape="retryFallback must be { modelFallback: boolean, fallbackChains: Record<string, string[]> }.";if(typeof value!="object"||value===null||Array.isArray(value))return shape;let record=value;if(typeof record.modelFallback!="boolean")return shape;let chains=record.fallbackChains;if(typeof chains!="object"||chains===null||Array.isArray(chains))return shape;let entries=Object.entries(chains);if(entries.length>MAX_RETRY_FALLBACK_CHAINS)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_CHAINS} chains.`;for(let[key,selectors]of entries){if(!isSelector(key)||!Array.isArray(selectors)||!selectors.every(isSelector))return shape;if(selectors.length>MAX_RETRY_FALLBACK_ENTRIES)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_ENTRIES} entries per chain.`}}function isSelector(value){return typeof value=="string"&&value.trim().length>0&&value.length<=MAX_RETRY_FALLBACK_SELECTOR_LENGTH}function rpcCommandShapeError(command){if(typeof command!="object"||command===null||Array.isArray(command))return"RPC command must be a JSON object."}function rpcMessageLengthError(command){if(rpcCommandShapeError(command))return;let input=command;if(!(input.type!=="prompt"&&input.type!=="steer"&&input.type!=="follow_up")&&!(typeof input.message!="string"||input.message.length<=MAX_RPC_MESSAGE_CHARACTERS))return`RPC ${input.type} message exceeds ${MAX_RPC_MESSAGE_CHARACTERS} characters.`}import{randomUUID}from"node:crypto";import{mkdir,rm,writeFile}from"node:fs/promises";import{join}from"node:path";import{setTimeout as delay}from"node:timers/promises";import{Worker}from"node:worker_threads";var RECURSIVE_WATCH_WORKER_SOURCE=`
2
+ import{clientMessageIdentitySchema}from"./chunk-IRKWZZKD.js";import{watchWithErrorHandler}from"./chunk-JABBHOD5.js";import{ProjectTrustStore}from"./chunk-MLL7AGVM.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{modelSupportsAssistantPrefill}from"./chunk-ZDTNH3XU.js";import{sanitizeProviderDiagnostic}from"./chunk-UAQW2T7G.js";import{getSupportedThinkingLevels,supportsMax,supportsXhigh}from"./chunk-2ON6BFHO.js";function supportsXhigh2(model){return supportsXhigh(model)}function supportsMax2(model){return supportsMax(model)}function getSupportedThinkingLevels2(model){let supportedLevels=getSupportedThinkingLevels(model);return supportedLevels.length>0?supportedLevels:["off"]}function clampThinkingSelection(selection,requested,level,model){if(selection===void 0)return;let{requested:_staleRequested,clampReason:_staleReason,...base}=selection;return requested===level||model===void 0?{...base,level}:{...base,level,requested,clampReason:model.reasoning?"level-unsupported":"model-not-reasoning"}}function getThinkingClampNotice(selection,model){let clamped=selection;if(!(model===void 0||clamped?.requested===void 0||clamped.clampReason===void 0))return{provider:model.provider,modelId:model.id,requestedLevel:clamped.requested,appliedLevel:clamped.level,reason:clamped.clampReason}}function formatThinkingClampWarning(notice){let model=`${notice.provider}/${notice.modelId}`;return notice.reason==="model-not-reasoning"?`Thinking level "${notice.requestedLevel}" was requested, but ${model} is not marked as a reasoning model, so thinking is "${notice.appliedLevel}". If the model supports reasoning, set "reasoning": true for it in models.json.`:`Thinking level "${notice.requestedLevel}" is not available on ${model}; using "${notice.appliedLevel}".`}function classifyReasoningCapability(model){if(!model.reasoning)return{kind:"none",levels:["off"],nonOffLevels:[]};let levels=getSupportedThinkingLevels2(model),nonOffLevels=levels.filter(level=>level!=="off");return levels.includes("off")?nonOffLevels.length===1?{kind:"on-off",levels,nonOffLevels}:nonOffLevels.length===0?{kind:"none",levels,nonOffLevels}:{kind:"graded",levels,nonOffLevels}:{kind:"always-on",levels,nonOffLevels}}var BROWSER_ENGINES=["connected","builtin","none"];function isBrowserEngine(value){return BROWSER_ENGINES.some(engine=>engine===value)}var MAX_RPC_MESSAGE_CHARACTERS=1e6,SESSION_CONTEXT_LIMITS={keys:32,valueBytes:16*1024,totalBytes:32*1024},SESSION_CONTEXT_KEY_PATTERN=/^[a-z][a-z0-9_]*$/;function validContent(content){return typeof content=="string"?!0:Array.isArray(content)&&content.every(item=>{if(typeof item!="object"||item===null)return!1;let value=item;return value.type==="text"?typeof value.text=="string":value.type==="image"&&typeof value.data=="string"&&typeof value.mimeType=="string"})}function validBaseEntry(entry){return typeof entry.id=="string"&&(entry.parentId===null||typeof entry.parentId=="string")&&typeof entry.timestamp=="string"}function validSessionEntry(entry){if(typeof entry!="object"||entry===null||Array.isArray(entry))return!1;let value=entry;if(!validBaseEntry(value))return!1;switch(value.type){case"message":{let message=value.message;if(typeof message!="object"||message===null)return!1;let item=message;return["user","assistant","tool"].includes(item.role)&&validContent(item.content)}case"thinking_level_change":return typeof value.thinkingLevel=="string";case"model_change":return typeof value.provider=="string"&&typeof value.modelId=="string";case"model_change_rejected":return typeof value.provider=="string"&&typeof value.modelId=="string"&&typeof value.detail=="string";case"compaction":return typeof value.summary=="string"&&typeof value.firstKeptEntryId=="string"&&typeof value.tokensBefore=="number";case"branch_summary":return typeof value.fromId=="string"&&typeof value.summary=="string";case"custom":return typeof value.customType=="string";case"custom_message":return typeof value.customType=="string"&&validContent(value.content)&&typeof value.display=="boolean";case"label":return typeof value.targetId=="string"&&(value.label===void 0||typeof value.label=="string");case"session_info":return value.name===void 0||typeof value.name=="string";default:return!1}}function rpcCommandPayloadError(command){if(rpcCommandShapeError(command))return;let value=command;if((value.type==="prompt"||value.type==="steer"||value.type==="follow_up")&&!clientMessageIdentitySchema.safeParse(value).success)return"clientMessageId and clientTurnId must be non-empty strings of at most 256 characters.";if((value.type==="dequeue_message"||value.type==="edit_queued_message")&&!(typeof value.queuedId=="string"&&value.queuedId.length>0&&value.queuedId.length<=256))return"queuedId must be a non-empty string of at most 256 characters; read it from get_state or queue_update.";if(value.type==="edit_queued_message"&&!(typeof value.text=="string"&&value.text.length>0&&value.text.length<=MAX_RPC_MESSAGE_CHARACTERS))return`text must be a non-empty string of at most ${MAX_RPC_MESSAGE_CHARACTERS} characters; dequeue_message removes an input.`;if(value.type==="resolve_path"&&!(typeof value.path=="string"&&value.path.trim().length>0&&value.path.length<=4096))return"path must be a non-empty string of at most 4096 characters.";if(value.type==="unload_session"){if(value.children!==void 0&&value.children!=="refuse"&&value.children!=="detach")return'children must be "refuse" or "detach".';for(let flag of["interrupt","clearQueue","force"])if(value[flag]!==void 0&&typeof value[flag]!="boolean")return`${flag} must be a boolean.`}if((value.type==="steer"||value.type==="follow_up")&&value.enqueueOrder!==void 0&&!(typeof value.enqueueOrder=="number"&&Number.isFinite(value.enqueueOrder)))return"enqueueOrder must be a finite number.";if((value.type==="steer"||value.type==="follow_up")&&value.whenIdle!==void 0&&value.whenIdle!=="queue"&&value.whenIdle!=="start")return'whenIdle must be "queue" or "start"; omit it to queue on an idle session.';if((value.type==="abort"||value.type==="set_model"||value.type==="set_thinking_level"||value.type==="get_effect_status")&&(value.effectId!==void 0||value.type==="get_effect_status")&&!(typeof value.effectId=="string"&&value.effectId.length>0&&value.effectId.length<=256))return"effectId must be a non-empty string of at most 256 characters.";if(value.type==="get_effect_status"&&value.sessionPath!==void 0&&typeof value.sessionPath!="string")return"sessionPath must be a string.";if(value.type==="append_user_message"&&!validContent(value.content))return"append_user_message content must be a string or text/image content array.";if(value.type==="append_session_entry"&&!validSessionEntry(value.entry))return"append_session_entry entry is malformed."}function sessionContextError(context){if(context===void 0)return;if(typeof context!="object"||context===null||Array.isArray(context))return"context must be an object of string values.";let entries=Object.entries(context);if(entries.length>SESSION_CONTEXT_LIMITS.keys)return`context has ${entries.length} keys, at most ${SESSION_CONTEXT_LIMITS.keys} are accepted.`;for(let[key,value]of entries){if(!SESSION_CONTEXT_KEY_PATTERN.test(key))return`context key "${key}" must match ${SESSION_CONTEXT_KEY_PATTERN.source}.`;if(typeof value!="string")return`context value for key "${key}" must be a string.`;let valueBytes=Buffer.byteLength(value);if(valueBytes>SESSION_CONTEXT_LIMITS.valueBytes)return`context value for key "${key}" is ${valueBytes} bytes, at most ${SESSION_CONTEXT_LIMITS.valueBytes} bytes are accepted.`}let totalBytes=Buffer.byteLength(JSON.stringify(context));if(totalBytes>SESSION_CONTEXT_LIMITS.totalBytes)return`context is ${totalBytes} bytes of JSON, at most ${SESSION_CONTEXT_LIMITS.totalBytes} bytes are accepted.`}function sessionKindError(kind){if(!(kind===void 0||kind==="interactive"||kind==="worker"))return'kind must be "interactive" or "worker".'}function sessionAutoTitleError(value){if(!(value===void 0||typeof value=="boolean"))return"auto_title must be a boolean."}function sessionPromptSurfaceError(value){if(!(value===void 0||value==="terminal"||value==="app"||value==="chat"))return'promptSurface must be "terminal", "app" or "chat".'}function sessionBrowserEngineError(value){if(!(value===void 0||isBrowserEngine(value)))return'browserEngine must be "connected", "builtin" or "none".'}var MAX_RETRY_FALLBACK_CHAINS=32,MAX_RETRY_FALLBACK_ENTRIES=32,MAX_RETRY_FALLBACK_SELECTOR_LENGTH=512;function sessionRetryFallbackError(value){if(value===void 0)return;let shape="retryFallback must be { modelFallback: boolean, fallbackChains: Record<string, string[]> }.";if(typeof value!="object"||value===null||Array.isArray(value))return shape;let record=value;if(typeof record.modelFallback!="boolean")return shape;let chains=record.fallbackChains;if(typeof chains!="object"||chains===null||Array.isArray(chains))return shape;let entries=Object.entries(chains);if(entries.length>MAX_RETRY_FALLBACK_CHAINS)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_CHAINS} chains.`;for(let[key,selectors]of entries){if(!isSelector(key)||!Array.isArray(selectors)||!selectors.every(isSelector))return shape;if(selectors.length>MAX_RETRY_FALLBACK_ENTRIES)return`retryFallback allows at most ${MAX_RETRY_FALLBACK_ENTRIES} entries per chain.`}}function isSelector(value){return typeof value=="string"&&value.trim().length>0&&value.length<=MAX_RETRY_FALLBACK_SELECTOR_LENGTH}function rpcCommandShapeError(command){if(typeof command!="object"||command===null||Array.isArray(command))return"RPC command must be a JSON object."}function rpcMessageLengthError(command){if(rpcCommandShapeError(command))return;let input=command;if(!(input.type!=="prompt"&&input.type!=="steer"&&input.type!=="follow_up")&&!(typeof input.message!="string"||input.message.length<=MAX_RPC_MESSAGE_CHARACTERS))return`RPC ${input.type} message exceeds ${MAX_RPC_MESSAGE_CHARACTERS} characters.`}import{randomUUID}from"node:crypto";import{mkdir,rm,writeFile}from"node:fs/promises";import{join}from"node:path";import{setTimeout as delay}from"node:timers/promises";import{Worker}from"node:worker_threads";var RECURSIVE_WATCH_WORKER_SOURCE=`
3
3
  const { watch } = require("node:fs");
4
4
  const { parentPort } = require("node:worker_threads");
5
5
 
@@ -13,7 +13,7 @@ BUN_BE_BUN=1 exec ${quoted} x "$@"
13
13
  `),finalOutputBytes=utf8ByteLength(outputContent);return{content:outputContent,truncated:!0,truncatedBy,totalLines,totalBytes,outputLines:outputLinesArr.length,outputBytes:finalOutputBytes,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines,maxBytes}}function truncateTail(content,options={}){let maxLines=options.maxLines??2e3,maxBytes=options.maxBytes??51200,totalBytes=utf8ByteLength(content),lines=splitLinesForCounting(content),totalLines=lines.length;if(totalLines<=maxLines&&totalBytes<=maxBytes)return{content,truncated:!1,truncatedBy:null,totalLines,totalBytes,outputLines:totalLines,outputBytes:totalBytes,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines,maxBytes};let outputLinesArr=[],outputBytesCount=0,truncatedBy="lines",lastLinePartial=!1;for(let i=lines.length-1;i>=0&&outputLinesArr.length<maxLines;i--){let line=lines[i],lineBytes=utf8ByteLength(line)+(outputLinesArr.length>0?1:0);if(outputBytesCount+lineBytes>maxBytes){if(truncatedBy="bytes",outputLinesArr.length===0){let truncatedLine=truncateStringToBytesFromEnd(line,maxBytes);outputLinesArr.unshift(truncatedLine),outputBytesCount=utf8ByteLength(truncatedLine),lastLinePartial=!0}break}outputLinesArr.unshift(line),outputBytesCount+=lineBytes}outputLinesArr.length>=maxLines&&outputBytesCount<=maxBytes&&(truncatedBy="lines");let outputContent=outputLinesArr.join(`
14
14
  `),finalOutputBytes=utf8ByteLength(outputContent);return{content:outputContent,truncated:!0,truncatedBy,totalLines,totalBytes,outputLines:outputLinesArr.length,outputBytes:finalOutputBytes,lastLinePartial,firstLineExceedsLimit:!1,maxLines,maxBytes}}function truncateStringToBytesFromEnd(str,maxBytes){if(maxBytes<=0)return"";let outputBytes=0,start=str.length,needsReplacement=!1;for(let i=str.length;i>0;){let characterStart=i-1,code=str.charCodeAt(characterStart),characterBytes,unpairedSurrogate=!1;if(code>=56320&&code<=57343&&characterStart>0){let previous=str.charCodeAt(characterStart-1);previous>=55296&&previous<=56319?(characterStart--,characterBytes=4):(characterBytes=3,unpairedSurrogate=!0)}else code>=55296&&code<=57343?(characterBytes=3,unpairedSurrogate=!0):characterBytes=code<=127?1:code<=2047?2:3;if(outputBytes+characterBytes>maxBytes)break;outputBytes+=characterBytes,start=characterStart,needsReplacement||=unpairedSurrogate,i=characterStart}let output=str.slice(start);return needsReplacement?replaceUnpairedSurrogates(output):output}function truncateLine(line,maxChars=500){return line.length<=maxChars?{text:line,wasTruncated:!1}:{text:`${line.slice(0,maxChars)}... [truncated]`,wasTruncated:!0}}var OUTPUT_TARGET_BYTES_PER_SECOND=100*1024,INVALID_SHELL_OUTPUT=/[\x00-\x08\x0b-\x1f\ufff9-\ufffb]/g,textEncoder=new TextEncoder,textDecoder=new TextDecoder;function applyShellOutputUpdate(current,update){switch(update.kind){case"replace":return update.output;case"append":return{text:`${current?.text??""}${update.text}`,...update.metadata};case"slide":return{text:`${current?.text.slice(update.drop)??""}${update.text}`,...update.metadata};case"metadata":return{text:current?.text??"",...update.metadata}}}function sanitizeShellOutput(text){return text.replace(INVALID_SHELL_OUTPUT,"")}import{spawnSync}from"node:child_process";var WINDOWS_PROCESS_TREE_ROWS=`Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -ne $PID } | ForEach-Object {
15
15
  $created = if ($_.CreationDate) { $_.CreationDate.ToFileTimeUtc() } else { 0 }
16
- "{0} {1} {2} {3}" -f $_.ProcessId, $_.ParentProcessId, $created, $_.Name }`;function parseWindowsProcessTreeRows(stdout){let rows=[];for(let line of stdout.split(/\r?\n/u)){let[pidText,parentText,createdText,...nameParts]=line.trim().split(/\s+/u),pid=Number(pidText),parentPid=Number(parentText);!Number.isInteger(pid)||pid<=0||!Number.isInteger(parentPid)||!/^\d+$/u.test(createdText??"")||rows.push({pid,parentPid,createdAt:BigInt(createdText??"0"),name:nameParts.join(" ")})}return rows}var PROTECTED_IMAGES=new Set(["system","smss.exe","csrss.exe","wininit.exe","winlogon.exe","services.exe","lsass.exe","lsaiso.exe","svchost.exe"]);function windowsTreeKillPlan(rows,rootPid,selfPid){let byPid=new Map(rows.map(row=>[row.pid,row]));if(byPid.get(rootPid)===void 0)return{kill:[],refused:[]};let tree=new Set([rootPid]),grew=!0;for(;grew;){grew=!1;for(let row of rows){if(tree.has(row.pid)||!tree.has(row.parentPid))continue;let parent=byPid.get(row.parentPid);parent===void 0||row.createdAt<parent.createdAt||(tree.add(row.pid),grew=!0)}}let ancestors=new Set([selfPid]);for(let current=byPid.get(selfPid);current!==void 0;){let parent=byPid.get(current.parentPid);if(parent===void 0||ancestors.has(parent.pid)||parent.createdAt>current.createdAt)break;ancestors.add(parent.pid),current=parent}let refused=[...tree].map(pid=>({pid,name:byPid.get(pid)?.name??""})).filter(entry=>PROTECTED_IMAGES.has(entry.name.toLowerCase())||ancestors.has(entry.pid));return refused.length===0?{kill:[...tree],refused}:{kill:refused.some(entry=>entry.pid===rootPid)?[]:[rootPid],refused}}function listWindowsProcessRowsSync(timeoutMs){let result=spawnSync("powershell.exe",["-NoProfile","-NonInteractive","-Command",WINDOWS_PROCESS_TREE_ROWS],{encoding:"utf8",windowsHide:!0,timeout:timeoutMs,maxBuffer:16777216});if(result.error!==void 0||result.status!==0||typeof result.stdout!="string")return;let rows=parseWindowsProcessTreeRows(result.stdout);return rows.length>0?rows:void 0}function windowsTreeKillArgs(rootPid,rows,selfPid=process.pid){if(rows===void 0)return["/F","/T","/PID",String(rootPid)];let pids=windowsTreeKillPlan(rows,rootPid,selfPid).kill;return pids.length===0?[]:["/F",...pids.flatMap(pid=>["/PID",String(pid)])]}var MAX_TIMEOUT_MS=2147483647,MAX_TIMEOUT_SECONDS=MAX_TIMEOUT_MS/1e3;var SPILL_HIGH_WATER_MARK=8*1024*1024;var dist_exports={};__export(dist_exports,{AGENT_TELEMETRY_SCHEMAS:()=>AGENT_TELEMETRY_SCHEMAS,AI_TELEMETRY_SCHEMA:()=>AI_TELEMETRY_SCHEMA,Agent:()=>Agent,AgentHarness:()=>AgentHarness,BACKGROUND_CONTEXT:()=>BACKGROUND_CONTEXT,BRANCH_SUMMARY_PREFIX:()=>BRANCH_SUMMARY_PREFIX,BRANCH_SUMMARY_SUFFIX:()=>BRANCH_SUMMARY_SUFFIX,BranchSummaryError:()=>BranchSummaryError,COMPACTION_SUMMARY_PREFIX:()=>COMPACTION_SUMMARY_PREFIX,COMPACTION_SUMMARY_SUFFIX:()=>COMPACTION_SUMMARY_SUFFIX,Closed:()=>Closed,CompactionError:()=>CompactionError,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES,EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC:()=>EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,ExecutionError:()=>ExecutionError,FileError:()=>FileError,GREP_MAX_LINE_LENGTH:()=>GREP_MAX_LINE_LENGTH,HARNESS_TELEMETRY_SCHEMA:()=>HARNESS_TELEMETRY_SCHEMA,HarnessClosed:()=>HarnessClosed,HarnessFault:()=>HarnessFault,InMemoryTelemetryContext:()=>InMemoryTelemetryContext,InvalidLane:()=>InvalidLane,InvalidMessage:()=>InvalidMessage,InvalidNavigation:()=>InvalidNavigation,InvalidReadSegmentsError:()=>InvalidReadSegmentsError,JSONL_STORAGE_VERSION:()=>JSONL_STORAGE_VERSION,JsonlSessionRepo:()=>JsonlSessionRepo,LaneBusy:()=>LaneBusy,MemorySessionRepo:()=>MemorySessionRepo,NOOP_TELEMETRY_CONTEXT:()=>NOOP_TELEMETRY_CONTEXT,NoActiveOperation:()=>NoActiveOperation,NoActiveRun:()=>NoActiveRun,NothingToCompact:()=>NothingToCompact,NothingToResume:()=>NothingToResume,OperationMismatch:()=>OperationMismatch,ProviderRetryWatchdogAbortError:()=>ProviderRetryWatchdogAbortError,READ_FOLDER_SELECTION:()=>READ_FOLDER_SELECTION,READ_FOLD_SETTINGS:()=>READ_FOLD_SETTINGS,Result:()=>Result,SessionBranchExistsError:()=>SessionBranchExistsError,SessionInvalidBranchError:()=>SessionInvalidBranchError,SessionInvariantError:()=>SessionInvariantError,SessionPendingAssistantMessageError:()=>SessionPendingAssistantMessageError,SessionUnknownTargetError:()=>SessionUnknownTargetError,SliceNotImplemented:()=>SliceNotImplemented,StorageBackedSession:()=>StorageBackedSession,StreamStartTimeoutError:()=>StreamStartTimeoutError,TODO_CONTEXT:()=>TODO_CONTEXT,TaggedError:()=>TaggedError,UnknownSkill:()=>UnknownSkill,UnknownTarget:()=>UnknownTarget,UnknownTemplate:()=>UnknownTemplate,agentLoop:()=>agentLoop,agentLoopContinue:()=>agentLoopContinue,appendList:()=>appendList,applyShellOutputUpdate:()=>applyShellOutputUpdate,awaitWithContext:()=>awaitWithContext,bashExecutionToText:()=>bashExecutionToText,branchTip:()=>branchTip,branchTipInventoryPrefix:()=>branchTipInventoryPrefix,buildProviderContext:()=>buildProviderContext,calculateContextTokens:()=>calculateContextTokens,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,commitWrite:()=>commitWrite,compact:()=>compact,convertToLlm:()=>convertToLlm,createBashTool:()=>createBashTool,createBranchSummaryMessage:()=>createBranchSummaryMessage,createCompactionSummaryMessage:()=>createCompactionSummaryMessage,createContextKey:()=>createContextKey,createCustomMessage:()=>createCustomMessage,createDefaultReadSummary:()=>createDefaultReadSummary,createEditTool:()=>createEditTool,createForkSnapshot:()=>createForkSnapshot,createReadTool:()=>createReadTool,createSegmentedReadView:()=>createSegmentedReadView,createTypedSpanStarter:()=>createTypedSpanStarter,createWriteTool:()=>createWriteTool,defineTelemetrySchema:()=>defineTelemetrySchema,deleteList:()=>deleteList,deleteValue:()=>deleteValue,entryLabel:()=>entryLabel,err:()=>err,estimateContextTokens:()=>estimateContextTokens,estimateTokens:()=>estimateTokens,executeShellWithCapture:()=>executeShellWithCapture,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatPromptTemplateInvocation:()=>formatPromptTemplateInvocation,formatSize:()=>formatSize,formatSkillInvocation:()=>formatSkillInvocation,formatSkillsForSystemPrompt:()=>formatSkillsForSystemPrompt,generateBranchSummary:()=>generateBranchSummary,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,getLastAssistantUsage:()=>getLastAssistantUsage,getOrThrow:()=>getOrThrow,getOrUndefined:()=>getOrUndefined,getTelemetryContext:()=>getTelemetryContext,insertEntry:()=>insertEntry,insertUsage:()=>insertUsage,isReadSummaryPath:()=>isReadSummaryPath,laneConfig:()=>laneConfig,laneState:()=>laneState,languageForPath:()=>languageForPath,list:()=>list,loadPromptTemplates:()=>loadPromptTemplates,loadSkills:()=>loadSkills,loadSourcedPromptTemplates:()=>loadSourcedPromptTemplates,loadSourcedSkills:()=>loadSourcedSkills,matchError:()=>matchError,ok:()=>ok,operationMeta:()=>operationMeta,operationPreparation:()=>operationPreparation,operationPreparationPrefix:()=>operationPreparationPrefix,operationResult:()=>operationResult,operationScopeOf:()=>operationScopeOf,operationState:()=>operationState,operationToolArgs:()=>operationToolArgs,operationToolArgsPrefix:()=>operationToolArgsPrefix,operationToolMemo:()=>operationToolMemo,operationToolMemoPrefix:()=>operationToolMemoPrefix,parseCommandArgs:()=>parseCommandArgs,pendingAssistantFrames:()=>pendingAssistantFrames,pendingEntry:()=>pendingEntry,pendingToolOutput:()=>pendingToolOutput,pendingToolOutputPrefix:()=>pendingToolOutputPrefix,prepareAgentToolCall:()=>prepareAgentToolCall,prepareAgentToolCallArguments:()=>prepareAgentToolCallArguments,prepareBranchEntries:()=>prepareBranchEntries,prepareCompaction:()=>prepareCompaction,prepareReadFolder:()=>prepareReadFolder,prepareStorageCommit:()=>prepareStorageCommit,prepareToolArguments:()=>prepareToolArguments,projectForkCurrentStateWrite:()=>projectForkCurrentStateWrite,readSummaryEngineForPath:()=>readSummaryEngineForPath,reduceLaneSnapshot:()=>reduceLaneSnapshot,renderSegmentedReadView:()=>renderSegmentedReadView,resolveListReadOptions:()=>resolveListReadOptions,resolveToolNameAlias:()=>resolveToolNameAlias,runAgentLoop:()=>runAgentLoop,runAgentLoopContinue:()=>runAgentLoopContinue,runToolCall:()=>runToolCall,sanitizeBinaryOutput:()=>sanitizeShellOutput,selectedReadFolder:()=>selectedReadFolder,serializeConversation:()=>serializeConversation,sessionName:()=>sessionName,setDefaultStreamFn:()=>setDefaultStreamFn,setValue:()=>setValue,shouldCompact:()=>shouldCompact,startAiSpan:()=>startAiSpan,startHarnessSpan:()=>startHarnessSpan,streamProxy:()=>streamProxy,substituteArgs:()=>substituteArgs,toError:()=>toError,truncateHead:()=>truncateHead,truncateLine:()=>truncateLine,truncateTail:()=>truncateTail,utf8ByteLength:()=>utf8ByteLength,uuidv7:()=>uuidv7,validateCommittedWrites:()=>validateCommittedWrites,value:()=>value,withAbortSignal:()=>withAbortSignal,withCancel:()=>withCancel,withContextValue:()=>withContextValue,withTelemetryContext:()=>withTelemetryContext,withoutAbortSignal:()=>withoutAbortSignal});function startNoopSpan(_options,callback){try{return Promise.resolve(callback(noopTelemetrySpan))}catch(error){return Promise.reject(error)}}var noopTelemetrySpan={startSpan:startNoopSpan,addEvent:()=>{},setAttributes:()=>{},setStatus:()=>{}};Object.freeze(noopTelemetrySpan);var NOOP_TELEMETRY_CONTEXT=noopTelemetrySpan;function copyAttributeValue(value2){return Array.isArray(value2)?[...value2]:value2}function copyAttributes(attributes){let copy={};if(!attributes)return copy;for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(copy[name]=copyAttributeValue(value2));return copy}function mergeAttributes(current,attributes){let merged=copyAttributes(current);for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(merged[name]=copyAttributeValue(value2));return merged}function copyStatus(status){return status.status==="ok"?{status:"ok"}:status.error?{status:"error",error:{name:status.error.name,message:status.error.message}}:{status:"error"}}function automaticErrorStatus(error){try{if(error instanceof Error)return{status:"error",error:{name:error.name,message:error.message}}}catch{}return{status:"error"}}function settleSpan(state,span,failed,error){span.settled||(failed&&!span.explicitStatus&&(span.status=automaticErrorStatus(error)),span.settled=!0,span.endSequence=state.nextEndSequence++)}function createSpan(state,parent,options){let name=options.name,attributes=copyAttributes(options.attributes);return{id:state.nextSpanId++,parentId:parent?.id??null,name,attributes,events:[],status:{status:"ok"},explicitStatus:!1,settled:!1}}function startInMemorySpan(state,parent,options,callback){if(parent?.settled)return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback);let recordedSpan;try{recordedSpan=createSpan(state,parent,options),state.spans.push(recordedSpan)}catch{return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback)}let span={startSpan:(childOptions,childCallback)=>startInMemorySpan(state,recordedSpan,childOptions,childCallback),addEvent(name,attributes){if(!recordedSpan.settled)try{recordedSpan.events.push({name,attributes:copyAttributes(attributes)})}catch{}},setAttributes(attributes){if(!recordedSpan.settled)try{recordedSpan.attributes=mergeAttributes(recordedSpan.attributes,attributes)}catch{}},setStatus(status){if(!recordedSpan.settled)try{recordedSpan.status=copyStatus(status),recordedSpan.explicitStatus=!0}catch{}}},result;try{result=callback(span)}catch(error){return settleSpan(state,recordedSpan,!0,error),Promise.reject(error)}return Promise.resolve(result).then(value2=>(settleSpan(state,recordedSpan,!1),value2),error=>{throw settleSpan(state,recordedSpan,!0,error),error})}var InMemoryTelemetryContext=class{constructor(){this.state={spans:[],nextSpanId:1,nextEndSequence:1}}startSpan(options,callback){return startInMemorySpan(this.state,void 0,options,callback)}getSpans(){return this.state.spans.map(span=>({id:span.id,parentId:span.parentId,name:span.name,attributes:copyAttributes(span.attributes),events:span.events.map(event=>({name:event.name,attributes:copyAttributes(event.attributes)})),status:copyStatus(span.status),settled:span.settled,...span.endSequence===void 0?{}:{endSequence:span.endSequence}}))}};function defineTelemetrySchema(schema){return schema}function bindTypedSpanStarter(telemetryContext){return(name,attributes,callback)=>telemetryContext.startSpan({name,attributes},span=>callback(span,bindTypedSpanStarter(span)))}function createTypedSpanStarter(telemetryContext,_schemas){return bindTypedSpanStarter(telemetryContext)}var EMPTY_USAGE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ProviderRetryWatchdogAbortError=class extends Error{constructor(providerCause){super(providerCause),this.providerCause=providerCause,this.name="ProviderRetryWatchdogAbortError"}},EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC="empty_tool_use_terminal_state";function demoteToolUseWithoutToolCalls(message){return message.stopReason!=="toolUse"||message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"stop",diagnostics:[...message.diagnostics??[],{type:EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,timestamp:Date.now(),details:{}}]}}function promoteStopWithPendingToolCalls(message){return message.stopReason!=="stop"||!message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"toolUse"}}function shouldTerminateAssistantTurn(message){return message.stopReason==="error"||message.stopReason==="aborted"||isClassifierRefusal(message)}function isStreamIdleTimeoutError(error){return error instanceof Error&&error.name==="StreamIdleTimeoutError"}function shouldFinalizeIdleAsStop(partialMessage,providerToolResults){if(!partialMessage)return!1;let toolCalls=partialMessage.content.filter(block=>block.type==="toolCall");return toolCalls.length===0?!1:providerToolResults.length>0?!0:toolCalls.every(block=>isCursorExecResolved(block))}function createTerminalFailureAssistantMessage(model,reason,error,partialMessage){let errorMessage2=error instanceof Error?error.message:String(error),providerDiagnostic=reason==="error"?readProviderDiagnostic(error):void 0;return{role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??model.api,provider:partialMessage?.provider??model.provider,model:partialMessage?.model??model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:reason==="error"&&isOAuthRefreshUnavailableError(error)?[...partialMessage?.diagnostics??[],{type:OAUTH_REFRESH_UNAVAILABLE_DIAGNOSTIC,timestamp:Date.now(),details:{provider:model.provider}}]:partialMessage?.diagnostics,usage:partialMessage?.usage??EMPTY_USAGE,stopReason:reason,errorMessage:errorMessage2||(reason==="aborted"?"Request was aborted":"Error"),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:partialMessage?.timestamp??Date.now()}}function normalizeTerminalAssistantMessage(message,event){if(event.type==="done")return message;let errorMessage2=message.errorMessage??(event.reason==="aborted"?"Request was aborted":"Error");return message.stopReason===event.reason&&message.errorMessage===errorMessage2?message:{...message,stopReason:event.reason,errorMessage:errorMessage2}}function isEmptyStop(message){return message.stopReason==="stop"&&!hasVisibleAssistantContent(message)}function isEmptyToolUse(message){return message.stopReason==="toolUse"&&!message.content.some(block=>block.type==="toolCall")}function isMeaningfulContentEvent(event,policy){switch(event.type){case"toolcall_start":return!0;case"text_delta":return hasVisibleText(event.delta);case"text_end":return hasVisibleText(event.content);case"thinking_delta":return policy.thinkingCommits&&hasVisibleText(event.delta);case"thinking_end":return policy.thinkingCommits&&hasVisibleText(event.content);default:return!1}}function appendRetryDiagnostic(message,type="empty_assistant_response_recovery",details={retries:1}){return{...message,diagnostics:[...message.diagnostics??[],{type,timestamp:Date.now(),details}]}}function recoveryDiagnosticType(toolUse){return toolUse?"empty_tool_use_response_recovery":"empty_assistant_response_recovery"}function createEmptyResponseFailure(message,toolUse=!1){let errorMessage2=toolUse?EMPTY_TOOL_USE_ERROR:EMPTY_RESPONSE_ERROR;return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse)),content:[{type:"text",text:errorMessage2}],stopReason:"error",errorMessage:errorMessage2}}function createForwardedEmptyFailure(message,toolUse){return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse),{retries:0,forwarded:!0}),stopReason:"error",errorMessage:toolUse?FORWARDED_EMPTY_TOOL_USE_ERROR:FORWARDED_EMPTY_RESPONSE_ERROR}}function createRetryingStream(firstStream,createStream,policy){let outerStream=createAssistantMessageEventStream();return(async()=>{try{let stream=firstStream,retrying=!1;for(;;){let buffered=[],forwarding=!1,retry=!1;for await(let event of stream){if(event.type==="done"){let emptyToolUse=isEmptyToolUse(event.message);if(isEmptyStop(event.message)||emptyToolUse){if(forwarding){outerStream.push({type:"error",reason:"error",error:createForwardedEmptyFailure(event.message,emptyToolUse)}),outerStream.end();return}if(!retrying){retry=!0;break}let error=createEmptyResponseFailure(event.message,emptyToolUse);outerStream.push({type:"error",reason:"error",error}),outerStream.end();return}let terminal=retrying?{...event,message:appendRetryDiagnostic(event.message,recoveryDiagnosticType(isEmptyToolUse(event.message)))}:event;if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(terminal),outerStream.end();return}if(event.type==="error"){if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(event),outerStream.end();return}if(forwarding){outerStream.push(event);continue}if(buffered.push(event),isMeaningfulContentEvent(event,policy)){for(let pending of buffered)outerStream.push(pending);forwarding=!0}}if(!retry){outerStream.end(retrying?appendRetryDiagnostic(await stream.result()):await stream.result());return}retrying=!0,stream=await createStream()}}catch(error){outerStream.fail(error)}})(),outerStream}function withEmptyAssistantRecovery(model,streamFunction){if(!shouldRecoverTextToolCalls(model)&&getToolCallFormat(model)===void 0)return streamFunction;let policy={thinkingCommits:!hasKimiTextToolCallRecovery(model)};return async(requestedModel,context,options)=>{let createStream=()=>streamFunction(requestedModel,context,options);return createRetryingStream(await createStream(),createStream,policy)}}var defaultStreamFn;function setDefaultStreamFn(streamFn){defaultStreamFn=streamFn}function getDefaultStreamFn(){if(!defaultStreamFn)throw new Error("No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().");return defaultStreamFn}function prepareToolArguments(shim,args){return shim?shim(structuredClone(args)):args}function prepareAgentToolCallArguments(tool,toolCall){return tool.prepareArguments?{...toolCall,arguments:prepareToolArguments(tool.prepareArguments,toolCall.arguments)}:toolCall}function resolveToolNameAlias(requested,available){return resolveToolNameMatch(requested,available)}function toolNameCorrectionNotice(requested,resolved2){return`[auto-corrected] no tool is named "${requested}"; ran "${resolved2}". Call tools by their exact listed name.`}async function resolveCallTool(currentContext,toolCall,config){if(toolCall.incomplete===!0)return;let exact=currentContext.tools?.find(candidate=>candidate.name===toolCall.name);if(exact)return exact;let resolved2=await config.resolveUnknownToolCall?.(toolCall.name,currentContext);if(resolved2)return resolved2;let aliasedName=resolveToolNameAlias(toolCall.name,(currentContext.tools??[]).map(candidate=>candidate.name));return currentContext.tools?.find(candidate=>candidate.name===aliasedName)}function withToolNameCorrection(result,requestedName,resolvedName){return{...result,content:[{type:"text",text:toolNameCorrectionNotice(requestedName,resolvedName),audience:"model"},...result.content??[]]}}function agentLoop(prompts,context,config,signal,streamFn){let stream=createAgentStream();return runAgentLoop(prompts,context,config,async event=>{stream.push(event)},signal,streamFn).then(messages=>{stream.end(messages)}),stream}function agentLoopContinue(context,config,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let stream=createAgentStream();return runAgentLoopContinue(context,config,async event=>{stream.push(event)},signal,streamFn).then(messages=>{stream.end(messages)}),stream}async function runAgentLoop(prompts,context,config,emit,signal,streamFn){let initialMessages=declareToolChanges(context,prompts,config.model),newMessages=[...initialMessages],currentContext={...context,messages:[...context.messages,...initialMessages]};await emit({type:"agent_start"}),await emit({type:"turn_start"});for(let message of initialMessages)await emit({type:"message_start",message}),await emit({type:"message_end",message});return await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}async function runAgentLoopContinue(context,config,emit,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let newMessages=[],currentContext={...context};return await emit({type:"agent_start"}),await emit({type:"turn_start"}),await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}function createAgentStream(){return new EventStream(event=>event.type==="agent_end",event=>event.type==="agent_end"?event.messages:[])}var StreamIdleTimeoutError=class extends Error{constructor(timeoutMs){super(`Idle timeout waiting for provider stream after ${timeoutMs}ms`),this.name="StreamIdleTimeoutError"}},StreamStartTimeoutError=class extends Error{constructor(timeoutMs){super(`Provider stream start timed out after ${timeoutMs}ms (raise streamStartTimeoutMs \u2014 retry.provider.streamStartTimeoutMs in senpi settings; 0 disables)`),this.name="StreamStartTimeoutError"}};async function runLoop(initialContext,newMessages,initialConfig,signal,emit,streamFunction){let currentContext=initialContext,config=initialConfig,firstTurn=!0,firstProviderRequest=!0,drainedTerminatingQueue,turnStartAlreadyEmitted=!1,explicitContinuation=!1,preparedMessages=[],refreshTerminatingQueueDrain=async()=>{!drainedTerminatingQueue||!config.restorePendingMessages||(await config.restorePendingMessages(drainedTerminatingQueue,pendingMessages),pendingMessages=await config.getSteeringMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"steering":void 0,pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"followUp":void 0))},pendingMessages=await config.getSteeringMessages?.()||[];for(;;){let hasMoreToolCalls=!0;for(;hasMoreToolCalls||pendingMessages.length>0;){if(turnStartAlreadyEmitted?turnStartAlreadyEmitted=!1:firstTurn?firstTurn=!1:await emit({type:"turn_start"}),drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0&&!explicitContinuation){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}for(let message2 of declareToolChanges(currentContext,[...preparedMessages,...pendingMessages],config.model))await emit({type:"message_start",message:message2}),await emit({type:"message_end",message:message2}),currentContext.messages.push(message2),newMessages.push(message2);preparedMessages=[],pendingMessages=[];let requestUpdate=await config.prepareRequest?.({context:currentContext,model:config.model,thinkingLevel:config.reasoning??"off"},signal);requestUpdate&&(currentContext=requestUpdate.context??currentContext,config=applyLoopUpdate(config,requestUpdate));let isInitialProviderRequest=firstProviderRequest;firstProviderRequest=!1;let requestConfig=isInitialProviderRequest?{...config,timeoutMs:config.initialRequestTimeoutMs??config.timeoutMs,streamStartTimeoutMs:config.initialRequestStreamStartTimeoutMs??config.streamStartTimeoutMs}:config,streamed=await streamAssistantResponse(currentContext,requestConfig,signal,emit,withEmptyAssistantRecovery(requestConfig.model,streamFunction),isInitialProviderRequest?config.timeoutMs:requestConfig.timeoutMs),message=demoteToolUseWithoutToolCalls(promoteStopWithPendingToolCalls(streamed.message)),providerToolResults=streamed.providerToolResults;newMessages.push(message);let toolResults=[];for(let result of providerToolResults)await emit({type:"message_start",message:result}),await emit({type:"message_end",message:result}),currentContext.messages.push(result),newMessages.push(result),toolResults.push(result);if(shouldTerminateAssistantTurn(message)){await config.finishTurn?.({message,toolResults,context:currentContext,newMessages},signal),await emit({type:"turn_end",message,toolResults}),await emit({type:"agent_end",messages:newMessages});return}let toolCalls=message.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));hasMoreToolCalls=!1;let toolBatchTerminated=!1;if(toolCalls.length>0){let executedToolBatch=message.stopReason==="length"?await failToolCallsFromTruncatedMessage(toolCalls,emit):await executeToolCalls(currentContext,message,config,signal,emit);toolResults.push(...executedToolBatch.messages),toolBatchTerminated=executedToolBatch.terminate,hasMoreToolCalls=!executedToolBatch.terminate;for(let result of executedToolBatch.messages)currentContext.messages.push(result),newMessages.push(result)}let nextTurnContext={message,toolResults,context:currentContext,newMessages},decision=await config.finishTurn?.(nextTurnContext,signal);if(await emit({type:"turn_end",message,toolResults}),signal?.aborted){await emit({type:"agent_end",messages:newMessages});return}if(decision?.action==="end"){await emit({type:"agent_end",messages:newMessages});return}if(explicitContinuation=decision?.action==="continue",toolBatchTerminated){if(pendingMessages=await config.getSteeringMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="steering"),pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="followUp")),pendingMessages.length===0&&!explicitContinuation){await emit({type:"agent_end",messages:newMessages});return}pendingMessages.length>0&&(await emit({type:"turn_start"}),turnStartAlreadyEmitted=!0)}let nextTurnSnapshot;try{nextTurnSnapshot=await config.prepareNextTurn?.(nextTurnContext)}catch(error){throw drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),error}if(nextTurnSnapshot&&(currentContext=nextTurnSnapshot.context??currentContext,preparedMessages=nextTurnSnapshot.messages??[],config=applyLoopUpdate(config,nextTurnSnapshot)),signal?.aborted){drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),await emit({type:"agent_end",messages:newMessages});return}if(drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0&&!explicitContinuation){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}toolBatchTerminated||(pendingMessages=await config.getSteeringMessages?.()||[]),(hasMoreToolCalls||pendingMessages.length>0)&&(explicitContinuation=!1)}let followUpMessages=await config.getFollowUpMessages?.()||[];if(followUpMessages.length>0){explicitContinuation=!1,pendingMessages=followUpMessages;continue}if(explicitContinuation){explicitContinuation=!1;continue}break}await emit({type:"agent_end",messages:newMessages})}function applyLoopUpdate(config,update){return{...config,model:update.model??config.model,reasoning:update.thinkingLevel===void 0?config.reasoning:update.thinkingLevel==="off"?void 0:update.thinkingLevel,thinkingSelection:update.thinkingSelection===void 0?config.thinkingSelection:update.thinkingSelection??void 0,abortServerSideFallback:update.abortServerSideFallback??config.abortServerSideFallback}}function declareToolChanges(context,pendingMessages,model){let systemIndex=-1;for(let i=pendingMessages.length-1;i>=0;i--)if(pendingMessages[i].role==="system"){systemIndex=i;break}let pending=pendingMessages[systemIndex],baseline=pending?pendingMessages.map((message,index2)=>index2===systemIndex?withToolChanges(pending,NO_CHANGES):message):pendingMessages,declared=(providerTools(context,model).tools??[]).map(toProviderToolDeclaration),shorthand=createInitialSystemMessage(context.systemPrompt,declared),committed=shorthand?[shorthand,...context.messages,...baseline]:[...context.messages,...baseline],delta=getToolStateChanges(getCurrentTools(committed),declared),declaredByName=new Map(declared.map(tool=>[tool.name,tool])),changes={toolsAdded:delta.toolsAdded.map(tool=>declaredByName.get(tool.name)??tool),toolsRemoved:delta.toolsRemoved},unchanged=changes.toolsAdded.length===0&&changes.toolsRemoved.length===0;if(pending)return unchanged&&!pending.toolsAdded?.length&&!pending.toolsRemoved?.length?pendingMessages:baseline.map((message,index2)=>index2===systemIndex?withToolChanges(pending,changes):message);if(unchanged)return pendingMessages;let update=withToolChanges({role:"system",content:"",timestamp:Date.now()},changes),insertIndex=pendingMessages.findIndex(message=>message.role!=="system"),index=insertIndex===-1?pendingMessages.length:insertIndex;return[...pendingMessages.slice(0,index),update,...pendingMessages.slice(index)]}var NO_CHANGES={toolsAdded:[],toolsRemoved:[]};function toProviderToolDeclaration(tool){return{name:tool.name,description:tool.description,parameters:tool.parameters,...tool.freeform===void 0?{}:{freeform:tool.freeform},...tool.constrainedSampling===void 0?{}:{constrainedSampling:tool.constrainedSampling}}}function withToolChanges(message,{toolsAdded,toolsRemoved}){let{toolsAdded:_added,toolsRemoved:_removed,...rest}=message;return{...rest,...toolsAdded.length>0?{toolsAdded}:{},...toolsRemoved.length>0?{toolsRemoved}:{}}}function providerTools(context,model){let declaredTools=context.declaredTools;if(declaredTools===void 0||model===void 0||!supportsAllowedToolChoice(model))return{tools:context.tools};let activeTools=context.tools??[],declaredNames=new Set(declaredTools.map(tool=>tool.name));return{tools:[...declaredTools,...activeTools.filter(tool=>!declaredNames.has(tool.name))],activeToolNames:activeTools.map(tool=>tool.name)}}async function buildProviderContext(context,config,signal){let messages=context.messages;config.transformContext&&(messages=await config.transformContext(messages,signal));let{tools,activeToolNames}=providerTools(context,config.model);return normalizeContext({systemPrompt:context.systemPrompt,messages:await config.convertToLlm(messages),...tools===void 0?{}:{tools:tools.map(toProviderToolDeclaration)},...activeToolNames===void 0?{}:{activeToolNames}})}async function streamAssistantResponse(context,config,signal,emit,streamFunction,streamIdleTimeoutMs){let partialMessage=null,addedPartial=!1,providerToolResults=[],thinkingTiming=new Map;function propagateThinkingTiming(finalMessage){for(let timing of thinkingTiming.values())timing.endedAt===void 0&&(timing.endedAt=Date.now());for(let[contentIndex,timing]of thinkingTiming){let block=finalMessage.content[contentIndex];block?.type==="thinking"&&(block.startedAt=timing.startedAt,block.endedAt=timing.endedAt)}}let requestAbortController=new AbortController,detachCallerAbort;if(signal!==void 0)if(signal.aborted)requestAbortController.abort(signal.reason);else{let onCallerAbort=()=>requestAbortController.abort(signal.reason);signal.addEventListener("abort",onCallerAbort,{once:!0}),detachCallerAbort=()=>signal.removeEventListener("abort",onCallerAbort)}try{let llmContext=await buildProviderContext(context,config,signal),resolvedApiKey=(config.getApiKey?await config.getApiKey(config.model.provider):void 0)||config.apiKey,response=await streamFunction(config.model,llmContext,{...config,streamKind:"main",apiKey:resolvedApiKey,signal:requestAbortController.signal,...config.cursorExecHandlers?{execHandlers:typeof config.cursorExecHandlers=="function"?config.cursorExecHandlers(signal??requestAbortController.signal):config.cursorExecHandlers,onToolResult:result2=>{providerToolResults.push(result2)}}:{}}),result=async()=>Object.assign(await response.result(),{thinkingLevel:config.reasoning??"off"}),iterator=response[Symbol.asyncIterator](),eventReader=createAssistantEventReader(iterator,streamIdleTimeoutMs,requestAbortController.signal,error=>requestAbortController.abort(error),config.streamStartTimeoutMs,response);try{for(;;){let next=await eventReader.next();if(next.done)break;let event=next.value;switch(event.type){case"start":partialMessage=event.partial,context.messages.push(partialMessage),addedPartial=!0,await emit({type:"message_start",message:{...partialMessage}});break;case"text_start":case"text_delta":case"text_end":case"thinking_start":case"thinking_delta":case"thinking_end":case"toolcall_start":case"toolcall_delta":case"toolcall_end":if(partialMessage){if(partialMessage=event.partial,event.type==="thinking_start"||event.type==="thinking_delta"||event.type==="thinking_end"){let timing=thinkingTiming.get(event.contentIndex);event.type==="thinking_start"&&timing===void 0&&(timing={startedAt:Date.now()},thinkingTiming.set(event.contentIndex,timing)),event.type==="thinking_end"&&timing!==void 0&&(timing.endedAt=Date.now());let block=partialMessage.content[event.contentIndex];block?.type==="thinking"&&timing!==void 0&&(block.startedAt=timing.startedAt,timing.endedAt!==void 0&&(block.endedAt=timing.endedAt))}context.messages[context.messages.length-1]=partialMessage,await emit({type:"message_update",assistantMessageEvent:event,message:{...partialMessage}})}break;case"done":case"error":{let finalMessage2=normalizeTerminalAssistantMessage(await result(),event);return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:context.messages.push(finalMessage2),addedPartial||await emit({type:"message_start",message:{...finalMessage2}}),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}}}}finally{eventReader.dispose()}let finalMessage=await result();return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}catch(error){if(isStreamIdleTimeoutError(error)&&shouldFinalizeIdleAsStop(partialMessage,providerToolResults)){let finalMessage2={role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??config.model.api,provider:partialMessage?.provider??config.model.provider,model:partialMessage?.model??config.model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:partialMessage?.diagnostics,usage:partialMessage?.usage??{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:partialMessage?.timestamp??Date.now()};return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:(context.messages.push(finalMessage2),await emit({type:"message_start",message:{...finalMessage2}})),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}let finalMessage=createTerminalFailureAssistantMessage(config.model,signal?.aborted?"aborted":"error",error,partialMessage);return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}finally{requestAbortController.abort(),detachCallerAbort?.()}}var ABORTED=Symbol("aborted");function abortError(reason){return reason instanceof Error?reason:new Error("Request was aborted")}function closeAssistantIterator(iterator){Promise.resolve(iterator.return?.()).catch(()=>{})}function normalizeTimeoutMs(timeoutMs){return typeof timeoutMs=="number"&&Number.isFinite(timeoutMs)&&timeoutMs>0?timeoutMs:void 0}function createAssistantEventReader(iterator,timeoutMs,signal,onIdleTimeout,streamStartTimeoutMs,stream){let idleTimeoutMs=normalizeTimeoutMs(timeoutMs),startTimeoutMs=normalizeTimeoutMs(streamStartTimeoutMs),sawFirstEvent=!1,removeAbortListener,abortPromise;return signal!==void 0&&(signal.aborted?abortPromise=Promise.resolve(ABORTED):abortPromise=new Promise(resolve=>{let abortHandler=()=>resolve(ABORTED);signal.addEventListener("abort",abortHandler,{once:!0}),removeAbortListener=()=>signal.removeEventListener("abort",abortHandler)})),{next:async()=>{if(signal?.aborted)return closeAssistantIterator(iterator),Promise.reject(abortError(signal.reason));let useStartBound=!sawFirstEvent&&startTimeoutMs!==void 0,result=await readNextAssistantEvent(iterator,useStartBound?startTimeoutMs:idleTimeoutMs,useStartBound?ms=>new StreamStartTimeoutError(ms):ms=>new StreamIdleTimeoutError(ms),abortPromise,onIdleTimeout,stream,signal);return result.done||(sawFirstEvent=!0),result},dispose:()=>removeAbortListener?.()}}async function readNextAssistantEvent(iterator,idleTimeoutMs,makeTimeoutError,abortPromise,onIdleTimeout,stream,signal){if(idleTimeoutMs===void 0&&abortPromise===void 0)return iterator.next();let timeout,settled=!1;return new Promise((resolve,reject)=>{let settle=complete=>{settled||(settled=!0,timeout!==void 0&&clearTimeout(timeout),complete())};if(idleTimeoutMs!==void 0){let onIdleDeadline=()=>{if(stream?.hasPendingLocalWork?.()){timeout=setTimeout(onIdleDeadline,idleTimeoutMs);return}let error=makeTimeoutError(idleTimeoutMs);closeAssistantIterator(iterator),settle(()=>reject(error)),onIdleTimeout?.(error)};timeout=setTimeout(onIdleDeadline,idleTimeoutMs)}(abortPromise?Promise.race([iterator.next(),abortPromise]):iterator.next()).then(result=>{if(result===ABORTED){closeAssistantIterator(iterator),settle(()=>reject(abortError(signal?.reason)));return}settle(()=>resolve(result))},error=>settle(()=>reject(error)))})}function createIncompleteToolCallErrorMessage(toolName,errorMessage2){return errorMessage2!==void 0?`${errorMessage2}${errorMessage2.endsWith(".")?"":"."} Re-issue the tool call with complete arguments.`:`Tool call "${toolName}" was not executed: the response ended before the tool call was complete because it hit the output token limit. Re-issue the tool call with complete arguments.`}async function failToolCallsFromTruncatedMessage(toolCalls,emit){let messages=[];for(let toolCall of toolCalls){await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:toolCall.name,args:toolCall.arguments});let finalized={toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name)),isError:!0};await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:!1}}async function executeToolCalls(currentContext,assistantMessage,config,signal,emit){let toolCalls=assistantMessage.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));return config.toolExecution==="sequential"?executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit):executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit)}async function executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],messages=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),finalized;if(preparation.kind==="immediate")finalized={toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};else{let executed=await executePreparedToolCall(preparation,signal,emitToolExecutionUpdate(preparation.toolCall,emit));finalized=await finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);if(await emitToolResultMessage(toolResultMessage,emit),finalizedCalls.push(finalized),messages.push(toolResultMessage),signal?.aborted)break}return{messages,terminate:shouldTerminateToolBatch(finalizedCalls)}}async function executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],preparedCalls=[],lastSequentialCall,currentParallelWave=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),isSequential=isSequentialToolCall(currentContext,preparation.toolCall),dependencies=isSequential?[...lastSequentialCall?[lastSequentialCall]:[],...currentParallelWave]:lastSequentialCall?[lastSequentialCall]:[];if(preparedCalls.push({preparation,isSequential,dependencies}),isSequential?(lastSequentialCall=void 0,currentParallelWave=[]):currentParallelWave.push(Promise.resolve(void 0)),signal?.aborted)break}let previousSequential,previousWave=[];for(let{preparation,isSequential}of preparedCalls){let dependencies=isSequential?[...previousSequential?[previousSequential]:[],...previousWave]:previousSequential?[previousSequential]:[],finalizedCall=(async()=>{await Promise.all(dependencies);let finalized=signal?.aborted?{toolCall:preparation.toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:await runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit);return await emitToolExecutionEnd(finalized,emit),finalized})();finalizedCalls.push(finalizedCall),isSequential?(previousSequential=finalizedCall,previousWave=[]):previousWave.push(finalizedCall)}let orderedFinalizedCalls=await Promise.all(finalizedCalls),messages=[];for(let finalized of orderedFinalizedCalls){let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:shouldTerminateToolBatch(orderedFinalizedCalls)}}async function runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit){if(preparation.kind==="immediate")return{toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};let executed=await executePreparedToolCall(preparation,signal,emitToolExecutionUpdate(preparation.toolCall,emit));return finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}function isSequentialToolCall(currentContext,toolCall){return currentContext.tools?.find(tool=>tool.name===toolCall.name)?.executionMode==="sequential"}function shouldTerminateToolBatch(finalizedCalls){return finalizedCalls.length>0&&finalizedCalls.every(finalized=>finalized.result.terminate===!0)}function prepareAgentToolCall(tool,toolCall){let preparedToolCall=prepareAgentToolCallArguments(tool,toolCall);return{toolCall:preparedToolCall,tool,args:validateToolArguments(tool,preparedToolCall)}}async function prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){if(toolCall.incomplete===!0)return{kind:"immediate",toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name,toolCall.errorMessage)),isError:!0};if(!tool){let hint=config.removedToolHints?.[toolCall.name];return{kind:"immediate",toolCall,result:createErrorToolResult(hint===void 0?`Tool ${toolCall.name} not found`:`Tool ${toolCall.name} not found. ${hint}`),isError:!0}}if(tool.name!==toolCall.name){let requestedName=toolCall.name,outcome=await prepareResolvedToolCall(currentContext,assistantMessage,{...toolCall,name:tool.name},tool,config,signal);return outcome.kind==="prepared"?{...outcome,requestedName}:{...outcome,result:withToolNameCorrection(outcome.result,requestedName,tool.name)}}return prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal)}async function prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){try{let preparedToolCall=prepareAgentToolCall(tool,toolCall),validatedArgs=preparedToolCall.args;if(config.beforeToolCall){let beforeResult=await config.beforeToolCall({assistantMessage,toolCall:preparedToolCall.toolCall,args:validatedArgs,context:currentContext},signal);if(signal?.aborted)return{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0};if(beforeResult?.block){let result=createErrorToolResult(beforeResult.reason||"Tool execution was blocked");return beforeResult.terminate===!0&&(result.terminate=!0),{kind:"immediate",toolCall,result,isError:!0}}}return signal?.aborted?{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:{kind:"prepared",toolCall:preparedToolCall.toolCall,tool,args:validatedArgs}}catch(error){return{kind:"immediate",toolCall,result:createErrorToolResult(error instanceof Error?error.message:String(error)),isError:!0}}}function abortReleasePromise(signal){if(signal!==void 0)return signal.aborted?Promise.resolve(ABORTED):new Promise(resolve=>{signal.addEventListener("abort",()=>resolve(ABORTED),{once:!0})})}function emitToolExecutionUpdate(toolCall,emit){return partialResult=>emit({type:"tool_execution_update",toolCallId:toolCall.id,toolName:toolCall.name,args:toolCall.arguments,partialResult})}async function runToolCall(toolCall,options){let{assistantMessage,context,signal}=options,tool=options.tools.find(candidate=>candidate.name===toolCall.name),preparation=await prepareToolCall(context,assistantMessage,toolCall,tool,options,signal);if(preparation.kind==="immediate")return{toolCall,result:preparation.result,isError:preparation.isError};let executed=await executePreparedToolCall(preparation,signal,options.onUpdate??(()=>{}));return finalizeExecutedToolCall(context,assistantMessage,preparation,executed,options,signal)}async function executePreparedToolCall(prepared,signal,onUpdate){let updateEvents=[],acceptingUpdates=!0;try{let execution=prepared.tool.execute(prepared.toolCall.id,prepared.args,signal,partialResult=>{acceptingUpdates&&updateEvents.push(Promise.resolve(onUpdate(partialResult)))}),abortRelease=abortReleasePromise(signal),settled=abortRelease?await Promise.race([execution,abortRelease]):await execution;return settled===ABORTED?(Promise.resolve(execution).catch(()=>{}),acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult("Tool execution aborted"),isError:!0}):(acceptingUpdates=!1,await Promise.all(updateEvents),{result:settled,isError:settled.isError===!0})}catch(error){return acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult(error instanceof Error?error.message:String(error)),isError:!0}}finally{acceptingUpdates=!1}}async function finalizeExecutedToolCall(currentContext,assistantMessage,prepared,executed,config,signal){let result=executed.result,isError=executed.isError;if(config.afterToolCall)try{let afterResult=await config.afterToolCall({assistantMessage,toolCall:prepared.toolCall,args:prepared.args,result,isError,context:currentContext},signal);if(afterResult){let structuredContent=afterResult.structuredContent??(afterResult.content?void 0:result.structuredContent);result={...result,content:afterResult.content??result.content,details:afterResult.details??result.details,usage:afterResult.usage??result.usage,terminate:afterResult.terminate??result.terminate},structuredContent===void 0?delete result.structuredContent:result.structuredContent=structuredContent,isError=afterResult.isError??isError}}catch(error){result=createErrorToolResult(error instanceof Error?error.message:String(error)),isError=!0}return prepared.requestedName!==void 0&&(result=withToolNameCorrection(result,prepared.requestedName,prepared.toolCall.name)),{toolCall:prepared.toolCall,result,isError}}function createErrorToolResult(message){return{content:[{type:"text",text:message}],details:{}}}async function emitToolExecutionEnd(finalized,emit){await emit({type:"tool_execution_end",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,result:finalized.result,isError:finalized.isError})}function createToolResultMessage(finalized){return{role:"toolResult",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,content:finalized.result.content??[],details:finalized.result.details,usage:finalized.result.usage,...finalized.result.addedToolNames?.length?{addedToolNames:finalized.result.addedToolNames}:{},isError:finalized.isError,timestamp:Date.now()}}async function emitToolResultMessage(toolResultMessage,emit){await emit({type:"message_start",message:toolResultMessage}),await emit({type:"message_end",message:toolResultMessage})}function defaultConvertToLlm(messages){return messages.filter(message=>message.role==="system"||message.role==="user"||message.role==="assistant"||message.role==="toolResult")}var EMPTY_USAGE2={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},DEFAULT_MODEL={id:"unknown",name:"unknown",api:"unknown",provider:"unknown",baseUrl:"",reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function createMutableAgentState(initialState){let tools=initialState?.tools?.slice()??[],messages=initialState?.messages?.slice()??[];return{systemPrompt:initialState?.systemPrompt??"",model:initialState?.model??DEFAULT_MODEL,thinkingLevel:initialState?.thinkingLevel??"off",reasoningBaseline:initialState?.reasoningBaseline,get tools(){return tools},set tools(nextTools){tools=nextTools.slice()},get messages(){return messages},set messages(nextMessages){messages=nextMessages.slice()},declaredTools:initialState?.declaredTools?.slice(),isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0,providerDiagnostic:void 0}}var LLM_ROLES=new Set(["user","assistant","toolResult","system"]);function isBackgroundNotice(message){return!LLM_ROLES.has(message.role)}var PendingMessageQueue=class{constructor(mode){this.messages=[],this.clearGeneration=0,this.mode=mode}enqueue(message){this.messages.push(message)}hasItems(){return this.messages.length>0}getClearGeneration(){return this.clearGeneration}peek(){if(this.mode==="all")return this.messages.slice();let first=this.messages[0];if(!first)return[];if(!isBackgroundNotice(first))return[first];let end=1;for(;end<this.messages.length&&isBackgroundNotice(this.messages[end]);)end++;return this.messages.slice(0,end)}drain(){let drained=this.peek();return this.messages=this.messages.slice(drained.length),drained}prepend(messages){this.messages=[...messages,...this.messages]}remove(message){let index=this.messages.indexOf(message);return index===-1?!1:(this.messages.splice(index,1),!0)}replace(message,next){let index=this.messages.indexOf(message);return index===-1?!1:(this.messages[index]=next,!0)}clear(){this.messages=[],this.clearGeneration++}},Agent=class{async buildProviderContext(context,signal){return buildProviderContext(context,{convertToLlm:this.convertToLlm,transformContext:this.transformContext,model:this._state.model},signal)}constructor(options){this.listeners=new Set;let runtimeOptions=options??{};this._state=createMutableAgentState(runtimeOptions.initialState),this.convertToLlm=runtimeOptions.convertToLlm??defaultConvertToLlm,this.transformContext=runtimeOptions.transformContext,this.streamFunction=runtimeOptions.streamFn??getDefaultStreamFn(),this.getApiKey=runtimeOptions.getApiKey,this.onPayload=runtimeOptions.onPayload,this.onResponse=runtimeOptions.onResponse,this.onProviderStreamEvent=runtimeOptions.onProviderStreamEvent,this.beforeToolCall=runtimeOptions.beforeToolCall,this.afterToolCall=runtimeOptions.afterToolCall,this.finishTurn=runtimeOptions.finishTurn,this.prepareRequest=runtimeOptions.prepareRequest,this.prepareNextTurn=runtimeOptions.prepareNextTurn,this.prepareNextTurnWithContext=runtimeOptions.prepareNextTurnWithContext,this.steeringQueue=new PendingMessageQueue(runtimeOptions.steeringMode??"one-at-a-time"),this.followUpQueue=new PendingMessageQueue(runtimeOptions.followUpMode??"one-at-a-time"),this.sessionId=runtimeOptions.sessionId,this.thinkingBudgets=runtimeOptions.thinkingBudgets,this.transport=runtimeOptions.transport??"auto",this.timeoutMs=runtimeOptions.timeoutMs,this.streamStartTimeoutMs=runtimeOptions.streamStartTimeoutMs,this.maxRetryDelayMs=runtimeOptions.maxRetryDelayMs,this.toolExecution=runtimeOptions.toolExecution??"parallel",this.removedToolHints=runtimeOptions.removedToolHints??{},this.resolveUnknownToolCall=runtimeOptions.resolveUnknownToolCall,this.abortServerSideFallback=runtimeOptions.abortServerSideFallback,this.cursorExecHandlers=runtimeOptions.cursorExecHandlers}subscribe(listener){return this.listeners.add(listener),()=>this.listeners.delete(listener)}get state(){return this._state}set steeringMode(mode){this.steeringQueue.mode=mode}get steeringMode(){return this.steeringQueue.mode}set followUpMode(mode){this.followUpQueue.mode=mode}get followUpMode(){return this.followUpQueue.mode}steer(message){this.steeringQueue.enqueue(message)}followUp(message){this.followUpQueue.enqueue(message)}removeQueuedMessage(message){return this.steeringQueue.remove(message)||this.followUpQueue.remove(message)}replaceQueuedMessage(message,next){return this.steeringQueue.replace(message,next)||this.followUpQueue.replace(message,next)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}peekQueuedMessages(){let steering=this.steeringQueue.peek();return steering.length>0?steering:this.followUpQueue.peek()}get signal(){return this.activeRun?.abortController.signal}abort(reason){this.activeRun?.abortController.abort(reason)}suppressQueuedMessageDrain(){this.activeRun&&(this.activeRun.suppressQueuedMessageDrain=!0)}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before resetting.");this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(input,images){if(this.activeRun)throw new Error("Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.");let messages=this.normalizePromptInput(input,images);await this.runPromptMessages(messages)}async continueWithQueuedMessages(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");if(this._state.messages[this._state.messages.length-1]?.role==="assistant"){await this.continue(options);return}let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}await this.continue(options)}async continue(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");let lastMessage=this._state.messages[this._state.messages.length-1];if(!lastMessage||this._state.messages.every(message=>message.role==="system"))throw new Error("No messages to continue from");if(lastMessage.role==="assistant"){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}throw new Error("Cannot continue from message role: assistant")}await this.runContinuation(options)}normalizePromptInput(input,images){if(Array.isArray(input))return input;if(typeof input!="string")return[input];let content=[{type:"text",text:input}];return images&&images.length>0&&content.push(...images),[{role:"user",content,timestamp:Date.now()}]}async runPromptMessages(messages,options={}){await this.runWithLifecycle(async signal=>{await runAgentLoop(messages,this.createContextSnapshot(),this.createLoopConfig(options),event=>this.processEvents(event),signal,this.streamFunction)})}async runContinuation(options={}){await this.runWithLifecycle(async signal=>{await runAgentLoopContinue(this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:options.deferQueuedMessages,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs}),event=>this.processEvents(event),signal,this.streamFunction)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice(),...this._state.declaredTools?{declaredTools:this._state.declaredTools.slice()}:{}}}createLoopConfig(options={}){let skipInitialSteeringPoll=options.skipInitialSteeringPoll===!0,steeringQueueGeneration=this.steeringQueue.getClearGeneration(),followUpQueueGeneration=this.followUpQueue.getClearGeneration(),finishTurn=this.finishTurn,reasoning=this._state.reasoningBaseline??this._state.thinkingLevel;return{model:this._state.model,reasoning:reasoning==="off"?void 0:reasoning,thinkingSelection:this._state.thinkingSelection,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,onProviderStreamEvent:this.onProviderStreamEvent,transport:this.transport,thinkingBudgets:this.thinkingBudgets,timeoutMs:this.timeoutMs,streamStartTimeoutMs:this.streamStartTimeoutMs,initialRequestTimeoutMs:options.initialRequestTimeoutMs,initialRequestStreamStartTimeoutMs:options.initialRequestStreamStartTimeoutMs,maxRetryDelayMs:this.maxRetryDelayMs,abortServerSideFallback:this.abortServerSideFallback,cursorExecHandlers:this.cursorExecHandlers,toolExecution:this.toolExecution,removedToolHints:this.removedToolHints,resolveUnknownToolCall:this.resolveUnknownToolCall,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,finishTurn:finishTurn?async(turn,signal)=>{let decision=await finishTurn(turn,signal)??void 0;return decision?.action==="end"&&this.suppressQueuedMessageDrain(),decision}:void 0,prepareRequest:this.prepareRequest,prepareNextTurn:this.prepareNextTurnWithContext||this.prepareNextTurn?async context=>this.prepareNextTurnWithContext?await this.prepareNextTurnWithContext(context,this.signal):await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>skipInitialSteeringPoll?(skipInitialSteeringPoll=!1,[]):(steeringQueueGeneration=this.steeringQueue.getClearGeneration(),this.steeringQueue.drain()),getFollowUpMessages:async()=>(followUpQueueGeneration=this.followUpQueue.getClearGeneration(),this.followUpQueue.drain()),restorePendingMessages:(queue,messages)=>{if(queue==="steering"){if(this.steeringQueue.getClearGeneration()!==steeringQueueGeneration)return;this.steeringQueue.prepend(messages);return}this.followUpQueue.getClearGeneration()===followUpQueueGeneration&&this.followUpQueue.prepend(messages)}}}async runWithLifecycle(executor){if(this.activeRun)throw new Error("Agent is already processing.");let abortController=new AbortController,resolvePromise=()=>{},promise=new Promise(resolve=>{resolvePromise=resolve});this.activeRun={promise,resolve:resolvePromise,abortController,suppressQueuedMessageDrain:!1},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0;try{for(await executor(abortController.signal);!abortController.signal.aborted&&!this.activeRun?.suppressQueuedMessageDrain&&this.canDrainQueuedMessagesAfterRun()&&this.hasQueuedMessages();)await this.runQueuedMessagesAfterAgentEnd(abortController.signal)}catch(error){await this.handleRunFailure(error,abortController.signal.aborted)}finally{this.finishRun()}}canDrainQueuedMessagesAfterRun(){let lastMessage=this._state.messages[this._state.messages.length-1];return lastMessage?.role!=="assistant"||lastMessage.stopReason!=="error"&&lastMessage.stopReason!=="aborted"}async runQueuedMessagesAfterAgentEnd(signal){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await runAgentLoop(queuedSteering,this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:!0}),event=>this.processEvents(event),signal,this.streamFunction);return}let queuedFollowUps=this.followUpQueue.drain();queuedFollowUps.length!==0&&await runAgentLoop(queuedFollowUps,this.createContextSnapshot(),this.createLoopConfig(),event=>this.processEvents(event),signal,this.streamFunction)}async handleRunFailure(error,aborted){let providerDiagnostic=aborted?void 0:readProviderDiagnostic(error),failureMessage={role:"assistant",content:[{type:"text",text:""}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:EMPTY_USAGE2,stopReason:aborted?"aborted":"error",errorMessage:error instanceof Error?error.message:String(error),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:Date.now()};await this.processEvents({type:"message_start",message:failureMessage}),await this.processEvents({type:"message_end",message:failureMessage}),await this.processEvents({type:"turn_end",message:failureMessage,toolResults:[]}),await this.processEvents({type:"agent_end",messages:[failureMessage]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(event){switch(event.type){case"message_start":this._state.streamingMessage=event.message;break;case"message_update":this._state.streamingMessage=event.message;break;case"message_end":this._state.streamingMessage=void 0,this._state.messages.push(event.message);break;case"tool_execution_start":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.add(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"tool_execution_end":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.delete(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"turn_end":event.message.role==="assistant"&&event.message.errorMessage&&(this._state.errorMessage=event.message.errorMessage,this._state.providerDiagnostic=sanitizeProviderDiagnostic(event.message.providerDiagnostic));break;case"agent_end":this._state.streamingMessage=void 0;break}let signal=this.activeRun?.abortController.signal;if(!signal)throw new Error("Agent listener invoked outside active run");for(let listener of this.listeners)await listener(event,signal)}async emitExternalEvent(event,runSignal){let activeSignal=this.activeRun?.abortController.signal;!activeSignal||runSignal&&runSignal!==activeSignal||await this.processEvents(event)}};var Result={ok(value2){return{ok:!0,value:value2}},err(error){return{ok:!1,error}},isOk(result){return result.ok},isErr(result){return!result.ok}};function TaggedError(tag){class TaggedErrorClass extends Error{constructor(props){super(props.message),this._tag=tag,this.name=tag,Object.assign(this,props)}toJSON(){let payload={};for(let key of Object.keys(this))key!=="_tag"&&(payload[key]=this[key]);return{_tag:tag,message:this.message,...payload}}static is(value2){return value2 instanceof TaggedErrorClass}}return TaggedErrorClass}var LaneBusy=class extends TaggedError("LaneBusy"){},OperationMismatch=class extends TaggedError("OperationMismatch"){},NoActiveRun=class extends TaggedError("NoActiveRun"){},NoActiveOperation=class extends TaggedError("NoActiveOperation"){},NothingToResume=class extends TaggedError("NothingToResume"){},NothingToCompact=class extends TaggedError("NothingToCompact"){},InvalidMessage=class extends TaggedError("InvalidMessage"){},InvalidNavigation=class extends TaggedError("InvalidNavigation"){},UnknownSkill=class extends TaggedError("UnknownSkill"){},UnknownTemplate=class extends TaggedError("UnknownTemplate"){},UnknownTarget=class extends TaggedError("UnknownTarget"){},InvalidLane=class extends TaggedError("InvalidLane"){},Closed=class extends TaggedError("Closed"){},HarnessFault=class extends Error{constructor(message,cause){super(message),this.name="HarnessFault",this.cause=cause}},HarnessClosed=class extends Error{constructor(){super("AgentHarness was closed while the operation was active"),this.name="HarnessClosed"}};function matchError(error,matchers){let matcher=matchers[error._tag];return matcher(error)}import{awaitWithContext,BACKGROUND_CONTEXT,createContextKey,TODO_CONTEXT,withAbortSignal,withCancel,withContextValue,withoutAbortSignal}from"@earendil-works/chord/context";var TELEMETRY_CONTEXT_KEY=createContextKey("pi.telemetryContext");function getTelemetryContext(context){return context.value(TELEMETRY_CONTEXT_KEY)??NOOP_TELEMETRY_CONTEXT}function withTelemetryContext(telemetryContext,context){return withContextValue(TELEMETRY_CONTEXT_KEY,telemetryContext,context)}var AbortRequested=class extends Error{constructor(cancellation){super("Abort requested"),this.name="AbortRequested",this.cancellation=cancellation}};function createGate(){let state={status:"open"},controller=new AbortController,check=()=>{if(state.status==="aborting")throw new AbortRequested(state.cancellation);if(state.status==="closed")throw state.error};return{gate:{admit(invoke){return check(),invoke()},signal:controller.signal},control:{beginAbort(cancellation){state.status==="open"&&(state={status:"aborting",cancellation})},signalAbort(){state.status!=="aborting"||controller.signal.aborted||controller.abort(new AbortRequested(state.cancellation))},close(error){state.status!=="closed"&&(state={status:"closed",error},controller.signal.aborted||controller.abort(error))}}}}var SliceNotImplemented=class extends Error{constructor(operation){super(`${operation} is not implemented until its later AgentHarness slice`),this.name="SliceNotImplemented"}},Drive=class{constructor(options,context){this.operationId=options.operationId,this.context=withoutAbortSignal(context),this.waitForRetry=options.waitForRetry??!1,this.deferredPermits=options.pollDeferred===!0?1:0;let resolveCompletion,rejectCompletion;this.completion=new Promise((resolve,reject)=>{resolveCompletion=resolve,rejectCompletion=reject}),this.resolveCompletion=resolveCompletion,this.rejectCompletion=rejectCompletion,this.completion.catch(()=>{});let{gate,control}=createGate();this.gate=gate,this.control=control,this.closeController=new AbortController,this.closeSignal=this.closeController.signal}settle(outcome){this.resolveCompletion(outcome)}fail(error){this.rejectCompletion(error)}beginAbort(cancellation){this.control.beginAbort(cancellation)}signalAbort(){this.control.signalAbort()}closeGate(error){this.control.close(error),this.closeSignal.aborted||this.closeController.abort(error),this.rejectCompletion(error)}};var COMPACTION_SUMMARY_PREFIX=`The conversation history before this point was compacted into the following summary:
16
+ "{0} {1} {2} {3}" -f $_.ProcessId, $_.ParentProcessId, $created, $_.Name }`;function parseWindowsProcessTreeRows(stdout){let rows=[];for(let line of stdout.split(/\r?\n/u)){let[pidText,parentText,createdText,...nameParts]=line.trim().split(/\s+/u),pid=Number(pidText),parentPid=Number(parentText);!Number.isInteger(pid)||pid<=0||!Number.isInteger(parentPid)||!/^\d+$/u.test(createdText??"")||rows.push({pid,parentPid,createdAt:BigInt(createdText??"0"),name:nameParts.join(" ")})}return rows}var PROTECTED_IMAGES=new Set(["system","smss.exe","csrss.exe","wininit.exe","winlogon.exe","services.exe","lsass.exe","lsaiso.exe","svchost.exe"]);function windowsTreeKillPlan(rows,rootPid,selfPid){let byPid=new Map(rows.map(row=>[row.pid,row]));if(byPid.get(rootPid)===void 0)return{kill:[],refused:[]};let tree=new Set([rootPid]),grew=!0;for(;grew;){grew=!1;for(let row of rows){if(tree.has(row.pid)||!tree.has(row.parentPid))continue;let parent=byPid.get(row.parentPid);parent===void 0||row.createdAt<parent.createdAt||(tree.add(row.pid),grew=!0)}}let ancestors=new Set([selfPid]);for(let current=byPid.get(selfPid);current!==void 0;){let parent=byPid.get(current.parentPid);if(parent===void 0||ancestors.has(parent.pid)||parent.createdAt>current.createdAt)break;ancestors.add(parent.pid),current=parent}let refused=[...tree].map(pid=>({pid,name:byPid.get(pid)?.name??""})).filter(entry=>PROTECTED_IMAGES.has(entry.name.toLowerCase())||ancestors.has(entry.pid));return refused.length===0?{kill:[...tree],refused}:{kill:refused.some(entry=>entry.pid===rootPid)?[]:[rootPid],refused}}function listWindowsProcessRowsSync(timeoutMs){let result=spawnSync("powershell.exe",["-NoProfile","-NonInteractive","-Command",WINDOWS_PROCESS_TREE_ROWS],{encoding:"utf8",windowsHide:!0,timeout:timeoutMs,maxBuffer:16777216});if(result.error!==void 0||result.status!==0||typeof result.stdout!="string")return;let rows=parseWindowsProcessTreeRows(result.stdout);return rows.length>0?rows:void 0}function windowsTreeKillArgs(rootPid,rows,selfPid=process.pid){if(rows===void 0)return["/F","/T","/PID",String(rootPid)];let pids=windowsTreeKillPlan(rows,rootPid,selfPid).kill;return pids.length===0?[]:["/F",...pids.flatMap(pid=>["/PID",String(pid)])]}var MAX_TIMEOUT_MS=2147483647,MAX_TIMEOUT_SECONDS=MAX_TIMEOUT_MS/1e3;var SPILL_HIGH_WATER_MARK=8*1024*1024;var dist_exports={};__export(dist_exports,{AGENT_TELEMETRY_SCHEMAS:()=>AGENT_TELEMETRY_SCHEMAS,AI_TELEMETRY_SCHEMA:()=>AI_TELEMETRY_SCHEMA,Agent:()=>Agent,AgentHarness:()=>AgentHarness,BACKGROUND_CONTEXT:()=>BACKGROUND_CONTEXT,BRANCH_SUMMARY_PREFIX:()=>BRANCH_SUMMARY_PREFIX,BRANCH_SUMMARY_SUFFIX:()=>BRANCH_SUMMARY_SUFFIX,BranchSummaryError:()=>BranchSummaryError,COMPACTION_SUMMARY_PREFIX:()=>COMPACTION_SUMMARY_PREFIX,COMPACTION_SUMMARY_SUFFIX:()=>COMPACTION_SUMMARY_SUFFIX,Closed:()=>Closed,CompactionError:()=>CompactionError,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES,EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC:()=>EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,ExecutionError:()=>ExecutionError,FileError:()=>FileError,GREP_MAX_LINE_LENGTH:()=>GREP_MAX_LINE_LENGTH,HARNESS_TELEMETRY_SCHEMA:()=>HARNESS_TELEMETRY_SCHEMA,HarnessClosed:()=>HarnessClosed,HarnessFault:()=>HarnessFault,InMemoryTelemetryContext:()=>InMemoryTelemetryContext,InvalidLane:()=>InvalidLane,InvalidMessage:()=>InvalidMessage,InvalidNavigation:()=>InvalidNavigation,InvalidReadSegmentsError:()=>InvalidReadSegmentsError,JSONL_STORAGE_VERSION:()=>JSONL_STORAGE_VERSION,JsonlSessionRepo:()=>JsonlSessionRepo,LaneBusy:()=>LaneBusy,MemorySessionRepo:()=>MemorySessionRepo,NOOP_TELEMETRY_CONTEXT:()=>NOOP_TELEMETRY_CONTEXT,NoActiveOperation:()=>NoActiveOperation,NoActiveRun:()=>NoActiveRun,NothingToCompact:()=>NothingToCompact,NothingToResume:()=>NothingToResume,OperationMismatch:()=>OperationMismatch,ProviderRetryWatchdogAbortError:()=>ProviderRetryWatchdogAbortError,READ_FOLDER_SELECTION:()=>READ_FOLDER_SELECTION,READ_FOLD_SETTINGS:()=>READ_FOLD_SETTINGS,Result:()=>Result,SessionBranchExistsError:()=>SessionBranchExistsError,SessionInvalidBranchError:()=>SessionInvalidBranchError,SessionInvariantError:()=>SessionInvariantError,SessionPendingAssistantMessageError:()=>SessionPendingAssistantMessageError,SessionUnknownTargetError:()=>SessionUnknownTargetError,SliceNotImplemented:()=>SliceNotImplemented,StorageBackedSession:()=>StorageBackedSession,StreamStartTimeoutError:()=>StreamStartTimeoutError,TODO_CONTEXT:()=>TODO_CONTEXT,TaggedError:()=>TaggedError,UnknownSkill:()=>UnknownSkill,UnknownTarget:()=>UnknownTarget,UnknownTemplate:()=>UnknownTemplate,agentLoop:()=>agentLoop,agentLoopContinue:()=>agentLoopContinue,appendList:()=>appendList,applyShellOutputUpdate:()=>applyShellOutputUpdate,awaitWithContext:()=>awaitWithContext,bashExecutionToText:()=>bashExecutionToText,branchTip:()=>branchTip,branchTipInventoryPrefix:()=>branchTipInventoryPrefix,buildProviderContext:()=>buildProviderContext,calculateContextTokens:()=>calculateContextTokens,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,commitWrite:()=>commitWrite,compact:()=>compact,convertToLlm:()=>convertToLlm,createBashTool:()=>createBashTool,createBranchSummaryMessage:()=>createBranchSummaryMessage,createCompactionSummaryMessage:()=>createCompactionSummaryMessage,createContextKey:()=>createContextKey,createCustomMessage:()=>createCustomMessage,createDefaultReadSummary:()=>createDefaultReadSummary,createEditTool:()=>createEditTool,createForkSnapshot:()=>createForkSnapshot,createReadTool:()=>createReadTool,createSegmentedReadView:()=>createSegmentedReadView,createTypedSpanStarter:()=>createTypedSpanStarter,createWriteTool:()=>createWriteTool,defineTelemetrySchema:()=>defineTelemetrySchema,deleteList:()=>deleteList,deleteValue:()=>deleteValue,entryLabel:()=>entryLabel,err:()=>err,estimateContextTokens:()=>estimateContextTokens,estimateTokens:()=>estimateTokens,executeShellWithCapture:()=>executeShellWithCapture,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatPromptTemplateInvocation:()=>formatPromptTemplateInvocation,formatSize:()=>formatSize,formatSkillInvocation:()=>formatSkillInvocation,formatSkillsForSystemPrompt:()=>formatSkillsForSystemPrompt,generateBranchSummary:()=>generateBranchSummary,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,getLastAssistantUsage:()=>getLastAssistantUsage,getOrThrow:()=>getOrThrow,getOrUndefined:()=>getOrUndefined,getTelemetryContext:()=>getTelemetryContext,insertEntry:()=>insertEntry,insertUsage:()=>insertUsage,isReadSummaryPath:()=>isReadSummaryPath,laneConfig:()=>laneConfig,laneState:()=>laneState,languageForPath:()=>languageForPath,list:()=>list,loadPromptTemplates:()=>loadPromptTemplates,loadSkills:()=>loadSkills,loadSourcedPromptTemplates:()=>loadSourcedPromptTemplates,loadSourcedSkills:()=>loadSourcedSkills,matchError:()=>matchError,ok:()=>ok,operationMeta:()=>operationMeta,operationPreparation:()=>operationPreparation,operationPreparationPrefix:()=>operationPreparationPrefix,operationResult:()=>operationResult,operationScopeOf:()=>operationScopeOf,operationState:()=>operationState,operationToolArgs:()=>operationToolArgs,operationToolArgsPrefix:()=>operationToolArgsPrefix,operationToolMemo:()=>operationToolMemo,operationToolMemoPrefix:()=>operationToolMemoPrefix,parseCommandArgs:()=>parseCommandArgs,pendingAssistantFrames:()=>pendingAssistantFrames,pendingEntry:()=>pendingEntry,pendingToolOutput:()=>pendingToolOutput,pendingToolOutputPrefix:()=>pendingToolOutputPrefix,prepareAgentToolCall:()=>prepareAgentToolCall,prepareAgentToolCallArguments:()=>prepareAgentToolCallArguments,prepareBranchEntries:()=>prepareBranchEntries,prepareCompaction:()=>prepareCompaction,prepareReadFolder:()=>prepareReadFolder,prepareStorageCommit:()=>prepareStorageCommit,prepareToolArguments:()=>prepareToolArguments,projectForkCurrentStateWrite:()=>projectForkCurrentStateWrite,readSummaryEngineForPath:()=>readSummaryEngineForPath,reduceLaneSnapshot:()=>reduceLaneSnapshot,renderSegmentedReadView:()=>renderSegmentedReadView,resolveListReadOptions:()=>resolveListReadOptions,resolveToolNameAlias:()=>resolveToolNameAlias,runAgentLoop:()=>runAgentLoop,runAgentLoopContinue:()=>runAgentLoopContinue,runToolCall:()=>runToolCall,sanitizeBinaryOutput:()=>sanitizeShellOutput,selectedReadFolder:()=>selectedReadFolder,serializeConversation:()=>serializeConversation,sessionName:()=>sessionName,setDefaultStreamFn:()=>setDefaultStreamFn,setValue:()=>setValue,shouldCompact:()=>shouldCompact,startAiSpan:()=>startAiSpan,startHarnessSpan:()=>startHarnessSpan,streamProxy:()=>streamProxy,substituteArgs:()=>substituteArgs,toError:()=>toError,truncateHead:()=>truncateHead,truncateLine:()=>truncateLine,truncateTail:()=>truncateTail,utf8ByteLength:()=>utf8ByteLength,uuidv7:()=>uuidv7,validateCommittedWrites:()=>validateCommittedWrites,value:()=>value,withAbortSignal:()=>withAbortSignal,withCancel:()=>withCancel,withContextValue:()=>withContextValue,withTelemetryContext:()=>withTelemetryContext,withoutAbortSignal:()=>withoutAbortSignal});function startNoopSpan(_options,callback){try{return Promise.resolve(callback(noopTelemetrySpan))}catch(error){return Promise.reject(error)}}var noopTelemetrySpan={startSpan:startNoopSpan,addEvent:()=>{},setAttributes:()=>{},setStatus:()=>{}};Object.freeze(noopTelemetrySpan);var NOOP_TELEMETRY_CONTEXT=noopTelemetrySpan;function copyAttributeValue(value2){return Array.isArray(value2)?[...value2]:value2}function copyAttributes(attributes){let copy={};if(!attributes)return copy;for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(copy[name]=copyAttributeValue(value2));return copy}function mergeAttributes(current,attributes){let merged=copyAttributes(current);for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(merged[name]=copyAttributeValue(value2));return merged}function copyStatus(status){return status.status==="ok"?{status:"ok"}:status.error?{status:"error",error:{name:status.error.name,message:status.error.message}}:{status:"error"}}function automaticErrorStatus(error){try{if(error instanceof Error)return{status:"error",error:{name:error.name,message:error.message}}}catch{}return{status:"error"}}function settleSpan(state,span,failed,error){span.settled||(failed&&!span.explicitStatus&&(span.status=automaticErrorStatus(error)),span.settled=!0,span.endSequence=state.nextEndSequence++)}function createSpan(state,parent,options){let name=options.name,attributes=copyAttributes(options.attributes);return{id:state.nextSpanId++,parentId:parent?.id??null,name,attributes,events:[],status:{status:"ok"},explicitStatus:!1,settled:!1}}function startInMemorySpan(state,parent,options,callback){if(parent?.settled)return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback);let recordedSpan;try{recordedSpan=createSpan(state,parent,options),state.spans.push(recordedSpan)}catch{return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback)}let span={startSpan:(childOptions,childCallback)=>startInMemorySpan(state,recordedSpan,childOptions,childCallback),addEvent(name,attributes){if(!recordedSpan.settled)try{recordedSpan.events.push({name,attributes:copyAttributes(attributes)})}catch{}},setAttributes(attributes){if(!recordedSpan.settled)try{recordedSpan.attributes=mergeAttributes(recordedSpan.attributes,attributes)}catch{}},setStatus(status){if(!recordedSpan.settled)try{recordedSpan.status=copyStatus(status),recordedSpan.explicitStatus=!0}catch{}}},result;try{result=callback(span)}catch(error){return settleSpan(state,recordedSpan,!0,error),Promise.reject(error)}return Promise.resolve(result).then(value2=>(settleSpan(state,recordedSpan,!1),value2),error=>{throw settleSpan(state,recordedSpan,!0,error),error})}var InMemoryTelemetryContext=class{constructor(){this.state={spans:[],nextSpanId:1,nextEndSequence:1}}startSpan(options,callback){return startInMemorySpan(this.state,void 0,options,callback)}getSpans(){return this.state.spans.map(span=>({id:span.id,parentId:span.parentId,name:span.name,attributes:copyAttributes(span.attributes),events:span.events.map(event=>({name:event.name,attributes:copyAttributes(event.attributes)})),status:copyStatus(span.status),settled:span.settled,...span.endSequence===void 0?{}:{endSequence:span.endSequence}}))}};function defineTelemetrySchema(schema){return schema}function bindTypedSpanStarter(telemetryContext){return(name,attributes,callback)=>telemetryContext.startSpan({name,attributes},span=>callback(span,bindTypedSpanStarter(span)))}function createTypedSpanStarter(telemetryContext,_schemas){return bindTypedSpanStarter(telemetryContext)}var EMPTY_USAGE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ProviderRetryWatchdogAbortError=class extends Error{constructor(providerCause){super(providerCause),this.providerCause=providerCause,this.name="ProviderRetryWatchdogAbortError"}},EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC="empty_tool_use_terminal_state";function demoteToolUseWithoutToolCalls(message){return message.stopReason!=="toolUse"||message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"stop",diagnostics:[...message.diagnostics??[],{type:EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,timestamp:Date.now(),details:{}}]}}function promoteStopWithPendingToolCalls(message){return message.stopReason!=="stop"||!message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"toolUse"}}function shouldTerminateAssistantTurn(message){return message.stopReason==="error"||message.stopReason==="aborted"||isClassifierRefusal(message)}function isStreamIdleTimeoutError(error){return error instanceof Error&&error.name==="StreamIdleTimeoutError"}function shouldFinalizeIdleAsStop(partialMessage,providerToolResults){if(!partialMessage)return!1;let toolCalls=partialMessage.content.filter(block=>block.type==="toolCall");return toolCalls.length===0?!1:providerToolResults.length>0?!0:toolCalls.every(block=>isCursorExecResolved(block))}function createTerminalFailureAssistantMessage(model,reason,error,partialMessage){let errorMessage2=error instanceof Error?error.message:String(error),providerDiagnostic=reason==="error"?readProviderDiagnostic(error):void 0;return{role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??model.api,provider:partialMessage?.provider??model.provider,model:partialMessage?.model??model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:reason==="error"&&isOAuthRefreshUnavailableError(error)?[...partialMessage?.diagnostics??[],{type:OAUTH_REFRESH_UNAVAILABLE_DIAGNOSTIC,timestamp:Date.now(),details:{provider:model.provider}}]:partialMessage?.diagnostics,usage:partialMessage?.usage??EMPTY_USAGE,stopReason:reason,errorMessage:errorMessage2||(reason==="aborted"?"Request was aborted":"Error"),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:partialMessage?.timestamp??Date.now()}}function normalizeTerminalAssistantMessage(message,event){if(event.type==="done")return message;let errorMessage2=message.errorMessage??(event.reason==="aborted"?"Request was aborted":"Error");return message.stopReason===event.reason&&message.errorMessage===errorMessage2?message:{...message,stopReason:event.reason,errorMessage:errorMessage2}}function isEmptyStop(message){return message.stopReason==="stop"&&!hasVisibleAssistantContent(message)}function isEmptyToolUse(message){return message.stopReason==="toolUse"&&!message.content.some(block=>block.type==="toolCall")}function isMeaningfulContentEvent(event,policy){switch(event.type){case"toolcall_start":return!0;case"text_delta":return hasVisibleText(event.delta);case"text_end":return hasVisibleText(event.content);case"thinking_delta":return policy.thinkingCommits&&hasVisibleText(event.delta);case"thinking_end":return policy.thinkingCommits&&hasVisibleText(event.content);default:return!1}}function appendRetryDiagnostic(message,type="empty_assistant_response_recovery",details={retries:1}){return{...message,diagnostics:[...message.diagnostics??[],{type,timestamp:Date.now(),details}]}}function recoveryDiagnosticType(toolUse){return toolUse?"empty_tool_use_response_recovery":"empty_assistant_response_recovery"}function createEmptyResponseFailure(message,toolUse=!1){let errorMessage2=toolUse?EMPTY_TOOL_USE_ERROR:EMPTY_RESPONSE_ERROR;return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse)),content:[{type:"text",text:errorMessage2}],stopReason:"error",errorMessage:errorMessage2}}function createForwardedEmptyFailure(message,toolUse){return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse),{retries:0,forwarded:!0}),stopReason:"error",errorMessage:toolUse?FORWARDED_EMPTY_TOOL_USE_ERROR:FORWARDED_EMPTY_RESPONSE_ERROR}}function createRetryingStream(firstStream,createStream,policy){let outerStream=createAssistantMessageEventStream();return(async()=>{try{let stream=firstStream,retrying=!1;for(;;){let buffered=[],forwarding=!1,retry=!1;for await(let event of stream){if(event.type==="done"){let emptyToolUse=isEmptyToolUse(event.message);if(isEmptyStop(event.message)||emptyToolUse){if(forwarding){outerStream.push({type:"error",reason:"error",error:createForwardedEmptyFailure(event.message,emptyToolUse)}),outerStream.end();return}if(!retrying){retry=!0;break}let error=createEmptyResponseFailure(event.message,emptyToolUse);outerStream.push({type:"error",reason:"error",error}),outerStream.end();return}let terminal=retrying?{...event,message:appendRetryDiagnostic(event.message,recoveryDiagnosticType(isEmptyToolUse(event.message)))}:event;if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(terminal),outerStream.end();return}if(event.type==="error"){if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(event),outerStream.end();return}if(forwarding){outerStream.push(event);continue}if(buffered.push(event),isMeaningfulContentEvent(event,policy)){for(let pending of buffered)outerStream.push(pending);forwarding=!0}}if(!retry){outerStream.end(retrying?appendRetryDiagnostic(await stream.result()):await stream.result());return}retrying=!0,stream=await createStream()}}catch(error){outerStream.fail(error)}})(),outerStream}function withEmptyAssistantRecovery(model,streamFunction){if(!shouldRecoverTextToolCalls(model)&&getToolCallFormat(model)===void 0)return streamFunction;let policy={thinkingCommits:!hasKimiTextToolCallRecovery(model)};return async(requestedModel,context,options)=>{let createStream=()=>streamFunction(requestedModel,context,options);return createRetryingStream(await createStream(),createStream,policy)}}var defaultStreamFn;function setDefaultStreamFn(streamFn){defaultStreamFn=streamFn}function getDefaultStreamFn(){if(!defaultStreamFn)throw new Error("No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().");return defaultStreamFn}function prepareToolArguments(shim,args){return shim?shim(structuredClone(args)):args}function prepareAgentToolCallArguments(tool,toolCall){return tool.prepareArguments?{...toolCall,arguments:prepareToolArguments(tool.prepareArguments,toolCall.arguments)}:toolCall}function resolveToolNameAlias(requested,available){return resolveToolNameMatch(requested,available)}function toolNameCorrectionNotice(requested,resolved2){return`[auto-corrected] no tool is named "${requested}"; ran "${resolved2}". Call tools by their exact listed name.`}async function resolveCallTool(currentContext,toolCall,config){if(toolCall.incomplete===!0)return;let exact=currentContext.tools?.find(candidate=>candidate.name===toolCall.name);if(exact)return exact;let resolved2=await config.resolveUnknownToolCall?.(toolCall.name,currentContext);if(resolved2)return resolved2;let aliasedName=resolveToolNameAlias(toolCall.name,(currentContext.tools??[]).map(candidate=>candidate.name));return currentContext.tools?.find(candidate=>candidate.name===aliasedName)}function withToolNameCorrection(result,requestedName,resolvedName){return{...result,content:[{type:"text",text:toolNameCorrectionNotice(requestedName,resolvedName),audience:"model"},...result.content??[]]}}function agentLoop(prompts,context,config,signal,streamFn){let stream=createAgentStream();return runAgentLoop(prompts,context,config,async event=>{stream.push(event)},signal,streamFn).then(messages=>{stream.end(messages)}),stream}function agentLoopContinue(context,config,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let stream=createAgentStream();return runAgentLoopContinue(context,config,async event=>{stream.push(event)},signal,streamFn).then(messages=>{stream.end(messages)}),stream}async function runAgentLoop(prompts,context,config,emit,signal,streamFn){let initialMessages=declareToolChanges(context,prompts,config.model),newMessages=[...initialMessages],currentContext={...context,messages:[...context.messages,...initialMessages]};await emit({type:"agent_start"}),await emit({type:"turn_start"});for(let message of initialMessages)await emit({type:"message_start",message}),await emit({type:"message_end",message});return await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}async function runAgentLoopContinue(context,config,emit,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let newMessages=[],currentContext={...context};return await emit({type:"agent_start"}),await emit({type:"turn_start"}),await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}function createAgentStream(){return new EventStream(event=>event.type==="agent_end",event=>event.type==="agent_end"?event.messages:[])}var StreamIdleTimeoutError=class extends Error{constructor(timeoutMs){super(`Idle timeout waiting for provider stream after ${timeoutMs}ms`),this.name="StreamIdleTimeoutError"}},StreamStartTimeoutError=class extends Error{constructor(timeoutMs){super(`Provider stream start timed out after ${timeoutMs}ms (raise streamStartTimeoutMs \u2014 retry.provider.streamStartTimeoutMs in senpi settings; 0 disables)`),this.name="StreamStartTimeoutError"}};async function runLoop(initialContext,newMessages,initialConfig,signal,emit,streamFunction){let currentContext=initialContext,config=initialConfig,firstTurn=!0,firstProviderRequest=!0,drainedTerminatingQueue,turnStartAlreadyEmitted=!1,explicitContinuation=!1,preparedMessages=[],refreshTerminatingQueueDrain=async()=>{!drainedTerminatingQueue||!config.restorePendingMessages||(await config.restorePendingMessages(drainedTerminatingQueue,pendingMessages),pendingMessages=await config.getSteeringMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"steering":void 0,pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"followUp":void 0))},pendingMessages=await config.getSteeringMessages?.()||[];for(;;){let hasMoreToolCalls=!0;for(;hasMoreToolCalls||pendingMessages.length>0;){if(turnStartAlreadyEmitted?turnStartAlreadyEmitted=!1:firstTurn?firstTurn=!1:await emit({type:"turn_start"}),drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0&&!explicitContinuation){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}for(let message2 of declareToolChanges(currentContext,[...preparedMessages,...pendingMessages],config.model))await emit({type:"message_start",message:message2}),await emit({type:"message_end",message:message2}),currentContext.messages.push(message2),newMessages.push(message2);preparedMessages=[],pendingMessages=[];let requestUpdate=await config.prepareRequest?.({context:currentContext,model:config.model,thinkingLevel:config.reasoning??"off"},signal);requestUpdate&&(currentContext=requestUpdate.context??currentContext,config=applyLoopUpdate(config,requestUpdate));let isInitialProviderRequest=firstProviderRequest;firstProviderRequest=!1;let requestConfig=isInitialProviderRequest?{...config,timeoutMs:config.initialRequestTimeoutMs??config.timeoutMs,streamStartTimeoutMs:config.initialRequestStreamStartTimeoutMs??config.streamStartTimeoutMs}:config,streamed=await streamAssistantResponse(currentContext,requestConfig,signal,emit,withEmptyAssistantRecovery(requestConfig.model,streamFunction),isInitialProviderRequest?config.timeoutMs:requestConfig.timeoutMs),message=demoteToolUseWithoutToolCalls(promoteStopWithPendingToolCalls(streamed.message)),providerToolResults=streamed.providerToolResults;newMessages.push(message);let toolResults=[];for(let result of providerToolResults)await emit({type:"message_start",message:result}),await emit({type:"message_end",message:result}),currentContext.messages.push(result),newMessages.push(result),toolResults.push(result);if(shouldTerminateAssistantTurn(message)){await config.finishTurn?.({message,toolResults,context:currentContext,newMessages},signal),await emit({type:"turn_end",message,toolResults}),await emit({type:"agent_end",messages:newMessages});return}let toolCalls=message.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));hasMoreToolCalls=!1;let toolBatchTerminated=!1;if(toolCalls.length>0){let executedToolBatch=message.stopReason==="length"?await failToolCallsFromTruncatedMessage(toolCalls,emit):await executeToolCalls(currentContext,message,config,signal,emit);toolResults.push(...executedToolBatch.messages),toolBatchTerminated=executedToolBatch.terminate,hasMoreToolCalls=!executedToolBatch.terminate;for(let result of executedToolBatch.messages)currentContext.messages.push(result),newMessages.push(result)}let nextTurnContext={message,toolResults,context:currentContext,newMessages},decision=await config.finishTurn?.(nextTurnContext,signal);if(await emit({type:"turn_end",message,toolResults}),signal?.aborted){await emit({type:"agent_end",messages:newMessages});return}if(decision?.action==="end"){await emit({type:"agent_end",messages:newMessages});return}if(explicitContinuation=decision?.action==="continue",toolBatchTerminated){if(pendingMessages=await config.getSteeringMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="steering"),pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="followUp")),pendingMessages.length===0&&!explicitContinuation){await emit({type:"agent_end",messages:newMessages});return}pendingMessages.length>0&&(await emit({type:"turn_start"}),turnStartAlreadyEmitted=!0)}let nextTurnSnapshot;try{nextTurnSnapshot=await config.prepareNextTurn?.(nextTurnContext)}catch(error){throw drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),error}if(nextTurnSnapshot&&(currentContext=nextTurnSnapshot.context??currentContext,preparedMessages=nextTurnSnapshot.messages??[],config=applyLoopUpdate(config,nextTurnSnapshot)),signal?.aborted){drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),await emit({type:"agent_end",messages:newMessages});return}if(drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0&&!explicitContinuation){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}toolBatchTerminated||(pendingMessages=await config.getSteeringMessages?.()||[]),(hasMoreToolCalls||pendingMessages.length>0)&&(explicitContinuation=!1)}let followUpMessages=await config.getFollowUpMessages?.()||[];if(followUpMessages.length>0){explicitContinuation=!1,pendingMessages=followUpMessages;continue}if(explicitContinuation){explicitContinuation=!1;continue}break}await emit({type:"agent_end",messages:newMessages})}function applyLoopUpdate(config,update){return{...config,model:update.model??config.model,reasoning:update.thinkingLevel===void 0?config.reasoning:update.thinkingLevel==="off"?void 0:update.thinkingLevel,thinkingSelection:update.thinkingSelection===void 0?config.thinkingSelection:update.thinkingSelection??void 0,abortServerSideFallback:update.abortServerSideFallback??config.abortServerSideFallback}}function declareToolChanges(context,pendingMessages,model){let systemIndex=-1;for(let i=pendingMessages.length-1;i>=0;i--)if(pendingMessages[i].role==="system"){systemIndex=i;break}let pending=pendingMessages[systemIndex],baseline=pending?pendingMessages.map((message,index2)=>index2===systemIndex?withToolChanges(pending,NO_CHANGES):message):pendingMessages,declared=(providerTools(context,model).tools??[]).map(toProviderToolDeclaration),shorthand=createInitialSystemMessage(context.systemPrompt,declared),committed=shorthand?[shorthand,...context.messages,...baseline]:[...context.messages,...baseline],delta=getToolStateChanges(getCurrentTools(committed),declared),declaredByName=new Map(declared.map(tool=>[tool.name,tool])),changes={toolsAdded:delta.toolsAdded.map(tool=>declaredByName.get(tool.name)??tool),toolsRemoved:delta.toolsRemoved},unchanged=changes.toolsAdded.length===0&&changes.toolsRemoved.length===0;if(pending)return unchanged&&!pending.toolsAdded?.length&&!pending.toolsRemoved?.length?pendingMessages:baseline.map((message,index2)=>index2===systemIndex?withToolChanges(pending,changes):message);if(unchanged)return pendingMessages;let update=withToolChanges({role:"system",content:"",timestamp:Date.now()},changes),insertIndex=pendingMessages.findIndex(message=>message.role!=="system"),index=insertIndex===-1?pendingMessages.length:insertIndex;return[...pendingMessages.slice(0,index),update,...pendingMessages.slice(index)]}var NO_CHANGES={toolsAdded:[],toolsRemoved:[]};function toProviderToolDeclaration(tool){return{name:tool.name,description:tool.description,parameters:tool.parameters,...tool.freeform===void 0?{}:{freeform:tool.freeform},...tool.constrainedSampling===void 0?{}:{constrainedSampling:tool.constrainedSampling}}}function withToolChanges(message,{toolsAdded,toolsRemoved}){let{toolsAdded:_added,toolsRemoved:_removed,...rest}=message;return{...rest,...toolsAdded.length>0?{toolsAdded}:{},...toolsRemoved.length>0?{toolsRemoved}:{}}}function providerTools(context,model){let declaredTools=context.declaredTools;if(declaredTools===void 0||model===void 0||!supportsAllowedToolChoice(model))return{tools:context.tools};let activeTools=context.tools??[],declaredNames=new Set(declaredTools.map(tool=>tool.name));return{tools:[...declaredTools,...activeTools.filter(tool=>!declaredNames.has(tool.name))],activeToolNames:activeTools.map(tool=>tool.name)}}async function buildProviderContext(context,config,signal){let messages=context.messages;config.transformContext&&(messages=await config.transformContext(messages,signal));let{tools,activeToolNames}=providerTools(context,config.model);return normalizeContext({systemPrompt:context.systemPrompt,messages:await config.convertToLlm(messages),...tools===void 0?{}:{tools:tools.map(toProviderToolDeclaration)},...activeToolNames===void 0?{}:{activeToolNames}})}async function streamAssistantResponse(context,config,signal,emit,streamFunction,streamIdleTimeoutMs){let partialMessage=null,addedPartial=!1,providerToolResults=[],thinkingTiming=new Map;function propagateThinkingTiming(finalMessage){for(let timing of thinkingTiming.values())timing.endedAt===void 0&&(timing.endedAt=Date.now());for(let[contentIndex,timing]of thinkingTiming){let block=finalMessage.content[contentIndex];block?.type==="thinking"&&(block.startedAt=timing.startedAt,block.endedAt=timing.endedAt)}}let requestAbortController=new AbortController,detachCallerAbort;if(signal!==void 0)if(signal.aborted)requestAbortController.abort(signal.reason);else{let onCallerAbort=()=>requestAbortController.abort(signal.reason);signal.addEventListener("abort",onCallerAbort,{once:!0}),detachCallerAbort=()=>signal.removeEventListener("abort",onCallerAbort)}try{let preStream=createPreStreamBound(normalizeTimeoutMs(config.streamStartTimeoutMs),normalizeTimeoutMs(streamIdleTimeoutMs),requestAbortController),llmContext=await preStream.run(buildProviderContext(context,config,requestAbortController.signal)),resolvedApiKey=(config.getApiKey?await preStream.run(config.getApiKey(config.model.provider)):void 0)||config.apiKey,response=await preStream.run(streamFunction(config.model,llmContext,{...config,streamKind:"main",apiKey:resolvedApiKey,signal:requestAbortController.signal,...config.cursorExecHandlers?{execHandlers:typeof config.cursorExecHandlers=="function"?config.cursorExecHandlers(signal??requestAbortController.signal):config.cursorExecHandlers,onToolResult:result2=>{providerToolResults.push(result2)}}:{}}),late=>{typeof late?.[Symbol.asyncIterator]=="function"&&closeAssistantIterator(late[Symbol.asyncIterator]())}),result=async()=>Object.assign(await response.result(),{thinkingLevel:config.reasoning??"off"}),iterator=response[Symbol.asyncIterator](),eventReader=createAssistantEventReader(iterator,streamIdleTimeoutMs,requestAbortController.signal,error=>requestAbortController.abort(error),preStream.remainingStartMs(),response,normalizeTimeoutMs(config.streamStartTimeoutMs));try{for(;;){let next=await eventReader.next();if(next.done)break;let event=next.value;switch(event.type){case"start":partialMessage=event.partial,context.messages.push(partialMessage),addedPartial=!0,await emit({type:"message_start",message:{...partialMessage}});break;case"text_start":case"text_delta":case"text_end":case"thinking_start":case"thinking_delta":case"thinking_end":case"toolcall_start":case"toolcall_delta":case"toolcall_end":if(partialMessage){if(partialMessage=event.partial,event.type==="thinking_start"||event.type==="thinking_delta"||event.type==="thinking_end"){let timing=thinkingTiming.get(event.contentIndex);event.type==="thinking_start"&&timing===void 0&&(timing={startedAt:Date.now()},thinkingTiming.set(event.contentIndex,timing)),event.type==="thinking_end"&&timing!==void 0&&(timing.endedAt=Date.now());let block=partialMessage.content[event.contentIndex];block?.type==="thinking"&&timing!==void 0&&(block.startedAt=timing.startedAt,timing.endedAt!==void 0&&(block.endedAt=timing.endedAt))}context.messages[context.messages.length-1]=partialMessage,await emit({type:"message_update",assistantMessageEvent:event,message:{...partialMessage}})}break;case"done":case"error":{let finalMessage2=normalizeTerminalAssistantMessage(await result(),event);return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:context.messages.push(finalMessage2),addedPartial||await emit({type:"message_start",message:{...finalMessage2}}),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}}}}finally{eventReader.dispose()}let finalMessage=await result();return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}catch(error){if(isStreamIdleTimeoutError(error)&&shouldFinalizeIdleAsStop(partialMessage,providerToolResults)){let finalMessage2={role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??config.model.api,provider:partialMessage?.provider??config.model.provider,model:partialMessage?.model??config.model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:partialMessage?.diagnostics,usage:partialMessage?.usage??{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:partialMessage?.timestamp??Date.now()};return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:(context.messages.push(finalMessage2),await emit({type:"message_start",message:{...finalMessage2}})),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}let finalMessage=createTerminalFailureAssistantMessage(config.model,signal?.aborted?"aborted":"error",error,partialMessage);return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}finally{requestAbortController.abort(),detachCallerAbort?.()}}var ABORTED=Symbol("aborted");function abortError(reason){return reason instanceof Error?reason:new Error("Request was aborted")}function closeAssistantIterator(iterator){Promise.resolve(iterator.return?.()).catch(()=>{})}function createPreStreamBound(startTimeoutMs,idleTimeoutMs,request){let startedAt=Date.now(),remaining=()=>startTimeoutMs===void 0?idleTimeoutMs:Math.max(0,startTimeoutMs-(Date.now()-startedAt)),timeoutError=()=>startTimeoutMs===void 0?new StreamIdleTimeoutError(idleTimeoutMs??0):new StreamStartTimeoutError(startTimeoutMs);return{run(work,discardLate){let budget=remaining();return budget===void 0?Promise.resolve(work):new Promise((resolve,reject)=>{let timer,settled=!1,finish=complete=>{settled||(settled=!0,timer!==void 0&&clearTimeout(timer),complete())};Promise.resolve(work).then(value2=>{if(settled){try{discardLate?.(value2)}catch{}return}finish(()=>resolve(value2))},error=>finish(()=>reject(error))),timer=setTimeout(()=>{let error=timeoutError();finish(()=>reject(error)),request.abort(error)},budget)})},remainingStartMs:()=>startTimeoutMs===void 0?void 0:Math.max(1,remaining()??1)}}function normalizeTimeoutMs(timeoutMs){return typeof timeoutMs=="number"&&Number.isFinite(timeoutMs)&&timeoutMs>0?timeoutMs:void 0}function createAssistantEventReader(iterator,timeoutMs,signal,onIdleTimeout,streamStartTimeoutMs,stream,configuredStartTimeoutMs){let idleTimeoutMs=normalizeTimeoutMs(timeoutMs),startTimeoutMs=normalizeTimeoutMs(streamStartTimeoutMs),reportedStartTimeoutMs=configuredStartTimeoutMs??startTimeoutMs,sawFirstEvent=!1,removeAbortListener,abortPromise;return signal!==void 0&&(signal.aborted?abortPromise=Promise.resolve(ABORTED):abortPromise=new Promise(resolve=>{let abortHandler=()=>resolve(ABORTED);signal.addEventListener("abort",abortHandler,{once:!0}),removeAbortListener=()=>signal.removeEventListener("abort",abortHandler)})),{next:async()=>{if(signal?.aborted)return closeAssistantIterator(iterator),Promise.reject(abortError(signal.reason));let useStartBound=!sawFirstEvent&&startTimeoutMs!==void 0,result=await readNextAssistantEvent(iterator,useStartBound?startTimeoutMs:idleTimeoutMs,useStartBound?ms=>new StreamStartTimeoutError(reportedStartTimeoutMs??ms):ms=>new StreamIdleTimeoutError(ms),abortPromise,onIdleTimeout,stream,signal);return result.done||(sawFirstEvent=!0),result},dispose:()=>removeAbortListener?.()}}async function readNextAssistantEvent(iterator,idleTimeoutMs,makeTimeoutError,abortPromise,onIdleTimeout,stream,signal){if(idleTimeoutMs===void 0&&abortPromise===void 0)return iterator.next();let timeout,settled=!1;return new Promise((resolve,reject)=>{let settle=complete=>{settled||(settled=!0,timeout!==void 0&&clearTimeout(timeout),complete())};if(idleTimeoutMs!==void 0){let onIdleDeadline=()=>{if(stream?.hasPendingLocalWork?.()){timeout=setTimeout(onIdleDeadline,idleTimeoutMs);return}let error=makeTimeoutError(idleTimeoutMs);closeAssistantIterator(iterator),settle(()=>reject(error)),onIdleTimeout?.(error)};timeout=setTimeout(onIdleDeadline,idleTimeoutMs)}(abortPromise?Promise.race([iterator.next(),abortPromise]):iterator.next()).then(result=>{if(result===ABORTED){closeAssistantIterator(iterator),settle(()=>reject(abortError(signal?.reason)));return}settle(()=>resolve(result))},error=>settle(()=>reject(error)))})}function createIncompleteToolCallErrorMessage(toolName,errorMessage2){return errorMessage2!==void 0?`${errorMessage2}${errorMessage2.endsWith(".")?"":"."} Re-issue the tool call with complete arguments.`:`Tool call "${toolName}" was not executed: the response ended before the tool call was complete because it hit the output token limit. Re-issue the tool call with complete arguments.`}async function failToolCallsFromTruncatedMessage(toolCalls,emit){let messages=[];for(let toolCall of toolCalls){await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:toolCall.name,args:toolCall.arguments});let finalized={toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name)),isError:!0};await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:!1}}async function executeToolCalls(currentContext,assistantMessage,config,signal,emit){let toolCalls=assistantMessage.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));return config.toolExecution==="sequential"?executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit):executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit)}async function executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],messages=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),finalized;if(preparation.kind==="immediate")finalized={toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};else{let executed=await executePreparedToolCall(preparation,signal,emitToolExecutionUpdate(preparation.toolCall,emit));finalized=await finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);if(await emitToolResultMessage(toolResultMessage,emit),finalizedCalls.push(finalized),messages.push(toolResultMessage),signal?.aborted)break}return{messages,terminate:shouldTerminateToolBatch(finalizedCalls)}}async function executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],preparedCalls=[],lastSequentialCall,currentParallelWave=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),isSequential=isSequentialToolCall(currentContext,preparation.toolCall),dependencies=isSequential?[...lastSequentialCall?[lastSequentialCall]:[],...currentParallelWave]:lastSequentialCall?[lastSequentialCall]:[];if(preparedCalls.push({preparation,isSequential,dependencies}),isSequential?(lastSequentialCall=void 0,currentParallelWave=[]):currentParallelWave.push(Promise.resolve(void 0)),signal?.aborted)break}let previousSequential,previousWave=[];for(let{preparation,isSequential}of preparedCalls){let dependencies=isSequential?[...previousSequential?[previousSequential]:[],...previousWave]:previousSequential?[previousSequential]:[],finalizedCall=(async()=>{await Promise.all(dependencies);let finalized=signal?.aborted?{toolCall:preparation.toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:await runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit);return await emitToolExecutionEnd(finalized,emit),finalized})();finalizedCalls.push(finalizedCall),isSequential?(previousSequential=finalizedCall,previousWave=[]):previousWave.push(finalizedCall)}let orderedFinalizedCalls=await Promise.all(finalizedCalls),messages=[];for(let finalized of orderedFinalizedCalls){let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:shouldTerminateToolBatch(orderedFinalizedCalls)}}async function runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit){if(preparation.kind==="immediate")return{toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};let executed=await executePreparedToolCall(preparation,signal,emitToolExecutionUpdate(preparation.toolCall,emit));return finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}function isSequentialToolCall(currentContext,toolCall){return currentContext.tools?.find(tool=>tool.name===toolCall.name)?.executionMode==="sequential"}function shouldTerminateToolBatch(finalizedCalls){return finalizedCalls.length>0&&finalizedCalls.every(finalized=>finalized.result.terminate===!0)}function prepareAgentToolCall(tool,toolCall){let preparedToolCall=prepareAgentToolCallArguments(tool,toolCall);return{toolCall:preparedToolCall,tool,args:validateToolArguments(tool,preparedToolCall)}}async function prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){if(toolCall.incomplete===!0)return{kind:"immediate",toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name,toolCall.errorMessage)),isError:!0};if(!tool){let hint=config.removedToolHints?.[toolCall.name];return{kind:"immediate",toolCall,result:createErrorToolResult(hint===void 0?`Tool ${toolCall.name} not found`:`Tool ${toolCall.name} not found. ${hint}`),isError:!0}}if(tool.name!==toolCall.name){let requestedName=toolCall.name,outcome=await prepareResolvedToolCall(currentContext,assistantMessage,{...toolCall,name:tool.name},tool,config,signal);return outcome.kind==="prepared"?{...outcome,requestedName}:{...outcome,result:withToolNameCorrection(outcome.result,requestedName,tool.name)}}return prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal)}async function prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){try{let preparedToolCall=prepareAgentToolCall(tool,toolCall),validatedArgs=preparedToolCall.args;if(config.beforeToolCall){let beforeResult=await config.beforeToolCall({assistantMessage,toolCall:preparedToolCall.toolCall,args:validatedArgs,context:currentContext},signal);if(signal?.aborted)return{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0};if(beforeResult?.block){let result=createErrorToolResult(beforeResult.reason||"Tool execution was blocked");return beforeResult.terminate===!0&&(result.terminate=!0),{kind:"immediate",toolCall,result,isError:!0}}}return signal?.aborted?{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:{kind:"prepared",toolCall:preparedToolCall.toolCall,tool,args:validatedArgs}}catch(error){return{kind:"immediate",toolCall,result:createErrorToolResult(error instanceof Error?error.message:String(error)),isError:!0}}}function abortReleasePromise(signal){if(signal!==void 0)return signal.aborted?Promise.resolve(ABORTED):new Promise(resolve=>{signal.addEventListener("abort",()=>resolve(ABORTED),{once:!0})})}function emitToolExecutionUpdate(toolCall,emit){return partialResult=>emit({type:"tool_execution_update",toolCallId:toolCall.id,toolName:toolCall.name,args:toolCall.arguments,partialResult})}async function runToolCall(toolCall,options){let{assistantMessage,context,signal}=options,tool=options.tools.find(candidate=>candidate.name===toolCall.name),preparation=await prepareToolCall(context,assistantMessage,toolCall,tool,options,signal);if(preparation.kind==="immediate")return{toolCall,result:preparation.result,isError:preparation.isError};let executed=await executePreparedToolCall(preparation,signal,options.onUpdate??(()=>{}));return finalizeExecutedToolCall(context,assistantMessage,preparation,executed,options,signal)}async function executePreparedToolCall(prepared,signal,onUpdate){let updateEvents=[],acceptingUpdates=!0;try{let execution=prepared.tool.execute(prepared.toolCall.id,prepared.args,signal,partialResult=>{acceptingUpdates&&updateEvents.push(Promise.resolve(onUpdate(partialResult)))}),abortRelease=abortReleasePromise(signal),settled=abortRelease?await Promise.race([execution,abortRelease]):await execution;return settled===ABORTED?(Promise.resolve(execution).catch(()=>{}),acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult("Tool execution aborted"),isError:!0}):(acceptingUpdates=!1,await Promise.all(updateEvents),{result:settled,isError:settled.isError===!0})}catch(error){return acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult(error instanceof Error?error.message:String(error)),isError:!0}}finally{acceptingUpdates=!1}}async function finalizeExecutedToolCall(currentContext,assistantMessage,prepared,executed,config,signal){let result=executed.result,isError=executed.isError;if(config.afterToolCall)try{let afterResult=await config.afterToolCall({assistantMessage,toolCall:prepared.toolCall,args:prepared.args,result,isError,context:currentContext},signal);if(afterResult){let structuredContent=afterResult.structuredContent??(afterResult.content?void 0:result.structuredContent);result={...result,content:afterResult.content??result.content,details:afterResult.details??result.details,usage:afterResult.usage??result.usage,terminate:afterResult.terminate??result.terminate},structuredContent===void 0?delete result.structuredContent:result.structuredContent=structuredContent,isError=afterResult.isError??isError}}catch(error){result=createErrorToolResult(error instanceof Error?error.message:String(error)),isError=!0}return prepared.requestedName!==void 0&&(result=withToolNameCorrection(result,prepared.requestedName,prepared.toolCall.name)),{toolCall:prepared.toolCall,result,isError}}function createErrorToolResult(message){return{content:[{type:"text",text:message}],details:{}}}async function emitToolExecutionEnd(finalized,emit){await emit({type:"tool_execution_end",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,result:finalized.result,isError:finalized.isError})}function createToolResultMessage(finalized){return{role:"toolResult",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,content:finalized.result.content??[],details:finalized.result.details,usage:finalized.result.usage,...finalized.result.addedToolNames?.length?{addedToolNames:finalized.result.addedToolNames}:{},isError:finalized.isError,timestamp:Date.now()}}async function emitToolResultMessage(toolResultMessage,emit){await emit({type:"message_start",message:toolResultMessage}),await emit({type:"message_end",message:toolResultMessage})}function defaultConvertToLlm(messages){return messages.filter(message=>message.role==="system"||message.role==="user"||message.role==="assistant"||message.role==="toolResult")}var EMPTY_USAGE2={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},DEFAULT_MODEL={id:"unknown",name:"unknown",api:"unknown",provider:"unknown",baseUrl:"",reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function createMutableAgentState(initialState){let tools=initialState?.tools?.slice()??[],messages=initialState?.messages?.slice()??[];return{systemPrompt:initialState?.systemPrompt??"",model:initialState?.model??DEFAULT_MODEL,thinkingLevel:initialState?.thinkingLevel??"off",reasoningBaseline:initialState?.reasoningBaseline,get tools(){return tools},set tools(nextTools){tools=nextTools.slice()},get messages(){return messages},set messages(nextMessages){messages=nextMessages.slice()},declaredTools:initialState?.declaredTools?.slice(),isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0,providerDiagnostic:void 0}}var LLM_ROLES=new Set(["user","assistant","toolResult","system"]);function isBackgroundNotice(message){return!LLM_ROLES.has(message.role)}var PendingMessageQueue=class{constructor(mode){this.messages=[],this.clearGeneration=0,this.mode=mode}enqueue(message){this.messages.push(message)}hasItems(){return this.messages.length>0}getClearGeneration(){return this.clearGeneration}peek(){if(this.mode==="all")return this.messages.slice();let first=this.messages[0];if(!first)return[];if(!isBackgroundNotice(first))return[first];let end=1;for(;end<this.messages.length&&isBackgroundNotice(this.messages[end]);)end++;return this.messages.slice(0,end)}drain(){let drained=this.peek();return this.messages=this.messages.slice(drained.length),drained}prepend(messages){this.messages=[...messages,...this.messages]}remove(message){let index=this.messages.indexOf(message);return index===-1?!1:(this.messages.splice(index,1),!0)}replace(message,next){let index=this.messages.indexOf(message);return index===-1?!1:(this.messages[index]=next,!0)}clear(){this.messages=[],this.clearGeneration++}},Agent=class{async buildProviderContext(context,signal){return buildProviderContext(context,{convertToLlm:this.convertToLlm,transformContext:this.transformContext,model:this._state.model},signal)}constructor(options){this.listeners=new Set;let runtimeOptions=options??{};this._state=createMutableAgentState(runtimeOptions.initialState),this.convertToLlm=runtimeOptions.convertToLlm??defaultConvertToLlm,this.transformContext=runtimeOptions.transformContext,this.streamFunction=runtimeOptions.streamFn??getDefaultStreamFn(),this.getApiKey=runtimeOptions.getApiKey,this.onPayload=runtimeOptions.onPayload,this.onResponse=runtimeOptions.onResponse,this.onProviderStreamEvent=runtimeOptions.onProviderStreamEvent,this.beforeToolCall=runtimeOptions.beforeToolCall,this.afterToolCall=runtimeOptions.afterToolCall,this.finishTurn=runtimeOptions.finishTurn,this.prepareRequest=runtimeOptions.prepareRequest,this.prepareNextTurn=runtimeOptions.prepareNextTurn,this.prepareNextTurnWithContext=runtimeOptions.prepareNextTurnWithContext,this.steeringQueue=new PendingMessageQueue(runtimeOptions.steeringMode??"one-at-a-time"),this.followUpQueue=new PendingMessageQueue(runtimeOptions.followUpMode??"one-at-a-time"),this.sessionId=runtimeOptions.sessionId,this.thinkingBudgets=runtimeOptions.thinkingBudgets,this.transport=runtimeOptions.transport??"auto",this.timeoutMs=runtimeOptions.timeoutMs,this.streamStartTimeoutMs=runtimeOptions.streamStartTimeoutMs,this.maxRetryDelayMs=runtimeOptions.maxRetryDelayMs,this.toolExecution=runtimeOptions.toolExecution??"parallel",this.removedToolHints=runtimeOptions.removedToolHints??{},this.resolveUnknownToolCall=runtimeOptions.resolveUnknownToolCall,this.abortServerSideFallback=runtimeOptions.abortServerSideFallback,this.cursorExecHandlers=runtimeOptions.cursorExecHandlers}subscribe(listener){return this.listeners.add(listener),()=>this.listeners.delete(listener)}get state(){return this._state}set steeringMode(mode){this.steeringQueue.mode=mode}get steeringMode(){return this.steeringQueue.mode}set followUpMode(mode){this.followUpQueue.mode=mode}get followUpMode(){return this.followUpQueue.mode}steer(message){this.steeringQueue.enqueue(message)}followUp(message){this.followUpQueue.enqueue(message)}removeQueuedMessage(message){return this.steeringQueue.remove(message)||this.followUpQueue.remove(message)}replaceQueuedMessage(message,next){return this.steeringQueue.replace(message,next)||this.followUpQueue.replace(message,next)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}peekQueuedMessages(){let steering=this.steeringQueue.peek();return steering.length>0?steering:this.followUpQueue.peek()}get signal(){return this.activeRun?.abortController.signal}abort(reason){this.activeRun?.abortController.abort(reason)}suppressQueuedMessageDrain(){this.activeRun&&(this.activeRun.suppressQueuedMessageDrain=!0)}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before resetting.");this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(input,images){if(this.activeRun)throw new Error("Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.");let messages=this.normalizePromptInput(input,images);await this.runPromptMessages(messages)}async continueWithQueuedMessages(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");if(this._state.messages[this._state.messages.length-1]?.role==="assistant"){await this.continue(options);return}let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}await this.continue(options)}async continue(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");let lastMessage=this._state.messages[this._state.messages.length-1];if(!lastMessage||this._state.messages.every(message=>message.role==="system"))throw new Error("No messages to continue from");if(lastMessage.role==="assistant"){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}throw new Error("Cannot continue from message role: assistant")}await this.runContinuation(options)}normalizePromptInput(input,images){if(Array.isArray(input))return input;if(typeof input!="string")return[input];let content=[{type:"text",text:input}];return images&&images.length>0&&content.push(...images),[{role:"user",content,timestamp:Date.now()}]}async runPromptMessages(messages,options={}){await this.runWithLifecycle(async signal=>{await runAgentLoop(messages,this.createContextSnapshot(),this.createLoopConfig(options),event=>this.processEvents(event),signal,this.streamFunction)})}async runContinuation(options={}){await this.runWithLifecycle(async signal=>{await runAgentLoopContinue(this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:options.deferQueuedMessages,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs}),event=>this.processEvents(event),signal,this.streamFunction)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice(),...this._state.declaredTools?{declaredTools:this._state.declaredTools.slice()}:{}}}createLoopConfig(options={}){let skipInitialSteeringPoll=options.skipInitialSteeringPoll===!0,steeringQueueGeneration=this.steeringQueue.getClearGeneration(),followUpQueueGeneration=this.followUpQueue.getClearGeneration(),finishTurn=this.finishTurn,reasoning=this._state.reasoningBaseline??this._state.thinkingLevel;return{model:this._state.model,reasoning:reasoning==="off"?void 0:reasoning,thinkingSelection:this._state.thinkingSelection,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,onProviderStreamEvent:this.onProviderStreamEvent,transport:this.transport,thinkingBudgets:this.thinkingBudgets,timeoutMs:this.timeoutMs,streamStartTimeoutMs:this.streamStartTimeoutMs,initialRequestTimeoutMs:options.initialRequestTimeoutMs,initialRequestStreamStartTimeoutMs:options.initialRequestStreamStartTimeoutMs,maxRetryDelayMs:this.maxRetryDelayMs,abortServerSideFallback:this.abortServerSideFallback,cursorExecHandlers:this.cursorExecHandlers,toolExecution:this.toolExecution,removedToolHints:this.removedToolHints,resolveUnknownToolCall:this.resolveUnknownToolCall,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,finishTurn:finishTurn?async(turn,signal)=>{let decision=await finishTurn(turn,signal)??void 0;return decision?.action==="end"&&this.suppressQueuedMessageDrain(),decision}:void 0,prepareRequest:this.prepareRequest,prepareNextTurn:this.prepareNextTurnWithContext||this.prepareNextTurn?async context=>this.prepareNextTurnWithContext?await this.prepareNextTurnWithContext(context,this.signal):await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>skipInitialSteeringPoll?(skipInitialSteeringPoll=!1,[]):(steeringQueueGeneration=this.steeringQueue.getClearGeneration(),this.steeringQueue.drain()),getFollowUpMessages:async()=>(followUpQueueGeneration=this.followUpQueue.getClearGeneration(),this.followUpQueue.drain()),restorePendingMessages:(queue,messages)=>{if(queue==="steering"){if(this.steeringQueue.getClearGeneration()!==steeringQueueGeneration)return;this.steeringQueue.prepend(messages);return}this.followUpQueue.getClearGeneration()===followUpQueueGeneration&&this.followUpQueue.prepend(messages)}}}async runWithLifecycle(executor){if(this.activeRun)throw new Error("Agent is already processing.");let abortController=new AbortController,resolvePromise=()=>{},promise=new Promise(resolve=>{resolvePromise=resolve});this.activeRun={promise,resolve:resolvePromise,abortController,suppressQueuedMessageDrain:!1},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0;try{for(await executor(abortController.signal);!abortController.signal.aborted&&!this.activeRun?.suppressQueuedMessageDrain&&this.canDrainQueuedMessagesAfterRun()&&this.hasQueuedMessages();)await this.runQueuedMessagesAfterAgentEnd(abortController.signal)}catch(error){await this.handleRunFailure(error,abortController.signal.aborted)}finally{this.finishRun()}}canDrainQueuedMessagesAfterRun(){let lastMessage=this._state.messages[this._state.messages.length-1];return lastMessage?.role!=="assistant"||lastMessage.stopReason!=="error"&&lastMessage.stopReason!=="aborted"}async runQueuedMessagesAfterAgentEnd(signal){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await runAgentLoop(queuedSteering,this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:!0}),event=>this.processEvents(event),signal,this.streamFunction);return}let queuedFollowUps=this.followUpQueue.drain();queuedFollowUps.length!==0&&await runAgentLoop(queuedFollowUps,this.createContextSnapshot(),this.createLoopConfig(),event=>this.processEvents(event),signal,this.streamFunction)}async handleRunFailure(error,aborted){let providerDiagnostic=aborted?void 0:readProviderDiagnostic(error),failureMessage={role:"assistant",content:[{type:"text",text:""}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:EMPTY_USAGE2,stopReason:aborted?"aborted":"error",errorMessage:error instanceof Error?error.message:String(error),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:Date.now()};await this.processEvents({type:"message_start",message:failureMessage}),await this.processEvents({type:"message_end",message:failureMessage}),await this.processEvents({type:"turn_end",message:failureMessage,toolResults:[]}),await this.processEvents({type:"agent_end",messages:[failureMessage]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(event){switch(event.type){case"message_start":this._state.streamingMessage=event.message;break;case"message_update":this._state.streamingMessage=event.message;break;case"message_end":this._state.streamingMessage=void 0,this._state.messages.push(event.message);break;case"tool_execution_start":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.add(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"tool_execution_end":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.delete(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"turn_end":event.message.role==="assistant"&&event.message.errorMessage&&(this._state.errorMessage=event.message.errorMessage,this._state.providerDiagnostic=sanitizeProviderDiagnostic(event.message.providerDiagnostic));break;case"agent_end":this._state.streamingMessage=void 0;break}let signal=this.activeRun?.abortController.signal;if(!signal)throw new Error("Agent listener invoked outside active run");for(let listener of this.listeners)await listener(event,signal)}async emitExternalEvent(event,runSignal){let activeSignal=this.activeRun?.abortController.signal;!activeSignal||runSignal&&runSignal!==activeSignal||await this.processEvents(event)}};var Result={ok(value2){return{ok:!0,value:value2}},err(error){return{ok:!1,error}},isOk(result){return result.ok},isErr(result){return!result.ok}};function TaggedError(tag){class TaggedErrorClass extends Error{constructor(props){super(props.message),this._tag=tag,this.name=tag,Object.assign(this,props)}toJSON(){let payload={};for(let key of Object.keys(this))key!=="_tag"&&(payload[key]=this[key]);return{_tag:tag,message:this.message,...payload}}static is(value2){return value2 instanceof TaggedErrorClass}}return TaggedErrorClass}var LaneBusy=class extends TaggedError("LaneBusy"){},OperationMismatch=class extends TaggedError("OperationMismatch"){},NoActiveRun=class extends TaggedError("NoActiveRun"){},NoActiveOperation=class extends TaggedError("NoActiveOperation"){},NothingToResume=class extends TaggedError("NothingToResume"){},NothingToCompact=class extends TaggedError("NothingToCompact"){},InvalidMessage=class extends TaggedError("InvalidMessage"){},InvalidNavigation=class extends TaggedError("InvalidNavigation"){},UnknownSkill=class extends TaggedError("UnknownSkill"){},UnknownTemplate=class extends TaggedError("UnknownTemplate"){},UnknownTarget=class extends TaggedError("UnknownTarget"){},InvalidLane=class extends TaggedError("InvalidLane"){},Closed=class extends TaggedError("Closed"){},HarnessFault=class extends Error{constructor(message,cause){super(message),this.name="HarnessFault",this.cause=cause}},HarnessClosed=class extends Error{constructor(){super("AgentHarness was closed while the operation was active"),this.name="HarnessClosed"}};function matchError(error,matchers){let matcher=matchers[error._tag];return matcher(error)}import{awaitWithContext,BACKGROUND_CONTEXT,createContextKey,TODO_CONTEXT,withAbortSignal,withCancel,withContextValue,withoutAbortSignal}from"@earendil-works/chord/context";var TELEMETRY_CONTEXT_KEY=createContextKey("pi.telemetryContext");function getTelemetryContext(context){return context.value(TELEMETRY_CONTEXT_KEY)??NOOP_TELEMETRY_CONTEXT}function withTelemetryContext(telemetryContext,context){return withContextValue(TELEMETRY_CONTEXT_KEY,telemetryContext,context)}var AbortRequested=class extends Error{constructor(cancellation){super("Abort requested"),this.name="AbortRequested",this.cancellation=cancellation}};function createGate(){let state={status:"open"},controller=new AbortController,check=()=>{if(state.status==="aborting")throw new AbortRequested(state.cancellation);if(state.status==="closed")throw state.error};return{gate:{admit(invoke){return check(),invoke()},signal:controller.signal},control:{beginAbort(cancellation){state.status==="open"&&(state={status:"aborting",cancellation})},signalAbort(){state.status!=="aborting"||controller.signal.aborted||controller.abort(new AbortRequested(state.cancellation))},close(error){state.status!=="closed"&&(state={status:"closed",error},controller.signal.aborted||controller.abort(error))}}}}var SliceNotImplemented=class extends Error{constructor(operation){super(`${operation} is not implemented until its later AgentHarness slice`),this.name="SliceNotImplemented"}},Drive=class{constructor(options,context){this.operationId=options.operationId,this.context=withoutAbortSignal(context),this.waitForRetry=options.waitForRetry??!1,this.deferredPermits=options.pollDeferred===!0?1:0;let resolveCompletion,rejectCompletion;this.completion=new Promise((resolve,reject)=>{resolveCompletion=resolve,rejectCompletion=reject}),this.resolveCompletion=resolveCompletion,this.rejectCompletion=rejectCompletion,this.completion.catch(()=>{});let{gate,control}=createGate();this.gate=gate,this.control=control,this.closeController=new AbortController,this.closeSignal=this.closeController.signal}settle(outcome){this.resolveCompletion(outcome)}fail(error){this.rejectCompletion(error)}beginAbort(cancellation){this.control.beginAbort(cancellation)}signalAbort(){this.control.signalAbort()}closeGate(error){this.control.close(error),this.closeSignal.aborted||this.closeController.abort(error),this.rejectCompletion(error)}};var COMPACTION_SUMMARY_PREFIX=`The conversation history before this point was compacted into the following summary:
17
17
 
18
18
  <summary>
19
19
  `,COMPACTION_SUMMARY_SUFFIX=`
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,isPackageCommandArgv}from"./chunk-X5VCHHXR.js";import{homedir}from"node:os";try{process.cwd()}catch{let fallback=homedir();process.chdir(fallback),console.error(`the current working directory no longer exists; continuing from ${fallback}`)}import*as nodeModule from"node:module";async function enableStartupCompileCache(){let enable=nodeModule.enableCompileCache;if(typeof enable!="function")return;let args=process.argv.slice(2);if(!isPackageCommandArgv(args)&&args[0]!==CONFIG_COMMAND_ARGV&&(args.includes("--version")||args.includes("-v")))return;let scheduleWatch=!1;if(args[0]===SCHEDULE_COMMAND_ARGV&&args[1]==="run")for(let index=2;index<args.length;index++){let arg=args[index];arg==="--watch"?scheduleWatch=!0:["--exec","--poll-seconds","--timeout-seconds","--concurrency"].includes(arg??"")&&index++}if(!(isPackageCommandArgv(args)||args[0]===HOST_COMMAND_ARGV||args[0]===SCHEDULE_COMMAND_ARGV&&!scheduleWatch)){if(!scheduleWatch&&args.some(arg=>["--help","-h","--export","--list-models","--list-tips"].includes(arg)))try{let{parseArgs}=await import("./args-DSBWXO5Z.js"),parsed=parseArgs(args);if(parsed.version||parsed.export||parsed.listModels!==void 0||parsed.listTips||parsed.help&&!(parsed.mode==="rpc"&&parsed.multiSession))return}catch{}try{let result=enable();result.directory!==void 0&&process.env.NODE_COMPILE_CACHE===void 0&&(process.env.NODE_COMPILE_CACHE=result.directory)}catch{}}}export{enableStartupCompileCache};
2
+ import{CONFIG_COMMAND_ARGV,HOST_COMMAND_ARGV,SCHEDULE_COMMAND_ARGV,isPackageCommandArgv}from"./chunk-GY5O7NIQ.js";import{homedir}from"node:os";try{process.cwd()}catch{let fallback=homedir();process.chdir(fallback),console.error(`the current working directory no longer exists; continuing from ${fallback}`)}import*as nodeModule from"node:module";async function enableStartupCompileCache(){let enable=nodeModule.enableCompileCache;if(typeof enable!="function")return;let args=process.argv.slice(2);if(!isPackageCommandArgv(args)&&args[0]!==CONFIG_COMMAND_ARGV&&(args.includes("--version")||args.includes("-v")))return;let scheduleWatch=!1;if(args[0]===SCHEDULE_COMMAND_ARGV&&args[1]==="run")for(let index=2;index<args.length;index++){let arg=args[index];arg==="--watch"?scheduleWatch=!0:["--exec","--poll-seconds","--timeout-seconds","--concurrency"].includes(arg??"")&&index++}if(!(isPackageCommandArgv(args)||args[0]===HOST_COMMAND_ARGV||args[0]===SCHEDULE_COMMAND_ARGV&&!scheduleWatch)){if(!scheduleWatch&&args.some(arg=>["--help","-h","--export","--list-models","--list-tips"].includes(arg)))try{let{parseArgs}=await import("./args-DSBWXO5Z.js"),parsed=parseArgs(args);if(parsed.version||parsed.export||parsed.listModels!==void 0||parsed.listTips||parsed.help&&!(parsed.mode==="rpc"&&parsed.multiSession))return}catch{}try{let result=enable();result.directory!==void 0&&process.env.NODE_COMPILE_CACHE===void 0&&(process.env.NODE_COMPILE_CACHE=result.directory)}catch{}}}export{enableStartupCompileCache};
@@ -0,0 +1,3 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
+ import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import{CONFIG_DIR_NAME,canonicalizePath,canonicalizePathStrict,findNodePackageDir,getDocsPath,getExamplesPath,getExportTemplateDir,getInstallPackageDir,getInteractiveAssetsDir,getPackageDir,getThemesDir,isBunBinary,resolvePath,stripBom}from"./chunk-NP42HAJO.js";import{__toESM}from"./chunk-IKOFCODM.js";var import_proper_lockfile=__toESM(require_proper_lockfile(),1);import{existsSync as existsSync2,mkdirSync,readFileSync,writeFileSync}from"node:fs";import{homedir}from"node:os";import{dirname as dirname3,join as join3,sep as sep2}from"node:path";import{existsSync}from"node:fs";import{createRequire}from"node:module";import{dirname as dirname2,join as join2,resolve,sep}from"node:path";import{fileURLToPath as fileURLToPath2}from"node:url";import{dirname,join}from"node:path";import{fileURLToPath}from"node:url";function imagegenSkillPath(baseDir=dirname(fileURLToPath(import.meta.url))){return join(baseDir,"skill","SKILL.md")}var moduleRequire=createRequire(import.meta.url),runningFromSource=fileURLToPath2(import.meta.url).includes(`${sep}src${sep}core${sep}`),bundledBuiltinExtensions=[{id:"codemode",resolvePackage:()=>resolveBundledPackageJson("@code-yeongyu/senpi-codemode/package.json","senpi-codemode/package.json",join2("node_modules","@code-yeongyu","senpi-codemode","package.json"))}];function resolveBundledPackageJson(packageSpecifier,workspaceRelativePath,binaryRelativePath){let packageRoot=getPackageDir(),workspacePath=resolve(packageRoot,"..",workspaceRelativePath);if(runningFromSource&&existsSync(workspacePath))return workspacePath;let binaryPath=resolve(packageRoot,binaryRelativePath);if(isBunBinary&&existsSync(binaryPath))return binaryPath;try{return moduleRequire.resolve(packageSpecifier)}catch(error){if(existsSync(workspacePath))return workspacePath;throw error}}function getBundledResourceRoots(){let roots=[getThemesDir(),getExportTemplateDir(),getInteractiveAssetsDir(),getDocsPath(),getExamplesPath(),dirname2(imagegenSkillPath())];!isBunBinary&&!runningFromSource?roots.push(getPackageDir(),getInstallPackageDir(),findNodePackageDir(dirname2(fileURLToPath2(import.meta.url)))):isBunBinary&&roots.push(dirname2(fileURLToPath2(import.meta.url)));for(let extension of bundledBuiltinExtensions)try{roots.push(dirname2(extension.resolvePackage()))}catch(error){if(!(error instanceof Error&&"code"in error&&error.code==="MODULE_NOT_FOUND"))throw error}return roots}var TRUST_REQUIRING_PROJECT_CONFIG_RESOURCES=["settings.json","mcp.json","extensions","skills","prompts","themes","SYSTEM.md","APPEND_SYSTEM.md"],LEGACY_PROJECT_CONFIG_DIR_NAME=".pi";function projectCodemodeNamesExecutable(configDir){let path=join3(configDir,"codemode.json");if(!existsSync2(path))return!1;let executableSettings=codemodeExecutableSettings();if(executableSettings===void 0)return!0;let parsed;try{parsed=JSON.parse(stripBom(readFileSync(path,"utf8")))}catch{return!0}return executableSettings.some(settingPath=>valueAtPath(parsed,settingPath)!==void 0)}function codemodeExecutableSettings(){let codemode=bundledBuiltinExtensions.find(extension=>extension.id==="codemode");try{let packageJson=codemode?.resolvePackage();if(packageJson===void 0)return;let list=JSON.parse(readFileSync(join3(dirname3(packageJson),"src","config","executable-settings.json"),"utf8"));if(typeof list!="object"||list===null)return;let paths=Reflect.get(list,"projectExecutableSettings");return Array.isArray(paths)&&paths.every(entry=>typeof entry=="string")?paths:void 0}catch{return}}function valueAtPath(value,path){let current=value;for(let key of path.split(".")){if(typeof current!="object"||current===null)return;current=Reflect.get(current,key)}return current}function normalizeCwd(cwd){let resolved=resolvePath(cwd);try{return canonicalizePathStrict(resolved)}catch{return resolved}}function findNearestTrustEntry(data,cwd){let currentDir=normalizeCwd(cwd);for(;;){let value=data[currentDir];if(value===!0||value===!1)return{path:currentDir,decision:value};let parentDir=dirname3(currentDir);if(parentDir===currentDir)return null;currentDir=parentDir}}function getProjectTrustParentPath(cwd){let trustPath=normalizeCwd(cwd),parentDir=dirname3(trustPath);return parentDir===trustPath?void 0:parentDir}function getProjectTrustOptions(cwd,options){let trustPath=normalizeCwd(cwd),trustOptions=[{label:"Trust",trusted:!0,updates:[{path:trustPath,decision:!0}],savedPath:trustPath}],parentPath=getProjectTrustParentPath(cwd);return parentPath!==void 0&&trustOptions.push({label:`Trust parent folder (${parentPath})`,trusted:!0,updates:[{path:parentPath,decision:!0},{path:trustPath,decision:null}],savedPath:parentPath}),options?.includeSessionOnly&&trustOptions.push({label:"Trust (this session only)",trusted:!0,updates:[]}),trustOptions.push({label:"Do not trust",trusted:!1,updates:[{path:trustPath,decision:!1}],savedPath:trustPath}),options?.includeSessionOnly&&trustOptions.push({label:"Do not trust (this session only)",trusted:!1,updates:[]}),trustOptions}function readTrustFile(path){if(!existsSync2(path))return{};let parsed;try{parsed=JSON.parse(stripBom(readFileSync(path,"utf-8")))}catch(error){let message=error instanceof Error?error.message:String(error);throw new Error(`Failed to read trust store ${path}: ${message}`)}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))throw new Error(`Invalid trust store ${path}: expected an object`);let data={};for(let[key,value]of Object.entries(parsed)){if(value!==!0&&value!==!1&&value!==null)throw new Error(`Invalid trust store ${path}: value for ${JSON.stringify(key)} must be true, false, or null`);data[key]=value}return data}function writeTrustFile(path,data){let sorted={};for(let key of Object.keys(data).sort()){let value=data[key];(value===!0||value===!1||value===null)&&(sorted[key]=value)}mkdirSync(dirname3(path),{recursive:!0}),writeFileSync(path,`${JSON.stringify(sorted,null,2)}
3
+ `,"utf-8")}function acquireTrustLockSync(path){let trustDir=dirname3(path);mkdirSync(trustDir,{recursive:!0});let maxAttempts=10,delayMs=20,lastError;for(let attempt=1;attempt<=maxAttempts;attempt++)try{return import_proper_lockfile.default.lockSync(trustDir,{realpath:!1,lockfilePath:`${path}.lock`})}catch(error){if((typeof error=="object"&&error!==null&&"code"in error?String(error.code):void 0)!=="ELOCKED"||attempt===maxAttempts)throw error;lastError=error;let start=Date.now();for(;Date.now()-start<delayMs;);}throw lastError instanceof Error?lastError:new Error("Failed to acquire trust store lock")}function withTrustFileLock(path,fn){let release=acquireTrustLockSync(path);try{return fn()}finally{release()}}function isHomeOrAboveDir(dir,homeDir){return dir===homeDir||homeDir.startsWith(dir.endsWith(sep2)?dir:`${dir}${sep2}`)}function findGitRepoRoot(dir){let currentDir=dir;for(;!existsSync2(join3(currentDir,".git"));){let parentDir=dirname3(currentDir);if(parentDir===currentDir)return;currentDir=parentDir}return currentDir}function projectAgentsSkillDirs(cwd){let homeDir=canonicalizePath(resolvePath(process.env.HOME||homedir())),startDir=resolvePath(cwd),gitRepoRoot=findGitRepoRoot(startDir),dirs=[],currentDir=startDir;for(;!isHomeOrAboveDir(canonicalizePath(currentDir),homeDir)&&(dirs.push(join3(currentDir,".agents","skills")),currentDir!==gitRepoRoot);){let parentDir=dirname3(currentDir);if(parentDir===currentDir)break;currentDir=parentDir}return dirs}function hasTrustRequiringProjectResources(cwd){let homeDir=canonicalizePath(resolvePath(process.env.HOME||homedir())),currentDir=canonicalizePath(resolvePath(cwd));return!isHomeOrAboveDir(currentDir,homeDir)&&([join3(currentDir,CONFIG_DIR_NAME),join3(currentDir,LEGACY_PROJECT_CONFIG_DIR_NAME)].some(configDir=>TRUST_REQUIRING_PROJECT_CONFIG_RESOURCES.some(entry=>existsSync2(join3(configDir,entry))))||projectCodemodeNamesExecutable(join3(currentDir,CONFIG_DIR_NAME)))?!0:projectAgentsSkillDirs(cwd).some(dir=>existsSync2(dir))}var ProjectTrustStore=class{constructor(agentDir){this.trustPath=join3(resolvePath(agentDir),"trust.json")}get(cwd){return this.getEntry(cwd)?.decision??null}getEntry(cwd){return withTrustFileLock(this.trustPath,()=>{let data=readTrustFile(this.trustPath);return findNearestTrustEntry(data,cwd)})}set(cwd,decision){this.setMany([{path:cwd,decision}])}setMany(decisions){withTrustFileLock(this.trustPath,()=>{let data=readTrustFile(this.trustPath);for(let{path,decision}of decisions){let key=normalizeCwd(path);decision===null?delete data[key]:data[key]=decision}writeTrustFile(this.trustPath,data)})}};export{imagegenSkillPath,bundledBuiltinExtensions,getBundledResourceRoots,getProjectTrustOptions,projectAgentsSkillDirs,hasTrustRequiringProjectResources,ProjectTrustStore};