goatchain-cli 0.0.67-beta.0 → 0.0.67-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ink.mjs +9 -9
- package/package.json +6 -6
package/dist/ink.mjs
CHANGED
|
@@ -1024,7 +1024,7 @@ ${answerLines.join(`
|
|
|
1024
1024
|
`),{success:!0,todos,pendingCount,inProgressCount,completedCount,message:lines[0]})}}}function createDimToolRegistry(options){let tools=new ToolRegistry;if(tools.register(new ReadTool),tools.register(new StreamingExecTool),options?.writable!==!1)tools.register(new WriteTool),tools.register(new EditTool);if(options?.askUser!==!1)tools.register(new AskUserQuestionTool({handler:options?.askUserHandler}));if(options?.delegateTasks!==!1)tools.register(createDelegateTasksTool());return tools.register(createTodoWriteTool()),tools}init_dist12();import path23 from"node:path";import{existsSync as existsSync2}from"node:fs";import{mkdir as mkdir10,readdir as readdir6,rm as rm6,stat as stat6,writeFile as writeFile9}from"node:fs/promises";import path22 from"node:path";import{Buffer as Buffer3}from"node:buffer";import{mkdir as mkdir9,readdir as readdir5,readFile as readFile9,writeFile as writeFile8}from"node:fs/promises";import path21 from"node:path";var RUNTIME_SNAPSHOT_DIR="dim-sdk-sessions",RUNTIME_SNAPSHOT_FILE="snapshot.json",RUNTIME_USAGE_LEDGER_FILE="usage.json",RUNTIME_SUBAGENTS_DIR="subagents",SESSION_INDEX_FILE="session-index.json",SESSION_INDEX_VERSION=1,JSON_UINT8ARRAY_TYPE="dimcode.uint8array",JSON_TYPE_KEY="__dimcodeJsonType";function normalizeText3(value){return String(value??"").trim()}function readPositiveNumber(value){let number5=Number(value);return Number.isFinite(number5)&&number5>0?number5:void 0}function readNonNegativeInteger(value){let number5=Number(value);return Number.isFinite(number5)&&number5>=0?Math.floor(number5):void 0}function parseSnapshotStoreObject(value){if(!value||typeof value!=="object"||Array.isArray(value))return{};return value}function reviveParsedJsonValue(value){if(Array.isArray(value))return value.map(reviveParsedJsonValue);if(!value||typeof value!=="object")return value;let record3=value;if(record3[JSON_TYPE_KEY]===JSON_UINT8ARRAY_TYPE){let base643=String(record3.base64??"").trim();return new Uint8Array(Buffer3.from(base643,"base64"))}let revived=Object.fromEntries(Object.entries(record3).map(([key,entry])=>[key,reviveParsedJsonValue(entry)]));if(revived.type==="file"&&isLegacySerializedUint8Array(revived.data))revived.data=decodeLegacySerializedUint8Array(revived.data);return revived}function isLegacySerializedUint8Array(value){if(!value||typeof value!=="object"||Array.isArray(value)||value instanceof Uint8Array)return!1;let entries=Object.entries(value);if(entries.length===0)return!0;let indexes=[];for(let[key,entry]of entries){if(!/^\d+$/.test(key))return!1;let byte=Number(entry);if(!Number.isInteger(byte)||byte<0||byte>255)return!1;indexes.push(Number(key))}return indexes.sort((left,right)=>left-right),indexes.every((index,position)=>index===position)}function decodeLegacySerializedUint8Array(value){let size=Object.keys(value).length,bytes=new Uint8Array(size);for(let index=0;index<size;index+=1)bytes[index]=Number(value[String(index)]??0);return bytes}function stringifyJson2(value){return JSON.stringify(value,(_key,entry)=>{if(entry instanceof Uint8Array)return{[JSON_TYPE_KEY]:JSON_UINT8ARRAY_TYPE,base64:Buffer3.from(entry).toString("base64")};return entry},2)}function parseJsonText(raw){return reviveParsedJsonValue(JSON.parse(raw))}async function readJsonFile(filePath){try{let raw=await readFile9(filePath,"utf-8"),parsed=parseJsonText(raw);return parsed&&typeof parsed==="object"?parsed:null}catch{return null}}async function writeJsonFile(filePath,value){await mkdir9(path21.dirname(filePath),{recursive:!0}),await writeFile8(filePath,`${stringifyJson2(value)}
|
|
1025
1025
|
`,"utf-8")}function runtimeSnapshotPath(stateDir,sessionId){return runtimeSnapshotPathForDirectory(path21.join(path21.resolve(stateDir),RUNTIME_SNAPSHOT_DIR),sessionId)}function runtimeSessionIndexPathForStateDir(stateDir){return path21.join(path21.resolve(stateDir),SESSION_INDEX_FILE)}function runtimeSessionIndexPathForSnapshotDirectory(directory){return runtimeSessionIndexPathForStateDir(path21.dirname(path21.resolve(directory)))}function runtimeSnapshotPathForDirectory(directory,sessionId){return path21.join(path21.resolve(directory),sessionId,RUNTIME_SNAPSHOT_FILE)}function runtimeUsageLedgerPathForDirectory(directory,sessionId){return path21.join(path21.resolve(directory),sessionId,RUNTIME_USAGE_LEDGER_FILE)}function runtimeSubagentSnapshotPathForDirectory(directory,parentSessionId,sessionId){return path21.join(path21.resolve(directory),parentSessionId,RUNTIME_SUBAGENTS_DIR,sessionId,RUNTIME_SNAPSHOT_FILE)}function runtimeSubagentUsageLedgerPathForDirectory(directory,parentSessionId,sessionId){return path21.join(path21.resolve(directory),parentSessionId,RUNTIME_SUBAGENTS_DIR,sessionId,RUNTIME_USAGE_LEDGER_FILE)}function readRuntimeSnapshotSubagentParentSessionId(snapshot){let record3=parseSnapshotStoreObject(snapshot),metadata=parseSnapshotStoreObject(record3.metadata);return readSubagentMarker(metadata)?.parentSessionId??null}function isSubagentRuntimeSnapshot(snapshot){return Boolean(readRuntimeSnapshotSubagentParentSessionId(snapshot))}function buildRuntimeSessionIndexEntryFromSnapshot(snapshot){let record3=snapshot,sessionId=normalizeText3(record3.sessionId);if(!sessionId)return null;let metadata=record3.metadata??{},state=record3.state,context=record3.context,envelope=metadata.dimAgentRuntime,canonical=metadata.dimcodeCanonical,parentSessionId=readRuntimeSnapshotSubagentParentSessionId(snapshot),title=normalizeText3(record3.title??state?.title??canonical?.title??envelope?.title??metadata.title)||"New session",cwd=normalizeText3(record3.cwd??metadata.cwd??metadata.workspaceCwd??metadata.workspace_cwd??metadata.projectCwd??metadata.project_cwd),gitBranch=normalizeText3(record3.gitBranch??record3.git_branch??record3.branch??metadata.gitBranch??metadata.git_branch??metadata.branch),messageCount=readNonNegativeInteger(context?.messageCount??canonical?.messageCount??record3.messages.length)??0,createdAt=readPositiveNumber(record3.createdAt),updatedAt=readPositiveNumber(state?.updatedAt??record3.updatedAt??record3.createdAt),latestActivityAt=readPositiveNumber(state?.latestActivityAt);return{sessionId,title,...cwd?{cwd}:{},...createdAt!==void 0?{createdAt}:{},...updatedAt!==void 0?{updatedAt}:{},...latestActivityAt!==void 0?{latestActivityAt}:{},...gitBranch?{gitBranch}:{},messageCount,...parentSessionId?{isSubagent:!0,parentSessionId}:{}}}function runtimeSnapshotPathForSnapshot(directory,snapshot){let sessionId=normalizeText3(snapshot?.sessionId);if(!sessionId)throw Error("Runtime snapshot sessionId is required");let parentSessionId=readRuntimeSnapshotSubagentParentSessionId(snapshot);if(parentSessionId)return runtimeSubagentSnapshotPathForDirectory(directory,parentSessionId,sessionId);return runtimeSnapshotPathForDirectory(directory,sessionId)}function runtimeUsageLedgerPathForSnapshot(directory,snapshot){let sessionId=normalizeText3(snapshot?.sessionId);if(!sessionId)throw Error("Runtime snapshot sessionId is required");let parentSessionId=readRuntimeSnapshotSubagentParentSessionId(snapshot);if(parentSessionId)return runtimeSubagentUsageLedgerPathForDirectory(directory,parentSessionId,sessionId);return runtimeUsageLedgerPathForDirectory(directory,sessionId)}function isSupportedRuntimeSnapshot(snapshot){let record3=parseSnapshotStoreObject(snapshot);if(!record3)return!1;if(!normalizeText3(record3.sessionId))return!1;return Array.isArray(record3.messages)}async function readRuntimeSnapshotFile(directory,sessionId){let raw=await readJsonFile(runtimeSnapshotPathForDirectory(directory,sessionId));if(!isSupportedRuntimeSnapshot(raw))return null;let usageLedgerRaw=await readJsonFile(runtimeUsageLedgerPathForDirectory(directory,sessionId)),usageLedger=usageLedgerRaw&&typeof usageLedgerRaw==="object"?structuredClone(usageLedgerRaw):raw.usageLedger;if(!usageLedger)return structuredClone(raw);return structuredClone({...raw,usage:{...usageLedger.summary.totalUsage},usageLedger})}async function safeLoadRuntimeSnapshot(opts){if(opts.loadFromStore)try{let loaded=await opts.loadFromStore();if(loaded)return loaded}catch(error48){opts.onInvalidSnapshot?.({sessionId:opts.sessionId,filePath:runtimeSnapshotPathForDirectory(opts.directory,opts.sessionId),error:error48 instanceof Error?error48.message:String(error48)})}let fallback=await readRuntimeSnapshotFile(opts.directory,opts.sessionId);if(fallback)return fallback;let legacyPath=path21.join(path21.resolve(opts.directory),`${opts.sessionId}.json`);if(await readJsonFile(legacyPath))opts.onInvalidSnapshot?.({sessionId:opts.sessionId,filePath:legacyPath,error:"Unsupported session snapshot schema"});return}async function safeListRuntimeSnapshots(opts){if(opts.listFromStore)try{return(await opts.listFromStore()).slice()}catch(error48){opts.onInvalidSnapshot?.({sessionId:"",filePath:path21.resolve(opts.directory),error:error48 instanceof Error?error48.message:String(error48)})}let entries=[];try{entries=await readdir5(path21.resolve(opts.directory),{withFileTypes:!0,encoding:"utf8"})}catch{return[]}let snapshots=[];for(let entry of entries){if(!entry.isDirectory())continue;let filePath=runtimeSnapshotPathForDirectory(opts.directory,entry.name),raw=await readJsonFile(filePath);if(!isSupportedRuntimeSnapshot(raw)){opts.onInvalidSnapshot?.({sessionId:entry.name,filePath,error:raw?"Unsupported session snapshot schema":"Invalid JSON"});continue}snapshots.push(structuredClone(raw))}return snapshots}function normalizeRuntimeSessionIndexEntry(value){if(!value||typeof value!=="object"||Array.isArray(value))return null;let entry=value,sessionId=normalizeText3(entry.sessionId);if(!sessionId)return null;let title=normalizeText3(entry.title)||"New session",cwd=normalizeText3(entry.cwd),gitBranch=normalizeText3(entry.gitBranch),parentSessionId=normalizeText3(entry.parentSessionId),createdAt=readPositiveNumber(entry.createdAt),updatedAt=readPositiveNumber(entry.updatedAt),latestActivityAt=readPositiveNumber(entry.latestActivityAt);return{sessionId,title,...cwd?{cwd}:{},...createdAt!==void 0?{createdAt}:{},...updatedAt!==void 0?{updatedAt}:{},...latestActivityAt!==void 0?{latestActivityAt}:{},...gitBranch?{gitBranch}:{},messageCount:readNonNegativeInteger(entry.messageCount)??0,...entry.isSubagent===!0?{isSubagent:!0}:{},...parentSessionId?{parentSessionId}:{}}}function normalizeRuntimeSessionIndexFile(value){if(!value||Number(value.version)!==SESSION_INDEX_VERSION)return null;if(!value.sessions||typeof value.sessions!=="object"||Array.isArray(value.sessions))return null;let sessions={};for(let entryValue of Object.values(value.sessions)){let entry=normalizeRuntimeSessionIndexEntry(entryValue);if(entry)sessions[entry.sessionId]=entry}return{version:SESSION_INDEX_VERSION,updatedAt:readPositiveNumber(value.updatedAt)??Date.now(),sessions}}async function readRuntimeSessionIndexFile(indexPath){return normalizeRuntimeSessionIndexFile(await readJsonFile(indexPath))}async function writeRuntimeSessionIndexFile(indexPath,sessions){await writeJsonFile(indexPath,{version:SESSION_INDEX_VERSION,updatedAt:Date.now(),sessions})}async function readRuntimeSessionIndexEntriesForDirectory(directory){let indexState=await readRuntimeSessionIndexFile(runtimeSessionIndexPathForSnapshotDirectory(directory));return indexState?Object.values(indexState.sessions):null}async function writeRuntimeSessionIndexEntriesForDirectory(directory,entries){let sessions={};for(let entry of entries)sessions[entry.sessionId]=entry;await writeRuntimeSessionIndexFile(runtimeSessionIndexPathForSnapshotDirectory(directory),sessions)}async function upsertRuntimeSessionIndexEntryForDirectory(directory,entry){let indexPath=runtimeSessionIndexPathForSnapshotDirectory(directory),indexState=await readRuntimeSessionIndexFile(indexPath);if(!indexState)return!1;return await writeRuntimeSessionIndexFile(indexPath,{...indexState.sessions,[entry.sessionId]:entry}),!0}async function removeRuntimeSessionIndexEntriesForDirectory(directory,sessionId){let normalizedSessionId=normalizeText3(sessionId);if(!normalizedSessionId)return;let indexPath=runtimeSessionIndexPathForSnapshotDirectory(directory),indexState=await readRuntimeSessionIndexFile(indexPath);if(!indexState)return;let nextSessions={...indexState.sessions},removed=!1;for(let[entrySessionId,entry]of Object.entries(indexState.sessions))if(entrySessionId===normalizedSessionId||entry.parentSessionId===normalizedSessionId)delete nextSessions[entrySessionId],removed=!0;if(!removed)return;await writeRuntimeSessionIndexFile(indexPath,nextSessions)}async function removeSessionIndexEntryFromStateDir(stateDir,sessionId){let normalizedStateDir=normalizeText3(stateDir),normalizedSessionId=normalizeText3(sessionId);if(!normalizedStateDir||!normalizedSessionId)return;let indexPath=path21.join(path21.resolve(normalizedStateDir),SESSION_INDEX_FILE),indexState=await readJsonFile(indexPath),sessions=indexState?.sessions&&typeof indexState.sessions==="object"&&!Array.isArray(indexState.sessions)?indexState.sessions:null;if(!sessions||!Object.prototype.hasOwnProperty.call(sessions,normalizedSessionId))return;let nextSessions={...sessions};delete nextSessions[normalizedSessionId],await writeJsonFile(indexPath,{...indexState,sessions:nextSessions})}function normalizeTextContentBlock(value){return{type:"text",text:typeof value==="string"?value:String(value??"")}}function normalizeContentBlock(value){if(typeof value==="string")return[normalizeTextContentBlock(value)];if(!value||typeof value!=="object"||Array.isArray(value))return[normalizeTextContentBlock(value)];let block=value;if(block.type==="text")return[{...block,text:typeof block.text==="string"?block.text:String(block.text??"")}];if(typeof block.text==="string")return[normalizeTextContentBlock(block.text)];if(block.type==="image"&&typeof block.data==="string"&&typeof block.mimeType==="string")return[{...block}];if(block.type==="file"&&block.data!==void 0&&typeof block.mediaType==="string")return[{...block}];return[normalizeTextContentBlock(JSON.stringify(block))]}function normalizeMessageContentForSdkDecode(content){if(!Array.isArray(content))return normalizeContentBlock(content);let blocks=content.flatMap((entry)=>normalizeContentBlock(entry));return blocks.length>0?blocks:[normalizeTextContentBlock("")]}function normalizeRuntimeSnapshotMessageContent(snapshot){let messages=Array.isArray(snapshot.messages)?snapshot.messages.map((message)=>{if(!message||typeof message!=="object"||Array.isArray(message))return message;return{...message,content:normalizeMessageContentForSdkDecode(message.content)}}):[];return{...snapshot,messages}}class RuntimeSnapshotFileStore{baseDir;writeQueues=new Map;pendingWrites=new Map;indexWriteQueue=Promise.resolve();constructor(options){this.baseDir=path22.resolve(options.directory)}async loadSnapshotFile(filePath){let snapshot=await readJsonFile(filePath);return isSupportedRuntimeSnapshot(snapshot)?structuredClone(snapshot):void 0}normalizeUsage(value){let inputTokensDetails=value?.inputTokensDetails&&typeof value.inputTokensDetails==="object"&&!Array.isArray(value.inputTokensDetails)?value.inputTokensDetails:void 0,outputTokensDetails=value?.outputTokensDetails&&typeof value.outputTokensDetails==="object"&&!Array.isArray(value.outputTokensDetails)?value.outputTokensDetails:void 0,promptTokens=Number(value?.promptTokens??0),completionTokens=Number(value?.completionTokens??0),totalTokens=Number(value?.totalTokens??0);return{promptTokens:Number.isFinite(promptTokens)&&promptTokens>=0?promptTokens:0,completionTokens:Number.isFinite(completionTokens)&&completionTokens>=0?completionTokens:0,totalTokens:Number.isFinite(totalTokens)&&totalTokens>=0?totalTokens:0,...inputTokensDetails?{inputTokensDetails}:{},...outputTokensDetails?{outputTokensDetails}:{}}}normalizeUsageLedger(snapshot,usageLedger){let rawSummary=usageLedger?.summary&&typeof usageLedger.summary==="object"&&!Array.isArray(usageLedger.summary)?usageLedger.summary:void 0,turns=Array.isArray(usageLedger?.turns)?usageLedger.turns:[],requests=Array.isArray(usageLedger?.requests)?usageLedger.requests:[],breakdown=rawSummary?.breakdown&&typeof rawSummary.breakdown==="object"&&!Array.isArray(rawSummary.breakdown)?rawSummary.breakdown:{},updatedAt=Number(rawSummary?.updatedAt??snapshot.updatedAt??Date.now()),turnCount=Number(rawSummary?.turnCount??turns.length),requestCount=Number(rawSummary?.requestCount??requests.length);return{version:1,summary:{sessionId:snapshot.sessionId,updatedAt:Number.isFinite(updatedAt)?updatedAt:Date.now(),turnCount:Number.isFinite(turnCount)&&turnCount>=0?turnCount:turns.length,requestCount:Number.isFinite(requestCount)&&requestCount>=0?requestCount:requests.length,totalUsage:this.normalizeUsage(rawSummary?.totalUsage??snapshot.usage),breakdown},turns,requests}}async normalizeSnapshotWithSdk(snapshot,usageLedger){let store2=new InMemoryStateStore,normalizedUsageLedger=this.normalizeUsageLedger(snapshot,usageLedger);await store2.save({snapshot:normalizeRuntimeSnapshotMessageContent(snapshot),usageLedger:normalizedUsageLedger});let normalized=await store2.load(snapshot.sessionId);if(!normalized)throw Error(`Runtime snapshot ${snapshot.sessionId} could not be normalized`);return normalized}snapshotData(snapshot){return stringifyJson2({...snapshot,usageLedger:void 0})}usageLedgerData(snapshot){return stringifyJson2(this.normalizeUsageLedger(snapshot,snapshot.usageLedger))}shouldPersistNormalizedSnapshot(rawSnapshot,normalizedSnapshot){return this.snapshotData(rawSnapshot)!==this.snapshotData(normalizedSnapshot)||this.usageLedgerData(rawSnapshot)!==this.usageLedgerData(normalizedSnapshot)}async loadNormalizedSnapshotFile(filePath,persistMigration){let snapshot=await this.loadSnapshotFile(filePath);if(!snapshot)return;let usageLedger=await this.loadUsageLedgerFile(filePath,snapshot.usageLedger),normalizedUsageLedger=this.normalizeUsageLedger(snapshot,usageLedger),hydrated=this.hydrateSnapshot(snapshot,normalizedUsageLedger),normalized=await this.normalizeSnapshotWithSdk(hydrated,normalizedUsageLedger);if(persistMigration&&this.shouldPersistNormalizedSnapshot(hydrated,normalized))await this.save(normalized);return normalized}usageLedgerFilePathForSnapshotPath(filePath){return path22.join(path22.dirname(filePath),"usage.json")}async loadUsageLedgerFile(filePath,inlineUsageLedger){try{let raw=await readJsonFile(this.usageLedgerFilePathForSnapshotPath(filePath));if(raw&&typeof raw==="object")return structuredClone(raw);return inlineUsageLedger?structuredClone(inlineUsageLedger):void 0}catch{return inlineUsageLedger?structuredClone(inlineUsageLedger):void 0}}hydrateSnapshot(snapshot,usageLedger){if(!usageLedger)return structuredClone(snapshot);return{...structuredClone(snapshot),usage:structuredClone(usageLedger.summary.totalUsage),usageLedger:structuredClone(usageLedger)}}async listBaseEntries(){try{return await readdir6(this.baseDir,{withFileTypes:!0,encoding:"utf8"})}catch{return[]}}async listSnapshotFilePaths(includeNested){let entries=await this.listBaseEntries(),filePaths=[];for(let entry of entries){if(!entry.isDirectory())continue;let topLevelPath=runtimeSnapshotPathForDirectory(this.baseDir,entry.name);if((await stat6(topLevelPath).catch(()=>null))?.isFile())filePaths.push(topLevelPath);if(!includeNested)continue;let subagentsDir=path22.join(this.baseDir,entry.name,RUNTIME_SUBAGENTS_DIR),childEntries=await readdir6(subagentsDir,{withFileTypes:!0,encoding:"utf8"}).catch(()=>[]);for(let childEntry of childEntries){if(!childEntry.isDirectory())continue;let nestedPath=runtimeSubagentSnapshotPathForDirectory(this.baseDir,entry.name,childEntry.name);if((await stat6(nestedPath).catch(()=>null))?.isFile())filePaths.push(nestedPath)}}return filePaths}async findNestedSnapshotFilePath(sessionId){let entries=await this.listBaseEntries();for(let entry of entries){if(!entry.isDirectory())continue;let nestedPath=runtimeSubagentSnapshotPathForDirectory(this.baseDir,entry.name,sessionId);if((await stat6(nestedPath).catch(()=>{return}))?.isFile())return nestedPath}return}async resolveSnapshotFilePath(sessionId){let topLevelPath=runtimeSnapshotPathForDirectory(this.baseDir,sessionId);if((await stat6(topLevelPath).catch(()=>{return}))?.isFile())return topLevelPath;return await this.findNestedSnapshotFilePath(sessionId)}dedupeSnapshots(snapshots){let bySessionId=new Map;for(let snapshot of snapshots){let sessionId=String(snapshot?.sessionId??"").trim();if(!sessionId)continue;let existing=bySessionId.get(sessionId);if(!existing){bySessionId.set(sessionId,snapshot);continue}let nextUpdatedAt=Number(snapshot.updatedAt??snapshot.createdAt??0)||0,existingUpdatedAt=Number(existing.updatedAt??existing.createdAt??0)||0;if(nextUpdatedAt>=existingUpdatedAt)bySessionId.set(sessionId,snapshot)}return[...bySessionId.values()]}normalizeSaveInput(input){if("snapshot"in input)return{...structuredClone(input.snapshot),...input.usageLedger?{usageLedger:structuredClone(input.usageLedger)}:{}};return structuredClone(input)}async enqueueIndexWrite(operation){let nextWrite=this.indexWriteQueue.catch(()=>{}).then(operation);this.indexWriteQueue=nextWrite,await nextWrite}async upsertIndexEntry(entry){await this.enqueueIndexWrite(async()=>{if(await upsertRuntimeSessionIndexEntryForDirectory(this.baseDir,entry))return;let snapshots=[],filePaths=await this.listSnapshotFilePaths(!0);for(let filePath of filePaths){let snapshot=await this.loadNormalizedSnapshotFile(filePath,!1);if(snapshot)snapshots.push(snapshot)}let entries=this.dedupeSnapshots(snapshots).map((snapshot)=>buildRuntimeSessionIndexEntryFromSnapshot(snapshot)).filter((nextEntry)=>Boolean(nextEntry));await writeRuntimeSessionIndexEntriesForDirectory(this.baseDir,[...entries,entry])})}async removeIndexEntries(sessionId){await this.enqueueIndexWrite(async()=>{await removeRuntimeSessionIndexEntriesForDirectory(this.baseDir,sessionId)})}async writeIndexEntries(entries){await this.enqueueIndexWrite(async()=>{await writeRuntimeSessionIndexEntriesForDirectory(this.baseDir,entries)})}async load(sessionId){let filePath=await this.resolveSnapshotFilePath(sessionId);if(!filePath)return;return await this.loadNormalizedSnapshotFile(filePath,!0)}async list(){let snapshots=[],filePaths=await this.listSnapshotFilePaths(!1);for(let filePath of filePaths){let snapshot=await this.loadNormalizedSnapshotFile(filePath,!0);if(!snapshot||isSubagentRuntimeSnapshot(snapshot))continue;snapshots.push(snapshot)}return snapshots}async listAll(){let snapshots=[],filePaths=await this.listSnapshotFilePaths(!0);for(let filePath of filePaths){let snapshot=await this.loadNormalizedSnapshotFile(filePath,!0);if(snapshot)snapshots.push(snapshot)}return this.dedupeSnapshots(snapshots)}async listPage(options={}){let limit=Math.min(Math.max(1,Math.floor(Number(options.limit??50))||50),200),snapshots=this.dedupeSnapshots(await this.list()).sort((left,right)=>{let rightUpdatedAt=Number(right.updatedAt??right.createdAt??0)||0,leftUpdatedAt=Number(left.updatedAt??left.createdAt??0)||0;if(rightUpdatedAt!==leftUpdatedAt)return rightUpdatedAt-leftUpdatedAt;return String(left.sessionId??"").localeCompare(String(right.sessionId??""))}),cursor=String(options.cursor??"").trim(),cursorIndex=cursor?snapshots.findIndex((snapshot)=>String(snapshot.sessionId??"")===cursor):-1,start=cursorIndex>=0?cursorIndex+1:0,page=snapshots.slice(start,start+limit),tail=page[page.length-1];return{snapshots:page,...start+page.length<snapshots.length&&tail?{nextCursor:String(tail.sessionId??"")}:{}}}async listMetadata(){let indexed=await readRuntimeSessionIndexEntriesForDirectory(this.baseDir);if(indexed)return indexed;let entries=(await this.listAll()).map((snapshot)=>buildRuntimeSessionIndexEntryFromSnapshot(snapshot)).filter((entry)=>Boolean(entry));return await this.writeIndexEntries(entries),entries}async save(input){let inputSnapshot=this.normalizeSaveInput(input);if(!inputSnapshot.usageLedger)throw Error("Runtime snapshot usageLedger is required");let snapshot=await this.normalizeSnapshotWithSdk(inputSnapshot,inputSnapshot.usageLedger),sessionId=String(snapshot?.sessionId??"").trim();if(!sessionId)throw Error("Runtime snapshot sessionId is required");if(!snapshot.usageLedger)throw Error("Runtime snapshot usageLedger is required");let indexEntry=buildRuntimeSessionIndexEntryFromSnapshot(snapshot);if(!indexEntry)throw Error("Runtime snapshot sessionId is required");let filePath=runtimeSnapshotPathForSnapshot(this.baseDir,snapshot),usageLedgerFilePath=runtimeUsageLedgerPathForSnapshot(this.baseDir,snapshot),snapshotData=`${stringifyJson2({...snapshot,usageLedger:void 0})}
|
|
1026
1026
|
`,usageLedgerData=`${stringifyJson2(snapshot.usageLedger)}
|
|
1027
|
-
`;this.pendingWrites.set(filePath,{snapshotData,usageLedgerData,usageLedgerFilePath,indexEntry});let existingWrite=this.writeQueues.get(filePath);if(existingWrite){await existingWrite;return}let writePromise=(async()=>{while(this.pendingWrites.has(filePath)){let nextWrite=this.pendingWrites.get(filePath);if(this.pendingWrites.delete(filePath),!nextWrite)continue;await mkdir10(path22.dirname(filePath),{recursive:!0}),await writeFile9(filePath,nextWrite.snapshotData,"utf-8"),await writeFile9(nextWrite.usageLedgerFilePath,nextWrite.usageLedgerData,"utf-8"),await this.upsertIndexEntry(nextWrite.indexEntry)}})();this.writeQueues.set(filePath,writePromise);try{await writePromise}finally{if(this.writeQueues.get(filePath)===writePromise)this.writeQueues.delete(filePath)}let legacyPath=runtimeSnapshotPathForDirectory(this.baseDir,sessionId);if(path22.resolve(filePath)!==path22.resolve(legacyPath)){let legacyDir=path22.dirname(legacyPath);if(existsSync2(legacyDir))await rm6(legacyDir,{recursive:!0,force:!0})}}async delete(sessionId){let filePath=await this.resolveSnapshotFilePath(sessionId),sessionDir=path22.dirname(filePath??runtimeSnapshotPathForDirectory(this.baseDir,sessionId));if(existsSync2(sessionDir))await rm6(sessionDir,{recursive:!0,force:!0});await this.removeIndexEntries(sessionId)}}class HubSubagentRegistry{entries=new Map;register(entry){this.entries.set(entry.subagentId,entry)}unregister(subagentId){this.entries.delete(subagentId)}get(subagentId){return this.entries.get(subagentId)}hasReferences(sessionId){for(let entry of this.entries.values())if(entry.ownerSessionId===sessionId)return!0;return!1}size(){return this.entries.size}}async function executeSubagentRun(input){let{entry,spec,pair,getSnapshotUsage,onFinish,logger}=input,startedAt=Date.now(),attachedPair=pair,summary="",sawTextDelta=!1,tokensUsed,toolCalls=new Set,finalize2=(result)=>{return entry.state.value=result.state,onFinish(result),logger?.onFinished?.({subagentId:entry.subagentId,result}),result};try{if(entry.abortController.signal.aborted)return finalize2({summary:"",state:"cancelled",durationMs:Date.now()-startedAt,toolsUsed:0});entry.state.value="running",logger?.onCreated?.({subagentId:entry.subagentId,ownerSessionId:entry.ownerSessionId});let itemId=attachedPair.session.send(spec.prompt);if(entry.session=attachedPair.session,entry.itemId=itemId,spec.onSessionReady?.(attachedPair.session,itemId),entry.abortController.signal.aborted)return attachedPair.session.cancelQueuedItem(itemId),finalize2({summary:"",state:"cancelled",durationMs:Date.now()-startedAt,toolsUsed:0});let stream=attachedPair.session.receive({signal:entry.abortController.signal});for await(let event of stream){if(event.itemId!==itemId)continue;if(event.type==="text_delta"){let rawDelta=event.delta,delta=typeof rawDelta==="string"?rawDelta:String(rawDelta??"");if(delta){sawTextDelta=!0,summary=`${summary}${delta}`;try{await spec.onTextDelta?.(delta)}catch{}}continue}if(event.type==="tool_call"){let callIdRaw=event.toolCall?.id;if(typeof callIdRaw==="string"&&callIdRaw)toolCalls.add(callIdRaw);continue}if(event.type==="done"){let message=event.message;if(!sawTextDelta){let finalText=textFromSubagentMessage(message);if(finalText){summary=finalText;try{await spec.onTextDelta?.(finalText)}catch{}}}tokensUsed=readTokensUsed(event.usage)??readTokensUsed(getSnapshotUsage(attachedPair.session.toSnapshot()));break}if(event.type==="error"){let errorRecord=event.error,message=readString2(errorRecord?.message)??"Subagent execution failed";throw Error(message)}}let cancelled=entry.abortController.signal.aborted;return finalize2({summary:summary.trim(),state:cancelled?"cancelled":"completed",...typeof tokensUsed==="number"?{tokens:tokensUsed}:{},durationMs:Date.now()-startedAt,toolsUsed:toolCalls.size})}catch(error48){if(entry.abortController.signal.aborted)return finalize2({summary:summary.trim(),state:"cancelled",durationMs:Date.now()-startedAt,toolsUsed:toolCalls.size});let message=error48 instanceof Error?error48.message:String(error48);return finalize2({summary:summary.trim(),state:"failed",durationMs:Date.now()-startedAt,toolsUsed:toolCalls.size,error:{code:"subagent_execution_failed",message}})}finally{if(attachedPair)try{if(attachedPair.dispose)await attachedPair.dispose();else await Promise.allSettled([attachedPair.session.dispose(),attachedPair.agent.dispose()])}catch{}}}function readString2(value){if(typeof value!=="string")return;return value.trim()||void 0}function readTokensUsed(usagePayload){if(!usagePayload||typeof usagePayload!=="object")return;let usage=usagePayload,readNumber=(...keys)=>{for(let key of keys){let raw=usage[key];if(typeof raw==="number"&&Number.isFinite(raw))return raw;if(typeof raw==="string"){let parsed=Number(raw);if(Number.isFinite(parsed))return parsed}}return},total=readNumber("totalTokens","total_tokens");if(typeof total==="number")return total;let prompt=readNumber("promptTokens","prompt_tokens","inputTokens","input_tokens")??0,completion=readNumber("completionTokens","completion_tokens","outputTokens","output_tokens")??0;if(prompt||completion)return prompt+completion;return}function textFromSubagentMessage(message){if(!message||typeof message!=="object")return"";let content=message.content;if(typeof content==="string")return content;if(!Array.isArray(content))return"";let parts=[];for(let part of content){if(!part||typeof part!=="object")continue;if(part.type==="text"){let text=part.text;if(typeof text==="string")parts.push(text)}}return parts.join("")}function getHubStore(){if(!globalThis.__DIMCODE_RUNTIME_HUBS__)globalThis.__DIMCODE_RUNTIME_HUBS__=new Map;return globalThis.__DIMCODE_RUNTIME_HUBS__}function createHub(stateDirPath){let resolvedStateDir=typeof stateDirPath==="string"&&stateDirPath.trim()?path23.resolve(stateDirPath):null,key=resolvedStateDir??"memory",goatStateStore=resolvedStateDir?new FileStateStore2({dir:resolvedStateDir,deleteOnComplete:!1}):new InMemoryStateStore2({deleteOnComplete:!1}),dimStateStore=resolvedStateDir?new RuntimeSnapshotFileStore({directory:path23.join(resolvedStateDir,"dim-sdk-sessions")}):null;return{key,stateDirPath:resolvedStateDir,goatStateStore,dimStateStore,subagentProcessRegistry:new SubagentProcessRegistry,subagentRegistry:new HubSubagentRegistry}}function getOrCreateDimRuntimeHub(options){let key=typeof options?.stateDirPath==="string"&&options.stateDirPath.trim()?path23.resolve(options.stateDirPath):"memory",store2=getHubStore(),existing=store2.get(key);if(existing)return existing;let created=createHub(options?.stateDirPath);return store2.set(key,created),created}function hasSubagentReferences(sessionId){let normalizedSessionId=String(sessionId??"").trim();if(!normalizedSessionId)return!1;let store2=globalThis.__DIMCODE_RUNTIME_HUBS__;if(!store2||store2.size===0)return!1;for(let hub of store2.values())if(hub.subagentRegistry.hasReferences(normalizedSessionId))return!0;return!1}var RUNTIME_SESSION_METADATA_KEY="dimAgentRuntime";function cloneEnvRecord(value){if(!value||typeof value!=="object")return;let next=Object.entries(value).reduce((acc,[key,entry])=>{return acc[key]=entry,acc},{});return Object.keys(next).length>0?next:void 0}function resolveRuntimeContextWindow(capabilities,maxInputTokens){return cloneModelCapabilities(capabilities)?.contextWindow??normalizePositiveInteger2(maxInputTokens)??void 0}function cloneResolvedRuntimeConfig(config2){let modelId=typeof config2?.modelId==="string"?config2.modelId.trim():"",adapter=typeof config2?.adapter==="string"?config2.adapter:void 0,provider=typeof config2?.provider==="string"?config2.provider:void 0,baseUrl=typeof config2?.baseUrl==="string"?config2.baseUrl:void 0,apiKey=typeof config2?.apiKey==="string"?config2.apiKey:void 0,responsesAutoPromptCacheKey=config2?.responsesAutoPromptCacheKey===!0?!0:void 0,responsesUseSessionId=config2?.responsesUseSessionId===!0?!0:void 0,reasoningEffort=typeof config2?.reasoningEffort==="string"?config2.reasoningEffort.trim():"",contextWindow=resolveRuntimeContextWindow(config2?.modelCapabilities,config2?.maxInputTokens),maxOutputTokens=Number.isFinite(Number(config2?.maxOutputTokens))?Number(config2?.maxOutputTokens):void 0,baseModelCapabilities=cloneModelCapabilities(config2?.modelCapabilities),modelCapabilities=baseModelCapabilities&&typeof contextWindow==="number"?{...baseModelCapabilities,contextWindow}:baseModelCapabilities,env=cloneEnvRecord(config2?.env);return{modelId,...adapter?{adapter}:{},...provider?{provider}:{},...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...responsesAutoPromptCacheKey?{responsesAutoPromptCacheKey:!0}:{},...responsesUseSessionId?{responsesUseSessionId:!0}:{},...reasoningEffort?{reasoningEffort}:{},...modelCapabilities?{modelCapabilities}:{},...typeof contextWindow==="number"?{maxInputTokens:contextWindow}:{},...typeof maxOutputTokens==="number"?{maxOutputTokens}:{},...config2?.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...env?{env}:{}}}function persistableRuntimeConfig(config2){let cloned=cloneResolvedRuntimeConfig(config2);return{modelId:cloned.modelId,...cloned.adapter?{adapter:cloned.adapter}:{},...cloned.provider?{provider:cloned.provider}:{},...cloned.baseUrl?{baseUrl:cloned.baseUrl}:{},...cloned.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...cloned.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...cloned.reasoningEffort?{reasoningEffort:cloned.reasoningEffort}:{},...cloned.modelCapabilities?{modelCapabilities:cloned.modelCapabilities}:{},...typeof cloned.maxInputTokens==="number"?{maxInputTokens:cloned.maxInputTokens}:{},...typeof cloned.maxOutputTokens==="number"?{maxOutputTokens:cloned.maxOutputTokens}:{},...cloned.nextApiOAuth===!0?{nextApiOAuth:!0}:{}}}function readPersistedRuntimeConfig(raw){let baseModelCapabilities=cloneModelCapabilities(raw.modelCapabilities),contextWindow=resolveRuntimeContextWindow(baseModelCapabilities,raw.maxInputTokens),modelCapabilities=baseModelCapabilities&&typeof contextWindow==="number"?{...baseModelCapabilities,contextWindow}:baseModelCapabilities,modelId=typeof raw.modelId==="string"?raw.modelId.trim():"";if(!modelId)return null;return{modelId,...typeof raw.adapter==="string"?{adapter:raw.adapter}:{},...typeof raw.provider==="string"?{provider:raw.provider}:{},...typeof raw.baseUrl==="string"?{baseUrl:raw.baseUrl}:{},...raw.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...raw.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...typeof raw.reasoningEffort==="string"&&raw.reasoningEffort.trim()?{reasoningEffort:raw.reasoningEffort.trim()}:{},...modelCapabilities?{modelCapabilities}:{},...typeof contextWindow==="number"?{maxInputTokens:contextWindow}:{},...Number.isFinite(Number(raw.maxOutputTokens))?{maxOutputTokens:Number(raw.maxOutputTokens)}:{},...raw.nextApiOAuth===!0?{nextApiOAuth:!0}:{}}}function parseRuntimeEnvelopeObject(value){if(!value||typeof value!=="object"||Array.isArray(value))return{};return value}function normalizePositiveInteger2(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<=0)return null;return Math.floor(numeric)}function normalizeNonNegativeInteger2(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<0)return null;return Math.floor(numeric)}function normalizeLastRequestBudget(raw){let record3=parseRuntimeEnvelopeObject(raw),estimatedInputTokens=normalizeNonNegativeInteger2(record3.estimatedInputTokens),thresholdTokens=normalizePositiveInteger2(record3.thresholdTokens),plannedOutput=normalizePositiveInteger2(record3.plannedOutput),contextWindow=normalizePositiveInteger2(record3.contextWindow),updatedAtMs=normalizePositiveInteger2(record3.updatedAtMs)??Date.now();if(estimatedInputTokens==null||thresholdTokens==null||plannedOutput==null||contextWindow==null)return;return{runId:typeof record3.runId==="string"&&record3.runId.trim()?record3.runId.trim():void 0,requestId:typeof record3.requestId==="string"&&record3.requestId.trim()?record3.requestId.trim():void 0,estimatedInputTokens,thresholdTokens,plannedOutput,contextWindow,usedAutoCompaction:record3.usedAutoCompaction===!0,updatedAtMs}}function cloneLastRequestBudget(budget){return budget?{...budget}:void 0}function asModeId(value){return value==="plan"?"plan":"agent"}function cloneServers(value){return Array.isArray(value)?value.map((server)=>({...server})):[]}function persistableMcpServers(value){return cloneServers(value).map((server)=>{if(server.transport==="http"||server.transport==="sse")return toJsonObject({id:server.id,name:server.name,transport:server.transport,url:server.url,...typeof server.auth?.token==="string"?{auth:{type:"bearer",token:server.auth.token}}:{},...server.headers?{headers:{...server.headers}}:{},...typeof server.requestTimeoutMs==="number"?{requestTimeoutMs:server.requestTimeoutMs}:{},...typeof server.enabled==="boolean"?{enabled:server.enabled}:{}});return toJsonObject({id:server.id,name:server.name,transport:server.transport,command:server.command,args:[...server.args],...server.env?{env:{...server.env}}:{},...server.cwd?{cwd:server.cwd}:{},...typeof server.autoRestart==="boolean"?{autoRestart:server.autoRestart}:{},...typeof server.requestTimeoutMs==="number"?{requestTimeoutMs:server.requestTimeoutMs}:{},...typeof server.restartDelayMs==="number"?{restartDelayMs:server.restartDelayMs}:{},...typeof server.maxRestarts==="number"?{maxRestarts:server.maxRestarts}:{},...typeof server.restartWindowMs==="number"?{restartWindowMs:server.restartWindowMs}:{},...typeof server.enabled==="boolean"?{enabled:server.enabled}:{}})})}function cloneMetadata(value){return cloneMetadataMap(value?toMetadataMap(value):void 0)}function stripUiMetadata(value){let next=cloneMetadata(value);return delete next.ui,next}function stripLegacyLastRequestBudgetFromMetadata(value){let next=cloneMetadata(value),ui=parseRuntimeEnvelopeObject(next.ui);if(!("lastRequestBudget"in ui))return next;let nextUi={...ui};if(delete nextUi.lastRequestBudget,Object.keys(nextUi).length===0)delete next.ui;else next.ui=toJsonObject(nextUi);return next}function cloneTodoSnapshotItems(value){if(!Array.isArray(value)||value.length===0)return;return value.map((item)=>({content:item.content,status:item.status,activeForm:item.activeForm}))}function readTodoSnapshotItems(value){if(!Array.isArray(value))return;let items=value.flatMap((entry)=>{if(!entry||typeof entry!=="object"||Array.isArray(entry))return[];let record3=entry,content=typeof record3.content==="string"?record3.content.trim():"",activeForm=typeof record3.activeForm==="string"?record3.activeForm.trim():"",status=record3.status;if(!content||status!=="pending"&&status!=="in_progress"&&status!=="completed")return[];return[{content,status,activeForm:activeForm||content}]});return items.length>0?items:void 0}function serializeRuntimeSessionEnvelope(envelope){let metadata=stripUiMetadata(envelope.metadata),runtimeConfig=persistableRuntimeConfig(envelope.runtimeConfig),mcpServers=envelope.mcpServers.length>0?persistableMcpServers(envelope.mcpServers):void 0,lastRequestBudget=cloneLastRequestBudget(envelope.lastRequestBudget),todoSnapshot=cloneTodoSnapshotItems(envelope.todoSnapshot);return toJsonObject({version:envelope.version,...envelope.title?{title:envelope.title}:{},modeId:envelope.modeId,runtimeConfig,...envelope.toolApprovalMode?{toolApprovalMode:envelope.toolApprovalMode}:{},...mcpServers?{mcpServers}:{},metadata,...envelope.lastStopReason?{lastStopReason:envelope.lastStopReason}:{},...envelope.lastModelStopReason?{lastModelStopReason:envelope.lastModelStopReason}:{},...lastRequestBudget?{lastRequestBudget}:{},...todoSnapshot?{todoSnapshot}:{}})}function createRuntimeSessionEnvelope(record3){let metadata=stripUiMetadata(record3.metadata),runtimeConfig=persistableRuntimeConfig(record3.runtimeConfig),mcpServers=cloneServers(record3.mcpServers),lastRequestBudget=cloneLastRequestBudget(record3.lastRequestBudget),todoSnapshot=cloneTodoSnapshotItems(record3.todoSnapshot);return{version:1,...record3.title?{title:record3.title}:{},modeId:record3.modeId,runtimeConfig,...record3.toolApprovalMode?{toolApprovalMode:record3.toolApprovalMode}:{},mcpServers,metadata,...record3.lastStopReason?{lastStopReason:record3.lastStopReason}:{},...record3.lastModelStopReason?{lastModelStopReason:record3.lastModelStopReason}:{},...lastRequestBudget?{lastRequestBudget}:{},...todoSnapshot?{todoSnapshot}:{}}}function readRuntimeSessionEnvelope(snapshot){let metadata=toMetadataMap(snapshot?.metadata),raw=parseRuntimeEnvelopeObject(metadata[RUNTIME_SESSION_METADATA_KEY]);if(Number(raw.version)!==1)return null;let runtimeConfig=readPersistedRuntimeConfig(parseRuntimeEnvelopeObject(raw.runtimeConfig));if(!runtimeConfig)return null;let nestedMetadata=toJsonObject(raw.metadata);return{version:1,title:typeof raw.title==="string"?raw.title:void 0,modeId:asModeId(raw.modeId),runtimeConfig,toolApprovalMode:raw.toolApprovalMode==="auto"||raw.toolApprovalMode==="normal"||raw.toolApprovalMode==="strict"?raw.toolApprovalMode:raw.toolApprovalMode==="all"?"auto":void 0,mcpServers:cloneServers(raw.mcpServers),metadata:stripUiMetadata(nestedMetadata),lastStopReason:typeof raw.lastStopReason==="string"?raw.lastStopReason:void 0,lastModelStopReason:typeof raw.lastModelStopReason==="string"?raw.lastModelStopReason:void 0,lastRequestBudget:normalizeLastRequestBudget(raw.lastRequestBudget),todoSnapshot:readTodoSnapshotItems(raw.todoSnapshot)}}function readEnvelopeFromSnapshot(snapshot){return readRuntimeSessionEnvelope(snapshot)}function applyEnvelope(snapshot,envelope,cwd,metadata=envelope.metadata){let serializedEnvelope=serializeRuntimeSessionEnvelope(envelope),persistedMetadata=stripLegacyLastRequestBudgetFromMetadata(snapshot.metadata),runtimeMetadata=stripLegacyLastRequestBudgetFromMetadata(metadata),nextMetadata={...persistedMetadata,...runtimeMetadata,[RUNTIME_SESSION_METADATA_KEY]:serializedEnvelope};if(envelope.title)nextMetadata.title=envelope.title;else delete nextMetadata.title;return{...snapshot,cwd,metadata:nextMetadata}}function createRuntimeSessionRecord(sessionId,snapshot,fallback){let envelope=readEnvelopeFromSnapshot(snapshot),createdAt=Number(snapshot.createdAt??Date.now())||Date.now(),updatedAt=Number(snapshot.updatedAt??createdAt)||createdAt;return{sessionId,createdAt,updatedAt,cwd:snapshot.cwd||process.cwd(),title:envelope?.title,modeId:envelope?.modeId??"agent",runtimeConfig:cloneResolvedRuntimeConfig(fallback),toolApprovalMode:envelope?.toolApprovalMode,mcpServers:cloneServers(envelope?.mcpServers),metadata:cloneMetadata(envelope?.metadata),lastStopReason:envelope?.lastStopReason,lastModelStopReason:envelope?.lastModelStopReason,lastRequestBudget:cloneLastRequestBudget(envelope?.lastRequestBudget),todoSnapshot:cloneTodoSnapshotItems(envelope?.todoSnapshot),askUserActionCount:0}}function createRuntimeSessionRecordFromInput(sessionId,input,fallback){let now=Date.now();return{sessionId,createdAt:now,updatedAt:now,cwd:input?.cwd?.trim()?input.cwd:fallback.cwd,title:input?.title?.trim()?input.title:void 0,modeId:input?.modeId==="plan"?"plan":"agent",runtimeConfig:cloneResolvedRuntimeConfig(fallback.runtimeConfig),toolApprovalMode:input?.toolApprovalMode,mcpServers:cloneServers(input?.mcpServers),metadata:{...input?.metadata??{}},lastStopReason:void 0,lastModelStopReason:void 0,todoSnapshot:void 0,askUserActionCount:0}}function applySessionConfigUpdate(record3,update){if(typeof update.cwd==="string"&&update.cwd.trim())record3.cwd=update.cwd;if(update.runtimeConfig)record3.runtimeConfig=cloneResolvedRuntimeConfig(update.runtimeConfig);if("toolApprovalMode"in update)record3.toolApprovalMode=update.toolApprovalMode;if(Array.isArray(update.mcpServers))record3.mcpServers=cloneServers(update.mcpServers);if(typeof update.title==="string"&&update.title.trim())record3.title=update.title;if(update.metadata)record3.metadata={...record3.metadata,...update.metadata};record3.updatedAt=Date.now()}function sessionRecordToSummary(record3){return{sessionId:record3.sessionId,title:record3.title,cwd:record3.cwd,updatedAt:record3.updatedAt,createdAt:record3.createdAt,modeId:record3.modeId}}var AGENT_RUNTIME_INTERNALS=Symbol.for("@archships/dim-agent/runtime-internals");import{createHash as createHash3,randomUUID as randomUUID7}from"node:crypto";import path31 from"node:path";var CODING_PLAN_PROVIDER_IDS=new Set(["bailian-coding-plan","zhipuai-coding-plan","zai-coding-plan","minimax-coding-plan","minimax-cn-coding-plan","kimi-for-coding"]);function isCodingPlanProviderId(providerId){let id=String(providerId??"").trim();if(!id)return!1;return CODING_PLAN_PROVIDER_IDS.has(id)}function applyDimCodeClientIdentityHeaders(headers){if(!headers.has("User-Agent"))headers.set("User-Agent",buildNextApiOAuthUserAgent());if(!headers.has("X-Title"))headers.set("X-Title",NEXT_API_OAUTH_X_TITLE);if(!headers.has("HTTP-Referer"))headers.set("HTTP-Referer",NEXT_API_OAUTH_HTTP_REFERER)}function wrapFetchWithDimCodeIdentityHeaders(providerId,baseFetch){if(isCodingPlanProviderId(providerId))return baseFetch;let underlying=baseFetch??globalThis.fetch;return Object.assign(async(input,init)=>{let headers=new Headers(input instanceof Request?input.headers:void 0);if(init?.headers)new Headers(init.headers).forEach((value,key)=>headers.set(key,value));if(applyDimCodeClientIdentityHeaders(headers),input instanceof Request)return underlying(new Request(input,{...init,headers}));return underlying(input,{...init,headers})},{preconnect:typeof underlying.preconnect==="function"?underlying.preconnect.bind(underlying):void 0})}var RETRYABLE_STREAM_RETRY_DELAYS_MS=[250,500,1000,2000],RETRYABLE_PROVIDER_RETRY_SINK_KEY="__dimRetryableProviderRetrySink",retryableProviderRetrySinkRegistry=new Map,retryableProviderRetrySinkSeq=0;function readModelRequest(value){if(!value||typeof value!=="object")return null;let direct=value,nested=direct.request;if(nested&&typeof nested==="object"&&!Array.isArray(nested))return nested;return direct}function isMeaningfulOutputEvent(event){switch(String(event?.type??"")){case"text_delta":case"thinking_delta":case"tool_call_start":case"tool_call_args_delta":case"tool_call_end":return!0;default:return!1}}function isRetryableErrorEvent(event){return String(event?.type??"")==="error"&&event?.error?.retryable===!0}function readAbortSignal(value){if(value&&typeof value==="object"&&typeof value.aborted==="boolean"&&typeof value.addEventListener==="function")return value;return}function readRetrySinkId(value){let sinkId=readModelRequest(value)?.[RETRYABLE_PROVIDER_RETRY_SINK_KEY];return typeof sinkId==="string"&&sinkId.trim()?sinkId:null}function readRetrySink(value){let sinkId=readRetrySinkId(value);return sinkId?retryableProviderRetrySinkRegistry.get(sinkId)??null:null}function disposeRetrySink(value){let sinkId=readRetrySinkId(value);if(!sinkId)return;retryableProviderRetrySinkRegistry.delete(sinkId)}async function emitRetryNotice(request,notice){let sink=readRetrySink(request);if(!sink)return;try{await sink(notice)}catch{}}function attachRetryNoticeSinkToModelRequest(request,sink){if(!request||typeof request!=="object")return request;let sinkId=`retry_sink_${Date.now()}_${++retryableProviderRetrySinkSeq}`;return retryableProviderRetrySinkRegistry.set(sinkId,sink),{...request,[RETRYABLE_PROVIDER_RETRY_SINK_KEY]:sinkId}}function createAbortError4(signal){if(signal?.reason instanceof Error)return signal.reason;let error48=Error("The operation was aborted.");return error48.name="AbortError",error48}async function waitForRetryDelay(delayMs,signal){if(!(delayMs>0)){if(signal?.aborted)throw createAbortError4(signal);return}if(!signal){await new Promise((resolve2)=>setTimeout(resolve2,delayMs));return}if(signal.aborted)throw createAbortError4(signal);await new Promise((resolve2,reject)=>{let onAbort,timer=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve2()},delayMs);onAbort=()=>{clearTimeout(timer),signal.removeEventListener("abort",onAbort),reject(createAbortError4(signal))},signal.addEventListener("abort",onAbort,{once:!0})})}function wrapStreamWithRetryableErrorRetry(adapter,opts={}){if(!adapter||typeof adapter!=="object"||typeof adapter.stream!=="function")return adapter;let original=adapter.stream.bind(adapter),retryDelaysMs=Array.isArray(opts.retryDelaysMs)&&opts.retryDelaysMs.length>0?opts.retryDelaysMs:RETRYABLE_STREAM_RETRY_DELAYS_MS;return adapter.stream=(...args)=>{let modelRequest=readModelRequest(args[0]),signal=readAbortSignal(modelRequest?.signal);return async function*(){try{let retryIndex=0;while(!0){let emittedMeaningfulOutput=!1,shouldRetry=!1,pendingPrelude=[];for await(let event of original(...args)){let eventType=String(event?.type??"");if(!emittedMeaningfulOutput&&eventType==="response_start"){pendingPrelude.push(event);continue}if(isMeaningfulOutputEvent(event))emittedMeaningfulOutput=!0;if(isRetryableErrorEvent(event)&&!emittedMeaningfulOutput&&retryIndex<retryDelaysMs.length){let requestId=String(event?.requestId??modelRequest?.requestId??"unknown"),requestModel=modelRequest?.model;await emitRetryNotice(args[0],{requestId,provider:String(requestModel?.provider??adapter?.defaultModel?.provider??adapter?.provider??""),modelId:String(requestModel?.modelId??adapter?.defaultModel?.modelId??""),retry:retryIndex+1,maxRetries:retryDelaysMs.length,attempt:retryIndex+2,maxAttempts:retryDelaysMs.length+1,delayMs:retryDelaysMs[retryIndex]??0,error:structuredClone(event?.error)}),shouldRetry=!0;break}while(pendingPrelude.length>0)yield pendingPrelude.shift();yield event}if(!shouldRetry){while(pendingPrelude.length>0)yield pendingPrelude.shift();return}await waitForRetryDelay(retryDelaysMs[retryIndex]??0,signal),retryIndex+=1}}finally{disposeRetrySink(args[0])}}()},adapter}function injectRequestDefaultsIntoAdapter(adapter,defaults){if(!adapter||typeof adapter!=="object"||typeof adapter.stream!=="function")return adapter;let toInject={};for(let[k,v]of Object.entries(defaults))if(typeof v==="number"&&Number.isFinite(v))toInject[k]=v;else if(typeof v==="string"&&v.length>0)toInject[k]=v;else if(v&&typeof v==="object"&&!Array.isArray(v)&&(v.type==="enabled"||v.type==="disabled"))toInject[k]=v;if(Object.keys(toInject).length===0)return adapter;let original=adapter.stream.bind(adapter);return adapter.stream=(request)=>{if(!request||typeof request!=="object")return original(request);let nextRequest={...request};for(let[k,v]of Object.entries(toInject))if(nextRequest[k]==null)nextRequest[k]=v;return original(nextRequest)},adapter}async function createGeminiAdapterWithInjectedParams(createGeminiAdapter2,cfg){let identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),adapter=createGeminiAdapter2({defaultModel:cfg.modelId,baseUrl:cfg.baseUrl,apiKey:cfg.apiKey??"",...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});return injectRequestDefaultsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens}),wrapStreamWithRetryableErrorRetry(adapter),adapter}function normalizeOpt(v){return String(v??"").trim()||void 0}var CONTINUATION_SUMMARY_OPEN_TAG2="<continuation_summary>",CONTINUATION_SUMMARY_CLOSE_TAG2="</continuation_summary>",AUTO_COMPACT_RETAIN_MESSAGES=4;function buildAutoCompactPluginOptions(){return{retainMessages:AUTO_COMPACT_RETAIN_MESSAGES}}function hasValidContinuationSummary(summary){let normalized=typeof summary==="string"?summary.trim():"";if(!normalized||!normalized.startsWith(CONTINUATION_SUMMARY_OPEN_TAG2)||!normalized.endsWith(CONTINUATION_SUMMARY_CLOSE_TAG2))return!1;let openCount=normalized.split(CONTINUATION_SUMMARY_OPEN_TAG2).length-1,closeCount=normalized.split(CONTINUATION_SUMMARY_CLOSE_TAG2).length-1;if(openCount!==1||closeCount!==1)return!1;return normalized.slice(CONTINUATION_SUMMARY_OPEN_TAG2.length,normalized.length-CONTINUATION_SUMMARY_CLOSE_TAG2.length).trim().length>0}async function triggerSdkManualCompaction(session){let result=await session.runCompaction({trigger:"manual"});if(result.status!=="compacted")throw createManualCompactionError(result.reasonCode??"manual_compaction_failed",result.reasonMessage??"Manual compaction failed",result);if(!hasValidContinuationSummary(result.summary))throw createManualCompactionError("invalid_summary_contract","Manual compaction did not produce a valid continuation summary",result);if(result.postSummaryFitsBudget===!1)throw createManualCompactionError("post_summary_over_budget",result.reasonMessage??"Compaction summary was applied but the projected request is still over budget",result);return result}function resolveAnthropicReasoningDefaults(modelId,opts){let target=String(modelId??"").trim();if(!target)return;let providerId=normalizeOpt(opts?.provider),explicitProvider=providerId?getBuiltinProvider(providerId):void 0,providers=explicitProvider?[explicitProvider]:listBuiltinProviders().filter((provider)=>getProviderAdapter(provider)==="anthropic");for(let provider of providers){let model=provider.models.find((m)=>String(m?.id??"").trim()===target);if(model?.reasoning?.supported&&model?.reasoning?.default)return{enabled:!0,budgetTokens:1024}}return}function isZenMuxProvider(provider){return normalizeOpt(provider)==="zenmux"}function shouldUseAnthropicReasoningDefaults(input){if(input.adapter==="anthropic")return!0;let modelId=String(input.modelId??"").trim().toLowerCase();return isZenMuxProvider(input.provider)&&modelId.startsWith("anthropic/")}function createManualCompactionError(code,message,result){let error48=Error(message);if(error48.code=code,result)error48.result=result;return error48}var MAX_TEXT_CHARS2=4000,SENSITIVE_KEY_NAMES=["authorization","proxyauthorization","api-key","apikey","api_key","x-api-key","x-goog-api-key","token","access_token","refresh_token","secret"];function normalizeText4(value){return typeof value==="string"?value.trim():""}function truncateText3(value){if(value.length<=MAX_TEXT_CHARS2)return value;return`${value.slice(0,MAX_TEXT_CHARS2)}...[truncated]`}function maskSecret(value){let trimmed=String(value??"").trim();if(!trimmed)return"***";return`***${trimmed.slice(-4)||""}`}function redactBearerTokens(text){return text.replace(/\bBearer\s+([^\s'",;`]+)/gi,(_match,token)=>{return`Bearer ${maskSecret(token)}`})}function redactInlineSecrets(text){let output=redactBearerTokens(text);return output=output.replace(/\b(sk-[\w-]{6,})\b/gi,(match)=>maskSecret(match)),output=output.replace(/\b([\w-]{20,})\b/g,(match)=>{let lower=match.toLowerCase();if(lower.includes("http")||lower.includes("model")||lower.includes("request"))return match;let hasLetter=/[a-z]/i.test(match),hasDigit=/\d/.test(match);return hasLetter&&hasDigit?maskSecret(match):match}),truncateText3(output)}function isSensitiveKeyName(key){let normalized=key.toLowerCase().replace(/[^a-z0-9]/g,"");return SENSITIVE_KEY_NAMES.some((candidate)=>normalized===candidate.replace(/[^a-z0-9]/g,""))}function redactStructuredValue(value,keyName){if(value==null||typeof value==="boolean"||typeof value==="number")return value;if(typeof value==="string"){if(keyName&&isSensitiveKeyName(keyName))return maskSecret(value);return redactInlineSecrets(value)}if(Array.isArray(value))return value.map((item)=>redactStructuredValue(item));if(!value||typeof value!=="object")return redactInlineSecrets(String(value));let out={};for(let[key,child]of Object.entries(value))out[key]=redactStructuredValue(child,key);return out}function statusFromSessionError(error48){return typeof error48.status==="number"&&Number.isFinite(error48.status)?error48.status:void 0}function responseBodyText(value){if(typeof value==="string")return value;let error48=value?.error;return[normalizeText4(error48?.message),normalizeText4(error48?.type),typeof error48?.code==="string"||typeof error48?.code==="number"?String(error48.code):""].filter(Boolean).join(" ")}function classifyProviderErrorReason(input){let status=input.status,haystack=`${input.message}
|
|
1027
|
+
`;this.pendingWrites.set(filePath,{snapshotData,usageLedgerData,usageLedgerFilePath,indexEntry});let existingWrite=this.writeQueues.get(filePath);if(existingWrite){await existingWrite;return}let writePromise=(async()=>{while(this.pendingWrites.has(filePath)){let nextWrite=this.pendingWrites.get(filePath);if(this.pendingWrites.delete(filePath),!nextWrite)continue;await mkdir10(path22.dirname(filePath),{recursive:!0}),await writeFile9(filePath,nextWrite.snapshotData,"utf-8"),await writeFile9(nextWrite.usageLedgerFilePath,nextWrite.usageLedgerData,"utf-8"),await this.upsertIndexEntry(nextWrite.indexEntry)}})();this.writeQueues.set(filePath,writePromise);try{await writePromise}finally{if(this.writeQueues.get(filePath)===writePromise)this.writeQueues.delete(filePath)}let legacyPath=runtimeSnapshotPathForDirectory(this.baseDir,sessionId);if(path22.resolve(filePath)!==path22.resolve(legacyPath)){let legacyDir=path22.dirname(legacyPath);if(existsSync2(legacyDir))await rm6(legacyDir,{recursive:!0,force:!0})}}async delete(sessionId){let filePath=await this.resolveSnapshotFilePath(sessionId),sessionDir=path22.dirname(filePath??runtimeSnapshotPathForDirectory(this.baseDir,sessionId));if(existsSync2(sessionDir))await rm6(sessionDir,{recursive:!0,force:!0});await this.removeIndexEntries(sessionId)}}class HubSubagentRegistry{entries=new Map;register(entry){this.entries.set(entry.subagentId,entry)}unregister(subagentId){this.entries.delete(subagentId)}get(subagentId){return this.entries.get(subagentId)}hasReferences(sessionId){for(let entry of this.entries.values())if(entry.ownerSessionId===sessionId)return!0;return!1}size(){return this.entries.size}}async function executeSubagentRun(input){let{entry,spec,pair,getSnapshotUsage,onFinish,logger}=input,startedAt=Date.now(),attachedPair=pair,summary="",sawTextDelta=!1,tokensUsed,toolCalls=new Set,finalize2=(result)=>{return entry.state.value=result.state,onFinish(result),logger?.onFinished?.({subagentId:entry.subagentId,result}),result};try{if(entry.abortController.signal.aborted)return finalize2({summary:"",state:"cancelled",durationMs:Date.now()-startedAt,toolsUsed:0});entry.state.value="running",logger?.onCreated?.({subagentId:entry.subagentId,ownerSessionId:entry.ownerSessionId});let itemId=attachedPair.session.send(spec.prompt);if(entry.session=attachedPair.session,entry.itemId=itemId,spec.onSessionReady?.(attachedPair.session,itemId),entry.abortController.signal.aborted)return attachedPair.session.cancelQueuedItem(itemId),finalize2({summary:"",state:"cancelled",durationMs:Date.now()-startedAt,toolsUsed:0});let stream=attachedPair.session.receive({signal:entry.abortController.signal});for await(let event of stream){if(event.itemId!==itemId)continue;if(event.type==="text_delta"){let rawDelta=event.delta,delta=typeof rawDelta==="string"?rawDelta:String(rawDelta??"");if(delta){sawTextDelta=!0,summary=`${summary}${delta}`;try{await spec.onTextDelta?.(delta)}catch{}}continue}if(event.type==="tool_call"){let callIdRaw=event.toolCall?.id;if(typeof callIdRaw==="string"&&callIdRaw)toolCalls.add(callIdRaw);continue}if(event.type==="done"){let message=event.message;if(!sawTextDelta){let finalText=textFromSubagentMessage(message);if(finalText){summary=finalText;try{await spec.onTextDelta?.(finalText)}catch{}}}tokensUsed=readTokensUsed(event.usage)??readTokensUsed(getSnapshotUsage(attachedPair.session.toSnapshot()));break}if(event.type==="error"){let errorRecord=event.error,message=readString2(errorRecord?.message)??"Subagent execution failed";throw Error(message)}}let cancelled=entry.abortController.signal.aborted;return finalize2({summary:summary.trim(),state:cancelled?"cancelled":"completed",...typeof tokensUsed==="number"?{tokens:tokensUsed}:{},durationMs:Date.now()-startedAt,toolsUsed:toolCalls.size})}catch(error48){if(entry.abortController.signal.aborted)return finalize2({summary:summary.trim(),state:"cancelled",durationMs:Date.now()-startedAt,toolsUsed:toolCalls.size});let message=error48 instanceof Error?error48.message:String(error48);return finalize2({summary:summary.trim(),state:"failed",durationMs:Date.now()-startedAt,toolsUsed:toolCalls.size,error:{code:"subagent_execution_failed",message}})}finally{if(attachedPair)try{if(attachedPair.dispose)await attachedPair.dispose();else await Promise.allSettled([attachedPair.session.dispose(),attachedPair.agent.dispose()])}catch{}}}function readString2(value){if(typeof value!=="string")return;return value.trim()||void 0}function readTokensUsed(usagePayload){if(!usagePayload||typeof usagePayload!=="object")return;let usage=usagePayload,readNumber=(...keys)=>{for(let key of keys){let raw=usage[key];if(typeof raw==="number"&&Number.isFinite(raw))return raw;if(typeof raw==="string"){let parsed=Number(raw);if(Number.isFinite(parsed))return parsed}}return},total=readNumber("totalTokens","total_tokens");if(typeof total==="number")return total;let prompt=readNumber("promptTokens","prompt_tokens","inputTokens","input_tokens")??0,completion=readNumber("completionTokens","completion_tokens","outputTokens","output_tokens")??0;if(prompt||completion)return prompt+completion;return}function textFromSubagentMessage(message){if(!message||typeof message!=="object")return"";let content=message.content;if(typeof content==="string")return content;if(!Array.isArray(content))return"";let parts=[];for(let part of content){if(!part||typeof part!=="object")continue;if(part.type==="text"){let text=part.text;if(typeof text==="string")parts.push(text)}}return parts.join("")}function getHubStore(){if(!globalThis.__DIMCODE_RUNTIME_HUBS__)globalThis.__DIMCODE_RUNTIME_HUBS__=new Map;return globalThis.__DIMCODE_RUNTIME_HUBS__}function createHub(stateDirPath){let resolvedStateDir=typeof stateDirPath==="string"&&stateDirPath.trim()?path23.resolve(stateDirPath):null,key=resolvedStateDir??"memory",goatStateStore=resolvedStateDir?new FileStateStore2({dir:resolvedStateDir,deleteOnComplete:!1}):new InMemoryStateStore2({deleteOnComplete:!1}),dimStateStore=resolvedStateDir?new RuntimeSnapshotFileStore({directory:path23.join(resolvedStateDir,"dim-sdk-sessions")}):null;return{key,stateDirPath:resolvedStateDir,goatStateStore,dimStateStore,subagentProcessRegistry:new SubagentProcessRegistry,subagentRegistry:new HubSubagentRegistry}}function getOrCreateDimRuntimeHub(options){let key=typeof options?.stateDirPath==="string"&&options.stateDirPath.trim()?path23.resolve(options.stateDirPath):"memory",store2=getHubStore(),existing=store2.get(key);if(existing)return existing;let created=createHub(options?.stateDirPath);return store2.set(key,created),created}function hasSubagentReferences(sessionId){let normalizedSessionId=String(sessionId??"").trim();if(!normalizedSessionId)return!1;let store2=globalThis.__DIMCODE_RUNTIME_HUBS__;if(!store2||store2.size===0)return!1;for(let hub of store2.values())if(hub.subagentRegistry.hasReferences(normalizedSessionId))return!0;return!1}var RUNTIME_SESSION_METADATA_KEY="dimAgentRuntime";function cloneEnvRecord(value){if(!value||typeof value!=="object")return;let next=Object.entries(value).reduce((acc,[key,entry])=>{return acc[key]=entry,acc},{});return Object.keys(next).length>0?next:void 0}function resolveRuntimeContextWindow(capabilities,maxInputTokens){return cloneModelCapabilities(capabilities)?.contextWindow??normalizePositiveInteger2(maxInputTokens)??void 0}function cloneResolvedRuntimeConfig(config2){let modelId=typeof config2?.modelId==="string"?config2.modelId.trim():"",adapter=typeof config2?.adapter==="string"?config2.adapter:void 0,provider=typeof config2?.provider==="string"?config2.provider:void 0,baseUrl=typeof config2?.baseUrl==="string"?config2.baseUrl:void 0,apiKey=typeof config2?.apiKey==="string"?config2.apiKey:void 0,responsesAutoPromptCacheKey=config2?.responsesAutoPromptCacheKey===!0?!0:void 0,responsesUseSessionId=config2?.responsesUseSessionId===!0?!0:void 0,interleavedThinking=typeof config2?.interleavedThinking==="boolean"?config2.interleavedThinking:void 0,reasoningEffort=typeof config2?.reasoningEffort==="string"?config2.reasoningEffort.trim():"",contextWindow=resolveRuntimeContextWindow(config2?.modelCapabilities,config2?.maxInputTokens),maxOutputTokens=Number.isFinite(Number(config2?.maxOutputTokens))?Number(config2?.maxOutputTokens):void 0,baseModelCapabilities=cloneModelCapabilities(config2?.modelCapabilities),modelCapabilities=baseModelCapabilities&&typeof contextWindow==="number"?{...baseModelCapabilities,contextWindow}:baseModelCapabilities,env=cloneEnvRecord(config2?.env);return{modelId,...adapter?{adapter}:{},...provider?{provider}:{},...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...responsesAutoPromptCacheKey?{responsesAutoPromptCacheKey:!0}:{},...responsesUseSessionId?{responsesUseSessionId:!0}:{},...typeof interleavedThinking==="boolean"?{interleavedThinking}:{},...reasoningEffort?{reasoningEffort}:{},...modelCapabilities?{modelCapabilities}:{},...typeof contextWindow==="number"?{maxInputTokens:contextWindow}:{},...typeof maxOutputTokens==="number"?{maxOutputTokens}:{},...config2?.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...env?{env}:{}}}function persistableRuntimeConfig(config2){let cloned=cloneResolvedRuntimeConfig(config2);return{modelId:cloned.modelId,...cloned.adapter?{adapter:cloned.adapter}:{},...cloned.provider?{provider:cloned.provider}:{},...cloned.baseUrl?{baseUrl:cloned.baseUrl}:{},...cloned.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...cloned.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...typeof cloned.interleavedThinking==="boolean"?{interleavedThinking:cloned.interleavedThinking}:{},...cloned.reasoningEffort?{reasoningEffort:cloned.reasoningEffort}:{},...cloned.modelCapabilities?{modelCapabilities:cloned.modelCapabilities}:{},...typeof cloned.maxInputTokens==="number"?{maxInputTokens:cloned.maxInputTokens}:{},...typeof cloned.maxOutputTokens==="number"?{maxOutputTokens:cloned.maxOutputTokens}:{},...cloned.nextApiOAuth===!0?{nextApiOAuth:!0}:{}}}function readPersistedRuntimeConfig(raw){let baseModelCapabilities=cloneModelCapabilities(raw.modelCapabilities),contextWindow=resolveRuntimeContextWindow(baseModelCapabilities,raw.maxInputTokens),modelCapabilities=baseModelCapabilities&&typeof contextWindow==="number"?{...baseModelCapabilities,contextWindow}:baseModelCapabilities,modelId=typeof raw.modelId==="string"?raw.modelId.trim():"";if(!modelId)return null;return{modelId,...typeof raw.adapter==="string"?{adapter:raw.adapter}:{},...typeof raw.provider==="string"?{provider:raw.provider}:{},...typeof raw.baseUrl==="string"?{baseUrl:raw.baseUrl}:{},...raw.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...raw.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...typeof raw.interleavedThinking==="boolean"?{interleavedThinking:raw.interleavedThinking}:{},...typeof raw.reasoningEffort==="string"&&raw.reasoningEffort.trim()?{reasoningEffort:raw.reasoningEffort.trim()}:{},...modelCapabilities?{modelCapabilities}:{},...typeof contextWindow==="number"?{maxInputTokens:contextWindow}:{},...Number.isFinite(Number(raw.maxOutputTokens))?{maxOutputTokens:Number(raw.maxOutputTokens)}:{},...raw.nextApiOAuth===!0?{nextApiOAuth:!0}:{}}}function parseRuntimeEnvelopeObject(value){if(!value||typeof value!=="object"||Array.isArray(value))return{};return value}function normalizePositiveInteger2(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<=0)return null;return Math.floor(numeric)}function normalizeNonNegativeInteger2(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<0)return null;return Math.floor(numeric)}function normalizeLastRequestBudget(raw){let record3=parseRuntimeEnvelopeObject(raw),estimatedInputTokens=normalizeNonNegativeInteger2(record3.estimatedInputTokens),thresholdTokens=normalizePositiveInteger2(record3.thresholdTokens),plannedOutput=normalizePositiveInteger2(record3.plannedOutput),contextWindow=normalizePositiveInteger2(record3.contextWindow),updatedAtMs=normalizePositiveInteger2(record3.updatedAtMs)??Date.now();if(estimatedInputTokens==null||thresholdTokens==null||plannedOutput==null||contextWindow==null)return;return{runId:typeof record3.runId==="string"&&record3.runId.trim()?record3.runId.trim():void 0,requestId:typeof record3.requestId==="string"&&record3.requestId.trim()?record3.requestId.trim():void 0,estimatedInputTokens,thresholdTokens,plannedOutput,contextWindow,usedAutoCompaction:record3.usedAutoCompaction===!0,updatedAtMs}}function cloneLastRequestBudget(budget){return budget?{...budget}:void 0}function asModeId(value){return value==="plan"?"plan":"agent"}function cloneServers(value){return Array.isArray(value)?value.map((server)=>({...server})):[]}function persistableMcpServers(value){return cloneServers(value).map((server)=>{if(server.transport==="http"||server.transport==="sse")return toJsonObject({id:server.id,name:server.name,transport:server.transport,url:server.url,...typeof server.auth?.token==="string"?{auth:{type:"bearer",token:server.auth.token}}:{},...server.headers?{headers:{...server.headers}}:{},...typeof server.requestTimeoutMs==="number"?{requestTimeoutMs:server.requestTimeoutMs}:{},...typeof server.enabled==="boolean"?{enabled:server.enabled}:{}});return toJsonObject({id:server.id,name:server.name,transport:server.transport,command:server.command,args:[...server.args],...server.env?{env:{...server.env}}:{},...server.cwd?{cwd:server.cwd}:{},...typeof server.autoRestart==="boolean"?{autoRestart:server.autoRestart}:{},...typeof server.requestTimeoutMs==="number"?{requestTimeoutMs:server.requestTimeoutMs}:{},...typeof server.restartDelayMs==="number"?{restartDelayMs:server.restartDelayMs}:{},...typeof server.maxRestarts==="number"?{maxRestarts:server.maxRestarts}:{},...typeof server.restartWindowMs==="number"?{restartWindowMs:server.restartWindowMs}:{},...typeof server.enabled==="boolean"?{enabled:server.enabled}:{}})})}function cloneMetadata(value){return cloneMetadataMap(value?toMetadataMap(value):void 0)}function stripUiMetadata(value){let next=cloneMetadata(value);return delete next.ui,next}function stripLegacyLastRequestBudgetFromMetadata(value){let next=cloneMetadata(value),ui=parseRuntimeEnvelopeObject(next.ui);if(!("lastRequestBudget"in ui))return next;let nextUi={...ui};if(delete nextUi.lastRequestBudget,Object.keys(nextUi).length===0)delete next.ui;else next.ui=toJsonObject(nextUi);return next}function cloneTodoSnapshotItems(value){if(!Array.isArray(value)||value.length===0)return;return value.map((item)=>({content:item.content,status:item.status,activeForm:item.activeForm}))}function readTodoSnapshotItems(value){if(!Array.isArray(value))return;let items=value.flatMap((entry)=>{if(!entry||typeof entry!=="object"||Array.isArray(entry))return[];let record3=entry,content=typeof record3.content==="string"?record3.content.trim():"",activeForm=typeof record3.activeForm==="string"?record3.activeForm.trim():"",status=record3.status;if(!content||status!=="pending"&&status!=="in_progress"&&status!=="completed")return[];return[{content,status,activeForm:activeForm||content}]});return items.length>0?items:void 0}function serializeRuntimeSessionEnvelope(envelope){let metadata=stripUiMetadata(envelope.metadata),runtimeConfig=persistableRuntimeConfig(envelope.runtimeConfig),mcpServers=envelope.mcpServers.length>0?persistableMcpServers(envelope.mcpServers):void 0,lastRequestBudget=cloneLastRequestBudget(envelope.lastRequestBudget),todoSnapshot=cloneTodoSnapshotItems(envelope.todoSnapshot);return toJsonObject({version:envelope.version,...envelope.title?{title:envelope.title}:{},modeId:envelope.modeId,runtimeConfig,...envelope.toolApprovalMode?{toolApprovalMode:envelope.toolApprovalMode}:{},...mcpServers?{mcpServers}:{},metadata,...envelope.lastStopReason?{lastStopReason:envelope.lastStopReason}:{},...envelope.lastModelStopReason?{lastModelStopReason:envelope.lastModelStopReason}:{},...lastRequestBudget?{lastRequestBudget}:{},...todoSnapshot?{todoSnapshot}:{}})}function createRuntimeSessionEnvelope(record3){let metadata=stripUiMetadata(record3.metadata),runtimeConfig=persistableRuntimeConfig(record3.runtimeConfig),mcpServers=cloneServers(record3.mcpServers),lastRequestBudget=cloneLastRequestBudget(record3.lastRequestBudget),todoSnapshot=cloneTodoSnapshotItems(record3.todoSnapshot);return{version:1,...record3.title?{title:record3.title}:{},modeId:record3.modeId,runtimeConfig,...record3.toolApprovalMode?{toolApprovalMode:record3.toolApprovalMode}:{},mcpServers,metadata,...record3.lastStopReason?{lastStopReason:record3.lastStopReason}:{},...record3.lastModelStopReason?{lastModelStopReason:record3.lastModelStopReason}:{},...lastRequestBudget?{lastRequestBudget}:{},...todoSnapshot?{todoSnapshot}:{}}}function readRuntimeSessionEnvelope(snapshot){let metadata=toMetadataMap(snapshot?.metadata),raw=parseRuntimeEnvelopeObject(metadata[RUNTIME_SESSION_METADATA_KEY]);if(Number(raw.version)!==1)return null;let runtimeConfig=readPersistedRuntimeConfig(parseRuntimeEnvelopeObject(raw.runtimeConfig));if(!runtimeConfig)return null;let nestedMetadata=toJsonObject(raw.metadata);return{version:1,title:typeof raw.title==="string"?raw.title:void 0,modeId:asModeId(raw.modeId),runtimeConfig,toolApprovalMode:raw.toolApprovalMode==="auto"||raw.toolApprovalMode==="normal"||raw.toolApprovalMode==="strict"?raw.toolApprovalMode:raw.toolApprovalMode==="all"?"auto":void 0,mcpServers:cloneServers(raw.mcpServers),metadata:stripUiMetadata(nestedMetadata),lastStopReason:typeof raw.lastStopReason==="string"?raw.lastStopReason:void 0,lastModelStopReason:typeof raw.lastModelStopReason==="string"?raw.lastModelStopReason:void 0,lastRequestBudget:normalizeLastRequestBudget(raw.lastRequestBudget),todoSnapshot:readTodoSnapshotItems(raw.todoSnapshot)}}function readEnvelopeFromSnapshot(snapshot){return readRuntimeSessionEnvelope(snapshot)}function applyEnvelope(snapshot,envelope,cwd,metadata=envelope.metadata){let serializedEnvelope=serializeRuntimeSessionEnvelope(envelope),persistedMetadata=stripLegacyLastRequestBudgetFromMetadata(snapshot.metadata),runtimeMetadata=stripLegacyLastRequestBudgetFromMetadata(metadata),nextMetadata={...persistedMetadata,...runtimeMetadata,[RUNTIME_SESSION_METADATA_KEY]:serializedEnvelope};if(envelope.title)nextMetadata.title=envelope.title;else delete nextMetadata.title;return{...snapshot,cwd,metadata:nextMetadata}}function createRuntimeSessionRecord(sessionId,snapshot,fallback){let envelope=readEnvelopeFromSnapshot(snapshot),createdAt=Number(snapshot.createdAt??Date.now())||Date.now(),updatedAt=Number(snapshot.updatedAt??createdAt)||createdAt;return{sessionId,createdAt,updatedAt,cwd:snapshot.cwd||process.cwd(),title:envelope?.title,modeId:envelope?.modeId??"agent",runtimeConfig:cloneResolvedRuntimeConfig(fallback),toolApprovalMode:envelope?.toolApprovalMode,mcpServers:cloneServers(envelope?.mcpServers),metadata:cloneMetadata(envelope?.metadata),lastStopReason:envelope?.lastStopReason,lastModelStopReason:envelope?.lastModelStopReason,lastRequestBudget:cloneLastRequestBudget(envelope?.lastRequestBudget),todoSnapshot:cloneTodoSnapshotItems(envelope?.todoSnapshot),askUserActionCount:0}}function createRuntimeSessionRecordFromInput(sessionId,input,fallback){let now=Date.now();return{sessionId,createdAt:now,updatedAt:now,cwd:input?.cwd?.trim()?input.cwd:fallback.cwd,title:input?.title?.trim()?input.title:void 0,modeId:input?.modeId==="plan"?"plan":"agent",runtimeConfig:cloneResolvedRuntimeConfig(fallback.runtimeConfig),toolApprovalMode:input?.toolApprovalMode,mcpServers:cloneServers(input?.mcpServers),metadata:{...input?.metadata??{}},lastStopReason:void 0,lastModelStopReason:void 0,todoSnapshot:void 0,askUserActionCount:0}}function applySessionConfigUpdate(record3,update){if(typeof update.cwd==="string"&&update.cwd.trim())record3.cwd=update.cwd;if(update.runtimeConfig)record3.runtimeConfig=cloneResolvedRuntimeConfig(update.runtimeConfig);if("toolApprovalMode"in update)record3.toolApprovalMode=update.toolApprovalMode;if(Array.isArray(update.mcpServers))record3.mcpServers=cloneServers(update.mcpServers);if(typeof update.title==="string"&&update.title.trim())record3.title=update.title;if(update.metadata)record3.metadata={...record3.metadata,...update.metadata};record3.updatedAt=Date.now()}function sessionRecordToSummary(record3){return{sessionId:record3.sessionId,title:record3.title,cwd:record3.cwd,updatedAt:record3.updatedAt,createdAt:record3.createdAt,modeId:record3.modeId}}var AGENT_RUNTIME_INTERNALS=Symbol.for("@archships/dim-agent/runtime-internals");import{createHash as createHash3,randomUUID as randomUUID7}from"node:crypto";import path31 from"node:path";var CODING_PLAN_PROVIDER_IDS=new Set(["bailian-coding-plan","zhipuai-coding-plan","zai-coding-plan","minimax-coding-plan","minimax-cn-coding-plan","kimi-for-coding"]);function isCodingPlanProviderId(providerId){let id=String(providerId??"").trim();if(!id)return!1;return CODING_PLAN_PROVIDER_IDS.has(id)}function applyDimCodeClientIdentityHeaders(headers){if(!headers.has("User-Agent"))headers.set("User-Agent",buildNextApiOAuthUserAgent());if(!headers.has("X-Title"))headers.set("X-Title",NEXT_API_OAUTH_X_TITLE);if(!headers.has("HTTP-Referer"))headers.set("HTTP-Referer",NEXT_API_OAUTH_HTTP_REFERER)}function wrapFetchWithDimCodeIdentityHeaders(providerId,baseFetch){if(isCodingPlanProviderId(providerId))return baseFetch;let underlying=baseFetch??globalThis.fetch;return Object.assign(async(input,init)=>{let headers=new Headers(input instanceof Request?input.headers:void 0);if(init?.headers)new Headers(init.headers).forEach((value,key)=>headers.set(key,value));if(applyDimCodeClientIdentityHeaders(headers),input instanceof Request)return underlying(new Request(input,{...init,headers}));return underlying(input,{...init,headers})},{preconnect:typeof underlying.preconnect==="function"?underlying.preconnect.bind(underlying):void 0})}var RETRYABLE_STREAM_RETRY_DELAYS_MS=[250,500,1000,2000],RETRYABLE_PROVIDER_RETRY_SINK_KEY="__dimRetryableProviderRetrySink",retryableProviderRetrySinkRegistry=new Map,retryableProviderRetrySinkSeq=0;function readModelRequest(value){if(!value||typeof value!=="object")return null;let direct=value,nested=direct.request;if(nested&&typeof nested==="object"&&!Array.isArray(nested))return nested;return direct}function isMeaningfulOutputEvent(event){switch(String(event?.type??"")){case"text_delta":case"thinking_delta":case"tool_call_start":case"tool_call_args_delta":case"tool_call_end":return!0;default:return!1}}function isRetryableErrorEvent(event){return String(event?.type??"")==="error"&&event?.error?.retryable===!0}function readAbortSignal(value){if(value&&typeof value==="object"&&typeof value.aborted==="boolean"&&typeof value.addEventListener==="function")return value;return}function readRetrySinkId(value){let sinkId=readModelRequest(value)?.[RETRYABLE_PROVIDER_RETRY_SINK_KEY];return typeof sinkId==="string"&&sinkId.trim()?sinkId:null}function readRetrySink(value){let sinkId=readRetrySinkId(value);return sinkId?retryableProviderRetrySinkRegistry.get(sinkId)??null:null}function disposeRetrySink(value){let sinkId=readRetrySinkId(value);if(!sinkId)return;retryableProviderRetrySinkRegistry.delete(sinkId)}async function emitRetryNotice(request,notice){let sink=readRetrySink(request);if(!sink)return;try{await sink(notice)}catch{}}function attachRetryNoticeSinkToModelRequest(request,sink){if(!request||typeof request!=="object")return request;let sinkId=`retry_sink_${Date.now()}_${++retryableProviderRetrySinkSeq}`;return retryableProviderRetrySinkRegistry.set(sinkId,sink),{...request,[RETRYABLE_PROVIDER_RETRY_SINK_KEY]:sinkId}}function createAbortError4(signal){if(signal?.reason instanceof Error)return signal.reason;let error48=Error("The operation was aborted.");return error48.name="AbortError",error48}async function waitForRetryDelay(delayMs,signal){if(!(delayMs>0)){if(signal?.aborted)throw createAbortError4(signal);return}if(!signal){await new Promise((resolve2)=>setTimeout(resolve2,delayMs));return}if(signal.aborted)throw createAbortError4(signal);await new Promise((resolve2,reject)=>{let onAbort,timer=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve2()},delayMs);onAbort=()=>{clearTimeout(timer),signal.removeEventListener("abort",onAbort),reject(createAbortError4(signal))},signal.addEventListener("abort",onAbort,{once:!0})})}function wrapStreamWithRetryableErrorRetry(adapter,opts={}){if(!adapter||typeof adapter!=="object"||typeof adapter.stream!=="function")return adapter;let original=adapter.stream.bind(adapter),retryDelaysMs=Array.isArray(opts.retryDelaysMs)&&opts.retryDelaysMs.length>0?opts.retryDelaysMs:RETRYABLE_STREAM_RETRY_DELAYS_MS;return adapter.stream=(...args)=>{let modelRequest=readModelRequest(args[0]),signal=readAbortSignal(modelRequest?.signal);return async function*(){try{let retryIndex=0;while(!0){let emittedMeaningfulOutput=!1,shouldRetry=!1,pendingPrelude=[];for await(let event of original(...args)){let eventType=String(event?.type??"");if(!emittedMeaningfulOutput&&eventType==="response_start"){pendingPrelude.push(event);continue}if(isMeaningfulOutputEvent(event))emittedMeaningfulOutput=!0;if(isRetryableErrorEvent(event)&&!emittedMeaningfulOutput&&retryIndex<retryDelaysMs.length){let requestId=String(event?.requestId??modelRequest?.requestId??"unknown"),requestModel=modelRequest?.model;await emitRetryNotice(args[0],{requestId,provider:String(requestModel?.provider??adapter?.defaultModel?.provider??adapter?.provider??""),modelId:String(requestModel?.modelId??adapter?.defaultModel?.modelId??""),retry:retryIndex+1,maxRetries:retryDelaysMs.length,attempt:retryIndex+2,maxAttempts:retryDelaysMs.length+1,delayMs:retryDelaysMs[retryIndex]??0,error:structuredClone(event?.error)}),shouldRetry=!0;break}while(pendingPrelude.length>0)yield pendingPrelude.shift();yield event}if(!shouldRetry){while(pendingPrelude.length>0)yield pendingPrelude.shift();return}await waitForRetryDelay(retryDelaysMs[retryIndex]??0,signal),retryIndex+=1}}finally{disposeRetrySink(args[0])}}()},adapter}function injectRequestDefaultsIntoAdapter(adapter,defaults){if(!adapter||typeof adapter!=="object"||typeof adapter.stream!=="function")return adapter;let toInject={};for(let[k,v]of Object.entries(defaults))if(typeof v==="number"&&Number.isFinite(v))toInject[k]=v;else if(typeof v==="string"&&v.length>0)toInject[k]=v;else if(v&&typeof v==="object"&&!Array.isArray(v)&&(v.type==="enabled"||v.type==="disabled"))toInject[k]=v;if(Object.keys(toInject).length===0)return adapter;let original=adapter.stream.bind(adapter);return adapter.stream=(request)=>{if(!request||typeof request!=="object")return original(request);let nextRequest={...request};for(let[k,v]of Object.entries(toInject))if(nextRequest[k]==null)nextRequest[k]=v;return original(nextRequest)},adapter}async function createGeminiAdapterWithInjectedParams(createGeminiAdapter2,cfg){let identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),adapter=createGeminiAdapter2({defaultModel:cfg.modelId,baseUrl:cfg.baseUrl,apiKey:cfg.apiKey??"",...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});return injectRequestDefaultsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens}),wrapStreamWithRetryableErrorRetry(adapter),adapter}function normalizeOpt(v){return String(v??"").trim()||void 0}var CONTINUATION_SUMMARY_OPEN_TAG2="<continuation_summary>",CONTINUATION_SUMMARY_CLOSE_TAG2="</continuation_summary>",AUTO_COMPACT_RETAIN_MESSAGES=4;function buildAutoCompactPluginOptions(){return{retainMessages:AUTO_COMPACT_RETAIN_MESSAGES}}function hasValidContinuationSummary(summary){let normalized=typeof summary==="string"?summary.trim():"";if(!normalized||!normalized.startsWith(CONTINUATION_SUMMARY_OPEN_TAG2)||!normalized.endsWith(CONTINUATION_SUMMARY_CLOSE_TAG2))return!1;let openCount=normalized.split(CONTINUATION_SUMMARY_OPEN_TAG2).length-1,closeCount=normalized.split(CONTINUATION_SUMMARY_CLOSE_TAG2).length-1;if(openCount!==1||closeCount!==1)return!1;return normalized.slice(CONTINUATION_SUMMARY_OPEN_TAG2.length,normalized.length-CONTINUATION_SUMMARY_CLOSE_TAG2.length).trim().length>0}async function triggerSdkManualCompaction(session){let result=await session.runCompaction({trigger:"manual"});if(result.status!=="compacted")throw createManualCompactionError(result.reasonCode??"manual_compaction_failed",result.reasonMessage??"Manual compaction failed",result);if(!hasValidContinuationSummary(result.summary))throw createManualCompactionError("invalid_summary_contract","Manual compaction did not produce a valid continuation summary",result);if(result.postSummaryFitsBudget===!1)throw createManualCompactionError("post_summary_over_budget",result.reasonMessage??"Compaction summary was applied but the projected request is still over budget",result);return result}function resolveAnthropicReasoningDefaults(modelId,opts){let target=String(modelId??"").trim();if(!target)return;let providerId=normalizeOpt(opts?.provider),explicitProvider=providerId?getBuiltinProvider(providerId):void 0,providers=explicitProvider?[explicitProvider]:listBuiltinProviders().filter((provider)=>getProviderAdapter(provider)==="anthropic");for(let provider of providers){let model=provider.models.find((m)=>String(m?.id??"").trim()===target);if(model?.reasoning?.supported&&model?.reasoning?.default)return{enabled:!0,budgetTokens:1024}}return}function isZenMuxProvider(provider){return normalizeOpt(provider)==="zenmux"}function shouldUseAnthropicReasoningDefaults(input){if(input.adapter==="anthropic")return!0;let modelId=String(input.modelId??"").trim().toLowerCase();return isZenMuxProvider(input.provider)&&modelId.startsWith("anthropic/")}function resolveRuntimeReasoningConfig(input){let defaults=shouldUseAnthropicReasoningDefaults(input)?resolveAnthropicReasoningDefaults(input.modelId,{provider:input.provider}):void 0,effort=normalizeOpt(input.reasoningEffort),interleave=input.interleavedThinking===!0;if(!defaults&&!effort&&!interleave)return;return{...defaults??{},enabled:!0,...interleave?{interleave:!0}:{},...effort?{effort}:{}}}function createManualCompactionError(code,message,result){let error48=Error(message);if(error48.code=code,result)error48.result=result;return error48}var MAX_TEXT_CHARS2=4000,SENSITIVE_KEY_NAMES=["authorization","proxyauthorization","api-key","apikey","api_key","x-api-key","x-goog-api-key","token","access_token","refresh_token","secret"];function normalizeText4(value){return typeof value==="string"?value.trim():""}function truncateText3(value){if(value.length<=MAX_TEXT_CHARS2)return value;return`${value.slice(0,MAX_TEXT_CHARS2)}...[truncated]`}function maskSecret(value){let trimmed=String(value??"").trim();if(!trimmed)return"***";return`***${trimmed.slice(-4)||""}`}function redactBearerTokens(text){return text.replace(/\bBearer\s+([^\s'",;`]+)/gi,(_match,token)=>{return`Bearer ${maskSecret(token)}`})}function redactInlineSecrets(text){let output=redactBearerTokens(text);return output=output.replace(/\b(sk-[\w-]{6,})\b/gi,(match)=>maskSecret(match)),output=output.replace(/\b([\w-]{20,})\b/g,(match)=>{let lower=match.toLowerCase();if(lower.includes("http")||lower.includes("model")||lower.includes("request"))return match;let hasLetter=/[a-z]/i.test(match),hasDigit=/\d/.test(match);return hasLetter&&hasDigit?maskSecret(match):match}),truncateText3(output)}function isSensitiveKeyName(key){let normalized=key.toLowerCase().replace(/[^a-z0-9]/g,"");return SENSITIVE_KEY_NAMES.some((candidate)=>normalized===candidate.replace(/[^a-z0-9]/g,""))}function redactStructuredValue(value,keyName){if(value==null||typeof value==="boolean"||typeof value==="number")return value;if(typeof value==="string"){if(keyName&&isSensitiveKeyName(keyName))return maskSecret(value);return redactInlineSecrets(value)}if(Array.isArray(value))return value.map((item)=>redactStructuredValue(item));if(!value||typeof value!=="object")return redactInlineSecrets(String(value));let out={};for(let[key,child]of Object.entries(value))out[key]=redactStructuredValue(child,key);return out}function statusFromSessionError(error48){return typeof error48.status==="number"&&Number.isFinite(error48.status)?error48.status:void 0}function responseBodyText(value){if(typeof value==="string")return value;let error48=value?.error;return[normalizeText4(error48?.message),normalizeText4(error48?.type),typeof error48?.code==="string"||typeof error48?.code==="number"?String(error48.code):""].filter(Boolean).join(" ")}function classifyProviderErrorReason(input){let status=input.status,haystack=`${input.message}
|
|
1028
1028
|
${responseBodyText(input.responseBody)}`.toLowerCase();if(/header\s+'[^']+'\s+has invalid value/i.test(input.message)||/invalid(?:\s+\w+){0,3}\s+header/i.test(haystack)||/cannot convert argument to a bytestring/i.test(haystack)||/bytestring/i.test(haystack)&&/bearer|authorization/i.test(haystack))return"invalid_authorization_header";if(status===401&&/unauthorized|invalid|incorrect|api key|apikey|token|bearer/i.test(haystack))return"authentication_failed";if(status===404||/\b404\b/.test(haystack)||/model_not_found|not found/.test(haystack))return"not_found";if(status===429||/\b429\b/.test(haystack)||/rate limit|rate_limit|too many requests/.test(haystack))return"rate_limited";if(/timeout|timed out|cannot connect|connect to api|fetch failed|network error|connection error|econnreset|econnrefused|enotfound|ssl|tls|handshake|certificate/.test(haystack))return"network_error";return}function normalizeReason(value){switch(String(value??"").trim()){case"authentication_failed":case"invalid_authorization_header":case"not_found":case"rate_limited":case"network_error":return value;default:return}}function headerNameFromMessage(message,reason){if(reason==="invalid_authorization_header"&&/authorization|bearer/i.test(message))return"Authorization";return}function isSessionErrorPayload(value){let payload=value;return Boolean(value)&&typeof value==="object"&&!Array.isArray(value)&&typeof payload?.code==="string"&&typeof payload?.message==="string"}function enrichSessionErrorPayload(error48){if(!isSessionErrorPayload(error48))return error48;let details=error48.details??{},responseBody=toJsonValue(redactStructuredValue(details.responseBody)),rawMessage=redactInlineSecrets(normalizeText4(details.rawMessage)||normalizeText4(error48.message)),reason=normalizeReason(details.reason)||classifyProviderErrorReason({status:statusFromSessionError(error48),message:rawMessage,responseBody}),header=headerNameFromMessage(rawMessage,reason),provider=normalizeText4(details.provider),endpoint=normalizeText4(details.endpoint),statusText=normalizeText4(details.statusText),nextDetailsInput={...details};if(reason)nextDetailsInput.reason=reason;if(provider)nextDetailsInput.provider=provider;if(endpoint)nextDetailsInput.endpoint=endpoint;if(statusText)nextDetailsInput.statusText=statusText;if(header)nextDetailsInput.header=header;if(rawMessage)nextDetailsInput.rawMessage=rawMessage;if(responseBody!==void 0)nextDetailsInput.responseBody=responseBody;let nextDetails=toJsonObject(nextDetailsInput),nextError={...error48};if(Object.keys(nextDetails).length>0)nextError.details=nextDetails;return nextError}import{randomUUID as randomUUID4}from"node:crypto";import path24 from"node:path";import process7 from"node:process";var MAX_RUN_CONTINUATIONS=2;var BACKGROUND_EXEC_SIGNAL_POLL_MS=20000;var BACKGROUND_EXEC_PROMPT_MAX_LINES=200,BACKGROUND_EXEC_PROMPT_MAX_CHARS=4000;function createEventChannel(){let values=[],readers=[],closed=!1,failed,flush=()=>{while(readers.length>0&&values.length>0){let resolve2=readers.shift();if(!resolve2)continue;let value=values.shift();resolve2({done:!1,value})}if(closed&&values.length===0)while(readers.length>0)readers.shift()?.({done:!0,value:void 0})};return{push(value){if(closed)return;values.push(value),flush()},finish(){if(closed)return;closed=!0,flush()},fail(error48){if(closed)return;closed=!0,failed=error48;while(readers.length>0)readers.shift()?.(Promise.reject(error48))},[Symbol.asyncIterator](){return{next(){if(values.length>0)return Promise.resolve({done:!1,value:values.shift()});if(failed)return Promise.reject(failed);if(closed)return Promise.resolve({done:!0,value:void 0});return new Promise((resolve2)=>readers.push(resolve2))}}}}}function createRuntimeCompletionEvidence(){return{writtenFiles:new Set,editedFiles:new Set,readFiles:new Set,globbedFiles:new Set}}function clonePersistedTodoSnapshotItems(todos){if(!Array.isArray(todos)||todos.length===0)return;return todos.map((item)=>({content:item.content,status:item.status,activeForm:item.activeForm}))}function waitForMs(ms,signal){if(ms<=0)return Promise.resolve();let abortSignal=signal;return new Promise((resolve2,reject)=>{if(abortSignal?.aborted){reject(abortSignal.reason??Error("Aborted"));return}let timeout,onAbort=()=>{clearTimeout(timeout),abortSignal?.removeEventListener("abort",onAbort),reject(abortSignal?.reason??Error("Aborted"))};timeout=setTimeout(()=>{abortSignal?.removeEventListener("abort",onAbort),resolve2()},ms),abortSignal?.addEventListener("abort",onAbort,{once:!0})})}function syncBackgroundExecFromToolResult(runState,toolCallId,draftArgs,result){let fallbackPreview=formatExecInvocationPreview(draftArgs??{})||`Process ${toolCallId}`,parsed=null,resultRecord=result??{};try{parsed=parseExecStructuredContent(resultRecord,{command:fallbackPreview,commandPreview:fallbackPreview,cwd:readTrimmedString(draftArgs?.cwd)??process7.cwd()})}catch{parsed=null}let structured=resultRecord.structuredContent??{},processId=parsed?.processId??(typeof structured.taskId==="number"?structured.taskId:null)??(typeof structured.processId==="number"?structured.processId:typeof draftArgs?.processId==="number"?draftArgs.processId:null);if(!processId||!Number.isInteger(processId)||processId<=0)return;if(parsed?.status==="running"){let existing=runState.backgroundExecsByProcessId.get(processId);runState.backgroundExecsByProcessId.set(processId,{processId,toolCallId,commandPreview:parsed.commandPreview||existing?.commandPreview||fallbackPreview,cwd:parsed.cwd||existing?.cwd||readTrimmedString(draftArgs?.cwd)||process7.cwd(),trackedAtMs:existing?.trackedAtMs??Date.now(),lastReportedAtMs:existing?.lastReportedAtMs??Date.now(),pendingStdout:`${existing?.pendingStdout??""}${parsed.stdout??""}`,pendingStderr:`${existing?.pendingStderr??""}${parsed.stderr??""}`,lastKnownStatus:"running"});return}if(runState.backgroundExecsByProcessId.delete(processId),runState.backgroundExecsByProcessId.size===0)runState.backgroundWaitStartedAtMs=void 0,runState.backgroundHeartbeatAtMs=void 0,runState.backgroundPollRoundRobinIndex=0}function readLastAssistantOrToolMessageMarker(messages){for(let index=messages.length-1;index>=0;index-=1){let message=messages[index]??{},role=readTrimmedString(message.role);if(role!=="assistant"&&role!=="tool")continue;return JSON.stringify({role,id:readTrimmedString(message.id),toolCallId:readTrimmedString(message.toolCallId??message.tool_call_id??message.callId??message.call_id),createdAt:readSnapshotNonNegativeNumber(message.createdAt)??null,content:textFromContent(message.content),toolCalls:Array.isArray(message.toolCalls)?message.toolCalls.length:0})}return""}function createRuntimeSnapshotFreshnessBaseline(snapshot){let messages=Array.isArray(snapshot.messages)?snapshot.messages:[];return{messagesLength:messages.length,updatedAt:readSnapshotNonNegativeNumber(snapshot.updatedAt)??0,lastAssistantOrToolMarker:readLastAssistantOrToolMessageMarker(messages)}}function hasFreshAssistantOrToolMessages(snapshot,baseline){let messages=Array.isArray(snapshot.messages)?snapshot.messages:[],lastAssistantOrToolMarker=readLastAssistantOrToolMessageMarker(messages);return messages.length>baseline.messagesLength||lastAssistantOrToolMarker!==baseline.lastAssistantOrToolMarker}function cloneContent(value){if(typeof value==="string")return value;if(!Array.isArray(value))return"";return value.map((part)=>{if(!part||typeof part!=="object")return{type:"text",text:String(part??"")};return{...part}})}function textFromContent(value){if(typeof value==="string")return value;if(!Array.isArray(value))return"";return value.map((part)=>{if(!part||typeof part!=="object")return"";return typeof part.text==="string"?String(part.text):""}).join("")}var AUTO_TITLE_MAX_LENGTH=60;function deriveAutoTitle(text){let cleaned=text.replace(/\s+/g," ").trim();if(!cleaned)return;let normalized=(cleaned.split(`
|
|
1029
1029
|
`).find((line)=>line.trim())??cleaned).trim().replace(/\s+/g," ");if(!normalized)return;if(normalized.length<=AUTO_TITLE_MAX_LENGTH)return normalized;return`${normalized.slice(0,AUTO_TITLE_MAX_LENGTH-1).trimEnd()}…`}function hasCompletedTodos(todos){if(!todos?.length)return!1;return todos.some((item)=>item.status==="completed")}function syncRecordTodoSnapshot(record3,todoSnapshot){record3.todoSnapshot=clonePersistedTodoSnapshotItems(todoSnapshot)}function syncTerminalRecordTodoSnapshot(record3,runState){if(hasCompletedTodos(runState.todoSnapshot)){record3.todoSnapshot=void 0;return}syncRecordTodoSnapshot(record3,runState.todoSnapshot)}function readStructuredContentPath(structuredContent){return structuredContent.filePath??structuredContent.path}function addFileEvidence(target,cwd,filePath){let normalized=readTrimmedString(filePath);if(!normalized)return;target.add(path24.normalize(path24.isAbsolute(normalized)?normalized:path24.resolve(cwd,normalized)))}function readSnapshotPositiveNumber(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<=0)return;return numeric}function normalizePositiveInteger3(value){let numeric=readSnapshotPositiveNumber(value);if(numeric===void 0)return;return Math.floor(numeric)}function readSnapshotNonNegativeNumber(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<0)return;return numeric}function readTrimmedString(value){return String(value??"").trim()||null}function readLatestRequestBudgetSnapshot(record3){return cloneLastRequestBudget(record3.activeRun?.lastRequestBudget??record3.lastRequestBudget)}function clearLastRequestBudget(record3){if(record3.lastRequestBudget=void 0,record3.activeRun)record3.activeRun.lastRequestBudget=void 0}function runtimeConfigForActiveRun(record3){return record3.activeRun?.runtimeConfig??record3.runtimeConfig}function isDuplicateRequestBudget(previous,next){return previous?.requestId===next.requestId&&previous?.estimatedInputTokens===next.estimatedInputTokens&&previous?.thresholdTokens===next.thresholdTokens&&previous?.plannedOutput===next.plannedOutput&&previous?.contextWindow===next.contextWindow&&previous?.usedAutoCompaction===next.usedAutoCompaction}function normalizeStopReason(value){if(value==="cancelled")return"cancelled";if(value==="length")return"max_tokens";return"end_turn"}function readSessionQueueItemId(value){let direct=readTrimmedString(value);if(direct)return direct;let record3=value??{};return readTrimmedString(record3.itemId??record3.id)??void 0}function cloneTurnUsageSummary(summary){return summary?structuredClone(summary):void 0}function cloneSessionUsageSummary(summary){return summary?structuredClone(summary):void 0}function cloneSessionUsageLedger(ledger){return ledger?structuredClone(ledger):void 0}function normalizeTodoSnapshotItems(value){if(!Array.isArray(value))return null;let todos=[];for(let entry of value){let record3=entry??{},content=readTrimmedString(record3.content),rawStatus=readTrimmedString(record3.status),status=rawStatus==="pending"||rawStatus==="in_progress"||rawStatus==="completed"?rawStatus:null;if(!content||!status)continue;let activeForm=readTrimmedString(record3.activeForm)??content;todos.push({content,activeForm,status})}return todos}function readTodoSnapshotFromToolResult(result){let structured=(result??{}).structuredContent??{};if(!Object.prototype.hasOwnProperty.call(structured,"todos"))return null;return normalizeTodoSnapshotItems(structured.todos)??[]}function hasOpenTodos(todos){if(!todos?.length)return!1;return todos.some((item)=>item.status!=="completed")}function renderTodoSnapshot(todos){if(!todos?.length)return["- none"];return todos.map((item)=>{return`${item.status==="completed"?"[x]":item.status==="in_progress"?"[~]":"[ ]"} ${item.content}`})}function createSessionItemOutcome(input={}){let endedOn=input.endedOn??"none";return{normalizedStopReason:input.normalizedStopReason??"end_turn",...input.rawStopReason?{rawStopReason:input.rawStopReason}:{},hadAssistantMessage:input.hadAssistantMessage??!1,hadAssistantOutput:input.hadAssistantOutput??!1,hadTextOutput:input.hadTextOutput??!1,toolCallCount:input.toolCallCount??0,toolResultCount:input.toolResultCount??0,endedOn,...endedOn==="pending_action"&&input.pendingActionKind?{pendingActionKind:input.pendingActionKind}:{},incompleteTurn:input.incompleteTurn??!1}}function withRunStateOutcome(runState,outcome){return runState.currentItemOutcome=outcome,outcome}function withOutcomePatch(runState,patch){return withRunStateOutcome(runState,createSessionItemOutcome({...runState.currentItemOutcome??createSessionItemOutcome(),...patch}))}function assistantHasVisibleOutput(message){let record3=message??{};if(textFromContent(record3.content).trim())return!0;return Boolean(readTrimmedString(record3.thinking))}function assistantHasTextOutput(message){return Boolean(textFromContent((message??{}).content).trim())}function runtimeAssistantToolCallIds(message){let record3=message??{};return(Array.isArray(record3.toolCalls)?record3.toolCalls:[]).map((entry)=>{let toolCall=entry??{};return readTrimmedString(toolCall.toolCallId??toolCall.id)}).filter((value)=>Boolean(value))}function runtimeToolMessageCallId(message){return readTrimmedString((message??{}).toolCallId)}function stripLiveOrphanedRuntimeToolMessages(messages){let out=[...messages],toRemove=new Set;for(let i=0;i<out.length;i++){let message=out[i]??{};if(message.role!=="tool")continue;let assistantMessage=null;for(let j=i-1;j>=0;j--){let candidate=out[j]??{};if(candidate.role==="assistant"){assistantMessage=candidate;break}}let toolCallId=runtimeToolMessageCallId(message);if(!toolCallId)continue;if(!(Array.isArray(assistantMessage?.toolCalls)?assistantMessage.toolCalls:[]).some((entry)=>{let toolCall=entry??{};return readTrimmedString(toolCall.toolCallId)===toolCallId||readTrimmedString(toolCall.id)===toolCallId}))toRemove.add(i)}if(toRemove.size===0)return out;return out.filter((_,index)=>!toRemove.has(index))}function stripOrphanedRuntimeToolMessages(messages){let out=[...messages],toRemove=new Set;for(let i=0;i<out.length;i++){let message=out[i]??{};if(message.role!=="tool")continue;let assistantMessage=null;for(let j=i-1;j>=0;j--){let candidate=out[j]??{};if(candidate.role==="assistant"){assistantMessage=candidate;break}}if(!assistantMessage||!Array.isArray(assistantMessage.toolCalls))continue;let toolCallId=runtimeToolMessageCallId(message);if(!toolCallId)continue;if(!assistantMessage.toolCalls.some((entry)=>{let toolCall=entry??{};return readTrimmedString(toolCall.toolCallId)===toolCallId||readTrimmedString(toolCall.id)===toolCallId}))toRemove.add(i)}if(toRemove.size===0)return out;return out.filter((_,index)=>!toRemove.has(index))}function dropSupersededIncompleteRuntimeToolRounds(messages){let assistantIndexesToDrop=new Set,toolIndexesToDrop=new Set;for(let i=0;i<messages.length;i++){let message=messages[i]??{};if(message.role!=="assistant")continue;let callIds=runtimeAssistantToolCallIds(message);if(callIds.length===0)continue;let seenToolResults=new Set,hasLaterUserTurn=!1;for(let j=i+1;j<messages.length;j++){let next=messages[j]??{};if(!next.role)continue;if(next.role==="tool"){let toolCallId=runtimeToolMessageCallId(next);if(toolCallId&&callIds.includes(toolCallId))seenToolResults.add(toolCallId);continue}if(next.role==="user"){hasLaterUserTurn=!0;break}if(next.role==="assistant")break}if(!hasLaterUserTurn)continue;if(callIds.every((callId)=>seenToolResults.has(callId)))continue;assistantIndexesToDrop.add(i);for(let j=i+1;j<messages.length;j++){let next=messages[j]??{};if(!next.role)continue;if(next.role==="tool"){let toolCallId=runtimeToolMessageCallId(next);if(toolCallId&&callIds.includes(toolCallId))toolIndexesToDrop.add(j);continue}if(next.role==="assistant"||next.role==="user")break}}if(assistantIndexesToDrop.size===0&&toolIndexesToDrop.size===0)return[...messages];return messages.filter((_,index)=>!assistantIndexesToDrop.has(index)&&!toolIndexesToDrop.has(index))}function sanitizeRuntimeTranscriptMessages(messages){let withoutOrphans=stripOrphanedRuntimeToolMessages(messages);return dropSupersededIncompleteRuntimeToolRounds(withoutOrphans)}function assistantHasUnresolvedTailToolCalls(messages,assistantIndex){let callIds=runtimeAssistantToolCallIds(messages[assistantIndex]);if(callIds.length===0)return!1;let seenToolResults=new Set;for(let i=assistantIndex+1;i<messages.length;i++){let next=messages[i]??{};if(next.role==="tool"){let toolCallId=runtimeToolMessageCallId(next);if(toolCallId&&callIds.includes(toolCallId))seenToolResults.add(toolCallId);continue}if(next.role==="assistant"||next.role==="user")break}return callIds.some((callId)=>!seenToolResults.has(callId))}function classifyIncompleteTurn(outcome){if(outcome.endedOn==="pending_action")return!1;if(outcome.normalizedStopReason==="cancelled")return!1;let rawStopReason=readTrimmedString(outcome.rawStopReason);if(rawStopReason==="error")return!1;if(outcome.normalizedStopReason==="max_tokens"||rawStopReason==="length"||rawStopReason==="max_tokens"||rawStopReason==="tool_call"||rawStopReason==="incomplete"||rawStopReason==="interrupted")return!0;if(outcome.endedOn==="assistant"&&outcome.hadAssistantOutput&&(!rawStopReason||rawStopReason==="final"||rawStopReason==="end_turn"))return!1;return!0}function sanitizeAndClassifyRuntimeTranscriptTail(messages){let sanitizedMessages=sanitizeRuntimeTranscriptMessages(messages),lastRole=null,lastAssistantIndex=-1,endedOn="none";for(let i=sanitizedMessages.length-1;i>=0;i-=1){let message=sanitizedMessages[i]??{},role=readTrimmedString(message.role);if(!role||role==="system")continue;if(!lastRole)lastRole=role;if(role==="assistant"){if(lastAssistantIndex<0)lastAssistantIndex=i;if(assistantHasVisibleOutput(message)){endedOn="assistant";break}continue}if(role==="tool"){endedOn="tool_result";break}if(role==="user"){endedOn="none";break}}let incompleteTurn=lastRole==="user"||endedOn==="tool_result"||endedOn==="none"||lastAssistantIndex>=0&&assistantHasUnresolvedTailToolCalls(sanitizedMessages,lastAssistantIndex);return{messages:sanitizedMessages,lastRole:lastRole==="assistant"||lastRole==="tool"||lastRole==="user"?lastRole:null,lastAssistantIndex,endedOn,incompleteTurn}}function sanitizeRuntimeSnapshotMessages(snapshot){let normalizedSnapshot=normalizeRuntimeSnapshotMessageContent(snapshot),messages=Array.isArray(normalizedSnapshot.messages)?normalizedSnapshot.messages:[];return{...normalizedSnapshot,messages:sanitizeAndClassifyRuntimeTranscriptTail(messages).messages}}function rawStopReasonRequiresProtocolContinuation(outcome){let rawStopReason=readTrimmedString(outcome.rawStopReason);return outcome.normalizedStopReason==="max_tokens"||rawStopReason==="length"||rawStopReason==="max_tokens"||rawStopReason==="tool_call"||rawStopReason==="incomplete"||rawStopReason==="interrupted"}function requiresProtocolContinuation(record3,outcome){if(rawStopReasonRequiresProtocolContinuation(outcome))return!0;let snapshot=record3.sdkSession?.toSnapshot(),tail=sanitizeAndClassifyRuntimeTranscriptTail(Array.isArray(snapshot?.messages)?snapshot.messages:[]);if(tail.endedOn==="tool_result")return!0;return tail.lastAssistantIndex>=0&&assistantHasUnresolvedTailToolCalls(tail.messages,tail.lastAssistantIndex)}function stripThinkingBlocksIfNeeded(session,modelId){if(modelSupportsThinkingContinuation(modelId))return;let state=session?.state;if(!state?.messages||!Array.isArray(state.messages))return;let providerStateKey="_dimProviderState";for(let message of state.messages){if(message?.role!=="assistant")continue;let providerState=message?.metadata?.[providerStateKey];if(providerState?.anthropic?.blocks)delete providerState.anthropic.blocks}}function stripOrphanedToolMessages(session){let state=session?.state;if(!state?.messages||!Array.isArray(state.messages))return;state.messages=stripLiveOrphanedRuntimeToolMessages(state.messages)}function isAbortError2(error48){return(error48 instanceof Error?error48.message:String(error48)).toLowerCase().includes("abort")}function asExecOutputPayload(value){if(!value||typeof value!=="object"||Array.isArray(value))return null;let record3=value;if(typeof record3.chunk!=="string")return null;return{chunk:record3.chunk,...typeof record3.linesWritten==="number"?{linesWritten:record3.linesWritten}:{},...record3.isStderr===!0?{isStderr:!0}:{}}}function textFromSubagentMessage2(message){if(!message||!Array.isArray(message.content))return"";return message.content.filter((block)=>Boolean(block)&&typeof block==="object"&&block.type==="text"&&typeof block.text==="string").map((block)=>block.text).join("")}function readUsageTokenCount(usage){if(!usage||typeof usage!=="object")return;let record3=usage,readNumber=(...keys)=>{for(let key of keys){let raw=record3[key];if(typeof raw==="number"&&Number.isFinite(raw))return raw;if(typeof raw==="string"){let parsed=Number(raw);if(Number.isFinite(parsed))return parsed}}return},total=readNumber("totalTokens","total_tokens");if(typeof total==="number")return total;let prompt=readNumber("promptTokens","prompt_tokens","inputTokens","input_tokens")??0,completion=readNumber("completionTokens","completion_tokens","outputTokens","output_tokens")??0;if(prompt||completion)return prompt+completion;return}function readSubagentSnapshotTokenCount(session){let snapshot=session.toSnapshot();return readUsageTokenCount(snapshot?.usage)}function countSubagentToolsUsed(events){let toolCallIds=new Set;for(let event of events){if(event.type!=="tool_call")continue;let toolCallId=String(event.toolCall?.id??"").trim();if(toolCallId)toolCallIds.add(toolCallId)}return toolCallIds.size}async function maybeCall(value){if(typeof value==="function")return await value();return value}function projectPublicSessionState(state){let nextState={sessionId:state.sessionId,...state.title===void 0?{}:{title:state.title},cwd:state.cwd,createdAt:state.createdAt,updatedAt:state.updatedAt,modeId:state.modeId,runtimeConfig:state.runtimeConfig,mcpServers:state.mcpServers,pendingAction:state.pendingAction};if(state.toolApprovalMode)nextState.toolApprovalMode=state.toolApprovalMode;if(state.lastStopReason)nextState.lastStopReason=state.lastStopReason;if(state.lastRequestBudget)nextState.lastRequestBudget=state.lastRequestBudget;if(state.snapshot)nextState.snapshot=state.snapshot;return nextState}function createRuntimeSessionControlController(deps){let wrapDeferredChannel=(factory12)=>{return{async*[Symbol.asyncIterator](){let stream=await factory12();for await(let event of stream)yield event}}},attachAbortSignal=(signal,controller)=>{if(!signal)return()=>{};if(signal.aborted)return controller.abort(signal.reason),()=>{};let onAbort=()=>controller.abort(signal.reason);return signal.addEventListener("abort",onAbort,{once:!0}),()=>signal.removeEventListener("abort",onAbort)},startRun=(record3,input,options)=>{return wrapDeferredChannel(async()=>{if(await deps.ensureLoadedSession(record3),!record3.sdkSession)throw Error(`Session ${record3.sessionId} is unavailable`);if(record3.activeRun)throw Error(`Session ${record3.sessionId} already has an active run`);let channel=createEventChannel(),runId=randomUUID4(),abortController=new AbortController,cleanupSignal=attachAbortSignal(options?.signal,abortController),runRuntimeConfig={...record3.runtimeConfig},runState={runId,rootTurnId:"",itemId:"",abortController,continuationCount:0,usedAutoCompaction:!1,initialUserInputText:textFromContent(input.content),completionEvidence:createRuntimeCompletionEvidence(),todoSnapshot:clonePersistedTodoSnapshotItems(record3.todoSnapshot),pendingSteers:[],backgroundExecsByProcessId:new Map,backgroundPollRoundRobinIndex:0,attachSignalCleanup:cleanupSignal,currentChannel:channel,runtimeConfig:runRuntimeConfig};if(record3.activeRun=runState,!record3.title){let autoTitle=deriveAutoTitle(runState.initialUserInputText);if(autoTitle)record3.title=autoTitle}try{let rootTurnId=readSessionQueueItemId(record3.sdkSession.send(input.content));if(!rootTurnId)throw Error("Session send did not return a queued item id");runState.rootTurnId=rootTurnId,runState.itemId=rootTurnId}catch(error48){throw cleanupSignal(),record3.activeRun=void 0,error48}return runState.pumpPromise=deps.sessionRunLoop.pumpRun(record3,runState),channel})},resumeRun=(record3,input,options)=>{return wrapDeferredChannel(async()=>{await deps.ensureLoadedSession(record3);let{pendingAction:pending,activeRun}=record3;if(!pending||!activeRun)throw Error(`Session ${record3.sessionId} has no pending action`);if(pending.actionId!==input.actionId)throw Error(`Unknown pending action: ${input.actionId}`);if(pending.kind!==input.kind)throw Error(`Pending action ${pending.actionId} expects ${pending.kind}`);if(input.kind==="tool_approval"&&input.alwaysAllowForConversation)record3.toolApprovalMode="auto";let channel=createEventChannel();if(activeRun.currentChannel=channel,activeRun.attachSignalCleanup?.(),activeRun.attachSignalCleanup=attachAbortSignal(options?.signal,activeRun.abortController),record3.pendingAction=void 0,input.kind==="tool_approval")pending.resolve(input.approved?{type:"approved"}:{type:"denied",reason:input.reason});else pending.resolve({...input.answers});return channel})},assertSessionIdle=(record3,operation)=>{if(record3.activeRun||record3.pendingAction)throw Error(`Session ${record3.sessionId} must be idle before ${operation}`)},cancelRecord=async(record3)=>{if(!Boolean(record3.activeRun||record3.pendingAction))return!1;let activeRun=record3.activeRun;if(record3.pendingAction?.reject(Error("Session cancelled")),record3.pendingAction=void 0,activeRun?.abortController.abort("cancelled"),activeRun?.currentChannel?.finish(),activeRun?.attachSignalCleanup?.(),activeRun)syncTerminalRecordTodoSnapshot(record3,activeRun),activeRun.currentItemOutcome=void 0,activeRun.todoSnapshot=void 0,activeRun.forcedSummaryMode=void 0,activeRun.pendingSteers.length=0,activeRun.backgroundExecsByProcessId.clear(),activeRun.backgroundWaitStartedAtMs=void 0,activeRun.backgroundHeartbeatAtMs=void 0,activeRun.backgroundPollRoundRobinIndex=0,activeRun.initialUserInputText="",activeRun.completionEvidence=createRuntimeCompletionEvidence();return record3.activeRun=void 0,record3.lastStopReason="cancelled",record3.lastModelStopReason=void 0,await deps.persistRecord(record3).catch(()=>{}),!0},syncPlanMode=async(record3)=>{let controller=record3.sdkSession?.getPlugin("plan-mode");if(!controller)return;if(record3.modeId==="plan"&&typeof controller.enable==="function"){await controller.enable();return}if(record3.modeId==="agent"&&typeof controller.disable==="function")await controller.disable()},listSessionMcpServers=async(record3)=>{if(record3.mcpServers.length>0)return record3.mcpServers.map((server)=>({...server}));return await deps.readDefaultMcpServers()};return{startRun,resumeRun,assertSessionIdle,cancelRecord,syncPlanMode,listSessionMcpServers,syncSessionMcpServers:async(record3)=>{let controller=record3.sdkSession?.getPlugin(ACP_MCP_SESSION_PLUGIN_ID);if(!controller)return;await controller.syncServers(await listSessionMcpServers(record3))}}}function createRuntimeSessionDelegationController(deps){let isNoInteractionRuntimeConfig=(config2)=>{let normalized=String(config2?.env?.DIMCODE_NO_INTERACTION??"").trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"},buildSubagentChildMetadata=(record3,task)=>{let sessionMetadata=record3.sdkSession?.getStatus().metadata,parentMetadata=structuredClone(sessionMetadata??{});return Object.assign(parentMetadata,structuredClone(record3.metadata??{})),delete parentMetadata[SUBAGENT_CHILDREN_METADATA_KEY],Object.assign(parentMetadata,task.metadata?structuredClone(task.metadata):{}),Object.assign(parentMetadata,task.overrides?.metadata?structuredClone(task.overrides.metadata):{}),parentMetadata._dimSubagent=toJsonObject({parentSessionId:record3.sdkSession?.id,taskId:task.id,taskName:task.name,role:task.role??GENERIC_SUBAGENT_TYPE,summary:task.summary}),toMetadataMap(parentMetadata)},mergePersistedSubagentChildSummary=(previous,next)=>{let merged={sessionId:next.sessionId},taskId=next.taskId??previous?.taskId,taskName=next.taskName??previous?.taskName,summary=next.summary??previous?.summary,state=next.state??previous?.state,order=next.order??previous?.order,total=next.total??previous?.total,startedAt=next.startedAt??previous?.startedAt,completedAt=next.completedAt??previous?.completedAt,durationMs=next.durationMs??previous?.durationMs,integratedAt=next.integratedAt??previous?.integratedAt,toolsUsed=next.toolsUsed??previous?.toolsUsed,tokensUsed=next.tokensUsed??previous?.tokensUsed,error48=next.error??previous?.error,updatedAt=next.updatedAt??previous?.updatedAt;if(taskId)merged.taskId=taskId;if(taskName)merged.taskName=taskName;if(summary)merged.summary=summary;if(state)merged.state=state;if(order!==void 0)merged.order=order;if(total!==void 0)merged.total=total;if(startedAt!==void 0)merged.startedAt=startedAt;if(completedAt!==void 0)merged.completedAt=completedAt;if(durationMs!==void 0)merged.durationMs=durationMs;if(integratedAt!==void 0)merged.integratedAt=integratedAt;if(toolsUsed!==void 0)merged.toolsUsed=toolsUsed;if(tokensUsed!==void 0)merged.tokensUsed=tokensUsed;if(error48)merged.error=error48;if(updatedAt!==void 0)merged.updatedAt=updatedAt;return merged},upsertPersistedSubagentChildSummary=(record3,summary)=>{let existing=[...record3.metadata[SUBAGENT_CHILDREN_METADATA_KEY]??[]],bySessionId=new Map(existing.map((child)=>[child.sessionId,child])),previous=bySessionId.get(summary.sessionId);bySessionId.set(summary.sessionId,mergePersistedSubagentChildSummary(previous,summary));let orderedSessionIds=[...existing.map((child)=>child.sessionId),...!previous?[summary.sessionId]:[]],metadata=structuredClone(record3.metadata??{});metadata[SUBAGENT_CHILDREN_METADATA_KEY]=orderedSessionIds.map((sessionId)=>bySessionId.get(sessionId)).filter((entry)=>Boolean(entry)),record3.metadata=metadata},persistParentSubagentChildSummary=async(record3,summary)=>{upsertPersistedSubagentChildSummary(record3,summary),record3.updatedAt=Date.now(),await deps.persistRecord(record3)},syncSubagentSessionMcp=async(record3,session)=>{let controller=session.getPlugin(ACP_MCP_SESSION_PLUGIN_ID);if(!controller)return;await controller.syncServers([...await deps.listSessionMcpServers(record3)])},runDelegatedSubagentTask=async(record3,task,signal,options)=>{if(!record3.sdkAgent||!record3.sdkSession)throw Error(`Session ${record3.sessionId} is unavailable`);let subagentAllowedTools=task.overrides?.allowedToolNames?.filter((name15)=>name15!==DELEGATE_TASKS_TOOL_NAME),parentChannel=record3.activeRun?.currentChannel,parentRunId=record3.activeRun?.runId??"",subagentType=String(task.role??GENERIC_SUBAGENT_TYPE),taskDescription=task.summary??task.name,forwardOutput=(stream,delta)=>{if(!delta||!parentChannel)return;parentChannel.push({type:"subagent.output",sessionId:record3.sessionId,runId:parentRunId,subagentId:task.id,subagentType,taskDescription,stream,delta})},delegatedSubagentCwd=task.overrides?.cwd??record3.sdkSession.getCwd()??record3.cwd,{pair}=await deps.createRuntimeOwnedSubagentSession(record3.runtimeConfig,{cwd:delegatedSubagentCwd,description:task.summary??task.name,ownerSessionId:record3.sessionId,allowedToolNames:subagentAllowedTools,delegateTasksEnabled:!1,askUserEnabled:!isNoInteractionRuntimeConfig(record3.runtimeConfig),approvalMode:record3.toolApprovalMode==="auto"?"auto":"default",metadata:buildSubagentChildMetadata(record3,task)}),session=pair.session,persistChildSummary=async(state,extra)=>{try{let summary={sessionId:session.id,taskId:task.id,taskName:task.name,summary:task.summary??task.name,order:options.order,total:options.total,updatedAt:typeof extra?.updatedAt==="number"?extra.updatedAt:Date.now()};if(state)summary.state=state;Object.assign(summary,extra??{}),await persistParentSubagentChildSummary(record3,summary)}catch(error48){debugLogSession(record3.sessionId,"subagent_parent_summary_persist_failed",{subagentId:task.id,childSessionId:session.id,state,error:error48 instanceof Error?error48.message:String(error48)})}},itemId,events=[],startedAt=Date.now(),finalizeOutcome=async(result)=>{let completedAt=Date.now(),toolsUsed=countSubagentToolsUsed(result.events),tokensUsed=readSubagentSnapshotTokenCount(session),durationMs=Math.max(0,completedAt-startedAt),stats={durationMs,toolsUsed};if(typeof tokensUsed==="number")stats.tokensUsed=tokensUsed;let outcome={result,output:textFromSubagentMessage2(result.message),timing:{startedAt,completedAt},stats},persistedSummary={startedAt,completedAt,durationMs,toolsUsed,updatedAt:completedAt};if(typeof tokensUsed==="number")persistedSummary.tokensUsed=tokensUsed;if(result.error)persistedSummary.error=result.error;return await persistChildSummary(result.state,persistedSummary),outcome};try{if(await persistChildSummary("running",{startedAt,updatedAt:startedAt}),await syncSubagentSessionMcp(record3,session),itemId=readSessionQueueItemId(session.send(task.input)),!itemId)throw Error("Subagent session send did not return a queued item id");for await(let event of session.receive({signal})){if(event.itemId!==itemId)continue;if(events.push(structuredClone(event)),event.type==="text_delta"&&event.delta)forwardOutput("assistant",event.delta);else if(event.type==="tool_call")forwardOutput("tool",`${event.toolCall.function.name} ${JSON.stringify(event.toolCall.function.arguments)}`);else if(event.type==="tool_result"){let toolText=typeof event.result?.structuredContent==="object"?JSON.stringify(event.result.structuredContent):event.result?.content?.map((part)=>part?.text??"").join(`
|
|
1030
1030
|
`)??"";if(toolText)forwardOutput("tool",toolText)}if(event.type==="done"){let result2={taskId:task.id,taskName:task.name,state:"completed",sessionId:session.id,itemId,role:task.role,summary:task.summary,message:event.message,events,parentEvents:[],metadata:task.metadata?structuredClone(task.metadata):void 0};return await finalizeOutcome(result2)}if(event.type==="error"){let subagentError=event.error,result2={taskId:task.id,taskName:task.name,state:"failed",sessionId:session.id,itemId,role:task.role,summary:task.summary,events,parentEvents:[],metadata:task.metadata?structuredClone(task.metadata):void 0,error:{code:typeof subagentError.code==="string"?subagentError.code:"subagent_execution_failed",message:typeof subagentError.message==="string"?subagentError.message:"Subagent execution failed"}};return await finalizeOutcome(result2)}}let result={taskId:task.id,taskName:task.name,state:"failed",sessionId:session.id,itemId,role:task.role,summary:task.summary,events,parentEvents:[],metadata:task.metadata?structuredClone(task.metadata):void 0,error:{code:"subagent_run_incomplete",message:`Subagent task ${task.id} completed without a done or error event`}};return await finalizeOutcome(result)}catch(error48){if(itemId&&signal.aborted)session.cancelQueuedItem(itemId);let subagentError=error48,result={taskId:task.id,taskName:task.name,state:isAbortError2(error48)||signal.aborted?"cancelled":"failed",sessionId:session.id,itemId,role:task.role,summary:task.summary,events,parentEvents:[],metadata:task.metadata?structuredClone(task.metadata):void 0,error:isAbortError2(error48)||signal.aborted?{code:"subagent_cancelled",message:"Subagent task was cancelled"}:{code:String(subagentError.code??"subagent_execution_failed"),message:typeof subagentError.message==="string"?String(subagentError.message):String(error48)}};return await finalizeOutcome(result)}finally{await Promise.allSettled([pair.session.dispose(),pair.agent.dispose(),disposeExecSessionProcesses(session.id)])}},emitResultCompactionNotification=async(record3,taskId,originalEstimatedChars)=>{if(!record3.sdkAgent||!record3.sdkSession)return;await record3.sdkAgent.emitNotification({type:"context.result_compacted",source:"runtime",level:"warning",message:`Compacted subagent parent commit ${taskId} due to context overflow`,metadata:{taskId,originalEstimatedChars,recoveryKind:"subagent_parent_commit"}},{sessionId:record3.sdkSession.id,status:record3.sdkSession.getStatus(),metadata:record3.sdkSession.getStatus().metadata})},commitParentInput=async(record3,runState,input)=>{if(!record3.sdkSession)return{error:Error(`Session ${record3.sessionId} is unavailable`)};stripThinkingBlocksIfNeeded(record3.sdkSession,runState.runtimeConfig?.modelId??record3.runtimeConfig.modelId),stripOrphanedToolMessages(record3.sdkSession);let sendOptions=input.metadata?{metadata:input.metadata}:void 0,sessionState=record3.sdkSession?.state,previousSessionMetadata=sessionState?.metadata?structuredClone(sessionState.metadata):void 0;if(sessionState&&input.metadata)sessionState.metadata={...previousSessionMetadata??{},...structuredClone(input.metadata)};try{if(input.steer)record3.sdkSession.steer(input.steer);let itemId=readSessionQueueItemId(record3.sdkSession.send(input.prompt,sendOptions));if(!itemId)throw Error("Parent input send did not return a queued item id");let result=await deps.processSessionItem(record3,runState,itemId,{emitRunTerminal:!1,allowDelegation:!1});if(result.error?.code==="context_compaction_required"&&input.compactedPrompt){if(await emitResultCompactionNotification(record3,input.taskId,input.prompt.length),itemId=readSessionQueueItemId(record3.sdkSession.send(input.compactedPrompt,sendOptions)),!itemId)throw Error("Compacted parent input send did not return a queued item id");result=await deps.processSessionItem(record3,runState,itemId,{emitRunTerminal:!1,allowDelegation:!1})}return result}finally{if(sessionState&&input.metadata){if(previousSessionMetadata)sessionState.metadata=previousSessionMetadata;else delete sessionState.metadata;await deps.persistRecord(record3).catch(()=>{})}}},buildSubagentReplayTaskMetadata=(task,outcome,input)=>{let metadata={taskId:task.id,taskName:task.name,state:outcome.result.state,order:input.order,total:input.total,timing:{startedAt:outcome.timing.startedAt,completedAt:outcome.timing.completedAt,durationMs:outcome.stats.durationMs},toolsUsed:outcome.stats.toolsUsed},summary=outcome.result.summary??task.summary,role=outcome.result.role??task.role,timing=metadata.timing;if(summary)metadata.summary=summary;if(role)metadata.role=role;if(outcome.result.error)metadata.error=outcome.result.error;if(typeof input.integratedAt==="number")timing.integratedAt=input.integratedAt;if(typeof outcome.stats.tokensUsed==="number")metadata.tokensUsed=outcome.stats.tokensUsed;return toMetadataMap(metadata)},buildSubagentBatchReplayMetadata=(tasks,outcomes,input)=>{let subagentTasks=outcomes.map((outcome,index)=>{let taskInput={order:index+1,total:outcomes.length};if(typeof input?.integratedAt==="number")taskInput.integratedAt=input.integratedAt;return buildSubagentReplayTaskMetadata(tasks[index],outcome,taskInput)}),normalizedTasks=toJsonValue(subagentTasks);return toMetadataMap({_dimTranscript:{visibility:"hidden",kind:"subagent_result",owner:"runtime"},_subagentResult:!0,_subagentTasks:Array.isArray(normalizedTasks)?normalizedTasks:[]})},buildSubagentBatchCompactedPrompt=(tasks,outcomes,input)=>{return outcomes.map((outcome,index)=>{let task=tasks[index];return[`Subagent batch compact result (${index+1}/${input.total})`,`Task: ${task.id}`,`State: ${outcome.result.state}`,`Summary: ${outcome.result.summary??task.summary??""}`,`Result: ${(outcome.output||outcome.result.error?.message||"").slice(0,1200)}`].filter(Boolean).join(`
|
|
@@ -1043,10 +1043,10 @@ ${rulesContent}`,baseBlocks=stripInjectedSection(existingContent,marker16);if(ty
|
|
|
1043
1043
|
|
|
1044
1044
|
`).trim();return messagesCopy[systemIndex]={...systemMessage,content:baseText?`${baseText}
|
|
1045
1045
|
|
|
1046
|
-
${injectedText}`:injectedText},messagesCopy}return messagesCopy[systemIndex]={...systemMessage,content:[...baseBlocks,{type:"text",text:injectedText}]},messagesCopy}function createAgentRulesPlugin(options){let cwdOption=options?.cwd,ruleFiles=options?.ruleFiles??[...DEFAULT_RULE_FILES],marker16=options?.marker??DEFAULT_MARKER2;return{manifest:{id:`dimcode-${options?.name??"agent_rules"}`,version:"1.0.0",apiVersion:1,permissions:{fs:"read"}},setup(){return{hooks:[{descriptor:{name:"turn.start"},middleware:[async({payload})=>{let cwd=typeof cwdOption==="function"?cwdOption():cwdOption??process10.cwd(),rulesContent=await loadRuleFiles(cwd,ruleFiles);return{...payload,messages:rulesContent?injectRulesIntoSystemMessage(payload.messages,rulesContent,marker16):payload.messages}}]}]}}}}import{AsyncLocalStorage as AsyncLocalStorage2}from"node:async_hooks";var runtimeTarget=null,KEEP={kind:"keep"};function normalizeText6(value){return String(value??"").trim()}function normalizeNonEmpty2(value){return normalizeText6(value)||void 0}function normalizeAdapter(value){return value==="openai"||value==="openai-responses"||value==="gemini"||value==="anthropic"?value:void 0}function cloneModels(models){if(!Array.isArray(models))return;return models.map((model)=>{let id=normalizeNonEmpty2(model?.id);if(!id)return null;let name15=normalizeNonEmpty2(model?.name);return{id,...name15?{name:name15}:{},...model?.limit?{limit:JSON.parse(JSON.stringify(model.limit))}:{},...typeof model?.vision==="boolean"?{vision:model.vision}:{},...model?.reasoning?{reasoning:JSON.parse(JSON.stringify(model.reasoning))}:{}}}).filter((model)=>Boolean(model))}function createTextAction(value,clear=!1){if(clear)return{kind:"clear"};if(value===void 0)return KEEP;let next=normalizeNonEmpty2(value);return next?{kind:"set",value:next}:{kind:"clear"}}function createLiteralAction(value){if(value===void 0)return KEEP;if(value===null)return{kind:"clear"};return{kind:"set",value}}function createModelsAction(models){if(models===void 0)return KEEP;if(models===null)return{kind:"clear"};return{kind:"set",value:cloneModels(models)??[]}}function resolveProviderName(providerId,explicit){let next=normalizeNonEmpty2(explicit);if(next)return next;return getProviderDisplayName(getBuiltinProvider(providerId)??{id:providerId})}function resolveWorkspaceCwd(store2,patch){return normalizeNonEmpty2(patch?.cwd)??normalizeNonEmpty2(store2?.state?.context?.cwd)??"."}function normalizeProviderUpdate(patch){if(patch.clearProviderId)return{kind:"clear"};let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return{kind:"keep"};return{kind:"set",id:providerId,name:resolveProviderName(providerId,patch.providerName),adapter:normalizeAdapter(patch.adapter)??"openai"}}function normalizeProviderConnectionPatch(patch){if(!patch)return;let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return;if(patch.clear)return{providerId,clear:!0,baseUrl:KEEP,apiKey:KEEP,models:KEEP};return{providerId,clear:!1,baseUrl:createTextAction(patch.baseUrl),apiKey:createTextAction(patch.apiKey),models:createModelsAction(patch.models)}}function normalizeInferredProviderConnectionPatch(patch,store2){if(patch.providerConnection||!patch.clearProviderId||!patch.clearBaseUrl||!patch.clearApiKey||!patch.activeModel?.clear)return;let providerId=normalizeNonEmpty2(patch.activeModel.providerId)??normalizeNonEmpty2(patch.providerId)??normalizeNonEmpty2(store2?.state?.provider?.activeId);if(!providerId)return;return{providerId,clear:!0,baseUrl:KEEP,apiKey:KEEP,models:KEEP}}function normalizeActiveModelPatch(patch){if(!patch)return;let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return;return{providerId,model:createTextAction(patch.modelId,patch.clear)}}function normalizeWorkspaceSelectionPatch(store2,patch){if(!patch)return;let cwd=resolveWorkspaceCwd(store2,patch);if(patch.clear)return{cwd,kind:"clear"};let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return;let modelId=normalizeNonEmpty2(patch.modelId);return{cwd,kind:"set",providerId,...modelId?{modelId}:{}}}function normalizeClearWorkspaceSelectionsByProvider(value){let list=Array.isArray(value)?value:value?[value]:[];return[...new Set(list.map(normalizeNonEmpty2).filter((item)=>Boolean(item)))]}function normalizeOAuthFlags(value){if(!value)return;let next={...typeof value.nextApi==="boolean"?{nextApi:value.nextApi}:{}};return Object.keys(next).length>0?next:void 0}function normalizeOAuthRuntimePatch(patch){let store2=patch.store??runtimeTarget?.getStore?.()??null,env=patch.env??(typeof process<"u"?process.env:{}),providerConnection=normalizeProviderConnectionPatch(patch.providerConnection)??normalizeInferredProviderConnectionPatch(patch,store2);return{env,store:store2,provider:normalizeProviderUpdate(patch),model:createTextAction(patch.modelId,patch.clearModel),baseUrl:createTextAction(patch.baseUrl,patch.clearBaseUrl),apiKey:createTextAction(patch.apiKey,patch.clearApiKey),authMethod:createLiteralAction(patch.authMethod),providerConnection,activeModel:normalizeActiveModelPatch(patch.activeModel),workspaceSelection:normalizeWorkspaceSelectionPatch(store2,patch.workspaceSelection),clearWorkspaceSelectionsByProvider:normalizeClearWorkspaceSelectionsByProvider(patch.clearWorkspaceSelectionsByProvider),oauthFlags:normalizeOAuthFlags(patch.oauthFlags),invalidateSession:Boolean(patch.invalidateSession)}}function applyScalarAction(target,key,action){if(action.kind==="keep")return;if(action.kind==="clear"){delete target[key];return}target[key]=action.value}function applyWorkspaceSelections(current,patch){let next={...current??{}};for(let providerId of patch.clearWorkspaceSelectionsByProvider)for(let[cwd,selection]of Object.entries(next))if(normalizeText6(selection?.providerId)===providerId)delete next[cwd];if(patch.workspaceSelection)if(patch.workspaceSelection.kind==="clear")delete next[patch.workspaceSelection.cwd];else next[patch.workspaceSelection.cwd]={providerId:patch.workspaceSelection.providerId,...patch.workspaceSelection.modelId?{modelId:patch.workspaceSelection.modelId}:{}};return Object.keys(next).length>0?next:void 0}function applyProviderConnections(current,patch){if(!patch)return current;let next={...current??{}};if(patch.clear)return delete next[patch.providerId],Object.keys(next).length>0?next:void 0;let connection={...next[patch.providerId]??{}};if(applyScalarAction(connection,"baseUrl",patch.baseUrl),applyScalarAction(connection,"apiKey",patch.apiKey),applyScalarAction(connection,"models",patch.models),Object.keys(connection).length>0)next[patch.providerId]=connection;else delete next[patch.providerId];return Object.keys(next).length>0?next:void 0}function applyActiveModels(current,patch){if(!patch)return current;let next={...current??{}};if(patch.model.kind==="set")next[patch.providerId]=patch.model.value;else if(patch.model.kind==="clear")delete next[patch.providerId];return Object.keys(next).length>0?next:void 0}function buildEnvUpdates(patch){let updates={};if(patch.provider.kind==="set")updates.DIMCODE_PROVIDER_ADAPTER=patch.provider.adapter,updates.DIMCODE_PROVIDER_ID=patch.provider.id,updates.DIMCODE_PROVIDER_NAME=patch.provider.name;else if(patch.provider.kind==="clear")updates.DIMCODE_PROVIDER_ADAPTER=void 0,updates.DIMCODE_PROVIDER_ID=void 0,updates.DIMCODE_PROVIDER_NAME=void 0;if(patch.model.kind==="set")updates.DIMCODE_MODEL=patch.model.value;else if(patch.model.kind==="clear")updates.DIMCODE_MODEL=void 0;if(patch.baseUrl.kind==="set")updates.OPENAI_BASE_URL=patch.baseUrl.value;else if(patch.baseUrl.kind==="clear")updates.OPENAI_BASE_URL=void 0;if(patch.apiKey.kind==="set")updates.OPENAI_API_KEY=patch.apiKey.value;else if(patch.apiKey.kind==="clear")updates.OPENAI_API_KEY=void 0;if(patch.oauthFlags){if(patch.oauthFlags.nextApi===!1)updates.DIMCODE_USE_NEXT_API_OAUTH=void 0}return updates}function assignEnvValue(target,key,value){let next=normalizeNonEmpty2(value);if(next)target[key]=next;else delete target[key]}function applyEnvUpdates(env,store2,updates){let procEnv=typeof process<"u"?process.env:void 0;for(let[key,value]of Object.entries(updates)){let next=normalizeNonEmpty2(value);if(store2&&typeof store2.setEnvVar==="function")store2.setEnvVar(key,next);else if(procEnv)assignEnvValue(procEnv,key,next);if(env&&env!==procEnv)assignEnvValue(env,key,next)}}function applyNormalizedPatchToCache(cache,patch){let nextSettings={...cache.settings??{}};applyScalarAction(nextSettings,"model",patch.model),applyScalarAction(nextSettings,"baseUrl",patch.baseUrl),applyScalarAction(nextSettings,"apiKey",patch.apiKey),applyScalarAction(nextSettings,"authMethod",patch.authMethod);let workspaceSelectionByCwd=applyWorkspaceSelections(nextSettings.workspaceSelectionByCwd??void 0,patch);if(workspaceSelectionByCwd)nextSettings.workspaceSelectionByCwd=workspaceSelectionByCwd;else delete nextSettings.workspaceSelectionByCwd;return{...cache,updatedAt:Date.now(),settings:nextSettings}}function applyNormalizedPatchToConfig(config2,patch){let nextSettings={...config2.settings??{}};if(patch.provider.kind==="set")nextSettings.providerId=patch.provider.id;else if(patch.provider.kind==="clear")delete nextSettings.providerId;if(patch.providerConnection){let providerConnections=applyProviderConnections(nextSettings.providerConnections,patch.providerConnection);if(providerConnections)nextSettings.providerConnections=providerConnections;else delete nextSettings.providerConnections}if(patch.activeModel){let activeModelByProvider=applyActiveModels(nextSettings.activeModelByProvider,patch.activeModel);if(activeModelByProvider)nextSettings.activeModelByProvider=activeModelByProvider;else delete nextSettings.activeModelByProvider}return{...config2,updatedAt:Date.now(),settings:nextSettings}}function applyNormalizedPatchToStore(store2,patch){if(!store2)return;let state=store2.state??{};state.config=state.config??{},state.provider=state.provider??{},state.ui=state.ui??{};let{config:config2,provider,ui}=state;if(applyScalarAction(config2,"model",patch.model),applyScalarAction(config2,"baseUrl",patch.baseUrl),applyScalarAction(config2,"apiKey",patch.apiKey),patch.provider.kind==="set")provider.activeId=patch.provider.id;else if(patch.provider.kind==="clear")delete provider.activeId;if(patch.activeModel||provider.activeModelByProvider)provider.activeModelByProvider=applyActiveModels(provider.activeModelByProvider,patch.activeModel)??{};if(patch.providerConnection||provider.connections)provider.connections=applyProviderConnections(provider.connections,patch.providerConnection)??{};if(patch.workspaceSelection||patch.clearWorkspaceSelectionsByProvider.length>0||ui.workspaceSelectionByCwd)ui.workspaceSelectionByCwd=applyWorkspaceSelections(ui.workspaceSelectionByCwd,patch)??{};applyEnvUpdates(patch.env,store2,buildEnvUpdates(patch))}function registerOAuthRuntimeSyncTarget(target){runtimeTarget=target}async function syncOAuthRuntimeState(patch){let normalized=normalizeOAuthRuntimePatch(patch),[{filePath:cachePath,cache},{filePath:configPath,config:config2}]=await Promise.all([loadDimcodeUserCache(normalized.env),loadDimcodeUserConfig(normalized.env)]),nextCache=applyNormalizedPatchToCache(cache,normalized),nextConfig=applyNormalizedPatchToConfig(config2,normalized);if(await Promise.all([saveDimcodeUserCache(cachePath,nextCache),saveDimcodeUserConfig(configPath,nextConfig)]),applyNormalizedPatchToStore(normalized.store,normalized),runtimeTarget?.updatePersistenceSnapshots?.({cache:nextCache,config:nextConfig}),normalized.invalidateSession){let sessionId=normalizeNonEmpty2(normalized.store?.state?.sessionId);if(sessionId)runtimeTarget?.invalidateSession?.(sessionId)}return{cache:nextCache,config:nextConfig}}function isPlainObject8(value){return value!=null&&typeof value==="object"&&!Array.isArray(value)}function readOpenAIResponsesTransportOptions(request){let providerOptions=request.providerOptions;if(!isPlainObject8(providerOptions))return{};let openai2=providerOptions.openai;if(!isPlainObject8(openai2))return{};let promptCacheKey=typeof openai2.promptCacheKey==="string"?openai2.promptCacheKey:void 0,requestHeaders=isPlainObject8(openai2.requestHeaders)?openai2.requestHeaders:void 0,sessionId=typeof requestHeaders?.session_id==="string"?requestHeaders.session_id:void 0;return{...promptCacheKey?{promptCacheKey}:{},...sessionId?{sessionId}:{}}}function createOpenAIResponsesTransportScope(fetchLike){let storage=new AsyncLocalStorage2,baseFetch=fetchLike??globalThis.fetch;return{fetch:Object.assign(async(input,init)=>{let options=storage.getStore();if(!options||!options.promptCacheKey&&!options.sessionId)return baseFetch(input,init);let nextInit=init;if(options.sessionId){let headers=new Headers(input instanceof Request?input.headers:void 0);if(init?.headers)new Headers(init.headers).forEach((value,key)=>headers.set(key,value));if(!headers.has("session_id"))headers.set("session_id",options.sessionId);nextInit={...nextInit,headers}}if(options.promptCacheKey&&typeof nextInit?.body==="string")try{let body=JSON.parse(nextInit.body);if(isPlainObject8(body)&&body.prompt_cache_key===void 0)nextInit={...nextInit,body:JSON.stringify({...body,prompt_cache_key:options.promptCacheKey})}}catch{}return baseFetch(input,nextInit)},{preconnect:typeof baseFetch.preconnect==="function"?baseFetch.preconnect.bind(baseFetch):void 0}),run(request,fn){let options=readOpenAIResponsesTransportOptions(request);if(!options.promptCacheKey&&!options.sessionId)return fn();return storage.run(options,fn)}}}function wrapOpenAIResponsesAdapterTransport(adapter,scope){if(!adapter||typeof adapter!=="object")return;if(typeof adapter.generate==="function"){let originalGenerate=adapter.generate.bind(adapter);adapter.generate=(request,...args)=>scope.run(request,()=>originalGenerate(request,...args))}if(typeof adapter.stream==="function"){let originalStream=adapter.stream.bind(adapter);adapter.stream=(request,...args)=>{let iterable=originalStream(request,...args);if(!iterable||typeof iterable[Symbol.asyncIterator]!=="function")return iterable;return{[Symbol.asyncIterator](){let iterator=iterable[Symbol.asyncIterator]();return{next:()=>scope.run(request,()=>iterator.next()),return:typeof iterator.return==="function"?(value)=>scope.run(request,()=>iterator.return(value)):void 0,throw:typeof iterator.throw==="function"?(error48)=>scope.run(request,()=>iterator.throw(error48)):void 0}}}}}}function injectChatParamsIntoAdapter(adapter,defaults){if(!adapter||typeof adapter!=="object")return adapter;let toInject={};for(let[k,v]of Object.entries(defaults))if(typeof v==="number"&&Number.isFinite(v))toInject[k]=v;else if(typeof v==="string"&&v.length>0)toInject[k]=v;else if(v&&typeof v==="object"&&!Array.isArray(v)&&(v.type==="enabled"||v.type==="disabled"))toInject[k]=v;if(Object.keys(toInject).length===0)return adapter;let mergeMissing=(target)=>{if(!isPlainObject8(target))return;for(let[k,v]of Object.entries(toInject))if(!(k in target))target[k]=v},wrap=(fn)=>{if(typeof fn!=="function")return fn;return(...args)=>{for(let a of args){if(!isPlainObject8(a))continue;if("body"in a&&isPlainObject8(a.body)){mergeMissing(a.body);break}if("messages"in a||"model"in a||"input"in a||"prompt"in a){mergeMissing(a);break}}return fn(...args)}};for(let name15 of["request","createChatCompletion","chat","complete","responses","completions"])if(typeof adapter[name15]==="function")adapter[name15]=wrap(adapter[name15].bind(adapter));return adapter}function getErrorStatus(err){if(typeof err?.status==="number")return err.status;if(typeof err?.cause?.status==="number")return err.cause.status;return}function isNextApiOAuthUnauthorizedError(err){if(getErrorStatus(err)===401)return!0;if((typeof err?.code==="string"?err.code:typeof err?.cause?.code==="string"?err.cause.code:"")==="openai_http_401")return!0;let message=[typeof err?.message==="string"?err.message:"",typeof err?.cause?.message==="string"?err.cause.message:""].filter(Boolean).join(" ");return/\b401\b/.test(message)||/unauthorized/i.test(message)||/invalid(?:\s+\w+){0,3}\s+token/i.test(message)||/无效的令牌/.test(message)}async function syncNextApiOAuthAccessToken(authEnv,tokens,opts={}){let accessToken=String(tokens.access??"").trim();if(!accessToken)return;let baseUrl=String(tokens.relayBaseUrl??opts.fallbackBaseUrl??"").trim(),modelId=String(opts.modelId??"").trim();try{await syncOAuthRuntimeState({env:authEnv,providerId:NEXT_API_OAUTH_PROVIDER_ID,adapter:"openai",...modelId?{modelId}:{},...baseUrl?{baseUrl}:{},apiKey:accessToken,authMethod:null,providerConnection:{providerId:NEXT_API_OAUTH_PROVIDER_ID,apiKey:accessToken,...baseUrl?{baseUrl}:{}},...modelId?{activeModel:{providerId:NEXT_API_OAUTH_PROVIDER_ID,modelId}}:{},oauthFlags:{nextApi:!0}})}catch{}}function applyAuthorizationHeader(input,init,token){let headers=new Headers(input instanceof Request?input.headers:void 0);if(init?.headers)new Headers(init.headers).forEach((value,key)=>headers.set(key,value));if(headers.set("Authorization",`Bearer ${token}`),applyNextApiOAuthIdentityHeaders(headers),input instanceof Request)return{input:new Request(input,{...init,headers})};return{input,init:{...init,headers}}}function wrapStreamWithSingleRetryOnUnauthorized(adapter,opts){if(!adapter||typeof adapter!=="object"||typeof adapter.stream!=="function")return;let originalStream=adapter.stream.bind(adapter);adapter.stream=function(...args){return async function*(){await opts.prepare();let retriedAfterUnauthorized=!1;while(!0){let emittedAnyOutput=!1;try{for await(let event of originalStream(...args))emittedAnyOutput=!0,yield event;return}catch(error48){let isUnauthorized=isNextApiOAuthUnauthorizedError(error48);if(emittedAnyOutput||retriedAfterUnauthorized||!isUnauthorized){if(isUnauthorized)try{await opts.refresh()}catch{opts.invalidate()}else opts.invalidate();throw error48}retriedAfterUnauthorized=!0,await opts.refresh()}}}()}}async function createOpenAiAdapterWithInjectedParams(createOpenAIAdapter2,createOpenAIResponsesAdapter2,cfg){let authEnv=globalThis.process?.env??{};if(cfg.nextApiOAuth===!0){let cachedTokens=await getOAuthTokens("dimcode-api-oauth",authEnv);if(!cachedTokens&&cfg.deferOAuthTokenUntilFirstRequest!==!0)throw Error("DimCode OAuth tokens not found. Please run `dim auth dimcode-api-oauth`.");let refreshAndPersistAccessToken=async(tokensIn)=>{let tokens=tokensIn??cachedTokens??await getOAuthTokens("dimcode-api-oauth",authEnv);if(!tokens)throw Error("DimCode OAuth tokens not found. Please run `dim auth dimcode-api-oauth`.");let refreshed=await refreshNextApiAccessToken(tokens);return await setOAuthTokens("dimcode-api-oauth",refreshed,authEnv),await syncNextApiOAuthAccessToken(authEnv,refreshed,{fallbackBaseUrl:cfg.baseUrl,modelId:cfg.modelId}),cachedTokens=refreshed,refreshed},ensureFreshAccessToken=async()=>{let tokens=cachedTokens??await getOAuthTokens("dimcode-api-oauth",authEnv);if(!tokens)throw Error("DimCode OAuth tokens not found. Please run `dim auth dimcode-api-oauth`.");if(tokens.expires<=Date.now()+30000)tokens=await refreshAndPersistAccessToken(tokens);return cachedTokens=tokens,tokens.access};if(cfg.deferOAuthTokenUntilFirstRequest!==!0)await ensureFreshAccessToken();let oauthFetch=async(input,init)=>{let accessToken=await ensureFreshAccessToken(),authorized=applyAuthorizationHeader(input,init,accessToken),response=await globalThis.fetch(authorized.input,authorized.init);if(response.status!==401)return response;let refreshed;try{refreshed=await refreshAndPersistAccessToken()}catch{throw cachedTokens=void 0,Error("OAuth token refresh failed after 401")}let retry=applyAuthorizationHeader(input,init,String(refreshed.access??"").trim()),retryResponse=await globalThis.fetch(retry.input,retry.init);if(retryResponse.status===401)cachedTokens=void 0;return retryResponse},responsesTransport2=cfg.adapter==="openai-responses"?createOpenAIResponsesTransportScope(oauthFetch):void 0,adapter2=cfg.adapter==="openai-responses"?createOpenAIResponsesAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey:OAUTH_DUMMY_KEY,fetch:responsesTransport2?.fetch??oauthFetch,retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}}):createOpenAIAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey:OAUTH_DUMMY_KEY,fetch:oauthFetch,retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{},compat:{interleavedThinking:cfg.interleavedThinking}});if(responsesTransport2)wrapOpenAIResponsesAdapterTransport(adapter2,responsesTransport2);return wrapStreamWithSingleRetryOnUnauthorized(adapter2,{prepare:async()=>{await ensureFreshAccessToken()},refresh:async()=>{await refreshAndPersistAccessToken()},invalidate:()=>{cachedTokens=void 0}}),injectChatParamsIntoAdapter(adapter2,{temperature:cfg.temperature,...cfg.reasoningEffort?{reasoning_effort:cfg.reasoningEffort}:{}}),wrapStreamWithRetryableErrorRetry(adapter2),adapter2}let apiKey=cfg.apiKey,identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),responsesTransport=cfg.adapter==="openai-responses"?createOpenAIResponsesTransportScope(identityFetch):void 0,adapter=cfg.adapter==="openai-responses"?createOpenAIResponsesAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey,...responsesTransport?{fetch:responsesTransport.fetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}}):createOpenAIAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey,...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{},compat:{interleavedThinking:cfg.interleavedThinking}});if(responsesTransport)wrapOpenAIResponsesAdapterTransport(adapter,responsesTransport);return injectChatParamsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens,...cfg.reasoningEffort?{reasoning_effort:cfg.reasoningEffort}:{}}),wrapStreamWithRetryableErrorRetry(adapter),adapter}async function createZenMuxAdapterWithInjectedParams(createZenMuxAdapter2,cfg){let identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),adapter=createZenMuxAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},apiKey:cfg.apiKey,...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});return injectChatParamsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens}),wrapStreamWithRetryableErrorRetry(adapter),adapter}async function createAnthropicAdapterWithInjectedParams(createAnthropicAdapter2,cfg){let identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),adapter=createAnthropicAdapter2({defaultModel:cfg.modelId,baseUrl:cfg.baseUrl,apiKey:cfg.apiKey??"",...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}}),effort=String(cfg.reasoningEffort??"").trim();return injectRequestDefaultsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens,...effort?{reasoning_effort:effort,thinking:{type:"enabled"}}:{}}),wrapStreamWithRetryableErrorRetry(adapter),adapter}function normalizeText7(value){return String(value??"").trim()}function normalizeOpt2(value){return normalizeText7(value)||void 0}function parseBool(value){let normalized=normalizeText7(value).toLowerCase();if(!normalized)return;if(normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on")return!0;if(normalized==="0"||normalized==="false"||normalized==="no"||normalized==="off")return!1;return}function parsePositiveInt(value){let normalized=normalizeText7(value);if(!normalized)return;let parsed=Number.parseInt(normalized,10);if(!Number.isFinite(parsed)||parsed<=0)return;return parsed}function cloneEnvRecord2(value){return Object.entries(value??{}).reduce((next,[key,entry])=>{return next[key]=entry,next},{})}function resolveAdapter(env){let explicit=normalizeText7(env.DIMCODE_PROVIDER_ADAPTER).toLowerCase();if(explicit==="openai"||explicit==="openai-responses"||explicit==="gemini"||explicit==="anthropic")return explicit;let hasOpenAiKey=Boolean(normalizeOpt2(env.OPENAI_API_KEY)),hasGeminiKey=Boolean(normalizeOpt2(env.GOOGLE_API_KEY)),hasAnthropicKey=Boolean(normalizeOpt2(env.ANTHROPIC_API_KEY));if(hasAnthropicKey&&!hasOpenAiKey&&!hasGeminiKey)return"anthropic";if(hasGeminiKey&&!hasOpenAiKey&&!hasAnthropicKey)return"gemini";return"openai"}function resolveRuntimeConfigFromEnv(env,opts){let adapter=resolveAdapter(env),providerId=normalizeOpt2(env.DIMCODE_PROVIDER_ID),modelId=normalizeOpt2(env.DIMCODE_MODEL)??(opts?.defaultModelId||"deepseek-v3.1"),baseUrl=normalizeOpt2(opts?.baseUrl),apiKey=adapter==="gemini"?normalizeOpt2(env.GOOGLE_API_KEY):adapter==="anthropic"?normalizeOpt2(env.ANTHROPIC_API_KEY):normalizeOpt2(env.OPENAI_API_KEY),nextApiOAuth=providerId==="dimcode-api-oauth"||parseBool(env.DIMCODE_USE_NEXT_API_OAUTH)===!0,responsesAutoPromptCacheKey=parseBool(env.DIMCODE_RESPONSES_AUTO_PROMPT_CACHE_KEY),responsesUseSessionId=parseBool(env.DIMCODE_RESPONSES_USE_SESSION_ID),reasoningEffort=normalizeOpt2(env.DIMCODE_REASONING_EFFORT),maxInputTokens=parsePositiveInt(env.DIMCODE_CONTEXT_WINDOW)??inferBuiltinModelContextWindow(modelId,adapter),maxOutputTokens=parsePositiveInt(env.DIMCODE_MAX_TOKENS),includeEnv=opts?.includeEnv!==!1;return{modelId,adapter,provider:providerId??adapter,...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...nextApiOAuth?{nextApiOAuth:!0}:{},...responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...reasoningEffort?{reasoningEffort}:{},...maxInputTokens?{maxInputTokens}:{},...maxOutputTokens?{maxOutputTokens}:{},...includeEnv?{env:{...env}}:{}}}function mergeRuntimeConfig(base,source,opts={}){let modelId=normalizeOpt2(source?.modelId)??base.modelId,adapter=normalizeOpt2(source?.adapter)??base.adapter,provider=normalizeOpt2(source?.provider)??base.provider??adapter,baseUrl=normalizeOpt2(source?.baseUrl)??base.baseUrl,apiKey=normalizeOpt2(source?.apiKey)??base.apiKey,sourceModelCapabilities=cloneModelCapabilities(source?.modelCapabilities),baseModelCapabilities=cloneModelCapabilities(base.modelCapabilities),sourceContextWindow=sourceModelCapabilities?.contextWindow??parsePositiveInt(source?.maxInputTokens),baseContextWindow=baseModelCapabilities?.contextWindow??parsePositiveInt(base.maxInputTokens),maxInputTokens=opts.preferSourceMaxInputTokens===!1?baseContextWindow??sourceContextWindow:sourceContextWindow??baseContextWindow,modelCapabilitiesBase=sourceModelCapabilities??baseModelCapabilities,modelCapabilities=modelCapabilitiesBase&&typeof maxInputTokens==="number"?{...modelCapabilitiesBase,contextWindow:maxInputTokens}:modelCapabilitiesBase,responsesAutoPromptCacheKey=typeof source?.responsesAutoPromptCacheKey==="boolean"?source.responsesAutoPromptCacheKey:base.responsesAutoPromptCacheKey,responsesUseSessionId=typeof source?.responsesUseSessionId==="boolean"?source.responsesUseSessionId:base.responsesUseSessionId,maxOutputTokens=parsePositiveInt(source?.maxOutputTokens)??base.maxOutputTokens,reasoningEffort=normalizeOpt2(source?.reasoningEffort)??base.reasoningEffort,sourceEnv=source?.env,env=sourceEnv&&typeof sourceEnv==="object"?cloneEnvRecord2(sourceEnv):base.env?cloneEnvRecord2(base.env):void 0;return{modelId,...adapter?{adapter}:{},...provider?{provider}:{},...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...source?.nextApiOAuth===!0||base.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...modelCapabilities?{modelCapabilities}:{},...reasoningEffort?{reasoningEffort}:{},...typeof maxInputTokens==="number"?{maxInputTokens}:{},...typeof maxOutputTokens==="number"?{maxOutputTokens}:{},...env?{env}:{}}}var DEFAULT_MAX_INPUT_TOKENS=128000,DEFAULT_MAX_OUTPUT_TOKENS=4000,DEFAULT_AGENT_MAX_ITERATIONS=1e4,DURABLE_COMPLETION_PROMPT=["# Task completion contract","If a task still has multiple remaining steps, keep TodoWrite current so unfinished work stays explicit.","Do not stop after a partial summary or a single completed sub-step.","Only end the current request when the task is complete, you need explicit user input, or a real external blocker prevents further work."].join(`
|
|
1047
|
-
`);function isTruthyFlag(value){let normalized=String(value??"").trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function isNoInteractionRuntimeConfig(config2){return isTruthyFlag(config2?.env?.DIMCODE_NO_INTERACTION)}function sanitizeDebugLogSessionId2(sessionId){return String(sessionId??"").trim().replace(/[^\w.-]/g,"_")||"session"}async function listRuntimeStateStoreSnapshots(snapshotStore,options){if(typeof snapshotStore.listPage==="function")return await snapshotStore.listPage(options);return{snapshots:await snapshotStore.list()}}function buildObservabilityOptions(state,sessionId){return{enabled:state.enabled,logFilePath:path29.join(state.directory,`${sanitizeDebugLogSessionId2(sessionId)}.jsonl`)}}function resolveRuntimeModelOutputLimit(config2,normalizePositiveInteger5){let provider=getBuiltinProvider(config2.provider??null),providerLimit=provider?normalizePositiveInteger5(getModelLimitForModels(provider.models,config2.modelId)?.output):void 0;if(providerLimit!==void 0)return providerLimit;let adapter=config2.adapter,bestMatch;for(let candidateProvider of listBuiltinProviders()){let candidateAdapter=getProviderAdapter(candidateProvider);if(adapter&&candidateAdapter!==adapter&&!(candidateAdapter==="openai"&&adapter==="openai-responses"||candidateAdapter==="openai-responses"&&adapter==="openai"))continue;let limit=normalizePositiveInteger5(getModelLimitForModels(candidateProvider.models,config2.modelId)?.output);if(limit===void 0)continue;if(bestMatch===void 0||limit>bestMatch)bestMatch=limit}return bestMatch??null}function readRuntimeConfigNonNegativeNumber(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<0)return;return numeric}function normalizeNonNegativeInteger4(value){let numeric=readRuntimeConfigNonNegativeNumber(value);if(numeric===void 0)return;return Math.floor(numeric)}async function buildRequestBudgetFromRequest(modelClient,request,opts,normalizePositiveInteger5){let countTokens=modelClient.adapter?.countTokens,contextWindow=normalizePositiveInteger5(opts.contextWindow),plannedOutput=normalizePositiveInteger5(request.maxOutputTokens)??normalizePositiveInteger5(opts.plannedOutput);if(typeof countTokens!=="function"||contextWindow===void 0||plannedOutput===void 0||opts.compactionOptions.enabled===!1)return;let estimatedInputTokens=normalizeNonNegativeInteger4(await countTokens(request));if(estimatedInputTokens===void 0)return;return buildCompactionBudget(opts.compactionOptions,estimatedInputTokens,{contextWindow,plannedOutput})}function buildBaseFromOptions(options,env,normalizePositiveInteger5){let adapter=options.adapter??"openai",inputModelCapabilities=cloneModelCapabilities(options.modelCapabilities),maxInputTokens=normalizePositiveInteger5(options.maxInputTokens)??inputModelCapabilities?.contextWindow??DEFAULT_MAX_INPUT_TOKENS,modelCapabilities=inputModelCapabilities?{...inputModelCapabilities,contextWindow:inputModelCapabilities.contextWindow??maxInputTokens}:void 0,maxOutputTokens=normalizePositiveInteger5(options.maxOutputTokens);return{modelId:options.modelId,adapter,provider:options.provider??adapter,...options.baseUrl?{baseUrl:options.baseUrl}:{},...options.apiKey?{apiKey:options.apiKey}:{},...modelCapabilities?{modelCapabilities}:{},maxInputTokens,...maxOutputTokens?{maxOutputTokens}:{},...options.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...options.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...options.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...env?{env:{...env}}:{}}}function resolvePersistedRuntimeContinuityFallback(persisted,base){if(!persisted)return;let persistedProvider=String(persisted.provider??"").trim(),persistedModelId=String(persisted.modelId??"").trim(),baseProvider=String(base.provider??"").trim(),baseModelId=String(base.modelId??"").trim();if(persistedProvider&&persistedProvider!==baseProvider)return;if(persistedModelId&&persistedModelId!==baseModelId)return;return{modelId:base.modelId,...persisted.modelCapabilities?{modelCapabilities:persisted.modelCapabilities}:{},...typeof persisted.maxInputTokens==="number"?{maxInputTokens:persisted.maxInputTokens}:{},...typeof persisted.maxOutputTokens==="number"?{maxOutputTokens:persisted.maxOutputTokens}:{},...persisted.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...persisted.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...persisted.reasoningEffort?{reasoningEffort:persisted.reasoningEffort}:{},...persisted.nextApiOAuth===!0?{nextApiOAuth:!0}:{}}}function resolveDefaultRuntimeConfig(options,input,normalizePositiveInteger5){if(input.requested){let base2=input.current??buildBaseFromOptions(options,void 0,normalizePositiveInteger5);return mergeRuntimeConfig(base2,input.requested,{preferSourceMaxInputTokens:!0})}let base=buildBaseFromOptions(options,input.current?.env,normalizePositiveInteger5),continuityFallback=resolvePersistedRuntimeContinuityFallback(input.persisted,base);if(!continuityFallback)return base;return mergeRuntimeConfig(base,continuityFallback,{preferSourceMaxInputTokens:!0})}function shouldPersistCanonicalSystemMessages(snapshot){let messages=Array.isArray(snapshot?.messages)?snapshot.messages:[],systemMessageCount=0;for(let message of messages){if(String(message?.role??"")!=="system")continue;if(systemMessageCount+=1,systemMessageCount>1)return!0;let content=message?.content,block=Array.isArray(content)?content[0]:void 0;if(!Array.isArray(content)||content.length!==1||!block||typeof block!=="object"||Array.isArray(block)||block.type!=="text"||typeof block.text!=="string")return!0}return!1}function canonicalizeModelRequestSystemMessages(request){let messages=Array.isArray(request.messages)?request.messages:[],canonical=canonicalizeSystemMessages({messages});if(canonical.systemMessages.length===0)return request;let firstSystemMessage=canonical.systemMessages.find((message)=>Boolean(message)&&typeof message==="object"),systemMessage={...firstSystemMessage??{},id:typeof firstSystemMessage?.id==="string"?firstSystemMessage.id:`msg:${randomUUID6()}`,createdAt:Number(firstSystemMessage?.createdAt??Date.now())||Date.now(),role:"system",content:[{type:"text",text:canonical.systemPrompt}]};return{...request,messages:[systemMessage,...canonical.messages]}}function wrapModelClientWithCanonicalSystemPrompt(client){return{...client,stream(request){return client.stream(canonicalizeModelRequestSystemMessages(request))}}}function wrapModelClientWithResponsesProviderOptions(record3,client,injectResponsesProviderOptions){return{...client,stream(request){return client.stream(injectResponsesProviderOptions(record3,request))}}}function resolveProviderHttpDebugOptions(input){if(!input.enabled)return;let sessionId=String(input.sessionId??"").trim().replace(/[^\w-]/g,"_");if(!sessionId)return;return{logFilePath:path29.join(path29.resolve(input.stateDir),"logs","provider-http",`${sessionId}.ndjson`),redactSecrets:!0}}async function createDefaultModelClient(config2,opts={}){if(isZenMuxProvider(config2.provider)){let adapter2=await createZenMuxAdapterWithInjectedParams(createZenMuxAdapter,{modelId:config2.modelId,provider:config2.provider,apiKey:config2.apiKey,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,providerDebug:opts.providerDebug});return createModel(adapter2)}if(config2.adapter==="gemini"){let adapter2=await createGeminiAdapterWithInjectedParams(createGeminiAdapter,{modelId:config2.modelId,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,providerDebug:opts.providerDebug});return createModel(adapter2)}if(config2.adapter==="anthropic"){let adapter2=await createAnthropicAdapterWithInjectedParams(createAnthropicAdapter,{modelId:config2.modelId,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,reasoningEffort:config2.reasoningEffort,providerDebug:opts.providerDebug});return createModel(adapter2)}let adapter=await createOpenAiAdapterWithInjectedParams(createOpenAIAdapter,createOpenAIResponsesAdapter,{modelId:config2.modelId,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,nextApiOAuth:config2.nextApiOAuth,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,reasoningEffort:config2.reasoningEffort,adapter:config2.adapter,providerDebug:opts.providerDebug});return createModel(adapter)}function createRuntimeSessionLoadController(deps){let hasReleasedSdkHandle=(record3)=>{let{sdkSession,sdkAgent}=record3;return sdkSession?.disposed===!0||sdkAgent?.disposed===!0},readSnapshotSystemPrompt=(snapshot)=>{let messages=Array.isArray(snapshot.messages)?snapshot.messages:[];return canonicalizeSystemMessages({messages}).systemPrompt},canonicalizeSnapshotSystemMessages=(snapshot,systemPrompt)=>{let messages=Array.isArray(snapshot.messages)?[...snapshot.messages]:[],canonical=canonicalizeSystemMessages({...typeof systemPrompt==="string"?{systemPrompt}:{},messages}),firstSystemMessage=canonical.systemMessages.find((message)=>Boolean(message)&&typeof message==="object");if(canonical.systemMessages.length===0&&typeof systemPrompt!=="string")return{...snapshot,messages:canonical.messages};let nextSystemMessage={...firstSystemMessage??{},id:typeof firstSystemMessage?.id==="string"?firstSystemMessage.id:`msg:${randomUUID6()}`,role:"system",content:[{type:"text",text:canonical.systemPrompt}],createdAt:Number(firstSystemMessage?.createdAt??Date.now())||Date.now()};return{...snapshot,messages:[nextSystemMessage,...canonical.messages]}},withUpdatedSystemPrompt=(snapshot,systemPrompt)=>{return canonicalizeSnapshotSystemMessages(snapshot,systemPrompt)},wrapSdkSnapshotForSave=(record3,snapshot)=>{return applyEnvelope(canonicalizeSnapshotSystemMessages(deps.sanitizeRuntimeSnapshotMessages(snapshot)),createRuntimeSessionEnvelope(record3),record3.cwd,record3.metadata)},createModelClientForRuntimeConfig=async(runtimeConfig,sessionId,record3)=>{let providerDebug=resolveProviderHttpDebugOptions({enabled:deps.options.debug===!0,stateDir:deps.options.stateDir,sessionId});if(providerDebug&&!deps.options.createModelClient)debugLog("runtime_provider_http_debug",{sessionId,adapter:runtimeConfig.adapter??"openai",modelId:runtimeConfig.modelId,logFilePath:providerDebug.logFilePath});let client=deps.options.createModelClient?await deps.options.createModelClient(runtimeConfig):await createDefaultModelClient(runtimeConfig,{providerDebug});return wrapModelClientWithCanonicalSystemPrompt(wrapModelClientWithResponsesProviderOptions(record3??{runtimeConfig},client,deps.injectResponsesProviderOptions))},createModelClient=async(record3)=>await createModelClientForRuntimeConfig(runtimeConfigForActiveRun(record3),record3.sessionId,record3),resolveWebsearchToolConfig=async()=>{let base=deps.options.tools?.websearch?{apiKey:typeof deps.options.tools.websearch.apiKey==="function"?deps.options.tools.websearch.apiKey():deps.options.tools.websearch.apiKey,apiEndpoint:deps.options.tools.websearch.apiEndpoint,numResults:deps.options.tools.websearch.numResults}:{};if(!deps.options.resolveWebsearchToolConfig)return base;return{...base,...await deps.options.resolveWebsearchToolConfig()}},resolveWebsearchToolConfigState=async()=>{let config2=await resolveWebsearchToolConfig();return{config:config2,key:JSON.stringify({apiKey:typeof config2.apiKey==="string"?config2.apiKey:"",apiEndpoint:typeof config2.apiEndpoint==="string"?config2.apiEndpoint:"",numResults:typeof config2.numResults==="number"&&Number.isFinite(config2.numResults)?config2.numResults:null})}},buildSystemPrompt=async(cwd)=>{return`${deps.options.buildSystemPrompt?await deps.options.buildSystemPrompt(cwd):deps.options.systemPrompt??"You are a helpful coding agent."}
|
|
1046
|
+
${injectedText}`:injectedText},messagesCopy}return messagesCopy[systemIndex]={...systemMessage,content:[...baseBlocks,{type:"text",text:injectedText}]},messagesCopy}function createAgentRulesPlugin(options){let cwdOption=options?.cwd,ruleFiles=options?.ruleFiles??[...DEFAULT_RULE_FILES],marker16=options?.marker??DEFAULT_MARKER2;return{manifest:{id:`dimcode-${options?.name??"agent_rules"}`,version:"1.0.0",apiVersion:1,permissions:{fs:"read"}},setup(){return{hooks:[{descriptor:{name:"turn.start"},middleware:[async({payload})=>{let cwd=typeof cwdOption==="function"?cwdOption():cwdOption??process10.cwd(),rulesContent=await loadRuleFiles(cwd,ruleFiles);return{...payload,messages:rulesContent?injectRulesIntoSystemMessage(payload.messages,rulesContent,marker16):payload.messages}}]}]}}}}import{AsyncLocalStorage as AsyncLocalStorage2}from"node:async_hooks";var runtimeTarget=null,KEEP={kind:"keep"};function normalizeText6(value){return String(value??"").trim()}function normalizeNonEmpty2(value){return normalizeText6(value)||void 0}function normalizeAdapter(value){return value==="openai"||value==="openai-responses"||value==="gemini"||value==="anthropic"?value:void 0}function cloneModels(models){if(!Array.isArray(models))return;return models.map((model)=>{let id=normalizeNonEmpty2(model?.id);if(!id)return null;let name15=normalizeNonEmpty2(model?.name);return{id,...name15?{name:name15}:{},...model?.limit?{limit:JSON.parse(JSON.stringify(model.limit))}:{},...typeof model?.vision==="boolean"?{vision:model.vision}:{},...model?.reasoning?{reasoning:JSON.parse(JSON.stringify(model.reasoning))}:{}}}).filter((model)=>Boolean(model))}function createTextAction(value,clear=!1){if(clear)return{kind:"clear"};if(value===void 0)return KEEP;let next=normalizeNonEmpty2(value);return next?{kind:"set",value:next}:{kind:"clear"}}function createLiteralAction(value){if(value===void 0)return KEEP;if(value===null)return{kind:"clear"};return{kind:"set",value}}function createModelsAction(models){if(models===void 0)return KEEP;if(models===null)return{kind:"clear"};return{kind:"set",value:cloneModels(models)??[]}}function resolveProviderName(providerId,explicit){let next=normalizeNonEmpty2(explicit);if(next)return next;return getProviderDisplayName(getBuiltinProvider(providerId)??{id:providerId})}function resolveWorkspaceCwd(store2,patch){return normalizeNonEmpty2(patch?.cwd)??normalizeNonEmpty2(store2?.state?.context?.cwd)??"."}function normalizeProviderUpdate(patch){if(patch.clearProviderId)return{kind:"clear"};let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return{kind:"keep"};return{kind:"set",id:providerId,name:resolveProviderName(providerId,patch.providerName),adapter:normalizeAdapter(patch.adapter)??"openai"}}function normalizeProviderConnectionPatch(patch){if(!patch)return;let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return;if(patch.clear)return{providerId,clear:!0,baseUrl:KEEP,apiKey:KEEP,models:KEEP};return{providerId,clear:!1,baseUrl:createTextAction(patch.baseUrl),apiKey:createTextAction(patch.apiKey),models:createModelsAction(patch.models)}}function normalizeInferredProviderConnectionPatch(patch,store2){if(patch.providerConnection||!patch.clearProviderId||!patch.clearBaseUrl||!patch.clearApiKey||!patch.activeModel?.clear)return;let providerId=normalizeNonEmpty2(patch.activeModel.providerId)??normalizeNonEmpty2(patch.providerId)??normalizeNonEmpty2(store2?.state?.provider?.activeId);if(!providerId)return;return{providerId,clear:!0,baseUrl:KEEP,apiKey:KEEP,models:KEEP}}function normalizeActiveModelPatch(patch){if(!patch)return;let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return;return{providerId,model:createTextAction(patch.modelId,patch.clear)}}function normalizeWorkspaceSelectionPatch(store2,patch){if(!patch)return;let cwd=resolveWorkspaceCwd(store2,patch);if(patch.clear)return{cwd,kind:"clear"};let providerId=normalizeNonEmpty2(patch.providerId);if(!providerId)return;let modelId=normalizeNonEmpty2(patch.modelId);return{cwd,kind:"set",providerId,...modelId?{modelId}:{}}}function normalizeClearWorkspaceSelectionsByProvider(value){let list=Array.isArray(value)?value:value?[value]:[];return[...new Set(list.map(normalizeNonEmpty2).filter((item)=>Boolean(item)))]}function normalizeOAuthFlags(value){if(!value)return;let next={...typeof value.nextApi==="boolean"?{nextApi:value.nextApi}:{}};return Object.keys(next).length>0?next:void 0}function normalizeOAuthRuntimePatch(patch){let store2=patch.store??runtimeTarget?.getStore?.()??null,env=patch.env??(typeof process<"u"?process.env:{}),providerConnection=normalizeProviderConnectionPatch(patch.providerConnection)??normalizeInferredProviderConnectionPatch(patch,store2);return{env,store:store2,provider:normalizeProviderUpdate(patch),model:createTextAction(patch.modelId,patch.clearModel),baseUrl:createTextAction(patch.baseUrl,patch.clearBaseUrl),apiKey:createTextAction(patch.apiKey,patch.clearApiKey),authMethod:createLiteralAction(patch.authMethod),providerConnection,activeModel:normalizeActiveModelPatch(patch.activeModel),workspaceSelection:normalizeWorkspaceSelectionPatch(store2,patch.workspaceSelection),clearWorkspaceSelectionsByProvider:normalizeClearWorkspaceSelectionsByProvider(patch.clearWorkspaceSelectionsByProvider),oauthFlags:normalizeOAuthFlags(patch.oauthFlags),invalidateSession:Boolean(patch.invalidateSession)}}function applyScalarAction(target,key,action){if(action.kind==="keep")return;if(action.kind==="clear"){delete target[key];return}target[key]=action.value}function applyWorkspaceSelections(current,patch){let next={...current??{}};for(let providerId of patch.clearWorkspaceSelectionsByProvider)for(let[cwd,selection]of Object.entries(next))if(normalizeText6(selection?.providerId)===providerId)delete next[cwd];if(patch.workspaceSelection)if(patch.workspaceSelection.kind==="clear")delete next[patch.workspaceSelection.cwd];else next[patch.workspaceSelection.cwd]={providerId:patch.workspaceSelection.providerId,...patch.workspaceSelection.modelId?{modelId:patch.workspaceSelection.modelId}:{}};return Object.keys(next).length>0?next:void 0}function applyProviderConnections(current,patch){if(!patch)return current;let next={...current??{}};if(patch.clear)return delete next[patch.providerId],Object.keys(next).length>0?next:void 0;let connection={...next[patch.providerId]??{}};if(applyScalarAction(connection,"baseUrl",patch.baseUrl),applyScalarAction(connection,"apiKey",patch.apiKey),applyScalarAction(connection,"models",patch.models),Object.keys(connection).length>0)next[patch.providerId]=connection;else delete next[patch.providerId];return Object.keys(next).length>0?next:void 0}function applyActiveModels(current,patch){if(!patch)return current;let next={...current??{}};if(patch.model.kind==="set")next[patch.providerId]=patch.model.value;else if(patch.model.kind==="clear")delete next[patch.providerId];return Object.keys(next).length>0?next:void 0}function buildEnvUpdates(patch){let updates={};if(patch.provider.kind==="set")updates.DIMCODE_PROVIDER_ADAPTER=patch.provider.adapter,updates.DIMCODE_PROVIDER_ID=patch.provider.id,updates.DIMCODE_PROVIDER_NAME=patch.provider.name;else if(patch.provider.kind==="clear")updates.DIMCODE_PROVIDER_ADAPTER=void 0,updates.DIMCODE_PROVIDER_ID=void 0,updates.DIMCODE_PROVIDER_NAME=void 0;if(patch.model.kind==="set")updates.DIMCODE_MODEL=patch.model.value;else if(patch.model.kind==="clear")updates.DIMCODE_MODEL=void 0;if(patch.baseUrl.kind==="set")updates.OPENAI_BASE_URL=patch.baseUrl.value;else if(patch.baseUrl.kind==="clear")updates.OPENAI_BASE_URL=void 0;if(patch.apiKey.kind==="set")updates.OPENAI_API_KEY=patch.apiKey.value;else if(patch.apiKey.kind==="clear")updates.OPENAI_API_KEY=void 0;if(patch.oauthFlags){if(patch.oauthFlags.nextApi===!1)updates.DIMCODE_USE_NEXT_API_OAUTH=void 0}return updates}function assignEnvValue(target,key,value){let next=normalizeNonEmpty2(value);if(next)target[key]=next;else delete target[key]}function applyEnvUpdates(env,store2,updates){let procEnv=typeof process<"u"?process.env:void 0;for(let[key,value]of Object.entries(updates)){let next=normalizeNonEmpty2(value);if(store2&&typeof store2.setEnvVar==="function")store2.setEnvVar(key,next);else if(procEnv)assignEnvValue(procEnv,key,next);if(env&&env!==procEnv)assignEnvValue(env,key,next)}}function applyNormalizedPatchToCache(cache,patch){let nextSettings={...cache.settings??{}};applyScalarAction(nextSettings,"model",patch.model),applyScalarAction(nextSettings,"baseUrl",patch.baseUrl),applyScalarAction(nextSettings,"apiKey",patch.apiKey),applyScalarAction(nextSettings,"authMethod",patch.authMethod);let workspaceSelectionByCwd=applyWorkspaceSelections(nextSettings.workspaceSelectionByCwd??void 0,patch);if(workspaceSelectionByCwd)nextSettings.workspaceSelectionByCwd=workspaceSelectionByCwd;else delete nextSettings.workspaceSelectionByCwd;return{...cache,updatedAt:Date.now(),settings:nextSettings}}function applyNormalizedPatchToConfig(config2,patch){let nextSettings={...config2.settings??{}};if(patch.provider.kind==="set")nextSettings.providerId=patch.provider.id;else if(patch.provider.kind==="clear")delete nextSettings.providerId;if(patch.providerConnection){let providerConnections=applyProviderConnections(nextSettings.providerConnections,patch.providerConnection);if(providerConnections)nextSettings.providerConnections=providerConnections;else delete nextSettings.providerConnections}if(patch.activeModel){let activeModelByProvider=applyActiveModels(nextSettings.activeModelByProvider,patch.activeModel);if(activeModelByProvider)nextSettings.activeModelByProvider=activeModelByProvider;else delete nextSettings.activeModelByProvider}return{...config2,updatedAt:Date.now(),settings:nextSettings}}function applyNormalizedPatchToStore(store2,patch){if(!store2)return;let state=store2.state??{};state.config=state.config??{},state.provider=state.provider??{},state.ui=state.ui??{};let{config:config2,provider,ui}=state;if(applyScalarAction(config2,"model",patch.model),applyScalarAction(config2,"baseUrl",patch.baseUrl),applyScalarAction(config2,"apiKey",patch.apiKey),patch.provider.kind==="set")provider.activeId=patch.provider.id;else if(patch.provider.kind==="clear")delete provider.activeId;if(patch.activeModel||provider.activeModelByProvider)provider.activeModelByProvider=applyActiveModels(provider.activeModelByProvider,patch.activeModel)??{};if(patch.providerConnection||provider.connections)provider.connections=applyProviderConnections(provider.connections,patch.providerConnection)??{};if(patch.workspaceSelection||patch.clearWorkspaceSelectionsByProvider.length>0||ui.workspaceSelectionByCwd)ui.workspaceSelectionByCwd=applyWorkspaceSelections(ui.workspaceSelectionByCwd,patch)??{};applyEnvUpdates(patch.env,store2,buildEnvUpdates(patch))}function registerOAuthRuntimeSyncTarget(target){runtimeTarget=target}async function syncOAuthRuntimeState(patch){let normalized=normalizeOAuthRuntimePatch(patch),[{filePath:cachePath,cache},{filePath:configPath,config:config2}]=await Promise.all([loadDimcodeUserCache(normalized.env),loadDimcodeUserConfig(normalized.env)]),nextCache=applyNormalizedPatchToCache(cache,normalized),nextConfig=applyNormalizedPatchToConfig(config2,normalized);if(await Promise.all([saveDimcodeUserCache(cachePath,nextCache),saveDimcodeUserConfig(configPath,nextConfig)]),applyNormalizedPatchToStore(normalized.store,normalized),runtimeTarget?.updatePersistenceSnapshots?.({cache:nextCache,config:nextConfig}),normalized.invalidateSession){let sessionId=normalizeNonEmpty2(normalized.store?.state?.sessionId);if(sessionId)runtimeTarget?.invalidateSession?.(sessionId)}return{cache:nextCache,config:nextConfig}}function isPlainObject8(value){return value!=null&&typeof value==="object"&&!Array.isArray(value)}function readOpenAIResponsesTransportOptions(request){let providerOptions=request.providerOptions;if(!isPlainObject8(providerOptions))return{};let openai2=providerOptions.openai;if(!isPlainObject8(openai2))return{};let promptCacheKey=typeof openai2.promptCacheKey==="string"?openai2.promptCacheKey:void 0,requestHeaders=isPlainObject8(openai2.requestHeaders)?openai2.requestHeaders:void 0,sessionId=typeof requestHeaders?.session_id==="string"?requestHeaders.session_id:void 0;return{...promptCacheKey?{promptCacheKey}:{},...sessionId?{sessionId}:{}}}function createOpenAIResponsesTransportScope(fetchLike){let storage=new AsyncLocalStorage2,baseFetch=fetchLike??globalThis.fetch;return{fetch:Object.assign(async(input,init)=>{let options=storage.getStore();if(!options||!options.promptCacheKey&&!options.sessionId)return baseFetch(input,init);let nextInit=init;if(options.sessionId){let headers=new Headers(input instanceof Request?input.headers:void 0);if(init?.headers)new Headers(init.headers).forEach((value,key)=>headers.set(key,value));if(!headers.has("session_id"))headers.set("session_id",options.sessionId);nextInit={...nextInit,headers}}if(options.promptCacheKey&&typeof nextInit?.body==="string")try{let body=JSON.parse(nextInit.body);if(isPlainObject8(body)&&body.prompt_cache_key===void 0)nextInit={...nextInit,body:JSON.stringify({...body,prompt_cache_key:options.promptCacheKey})}}catch{}return baseFetch(input,nextInit)},{preconnect:typeof baseFetch.preconnect==="function"?baseFetch.preconnect.bind(baseFetch):void 0}),run(request,fn){let options=readOpenAIResponsesTransportOptions(request);if(!options.promptCacheKey&&!options.sessionId)return fn();return storage.run(options,fn)}}}function wrapOpenAIResponsesAdapterTransport(adapter,scope){if(!adapter||typeof adapter!=="object")return;if(typeof adapter.generate==="function"){let originalGenerate=adapter.generate.bind(adapter);adapter.generate=(request,...args)=>scope.run(request,()=>originalGenerate(request,...args))}if(typeof adapter.stream==="function"){let originalStream=adapter.stream.bind(adapter);adapter.stream=(request,...args)=>{let iterable=originalStream(request,...args);if(!iterable||typeof iterable[Symbol.asyncIterator]!=="function")return iterable;return{[Symbol.asyncIterator](){let iterator=iterable[Symbol.asyncIterator]();return{next:()=>scope.run(request,()=>iterator.next()),return:typeof iterator.return==="function"?(value)=>scope.run(request,()=>iterator.return(value)):void 0,throw:typeof iterator.throw==="function"?(error48)=>scope.run(request,()=>iterator.throw(error48)):void 0}}}}}}function injectChatParamsIntoAdapter(adapter,defaults){if(!adapter||typeof adapter!=="object")return adapter;let toInject={};for(let[k,v]of Object.entries(defaults))if(typeof v==="number"&&Number.isFinite(v))toInject[k]=v;else if(typeof v==="string"&&v.length>0)toInject[k]=v;else if(v&&typeof v==="object"&&!Array.isArray(v)&&(v.type==="enabled"||v.type==="disabled"))toInject[k]=v;if(Object.keys(toInject).length===0)return adapter;let mergeMissing=(target)=>{if(!isPlainObject8(target))return;for(let[k,v]of Object.entries(toInject))if(!(k in target))target[k]=v},wrap=(fn)=>{if(typeof fn!=="function")return fn;return(...args)=>{for(let a of args){if(!isPlainObject8(a))continue;if("body"in a&&isPlainObject8(a.body)){mergeMissing(a.body);break}if("messages"in a||"model"in a||"input"in a||"prompt"in a){mergeMissing(a);break}}return fn(...args)}};for(let name15 of["request","createChatCompletion","chat","complete","responses","completions"])if(typeof adapter[name15]==="function")adapter[name15]=wrap(adapter[name15].bind(adapter));return adapter}function getErrorStatus(err){if(typeof err?.status==="number")return err.status;if(typeof err?.cause?.status==="number")return err.cause.status;return}function isNextApiOAuthUnauthorizedError(err){if(getErrorStatus(err)===401)return!0;if((typeof err?.code==="string"?err.code:typeof err?.cause?.code==="string"?err.cause.code:"")==="openai_http_401")return!0;let message=[typeof err?.message==="string"?err.message:"",typeof err?.cause?.message==="string"?err.cause.message:""].filter(Boolean).join(" ");return/\b401\b/.test(message)||/unauthorized/i.test(message)||/invalid(?:\s+\w+){0,3}\s+token/i.test(message)||/无效的令牌/.test(message)}async function syncNextApiOAuthAccessToken(authEnv,tokens,opts={}){let accessToken=String(tokens.access??"").trim();if(!accessToken)return;let baseUrl=String(tokens.relayBaseUrl??opts.fallbackBaseUrl??"").trim(),modelId=String(opts.modelId??"").trim();try{await syncOAuthRuntimeState({env:authEnv,providerId:NEXT_API_OAUTH_PROVIDER_ID,adapter:"openai",...modelId?{modelId}:{},...baseUrl?{baseUrl}:{},apiKey:accessToken,authMethod:null,providerConnection:{providerId:NEXT_API_OAUTH_PROVIDER_ID,apiKey:accessToken,...baseUrl?{baseUrl}:{}},...modelId?{activeModel:{providerId:NEXT_API_OAUTH_PROVIDER_ID,modelId}}:{},oauthFlags:{nextApi:!0}})}catch{}}function applyAuthorizationHeader(input,init,token){let headers=new Headers(input instanceof Request?input.headers:void 0);if(init?.headers)new Headers(init.headers).forEach((value,key)=>headers.set(key,value));if(headers.set("Authorization",`Bearer ${token}`),applyNextApiOAuthIdentityHeaders(headers),input instanceof Request)return{input:new Request(input,{...init,headers})};return{input,init:{...init,headers}}}function wrapStreamWithSingleRetryOnUnauthorized(adapter,opts){if(!adapter||typeof adapter!=="object"||typeof adapter.stream!=="function")return;let originalStream=adapter.stream.bind(adapter);adapter.stream=function(...args){return async function*(){await opts.prepare();let retriedAfterUnauthorized=!1;while(!0){let emittedAnyOutput=!1;try{for await(let event of originalStream(...args))emittedAnyOutput=!0,yield event;return}catch(error48){let isUnauthorized=isNextApiOAuthUnauthorizedError(error48);if(emittedAnyOutput||retriedAfterUnauthorized||!isUnauthorized){if(isUnauthorized)try{await opts.refresh()}catch{opts.invalidate()}else opts.invalidate();throw error48}retriedAfterUnauthorized=!0,await opts.refresh()}}}()}}async function createOpenAiAdapterWithInjectedParams(createOpenAIAdapter2,createOpenAIResponsesAdapter2,cfg){let authEnv=globalThis.process?.env??{};if(cfg.nextApiOAuth===!0){let cachedTokens=await getOAuthTokens("dimcode-api-oauth",authEnv);if(!cachedTokens&&cfg.deferOAuthTokenUntilFirstRequest!==!0)throw Error("DimCode OAuth tokens not found. Please run `dim auth dimcode-api-oauth`.");let refreshAndPersistAccessToken=async(tokensIn)=>{let tokens=tokensIn??cachedTokens??await getOAuthTokens("dimcode-api-oauth",authEnv);if(!tokens)throw Error("DimCode OAuth tokens not found. Please run `dim auth dimcode-api-oauth`.");let refreshed=await refreshNextApiAccessToken(tokens);return await setOAuthTokens("dimcode-api-oauth",refreshed,authEnv),await syncNextApiOAuthAccessToken(authEnv,refreshed,{fallbackBaseUrl:cfg.baseUrl,modelId:cfg.modelId}),cachedTokens=refreshed,refreshed},ensureFreshAccessToken=async()=>{let tokens=cachedTokens??await getOAuthTokens("dimcode-api-oauth",authEnv);if(!tokens)throw Error("DimCode OAuth tokens not found. Please run `dim auth dimcode-api-oauth`.");if(tokens.expires<=Date.now()+30000)tokens=await refreshAndPersistAccessToken(tokens);return cachedTokens=tokens,tokens.access};if(cfg.deferOAuthTokenUntilFirstRequest!==!0)await ensureFreshAccessToken();let oauthFetch=async(input,init)=>{let accessToken=await ensureFreshAccessToken(),authorized=applyAuthorizationHeader(input,init,accessToken),response=await globalThis.fetch(authorized.input,authorized.init);if(response.status!==401)return response;let refreshed;try{refreshed=await refreshAndPersistAccessToken()}catch{throw cachedTokens=void 0,Error("OAuth token refresh failed after 401")}let retry=applyAuthorizationHeader(input,init,String(refreshed.access??"").trim()),retryResponse=await globalThis.fetch(retry.input,retry.init);if(retryResponse.status===401)cachedTokens=void 0;return retryResponse},responsesTransport2=cfg.adapter==="openai-responses"?createOpenAIResponsesTransportScope(oauthFetch):void 0,adapter2=cfg.adapter==="openai-responses"?createOpenAIResponsesAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey:OAUTH_DUMMY_KEY,fetch:responsesTransport2?.fetch??oauthFetch,retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}}):createOpenAIAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey:OAUTH_DUMMY_KEY,fetch:oauthFetch,retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});if(responsesTransport2)wrapOpenAIResponsesAdapterTransport(adapter2,responsesTransport2);return wrapStreamWithSingleRetryOnUnauthorized(adapter2,{prepare:async()=>{await ensureFreshAccessToken()},refresh:async()=>{await refreshAndPersistAccessToken()},invalidate:()=>{cachedTokens=void 0}}),injectChatParamsIntoAdapter(adapter2,{temperature:cfg.temperature}),wrapStreamWithRetryableErrorRetry(adapter2),adapter2}let apiKey=cfg.apiKey,identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),responsesTransport=cfg.adapter==="openai-responses"?createOpenAIResponsesTransportScope(identityFetch):void 0,adapter=cfg.adapter==="openai-responses"?createOpenAIResponsesAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey,...responsesTransport?{fetch:responsesTransport.fetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}}):createOpenAIAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},baseUrl:cfg.baseUrl,apiKey,...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});if(responsesTransport)wrapOpenAIResponsesAdapterTransport(adapter,responsesTransport);return injectChatParamsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens}),wrapStreamWithRetryableErrorRetry(adapter),adapter}async function createZenMuxAdapterWithInjectedParams(createZenMuxAdapter2,cfg){let identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),adapter=createZenMuxAdapter2({defaultModel:cfg.modelId,...cfg.provider?{provider:cfg.provider}:{},apiKey:cfg.apiKey,...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});return injectChatParamsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens}),wrapStreamWithRetryableErrorRetry(adapter),adapter}async function createAnthropicAdapterWithInjectedParams(createAnthropicAdapter2,cfg){let identityFetch=wrapFetchWithDimCodeIdentityHeaders(cfg.provider),adapter=createAnthropicAdapter2({defaultModel:cfg.modelId,baseUrl:cfg.baseUrl,apiKey:cfg.apiKey??"",...identityFetch?{fetch:identityFetch}:{},retry:{maxRetries:0},...cfg.modelCapabilities?{capabilities:cfg.modelCapabilities}:{},...cfg.providerDebug?{debug:cfg.providerDebug}:{}});return injectRequestDefaultsIntoAdapter(adapter,{temperature:cfg.temperature,maxOutputTokens:cfg.maxOutputTokens}),wrapStreamWithRetryableErrorRetry(adapter),adapter}function normalizeText7(value){return String(value??"").trim()}function normalizeOpt2(value){return normalizeText7(value)||void 0}function parseBool(value){let normalized=normalizeText7(value).toLowerCase();if(!normalized)return;if(normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on")return!0;if(normalized==="0"||normalized==="false"||normalized==="no"||normalized==="off")return!1;return}function parsePositiveInt(value){let normalized=normalizeText7(value);if(!normalized)return;let parsed=Number.parseInt(normalized,10);if(!Number.isFinite(parsed)||parsed<=0)return;return parsed}function cloneEnvRecord2(value){return Object.entries(value??{}).reduce((next,[key,entry])=>{return next[key]=entry,next},{})}function resolveAdapter(env){let explicit=normalizeText7(env.DIMCODE_PROVIDER_ADAPTER).toLowerCase();if(explicit==="openai"||explicit==="openai-responses"||explicit==="gemini"||explicit==="anthropic")return explicit;let hasOpenAiKey=Boolean(normalizeOpt2(env.OPENAI_API_KEY)),hasGeminiKey=Boolean(normalizeOpt2(env.GOOGLE_API_KEY)),hasAnthropicKey=Boolean(normalizeOpt2(env.ANTHROPIC_API_KEY));if(hasAnthropicKey&&!hasOpenAiKey&&!hasGeminiKey)return"anthropic";if(hasGeminiKey&&!hasOpenAiKey&&!hasAnthropicKey)return"gemini";return"openai"}function resolveRuntimeConfigFromEnv(env,opts){let adapter=resolveAdapter(env),providerId=normalizeOpt2(env.DIMCODE_PROVIDER_ID),modelId=normalizeOpt2(env.DIMCODE_MODEL)??(opts?.defaultModelId||"deepseek-v3.1"),baseUrl=normalizeOpt2(opts?.baseUrl),apiKey=adapter==="gemini"?normalizeOpt2(env.GOOGLE_API_KEY):adapter==="anthropic"?normalizeOpt2(env.ANTHROPIC_API_KEY):normalizeOpt2(env.OPENAI_API_KEY),nextApiOAuth=providerId==="dimcode-api-oauth"||parseBool(env.DIMCODE_USE_NEXT_API_OAUTH)===!0,responsesAutoPromptCacheKey=parseBool(env.DIMCODE_RESPONSES_AUTO_PROMPT_CACHE_KEY),responsesUseSessionId=parseBool(env.DIMCODE_RESPONSES_USE_SESSION_ID),interleavedThinking=parseBool(env.DIMCODE_INTERLEAVED_THINKING),reasoningEffort=normalizeOpt2(env.DIMCODE_REASONING_EFFORT),maxInputTokens=parsePositiveInt(env.DIMCODE_CONTEXT_WINDOW)??inferBuiltinModelContextWindow(modelId,adapter),maxOutputTokens=parsePositiveInt(env.DIMCODE_MAX_TOKENS),includeEnv=opts?.includeEnv!==!1;return{modelId,adapter,provider:providerId??adapter,...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...nextApiOAuth?{nextApiOAuth:!0}:{},...responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...typeof interleavedThinking==="boolean"?{interleavedThinking}:{},...reasoningEffort?{reasoningEffort}:{},...maxInputTokens?{maxInputTokens}:{},...maxOutputTokens?{maxOutputTokens}:{},...includeEnv?{env:{...env}}:{}}}function mergeRuntimeConfig(base,source,opts={}){let modelId=normalizeOpt2(source?.modelId)??base.modelId,adapter=normalizeOpt2(source?.adapter)??base.adapter,provider=normalizeOpt2(source?.provider)??base.provider??adapter,baseUrl=normalizeOpt2(source?.baseUrl)??base.baseUrl,apiKey=normalizeOpt2(source?.apiKey)??base.apiKey,sourceModelCapabilities=cloneModelCapabilities(source?.modelCapabilities),baseModelCapabilities=cloneModelCapabilities(base.modelCapabilities),sourceContextWindow=sourceModelCapabilities?.contextWindow??parsePositiveInt(source?.maxInputTokens),baseContextWindow=baseModelCapabilities?.contextWindow??parsePositiveInt(base.maxInputTokens),maxInputTokens=opts.preferSourceMaxInputTokens===!1?baseContextWindow??sourceContextWindow:sourceContextWindow??baseContextWindow,modelCapabilitiesBase=sourceModelCapabilities??baseModelCapabilities,modelCapabilities=modelCapabilitiesBase&&typeof maxInputTokens==="number"?{...modelCapabilitiesBase,contextWindow:maxInputTokens}:modelCapabilitiesBase,responsesAutoPromptCacheKey=typeof source?.responsesAutoPromptCacheKey==="boolean"?source.responsesAutoPromptCacheKey:base.responsesAutoPromptCacheKey,responsesUseSessionId=typeof source?.responsesUseSessionId==="boolean"?source.responsesUseSessionId:base.responsesUseSessionId,maxOutputTokens=parsePositiveInt(source?.maxOutputTokens)??base.maxOutputTokens,interleavedThinking=typeof source?.interleavedThinking==="boolean"?source.interleavedThinking:base.interleavedThinking,reasoningEffort=normalizeOpt2(source?.reasoningEffort)??base.reasoningEffort,sourceEnv=source?.env,env=sourceEnv&&typeof sourceEnv==="object"?cloneEnvRecord2(sourceEnv):base.env?cloneEnvRecord2(base.env):void 0;return{modelId,...adapter?{adapter}:{},...provider?{provider}:{},...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...source?.nextApiOAuth===!0||base.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...modelCapabilities?{modelCapabilities}:{},...typeof interleavedThinking==="boolean"?{interleavedThinking}:{},...reasoningEffort?{reasoningEffort}:{},...typeof maxInputTokens==="number"?{maxInputTokens}:{},...typeof maxOutputTokens==="number"?{maxOutputTokens}:{},...env?{env}:{}}}var DEFAULT_MAX_INPUT_TOKENS=128000,DEFAULT_MAX_OUTPUT_TOKENS=4000,DEFAULT_AGENT_MAX_ITERATIONS=1e4,DURABLE_COMPLETION_PROMPT=["# Task completion contract","If a task still has multiple remaining steps, keep TodoWrite current so unfinished work stays explicit.","Do not stop after a partial summary or a single completed sub-step.","Only end the current request when the task is complete, you need explicit user input, or a real external blocker prevents further work."].join(`
|
|
1047
|
+
`);function isTruthyFlag(value){let normalized=String(value??"").trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function isNoInteractionRuntimeConfig(config2){return isTruthyFlag(config2?.env?.DIMCODE_NO_INTERACTION)}function sanitizeDebugLogSessionId2(sessionId){return String(sessionId??"").trim().replace(/[^\w.-]/g,"_")||"session"}async function listRuntimeStateStoreSnapshots(snapshotStore,options){if(typeof snapshotStore.listPage==="function")return await snapshotStore.listPage(options);return{snapshots:await snapshotStore.list()}}function buildObservabilityOptions(state,sessionId){return{enabled:state.enabled,logFilePath:path29.join(state.directory,`${sanitizeDebugLogSessionId2(sessionId)}.jsonl`)}}function resolveRuntimeModelOutputLimit(config2,normalizePositiveInteger5){let provider=getBuiltinProvider(config2.provider??null),providerLimit=provider?normalizePositiveInteger5(getModelLimitForModels(provider.models,config2.modelId)?.output):void 0;if(providerLimit!==void 0)return providerLimit;let adapter=config2.adapter,bestMatch;for(let candidateProvider of listBuiltinProviders()){let candidateAdapter=getProviderAdapter(candidateProvider);if(adapter&&candidateAdapter!==adapter&&!(candidateAdapter==="openai"&&adapter==="openai-responses"||candidateAdapter==="openai-responses"&&adapter==="openai"))continue;let limit=normalizePositiveInteger5(getModelLimitForModels(candidateProvider.models,config2.modelId)?.output);if(limit===void 0)continue;if(bestMatch===void 0||limit>bestMatch)bestMatch=limit}return bestMatch??null}function readRuntimeConfigNonNegativeNumber(value){let numeric=Number(value);if(!Number.isFinite(numeric)||numeric<0)return;return numeric}function normalizeNonNegativeInteger4(value){let numeric=readRuntimeConfigNonNegativeNumber(value);if(numeric===void 0)return;return Math.floor(numeric)}async function buildRequestBudgetFromRequest(modelClient,request,opts,normalizePositiveInteger5){let countTokens=modelClient.adapter?.countTokens,contextWindow=normalizePositiveInteger5(opts.contextWindow),plannedOutput=normalizePositiveInteger5(request.maxOutputTokens)??normalizePositiveInteger5(opts.plannedOutput);if(typeof countTokens!=="function"||contextWindow===void 0||plannedOutput===void 0||opts.compactionOptions.enabled===!1)return;let estimatedInputTokens=normalizeNonNegativeInteger4(await countTokens(request));if(estimatedInputTokens===void 0)return;return buildCompactionBudget(opts.compactionOptions,estimatedInputTokens,{contextWindow,plannedOutput})}function buildBaseFromOptions(options,env,normalizePositiveInteger5){let adapter=options.adapter??"openai",inputModelCapabilities=cloneModelCapabilities(options.modelCapabilities),maxInputTokens=normalizePositiveInteger5(options.maxInputTokens)??inputModelCapabilities?.contextWindow??DEFAULT_MAX_INPUT_TOKENS,modelCapabilities=inputModelCapabilities?{...inputModelCapabilities,contextWindow:inputModelCapabilities.contextWindow??maxInputTokens}:void 0,maxOutputTokens=normalizePositiveInteger5(options.maxOutputTokens);return{modelId:options.modelId,adapter,provider:options.provider??adapter,...options.baseUrl?{baseUrl:options.baseUrl}:{},...options.apiKey?{apiKey:options.apiKey}:{},...modelCapabilities?{modelCapabilities}:{},maxInputTokens,...maxOutputTokens?{maxOutputTokens}:{},...typeof options.interleavedThinking==="boolean"?{interleavedThinking:options.interleavedThinking}:{},...options.reasoningEffort?{reasoningEffort:options.reasoningEffort}:{},...options.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...options.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...options.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...env?{env:{...env}}:{}}}function resolvePersistedRuntimeContinuityFallback(persisted,base){if(!persisted)return;let persistedProvider=String(persisted.provider??"").trim(),persistedModelId=String(persisted.modelId??"").trim(),baseProvider=String(base.provider??"").trim(),baseModelId=String(base.modelId??"").trim();if(persistedProvider&&persistedProvider!==baseProvider)return;if(persistedModelId&&persistedModelId!==baseModelId)return;return{modelId:base.modelId,...persisted.modelCapabilities?{modelCapabilities:persisted.modelCapabilities}:{},...typeof persisted.maxInputTokens==="number"?{maxInputTokens:persisted.maxInputTokens}:{},...typeof persisted.maxOutputTokens==="number"?{maxOutputTokens:persisted.maxOutputTokens}:{},...persisted.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...persisted.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...typeof persisted.interleavedThinking==="boolean"?{interleavedThinking:persisted.interleavedThinking}:{},...persisted.reasoningEffort?{reasoningEffort:persisted.reasoningEffort}:{},...persisted.nextApiOAuth===!0?{nextApiOAuth:!0}:{}}}function resolveDefaultRuntimeConfig(options,input,normalizePositiveInteger5){if(input.requested){let base2=input.current??buildBaseFromOptions(options,void 0,normalizePositiveInteger5);return mergeRuntimeConfig(base2,input.requested,{preferSourceMaxInputTokens:!0})}let base=buildBaseFromOptions(options,input.current?.env,normalizePositiveInteger5),continuityFallback=resolvePersistedRuntimeContinuityFallback(input.persisted,base);if(!continuityFallback)return base;return mergeRuntimeConfig(base,continuityFallback,{preferSourceMaxInputTokens:!0})}function shouldPersistCanonicalSystemMessages(snapshot){let messages=Array.isArray(snapshot?.messages)?snapshot.messages:[],systemMessageCount=0;for(let message of messages){if(String(message?.role??"")!=="system")continue;if(systemMessageCount+=1,systemMessageCount>1)return!0;let content=message?.content,block=Array.isArray(content)?content[0]:void 0;if(!Array.isArray(content)||content.length!==1||!block||typeof block!=="object"||Array.isArray(block)||block.type!=="text"||typeof block.text!=="string")return!0}return!1}function canonicalizeModelRequestSystemMessages(request){let messages=Array.isArray(request.messages)?request.messages:[],canonical=canonicalizeSystemMessages({messages});if(canonical.systemMessages.length===0)return request;let firstSystemMessage=canonical.systemMessages.find((message)=>Boolean(message)&&typeof message==="object"),systemMessage={...firstSystemMessage??{},id:typeof firstSystemMessage?.id==="string"?firstSystemMessage.id:`msg:${randomUUID6()}`,createdAt:Number(firstSystemMessage?.createdAt??Date.now())||Date.now(),role:"system",content:[{type:"text",text:canonical.systemPrompt}]};return{...request,messages:[systemMessage,...canonical.messages]}}function wrapModelClientWithCanonicalSystemPrompt(client){return{...client,stream(request){return client.stream(canonicalizeModelRequestSystemMessages(request))}}}function wrapModelClientWithResponsesProviderOptions(record3,client,injectResponsesProviderOptions){return{...client,stream(request){return client.stream(injectResponsesProviderOptions(record3,request))}}}function resolveProviderHttpDebugOptions(input){if(!input.enabled)return;let sessionId=String(input.sessionId??"").trim().replace(/[^\w-]/g,"_");if(!sessionId)return;return{logFilePath:path29.join(path29.resolve(input.stateDir),"logs","provider-http",`${sessionId}.ndjson`),redactSecrets:!0}}async function createDefaultModelClient(config2,opts={}){if(isZenMuxProvider(config2.provider)){let adapter2=await createZenMuxAdapterWithInjectedParams(createZenMuxAdapter,{modelId:config2.modelId,provider:config2.provider,apiKey:config2.apiKey,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,providerDebug:opts.providerDebug});return createModel(adapter2)}if(config2.adapter==="gemini"){let adapter2=await createGeminiAdapterWithInjectedParams(createGeminiAdapter,{modelId:config2.modelId,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,providerDebug:opts.providerDebug});return createModel(adapter2)}if(config2.adapter==="anthropic"){let adapter2=await createAnthropicAdapterWithInjectedParams(createAnthropicAdapter,{modelId:config2.modelId,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,providerDebug:opts.providerDebug});return createModel(adapter2)}let adapter=await createOpenAiAdapterWithInjectedParams(createOpenAIAdapter,createOpenAIResponsesAdapter,{modelId:config2.modelId,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,nextApiOAuth:config2.nextApiOAuth,modelCapabilities:config2.modelCapabilities,maxOutputTokens:config2.maxOutputTokens,adapter:config2.adapter,providerDebug:opts.providerDebug});return createModel(adapter)}function createRuntimeSessionLoadController(deps){let hasReleasedSdkHandle=(record3)=>{let{sdkSession,sdkAgent}=record3;return sdkSession?.disposed===!0||sdkAgent?.disposed===!0},readSnapshotSystemPrompt=(snapshot)=>{let messages=Array.isArray(snapshot.messages)?snapshot.messages:[];return canonicalizeSystemMessages({messages}).systemPrompt},canonicalizeSnapshotSystemMessages=(snapshot,systemPrompt)=>{let messages=Array.isArray(snapshot.messages)?[...snapshot.messages]:[],canonical=canonicalizeSystemMessages({...typeof systemPrompt==="string"?{systemPrompt}:{},messages}),firstSystemMessage=canonical.systemMessages.find((message)=>Boolean(message)&&typeof message==="object");if(canonical.systemMessages.length===0&&typeof systemPrompt!=="string")return{...snapshot,messages:canonical.messages};let nextSystemMessage={...firstSystemMessage??{},id:typeof firstSystemMessage?.id==="string"?firstSystemMessage.id:`msg:${randomUUID6()}`,role:"system",content:[{type:"text",text:canonical.systemPrompt}],createdAt:Number(firstSystemMessage?.createdAt??Date.now())||Date.now()};return{...snapshot,messages:[nextSystemMessage,...canonical.messages]}},withUpdatedSystemPrompt=(snapshot,systemPrompt)=>{return canonicalizeSnapshotSystemMessages(snapshot,systemPrompt)},wrapSdkSnapshotForSave=(record3,snapshot)=>{return applyEnvelope(canonicalizeSnapshotSystemMessages(deps.sanitizeRuntimeSnapshotMessages(snapshot)),createRuntimeSessionEnvelope(record3),record3.cwd,record3.metadata)},createModelClientForRuntimeConfig=async(runtimeConfig,sessionId,record3)=>{let providerDebug=resolveProviderHttpDebugOptions({enabled:deps.options.debug===!0,stateDir:deps.options.stateDir,sessionId});if(providerDebug&&!deps.options.createModelClient)debugLog("runtime_provider_http_debug",{sessionId,adapter:runtimeConfig.adapter??"openai",modelId:runtimeConfig.modelId,logFilePath:providerDebug.logFilePath});let client=deps.options.createModelClient?await deps.options.createModelClient(runtimeConfig):await createDefaultModelClient(runtimeConfig,{providerDebug});return wrapModelClientWithCanonicalSystemPrompt(wrapModelClientWithResponsesProviderOptions(record3??{runtimeConfig},client,deps.injectResponsesProviderOptions))},createModelClient=async(record3)=>await createModelClientForRuntimeConfig(runtimeConfigForActiveRun(record3),record3.sessionId,record3),resolveWebsearchToolConfig=async()=>{let base=deps.options.tools?.websearch?{apiKey:typeof deps.options.tools.websearch.apiKey==="function"?deps.options.tools.websearch.apiKey():deps.options.tools.websearch.apiKey,apiEndpoint:deps.options.tools.websearch.apiEndpoint,numResults:deps.options.tools.websearch.numResults}:{};if(!deps.options.resolveWebsearchToolConfig)return base;return{...base,...await deps.options.resolveWebsearchToolConfig()}},resolveWebsearchToolConfigState=async()=>{let config2=await resolveWebsearchToolConfig();return{config:config2,key:JSON.stringify({apiKey:typeof config2.apiKey==="string"?config2.apiKey:"",apiEndpoint:typeof config2.apiEndpoint==="string"?config2.apiEndpoint:"",numResults:typeof config2.numResults==="number"&&Number.isFinite(config2.numResults)?config2.numResults:null})}},buildSystemPrompt=async(cwd)=>{return`${deps.options.buildSystemPrompt?await deps.options.buildSystemPrompt(cwd):deps.options.systemPrompt??"You are a helpful coding agent."}
|
|
1048
1048
|
|
|
1049
|
-
${DURABLE_COMPLETION_PROMPT}`},createRuntimeOwnedSubagentSession=async(runtimeConfig,input)=>{let[createGrepGlobPlugin2,createPlanModePlugin2,autoCompactPluginFactory,createSkillsPlugin2,websearchToolState,model]=await Promise.all([loadGrepGlobPluginFactory(),loadPlanModePluginFactory(),loadAutoCompactPluginFactory(),loadSkillsPluginFactory(),resolveWebsearchToolConfigState(),createModelClientForRuntimeConfig(runtimeConfig,input.ownerSessionId??"subagent")]),contextWindow=deps.normalizePositiveInteger(runtimeConfig.maxInputTokens??runtimeConfig.modelCapabilities?.contextWindow??model.capabilities?.contextWindow),sessionModel=contextWindow==null?model:{...model,capabilities:{...cloneModelCapabilities(model.capabilities)??{},contextWindow},stream:(request)=>model.stream(request)},modelOutputLimit=resolveRuntimeModelOutputLimit(runtimeConfig,deps.normalizePositiveInteger),compactionOptions={enabled:!0,safetyRatio:DEFAULT_COMPACTION_SAFETY_RATIO,compactorPluginId:"auto-compact"},autoCompactPlugin=autoCompactPluginFactory(buildAutoCompactPluginOptions()),requestLimitsPlugin=createRequestLimitsPlugin({defaultMaxOutputTokens:DEFAULT_MAX_OUTPUT_TOKENS,configuredMaxOutputTokens:runtimeConfig.maxOutputTokens,modelOutputLimit}),buildSessionMetadata=(metadata)=>{let merged={...metadata?structuredClone(metadata):{},...input.metadata?structuredClone(input.metadata):{}};if(input.ownerSessionId&&!merged._dimSubagent)merged._dimSubagent={parentSessionId:input.ownerSessionId,summary:input.description};return Object.keys(merged).length>0?merged:void 0},wrapSubagentSnapshotForSave=(snapshot)=>{let metadata=buildSessionMetadata(snapshot.metadata);return{...snapshot,cwd:snapshot.cwd||input.cwd,...metadata?{metadata}:{}}},runtimeStateStore={save:async(saveInput)=>{await deps.snapshotStore.save({snapshot:wrapSubagentSnapshotForSave(saveInput.snapshot),usageLedger:saveInput.usageLedger})},load:async(sessionId)=>await deps.snapshotStore.load(sessionId),delete:async(sessionId)=>await deps.snapshotStore.delete(sessionId),list:async(options)=>await listRuntimeStateStoreSnapshots(deps.snapshotStore,options)},sdkSession,subagentSessionId=`subagent-${randomUUID6()}`,agent=createAgent({model:sessionModel,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,cwd:input.cwd,hostDataDir:deps.hostDataDir,stateStore:runtimeStateStore,permissions:fullPermissions,tools:createDimToolRegistry({delegateTasks:input.delegateTasksEnabled,askUser:input.askUserEnabled}),includeBuiltinTools:!1,plugins:[createStableEnvInfoPlugin({cwd:()=>input.cwd}),createAgentRulesPlugin({cwd:()=>input.cwd}),createGrepGlobPlugin2(),createPlanModePlugin2({extraVisibleTools:["WebSearch","WebFetch"]}),autoCompactPlugin,createSkillsPlugin2(getSkillsPluginOptions(input.cwd)),createWebSearchPlugin(websearchToolState.config),createWebFetchPlugin(),createAcpMcpSessionPlugin({hub:deps.sharedMcpHub}),createAcpToolApprovalPlugin(),...deps.options.acpDelegation?[createAcpDelegationPlugin({...deps.options.acpDelegation,getSessionId:()=>input.ownerSessionId??""})]:[],createDelegationFinalizerPlugin(),requestLimitsPlugin,createRequestBudgetPlugin({getBudget:async(request)=>{let directBudget=await buildRequestBudgetFromRequest(model,request,{contextWindow,plannedOutput:DEFAULT_MAX_OUTPUT_TOKENS,compactionOptions},deps.normalizePositiveInteger);if(directBudget)return directBudget;if(!sdkSession)return;let plannedOutput=deps.normalizePositiveInteger(request.maxOutputTokens);return await sdkSession.getCompactionBudget(plannedOutput==null?void 0:{plannedOutput})},getUsedAutoCompaction:()=>!1,onBudget:async(payload)=>{await input.onBudget?.(payload)}})],compaction:compactionOptions,observability:buildObservabilityOptions(deps.getDebugLogState(),subagentSessionId),approvalHandler:async(request)=>input.approvalMode==="auto"?{type:"approved"}:await deps.resolveSubagentApprovalDecision(input.ownerSessionId,request)}),systemPrompt=deps.options.buildSubagentSystemPrompt?await deps.options.buildSubagentSystemPrompt({cwd:input.cwd,description:input.description,parentSessionId:input.ownerSessionId}):buildSubagentSystemPrompt(await buildSystemPrompt(input.cwd),{cwd:input.cwd,description:input.description}),session=await agent.createSession({sessionId:subagentSessionId,cwd:input.cwd,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,systemPrompt,allowedToolNames:input.allowedToolNames?[...input.allowedToolNames]:void 0,metadata:buildSessionMetadata()});return sdkSession=session,{pair:{agent,session},websearchToolConfigKey:websearchToolState.key}},buildSdkSession=async(record3,snapshot)=>{let runtimeConfig=runtimeConfigForActiveRun(record3),[createGrepGlobPlugin2,createPlanModePlugin2,autoCompactPluginFactory,createSkillsPlugin2,websearchToolState,model]=await Promise.all([loadGrepGlobPluginFactory(),loadPlanModePluginFactory(),loadAutoCompactPluginFactory(),loadSkillsPluginFactory(),resolveWebsearchToolConfigState(),createModelClient(record3)]),contextWindow=deps.normalizePositiveInteger(runtimeConfig.maxInputTokens??runtimeConfig.modelCapabilities?.contextWindow??model.capabilities?.contextWindow),sessionModel=contextWindow==null?model:{...model,capabilities:{...cloneModelCapabilities(model.capabilities)??{},contextWindow},stream:(request)=>model.stream(request)},modelOutputLimit=resolveRuntimeModelOutputLimit(runtimeConfig,deps.normalizePositiveInteger),compactionOptions={enabled:!0,safetyRatio:DEFAULT_COMPACTION_SAFETY_RATIO,compactorPluginId:"auto-compact"},autoCompactPlugin=autoCompactPluginFactory(buildAutoCompactPluginOptions()),requestLimitsPlugin=createRequestLimitsPlugin({defaultMaxOutputTokens:DEFAULT_MAX_OUTPUT_TOKENS,configuredMaxOutputTokens:runtimeConfig.maxOutputTokens,modelOutputLimit}),runtimeStateStore={save:async(input)=>{await deps.snapshotStore.save({snapshot:wrapSdkSnapshotForSave(record3,input.snapshot),usageLedger:input.usageLedger})},load:async(sessionId)=>await deps.snapshotStore.load(sessionId),delete:async(sessionId)=>await deps.snapshotStore.delete(sessionId),list:async(options)=>await listRuntimeStateStoreSnapshots(deps.snapshotStore,options)},sdkSession,agent=createAgent({model:sessionModel,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,cwd:record3.cwd,hostDataDir:deps.hostDataDir,stateStore:runtimeStateStore,permissions:fullPermissions,tools:createDimToolRegistry({delegateTasks:deps.options.delegateTasks!==!1,askUser:!isNoInteractionRuntimeConfig(runtimeConfig),askUserHandler:(request)=>deps.handleAskUser(record3,request)}),includeBuiltinTools:!1,plugins:[createStableEnvInfoPlugin({cwd:()=>record3.cwd}),createAgentRulesPlugin({cwd:()=>record3.cwd}),createGrepGlobPlugin2(),createPlanModePlugin2({extraVisibleTools:["WebSearch","WebFetch"]}),autoCompactPlugin,createSkillsPlugin2(getSkillsPluginOptions(record3.cwd)),createWebSearchPlugin(websearchToolState.config),createWebFetchPlugin(),createAcpMcpSessionPlugin({hub:deps.sharedMcpHub}),createAcpToolApprovalPlugin(),...deps.options.acpDelegation?[createAcpDelegationPlugin(deps.options.acpDelegation)]:[],createDelegationFinalizerPlugin(),requestLimitsPlugin,deps.createProviderRetryNotificationPlugin(record3),createRequestBudgetPlugin({getBudget:async(request)=>{let directBudget=await buildRequestBudgetFromRequest(model,request,{contextWindow,plannedOutput:DEFAULT_MAX_OUTPUT_TOKENS,compactionOptions},deps.normalizePositiveInteger);if(directBudget)return directBudget;if(!sdkSession)return;let plannedOutput=deps.normalizePositiveInteger(request.maxOutputTokens);return await sdkSession.getCompactionBudget(plannedOutput==null?void 0:{plannedOutput})},getUsedAutoCompaction:()=>Boolean(record3.activeRun?.usedAutoCompaction),onBudget:async(payload)=>{let activeRun=record3.activeRun;if(!activeRun)return;let updatedAtMs=Date.now(),nextBudget=deps.normalizeLastRequestBudget({...payload,runId:activeRun.runId,updatedAtMs});if(!nextBudget)return;if(deps.isDuplicateRequestBudget(activeRun.lastRequestBudget,nextBudget))return;activeRun.lastRequestBudget=nextBudget,record3.lastRequestBudget=cloneLastRequestBudget(nextBudget)??void 0,activeRun.currentChannel?.push({type:"run.budget",sessionId:record3.sessionId,runId:activeRun.runId,requestId:payload.requestId,estimatedInputTokens:payload.estimatedInputTokens,thresholdTokens:payload.thresholdTokens,plannedOutput:payload.plannedOutput,contextWindow:payload.contextWindow,usedAutoCompaction:payload.usedAutoCompaction,updatedAtMs})}})],compaction:compactionOptions,observability:buildObservabilityOptions(deps.getDebugLogState(),record3.sessionId),approvalHandler:(request)=>deps.handleToolApproval(record3,request),notificationHandler:(notification,context)=>deps.handleNotification(record3,notification,context)}),systemPrompt=await buildSystemPrompt(record3.cwd),reasoningDefaults=shouldUseAnthropicReasoningDefaults({modelId:runtimeConfig.modelId,adapter:runtimeConfig.adapter,provider:runtimeConfig.provider})?resolveAnthropicReasoningDefaults(runtimeConfig.modelId,{provider:runtimeConfig.provider}):void 0;if(snapshot){let sanitizedSnapshot=deps.sanitizeRuntimeSnapshotMessages(snapshot),restored=applyEnvelope(withUpdatedSystemPrompt(sanitizedSnapshot,systemPrompt),createRuntimeSessionEnvelope(record3),record3.cwd,record3.metadata),bootstrapMetadata={dimAgentRuntime:serializeRuntimeSessionEnvelope(createRuntimeSessionEnvelope(record3))};if(record3.title)bootstrapMetadata.title=record3.title;await(await agent.createSession({sessionId:record3.sessionId,cwd:record3.cwd,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,systemPrompt,...reasoningDefaults?{reasoning:reasoningDefaults}:{},metadata:bootstrapMetadata})).dispose();let session2=agent.sessionFromSnapshot({...restored,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,model:model.model});return sdkSession=session2,{agent,session:session2,websearchToolConfigKey:websearchToolState.key}}let initialMetadata={dimAgentRuntime:serializeRuntimeSessionEnvelope(createRuntimeSessionEnvelope(record3))};if(record3.title)initialMetadata.title=record3.title;let session=await agent.createSession({sessionId:record3.sessionId,cwd:record3.cwd,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,systemPrompt,...reasoningDefaults?{reasoning:reasoningDefaults}:{},metadata:initialMetadata});return sdkSession=session,{agent,session,websearchToolConfigKey:websearchToolState.key}},ensureLoadedSession=async(record3,snapshot)=>{let nextSnapshot=snapshot;if(record3.sdkSession&&record3.sdkAgent&&!hasReleasedSdkHandle(record3)){let websearchToolState=await resolveWebsearchToolConfigState();if(record3.loadedWebsearchToolConfigKey===websearchToolState.key)return;if(record3.activeRun||record3.pendingAction)return;nextSnapshot=nextSnapshot??deps.sanitizeRuntimeSnapshotMessages(record3.sdkSession.toSnapshot()),await Promise.allSettled([record3.sdkSession.dispose(),record3.sdkAgent.dispose()]),record3.sdkSession=void 0,record3.sdkAgent=void 0}if(hasReleasedSdkHandle(record3))await Promise.allSettled([record3.sdkSession?.dispose(),record3.sdkAgent?.dispose()]),record3.sdkSession=void 0,record3.sdkAgent=void 0;let loaded=await buildSdkSession(record3,nextSnapshot??await safeLoadRuntimeSnapshot({directory:deps.sessionStoreDir,sessionId:record3.sessionId,loadFromStore:async()=>await deps.snapshotStore.load(record3.sessionId)}));record3.sdkAgent=loaded.agent,record3.sdkSession=loaded.session,record3.loadedWebsearchToolConfigKey=loaded.websearchToolConfigKey,record3.updatedAt=Number(loaded.session.updatedAt??record3.updatedAt??Date.now())||Date.now(),await deps.syncPlanMode(record3),await deps.syncSessionMcpServers(record3)},reloadSession=async(record3)=>{if(await ensureLoadedSession(record3),!record3.sdkSession)return;let snapshot=deps.sanitizeRuntimeSnapshotMessages(record3.sdkSession.toSnapshot());await Promise.allSettled([record3.sdkSession.dispose(),record3.sdkAgent?.dispose()]),record3.sdkSession=void 0,record3.sdkAgent=void 0,await ensureLoadedSession(record3,snapshot)},persistRecord=async(record3)=>{if(!record3.sdkSession)return;let snapshot=wrapSdkSnapshotForSave(record3,record3.sdkSession.toSnapshot());await deps.snapshotStore.save(snapshot),record3.updatedAt=Number(snapshot.updatedAt??Date.now())||Date.now()},resolveRuntimeConfig=async(input)=>{if(deps.options.resolveRuntimeConfig)return await deps.options.resolveRuntimeConfig(input);return resolveDefaultRuntimeConfig(deps.options,input,deps.normalizePositiveInteger)},createRecordFromSnapshot=async(sessionId,snapshot)=>{let envelope=readEnvelopeFromSnapshot(snapshot),fallback=await resolveRuntimeConfig({cwd:snapshot.cwd||process11.cwd(),persisted:envelope?.runtimeConfig});return createRuntimeSessionRecord(sessionId,snapshot,fallback)};return{ensureLoadedSession,reloadSession,createRuntimeOwnedSubagentSession,persistRecord,createRecordFromSnapshot,normalizeRuntimeSnapshot:async(snapshot,sessionId=snapshot.sessionId)=>{let normalizedSessionId=String(sessionId??"").trim();if(!normalizedSessionId)return snapshot;let sanitizedSnapshot=deps.sanitizeRuntimeSnapshotMessages(snapshot),record3=await createRecordFromSnapshot(normalizedSessionId,sanitizedSnapshot);return applyEnvelope(canonicalizeSnapshotSystemMessages(sanitizedSnapshot),createRuntimeSessionEnvelope(record3),record3.cwd,record3.metadata)},resolveRuntimeConfig,prepareSessionConfigUpdate:async(record3,update)=>{let nextCwd=typeof update.cwd==="string"&&update.cwd.trim()?path29.resolve(update.cwd):record3.cwd;if(!update.runtimeConfig)return{...update,...nextCwd!==record3.cwd?{cwd:nextCwd}:{}};let runtimeConfig=await resolveRuntimeConfig({cwd:nextCwd,requested:update.runtimeConfig,current:record3.runtimeConfig});return{...update,...nextCwd!==record3.cwd?{cwd:nextCwd}:{},runtimeConfig}},buildSystemPrompt,readSnapshotSystemPrompt,canonicalizeSnapshotSystemMessages,withUpdatedSystemPrompt,wrapSdkSnapshotForSave,shouldPersistRepairedRuntimeConfig:(snapshot,record3)=>{let persisted=readRuntimeSessionEnvelope(snapshot)?.runtimeConfig??null,next=createRuntimeSessionEnvelope(record3).runtimeConfig;return JSON.stringify(persisted)!==JSON.stringify(next)||shouldPersistCanonicalSystemMessages(snapshot)}}}import path30 from"node:path";function trimBackgroundExecText(text){let normalized=String(text??"").replace(/\r/g,"");if(!normalized)return"";let lines=normalized.split(`
|
|
1049
|
+
${DURABLE_COMPLETION_PROMPT}`},createRuntimeOwnedSubagentSession=async(runtimeConfig,input)=>{let[createGrepGlobPlugin2,createPlanModePlugin2,autoCompactPluginFactory,createSkillsPlugin2,websearchToolState,model]=await Promise.all([loadGrepGlobPluginFactory(),loadPlanModePluginFactory(),loadAutoCompactPluginFactory(),loadSkillsPluginFactory(),resolveWebsearchToolConfigState(),createModelClientForRuntimeConfig(runtimeConfig,input.ownerSessionId??"subagent")]),contextWindow=deps.normalizePositiveInteger(runtimeConfig.maxInputTokens??runtimeConfig.modelCapabilities?.contextWindow??model.capabilities?.contextWindow),sessionModel=contextWindow==null?model:{...model,capabilities:{...cloneModelCapabilities(model.capabilities)??{},contextWindow},stream:(request)=>model.stream(request)},modelOutputLimit=resolveRuntimeModelOutputLimit(runtimeConfig,deps.normalizePositiveInteger),compactionOptions={enabled:!0,safetyRatio:DEFAULT_COMPACTION_SAFETY_RATIO,compactorPluginId:"auto-compact"},autoCompactPlugin=autoCompactPluginFactory(buildAutoCompactPluginOptions()),requestLimitsPlugin=createRequestLimitsPlugin({defaultMaxOutputTokens:DEFAULT_MAX_OUTPUT_TOKENS,configuredMaxOutputTokens:runtimeConfig.maxOutputTokens,modelOutputLimit}),reasoningConfig=resolveRuntimeReasoningConfig(runtimeConfig),buildSessionMetadata=(metadata)=>{let merged={...metadata?structuredClone(metadata):{},...input.metadata?structuredClone(input.metadata):{}};if(input.ownerSessionId&&!merged._dimSubagent)merged._dimSubagent={parentSessionId:input.ownerSessionId,summary:input.description};return Object.keys(merged).length>0?merged:void 0},wrapSubagentSnapshotForSave=(snapshot)=>{let metadata=buildSessionMetadata(snapshot.metadata);return{...snapshot,cwd:snapshot.cwd||input.cwd,...metadata?{metadata}:{}}},runtimeStateStore={save:async(saveInput)=>{await deps.snapshotStore.save({snapshot:wrapSubagentSnapshotForSave(saveInput.snapshot),usageLedger:saveInput.usageLedger})},load:async(sessionId)=>await deps.snapshotStore.load(sessionId),delete:async(sessionId)=>await deps.snapshotStore.delete(sessionId),list:async(options)=>await listRuntimeStateStoreSnapshots(deps.snapshotStore,options)},sdkSession,subagentSessionId=`subagent-${randomUUID6()}`,agent=createAgent({model:sessionModel,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,cwd:input.cwd,hostDataDir:deps.hostDataDir,stateStore:runtimeStateStore,permissions:fullPermissions,tools:createDimToolRegistry({delegateTasks:input.delegateTasksEnabled,askUser:input.askUserEnabled}),includeBuiltinTools:!1,plugins:[createStableEnvInfoPlugin({cwd:()=>input.cwd}),createAgentRulesPlugin({cwd:()=>input.cwd}),createGrepGlobPlugin2(),createPlanModePlugin2({extraVisibleTools:["WebSearch","WebFetch"]}),autoCompactPlugin,createSkillsPlugin2(getSkillsPluginOptions(input.cwd)),createWebSearchPlugin(websearchToolState.config),createWebFetchPlugin(),createAcpMcpSessionPlugin({hub:deps.sharedMcpHub}),createAcpToolApprovalPlugin(),...deps.options.acpDelegation?[createAcpDelegationPlugin({...deps.options.acpDelegation,getSessionId:()=>input.ownerSessionId??""})]:[],createDelegationFinalizerPlugin(),requestLimitsPlugin,createRequestBudgetPlugin({getBudget:async(request)=>{let directBudget=await buildRequestBudgetFromRequest(model,request,{contextWindow,plannedOutput:DEFAULT_MAX_OUTPUT_TOKENS,compactionOptions},deps.normalizePositiveInteger);if(directBudget)return directBudget;if(!sdkSession)return;let plannedOutput=deps.normalizePositiveInteger(request.maxOutputTokens);return await sdkSession.getCompactionBudget(plannedOutput==null?void 0:{plannedOutput})},getUsedAutoCompaction:()=>!1,onBudget:async(payload)=>{await input.onBudget?.(payload)}})],compaction:compactionOptions,...reasoningConfig?{reasoning:reasoningConfig}:{},observability:buildObservabilityOptions(deps.getDebugLogState(),subagentSessionId),approvalHandler:async(request)=>input.approvalMode==="auto"?{type:"approved"}:await deps.resolveSubagentApprovalDecision(input.ownerSessionId,request)}),systemPrompt=deps.options.buildSubagentSystemPrompt?await deps.options.buildSubagentSystemPrompt({cwd:input.cwd,description:input.description,parentSessionId:input.ownerSessionId}):buildSubagentSystemPrompt(await buildSystemPrompt(input.cwd),{cwd:input.cwd,description:input.description}),session=await agent.createSession({sessionId:subagentSessionId,cwd:input.cwd,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,systemPrompt,...reasoningConfig?{reasoning:reasoningConfig}:{},allowedToolNames:input.allowedToolNames?[...input.allowedToolNames]:void 0,metadata:buildSessionMetadata()});return sdkSession=session,{pair:{agent,session},websearchToolConfigKey:websearchToolState.key}},buildSdkSession=async(record3,snapshot)=>{let runtimeConfig=runtimeConfigForActiveRun(record3),[createGrepGlobPlugin2,createPlanModePlugin2,autoCompactPluginFactory,createSkillsPlugin2,websearchToolState,model]=await Promise.all([loadGrepGlobPluginFactory(),loadPlanModePluginFactory(),loadAutoCompactPluginFactory(),loadSkillsPluginFactory(),resolveWebsearchToolConfigState(),createModelClient(record3)]),contextWindow=deps.normalizePositiveInteger(runtimeConfig.maxInputTokens??runtimeConfig.modelCapabilities?.contextWindow??model.capabilities?.contextWindow),sessionModel=contextWindow==null?model:{...model,capabilities:{...cloneModelCapabilities(model.capabilities)??{},contextWindow},stream:(request)=>model.stream(request)},modelOutputLimit=resolveRuntimeModelOutputLimit(runtimeConfig,deps.normalizePositiveInteger),compactionOptions={enabled:!0,safetyRatio:DEFAULT_COMPACTION_SAFETY_RATIO,compactorPluginId:"auto-compact"},autoCompactPlugin=autoCompactPluginFactory(buildAutoCompactPluginOptions()),requestLimitsPlugin=createRequestLimitsPlugin({defaultMaxOutputTokens:DEFAULT_MAX_OUTPUT_TOKENS,configuredMaxOutputTokens:runtimeConfig.maxOutputTokens,modelOutputLimit}),reasoningConfig=resolveRuntimeReasoningConfig(runtimeConfig),runtimeStateStore={save:async(input)=>{await deps.snapshotStore.save({snapshot:wrapSdkSnapshotForSave(record3,input.snapshot),usageLedger:input.usageLedger})},load:async(sessionId)=>await deps.snapshotStore.load(sessionId),delete:async(sessionId)=>await deps.snapshotStore.delete(sessionId),list:async(options)=>await listRuntimeStateStoreSnapshots(deps.snapshotStore,options)},sdkSession,agent=createAgent({model:sessionModel,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,cwd:record3.cwd,hostDataDir:deps.hostDataDir,stateStore:runtimeStateStore,permissions:fullPermissions,tools:createDimToolRegistry({delegateTasks:deps.options.delegateTasks!==!1,askUser:!isNoInteractionRuntimeConfig(runtimeConfig),askUserHandler:(request)=>deps.handleAskUser(record3,request)}),includeBuiltinTools:!1,plugins:[createStableEnvInfoPlugin({cwd:()=>record3.cwd}),createAgentRulesPlugin({cwd:()=>record3.cwd}),createGrepGlobPlugin2(),createPlanModePlugin2({extraVisibleTools:["WebSearch","WebFetch"]}),autoCompactPlugin,createSkillsPlugin2(getSkillsPluginOptions(record3.cwd)),createWebSearchPlugin(websearchToolState.config),createWebFetchPlugin(),createAcpMcpSessionPlugin({hub:deps.sharedMcpHub}),createAcpToolApprovalPlugin(),...deps.options.acpDelegation?[createAcpDelegationPlugin(deps.options.acpDelegation)]:[],createDelegationFinalizerPlugin(),requestLimitsPlugin,deps.createProviderRetryNotificationPlugin(record3),createRequestBudgetPlugin({getBudget:async(request)=>{let directBudget=await buildRequestBudgetFromRequest(model,request,{contextWindow,plannedOutput:DEFAULT_MAX_OUTPUT_TOKENS,compactionOptions},deps.normalizePositiveInteger);if(directBudget)return directBudget;if(!sdkSession)return;let plannedOutput=deps.normalizePositiveInteger(request.maxOutputTokens);return await sdkSession.getCompactionBudget(plannedOutput==null?void 0:{plannedOutput})},getUsedAutoCompaction:()=>Boolean(record3.activeRun?.usedAutoCompaction),onBudget:async(payload)=>{let activeRun=record3.activeRun;if(!activeRun)return;let updatedAtMs=Date.now(),nextBudget=deps.normalizeLastRequestBudget({...payload,runId:activeRun.runId,updatedAtMs});if(!nextBudget)return;if(deps.isDuplicateRequestBudget(activeRun.lastRequestBudget,nextBudget))return;activeRun.lastRequestBudget=nextBudget,record3.lastRequestBudget=cloneLastRequestBudget(nextBudget)??void 0,activeRun.currentChannel?.push({type:"run.budget",sessionId:record3.sessionId,runId:activeRun.runId,requestId:payload.requestId,estimatedInputTokens:payload.estimatedInputTokens,thresholdTokens:payload.thresholdTokens,plannedOutput:payload.plannedOutput,contextWindow:payload.contextWindow,usedAutoCompaction:payload.usedAutoCompaction,updatedAtMs})}})],compaction:compactionOptions,...reasoningConfig?{reasoning:reasoningConfig}:{},observability:buildObservabilityOptions(deps.getDebugLogState(),record3.sessionId),approvalHandler:(request)=>deps.handleToolApproval(record3,request),notificationHandler:(notification,context)=>deps.handleNotification(record3,notification,context)}),systemPrompt=await buildSystemPrompt(record3.cwd);if(snapshot){let sanitizedSnapshot=deps.sanitizeRuntimeSnapshotMessages(snapshot),restored=applyEnvelope(withUpdatedSystemPrompt(sanitizedSnapshot,systemPrompt),createRuntimeSessionEnvelope(record3),record3.cwd,record3.metadata),bootstrapMetadata={dimAgentRuntime:serializeRuntimeSessionEnvelope(createRuntimeSessionEnvelope(record3))};if(record3.title)bootstrapMetadata.title=record3.title;await(await agent.createSession({sessionId:record3.sessionId,cwd:record3.cwd,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,systemPrompt,...reasoningConfig?{reasoning:reasoningConfig}:{},metadata:bootstrapMetadata})).dispose();let session2=agent.sessionFromSnapshot({...restored,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,model:model.model});return sdkSession=session2,{agent,session:session2,websearchToolConfigKey:websearchToolState.key}}let initialMetadata={dimAgentRuntime:serializeRuntimeSessionEnvelope(createRuntimeSessionEnvelope(record3))};if(record3.title)initialMetadata.title=record3.title;let session=await agent.createSession({sessionId:record3.sessionId,cwd:record3.cwd,maxIterations:DEFAULT_AGENT_MAX_ITERATIONS,systemPrompt,...reasoningConfig?{reasoning:reasoningConfig}:{},metadata:initialMetadata});return sdkSession=session,{agent,session,websearchToolConfigKey:websearchToolState.key}},ensureLoadedSession=async(record3,snapshot)=>{let nextSnapshot=snapshot;if(record3.sdkSession&&record3.sdkAgent&&!hasReleasedSdkHandle(record3)){let websearchToolState=await resolveWebsearchToolConfigState();if(record3.loadedWebsearchToolConfigKey===websearchToolState.key)return;if(record3.activeRun||record3.pendingAction)return;nextSnapshot=nextSnapshot??deps.sanitizeRuntimeSnapshotMessages(record3.sdkSession.toSnapshot()),await Promise.allSettled([record3.sdkSession.dispose(),record3.sdkAgent.dispose()]),record3.sdkSession=void 0,record3.sdkAgent=void 0}if(hasReleasedSdkHandle(record3))await Promise.allSettled([record3.sdkSession?.dispose(),record3.sdkAgent?.dispose()]),record3.sdkSession=void 0,record3.sdkAgent=void 0;let loaded=await buildSdkSession(record3,nextSnapshot??await safeLoadRuntimeSnapshot({directory:deps.sessionStoreDir,sessionId:record3.sessionId,loadFromStore:async()=>await deps.snapshotStore.load(record3.sessionId)}));record3.sdkAgent=loaded.agent,record3.sdkSession=loaded.session,record3.loadedWebsearchToolConfigKey=loaded.websearchToolConfigKey,record3.updatedAt=Number(loaded.session.updatedAt??record3.updatedAt??Date.now())||Date.now(),await deps.syncPlanMode(record3),await deps.syncSessionMcpServers(record3)},reloadSession=async(record3)=>{if(await ensureLoadedSession(record3),!record3.sdkSession)return;let snapshot=deps.sanitizeRuntimeSnapshotMessages(record3.sdkSession.toSnapshot());await Promise.allSettled([record3.sdkSession.dispose(),record3.sdkAgent?.dispose()]),record3.sdkSession=void 0,record3.sdkAgent=void 0,await ensureLoadedSession(record3,snapshot)},persistRecord=async(record3)=>{if(!record3.sdkSession)return;let snapshot=wrapSdkSnapshotForSave(record3,record3.sdkSession.toSnapshot());await deps.snapshotStore.save(snapshot),record3.updatedAt=Number(snapshot.updatedAt??Date.now())||Date.now()},resolveRuntimeConfig=async(input)=>{if(deps.options.resolveRuntimeConfig)return await deps.options.resolveRuntimeConfig(input);return resolveDefaultRuntimeConfig(deps.options,input,deps.normalizePositiveInteger)},createRecordFromSnapshot=async(sessionId,snapshot)=>{let envelope=readEnvelopeFromSnapshot(snapshot),fallback=await resolveRuntimeConfig({cwd:snapshot.cwd||process11.cwd(),persisted:envelope?.runtimeConfig});return createRuntimeSessionRecord(sessionId,snapshot,fallback)};return{ensureLoadedSession,reloadSession,createRuntimeOwnedSubagentSession,persistRecord,createRecordFromSnapshot,normalizeRuntimeSnapshot:async(snapshot,sessionId=snapshot.sessionId)=>{let normalizedSessionId=String(sessionId??"").trim();if(!normalizedSessionId)return snapshot;let sanitizedSnapshot=deps.sanitizeRuntimeSnapshotMessages(snapshot),record3=await createRecordFromSnapshot(normalizedSessionId,sanitizedSnapshot);return applyEnvelope(canonicalizeSnapshotSystemMessages(sanitizedSnapshot),createRuntimeSessionEnvelope(record3),record3.cwd,record3.metadata)},resolveRuntimeConfig,prepareSessionConfigUpdate:async(record3,update)=>{let nextCwd=typeof update.cwd==="string"&&update.cwd.trim()?path29.resolve(update.cwd):record3.cwd;if(!update.runtimeConfig)return{...update,...nextCwd!==record3.cwd?{cwd:nextCwd}:{}};let runtimeConfig=await resolveRuntimeConfig({cwd:nextCwd,requested:update.runtimeConfig,current:record3.runtimeConfig});return{...update,...nextCwd!==record3.cwd?{cwd:nextCwd}:{},runtimeConfig}},buildSystemPrompt,readSnapshotSystemPrompt,canonicalizeSnapshotSystemMessages,withUpdatedSystemPrompt,wrapSdkSnapshotForSave,shouldPersistRepairedRuntimeConfig:(snapshot,record3)=>{let persisted=readRuntimeSessionEnvelope(snapshot)?.runtimeConfig??null,next=createRuntimeSessionEnvelope(record3).runtimeConfig;return JSON.stringify(persisted)!==JSON.stringify(next)||shouldPersistCanonicalSystemMessages(snapshot)}}}import path30 from"node:path";function trimBackgroundExecText(text){let normalized=String(text??"").replace(/\r/g,"");if(!normalized)return"";let lines=normalized.split(`
|
|
1050
1050
|
`),trimmedLines=lines;if(lines.length>BACKGROUND_EXEC_PROMPT_MAX_LINES)trimmedLines=lines.slice(lines.length-BACKGROUND_EXEC_PROMPT_MAX_LINES);let trimmed=trimmedLines.join(`
|
|
1051
1051
|
`).trim();if(trimmed.length<=BACKGROUND_EXEC_PROMPT_MAX_CHARS)return trimmed;trimmed=trimmed.slice(trimmed.length-BACKGROUND_EXEC_PROMPT_MAX_CHARS);let newlineIndex=trimmed.indexOf(`
|
|
1052
1052
|
`);if(newlineIndex>=0)return trimmed.slice(newlineIndex+1);return trimmed}function readTailAssistantMessage(messages,index){if(index<0)return null;let value=messages[index];if(!value||typeof value!=="object"||Array.isArray(value))return null;return value}function readToolResultStructuredContent(result){if(!result||typeof result!=="object"||Array.isArray(result))return{};return toJsonObject(result.structuredContent)}function createRuntimeSessionRunLoopController(deps){let takePendingSteerBatch=(runState)=>{if(runState.pendingSteers.length===0)return[];let batch=[...runState.pendingSteers];return runState.pendingSteers.length=0,batch},joinPendingSteerContent=(batch)=>{return batch.map((item)=>item.content.trim()).filter((segment)=>segment.length>0).join(`
|
|
@@ -1065,10 +1065,10 @@ ${DURABLE_COMPLETION_PROMPT}`},createRuntimeOwnedSubagentSession=async(runtimeCo
|
|
|
1065
1065
|
${firstUserQuery}
|
|
1066
1066
|
|
|
1067
1067
|
${epoch}`).digest("hex");return record3.cachedPromptCacheKey={signature,value},value}function updateResponsesCompactionMetadata(record3,trigger){let current=readResponsesCompactionMetadata(record3.metadata);record3.metadata=toMetadataMap({...record3.metadata??{},[RESPONSES_COMPACTION_METADATA_KEY]:{epoch:current.epoch+1,lastTrigger:trigger,updatedAt:Date.now()}}),record3.cachedPromptCacheKey=void 0,record3.updatedAt=Date.now()}function injectOpenAIResponsesProviderOptions(record3,request){let runtimeConfig=runtimeConfigForActiveRun(record3);if(runtimeConfig.adapter!=="openai-responses")return request;let providerOptions={};if(request.providerOptions&&typeof request.providerOptions==="object")providerOptions={...request.providerOptions};let openaiProviderOptions={};if(providerOptions.openai&&typeof providerOptions.openai==="object"&&!Array.isArray(providerOptions.openai))openaiProviderOptions={...providerOptions.openai};let changed=!1,promptCacheKey=buildResponsesPromptCacheKey(record3,request);if(promptCacheKey)openaiProviderOptions.promptCacheKey=promptCacheKey,changed=!0;if(runtimeConfig.responsesUseSessionId===!0){let nextHeaders={},requestHeaders=openaiProviderOptions.requestHeaders;if(requestHeaders&&typeof requestHeaders==="object"&&!Array.isArray(requestHeaders)){for(let[key,value]of Object.entries(requestHeaders))if(typeof value==="string")nextHeaders[key]=value}nextHeaders.session_id=record3.sessionId,openaiProviderOptions.requestHeaders=nextHeaders,changed=!0}if(!changed)return request;return{...request,providerOptions:{...providerOptions,openai:openaiProviderOptions}}}function hasCompletedTodos2(todoSnapshot){return Array.isArray(todoSnapshot)&&todoSnapshot.length>0&&todoSnapshot.every((item)=>item.status==="completed")}function pushProviderRetryingEvent(record3,notice){let activeRun=record3.activeRun;if(!activeRun)return;activeRun.currentChannel?.push({type:"run.retrying",sessionId:record3.sessionId,runId:activeRun.runId,requestId:notice.requestId,...notice.provider?{provider:notice.provider}:{},...notice.modelId?{modelId:notice.modelId}:{},retry:notice.retry,maxRetries:notice.maxRetries,attempt:notice.attempt,maxAttempts:notice.maxAttempts,delayMs:notice.delayMs,error:structuredClone(enrichSessionErrorPayload(notice.error))})}function createProviderRetryNotificationPlugin(record3){return{manifest:{id:"dim-agent-provider-retry-notifications",version:"0.0.1",apiVersion:1,permissions:{},priority:-1e4},setup(){return{hooks:[{descriptor:{name:"model.request"},middleware:[({payload})=>({request:attachRetryNoticeSinkToModelRequest(payload.request,(notice)=>pushProviderRetryingEvent(record3,notice))})]}]}}}}function buildCompressionEventDiagnostics2(input){if(!input.notification&&!input.run)return;return{...input.run?{run:input.run}:{},...input.notification?{notification:input.notification}:{}}}function readCompressionNotificationTokensBefore2(notification){if(!notification)return;switch(notification.type){case"context.compaction.required":case"context.compacted":case"context.compaction.failed":return notification.metadata.estimatedInputTokensBefore;default:return}}function readCompressionNotificationThreshold2(notification){if(!notification)return;switch(notification.type){case"context.compaction.required":case"context.compacted":case"context.compaction.failed":return notification.metadata.thresholdTokens;default:return}}function readCompressionNotificationTokensAfter2(notification){if(!notification||notification.type!=="context.compacted")return;return notification.metadata.estimatedInputTokensAfter}function readCompressionNotificationRemovedMessages2(notification){if(!notification)return;switch(notification.type){case"context.compacted":case"context.compaction.failed":return notification.metadata.compactedMessageCount;default:return}}function readCompressionNotificationClearedToolOutputs2(notification){if(!notification)return;switch(notification.type){case"context.compacted":case"context.compaction.failed":return notification.metadata.prunedToolOutputCount;default:return}}function readCompressionNotificationReasonCode2(notification){if(!notification||notification.type!=="context.compaction.failed")return;return notification.metadata.reasonCode}function toCompressionEvent2(input){let metadata=input.metadata?toMetadataMap(input.metadata):void 0,notification=input.diagnostics?.notification,run=input.diagnostics?.run,tokensBefore=typeof metadata?.estimatedInputTokensBefore==="number"?metadata.estimatedInputTokensBefore:typeof metadata?.estimatedInputTokens==="number"?metadata.estimatedInputTokens:readCompressionNotificationTokensBefore2(notification)??run?.estimatedInputTokensBefore,threshold=typeof metadata?.thresholdTokens==="number"?metadata.thresholdTokens:readCompressionNotificationThreshold2(notification)??run?.thresholdTokens,tokensAfter=typeof metadata?.tokensAfter==="number"?metadata.tokensAfter:typeof metadata?.estimatedInputTokensAfter==="number"?metadata.estimatedInputTokensAfter:readCompressionNotificationTokensAfter2(notification)??run?.estimatedInputTokensAfter,removedMessages=typeof metadata?.removedMessages==="number"?metadata.removedMessages:typeof metadata?.compactedMessageCount==="number"?metadata.compactedMessageCount:readCompressionNotificationRemovedMessages2(notification)??run?.compactedMessageCount,clearedToolOutputs=typeof metadata?.clearedToolOutputs==="number"?metadata.clearedToolOutputs:typeof metadata?.prunedToolOutputCount==="number"?metadata.prunedToolOutputCount:readCompressionNotificationClearedToolOutputs2(notification)??run?.diagnostics.prunedToolOutputCount,reasonCode=typeof metadata?.reasonCode==="string"?metadata.reasonCode:readCompressionNotificationReasonCode2(notification)??run?.reasonCode,summaryGenerated=typeof metadata?.summaryGenerated==="boolean"?metadata.summaryGenerated:notification?.type==="context.compacted"||typeof run?.summary==="string";return{type:"context.compression",sessionId:input.sessionId,...input.runId?{runId:input.runId}:{},state:input.state,trigger:input.trigger,...input.label?{label:input.label}:{},...typeof tokensBefore==="number"?{tokensBefore}:{},...typeof threshold==="number"?{threshold}:{},...typeof tokensAfter==="number"?{tokensAfter}:{},...typeof removedMessages==="number"?{removedMessages}:{},...typeof clearedToolOutputs==="number"?{clearedToolOutputs}:{},...summaryGenerated?{summaryGenerated}:{},...typeof metadata?.elapsedMs==="number"?{elapsedMs:metadata.elapsedMs}:{},...reasonCode?{reasonCode}:{},...input.diagnostics?{diagnostics:input.diagnostics}:{},...metadata?{metadata}:{}}}class NativeAgentRuntime{options;snapshotStore;sessionStoreDir;hostDataDir;records=new Map;sharedMcpHub;debugLogState=buildDebugLogState(!1,void 0);mcpInitialSyncAttempted=!1;sessions={list:async(options)=>{if(options)return await this.listSessionSnapshots(options);return await this.listSessionSnapshots()},get:async(sessionId)=>await this.getSessionSnapshot(sessionId),create:async(input)=>{let session=await this.createSession(input);return await this.getSessionSnapshot(session.id)},createWithMessages:async(messages,input)=>await this.createSessionWithMessages(messages,input),destroy:async(sessionId)=>await this.destroySession(sessionId),rename:async(sessionId,title)=>await this.renameSession(sessionId,title),updateMetadata:async(sessionId,metadata)=>await this.updateSessionMetadata(sessionId,metadata),interrupt:async(sessionId)=>{let session=await this.openSession(sessionId);if(!session)return!1;return await session.cancel()},getUsageSummary:async(sessionId)=>await this.getSessionUsageSummary(sessionId),getUsageLedger:async(sessionId)=>await this.getSessionUsageLedger(sessionId),getTurnUsage:async(sessionId,turnId)=>await this.getSessionTurnUsage(sessionId,turnId),listTurnUsages:async(sessionId)=>await this.listSessionTurnUsages(sessionId),listRequestUsages:async(sessionId,filter2)=>await this.listSessionRequestUsages(sessionId,filter2)};[AGENT_RUNTIME_INTERNALS]={getSessionState:async(sessionId)=>await this.getSessionStateInternal(sessionId),getSessionHandle:async(sessionId)=>await this.getSessionHandleInternal(sessionId),getMcpState:async()=>await this.getMcpState(),syncMcpServers:async(configs)=>await this.syncMcpServers(configs)};async getSessionState(sessionId){let state=await this.getSessionStateInternal(sessionId);if(!state)return;return projectPublicSessionState(state)}async getSessionHandle(sessionId){return await this.getSessionHandleInternal(sessionId)}async getMcpState(){return this.projectMcpState(this.sharedMcpHub.getState())}async syncMcpServers(configs){return await this.syncGlobalMcpServers(configs)}getDebugLogState(){return{...this.debugLogState}}async setDebugLogState(update){let next=buildDebugLogState(update.enabled,update.directory??this.debugLogState.directory);this.debugLogState=next;for(let record3 of this.records.values())record3.sdkAgent?.setObservabilityEnabled(next.enabled,{logFilePath:getDebugLogFilePath(next.directory,record3.sessionId),...update.reason?{reason:update.reason}:{}});return{...next}}runtimeHub;sessionInteraction;sessionLoad;sessionLifecycle;sessionDelegation;sessionRunLoop;sessionControl;constructor(options){this.options=options,this.sessionStoreDir=path31.join(path31.resolve(options.stateDir),RUNTIME_SNAPSHOT_DIR),this.hostDataDir=options.hostDataDir?path31.resolve(options.hostDataDir):path31.resolve(options.stateDir),this.snapshotStore=new RuntimeSnapshotFileStore({directory:this.sessionStoreDir}),this.runtimeHub=getOrCreateDimRuntimeHub({stateDirPath:path31.resolve(options.stateDir)}),this.sharedMcpHub=new SharedAcpMcpHub({initialPhase:options.mcpInitialState??"ready"}),this.sessionInteraction=createRuntimeSessionInteractionController({options:this.options,updateResponsesCompactionMetadata}),this.sessionLoad=createRuntimeSessionLoadController({options:this.options,snapshotStore:this.snapshotStore,sessionStoreDir:this.sessionStoreDir,hostDataDir:this.hostDataDir,sharedMcpHub:this.sharedMcpHub,sanitizeRuntimeSnapshotMessages,normalizePositiveInteger:normalizePositiveInteger3,normalizeLastRequestBudget:(value)=>normalizeLastRequestBudget(value)??null,isDuplicateRequestBudget,handleAskUser:async(record3,request)=>await this.sessionInteraction.handleAskUser(record3,request),handleToolApproval:async(record3,request)=>await this.sessionInteraction.handleToolApproval(record3,request),resolveSubagentApprovalDecision:async(sessionId,request)=>await this.resolveSubagentApprovalDecision(sessionId,request),handleNotification:async(record3,notification,context)=>await this.handleNotification(record3,notification,context),syncPlanMode:async(record3)=>await this.syncPlanMode(record3),syncSessionMcpServers:async(record3)=>await this.syncSessionMcpServers(record3),createProviderRetryNotificationPlugin:(record3)=>createProviderRetryNotificationPlugin(record3),injectResponsesProviderOptions:(record3,request)=>injectOpenAIResponsesProviderOptions(record3,request),getDebugLogState:()=>this.getDebugLogState()}),this.sessionLifecycle=createRuntimeSessionLifecycleController({records:this.records,snapshotStore:this.snapshotStore,sessionStoreDir:this.sessionStoreDir,ensureLoadedSession:async(record3,snapshot)=>await this.ensureLoadedSession(record3,snapshot),createRecordFromSnapshot:async(sessionId,snapshot)=>await this.createRecordFromSnapshot(sessionId,snapshot),normalizeRuntimeSnapshot:async(snapshot,sessionId)=>await this.normalizeRuntimeSnapshot(snapshot,sessionId),persistRecord:async(record3)=>await this.persistRecord(record3),cancelRecord:async(record3)=>await this.cancelRecord(record3),createSessionFacade:(record3)=>this.createSessionFacade(record3),resolveRuntimeConfig:async(input)=>await this.resolveRuntimeConfig(input),ensureInitialMcpSync:async()=>await this.ensureInitialMcpSync(),applyGlobalMcpServersToRecords:(configs)=>this.applyGlobalMcpServersToRecords(configs),deferGlobalMcpServersSync:(configs)=>this.sharedMcpHub.markDeferred(configs),readGlobalMcpServers:(record3)=>this.readGlobalMcpServers(record3),wrapSdkSnapshotForSave:(record3,snapshot)=>this.wrapSdkSnapshotForSave(record3,snapshot),canonicalizeSnapshotSystemMessages:(snapshot,systemPrompt)=>this.canonicalizeSnapshotSystemMessages(snapshot,systemPrompt),readSnapshotSystemPrompt:(snapshot)=>this.readSnapshotSystemPrompt(snapshot),shouldPersistRepairedRuntimeConfig:(snapshot,record3)=>this.sessionLoad.shouldPersistRepairedRuntimeConfig(snapshot,record3),readLatestRequestBudgetSnapshot:(record3)=>readLatestRequestBudgetSnapshot(record3),clearLastRequestBudget:(record3)=>clearLastRequestBudget(record3),cloneSessionUsageSummary:(summary)=>cloneSessionUsageSummary(summary),cloneSessionUsageLedger:(ledger)=>cloneSessionUsageLedger(ledger),cloneTurnUsageSummary:(summary)=>cloneTurnUsageSummary(summary)}),this.sessionDelegation=createRuntimeSessionDelegationController({options:this.options,processSessionItem:async(record3,runState,itemId,options2)=>await this.processSessionItem(record3,runState,itemId,options2),persistRecord:async(record3)=>await this.persistRecord(record3),buildSystemPrompt:async(cwd)=>await this.buildSystemPrompt(cwd),listSessionMcpServers:async(record3)=>await this.listSessionMcpServers(record3),createRuntimeOwnedSubagentSession:async(runtimeConfig,input)=>await this.createRuntimeOwnedSubagentSession(runtimeConfig,input)}),this.sessionRunLoop=createRuntimeSessionRunLoopController({persistRecord:async(record3)=>await this.persistRecord(record3),flushPendingMcpSyncIfIdle:async()=>await this.flushPendingMcpSyncIfIdle(),orchestrateDelegation:async(record3,runState,intent)=>await this.orchestrateDelegation(record3,runState,intent),captureTodoSnapshotOnFinish:(record3,runState)=>this.captureTodoSnapshotOnFinish(record3,runState),clearRunState:(record3,runState)=>this.clearRunState(record3,runState)}),this.sessionControl=createRuntimeSessionControlController({sessionRunLoop:this.sessionRunLoop,ensureLoadedSession:async(record3,snapshot)=>await this.ensureLoadedSession(record3,snapshot),persistRecord:async(record3)=>await this.persistRecord(record3),readDefaultMcpServers:async()=>{if(!this.options.mcpServers)return[];return[...await maybeCall(this.options.mcpServers)]}})}readGlobalMcpServers(recordOverride){let desired=this.sharedMcpHub.getDesiredConfig();if(desired.length>0)return desired;if(recordOverride?.mcpServers.length)return recordOverride.mcpServers.map((server)=>({...server}));for(let record3 of this.records.values())if(record3.mcpServers.length>0)return record3.mcpServers.map((server)=>({...server}));return[]}applyGlobalMcpServersToRecords(configs){let next=configs.map((server)=>({...server}));for(let record3 of this.records.values())record3.mcpServers=next.map((server)=>({...server}))}async ensureInitialMcpSync(){if(this.mcpInitialSyncAttempted)return;this.mcpInitialSyncAttempted=!0;let seed=this.options.mcpServers?[...await maybeCall(this.options.mcpServers)]:[];if(!seed.length&&this.sharedMcpHub.getDesiredConfig().length===0)return;await this.sharedMcpHub.syncServers(seed),this.applyGlobalMcpServersToRecords(seed)}async syncGlobalMcpServers(configs){let next=await this.sharedMcpHub.syncServers(configs);return this.applyGlobalMcpServersToRecords(next.configs),this.projectMcpState(next)}async flushPendingMcpSyncIfIdle(){if(!this.sharedMcpHub.hasPendingSync())return;for(let record3 of this.records.values())if(record3.activeRun||record3.pendingAction)return;let next=await this.sharedMcpHub.flushPending();this.applyGlobalMcpServersToRecords(next.configs)}projectMcpState(state){return{phase:state.phase,configuredServers:state.configuredServers,connectedServers:state.connectedServers.map((entry)=>({id:entry.id,name:entry.name,transport:entry.transport,toolNames:[...entry.toolNames]})),failedServers:state.failedServers.map((entry)=>({id:entry.id,name:entry.name,transport:entry.transport,...entry.error!==void 0?{error:entry.error}:{}})),toolCount:state.toolCount,configs:state.configs.map((config2)=>({...config2}))}}runSubagent(spec){let subagentId=`subagent-${randomUUID7()}`,abortController=new AbortController,upstreamSignal=spec.signal;if(upstreamSignal)if(upstreamSignal.aborted)abortController.abort(upstreamSignal.reason);else upstreamSignal.addEventListener("abort",()=>{abortController.abort(upstreamSignal.reason)},{once:!0});let state={value:"pending"},{runtimeHub}=this,ownerSessionId=spec.ownerSessionId?.trim()||void 0,registry2=runtimeHub.subagentRegistry,handle={subagentId,ownerSessionId,get status(){return state.value},cancel:(_reason)=>{if(!abortController.signal.aborted)abortController.abort();let entry2=registry2.get(subagentId);if(entry2?.session&&entry2.itemId)try{entry2.session.cancelQueuedItem(entry2.itemId)}catch{}},result:void 0},entry={subagentId,ownerSessionId,abortController,handle,session:null,itemId:null,state};registry2.register(entry);let runPromise=(async()=>{let startedAt=Date.now();try{let runtimeConfig=await this.resolveRuntimeConfig({cwd:spec.cwd}),{pair}=await this.createRuntimeOwnedSubagentSession(runtimeConfig,{cwd:spec.cwd,description:spec.description,ownerSessionId,delegateTasksEnabled:!1,askUserEnabled:!1,approvalMode:"auto"});return await executeSubagentRun({entry,spec,pair,getSnapshotUsage:(snapshot)=>{if(!snapshot||typeof snapshot!=="object")return;return snapshot.usage??void 0},onFinish:()=>{registry2.unregister(subagentId)}})}catch(error48){registry2.unregister(subagentId);let cancelled=abortController.signal.aborted;state.value=cancelled?"cancelled":"failed";let message=error48 instanceof Error?error48.message:String(error48);return{summary:"",state:state.value,durationMs:Date.now()-startedAt,toolsUsed:0,...cancelled?{}:{error:{code:"subagent_execution_failed",message}}}}})();return Object.defineProperty(handle,"result",{value:runPromise,writable:!1,configurable:!1,enumerable:!0}),handle}async listSessionSnapshots(options){if(options)return await this.sessionLifecycle.listSessionSnapshots(options);return await this.sessionLifecycle.listSessionSnapshots()}async getSessionSnapshot(sessionId){return await this.sessionLifecycle.getSessionSnapshot(sessionId)}async getLiveSessionUsageSummary(record3){return await this.sessionLifecycle.getLiveSessionUsageSummary(record3)}async getLiveSessionUsageLedger(record3){return await this.sessionLifecycle.getLiveSessionUsageLedger(record3)}async getLiveSessionTurnUsage(record3,turnId){return await this.sessionLifecycle.getLiveSessionTurnUsage(record3,turnId)}async listLiveSessionTurnUsages(record3){return await this.sessionLifecycle.listLiveSessionTurnUsages(record3)}async listLiveSessionRequestUsages(record3,filter2){return await this.sessionLifecycle.listLiveSessionRequestUsages(record3,filter2)}async handleNotification(record3,notification,context){return await this.sessionInteraction.handleNotification(record3,notification,context)}async getSessionUsageSummary(sessionId){return await this.sessionLifecycle.getSessionUsageSummary(sessionId)}async getSessionUsageLedger(sessionId){return await this.sessionLifecycle.getSessionUsageLedger(sessionId)}async getSessionTurnUsage(sessionId,turnId){return await this.sessionLifecycle.getSessionTurnUsage(sessionId,turnId)}async listSessionTurnUsages(sessionId){return await this.sessionLifecycle.listSessionTurnUsages(sessionId)}async listSessionRequestUsages(sessionId,filter2){return await this.sessionLifecycle.listSessionRequestUsages(sessionId,filter2)}async listSessions(options){if(options)return await this.sessionLifecycle.listSessions(options);return await this.sessionLifecycle.listSessions()}async openSession(sessionId){return await this.sessionLifecycle.openSession(sessionId)}async createSession(input){return await this.sessionLifecycle.createSession(input)}async destroySession(sessionId){await this.sessionLifecycle.destroySession(sessionId)}async unloadSession(sessionId,options){await this.sessionLifecycle.unloadSession(sessionId,options)}async createSessionWithMessages(messages,input){return await this.sessionLifecycle.createSessionWithMessages(messages,input)}async renameSession(sessionId,title){return await this.sessionLifecycle.renameSession(sessionId,title)}async updateSessionMetadata(sessionId,metadata){return await this.sessionLifecycle.updateSessionMetadata(sessionId,metadata)}async getSessionStateInternal(sessionId){return await this.sessionLifecycle.getSessionStateInternal(sessionId)}async getSessionHandleInternal(sessionId){return await this.sessionLifecycle.getSessionHandleInternal(sessionId)}async replaceSessionSnapshot(sessionId,snapshot,update){await this.sessionLifecycle.replaceSessionSnapshot(sessionId,snapshot,update)}async persistSession(sessionId){await this.sessionLifecycle.persistSession(sessionId)}createSessionFacade(record3){return{id:record3.sessionId,run:(input,options)=>this.startRun(record3,input,options),resume:(input,options)=>this.resumeRun(record3,input,options),steer:async(input)=>{await this.ensureLoadedSession(record3);let normalizedInput=input.trim(),activeRun=record3.activeRun;if(!normalizedInput||!activeRun||!record3.sdkSession)return!1;let queueItemId=readSessionQueueItemId(record3.sdkSession.steer(normalizedInput,{metadata:{originalEventType:"steer_injected",steer:!0}}));if(queueItemId)activeRun.pendingSteers.push({content:normalizedInput,queueItemId});return Boolean(queueItemId)},setMode:async(modeId)=>{await this.ensureLoadedSession(record3),this.assertSessionIdle(record3,"setMode"),record3.modeId=modeId,clearLastRequestBudget(record3),await this.syncPlanMode(record3),await this.persistRecord(record3)},updateConfig:async(update)=>{await this.ensureLoadedSession(record3);let resolvedUpdate=await this.prepareSessionConfigUpdate(record3,update),previousRuntimeConfig=record3.runtimeConfig,previousCwd=record3.cwd,previousGlobalMcpServers=this.sharedMcpHub.getDesiredConfig(),pendingMcpServersUpdate=Array.isArray(resolvedUpdate.mcpServers)?[...resolvedUpdate.mcpServers]:null,recordUpdate=pendingMcpServersUpdate?{...resolvedUpdate,mcpServers:void 0}:resolvedUpdate;applySessionConfigUpdate(record3,recordUpdate);let runtimeConfigChanged=JSON.stringify(previousRuntimeConfig)!==JSON.stringify(record3.runtimeConfig),cwdChanged=previousCwd!==record3.cwd,mcpServersChanged=pendingMcpServersUpdate!==null&&JSON.stringify(previousGlobalMcpServers)!==JSON.stringify(pendingMcpServersUpdate);if(runtimeConfigChanged||cwdChanged||mcpServersChanged)clearLastRequestBudget(record3);if(pendingMcpServersUpdate)this.applyGlobalMcpServersToRecords(pendingMcpServersUpdate);if(runtimeConfigChanged||cwdChanged)await this.reloadSession(record3);else if(mcpServersChanged&&!record3.activeRun&&!record3.pendingAction)await this.syncGlobalMcpServers(pendingMcpServersUpdate);else if(mcpServersChanged)this.sharedMcpHub.markDeferred(pendingMcpServersUpdate);await this.persistRecord(record3)},getUsageSummary:async()=>await this.getLiveSessionUsageSummary(record3),getUsageLedger:async()=>await this.getLiveSessionUsageLedger(record3),getTurnUsage:async(turnId)=>await this.getLiveSessionTurnUsage(record3,turnId),listTurnUsages:async()=>await this.listLiveSessionTurnUsages(record3),listRequestUsages:async(filter2)=>await this.listLiveSessionRequestUsages(record3,filter2),triggerManualCompaction:async()=>{if(await this.ensureLoadedSession(record3),this.assertSessionIdle(record3,"triggerManualCompaction"),!record3.sdkSession)return{success:!1,error:"Session is unavailable",errorCode:"session_unavailable",event:toCompressionEvent2({sessionId:record3.sessionId,state:"failed",trigger:"manual",label:"manual_compaction_failed_session_unavailable",metadata:{errorCode:"session_unavailable",error:"Session is unavailable"}})};let previousManualRequests=record3.sdkSession.listRequestUsages({kind:"manual_compaction"}).map((entry)=>structuredClone(entry)),previousManualRequestIds=new Set(previousManualRequests.map((entry)=>entry.id)),readManualCompactionUsage=()=>{let usageRequests=record3.sdkSession.listRequestUsages({kind:"manual_compaction"}).filter((entry)=>!previousManualRequestIds.has(entry.id)).map((entry)=>structuredClone(entry)),usageSummary=usageRequests[0]?cloneTurnUsageSummary(record3.sdkSession.getTurnUsage(usageRequests[0].turnId)):void 0;return{usageRequests,usageSummary}};try{let result=await triggerSdkManualCompaction(record3.sdkSession),manualUsage=readManualCompactionUsage();updateResponsesCompactionMetadata(record3,"manual_compaction_completed");let diagnostics=buildCompressionEventDiagnostics2({run:result});return await this.persistRecord(record3),{success:!0,summary:result.summary,messageCount:result.cursorAfter,run:result,...manualUsage.usageRequests.length>0?{usageRequests:manualUsage.usageRequests}:{},...manualUsage.usageSummary?{usageSummary:manualUsage.usageSummary}:{},event:toCompressionEvent2({sessionId:record3.sessionId,state:"completed",trigger:"manual",label:"manual_compaction_completed",diagnostics,metadata:{summaryGenerated:!0,messageCount:result.cursorAfter,summary:result.summary}})}}catch(error48){let manualUsage=readManualCompactionUsage(),message=error48 instanceof Error?error48.message:String(error48),errorCode=typeof error48?.code==="string"?String(error48.code):"manual_compaction_failed",compactionRun=error48?.result,diagnostics=buildCompressionEventDiagnostics2({...compactionRun?{run:compactionRun}:{}});return{success:!1,error:message,errorCode,...compactionRun?{run:compactionRun}:{},...manualUsage.usageRequests.length>0?{usageRequests:manualUsage.usageRequests}:{},...manualUsage.usageSummary?{usageSummary:manualUsage.usageSummary}:{},event:toCompressionEvent2({sessionId:record3.sessionId,state:"failed",trigger:"manual",label:"manual_compaction_failed",diagnostics,metadata:{errorCode,error:message}})}}},cancel:async()=>await this.cancelRecord(record3)}}startRun(record3,input,options){return this.sessionControl.startRun(record3,input,options)}resumeRun(record3,input,options){return this.sessionControl.resumeRun(record3,input,options)}async ensureLoadedSession(record3,snapshot){await this.sessionLoad.ensureLoadedSession(record3,snapshot)}async reloadSession(record3){await this.sessionLoad.reloadSession(record3)}async createRuntimeOwnedSubagentSession(runtimeConfig,input){return await this.sessionLoad.createRuntimeOwnedSubagentSession(runtimeConfig,input)}async resolveSubagentApprovalDecision(sessionId,request){let normalizedSessionId=sessionId?.trim();if(!normalizedSessionId||!this.options.onToolApproval)return{type:"approved"};return await this.options.onToolApproval({sessionId:normalizedSessionId,runId:`subagent:${normalizedSessionId}`,request})}assertSessionIdle(record3,operation){this.sessionControl.assertSessionIdle(record3,operation)}async processSessionItem(record3,runState,itemId,options){return await this.sessionRunLoop.processSessionItem(record3,runState,itemId,options)}async orchestrateDelegation(record3,runState,intent){return await this.sessionDelegation.orchestrateDelegation(record3,runState,intent)}clearRunState(record3,runState){if(record3.activeRun!==runState)return;runState.attachSignalCleanup?.(),runState.currentItemOutcome=void 0,runState.todoSnapshot=void 0,runState.forcedSummaryMode=void 0,runState.pendingSteers.length=0,runState.backgroundExecsByProcessId.clear(),runState.backgroundWaitStartedAtMs=void 0,runState.backgroundHeartbeatAtMs=void 0,runState.backgroundPollRoundRobinIndex=0,runState.initialUserInputText="",runState.completionEvidence=createRuntimeCompletionEvidence(),record3.activeRun=void 0,record3.pendingAction=void 0,this.flushPendingMcpSyncIfIdle().catch(()=>{})}captureTodoSnapshotOnFinish(record3,runState){let snapshot=runState.todoSnapshot;if(hasOpenTodos(snapshot)){record3.todoSnapshot=snapshot?snapshot.map((item)=>({...item})):void 0;return}if(hasCompletedTodos2(snapshot))record3.todoSnapshot=void 0}async cancelRecord(record3){return await this.sessionControl.cancelRecord(record3)}async syncPlanMode(record3){await this.sessionControl.syncPlanMode(record3)}async listSessionMcpServers(record3){return await this.sessionControl.listSessionMcpServers(record3)}async syncSessionMcpServers(record3){await this.sessionControl.syncSessionMcpServers(record3)}wrapSdkSnapshotForSave(record3,snapshot){return this.sessionLoad.wrapSdkSnapshotForSave(record3,snapshot)}async persistRecord(record3){await this.sessionLoad.persistRecord(record3)}async createRecordFromSnapshot(sessionId,snapshot){return await this.sessionLoad.createRecordFromSnapshot(sessionId,snapshot)}async normalizeRuntimeSnapshot(snapshot,sessionId=snapshot.sessionId){return await this.sessionLoad.normalizeRuntimeSnapshot(snapshot,sessionId)}async resolveRuntimeConfig(input){return await this.sessionLoad.resolveRuntimeConfig(input)}async prepareSessionConfigUpdate(record3,update){return await this.sessionLoad.prepareSessionConfigUpdate(record3,update)}async buildSystemPrompt(cwd){return await this.sessionLoad.buildSystemPrompt(cwd)}readSnapshotSystemPrompt(snapshot){return this.sessionLoad.readSnapshotSystemPrompt(snapshot)}canonicalizeSnapshotSystemMessages(snapshot,systemPrompt){return this.sessionLoad.canonicalizeSnapshotSystemMessages(snapshot,systemPrompt)}}async function createAgentRuntime(options){if(!options.stateDir?.trim())throw Error("createAgentRuntime requires a persistent stateDir");return new NativeAgentRuntime(options)}function normalizeText8(value){return value.replace(/\r/g,"").trimEnd()}var SESSION_QUEUE_LIMIT=5,VALID_QUEUE_STATUS=new Set(["idle","running","paused_confirm","error"]),VALID_ERROR_CODES=new Set(["network_error","timeout","canceled_by_user","rate_limited","config_unavailable","unknown"]);function sanitizeQueueText(text){let raw=normalizeText8(String(text??""));if(!raw)return"";let out="";for(let i=0;i<raw.length;i++){let code=raw.charCodeAt(i);if(code===9||code===10){out+=raw[i];continue}if(code<32||code===127)continue;out+=raw[i]}return out}function sortQueueItems(items){return[...items].sort((a,b)=>{if(a.kind!==b.kind)return a.kind==="steer"?-1:1;if(a.kind==="steer"&&b.kind==="steer"){let aSteeredAt=Number(a.steeredAt??a.createdAt??0),bSteeredAt=Number(b.steeredAt??b.createdAt??0);if(aSteeredAt!==bSteeredAt)return aSteeredAt-bSteeredAt}let aCreatedAt=Number(a.createdAt??0),bCreatedAt=Number(b.createdAt??0);if(aCreatedAt!==bCreatedAt)return aCreatedAt-bCreatedAt;return String(a.id).localeCompare(String(b.id))})}function normalizeQueueItem(raw){if(!raw||typeof raw!=="object")return null;let id=String(raw.id??"").trim(),text=sanitizeQueueText(raw.text);if(!id||!text)return null;let createdAt=Number(raw.createdAt??0),kind=String(raw.kind??"").trim()==="steer"?"steer":"user",steeredAt=Number(raw.steeredAt??0),cfg=raw.config,config2;if(cfg&&typeof cfg==="object"){let approvalsMode=cfg.approvalsMode==="auto"?"auto":cfg.approvalsMode==="normal"?"normal":cfg.approvalsMode==="strict"?"strict":void 0;config2={model:String(cfg.model??"").trim()||void 0,temperature:Number.isFinite(Number(cfg.temperature))?Number(cfg.temperature):void 0,interleavedThinking:typeof cfg.interleavedThinking==="boolean"?cfg.interleavedThinking:void 0,approvalsMode,providerId:String(cfg.providerId??"").trim()||void 0}}return{id,text,createdAt:Number.isFinite(createdAt)?createdAt:0,kind,steeredAt:kind==="steer"&&Number.isFinite(steeredAt)&&steeredAt>0?steeredAt:void 0,...config2?{config:config2}:{}}}function defaultSessionUiMetadata(){return{queue:[],queueLength:0,status:"idle",lastUpdatedAt:0,lastErrorCode:void 0,pinnedMessageIds:[],titleSuggestedAt:void 0}}function normalizeSessionUiMetadata(raw){let base=defaultSessionUiMetadata();if(!raw||typeof raw!=="object")return base;let obj=raw,queueRaw=Array.isArray(obj.queue)?obj.queue:[],queue=sortQueueItems(queueRaw.map(normalizeQueueItem).filter(Boolean).slice(0,SESSION_QUEUE_LIMIT)),status=VALID_QUEUE_STATUS.has(obj.status)?obj.status:base.status,lastUpdatedAt=Number(obj.lastUpdatedAt??0),lastErrorCode=VALID_ERROR_CODES.has(obj.lastErrorCode)?obj.lastErrorCode:void 0,pinnedMessageIds=Array.isArray(obj.pinnedMessageIds)?obj.pinnedMessageIds.map((id)=>String(id??"").trim()).filter(Boolean):[],titleSuggestedAt=Number(obj.titleSuggestedAt??0);return{queue,queueLength:queue.length,status,lastUpdatedAt:Number.isFinite(lastUpdatedAt)?lastUpdatedAt:0,lastErrorCode,pinnedMessageIds,titleSuggestedAt:Number.isFinite(titleSuggestedAt)&&titleSuggestedAt>0?titleSuggestedAt:void 0}}function readSessionUiMetadataFromSnapshot(snapshot){let meta3=snapshot?.metadata?.ui??snapshot?.metadata?.dimAgentRuntime?.metadata?.ui??null;return normalizeSessionUiMetadata(meta3)}var knownRuntimeUserReplayMetadataKeys=new Set(["_dimTranscript","_dimRuntimeContinuation","_dimRuntimeForcedSummary","_dimUnclassifiedInternalMarkers"]);function isRecord(value){return Boolean(value)&&typeof value==="object"&&!Array.isArray(value)}function readTranscriptKind(value){if(value==="user_input"||value==="user_steer"||value==="subagent_result"||value==="runtime_continuation"||value==="runtime_forced_summary")return value;return null}function readTranscriptVisibility(value){if(value==="visible"||value==="hidden"||value==="summary")return value;return null}function readTranscriptOwner(value){if(value==="user"||value==="runtime"||value==="system")return value;return null}function readRuntimeTranscriptVisibilityMetadata(metadata){let record3=isRecord(metadata)?metadata:null,transcript=isRecord(record3?._dimTranscript)?record3._dimTranscript:null;if(!transcript)return null;let visibility=readTranscriptVisibility(transcript.visibility),kind=readTranscriptKind(transcript.kind),owner=readTranscriptOwner(transcript.owner);if(!visibility||!kind||!owner)return null;return{visibility,kind,owner}}function readStringArray(value){if(!Array.isArray(value))return[];return value.filter((item)=>typeof item==="string")}function addUniqueString(target,value){if(!target.includes(value))target.push(value)}function readRuntimeInternalMetadataMarkers(metadata){let record3=isRecord(metadata)?metadata:null;if(!record3)return[];let markers=[];for(let key of Object.keys(record3))if(key.startsWith("_dim")&&!knownRuntimeUserReplayMetadataKeys.has(key))addUniqueString(markers,key);if(record3._dimTranscript!=null&&!readRuntimeTranscriptVisibilityMetadata(record3))addUniqueString(markers,"_dimTranscript");for(let key of readStringArray(record3._dimUnclassifiedInternalMarkers))addUniqueString(markers,key);return markers}function classifyLegacyHiddenUserMessage(record3){if(record3._subagentResult||Array.isArray(record3._subagentTasks))return{visibility:"hidden",kind:"subagent_result"};if(record3._dimRuntimeContinuation===!0)return{visibility:"hidden",kind:"runtime_continuation"};if(record3._dimRuntimeForcedSummary==="continuation_iteration_limit")return{visibility:"hidden",kind:"runtime_forced_summary"};if(readRuntimeInternalMetadataMarkers(record3).length>0)return{visibility:"hidden",kind:"unknown_internal"};return null}function classifyRuntimeUserMessageForReplay(metadata){let record3=isRecord(metadata)?metadata:null,legacyHidden=record3?classifyLegacyHiddenUserMessage(record3):null;if(legacyHidden)return legacyHidden;let transcript=readRuntimeTranscriptVisibilityMetadata(metadata);if(transcript){if(transcript.visibility==="visible")return{visibility:"visible",kind:transcript.kind==="user_steer"?"user_steer":"user_input"};let internalKind=transcript.kind==="runtime_continuation"||transcript.kind==="runtime_forced_summary"||transcript.kind==="subagent_result"?transcript.kind:"runtime_continuation";return{visibility:transcript.visibility,kind:internalKind}}if(record3?.steer===!0||record3?.originalEventType==="steer_injected")return{visibility:"visible",kind:"user_steer"};return{visibility:"visible",kind:"user_input"}}function readDebugUiMode(mode,fallback){if(mode==="off"||mode==="on"||mode==="auto")return mode;if(fallback?.auto===!0)return"auto";if(fallback?.enabled===!0)return"on";return"off"}function readPersistedDebugLogMode(mode){return mode==="auto"?"auto":"off"}function parseBool2(value){let s=value.toLowerCase();if(!s)return;if(s==="1"||s==="true"||s==="yes"||s==="on")return!0;if(s==="0"||s==="false"||s==="no"||s==="off")return!1;return}function parseIntValue(value){if(!value)return;let n=Number.parseInt(value,10);return Number.isFinite(n)?n:void 0}function parseFloatValue(value){if(!value)return;let n=Number.parseFloat(value);return Number.isFinite(n)?n:void 0}function readProcessEnv2(){return globalThis?.process?.env??{}}function resolveEnv(primary,fallback){return{...fallback??{},...primary??{}}}function prefixedEnvKeys2(name15){return[`DIMCODE_${name15}`]}function createEnvReader(env,fallback){let merged=resolveEnv(env,fallback),strAny=(keys)=>{for(let key of keys){let raw=String(merged?.[key]??"").trim();if(raw)return raw}return""},str=(key,...aliases)=>{let raw=String(merged?.[key]??"").trim();if(raw)return raw;if(aliases.length)return strAny(aliases);return""},boolAny=(keys)=>{let raw=strAny(keys);return parseBool2(raw)},bool=(key,...aliases)=>{let raw=str(key,...aliases);return parseBool2(raw)},intAny=(keys)=>{let raw=strAny(keys);return parseIntValue(raw)},int2=(key,...aliases)=>{let raw=str(key,...aliases);return parseIntValue(raw)},floatAny=(keys)=>{let raw=strAny(keys);return parseFloatValue(raw)};return{env:merged,str,strAny,bool,boolAny,int:int2,intAny,float:(key,...aliases)=>{let raw=str(key,...aliases);return parseFloatValue(raw)},floatAny,prefixedStr:(name15,...aliases)=>{return strAny([...prefixedEnvKeys2(name15),...aliases])},prefixedBool:(name15,...aliases)=>{return boolAny([...prefixedEnvKeys2(name15),...aliases])},prefixedInt:(name15,...aliases)=>{return intAny([...prefixedEnvKeys2(name15),...aliases])},prefixedFloat:(name15,...aliases)=>{return floatAny([...prefixedEnvKeys2(name15),...aliases])}}}function readPrefixedEnv2(env,name15){let[primary]=prefixedEnvKeys2(name15),source=env??readProcessEnv2();return String(source?.[primary]??"").trim()}function readPrefixedEnvFlag2(env,name15){return readPrefixedEnv2(env,name15).toLowerCase()}var KIMI_K25_TAIL="kimi-k2.5",KIMI_K25_ALIAS="k2p5",KIMI_K2_THINKING_TAIL="kimi-k2-thinking";function stripWrappingQuotes(value){let trimmed=value.trim();if(trimmed.startsWith('"')&&trimmed.endsWith('"')||trimmed.startsWith("'")&&trimmed.endsWith("'"))return trimmed.slice(1,-1).trim();return trimmed}function normalizeModelId2(raw){if(typeof raw!=="string")return"";return stripWrappingQuotes(raw).trim().toLowerCase()}function resolveModelQuirkOverrides(modelId){let normalized=normalizeModelId2(modelId);if(!normalized)return null;let tail=normalized.split("/").filter(Boolean).pop()||"";if(normalized===KIMI_K25_ALIAS||tail===KIMI_K25_TAIL)return{temperature:1,interleavedThinking:!0};if(tail===KIMI_K2_THINKING_TAIL)return{interleavedThinking:!0};return null}function resolveInitialApprovalMode(env){let raw=env.prefixedStr("TOOL_APPROVALS").toLowerCase();if(!raw)return env.prefixedBool("SKIP_APPROVAL")?"auto":"normal";if(raw==="auto"||raw==="all"||raw==="always")return"auto";if(raw==="strict"||raw==="manual")return"strict";return"normal"}function resolveInitialRunConfig(env){let model=env.prefixedStr("MODEL")||"deepseek-v3.1",overrides=resolveModelQuirkOverrides(model),temperature=typeof overrides?.temperature==="number"?overrides.temperature:env.prefixedFloat("TEMPERATURE")??0.7,interleaved_thinking=typeof overrides?.interleavedThinking==="boolean"?overrides.interleavedThinking:env.prefixedBool("INTERLEAVED_THINKING")??!1,reasoning_effort=(env.prefixedStr("REASONING_EFFORT")||"").trim();return{model,temperature,interleaved_thinking,...reasoning_effort?{reasoning_effort}:{}}}function resolveInitialSessionId(env){return env.prefixedStr("SESSION_ID")||""}var i=Symbol.for("preact-signals");function t(){if(e>1){e--;return}let i2,t2=!1;(function(){let i3=r;r=void 0;while(i3!==void 0){if(i3.S.v===i3.v)i3.S.i=i3.i;i3=i3.o}})();while(s!==void 0){let n=s;s=void 0,u++;while(n!==void 0){let o=n.u;if(n.u=void 0,n.f&=-3,!(8&n.f)&&w(n))try{n.c()}catch(n2){if(!t2)i2=n2,t2=!0}n=o}}if(u=0,e--,t2)throw i2}var o,s;function h(i2){let t2=o;o=void 0;try{return i2()}finally{o=t2}}var r,f,e=0,u=0;var d=0,v=0;function l(i2){if(o===void 0)return;let t2=i2.n;if(t2===void 0||t2.t!==o){if(t2={i:0,S:i2,p:o.s,n:void 0,t:o,e:void 0,x:void 0,r:t2},o.s!==void 0)o.s.n=t2;if(o.s=t2,i2.n=t2,32&o.f)i2.S(t2);return t2}else if(t2.i===-1){if(t2.i=0,t2.n!==void 0){if(t2.n.p=t2.p,t2.p!==void 0)t2.p.n=t2.n;t2.p=o.s,t2.n=void 0,o.s.n=t2,o.s=t2}return t2}}function y(i2,t2){this.v=i2,this.i=0,this.n=void 0,this.t=void 0,this.l=0,this.W=t2==null?void 0:t2.watched,this.Z=t2==null?void 0:t2.unwatched,this.name=t2==null?void 0:t2.name}y.prototype.brand=i;y.prototype.h=function(){return!0};y.prototype.S=function(i2){let t2=this.t;if(t2!==i2&&i2.e===void 0)if(i2.x=t2,this.t=i2,t2!==void 0)t2.e=i2;else h(()=>{var i3;(i3=this.W)==null||i3.call(this)})};y.prototype.U=function(i2){if(this.t!==void 0){let{e:t2,x:n}=i2;if(t2!==void 0)t2.x=n,i2.e=void 0;if(n!==void 0)n.e=t2,i2.x=void 0;if(i2===this.t){if(this.t=n,n===void 0)h(()=>{var i3;(i3=this.Z)==null||i3.call(this)})}}};y.prototype.subscribe=function(i2){return j(()=>{let t2=this.value,n=o;o=void 0;try{i2(t2)}finally{o=n}},{name:"sub"})};y.prototype.valueOf=function(){return this.value};y.prototype.toString=function(){return this.value+""};y.prototype.toJSON=function(){return this.value};y.prototype.peek=function(){let i2=o;o=void 0;try{return this.value}finally{o=i2}};Object.defineProperty(y.prototype,"value",{get(){let i2=l(this);if(i2!==void 0)i2.i=this.i;return this.v},set(i2){if(i2!==this.v){if(u>100)throw Error("Cycle detected");(function(i3){if(e!==0&&u===0){if(i3.l!==d)i3.l=d,r={S:i3,v:i3.v,i:i3.i,o:r}}})(this),this.v=i2,this.i++,v++,e++;try{for(let i3=this.t;i3!==void 0;i3=i3.x)i3.t.N()}finally{t()}}}});function a(i2,t2){return new y(i2,t2)}function w(i2){for(let t2=i2.s;t2!==void 0;t2=t2.n)if(t2.S.i!==t2.i||!t2.S.h()||t2.S.i!==t2.i)return!0;return!1}function _(i2){for(let t2=i2.s;t2!==void 0;t2=t2.n){let n=t2.S.n;if(n!==void 0)t2.r=n;if(t2.S.n=t2,t2.i=-1,t2.n===void 0){i2.s=t2;break}}}function b(i2){let t2,n=i2.s;while(n!==void 0){let i3=n.p;if(n.i===-1){if(n.S.U(n),i3!==void 0)i3.n=n.n;if(n.n!==void 0)n.n.p=i3}else t2=n;if(n.S.n=n.r,n.r!==void 0)n.r=void 0;n=i3}i2.s=t2}function p(i2,t2){y.call(this,void 0),this.x=i2,this.s=void 0,this.g=v-1,this.f=4,this.W=t2==null?void 0:t2.watched,this.Z=t2==null?void 0:t2.unwatched,this.name=t2==null?void 0:t2.name}p.prototype=new y;p.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32)return!0;if(this.f&=-5,this.g===v)return!0;if(this.g=v,this.f|=1,this.i>0&&!w(this))return this.f&=-2,!0;let i2=o;try{_(this),o=this;let i3=this.x();if(16&this.f||this.v!==i3||this.i===0)this.v=i3,this.f&=-17,this.i++}catch(i3){this.v=i3,this.f|=16,this.i++}return o=i2,b(this),this.f&=-2,!0};p.prototype.S=function(i2){if(this.t===void 0){this.f|=36;for(let i3=this.s;i3!==void 0;i3=i3.n)i3.S.S(i3)}y.prototype.S.call(this,i2)};p.prototype.U=function(i2){if(this.t!==void 0){if(y.prototype.U.call(this,i2),this.t===void 0){this.f&=-33;for(let i3=this.s;i3!==void 0;i3=i3.n)i3.S.U(i3)}}};p.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(let i2=this.t;i2!==void 0;i2=i2.x)i2.t.N()}};Object.defineProperty(p.prototype,"value",{get(){if(1&this.f)throw Error("Cycle detected");let i2=l(this);if(this.h(),i2!==void 0)i2.i=this.i;if(16&this.f)throw this.v;return this.v}});function g(i2,t2){return new p(i2,t2)}function S(i2){let n=i2.m;if(i2.m=void 0,typeof n=="function"){e++;let s2=o;o=void 0;try{n()}catch(t2){throw i2.f&=-2,i2.f|=8,m(i2),t2}finally{o=s2,t()}}}function m(i2){for(let t2=i2.s;t2!==void 0;t2=t2.n)t2.S.U(t2);i2.x=void 0,i2.s=void 0,S(i2)}function x(i2){if(o!==this)throw Error("Out-of-order effect");if(b(this),o=i2,this.f&=-2,8&this.f)m(this);t()}function E(i2,t2){if(this.x=i2,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=t2==null?void 0:t2.name,f)f.push(this)}E.prototype.c=function(){let i2=this.S();try{if(8&this.f)return;if(this.x===void 0)return;let t2=this.x();if(typeof t2=="function")this.m=t2}finally{i2()}};E.prototype.S=function(){if(1&this.f)throw Error("Cycle detected");this.f|=1,this.f&=-9,S(this),_(this),e++;let i2=o;return o=this,x.bind(this,i2)};E.prototype.N=function(){if(!(2&this.f))this.f|=2,this.u=s,s=this};E.prototype.d=function(){if(this.f|=8,!(1&this.f))m(this)};E.prototype.dispose=function(){this.d()};function j(i2,t2){let n=new E(i2,t2);try{n.c()}catch(i3){throw n.d(),i3}let o2=n.d.bind(n);return o2[Symbol.dispose]=o2,o2}var reactiveMarker=Symbol("reactive"),signalMaps=new WeakMap;function isPlainObject9(val){if(!val||typeof val!=="object")return!1;let proto=Object.getPrototypeOf(val);return proto===Object.prototype||proto===null}function shouldReactify(val){if(!val||typeof val!=="object")return!1;if(val[reactiveMarker])return!1;return isPlainObject9(val)||Array.isArray(val)}function getSignalMap(target){let map3=signalMaps.get(target);if(!map3)map3=new Map,signalMaps.set(target,map3);return map3}function getPropertySignal(target,key){let map3=getSignalMap(target),sig=map3.get(key);if(!sig)sig=a(0),map3.set(key,sig);return sig}function notifyProperty(target,key){let sig=signalMaps.get(target)?.get(key);if(sig)sig.value++}var reactiveCache=new WeakMap;function reactive(target){if(target[reactiveMarker])return target;let cached2=reactiveCache.get(target);if(cached2)return cached2;let proxy=new Proxy(target,{get(obj,key,receiver){if(key===reactiveMarker)return!0;let value=Reflect.get(obj,key,receiver);if(typeof key==="symbol")return value;if(getPropertySignal(obj,key).value,shouldReactify(value)){let child=reactive(value);if(child!==value)Reflect.set(obj,key,child);return child}return value},set(obj,key,newValue,receiver){let isArray=Array.isArray(obj),lengthBefore=isArray?obj.length:0,oldValue=Reflect.get(obj,key,receiver),result=Reflect.set(obj,key,newValue,receiver);if(typeof key!=="symbol"&&!Object.is(oldValue,newValue))notifyProperty(obj,key);if(isArray){if(obj.length!==lengthBefore&&key!=="length")notifyProperty(obj,"length")}return result},deleteProperty(obj,key){let isArray=Array.isArray(obj),lengthBefore=isArray?obj.length:0,had=Reflect.has(obj,key),result=Reflect.deleteProperty(obj,key);if(had&&typeof key!=="symbol")notifyProperty(obj,key);if(isArray){if(obj.length!==lengthBefore&&key!=="length")notifyProperty(obj,"length")}return result}});return reactiveCache.set(target,proxy),proxy}function resolveSource(source){if(typeof source==="function")return source;return()=>source.value}function watch(source,cb,options){let getter=resolveSource(source),oldVal,initialized=!1;return j(()=>{let newVal=getter();if(!initialized){if(initialized=!0,oldVal=newVal,options?.immediate)cb(newVal,void 0);return}if(!Object.is(newVal,oldVal)||options?.deep){let prev=oldVal;oldVal=newVal,cb(newVal,prev)}})}import os6 from"node:os";import path33 from"node:path";import{appendFileSync as appendFileSync2,mkdirSync as mkdirSync3}from"node:fs";import path32 from"node:path";function isNodeLike2(){let p2=globalThis.process;return Boolean(p2&&typeof p2?.versions?.node==="string")}function isDebugEnabled2(){if(!isNodeLike2())return!1;let v2=readPrefixedEnvFlag2(void 0,"DEBUG");return v2==="1"||v2==="true"||v2==="yes"||v2==="on"}var ensuredDirs2=new Set;function ensureDir2(dir){if(ensuredDirs2.has(dir))return;try{mkdirSync3(dir,{recursive:!0})}catch{}ensuredDirs2.add(dir)}function logsDir2(){let raw=readPrefixedEnv2(void 0,"DEBUG_LOG");if(raw)return path32.dirname(raw);return"./logs"}function formatLine2(eventName,payload){let name15=String(eventName??"").trim()||"event",line=`[${new Date().toISOString()}] ${name15}`;if(payload!==void 0)try{line+=` ${JSON.stringify(payload)}`}catch{}return`${line}
|
|
1068
|
-
`}function writeLine2(filePath,line){try{appendFileSync2(filePath,line)}catch{}}function debugLogPath2(){let raw=readPrefixedEnv2(void 0,"DEBUG_LOG");if(raw)return raw;let dir=logsDir2();return ensureDir2(dir),path32.join(dir,"dimcode-debug.log")}function debugLog2(eventName,payload){if(!isDebugEnabled2())return;writeLine2(debugLogPath2(),formatLine2(eventName,payload))}function debugLogSubagent(eventName,payload){if(!isDebugEnabled2())return;let dir=logsDir2();ensureDir2(dir);let filePath=path32.join(dir,"subagent-events.log");writeLine2(filePath,formatLine2(eventName,payload))}function readCliRuntimeConfig(env,configOpts){return resolveRuntimeConfigFromEnv(env,configOpts)}function buildRuntimeConfigFromContext(context,configOpts){let rc=context.runtimeConfig;if(!rc)return resolveRuntimeConfigFromEnv(context.env,configOpts);return{modelId:rc.modelId,...rc.adapter?{adapter:rc.adapter}:{},...rc.provider?{provider:rc.provider}:{},...rc.baseUrl?{baseUrl:rc.baseUrl}:{},...configOpts?.baseUrl&&!rc.baseUrl?{baseUrl:configOpts.baseUrl}:{},...rc.apiKey?{apiKey:rc.apiKey}:{},...rc.nextApiOAuth?{nextApiOAuth:!0}:{},...rc.responsesAutoPromptCacheKey?{responsesAutoPromptCacheKey:!0}:{},...rc.responsesUseSessionId?{responsesUseSessionId:!0}:{},...rc.modelCapabilities?{modelCapabilities:rc.modelCapabilities}:{},...rc.maxInputTokens?{maxInputTokens:rc.maxInputTokens}:{},...rc.maxOutputTokens?{maxOutputTokens:rc.maxOutputTokens}:{}}}function buildCliCreateAgentRuntimeOptions(opts){let configOpts=opts.baseUrl?{baseUrl:opts.baseUrl}:void 0,runtimeConfig=buildRuntimeConfigFromContext(opts.context,configOpts);return{systemPrompt:opts.context.system,modelId:runtimeConfig.modelId,adapter:runtimeConfig.adapter,provider:runtimeConfig.provider,baseUrl:runtimeConfig.baseUrl,apiKey:runtimeConfig.apiKey,nextApiOAuth:runtimeConfig.nextApiOAuth,responsesAutoPromptCacheKey:runtimeConfig.responsesAutoPromptCacheKey,responsesUseSessionId:runtimeConfig.responsesUseSessionId,modelCapabilities:runtimeConfig.modelCapabilities,maxInputTokens:runtimeConfig.maxInputTokens,maxOutputTokens:runtimeConfig.maxOutputTokens,stateDir:opts.stateDir,cliTools:!0,delegateTasks:!0,...opts.tools?{tools:opts.tools}:{},...opts.mcpServers?{mcpServers:opts.mcpServers}:{},...opts.mcpInitialState?{mcpInitialState:opts.mcpInitialState}:{},resolveRuntimeConfig:(input)=>{let current=buildRuntimeConfigFromContext(opts.context,configOpts),persistedWithoutTokenLimits=input.persisted?{...input.persisted,maxInputTokens:void 0,maxOutputTokens:void 0}:void 0;return input.requested?mergeRuntimeConfig(input.current??current,input.requested,{preferSourceMaxInputTokens:!0}):mergeRuntimeConfig(current,persistedWithoutTokenLimits,{preferSourceMaxInputTokens:!1})}}}async function createCliRuntime(opts){return await createAgentRuntime(buildCliCreateAgentRuntimeOptions(opts))}var RUNTIME_SESSION_METADATA_KEY2="dimAgentRuntime",DEBUG_LOG_FILE_NAME="<session-id>.jsonl";function createDefaultDebugLogState(){let directory=path33.join(os6.homedir(),".dimcode","debug");return{enabled:!1,directory,logFilePath:path33.join(directory,DEBUG_LOG_FILE_NAME)}}function normalizeText9(value){return String(value??"").trim()}function normalizeModeId(value){return value==="plan"?"plan":"agent"}function normalizeToolApprovalMode(value){if(value==="auto"||value==="normal"||value==="strict")return value;if(value==="all")return"auto";return}function cloneJson(value){return JSON.parse(JSON.stringify(value??null))}function cloneMetadata2(value){return value?cloneJson(value):void 0}function cloneEnvRecord3(source){return Object.entries(source??{}).reduce((next,[key,value])=>{return next[key]=value,next},{})}function readTruthyFlag(value){let normalized=normalizeText9(value).toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function readNoInteractionFlag(config2){return readTruthyFlag(config2?.env?.DIMCODE_NO_INTERACTION)}function runtimeConfigsMatch(left,right){return normalizeText9(left?.modelId)===normalizeText9(right?.modelId)&&normalizeText9(left?.adapter)===normalizeText9(right?.adapter)&&normalizeText9(left?.provider)===normalizeText9(right?.provider)&&normalizeText9(left?.baseUrl)===normalizeText9(right?.baseUrl)&&normalizeText9(left?.apiKey)===normalizeText9(right?.apiKey)&&Boolean(left?.nextApiOAuth)===Boolean(right?.nextApiOAuth)&&Boolean(left?.responsesAutoPromptCacheKey)===Boolean(right?.responsesAutoPromptCacheKey)&&Boolean(left?.responsesUseSessionId)===Boolean(right?.responsesUseSessionId)&&JSON.stringify(cloneModelCapabilities(left?.modelCapabilities)??null)===JSON.stringify(cloneModelCapabilities(right?.modelCapabilities)??null)&&Number(left?.maxInputTokens??0)===Number(right?.maxInputTokens??0)&&Number(left?.maxOutputTokens??0)===Number(right?.maxOutputTokens??0)&&readNoInteractionFlag(left)===readNoInteractionFlag(right)}function mcpServersMatch(left,right){return JSON.stringify(left??[])===JSON.stringify(right??[])}function parseRuntimeConfig(raw,fallback){let record3=raw??{},persisted={modelId:normalizeText9(record3.modelId)||fallback.modelId,...normalizeText9(record3.adapter)?{adapter:normalizeText9(record3.adapter)}:{},...normalizeText9(record3.provider)?{provider:normalizeText9(record3.provider)}:{},...normalizeText9(record3.baseUrl)?{baseUrl:normalizeText9(record3.baseUrl)}:{},...record3.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...record3.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...record3.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...cloneModelCapabilities(record3.modelCapabilities)?{modelCapabilities:cloneModelCapabilities(record3.modelCapabilities)}:{},...Number(record3.maxInputTokens)>0?{maxInputTokens:Number(record3.maxInputTokens)}:{},...Number(record3.maxOutputTokens)>0?{maxOutputTokens:Number(record3.maxOutputTokens)}:{}};return mergeRuntimeConfig(fallback,{...persisted,maxInputTokens:void 0,maxOutputTokens:void 0},{preferSourceMaxInputTokens:!1})}function readRuntimeEnvelopeFromSnapshot(snapshot,fallback){let runtimeMeta=(snapshot?.metadata??{})[RUNTIME_SESSION_METADATA_KEY2]??{},runtimeConfig=runtimeMeta.runtimeConfig??{};return{runtimeConfig:snapshot?parseRuntimeConfig(runtimeMeta.runtimeConfig,{...fallback,modelId:normalizeText9(runtimeConfig.modelId)||fallback.modelId}):null,modeId:normalizeModeId(runtimeMeta.modeId),toolApprovalMode:normalizeToolApprovalMode(runtimeMeta.toolApprovalMode),mcpServers:Array.isArray(runtimeMeta.mcpServers)?cloneJson(runtimeMeta.mcpServers):[]}}function createCliAgent(opts){let stateDir=path33.resolve(opts.stateDir),pendingMode="agent",runtimePromise=null,resolvedRuntime=null,facadeDebugLogState=createDefaultDebugLogState(),pendingRuntimeConfigReloads=new Set,getStateEnv=()=>({...cloneEnvRecord3(opts.context.env??{}),...cloneEnvRecord3(opts.processEnv)}),getRuntimeConfig=()=>{let rc=opts.context.runtimeConfig;if(rc)return{modelId:rc.modelId,...rc.adapter?{adapter:rc.adapter}:{},...rc.provider?{provider:rc.provider}:{},...rc.baseUrl?{baseUrl:rc.baseUrl}:{},...!rc.baseUrl&&opts.baseUrl?{baseUrl:opts.baseUrl}:{},...rc.apiKey?{apiKey:rc.apiKey}:{},...rc.nextApiOAuth?{nextApiOAuth:!0}:{},...rc.responsesAutoPromptCacheKey?{responsesAutoPromptCacheKey:!0}:{},...rc.responsesUseSessionId?{responsesUseSessionId:!0}:{},...rc.modelCapabilities?{modelCapabilities:rc.modelCapabilities}:{},...rc.maxInputTokens?{maxInputTokens:rc.maxInputTokens}:{},...rc.maxOutputTokens?{maxOutputTokens:rc.maxOutputTokens}:{}};return readCliRuntimeConfig({...getStateEnv(),...cloneEnvRecord3(typeof process<"u"?process.env:void 0)},{baseUrl:opts.baseUrl})},logSessionPersistence=(sessionId)=>{let normalizedSessionId=normalizeText9(sessionId);if(!normalizedSessionId)return;debugLog2("cli.session.persistence",{sessionId:normalizedSessionId,stateDir,snapshotPath:runtimeSnapshotPath(stateDir,normalizedSessionId)})},ensureRuntime=async()=>{if(runtimePromise)return await runtimePromise;runtimePromise=(async()=>{let runtime=await createCliRuntime({context:opts.context,stateDir,processEnv:opts.processEnv,tools:opts.tools,mcpServers:opts.mcpServers,mcpInitialState:opts.mcpInitialState});return resolvedRuntime=runtime,facadeDebugLogState=runtime.getDebugLogState(),runtime})();try{return await runtimePromise}catch(error48){throw runtimePromise=null,resolvedRuntime=null,error48}},runtimeSessions={list:async(options)=>{let runtime=await ensureRuntime();if(options)return await runtime.sessions.list(options);return await runtime.sessions.list()},get:async(sessionId)=>(await ensureRuntime()).sessions.get(sessionId),create:async(input)=>(await ensureRuntime()).sessions.create(input),createWithMessages:async(messages,input)=>await(await ensureRuntime()).sessions.createWithMessages(messages,input),destroy:async(sessionId)=>await(await ensureRuntime()).sessions.destroy(sessionId),rename:async(sessionId,title)=>await(await ensureRuntime()).sessions.rename(sessionId,title),updateMetadata:async(sessionId,metadata)=>await(await ensureRuntime()).sessions.updateMetadata(sessionId,metadata),interrupt:async(sessionId)=>await(await ensureRuntime()).sessions.interrupt(sessionId),getUsageSummary:async(sessionId)=>await(await ensureRuntime()).sessions.getUsageSummary(sessionId),getUsageLedger:async(sessionId)=>await(await ensureRuntime()).sessions.getUsageLedger(sessionId),getTurnUsage:async(sessionId,turnId)=>await(await ensureRuntime()).sessions.getTurnUsage(sessionId,turnId),listTurnUsages:async(sessionId)=>await(await ensureRuntime()).sessions.listTurnUsages(sessionId),listRequestUsages:async(sessionId,filter2)=>await(await ensureRuntime()).sessions.listRequestUsages(sessionId,filter2)},runtimeFacade={sessions:runtimeSessions,listSessions:async(options)=>{let runtime=await ensureRuntime();if(options)return await runtime.listSessions(options);return await runtime.listSessions()},openSession:async(sessionId)=>await(await ensureRuntime()).openSession(sessionId),createSession:async(input)=>await(await ensureRuntime()).createSession(input),destroySession:async(sessionId)=>await(await ensureRuntime()).destroySession(sessionId),getSessionState:async(sessionId)=>await(await ensureRuntime()).getSessionState(sessionId),replaceSessionSnapshot:async(sessionId,snapshot,update)=>{await(await ensureRuntime()).replaceSessionSnapshot(sessionId,snapshot,update)},persistSession:async(sessionId)=>{await(await ensureRuntime()).persistSession(sessionId)},unloadSession:async(sessionId,options)=>await(await ensureRuntime()).unloadSession(sessionId,options),runSubagent:(spec)=>runSubagentViaFacade(spec),getSessionHandle:async(sessionId)=>await(await ensureRuntime()).getSessionHandle(sessionId),getMcpState:async()=>await(await ensureRuntime()).getMcpState(),syncMcpServers:async(configs)=>await(await ensureRuntime()).syncMcpServers(configs),getDebugLogState:()=>resolvedRuntime?.getDebugLogState()??{...facadeDebugLogState},setDebugLogState:async(update)=>{let next=await(await ensureRuntime()).setDebugLogState(update);return facadeDebugLogState=next,next}};function runSubagentViaFacade(spec){let placeholderId=`subagent-pending-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,resolvedHandle=null,cancelQueued=!1,resultPromise=(async()=>{let handle=(await ensureRuntime()).runSubagent(spec);if(resolvedHandle=handle,cancelQueued)handle.cancel();return await handle.result})();return{get subagentId(){return resolvedHandle?.subagentId??placeholderId},...spec.ownerSessionId?{ownerSessionId:spec.ownerSessionId}:{},get status(){return resolvedHandle?.status??"pending"},cancel:(reason)=>{if(resolvedHandle)resolvedHandle.cancel(reason);else cancelQueued=!0},result:resultPromise}}let openSession=async(sessionId)=>{let normalizedSessionId=normalizeText9(sessionId);if(!normalizedSessionId)return;return await(await ensureRuntime()).openSession(normalizedSessionId)},ensureSession=async(input)=>{let requestedSessionId=normalizeText9(input?.sessionId),runtime=requestedSessionId?await ensureRuntime():await ensureRuntime(),nextMode=normalizeModeId(input?.modeId??pendingMode),nextCwd=normalizeText9(input?.cwd)||normalizeText9(opts.context.cwd)||process.cwd(),nextRuntimeConfig=input?.runtimeConfig??getRuntimeConfig(),hasToolApprovalMode=Object.prototype.hasOwnProperty.call(input??{},"toolApprovalMode"),nextToolApprovalMode=normalizeToolApprovalMode(input?.toolApprovalMode),forceNoInteractionRuntimeConfigUpdate=readNoInteractionFlag(nextRuntimeConfig),hasMcpServers=Array.isArray(input?.mcpServers),nextMcpServers=Array.isArray(input?.mcpServers)?cloneJson(input.mcpServers):void 0,nextMetadata=cloneMetadata2(input?.metadata);if(requestedSessionId){let existing=await runtime.openSession(requestedSessionId);if(existing){let snapshot=await runtime.sessions.get(existing.id),envelope=readRuntimeEnvelopeFromSnapshot(snapshot,nextRuntimeConfig),runtimeMcpState=await runtime.getMcpState(),update={};if(normalizeText9(snapshot?.cwd)!==nextCwd)update.cwd=nextCwd;if(pendingRuntimeConfigReloads.delete(existing.id)||forceNoInteractionRuntimeConfigUpdate||!runtimeConfigsMatch(envelope.runtimeConfig,nextRuntimeConfig))update.runtimeConfig=nextRuntimeConfig;if(envelope.modeId!==nextMode)await existing.setMode(nextMode);if(hasToolApprovalMode&&envelope.toolApprovalMode!==nextToolApprovalMode)update.toolApprovalMode=nextToolApprovalMode;if(hasMcpServers&&Array.isArray(nextMcpServers)&&!mcpServersMatch(runtimeMcpState?.configs??envelope.mcpServers,nextMcpServers))update.mcpServers=nextMcpServers;if(nextMetadata)update.metadata=nextMetadata;if(Object.keys(update).length>0)await existing.updateConfig(update);return logSessionPersistence(existing.id),existing}}let created=await runtime.createSession({sessionId:requestedSessionId||void 0,cwd:nextCwd,modeId:nextMode,runtimeConfig:nextRuntimeConfig,...hasToolApprovalMode?{toolApprovalMode:nextToolApprovalMode}:{},...hasMcpServers?{mcpServers:nextMcpServers}:{},...nextMetadata?{metadata:nextMetadata}:{}});return logSessionPersistence(created.id),created};return{runtime:runtimeFacade,sessions:runtimeSessions,openSession,ensureSession,async steerSession(sessionId,input){let session=await openSession(sessionId);if(!session)return!1;return await session.steer(input)},setMode(modeId){pendingMode=normalizeModeId(modeId)},getMode(){return pendingMode},async triggerManualCompression(sessionId,options){let normalizedSessionId=normalizeText9(sessionId);if(!(normalizedSessionId?await openSession(normalizedSessionId):null))return{success:!1,error:normalizedSessionId?`Session not found: ${normalizedSessionId}`:"Manual compaction requires an active session id"};return await(await ensureSession({...options,sessionId:normalizedSessionId})).triggerManualCompaction()},invalidateSession(sessionId){let id=normalizeText9(sessionId);if(id)pendingRuntimeConfigReloads.add(id)},async getMcpState(){return await(await ensureRuntime()).getMcpState()},async syncMcpServers(configs){return await(await ensureRuntime()).syncMcpServers(configs)},async getDebugLogState(){return runtimeFacade.getDebugLogState()},async setDebugLogState(update){return await runtimeFacade.setDebugLogState(update)}}}function shouldInferCustomProviderFallbackMetadata2(adapter){if(!adapter)return!0;return adapter==="openai"||adapter==="openai-responses"||adapter==="gemini"||adapter==="anthropic"}function hasConfiguredModelMetadata(model){let limit=model.limit??{},hasContext=typeof limit.context==="number"&&Number.isFinite(limit.context),hasOutput=typeof limit.output==="number"&&Number.isFinite(limit.output);return hasContext||hasOutput||model.userDefined===!0||model.outputIsUserDefined===!0||typeof model.vision==="boolean"||model.reasoning?.supported===!0||model.extra_capabilities?.reasoning?.supported===!0}function inferCustomModelLimit(modelId,adapter){if(!shouldInferCustomProviderFallbackMetadata2(adapter))return;return getCustomProviderModelFallbackLimitForModelId(modelId)}function backfillCustomProviderModels(models,opts={}){if(!shouldInferCustomProviderFallbackMetadata2(opts.adapter))return[...models];let onlyIds=opts.onlyIds;return models.map((model)=>{let id=String(model?.id??"").trim();if(!id)return model;if(onlyIds&&!onlyIds.has(id))return model;if(hasConfiguredModelMetadata(model))return model;let currentLimit=model.limit??{},hasContext=typeof currentLimit.context==="number"&&Number.isFinite(currentLimit.context),hasOutput=typeof currentLimit.output==="number"&&Number.isFinite(currentLimit.output),hasVision=typeof model.vision==="boolean",hasReasoning=model.reasoning?.supported===!0,hasExtraReasoning=model.extra_capabilities?.reasoning?.supported===!0,inferredLimit=hasContext&&hasOutput?void 0:inferCustomModelLimit(id,opts.adapter),inferredCapabilities=hasVision&&hasReasoning?void 0:getCustomProviderModelFallbackCapabilitiesForModelId(id),inferredExtraReasoning=hasExtraReasoning?void 0:getCustomProviderModelFallbackReasoningEffortCapability(id),nextLimit={...currentLimit,...!hasContext&&typeof inferredLimit?.context==="number"?{context:inferredLimit.context}:{},...!hasOutput&&typeof inferredLimit?.output==="number"?{output:inferredLimit.output}:{}};return{...model,...Object.keys(nextLimit).length>0?{limit:nextLimit}:{},...!hasVision&&typeof inferredCapabilities?.vision==="boolean"?{vision:inferredCapabilities.vision}:{},...!hasReasoning&&inferredCapabilities?.reasoning?.supported?{reasoning:inferredCapabilities.reasoning}:{},...!hasExtraReasoning&&inferredExtraReasoning?{extra_capabilities:{...model.extra_capabilities??{},reasoning:inferredExtraReasoning}}:{}}})}var SYSTEM_SECTION_IDS=["system.sections.security","system.sections.code-safety","system.sections.url-policy","system.sections.tone-and-style","system.sections.professional-objectivity","system.sections.engineering-approach","system.sections.git-and-execution-guardrails","system.sections.doing-tasks","system.sections.capability-aware-guidance","system.sections.code-references"];function joinPromptSections(sections){return sections.filter((section)=>typeof section==="string"&§ion.trim().length>0).map((section)=>section.trim()).join(`
|
|
1068
|
+
`}function writeLine2(filePath,line){try{appendFileSync2(filePath,line)}catch{}}function debugLogPath2(){let raw=readPrefixedEnv2(void 0,"DEBUG_LOG");if(raw)return raw;let dir=logsDir2();return ensureDir2(dir),path32.join(dir,"dimcode-debug.log")}function debugLog2(eventName,payload){if(!isDebugEnabled2())return;writeLine2(debugLogPath2(),formatLine2(eventName,payload))}function debugLogSubagent(eventName,payload){if(!isDebugEnabled2())return;let dir=logsDir2();ensureDir2(dir);let filePath=path32.join(dir,"subagent-events.log");writeLine2(filePath,formatLine2(eventName,payload))}function readCliRuntimeConfig(env,configOpts){return resolveRuntimeConfigFromEnv(env,configOpts)}function buildRuntimeConfigFromContext(context,configOpts){let rc=context.runtimeConfig;if(!rc)return resolveRuntimeConfigFromEnv(context.env,configOpts);return{modelId:rc.modelId,...rc.adapter?{adapter:rc.adapter}:{},...rc.provider?{provider:rc.provider}:{},...rc.baseUrl?{baseUrl:rc.baseUrl}:{},...configOpts?.baseUrl&&!rc.baseUrl?{baseUrl:configOpts.baseUrl}:{},...rc.apiKey?{apiKey:rc.apiKey}:{},...rc.nextApiOAuth?{nextApiOAuth:!0}:{},...rc.responsesAutoPromptCacheKey?{responsesAutoPromptCacheKey:!0}:{},...rc.responsesUseSessionId?{responsesUseSessionId:!0}:{},...rc.modelCapabilities?{modelCapabilities:rc.modelCapabilities}:{},...rc.maxInputTokens?{maxInputTokens:rc.maxInputTokens}:{},...rc.maxOutputTokens?{maxOutputTokens:rc.maxOutputTokens}:{},...typeof rc.interleavedThinking==="boolean"?{interleavedThinking:rc.interleavedThinking}:{},...rc.reasoningEffort?{reasoningEffort:rc.reasoningEffort}:{}}}function buildCliCreateAgentRuntimeOptions(opts){let configOpts=opts.baseUrl?{baseUrl:opts.baseUrl}:void 0,runtimeConfig=buildRuntimeConfigFromContext(opts.context,configOpts);return{systemPrompt:opts.context.system,modelId:runtimeConfig.modelId,adapter:runtimeConfig.adapter,provider:runtimeConfig.provider,baseUrl:runtimeConfig.baseUrl,apiKey:runtimeConfig.apiKey,nextApiOAuth:runtimeConfig.nextApiOAuth,responsesAutoPromptCacheKey:runtimeConfig.responsesAutoPromptCacheKey,responsesUseSessionId:runtimeConfig.responsesUseSessionId,modelCapabilities:runtimeConfig.modelCapabilities,maxInputTokens:runtimeConfig.maxInputTokens,maxOutputTokens:runtimeConfig.maxOutputTokens,interleavedThinking:runtimeConfig.interleavedThinking,reasoningEffort:runtimeConfig.reasoningEffort,stateDir:opts.stateDir,cliTools:!0,delegateTasks:!0,...opts.tools?{tools:opts.tools}:{},...opts.mcpServers?{mcpServers:opts.mcpServers}:{},...opts.mcpInitialState?{mcpInitialState:opts.mcpInitialState}:{},resolveRuntimeConfig:(input)=>{let current=buildRuntimeConfigFromContext(opts.context,configOpts),persistedWithoutTokenLimits=input.persisted?{...input.persisted,maxInputTokens:void 0,maxOutputTokens:void 0}:void 0;return input.requested?mergeRuntimeConfig(input.current??current,input.requested,{preferSourceMaxInputTokens:!0}):mergeRuntimeConfig(current,persistedWithoutTokenLimits,{preferSourceMaxInputTokens:!1})}}}async function createCliRuntime(opts){return await createAgentRuntime(buildCliCreateAgentRuntimeOptions(opts))}var RUNTIME_SESSION_METADATA_KEY2="dimAgentRuntime",DEBUG_LOG_FILE_NAME="<session-id>.jsonl";function createDefaultDebugLogState(){let directory=path33.join(os6.homedir(),".dimcode","debug");return{enabled:!1,directory,logFilePath:path33.join(directory,DEBUG_LOG_FILE_NAME)}}function normalizeText9(value){return String(value??"").trim()}function normalizeModeId(value){return value==="plan"?"plan":"agent"}function normalizeToolApprovalMode(value){if(value==="auto"||value==="normal"||value==="strict")return value;if(value==="all")return"auto";return}function cloneJson(value){return JSON.parse(JSON.stringify(value??null))}function cloneMetadata2(value){return value?cloneJson(value):void 0}function cloneEnvRecord3(source){return Object.entries(source??{}).reduce((next,[key,value])=>{return next[key]=value,next},{})}function readTruthyFlag(value){let normalized=normalizeText9(value).toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function readNoInteractionFlag(config2){return readTruthyFlag(config2?.env?.DIMCODE_NO_INTERACTION)}function runtimeConfigsMatch(left,right){return normalizeText9(left?.modelId)===normalizeText9(right?.modelId)&&normalizeText9(left?.adapter)===normalizeText9(right?.adapter)&&normalizeText9(left?.provider)===normalizeText9(right?.provider)&&normalizeText9(left?.baseUrl)===normalizeText9(right?.baseUrl)&&normalizeText9(left?.apiKey)===normalizeText9(right?.apiKey)&&Boolean(left?.nextApiOAuth)===Boolean(right?.nextApiOAuth)&&Boolean(left?.responsesAutoPromptCacheKey)===Boolean(right?.responsesAutoPromptCacheKey)&&Boolean(left?.responsesUseSessionId)===Boolean(right?.responsesUseSessionId)&&JSON.stringify(cloneModelCapabilities(left?.modelCapabilities)??null)===JSON.stringify(cloneModelCapabilities(right?.modelCapabilities)??null)&&Number(left?.maxInputTokens??0)===Number(right?.maxInputTokens??0)&&Number(left?.maxOutputTokens??0)===Number(right?.maxOutputTokens??0)&&readNoInteractionFlag(left)===readNoInteractionFlag(right)}function mcpServersMatch(left,right){return JSON.stringify(left??[])===JSON.stringify(right??[])}function parseRuntimeConfig(raw,fallback){let record3=raw??{},persisted={modelId:normalizeText9(record3.modelId)||fallback.modelId,...normalizeText9(record3.adapter)?{adapter:normalizeText9(record3.adapter)}:{},...normalizeText9(record3.provider)?{provider:normalizeText9(record3.provider)}:{},...normalizeText9(record3.baseUrl)?{baseUrl:normalizeText9(record3.baseUrl)}:{},...record3.nextApiOAuth===!0?{nextApiOAuth:!0}:{},...record3.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...record3.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...cloneModelCapabilities(record3.modelCapabilities)?{modelCapabilities:cloneModelCapabilities(record3.modelCapabilities)}:{},...Number(record3.maxInputTokens)>0?{maxInputTokens:Number(record3.maxInputTokens)}:{},...Number(record3.maxOutputTokens)>0?{maxOutputTokens:Number(record3.maxOutputTokens)}:{}};return mergeRuntimeConfig(fallback,{...persisted,maxInputTokens:void 0,maxOutputTokens:void 0},{preferSourceMaxInputTokens:!1})}function readRuntimeEnvelopeFromSnapshot(snapshot,fallback){let runtimeMeta=(snapshot?.metadata??{})[RUNTIME_SESSION_METADATA_KEY2]??{},runtimeConfig=runtimeMeta.runtimeConfig??{};return{runtimeConfig:snapshot?parseRuntimeConfig(runtimeMeta.runtimeConfig,{...fallback,modelId:normalizeText9(runtimeConfig.modelId)||fallback.modelId}):null,modeId:normalizeModeId(runtimeMeta.modeId),toolApprovalMode:normalizeToolApprovalMode(runtimeMeta.toolApprovalMode),mcpServers:Array.isArray(runtimeMeta.mcpServers)?cloneJson(runtimeMeta.mcpServers):[]}}function createCliAgent(opts){let stateDir=path33.resolve(opts.stateDir),pendingMode="agent",runtimePromise=null,resolvedRuntime=null,facadeDebugLogState=createDefaultDebugLogState(),pendingRuntimeConfigReloads=new Set,getStateEnv=()=>({...cloneEnvRecord3(opts.context.env??{}),...cloneEnvRecord3(opts.processEnv)}),getRuntimeConfig=()=>{let rc=opts.context.runtimeConfig;if(rc)return{modelId:rc.modelId,...rc.adapter?{adapter:rc.adapter}:{},...rc.provider?{provider:rc.provider}:{},...rc.baseUrl?{baseUrl:rc.baseUrl}:{},...!rc.baseUrl&&opts.baseUrl?{baseUrl:opts.baseUrl}:{},...rc.apiKey?{apiKey:rc.apiKey}:{},...rc.nextApiOAuth?{nextApiOAuth:!0}:{},...rc.responsesAutoPromptCacheKey?{responsesAutoPromptCacheKey:!0}:{},...rc.responsesUseSessionId?{responsesUseSessionId:!0}:{},...rc.modelCapabilities?{modelCapabilities:rc.modelCapabilities}:{},...rc.maxInputTokens?{maxInputTokens:rc.maxInputTokens}:{},...rc.maxOutputTokens?{maxOutputTokens:rc.maxOutputTokens}:{}};return readCliRuntimeConfig({...getStateEnv(),...cloneEnvRecord3(typeof process<"u"?process.env:void 0)},{baseUrl:opts.baseUrl})},logSessionPersistence=(sessionId)=>{let normalizedSessionId=normalizeText9(sessionId);if(!normalizedSessionId)return;debugLog2("cli.session.persistence",{sessionId:normalizedSessionId,stateDir,snapshotPath:runtimeSnapshotPath(stateDir,normalizedSessionId)})},ensureRuntime=async()=>{if(runtimePromise)return await runtimePromise;runtimePromise=(async()=>{let runtime=await createCliRuntime({context:opts.context,stateDir,processEnv:opts.processEnv,tools:opts.tools,mcpServers:opts.mcpServers,mcpInitialState:opts.mcpInitialState});return resolvedRuntime=runtime,facadeDebugLogState=runtime.getDebugLogState(),runtime})();try{return await runtimePromise}catch(error48){throw runtimePromise=null,resolvedRuntime=null,error48}},runtimeSessions={list:async(options)=>{let runtime=await ensureRuntime();if(options)return await runtime.sessions.list(options);return await runtime.sessions.list()},get:async(sessionId)=>(await ensureRuntime()).sessions.get(sessionId),create:async(input)=>(await ensureRuntime()).sessions.create(input),createWithMessages:async(messages,input)=>await(await ensureRuntime()).sessions.createWithMessages(messages,input),destroy:async(sessionId)=>await(await ensureRuntime()).sessions.destroy(sessionId),rename:async(sessionId,title)=>await(await ensureRuntime()).sessions.rename(sessionId,title),updateMetadata:async(sessionId,metadata)=>await(await ensureRuntime()).sessions.updateMetadata(sessionId,metadata),interrupt:async(sessionId)=>await(await ensureRuntime()).sessions.interrupt(sessionId),getUsageSummary:async(sessionId)=>await(await ensureRuntime()).sessions.getUsageSummary(sessionId),getUsageLedger:async(sessionId)=>await(await ensureRuntime()).sessions.getUsageLedger(sessionId),getTurnUsage:async(sessionId,turnId)=>await(await ensureRuntime()).sessions.getTurnUsage(sessionId,turnId),listTurnUsages:async(sessionId)=>await(await ensureRuntime()).sessions.listTurnUsages(sessionId),listRequestUsages:async(sessionId,filter2)=>await(await ensureRuntime()).sessions.listRequestUsages(sessionId,filter2)},runtimeFacade={sessions:runtimeSessions,listSessions:async(options)=>{let runtime=await ensureRuntime();if(options)return await runtime.listSessions(options);return await runtime.listSessions()},openSession:async(sessionId)=>await(await ensureRuntime()).openSession(sessionId),createSession:async(input)=>await(await ensureRuntime()).createSession(input),destroySession:async(sessionId)=>await(await ensureRuntime()).destroySession(sessionId),getSessionState:async(sessionId)=>await(await ensureRuntime()).getSessionState(sessionId),replaceSessionSnapshot:async(sessionId,snapshot,update)=>{await(await ensureRuntime()).replaceSessionSnapshot(sessionId,snapshot,update)},persistSession:async(sessionId)=>{await(await ensureRuntime()).persistSession(sessionId)},unloadSession:async(sessionId,options)=>await(await ensureRuntime()).unloadSession(sessionId,options),runSubagent:(spec)=>runSubagentViaFacade(spec),getSessionHandle:async(sessionId)=>await(await ensureRuntime()).getSessionHandle(sessionId),getMcpState:async()=>await(await ensureRuntime()).getMcpState(),syncMcpServers:async(configs)=>await(await ensureRuntime()).syncMcpServers(configs),getDebugLogState:()=>resolvedRuntime?.getDebugLogState()??{...facadeDebugLogState},setDebugLogState:async(update)=>{let next=await(await ensureRuntime()).setDebugLogState(update);return facadeDebugLogState=next,next}};function runSubagentViaFacade(spec){let placeholderId=`subagent-pending-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,resolvedHandle=null,cancelQueued=!1,resultPromise=(async()=>{let handle=(await ensureRuntime()).runSubagent(spec);if(resolvedHandle=handle,cancelQueued)handle.cancel();return await handle.result})();return{get subagentId(){return resolvedHandle?.subagentId??placeholderId},...spec.ownerSessionId?{ownerSessionId:spec.ownerSessionId}:{},get status(){return resolvedHandle?.status??"pending"},cancel:(reason)=>{if(resolvedHandle)resolvedHandle.cancel(reason);else cancelQueued=!0},result:resultPromise}}let openSession=async(sessionId)=>{let normalizedSessionId=normalizeText9(sessionId);if(!normalizedSessionId)return;return await(await ensureRuntime()).openSession(normalizedSessionId)},ensureSession=async(input)=>{let requestedSessionId=normalizeText9(input?.sessionId),runtime=requestedSessionId?await ensureRuntime():await ensureRuntime(),nextMode=normalizeModeId(input?.modeId??pendingMode),nextCwd=normalizeText9(input?.cwd)||normalizeText9(opts.context.cwd)||process.cwd(),nextRuntimeConfig=input?.runtimeConfig??getRuntimeConfig(),hasToolApprovalMode=Object.prototype.hasOwnProperty.call(input??{},"toolApprovalMode"),nextToolApprovalMode=normalizeToolApprovalMode(input?.toolApprovalMode),forceNoInteractionRuntimeConfigUpdate=readNoInteractionFlag(nextRuntimeConfig),hasMcpServers=Array.isArray(input?.mcpServers),nextMcpServers=Array.isArray(input?.mcpServers)?cloneJson(input.mcpServers):void 0,nextMetadata=cloneMetadata2(input?.metadata);if(requestedSessionId){let existing=await runtime.openSession(requestedSessionId);if(existing){let snapshot=await runtime.sessions.get(existing.id),envelope=readRuntimeEnvelopeFromSnapshot(snapshot,nextRuntimeConfig),runtimeMcpState=await runtime.getMcpState(),update={};if(normalizeText9(snapshot?.cwd)!==nextCwd)update.cwd=nextCwd;if(pendingRuntimeConfigReloads.delete(existing.id)||forceNoInteractionRuntimeConfigUpdate||!runtimeConfigsMatch(envelope.runtimeConfig,nextRuntimeConfig))update.runtimeConfig=nextRuntimeConfig;if(envelope.modeId!==nextMode)await existing.setMode(nextMode);if(hasToolApprovalMode&&envelope.toolApprovalMode!==nextToolApprovalMode)update.toolApprovalMode=nextToolApprovalMode;if(hasMcpServers&&Array.isArray(nextMcpServers)&&!mcpServersMatch(runtimeMcpState?.configs??envelope.mcpServers,nextMcpServers))update.mcpServers=nextMcpServers;if(nextMetadata)update.metadata=nextMetadata;if(Object.keys(update).length>0)await existing.updateConfig(update);return logSessionPersistence(existing.id),existing}}let created=await runtime.createSession({sessionId:requestedSessionId||void 0,cwd:nextCwd,modeId:nextMode,runtimeConfig:nextRuntimeConfig,...hasToolApprovalMode?{toolApprovalMode:nextToolApprovalMode}:{},...hasMcpServers?{mcpServers:nextMcpServers}:{},...nextMetadata?{metadata:nextMetadata}:{}});return logSessionPersistence(created.id),created};return{runtime:runtimeFacade,sessions:runtimeSessions,openSession,ensureSession,async steerSession(sessionId,input){let session=await openSession(sessionId);if(!session)return!1;return await session.steer(input)},setMode(modeId){pendingMode=normalizeModeId(modeId)},getMode(){return pendingMode},async triggerManualCompression(sessionId,options){let normalizedSessionId=normalizeText9(sessionId);if(!(normalizedSessionId?await openSession(normalizedSessionId):null))return{success:!1,error:normalizedSessionId?`Session not found: ${normalizedSessionId}`:"Manual compaction requires an active session id"};return await(await ensureSession({...options,sessionId:normalizedSessionId})).triggerManualCompaction()},invalidateSession(sessionId){let id=normalizeText9(sessionId);if(id)pendingRuntimeConfigReloads.add(id)},async getMcpState(){return await(await ensureRuntime()).getMcpState()},async syncMcpServers(configs){return await(await ensureRuntime()).syncMcpServers(configs)},async getDebugLogState(){return runtimeFacade.getDebugLogState()},async setDebugLogState(update){return await runtimeFacade.setDebugLogState(update)}}}function shouldInferCustomProviderFallbackMetadata2(adapter){if(!adapter)return!0;return adapter==="openai"||adapter==="openai-responses"||adapter==="gemini"||adapter==="anthropic"}function hasConfiguredModelMetadata(model){let limit=model.limit??{},hasContext=typeof limit.context==="number"&&Number.isFinite(limit.context),hasOutput=typeof limit.output==="number"&&Number.isFinite(limit.output);return hasContext||hasOutput||model.userDefined===!0||model.outputIsUserDefined===!0||typeof model.vision==="boolean"||model.reasoning?.supported===!0||model.extra_capabilities?.reasoning?.supported===!0}function inferCustomModelLimit(modelId,adapter){if(!shouldInferCustomProviderFallbackMetadata2(adapter))return;return getCustomProviderModelFallbackLimitForModelId(modelId)}function backfillCustomProviderModels(models,opts={}){if(!shouldInferCustomProviderFallbackMetadata2(opts.adapter))return[...models];let onlyIds=opts.onlyIds;return models.map((model)=>{let id=String(model?.id??"").trim();if(!id)return model;if(onlyIds&&!onlyIds.has(id))return model;if(hasConfiguredModelMetadata(model))return model;let currentLimit=model.limit??{},hasContext=typeof currentLimit.context==="number"&&Number.isFinite(currentLimit.context),hasOutput=typeof currentLimit.output==="number"&&Number.isFinite(currentLimit.output),hasVision=typeof model.vision==="boolean",hasReasoning=model.reasoning?.supported===!0,hasExtraReasoning=model.extra_capabilities?.reasoning?.supported===!0,inferredLimit=hasContext&&hasOutput?void 0:inferCustomModelLimit(id,opts.adapter),inferredCapabilities=hasVision&&hasReasoning?void 0:getCustomProviderModelFallbackCapabilitiesForModelId(id),inferredExtraReasoning=hasExtraReasoning?void 0:getCustomProviderModelFallbackReasoningEffortCapability(id),nextLimit={...currentLimit,...!hasContext&&typeof inferredLimit?.context==="number"?{context:inferredLimit.context}:{},...!hasOutput&&typeof inferredLimit?.output==="number"?{output:inferredLimit.output}:{}};return{...model,...Object.keys(nextLimit).length>0?{limit:nextLimit}:{},...!hasVision&&typeof inferredCapabilities?.vision==="boolean"?{vision:inferredCapabilities.vision}:{},...!hasReasoning&&inferredCapabilities?.reasoning?.supported?{reasoning:inferredCapabilities.reasoning}:{},...!hasExtraReasoning&&inferredExtraReasoning?{extra_capabilities:{...model.extra_capabilities??{},reasoning:inferredExtraReasoning}}:{}}})}var SYSTEM_SECTION_IDS=["system.sections.security","system.sections.code-safety","system.sections.url-policy","system.sections.tone-and-style","system.sections.professional-objectivity","system.sections.engineering-approach","system.sections.git-and-execution-guardrails","system.sections.doing-tasks","system.sections.capability-aware-guidance","system.sections.code-references"];function joinPromptSections(sections){return sections.filter((section)=>typeof section==="string"&§ion.trim().length>0).map((section)=>section.trim()).join(`
|
|
1069
1069
|
|
|
1070
1070
|
`)}var DIMCODE_SHARED_SYSTEM_PROMPT=joinPromptSections(SYSTEM_SECTION_IDS.map((promptId)=>renderPrompt(promptId)));function buildDimCodeSystemPrompt(options){return joinPromptSections([options?.intro??renderPrompt("system.intro.default"),DIMCODE_SHARED_SYSTEM_PROMPT,...options?.extraSections??[]])}var DIMCODE_SYSTEM_PROMPT=buildDimCodeSystemPrompt();function readOptionalString3(value){if(typeof value==="string")return value.trim()||void 0;if(typeof value==="number"||typeof value==="boolean")return String(value).trim()||void 0;return}function readOptionalNumber2(value){if(typeof value==="number"&&Number.isFinite(value))return value;if(typeof value==="string"){let trimmed=value.trim();if(!trimmed)return;let parsed=Number(trimmed);return Number.isFinite(parsed)?parsed:void 0}return}var RUNTIME_ENV_KEYS=new Set(["DIMCODE_NO_INTERACTION"]);function isTruthyFlag2(value){let normalized=String(value??"").trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function resolveSystemPrompt(env){if(!isTruthyFlag2(env.DIMCODE_NO_INTERACTION))return DIMCODE_SYSTEM_PROMPT;return buildDimCodeSystemPrompt({intro:"You are DimCode, a non-interactive CLI coding agent running a one-shot software engineering task.",extraSections:[["# Non-interactive execution","This run is operating in non-interactive agent mode.","Tool approvals are already handled automatically.","Do not ask the user follow-up questions and do not rely on AskUserQuestion being available.","Make reasonable assumptions from the repository, the prompt, and available tool output so you can complete the task in one pass when practical.","Only stop early for a real external blocker or a genuinely unsafe ambiguity that cannot be resolved from local context.","When you make an important assumption, state it briefly in the final response."].join(`
|
|
1071
|
-
`)]})}async function createDimcodeContext(opts){let fastStartRaw=String(opts.env.DIMCODE_FAST_START??"").trim().toLowerCase(),fastStart=fastStartRaw==="1"||fastStartRaw==="true"||fastStartRaw==="yes"||fastStartRaw==="on",version2=readOptionalString3("0.0.67-beta.0")??(fastStart?null:await readRepoPackageVersion(opts.cwd)),resolveToolsPath=async()=>{let[{homedir:homedir3},path34]=await Promise.all([import("node:os"),import("node:path")]),dimcodeHome=readOptionalString3(opts.env.DIMCODE_HOME);if(dimcodeHome){let dir2=path34.resolve(dimcodeHome);return{dir:dir2,filePath:path34.join(dir2,"tools.json")}}let dir=path34.resolve(homedir3(),".dimcode");return{dir,filePath:path34.join(dir,"tools.json")}},[loadedCache,loadedConfig,loadedTools,loadedMcp]=fastStart?await(async()=>{let[cacheDir,configDir,toolsPath,path34]=await Promise.all([getDimcodeUserDir(opts.env),getDimcodeConfigDir(opts.env),resolveToolsPath(),import("node:path")]),cacheFile=path34.join(cacheDir,"cache.json"),configFile=path34.join(configDir,"config.json"),mcpJsonFile=path34.join(toolsPath.dir,"mcp.json");return[{dir:cacheDir,filePath:cacheFile,cache:{version:1,updatedAt:0}},{dir:configDir,filePath:configFile,config:{version:1,updatedAt:0}},{dir:toolsPath.dir,filePath:toolsPath.filePath,tools:{version:1,updatedAt:0}},{dir:toolsPath.dir,filePath:mcpJsonFile,servers:[]}]})():await Promise.all([loadDimcodeUserCache(opts.env),loadDimcodeUserConfig(opts.env),loadDimcodeUserTools(opts.env),loadMcpJson(opts.env)]),cache=loadedCache.cache,config2=loadedConfig.config,saved=cache.settings??{},savedConfig=config2.settings??{},savedCwd=readOptionalString3(saved.cwd),savedFocusFiles=Array.isArray(saved.focusFiles)?saved.focusFiles.map((file2)=>String(file2??"")).filter(Boolean):void 0,cwd=opts.cwd||savedCwd||".",v2=(key)=>readOptionalString3(opts.env[key]),explicitRuntimeEnv=Object.fromEntries(Object.entries(opts.env).flatMap(([key,value])=>{let canonical=String(key??"").trim(),normalized=readOptionalString3(value);if(!canonical||!RUNTIME_ENV_KEYS.has(canonical)||!normalized)return[];return[[canonical,normalized]]})),applyRuntimeEnvIfMissing=(target,key,source)=>{let value=source[key];if(!value||target[key])return;target[key]=value},mergedEnv={DIMCODE_VERSION:version2??"dev",...v2("DIMCODE_STARTUP_TOAST")?{DIMCODE_STARTUP_TOAST:v2("DIMCODE_STARTUP_TOAST")}:{}},savedProviderId=normalizeProviderId(savedConfig.providerId),savedConnections=savedConfig.providerConnections??{},savedActiveModelByProvider=savedConfig.activeModelByProvider??{},normalizedSavedCustomProviders=(Array.isArray(savedConfig.customProviders)?savedConfig.customProviders:[]).map((provider)=>{let adapter2=String(provider?.adapter??"").trim(),models=Array.isArray(provider?.models)?backfillCustomProviderModels(provider.models,{adapter:adapter2}):provider?.models;return{...provider,...Array.isArray(models)?{models}:{}}}),legacyCustom=savedConfig.customProvider??{},legacyBaseUrl=readOptionalString3(legacyCustom?.baseUrl),legacyApiKey=readOptionalString3(legacyCustom?.apiKey),rawProviderId=(()=>{if(isLegacyCustomProviderId(savedProviderId)&&normalizedSavedCustomProviders.length){let fallbackId=readOptionalString3(normalizedSavedCustomProviders[0]?.id);if(fallbackId){if(config2.settings)config2.settings.providerId=fallbackId;return fallbackId}}return savedProviderId})(),{candidates,existingProviderIds}=buildProviderSelectionCandidates({connections:savedConnections,customProviders:normalizedSavedCustomProviders,legacyCustom,rememberedModels:{...savedActiveModelByProvider}}),rememberedModels=stripUnknownActiveModelSelections({...savedActiveModelByProvider},existingProviderIds),selection=resolveProviderSelection({candidates,preferredProviderId:rawProviderId,rememberedModels}),providerId=readOptionalString3(selection.providerId),providerModel=readOptionalString3(selection.modelId);if(config2.settings)if(providerId)config2.settings.providerId=providerId;else delete config2.settings.providerId;let customProvider=isCustomProviderId(providerId)?normalizedSavedCustomProviders.find((p2)=>String(p2?.id??"").trim()===providerId):void 0,builtin=providerId&&!isCustomProviderId(providerId)&&!isLegacyCustomProviderId(providerId)?getBuiltinProvider(providerId):void 0,savedConnection=savedConnections[providerId??""],savedConnectionBaseUrl=readOptionalString3(savedConnection?.baseUrl),builtinBaseUrl=readOptionalString3(getProviderBaseUrl(builtin)),adapter=isCustomProviderId(providerId)?String(customProvider?.adapter??"").trim():isLegacyCustomProviderId(providerId)?"openai":providerId==="openai"&&savedConnectionBaseUrl&&savedConnectionBaseUrl!==builtinBaseUrl?"openai":getProviderAdapter(builtin),providerBaseUrl=isCustomProviderId(providerId)?readOptionalString3(customProvider?.baseUrl):isLegacyCustomProviderId(providerId)?legacyBaseUrl:readOptionalString3(resolveBuiltinProviderBaseUrl(builtin,savedConnection?.baseUrl)),providerApiKey=isCustomProviderId(providerId)?readOptionalString3(customProvider?.apiKey):isLegacyCustomProviderId(providerId)?legacyApiKey:readOptionalString3(savedConnection?.apiKey),modelCapabilityFallbackModels=isCustomProviderId(providerId)||isLegacyCustomProviderId(providerId)||builtin?.customModels?listCustomProviderModelFallbackModels():void 0,resolvedModelContextWindow=resolveProviderSelectionContextWindow({providerId,modelId:providerModel,connections:savedConnections,customProviders:normalizedSavedCustomProviders}),resolvedModelMaxOutputTokens=resolveProviderSelectionMaxOutputTokens({providerId,modelId:providerModel,connections:savedConnections,customProviders:normalizedSavedCustomProviders});if(isLegacyCustomProviderId(providerId)&&!providerBaseUrl&&!providerApiKey&&!providerModel)throw Error("Legacy custom provider config is missing. Please run /connect to add a custom provider and select a model.");let modelCapabilities=resolveProviderModelCapabilities({providerId,modelId:providerModel,connectionModels:savedConnection?.models,builtinModels:builtin?.models,customProviderModels:customProvider?.models,legacyCustomModels:Array.isArray(legacyCustom?.models)?legacyCustom.models:void 0,fallbackModels:modelCapabilityFallbackModels}),runtimeConfig={modelId:providerModel??"deepseek-v3.1",adapter:adapter||"openai",provider:providerId??adapter,baseUrl:providerBaseUrl,apiKey:providerApiKey,nextApiOAuth:providerId==="dimcode-api-oauth"||void 0,...customProvider?.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...customProvider?.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...modelCapabilities?{modelCapabilities}:{},...typeof resolvedModelContextWindow==="number"&&resolvedModelContextWindow>0?{maxInputTokens:resolvedModelContextWindow}:{},...typeof resolvedModelMaxOutputTokens==="number"&&resolvedModelMaxOutputTokens>0?{maxOutputTokens:resolvedModelMaxOutputTokens}:{},temperature:readOptionalNumber2(saved.temperature)??void 0,interleavedThinking:typeof saved.interleavedThinking==="boolean"?saved.interleavedThinking:void 0,reasoningEffort:resolveSelectedReasoningEffort({modelId:providerModel,reasoningEffort:saved.reasoningEffort,reasoningEffortByModel:saved.reasoningEffortByModel})};if(!mergedEnv.DIMCODE_TOOL_APPROVALS&&saved.toolApprovals){let raw=String(saved.toolApprovals),mapped=raw==="auto"||raw==="all"?"auto":raw==="strict"||raw==="manual"?"strict":raw==="normal"?"normal":void 0;if(mapped)mergedEnv.DIMCODE_TOOL_APPROVALS=mapped}if(!mergedEnv.DIMCODE_LANG&&readOptionalString3(saved.locale))mergedEnv.DIMCODE_LANG=readOptionalString3(saved.locale);if(!mergedEnv.DIMCODE_THEME&&readOptionalString3(saved.themeMode))mergedEnv.DIMCODE_THEME=readOptionalString3(saved.themeMode);if(!mergedEnv.DIMCODE_REASONING_EFFORT){let resolved=resolveSelectedReasoningEffort({modelId:providerModel,reasoningEffort:saved.reasoningEffort,reasoningEffortByModel:saved.reasoningEffortByModel});if(resolved)mergedEnv.DIMCODE_REASONING_EFFORT=resolved}if(usesCcMock(builtin))mergedEnv.DIMCODE_CCMOCK="1";else delete mergedEnv.DIMCODE_CCMOCK;return applyRuntimeEnvIfMissing(mergedEnv,"DIMCODE_NO_INTERACTION",explicitRuntimeEnv),{context:{system:resolveSystemPrompt(mergedEnv),cwd,env:mergedEnv,runtimeConfig,...savedFocusFiles?.length?{focusFiles:savedFocusFiles}:{}},cacheDir:loadedCache.dir,cacheFile:loadedCache.filePath,cache,configDir:loadedConfig.dir,configFile:loadedConfig.filePath,config:config2,toolsFile:loadedTools.filePath,tools:loadedTools.tools,mcpJsonFile:loadedMcp.filePath,mcpServers:loadedMcp.servers,mcpPhase:fastStart?"deferred":"syncing",mcpConnectedCount:0,mcpConfiguredCount:loadedMcp.servers.length}}async function readRepoPackageVersion(cwd){try{let[{readFile:readFile11},path34]=await Promise.all([import("node:fs/promises"),import("node:path")]),raw=await readFile11(path34.join(cwd,"package.json"),"utf8"),parsed=JSON.parse(raw),v2=typeof parsed?.version==="string"?parsed.version:null;return v2&&v2.trim()?v2.trim():null}catch{return null}}import{createHash as createHash4,randomUUID as randomUUID8}from"node:crypto";import{copyFile as copyFile2,mkdir as mkdir11,readdir as readdir7,readFile as readFile11,rename as rename2,rm as rm7,stat as stat7,writeFile as writeFile10}from"node:fs/promises";import{homedir as homedir3}from"node:os";import path34 from"node:path";import process12 from"node:process";var BLOB_CACHE_DIR2="blob-cache",BLOB_DIR2="blobs",ATTACHMENTS_DIR2="attachments",META_DIR2="meta",BLOB_TTL_MS2=86400000,CLEANUP_MIN_INTERVAL_MS2=3600000,FILE_ID_PATTERN=/^[\w.-]{1,128}$/,HOME_SESSION_CACHE_ID="_home",IMAGE_EXTENSIONS=new Set(["png","jpg","jpeg","gif","svg","webp","bmp","ico"]),TEXT_LIKE_EXTENSIONS=new Set(["txt","text","md","markdown","mdx","rst","log","json","jsonl","json5","yaml","yml","toml","ini","cfg","conf","properties","env","xml","csv","tsv","html","htm","css","scss","less","sass","js","jsx","ts","tsx","mjs","cjs","mts","cts","vue","svelte","astro","py","rb","php","go","rs","java","kt","swift","c","cc","cpp","cxx","h","hh","hpp","hxx","m","mm","cs","sh","bash","zsh","fish","ps1","sql","graphql","gql","proto","diff","patch","gitignore","gitattributes","editorconfig","dockerfile","makefile","mk","lock"]),EXT_MIME={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".bmp":"image/bmp",".ico":"image/x-icon",".svg":"image/svg+xml",".mp4":"video/mp4",".mov":"video/quicktime",".m4v":"video/x-m4v",".webm":"video/webm",".avi":"video/x-msvideo",".mkv":"video/x-matroska",".mpeg":"video/mpeg",".mpg":"video/mpeg",".wmv":"video/x-ms-wmv",".3gp":"video/3gpp",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".flac":"audio/flac",".m4a":"audio/mp4",".pdf":"application/pdf",".txt":"text/plain",".md":"text/markdown",".json":"application/json",".yaml":"text/yaml",".yml":"text/yaml",".toml":"text/plain",".ini":"text/plain",".xml":"application/xml",".csv":"text/csv"},lastCleanupAt2=0;function resolveStateDir3(){let dimcodeHome=String(process12.env.DIMCODE_HOME??"").trim();if(dimcodeHome)return path34.resolve(dimcodeHome,"state");return path34.resolve(homedir3(),".dimcode","state")}function resolveSessionCacheDir2(sessionId){return path34.resolve(resolveStateDir3(),BLOB_CACHE_DIR2,sessionId)}function normalizeSessionId2(raw){let value=String(raw??"").trim();if(!value)return null;if(value==="."||value==="..")return null;if(value.includes("/")||value.includes("\\"))return null;if(value.includes("\x00"))return null;return value}function getFileExtension(filePath){let ext=path34.extname(filePath||"").toLowerCase();if(!ext)return"";return ext.startsWith(".")?ext.slice(1):ext}function basenameFromPath(filePath){return path34.basename(String(filePath??"").trim())}function parseAttachmentPathInfo(absPath){let blobMatch=normalizeMaybePath(absPath).match(/\/blob-cache\/([^/]+)\/attachments\/([^/]+)$/);if(!blobMatch)return null;let sessionId=normalizeSessionId2(blobMatch[1]??""),fileName=basenameFromPath(blobMatch[2]??"");if(!sessionId||!fileName)return null;return{sessionId,fileName}}function isTextLikeFilePath(filePath){let ext=getFileExtension(filePath);return Boolean(ext&&TEXT_LIKE_EXTENSIONS.has(ext))}function shouldCacheFileToSessionAttachment(filePath){return!isTextLikeFilePath(filePath)}function isSessionCachedImagePath(absPath){let info=parseAttachmentPathInfo(absPath);if(!info)return!1;let ext=getFileExtension(info.fileName);return Boolean(ext&&IMAGE_EXTENSIONS.has(ext))}function isHomeSessionAttachmentPath(absPath){let info=parseAttachmentPathInfo(absPath);return Boolean(info&&info.sessionId===HOME_SESSION_CACHE_ID)}function guessMimeTypeFromPath(filePath){let ext=path34.extname(filePath).toLowerCase();return EXT_MIME[ext]||"application/octet-stream"}function countLines2(text){if(!text)return 0;return text.split(`
|
|
1071
|
+
`)]})}async function createDimcodeContext(opts){let fastStartRaw=String(opts.env.DIMCODE_FAST_START??"").trim().toLowerCase(),fastStart=fastStartRaw==="1"||fastStartRaw==="true"||fastStartRaw==="yes"||fastStartRaw==="on",version2=readOptionalString3("0.0.67-beta.2")??(fastStart?null:await readRepoPackageVersion(opts.cwd)),resolveToolsPath=async()=>{let[{homedir:homedir3},path34]=await Promise.all([import("node:os"),import("node:path")]),dimcodeHome=readOptionalString3(opts.env.DIMCODE_HOME);if(dimcodeHome){let dir2=path34.resolve(dimcodeHome);return{dir:dir2,filePath:path34.join(dir2,"tools.json")}}let dir=path34.resolve(homedir3(),".dimcode");return{dir,filePath:path34.join(dir,"tools.json")}},[loadedCache,loadedConfig,loadedTools,loadedMcp]=fastStart?await(async()=>{let[cacheDir,configDir,toolsPath,path34]=await Promise.all([getDimcodeUserDir(opts.env),getDimcodeConfigDir(opts.env),resolveToolsPath(),import("node:path")]),cacheFile=path34.join(cacheDir,"cache.json"),configFile=path34.join(configDir,"config.json"),mcpJsonFile=path34.join(toolsPath.dir,"mcp.json");return[{dir:cacheDir,filePath:cacheFile,cache:{version:1,updatedAt:0}},{dir:configDir,filePath:configFile,config:{version:1,updatedAt:0}},{dir:toolsPath.dir,filePath:toolsPath.filePath,tools:{version:1,updatedAt:0}},{dir:toolsPath.dir,filePath:mcpJsonFile,servers:[]}]})():await Promise.all([loadDimcodeUserCache(opts.env),loadDimcodeUserConfig(opts.env),loadDimcodeUserTools(opts.env),loadMcpJson(opts.env)]),cache=loadedCache.cache,config2=loadedConfig.config,saved=cache.settings??{},savedConfig=config2.settings??{},savedCwd=readOptionalString3(saved.cwd),savedFocusFiles=Array.isArray(saved.focusFiles)?saved.focusFiles.map((file2)=>String(file2??"")).filter(Boolean):void 0,cwd=opts.cwd||savedCwd||".",v2=(key)=>readOptionalString3(opts.env[key]),explicitRuntimeEnv=Object.fromEntries(Object.entries(opts.env).flatMap(([key,value])=>{let canonical=String(key??"").trim(),normalized=readOptionalString3(value);if(!canonical||!RUNTIME_ENV_KEYS.has(canonical)||!normalized)return[];return[[canonical,normalized]]})),applyRuntimeEnvIfMissing=(target,key,source)=>{let value=source[key];if(!value||target[key])return;target[key]=value},mergedEnv={DIMCODE_VERSION:version2??"dev",...v2("DIMCODE_STARTUP_TOAST")?{DIMCODE_STARTUP_TOAST:v2("DIMCODE_STARTUP_TOAST")}:{}},savedProviderId=normalizeProviderId(savedConfig.providerId),savedConnections=savedConfig.providerConnections??{},savedActiveModelByProvider=savedConfig.activeModelByProvider??{},normalizedSavedCustomProviders=(Array.isArray(savedConfig.customProviders)?savedConfig.customProviders:[]).map((provider)=>{let adapter2=String(provider?.adapter??"").trim(),models=Array.isArray(provider?.models)?backfillCustomProviderModels(provider.models,{adapter:adapter2}):provider?.models;return{...provider,...Array.isArray(models)?{models}:{}}}),legacyCustom=savedConfig.customProvider??{},legacyBaseUrl=readOptionalString3(legacyCustom?.baseUrl),legacyApiKey=readOptionalString3(legacyCustom?.apiKey),rawProviderId=(()=>{if(isLegacyCustomProviderId(savedProviderId)&&normalizedSavedCustomProviders.length){let fallbackId=readOptionalString3(normalizedSavedCustomProviders[0]?.id);if(fallbackId){if(config2.settings)config2.settings.providerId=fallbackId;return fallbackId}}return savedProviderId})(),{candidates,existingProviderIds}=buildProviderSelectionCandidates({connections:savedConnections,customProviders:normalizedSavedCustomProviders,legacyCustom,rememberedModels:{...savedActiveModelByProvider}}),rememberedModels=stripUnknownActiveModelSelections({...savedActiveModelByProvider},existingProviderIds),selection=resolveProviderSelection({candidates,preferredProviderId:rawProviderId,rememberedModels}),providerId=readOptionalString3(selection.providerId),providerModel=readOptionalString3(selection.modelId);if(config2.settings)if(providerId)config2.settings.providerId=providerId;else delete config2.settings.providerId;let customProvider=isCustomProviderId(providerId)?normalizedSavedCustomProviders.find((p2)=>String(p2?.id??"").trim()===providerId):void 0,builtin=providerId&&!isCustomProviderId(providerId)&&!isLegacyCustomProviderId(providerId)?getBuiltinProvider(providerId):void 0,savedConnection=savedConnections[providerId??""],savedConnectionBaseUrl=readOptionalString3(savedConnection?.baseUrl),builtinBaseUrl=readOptionalString3(getProviderBaseUrl(builtin)),adapter=isCustomProviderId(providerId)?String(customProvider?.adapter??"").trim():isLegacyCustomProviderId(providerId)?"openai":providerId==="openai"&&savedConnectionBaseUrl&&savedConnectionBaseUrl!==builtinBaseUrl?"openai":getProviderAdapter(builtin),providerBaseUrl=isCustomProviderId(providerId)?readOptionalString3(customProvider?.baseUrl):isLegacyCustomProviderId(providerId)?legacyBaseUrl:readOptionalString3(resolveBuiltinProviderBaseUrl(builtin,savedConnection?.baseUrl)),providerApiKey=isCustomProviderId(providerId)?readOptionalString3(customProvider?.apiKey):isLegacyCustomProviderId(providerId)?legacyApiKey:readOptionalString3(savedConnection?.apiKey),modelCapabilityFallbackModels=isCustomProviderId(providerId)||isLegacyCustomProviderId(providerId)||builtin?.customModels?listCustomProviderModelFallbackModels():void 0,resolvedModelContextWindow=resolveProviderSelectionContextWindow({providerId,modelId:providerModel,connections:savedConnections,customProviders:normalizedSavedCustomProviders}),resolvedModelMaxOutputTokens=resolveProviderSelectionMaxOutputTokens({providerId,modelId:providerModel,connections:savedConnections,customProviders:normalizedSavedCustomProviders});if(isLegacyCustomProviderId(providerId)&&!providerBaseUrl&&!providerApiKey&&!providerModel)throw Error("Legacy custom provider config is missing. Please run /connect to add a custom provider and select a model.");let modelCapabilities=resolveProviderModelCapabilities({providerId,modelId:providerModel,connectionModels:savedConnection?.models,builtinModels:builtin?.models,customProviderModels:customProvider?.models,legacyCustomModels:Array.isArray(legacyCustom?.models)?legacyCustom.models:void 0,fallbackModels:modelCapabilityFallbackModels}),runtimeConfig={modelId:providerModel??"deepseek-v3.1",adapter:adapter||"openai",provider:providerId??adapter,baseUrl:providerBaseUrl,apiKey:providerApiKey,nextApiOAuth:providerId==="dimcode-api-oauth"||void 0,...customProvider?.responsesAutoPromptCacheKey===!0?{responsesAutoPromptCacheKey:!0}:{},...customProvider?.responsesUseSessionId===!0?{responsesUseSessionId:!0}:{},...modelCapabilities?{modelCapabilities}:{},...typeof resolvedModelContextWindow==="number"&&resolvedModelContextWindow>0?{maxInputTokens:resolvedModelContextWindow}:{},...typeof resolvedModelMaxOutputTokens==="number"&&resolvedModelMaxOutputTokens>0?{maxOutputTokens:resolvedModelMaxOutputTokens}:{},temperature:readOptionalNumber2(saved.temperature)??void 0,interleavedThinking:typeof saved.interleavedThinking==="boolean"?saved.interleavedThinking:void 0,reasoningEffort:resolveSelectedReasoningEffort({modelId:providerModel,reasoningEffort:saved.reasoningEffort,reasoningEffortByModel:saved.reasoningEffortByModel})};if(!mergedEnv.DIMCODE_TOOL_APPROVALS&&saved.toolApprovals){let raw=String(saved.toolApprovals),mapped=raw==="auto"||raw==="all"?"auto":raw==="strict"||raw==="manual"?"strict":raw==="normal"?"normal":void 0;if(mapped)mergedEnv.DIMCODE_TOOL_APPROVALS=mapped}if(!mergedEnv.DIMCODE_LANG&&readOptionalString3(saved.locale))mergedEnv.DIMCODE_LANG=readOptionalString3(saved.locale);if(!mergedEnv.DIMCODE_THEME&&readOptionalString3(saved.themeMode))mergedEnv.DIMCODE_THEME=readOptionalString3(saved.themeMode);if(!mergedEnv.DIMCODE_REASONING_EFFORT){let resolved=resolveSelectedReasoningEffort({modelId:providerModel,reasoningEffort:saved.reasoningEffort,reasoningEffortByModel:saved.reasoningEffortByModel});if(resolved)mergedEnv.DIMCODE_REASONING_EFFORT=resolved}if(usesCcMock(builtin))mergedEnv.DIMCODE_CCMOCK="1";else delete mergedEnv.DIMCODE_CCMOCK;return applyRuntimeEnvIfMissing(mergedEnv,"DIMCODE_NO_INTERACTION",explicitRuntimeEnv),{context:{system:resolveSystemPrompt(mergedEnv),cwd,env:mergedEnv,runtimeConfig,...savedFocusFiles?.length?{focusFiles:savedFocusFiles}:{}},cacheDir:loadedCache.dir,cacheFile:loadedCache.filePath,cache,configDir:loadedConfig.dir,configFile:loadedConfig.filePath,config:config2,toolsFile:loadedTools.filePath,tools:loadedTools.tools,mcpJsonFile:loadedMcp.filePath,mcpServers:loadedMcp.servers,mcpPhase:fastStart?"deferred":"syncing",mcpConnectedCount:0,mcpConfiguredCount:loadedMcp.servers.length}}async function readRepoPackageVersion(cwd){try{let[{readFile:readFile11},path34]=await Promise.all([import("node:fs/promises"),import("node:path")]),raw=await readFile11(path34.join(cwd,"package.json"),"utf8"),parsed=JSON.parse(raw),v2=typeof parsed?.version==="string"?parsed.version:null;return v2&&v2.trim()?v2.trim():null}catch{return null}}import{createHash as createHash4,randomUUID as randomUUID8}from"node:crypto";import{copyFile as copyFile2,mkdir as mkdir11,readdir as readdir7,readFile as readFile11,rename as rename2,rm as rm7,stat as stat7,writeFile as writeFile10}from"node:fs/promises";import{homedir as homedir3}from"node:os";import path34 from"node:path";import process12 from"node:process";var BLOB_CACHE_DIR2="blob-cache",BLOB_DIR2="blobs",ATTACHMENTS_DIR2="attachments",META_DIR2="meta",BLOB_TTL_MS2=86400000,CLEANUP_MIN_INTERVAL_MS2=3600000,FILE_ID_PATTERN=/^[\w.-]{1,128}$/,HOME_SESSION_CACHE_ID="_home",IMAGE_EXTENSIONS=new Set(["png","jpg","jpeg","gif","svg","webp","bmp","ico"]),TEXT_LIKE_EXTENSIONS=new Set(["txt","text","md","markdown","mdx","rst","log","json","jsonl","json5","yaml","yml","toml","ini","cfg","conf","properties","env","xml","csv","tsv","html","htm","css","scss","less","sass","js","jsx","ts","tsx","mjs","cjs","mts","cts","vue","svelte","astro","py","rb","php","go","rs","java","kt","swift","c","cc","cpp","cxx","h","hh","hpp","hxx","m","mm","cs","sh","bash","zsh","fish","ps1","sql","graphql","gql","proto","diff","patch","gitignore","gitattributes","editorconfig","dockerfile","makefile","mk","lock"]),EXT_MIME={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".bmp":"image/bmp",".ico":"image/x-icon",".svg":"image/svg+xml",".mp4":"video/mp4",".mov":"video/quicktime",".m4v":"video/x-m4v",".webm":"video/webm",".avi":"video/x-msvideo",".mkv":"video/x-matroska",".mpeg":"video/mpeg",".mpg":"video/mpeg",".wmv":"video/x-ms-wmv",".3gp":"video/3gpp",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".flac":"audio/flac",".m4a":"audio/mp4",".pdf":"application/pdf",".txt":"text/plain",".md":"text/markdown",".json":"application/json",".yaml":"text/yaml",".yml":"text/yaml",".toml":"text/plain",".ini":"text/plain",".xml":"application/xml",".csv":"text/csv"},lastCleanupAt2=0;function resolveStateDir3(){let dimcodeHome=String(process12.env.DIMCODE_HOME??"").trim();if(dimcodeHome)return path34.resolve(dimcodeHome,"state");return path34.resolve(homedir3(),".dimcode","state")}function resolveSessionCacheDir2(sessionId){return path34.resolve(resolveStateDir3(),BLOB_CACHE_DIR2,sessionId)}function normalizeSessionId2(raw){let value=String(raw??"").trim();if(!value)return null;if(value==="."||value==="..")return null;if(value.includes("/")||value.includes("\\"))return null;if(value.includes("\x00"))return null;return value}function getFileExtension(filePath){let ext=path34.extname(filePath||"").toLowerCase();if(!ext)return"";return ext.startsWith(".")?ext.slice(1):ext}function basenameFromPath(filePath){return path34.basename(String(filePath??"").trim())}function parseAttachmentPathInfo(absPath){let blobMatch=normalizeMaybePath(absPath).match(/\/blob-cache\/([^/]+)\/attachments\/([^/]+)$/);if(!blobMatch)return null;let sessionId=normalizeSessionId2(blobMatch[1]??""),fileName=basenameFromPath(blobMatch[2]??"");if(!sessionId||!fileName)return null;return{sessionId,fileName}}function isTextLikeFilePath(filePath){let ext=getFileExtension(filePath);return Boolean(ext&&TEXT_LIKE_EXTENSIONS.has(ext))}function shouldCacheFileToSessionAttachment(filePath){return!isTextLikeFilePath(filePath)}function isSessionCachedImagePath(absPath){let info=parseAttachmentPathInfo(absPath);if(!info)return!1;let ext=getFileExtension(info.fileName);return Boolean(ext&&IMAGE_EXTENSIONS.has(ext))}function isHomeSessionAttachmentPath(absPath){let info=parseAttachmentPathInfo(absPath);return Boolean(info&&info.sessionId===HOME_SESSION_CACHE_ID)}function guessMimeTypeFromPath(filePath){let ext=path34.extname(filePath).toLowerCase();return EXT_MIME[ext]||"application/octet-stream"}function countLines2(text){if(!text)return 0;return text.split(`
|
|
1072
1072
|
`).length}function normalizeMaybePath(raw){return String(raw??"").replace(/\\/g,"/")}async function ensureBlobDirs2(sessionDir){let blobsDir=path34.join(sessionDir,BLOB_DIR2),metaDir=path34.join(sessionDir,META_DIR2);try{return await mkdir11(blobsDir,{recursive:!0}),await mkdir11(metaDir,{recursive:!0}),{blobsDir,metaDir}}catch{return null}}async function ensureAttachmentDirs(sessionDir){let attachmentsDir=path34.join(sessionDir,ATTACHMENTS_DIR2),metaDir=path34.join(sessionDir,META_DIR2);try{return await mkdir11(attachmentsDir,{recursive:!0}),await mkdir11(metaDir,{recursive:!0}),{attachmentsDir,metaDir}}catch{return null}}async function copyFileUnique(src,destDir,baseName){let safeBaseName=basenameFromPath(baseName)||basenameFromPath(src)||"attachment",ext=path34.extname(safeBaseName),stem=ext?safeBaseName.slice(0,-ext.length):safeBaseName,candidate=path34.join(destDir,safeBaseName);for(let i2=0;i2<40;i2++){try{await copyFile2(src,candidate);let info=await stat7(candidate);if(info.isFile()&&info.size>0)return candidate}catch{}let suffix=`-${i2+1}`;candidate=path34.join(destDir,`${stem}${suffix}${ext}`)}return null}async function readAttachmentMetaByPath(absPath){let info=parseAttachmentPathInfo(absPath);if(!info)return null;let metaDir=path34.join(resolveSessionCacheDir2(info.sessionId),META_DIR2),entries=[];try{entries=await readdir7(metaDir)}catch{return null}for(let entry of entries){if(!entry.endsWith(".json"))continue;let metaPath=path34.join(metaDir,entry);try{let raw=await readFile11(metaPath,"utf8"),meta3=JSON.parse(raw);if(!meta3||typeof meta3!=="object")continue;if(String(meta3.kind??"")!=="attachment")continue;if(String(meta3.stored_name??"")!==info.fileName)continue;let fileId=String(meta3.file_id??"").trim();if(!FILE_ID_PATTERN.test(fileId))continue;return{fileId,metaPath,meta:meta3}}catch{}}return null}async function writeSessionBlob2(opts){let sessionDir=resolveSessionCacheDir2(opts.sessionId),dirs=await ensureBlobDirs2(sessionDir);if(!dirs)return null;let fileId=`blob-${randomUUID8().replace(/-/g,"")}`,blobPath=path34.join(dirs.blobsDir,`${fileId}.txt`),metaPath=path34.join(dirs.metaDir,`${fileId}.json`),lineCount=countLines2(opts.content),sha256=createHash4("sha256").update(opts.content).digest("hex"),byteSize=Buffer.byteLength(opts.content,"utf-8"),nowIso=new Date().toISOString();try{return await writeFile10(blobPath,opts.content,"utf8"),await writeFile10(metaPath,JSON.stringify({file_id:fileId,kind:"text",sha256,line_count:lineCount,byte_size:byteSize,created_at:nowIso,source:String(opts.source??"unknown")},null,2),"utf8"),{fileId,filePath:blobPath,lineCount,sha256,byteSize}}catch{return null}}async function cacheFileToSessionAttachment(opts){let cleanedPath=String(opts.sourcePath??"").trim();if(!cleanedPath)return null;let sessionId=normalizeSessionId2(opts.sessionId);if(!sessionId)return null;let sourceInfo;try{sourceInfo=await stat7(cleanedPath)}catch{return null}if(!sourceInfo.isFile()||sourceInfo.size<=0)return null;await cleanupExpiredSessionCaches2({ttlMs:BLOB_TTL_MS2,logger:opts.logger}).catch(()=>{});let sessionDir=resolveSessionCacheDir2(sessionId),dirs=await ensureAttachmentDirs(sessionDir);if(!dirs)return null;let fileId=`att-${randomUUID8().replace(/-/g,"")}`,preferredBaseName=basenameFromPath(String(opts.preferredBaseName??"").trim()||basenameFromPath(cleanedPath)),storedPath=await copyFileUnique(cleanedPath,dirs.attachmentsDir,preferredBaseName);if(!storedPath)return null;let metaPath=path34.join(dirs.metaDir,`${fileId}.json`),mediaType=String(opts.mediaType??"").trim()||guessMimeTypeFromPath(storedPath),originalName=basenameFromPath(cleanedPath),storedName=basenameFromPath(storedPath),nowIso=new Date().toISOString();try{return await writeFile10(metaPath,JSON.stringify({file_id:fileId,kind:"attachment",byte_size:sourceInfo.size,created_at:nowIso,source:String(opts.source??"unknown"),media_type:mediaType,original_name:originalName,stored_name:storedName},null,2),"utf8"),opts.logger?.("session_attachment_cached",{sessionId,fileId,byteSize:sourceInfo.size,mediaType,originalName,storedName}),{fileId,filePath:storedPath,byteSize:sourceInfo.size,mediaType,originalName}}catch{return await rm7(storedPath,{force:!0}).catch(()=>{}),null}}async function deleteSessionAttachmentByPath(absPath,logger){let info=parseAttachmentPathInfo(absPath);if(!info)return!1;try{await rm7(absPath,{force:!0});let metaMatch=await readAttachmentMetaByPath(absPath);if(metaMatch)await rm7(metaMatch.metaPath,{force:!0});return await Promise.all([removeDirIfEmpty(path34.join(resolveSessionCacheDir2(info.sessionId),ATTACHMENTS_DIR2)),removeDirIfEmpty(path34.join(resolveSessionCacheDir2(info.sessionId),META_DIR2)),removeDirIfEmpty(resolveSessionCacheDir2(info.sessionId))]),logger?.("session_attachment_deleted",{sessionId:info.sessionId,fileName:info.fileName}),!0}catch{return!1}}async function relocateSessionAttachmentPath(absPath,targetSessionId,logger){let sourceInfo=parseAttachmentPathInfo(absPath),targetSid=normalizeSessionId2(targetSessionId);if(!sourceInfo||!targetSid)return null;if(sourceInfo.sessionId===targetSid)return absPath;let metaMatch=await readAttachmentMetaByPath(absPath),preferredBaseName=String(metaMatch?.meta.stored_name??basenameFromPath(absPath)).trim()||basenameFromPath(absPath),mediaType=String(metaMatch?.meta.media_type??"").trim()||guessMimeTypeFromPath(absPath),source=String(metaMatch?.meta.source??"attachment_relocate").trim()||"attachment_relocate",cached2=await cacheFileToSessionAttachment({sourcePath:absPath,sessionId:targetSid,source,preferredBaseName,mediaType,logger});if(!cached2)return null;return await deleteSessionAttachmentByPath(absPath,logger).catch(()=>!1),cached2.filePath}async function cleanupExpiredSessionCaches2(opts){let now=Date.now();if(now-lastCleanupAt2<CLEANUP_MIN_INTERVAL_MS2)return;lastCleanupAt2=now;let ttlMs=Math.max(1000,Math.floor(opts?.ttlMs??BLOB_TTL_MS2)),cutoff=now-ttlMs;await cleanupDedicatedCacheRoot2(path34.join(resolveStateDir3(),BLOB_CACHE_DIR2),cutoff,opts?.logger)}async function cleanupDedicatedCacheRoot2(cacheRoot,cutoff,logger){let entries=[];try{entries=await readdir7(cacheRoot)}catch{return}await Promise.all(entries.map(async(entry)=>{let sid=normalizeSessionId2(entry);if(!sid)return;let sessionDir=path34.join(cacheRoot,sid),candidates=[sessionDir,path34.join(sessionDir,BLOB_DIR2),path34.join(sessionDir,ATTACHMENTS_DIR2),path34.join(sessionDir,META_DIR2)],mtimes=[];for(let candidate of candidates)try{let info=await stat7(candidate);if(info.isDirectory()||info.isFile())mtimes.push(info.mtimeMs)}catch{}if(!mtimes.length)return;if(Math.max(...mtimes)>=cutoff)return;try{await rm7(sessionDir,{recursive:!0,force:!0}),logger?.("session_cache_ttl_deleted",{sessionId:sid,mtimeMs:Math.max(...mtimes),cutoff})}catch{}}))}async function removeDirIfEmpty(dir){try{if((await readdir7(dir)).length===0)await rm7(dir,{recursive:!0,force:!0})}catch{}}var COMMIT_ID_RE=/^[0-9a-f]{7,40}$/i;function getCommitIdFromMention(value){let raw=String(value||"");if(!raw.startsWith("git:commit:"))return null;let sha=raw.slice(11).trim();if(!COMMIT_ID_RE.test(sha))return null;return sha}function formatCommitObjectPath(sha){let safe=String(sha||"").trim();if(!safe)return"";return`.git/objects/${safe.slice(0,2)}/${safe}`}function renderCommitMarkdownLink(sha){let safe=String(sha||"").trim();if(!safe)return"";let path35=formatCommitObjectPath(safe);return`[${safe}](${path35})`}function stripLeadingFocusFilesBlock(text){let normalized=String(text??"").replace(/\r/g,"");if(!normalized)return"";let lines=normalized.split(`
|
|
1073
1073
|
`),header=String(lines[0]??"").trim();if(header!=="[focus_files]"&&header!=="[user_focus_files]"){let inlineStripped=((raw)=>{let s2=String(raw??"");if(!s2)return null;let idx=0,matched2=0;while(idx<s2.length){while(idx<s2.length&&(s2[idx]===" "||s2[idx]==="\t"||s2[idx]===`
|
|
1074
1074
|
`))idx++;let m2=s2.slice(idx).match(/^\[([^\]]*)\]\(((?:\\\)|[^)])+)\)/);if(!m2)break;let path35=String(m2[2]??"").trim();if(path35.startsWith("<")&&path35.endsWith(">"))path35=path35.slice(1,-1);if(path35=path35.replace(/\\\)/g,")").trim(),!(path35.startsWith("/")||/^[A-Z]:[\\/]/i.test(path35)))break;matched2++,idx+=m2[0].length}if(!matched2)return null;let rest=s2.slice(idx);if(rest=rest.replace(/^[ \t]+/g,""),rest.startsWith(`
|
|
@@ -1160,16 +1160,16 @@ ${exactSig}`;unique.delete(key),unique.set(key,candidate)}return[...unique.value
|
|
|
1160
1160
|
tc:${toolCalls}`}function assistantDisplaySignature(msg){let thinking=msg.parts.filter((p2)=>p2.type==="thinking").map((p2)=>String(p2.content??"").trim()).join(`
|
|
1161
1161
|
`).trim(),markdown=assistantMarkdownOnlySignature(msg),toolCalls=msg.parts.filter((p2)=>p2.type==="tool_call").map((p2)=>{let id2=String(p2?.call?.id??"").trim();return`${String(p2?.call?.name??"").trim()}:${id2}`}).filter(Boolean).join("|");return`th:${thinking}
|
|
1162
1162
|
md:${markdown}
|
|
1163
|
-
tc:${toolCalls}`}function userTranscriptSignature(msg){let content=
|
|
1163
|
+
tc:${toolCalls}`}function userTranscriptSignature(msg){let content=extractTextContent(msg.content).trim(),focusFiles=Array.isArray(msg?.focusFiles)?msg.focusFiles.map((f2)=>String(f2??"").trim()).filter(Boolean).join(`
|
|
1164
1164
|
`):"";return[content,focusFiles].filter(Boolean).join(`
|
|
1165
|
-
`).trim()}function messageTranscriptSignature(msg){if(msg.role==="assistant"){let sig=assistantTranscriptSignature(msg);return sig?`assistant:${sig}`:""}if(msg.role==="user"){let sig=userTranscriptSignature(msg);return sig?`user:${sig}`:""}return""}function assistantThinkingCollapsePreserveKey(msg){let messageId=String(msg?.id??"").trim();if(messageId)return`id:${messageId}`;let sig=assistantDisplaySignature(msg);return sig?`sig:${sig}`:""}function collectLocalThinkingCollapsedState(messages){let byKey=new Map;for(let msg of messages){if(!msg||msg.role!=="assistant")continue;let collapsedByOrdinal=msg.parts.filter((p2)=>p2.type==="thinking").map((p2)=>Boolean(p2.collapsed));if(collapsedByOrdinal.length===0)continue;let key=assistantThinkingCollapsePreserveKey(msg);if(!key)continue;let queue=byKey.get(key)??[];queue.push([...collapsedByOrdinal]),byKey.set(key,queue)}return byKey}function restoreLocalThinkingCollapsedState(store3,localThinkingCollapsedState){if(localThinkingCollapsedState.size===0)return;let changed=!1,next=store3.state.messages.map((msg)=>{if(!msg||msg.role!=="assistant")return msg;let key=assistantThinkingCollapsePreserveKey(msg);if(!key)return msg;let queue=localThinkingCollapsedState.get(key);if(!queue||queue.length===0)return msg;let collapsedByOrdinal=queue.shift()??[];if(queue.length===0)localThinkingCollapsedState.delete(key);if(collapsedByOrdinal.length===0)return msg;let thinkingOrdinal=0,messageChanged=!1,parts=msg.parts.map((part)=>{if(part.type!=="thinking")return part;let collapsed=collapsedByOrdinal[thinkingOrdinal];if(thinkingOrdinal+=1,typeof collapsed!=="boolean"||part.collapsed===collapsed)return part;return messageChanged=!0,{...part,collapsed}});if(!messageChanged)return msg;return changed=!0,{...msg,parts}});if(changed)store3.replaceMessages(next)}function cloneLlmMetaPart(part){if(!part||typeof part!=="object")return part;return{...part}}function collectLocalAssistantLlmMetaBySignature(messages){let bySignature=new Map;for(let msg of messages){if(!msg||msg.role!=="assistant")continue;if(!msg.parts.some((p2)=>p2.type==="llm_meta"))continue;let signature=assistantLlmMetaPreserveSignature(msg);if(!signature)continue;let llmMetaParts=msg.parts.filter((p2)=>p2.type==="llm_meta").map((p2)=>cloneLlmMetaPart(p2));if(llmMetaParts.length===0)continue;let queue=bySignature.get(signature)??[];queue.push(llmMetaParts),bySignature.set(signature,queue)}return bySignature}function mergeLocalAssistantLlmMetaBySignature(uiMessages,localLlmMetaBySignature){if(localLlmMetaBySignature.size===0)return;for(let i2=0;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(!msg||msg.role!=="assistant")continue;if(msg.parts.some((p2)=>p2.type==="llm_meta"))continue;let signature=assistantLlmMetaPreserveSignature(msg);if(!signature)continue;let queue=localLlmMetaBySignature.get(signature);if(!queue||queue.length===0)continue;let llmMetaParts=queue.shift()??[];if(queue.length===0)localLlmMetaBySignature.delete(signature);if(llmMetaParts.length===0)continue;uiMessages[i2]={...msg,parts:[...msg.parts,...llmMetaParts]}}}function collectLocalMessageHeaderMetaBySignature(messages){let bySignature=new Map;for(let msg of messages){if(!msg||msg.role!=="user"&&msg.role!=="assistant")continue;let createdAtMs=Number(msg?.createdAtMs),modelId=String(msg?.modelId??"").trim()||void 0;if(!Number.isFinite(createdAtMs)&&!modelId)continue;let signature=msg.role==="user"?userTranscriptSignature(msg):assistantDisplaySignature(msg);if(!signature)continue;let key=`${msg.role}:${signature}`,queue=bySignature.get(key)??[];queue.push({...Number.isFinite(createdAtMs)?{createdAtMs:Math.floor(createdAtMs)}:{},...modelId?{modelId}:{}}),bySignature.set(key,queue)}return bySignature}function mergeLocalMessageHeaderMetaBySignature(uiMessages,localHeaderMetaBySignature){if(localHeaderMetaBySignature.size===0)return;for(let i2=0;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(!msg||msg.role!=="user"&&msg.role!=="assistant")continue;let hasCreatedAt=Number.isFinite(Number(msg?.createdAtMs)),hasModelId=Boolean(String(msg?.modelId??"").trim());if(hasCreatedAt&&hasModelId)continue;let signature=msg.role==="user"?userTranscriptSignature(msg):assistantDisplaySignature(msg);if(!signature)continue;let key=`${msg.role}:${signature}`,queue=localHeaderMetaBySignature.get(key);if(!queue||queue.length===0)continue;let headerMeta=queue.shift()??{};if(queue.length===0)localHeaderMetaBySignature.delete(key);let nextCreatedAtMs=hasCreatedAt?Number(msg?.createdAtMs):Number(headerMeta.createdAtMs),nextModelId=hasModelId?String(msg?.modelId??"").trim():String(headerMeta.modelId??"").trim(),next={...msg,...Number.isFinite(nextCreatedAtMs)?{createdAtMs:Math.floor(nextCreatedAtMs)}:{},...nextModelId?{modelId:nextModelId}:{}};uiMessages[i2]=next}}function collectAssistantToolCallIds(msg){let out=[],seen=new Set;for(let part of msg.parts){if(part.type!=="tool_call")continue;let id2=String(part?.call?.id??"").trim();if(!id2||seen.has(id2))continue;seen.add(id2),out.push(id2)}return out}function hasAssistantUserFacingContent(msg){return msg.parts.some((part)=>{if(part.type==="markdown")return Boolean(String(part?.markdown??"").trim());return part.type==="todo"||part.type==="plan"||part.type==="approve"||part.type==="info"})}function llmMetaPartsSignature(parts){return parts.map((part)=>{let p2=part;if(!p2||p2.type!=="llm_meta")return"";let durationMs=Math.floor(Number(p2.durationMs??0)),modelId=String(p2.modelId??"").trim(),toolCalls=Math.floor(Number(p2.toolCalls??0)),tokensUsed=Math.floor(Number(p2.tokensUsed??0)),changedFiles=Array.isArray(p2.changedFiles)?p2.changedFiles.map((f2)=>String(f2??"").trim()).filter(Boolean).join("|"):"",changedFileDetails=Array.isArray(p2.changedFileDetails)?p2.changedFileDetails.map((item)=>{let path36=String(item?.path??"").trim(),added=Math.floor(Number(item?.added??-1)),removed=Math.floor(Number(item?.removed??-1));return`${path36}:${added}:${removed}`}).filter(Boolean).join("|"):"";return[durationMs,modelId,toolCalls,tokensUsed,changedFiles,changedFileDetails].join(":")}).filter(Boolean).join("||")}function collectLocalAssistantLlmMetaRecords(messages){let out=[];for(let msg of messages){if(!msg||msg.role!=="assistant")continue;let llmMetaParts=msg.parts.filter((p2)=>p2.type==="llm_meta").map((p2)=>cloneLlmMetaPart(p2));if(llmMetaParts.length===0)continue;out.push({llmMetaParts,toolCallIds:collectAssistantToolCallIds(msg)})}return out}function mergeLocalAssistantLlmMetaByToolCallFlow(uiMessages,localRecords){if(localRecords.length===0)return;let existingLlmMetaSignatures=new Set;for(let msg of uiMessages){if(!msg||msg.role!=="assistant")continue;let llmMetaParts=msg.parts.filter((p2)=>p2.type==="llm_meta");if(llmMetaParts.length===0)continue;existingLlmMetaSignatures.add(llmMetaPartsSignature(llmMetaParts))}let searchStart=0;for(let record3 of localRecords){let sig=llmMetaPartsSignature(record3.llmMetaParts);if(!sig||existingLlmMetaSignatures.has(sig))continue;let anchorIdx=-1;if(record3.toolCallIds.length>0)for(let i2=searchStart;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(!msg||msg.role!=="assistant")continue;if(collectAssistantToolCallIds(msg).some((id2)=>record3.toolCallIds.includes(id2))){anchorIdx=i2;break}}if(anchorIdx<0){for(let i2=searchStart;i2<uiMessages.length;i2++)if(uiMessages[i2]?.role==="assistant"){anchorIdx=i2;break}}if(anchorIdx<0)continue;let endIdx=anchorIdx;for(let i2=anchorIdx+1;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(msg?.role==="user")break;if(msg?.role==="assistant")endIdx=i2}let targetIdx=endIdx;for(let i2=endIdx;i2>=anchorIdx;i2--){let msg=uiMessages[i2];if(!msg||msg.role!=="assistant")continue;if(hasAssistantUserFacingContent(msg)){targetIdx=i2;break}}let target=uiMessages[targetIdx];if(!target||target.role!=="assistant"){searchStart=endIdx+1;continue}if(target.parts.some((p2)=>p2.type==="llm_meta")){searchStart=endIdx+1;continue}uiMessages[targetIdx]={...target,parts:[...target.parts,...record3.llmMetaParts]},existingLlmMetaSignatures.add(sig),searchStart=endIdx+1}}function buildSignatureCounts(signatures){let counts=new Map;for(let sig of signatures){if(!sig)continue;counts.set(sig,(counts.get(sig)??0)+1)}return counts}function consumeSignatureCount(counts,signature){let remaining=counts.get(signature)??0;if(remaining<=0)return!1;if(remaining===1)counts.delete(signature);else counts.set(signature,remaining-1);return!0}function buildAnchoredInsertionPlan(existingMessages,candidates){let existingCounts=buildSignatureCounts(existingMessages.map(messageTranscriptSignature)),pendingAnchorSig=null,toInsert=[];for(let m2 of candidates){let sig=messageTranscriptSignature(m2);if(!sig){pendingAnchorSig=null;continue}if(consumeSignatureCount(existingCounts,sig)){pendingAnchorSig=sig;continue}toInsert.push({message:m2,anchorSig:pendingAnchorSig}),pendingAnchorSig=sig}return toInsert}function findAnchoredInsertIndex(messages,anchorSig){if(!anchorSig)return-1;let anchorIdx=-1;for(let i2=messages.length-1;i2>=0;i2--)if(messageTranscriptSignature(messages[i2])===anchorSig){anchorIdx=i2;break}if(anchorIdx<0)return-1;let insertAt=anchorIdx+1;while(insertAt<messages.length&&messages[insertAt]?.role!=="user")insertAt++;return insertAt}function findChronologicalInsertIndex(messages,candidate){let ts=candidate.createdAtMs??0;if(ts<=0)return messages.length;let insertAt=0;for(let i2=0;i2<messages.length;i2++)if((messages[i2].createdAtMs??0)<=ts)insertAt=i2+1;return insertAt}function restoreAnchoredMessages(store3,candidates){let toInsert=buildAnchoredInsertionPlan(store3.state.messages,candidates);if(toInsert.length===0)return;let next=store3.state.messages.slice();for(let{message,anchorSig}of toInsert){let insertAt=(()=>{let anchored=findAnchoredInsertIndex(next,anchorSig);if(anchored>=0)return anchored;return findChronologicalInsertIndex(next,message)})();next.splice(insertAt,0,message)}store3.replaceMessages(next)}function restoreErrorAssistantMessages(store3,candidates){if(candidates.length===0)return;let next=store3.state.messages.slice(),usedReplacementIndexes=new Set,changed=!1;for(let{message:candidate,anchorSig}of candidates){let exactSig=assistantErrorExactSignature(candidate);if(next.findIndex((m2)=>{if(!m2||m2.role!=="assistant")return!1;return assistantErrorExactSignature(m2)===exactSig})>=0)continue;let mergeSig=assistantErrorMergeSignature(candidate);if(mergeSig){let replaceIndex=next.findIndex((m2,index)=>{if(usedReplacementIndexes.has(index)||!m2||m2.role!=="assistant")return!1;return assistantErrorMergeSignature(m2)===mergeSig});if(replaceIndex>=0){next[replaceIndex]=candidate,usedReplacementIndexes.add(replaceIndex),changed=!0;continue}}let insertAt=(()=>{let anchored=findAnchoredInsertIndex(next,anchorSig);if(anchored>=0)return anchored;return findChronologicalInsertIndex(next,candidate)})();next.splice(insertAt,0,candidate),changed=!0}if(changed)store3.replaceMessages(next)}function applyHydrationRestorePhases(store3,phases){for(let phase of phases){if(phase.kind==="anchored"){restoreAnchoredMessages(store3,phase.candidates);continue}restoreErrorAssistantMessages(store3,phase.candidates)}}function hydrateStoreFromSnapshot(store3,snapshot,opts){let previousSessionId=String(store3.state.sessionId??"").trim(),hadLocalMessagesBeforeHydrate=store3.state.messages.length>0,preserveLocalSyntheticErrors=Boolean(opts?.preserveLocalSyntheticErrors),preserveLocalInterruptedMessages=Boolean(opts?.preserveLocalInterruptedMessages),preserveLocalCompactMessages=Boolean(opts?.preserveLocalCompactMessages),preserveLocalCompressionMessages=Boolean(opts?.preserveLocalCompressionMessages),localErrorAssistants=preserveLocalSyntheticErrors?collectRestorableErrorAssistants(store3.state.messages):[],localInterruptedRoundMessages=preserveLocalInterruptedMessages?collectInterruptedRoundMessages(store3.state.messages):[],id2=snapshotId(snapshot),sameSession=Boolean(id2)&&id2===previousSessionId,localSessionMeta=sameSession&&store3.state.sessionMeta?mergeSessionUiMetadata2(store3.state.sessionMeta,{}):null,preserveLocalSessionHistoryDirty=sameSession&&Boolean(store3.state.sessionHistoryDirty),localAssistantLlmMetaBySignature=sameSession?collectLocalAssistantLlmMetaBySignature(store3.state.messages):new Map,localAssistantLlmMetaRecords=sameSession?collectLocalAssistantLlmMetaRecords(store3.state.messages):[],localMessageHeaderMetaBySignature=sameSession?collectLocalMessageHeaderMetaBySignature(store3.state.messages):new Map,localThinkingCollapsedState=sameSession?collectLocalThinkingCollapsedState(store3.state.messages):new Map,localLastRequestBudget=sameSession?normalizeLastRequestBudget(store3.state.lastRequestBudget):null,persistedLastRequestBudget=persistedLastRequestBudgetFromSnapshot(snapshot),shouldRestorePersistedCompactMessages=!sameSession||!hadLocalMessagesBeforeHydrate,persistedCompactMessages=shouldRestorePersistedCompactMessages?persistedCompactMessagesFromSnapshot(snapshot):[],localCompactMessages=preserveLocalCompactMessages&&sameSession&&!hadLocalMessagesBeforeHydrate?dedupeAssistantMessagesBySignature(collectLocalCompactMessages(store3.state.messages),{include:isCompactTranscriptMessage,limit:COMPACT_PERSISTED_MESSAGE_LIMIT}):[],localCompressionMessages=preserveLocalCompressionMessages&&sameSession?dedupeAssistantMessagesBySignature(collectLocalCompressionMessages(store3.state.messages),{include:isCompressionTranscriptMessage,limit:COMPRESSION_PERSISTED_MESSAGE_LIMIT}):[];if(id2)store3.state.sessionId=id2;let rawUiMessages=snapshotToUiMessages(snapshot),contextTranscript=splitSnapshotContextMessages(rawUiMessages),persistedInterruptedRoundMessages=dedupeAnchoredAssistantRoundMessages([...contextTranscript.interruptedMessages,...persistedInterruptedRoundMessagesFromSnapshot(snapshot)],{include:()=>!0,limit:INTERRUPTED_PERSISTED_MESSAGE_LIMIT}),persistedCompressionMessages=dedupeAssistantMessagesBySignature([...contextTranscript.compressionMessages,...persistedCompressionMessagesFromSnapshot(snapshot)],{include:isCompressionTranscriptMessage,limit:COMPRESSION_PERSISTED_MESSAGE_LIMIT}),persistedErrorMessages=dedupeErrorRestoreCandidates([...contextTranscript.errorMessages,...persistedErrorMessagesFromSnapshot(snapshot)]),uiMessages=contextTranscript.canonicalMessages.slice(),persistedCompactRestoreCandidates=shouldRestorePersistedCompactMessages?dedupeAssistantMessagesBySignature([...contextTranscript.compactMessages,...persistedCompactMessages],{include:isCompactTranscriptMessage,limit:COMPACT_PERSISTED_MESSAGE_LIMIT}):[];if(sameSession)mergeLocalMessageHeaderMetaBySignature(uiMessages,localMessageHeaderMetaBySignature),mergeLocalAssistantLlmMetaBySignature(uiMessages,localAssistantLlmMetaBySignature),mergeLocalAssistantLlmMetaByToolCallFlow(uiMessages,localAssistantLlmMetaRecords);let restorePhases=[{name:"persisted_interrupted",kind:"anchored",candidates:persistedInterruptedRoundMessages},{name:"persisted_compression",kind:"anchored",candidates:persistedCompressionMessages},{name:"persisted_compact",kind:"anchored",candidates:persistedCompactRestoreCandidates},{name:"persisted_error",kind:"error",candidates:persistedErrorMessages},{name:"local_interrupted",kind:"anchored",candidates:dedupeAnchoredAssistantRoundMessages(localInterruptedRoundMessages,{include:()=>!0,limit:INTERRUPTED_PERSISTED_MESSAGE_LIMIT})},{name:"local_compression",kind:"anchored",candidates:localCompressionMessages},{name:"local_compact",kind:"anchored",candidates:localCompactMessages},{name:"local_error",kind:"error",candidates:dedupeErrorRestoreCandidates(localErrorAssistants.map((message)=>({message,anchorSig:null})))}];if(store3.replaceMessages(uiMessages),applyHydrationRestorePhases(store3,restorePhases),sameSession)restoreLocalThinkingCollapsedState(store3,localThinkingCollapsedState);if(preserveLocalSessionHistoryDirty)store3.state.sessionHistoryDirty=!0;store3.clearRevertedMessages(),store3.state.selectedToolCallId=null,store3.state.runningAgentRound=!1,store3.state.runningToolCallId=null,store3.state.thinking.active=!1,store3.state.thinking.assistantId=null,store3.state.thinking.blockIndex=null,store3.state.expandedBashOutputs=new Set,store3.state.expandedToolOutputLineCounts=new Map,store3.state.unifiedEditDiffToolCallIds=new Set,store3.state.layoutDirtyMessageId=null,store3.state.layoutDirtySeq=0,store3.state.paused=null,store3.state.approval.active=null,store3.state.approval.pendingAutoRun=null,store3.state.approval.queue=[],store3.state.approval.decisions={};let meta3=readSessionUiMetadataFromSnapshot(snapshot),resolvedMeta=(()=>{if(!sameSession||!localSessionMeta)return meta3;let incomingUpdatedAt=Number(meta3.lastUpdatedAt??0);return Number(localSessionMeta.lastUpdatedAt??0)>incomingUpdatedAt?localSessionMeta:meta3})();if(store3.state.sessionMeta){let target=store3.state.sessionMeta;target.queue=[...resolvedMeta.queue],target.queueLength=resolvedMeta.queueLength,target.status=resolvedMeta.status,target.lastUpdatedAt=resolvedMeta.lastUpdatedAt,target.lastErrorCode=resolvedMeta.lastErrorCode??void 0,target.pinnedMessageIds=[...resolvedMeta.pinnedMessageIds],target.titleSuggestedAt=resolvedMeta.titleSuggestedAt??null}let resolvedLastRequestBudget=(()=>{if(sameSession&&localLastRequestBudget&&(!persistedLastRequestBudget||localLastRequestBudget.updatedAtMs>persistedLastRequestBudget.updatedAtMs))return localLastRequestBudget;return persistedLastRequestBudget})();store3.state.lastRequestBudget=cloneLastRequestBudget(resolvedLastRequestBudget),hydrateInlinePlanMarkdownPreviews(store3);for(let m2 of store3.state.messages){if(!m2||m2.role!=="assistant"||!Array.isArray(m2.parts))continue;for(let p2 of m2.parts)if(p2?.type==="tool_result"&&p2.result&&typeof store3.scheduleToolResultHighlight==="function")store3.scheduleToolResultHighlight(String(m2.id??""),p2.result)}let u2=snapshotUsage(snapshot);store3.hydrateSessionUsageTotals(u2)}function uiMessagesToSnapshotMessages(messages){let seed=Array.isArray(messages)?messages:[];return uiMessagesToRuntimeMessages(seed)}function normalizeLimit2(input){let obj=input&&typeof input==="object"?input:{},context=readOptionalNumber2(obj.context),output=readOptionalNumber2(obj.output);if(context==null&&output==null)return;return{...context!=null?{context}:{},...output!=null?{output}:{}}}function buildUserCacheFromStore(opts){let store3=opts.store,prevSettings=opts.prev.settings??{},debugLogging=store3?.state?.ui?.debugLogging??{},debugMode=readDebugUiMode(debugLogging.mode,{enabled:debugLogging.enabled,auto:debugLogging.auto}),prevDebugMode=readPersistedDebugLogMode(prevSettings.debugLogMode),debugLogMode=debugMode==="auto"?"auto":debugMode==="off"?"off":prevDebugMode,debugLogDirectory=debugMode==="auto"?readOptionalString3(debugLogging.directory):readOptionalString3(prevSettings.debugLogDirectory),authMethod=readOptionalString3(prevSettings.authMethod);return{version:1,updatedAt:Date.now(),settings:{cwd:readOptionalString3(store3?.state?.context?.cwd),focusFiles:store3?.state?.context?.focusFiles??void 0,model:readOptionalString3(store3?.state?.config?.model),authMethod,temperature:readOptionalNumber2(store3?.state?.config?.temperature),interleavedThinking:store3?.state?.config?.interleaved_thinking,reasoningEffort:readOptionalString3(store3?.state?.config?.reasoning_effort),reasoningEffortByModel:(()=>{let raw=store3?.state?.ui?.reasoningEffortByModel;if(!raw)return;let entries=Object.entries(raw).map(([modelId,value])=>{let key=readOptionalString3(modelId),v2=readOptionalString3(value);return key&&v2?[key,v2]:null}).filter((e2)=>Boolean(e2));return entries.length?Object.fromEntries(entries):void 0})(),toolApprovals:(()=>{let m2=store3?.state?.approval?.mode;if(m2==="auto")return"auto";if(m2==="strict")return"strict";return"normal"})(),locale:readOptionalString3(store3?.state?.ui?.locale),themeMode:readOptionalString3(store3?.state?.ui?.theme?.mode),onboardingSeenVersion:readOptionalString3(store3?.state?.ui?.onboarding?.lastSeenVersion),statusCompact:Boolean(store3?.state?.ui?.statusCompact),shortcuts:normalizeShortcutBindings(store3?.state?.ui?.shortcuts),greetingLastSeenDate:readOptionalString3(store3?.state?.ui?.greeting?.lastSeenDate),providerFunnelCounts:(()=>{let raw=store3?.state?.ui?.providerFunnel?.counts;if(!raw||typeof raw!=="object")return;let entries=Object.entries(raw).map(([step,count])=>[String(step),Number(count)]).filter(([step,count])=>step&&Number.isFinite(count)&&count>0);return entries.length?Object.fromEntries(entries):void 0})(),workspaceSelectionByCwd:(()=>{let raw=store3?.state?.ui?.workspaceSelectionByCwd;if(!raw||typeof raw!=="object")return;let entries=Object.entries(raw).map(([cwd,value])=>{let key=readOptionalString3(cwd),providerId=readOptionalString3(value?.providerId),modelId=readOptionalString3(value?.modelId);if(!key||!providerId)return null;return[key,{providerId,...modelId?{modelId}:{}}]}).filter((entry)=>Boolean(entry));return entries.length?Object.fromEntries(entries):void 0})(),debugLogMode,debugLogDirectory},lastSessionId:readOptionalString3(store3?.state?.sessionId)||opts.prev.lastSessionId}}function buildUserConfigFromStore(opts){let providerState=opts.store?.state?.provider??{},providerId=readOptionalString3(providerState.activeId),providerConnections=(()=>{let rawConnections=providerState.connections??{},entries=Object.entries(rawConnections).map(([id2,conn])=>{let apiKey=readOptionalString3(conn?.apiKey),baseUrl=readOptionalString3(conn?.baseUrl),models=Array.isArray(conn?.models)?conn.models.map((m2)=>({id:readOptionalString3(m2?.id),name:readOptionalString3(m2?.name),limit:normalizeLimit2(m2?.limit),userDefined:m2?.userDefined===!0||m2?.outputIsUserDefined===!0?!0:void 0,vision:typeof m2?.vision==="boolean"?m2.vision:void 0,reasoning:m2?.reasoning?.supported?{supported:!0,default:m2.reasoning.default}:void 0})).filter((m2)=>m2.id):void 0,next={...apiKey?{apiKey}:{},...baseUrl?{baseUrl}:{},...models&&models.length?{models}:{}};return[id2,next]}).filter(([,value])=>Object.keys(value).length>0);return Object.fromEntries(entries)})(),activeModelByProvider=providerState.activeModelByProvider??{},customProviders=Array.isArray(providerState.customProviders)?providerState.customProviders.map((p2)=>({id:readOptionalString3(p2?.id),name:readOptionalString3(p2?.name),adapter:readOptionalString3(p2?.adapter),baseUrl:readOptionalString3(p2?.baseUrl),apiKey:readOptionalString3(p2?.apiKey),responsesAutoPromptCacheKey:typeof p2?.responsesAutoPromptCacheKey==="boolean"?p2.responsesAutoPromptCacheKey:void 0,responsesUseSessionId:typeof p2?.responsesUseSessionId==="boolean"?p2.responsesUseSessionId:void 0,models:Array.isArray(p2?.models)?p2.models.map((m2)=>({id:readOptionalString3(m2?.id),name:readOptionalString3(m2?.name),limit:normalizeLimit2(m2?.limit),userDefined:m2?.userDefined===!0||m2?.outputIsUserDefined===!0?!0:void 0,vision:typeof m2?.vision==="boolean"?m2.vision:void 0,reasoning:m2?.reasoning?.supported?{supported:!0,default:m2.reasoning.default}:void 0})).filter((m2)=>m2.id):void 0})).filter((p2)=>p2.id&&p2.name&&p2.adapter):[],legacyCustomProvider=(()=>{if(customProviders.length>0)return;let legacy=providerState.custom??{},legacyModels=Array.isArray(legacy.models)?legacy.models.map((m2)=>({id:readOptionalString3(m2?.id),limit:normalizeLimit2(m2?.limit),userDefined:m2?.userDefined===!0||m2?.outputIsUserDefined===!0?!0:void 0,vision:typeof m2?.vision==="boolean"?m2.vision:void 0,reasoning:m2?.reasoning?.supported?{supported:!0,default:m2.reasoning.default}:void 0})).filter((m2)=>m2.id):void 0,baseUrl=readOptionalString3(legacy.baseUrl)||void 0,apiKey=readOptionalString3(legacy.apiKey)||void 0;if(!baseUrl&&!apiKey&&!legacyModels?.length)return;return{baseUrl,apiKey,models:legacyModels?.length?toPlainJson(legacyModels):void 0}})(),fallbackSettings=(()=>{if(!opts.prev.settings)return;let next={...opts.prev.settings};return delete next.beta,Object.keys(next).length>0?next:void 0})(),hasSettings=Boolean(providerId||Object.keys(activeModelByProvider||{}).length||Object.keys(providerConnections||{}).length||customProviders.length||legacyCustomProvider);return{version:1,updatedAt:Date.now(),settings:hasSettings?{providerId,activeModelByProvider:Object.keys(activeModelByProvider||{}).length?toPlainJson(activeModelByProvider):void 0,providerConnections:Object.keys(providerConnections||{}).length?toPlainJson(providerConnections):void 0,customProviders:customProviders.length?toPlainJson(customProviders):void 0,customProvider:legacyCustomProvider}:fallbackSettings}}function createDebouncedAsyncTask(task,delayMs){let timer=null,running=!1,queued=!1;async function run(){if(running){queued=!0;return}running=!0,queued=!1;try{await task()}finally{if(running=!1,queued)schedule()}}function schedule(){if(queued=!0,timer)clearTimeout(timer);timer=setTimeout(run,Math.max(0,delayMs||0))}return{schedule}}function normalizeBackendSessionListResult(value){if(Array.isArray(value))return{sessions:value};return{sessions:Array.isArray(value.sessions)?value.sessions:[],...value.nextCursor?{nextCursor:value.nextCursor}:{}}}var INTERRUPTED_PERSISTED_MESSAGE_LIMIT2=80,COMPACT_PERSISTED_MESSAGE_LIMIT2=80,COMPRESSION_PERSISTED_MESSAGE_LIMIT2=80,ERROR_PERSISTED_MESSAGE_LIMIT2=80;function normalizeMcpPhase(value){if(value==="deferred"||value==="syncing"||value==="ready"||value==="error")return value;return"deferred"}function assistantMarkdownOnlySignature2(msg){return msg.parts.filter((p2)=>p2.type==="markdown").map((p2)=>String(p2.markdown??"")).join(`
|
|
1165
|
+
`).trim()}function messageTranscriptSignature(msg){if(msg.role==="assistant"){let sig=assistantTranscriptSignature(msg);return sig?`assistant:${sig}`:""}if(msg.role==="user"){let sig=userTranscriptSignature(msg);return sig?`user:${sig}`:""}return""}function assistantThinkingCollapsePreserveKey(msg){let messageId=String(msg?.id??"").trim();if(messageId)return`id:${messageId}`;let sig=assistantDisplaySignature(msg);return sig?`sig:${sig}`:""}function collectLocalThinkingCollapsedState(messages){let byKey=new Map;for(let msg of messages){if(!msg||msg.role!=="assistant")continue;let collapsedByOrdinal=msg.parts.filter((p2)=>p2.type==="thinking").map((p2)=>Boolean(p2.collapsed));if(collapsedByOrdinal.length===0)continue;let key=assistantThinkingCollapsePreserveKey(msg);if(!key)continue;let queue=byKey.get(key)??[];queue.push([...collapsedByOrdinal]),byKey.set(key,queue)}return byKey}function restoreLocalThinkingCollapsedState(store3,localThinkingCollapsedState){if(localThinkingCollapsedState.size===0)return;let changed=!1,next=store3.state.messages.map((msg)=>{if(!msg||msg.role!=="assistant")return msg;let key=assistantThinkingCollapsePreserveKey(msg);if(!key)return msg;let queue=localThinkingCollapsedState.get(key);if(!queue||queue.length===0)return msg;let collapsedByOrdinal=queue.shift()??[];if(queue.length===0)localThinkingCollapsedState.delete(key);if(collapsedByOrdinal.length===0)return msg;let thinkingOrdinal=0,messageChanged=!1,parts=msg.parts.map((part)=>{if(part.type!=="thinking")return part;let collapsed=collapsedByOrdinal[thinkingOrdinal];if(thinkingOrdinal+=1,typeof collapsed!=="boolean"||part.collapsed===collapsed)return part;return messageChanged=!0,{...part,collapsed}});if(!messageChanged)return msg;return changed=!0,{...msg,parts}});if(changed)store3.replaceMessages(next)}function cloneLlmMetaPart(part){if(!part||typeof part!=="object")return part;return{...part}}function collectLocalAssistantLlmMetaBySignature(messages){let bySignature=new Map;for(let msg of messages){if(!msg||msg.role!=="assistant")continue;if(!msg.parts.some((p2)=>p2.type==="llm_meta"))continue;let signature=assistantLlmMetaPreserveSignature(msg);if(!signature)continue;let llmMetaParts=msg.parts.filter((p2)=>p2.type==="llm_meta").map((p2)=>cloneLlmMetaPart(p2));if(llmMetaParts.length===0)continue;let queue=bySignature.get(signature)??[];queue.push(llmMetaParts),bySignature.set(signature,queue)}return bySignature}function mergeLocalAssistantLlmMetaBySignature(uiMessages,localLlmMetaBySignature){if(localLlmMetaBySignature.size===0)return;for(let i2=0;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(!msg||msg.role!=="assistant")continue;if(msg.parts.some((p2)=>p2.type==="llm_meta"))continue;let signature=assistantLlmMetaPreserveSignature(msg);if(!signature)continue;let queue=localLlmMetaBySignature.get(signature);if(!queue||queue.length===0)continue;let llmMetaParts=queue.shift()??[];if(queue.length===0)localLlmMetaBySignature.delete(signature);if(llmMetaParts.length===0)continue;uiMessages[i2]={...msg,parts:[...msg.parts,...llmMetaParts]}}}function collectLocalMessageHeaderMetaBySignature(messages){let bySignature=new Map;for(let msg of messages){if(!msg||msg.role!=="user"&&msg.role!=="assistant")continue;let createdAtMs=Number(msg?.createdAtMs),modelId=String(msg?.modelId??"").trim()||void 0;if(!Number.isFinite(createdAtMs)&&!modelId)continue;let signature=msg.role==="user"?userTranscriptSignature(msg):assistantDisplaySignature(msg);if(!signature)continue;let key=`${msg.role}:${signature}`,queue=bySignature.get(key)??[];queue.push({...Number.isFinite(createdAtMs)?{createdAtMs:Math.floor(createdAtMs)}:{},...modelId?{modelId}:{}}),bySignature.set(key,queue)}return bySignature}function mergeLocalMessageHeaderMetaBySignature(uiMessages,localHeaderMetaBySignature){if(localHeaderMetaBySignature.size===0)return;for(let i2=0;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(!msg||msg.role!=="user"&&msg.role!=="assistant")continue;let hasCreatedAt=Number.isFinite(Number(msg?.createdAtMs)),hasModelId=Boolean(String(msg?.modelId??"").trim());if(hasCreatedAt&&hasModelId)continue;let signature=msg.role==="user"?userTranscriptSignature(msg):assistantDisplaySignature(msg);if(!signature)continue;let key=`${msg.role}:${signature}`,queue=localHeaderMetaBySignature.get(key);if(!queue||queue.length===0)continue;let headerMeta=queue.shift()??{};if(queue.length===0)localHeaderMetaBySignature.delete(key);let nextCreatedAtMs=hasCreatedAt?Number(msg?.createdAtMs):Number(headerMeta.createdAtMs),nextModelId=hasModelId?String(msg?.modelId??"").trim():String(headerMeta.modelId??"").trim(),next={...msg,...Number.isFinite(nextCreatedAtMs)?{createdAtMs:Math.floor(nextCreatedAtMs)}:{},...nextModelId?{modelId:nextModelId}:{}};uiMessages[i2]=next}}function collectAssistantToolCallIds(msg){let out=[],seen=new Set;for(let part of msg.parts){if(part.type!=="tool_call")continue;let id2=String(part?.call?.id??"").trim();if(!id2||seen.has(id2))continue;seen.add(id2),out.push(id2)}return out}function hasAssistantUserFacingContent(msg){return msg.parts.some((part)=>{if(part.type==="markdown")return Boolean(String(part?.markdown??"").trim());return part.type==="todo"||part.type==="plan"||part.type==="approve"||part.type==="info"})}function llmMetaPartsSignature(parts){return parts.map((part)=>{let p2=part;if(!p2||p2.type!=="llm_meta")return"";let durationMs=Math.floor(Number(p2.durationMs??0)),modelId=String(p2.modelId??"").trim(),toolCalls=Math.floor(Number(p2.toolCalls??0)),tokensUsed=Math.floor(Number(p2.tokensUsed??0)),changedFiles=Array.isArray(p2.changedFiles)?p2.changedFiles.map((f2)=>String(f2??"").trim()).filter(Boolean).join("|"):"",changedFileDetails=Array.isArray(p2.changedFileDetails)?p2.changedFileDetails.map((item)=>{let path36=String(item?.path??"").trim(),added=Math.floor(Number(item?.added??-1)),removed=Math.floor(Number(item?.removed??-1));return`${path36}:${added}:${removed}`}).filter(Boolean).join("|"):"";return[durationMs,modelId,toolCalls,tokensUsed,changedFiles,changedFileDetails].join(":")}).filter(Boolean).join("||")}function collectLocalAssistantLlmMetaRecords(messages){let out=[];for(let msg of messages){if(!msg||msg.role!=="assistant")continue;let llmMetaParts=msg.parts.filter((p2)=>p2.type==="llm_meta").map((p2)=>cloneLlmMetaPart(p2));if(llmMetaParts.length===0)continue;out.push({llmMetaParts,toolCallIds:collectAssistantToolCallIds(msg)})}return out}function mergeLocalAssistantLlmMetaByToolCallFlow(uiMessages,localRecords){if(localRecords.length===0)return;let existingLlmMetaSignatures=new Set;for(let msg of uiMessages){if(!msg||msg.role!=="assistant")continue;let llmMetaParts=msg.parts.filter((p2)=>p2.type==="llm_meta");if(llmMetaParts.length===0)continue;existingLlmMetaSignatures.add(llmMetaPartsSignature(llmMetaParts))}let searchStart=0;for(let record3 of localRecords){let sig=llmMetaPartsSignature(record3.llmMetaParts);if(!sig||existingLlmMetaSignatures.has(sig))continue;let anchorIdx=-1;if(record3.toolCallIds.length>0)for(let i2=searchStart;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(!msg||msg.role!=="assistant")continue;if(collectAssistantToolCallIds(msg).some((id2)=>record3.toolCallIds.includes(id2))){anchorIdx=i2;break}}if(anchorIdx<0){for(let i2=searchStart;i2<uiMessages.length;i2++)if(uiMessages[i2]?.role==="assistant"){anchorIdx=i2;break}}if(anchorIdx<0)continue;let endIdx=anchorIdx;for(let i2=anchorIdx+1;i2<uiMessages.length;i2++){let msg=uiMessages[i2];if(msg?.role==="user")break;if(msg?.role==="assistant")endIdx=i2}let targetIdx=endIdx;for(let i2=endIdx;i2>=anchorIdx;i2--){let msg=uiMessages[i2];if(!msg||msg.role!=="assistant")continue;if(hasAssistantUserFacingContent(msg)){targetIdx=i2;break}}let target=uiMessages[targetIdx];if(!target||target.role!=="assistant"){searchStart=endIdx+1;continue}if(target.parts.some((p2)=>p2.type==="llm_meta")){searchStart=endIdx+1;continue}uiMessages[targetIdx]={...target,parts:[...target.parts,...record3.llmMetaParts]},existingLlmMetaSignatures.add(sig),searchStart=endIdx+1}}function buildSignatureCounts(signatures){let counts=new Map;for(let sig of signatures){if(!sig)continue;counts.set(sig,(counts.get(sig)??0)+1)}return counts}function consumeSignatureCount(counts,signature){let remaining=counts.get(signature)??0;if(remaining<=0)return!1;if(remaining===1)counts.delete(signature);else counts.set(signature,remaining-1);return!0}function buildAnchoredInsertionPlan(existingMessages,candidates){let existingCounts=buildSignatureCounts(existingMessages.map(messageTranscriptSignature)),pendingAnchorSig=null,toInsert=[];for(let m2 of candidates){let sig=messageTranscriptSignature(m2);if(!sig){pendingAnchorSig=null;continue}if(consumeSignatureCount(existingCounts,sig)){pendingAnchorSig=sig;continue}toInsert.push({message:m2,anchorSig:pendingAnchorSig}),pendingAnchorSig=sig}return toInsert}function findAnchoredInsertIndex(messages,anchorSig){if(!anchorSig)return-1;let anchorIdx=-1;for(let i2=messages.length-1;i2>=0;i2--)if(messageTranscriptSignature(messages[i2])===anchorSig){anchorIdx=i2;break}if(anchorIdx<0)return-1;let insertAt=anchorIdx+1;while(insertAt<messages.length&&messages[insertAt]?.role!=="user")insertAt++;return insertAt}function findChronologicalInsertIndex(messages,candidate){let ts=candidate.createdAtMs??0;if(ts<=0)return messages.length;let insertAt=0;for(let i2=0;i2<messages.length;i2++)if((messages[i2].createdAtMs??0)<=ts)insertAt=i2+1;return insertAt}function previousUserAnchorSignature(messages,assistantIndex){for(let index=assistantIndex-1;index>=0;index--){let message=messages[index];if(!message)continue;if(message.role==="user")return messageTranscriptSignature(message)||null}return null}function matchesErrorRestoreAnchor(messages,assistantIndex,anchorSig){if(!anchorSig)return!0;return previousUserAnchorSignature(messages,assistantIndex)===anchorSig}function restoreAnchoredMessages(store3,candidates){let toInsert=buildAnchoredInsertionPlan(store3.state.messages,candidates);if(toInsert.length===0)return;let next=store3.state.messages.slice();for(let{message,anchorSig}of toInsert){let insertAt=(()=>{let anchored=findAnchoredInsertIndex(next,anchorSig);if(anchored>=0)return anchored;return findChronologicalInsertIndex(next,message)})();next.splice(insertAt,0,message)}store3.replaceMessages(next)}function restoreErrorAssistantMessages(store3,candidates){if(candidates.length===0)return;let next=store3.state.messages.slice(),usedReplacementIndexes=new Set,changed=!1;for(let{message:candidate,anchorSig}of candidates){let exactSig=assistantErrorExactSignature(candidate);if(next.findIndex((m2,index)=>{if(!m2||m2.role!=="assistant")return!1;return assistantErrorExactSignature(m2)===exactSig&&matchesErrorRestoreAnchor(next,index,anchorSig)})>=0)continue;let mergeSig=assistantErrorMergeSignature(candidate);if(mergeSig){let replaceIndex=next.findIndex((m2,index)=>{if(usedReplacementIndexes.has(index)||!m2||m2.role!=="assistant")return!1;return assistantErrorMergeSignature(m2)===mergeSig&&matchesErrorRestoreAnchor(next,index,anchorSig)});if(replaceIndex>=0){next[replaceIndex]=candidate,usedReplacementIndexes.add(replaceIndex),changed=!0;continue}}let insertAt=(()=>{let anchored=findAnchoredInsertIndex(next,anchorSig);if(anchored>=0)return anchored;return findChronologicalInsertIndex(next,candidate)})();next.splice(insertAt,0,candidate),changed=!0}if(changed)store3.replaceMessages(next)}function applyHydrationRestorePhases(store3,phases){for(let phase of phases){if(phase.kind==="anchored"){restoreAnchoredMessages(store3,phase.candidates);continue}restoreErrorAssistantMessages(store3,phase.candidates)}}function hydrateStoreFromSnapshot(store3,snapshot,opts){let previousSessionId=String(store3.state.sessionId??"").trim(),hadLocalMessagesBeforeHydrate=store3.state.messages.length>0,preserveLocalSyntheticErrors=Boolean(opts?.preserveLocalSyntheticErrors),preserveLocalInterruptedMessages=Boolean(opts?.preserveLocalInterruptedMessages),preserveLocalCompactMessages=Boolean(opts?.preserveLocalCompactMessages),preserveLocalCompressionMessages=Boolean(opts?.preserveLocalCompressionMessages),localErrorAssistants=preserveLocalSyntheticErrors?collectRestorableErrorAssistants(store3.state.messages):[],localInterruptedRoundMessages=preserveLocalInterruptedMessages?collectInterruptedRoundMessages(store3.state.messages):[],id2=snapshotId(snapshot),sameSession=Boolean(id2)&&id2===previousSessionId,localSessionMeta=sameSession&&store3.state.sessionMeta?mergeSessionUiMetadata2(store3.state.sessionMeta,{}):null,preserveLocalSessionHistoryDirty=sameSession&&Boolean(store3.state.sessionHistoryDirty),localAssistantLlmMetaBySignature=sameSession?collectLocalAssistantLlmMetaBySignature(store3.state.messages):new Map,localAssistantLlmMetaRecords=sameSession?collectLocalAssistantLlmMetaRecords(store3.state.messages):[],localMessageHeaderMetaBySignature=sameSession?collectLocalMessageHeaderMetaBySignature(store3.state.messages):new Map,localThinkingCollapsedState=sameSession?collectLocalThinkingCollapsedState(store3.state.messages):new Map,localLastRequestBudget=sameSession?normalizeLastRequestBudget(store3.state.lastRequestBudget):null,persistedLastRequestBudget=persistedLastRequestBudgetFromSnapshot(snapshot),shouldRestorePersistedCompactMessages=!sameSession||!hadLocalMessagesBeforeHydrate,persistedCompactMessages=shouldRestorePersistedCompactMessages?persistedCompactMessagesFromSnapshot(snapshot):[],localCompactMessages=preserveLocalCompactMessages&&sameSession&&!hadLocalMessagesBeforeHydrate?dedupeAssistantMessagesBySignature(collectLocalCompactMessages(store3.state.messages),{include:isCompactTranscriptMessage,limit:COMPACT_PERSISTED_MESSAGE_LIMIT}):[],localCompressionMessages=preserveLocalCompressionMessages&&sameSession?dedupeAssistantMessagesBySignature(collectLocalCompressionMessages(store3.state.messages),{include:isCompressionTranscriptMessage,limit:COMPRESSION_PERSISTED_MESSAGE_LIMIT}):[];if(id2)store3.state.sessionId=id2;let rawUiMessages=snapshotToUiMessages(snapshot),contextTranscript=splitSnapshotContextMessages(rawUiMessages),persistedInterruptedRoundMessages=dedupeAnchoredAssistantRoundMessages([...contextTranscript.interruptedMessages,...persistedInterruptedRoundMessagesFromSnapshot(snapshot)],{include:()=>!0,limit:INTERRUPTED_PERSISTED_MESSAGE_LIMIT}),persistedCompressionMessages=dedupeAssistantMessagesBySignature([...contextTranscript.compressionMessages,...persistedCompressionMessagesFromSnapshot(snapshot)],{include:isCompressionTranscriptMessage,limit:COMPRESSION_PERSISTED_MESSAGE_LIMIT}),persistedErrorMessages=dedupeErrorRestoreCandidates([...contextTranscript.errorMessages,...persistedErrorMessagesFromSnapshot(snapshot)]),uiMessages=contextTranscript.canonicalMessages.slice(),persistedCompactRestoreCandidates=shouldRestorePersistedCompactMessages?dedupeAssistantMessagesBySignature([...contextTranscript.compactMessages,...persistedCompactMessages],{include:isCompactTranscriptMessage,limit:COMPACT_PERSISTED_MESSAGE_LIMIT}):[];if(sameSession)mergeLocalMessageHeaderMetaBySignature(uiMessages,localMessageHeaderMetaBySignature),mergeLocalAssistantLlmMetaBySignature(uiMessages,localAssistantLlmMetaBySignature),mergeLocalAssistantLlmMetaByToolCallFlow(uiMessages,localAssistantLlmMetaRecords);let restorePhases=[{name:"persisted_interrupted",kind:"anchored",candidates:persistedInterruptedRoundMessages},{name:"persisted_compression",kind:"anchored",candidates:persistedCompressionMessages},{name:"persisted_compact",kind:"anchored",candidates:persistedCompactRestoreCandidates},{name:"persisted_error",kind:"error",candidates:persistedErrorMessages},{name:"local_interrupted",kind:"anchored",candidates:dedupeAnchoredAssistantRoundMessages(localInterruptedRoundMessages,{include:()=>!0,limit:INTERRUPTED_PERSISTED_MESSAGE_LIMIT})},{name:"local_compression",kind:"anchored",candidates:localCompressionMessages},{name:"local_compact",kind:"anchored",candidates:localCompactMessages},{name:"local_error",kind:"error",candidates:dedupeErrorRestoreCandidates(localErrorAssistants.map((message)=>({message,anchorSig:null})))}];if(store3.replaceMessages(uiMessages),applyHydrationRestorePhases(store3,restorePhases),sameSession)restoreLocalThinkingCollapsedState(store3,localThinkingCollapsedState);if(preserveLocalSessionHistoryDirty)store3.state.sessionHistoryDirty=!0;store3.clearRevertedMessages(),store3.state.selectedToolCallId=null,store3.state.runningAgentRound=!1,store3.state.runningToolCallId=null,store3.state.thinking.active=!1,store3.state.thinking.assistantId=null,store3.state.thinking.blockIndex=null,store3.state.expandedBashOutputs=new Set,store3.state.expandedToolOutputLineCounts=new Map,store3.state.unifiedEditDiffToolCallIds=new Set,store3.state.layoutDirtyMessageId=null,store3.state.layoutDirtySeq=0,store3.state.paused=null,store3.state.approval.active=null,store3.state.approval.pendingAutoRun=null,store3.state.approval.queue=[],store3.state.approval.decisions={};let meta3=readSessionUiMetadataFromSnapshot(snapshot),resolvedMeta=(()=>{if(!sameSession||!localSessionMeta)return meta3;let incomingUpdatedAt=Number(meta3.lastUpdatedAt??0);return Number(localSessionMeta.lastUpdatedAt??0)>incomingUpdatedAt?localSessionMeta:meta3})();if(store3.state.sessionMeta){let target=store3.state.sessionMeta;target.queue=[...resolvedMeta.queue],target.queueLength=resolvedMeta.queueLength,target.status=resolvedMeta.status,target.lastUpdatedAt=resolvedMeta.lastUpdatedAt,target.lastErrorCode=resolvedMeta.lastErrorCode??void 0,target.pinnedMessageIds=[...resolvedMeta.pinnedMessageIds],target.titleSuggestedAt=resolvedMeta.titleSuggestedAt??null}let resolvedLastRequestBudget=(()=>{if(sameSession&&localLastRequestBudget&&(!persistedLastRequestBudget||localLastRequestBudget.updatedAtMs>persistedLastRequestBudget.updatedAtMs))return localLastRequestBudget;return persistedLastRequestBudget})();store3.state.lastRequestBudget=cloneLastRequestBudget(resolvedLastRequestBudget),hydrateInlinePlanMarkdownPreviews(store3);for(let m2 of store3.state.messages){if(!m2||m2.role!=="assistant"||!Array.isArray(m2.parts))continue;for(let p2 of m2.parts)if(p2?.type==="tool_result"&&p2.result&&typeof store3.scheduleToolResultHighlight==="function")store3.scheduleToolResultHighlight(String(m2.id??""),p2.result)}let u2=snapshotUsage(snapshot);store3.hydrateSessionUsageTotals(u2)}function uiMessagesToSnapshotMessages(messages){let seed=Array.isArray(messages)?messages:[];return uiMessagesToRuntimeMessages(seed)}function normalizeLimit2(input){let obj=input&&typeof input==="object"?input:{},context=readOptionalNumber2(obj.context),output=readOptionalNumber2(obj.output);if(context==null&&output==null)return;return{...context!=null?{context}:{},...output!=null?{output}:{}}}function buildUserCacheFromStore(opts){let store3=opts.store,prevSettings=opts.prev.settings??{},debugLogging=store3?.state?.ui?.debugLogging??{},debugMode=readDebugUiMode(debugLogging.mode,{enabled:debugLogging.enabled,auto:debugLogging.auto}),prevDebugMode=readPersistedDebugLogMode(prevSettings.debugLogMode),debugLogMode=debugMode==="auto"?"auto":debugMode==="off"?"off":prevDebugMode,debugLogDirectory=debugMode==="auto"?readOptionalString3(debugLogging.directory):readOptionalString3(prevSettings.debugLogDirectory),authMethod=readOptionalString3(prevSettings.authMethod);return{version:1,updatedAt:Date.now(),settings:{cwd:readOptionalString3(store3?.state?.context?.cwd),focusFiles:store3?.state?.context?.focusFiles??void 0,model:readOptionalString3(store3?.state?.config?.model),authMethod,temperature:readOptionalNumber2(store3?.state?.config?.temperature),interleavedThinking:store3?.state?.config?.interleaved_thinking,reasoningEffort:readOptionalString3(store3?.state?.config?.reasoning_effort),reasoningEffortByModel:(()=>{let raw=store3?.state?.ui?.reasoningEffortByModel;if(!raw)return;let entries=Object.entries(raw).map(([modelId,value])=>{let key=readOptionalString3(modelId),v2=readOptionalString3(value);return key&&v2?[key,v2]:null}).filter((e2)=>Boolean(e2));return entries.length?Object.fromEntries(entries):void 0})(),toolApprovals:(()=>{let m2=store3?.state?.approval?.mode;if(m2==="auto")return"auto";if(m2==="strict")return"strict";return"normal"})(),locale:readOptionalString3(store3?.state?.ui?.locale),themeMode:readOptionalString3(store3?.state?.ui?.theme?.mode),onboardingSeenVersion:readOptionalString3(store3?.state?.ui?.onboarding?.lastSeenVersion),statusCompact:Boolean(store3?.state?.ui?.statusCompact),shortcuts:normalizeShortcutBindings(store3?.state?.ui?.shortcuts),greetingLastSeenDate:readOptionalString3(store3?.state?.ui?.greeting?.lastSeenDate),providerFunnelCounts:(()=>{let raw=store3?.state?.ui?.providerFunnel?.counts;if(!raw||typeof raw!=="object")return;let entries=Object.entries(raw).map(([step,count])=>[String(step),Number(count)]).filter(([step,count])=>step&&Number.isFinite(count)&&count>0);return entries.length?Object.fromEntries(entries):void 0})(),workspaceSelectionByCwd:(()=>{let raw=store3?.state?.ui?.workspaceSelectionByCwd;if(!raw||typeof raw!=="object")return;let entries=Object.entries(raw).map(([cwd,value])=>{let key=readOptionalString3(cwd),providerId=readOptionalString3(value?.providerId),modelId=readOptionalString3(value?.modelId);if(!key||!providerId)return null;return[key,{providerId,...modelId?{modelId}:{}}]}).filter((entry)=>Boolean(entry));return entries.length?Object.fromEntries(entries):void 0})(),debugLogMode,debugLogDirectory},lastSessionId:readOptionalString3(store3?.state?.sessionId)||opts.prev.lastSessionId}}function buildUserConfigFromStore(opts){let providerState=opts.store?.state?.provider??{},providerId=readOptionalString3(providerState.activeId),providerConnections=(()=>{let rawConnections=providerState.connections??{},entries=Object.entries(rawConnections).map(([id2,conn])=>{let apiKey=readOptionalString3(conn?.apiKey),baseUrl=readOptionalString3(conn?.baseUrl),models=Array.isArray(conn?.models)?conn.models.map((m2)=>({id:readOptionalString3(m2?.id),name:readOptionalString3(m2?.name),limit:normalizeLimit2(m2?.limit),userDefined:m2?.userDefined===!0||m2?.outputIsUserDefined===!0?!0:void 0,vision:typeof m2?.vision==="boolean"?m2.vision:void 0,reasoning:m2?.reasoning?.supported?{supported:!0,default:m2.reasoning.default}:void 0})).filter((m2)=>m2.id):void 0,next={...apiKey?{apiKey}:{},...baseUrl?{baseUrl}:{},...models&&models.length?{models}:{}};return[id2,next]}).filter(([,value])=>Object.keys(value).length>0);return Object.fromEntries(entries)})(),activeModelByProvider=providerState.activeModelByProvider??{},customProviders=Array.isArray(providerState.customProviders)?providerState.customProviders.map((p2)=>({id:readOptionalString3(p2?.id),name:readOptionalString3(p2?.name),adapter:readOptionalString3(p2?.adapter),baseUrl:readOptionalString3(p2?.baseUrl),apiKey:readOptionalString3(p2?.apiKey),responsesAutoPromptCacheKey:typeof p2?.responsesAutoPromptCacheKey==="boolean"?p2.responsesAutoPromptCacheKey:void 0,responsesUseSessionId:typeof p2?.responsesUseSessionId==="boolean"?p2.responsesUseSessionId:void 0,models:Array.isArray(p2?.models)?p2.models.map((m2)=>({id:readOptionalString3(m2?.id),name:readOptionalString3(m2?.name),limit:normalizeLimit2(m2?.limit),userDefined:m2?.userDefined===!0||m2?.outputIsUserDefined===!0?!0:void 0,vision:typeof m2?.vision==="boolean"?m2.vision:void 0,reasoning:m2?.reasoning?.supported?{supported:!0,default:m2.reasoning.default}:void 0})).filter((m2)=>m2.id):void 0})).filter((p2)=>p2.id&&p2.name&&p2.adapter):[],legacyCustomProvider=(()=>{if(customProviders.length>0)return;let legacy=providerState.custom??{},legacyModels=Array.isArray(legacy.models)?legacy.models.map((m2)=>({id:readOptionalString3(m2?.id),limit:normalizeLimit2(m2?.limit),userDefined:m2?.userDefined===!0||m2?.outputIsUserDefined===!0?!0:void 0,vision:typeof m2?.vision==="boolean"?m2.vision:void 0,reasoning:m2?.reasoning?.supported?{supported:!0,default:m2.reasoning.default}:void 0})).filter((m2)=>m2.id):void 0,baseUrl=readOptionalString3(legacy.baseUrl)||void 0,apiKey=readOptionalString3(legacy.apiKey)||void 0;if(!baseUrl&&!apiKey&&!legacyModels?.length)return;return{baseUrl,apiKey,models:legacyModels?.length?toPlainJson(legacyModels):void 0}})(),fallbackSettings=(()=>{if(!opts.prev.settings)return;let next={...opts.prev.settings};return delete next.beta,Object.keys(next).length>0?next:void 0})(),hasSettings=Boolean(providerId||Object.keys(activeModelByProvider||{}).length||Object.keys(providerConnections||{}).length||customProviders.length||legacyCustomProvider);return{version:1,updatedAt:Date.now(),settings:hasSettings?{providerId,activeModelByProvider:Object.keys(activeModelByProvider||{}).length?toPlainJson(activeModelByProvider):void 0,providerConnections:Object.keys(providerConnections||{}).length?toPlainJson(providerConnections):void 0,customProviders:customProviders.length?toPlainJson(customProviders):void 0,customProvider:legacyCustomProvider}:fallbackSettings}}function createDebouncedAsyncTask(task,delayMs){let timer=null,running=!1,queued=!1;async function run(){if(running){queued=!0;return}running=!0,queued=!1;try{await task()}finally{if(running=!1,queued)schedule()}}function schedule(){if(queued=!0,timer)clearTimeout(timer);timer=setTimeout(run,Math.max(0,delayMs||0))}return{schedule}}function normalizeBackendSessionListResult(value){if(Array.isArray(value))return{sessions:value};return{sessions:Array.isArray(value.sessions)?value.sessions:[],...value.nextCursor?{nextCursor:value.nextCursor}:{}}}var INTERRUPTED_PERSISTED_MESSAGE_LIMIT2=80,COMPACT_PERSISTED_MESSAGE_LIMIT2=80,COMPRESSION_PERSISTED_MESSAGE_LIMIT2=80,ERROR_PERSISTED_MESSAGE_LIMIT2=80;function normalizeMcpPhase(value){if(value==="deferred"||value==="syncing"||value==="ready"||value==="error")return value;return"deferred"}function assistantMarkdownOnlySignature2(msg){return msg.parts.filter((p2)=>p2.type==="markdown").map((p2)=>String(p2.markdown??"")).join(`
|
|
1166
1166
|
`).trim()}function assistantPersistenceSignature(msg){let status=msg.parts.find((p2)=>p2.type==="status"),statusText=String(status?.text??"").trim(),markdown=assistantMarkdownOnlySignature2(msg),toolCalls=msg.parts.filter((p2)=>p2.type==="tool_call").map((p2)=>{let id2=String(p2?.call?.id??"").trim();return`${String(p2?.call?.name??"").trim()}:${id2}`}).filter(Boolean).join("|");return[statusText,markdown,toolCalls].filter(Boolean).join(`
|
|
1167
1167
|
`).trim()}function userPersistenceSignature(msg){let content=String(msg.content??"").trim(),focusFiles=Array.isArray(msg?.focusFiles)?msg.focusFiles.map((f2)=>String(f2??"").trim()).filter(Boolean).join(`
|
|
1168
1168
|
`):"";return[content,focusFiles].filter(Boolean).join(`
|
|
1169
1169
|
`).trim()}function messagePersistenceSignature(message){if(message.role==="assistant"){let sig=assistantPersistenceSignature(message);return sig?`assistant:${sig}`:""}if(message.role==="user"){let sig=userPersistenceSignature(message);return sig?`user:${sig}`:""}return""}function snapshotId2(snapshot){let obj=snapshot&&typeof snapshot==="object"?snapshot:null;return String(obj?.sessionId??obj?.id??"").trim()}function collectAnchoredAssistantRoundsForPersistence(messages,opts){let rounds=new Map,lastUser=null;for(let i2=0;i2<messages.length;i2++){let current=messages[i2];if(current?.role==="user"){lastUser=current;continue}if(!current||current.role!=="assistant")continue;if(!opts.include(current))continue;let round=[];if(lastUser)round.push(lastUser);round.push(current);let assistantSig=messagePersistenceSignature(current);if(!assistantSig)continue;let key=`${lastUser?messagePersistenceSignature(lastUser):""}
|
|
1170
1170
|
---
|
|
1171
1171
|
${assistantSig}`;rounds.delete(key),rounds.set(key,round)}return[...rounds.values()].slice(-opts.limit).flat().map(clonePersistableValue)}function collectInterruptedRoundMessagesForPersistence(messages){return collectAnchoredAssistantRoundsForPersistence(messages,{limit:INTERRUPTED_PERSISTED_MESSAGE_LIMIT2,include:isInterruptedAssistantMessage})}function collectCompactMessagesForPersistence(messages){let unique=new Map;for(let m2 of messages){if(!m2||m2.role!=="assistant")continue;let id2=String(m2?.id??"").trim();if(!isCompactTranscriptMessageId(id2))continue;if(id2.startsWith("compact-restored-")||id2.startsWith("restored-compact-"))continue;if(!m2.parts.some((p2)=>{if(p2.type==="markdown")return String(p2?.markdown??"").trim().length>0;if(p2.type==="info")return String(p2?.text??"").trim().length>0;return!1}))continue;let sig=messagePersistenceSignature(m2);if(!sig)continue;unique.delete(sig),unique.set(sig,m2)}let out=[...unique.values()];if(out.length<=COMPACT_PERSISTED_MESSAGE_LIMIT2)return out;return out.slice(-COMPACT_PERSISTED_MESSAGE_LIMIT2)}function collectCompressionMessagesForPersistence(messages){let unique=new Map;for(let m2 of messages){if(!m2||m2.role!=="assistant")continue;let id2=String(m2?.id??"").trim();if(!isCompressionTranscriptMessageId(id2))continue;if(id2.startsWith("compression-restored-")||id2.startsWith("restored-compression-"))continue;if(!m2.parts.some((p2)=>{if(p2.type==="markdown")return String(p2?.markdown??"").trim().length>0;if(p2.type==="info")return String(p2?.text??"").trim().length>0;return!1}))continue;let sig=messagePersistenceSignature(m2);if(!sig)continue;unique.delete(sig),unique.set(sig,m2)}let out=[...unique.values()];if(out.length<=COMPRESSION_PERSISTED_MESSAGE_LIMIT2)return out;return out.slice(-COMPRESSION_PERSISTED_MESSAGE_LIMIT2)}function clonePersistableValue(value){return JSON.parse(JSON.stringify(value))}function assistantMessageHasDurableTranscriptParts(message){if(!message||message.role!=="assistant")return!1;return message.parts.some((part)=>{if(part.type==="markdown")return String(part.markdown??"").trim().length>0;if(part.type==="thinking")return String(part.content??"").trim().length>0;if(part.type==="tool_call")return!0;if(part.type==="tool_result")return!0;return!1})}function hasPendingTranscriptTail(messages){for(let index=messages.length-1;index>=0;index-=1){let message=messages[index];if(!message)continue;if(message.role==="tool")continue;if(message.role==="user")return!0;if(message.role==="assistant")return!assistantMessageHasDurableTranscriptParts(message);return!1}return!1}function collectErrorMessagesForPersistence(messages){return collectAnchoredAssistantRoundsForPersistence(messages,{limit:ERROR_PERSISTED_MESSAGE_LIMIT2,include:isErrorAssistantMessage})}function buildSupplementalUiPayload(messages){let interruptedMessages=collectInterruptedRoundMessagesForPersistence(messages).map(clonePersistableValue),compact=collectCompactMessagesForPersistence(messages),compactMessages=uiMessagesToSnapshotMessages(compact),compression=collectCompressionMessagesForPersistence(messages),compressionMessages=uiMessagesToSnapshotMessages(compression),errorMessages2=collectErrorMessagesForPersistence(messages);return{interruptedMessages,compactMessages,compressionMessages,errorMessages:errorMessages2}}function serializeSupplementalSignature(payload){try{return JSON.stringify(payload)}catch{return""}}function createDimSdkPersistence(opts){let storeRef=null,persistEnabled=!opts.deferPersist,schedulePersist=null,lastSupplementalSig=null,seedSupplementalSignature=(sessionId)=>{let id2=String(sessionId??"").trim();if(!id2||!storeRef){lastSupplementalSig=null;return}let payload=buildSupplementalUiPayload(storeRef.state.messages);lastSupplementalSig={sessionId:id2,sig:serializeSupplementalSignature(payload)}},hydratedMcpServers=Array.isArray(opts.mcpServers)?JSON.parse(JSON.stringify(opts.mcpServers)):[],hydratedMcpPhase=normalizeMcpPhase(opts.mcpPhase),hydratedMcpConnectedCount=Math.max(0,Number(opts.mcpConnectedCount)||0),hydratedMcpConfiguredCount=Math.max(0,Number(opts.mcpConfiguredCount)||hydratedMcpServers.length),backend=opts.sessionsBackend??null,sessions=backend?{async list(options){let page=normalizeBackendSessionListResult(await backend.list(options));return{sessions:page.sessions.map(snapshotToListItem).filter((item)=>Boolean(item)),...page.nextCursor?{nextCursor:page.nextCursor}:{}}},async get(id2){let sessionId=String(id2??"").trim();if(!sessionId)return;return backend.get(sessionId)},async reload(id2){let sessionId=String(id2??"").trim();if(!sessionId||!storeRef)return!1;if(String(storeRef.state.sessionId??"")!==sessionId)return!1;if(storeRef.state.runningAgentRound)return!1;if(storeRef.state.paused)return!1;if(storeRef.state.approval?.active?.status==="pending")return!1;let snapshot=await backend.get(sessionId);if(!snapshot)return!1;hydrateStoreFromSnapshot(storeRef,snapshot,{preserveLocalSyntheticErrors:!0,preserveLocalInterruptedMessages:!0,preserveLocalCompactMessages:!0,preserveLocalCompressionMessages:!0}),seedSupplementalSignature(sessionId);let invalidator=opts.agent;if(invalidator?.invalidateSession)invalidator.invalidateSession(sessionId);return!0},async use(id2){let sessionId=String(id2??"").trim();if(!sessionId||!storeRef)return;if(String(storeRef.state.sessionId??"")===sessionId)return;let snapshot=await backend.get(sessionId);if(!snapshot)return;hydrateStoreFromSnapshot(storeRef,snapshot),seedSupplementalSignature(sessionId);let invalidator=opts.agent;if(invalidator?.invalidateSession)invalidator.invalidateSession(sessionId)},async createNew(){if(!storeRef)return;let snapshot=await backend.create();if(!snapshot)return;let newSessionId=snapshotId2(snapshot);if(hydrateStoreFromSnapshot(storeRef,snapshot),newSessionId)seedSupplementalSignature(newSessionId);if(newSessionId){let invalidator=opts.agent;if(invalidator?.invalidateSession)invalidator.invalidateSession(newSessionId)}},async delete(id2){let sessionId=String(id2??"").trim();if(!sessionId)return;if(await backend.destroy(sessionId),storeRef&&String(storeRef.state.sessionId??"")===sessionId)storeRef.state.sessionId=""},async rename(id2,title){if(!storeRef)return;if(typeof backend.rename!=="function")return;let sessionId=String(id2??"").trim(),nextTitle=String(title??"").trim();if(!sessionId||!nextTitle)return;let snapshot=await backend.rename(sessionId,nextTitle);if(snapshot&&String(storeRef.state.sessionId??"")===sessionId)hydrateStoreFromSnapshot(storeRef,snapshot,{preserveLocalSyntheticErrors:!0,preserveLocalInterruptedMessages:!0,preserveLocalCompactMessages:!0,preserveLocalCompressionMessages:!0}),seedSupplementalSignature(sessionId)},async updateMetadata(id2,metadata){if(typeof backend.updateMetadata!=="function")return;let sessionId=String(id2??"").trim();if(!sessionId)return;await backend.updateMetadata(sessionId,metadata)},async fork(opts2){if(!storeRef)return;let seed=Array.isArray(opts2?.messages)?opts2.messages:[];if(typeof backend.createWithMessages!=="function"){let snapshot2=await backend.create();if(snapshot2)storeRef.state.sessionId=snapshotId2(snapshot2);storeRef.replaceMessages(seed),storeRef.clearRevertedMessages(),storeRef.state.selectedToolCallId=null,storeRef.resetSessionUsageState(),storeRef.state.lastRequestBudget=null;return}let snapshot=await backend.createWithMessages(uiMessagesToSnapshotMessages(stripSupplementalTranscriptMessages(seed)));if(!snapshot)return;hydrateStoreFromSnapshot(storeRef,snapshot),seedSupplementalSignature(snapshotId2(snapshot))}}:void 0,replaceObjectContents=(target,source)=>{for(let key of Object.keys(target))delete target[key];Object.assign(target,source)},ensureStoreMcpState=(store3)=>{let current=store3.state.mcp;if(current&&Array.isArray(current.servers)){if(typeof current.phase!=="string")current.phase="ready";if(typeof current.connectedCount!=="number")current.connectedCount=0;if(typeof current.configuredCount!=="number")current.configuredCount=Array.isArray(current.servers)?current.servers.length:0;return current}return store3.state.mcp={servers:[],phase:"ready",connectedCount:0,configuredCount:0},store3.state.mcp},applyHydratedMcpState=(store3)=>{let mcpState=ensureStoreMcpState(store3),nextServers=JSON.parse(JSON.stringify(hydratedMcpServers));mcpState.servers.splice(0,mcpState.servers.length,...nextServers),mcpState.phase=hydratedMcpPhase,mcpState.connectedCount=hydratedMcpConnectedCount,mcpState.configuredCount=hydratedMcpConfiguredCount},applyHydration=(store3,cache,config2,tools)=>{let changed=!1,saved=config2.settings??{},providerId=normalizeProviderId(saved.providerId),provider=store3?.state.provider;if(!provider)return!1;if(providerId)provider.activeId=providerId;let connections=saved.providerConnections??{},normalizedConnections=Object.fromEntries(Object.entries(connections).map(([id2,conn])=>{let apiKey=readOptionalString3(conn?.apiKey),baseUrl=readOptionalString3(conn?.baseUrl),models=(Array.isArray(conn?.models)?conn.models:[]).map((m2)=>{let model=m2&&typeof m2==="object"?m2:{},id3=readOptionalString3(model.id);if(!id3)return null;let name15=readOptionalString3(model.name),limit=normalizeLimit2(model.limit),vision=typeof model.vision==="boolean"?model.vision:void 0,reasoning=model.reasoning?.supported?{supported:!0,default:model.reasoning.default}:void 0;return{id:id3,...name15?{name:name15}:{},...limit?{limit}:{},...model.userDefined===!0||model.outputIsUserDefined===!0?{userDefined:!0}:{},...typeof vision==="boolean"?{vision}:{},...reasoning?{reasoning}:{}}}).filter((m2)=>Boolean(m2));return[id2,{...apiKey?{apiKey}:{},...baseUrl?{baseUrl}:{},...models.length?{models}:{}}]}));provider.connections=normalizedConnections;let activeByProvider=saved.activeModelByProvider??{};provider.activeModelByProvider={...activeByProvider??{}};let toProviderAdapter=(value)=>{if(value==="openai"||value==="openai-responses"||value==="gemini"||value==="anthropic")return value;return},toCustomProviderId=(value)=>{if(typeof value==="string"&&value.startsWith("cp_"))return value;return},customProviders=Array.isArray(saved.customProviders)?saved.customProviders.map((p2)=>{let entry=p2&&typeof p2==="object"?p2:{},models=(Array.isArray(entry.models)?entry.models:[]).map((m2)=>{let model=m2&&typeof m2==="object"?m2:{},id3=readOptionalString3(model.id);if(!id3)return null;let name16=readOptionalString3(model.name),limit=normalizeLimit2(model.limit),vision=typeof model.vision==="boolean"?model.vision:void 0,reasoning=model.reasoning?.supported?{supported:!0,default:model.reasoning.default}:void 0;return{id:id3,...name16?{name:name16}:{},...limit?{limit}:{},...model.userDefined===!0||model.outputIsUserDefined===!0?{userDefined:!0}:{},...typeof vision==="boolean"?{vision}:{},...reasoning?{reasoning}:{}}}).filter((m2)=>Boolean(m2)),id2=toCustomProviderId(readOptionalString3(entry.id)),name15=readOptionalString3(entry.name),adapter=toProviderAdapter(readOptionalString3(entry.adapter));if(!id2||!name15||!adapter)return null;let baseUrl=readOptionalString3(entry.baseUrl),apiKey=readOptionalString3(entry.apiKey);return{id:id2,name:name15,adapter,...baseUrl?{baseUrl}:{},...apiKey?{apiKey}:{},...typeof entry.responsesAutoPromptCacheKey==="boolean"?{responsesAutoPromptCacheKey:entry.responsesAutoPromptCacheKey}:{},...typeof entry.responsesUseSessionId==="boolean"?{responsesUseSessionId:entry.responsesUseSessionId}:{},models:backfillCustomProviderModels(models,{adapter})}}).filter((p2)=>Boolean(p2)):[];provider.customProviders=customProviders,hydrateToolsStateFromConfig(tools,store3.state,hydratedMcpServers),applyHydratedMcpState(store3);let savedUi=cache.settings??{},uiState=store3.state.ui,env=store3?.state?.context?.env??{};if(!readOptionalString3(env.DIMCODE_TOOL_APPROVALS)&&savedUi.toolApprovals){let raw=String(savedUi.toolApprovals),mapped=raw==="auto"||raw==="all"?"auto":raw==="strict"||raw==="manual"?"strict":"normal";store3.state.approval.mode=mapped}if(uiState){if(typeof savedUi.themeMode==="string"&&savedUi.themeMode)store3.setThemeMode(savedUi.themeMode);if(typeof savedUi.statusCompact==="boolean")uiState.statusCompact=savedUi.statusCompact;if(typeof savedUi.onboardingSeenVersion==="string"&&savedUi.onboardingSeenVersion)uiState.onboarding={...uiState.onboarding??{},lastSeenVersion:savedUi.onboardingSeenVersion};if(savedUi.shortcuts)uiState.shortcuts=normalizeShortcutBindings(savedUi.shortcuts);if(typeof savedUi.greetingLastSeenDate==="string")uiState.greeting={...uiState.greeting??{},lastSeenDate:savedUi.greetingLastSeenDate};if(savedUi.providerFunnelCounts&&typeof savedUi.providerFunnelCounts==="object"){let counts=Object.fromEntries(Object.entries(savedUi.providerFunnelCounts).map(([step,count])=>[String(step),Number(count)]).filter(([step,count])=>step&&Number.isFinite(count)&&count>0));uiState.providerFunnel={...uiState.providerFunnel??{},counts,events:Array.isArray(uiState.providerFunnel?.events)?uiState.providerFunnel.events:[]}}if(savedUi.workspaceSelectionByCwd&&typeof savedUi.workspaceSelectionByCwd==="object"){let byCwd=Object.fromEntries(Object.entries(savedUi.workspaceSelectionByCwd).map(([cwd,value])=>{let key=readOptionalString3(cwd),providerId2=readOptionalString3(value?.providerId),modelId=readOptionalString3(value?.modelId);if(!key||!providerId2)return null;return[key,{providerId:providerId2,...modelId?{modelId}:{}}]}).filter((entry)=>Boolean(entry)));uiState.workspaceSelectionByCwd=byCwd}let savedDebugMode=readPersistedDebugLogMode(savedUi.debugLogMode);uiState.debugLogging={...uiState.debugLogging??{},enabled:savedDebugMode==="auto",auto:savedDebugMode==="auto",mode:savedDebugMode,directory:readOptionalString3(savedUi.debugLogDirectory)||readOptionalString3(uiState.debugLogging?.directory)||"~/.dimcode/debug"};let savedReasoningMap=savedUi.reasoningEffortByModel;if(savedReasoningMap){let entries=Object.entries(savedReasoningMap).map(([modelId,value])=>{let key=readOptionalString3(modelId),v2=readOptionalString3(value);return key&&v2?[key,v2]:null}).filter((e2)=>Boolean(e2));uiState.reasoningEffortByModel=Object.fromEntries(entries)}}let{candidates,existingProviderIds}=buildProviderSelectionCandidates({connections:provider.connections,customProviders,legacyCustom:provider.custom,rememberedModels:{...provider.activeModelByProvider??{}}}),rememberedModels=stripUnknownActiveModelSelections({...provider.activeModelByProvider??{}},existingProviderIds);if(JSON.stringify(provider.activeModelByProvider??{})!==JSON.stringify(rememberedModels))provider.activeModelByProvider=rememberedModels,changed=!0;if(uiState){let sanitizedWorkspaceSelections=sanitizeWorkspaceProviderSelections({workspaceSelections:uiState.workspaceSelectionByCwd,candidates,rememberedModels});if(JSON.stringify(uiState.workspaceSelectionByCwd??{})!==JSON.stringify(sanitizedWorkspaceSelections))uiState.workspaceSelectionByCwd=sanitizedWorkspaceSelections,changed=!0}let selection=resolveProviderSelection({candidates,preferredProviderId:String(provider.activeId??"").trim(),preferredModelId:String(store3.state.config.model??"").trim(),rememberedModels}),nextProviderId=String(selection.providerId??"").trim(),nextModelId=String(selection.modelId??"").trim();if(String(provider.activeId??"").trim()!==nextProviderId)provider.activeId=nextProviderId,changed=!0;if(String(store3.state.config.model??"").trim()!==nextModelId)store3.state.config.model=nextModelId,changed=!0;if(backend){let currentId=String(store3.state.sessionId??"").trim();if(currentId)backend.get(currentId).then((snapshot)=>{if(snapshot&&storeRef)hydrateStoreFromSnapshot(storeRef,snapshot,{preserveLocalSyntheticErrors:!0,preserveLocalInterruptedMessages:!0,preserveLocalCompactMessages:!0,preserveLocalCompressionMessages:!0}),seedSupplementalSignature(currentId)}).catch(()=>{})}return changed};return{sessions,onStoreCreated:(store3)=>{storeRef=store3,applyHydration(store3,opts.cache,opts.config,opts.tools),registerOAuthRuntimeSyncTarget({getStore:()=>storeRef,updatePersistenceSnapshots:(next)=>{if(next.cache)replaceObjectContents(opts.cache,next.cache);if(next.config)replaceObjectContents(opts.config,next.config)},invalidateSession:(sessionId)=>{let invalidator=opts.agent;if(invalidator?.invalidateSession)invalidator.invalidateSession(sessionId)}});let persist=createDebouncedAsyncTask(async()=>{try{let nextCache=buildUserCacheFromStore({prev:opts.cache,store:store3}),nextConfig=buildUserConfigFromStore({prev:opts.config,store:store3}),nextTools=buildUserToolsFromStore({prev:opts.tools,store:store3}),mcpServers=Array.isArray(store3.state?.mcp?.servers)?store3.state.mcp.servers:[],mcpPhase=normalizeMcpPhase(store3.state?.mcp?.phase),saves=[saveDimcodeUserCache(opts.cacheFile,nextCache),saveDimcodeUserConfig(opts.configFile,nextConfig),saveDimcodeUserTools(opts.toolsFile,nextTools)];if(opts.mcpJsonFile&&(mcpPhase==="ready"||mcpPhase==="error"))saves.push(saveMcpJson(opts.mcpJsonFile,mcpServers));await Promise.all(saves)}catch(e2){console.warn("[dimcode] Failed to persist cache:",e2)}},300);schedulePersist=()=>{if(!persistEnabled)return;persist.schedule()};let persistSupplementalTranscript=createDebouncedAsyncTask(async()=>{if(!backend||typeof backend.updateMetadata!=="function")return;let sessionId=String(store3.state.sessionId??"").trim();if(!sessionId)return;if(store3.state.runningAgentRound)return;if(hasPendingTranscriptTail(store3.state.messages))return;let payload=buildSupplementalUiPayload(store3.state.messages),sig=serializeSupplementalSignature(payload);if(lastSupplementalSig&&lastSupplementalSig.sessionId===sessionId&&lastSupplementalSig.sig===sig)return;try{await backend.updateMetadata(sessionId,{ui:payload}),lastSupplementalSig={sessionId,sig}}catch{}},0),scheduleSupplementalPersist=()=>{persistSupplementalTranscript.schedule()};if(watch(()=>store3.state.sessionId,schedulePersist),watch(()=>store3.state.config,schedulePersist,{deep:!0}),watch(()=>store3.state.context,schedulePersist,{deep:!0}),watch(()=>store3.state.approval.mode,schedulePersist),watch(()=>store3.state.ui?.locale,schedulePersist),watch(()=>store3.state.ui?.theme,schedulePersist,{deep:!0}),watch(()=>store3.state.ui?.statusCompact,schedulePersist),watch(()=>store3.state.ui?.onboarding,schedulePersist,{deep:!0}),watch(()=>store3.state.ui?.shortcuts,schedulePersist,{deep:!0}),watch(()=>store3.state.ui?.greeting,schedulePersist,{deep:!0}),watch(()=>store3.state.ui?.debugLogging,schedulePersist,{deep:!0}),watch(()=>store3.state.provider,schedulePersist,{deep:!0}),watch(()=>store3.state.tools,schedulePersist,{deep:!0}),watch(()=>store3.state.mcp?.servers,schedulePersist,{deep:!0}),watch(()=>store3.state.sessionId,scheduleSupplementalPersist),watch(()=>store3.state.messages.length,scheduleSupplementalPersist),watch(()=>store3.state.runningAgentRound,(running,prev)=>{if(prev&&!running)scheduleSupplementalPersist()}),opts.toolsRef)watch(()=>store3.state.tools,(newTools)=>{if(newTools)opts.toolsRef.current={...opts.toolsRef.current,websearch:{...opts.toolsRef.current?.websearch,apiKey:newTools.websearch?.apiKey??"",apiEndpoint:newTools.websearch?.apiEndpoint,numResults:newTools.websearch?.numResults},mcpServers:Array.isArray(store3.state.mcp?.servers)?JSON.parse(JSON.stringify(store3.state.mcp.servers)):opts.toolsRef.current?.mcpServers}},{deep:!0,immediate:!0}),watch(()=>store3.state.mcp?.servers,(servers)=>{opts.toolsRef.current={...opts.toolsRef.current,mcpServers:Array.isArray(servers)?JSON.parse(JSON.stringify(servers)):opts.toolsRef.current?.mcpServers}},{deep:!0,immediate:!0});schedulePersist()},rehydrate:(next)=>{if(next.cache)replaceObjectContents(opts.cache,next.cache);if(next.config)replaceObjectContents(opts.config,next.config);if(next.tools)replaceObjectContents(opts.tools,next.tools);if(Array.isArray(next.mcpServers))hydratedMcpServers=JSON.parse(JSON.stringify(next.mcpServers));if("mcpPhase"in next)hydratedMcpPhase=normalizeMcpPhase(next.mcpPhase);if("mcpConnectedCount"in next)hydratedMcpConnectedCount=Math.max(0,Number(next.mcpConnectedCount)||0);if("mcpConfiguredCount"in next)hydratedMcpConfiguredCount=Math.max(0,Number(next.mcpConfiguredCount)||hydratedMcpServers.length);else if(Array.isArray(next.mcpServers))hydratedMcpConfiguredCount=hydratedMcpServers.length;if(storeRef)applyHydration(storeRef,opts.cache,opts.config,opts.tools);if(!persistEnabled)persistEnabled=!0;schedulePersist?.()}}}async function resolveStartupSessionId(opts){return readOptionalString3(opts.envSessionId)}function createNoopToolRunner(){return async(call)=>{let name15=String(call?.name??"tool");return{id:String(call?.id??"tool"),status:"error",output:["Tool execution is handled by the DimCode agent.",`This UI cannot run tool "${name15}" locally.`].join(`
|
|
1172
|
-
`)}}}async function createDimSdkShellProps(opts){let{context,cacheDir,cacheFile,cache,configFile,config:config2,toolsFile,tools,mcpJsonFile,mcpServers,mcpPhase,mcpConnectedCount,mcpConfiguredCount}=await createDimcodeContext({cwd:opts.cwd,env:opts.env}),fastStartRaw=String(opts.env.DIMCODE_FAST_START??"").trim().toLowerCase(),fastStart=fastStartRaw==="1"||fastStartRaw==="true"||fastStartRaw==="yes"||fastStartRaw==="on",stateDir=resolveStateDir(cacheDir,opts.env);applyStateDirEnv({env:opts.env,contextEnv:context.env,stateDir});let toolsRef={current:{...tools.settings??{},mcpServers:JSON.parse(JSON.stringify(mcpServers))}},toolsConfig={websearch:{apiKey:()=>toolsRef.current?.websearch?.apiKey??"",apiEndpoint:toolsRef.current?.websearch?.apiEndpoint,numResults:toolsRef.current?.websearch?.numResults}},uiForcedSkills=new Set,agent=createCliAgent({context,processEnv:opts.env,stateDir,tools:toolsConfig,mcpServers:()=>toMcpServerConfigs(toolsRef.current?.mcpServers),mcpInitialState:"deferred"}),cliDebugDirectory=readOptionalString3(opts.debugDirectory),startupDebugCache=opts.enablePersistentDebugAuto&&fastStart&&!cliDebugDirectory?await loadDimcodeUserCache(opts.env).then((result)=>result.cache).catch(()=>cache):cache,persistedDebugMode=readPersistedDebugLogMode(startupDebugCache.settings?.debugLogMode),startupDebugSource=cliDebugDirectory?"cli":opts.enablePersistentDebugAuto&&persistedDebugMode==="auto"?"auto":"none",startupDebugDirectory=resolveDebugLogDirectory(cliDebugDirectory||readOptionalString3(startupDebugCache.settings?.debugLogDirectory)||void 0);if(startupDebugSource==="auto")await cleanupOldDebugJsonlLogs(startupDebugDirectory);if(startupDebugSource!=="none")await agent.setDebugLogState?.({enabled:!0,directory:startupDebugDirectory,reason:startupDebugSource==="auto"?"debug auto startup":"debug cli flag"});let sessionsBackend=agent.sessions??null,initialSessionId=await resolveStartupSessionId({sessionsBackend,envSessionId:opts.sessionId});opts.env.DIMCODE_SESSION_ID=initialSessionId??"",context.env.DIMCODE_SESSION_ID=initialSessionId??"";let{sessions,onStoreCreated,rehydrate}=createDimSdkPersistence({cacheFile,cache,configFile,config:config2,toolsFile,tools,mcpJsonFile,mcpServers,mcpPhase,mcpConnectedCount,mcpConfiguredCount,sessionsBackend,agent,toolsRef,deferPersist:fastStart}),storeRef=null,hydrateStarted=!1,mcpSyncQueue=Promise.resolve(),queuedMcpSignature="",activeMcpSyncSignature=null,cloneMcpServers=(servers)=>JSON.parse(JSON.stringify(Array.isArray(servers)?servers:[])),sleep=async(ms)=>{await new Promise((resolve2)=>setTimeout(resolve2,ms))},ensureStoreMcpState=(store3)=>{let current=store3.state.mcp;if(current&&Array.isArray(current.servers))return current;return store3.state.mcp={servers:[],phase:"deferred",connectedCount:0,configuredCount:0},store3.state.mcp},applyMcpRuntimeState=(phase,connectedCount,configuredCount)=>{if(!storeRef)return;let mcpState=ensureStoreMcpState(storeRef);mcpState.phase=phase,mcpState.connectedCount=Math.max(0,connectedCount),mcpState.configuredCount=Math.max(0,configuredCount)},queueMcpSync=(servers,options)=>{let nextServers=cloneMcpServers(servers),signature=JSON.stringify(nextServers);if(!options?.force&&signature===queuedMcpSignature)return;queuedMcpSignature=signature,mcpSyncQueue=mcpSyncQueue.then(async()=>{if(!storeRef)return;activeMcpSyncSignature=signature,applyMcpRuntimeState("syncing",0,nextServers.length);try{let state=await agent.syncMcpServers?.(toMcpServerConfigs(nextServers));if(!state)state=await agent.getMcpState?.();if(!state){applyMcpRuntimeState("ready",0,nextServers.length);return}applyMcpRuntimeState(state.phase,state.connectedServers.length,state.configuredServers);for(let i2=0;i2<240&&state.phase==="syncing";i2+=1)await sleep(250),state=await agent.getMcpState?.()??state,applyMcpRuntimeState(state.phase,state.connectedServers.length,state.configuredServers)}catch{applyMcpRuntimeState("error",0,nextServers.length)}finally{activeMcpSyncSignature=null}},async()=>{if(storeRef)applyMcpRuntimeState("error",0,nextServers.length);activeMcpSyncSignature=null})};function applyStartupDebugToStore(store3){if(startupDebugSource==="none")return;let uiState=store3.state.ui??{};store3.state.ui=uiState,uiState.debugLogging={...uiState.debugLogging??{},enabled:!0,auto:startupDebugSource==="auto",mode:startupDebugSource==="auto"?"auto":"on",directory:startupDebugDirectory}}let hydrateFromDisk=async()=>{if(hydrateStarted)return;hydrateStarted=!0;try{let reloadEnv={...opts.env,DIMCODE_FAST_START:"0"},full=await createDimcodeContext({cwd:opts.cwd,env:reloadEnv});if(rehydrate({cache:full.cache,config:full.config,tools:full.tools,mcpServers:full.mcpServers,mcpPhase:"syncing",mcpConnectedCount:0,mcpConfiguredCount:full.mcpServers.length}),!storeRef)return;if(full.context.cwd)storeRef.setCwd(full.context.cwd);if(full.context.focusFiles)storeRef.setFocusFiles(full.context.focusFiles);let nextEnv=full.context.env??{};for(let[key,value]of Object.entries(nextEnv))storeRef.setEnvVar(key,value);let envReader=createEnvReader(full.context.env??{}),nextRun=resolveInitialRunConfig(envReader),modelFromProvider=String(storeRef.state.config.model??"").trim();if(storeRef.state.config={...storeRef.state.config,...nextRun},modelFromProvider)storeRef.state.config.model=modelFromProvider;applyStartupDebugToStore(storeRef),queueMcpSync(full.mcpServers,{force:!0})}catch{}},onStoreCreatedWithHydrate=(store3)=>{storeRef=store3,onStoreCreated(store3),applyStartupDebugToStore(store3),watch(()=>JSON.stringify(store3.state.mcp?.servers??[]),()=>{queueMcpSync(cloneMcpServers(store3.state.mcp?.servers??[]))}),watch(()=>String(store3.state.mcp?.phase??""),(phase)=>{if(phase!=="syncing"||activeMcpSyncSignature)return;queueMcpSync(cloneMcpServers(store3.state.mcp?.servers??[]),{force:!0})}),queueMicrotask(()=>{if(!fastStart){queueMcpSync(cloneMcpServers(store3.state.mcp?.servers??[]),{force:!0});return}hydrateFromDisk()})};return{toolRunner:createNoopToolRunner(),context,agent,onStoreCreated:onStoreCreatedWithHydrate,sessions,uiForcedSkills}}import{spawn as spawn4}from"node:child_process";import path37 from"node:path";var import_semver2=__toESM(require_semver2(),1);var import_semver=__toESM(require_semver2(),1);function isPrereleaseVersion(version2){let parsed=import_semver.default.valid(version2);return Boolean(parsed&&import_semver.default.prerelease(parsed)?.length)}function resolveUpdateTrack(current){return isPrereleaseVersion(current)?"prerelease":"stable"}function selectUpdateVersion(versions2,track="stable"){return versions2.map((version2)=>import_semver.default.valid(String(version2??"").trim())).filter((version2)=>Boolean(version2)).filter((version2)=>track==="prerelease"?isPrereleaseVersion(version2):!isPrereleaseVersion(version2)).sort(import_semver.default.rcompare)[0]??null}function shouldInstallSelectedVersion(current,selected){let currentVersion=import_semver.default.valid(String(current??"").trim()),selectedVersion=import_semver.default.valid(String(selected??"").trim());if(!currentVersion||!selectedVersion)return String(current??"").trim()!==String(selected??"").trim();if(import_semver.default.eq(currentVersion,selectedVersion))return!1;if(import_semver.default.gt(selectedVersion,currentVersion))return!0;return isPrereleaseVersion(currentVersion)&&!isPrereleaseVersion(selectedVersion)}var UPGRADE_TOAST_FILE="upgrade-toast.json";function notifyUpgradeToast(message){let text=String(message??"").trim();if(!text)return;let handler=globalThis?.__DIMCODE_UPGRADE_TOAST__;if(typeof handler==="function")try{handler(text);return}catch{}writeUpgradeToastFile(text)}async function writeUpgradeToastFile(message){try{let[{mkdir:mkdir12,writeFile:writeFile11},path36]=await Promise.all([import("node:fs/promises"),import("node:path")]),dir=await getDimcodeUserDir(process.env);await mkdir12(dir,{recursive:!0});let filePath=path36.join(dir,UPGRADE_TOAST_FILE),payload=JSON.stringify({message,createdAt:Date.now()});await writeFile11(filePath,payload,"utf8")}catch{}}async function consumeUpgradeToastFile(){try{let[{readFile:readFile12,unlink:unlink2},path36]=await Promise.all([import("node:fs/promises"),import("node:path")]),dir=await getDimcodeUserDir(process.env),filePath=path36.join(dir,UPGRADE_TOAST_FILE),raw=await readFile12(filePath,"utf8");unlink2(filePath).catch(()=>{});let data=JSON.parse(raw);return String(data?.message??"").trim()||null}catch{return null}}import{existsSync as existsSync3,readFileSync as readFileSync2}from"node:fs";import path36 from"node:path";import{fileURLToPath as fileURLToPath4}from"node:url";function resolveCliVersion(){let injected="0.0.67-beta.0".trim();if(injected)return{version:injected,source:"injected"};let pkgVersion=readNearestPackageVersion();if(pkgVersion)return{version:pkgVersion,source:"package"};return null}function readNearestPackageVersion(){try{let dir=path36.dirname(fileURLToPath4(import.meta.url));for(let i2=0;i2<6;i2++){let candidate=path36.join(dir,"package.json");if(existsSync3(candidate)){let raw=readFileSync2(candidate,"utf8"),pkg=JSON.parse(raw),version2=typeof pkg?.version==="string"?pkg.version.trim():"";if(version2)return version2}let parent=path36.dirname(dir);if(parent===dir)break;dir=parent}}catch{}return null}var DEFAULT_GITLAB_HOST="gitlab.bfbops.com",DEFAULT_GITLAB_PROJECT="nextim/goatagent",DEFAULT_GITHUB_REPO="nextim/goatagent",DEFAULT_GITHUB_API_BASE_URL="https://api.github.com",RELEASE_CHECK_TIMEOUT_MS=5000;var RELEASE_LIST_PER_PAGE=100,RELEASE_LIST_MAX_PAGES=3,autoBinaryUpgradeStartedVersions=new Set;function getReleaseTimeoutMs(){let raw=String(process.env.DIMCODE_BINARY_UPDATE_CHECK_TIMEOUT_MS??"").trim(),n2=Number(raw);return Number.isFinite(n2)&&n2>100?Math.floor(n2):RELEASE_CHECK_TIMEOUT_MS}function isSelfContainedBinary(proc=process){try{let execPath=String(proc.execPath??"").trim();if(!execPath)return!1;let base=path37.basename(execPath.replace(/\\/g,"/")).toLowerCase();if(base==="node"||base.startsWith("node."))return!1;if(base==="bun"||base.startsWith("bun."))return!1;return!0}catch{return!1}}function resolveBunTarget(platform=process.platform,arch=process.arch){if(platform==="darwin"&&arch==="arm64")return"bun-darwin-arm64";if(platform==="darwin"&&arch==="x64")return"bun-darwin-x64";if(platform==="linux"&&arch==="x64")return"bun-linux-x64";if(platform==="linux"&&arch==="arm64")return"bun-linux-arm64";if(platform==="win32"&&arch==="x64")return"bun-windows-x64";return null}function resolveAssetName(target,platform=process.platform){return platform==="win32"?`dim-${target}.exe`:`dim-${target}`}function normalizeTagToSemver(tag){let raw=String(tag??"").trim();if(!raw)return null;let withoutV=raw.startsWith("v")?raw.slice(1):raw;return import_semver2.default.valid(withoutV)?withoutV:null}function selectGitHubAsset(releaseJson,assetName){let assets=Array.isArray(releaseJson?.assets)?releaseJson.assets:[];for(let asset of assets){let name15=typeof asset?.name==="string"?asset.name:"",url2=typeof asset?.browser_download_url==="string"?asset.browser_download_url:"";if(name15===assetName&&url2)return{name:name15,url:url2}}return null}function selectGitLabAsset(releaseJson,assetName){let links=Array.isArray(releaseJson?.assets?.links)?releaseJson.assets.links:[];for(let link of links){let name15=typeof link?.name==="string"?link.name:"",direct=typeof link?.direct_asset_url==="string"?link.direct_asset_url:"",url2=typeof link?.url==="string"?link.url:"",resolved=direct||url2;if(name15===assetName&&resolved)return{name:name15,url:resolved}}return null}async function checkBinaryUpgrade(){if(process.env.DIMCODE_DISABLE_AUTOUPDATE==="1")return null;if(!isSelfContainedBinary())return null;let current=resolveCliVersion()?.version;if(!current||!import_semver2.default.valid(current))return null;let release2=await fetchLatestReleaseInfo(process.env,current);if(!release2)return null;if(!import_semver2.default.valid(release2.version)||!shouldInstallSelectedVersion(current,release2.version))return null;if(process.env.DIMCODE_AUTOUPDATE!=="0"){if(autoBinaryUpgradeStartedVersions.has(release2.version))return null;return autoBinaryUpgradeStartedVersions.add(release2.version),startAutoBinaryUpgrade(release2.version),`Update available: dim ${release2.version} (current: ${current}). Installing in background; restart to use it.`}return`Update available: dim ${release2.version} (current: ${current}). Run: dim upgrade`}function resolveProvider(env){if(String(env.DIMCODE_BINARY_UPDATE_PROVIDER??"").trim().toLowerCase()==="github")return"github";if((typeof __CLI_BINARY_UPDATE_PROVIDER__==="string"?__CLI_BINARY_UPDATE_PROVIDER__.trim().toLowerCase():"")==="github")return"github";return"gitlab"}function resolveBinaryUpdateConfig(env){let provider=resolveProvider(env),githubApiBaseUrl=resolveGitHubApiBaseUrl(env),projectInfo=resolveProject(env,provider);return{provider,host:projectInfo.host,project:projectInfo.project,githubApiBaseUrl}}function resolveGitHubApiBaseUrl(env){let raw=String(env.DIMCODE_BINARY_UPDATE_GITHUB_API_BASE_URL??"").trim();if(raw)return raw.replace(/\/+$/,"");let injected=typeof __CLI_BINARY_UPDATE_GITHUB_API_BASE_URL__==="string"?__CLI_BINARY_UPDATE_GITHUB_API_BASE_URL__.trim():"";if(injected)return injected.replace(/\/+$/,"");return DEFAULT_GITHUB_API_BASE_URL}function resolveProject(env,provider){if(provider==="github"){let injectedRepo=typeof __CLI_BINARY_UPDATE_REPO__==="string"?__CLI_BINARY_UPDATE_REPO__.trim():"";return{project:String(env.DIMCODE_BINARY_UPDATE_REPO??injectedRepo??DEFAULT_GITHUB_REPO).trim()||DEFAULT_GITHUB_REPO}}let injectedHost=typeof __CLI_BINARY_UPDATE_GITLAB_HOST__==="string"?__CLI_BINARY_UPDATE_GITLAB_HOST__.trim():"",injectedProject=typeof __CLI_BINARY_UPDATE_PROJECT__==="string"?__CLI_BINARY_UPDATE_PROJECT__.trim():"",host=String(env.DIMCODE_BINARY_UPDATE_GITLAB_HOST??injectedHost??DEFAULT_GITLAB_HOST).trim()||DEFAULT_GITLAB_HOST,project=String(env.DIMCODE_BINARY_UPDATE_PROJECT??injectedProject??DEFAULT_GITLAB_PROJECT).trim()||DEFAULT_GITLAB_PROJECT;return{host,project}}function resolveAuthHeaders(env,provider){if(provider==="github"){let token2=String(env.DIMCODE_GITHUB_TOKEN??env.GITHUB_TOKEN??"").trim();return token2?{Authorization:`Bearer ${token2}`}:{}}let token=String(env.DIMCODE_GITLAB_TOKEN??env.GITLAB_TOKEN??"").trim();if(!token)return{};if(token.startsWith("glpat-"))return{"PRIVATE-TOKEN":token};return{Authorization:`Bearer ${token}`}}async function fetchLatestReleaseInfo(env,currentVersion){return await fetchReleaseInfo("latest",env,currentVersion)}async function fetchReleaseInfo(desired,env,currentVersion){let config2=resolveBinaryUpdateConfig(env),provider=config2.provider,projectInfo={host:config2.host,project:config2.project},headers=resolveAuthHeaders(env,provider),target=resolveBunTarget();if(!target)return null;let assetName=resolveAssetName(target);if(desired==="latest")return await fetchLatestSelectableReleaseInfo({provider,host:projectInfo.host,project:projectInfo.project,headers,githubApiBaseUrl:config2.githubApiBaseUrl,target,assetName,currentVersion});let tagCandidates=buildTagCandidates(desired);for(let tagCandidate of tagCandidates){let releaseJson=await fetchReleaseJson({provider,host:projectInfo.host,project:projectInfo.project,tag:tagCandidate,headers,githubApiBaseUrl:config2.githubApiBaseUrl});if(!releaseJson)continue;let info=releaseInfoFromJson({releaseJson,provider,host:projectInfo.host,project:projectInfo.project,target,assetName,fallbackTag:tagCandidate});if(info)return info}return null}async function fetchLatestSelectableReleaseInfo(opts){let releases=[];for(let page=1;page<=RELEASE_LIST_MAX_PAGES;page+=1){let releaseJsonList=await fetchReleaseListJson({...opts,page});if(!Array.isArray(releaseJsonList)||releaseJsonList.length===0)break;for(let releaseJson of releaseJsonList){let info=releaseInfoFromJson({releaseJson,provider:opts.provider,host:opts.host,project:opts.project,target:opts.target,assetName:opts.assetName});if(info)releases.push(info)}if(releaseJsonList.length<RELEASE_LIST_PER_PAGE)break}let selected=selectUpdateVersion(releases.map((release2)=>release2.version),resolveUpdateTrack(opts.currentVersion??""));if(!selected)return null;return releases.find((release2)=>release2.version===selected)??null}function releaseInfoFromJson(opts){let tag=String(opts.releaseJson?.tag_name??opts.releaseJson?.tagName??"").trim()||String(opts.fallbackTag??"").trim(),version2=normalizeTagToSemver(tag);if(!version2)return null;let asset=opts.provider==="github"?selectGitHubAsset(opts.releaseJson,opts.assetName):selectGitLabAsset(opts.releaseJson,opts.assetName);if(!asset)return null;return{provider:opts.provider,host:opts.host,project:opts.project,tag,version:version2,asset,target:opts.target,assetName:opts.assetName}}function buildTagCandidates(versionOrTag){let raw=String(versionOrTag??"").trim();if(!raw)return[];if(raw==="latest")return["latest"];if(raw.startsWith("v"))return[raw,raw.slice(1)];return[`v${raw}`,raw]}async function fetchReleaseJson(opts){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),getReleaseTimeoutMs());try{let url2=buildReleaseApiUrl(opts),response=await fetch(url2,{headers:{Accept:"application/json",...opts.headers},signal:controller.signal});if(!response.ok)return null;return await response.json()}catch{return null}finally{clearTimeout(timeoutId)}}async function fetchReleaseListJson(opts){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),getReleaseTimeoutMs());try{let url2=buildReleaseListApiUrl(opts),response=await fetch(url2,{headers:{Accept:"application/json",...opts.headers},signal:controller.signal});if(!response.ok)return null;let json2=await response.json();return Array.isArray(json2)?json2:null}catch{return null}finally{clearTimeout(timeoutId)}}function buildReleaseApiUrl(opts){if(opts.provider==="github"){let apiBase=String(opts.githubApiBaseUrl||DEFAULT_GITHUB_API_BASE_URL).replace(/\/+$/,"");if(opts.tag==="latest")return`${apiBase}/repos/${opts.project}/releases/latest`;return`${apiBase}/repos/${opts.project}/releases/tags/${encodeURIComponent(opts.tag)}`}let host=opts.host||DEFAULT_GITLAB_HOST,projectId=encodeURIComponent(opts.project);if(opts.tag==="latest")return`https://${host}/api/v4/projects/${projectId}/releases/permalink/latest`;return`https://${host}/api/v4/projects/${projectId}/releases/${encodeURIComponent(opts.tag)}`}function buildReleaseListApiUrl(opts){let page=Math.max(1,Math.floor(opts.page));if(opts.provider==="github")return`${String(opts.githubApiBaseUrl||DEFAULT_GITHUB_API_BASE_URL).replace(/\/+$/,"")}/repos/${opts.project}/releases?per_page=${RELEASE_LIST_PER_PAGE}&page=${page}`;let host=opts.host||DEFAULT_GITLAB_HOST,projectId=encodeURIComponent(opts.project);return`https://${host}/api/v4/projects/${projectId}/releases?per_page=${RELEASE_LIST_PER_PAGE}&page=${page}`}function startAutoBinaryUpgrade(version2){try{spawn4(process.execPath,["upgrade",version2,"--background"],{stdio:"ignore",detached:!0,env:{...process.env,DIMCODE_BINARY_UPGRADE_CHILD:"1"}}).unref()}catch{}}var import_cross_spawn2=__toESM(require_cross_spawn(),1);import{existsSync as existsSync5,promises as fsPromises}from"node:fs";import path39 from"node:path";import{existsSync as existsSync4,readFileSync as readFileSync3,realpathSync,statSync as statSync2}from"node:fs";import path38 from"node:path";import{fileURLToPath as fileURLToPath5}from"node:url";function resolveCurrentInstallTarget(opts){let execPath=normalizeExistingPath(opts.execPath);if(opts.isSelfContainedBinary)return{kind:"binary",manager:"binary",binPath:execPath??normalizePath2(opts.execPath)};let wrapperName=String(opts.env?.DIMCODE_NPM_PACKAGE??"").trim()||"dimcode",wrapperRoot=normalizeExistingPath(opts.env?.DIMCODE_NPM_PACKAGE_ROOT),importPath=pathFromFileUrl(opts.importMetaUrl),argvPath=normalizeExistingPath(opts.argvPath),binPath=argvPath??normalizePath2(opts.argvPath);if(wrapperRoot){let bun=resolveBunGlobalTarget(wrapperRoot,wrapperName,binPath);if(bun)return bun;let npm=resolveNpmGlobalTarget(wrapperRoot,wrapperName,binPath);if(npm)return npm;return{kind:"unknown",manager:"unknown",packageRoot:wrapperRoot,binPath,reason:`${wrapperName} wrapper root is not a recognized global install`}}let candidates=uniqueStrings([importPath,argvPath,normalizeExistingPath(importPath),execPath]);for(let candidate of candidates){let packageRoot=findPackageRoot(candidate,wrapperName);if(!packageRoot)continue;let sourceEntry=path38.join(packageRoot,"src","cli.ts");if(existsSync4(sourceEntry))return{kind:"source",manager:"source",packageRoot,binPath};let bun=resolveBunGlobalTarget(packageRoot,wrapperName,binPath);if(bun)return bun;let npm=resolveNpmGlobalTarget(packageRoot,wrapperName,binPath);if(npm)return npm;return{kind:"unknown",manager:"unknown",packageRoot,binPath,reason:`${wrapperName} package root is not a recognized global install`}}return{kind:"unknown",manager:"unknown",binPath,reason:`unable to locate ${wrapperName} package root`}}function resolveBunGlobalTarget(packageRoot,wrapperName,binPath){let normalized=toPosix(packageRoot),marker16=`/.bun/install/global/node_modules/${wrapperName}`;if(!normalized.includes(marker16))return null;let index=normalized.lastIndexOf(marker16),prefix=index>=0?packageRoot.slice(0,index+5):void 0;return{kind:"bun",manager:"bun",packageRoot,binPath,prefix}}function resolveNpmGlobalTarget(packageRoot,wrapperName,binPath){let parts=toPosix(packageRoot).split("/");if(parts.at(-1)!==wrapperName)return null;let nodeModulesIndex=parts.length-2;if(parts[nodeModulesIndex]!=="node_modules")return null;let hasLibSegment=parts[nodeModulesIndex-1]==="lib",prefixParts=hasLibSegment?parts.slice(0,nodeModulesIndex-1):parts.slice(0,nodeModulesIndex),prefix=fromPosix(prefixParts.join("/"))||path38.parse(packageRoot).root;if(!prefix)return null;if(!hasLibSegment&&existsSync4(path38.join(prefix,"package.json")))return{kind:"unknown",manager:"unknown",packageRoot,binPath,reason:`${wrapperName} appears to be installed in a local node_modules`};return{kind:"npm",manager:"npm",packageRoot,binPath,prefix}}function findPackageRoot(startPath,wrapperName){let normalized=normalizeExistingPath(startPath);if(!normalized)return null;let dir=isLikelyFilePath(normalized)?path38.dirname(normalized):normalized;for(;;){let packagePath=path38.join(dir,"package.json");if(existsSync4(packagePath)&&readPackageName(packagePath)===wrapperName)return dir;let parent=path38.dirname(dir);if(!parent||parent===dir)return null;dir=parent}}function readPackageName(packagePath){try{let parsed=JSON.parse(readFileSync3(packagePath,"utf8"));return typeof parsed?.name==="string"?parsed.name:""}catch{return""}}function pathFromFileUrl(value){try{return value.startsWith("file:")?fileURLToPath5(value):void 0}catch{return}}function normalizeExistingPath(value){let normalized=normalizePath2(value);if(!normalized)return;try{return realpathSync(normalized)}catch{return normalized}}function normalizePath2(value){let raw=String(value??"").trim();if(!raw)return;if(!path38.isAbsolute(raw))return;return path38.resolve(raw)}function uniqueStrings(values){return[...new Set(values.filter((v2)=>Boolean(v2)))]}function isLikelyFilePath(value){if(existsSync4(value))try{return statSync2(value).isFile()}catch{}return Boolean(path38.extname(value))}function toPosix(value){return value.replace(/\\/g,"/")}function fromPosix(value){if(path38.sep==="/")return value;return value.replace(/\//g,path38.sep)}var DEFAULT_PACKAGE_NAME="dimcode";function resolveWrapperPackageVersion(){return(process.env.DIMCODE_NPM_PACKAGE_VERSION||"").trim()||null}var DEBUG_LOG_PATH=process.env.DIMCODE_DEBUG_LOG||"./dimcode-debug.log",CHECK_TIMEOUT_MS=5000,autoInstallStartedVersions=new Set;async function fetchPackageVersions(packageName=DEFAULT_PACKAGE_NAME){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),CHECK_TIMEOUT_MS);try{let response=await fetch(`https://registry.npmjs.org/${packageName}`,{signal:controller.signal,headers:{Accept:"application/json"}});if(!response.ok)throw Error(`npm registry returned ${response.status}`);let versions2=(await response.json())?.versions;if(!versions2||typeof versions2!=="object")throw Error("No versions found in registry response");return Object.keys(versions2)}catch(error48){if(error48 instanceof Error&&error48.name==="AbortError")throw Error("npm registry request timed out");throw error48}finally{clearTimeout(timeoutId)}}async function resolveLatestNpmVersion(packageName,currentVersion){return selectUpdateVersion(await fetchPackageVersions(packageName),resolveUpdateTrack(currentVersion))}async function checkNpmUpgrade(packageName=DEFAULT_PACKAGE_NAME){if(await logUpgradeCheck("start",{disableAutoUpdate:process.env.DIMCODE_DISABLE_AUTOUPDATE==="1",autoUpdate:process.env.DIMCODE_AUTOUPDATE!=="0",cwd:safeCwd(),argv:safeArgv(),debugLogPath:DEBUG_LOG_PATH}),process.env.DIMCODE_DISABLE_AUTOUPDATE==="1")return await logUpgradeCheck("skip-disabled"),null;let resolvedVersion=resolveCliVersion();if(!resolvedVersion?.version)return await logUpgradeCheck("skip-missing-version"),null;let wrapperVersion=packageName!==DEFAULT_PACKAGE_NAME?resolveWrapperPackageVersion():null,current=wrapperVersion||resolvedVersion.version,hasInjectedVersion=resolvedVersion.source==="injected";try{let latest=await resolveLatestNpmVersion(packageName,current);if(await logUpgradeCheck("check-result",{current,latest,hasInjectedVersion,wrapperVersion,updateTrack:resolveUpdateTrack(current)}),!latest)return await logUpgradeCheck("error",{message:"Failed to fetch latest version"}),null;if(!shouldInstallSelectedVersion(current,latest))return await logUpgradeCheck("no-update",{current,latest}),null;if(process.env.DIMCODE_AUTOUPDATE!=="0"&&hasInjectedVersion){let installer=resolvePackageInstaller(latest,packageName);if(!installer)return await logUpgradeCheck("autoupdate-skip-unknown-install-target",{current,latest,target:resolveNpmInstallTarget()}),`Update available: ${packageName}@${latest} (current: ${current}). Auto-update skipped because the current install source could not be identified. Run: dim version`;let installKey=`${packageName}@${latest}:${installer.manager}:${installer.prefix??""}`;if(autoInstallStartedVersions.has(installKey))return await logUpgradeCheck("autoupdate-skip-duplicate",{version:latest}),null;return autoInstallStartedVersions.add(installKey),await logUpgradeCheck("update-available",{current,latest,autoUpdate:!0,installer:installer.manager,prefix:installer.prefix}),startAutoInstall(latest,packageName,installer),`Update available: ${packageName}@${latest} (current: ${current}). Installing ${installer.manager} global package in background. Restart terminal after it finishes.`}return await logUpgradeCheck("update-available",{current,latest,autoUpdate:!1}),`Update available: ${packageName}@${latest} (current: ${current})`}catch(error48){return await logUpgradeCheck("error",{message:error48 instanceof Error?error48.message:String(error48)}),null}}function startAutoInstall(version2,packageName=DEFAULT_PACKAGE_NAME,installer){try{logUpgradeCheck("autoupdate-start",{version:version2,installer:installer.manager,prefix:installer.prefix});let proc=import_cross_spawn2.default(installer.command,[...installer.argsPrefix,...installer.installArgs],{stdio:"ignore",detached:!0,windowsHide:process.platform==="win32"});proc.unref();let finished=!1,finalize2=(message)=>{if(finished)return;finished=!0,logUpgradeCheck("autoupdate-finish",{version:version2,message}),notifyUpgradeToast(message)};proc.on("close",(code)=>{if(code===0)finalize2(`Update installed: ${packageName}@${version2}. Restart terminal to use the new version.`);else finalize2(`Auto-update failed. Run: ${installer.manualCommand}`)}),proc.on("error",()=>{logUpgradeCheck("autoupdate-error",{version:version2,reason:"process-error"}),finalize2(`Auto-update failed. Run: ${installer.manualCommand}`)})}catch{logUpgradeCheck("autoupdate-error",{version:version2,reason:"spawn-throw"}),notifyUpgradeToast(`Auto-update failed. Run: ${installer.manualCommand}`)}}async function logUpgradeCheck(_event,_data){}function safeCwd(){try{return process.cwd()}catch{return}}function safeArgv(){try{return process.argv}catch{return}}function resolveNpmInstallTarget(){return resolveCurrentInstallTarget({importMetaUrl:import.meta.url,argvPath:process.argv[1],execPath:process.execPath,env:process.env,isSelfContainedBinary:!1})}function resolvePackageInstaller(version2,packageName=DEFAULT_PACKAGE_NAME){let target=resolveNpmInstallTarget(),manager=target.manager==="npm"||target.manager==="bun"?target.manager:null;if(!manager)return null;let{command,argsPrefix}=resolvePackageManagerCommand(manager),packageSpec=`${packageName}@${version2}`,prefix=manager==="npm"?target.prefix:void 0,installArgs=manager==="npm"?["install","-g","--prefer-online",...prefix?["--prefix",prefix]:[],packageSpec]:["install","-g",packageSpec];return{manager,command,argsPrefix,installArgs,manualCommand:manager==="npm"?formatManualCommand(["npm","install","-g","--prefer-online",...prefix?["--prefix",prefix]:[],packageSpec]):`bun install -g ${packageSpec}`,prefix}}function formatManualCommand(args){return args.map(quoteShellArg).join(" ")}function quoteShellArg(value){if(/^[\w./:@%+=,-]+$/.test(value))return value;return JSON.stringify(value)}function resolvePackageManagerCommand(pm){if(process.platform!=="win32")return{command:pm,argsPrefix:[]};if(pm==="bun")return resolveBunCommand();return resolveNpmCommand()}function resolveBunCommand(){let execPath=String(process.execPath??"").trim();if(execPath){if(path39.basename(execPath).toLowerCase().startsWith("bun")&&existsSync5(execPath))return{command:execPath,argsPrefix:[]}}let bunHome=String(process.env.BUN_INSTALL??"").trim();if(bunHome){let bunExe=path39.join(bunHome,"bin","bun.exe");if(existsSync5(bunExe))return{command:bunExe,argsPrefix:[]}}return{command:"bun",argsPrefix:[]}}function resolveNpmCommand(){let execPath=String(process.execPath??"").trim(),execDir=execPath?path39.dirname(execPath):"";if(execDir){let npmCmd=path39.join(execDir,"npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]};let npmCliCandidates=[path39.join(execDir,"node_modules","npm","bin","npm-cli.js"),path39.resolve(execDir,"..","lib","node_modules","npm","bin","npm-cli.js")];if(execPath){for(let npmCli of npmCliCandidates)if(existsSync5(npmCli))return{command:execPath,argsPrefix:[npmCli]}}}let appData=String(process.env.APPDATA??"").trim();if(appData){let npmCmd=path39.join(appData,"npm","npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]}}let programFiles=String(process.env.ProgramFiles??"").trim();if(programFiles){let npmCmd=path39.join(programFiles,"nodejs","npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]}}let programFilesX86=String(process.env["ProgramFiles(x86)"]??"").trim();if(programFilesX86){let npmCmd=path39.join(programFilesX86,"nodejs","npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]}}return{command:"npm",argsPrefix:[]}}function getNpmPackageOverride(){return(process.env.DIMCODE_NPM_PACKAGE||"").trim()||void 0}async function checkUpgrade(){let npmPackage=getNpmPackageOverride();if(npmPackage)return await checkNpmUpgrade(npmPackage);if(isSelfContainedBinary())return await checkBinaryUpgrade();return await checkNpmUpgrade()}import process25 from"node:process";var logger=debugLog2;async function cleanupExpiredSessionCaches3(opts){return cleanupExpiredSessionCaches2({...opts,logger})}var DEFAULT_LINE_THRESHOLD=400,DEFAULT_TOKEN_THRESHOLD=12000,DEFAULT_PREVIEW_LINES=20,DEFAULT_FIRST_RANGE_LINES=300,DEFAULT_PREVIEW_MAX_LINE_CHARS=240,DEFAULT_PREVIEW_MAX_CHARS=4000;function isNodeLike3(){let p2=globalThis.process;return Boolean(p2&&typeof p2?.versions?.node==="string")}function estimateTokens(text){let raw=String(text??""),chars=raw.length,bytes=Buffer.byteLength(raw,"utf-8"),nonAsciiChars=0;for(let i2=0;i2<raw.length;i2++)if(raw.charCodeAt(i2)>127)nonAsciiChars++;let asciiChars=Math.max(0,chars-nonAsciiChars),byChars=Math.ceil(chars/4),byBytes=Math.ceil(bytes/3),byMixed=Math.ceil(asciiChars/4+nonAsciiChars*0.9);return Math.max(byChars,byBytes,byMixed)}function countLines3(text){if(!text)return 0;return text.split(`
|
|
1172
|
+
`)}}}async function createDimSdkShellProps(opts){let{context,cacheDir,cacheFile,cache,configFile,config:config2,toolsFile,tools,mcpJsonFile,mcpServers,mcpPhase,mcpConnectedCount,mcpConfiguredCount}=await createDimcodeContext({cwd:opts.cwd,env:opts.env}),fastStartRaw=String(opts.env.DIMCODE_FAST_START??"").trim().toLowerCase(),fastStart=fastStartRaw==="1"||fastStartRaw==="true"||fastStartRaw==="yes"||fastStartRaw==="on",stateDir=resolveStateDir(cacheDir,opts.env);applyStateDirEnv({env:opts.env,contextEnv:context.env,stateDir});let toolsRef={current:{...tools.settings??{},mcpServers:JSON.parse(JSON.stringify(mcpServers))}},toolsConfig={websearch:{apiKey:()=>toolsRef.current?.websearch?.apiKey??"",apiEndpoint:toolsRef.current?.websearch?.apiEndpoint,numResults:toolsRef.current?.websearch?.numResults}},uiForcedSkills=new Set,agent=createCliAgent({context,processEnv:opts.env,stateDir,tools:toolsConfig,mcpServers:()=>toMcpServerConfigs(toolsRef.current?.mcpServers),mcpInitialState:"deferred"}),cliDebugDirectory=readOptionalString3(opts.debugDirectory),startupDebugCache=opts.enablePersistentDebugAuto&&fastStart&&!cliDebugDirectory?await loadDimcodeUserCache(opts.env).then((result)=>result.cache).catch(()=>cache):cache,persistedDebugMode=readPersistedDebugLogMode(startupDebugCache.settings?.debugLogMode),startupDebugSource=cliDebugDirectory?"cli":opts.enablePersistentDebugAuto&&persistedDebugMode==="auto"?"auto":"none",startupDebugDirectory=resolveDebugLogDirectory(cliDebugDirectory||readOptionalString3(startupDebugCache.settings?.debugLogDirectory)||void 0);if(startupDebugSource==="auto")await cleanupOldDebugJsonlLogs(startupDebugDirectory);if(startupDebugSource!=="none")await agent.setDebugLogState?.({enabled:!0,directory:startupDebugDirectory,reason:startupDebugSource==="auto"?"debug auto startup":"debug cli flag"});let sessionsBackend=agent.sessions??null,initialSessionId=await resolveStartupSessionId({sessionsBackend,envSessionId:opts.sessionId});opts.env.DIMCODE_SESSION_ID=initialSessionId??"",context.env.DIMCODE_SESSION_ID=initialSessionId??"";let{sessions,onStoreCreated,rehydrate}=createDimSdkPersistence({cacheFile,cache,configFile,config:config2,toolsFile,tools,mcpJsonFile,mcpServers,mcpPhase,mcpConnectedCount,mcpConfiguredCount,sessionsBackend,agent,toolsRef,deferPersist:fastStart}),storeRef=null,hydrateStarted=!1,mcpSyncQueue=Promise.resolve(),queuedMcpSignature="",activeMcpSyncSignature=null,cloneMcpServers=(servers)=>JSON.parse(JSON.stringify(Array.isArray(servers)?servers:[])),sleep=async(ms)=>{await new Promise((resolve2)=>setTimeout(resolve2,ms))},ensureStoreMcpState=(store3)=>{let current=store3.state.mcp;if(current&&Array.isArray(current.servers))return current;return store3.state.mcp={servers:[],phase:"deferred",connectedCount:0,configuredCount:0},store3.state.mcp},applyMcpRuntimeState=(phase,connectedCount,configuredCount)=>{if(!storeRef)return;let mcpState=ensureStoreMcpState(storeRef);mcpState.phase=phase,mcpState.connectedCount=Math.max(0,connectedCount),mcpState.configuredCount=Math.max(0,configuredCount)},queueMcpSync=(servers,options)=>{let nextServers=cloneMcpServers(servers),signature=JSON.stringify(nextServers);if(!options?.force&&signature===queuedMcpSignature)return;queuedMcpSignature=signature,mcpSyncQueue=mcpSyncQueue.then(async()=>{if(!storeRef)return;activeMcpSyncSignature=signature,applyMcpRuntimeState("syncing",0,nextServers.length);try{let state=await agent.syncMcpServers?.(toMcpServerConfigs(nextServers));if(!state)state=await agent.getMcpState?.();if(!state){applyMcpRuntimeState("ready",0,nextServers.length);return}applyMcpRuntimeState(state.phase,state.connectedServers.length,state.configuredServers);for(let i2=0;i2<240&&state.phase==="syncing";i2+=1)await sleep(250),state=await agent.getMcpState?.()??state,applyMcpRuntimeState(state.phase,state.connectedServers.length,state.configuredServers)}catch{applyMcpRuntimeState("error",0,nextServers.length)}finally{activeMcpSyncSignature=null}},async()=>{if(storeRef)applyMcpRuntimeState("error",0,nextServers.length);activeMcpSyncSignature=null})};function applyStartupDebugToStore(store3){if(startupDebugSource==="none")return;let uiState=store3.state.ui??{};store3.state.ui=uiState,uiState.debugLogging={...uiState.debugLogging??{},enabled:!0,auto:startupDebugSource==="auto",mode:startupDebugSource==="auto"?"auto":"on",directory:startupDebugDirectory}}let hydrateFromDisk=async()=>{if(hydrateStarted)return;hydrateStarted=!0;try{let reloadEnv={...opts.env,DIMCODE_FAST_START:"0"},full=await createDimcodeContext({cwd:opts.cwd,env:reloadEnv});if(rehydrate({cache:full.cache,config:full.config,tools:full.tools,mcpServers:full.mcpServers,mcpPhase:"syncing",mcpConnectedCount:0,mcpConfiguredCount:full.mcpServers.length}),!storeRef)return;if(full.context.cwd)storeRef.setCwd(full.context.cwd);if(full.context.focusFiles)storeRef.setFocusFiles(full.context.focusFiles);let nextEnv=full.context.env??{};for(let[key,value]of Object.entries(nextEnv))storeRef.setEnvVar(key,value);let envReader=createEnvReader(full.context.env??{}),nextRun=resolveInitialRunConfig(envReader),modelFromProvider=String(storeRef.state.config.model??"").trim();if(storeRef.state.config={...storeRef.state.config,...nextRun},modelFromProvider)storeRef.state.config.model=modelFromProvider;applyStartupDebugToStore(storeRef),queueMcpSync(full.mcpServers,{force:!0})}catch{}},onStoreCreatedWithHydrate=(store3)=>{storeRef=store3,onStoreCreated(store3),applyStartupDebugToStore(store3),watch(()=>JSON.stringify(store3.state.mcp?.servers??[]),()=>{queueMcpSync(cloneMcpServers(store3.state.mcp?.servers??[]))}),watch(()=>String(store3.state.mcp?.phase??""),(phase)=>{if(phase!=="syncing"||activeMcpSyncSignature)return;queueMcpSync(cloneMcpServers(store3.state.mcp?.servers??[]),{force:!0})}),queueMicrotask(()=>{if(!fastStart){queueMcpSync(cloneMcpServers(store3.state.mcp?.servers??[]),{force:!0});return}hydrateFromDisk()})};return{toolRunner:createNoopToolRunner(),context,agent,onStoreCreated:onStoreCreatedWithHydrate,sessions,uiForcedSkills}}import{spawn as spawn4}from"node:child_process";import path37 from"node:path";var import_semver2=__toESM(require_semver2(),1);var import_semver=__toESM(require_semver2(),1);function isPrereleaseVersion(version2){let parsed=import_semver.default.valid(version2);return Boolean(parsed&&import_semver.default.prerelease(parsed)?.length)}function resolveUpdateTrack(current){return isPrereleaseVersion(current)?"prerelease":"stable"}function selectUpdateVersion(versions2,track="stable"){return versions2.map((version2)=>import_semver.default.valid(String(version2??"").trim())).filter((version2)=>Boolean(version2)).filter((version2)=>track==="prerelease"?isPrereleaseVersion(version2):!isPrereleaseVersion(version2)).sort(import_semver.default.rcompare)[0]??null}function shouldInstallSelectedVersion(current,selected){let currentVersion=import_semver.default.valid(String(current??"").trim()),selectedVersion=import_semver.default.valid(String(selected??"").trim());if(!currentVersion||!selectedVersion)return String(current??"").trim()!==String(selected??"").trim();if(import_semver.default.eq(currentVersion,selectedVersion))return!1;if(import_semver.default.gt(selectedVersion,currentVersion))return!0;return isPrereleaseVersion(currentVersion)&&!isPrereleaseVersion(selectedVersion)}var UPGRADE_TOAST_FILE="upgrade-toast.json";function notifyUpgradeToast(message){let text=String(message??"").trim();if(!text)return;let handler=globalThis?.__DIMCODE_UPGRADE_TOAST__;if(typeof handler==="function")try{handler(text);return}catch{}writeUpgradeToastFile(text)}async function writeUpgradeToastFile(message){try{let[{mkdir:mkdir12,writeFile:writeFile11},path36]=await Promise.all([import("node:fs/promises"),import("node:path")]),dir=await getDimcodeUserDir(process.env);await mkdir12(dir,{recursive:!0});let filePath=path36.join(dir,UPGRADE_TOAST_FILE),payload=JSON.stringify({message,createdAt:Date.now()});await writeFile11(filePath,payload,"utf8")}catch{}}async function consumeUpgradeToastFile(){try{let[{readFile:readFile12,unlink:unlink2},path36]=await Promise.all([import("node:fs/promises"),import("node:path")]),dir=await getDimcodeUserDir(process.env),filePath=path36.join(dir,UPGRADE_TOAST_FILE),raw=await readFile12(filePath,"utf8");unlink2(filePath).catch(()=>{});let data=JSON.parse(raw);return String(data?.message??"").trim()||null}catch{return null}}import{existsSync as existsSync3,readFileSync as readFileSync2}from"node:fs";import path36 from"node:path";import{fileURLToPath as fileURLToPath4}from"node:url";function resolveCliVersion(){let injected="0.0.67-beta.2".trim();if(injected)return{version:injected,source:"injected"};let pkgVersion=readNearestPackageVersion();if(pkgVersion)return{version:pkgVersion,source:"package"};return null}function readNearestPackageVersion(){try{let dir=path36.dirname(fileURLToPath4(import.meta.url));for(let i2=0;i2<6;i2++){let candidate=path36.join(dir,"package.json");if(existsSync3(candidate)){let raw=readFileSync2(candidate,"utf8"),pkg=JSON.parse(raw),version2=typeof pkg?.version==="string"?pkg.version.trim():"";if(version2)return version2}let parent=path36.dirname(dir);if(parent===dir)break;dir=parent}}catch{}return null}var DEFAULT_GITLAB_HOST="gitlab.bfbops.com",DEFAULT_GITLAB_PROJECT="nextim/goatagent",DEFAULT_GITHUB_REPO="nextim/goatagent",DEFAULT_GITHUB_API_BASE_URL="https://api.github.com",RELEASE_CHECK_TIMEOUT_MS=5000;var RELEASE_LIST_PER_PAGE=100,RELEASE_LIST_MAX_PAGES=3,autoBinaryUpgradeStartedVersions=new Set;function getReleaseTimeoutMs(){let raw=String(process.env.DIMCODE_BINARY_UPDATE_CHECK_TIMEOUT_MS??"").trim(),n2=Number(raw);return Number.isFinite(n2)&&n2>100?Math.floor(n2):RELEASE_CHECK_TIMEOUT_MS}function isSelfContainedBinary(proc=process){try{let execPath=String(proc.execPath??"").trim();if(!execPath)return!1;let base=path37.basename(execPath.replace(/\\/g,"/")).toLowerCase();if(base==="node"||base.startsWith("node."))return!1;if(base==="bun"||base.startsWith("bun."))return!1;return!0}catch{return!1}}function resolveBunTarget(platform=process.platform,arch=process.arch){if(platform==="darwin"&&arch==="arm64")return"bun-darwin-arm64";if(platform==="darwin"&&arch==="x64")return"bun-darwin-x64";if(platform==="linux"&&arch==="x64")return"bun-linux-x64";if(platform==="linux"&&arch==="arm64")return"bun-linux-arm64";if(platform==="win32"&&arch==="x64")return"bun-windows-x64";return null}function resolveAssetName(target,platform=process.platform){return platform==="win32"?`dim-${target}.exe`:`dim-${target}`}function normalizeTagToSemver(tag){let raw=String(tag??"").trim();if(!raw)return null;let withoutV=raw.startsWith("v")?raw.slice(1):raw;return import_semver2.default.valid(withoutV)?withoutV:null}function selectGitHubAsset(releaseJson,assetName){let assets=Array.isArray(releaseJson?.assets)?releaseJson.assets:[];for(let asset of assets){let name15=typeof asset?.name==="string"?asset.name:"",url2=typeof asset?.browser_download_url==="string"?asset.browser_download_url:"";if(name15===assetName&&url2)return{name:name15,url:url2}}return null}function selectGitLabAsset(releaseJson,assetName){let links=Array.isArray(releaseJson?.assets?.links)?releaseJson.assets.links:[];for(let link of links){let name15=typeof link?.name==="string"?link.name:"",direct=typeof link?.direct_asset_url==="string"?link.direct_asset_url:"",url2=typeof link?.url==="string"?link.url:"",resolved=direct||url2;if(name15===assetName&&resolved)return{name:name15,url:resolved}}return null}async function checkBinaryUpgrade(){if(process.env.DIMCODE_DISABLE_AUTOUPDATE==="1")return null;if(!isSelfContainedBinary())return null;let current=resolveCliVersion()?.version;if(!current||!import_semver2.default.valid(current))return null;let release2=await fetchLatestReleaseInfo(process.env,current);if(!release2)return null;if(!import_semver2.default.valid(release2.version)||!shouldInstallSelectedVersion(current,release2.version))return null;if(process.env.DIMCODE_AUTOUPDATE!=="0"){if(autoBinaryUpgradeStartedVersions.has(release2.version))return null;return autoBinaryUpgradeStartedVersions.add(release2.version),startAutoBinaryUpgrade(release2.version),`Update available: dim ${release2.version} (current: ${current}). Installing in background; restart to use it.`}return`Update available: dim ${release2.version} (current: ${current}). Run: dim upgrade`}function resolveProvider(env){if(String(env.DIMCODE_BINARY_UPDATE_PROVIDER??"").trim().toLowerCase()==="github")return"github";if((typeof __CLI_BINARY_UPDATE_PROVIDER__==="string"?__CLI_BINARY_UPDATE_PROVIDER__.trim().toLowerCase():"")==="github")return"github";return"gitlab"}function resolveBinaryUpdateConfig(env){let provider=resolveProvider(env),githubApiBaseUrl=resolveGitHubApiBaseUrl(env),projectInfo=resolveProject(env,provider);return{provider,host:projectInfo.host,project:projectInfo.project,githubApiBaseUrl}}function resolveGitHubApiBaseUrl(env){let raw=String(env.DIMCODE_BINARY_UPDATE_GITHUB_API_BASE_URL??"").trim();if(raw)return raw.replace(/\/+$/,"");let injected=typeof __CLI_BINARY_UPDATE_GITHUB_API_BASE_URL__==="string"?__CLI_BINARY_UPDATE_GITHUB_API_BASE_URL__.trim():"";if(injected)return injected.replace(/\/+$/,"");return DEFAULT_GITHUB_API_BASE_URL}function resolveProject(env,provider){if(provider==="github"){let injectedRepo=typeof __CLI_BINARY_UPDATE_REPO__==="string"?__CLI_BINARY_UPDATE_REPO__.trim():"";return{project:String(env.DIMCODE_BINARY_UPDATE_REPO??injectedRepo??DEFAULT_GITHUB_REPO).trim()||DEFAULT_GITHUB_REPO}}let injectedHost=typeof __CLI_BINARY_UPDATE_GITLAB_HOST__==="string"?__CLI_BINARY_UPDATE_GITLAB_HOST__.trim():"",injectedProject=typeof __CLI_BINARY_UPDATE_PROJECT__==="string"?__CLI_BINARY_UPDATE_PROJECT__.trim():"",host=String(env.DIMCODE_BINARY_UPDATE_GITLAB_HOST??injectedHost??DEFAULT_GITLAB_HOST).trim()||DEFAULT_GITLAB_HOST,project=String(env.DIMCODE_BINARY_UPDATE_PROJECT??injectedProject??DEFAULT_GITLAB_PROJECT).trim()||DEFAULT_GITLAB_PROJECT;return{host,project}}function resolveAuthHeaders(env,provider){if(provider==="github"){let token2=String(env.DIMCODE_GITHUB_TOKEN??env.GITHUB_TOKEN??"").trim();return token2?{Authorization:`Bearer ${token2}`}:{}}let token=String(env.DIMCODE_GITLAB_TOKEN??env.GITLAB_TOKEN??"").trim();if(!token)return{};if(token.startsWith("glpat-"))return{"PRIVATE-TOKEN":token};return{Authorization:`Bearer ${token}`}}async function fetchLatestReleaseInfo(env,currentVersion){return await fetchReleaseInfo("latest",env,currentVersion)}async function fetchReleaseInfo(desired,env,currentVersion){let config2=resolveBinaryUpdateConfig(env),provider=config2.provider,projectInfo={host:config2.host,project:config2.project},headers=resolveAuthHeaders(env,provider),target=resolveBunTarget();if(!target)return null;let assetName=resolveAssetName(target);if(desired==="latest")return await fetchLatestSelectableReleaseInfo({provider,host:projectInfo.host,project:projectInfo.project,headers,githubApiBaseUrl:config2.githubApiBaseUrl,target,assetName,currentVersion});let tagCandidates=buildTagCandidates(desired);for(let tagCandidate of tagCandidates){let releaseJson=await fetchReleaseJson({provider,host:projectInfo.host,project:projectInfo.project,tag:tagCandidate,headers,githubApiBaseUrl:config2.githubApiBaseUrl});if(!releaseJson)continue;let info=releaseInfoFromJson({releaseJson,provider,host:projectInfo.host,project:projectInfo.project,target,assetName,fallbackTag:tagCandidate});if(info)return info}return null}async function fetchLatestSelectableReleaseInfo(opts){let releases=[];for(let page=1;page<=RELEASE_LIST_MAX_PAGES;page+=1){let releaseJsonList=await fetchReleaseListJson({...opts,page});if(!Array.isArray(releaseJsonList)||releaseJsonList.length===0)break;for(let releaseJson of releaseJsonList){let info=releaseInfoFromJson({releaseJson,provider:opts.provider,host:opts.host,project:opts.project,target:opts.target,assetName:opts.assetName});if(info)releases.push(info)}if(releaseJsonList.length<RELEASE_LIST_PER_PAGE)break}let selected=selectUpdateVersion(releases.map((release2)=>release2.version),resolveUpdateTrack(opts.currentVersion??""));if(!selected)return null;return releases.find((release2)=>release2.version===selected)??null}function releaseInfoFromJson(opts){let tag=String(opts.releaseJson?.tag_name??opts.releaseJson?.tagName??"").trim()||String(opts.fallbackTag??"").trim(),version2=normalizeTagToSemver(tag);if(!version2)return null;let asset=opts.provider==="github"?selectGitHubAsset(opts.releaseJson,opts.assetName):selectGitLabAsset(opts.releaseJson,opts.assetName);if(!asset)return null;return{provider:opts.provider,host:opts.host,project:opts.project,tag,version:version2,asset,target:opts.target,assetName:opts.assetName}}function buildTagCandidates(versionOrTag){let raw=String(versionOrTag??"").trim();if(!raw)return[];if(raw==="latest")return["latest"];if(raw.startsWith("v"))return[raw,raw.slice(1)];return[`v${raw}`,raw]}async function fetchReleaseJson(opts){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),getReleaseTimeoutMs());try{let url2=buildReleaseApiUrl(opts),response=await fetch(url2,{headers:{Accept:"application/json",...opts.headers},signal:controller.signal});if(!response.ok)return null;return await response.json()}catch{return null}finally{clearTimeout(timeoutId)}}async function fetchReleaseListJson(opts){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),getReleaseTimeoutMs());try{let url2=buildReleaseListApiUrl(opts),response=await fetch(url2,{headers:{Accept:"application/json",...opts.headers},signal:controller.signal});if(!response.ok)return null;let json2=await response.json();return Array.isArray(json2)?json2:null}catch{return null}finally{clearTimeout(timeoutId)}}function buildReleaseApiUrl(opts){if(opts.provider==="github"){let apiBase=String(opts.githubApiBaseUrl||DEFAULT_GITHUB_API_BASE_URL).replace(/\/+$/,"");if(opts.tag==="latest")return`${apiBase}/repos/${opts.project}/releases/latest`;return`${apiBase}/repos/${opts.project}/releases/tags/${encodeURIComponent(opts.tag)}`}let host=opts.host||DEFAULT_GITLAB_HOST,projectId=encodeURIComponent(opts.project);if(opts.tag==="latest")return`https://${host}/api/v4/projects/${projectId}/releases/permalink/latest`;return`https://${host}/api/v4/projects/${projectId}/releases/${encodeURIComponent(opts.tag)}`}function buildReleaseListApiUrl(opts){let page=Math.max(1,Math.floor(opts.page));if(opts.provider==="github")return`${String(opts.githubApiBaseUrl||DEFAULT_GITHUB_API_BASE_URL).replace(/\/+$/,"")}/repos/${opts.project}/releases?per_page=${RELEASE_LIST_PER_PAGE}&page=${page}`;let host=opts.host||DEFAULT_GITLAB_HOST,projectId=encodeURIComponent(opts.project);return`https://${host}/api/v4/projects/${projectId}/releases?per_page=${RELEASE_LIST_PER_PAGE}&page=${page}`}function startAutoBinaryUpgrade(version2){try{spawn4(process.execPath,["upgrade",version2,"--background"],{stdio:"ignore",detached:!0,env:{...process.env,DIMCODE_BINARY_UPGRADE_CHILD:"1"}}).unref()}catch{}}var import_cross_spawn2=__toESM(require_cross_spawn(),1);import{existsSync as existsSync5,promises as fsPromises}from"node:fs";import path39 from"node:path";import{existsSync as existsSync4,readFileSync as readFileSync3,realpathSync,statSync as statSync2}from"node:fs";import path38 from"node:path";import{fileURLToPath as fileURLToPath5}from"node:url";function resolveCurrentInstallTarget(opts){let execPath=normalizeExistingPath(opts.execPath);if(opts.isSelfContainedBinary)return{kind:"binary",manager:"binary",binPath:execPath??normalizePath2(opts.execPath)};let wrapperName=String(opts.env?.DIMCODE_NPM_PACKAGE??"").trim()||"dimcode",wrapperRoot=normalizeExistingPath(opts.env?.DIMCODE_NPM_PACKAGE_ROOT),importPath=pathFromFileUrl(opts.importMetaUrl),argvPath=normalizeExistingPath(opts.argvPath),binPath=argvPath??normalizePath2(opts.argvPath);if(wrapperRoot){let bun=resolveBunGlobalTarget(wrapperRoot,wrapperName,binPath);if(bun)return bun;let npm=resolveNpmGlobalTarget(wrapperRoot,wrapperName,binPath);if(npm)return npm;return{kind:"unknown",manager:"unknown",packageRoot:wrapperRoot,binPath,reason:`${wrapperName} wrapper root is not a recognized global install`}}let candidates=uniqueStrings([importPath,argvPath,normalizeExistingPath(importPath),execPath]);for(let candidate of candidates){let packageRoot=findPackageRoot(candidate,wrapperName);if(!packageRoot)continue;let sourceEntry=path38.join(packageRoot,"src","cli.ts");if(existsSync4(sourceEntry))return{kind:"source",manager:"source",packageRoot,binPath};let bun=resolveBunGlobalTarget(packageRoot,wrapperName,binPath);if(bun)return bun;let npm=resolveNpmGlobalTarget(packageRoot,wrapperName,binPath);if(npm)return npm;return{kind:"unknown",manager:"unknown",packageRoot,binPath,reason:`${wrapperName} package root is not a recognized global install`}}return{kind:"unknown",manager:"unknown",binPath,reason:`unable to locate ${wrapperName} package root`}}function resolveBunGlobalTarget(packageRoot,wrapperName,binPath){let normalized=toPosix(packageRoot),marker16=`/.bun/install/global/node_modules/${wrapperName}`;if(!normalized.includes(marker16))return null;let index=normalized.lastIndexOf(marker16),prefix=index>=0?packageRoot.slice(0,index+5):void 0;return{kind:"bun",manager:"bun",packageRoot,binPath,prefix}}function resolveNpmGlobalTarget(packageRoot,wrapperName,binPath){let parts=toPosix(packageRoot).split("/");if(parts.at(-1)!==wrapperName)return null;let nodeModulesIndex=parts.length-2;if(parts[nodeModulesIndex]!=="node_modules")return null;let hasLibSegment=parts[nodeModulesIndex-1]==="lib",prefixParts=hasLibSegment?parts.slice(0,nodeModulesIndex-1):parts.slice(0,nodeModulesIndex),prefix=fromPosix(prefixParts.join("/"))||path38.parse(packageRoot).root;if(!prefix)return null;if(!hasLibSegment&&existsSync4(path38.join(prefix,"package.json")))return{kind:"unknown",manager:"unknown",packageRoot,binPath,reason:`${wrapperName} appears to be installed in a local node_modules`};return{kind:"npm",manager:"npm",packageRoot,binPath,prefix}}function findPackageRoot(startPath,wrapperName){let normalized=normalizeExistingPath(startPath);if(!normalized)return null;let dir=isLikelyFilePath(normalized)?path38.dirname(normalized):normalized;for(;;){let packagePath=path38.join(dir,"package.json");if(existsSync4(packagePath)&&readPackageName(packagePath)===wrapperName)return dir;let parent=path38.dirname(dir);if(!parent||parent===dir)return null;dir=parent}}function readPackageName(packagePath){try{let parsed=JSON.parse(readFileSync3(packagePath,"utf8"));return typeof parsed?.name==="string"?parsed.name:""}catch{return""}}function pathFromFileUrl(value){try{return value.startsWith("file:")?fileURLToPath5(value):void 0}catch{return}}function normalizeExistingPath(value){let normalized=normalizePath2(value);if(!normalized)return;try{return realpathSync(normalized)}catch{return normalized}}function normalizePath2(value){let raw=String(value??"").trim();if(!raw)return;if(!path38.isAbsolute(raw))return;return path38.resolve(raw)}function uniqueStrings(values){return[...new Set(values.filter((v2)=>Boolean(v2)))]}function isLikelyFilePath(value){if(existsSync4(value))try{return statSync2(value).isFile()}catch{}return Boolean(path38.extname(value))}function toPosix(value){return value.replace(/\\/g,"/")}function fromPosix(value){if(path38.sep==="/")return value;return value.replace(/\//g,path38.sep)}var DEFAULT_PACKAGE_NAME="dimcode";function resolveWrapperPackageVersion(){return(process.env.DIMCODE_NPM_PACKAGE_VERSION||"").trim()||null}var DEBUG_LOG_PATH=process.env.DIMCODE_DEBUG_LOG||"./dimcode-debug.log",CHECK_TIMEOUT_MS=5000,autoInstallStartedVersions=new Set;async function fetchPackageVersions(packageName=DEFAULT_PACKAGE_NAME){let controller=new AbortController,timeoutId=setTimeout(()=>controller.abort(),CHECK_TIMEOUT_MS);try{let response=await fetch(`https://registry.npmjs.org/${packageName}`,{signal:controller.signal,headers:{Accept:"application/json"}});if(!response.ok)throw Error(`npm registry returned ${response.status}`);let versions2=(await response.json())?.versions;if(!versions2||typeof versions2!=="object")throw Error("No versions found in registry response");return Object.keys(versions2)}catch(error48){if(error48 instanceof Error&&error48.name==="AbortError")throw Error("npm registry request timed out");throw error48}finally{clearTimeout(timeoutId)}}async function resolveLatestNpmVersion(packageName,currentVersion){return selectUpdateVersion(await fetchPackageVersions(packageName),resolveUpdateTrack(currentVersion))}async function checkNpmUpgrade(packageName=DEFAULT_PACKAGE_NAME){if(await logUpgradeCheck("start",{disableAutoUpdate:process.env.DIMCODE_DISABLE_AUTOUPDATE==="1",autoUpdate:process.env.DIMCODE_AUTOUPDATE!=="0",cwd:safeCwd(),argv:safeArgv(),debugLogPath:DEBUG_LOG_PATH}),process.env.DIMCODE_DISABLE_AUTOUPDATE==="1")return await logUpgradeCheck("skip-disabled"),null;let resolvedVersion=resolveCliVersion();if(!resolvedVersion?.version)return await logUpgradeCheck("skip-missing-version"),null;let wrapperVersion=packageName!==DEFAULT_PACKAGE_NAME?resolveWrapperPackageVersion():null,current=wrapperVersion||resolvedVersion.version,hasInjectedVersion=resolvedVersion.source==="injected";try{let latest=await resolveLatestNpmVersion(packageName,current);if(await logUpgradeCheck("check-result",{current,latest,hasInjectedVersion,wrapperVersion,updateTrack:resolveUpdateTrack(current)}),!latest)return await logUpgradeCheck("error",{message:"Failed to fetch latest version"}),null;if(!shouldInstallSelectedVersion(current,latest))return await logUpgradeCheck("no-update",{current,latest}),null;if(process.env.DIMCODE_AUTOUPDATE!=="0"&&hasInjectedVersion){let installer=resolvePackageInstaller(latest,packageName);if(!installer)return await logUpgradeCheck("autoupdate-skip-unknown-install-target",{current,latest,target:resolveNpmInstallTarget()}),`Update available: ${packageName}@${latest} (current: ${current}). Auto-update skipped because the current install source could not be identified. Run: dim version`;let installKey=`${packageName}@${latest}:${installer.manager}:${installer.prefix??""}`;if(autoInstallStartedVersions.has(installKey))return await logUpgradeCheck("autoupdate-skip-duplicate",{version:latest}),null;return autoInstallStartedVersions.add(installKey),await logUpgradeCheck("update-available",{current,latest,autoUpdate:!0,installer:installer.manager,prefix:installer.prefix}),startAutoInstall(latest,packageName,installer),`Update available: ${packageName}@${latest} (current: ${current}). Installing ${installer.manager} global package in background. Restart terminal after it finishes.`}return await logUpgradeCheck("update-available",{current,latest,autoUpdate:!1}),`Update available: ${packageName}@${latest} (current: ${current})`}catch(error48){return await logUpgradeCheck("error",{message:error48 instanceof Error?error48.message:String(error48)}),null}}function startAutoInstall(version2,packageName=DEFAULT_PACKAGE_NAME,installer){try{logUpgradeCheck("autoupdate-start",{version:version2,installer:installer.manager,prefix:installer.prefix});let proc=import_cross_spawn2.default(installer.command,[...installer.argsPrefix,...installer.installArgs],{stdio:"ignore",detached:!0,windowsHide:process.platform==="win32"});proc.unref();let finished=!1,finalize2=(message)=>{if(finished)return;finished=!0,logUpgradeCheck("autoupdate-finish",{version:version2,message}),notifyUpgradeToast(message)};proc.on("close",(code)=>{if(code===0)finalize2(`Update installed: ${packageName}@${version2}. Restart terminal to use the new version.`);else finalize2(`Auto-update failed. Run: ${installer.manualCommand}`)}),proc.on("error",()=>{logUpgradeCheck("autoupdate-error",{version:version2,reason:"process-error"}),finalize2(`Auto-update failed. Run: ${installer.manualCommand}`)})}catch{logUpgradeCheck("autoupdate-error",{version:version2,reason:"spawn-throw"}),notifyUpgradeToast(`Auto-update failed. Run: ${installer.manualCommand}`)}}async function logUpgradeCheck(_event,_data){}function safeCwd(){try{return process.cwd()}catch{return}}function safeArgv(){try{return process.argv}catch{return}}function resolveNpmInstallTarget(){return resolveCurrentInstallTarget({importMetaUrl:import.meta.url,argvPath:process.argv[1],execPath:process.execPath,env:process.env,isSelfContainedBinary:!1})}function resolvePackageInstaller(version2,packageName=DEFAULT_PACKAGE_NAME){let target=resolveNpmInstallTarget(),manager=target.manager==="npm"||target.manager==="bun"?target.manager:null;if(!manager)return null;let{command,argsPrefix}=resolvePackageManagerCommand(manager),packageSpec=`${packageName}@${version2}`,prefix=manager==="npm"?target.prefix:void 0,installArgs=manager==="npm"?["install","-g","--prefer-online",...prefix?["--prefix",prefix]:[],packageSpec]:["install","-g",packageSpec];return{manager,command,argsPrefix,installArgs,manualCommand:manager==="npm"?formatManualCommand(["npm","install","-g","--prefer-online",...prefix?["--prefix",prefix]:[],packageSpec]):`bun install -g ${packageSpec}`,prefix}}function formatManualCommand(args){return args.map(quoteShellArg).join(" ")}function quoteShellArg(value){if(/^[\w./:@%+=,-]+$/.test(value))return value;return JSON.stringify(value)}function resolvePackageManagerCommand(pm){if(process.platform!=="win32")return{command:pm,argsPrefix:[]};if(pm==="bun")return resolveBunCommand();return resolveNpmCommand()}function resolveBunCommand(){let execPath=String(process.execPath??"").trim();if(execPath){if(path39.basename(execPath).toLowerCase().startsWith("bun")&&existsSync5(execPath))return{command:execPath,argsPrefix:[]}}let bunHome=String(process.env.BUN_INSTALL??"").trim();if(bunHome){let bunExe=path39.join(bunHome,"bin","bun.exe");if(existsSync5(bunExe))return{command:bunExe,argsPrefix:[]}}return{command:"bun",argsPrefix:[]}}function resolveNpmCommand(){let execPath=String(process.execPath??"").trim(),execDir=execPath?path39.dirname(execPath):"";if(execDir){let npmCmd=path39.join(execDir,"npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]};let npmCliCandidates=[path39.join(execDir,"node_modules","npm","bin","npm-cli.js"),path39.resolve(execDir,"..","lib","node_modules","npm","bin","npm-cli.js")];if(execPath){for(let npmCli of npmCliCandidates)if(existsSync5(npmCli))return{command:execPath,argsPrefix:[npmCli]}}}let appData=String(process.env.APPDATA??"").trim();if(appData){let npmCmd=path39.join(appData,"npm","npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]}}let programFiles=String(process.env.ProgramFiles??"").trim();if(programFiles){let npmCmd=path39.join(programFiles,"nodejs","npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]}}let programFilesX86=String(process.env["ProgramFiles(x86)"]??"").trim();if(programFilesX86){let npmCmd=path39.join(programFilesX86,"nodejs","npm.cmd");if(existsSync5(npmCmd))return{command:npmCmd,argsPrefix:[]}}return{command:"npm",argsPrefix:[]}}function getNpmPackageOverride(){return(process.env.DIMCODE_NPM_PACKAGE||"").trim()||void 0}async function checkUpgrade(){let npmPackage=getNpmPackageOverride();if(npmPackage)return await checkNpmUpgrade(npmPackage);if(isSelfContainedBinary())return await checkBinaryUpgrade();return await checkNpmUpgrade()}import process25 from"node:process";var logger=debugLog2;async function cleanupExpiredSessionCaches3(opts){return cleanupExpiredSessionCaches2({...opts,logger})}var DEFAULT_LINE_THRESHOLD=400,DEFAULT_TOKEN_THRESHOLD=12000,DEFAULT_PREVIEW_LINES=20,DEFAULT_FIRST_RANGE_LINES=300,DEFAULT_PREVIEW_MAX_LINE_CHARS=240,DEFAULT_PREVIEW_MAX_CHARS=4000;function isNodeLike3(){let p2=globalThis.process;return Boolean(p2&&typeof p2?.versions?.node==="string")}function estimateTokens(text){let raw=String(text??""),chars=raw.length,bytes=Buffer.byteLength(raw,"utf-8"),nonAsciiChars=0;for(let i2=0;i2<raw.length;i2++)if(raw.charCodeAt(i2)>127)nonAsciiChars++;let asciiChars=Math.max(0,chars-nonAsciiChars),byChars=Math.ceil(chars/4),byBytes=Math.ceil(bytes/3),byMixed=Math.ceil(asciiChars/4+nonAsciiChars*0.9);return Math.max(byChars,byBytes,byMixed)}function countLines3(text){if(!text)return 0;return text.split(`
|
|
1173
1173
|
`).length}function buildPreview(text,maxLines){let lines=text.split(`
|
|
1174
1174
|
`).slice(0,Math.max(1,maxLines)),out=[],used=0,maxLineChars=DEFAULT_PREVIEW_MAX_LINE_CHARS,maxChars=DEFAULT_PREVIEW_MAX_CHARS;for(let line of lines){let next=line;if(next.length>maxLineChars)next=`${next.slice(0,maxLineChars)}...`;let size=next.length+(out.length>0?1:0);if(used+size>maxChars)break;out.push(next),used+=size}return out.join(`
|
|
1175
1175
|
`)}function buildReferenceMessage(opts){let endLine=Math.max(1,Math.min(opts.lineCount,opts.firstRangeLines));return["[long_input_reference]","Large pasted content is stored in a session-scoped blob.","Read it via `Read` tool using `file_id` and line ranges.","",`file_id: ${opts.fileId}`,`line_count: ${opts.lineCount}`,`sha256: ${opts.sha256}`,`recommended_first_range: 1-${endLine}`,"","tool_call_example:",`{"file_id":"${opts.fileId}","start_line":1,"end_line":${endLine}}`,"","preview:","```text",opts.preview,"```","","Continue reading in chunks of at most 300 lines and cite line numbers in conclusions."].join(`
|