goatchain-cli 0.0.71 → 0.0.72
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 +1 -1
- package/package.json +6 -6
package/dist/ink.mjs
CHANGED
|
@@ -2407,7 +2407,7 @@ React keys must be passed directly to JSX without using spread:
|
|
|
2407
2407
|
`}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),path18.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=path18.join(dir,"subagent-events.log");writeLine2(filePath,formatLine2(eventName,payload))}init_providers();init_runtime();init_catalog3();init_catalog3();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(`
|
|
2408
2408
|
|
|
2409
2409
|
`)}function buildSharedSystemPrompt(locale){return joinPromptSections(SYSTEM_SECTION_IDS.map((promptId)=>renderPrompt(promptId,void 0,{locale})))}function buildDimCodeSystemPrompt(options){let locale=options?.locale;return joinPromptSections([options?.intro??renderPrompt("system.intro.default",void 0,{locale}),buildSharedSystemPrompt(locale),...options?.extraSections??[]])}function getDimCodeSystemPrompt(locale){return buildDimCodeSystemPrompt({locale})}var DIMCODE_SHARED_SYSTEM_PROMPT=buildSharedSystemPrompt("en"),DIMCODE_SYSTEM_PROMPT=buildDimCodeSystemPrompt({locale:"en"});init_providers();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}function createCliProviderStore(env){return{async load(){let[{filePath:configPath,config:loadedConfig},{filePath:cachePath,cache:loadedCache}]=await Promise.all([loadDimcodeUserConfig(env),loadDimcodeUserCache(env)]),config2={...loadedConfig,version:1,updatedAt:Number(loadedConfig?.updatedAt??0)||0,settings:{...loadedConfig?.settings??{}}},cache={...loadedCache,version:1,updatedAt:Number(loadedCache?.updatedAt??0)||0,settings:{...loadedCache?.settings??{}},...typeof loadedCache?.lastSessionId==="string"&&loadedCache.lastSessionId.trim()?{lastSessionId:loadedCache.lastSessionId.trim()}:{}};return migrateProviderStateSnapshotLifecycles({configPath,cachePath,config:config2,cache,configSettings:config2.settings,cacheSettings:cache.settings})},async save(snapshot){await Promise.all([saveDimcodeUserConfig(snapshot.configPath,snapshot.config),saveDimcodeUserCache(snapshot.cachePath,snapshot.cache)])}}}var DEFAULT_MAX_INPUT_TOKENS=128000;function normalizeText6(value){return String(value??"").trim()}function parseBool2(value){let normalized=normalizeText6(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 readCliRuntimeConfig(env3,configOpts){return resolveRuntimeConfigFromEnv(env3,configOpts)}function createRuntimeOptionsFromConfig(opts,config2){let next={systemPrompt:opts.context.system,buildSystemPrompt:()=>getDimCodeSystemPrompt(),modelId:config2.modelId,adapter:config2.adapter,provider:config2.provider,baseUrl:config2.baseUrl,apiKey:config2.apiKey,responsesAutoPromptCacheKey:config2.responsesAutoPromptCacheKey,responsesUseSessionId:config2.responsesUseSessionId,modelCapabilities:config2.modelCapabilities,maxInputTokens:config2.maxInputTokens,maxOutputTokens:config2.maxOutputTokens,interleavedThinking:config2.interleavedThinking,reasoningEffort:config2.reasoningEffort,stateDir:opts.stateDir,cliTools:!0,delegateTasks:!0};if(opts.tools)next.tools=opts.tools;if(opts.mcpServers)next.mcpServers=opts.mcpServers;if(opts.mcpInitialState)next.mcpInitialState=opts.mcpInitialState;return next}function providerConfigAuthApiKey(config2){return config2.auth.kind==="api-key"?config2.auth.apiKey:void 0}function providerConfigBaseUrl(config2){return"baseUrl"in config2?config2.baseUrl:void 0}function createCachedProviderStore(store3,snapshot){return{load:async()=>snapshot,save:async(next)=>await store3.save(next)}}function buildRuntimeConfigFromContext(context2,configOpts){let envConfig=resolveRuntimeConfigFromEnv(context2.env,configOpts),rc=context2.runtimeConfig;if(!rc)return envConfig;let contextConfig={modelId:rc.modelId};if(rc.adapter)contextConfig.adapter=rc.adapter;if(rc.provider)contextConfig.provider=rc.provider;if(rc.baseUrl)contextConfig.baseUrl=rc.baseUrl;if(configOpts?.baseUrl&&!rc.baseUrl)contextConfig.baseUrl=configOpts.baseUrl;if(rc.apiKey)contextConfig.apiKey=rc.apiKey;if(rc.responsesAutoPromptCacheKey)contextConfig.responsesAutoPromptCacheKey=!0;if(rc.responsesUseSessionId)contextConfig.responsesUseSessionId=!0;if(rc.modelCapabilities)contextConfig.modelCapabilities=rc.modelCapabilities;if(rc.maxInputTokens!==void 0)contextConfig.maxInputTokens=rc.maxInputTokens;if(rc.maxOutputTokens!==void 0)contextConfig.maxOutputTokens=rc.maxOutputTokens;if(rc.interleavedThinking!==void 0)contextConfig.interleavedThinking=rc.interleavedThinking;if(rc.reasoningEffort)contextConfig.reasoningEffort=rc.reasoningEffort;let contextProvider=contextConfig.provider,envProvider=envConfig.provider,canUseEnvConnection=contextProvider===envProvider&&(contextConfig.adapter??envConfig.adapter)===envConfig.adapter;return buildResolvedRuntimeConfig({stateDir:"",modelId:envConfig.modelId,adapter:envConfig.adapter,provider:envConfig.provider,baseUrl:envConfig.baseUrl,apiKey:envConfig.apiKey,responsesAutoPromptCacheKey:envConfig.responsesAutoPromptCacheKey,responsesUseSessionId:envConfig.responsesUseSessionId,modelCapabilities:envConfig.modelCapabilities,maxInputTokens:envConfig.maxInputTokens,maxOutputTokens:envConfig.maxOutputTokens,interleavedThinking:envConfig.interleavedThinking,reasoningEffort:envConfig.reasoningEffort},{cwd:context2.cwd,requested:canUseEnvConnection?contextConfig:void 0,current:canUseEnvConnection?envConfig:contextConfig},DEFAULT_MAX_INPUT_TOKENS)}function resolveCliRestoreRuntimeConfigFromCurrent(current,opts){let requestedProviderId=opts?.requestedProviderId?.trim(),requestedModelId=opts?.requestedModelId?.trim(),context2=opts?.fallback??current,provider=requestedProviderId||context2.provider||current.provider,currentProvider=current.provider,canUseCurrentAuth=Boolean(provider&¤tProvider&&provider===currentProvider),next={modelId:requestedModelId||context2.modelId||current.modelId};if(context2.adapter)next.adapter=context2.adapter;if(provider)next.provider=provider;if(canUseCurrentAuth&¤t.baseUrl)next.baseUrl=current.baseUrl;if(canUseCurrentAuth&¤t.apiKey)next.apiKey=current.apiKey;if(context2.responsesAutoPromptCacheKey)next.responsesAutoPromptCacheKey=!0;if(context2.responsesUseSessionId)next.responsesUseSessionId=!0;if(context2.modelCapabilities)next.modelCapabilities=context2.modelCapabilities;if(opts?.tuning?.contextWindow!==void 0)next.maxInputTokens=opts.tuning.contextWindow;else if(context2.maxInputTokens!==void 0)next.maxInputTokens=context2.maxInputTokens;if(context2.maxOutputTokens!==void 0)next.maxOutputTokens=context2.maxOutputTokens;let reasoningEffort=opts?.tuning?.reasoningEffort??context2.reasoningEffort;if(reasoningEffort)next.reasoningEffort=reasoningEffort;let interleavedThinking=typeof opts?.tuning?.interleavedThinking==="boolean"?opts.tuning.interleavedThinking:context2.interleavedThinking;if(typeof interleavedThinking==="boolean")next.interleavedThinking=interleavedThinking;if(canUseCurrentAuth&¤t.env)next.env={...current.env};return next}async function resolveCliRestoreRuntimeConfig(current,opts,env3){let requestedProviderId=opts?.requestedProviderId?.trim(),requestedModelId=opts?.requestedModelId?.trim();if(!requestedProviderId||!requestedModelId)return resolveCliRestoreRuntimeConfigFromCurrent(current,opts);let storeEnv=env3??current.env??globalThis.process?.env??{},store3=createCliProviderStore(storeEnv);try{let snapshot=await store3.load(),cachedStore=createCachedProviderStore(store3,snapshot),providerConfig=await buildProviderConfigFromStore(cachedStore,requestedProviderId),customProvider=snapshot.configSettings.customProviders?.find((provider)=>provider.id===providerConfig.id),modelMetadata=readProviderSelectionModelMetadata({providerId:providerConfig.id,modelId:requestedModelId,connections:snapshot.configSettings.providerConnections,customProviders:snapshot.configSettings.customProviders,reasoningEffort:opts?.tuning?.reasoningEffort??snapshot.cacheSettings.reasoningEffort,reasoningEffortByModel:snapshot.cacheSettings.reasoningEffortByModel}),next={modelId:requestedModelId,provider:providerConfig.id,adapter:providerConfig.adapter},baseUrl=providerConfigBaseUrl(providerConfig);if(baseUrl)next.baseUrl=baseUrl;let apiKey=providerConfigAuthApiKey(providerConfig);if(apiKey)next.apiKey=apiKey;if(customProvider?.responsesAutoPromptCacheKey===!0)next.responsesAutoPromptCacheKey=!0;if(customProvider?.responsesUseSessionId===!0)next.responsesUseSessionId=!0;if(modelMetadata.capabilities)next.modelCapabilities=modelMetadata.capabilities;let maxInputTokens=opts?.tuning?.contextWindow??modelMetadata.limits?.maxInputTokens;if(maxInputTokens!==void 0)next.maxInputTokens=maxInputTokens;if(modelMetadata.limits?.maxOutputTokens!==void 0)next.maxOutputTokens=modelMetadata.limits.maxOutputTokens;let reasoningEffort=modelMetadata.reasoningEffort;if(reasoningEffort)next.reasoningEffort=reasoningEffort;let interleavedThinking=typeof opts?.tuning?.interleavedThinking==="boolean"?opts.tuning.interleavedThinking:typeof snapshot.cacheSettings.interleavedThinking==="boolean"?snapshot.cacheSettings.interleavedThinking:current.interleavedThinking;if(typeof interleavedThinking==="boolean")next.interleavedThinking=interleavedThinking;if(current.env)next.env={...current.env};return next}catch{return resolveCliRestoreRuntimeConfigFromCurrent(current,opts)}}function buildCliCreateAgentRuntimeOptions(opts){let configOpts=opts.baseUrl?{baseUrl:opts.baseUrl}:void 0,runtimeDebug2=parseBool2(opts.processEnv?.DIMCODE_DEBUG??opts.context.env?.DIMCODE_DEBUG)===!0,runtimeConfig=buildRuntimeConfigFromContext(opts.context,configOpts),buildOptions=(config2)=>createRuntimeOptionsFromConfig(opts,config2);return{...buildOptions(runtimeConfig),debug:runtimeDebug2,resolveRuntimeConfig:async(input)=>{let current=buildRuntimeConfigFromContext(opts.context,configOpts);if(!input.runtimeSnapshot)return buildResolvedRuntimeConfig(buildOptions(current),{...input,current:input.current??current},DEFAULT_MAX_INPUT_TOKENS);return await resolveRuntimeConfigFromRestoreInputs({...input,current:input.current??current},{defaultMaxInputTokens:DEFAULT_MAX_INPUT_TOKENS,resolveRuntimeConfigForCwd:async(_cwd,restoreOpts)=>await resolveCliRestoreRuntimeConfig(current,restoreOpts,opts.processEnv)})}}}async function resolveCreateAgentRuntime(_env){return(await Promise.resolve().then(() => (init_src2(),exports_src2))).createAgentRuntime}async function createCliRuntime(opts){let env3=opts.processEnv??opts.context.env;return await(await resolveCreateAgentRuntime(env3))(buildCliCreateAgentRuntimeOptions(opts))}var RUNTIME_SESSION_METADATA_KEY2="dimAgentRuntime",DEBUG_LOG_FILE_NAME="<session-id>.jsonl",DEFAULT_MAX_INPUT_TOKENS2=128000;function createDefaultDebugLogState(){let directory=path24.join(os7.homedir(),".goatchain","debug");return{enabled:!1,directory,logFilePath:path24.join(directory,DEBUG_LOG_FILE_NAME)}}function cloneJson(value){return JSON.parse(JSON.stringify(value??null))}function cloneMetadata2(value){return value?cloneJson(value):void 0}function cloneEnvRecord(source){return Object.entries(source??{}).reduce((next,[key,value])=>{return next[key]=value,next},{})}function readTruthyFlag(value){let normalized=(value??"").trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function readNoInteractionFlag(config2){return readTruthyFlag(config2?.env?.DIMCODE_NO_INTERACTION)}function runtimeConfigLogSummary2(config2){if(!config2)return null;return{modelId:config2.modelId,provider:config2.provider,adapter:config2.adapter,hasBaseUrl:Boolean(config2.baseUrl),hasApiKey:Boolean(config2.apiKey),responsesAutoPromptCacheKey:config2.responsesAutoPromptCacheKey,responsesUseSessionId:config2.responsesUseSessionId,capabilitiesContextWindow:config2.modelCapabilities?.contextWindow,maxInputTokens:config2.maxInputTokens,maxOutputTokens:config2.maxOutputTokens,interleavedThinking:config2.interleavedThinking,reasoningEffort:config2.reasoningEffort,noInteraction:readNoInteractionFlag(config2)}}function runtimeConfigsMatch(left,right){return(left?.modelId??"").trim()===(right?.modelId??"").trim()&&(left?.adapter??"").trim()===(right?.adapter??"").trim()&&(left?.provider??"").trim()===(right?.provider??"").trim()&&(left?.baseUrl??"").trim()===(right?.baseUrl??"").trim()&&(left?.apiKey??"").trim()===(right?.apiKey??"").trim()&&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)&&Boolean(left?.interleavedThinking)===Boolean(right?.interleavedThinking)&&readNoInteractionFlag(left)===readNoInteractionFlag(right)}function runtimeConfigUpdateReason(input){if(input.liveRuntimeConfigMatches)return;if(input.forceNoInteractionRuntimeConfigUpdate)return"no_interaction";if(input.forceReload)return"force_reload";return input.snapshotRuntimeConfigMatches?"live_runtime_config_diff":"snapshot_runtime_config_diff"}function mcpServersMatch(left,right){return JSON.stringify(left??[])===JSON.stringify(right??[])}function runtimeSnapshotFromLegacyRuntimeConfig(raw){if(!raw||typeof raw!=="object"||Array.isArray(raw))return null;let snapshot=raw,modelId=(typeof snapshot.lastModelId==="string"?snapshot.lastModelId.trim():"")||(typeof snapshot.modelId==="string"?snapshot.modelId.trim():"");if(!modelId)return null;let provider=(typeof snapshot.lastProviderId==="string"?snapshot.lastProviderId.trim():"")||(typeof snapshot.provider==="string"?snapshot.provider.trim():"");return{lastModelId:modelId,lastProviderId:provider}}async function readRuntimeEnvelopeFromSnapshot(snapshot,fallback){let runtimeMeta=(snapshot?.metadata??{})[RUNTIME_SESSION_METADATA_KEY2]??{},envelope=snapshot?readEnvelopeFromSnapshot(snapshot):null,legacyRuntimeSnapshot=envelope?.runtimeSnapshot;if(!legacyRuntimeSnapshot)legacyRuntimeSnapshot=runtimeSnapshotFromLegacyRuntimeConfig(envelope?.runtimeConfig)??runtimeSnapshotFromLegacyRuntimeConfig(runtimeMeta.runtimeConfig)??runtimeSnapshotFromLegacyRuntimeConfig(runtimeMeta.runtimeSnapshot);let runtimeConfig=null;if(snapshot&&legacyRuntimeSnapshot)runtimeConfig=await resolveRuntimeConfigFromRestoreInputs({cwd:snapshot.cwd||"",runtimeSnapshot:legacyRuntimeSnapshot,current:fallback},{defaultMaxInputTokens:DEFAULT_MAX_INPUT_TOKENS2,resolveRuntimeConfigForCwd:async(_cwd,restoreOpts)=>await resolveCliRestoreRuntimeConfig(fallback,restoreOpts)});let runtimeMetaModeId=typeof runtimeMeta.modeId==="string"?runtimeMeta.modeId:void 0,runtimeMetaToolApprovalMode=runtimeMeta.toolApprovalMode==="auto"||runtimeMeta.toolApprovalMode==="normal"||runtimeMeta.toolApprovalMode==="strict"?runtimeMeta.toolApprovalMode:runtimeMeta.toolApprovalMode==="all"?"auto":void 0;return{runtimeConfig,modeId:envelope?.modeId??(runtimeMetaModeId==="plan"?"plan":"agent"),toolApprovalMode:envelope?.toolApprovalMode??runtimeMetaToolApprovalMode,mcpServers:envelope?.mcpServers?cloneJson(envelope.mcpServers):Array.isArray(runtimeMeta.mcpServers)?cloneJson(runtimeMeta.mcpServers):[]}}function createCliAgent(opts){let stateDir=path24.resolve(opts.stateDir),pendingMode="agent",runtimePromise=null,resolvedRuntime=null,runtimeHostModule=null,runtimeHostPromise=null,facadeDebugLogState=createDefaultDebugLogState(),pendingRuntimeConfigReloads=new Set,loadRuntimeHostModule=()=>{if(runtimeHostModule)return Promise.resolve(runtimeHostModule);return runtimeHostPromise??=Promise.resolve().then(() => (init_host(),exports_host)).then((host)=>{return runtimeHostModule=host,runtimeHostModule}).catch((error53)=>{throw runtimeHostPromise=null,debugLog2("cli.background_exec_checkpoint_host_import_error",{error:error53 instanceof Error?{message:error53.message,stack:error53.stack}:String(error53)}),error53}),runtimeHostPromise};loadRuntimeHostModule().catch(()=>{});let getStateEnv=()=>({...cloneEnvRecord(opts.context.env??{}),...cloneEnvRecord(opts.processEnv)}),getRuntimeConfig=()=>{let rc=opts.context.runtimeConfig;if(rc){let next={modelId:rc.modelId};if(rc.adapter)next.adapter=rc.adapter;if(rc.provider)next.provider=rc.provider;if(rc.baseUrl)next.baseUrl=rc.baseUrl;if(!rc.baseUrl&&opts.baseUrl)next.baseUrl=opts.baseUrl;if(rc.apiKey)next.apiKey=rc.apiKey;if(rc.responsesAutoPromptCacheKey)next.responsesAutoPromptCacheKey=!0;if(rc.responsesUseSessionId)next.responsesUseSessionId=!0;if(rc.modelCapabilities)next.modelCapabilities=rc.modelCapabilities;if(rc.maxInputTokens!==void 0)next.maxInputTokens=rc.maxInputTokens;if(rc.maxOutputTokens!==void 0)next.maxOutputTokens=rc.maxOutputTokens;if(rc.interleavedThinking!==void 0)next.interleavedThinking=rc.interleavedThinking;if(rc.reasoningEffort)next.reasoningEffort=rc.reasoningEffort;return next}return readCliRuntimeConfig(getStateEnv(),{baseUrl:opts.baseUrl})},logSessionPersistence=(sessionId)=>{let normalizedSessionId=sessionId.trim();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(error53){throw runtimePromise=null,resolvedRuntime=null,error53}},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),forkSession:async(sessionId,input)=>await(await ensureRuntime()).forkSession(sessionId,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})(),proxy={get subagentId(){return resolvedHandle?.subagentId??placeholderId},get status(){return resolvedHandle?.status??"pending"},cancel:(reason)=>{if(resolvedHandle)resolvedHandle.cancel(reason);else cancelQueued=!0},result:resultPromise};if(spec.ownerSessionId)proxy.ownerSessionId=spec.ownerSessionId;return proxy}let openSession=async(sessionId)=>{let normalizedSessionId=sessionId.trim();if(!normalizedSessionId)return;return await(await ensureRuntime()).openSession(normalizedSessionId)},ensureSession=async(input)=>{let requestedSessionId=input?.sessionId?.trim()??"",runtime=requestedSessionId?await ensureRuntime():await ensureRuntime(),nextMode=input?.modeId??pendingMode,nextCwd=input?.cwd?.trim()||opts.context.cwd?.trim()||process.cwd(),nextRuntimeConfig=input?.runtimeConfig??getRuntimeConfig();debugLog2("cli.ensure_session.start",{requestedSessionId,nextMode,nextCwd,hasInputRuntimeConfig:Boolean(input?.runtimeConfig),runtimeConfig:runtimeConfigLogSummary2(nextRuntimeConfig)});let hasToolApprovalMode=Object.prototype.hasOwnProperty.call(input??{},"toolApprovalMode"),nextToolApprovalMode=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=await readRuntimeEnvelopeFromSnapshot(snapshot,nextRuntimeConfig),liveState=await runtime.getSessionState(existing.id);if(liveState?.attachMode==="readonly"){let forkInput={cwd:nextCwd,modeId:nextMode,runtimeConfig:nextRuntimeConfig};if(hasToolApprovalMode)forkInput.toolApprovalMode=nextToolApprovalMode;if(hasMcpServers)forkInput.mcpServers=nextMcpServers;if(nextMetadata)forkInput.metadata=nextMetadata;let forked=await runtime.forkSession(existing.id,forkInput);if(!forked)throw Error(`Session ${existing.id} could not be forked`);return debugLog2("cli.ensure_session.forked_readonly",{requestedSessionId,sourceSessionId:existing.id,sessionId:forked.id,nextMode,nextCwd,runtimeConfig:runtimeConfigLogSummary2(nextRuntimeConfig)}),logSessionPersistence(forked.id),forked}let liveRuntimeConfig=liveState?.runtimeConfig??envelope.runtimeConfig,runtimeMcpState=await runtime.getMcpState(),update={};if((snapshot?.cwd??"").trim()!==nextCwd)update.cwd=nextCwd;let forceReload=pendingRuntimeConfigReloads.delete(existing.id),snapshotRuntimeConfigMatches=runtimeConfigsMatch(envelope.runtimeConfig,nextRuntimeConfig),liveRuntimeConfigMatches=runtimeConfigsMatch(liveRuntimeConfig,nextRuntimeConfig),runtimeConfigReason=runtimeConfigUpdateReason({forceReload,forceNoInteractionRuntimeConfigUpdate,liveRuntimeConfigMatches,snapshotRuntimeConfigMatches});if(runtimeConfigReason)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 debugLog2("cli.ensure_session.existing",{requestedSessionId,sessionId:existing.id,hasSnapshot:Boolean(snapshot),envelopeRuntimeConfig:runtimeConfigLogSummary2(envelope.runtimeConfig),liveRuntimeConfig:runtimeConfigLogSummary2(liveRuntimeConfig),nextRuntimeConfig:runtimeConfigLogSummary2(nextRuntimeConfig),runtimeConfigChanged:Boolean(update.runtimeConfig),runtimeConfigUpdateReason:runtimeConfigReason,snapshotRuntimeConfigMatches,liveRuntimeConfigMatches,forceNoInteractionRuntimeConfigUpdate,forceReload,modeChanged:envelope.modeId!==nextMode,cwdChanged:Boolean(update.cwd),toolApprovalModeChanged:Boolean(update.toolApprovalMode),mcpServersChanged:Boolean(update.mcpServers),metadataChanged:Boolean(update.metadata),updateKeys:Object.keys(update)}),logSessionPersistence(existing.id),existing}debugLog2("cli.ensure_session.existing_missing",{requestedSessionId})}let createInput={sessionId:requestedSessionId||void 0,cwd:nextCwd,modeId:nextMode,runtimeConfig:nextRuntimeConfig};if(hasToolApprovalMode)createInput.toolApprovalMode=nextToolApprovalMode;if(hasMcpServers)createInput.mcpServers=nextMcpServers;if(nextMetadata)createInput.metadata=nextMetadata;let created=await runtime.createSession(createInput);return debugLog2("cli.ensure_session.created",{requestedSessionId,sessionId:created.id,modeId:nextMode,cwd:nextCwd,runtimeConfig:runtimeConfigLogSummary2(nextRuntimeConfig),hasToolApprovalMode,hasMcpServers,hasMetadata:Boolean(nextMetadata)}),logSessionPersistence(created.id),created};return{runtime:runtimeFacade,sessions:runtimeSessions,openSession,forkSession:async(sessionId,input)=>await(await ensureRuntime()).forkSession(sessionId,input),ensureSession,async steerSession(sessionId,input){let session=await openSession(sessionId);if(!session)return!1;return await session.steer(input)},subscribeBackgroundExecCheckpointEvents(sessionId,listener){let normalizedSessionId=sessionId.trim();if(!normalizedSessionId)return()=>{};let closed=!1,unsubscribe,subscribeNow=(runtime,host)=>{return host.getAgentRuntimeInternals(runtime)?.subscribeBackgroundExecCheckpointEvents?.(normalizedSessionId,listener)??(()=>{})};if(resolvedRuntime&&runtimeHostModule)return unsubscribe=subscribeNow(resolvedRuntime,runtimeHostModule),()=>{closed=!0,unsubscribe?.()};return Promise.all([ensureRuntime(),loadRuntimeHostModule()]).then(([runtime,host])=>{if(closed)return;unsubscribe=subscribeNow(runtime,host)}).catch((error53)=>{debugLog2("cli.background_exec_checkpoint_subscribe_error",{sessionId:normalizedSessionId,error:error53 instanceof Error?{message:error53.message,stack:error53.stack}:String(error53)})}),()=>{closed=!0,unsubscribe?.()}},setMode(modeId){pendingMode=modeId},getMode(){return pendingMode},async triggerManualCompression(sessionId,options){let normalizedSessionId=sessionId?.trim()??"";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=sessionId.trim();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)}}}init_providers();init_providers();function shouldInferCustomProviderFallbackMetadata2(adapter){if(!adapter)return!0;return adapter==="openai"||adapter==="openai-responses"||adapter==="gemini"||adapter==="anthropic"}function hasConfiguredModelMetadata(model){let limit2=model.limit??{},hasContext=typeof limit2.context==="number"&&Number.isFinite(limit2.context),hasOutput=typeof limit2.output==="number"&&Number.isFinite(limit2.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 RUNTIME_ENV_KEYS=new Set(["DIMCODE_NO_INTERACTION"]);async function backupConfigBeforeLegacyMigration(configFile){try{await(await import("node:fs/promises")).copyFile(configFile,`${configFile}.legacy-custom-provider.${Date.now()}.bak`)}catch{}}function isTruthyFlag(value){let normalized=String(value??"").trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"||normalized==="on"}function resolveLegacyCustomProviderMigration(legacyCustom,customProviders){let legacyBaseUrl=readOptionalString3(legacyCustom.baseUrl),legacyApiKey=readOptionalString3(legacyCustom.apiKey);if(!legacyBaseUrl&&!legacyApiKey)return;let matches=customProviders.filter((provider)=>{let providerBaseUrl=readOptionalString3(provider.baseUrl),providerApiKey=readOptionalString3(provider.apiKey);if(legacyBaseUrl&&providerBaseUrl!==legacyBaseUrl)return!1;if(legacyApiKey&&providerApiKey!==legacyApiKey)return!1;return!0});if(matches.length!==1)return;return readOptionalString3(matches[0]?.id)}function resolveSystemPrompt(env3){if(!isTruthyFlag(env3.DIMCODE_NO_INTERACTION))return getDimCodeSystemPrompt();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(`
|
|
2410
|
-
`)]})}async function createDimcodeContext(opts){let fastStartRaw=String(opts.env.DIMCODE_FAST_START??"").trim().toLowerCase(),fastStart=fastStartRaw==="1"||fastStartRaw==="true"||fastStartRaw==="yes"||fastStartRaw==="on",version4=readOptionalString3("0.0.71")??(fastStart?null:await readRepoPackageVersion(opts.cwd)),resolveToolsPath=async()=>{let[{homedir:homedir2},path25]=await Promise.all([import("node:os"),import("node:path")]),dimcodeHome=readOptionalString3(opts.env.GOATCHAIN_HOME);if(dimcodeHome){let dir2=path25.resolve(dimcodeHome);return{dir:dir2,filePath:path25.join(dir2,"tools.json")}}let dir=path25.resolve(homedir2(),".goatchain");return{dir,filePath:path25.join(dir,"tools.json")}},[loadedCache,loadedConfig,loadedTools,loadedMcp]=fastStart?await(async()=>{let[cacheDir,configDir,toolsPath,path25]=await Promise.all([getDimcodeUserDir(opts.env),getDimcodeConfigDir(opts.env),resolveToolsPath(),import("node:path")]),cacheFile=path25.join(cacheDir,"cache.json"),configFile=path25.join(configDir,"config.json"),mcpJsonFile=path25.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)]),cache2=loadedCache.cache,config2=loadedConfig.config,saved=cache2.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||".",v=(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:version4??"dev",...v("DIMCODE_STARTUP_TOAST")?{DIMCODE_STARTUP_TOAST:v("DIMCODE_STARTUP_TOAST")}:{}},savedProviderId=normalizeProviderId(savedConfig.providerId),savedConnections=savedConfig.providerConnections??{},normalizedSavedConnections=Object.fromEntries(Object.entries(savedConnections).flatMap(([providerId2,connection])=>{if(connection.lifecycle==="deleted")return[];let builtin2=getBuiltinProvider(providerId2),adapter2=builtin2?getProviderAdapter(builtin2):void 0,baseUrl=builtin2?resolveBuiltinProviderBaseUrl(builtin2,readOptionalString3(connection.baseUrl)):readOptionalString3(connection.baseUrl);try{validateProviderCreation({kind:providerId2==="dimcode-api-oauth"?"oauth":"builtin-api-key",id:providerId2,adapter:adapter2,baseUrl,apiKey:connection.apiKey})}catch(error53){return debugLog2("provider.incomplete_filtered",{providerId:providerId2,source:"cli-context-connection",reason:error53 instanceof Error?error53.message:String(error53)}),[]}let lifecycle=connection.lifecycle??"created";return[[providerId2,{...connection,lifecycle}]]})),savedActiveModelByProvider=savedConfig.activeModelByProvider??{},normalizedSavedCustomProviders=(Array.isArray(savedConfig.customProviders)?savedConfig.customProviders:[]).flatMap((provider)=>{let adapter2=normalizeProviderAdapterValue(provider?.adapter);if(provider?.lifecycle==="deleted")return[];let models=Array.isArray(provider?.models)?backfillCustomProviderModels(provider.models,{adapter:adapter2}):provider?.models;try{validateProviderCreation({kind:"custom-api-key",id:provider.id,name:provider.name,adapter:adapter2,baseUrl:provider.baseUrl,apiKey:provider.apiKey})}catch(error53){return debugLog2("provider.incomplete_filtered",{providerId:provider.id,source:"cli-context-custom-provider",reason:error53 instanceof Error?error53.message:String(error53)}),[]}return[{...provider,lifecycle:provider.lifecycle??"created",...Array.isArray(models)?{models}:{}}]}),legacyCustom=savedConfig.customProvider??{},legacyProviderId=savedProviderId&&isLegacyCustomProviderId(savedProviderId)?savedProviderId:void 0,legacyMigrationProviderId=legacyProviderId?resolveLegacyCustomProviderMigration(legacyCustom,normalizedSavedCustomProviders):void 0,rawProviderId=legacyMigrationProviderId??(savedProviderId&&isLegacyCustomProviderId(savedProviderId)?void 0:savedProviderId),legacyMigrationFailed=Boolean(legacyProviderId&&!legacyMigrationProviderId),legacyMigrationSucceeded=Boolean(legacyProviderId&&legacyMigrationProviderId),mutableConfig=config2;if(legacyMigrationSucceeded||legacyMigrationFailed){mutableConfig.settings={...mutableConfig.settings??{}};let fromLegacyProviderId=legacyProviderId??"custom",migration=legacyMigrationProviderId?{status:"migrated",from:fromLegacyProviderId,to:legacyMigrationProviderId,at:new Date().toISOString()}:{status:"unknown",from:fromLegacyProviderId,at:new Date().toISOString()};if(legacyMigrationProviderId)mutableConfig.settings.providerId=legacyMigrationProviderId;else delete mutableConfig.settings.providerId;mutableConfig.settings.legacyCustomProviderMigration=migration,await backupConfigBeforeLegacyMigration(loadedConfig.filePath),await saveDimcodeUserConfig(loadedConfig.filePath,{...config2,updatedAt:Date.now(),settings:mutableConfig.settings})}let{candidates,existingProviderIds}=buildProviderSelectionCandidates({connections:normalizedSavedConnections,customProviders:normalizedSavedCustomProviders,legacyCustom,activeModelByProvider:{...savedActiveModelByProvider}}),activeModelSelections=stripUnknownActiveModelSelections({...savedActiveModelByProvider},existingProviderIds),selection=legacyMigrationFailed?{}:resolveProviderSelection({candidates,preferredProviderId:rawProviderId,activeModelByProvider:activeModelSelections}),providerId=readOptionalString3(selection.providerId),providerModel=readOptionalString3(selection.modelId);if(config2.settings)if(providerId)mutableConfig.settings.providerId=providerId;else delete mutableConfig.settings.providerId;let customProvider=isCustomProviderId(providerId)?normalizedSavedCustomProviders.find((p)=>String(p?.id??"").trim()===providerId):void 0,builtin=providerId&&!isCustomProviderId(providerId)?getBuiltinProvider(providerId):void 0,savedConnection=normalizedSavedConnections[providerId??""],savedConnectionBaseUrl=readOptionalString3(savedConnection?.baseUrl),builtinBaseUrl=readOptionalString3(getProviderBaseUrl(builtin)),adapter=isCustomProviderId(providerId)?customProvider?.adapter:providerId==="openai"&&savedConnectionBaseUrl&&savedConnectionBaseUrl!==builtinBaseUrl?"openai":builtin?getProviderAdapter(builtin):void 0,providerBaseUrl=isCustomProviderId(providerId)?readOptionalString3(customProvider?.baseUrl):readOptionalString3(resolveBuiltinProviderBaseUrl(builtin,savedConnection?.baseUrl)),providerApiKey=isCustomProviderId(providerId)?readOptionalString3(customProvider?.apiKey):readOptionalString3(savedConnection?.apiKey),modelCapabilityFallbackModels=isCustomProviderId(providerId)||builtin?.customModels?listCustomProviderModelFallbackModels():void 0,modelMetadata=readProviderSelectionModelMetadata({providerId,modelId:providerModel,connections:normalizedSavedConnections,customProviders:normalizedSavedCustomProviders,connectionModels:savedConnection?.models,builtinModels:builtin?.models,customProviderModels:customProvider?.models,legacyCustomModels:Array.isArray(legacyCustom.models)?legacyCustom.models:void 0,fallbackModels:modelCapabilityFallbackModels,reasoningEffort:saved.reasoningEffort,reasoningEffortByModel:saved.reasoningEffortByModel}),resolvedModelContextWindow=modelMetadata.limits?.maxInputTokens,resolvedModelMaxOutputTokens=modelMetadata.limits?.maxOutputTokens,modelCapabilities=modelMetadata.capabilities,reasoningEffort=modelMetadata.reasoningEffort,runtimeConfig={modelId:providerModel??"deepseek-v3.1",...adapter?{adapter}:{},...providerId?{provider:providerId}:{},baseUrl:providerBaseUrl,apiKey:providerApiKey,...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:saved.interleavedThinking===!0||modelDeclaresInterleavedReasoning(providerModel)?!0:void 0,reasoningEffort};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_LANG)setPromptLocale(mergedEnv.DIMCODE_LANG);if(!mergedEnv.DIMCODE_THEME&&readOptionalString3(saved.themeMode))mergedEnv.DIMCODE_THEME=readOptionalString3(saved.themeMode);if(!mergedEnv.DIMCODE_REASONING_EFFORT&&reasoningEffort)mergedEnv.DIMCODE_REASONING_EFFORT=reasoningEffort;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:cache2,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:readFile9},path25]=await Promise.all([import("node:fs/promises"),import("node:path")]),raw=await readFile9(path25.join(cwd,"package.json"),"utf8"),parsed=JSON.parse(raw),v=typeof parsed?.version==="string"?parsed.version:null;return v&&v.trim()?v.trim():null}catch{return null}}async function resolveStartupSessionId(opts){return readOptionalString3(opts.envSessionId)}function createNoopToolRunner(){return async(call3)=>{let name15=String(call3?.name??"tool");return{id:String(call3?.id??"tool"),status:"error",output:["Tool execution is handled by the DimCode agent.",`This UI cannot run tool "${name15}" locally.`].join(`
|
|
2410
|
+
`)]})}async function createDimcodeContext(opts){let fastStartRaw=String(opts.env.DIMCODE_FAST_START??"").trim().toLowerCase(),fastStart=fastStartRaw==="1"||fastStartRaw==="true"||fastStartRaw==="yes"||fastStartRaw==="on",version4=readOptionalString3("0.0.72")??(fastStart?null:await readRepoPackageVersion(opts.cwd)),resolveToolsPath=async()=>{let[{homedir:homedir2},path25]=await Promise.all([import("node:os"),import("node:path")]),dimcodeHome=readOptionalString3(opts.env.GOATCHAIN_HOME);if(dimcodeHome){let dir2=path25.resolve(dimcodeHome);return{dir:dir2,filePath:path25.join(dir2,"tools.json")}}let dir=path25.resolve(homedir2(),".goatchain");return{dir,filePath:path25.join(dir,"tools.json")}},[loadedCache,loadedConfig,loadedTools,loadedMcp]=fastStart?await(async()=>{let[cacheDir,configDir,toolsPath,path25]=await Promise.all([getDimcodeUserDir(opts.env),getDimcodeConfigDir(opts.env),resolveToolsPath(),import("node:path")]),cacheFile=path25.join(cacheDir,"cache.json"),configFile=path25.join(configDir,"config.json"),mcpJsonFile=path25.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)]),cache2=loadedCache.cache,config2=loadedConfig.config,saved=cache2.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||".",v=(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:version4??"dev",...v("DIMCODE_STARTUP_TOAST")?{DIMCODE_STARTUP_TOAST:v("DIMCODE_STARTUP_TOAST")}:{}},savedProviderId=normalizeProviderId(savedConfig.providerId),savedConnections=savedConfig.providerConnections??{},normalizedSavedConnections=Object.fromEntries(Object.entries(savedConnections).flatMap(([providerId2,connection])=>{if(connection.lifecycle==="deleted")return[];let builtin2=getBuiltinProvider(providerId2),adapter2=builtin2?getProviderAdapter(builtin2):void 0,baseUrl=builtin2?resolveBuiltinProviderBaseUrl(builtin2,readOptionalString3(connection.baseUrl)):readOptionalString3(connection.baseUrl);try{validateProviderCreation({kind:providerId2==="dimcode-api-oauth"?"oauth":"builtin-api-key",id:providerId2,adapter:adapter2,baseUrl,apiKey:connection.apiKey})}catch(error53){return debugLog2("provider.incomplete_filtered",{providerId:providerId2,source:"cli-context-connection",reason:error53 instanceof Error?error53.message:String(error53)}),[]}let lifecycle=connection.lifecycle??"created";return[[providerId2,{...connection,lifecycle}]]})),savedActiveModelByProvider=savedConfig.activeModelByProvider??{},normalizedSavedCustomProviders=(Array.isArray(savedConfig.customProviders)?savedConfig.customProviders:[]).flatMap((provider)=>{let adapter2=normalizeProviderAdapterValue(provider?.adapter);if(provider?.lifecycle==="deleted")return[];let models=Array.isArray(provider?.models)?backfillCustomProviderModels(provider.models,{adapter:adapter2}):provider?.models;try{validateProviderCreation({kind:"custom-api-key",id:provider.id,name:provider.name,adapter:adapter2,baseUrl:provider.baseUrl,apiKey:provider.apiKey})}catch(error53){return debugLog2("provider.incomplete_filtered",{providerId:provider.id,source:"cli-context-custom-provider",reason:error53 instanceof Error?error53.message:String(error53)}),[]}return[{...provider,lifecycle:provider.lifecycle??"created",...Array.isArray(models)?{models}:{}}]}),legacyCustom=savedConfig.customProvider??{},legacyProviderId=savedProviderId&&isLegacyCustomProviderId(savedProviderId)?savedProviderId:void 0,legacyMigrationProviderId=legacyProviderId?resolveLegacyCustomProviderMigration(legacyCustom,normalizedSavedCustomProviders):void 0,rawProviderId=legacyMigrationProviderId??(savedProviderId&&isLegacyCustomProviderId(savedProviderId)?void 0:savedProviderId),legacyMigrationFailed=Boolean(legacyProviderId&&!legacyMigrationProviderId),legacyMigrationSucceeded=Boolean(legacyProviderId&&legacyMigrationProviderId),mutableConfig=config2;if(legacyMigrationSucceeded||legacyMigrationFailed){mutableConfig.settings={...mutableConfig.settings??{}};let fromLegacyProviderId=legacyProviderId??"custom",migration=legacyMigrationProviderId?{status:"migrated",from:fromLegacyProviderId,to:legacyMigrationProviderId,at:new Date().toISOString()}:{status:"unknown",from:fromLegacyProviderId,at:new Date().toISOString()};if(legacyMigrationProviderId)mutableConfig.settings.providerId=legacyMigrationProviderId;else delete mutableConfig.settings.providerId;mutableConfig.settings.legacyCustomProviderMigration=migration,await backupConfigBeforeLegacyMigration(loadedConfig.filePath),await saveDimcodeUserConfig(loadedConfig.filePath,{...config2,updatedAt:Date.now(),settings:mutableConfig.settings})}let{candidates,existingProviderIds}=buildProviderSelectionCandidates({connections:normalizedSavedConnections,customProviders:normalizedSavedCustomProviders,legacyCustom,activeModelByProvider:{...savedActiveModelByProvider}}),activeModelSelections=stripUnknownActiveModelSelections({...savedActiveModelByProvider},existingProviderIds),selection=legacyMigrationFailed?{}:resolveProviderSelection({candidates,preferredProviderId:rawProviderId,activeModelByProvider:activeModelSelections}),providerId=readOptionalString3(selection.providerId),providerModel=readOptionalString3(selection.modelId);if(config2.settings)if(providerId)mutableConfig.settings.providerId=providerId;else delete mutableConfig.settings.providerId;let customProvider=isCustomProviderId(providerId)?normalizedSavedCustomProviders.find((p)=>String(p?.id??"").trim()===providerId):void 0,builtin=providerId&&!isCustomProviderId(providerId)?getBuiltinProvider(providerId):void 0,savedConnection=normalizedSavedConnections[providerId??""],savedConnectionBaseUrl=readOptionalString3(savedConnection?.baseUrl),builtinBaseUrl=readOptionalString3(getProviderBaseUrl(builtin)),adapter=isCustomProviderId(providerId)?customProvider?.adapter:providerId==="openai"&&savedConnectionBaseUrl&&savedConnectionBaseUrl!==builtinBaseUrl?"openai":builtin?getProviderAdapter(builtin):void 0,providerBaseUrl=isCustomProviderId(providerId)?readOptionalString3(customProvider?.baseUrl):readOptionalString3(resolveBuiltinProviderBaseUrl(builtin,savedConnection?.baseUrl)),providerApiKey=isCustomProviderId(providerId)?readOptionalString3(customProvider?.apiKey):readOptionalString3(savedConnection?.apiKey),modelCapabilityFallbackModels=isCustomProviderId(providerId)||builtin?.customModels?listCustomProviderModelFallbackModels():void 0,modelMetadata=readProviderSelectionModelMetadata({providerId,modelId:providerModel,connections:normalizedSavedConnections,customProviders:normalizedSavedCustomProviders,connectionModels:savedConnection?.models,builtinModels:builtin?.models,customProviderModels:customProvider?.models,legacyCustomModels:Array.isArray(legacyCustom.models)?legacyCustom.models:void 0,fallbackModels:modelCapabilityFallbackModels,reasoningEffort:saved.reasoningEffort,reasoningEffortByModel:saved.reasoningEffortByModel}),resolvedModelContextWindow=modelMetadata.limits?.maxInputTokens,resolvedModelMaxOutputTokens=modelMetadata.limits?.maxOutputTokens,modelCapabilities=modelMetadata.capabilities,reasoningEffort=modelMetadata.reasoningEffort,runtimeConfig={modelId:providerModel??"deepseek-v3.1",...adapter?{adapter}:{},...providerId?{provider:providerId}:{},baseUrl:providerBaseUrl,apiKey:providerApiKey,...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:saved.interleavedThinking===!0||modelDeclaresInterleavedReasoning(providerModel)?!0:void 0,reasoningEffort};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_LANG)setPromptLocale(mergedEnv.DIMCODE_LANG);if(!mergedEnv.DIMCODE_THEME&&readOptionalString3(saved.themeMode))mergedEnv.DIMCODE_THEME=readOptionalString3(saved.themeMode);if(!mergedEnv.DIMCODE_REASONING_EFFORT&&reasoningEffort)mergedEnv.DIMCODE_REASONING_EFFORT=reasoningEffort;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:cache2,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:readFile9},path25]=await Promise.all([import("node:fs/promises"),import("node:path")]),raw=await readFile9(path25.join(cwd,"package.json"),"utf8"),parsed=JSON.parse(raw),v=typeof parsed?.version==="string"?parsed.version:null;return v&&v.trim()?v.trim():null}catch{return null}}async function resolveStartupSessionId(opts){return readOptionalString3(opts.envSessionId)}function createNoopToolRunner(){return async(call3)=>{let name15=String(call3?.name??"tool");return{id:String(call3?.id??"tool"),status:"error",output:["Tool execution is handled by the DimCode agent.",`This UI cannot run tool "${name15}" locally.`].join(`
|
|
2411
2411
|
`)}}}async function healOAuthConnectionFromTokens(store3,env3){try{let provider=store3.state.provider,existing=(provider.connections??{})[NEXT_API_OAUTH_PROVIDER_ID],existingApiKey=String(existing?.apiKey??"").trim(),existingLifecycle=existing?.lifecycle;if(existingApiKey&&existingLifecycle==="created")return;let tokens=await getOAuthTokens(NEXT_API_OAUTH_PROVIDER_ID,env3),accessToken=String(tokens?.access??"").trim();if(!accessToken)return;let relayBaseUrl=String(tokens?.relayBaseUrl??"").trim()||`${NEXT_API_OAUTH_ISSUER}/v1`,existingModels=Array.isArray(existing?.models)?existing.models:[],activeModelId=String(provider.activeModelByProvider?.[NEXT_API_OAUTH_PROVIDER_ID]??"").trim(),seededModels=existingModels.length?[...existingModels]:activeModelId?[{id:activeModelId}]:[];if(provider.connections={...provider.connections??{},[NEXT_API_OAUTH_PROVIDER_ID]:{apiKey:accessToken,baseUrl:relayBaseUrl,lifecycle:"created",...seededModels.length?{models:seededModels}:{}}},store3.state.activeBindingStatus?.kind==="unavailable_pending_user")store3.state.activeBindingStatus={kind:"bound"};debugLog2("oauth.connection.auto_heal",{providerId:NEXT_API_OAUTH_PROVIDER_ID,hadExistingApiKey:Boolean(existingApiKey),hadExistingLifecycle:Boolean(existingLifecycle),seededModelCount:seededModels.length})}catch(error53){debugLog2("oauth.connection.auto_heal_error",{providerId:NEXT_API_OAUTH_PROVIDER_ID,error:error53 instanceof Error?error53.message:String(error53)})}}async function commitToFile(filePath,mutation,options={}){let[{chmod:chmod2,mkdir:mkdir12,open:open2,readFile:readFile9,rename:rename5,rm:rm5},path25]=await Promise.all([import("node:fs/promises"),import("node:path")]),dir=path25.dirname(filePath);await mkdir12(dir,{recursive:!0});let current;try{let raw=await readFile9(filePath,"utf8"),parsed=JSON.parse(raw);current=options.parse?options.parse(parsed):parsed}catch{current=void 0}if(current===void 0&&options.fallback!==void 0)current=options.fallback;let next=mutation(current),pid=globalThis.process?.pid??"p",random2=`${Date.now()}-${Math.random().toString(16).slice(2)}`,tmp=`${filePath}.${pid}.${random2}.tmp`,data=`${JSON.stringify(next,null,2)}
|
|
2412
2412
|
`,handle=null;try{handle=await open2(tmp,"w",384),await handle.writeFile(data,{encoding:"utf8"}),await handle.sync(),await handle.close(),handle=null,await rename5(tmp,filePath),await chmod2(filePath,384).catch(()=>{});let dirHandle=null;try{dirHandle=await open2(dir,"r"),await dirHandle.sync()}catch{}finally{await dirHandle?.close().catch(()=>{})}return next}catch(error53){if(handle)try{await handle.close()}catch{}throw await rm5(tmp,{force:!0}).catch(()=>{}),error53}}function createFileCommitQueue(commit){let tail=Promise.resolve();return()=>{let run=tail.catch(()=>{}).then(commit);return tail=run.catch(()=>{}),run}}function parseVersionedFile(value){if(!value||typeof value!=="object")return;return value.version===1?value:void 0}function parseMcpJsonFile(value){if(!value||typeof value!=="object")return;let servers=value.mcpServers;return Array.isArray(servers)?{mcpServers:servers}:void 0}function cloneMcpServers(servers){return JSON.parse(JSON.stringify(Array.isArray(servers)?servers:[]))}function createDimSdkStorage(opts){let backend=opts.sessionsBackend??null,settingsFallback={cache:opts.cache,config:opts.config},toolsFallback={tools:opts.tools},mcpFallback={mcpJson:{mcpServers:cloneMcpServers(opts.mcpServers)}},pendingSettingsDraft=null,savedSettingsDraft=settingsFallback,writeSettingsQueue=createFileCommitQueue(async()=>{let draft=pendingSettingsDraft;if(!draft)return;let[cache2,config2]=await Promise.all([commitToFile(opts.cacheFile,()=>draft.cache,{fallback:settingsFallback.cache,parse:parseVersionedFile}),commitToFile(opts.configFile,()=>draft.config,{fallback:settingsFallback.config,parse:parseVersionedFile})]);savedSettingsDraft={cache:cache2,config:config2}}),pendingToolsDraft=null,savedToolsDraft=toolsFallback,writeToolsQueue=createFileCommitQueue(async()=>{let draft=pendingToolsDraft;if(!draft)return;savedToolsDraft={tools:await commitToFile(opts.toolsFile,()=>draft.tools,{fallback:toolsFallback.tools,parse:parseVersionedFile})}}),pendingMcpDraft=null,savedMcpDraft=mcpFallback,writeMcpQueue=createFileCommitQueue(async()=>{let draft=pendingMcpDraft;if(!draft||!opts.mcpJsonFile)return;savedMcpDraft={mcpJson:await commitToFile(opts.mcpJsonFile,()=>draft.mcpJson,{fallback:mcpFallback.mcpJson,parse:parseMcpJsonFile})}});return{applyBaseline(baseline){if(baseline.cache||baseline.config)settingsFallback={cache:baseline.cache??settingsFallback.cache,config:baseline.config??settingsFallback.config},savedSettingsDraft=settingsFallback;if(baseline.tools)toolsFallback={tools:baseline.tools},savedToolsDraft=toolsFallback;if(baseline.mcpServers)mcpFallback={mcpJson:{mcpServers:cloneMcpServers(baseline.mcpServers)}},savedMcpDraft=mcpFallback},async saveSettings(draft){return pendingSettingsDraft=draft,await writeSettingsQueue(),savedSettingsDraft},async saveTools(draft){return pendingToolsDraft=draft,await writeToolsQueue(),savedToolsDraft},async saveMcp(draft){return pendingMcpDraft=draft,await writeMcpQueue(),savedMcpDraft},async updateSessionMetadata(draft){if(!backend||typeof backend.updateMetadata!=="function")return;let sessionId=String(draft.sessionId??"").trim();if(!sessionId)return;try{await backend.updateMetadata(sessionId,draft.metadata)}catch(error53){debugLog2("sessions.metadata.commit_failed",{error:error53 instanceof Error?error53.message:String(error53),sessionId})}}}}init_runtime();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 readSavedDebugLogMode(mode){return mode==="auto"?"auto":"off"}var MessageRoles=["user","assistant","tool"];var AssistantContentPartTypes=["status","thinking","markdown","tool_call","tool_output","tool_result","approve","todo","plan","llm_meta","info"];var GoatChainMessageTypes=[...MessageRoles,...AssistantContentPartTypes];function makeBase(fg2,bg){let out={};for(let t of GoatChainMessageTypes)out[t]={fg:fg2,bg};return out}var themeRegistry=new Map,DARK_MESSAGE_COLORS=Object.freeze({...makeBase("#e5e5e5","#0d0d0d"),user:{fg:"#e5e5e5",bg:"#1a1a1a"},assistant:{fg:"#e5e5e5",bg:"#0d0d0d"},markdown:{fg:"#e5e5e5",bg:"#0d0d0d"},tool_call:{fg:"#ffd75f",bg:"#0d0d0d"},tool:{fg:"#e5e5e5",bg:"#0d0d0d"},tool_output:{fg:"#5fd7d7",bg:"#0d0d0d"},tool_result:{fg:"#e5e5e5",bg:"#0d0d0d"},thinking:{fg:"#5fd7d7",bg:"#0d0d0d"},plan:{fg:"#d75fd7",bg:"#0d0d0d"},todo:{fg:"#5fd75f",bg:"#0d0d0d"},status:{fg:"#8a8a8a",bg:"#1a1a1a"},approve:{fg:"#ffd75f",bg:"#0d0d0d"},info:{fg:"#ffd75f",bg:"#0d0d0d"}}),LIGHT_MESSAGE_COLORS=Object.freeze({...makeBase("#1a1a1a","#fbfaf6"),user:{fg:"#1a1a1a",bg:"#ececea"},assistant:{fg:"#1a1a1a",bg:"#fbfaf6"},markdown:{fg:"#1a1a1a",bg:"#fbfaf6"},tool_call:{fg:"#b07d00",bg:"#fbfaf6"},tool:{fg:"#1a1a1a",bg:"#fbfaf6"},tool_output:{fg:"#0e8a8a",bg:"#fbfaf6"},tool_result:{fg:"#1a1a1a",bg:"#fbfaf6"},thinking:{fg:"#0e8a8a",bg:"#fbfaf6"},plan:{fg:"#8b3fc4",bg:"#fbfaf6"},todo:{fg:"#07845b",bg:"#fbfaf6"},status:{fg:"#6a6a6a",bg:"#ececea"},approve:{fg:"#b07d00",bg:"#fbfaf6"},info:{fg:"#b07d00",bg:"#fbfaf6"}});themeRegistry.set("goat-dark",{label:"Goat Dark",colorMode:"dark",messageColors:DARK_MESSAGE_COLORS});themeRegistry.set("goat-light",{label:"Goat Light",colorMode:"light",messageColors:LIGHT_MESSAGE_COLORS});themeRegistry.set("monokai-dark",{label:"Monokai Dark",colorMode:"dark",messageColors:DARK_MESSAGE_COLORS});themeRegistry.set("monokai-light",{label:"Monokai Light",colorMode:"light",messageColors:LIGHT_MESSAGE_COLORS});var ThemeModes=Object.freeze({dark:DARK_MESSAGE_COLORS,light:LIGHT_MESSAGE_COLORS});function normalizeThemeId(raw){let v=String(raw??"").trim().toLowerCase();if(themeRegistry.has(v))return v;if(v==="light"||v==="dim-light")return"goat-light";if(v==="dark"||v==="dim-dark")return"goat-dark";if(v)return v;return"goat-dark"}function normalizeThemeMode(mode){let v=String(mode??"").trim().toLowerCase();if(v==="light"||v==="monokai-light")return"light";if(v==="dark"||v==="monokai-dark")return"dark";let entry=themeRegistry.get(v);if(entry)return entry.colorMode;if(v==="goatchain"||v==="dimcode"||v==="mono"||v==="contrast")return"dark";return"dark"}function detectSystemTheme(env3){try{let mm=globalThis?.matchMedia;if(typeof mm==="function")return mm("(prefers-color-scheme: dark)").matches?"dark":"light"}catch{}let procEnv=env3??globalThis?.process?.env??{},colorfgbg=String(procEnv.COLORFGBG??"").trim();if(colorfgbg){let parts=colorfgbg.split(/[;,]/).map((p)=>p.trim()).filter(Boolean),bgRaw=parts[parts.length-1],bg=Number.parseInt(bgRaw??"",10);if(Number.isFinite(bg))return bg>=7?"light":"dark"}return"dark"}function resolveInitialThemeId(env3,opts){let pref=readPrefixedEnv2(env3,"THEME");if(pref)return normalizeThemeId(pref);if(opts?.preferSystemDefault)return"system";return detectSystemTheme(env3)==="light"?"goat-light":"goat-dark"}function resolveShikiTheme(mode){return(typeof mode==="string"?normalizeThemeMode(mode):"dark")==="light"?"github-light":"github-dark-default"}init_runtime();var de_default2={common:{apply:"Anwenden",cancel:"Abbrechen",close:"Schließen",confirm:"Bestätigen",yes:"Ja",no:"Nein",exit:"Beenden",back:"Zurück",next:"Weiter",save:"Speichern",empty:"—",unknownError:"Unbekannter Fehler",inputClearTip:"Ctrl+C löschen",total:"Gesamt"},configDialog:{title:"Einstellungen",hint:"Tab/Shift+Tab Feld wechseln • Enter Anwenden",modelsTitle:"Modelle (benutzerdefiniert)",modelsPlaceholder:"modell-a, modell-b",contextWindowTitle:"Kontextfenster",contextWindowLocked:"Kontextfenster (modelldefiniert)",contextWindowPlaceholder:"128000",temperatureTitle:"Temperatur",temperaturePlaceholder:"0.7",temperatureValidationError:'Temperatur: nur Zahlen und "."',maxTokensTitle:"Max. Ausgabe-Tokens",maxTokensPlaceholder:"32000",baseUrlTitle:"Base URL (OpenAI-kompatibel)",baseUrlPlaceholder:"https://api.openai.com/v1",apiKeyCurrentPrefix:"Aktuell:",apiKeyNotSet:"(nicht gesetzt)",apiKeyTitle:"API Key",apiKeyPlaceholder:"Neuen Key einfügen zum Aktualisieren (leer = beibehalten)",interleavedThinkingTitle:"Verschränktes Denken (Leertaste umschalten)",interleavedThinkingLocked:"Verschränktes Denken (modelldefiniert)",interleavedThinkingOpen:"An",interleavedThinkingClose:"Aus",tipIntensityTitle:"Tipp-Intensität",tipIntensityOff:"Aus",tipIntensityLow:"Niedrig",tipIntensityStandard:"Standard",shortcutsTitle:"Tastenkürzel",shortcutCommandsLabel:"Befehle",shortcutTimelineLabel:"Zeitleiste",shortcutNewSessionLabel:"Neue Sitzung",shortcutsPlaceholder:"z.B. mod+p",shortcutsHint:"Verwende mod/ctrl/alt/shift + Taste (a-z, 0-9, F1-F12)."},languageDialog:{title:"Sprache",hint:"Enter Anwenden",languageTitle:"Sprache",languageEnglish:"English",languageChinese:"简体中文",languageJapanese:"日本語",languageKorean:"한국어",languageTraditionalChinese:"繁體中文",languageIndonesian:"Bahasa Indonesia",languageGerman:"Deutsch",languageFrench:"Français",languageSpanish:"Español",languagePortugueseBrazil:"Português (Brasil)",languagePortuguesePortugal:"Português (Portugal)"},reasoningEffortDialog:{title:"Denkstärke",hint:"Enter Anwenden",effortTitle:"Denkstärke",applied:"Denkstärke auf {effort} gesetzt",option:{low:"Niedrig",medium:"Mittel",high:"Hoch",xhigh:"Sehr hoch",max:"Maximum",minimal:"Minimal",none:"Keine",off:"Aus",auto:"Auto"}},toolSettingsDialog:{title:"Werkzeugeinstellungen",hint:"Enter Anwenden • Esc Abbrechen",websearchTitle:"WebSearch API Key",apiKeyCurrentPrefix:"Aktuell:",apiKeyNotSet:"(nicht gesetzt)",apiKeyInvalidCjk:"API-Schlüssel darf keine chinesischen Zeichen enthalten.",apiKeyInvalidSpaces:"API-Schlüssel darf keine Leerzeichen enthalten.",apiKeyPlaceholder:"Serper API Key einfügen"},pluginsDialog:{title:"Plugins",hint:"Plugin zum Konfigurieren wählen",serperSearch:"Serper Search",serperSearchDetail:"Websuche über Serper API",configured:"Konfiguriert",notConfigured:"Nicht konfiguriert",serperConfigTitle:"Serper Search Einstellungen",serperConfigHint:"Tab Wechseln • Enter Anwenden • Esc Abbrechen"},skillsDialog:{title:"Skills",hint:"Enter Anwenden",empty:"Keine Skills verfügbar",emptyFiltered:"Keine passenden Skills"},timelineDialog:{title:"Verlauf",hint:"Enter Öffnen",empty:"Noch keine Nachrichten",emptyFiltered:"Keine passenden Einträge"},mcpSettingsDialog:{title:"MCP",hint:"mcp.json bearbeiten, um MCP-Server zu konfigurieren",configFileLabel:"Konfigdatei:",noServersHint:"Noch keine MCP-Server konfiguriert.",serverCount:"{count} Server konfiguriert",guideText:"Bearbeite die Datei oben, um MCP-Server hinzuzufügen oder zu ändern.",openFile:"Datei öffnen",reload:"Neu laden",close:"Schließen",reloaded:"MCP-Konfiguration neu geladen.",reloadFailed:"Neuladen fehlgeschlagen: {error}",status:"Status",toolCount:"Werkzeuge",disabled:"deaktiviert",testConnection:"Testen",testing:"Verbindungen testen...",testComplete:"Test abgeschlossen.",testPartial:"Test mit Fehlern abgeschlossen.",testFailed:"Verbindung fehlgeschlagen: {error}",invalidJson:"Ungültiges JSON: {error}",invalidShape:'Ungültiges MCP-JSON: "mcpServers" erwartet.',invalidServer:"Ungültiger MCP-Server: {name}",noServers:"Keine MCP-Server gefunden.",lintOk:"JSON-Syntax OK",lintAt:"{error} (Zeile {line}, Spalte {column})",lintUnclosed:"Nicht geschlossenes {char} (Zeile {line}, Spalte {column})",lintInvalid:"{error}",exampleFormat:"Beispielformat:"},toolApprovalsDialog:{title:"Werkzeugfreigaben",useAuto:"Auto",useNormal:"Normal",useStrict:"Streng",close:"Schließen",focusedTitleAuto:"AUTO",focusedTitleNormal:"NORMAL",focusedTitleStrict:"STRENG",focusedTitleClose:"SCHLIEẞEN",focusedDescAuto:"Alle Werkzeugaufrufe automatisch freigeben. Keine Bestätigung (schnellsten, am wenigsten sicher).",focusedDescNormal:"Nur-Lese-Werkzeuge automatisch freigeben. Vor Schreib-/Ausführungswerkzeugen nachfragen.",focusedDescStrict:"Jeden Werkzeugaufruf bestätigen (am sichersten, am langsamsten).",focusedDescClose:"Dialog schließen, ohne die aktuelle Einstellung zu ändern.",currentPrefix:"Aktuell: {mode}",tip:"Tipp: Tab oder ↑/↓ zwischen Schaltflächen, Enter bestätigen, Esc schließen."},settingsDialog:{pendingApproval:"Bitte die ausstehende Freigabe vor Einstellungsänderung erledigen.",invalidShortcut:"Ungültiges Kürzel für {label}: {value}",shortcutCommands:"Kürzel für Befehle",shortcutTimeline:"Kürzel für Zeitleiste",shortcutNewSession:"Kürzel für neue Sitzung",toolApprovalsApplied:"Werkzeugfreigaben: {mode}",applied:"Einstellungen angewendet."},exitAppDialog:{title:"DimCode beenden",confirm:"Jetzt beenden?",warning:"Eine Agent-Antwort ist noch in Bearbeitung. Beenden bricht sie ab.",reasonPrefix:"Grund: {reason}"},approvalDialog:{title:"Werkzeugberechtigung freigeben",toolLabel:"Werkzeug: {tool}{suffix}",toolLabelSuffix:" ({description})",permissionLabel:"Berechtigung: {permission} ({risk})",descriptionLabel:"Beschreibung: {description}",commandLabel:"Befehl:",inlineActionHint:"↑/← Zurück ↓/→ Weiter Enter Bestätigen 1/2/3 Wählen",inlineActionHintCompact:"←/→ Bewegen Enter Bestätigen 1/2/3 Wählen",buttons:{approve:"Freigeben",alwaysApprove:"Immer freigeben",deny:"Ablehnen",always:"Immer",ok:"OK",no:"Nein",y:"J",all:"Alle",n:"N"}},askUserDialog:{noQuestionsTitle:"Keine Fragen",noQuestionsBody:"Keine Fragen zu beantworten.",title:"Frage {index}/{total}: {header}",defaultHeader:"Frage",prev:"Zurück",next:"Weiter",submit:"Absenden",otherOption:"Sonstiges",otherDetail:"Eigene Antwort eingeben",inlineHintOptions:"Tasten: ↑↓ bewegen, ←→ Frage wechseln, Enter auswählen.",inlineHintMulti:"Mehrfachauswahl: Leertaste schaltet Häkchen um.",inlineHintButtons:"Tab zu Schaltflächen, ←→ wechseln, Enter aktivieren, ↑ zurück zu Optionen.",inlineHintNav:"Ctrl+Left / Ctrl+Right (oder Ctrl+A / Ctrl+E) Frage wechseln.",inlineHintSubmit:"Ctrl+Enter absenden, Esc abbrechen.",inlineButtonPrev:"[Zurück]",inlineButtonNext:"[Weiter]",inlineButtonSubmit:"[Absenden]",inlineButtonCancel:"[Abbrechen]",inlineActionHint:"Leertaste Wählen ← Zurück → Weiter Enter Weiter/Absenden Esc Abbrechen",inlineActionHintCompact:"Leertaste Wählen ←/→ Zurück/Weiter Enter Weiter/Absenden Esc Abbrechen",optionsSummaryAll:"{count} Optionen",optionsSummaryVisibleMore:"{count} Optionen ({start}-{end}) ↓ mehr",multiSelectHint:"[Mehrfachauswahl] Leertaste umschalten, Enter bestätigen",singleSelectHint:"[Einzelauswahl] Pfeiltasten, Enter bestätigen",customAnswerLabel:"Eigene Antwort:",customAnswerPlaceholder:"Antwort eingeben...",otherPlaceholder:"Sonstiges gewählt — Antwort eingeben und Enter drücken."},nextApiOAuthDialog:{title:"DimCode OAuth Anmeldung",copyUrl:"URL kopieren",login:"Anmelden",logout:"Abmelden",statusTitle:"Status",statusAuthenticated:"✓ Angemeldet als {email}",statusLoading:"⏳ Authentifizierung...",statusNotLoggedIn:"✗ Nicht angemeldet",instructionAuthenticated:"↑↓ navigieren, Enter auswählen oder Zahlen 1-9",instructionLoading:"C drücken, um die URL zu kopieren, falls der Browser nicht geöffnet wurde",instructionNeedsSetup:"OAuth redirect_uri, Scopes und Aktivierungsstatus prüfen, dann erneut versuchen",instructionWithUrl:"C drücken, um die OAuth-URL zu kopieren, oder Enter drücken, um den Browser zu öffnen",instructionUnauthed:"Enter drücken, um sich mit DimCode OAuth anzumelden, oder Esc zum Schließen",instructionManualCallback:"Kopieren Sie die URL unten, melden Sie sich im Browser an und fügen Sie die weitergeleitete URL in das Eingabefeld ein.",oauthUrlTitleLoading:"OAuth URL (kopieren, falls Browser nicht geöffnet)",oauthUrlTitleReady:"OAuth URL (bereit)",scrollIndicator:" [{start}-{end} von {total}]",selectModelTitle:"Modell wählen (↑↓/1-9, Enter zum Auswählen){indicator}",aboutTitle:"Über DimCode OAuth",setupTitle:"OAuth-Anmeldefehler",aboutBulletOne:"• Verwendet den integrierten DimCode OAuth-Client",aboutBulletTwo:"• Ruft Relay-Modelle nach Anmeldung ab und speichert die Anbieterkonfiguration",aboutBulletThree:"• Verwendet OAuth-Refresh-Tokens statt eines langlebigen API Keys",viewAllPlans:"Alle Pläne ansehen →",useModel:"Use Model",submitCallbackUrl:"Submit URL",defaultAccount:"DimCode-Konto",callbackUrlLabel:"Remote? Paste callback URL here (Enter to submit, Esc to close)",callbackUrlPlaceholder:"http://localhost:PORT/auth/callback?code=…&state=…",callbackUrlHint:"Press Enter to submit. Esc to close.",usage:{title:"Usage",hoursLabel:"{hours}-hour quota",daysLabel:"{days}-day quota",reset:"{value} until reset",countdownDays:"{days}d {hours}h",countdownHours:"{hours}h {minutes}m",countdownMinutes:"{minutes}m",percentUsed:"{pct}% used",loading:"Loading usage…",empty:"No active quota windows yet.",fetchFailed:"Failed to load usage: {error}"},toast:{generatingUrl:"OAuth-URL wird generiert...",urlReady:"OAuth-URL bereit! Kopieren oder Enter drücken, um den Browser zu öffnen.",generateUrlFailed:"OAuth-URL konnte nicht generiert werden: {error}",startingLogin:"OAuth-Anmeldung wird gestartet...",browserOpened:"Browser geöffnet. Falls nicht, URL aus dem Dialog kopieren.",copyUrlToLogin:"OAuth-URL aus dem Dialog kopieren zum Anmelden.",urlCopied:"OAuth-URL in die Zwischenablage kopiert.",urlCopyFailed:"OAuth-URL konnte nicht kopiert werden.",authSuccess:"Erfolgreich mit DimCode OAuth authentifiziert!",loginFailed:"OAuth-Anmeldung fehlgeschlagen: {error}",loggedOut:"Von DimCode OAuth abgemeldet",loggedOutWithRemoteWarning:"Von DimCode OAuth abgemeldet, aber Remote-Widerruf fehlgeschlagen: {error}",logoutFailed:"Abmeldung fehlgeschlagen: {error}",initFailed:"Dialog-Initialisierungsfehler: {error}",modelSwitched:"Modell gewechselt zu {model}",selectModelFailed:"Modellauswahl fehlgeschlagen: {error}",submittingCallbackUrl:"Submitting callback URL…",callbackUrlNoPending:"no pending OAuth session (reopen the dialog)",callbackUrlMissingFields:"callback URL is missing the code or state parameter"}},debugTryDialog:{titleDebug:"Debug",titleDebugging:"Debugging",copy:"kopieren",proceed:"fortfahren",fixed:"behoben",body:"Ich habe Debug-Logs (und möglicherweise einen Fix) hinzugefügt. Bitte versuche nun, das Problem zu reproduzieren, und wähle dann ein Ergebnis."},exitSessionDialog:{title:"Sitzung beenden",confirm:"Aktuelle Sitzung beenden und zur Startseite?",note:"Die nächste Nachricht startet eine neue Sitzung."},messageActionsDialog:{title:"Nachrichtenaktionen",revert:"Nachrichten zurücksetzen",revertWithFiles:"Nachrichten und Dateiänderungen zurücksetzen",revertKeepFiles:"Nachrichten zurücksetzen (Dateiänderungen behalten)",revertFilesOnly:"Nur Dateiänderungen zurücksetzen",copy:"Nachrichtentext in Zwischenablage kopieren",fork:"Abspalten — neue Sitzung erstellen",pin:"Nachricht anheften",unpin:"Nachricht lösen"},pathPickerDialog:{hint:"↑/↓ wählen • Tab vervollständigen • Enter bestätigen • Esc schließen"},providerConnectDialog:{title:"{provider} verbinden",providerFallback:"Anbieter",hint:"Tab wechseln • Ctrl+C löschen • Enter Anwenden",hintOpenAI:"Tab wechseln • Ctrl+C löschen • Enter Anwenden",hintGemini:"Tab wechseln • Ctrl+C löschen • Enter Anwenden",hintAnthropic:"Tab wechseln • Ctrl+C löschen • Enter Anwenden",hintGeneric:"Tab wechseln • Ctrl+C löschen • Enter Anwenden",applyingHint:"Verbindung wird getestet, bitte warten...",applyingButton:"Anwenden...",testConnection:"Verbindung testen",baseUrlStatusAutoFix:"Auto-Korrektur: {value}",baseUrlStatusInvalid:"Base URL muss http(s) sein",baseUrlTitle:"Base URL",baseUrlPlaceholder:"https://api.example.com/v1",apiKeyTitle:"API Key",apiKeyPlaceholder:"Neuen Key einfügen zum Aktualisieren (leer = beibehalten)",apiKeyCurrent:"Aktuell: {value}",apiKeyNotSet:"Aktuell: (nicht gesetzt)",apiKeyInvalidCjk:"API-Schlüssel darf keine chinesischen Zeichen enthalten.",apiKeyInvalidSpaces:"API-Schlüssel darf keine Leerzeichen enthalten.",clearKey:"Löschen",useDetectedKey:"{name} verwenden",disconnectButton:"Trennen",fetchButton:"Abrufen",refreshButton:"Aktualisieren",autoPromptCacheKeyTitle:"auto prompt_cache_key",sessionIdTitle:"session_id",toggleOff:"Aus",toggleOn:"An",toggleHint:"Tab wechseln • ←/→ ändern • Leertaste umschalten"},redoConfirmDialog:{title:"Wiederherstellen bestätigen",body:"Bist du sicher, dass du die zurückgesetzten Nachrichten wiederherstellen möchtest?"},renameSessionDialog:{title:"Sitzung umbenennen",label:"Sitzungsname",placeholder:"z.B. Planungsnotizen"},sessionsDialog:{timeNow:"jetzt",timeMinutes:"{count} Min.",timeHours:"{count} Std.",timeDays:"{count} T.",newSession:"Neue Sitzung",title:"Sitzungen ({count})",titleScoped:"Sitzungen ({count}/{total})",scope:"Bereich: {cwd}",loading:"Laden…",confirmDelete:"Löschen bestätigen: Nochmal Entf drücken",header:"{count} Sitzungen • Pfeiltasten navigieren • Enter auswählen{range}{activity}",headerRange:" • Anzeige {start}-{end}",runningCount:"{count} aktiv",pausedCount:"{count} warten auf Bestätigung",hint:"Tippen zum Springen • ←/→ Schaltflächen • Enter bestätigen • Esc schließen",focusPrefix:"Fokus: {focus}",focusList:"Liste",focusButtons:"Schaltflächen",noSessionsCwd:"Keine Sitzungen in diesem Verzeichnis",noSessions:"Noch keine gespeicherten Sitzungen",nodeOnly:"Sitzungen sind nur im Node/CLI-Modus verfügbar.",newSessionTitle:"Neue Sitzung",newSessionTarget:"eine neue Sitzung",busy:{agentResponding:"Agent antwortet noch",awaitingAskUser:"Warte auf AskUser-Antwort",awaitingToolApproval:"Warte auf Werkzeugfreigabe",pendingApproval:"Freigabe ausstehend"},buttons:{open:"Öffnen",delete:"Löschen",deleteConfirm:"Löschen (bestätigen)",scope:"Bereich: {scope}",scopeCwd:"VZ",scopeAll:"Alle",refresh:"Aktualisieren"}},sessionsOverlay:{title:"Sitzungen",hint:"Enter Auswählen • Strg+R Aktualisieren • Strg+W Bereich • Strg+D Löschen",loading:"Sitzungen werden geladen...",empty:"Noch keine gespeicherten Sitzungen.",loadingMore:"Lade weitere…",hasMore:"↓ mehr",scope:{cwdOnly:"nur cwd",allCwd:"alle cwds"}},switchSessionDialog:{title:"Sitzung wechseln",confirm:"Wechseln & Unterbrechen",target:"Zu {target} wechseln?",fallback:"Sitzung jetzt wechseln?",warning:"Dadurch wird die aktuelle Antwort/der aktuelle Ablauf in der aktiven Sitzung unterbrochen.",reason:"Grund: {reason}"},themeDialog:{title:"Design",hint:"Enter Anwenden",mode:"Modus",light:"Hell",dark:"Dunkel",unavailable:"Dieses Terminal unterstützt keine wechselbaren Designs.",fallback:"Ein festes Hell/Dunkel-ANSI-Fallback-Design wird hier verwendet.",tip:"Tipp: Standard folgt dem Systemdesign."},commandPalette:{searchPlaceholder:"Suchen…",noMatches:"Keine Treffer",hint:"Tippen zum Filtern • Enter: öffnen • Esc: schließen",title:"Befehle"},skills:{title:"Fähigkeiten"},help:{title:"Hilfe",modeLabel:"Modus: {mode}",modeDetail:"Aktueller Assistentenmodus.",shortcutsLabel:"Tastenkürzel",onboarding:`Willkommen! Schnellstart:
|
|
2413
2413
|
1) /connect: Anbieter verbinden
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goatchain-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.72",
|
|
4
4
|
"description": "goatchain — AI coding agent CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"optionalDependencies": {
|
|
14
|
-
"goatchain-cli-darwin-arm64": "0.0.
|
|
15
|
-
"goatchain-cli-darwin-x64": "0.0.
|
|
16
|
-
"goatchain-cli-linux-arm64": "0.0.
|
|
17
|
-
"goatchain-cli-linux-x64": "0.0.
|
|
18
|
-
"goatchain-cli-windows-x64": "0.0.
|
|
14
|
+
"goatchain-cli-darwin-arm64": "0.0.72",
|
|
15
|
+
"goatchain-cli-darwin-x64": "0.0.72",
|
|
16
|
+
"goatchain-cli-linux-arm64": "0.0.72",
|
|
17
|
+
"goatchain-cli-linux-x64": "0.0.72",
|
|
18
|
+
"goatchain-cli-windows-x64": "0.0.72"
|
|
19
19
|
}
|
|
20
20
|
}
|