bkper 5.8.1 → 5.8.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.
@@ -2278,7 +2278,7 @@ Options:
2278
2278
  `))});try{switch(options.command){case"install":return await packageManager.installAndPersist(source,{local:options.local}),console.log(source_default.green(`Installed ${source}`)),!0;case"remove":return await packageManager.removeAndPersist(source,{local:options.local})?(console.log(source_default.green(`Removed ${source}`)),!0):(console.error(source_default.red(`No matching package found for ${source}`)),process.exitCode=1,!0);case"list":{let configuredPackages=packageManager.listConfiguredPackages(),userPackages=configuredPackages.filter(pkg2=>pkg2.scope==="user"),projectPackages=configuredPackages.filter(pkg2=>pkg2.scope==="project");if(configuredPackages.length===0)return console.log(source_default.dim("No packages installed.")),!0;let formatPackage=pkg2=>{let display=pkg2.filtered?`${pkg2.source} (filtered)`:pkg2.source;console.log(` ${display}`),pkg2.installedPath&&console.log(source_default.dim(` ${pkg2.installedPath}`))};if(userPackages.length>0){console.log(source_default.bold("User packages:"));for(let pkg2 of userPackages)formatPackage(pkg2)}if(projectPackages.length>0){userPackages.length>0&&console.log(),console.log(source_default.bold("Project packages:"));for(let pkg2 of projectPackages)formatPackage(pkg2)}return!0}case"update":{let target=options.updateTarget??{type:"self"};if(options.showExtensionsSkippedNote&&console.log(source_default.dim(`Extensions are skipped. Run ${APP_NAME} update --extensions to update extensions.`)),updateTargetIncludesExtensions(target)){let updateSource=target.type==="extensions"?target.source:void 0;await packageManager.update(updateSource),console.log(updateSource?source_default.green(`Updated ${updateSource}`):source_default.green("Updated packages"))}if(updateTargetIncludesSelf(target)){let managedInstallRoot=getActiveManagedInstallRoot();if(managedInstallRoot&&options.force)return console.error(source_default.red(`Managed ${APP_NAME} installations do not support --force; rerun the installer to repair this installation.`)),process.exitCode=1,!0;let selfUpdatePlan=await getSelfUpdatePlan(options.force);if(!selfUpdatePlan.shouldRun)return!0;if(managedInstallRoot){selfUpdatePlan.note&&printSelfUpdateNote(selfUpdatePlan.note);try{console.log(source_default.dim(`Updating managed ${APP_NAME} installation...`)),await runManagedSelfUpdate(managedInstallRoot,selfUpdatePlan.version)}catch(error){let message=error instanceof Error?error.message:"Unknown managed update error";return console.error(source_default.red(`Error: ${message}`)),process.exitCode=1,!0}return console.log(source_default.green(`Updated ${APP_NAME} from ${VERSION} to ${selfUpdatePlan.version}`)),!0}let installMethod=detectInstallMethod();if(process.platform==="win32"&&installMethod!=="npm"&&installMethod!=="pnpm")return console.error(source_default.red(`${APP_NAME} self-update on Windows is only supported for npm and pnpm installs.`)),console.error(source_default.dim(`Detected install method: ${installMethod}. Update ${APP_NAME} manually.`)),process.exitCode=1,!0;let selfUpdateTarget={packageName:selfUpdatePlan.packageName,installSpec:selfUpdatePlan.installSpec},selfUpdateCommand=getSelfUpdateCommand(PACKAGE_NAME,selfUpdateNpmCommand,selfUpdateTarget);if(!selfUpdateCommand)return printSelfUpdateUnavailable(selfUpdateNpmCommand,selfUpdateTarget),process.exitCode=1,!0;selfUpdatePlan.note&&printSelfUpdateNote(selfUpdatePlan.note);try{installMethod==="npm"&&prepareWindowsNpmSelfUpdate(),await runSelfUpdate(selfUpdateCommand)}catch(error){let message=error instanceof Error?error.message:"Unknown package command error";return console.error(source_default.red(`Error: ${message}`)),installMethod==="pnpm"&&printPnpmSelfUpdateMetadataHint(),printSelfUpdateFallback(selfUpdateCommand),process.exitCode=1,!0}if(console.log(source_default.green(`Updated ${APP_NAME} from ${VERSION} to ${selfUpdatePlan.version}`)),installMethod==="npm"){let installerCommand=process.platform==="win32"?'powershell -c "irm https://pi.dev/install.ps1 | iex"':"curl -fsSL https://pi.dev/install.sh | sh";console.log(),console.log(source_default.yellow(`This npm installation of ${APP_NAME} does not pin its dependencies.`)),console.log(source_default.yellow("Run the installer to migrate to a managed installation that does:")),console.log(),console.log(` ${source_default.bold(installerCommand)}`)}}return!0}}}catch(error){let message=error instanceof Error?error.message:"Unknown package command error";return console.error(source_default.red(`Error: ${message}`)),process.exitCode=1,!0}}var import_proper_lockfile5,DEFAULT_INSTALLER_API_BASE,MANAGED_INSTALL_MARKER,MANAGED_RELEASE_VERSION_RE,SELF_UPDATE_NOTE_MARKDOWN_THEME,CONFIG_COMMAND_USAGE,init_package_manager_cli=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.js"(){init_dist6();init_source();import_proper_lockfile5=__toESM(require_proper_lockfile(),1);init_config_selector2();init_project_trust();init_config();init_model_runtime();init_package_manager();init_project_trust2();init_resource_loader();init_settings_manager();init_trust_manager();init_child_process();init_paths();init_pi_user_agent();init_text();init_version_check();init_windows_self_update();DEFAULT_INSTALLER_API_BASE="https://pi.dev/api/installer/releases",MANAGED_INSTALL_MARKER="managed-install.json",MANAGED_RELEASE_VERSION_RE=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;SELF_UPDATE_NOTE_MARKDOWN_THEME={heading:text=>source_default.bold(source_default.yellow(text)),link:text=>source_default.cyan(text),linkUrl:text=>source_default.dim(text),code:text=>source_default.yellow(text),codeBlock:text=>source_default.dim(text),codeBlockBorder:text=>source_default.dim(text),quote:text=>source_default.dim(text),quoteBorder:text=>source_default.dim(text),hr:text=>source_default.dim(text),listBullet:text=>source_default.yellow(text),bold:text=>source_default.bold(text),italic:text=>source_default.italic(text),strikethrough:text=>source_default.strikethrough(text),underline:text=>source_default.underline(text)};CONFIG_COMMAND_USAGE=`${APP_NAME} config [-l] [--approve|--no-approve]`}});import{createInterface as createInterface6}from"node:readline";async function readPipedStdin(){if(!process.stdin.isTTY)return new Promise(resolve19=>{let data="";process.stdin.setEncoding("utf8"),process.stdin.on("data",chunk=>{data+=chunk}),process.stdin.on("end",()=>{resolve19(data.trim()||void 0)}),process.stdin.resume()})}function reportDiagnostics(diagnostics){for(let diagnostic of diagnostics){let color=diagnostic.type==="error"?source_default.red:diagnostic.type==="warning"?source_default.yellow:source_default.dim,prefix=diagnostic.type==="error"?"Error: ":diagnostic.type==="warning"?"Warning: ":"";console.error(color(`${prefix}${diagnostic.message}`))}}function isTruthyEnvFlag2(value){return value?value==="1"||value.toLowerCase()==="true"||value.toLowerCase()==="yes":!1}function resolveAppMode(parsed,stdinIsTTY,stdoutIsTTY){return parsed.mode==="rpc"?"rpc":parsed.mode==="json"?"json":parsed.print||!stdinIsTTY||!stdoutIsTTY?"print":"interactive"}function toPrintOutputMode(appMode){return appMode==="json"?"json":"text"}function isPlainRuntimeMetadataCommand(parsed){return!parsed.print&&parsed.mode===void 0&&(parsed.help===!0||parsed.listModels!==void 0)}async function runAuthCommand(args){if(isAuthCommandHelp(args))return printAuthCommandHelp(),!0;let command;try{command=parseAuthCommand(args)}catch(error){let message=error instanceof AuthCommandError?error.message:"Failed to parse auth command";return console.error(source_default.red(`Error: ${message}`)),process.exitCode=1,!0}if(!command)return!1;let parsed=parseArgs(command.args);if(parsed.unknownFlags.size>0){let option=parsed.unknownFlags.keys().next().value;return console.error(source_default.red(`Unknown option --${option} for "${getAuthCommandName(command.kind)}".`)),console.error(source_default.dim(`Use "${APP_NAME} --help" or "${getAuthCommandUsage(command.kind)}".`)),process.exitCode=1,!0}try{if(parsed.diagnostics.length>0)throw new AuthCommandError(parsed.diagnostics.map(diagnostic=>diagnostic.message).join(`
2279
2279
  `));if(command.kind!=="check"){let signal=AbortSignal.timeout(15e3),modelRuntime=await ModelRuntime.create({allowModelNetwork:!1,signal}),credential2=await resolveCredentialForPrint(parsed,modelRuntime,command.kind,command.minExpiryMs,signal);return process.stdout.write(`${credential2}
2280
2280
  `),!0}let requestedAuth=validateAuthCommandArgs(parsed,command.kind),result,credential;try{let credentials=command.noRefresh?new ReadOnlyAuthStorage:AuthStorage.create(),modelRuntime=await createAuthCheckModelRuntime(credentials);result=await checkProviderAuth(parsed,modelRuntime,{refresh:!command.noRefresh}),command.credentials&&result.status==="ready"&&(credential=await getProviderCredential(result.provider,modelRuntime,credentials,{refresh:!command.noRefresh}),credential||(result={status:"not_ready",provider:result.provider,reason:"credential_not_available"}))}catch{result={status:"invalid",provider:requestedAuth.provider??requestedAuth.model,reason:"invalid_state"}}let output=command.json?JSON.stringify({...result,...credential?{credentials:credential}:{}}):credential??result.status;process.stdout.write(`${output}
2281
- `),process.exitCode=result.status==="ready"?0:result.status==="not_ready"?1:2}catch(error){let message=error instanceof AuthCommandError?error.message:"Failed to resolve credential";console.error(source_default.red(`Error: ${message}`)),process.exitCode=command.kind==="check"?2:1}return!0}async function prepareInitialMessage(parsed,stdinContent){if(parsed.fileArgs.length===0)return buildInitialMessage({parsed,stdinContent});let{text,images}=await processFileArguments(parsed.fileArgs,{autoResizeImages:!1});return buildInitialMessage({parsed,fileText:text,fileImages:images,stdinContent})}function findLocalSessionByExactId(sessionId,cwd,sessionDir){let path33=SessionManager.findById(cwd,sessionId,sessionDir);return path33?{type:"local",path:path33}:void 0}async function resolveSessionPath(sessionArg,cwd,sessionDir){if(sessionArg.includes("/")||sessionArg.includes("\\")||sessionArg.endsWith(".jsonl"))return{type:"path",path:resolvePath(sessionArg,cwd)};let exactLocalMatch=findLocalSessionByExactId(sessionArg,cwd,sessionDir);if(exactLocalMatch)return exactLocalMatch;let localMatch=(await SessionManager.list(cwd,sessionDir)).find(s2=>s2.id.startsWith(sessionArg));if(localMatch)return{type:"local",path:localMatch.path};let allSessions=await SessionManager.listAll(sessionDir),globalMatch=allSessions.find(s2=>s2.id===sessionArg)??allSessions.find(s2=>s2.id.startsWith(sessionArg));return globalMatch?{type:"global",path:globalMatch.path,cwd:globalMatch.cwd}:{type:"not_found",arg:sessionArg}}async function promptConfirm(message){return new Promise(resolve19=>{let rl=createInterface6({input:process.stdin,output:process.stdout});rl.question(`${message} [y/N] `,answer=>{rl.close(),resolve19(answer.toLowerCase()==="y"||answer.toLowerCase()==="yes")})})}function validateForkFlags(parsed){if(!parsed.fork)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --fork cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateSessionIdFlags(parsed){if(parsed.sessionId===void 0)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1));try{assertValidSessionId(parsed.sessionId)}catch(error){let message=error instanceof Error?error.message:String(error);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function openSessionOrExit(path33,sessionDir){try{return SessionManager.open(path33,sessionDir)}catch(error){let message=error instanceof Error?error.message:String(error);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function forkSessionOrExit(sourcePath,cwd,sessionDir,sessionId){try{return SessionManager.forkFrom(sourcePath,cwd,sessionDir,{id:sessionId})}catch(error){let message=error instanceof Error?error.message:String(error);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}async function createSessionManager(parsed,cwd,sessionDir,settingsManager){if(parsed.noSession||parsed.help||parsed.listModels!==void 0)return SessionManager.inMemory(cwd,parsed.sessionId!==void 0?{id:parsed.sessionId}:void 0);if(parsed.fork){parsed.sessionId&&findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir)&&(console.error(source_default.red(`Session already exists with id '${parsed.sessionId}'`)),process.exit(1));let resolved=await resolveSessionPath(parsed.fork,cwd,sessionDir);switch(resolved.type){case"path":case"local":case"global":return forkSessionOrExit(resolved.path,cwd,sessionDir,parsed.sessionId);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.session){let resolved=await resolveSessionPath(parsed.session,cwd,sessionDir);switch(resolved.type){case"path":case"local":return openSessionOrExit(resolved.path,sessionDir);case"global":return console.log(source_default.yellow(`Session found in different project: ${resolved.cwd}`)),await promptConfirm("Fork this session into current directory?")||(console.log(source_default.dim("Aborted.")),process.exit(0)),forkSessionOrExit(resolved.path,cwd,sessionDir);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.resume)try{let selectedPath=await selectSession((onProgress,signal)=>SessionManager.list(cwd,sessionDir,onProgress,signal),(onProgress,signal)=>SessionManager.listAll(sessionDir,onProgress,signal),settingsManager);return selectedPath||(console.log(source_default.dim("No session selected")),process.exit(0)),SessionManager.open(selectedPath,sessionDir)}finally{stopThemeWatcher()}if(parsed.continue)return SessionManager.continueRecent(cwd,sessionDir);if(parsed.sessionId){let existingSession=findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir);if(existingSession)return SessionManager.open(existingSession.path,sessionDir);console.error(source_default.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`))}return SessionManager.create(cwd,sessionDir,{id:parsed.sessionId})}function buildSessionOptions(parsed,scopedModels,hasExistingSession,modelRuntime,settingsManager){let options={},diagnostics=[],cliThinkingFromModel=!1;if(parsed.provider&&!parsed.model&&diagnostics.push({type:"error",message:`--provider requires --model (for example: --provider ${parsed.provider} --model <pattern>)`}),parsed.model){let resolved=resolveCliModel({cliProvider:parsed.provider,cliModel:parsed.model,cliThinking:parsed.thinking,inlineApiKey:!!parsed.apiKey,modelRuntime});resolved.warning&&diagnostics.push({type:"warning",message:resolved.warning}),resolved.error&&diagnostics.push({type:"error",message:resolved.error}),resolved.model&&(options.model=resolved.model,!parsed.thinking&&resolved.thinkingLevel&&(options.thinkingLevel=resolved.thinkingLevel,cliThinkingFromModel=!0))}if(!options.model&&scopedModels.length>0&&!hasExistingSession){let savedProvider=settingsManager.getDefaultProvider(),savedModelId=settingsManager.getDefaultModel(),savedModel=savedProvider&&savedModelId?modelRuntime.getModel(savedProvider,savedModelId):void 0,savedInScope=savedModel?scopedModels.find(sm=>modelsAreEqual(sm.model,savedModel)):void 0;savedInScope?(options.model=savedInScope.model,!parsed.thinking&&savedInScope.thinkingLevel&&(options.thinkingLevel=savedInScope.thinkingLevel)):(options.model=scopedModels[0].model,!parsed.thinking&&scopedModels[0].thinkingLevel&&(options.thinkingLevel=scopedModels[0].thinkingLevel))}return parsed.thinking&&(options.thinkingLevel=parsed.thinking),scopedModels.length>0&&(options.scopedModels=scopedModels.map(sm=>({model:sm.model,thinkingLevel:sm.thinkingLevel}))),parsed.noTools?options.noTools="all":parsed.noBuiltinTools&&(options.noTools="builtin"),parsed.tools&&(options.tools=[...parsed.tools]),parsed.excludeTools&&(options.excludeTools=[...parsed.excludeTools]),{options,cliThinkingFromModel,diagnostics}}function resolveCliPaths(cwd,paths){return paths?.map(value=>isLocalPath(value)?resolvePath(value,cwd):value)}async function promptForMissingSessionCwd(issue,settingsManager){return showStartupSelector(settingsManager,formatMissingSessionCwdPrompt(issue),[{label:"Continue",value:issue.fallbackCwd},{label:"Cancel",value:void 0}])}async function main(args,options){resetTimings(),setThemeJsonValidator(validateThemeJson);let extensionFactories=[...builtInExtensions,...options?.extensionFactories??[]],offlineMode=args.includes("--offline")||isTruthyEnvFlag2(process.env.PI_OFFLINE);if(offlineMode&&(process.env.PI_OFFLINE="1",process.env.PI_SKIP_VERSION_CHECK="1"),await runAuthCommand(args))return;process.platform==="win32"&&cleanupWindowsSelfUpdateQuarantine(getPackageDir()),cleanupManagedInstall();let cwd=process.cwd(),agentDir=getAgentDir(),bootstrapSettingsManager=SettingsManager.create(cwd,agentDir,{projectTrusted:!1});if(applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(),await handlePackageCommand(args,{extensionFactories})){let exitCode=process.exitCode??0;if(process.platform==="win32"&&exitCode===0&&args[0]==="update")return;process.exit(exitCode);return}if(await handleConfigCommand(args,{extensionFactories}))return;if(args[0]==="mcp"){let{runMcpCommand:runMcpCommand2}=await loadMcpCommand();process.exitCode=await runMcpCommand2(args.slice(1),{cwd,agentDir});return}let parsed=parseArgs(args);if(parsed.diagnostics.length>0){for(let d of parsed.diagnostics){let color=d.type==="error"?source_default.red:source_default.yellow;console.error(color(`${d.type==="error"?"Error":"Warning"}: ${d.message}`))}parsed.diagnostics.some(d=>d.type==="error")&&process.exit(1)}if(time("parseArgs"),parsed.version&&(console.log(VERSION),process.exit(0)),parsed.export){let result;try{let outputPath=parsed.messages.length>0?parsed.messages[0]:void 0;result=await exportFromFile(parsed.export,outputPath)}catch(error){let message=error instanceof Error?error.message:"Failed to export session";console.error(source_default.red(`Error: ${message}`)),process.exit(1)}console.log(`Exported to: ${result}`),process.exit(0)}let appMode=resolveAppMode(parsed,process.stdin.isTTY,process.stdout.isTTY);appMode!=="interactive"&&!isPlainRuntimeMetadataCommand(parsed)&&takeOverStdout(),parsed.mode==="rpc"&&parsed.fileArgs.length>0&&(console.error(source_default.red("Error: @file arguments are not supported in RPC mode")),process.exit(1)),validateForkFlags(parsed),validateSessionIdFlags(parsed);let{migratedAuthProviders:migratedProviders,deprecationWarnings}=runMigrations(cwd);time("runMigrations");let startupSettingsManager=SettingsManager.create(cwd,agentDir),startupSettingsDiagnostics=collectSettingsDiagnostics(startupSettingsManager);appMode==="interactive"&&!parsed.help&&parsed.listModels===void 0&&shouldRunFirstTimeSetup()&&(await showFirstTimeSetup(startupSettingsManager),time("firstTimeSetup")),appMode==="interactive"&&parsed.useTheme!==void 0&&startupSettingsManager.applyOverrides({theme:parsed.useTheme});let envSessionDir=process.env[ENV_SESSION_DIR],sessionDir=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir?expandTildePath(envSessionDir):void 0)??startupSettingsManager.getSessionDir(),sessionManager=await createSessionManager(parsed,cwd,sessionDir,startupSettingsManager),missingSessionCwdIssue=getMissingSessionCwdIssue(sessionManager,cwd);if(missingSessionCwdIssue)if(appMode==="interactive"){let selectedCwd=await promptForMissingSessionCwd(missingSessionCwdIssue,startupSettingsManager);selectedCwd||process.exit(0),sessionManager=SessionManager.open(missingSessionCwdIssue.sessionFile,sessionDir,selectedCwd)}else console.error(source_default.red(new MissingSessionCwdError(missingSessionCwdIssue).message)),process.exit(1);if(parsed.name!==void 0){let name=normalizeSessionName(parsed.name);name===void 0&&(console.error(source_default.red("Error: --name requires a non-empty value")),process.exit(1)),sessionManager.appendSessionInfo(name)}time("createSessionManager");let trustStore=new ProjectTrustStore(agentDir),sessionCwd=sessionManager.getCwd(),autoTrustOnReloadCwd=parsed.projectTrustOverride===void 0&&!hasTrustRequiringProjectResources(sessionCwd)?sessionCwd:void 0,trustPromptMode=parsed.help||parsed.listModels!==void 0?"print":appMode,projectTrustByCwd=new Map,resolvedExtensionPaths=resolveCliPaths(cwd,parsed.extensions),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes),createRuntime=async({cwd:cwd2,agentDir:agentDir2,sessionManager:sessionManager2,sessionStartEvent,projectTrustContext})=>{let isInitialRuntime=sessionStartEvent===void 0,projectTrustDiagnostics=[],cachedProjectTrust=projectTrustByCwd.get(cwd2),hasTrustRequiringResources=hasTrustRequiringProjectResources(cwd2),shouldResolveProjectTrust=parsed.projectTrustOverride===void 0&&cachedProjectTrust===void 0&&hasTrustRequiringResources,projectTrusted=shouldResolveProjectTrust?!1:cachedProjectTrust??parsed.projectTrustOverride??(!hasTrustRequiringResources||trustStore.get(cwd2)===!0),runtimeSettingsManager=SettingsManager.create(cwd2,agentDir2,{projectTrusted}),services2=await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager:runtimeSettingsManager,modelRuntimeSignal:AbortSignal.timeout(15e3),extensionFlagValues:parsed.unknownFlags,resourceLoaderReloadOptions:shouldResolveProjectTrust?{resolveProjectTrust:async({extensionsResult})=>{let trusted=await resolveProjectTrusted({cwd:cwd2,trustStore,trustOverride:parsed.projectTrustOverride,defaultProjectTrust:startupSettingsManager.getDefaultProjectTrust(),extensionsResult,projectTrustContext:projectTrustContext??createProjectTrustContext({cwd:cwd2,mode:isInitialRuntime?trustPromptMode:appMode,settingsManager:startupSettingsManager,hasUI:isInitialRuntime&&trustPromptMode==="interactive"}),onExtensionError:message=>projectTrustDiagnostics.push({type:"warning",message})});return projectTrustByCwd.set(cwd2,trusted),trusted}}:void 0,resourceLoaderOptions:{additionalExtensionPaths:resolvedExtensionPaths,additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noExtensions:parsed.noExtensions,disabledBuiltinExtensions:parsed.noMcp?["mcp"]:void 0,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,systemPrompt:parsed.systemPrompt,appendSystemPrompt:parsed.appendSystemPrompt,extensionFactories}}),{settingsManager:settingsManager2,modelRuntime:modelRuntime2,resourceLoader:resourceLoader2}=services2,diagnostics=[...projectTrustDiagnostics,...services2.diagnostics,...collectSettingsDiagnostics(settingsManager2),...resourceLoader2.getExtensions().errors.map(({path:path33,error})=>({type:"error",message:`Failed to load extension "${path33}": ${error}`})),...(resourceLoader2.getExtensions().warnings??[]).map(({path:path33,warning})=>({type:"warning",message:`Extension package "${path33}": ${warning}`}))],modelPatterns=parsed.models??settingsManager2.getEnabledModels(),scopedModels=modelPatterns&&modelPatterns.length>0?await resolveModelScope(modelPatterns,modelRuntime2,{signal:AbortSignal.timeout(15e3)}):[],{options:sessionOptions,cliThinkingFromModel,diagnostics:sessionOptionDiagnostics}=buildSessionOptions(parsed,scopedModels,sessionManager2.buildSessionContext().messages.length>0,modelRuntime2,settingsManager2);diagnostics.push(...sessionOptionDiagnostics),parsed.apiKey&&(sessionOptions.model?await modelRuntime2.setRuntimeApiKey(sessionOptions.model.provider,parsed.apiKey):diagnostics.push({type:"error",message:"--api-key requires a model to be specified via --model, --provider/--model, or --models"}));let created=await createAgentSessionFromServices({services:services2,sessionManager:sessionManager2,sessionStartEvent,model:sessionOptions.model,thinkingLevel:sessionOptions.thinkingLevel,scopedModels:sessionOptions.scopedModels,tools:sessionOptions.tools,excludeTools:sessionOptions.excludeTools,noTools:sessionOptions.noTools,customTools:sessionOptions.customTools}),cliThinkingOverride=parsed.thinking!==void 0||cliThinkingFromModel;return created.session.model&&cliThinkingOverride&&created.session.setThinkingLevel(created.session.thinkingLevel),{...created,services:services2,diagnostics}};time("createRuntime");let runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager});time("createAgentSessionRuntime");let{services,session,modelFallbackMessage}=runtime,{settingsManager,modelRuntime,resourceLoader}=services;if(setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides()),applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs()),parsed.help){reportDiagnostics(startupSettingsDiagnostics);let extensionFlags=resourceLoader.getExtensions().extensions.flatMap(extension2=>Array.from(extension2.flags.values()));printHelp(extensionFlags),process.exit(0)}if(parsed.listModels!==void 0){reportDiagnostics(startupSettingsDiagnostics);let searchPattern=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(modelRuntime,searchPattern,AbortSignal.timeout(15e3)),process.exit(0)}let stdinContent;appMode!=="rpc"&&(stdinContent=await readPipedStdin(),stdinContent!==void 0&&appMode==="interactive"&&(appMode="print")),time("readPipedStdin");let{initialMessage,initialImages}=await prepareInitialMessage(parsed,stdinContent);time("prepareInitialMessage"),initTheme(settingsManager.getTheme(),appMode==="interactive"),time("initTheme"),appMode==="interactive"&&deprecationWarnings.length>0&&await showDeprecationWarnings(deprecationWarnings),time("resolveModelScope");let startupDiagnostics=deduplicateDiagnostics([...startupSettingsDiagnostics,...runtime.diagnostics]),hasRuntimeErrors=runtime.diagnostics.some(diagnostic=>diagnostic.type==="error");(appMode!=="interactive"||hasRuntimeErrors)&&reportDiagnostics(startupDiagnostics),hasRuntimeErrors&&(runtime.diagnostics.some(diagnostic=>diagnostic.message.includes("Failed to load extension"))&&console.error(source_default.yellow(EXTENSION_LOAD_FAILURE_HINT)),process.exit(1)),time("createAgentSession"),appMode!=="interactive"&&!session.model&&(console.error(source_default.red(formatNoModelsAvailableMessage())),process.exit(1));let startupBenchmark=isTruthyEnvFlag2(process.env.PI_STARTUP_BENCHMARK);if(startupBenchmark&&appMode!=="interactive"&&(console.error(source_default.red("Error: PI_STARTUP_BENCHMARK only supports interactive mode")),process.exit(1)),!offlineMode&&appMode==="rpc"){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),15e3);modelRuntime.refresh({signal:controller.signal}).catch(()=>{}).finally(()=>clearTimeout(timeout))}if(appMode==="rpc")printTimings(),await runRpcMode(runtime);else if(appMode==="interactive"){let interactiveMode=new InteractiveMode(runtime,{migratedProviders,startupDiagnostics,modelFallbackMessage,autoTrustOnReloadCwd,initialMessage,initialImages,initialMessages:parsed.messages,verbose:parsed.verbose,tuiMode:parsed.tuiMode,initialThemeSetting:parsed.useTheme});if(startupBenchmark){await interactiveMode.init(),time("interactiveMode.init"),await new Promise(resolve19=>setTimeout(resolve19,150)),interactiveMode.stop(),stopThemeWatcher(),printTimings(),process.stdout.writableLength>0&&await new Promise(resolve19=>process.stdout.once("drain",resolve19)),process.stderr.writableLength>0&&await new Promise(resolve19=>process.stderr.once("drain",resolve19));return}printTimings(),await interactiveMode.run()}else{printTimings();let exitCode=await runPrintMode(runtime,{mode:toPrintOutputMode(appMode),messages:parsed.messages,initialMessage,initialImages});stopThemeWatcher(),restoreStdout(),exitCode!==0&&(process.exitCode=exitCode);return}}var EXTENSION_LOAD_FAILURE_HINT,init_main=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/main.js"(){init_dist2();init_dist6();init_source();init_args();init_auth_check();init_auth_command();init_credential_print();init_file_processor();init_initial_message();init_list_models();init_project_trust();init_session_picker();init_startup_ui();init_config();init_agent_session_runtime();init_agent_session_services();init_auth_guidance();init_auth_storage();init_export_html();init_http_dispatcher();init_model_resolver();init_model_runtime();init_output_guard();init_project_trust2();init_session_cwd();init_session_manager();init_settings_diagnostics();init_settings_manager();init_timings();init_trust_manager();init_extensions3();init_cli_lazy();init_migrations();init_modes();init_theme();init_theme_schema();init_package_manager_cli();init_paths();init_windows_self_update();EXTENSION_LOAD_FAILURE_HINT=`Hint: Start without extensions using "${APP_NAME} -ne".`}});var SHOW_IMAGES_SELECT_LIST_LAYOUT,ShowImagesSelectorComponent,init_show_images_selector=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js"(){init_dist6();init_theme();init_dynamic_border();SHOW_IMAGES_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ShowImagesSelectorComponent=class extends Container{selectList;constructor(currentValue,onSelect,onCancel){super();let items=[{value:"yes",label:"Yes",description:"Show images inline in terminal"},{value:"no",label:"No",description:"Show text placeholder instead"}];this.addChild(new DynamicBorder),this.selectList=new SelectList(items,5,getSelectListTheme(),SHOW_IMAGES_SELECT_LIST_LAYOUT),this.selectList.setSelectedIndex(currentValue?0:1),this.selectList.onSelect=item=>{onSelect(item.value==="yes")},this.selectList.onCancel=()=>{onCancel()},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}}}});var THEME_SELECT_LIST_LAYOUT,ThemeSelectorComponent,init_theme_selector=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.js"(){init_dist6();init_theme();init_dynamic_border();THEME_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ThemeSelectorComponent=class extends Container{selectList;onPreview;constructor(currentTheme,onSelect,onCancel,onPreview){super(),this.onPreview=onPreview;let themes=getAvailableThemes(),themeItems2=themes.map(name=>({value:name,label:name,description:name===currentTheme?"(current)":void 0}));this.addChild(new DynamicBorder),this.selectList=new SelectList(themeItems2,10,getSelectListTheme(),THEME_SELECT_LIST_LAYOUT);let currentIndex=themes.indexOf(currentTheme);currentIndex!==-1&&this.selectList.setSelectedIndex(currentIndex),this.selectList.onSelect=item=>{onSelect(item.value)},this.selectList.onCancel=()=>{onCancel()},this.selectList.onSelectionChange=item=>{this.onPreview(item.value)},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}}}});var init_components=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.js"(){init_armin();init_assistant_message();init_bash_execution();init_bordered_loader();init_branch_summary_message();init_compaction_summary_message();init_custom_editor();init_custom_message();init_diff2();init_dynamic_border();init_extension_editor();init_extension_input();init_extension_selector();init_first_time_setup();init_footer();init_keybinding_hints();init_login_dialog();init_model_selector();init_oauth_selector();init_scoped_models_selector();init_session_selector();init_settings_selector();init_show_images_selector();init_skill_invocation_message();init_theme_selector();init_thinking_selector();init_tool_execution();init_tree_selector();init_trust_selector();init_user_message();init_user_message_selector();init_visual_truncate()}});var dist_exports3={};__export(dist_exports3,{AgentSession:()=>AgentSession,AgentSessionRuntime:()=>AgentSessionRuntime,ArminComponent:()=>ArminComponent,AssistantMessageComponent:()=>AssistantMessageComponent,BashExecutionComponent:()=>BashExecutionComponent,BorderedLoader:()=>BorderedLoader,BranchSummaryMessageComponent:()=>BranchSummaryMessageComponent,CONFIG_DIR_NAME:()=>CONFIG_DIR_NAME,CURRENT_SESSION_VERSION:()=>CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent:()=>CompactionSummaryMessageComponent,CredentialSynchronizationError:()=>CredentialSynchronizationError,CustomEditor:()=>CustomEditor,CustomMessageComponent:()=>CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES2,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES,DefaultPackageManager:()=>DefaultPackageManager,DefaultResourceLoader:()=>DefaultResourceLoader,DynamicBorder:()=>DynamicBorder,ExtensionEditorComponent:()=>ExtensionEditorComponent,ExtensionInputComponent:()=>ExtensionInputComponent,ExtensionRunner:()=>ExtensionRunner,ExtensionSelectorComponent:()=>ExtensionSelectorComponent,FooterComponent:()=>FooterComponent,InteractiveMode:()=>InteractiveMode,LoginDialogComponent:()=>LoginDialogComponent,ModelRegistry:()=>ModelRegistry,ModelRuntime:()=>ModelRuntime,ModelSelectorComponent:()=>ModelSelectorComponent,OAuthSelectorComponent:()=>OAuthSelectorComponent,ProjectTrustStore:()=>ProjectTrustStore,RpcClient:()=>RpcClient,SessionManager:()=>SessionManager,SessionSelectorComponent:()=>SessionSelectorComponent,SettingsManager:()=>SettingsManager,SettingsSelectorComponent:()=>SettingsSelectorComponent,ShowImagesSelectorComponent:()=>ShowImagesSelectorComponent,SkillInvocationMessageComponent:()=>SkillInvocationMessageComponent,Theme:()=>Theme,ThemeSelectorComponent:()=>ThemeSelectorComponent,ThinkingSelectorComponent:()=>ThinkingSelectorComponent,ToolExecutionComponent:()=>ToolExecutionComponent,TreeSelectorComponent:()=>TreeSelectorComponent,UserMessageComponent:()=>UserMessageComponent,UserMessageSelectorComponent:()=>UserMessageSelectorComponent,VERSION:()=>VERSION,VIRTUAL_MODEL_STATE_ENTRY:()=>VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries:()=>buildContextEntries,buildSessionContext:()=>buildSessionContext,buildSessionProjection:()=>buildSessionProjection,calculateContextTokens:()=>calculateContextTokens2,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,compact:()=>compact,convertToLlm:()=>convertToLlm,convertToPng:()=>convertToPng,copyToClipboard:()=>copyToClipboard,createAgentSession:()=>createAgentSession,createAgentSessionFromServices:()=>createAgentSessionFromServices,createAgentSessionRuntime:()=>createAgentSessionRuntime,createAgentSessionServices:()=>createAgentSessionServices,createBashTool:()=>createBashTool,createBashToolDefinition:()=>createBashToolDefinition,createCodemodeExtension:()=>createCodemodeExtension,createCodingTools:()=>createCodingTools,createEditTool:()=>createEditTool,createEditToolDefinition:()=>createEditToolDefinition,createEventBus:()=>createEventBus,createExtensionRuntime:()=>createExtensionRuntime,createFindTool:()=>createFindTool,createFindToolDefinition:()=>createFindToolDefinition,createGrepTool:()=>createGrepTool,createGrepToolDefinition:()=>createGrepToolDefinition,createLocalBashOperations:()=>createLocalBashOperations,createLocalPowerShellOperations:()=>createLocalPowerShellOperations,createLsTool:()=>createLsTool,createLsToolDefinition:()=>createLsToolDefinition,createMcpExtension:()=>createMcpExtension,createPowerShellTool:()=>createPowerShellTool,createPowerShellToolDefinition:()=>createPowerShellToolDefinition,createReadOnlyTools:()=>createReadOnlyTools,createReadTool:()=>createReadTool,createReadToolDefinition:()=>createReadToolDefinition,createSyntheticSourceInfo:()=>createSyntheticSourceInfo,createToolSearchExtension:()=>createToolSearchExtension,createWriteTool:()=>createWriteTool,createWriteToolDefinition:()=>createWriteToolDefinition,defineTool:()=>defineTool,detectSupportedImageMimeTypeFromFile:()=>detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions:()=>discoverAndLoadExtensions,estimateTokens:()=>estimateTokens2,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatDimensionNote:()=>formatDimensionNote,formatReadLineRange:()=>formatReadLineRange,formatSize:()=>formatSize,formatSkillsForPrompt:()=>formatSkillsForPrompt,generateBranchSummary:()=>generateBranchSummary,generateDiffString:()=>generateDiffString,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,generateUnifiedPatch:()=>generateUnifiedPatch,getAgentDir:()=>getAgentDir,getDocsPath:()=>getDocsPath,getExamplesPath:()=>getExamplesPath,getLanguageFromPath:()=>getLanguageFromPath,getLastAssistantUsage:()=>getLastAssistantUsage,getLatestCompactionEntry:()=>getLatestCompactionEntry,getMarkdownTheme:()=>getMarkdownTheme,getPackageDir:()=>getPackageDir,getPowerShellConfig:()=>getPowerShellConfig,getReadmePath:()=>getReadmePath,getSelectListTheme:()=>getSelectListTheme,getSettingsListTheme:()=>getSettingsListTheme,getShellConfig:()=>getShellConfig,hasTrustRequiringProjectResources:()=>hasTrustRequiringProjectResources,highlightCode:()=>highlightCode,initTheme:()=>initTheme,isBashToolResult:()=>isBashToolResult,isEditToolResult:()=>isEditToolResult,isFindToolResult:()=>isFindToolResult,isGrepToolResult:()=>isGrepToolResult,isLsToolResult:()=>isLsToolResult,isPowerShellToolResult:()=>isPowerShellToolResult,isReadToolResult:()=>isReadToolResult,isToolCallEventType:()=>isToolCallEventType,isWriteToolResult:()=>isWriteToolResult,keyHint:()=>keyHint,keyText:()=>keyText,loadProjectContextFiles:()=>loadProjectContextFiles,loadSkills:()=>loadSkills,loadSkillsFromDir:()=>loadSkillsFromDir,main:()=>main,migrateSessionEntries:()=>migrateSessionEntries,parseArgs:()=>parseArgs,parseFrontmatter:()=>parseFrontmatter,parseSessionEntries:()=>parseSessionEntries,parseSkillBlock:()=>parseSkillBlock,prepareBranchEntries:()=>prepareBranchEntries,rawKeyHint:()=>rawKeyHint,readStoredCredential:()=>readStoredCredential,renderDiff:()=>renderDiff,resizeImage:()=>resizeImage,resolveCliModel:()=>resolveCliModel,resolveModelScopeWithDiagnostics:()=>resolveModelScopeWithDiagnostics,runPrintMode:()=>runPrintMode,runRpcMode:()=>runRpcMode,serializeConversation:()=>serializeConversation,sessionEntryToContextMessages:()=>sessionEntryToContextMessages,shouldCompact:()=>shouldCompact,stripFrontmatter:()=>stripFrontmatter,truncateHead:()=>truncateHead,truncateLine:()=>truncateLine,truncateTail:()=>truncateTail,truncateToVisualLines:()=>truncateToVisualLines,withFileMutationQueue:()=>withFileMutationQueue,wrapRegisteredTool:()=>wrapRegisteredTool,wrapRegisteredTools:()=>wrapRegisteredTools});var init_dist11=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/index.js"(){init_args();init_config();init_agent_session();init_auth_storage();init_compaction2();init_event_bus();init_extensions();init_messages5();init_model_registry();init_model_resolver();init_model_runtime();init_package_manager();init_resource_loader();init_sdk2();init_session_manager();init_settings_manager();init_skills5();init_source_info();init_edit_diff();init_tools();init_render_utils();init_trust_manager();init_virtual_models();init_codemode();init_mcp();init_tool_search();init_main();init_modes();init_components();init_theme();init_clipboard();init_frontmatter();init_image_convert();init_image_resize();init_mime();init_shell()}});import{existsSync}from"node:fs";import path from"node:path";import{fileURLToPath}from"node:url";function findPackageDir(startDir){let dir=startDir;for(;dir!==path.dirname(dir);){if(existsSync(path.join(dir,"package.json")))return dir;dir=path.dirname(dir)}return startDir}var BKPER_PACKAGE_DIR=findPackageDir(path.dirname(fileURLToPath(import.meta.url)));function getPiPackageDir(){return findPackageDir(path.dirname(fileURLToPath(import.meta.resolve("@earendil-works/pi-coding-agent"))))}function applyPiPackageDir(env3=process.env){env3.PI_PACKAGE_DIR??=getPiPackageDir()}applyPiPackageDir();init_dist11();import path32 from"node:path";init_dist11();init_dist6();init_typesafe_system_one_lazy();var BKPER_AI_PROVIDER_ID="bkper",BKPER_AI_PRODUCTION_BASE_URL="https://ai.bkper.app/v1",BKPER_AI_BASE_URL_ENV_VAR="BKPER_AI_BASE_URL",BKPER_AI_DEVELOPMENT_ORIGIN="https://ai-dev.bkper.app",THINKING_LEVELS4=["off","minimal","low","medium","high","xhigh","max"],BKPER_AI_CLASSIFIER_API="typesafe-system-one",BKPER_AI_CHAT_API="openai-responses";function isDecisionModel2(model2){return model2.type==="decision"}function isChatModel2(model2){return model2.type===void 0||model2.type==="language"}function invalidBkperAiBaseUrlError(){return new Error(`${BKPER_AI_BASE_URL_ENV_VAR} must be an HTTPS URL on ai-dev.bkper.app without credentials, a custom port, query parameters, or a fragment.`)}function getBkperAiBaseUrlOverride(env3=process.env){let configuredBaseUrl=env3[BKPER_AI_BASE_URL_ENV_VAR];if(configuredBaseUrl===void 0)return;let url;try{url=new URL(configuredBaseUrl)}catch{throw invalidBkperAiBaseUrlError()}if(configuredBaseUrl.trim()!==configuredBaseUrl||url.origin!==BKPER_AI_DEVELOPMENT_ORIGIN||url.username!==""||url.password!==""||url.search!==""||url.hash!=="")throw invalidBkperAiBaseUrlError();let path33=url.pathname.replace(/\/+$/,"");return`${url.origin}${path33}`}function isThinkingLevel(value){return THINKING_LEVELS4.some(level=>level===value)}function getDefaultThinkingLevel(model2){return isThinkingLevel(model2.default_thinking_level)?model2.default_thinking_level:model2.thinking_levels.includes("high")?"high":model2.thinking_levels.find(isThinkingLevel)}function getThinkingLevelMap(levels){let supports=level=>levels.includes(level)?level:null;return{off:levels.includes("none")?"none":null,minimal:supports("minimal"),low:supports("low"),medium:supports("medium"),high:supports("high"),xhigh:supports("xhigh"),max:supports("max")}}function nanoUsdPerTokenToUsdPerMillion(value){return value/1e3}var SYSTEM_ONE_MAX_IMAGE_SIDE=1568;async function fitImage(image){let resized=await resizeImage(Buffer.from(image.data,"base64"),image.mimeType,{maxWidth:SYSTEM_ONE_MAX_IMAGE_SIDE,maxHeight:SYSTEM_ONE_MAX_IMAGE_SIDE});return resized?.wasResized?{...image,data:resized.data,mimeType:resized.mimeType}:image}function withImagesFitted(classifier){return{classify:async(model2,context,options)=>classifier.classify(model2,context.images?.length?{...context,images:await Promise.all(context.images.map(fitImage))}:context,options)}}function getInputModalities(modalities){return modalities?.filter(modality=>modality==="text"||modality==="image")??[]}function toProviderModel(model2,defaultModelId){let input2=getInputModalities(model2.input_modalities);return{id:model2.id,name:model2.name??model2.id,reasoning:model2.thinking_levels.some(level=>level!=="none"),thinkingLevelMap:getThinkingLevelMap(model2.thinking_levels),input:input2,cost:{input:nanoUsdPerTokenToUsdPerMillion(model2.pricing.inputNanoUsdPerToken),output:nanoUsdPerTokenToUsdPerMillion(model2.pricing.outputNanoUsdPerToken),cacheRead:nanoUsdPerTokenToUsdPerMillion(model2.pricing.cachedInputNanoUsdPerToken),cacheWrite:nanoUsdPerTokenToUsdPerMillion(model2.pricing.cacheWriteNanoUsdPerToken)},...getPromptCache(model2.prompt_cache_ttl_seconds),contextWindow:model2.context_window,maxTokens:model2.max_output_tokens,compat:{supportsDeveloperRole:!1,sessionAffinityFormat:"openai",supportsLongCacheRetention:!1,...model2.mid_conversation_system_messages===!0?{supportsMidConvoSystemMessages:!0}:{}},bkperDefault:model2.id===defaultModelId,bkperDefaultThinkingLevel:getDefaultThinkingLevel(model2)}}function toClassifierModel(model2){return{type:"classifier",id:model2.id,name:model2.name??model2.id,api:BKPER_AI_CLASSIFIER_API,input:getInputModalities(model2.input_modalities??["text"]),cost:{input:nanoUsdPerTokenToUsdPerMillion(model2.pricing.inputNanoUsdPerToken),output:nanoUsdPerTokenToUsdPerMillion(model2.pricing.outputNanoUsdPerToken),cacheRead:0,cacheWrite:0},contextWindow:model2.context_window}}function getPromptCache(ttlSeconds){return typeof ttlSeconds=="number"&&Number.isFinite(ttlSeconds)&&ttlSeconds>0?{promptCache:{short:ttlSeconds}}:{}}async function fetchBkperAiModels(baseUrl,fetchFn,signal){let url=`${baseUrl}/models`,response=await fetchFn(url,{signal}),contentType2=response.headers.get("content-type")??"unknown content type",responseInfo=`${url} (HTTP ${response.status}, ${contentType2})`;if(!response.ok)throw new Error(`Bkper AI model request failed: ${responseInfo}.`);let catalog;try{catalog=await response.json()}catch{throw new Error(`Expected JSON Bkper AI model response from ${responseInfo}.`)}if(!Array.isArray(catalog.data))throw new Error("Bkper AI model response is invalid.");let classifierModels=catalog.data.filter(isDecisionModel2).map(toClassifierModel),chatModels=catalog.data.filter(isChatModel2).filter(model2=>model2.input_modalities?.includes("image")),defaultModelId=chatModels.find(model2=>model2.id===catalog.default_model)?.id??chatModels[0]?.id;return[...chatModels.map(model2=>toProviderModel(model2,defaultModelId)),...classifierModels]}function toStoredModel(model2,baseUrl){return model2.type==="classifier"?{...model2,api:model2.api??BKPER_AI_CLASSIFIER_API,provider:BKPER_AI_PROVIDER_ID,baseUrl}:{...model2,api:model2.api??BKPER_AI_CHAT_API,provider:BKPER_AI_PROVIDER_ID,baseUrl}}function fromStoredModel(model2){if(model2.type==="classifier"){let{provider:_provider2,baseUrl:_baseUrl2,...config2}=model2;return config2}if(model2.type==="image")return;let{provider:_provider,baseUrl:_baseUrl,api:_api,...config}=model2;return config}function getSavedModels(context,baseUrl){let models=context.stored?.models??[];if(!(models.length===0||models.some(model2=>model2.baseUrl!==baseUrl)))return models.flatMap(model2=>fromStoredModel(model2)??[])}async function refreshBkperAiModels(baseUrl,fetchFn,context){let savedModels=getSavedModels(context,baseUrl);if(!context.allowNetwork&&savedModels)return savedModels;let models=await fetchBkperAiModels(baseUrl,fetchFn,context.signal);return await context.publish({persist:{models:models.map(model2=>toStoredModel(model2,baseUrl)),checkedAt:Date.now()}}),models}function findDefaultBkperAiModel(models){return models.find(model2=>model2.provider===BKPER_AI_PROVIDER_ID&&model2.bkperDefault===!0)??models.find(model2=>model2.provider===BKPER_AI_PROVIDER_ID)}function getBkperAiDefaultThinkingLevel(model2){return model2?.provider===BKPER_AI_PROVIDER_ID?model2.bkperDefaultThinkingLevel:void 0}function getBkperAiProviderConfig(env3=process.env,fetchFn=fetch){let baseUrl=getBkperAiBaseUrlOverride(env3)??BKPER_AI_PRODUCTION_BASE_URL;return{name:"Bkper AI",baseUrl,apiKey:"!bkper auth token",authHeader:!0,headers:{"bkper-ai-source":"bkper-cli","User-Agent":"bkper-cli"},api:BKPER_AI_CHAT_API,classifiers:{[BKPER_AI_CLASSIFIER_API]:withImagesFitted(typesafeSystemOneApi())},models:[],refreshModels:context=>refreshBkperAiModels(baseUrl,fetchFn,context)}}function registerBkperAiProvider(pi,env3=process.env){pi.registerProvider(BKPER_AI_PROVIDER_ID,getBkperAiProviderConfig(env3))}init_dist11();import{join as join50}from"node:path";init_dist11();import{accessSync as accessSync4,constants as constants10,existsSync as existsSync29,readFileSync as readFileSync25,realpathSync as realpathSync3}from"fs";import path20 from"path";var PACKAGE_DIR=BKPER_PACKAGE_DIR,VERSION5=JSON.parse(readFileSync25(path20.join(PACKAGE_DIR,"package.json"),"utf8")).version;function readInstalledVersion(packageJsonPath){try{let data=JSON.parse(readFileSync25(packageJsonPath,"utf8"));return typeof data.version=="string"?data.version:void 0}catch{return}}function isNewerVersion(current,latest){let parse3=v2=>v2.split(".").map(Number),[cMajor,cMinor,cPatch]=parse3(current),[lMajor,lMinor,lPatch]=parse3(latest);return lMajor!==cMajor?lMajor>cMajor:lMinor!==cMinor?lMinor>cMinor:lPatch>cPatch}import{spawn as spawn15}from"child_process";import{createHash as createHash4}from"crypto";import{closeSync as closeSync2,mkdirSync as mkdirSync18,openSync as openSync2,readFileSync as readFileSync26,renameSync as renameSync6,statSync as statSync13,unlinkSync as unlinkSync3,writeFileSync as writeFileSync16}from"fs";import path22 from"path";import{fileURLToPath as fileURLToPath7}from"url";import path21 from"path";import os9 from"os";var BKPER_CONFIG_DIR=path21.join(os9.homedir(),".config","bkper"),BKPER_BIN_DIR=path21.join(BKPER_CONFIG_DIR,"bin"),DEFAULT_CLOUDFLARED_BIN=path21.join(BKPER_BIN_DIR,process.platform==="win32"?"cloudflared.exe":"cloudflared"),bin=process.env.CLOUDFLARED_BIN||DEFAULT_CLOUDFLARED_BIN;var CHECK_INTERVAL_MS=1440*60*1e3,AGENT_CHECK_INTERVAL_MS=300*1e3;var STALE_LOCK_MS=5e3;function getUpdateCachePath(packageDir=PACKAGE_DIR,configDir2=BKPER_CONFIG_DIR){let key=createHash4("sha256").update(packageDir).digest("hex").slice(0,16);return path22.join(configDir2,"update-check",`${key}.json`)}function isUpdateCheckDisabled(env3=process.env){if(env3.BKPER_DISABLE_AUTOUPDATE)return!0;let ci=env3.CI?.trim().toLowerCase();return!!ci&&ci!=="0"&&ci!=="false"}function readUpdateState(cachePath=getUpdateCachePath()){try{let data=JSON.parse(readFileSync26(cachePath,"utf8"));if(typeof data!="object"||data===null||Array.isArray(data))return{};let record=data,state3={};typeof record.lastAttemptedAt=="number"&&(state3.lastAttemptedAt=record.lastAttemptedAt),typeof record.latestVersion=="string"&&(state3.latestVersion=record.latestVersion);let install2=record.install;return install2&&typeof install2.version=="string"&&(install2.status==="installed"||install2.status==="manual"||install2.status==="failed")&&(state3.install={version:install2.version,status:install2.status},typeof install2.instruction=="string"&&(state3.install.instruction=install2.instruction)),state3}catch{return{}}}function writeUpdateState(state3,cachePath=getUpdateCachePath()){let tempPath=`${cachePath}.${process.pid}.tmp`;try{return mkdirSync18(path22.dirname(cachePath),{recursive:!0}),writeFileSync16(tempPath,`${JSON.stringify(state3)}
2281
+ `),process.exitCode=result.status==="ready"?0:result.status==="not_ready"?1:2}catch(error){let message=error instanceof AuthCommandError?error.message:"Failed to resolve credential";console.error(source_default.red(`Error: ${message}`)),process.exitCode=command.kind==="check"?2:1}return!0}async function prepareInitialMessage(parsed,stdinContent){if(parsed.fileArgs.length===0)return buildInitialMessage({parsed,stdinContent});let{text,images}=await processFileArguments(parsed.fileArgs,{autoResizeImages:!1});return buildInitialMessage({parsed,fileText:text,fileImages:images,stdinContent})}function findLocalSessionByExactId(sessionId,cwd,sessionDir){let path33=SessionManager.findById(cwd,sessionId,sessionDir);return path33?{type:"local",path:path33}:void 0}async function resolveSessionPath(sessionArg,cwd,sessionDir){if(sessionArg.includes("/")||sessionArg.includes("\\")||sessionArg.endsWith(".jsonl"))return{type:"path",path:resolvePath(sessionArg,cwd)};let exactLocalMatch=findLocalSessionByExactId(sessionArg,cwd,sessionDir);if(exactLocalMatch)return exactLocalMatch;let localMatch=(await SessionManager.list(cwd,sessionDir)).find(s2=>s2.id.startsWith(sessionArg));if(localMatch)return{type:"local",path:localMatch.path};let allSessions=await SessionManager.listAll(sessionDir),globalMatch=allSessions.find(s2=>s2.id===sessionArg)??allSessions.find(s2=>s2.id.startsWith(sessionArg));return globalMatch?{type:"global",path:globalMatch.path,cwd:globalMatch.cwd}:{type:"not_found",arg:sessionArg}}async function promptConfirm(message){return new Promise(resolve19=>{let rl=createInterface6({input:process.stdin,output:process.stdout});rl.question(`${message} [y/N] `,answer=>{rl.close(),resolve19(answer.toLowerCase()==="y"||answer.toLowerCase()==="yes")})})}function validateForkFlags(parsed){if(!parsed.fork)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --fork cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateSessionIdFlags(parsed){if(parsed.sessionId===void 0)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1));try{assertValidSessionId(parsed.sessionId)}catch(error){let message=error instanceof Error?error.message:String(error);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function openSessionOrExit(path33,sessionDir){try{return SessionManager.open(path33,sessionDir)}catch(error){let message=error instanceof Error?error.message:String(error);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function forkSessionOrExit(sourcePath,cwd,sessionDir,sessionId){try{return SessionManager.forkFrom(sourcePath,cwd,sessionDir,{id:sessionId})}catch(error){let message=error instanceof Error?error.message:String(error);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}async function createSessionManager(parsed,cwd,sessionDir,settingsManager){if(parsed.noSession||parsed.help||parsed.listModels!==void 0)return SessionManager.inMemory(cwd,parsed.sessionId!==void 0?{id:parsed.sessionId}:void 0);if(parsed.fork){parsed.sessionId&&findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir)&&(console.error(source_default.red(`Session already exists with id '${parsed.sessionId}'`)),process.exit(1));let resolved=await resolveSessionPath(parsed.fork,cwd,sessionDir);switch(resolved.type){case"path":case"local":case"global":return forkSessionOrExit(resolved.path,cwd,sessionDir,parsed.sessionId);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.session){let resolved=await resolveSessionPath(parsed.session,cwd,sessionDir);switch(resolved.type){case"path":case"local":return openSessionOrExit(resolved.path,sessionDir);case"global":return console.log(source_default.yellow(`Session found in different project: ${resolved.cwd}`)),await promptConfirm("Fork this session into current directory?")||(console.log(source_default.dim("Aborted.")),process.exit(0)),forkSessionOrExit(resolved.path,cwd,sessionDir);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.resume)try{let selectedPath=await selectSession((onProgress,signal)=>SessionManager.list(cwd,sessionDir,onProgress,signal),(onProgress,signal)=>SessionManager.listAll(sessionDir,onProgress,signal),settingsManager);return selectedPath||(console.log(source_default.dim("No session selected")),process.exit(0)),SessionManager.open(selectedPath,sessionDir)}finally{stopThemeWatcher()}if(parsed.continue)return SessionManager.continueRecent(cwd,sessionDir);if(parsed.sessionId){let existingSession=findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir);if(existingSession)return SessionManager.open(existingSession.path,sessionDir);console.error(source_default.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`))}return SessionManager.create(cwd,sessionDir,{id:parsed.sessionId})}function buildSessionOptions(parsed,scopedModels,hasExistingSession,modelRuntime,settingsManager){let options={},diagnostics=[],cliThinkingFromModel=!1;if(parsed.provider&&!parsed.model&&diagnostics.push({type:"error",message:`--provider requires --model (for example: --provider ${parsed.provider} --model <pattern>)`}),parsed.model){let resolved=resolveCliModel({cliProvider:parsed.provider,cliModel:parsed.model,cliThinking:parsed.thinking,inlineApiKey:!!parsed.apiKey,modelRuntime});resolved.warning&&diagnostics.push({type:"warning",message:resolved.warning}),resolved.error&&diagnostics.push({type:"error",message:resolved.error}),resolved.model&&(options.model=resolved.model,!parsed.thinking&&resolved.thinkingLevel&&(options.thinkingLevel=resolved.thinkingLevel,cliThinkingFromModel=!0))}if(!options.model&&scopedModels.length>0&&!hasExistingSession){let savedProvider=settingsManager.getDefaultProvider(),savedModelId=settingsManager.getDefaultModel(),savedModel=savedProvider&&savedModelId?modelRuntime.getModel(savedProvider,savedModelId):void 0,savedInScope=savedModel?scopedModels.find(sm=>modelsAreEqual(sm.model,savedModel)):void 0;savedInScope?(options.model=savedInScope.model,!parsed.thinking&&savedInScope.thinkingLevel&&(options.thinkingLevel=savedInScope.thinkingLevel)):(options.model=scopedModels[0].model,!parsed.thinking&&scopedModels[0].thinkingLevel&&(options.thinkingLevel=scopedModels[0].thinkingLevel))}return parsed.thinking&&(options.thinkingLevel=parsed.thinking),scopedModels.length>0&&(options.scopedModels=scopedModels.map(sm=>({model:sm.model,thinkingLevel:sm.thinkingLevel}))),parsed.noTools?options.noTools="all":parsed.noBuiltinTools&&(options.noTools="builtin"),parsed.tools&&(options.tools=[...parsed.tools]),parsed.excludeTools&&(options.excludeTools=[...parsed.excludeTools]),{options,cliThinkingFromModel,diagnostics}}function resolveCliPaths(cwd,paths){return paths?.map(value=>isLocalPath(value)?resolvePath(value,cwd):value)}async function promptForMissingSessionCwd(issue,settingsManager){return showStartupSelector(settingsManager,formatMissingSessionCwdPrompt(issue),[{label:"Continue",value:issue.fallbackCwd},{label:"Cancel",value:void 0}])}async function main(args,options){resetTimings(),setThemeJsonValidator(validateThemeJson);let extensionFactories=[...builtInExtensions,...options?.extensionFactories??[]],offlineMode=args.includes("--offline")||isTruthyEnvFlag2(process.env.PI_OFFLINE);if(offlineMode&&(process.env.PI_OFFLINE="1",process.env.PI_SKIP_VERSION_CHECK="1"),await runAuthCommand(args))return;process.platform==="win32"&&cleanupWindowsSelfUpdateQuarantine(getPackageDir()),cleanupManagedInstall();let cwd=process.cwd(),agentDir=getAgentDir(),bootstrapSettingsManager=SettingsManager.create(cwd,agentDir,{projectTrusted:!1});if(applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(),await handlePackageCommand(args,{extensionFactories})){let exitCode=process.exitCode??0;if(process.platform==="win32"&&exitCode===0&&args[0]==="update")return;process.exit(exitCode);return}if(await handleConfigCommand(args,{extensionFactories}))return;if(args[0]==="mcp"){let{runMcpCommand:runMcpCommand2}=await loadMcpCommand();process.exitCode=await runMcpCommand2(args.slice(1),{cwd,agentDir});return}let parsed=parseArgs(args);if(parsed.diagnostics.length>0){for(let d of parsed.diagnostics){let color=d.type==="error"?source_default.red:source_default.yellow;console.error(color(`${d.type==="error"?"Error":"Warning"}: ${d.message}`))}parsed.diagnostics.some(d=>d.type==="error")&&process.exit(1)}if(time("parseArgs"),parsed.version&&(console.log(VERSION),process.exit(0)),parsed.export){let result;try{let outputPath=parsed.messages.length>0?parsed.messages[0]:void 0;result=await exportFromFile(parsed.export,outputPath)}catch(error){let message=error instanceof Error?error.message:"Failed to export session";console.error(source_default.red(`Error: ${message}`)),process.exit(1)}console.log(`Exported to: ${result}`),process.exit(0)}let appMode=resolveAppMode(parsed,process.stdin.isTTY,process.stdout.isTTY);appMode!=="interactive"&&!isPlainRuntimeMetadataCommand(parsed)&&takeOverStdout(),parsed.mode==="rpc"&&parsed.fileArgs.length>0&&(console.error(source_default.red("Error: @file arguments are not supported in RPC mode")),process.exit(1)),validateForkFlags(parsed),validateSessionIdFlags(parsed);let{migratedAuthProviders:migratedProviders,deprecationWarnings}=runMigrations(cwd);time("runMigrations");let startupSettingsManager=SettingsManager.create(cwd,agentDir),startupSettingsDiagnostics=collectSettingsDiagnostics(startupSettingsManager);appMode==="interactive"&&!parsed.help&&parsed.listModels===void 0&&shouldRunFirstTimeSetup()&&(await showFirstTimeSetup(startupSettingsManager),time("firstTimeSetup")),appMode==="interactive"&&parsed.useTheme!==void 0&&startupSettingsManager.applyOverrides({theme:parsed.useTheme});let envSessionDir=process.env[ENV_SESSION_DIR],sessionDir=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir?expandTildePath(envSessionDir):void 0)??startupSettingsManager.getSessionDir(),sessionManager=await createSessionManager(parsed,cwd,sessionDir,startupSettingsManager),missingSessionCwdIssue=getMissingSessionCwdIssue(sessionManager,cwd);if(missingSessionCwdIssue)if(appMode==="interactive"){let selectedCwd=await promptForMissingSessionCwd(missingSessionCwdIssue,startupSettingsManager);selectedCwd||process.exit(0),sessionManager=SessionManager.open(missingSessionCwdIssue.sessionFile,sessionDir,selectedCwd)}else console.error(source_default.red(new MissingSessionCwdError(missingSessionCwdIssue).message)),process.exit(1);if(parsed.name!==void 0){let name=normalizeSessionName(parsed.name);name===void 0&&(console.error(source_default.red("Error: --name requires a non-empty value")),process.exit(1)),sessionManager.appendSessionInfo(name)}time("createSessionManager");let trustStore=new ProjectTrustStore(agentDir),sessionCwd=sessionManager.getCwd(),autoTrustOnReloadCwd=parsed.projectTrustOverride===void 0&&!hasTrustRequiringProjectResources(sessionCwd)?sessionCwd:void 0,trustPromptMode=parsed.help||parsed.listModels!==void 0?"print":appMode,projectTrustByCwd=new Map,resolvedExtensionPaths=resolveCliPaths(cwd,parsed.extensions),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes),createRuntime=async({cwd:cwd2,agentDir:agentDir2,sessionManager:sessionManager2,sessionStartEvent,projectTrustContext})=>{let isInitialRuntime=sessionStartEvent===void 0,projectTrustDiagnostics=[],cachedProjectTrust=projectTrustByCwd.get(cwd2),hasTrustRequiringResources=hasTrustRequiringProjectResources(cwd2),shouldResolveProjectTrust=parsed.projectTrustOverride===void 0&&cachedProjectTrust===void 0&&hasTrustRequiringResources,projectTrusted=shouldResolveProjectTrust?!1:cachedProjectTrust??parsed.projectTrustOverride??(!hasTrustRequiringResources||trustStore.get(cwd2)===!0),runtimeSettingsManager=SettingsManager.create(cwd2,agentDir2,{projectTrusted}),services2=await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager:runtimeSettingsManager,modelRuntimeSignal:AbortSignal.timeout(15e3),extensionFlagValues:parsed.unknownFlags,resourceLoaderReloadOptions:shouldResolveProjectTrust?{resolveProjectTrust:async({extensionsResult})=>{let trusted=await resolveProjectTrusted({cwd:cwd2,trustStore,trustOverride:parsed.projectTrustOverride,defaultProjectTrust:startupSettingsManager.getDefaultProjectTrust(),extensionsResult,projectTrustContext:projectTrustContext??createProjectTrustContext({cwd:cwd2,mode:isInitialRuntime?trustPromptMode:appMode,settingsManager:startupSettingsManager,hasUI:isInitialRuntime&&trustPromptMode==="interactive"}),onExtensionError:message=>projectTrustDiagnostics.push({type:"warning",message})});return projectTrustByCwd.set(cwd2,trusted),trusted}}:void 0,resourceLoaderOptions:{additionalExtensionPaths:resolvedExtensionPaths,additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noExtensions:parsed.noExtensions,disabledBuiltinExtensions:parsed.noMcp?["mcp"]:void 0,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,systemPrompt:parsed.systemPrompt,appendSystemPrompt:parsed.appendSystemPrompt,extensionFactories}}),{settingsManager:settingsManager2,modelRuntime:modelRuntime2,resourceLoader:resourceLoader2}=services2,diagnostics=[...projectTrustDiagnostics,...services2.diagnostics,...collectSettingsDiagnostics(settingsManager2),...resourceLoader2.getExtensions().errors.map(({path:path33,error})=>({type:"error",message:`Failed to load extension "${path33}": ${error}`})),...(resourceLoader2.getExtensions().warnings??[]).map(({path:path33,warning})=>({type:"warning",message:`Extension package "${path33}": ${warning}`}))],modelPatterns=parsed.models??settingsManager2.getEnabledModels(),scopedModels=modelPatterns&&modelPatterns.length>0?await resolveModelScope(modelPatterns,modelRuntime2,{signal:AbortSignal.timeout(15e3)}):[],{options:sessionOptions,cliThinkingFromModel,diagnostics:sessionOptionDiagnostics}=buildSessionOptions(parsed,scopedModels,sessionManager2.buildSessionContext().messages.length>0,modelRuntime2,settingsManager2);diagnostics.push(...sessionOptionDiagnostics),parsed.apiKey&&(sessionOptions.model?await modelRuntime2.setRuntimeApiKey(sessionOptions.model.provider,parsed.apiKey):diagnostics.push({type:"error",message:"--api-key requires a model to be specified via --model, --provider/--model, or --models"}));let created=await createAgentSessionFromServices({services:services2,sessionManager:sessionManager2,sessionStartEvent,model:sessionOptions.model,thinkingLevel:sessionOptions.thinkingLevel,scopedModels:sessionOptions.scopedModels,tools:sessionOptions.tools,excludeTools:sessionOptions.excludeTools,noTools:sessionOptions.noTools,customTools:sessionOptions.customTools}),cliThinkingOverride=parsed.thinking!==void 0||cliThinkingFromModel;return created.session.model&&cliThinkingOverride&&created.session.setThinkingLevel(created.session.thinkingLevel),{...created,services:services2,diagnostics}};time("createRuntime");let runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager});time("createAgentSessionRuntime");let{services,session,modelFallbackMessage}=runtime,{settingsManager,modelRuntime,resourceLoader}=services;if(setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides()),applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs()),parsed.help){reportDiagnostics(startupSettingsDiagnostics);let extensionFlags=resourceLoader.getExtensions().extensions.flatMap(extension2=>Array.from(extension2.flags.values()));printHelp(extensionFlags),process.exit(0)}if(parsed.listModels!==void 0){reportDiagnostics(startupSettingsDiagnostics);let searchPattern=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(modelRuntime,searchPattern,AbortSignal.timeout(15e3)),process.exit(0)}let stdinContent;appMode!=="rpc"&&(stdinContent=await readPipedStdin(),stdinContent!==void 0&&appMode==="interactive"&&(appMode="print")),time("readPipedStdin");let{initialMessage,initialImages}=await prepareInitialMessage(parsed,stdinContent);time("prepareInitialMessage"),initTheme(settingsManager.getTheme(),appMode==="interactive"),time("initTheme"),appMode==="interactive"&&deprecationWarnings.length>0&&await showDeprecationWarnings(deprecationWarnings),time("resolveModelScope");let startupDiagnostics=deduplicateDiagnostics([...startupSettingsDiagnostics,...runtime.diagnostics]),hasRuntimeErrors=runtime.diagnostics.some(diagnostic=>diagnostic.type==="error");(appMode!=="interactive"||hasRuntimeErrors)&&reportDiagnostics(startupDiagnostics),hasRuntimeErrors&&(runtime.diagnostics.some(diagnostic=>diagnostic.message.includes("Failed to load extension"))&&console.error(source_default.yellow(EXTENSION_LOAD_FAILURE_HINT)),process.exit(1)),time("createAgentSession"),appMode!=="interactive"&&!session.model&&(console.error(source_default.red(formatNoModelsAvailableMessage())),process.exit(1));let startupBenchmark=isTruthyEnvFlag2(process.env.PI_STARTUP_BENCHMARK);if(startupBenchmark&&appMode!=="interactive"&&(console.error(source_default.red("Error: PI_STARTUP_BENCHMARK only supports interactive mode")),process.exit(1)),!offlineMode&&appMode==="rpc"){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),15e3);modelRuntime.refresh({signal:controller.signal}).catch(()=>{}).finally(()=>clearTimeout(timeout))}if(appMode==="rpc")printTimings(),await runRpcMode(runtime);else if(appMode==="interactive"){let interactiveMode=new InteractiveMode(runtime,{migratedProviders,startupDiagnostics,modelFallbackMessage,autoTrustOnReloadCwd,initialMessage,initialImages,initialMessages:parsed.messages,verbose:parsed.verbose,tuiMode:parsed.tuiMode,initialThemeSetting:parsed.useTheme});if(startupBenchmark){await interactiveMode.init(),time("interactiveMode.init"),await new Promise(resolve19=>setTimeout(resolve19,150)),interactiveMode.stop(),stopThemeWatcher(),printTimings(),process.stdout.writableLength>0&&await new Promise(resolve19=>process.stdout.once("drain",resolve19)),process.stderr.writableLength>0&&await new Promise(resolve19=>process.stderr.once("drain",resolve19));return}printTimings(),await interactiveMode.run()}else{printTimings();let exitCode=await runPrintMode(runtime,{mode:toPrintOutputMode(appMode),messages:parsed.messages,initialMessage,initialImages});stopThemeWatcher(),restoreStdout(),exitCode!==0&&(process.exitCode=exitCode);return}}var EXTENSION_LOAD_FAILURE_HINT,init_main=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/main.js"(){init_dist2();init_dist6();init_source();init_args();init_auth_check();init_auth_command();init_credential_print();init_file_processor();init_initial_message();init_list_models();init_project_trust();init_session_picker();init_startup_ui();init_config();init_agent_session_runtime();init_agent_session_services();init_auth_guidance();init_auth_storage();init_export_html();init_http_dispatcher();init_model_resolver();init_model_runtime();init_output_guard();init_project_trust2();init_session_cwd();init_session_manager();init_settings_diagnostics();init_settings_manager();init_timings();init_trust_manager();init_extensions3();init_cli_lazy();init_migrations();init_modes();init_theme();init_theme_schema();init_package_manager_cli();init_paths();init_windows_self_update();EXTENSION_LOAD_FAILURE_HINT=`Hint: Start without extensions using "${APP_NAME} -ne".`}});var SHOW_IMAGES_SELECT_LIST_LAYOUT,ShowImagesSelectorComponent,init_show_images_selector=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js"(){init_dist6();init_theme();init_dynamic_border();SHOW_IMAGES_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ShowImagesSelectorComponent=class extends Container{selectList;constructor(currentValue,onSelect,onCancel){super();let items=[{value:"yes",label:"Yes",description:"Show images inline in terminal"},{value:"no",label:"No",description:"Show text placeholder instead"}];this.addChild(new DynamicBorder),this.selectList=new SelectList(items,5,getSelectListTheme(),SHOW_IMAGES_SELECT_LIST_LAYOUT),this.selectList.setSelectedIndex(currentValue?0:1),this.selectList.onSelect=item=>{onSelect(item.value==="yes")},this.selectList.onCancel=()=>{onCancel()},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}}}});var THEME_SELECT_LIST_LAYOUT,ThemeSelectorComponent,init_theme_selector=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.js"(){init_dist6();init_theme();init_dynamic_border();THEME_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ThemeSelectorComponent=class extends Container{selectList;onPreview;constructor(currentTheme,onSelect,onCancel,onPreview){super(),this.onPreview=onPreview;let themes=getAvailableThemes(),themeItems2=themes.map(name=>({value:name,label:name,description:name===currentTheme?"(current)":void 0}));this.addChild(new DynamicBorder),this.selectList=new SelectList(themeItems2,10,getSelectListTheme(),THEME_SELECT_LIST_LAYOUT);let currentIndex=themes.indexOf(currentTheme);currentIndex!==-1&&this.selectList.setSelectedIndex(currentIndex),this.selectList.onSelect=item=>{onSelect(item.value)},this.selectList.onCancel=()=>{onCancel()},this.selectList.onSelectionChange=item=>{this.onPreview(item.value)},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}}}});var init_components=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.js"(){init_armin();init_assistant_message();init_bash_execution();init_bordered_loader();init_branch_summary_message();init_compaction_summary_message();init_custom_editor();init_custom_message();init_diff2();init_dynamic_border();init_extension_editor();init_extension_input();init_extension_selector();init_first_time_setup();init_footer();init_keybinding_hints();init_login_dialog();init_model_selector();init_oauth_selector();init_scoped_models_selector();init_session_selector();init_settings_selector();init_show_images_selector();init_skill_invocation_message();init_theme_selector();init_thinking_selector();init_tool_execution();init_tree_selector();init_trust_selector();init_user_message();init_user_message_selector();init_visual_truncate()}});var dist_exports3={};__export(dist_exports3,{AgentSession:()=>AgentSession,AgentSessionRuntime:()=>AgentSessionRuntime,ArminComponent:()=>ArminComponent,AssistantMessageComponent:()=>AssistantMessageComponent,BashExecutionComponent:()=>BashExecutionComponent,BorderedLoader:()=>BorderedLoader,BranchSummaryMessageComponent:()=>BranchSummaryMessageComponent,CONFIG_DIR_NAME:()=>CONFIG_DIR_NAME,CURRENT_SESSION_VERSION:()=>CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent:()=>CompactionSummaryMessageComponent,CredentialSynchronizationError:()=>CredentialSynchronizationError,CustomEditor:()=>CustomEditor,CustomMessageComponent:()=>CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES2,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES,DefaultPackageManager:()=>DefaultPackageManager,DefaultResourceLoader:()=>DefaultResourceLoader,DynamicBorder:()=>DynamicBorder,ExtensionEditorComponent:()=>ExtensionEditorComponent,ExtensionInputComponent:()=>ExtensionInputComponent,ExtensionRunner:()=>ExtensionRunner,ExtensionSelectorComponent:()=>ExtensionSelectorComponent,FooterComponent:()=>FooterComponent,InteractiveMode:()=>InteractiveMode,LoginDialogComponent:()=>LoginDialogComponent,ModelRegistry:()=>ModelRegistry,ModelRuntime:()=>ModelRuntime,ModelSelectorComponent:()=>ModelSelectorComponent,OAuthSelectorComponent:()=>OAuthSelectorComponent,ProjectTrustStore:()=>ProjectTrustStore,RpcClient:()=>RpcClient,SessionManager:()=>SessionManager,SessionSelectorComponent:()=>SessionSelectorComponent,SettingsManager:()=>SettingsManager,SettingsSelectorComponent:()=>SettingsSelectorComponent,ShowImagesSelectorComponent:()=>ShowImagesSelectorComponent,SkillInvocationMessageComponent:()=>SkillInvocationMessageComponent,Theme:()=>Theme,ThemeSelectorComponent:()=>ThemeSelectorComponent,ThinkingSelectorComponent:()=>ThinkingSelectorComponent,ToolExecutionComponent:()=>ToolExecutionComponent,TreeSelectorComponent:()=>TreeSelectorComponent,UserMessageComponent:()=>UserMessageComponent,UserMessageSelectorComponent:()=>UserMessageSelectorComponent,VERSION:()=>VERSION,VIRTUAL_MODEL_STATE_ENTRY:()=>VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries:()=>buildContextEntries,buildSessionContext:()=>buildSessionContext,buildSessionProjection:()=>buildSessionProjection,calculateContextTokens:()=>calculateContextTokens2,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,compact:()=>compact,convertToLlm:()=>convertToLlm,convertToPng:()=>convertToPng,copyToClipboard:()=>copyToClipboard,createAgentSession:()=>createAgentSession,createAgentSessionFromServices:()=>createAgentSessionFromServices,createAgentSessionRuntime:()=>createAgentSessionRuntime,createAgentSessionServices:()=>createAgentSessionServices,createBashTool:()=>createBashTool,createBashToolDefinition:()=>createBashToolDefinition,createCodemodeExtension:()=>createCodemodeExtension,createCodingTools:()=>createCodingTools,createEditTool:()=>createEditTool,createEditToolDefinition:()=>createEditToolDefinition,createEventBus:()=>createEventBus,createExtensionRuntime:()=>createExtensionRuntime,createFindTool:()=>createFindTool,createFindToolDefinition:()=>createFindToolDefinition,createGrepTool:()=>createGrepTool,createGrepToolDefinition:()=>createGrepToolDefinition,createLocalBashOperations:()=>createLocalBashOperations,createLocalPowerShellOperations:()=>createLocalPowerShellOperations,createLsTool:()=>createLsTool,createLsToolDefinition:()=>createLsToolDefinition,createMcpExtension:()=>createMcpExtension,createPowerShellTool:()=>createPowerShellTool,createPowerShellToolDefinition:()=>createPowerShellToolDefinition,createReadOnlyTools:()=>createReadOnlyTools,createReadTool:()=>createReadTool,createReadToolDefinition:()=>createReadToolDefinition,createSyntheticSourceInfo:()=>createSyntheticSourceInfo,createToolSearchExtension:()=>createToolSearchExtension,createWriteTool:()=>createWriteTool,createWriteToolDefinition:()=>createWriteToolDefinition,defineTool:()=>defineTool,detectSupportedImageMimeTypeFromFile:()=>detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions:()=>discoverAndLoadExtensions,estimateTokens:()=>estimateTokens2,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatDimensionNote:()=>formatDimensionNote,formatReadLineRange:()=>formatReadLineRange,formatSize:()=>formatSize,formatSkillsForPrompt:()=>formatSkillsForPrompt,generateBranchSummary:()=>generateBranchSummary,generateDiffString:()=>generateDiffString,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,generateUnifiedPatch:()=>generateUnifiedPatch,getAgentDir:()=>getAgentDir,getDocsPath:()=>getDocsPath,getExamplesPath:()=>getExamplesPath,getLanguageFromPath:()=>getLanguageFromPath,getLastAssistantUsage:()=>getLastAssistantUsage,getLatestCompactionEntry:()=>getLatestCompactionEntry,getMarkdownTheme:()=>getMarkdownTheme,getPackageDir:()=>getPackageDir,getPowerShellConfig:()=>getPowerShellConfig,getReadmePath:()=>getReadmePath,getSelectListTheme:()=>getSelectListTheme,getSettingsListTheme:()=>getSettingsListTheme,getShellConfig:()=>getShellConfig,hasTrustRequiringProjectResources:()=>hasTrustRequiringProjectResources,highlightCode:()=>highlightCode,initTheme:()=>initTheme,isBashToolResult:()=>isBashToolResult,isEditToolResult:()=>isEditToolResult,isFindToolResult:()=>isFindToolResult,isGrepToolResult:()=>isGrepToolResult,isLsToolResult:()=>isLsToolResult,isPowerShellToolResult:()=>isPowerShellToolResult,isReadToolResult:()=>isReadToolResult,isToolCallEventType:()=>isToolCallEventType,isWriteToolResult:()=>isWriteToolResult,keyHint:()=>keyHint,keyText:()=>keyText,loadProjectContextFiles:()=>loadProjectContextFiles,loadSkills:()=>loadSkills,loadSkillsFromDir:()=>loadSkillsFromDir,main:()=>main,migrateSessionEntries:()=>migrateSessionEntries,parseArgs:()=>parseArgs,parseFrontmatter:()=>parseFrontmatter,parseSessionEntries:()=>parseSessionEntries,parseSkillBlock:()=>parseSkillBlock,prepareBranchEntries:()=>prepareBranchEntries,rawKeyHint:()=>rawKeyHint,readStoredCredential:()=>readStoredCredential,renderDiff:()=>renderDiff,resizeImage:()=>resizeImage,resolveCliModel:()=>resolveCliModel,resolveModelScopeWithDiagnostics:()=>resolveModelScopeWithDiagnostics,runPrintMode:()=>runPrintMode,runRpcMode:()=>runRpcMode,serializeConversation:()=>serializeConversation,sessionEntryToContextMessages:()=>sessionEntryToContextMessages,shouldCompact:()=>shouldCompact,stripFrontmatter:()=>stripFrontmatter,truncateHead:()=>truncateHead,truncateLine:()=>truncateLine,truncateTail:()=>truncateTail,truncateToVisualLines:()=>truncateToVisualLines,withFileMutationQueue:()=>withFileMutationQueue,wrapRegisteredTool:()=>wrapRegisteredTool,wrapRegisteredTools:()=>wrapRegisteredTools});var init_dist11=__esm({"node_modules/@earendil-works/pi-coding-agent/dist/index.js"(){init_args();init_config();init_agent_session();init_auth_storage();init_compaction2();init_event_bus();init_extensions();init_messages5();init_model_registry();init_model_resolver();init_model_runtime();init_package_manager();init_resource_loader();init_sdk2();init_session_manager();init_settings_manager();init_skills5();init_source_info();init_edit_diff();init_tools();init_render_utils();init_trust_manager();init_virtual_models();init_codemode();init_mcp();init_tool_search();init_main();init_modes();init_components();init_theme();init_clipboard();init_frontmatter();init_image_convert();init_image_resize();init_mime();init_shell()}});import{existsSync}from"node:fs";import path from"node:path";import{fileURLToPath}from"node:url";function findPackageDir(startDir){let dir=startDir;for(;dir!==path.dirname(dir);){if(existsSync(path.join(dir,"package.json")))return dir;dir=path.dirname(dir)}return startDir}var BKPER_PACKAGE_DIR=findPackageDir(path.dirname(fileURLToPath(import.meta.url)));function getPiPackageDir(){return findPackageDir(path.dirname(fileURLToPath(import.meta.resolve("@earendil-works/pi-coding-agent"))))}function applyPiPackageDir(env3=process.env){env3.PI_PACKAGE_DIR??=getPiPackageDir()}applyPiPackageDir();init_dist11();import path32 from"node:path";init_dist11();init_dist6();init_typesafe_system_one_lazy();var BKPER_AI_PROVIDER_ID="bkper",BKPER_AI_PRODUCTION_BASE_URL="https://ai.bkper.app/v1",BKPER_AI_BASE_URL_ENV_VAR="BKPER_AI_BASE_URL",BKPER_AI_DEVELOPMENT_ORIGIN="https://ai-dev.bkper.app",THINKING_LEVELS4=["off","minimal","low","medium","high","xhigh","max"],BKPER_AI_CLASSIFIER_API="typesafe-system-one",BKPER_AI_CHAT_API="openai-responses",CLASSIFIER_QUESTION_TYPES=["noul","choice","score"];function isSystemOneModel(model2){return model2.type==="system-one"||model2.type==="decision"}function answersClassifierQuestions(model2){return model2.question_types?.some(type=>CLASSIFIER_QUESTION_TYPES.includes(type))??!1}function isChatModel2(model2){return model2.type===void 0||model2.type==="language"}function invalidBkperAiBaseUrlError(){return new Error(`${BKPER_AI_BASE_URL_ENV_VAR} must be an HTTPS URL on ai-dev.bkper.app without credentials, a custom port, query parameters, or a fragment.`)}function getBkperAiBaseUrlOverride(env3=process.env){let configuredBaseUrl=env3[BKPER_AI_BASE_URL_ENV_VAR];if(configuredBaseUrl===void 0)return;let url;try{url=new URL(configuredBaseUrl)}catch{throw invalidBkperAiBaseUrlError()}if(configuredBaseUrl.trim()!==configuredBaseUrl||url.origin!==BKPER_AI_DEVELOPMENT_ORIGIN||url.username!==""||url.password!==""||url.search!==""||url.hash!=="")throw invalidBkperAiBaseUrlError();let path33=url.pathname.replace(/\/+$/,"");return`${url.origin}${path33}`}function isThinkingLevel(value){return THINKING_LEVELS4.some(level=>level===value)}function getDefaultThinkingLevel(model2){return isThinkingLevel(model2.default_thinking_level)?model2.default_thinking_level:model2.thinking_levels.includes("high")?"high":model2.thinking_levels.find(isThinkingLevel)}function getThinkingLevelMap(levels){let supports=level=>levels.includes(level)?level:null;return{off:levels.includes("none")?"none":null,minimal:supports("minimal"),low:supports("low"),medium:supports("medium"),high:supports("high"),xhigh:supports("xhigh"),max:supports("max")}}function nanoUsdPerTokenToUsdPerMillion(value){return value/1e3}var SYSTEM_ONE_MAX_IMAGE_SIDE=1568;async function fitImage(image){let resized=await resizeImage(Buffer.from(image.data,"base64"),image.mimeType,{maxWidth:SYSTEM_ONE_MAX_IMAGE_SIDE,maxHeight:SYSTEM_ONE_MAX_IMAGE_SIDE});return resized?.wasResized?{...image,data:resized.data,mimeType:resized.mimeType}:image}function withImagesFitted(classifier){return{classify:async(model2,context,options)=>classifier.classify(model2,context.images?.length?{...context,images:await Promise.all(context.images.map(fitImage))}:context,options)}}function getInputModalities(modalities){return modalities?.filter(modality=>modality==="text"||modality==="image")??[]}function toProviderModel(model2,defaultModelId){let input2=getInputModalities(model2.input_modalities);return{id:model2.id,name:model2.name??model2.id,reasoning:model2.thinking_levels.some(level=>level!=="none"),thinkingLevelMap:getThinkingLevelMap(model2.thinking_levels),input:input2,cost:{input:nanoUsdPerTokenToUsdPerMillion(model2.pricing.inputNanoUsdPerToken),output:nanoUsdPerTokenToUsdPerMillion(model2.pricing.outputNanoUsdPerToken),cacheRead:nanoUsdPerTokenToUsdPerMillion(model2.pricing.cachedInputNanoUsdPerToken),cacheWrite:nanoUsdPerTokenToUsdPerMillion(model2.pricing.cacheWriteNanoUsdPerToken)},...getPromptCache(model2.prompt_cache_ttl_seconds),contextWindow:model2.context_window,maxTokens:model2.max_output_tokens,compat:{supportsDeveloperRole:!1,sessionAffinityFormat:"openai",supportsLongCacheRetention:!1,...model2.mid_conversation_system_messages===!0?{supportsMidConvoSystemMessages:!0}:{}},bkperDefault:model2.id===defaultModelId,bkperDefaultThinkingLevel:getDefaultThinkingLevel(model2)}}function toClassifierModel(model2){return{type:"classifier",id:model2.id,name:model2.name??model2.id,api:BKPER_AI_CLASSIFIER_API,input:getInputModalities(model2.input_modalities??["text"]),cost:{input:nanoUsdPerTokenToUsdPerMillion(model2.pricing.inputNanoUsdPerToken),output:nanoUsdPerTokenToUsdPerMillion(model2.pricing.outputNanoUsdPerToken),cacheRead:0,cacheWrite:0},contextWindow:model2.context_window}}function getPromptCache(ttlSeconds){return typeof ttlSeconds=="number"&&Number.isFinite(ttlSeconds)&&ttlSeconds>0?{promptCache:{short:ttlSeconds}}:{}}async function fetchBkperAiModels(baseUrl,fetchFn,signal){let url=`${baseUrl}/models`,response=await fetchFn(url,{signal}),contentType2=response.headers.get("content-type")??"unknown content type",responseInfo=`${url} (HTTP ${response.status}, ${contentType2})`;if(!response.ok)throw new Error(`Bkper AI model request failed: ${responseInfo}.`);let catalog;try{catalog=await response.json()}catch{throw new Error(`Expected JSON Bkper AI model response from ${responseInfo}.`)}if(!Array.isArray(catalog.data))throw new Error("Bkper AI model response is invalid.");let classifierModels=catalog.data.filter(isSystemOneModel).filter(answersClassifierQuestions).map(toClassifierModel),chatModels=catalog.data.filter(isChatModel2).filter(model2=>model2.input_modalities?.includes("image")),defaultModelId=chatModels.find(model2=>model2.id===catalog.default_model)?.id??chatModels[0]?.id;return[...chatModels.map(model2=>toProviderModel(model2,defaultModelId)),...classifierModels]}function toStoredModel(model2,baseUrl){return model2.type==="classifier"?{...model2,api:model2.api??BKPER_AI_CLASSIFIER_API,provider:BKPER_AI_PROVIDER_ID,baseUrl}:{...model2,api:model2.api??BKPER_AI_CHAT_API,provider:BKPER_AI_PROVIDER_ID,baseUrl}}function fromStoredModel(model2){if(model2.type==="classifier"){let{provider:_provider2,baseUrl:_baseUrl2,...config2}=model2;return config2}if(model2.type==="image")return;let{provider:_provider,baseUrl:_baseUrl,api:_api,...config}=model2;return config}function getSavedModels(context,baseUrl){let models=context.stored?.models??[];if(!(models.length===0||models.some(model2=>model2.baseUrl!==baseUrl)))return models.flatMap(model2=>fromStoredModel(model2)??[])}async function refreshBkperAiModels(baseUrl,fetchFn,context){let savedModels=getSavedModels(context,baseUrl);if(!context.allowNetwork&&savedModels)return savedModels;let models=await fetchBkperAiModels(baseUrl,fetchFn,context.signal);return await context.publish({persist:{models:models.map(model2=>toStoredModel(model2,baseUrl)),checkedAt:Date.now()}}),models}function findDefaultBkperAiModel(models){return models.find(model2=>model2.provider===BKPER_AI_PROVIDER_ID&&model2.bkperDefault===!0)??models.find(model2=>model2.provider===BKPER_AI_PROVIDER_ID)}function getBkperAiDefaultThinkingLevel(model2){return model2?.provider===BKPER_AI_PROVIDER_ID?model2.bkperDefaultThinkingLevel:void 0}function getBkperAiProviderConfig(env3=process.env,fetchFn=fetch){let baseUrl=getBkperAiBaseUrlOverride(env3)??BKPER_AI_PRODUCTION_BASE_URL;return{name:"Bkper AI",baseUrl,apiKey:"!bkper auth token",authHeader:!0,headers:{"bkper-ai-source":"bkper-cli","User-Agent":"bkper-cli"},api:BKPER_AI_CHAT_API,classifiers:{[BKPER_AI_CLASSIFIER_API]:withImagesFitted(typesafeSystemOneApi())},models:[],refreshModels:context=>refreshBkperAiModels(baseUrl,fetchFn,context)}}function registerBkperAiProvider(pi,env3=process.env){pi.registerProvider(BKPER_AI_PROVIDER_ID,getBkperAiProviderConfig(env3))}init_dist11();import{join as join50}from"node:path";init_dist11();import{accessSync as accessSync4,constants as constants10,existsSync as existsSync29,readFileSync as readFileSync25,realpathSync as realpathSync3}from"fs";import path20 from"path";var PACKAGE_DIR=BKPER_PACKAGE_DIR,VERSION5=JSON.parse(readFileSync25(path20.join(PACKAGE_DIR,"package.json"),"utf8")).version;function readInstalledVersion(packageJsonPath){try{let data=JSON.parse(readFileSync25(packageJsonPath,"utf8"));return typeof data.version=="string"?data.version:void 0}catch{return}}function isNewerVersion(current,latest){let parse3=v2=>v2.split(".").map(Number),[cMajor,cMinor,cPatch]=parse3(current),[lMajor,lMinor,lPatch]=parse3(latest);return lMajor!==cMajor?lMajor>cMajor:lMinor!==cMinor?lMinor>cMinor:lPatch>cPatch}import{spawn as spawn15}from"child_process";import{createHash as createHash4}from"crypto";import{closeSync as closeSync2,mkdirSync as mkdirSync18,openSync as openSync2,readFileSync as readFileSync26,renameSync as renameSync6,statSync as statSync13,unlinkSync as unlinkSync3,writeFileSync as writeFileSync16}from"fs";import path22 from"path";import{fileURLToPath as fileURLToPath7}from"url";import path21 from"path";import os9 from"os";var BKPER_CONFIG_DIR=path21.join(os9.homedir(),".config","bkper"),BKPER_BIN_DIR=path21.join(BKPER_CONFIG_DIR,"bin"),DEFAULT_CLOUDFLARED_BIN=path21.join(BKPER_BIN_DIR,process.platform==="win32"?"cloudflared.exe":"cloudflared"),bin=process.env.CLOUDFLARED_BIN||DEFAULT_CLOUDFLARED_BIN;var CHECK_INTERVAL_MS=1440*60*1e3,AGENT_CHECK_INTERVAL_MS=300*1e3;var STALE_LOCK_MS=5e3;function getUpdateCachePath(packageDir=PACKAGE_DIR,configDir2=BKPER_CONFIG_DIR){let key=createHash4("sha256").update(packageDir).digest("hex").slice(0,16);return path22.join(configDir2,"update-check",`${key}.json`)}function isUpdateCheckDisabled(env3=process.env){if(env3.BKPER_DISABLE_AUTOUPDATE)return!0;let ci=env3.CI?.trim().toLowerCase();return!!ci&&ci!=="0"&&ci!=="false"}function readUpdateState(cachePath=getUpdateCachePath()){try{let data=JSON.parse(readFileSync26(cachePath,"utf8"));if(typeof data!="object"||data===null||Array.isArray(data))return{};let record=data,state3={};typeof record.lastAttemptedAt=="number"&&(state3.lastAttemptedAt=record.lastAttemptedAt),typeof record.latestVersion=="string"&&(state3.latestVersion=record.latestVersion);let install2=record.install;return install2&&typeof install2.version=="string"&&(install2.status==="installed"||install2.status==="manual"||install2.status==="failed")&&(state3.install={version:install2.version,status:install2.status},typeof install2.instruction=="string"&&(state3.install.instruction=install2.instruction)),state3}catch{return{}}}function writeUpdateState(state3,cachePath=getUpdateCachePath()){let tempPath=`${cachePath}.${process.pid}.tmp`;try{return mkdirSync18(path22.dirname(cachePath),{recursive:!0}),writeFileSync16(tempPath,`${JSON.stringify(state3)}
2282
2282
  `,{encoding:"utf8",mode:384}),renameSync6(tempPath,cachePath),!0}catch{try{unlinkSync3(tempPath)}catch{}return!1}}function withLock(cachePath,fn){let lockPath=`${cachePath}.lock`,fd;try{mkdirSync18(path22.dirname(cachePath),{recursive:!0});try{fd=openSync2(lockPath,"wx",384)}catch{if(Date.now()-statSync13(lockPath).mtimeMs<=STALE_LOCK_MS)return;unlinkSync3(lockPath),fd=openSync2(lockPath,"wx",384)}return fn()}catch{return}finally{if(fd!==void 0)try{closeSync2(fd),unlinkSync3(lockPath)}catch{}}}function spawnUpdateWorker(){let isTypeScript=import.meta.url.endsWith(".ts"),workerPath=fileURLToPath7(new URL(isTypeScript?"./update-worker.ts":"./update-worker.js",import.meta.url)),args=isTypeScript?[...process.execArgv,workerPath]:[workerPath];spawn15(process.execPath,args,{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}function maybeStartUpdateCheck(options={}){let cachePath=options.cachePath??getUpdateCachePath(),now=options.now??Date.now(),intervalMs=options.intervalMs??CHECK_INTERVAL_MS;if(isUpdateCheckDisabled(options.env??process.env)||!withLock(cachePath,()=>{let state3=readUpdateState(cachePath);return state3.lastAttemptedAt!==void 0&&now-state3.lastAttemptedAt<intervalMs?!1:writeUpdateState({...state3,lastAttemptedAt:now},cachePath)}))return!1;try{return(options.spawnWorker??spawnUpdateWorker)(),!0}catch{return!1}}function getUpdateNotice(state3,currentVersion=VERSION5,installedVersion=readInstalledVersion(path22.join(PACKAGE_DIR,"package.json"))){if(installedVersion&&isNewerVersion(currentVersion,installedVersion))return{kind:"installed",current:currentVersion,latest:installedVersion};let latest=state3.latestVersion;if(!latest||!isNewerVersion(currentVersion,latest))return;let install2=state3.install;if(!(!install2||install2.version!==latest))return install2.status==="installed"?{kind:"installed",current:currentVersion,latest}:{kind:"manual",current:currentVersion,latest,instruction:install2.instruction??"Run: bkper upgrade"}}function formatUpdateNotice(notice){return notice.kind==="installed"?`bkper ${notice.latest} installed (current ${notice.current}). Restart to use it.`:`bkper ${notice.latest} available (current ${notice.current}). ${notice.instruction}`}var import_google_auth_library2=__toESM(require_src5(),1);import fs15 from"fs";import os10 from"os";var DEVICE_AUTH_MARKER=["GO","CS","PX","-y","7Fw","gD","6p","fif","6_","rgJ","b3","yA","0-","d0","-Q","Ap"].join(""),OAUTH_CONFIG={clientId:"927657669669-3c5hmibuv6gve8135u2lrorrmj2rd6vd.apps.googleusercontent.com",clientSecret:DEVICE_AUTH_MARKER,scope:"https://www.googleapis.com/auth/userinfo.email",deviceCodeEndpoint:"https://oauth2.googleapis.com/device/code",tokenEndpoint:"https://oauth2.googleapis.com/token"},DEVICE_CODE_GRANT_TYPE="urn:ietf:params:oauth:grant-type:device_code",DEFAULT_DEVICE_POLL_INTERVAL_SECONDS=5,SLOW_DOWN_INCREMENT_MS=5e3,storedCredentials,oldCredentialsPath=`${os10.homedir()}/.bkper-credentials.json`,configDir=`${os10.homedir()}/.config/bkper`,storedCredentialsPath=`${configDir}/.bkper-credentials.json`;if(!fs15.existsSync(storedCredentialsPath)&&fs15.existsSync(oldCredentialsPath))try{fs15.mkdirSync(configDir,{recursive:!0});let oldCredentials=fs15.readFileSync(oldCredentialsPath,"utf8");fs15.writeFileSync(storedCredentialsPath,oldCredentials,"utf8"),fs15.rmSync(oldCredentialsPath)}catch{}try{let credentialsJson=fs15.readFileSync(storedCredentialsPath,"utf8");storedCredentials=JSON.parse(credentialsJson)}catch{}async function logoutBkper(){let tokenToRevoke=storedCredentials?.refresh_token??storedCredentials?.access_token;try{if(tokenToRevoke)return await createOAuthClient().revokeToken(tokenToRevoke),clearCredentials(),{remoteAccessRevoked:!0}}catch(err){return clearCredentials(),{remoteAccessRevoked:!1,warning:`Remote token revocation failed: ${err instanceof Error?err.message:String(err)}`}}return clearCredentials(),{remoteAccessRevoked:!1}}function isLoggedIn(){return storedCredentials!=null}function createOAuthClient(){return new import_google_auth_library2.OAuth2Client({clientId:OAUTH_CONFIG.clientId,clientSecret:OAUTH_CONFIG.clientSecret})}function mergeCredentials(base,updates){let merged={...base??{}},mergedRecord=merged;for(let[key,value]of Object.entries(updates))value!==void 0&&(mergedRecord[key]=value);return merged}function registerCredentialPersistence(localAuth){localAuth.on("tokens",tokens=>{storeCredentials(mergeCredentials(storedCredentials,tokens))})}function isRecord6(value){return typeof value=="object"&&value!==null}async function postOAuthForm(url,params,signal){let body=new URLSearchParams;for(let[key,value]of Object.entries(params))body.set(key,value);let response=await fetch(url,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body,signal}),contentType2=response.headers.get("content-type")??"unknown content type",responseInfo=`${url} (HTTP ${response.status}, ${contentType2})`,parsed;try{parsed=await response.json()}catch{throw new Error(`Expected JSON OAuth response from ${responseInfo}.`)}if(!isRecord6(parsed))throw new Error(`Unexpected OAuth response from ${responseInfo}.`);return{ok:response.ok,body:parsed}}function getOAuthErrorCode(body){let error=body.error;if(typeof error=="string")return error;let errorCode=body.error_code;if(typeof errorCode=="string")return errorCode}function formatOAuthError(prefix,body){let error=getOAuthErrorCode(body),description=body.error_description;return error&&typeof description=="string"?`${prefix}: ${error} - ${description}`:error?`${prefix}: ${error}`:prefix}function requireString(body,key,context){let value=body[key];if(typeof value!="string"||value.length===0)throw new Error(`Invalid ${context}: missing ${key}`);return value}function requireNumber(body,key,context){let value=body[key];if(typeof value!="number"||!Number.isFinite(value))throw new Error(`Invalid ${context}: missing ${key}`);return value}function optionalString3(body,key){let value=body[key];return typeof value=="string"?value:void 0}function parseDeviceCodeResponse(body){let intervalValue=body.interval,interval=typeof intervalValue=="number"&&Number.isFinite(intervalValue)?intervalValue:DEFAULT_DEVICE_POLL_INTERVAL_SECONDS;return{deviceCode:requireString(body,"device_code","device authorization response"),userCode:requireString(body,"user_code","device authorization response"),verificationUrl:requireString(body,"verification_url","device authorization response"),expiresIn:requireNumber(body,"expires_in","device authorization response"),interval}}function parseTokenResponse2(body){let accessToken=requireString(body,"access_token","device token response"),expiresIn=body.expires_in,credentials={access_token:accessToken},refreshToken=optionalString3(body,"refresh_token");refreshToken&&(credentials.refresh_token=refreshToken);let scope=optionalString3(body,"scope");scope&&(credentials.scope=scope);let tokenType=optionalString3(body,"token_type");tokenType&&(credentials.token_type=tokenType);let idToken=optionalString3(body,"id_token");return idToken&&(credentials.id_token=idToken),typeof expiresIn=="number"&&Number.isFinite(expiresIn)&&(credentials.expiry_date=Date.now()+expiresIn*1e3),credentials}async function requestDeviceCode(signal){let result=await postOAuthForm(OAUTH_CONFIG.deviceCodeEndpoint,{client_id:OAUTH_CONFIG.clientId,scope:OAUTH_CONFIG.scope},signal);if(!result.ok)throw new Error(formatOAuthError("Failed to request OAuth device code",result.body));return parseDeviceCodeResponse(result.body)}function printDeviceAuthorizationInstructions(deviceCode){console.log(`
2283
2283
  To authenticate Bkper CLI:
2284
2284
  1. Open this URL: ${deviceCode.verificationUrl}
@@ -2324,7 +2324,7 @@ ${request2.goal??""}`,"Preparing handoff...")};function sessionNameFromGoal(goal
2324
2324
  Details: ${error.path} ${error.error}`:BUILT_IN_BKPER_AGENT_FEATURE_ERROR}:error)}function normalizeBkperAgentExtensions(base,options){return{...base,extensions:base.extensions.map(normalizeBkperAgentExtension),errors:normalizeBkperAgentExtensionErrors(base.errors,options)}}function registerBkperAgentBuiltins(pi,startupMaintenance=runStartupMaintenance,settingsManager,env3=process.env,credentialManager,dispatchHandoffCommand,editGoal){let bkperAiBaseUrlOverride=getBkperAiBaseUrlOverride(env3);registerBkperAgentStartupExtension(pi,startupMaintenance,settingsManager,bkperAiBaseUrlOverride),registerBkperAgentAuthExtension(pi,void 0,credentialManager),registerBkperAiProvider(pi,env3),registerBkperHandoffExtension(pi,dispatchHandoffCommand,getBkperHandoffShortcutFromFile(getAgentDir()),{editGoal}),createCodemodeExtension()(pi),createToolSearchExtension()(pi),createMcpExtension()(pi)}init_dist11();import fs17 from"node:fs";import path28 from"node:path";var MAX_CONTEXT_AGENTS_CHARS=16e3,MAX_CONTEXT_SKILLS=50,defaultDirs=()=>({domain:getDomainContextDir(),user:getUserContextDir()});function cloneSkills(dir,whose){let skillsDir=path28.join(dir,".agents","skills");if(!fs17.existsSync(skillsDir))return{skills:[],diagnostics:[]};let loaded=loadSkillsFromDir({dir:skillsDir,source:"bkper-context"}),sorted=[...loaded.skills].sort((a,b2)=>a.name.localeCompare(b2.name)),diagnostics=[...loaded.diagnostics];return sorted.length>MAX_CONTEXT_SKILLS&&diagnostics.push({type:"warning",message:`${sorted.length} skills in ${whose}; only the first ${MAX_CONTEXT_SKILLS}, by name, load`,path:skillsDir}),{skills:sorted.slice(0,MAX_CONTEXT_SKILLS),diagnostics}}function withContextSkills(base,dirs=defaultDirs()){let skills=[...base.skills],diagnostics=[...base.diagnostics],clones=[...dirs.book?[{dir:dirs.book,whose:"this Book's agent context"}]:[],{dir:dirs.user,whose:"your agent context"},...dirs.domain?[{dir:dirs.domain,whose:"your company's agent context"}]:[]];for(let{dir,whose}of clones){let loaded=cloneSkills(dir,whose);diagnostics.push(...loaded.diagnostics);for(let skill of loaded.skills){let winner=skills.find(existing=>existing.name===skill.name);if(!winner){skills.push(skill);continue}diagnostics.push({type:"collision",message:`name "${skill.name}" collision`,path:skill.filePath,collision:{resourceType:"skill",name:skill.name,winnerPath:winner.filePath,loserPath:skill.filePath}})}}return{skills,diagnostics}}function agentsFile(dir){let file=path28.join(dir,"AGENTS.md"),content;try{content=fs17.readFileSync(file,"utf8")}catch{return}return content.length>MAX_CONTEXT_AGENTS_CHARS&&(content=content.slice(0,MAX_CONTEXT_AGENTS_CHARS)+`
2325
2325
 
2326
2326
  [AGENTS.md truncated at ${MAX_CONTEXT_AGENTS_CHARS} characters]`),{path:file,content}}function withContextAgentsFiles(base,agentDir,dirs=defaultDirs()){let added=[...dirs.domain?[dirs.domain]:[],dirs.user,...dirs.book?[dirs.book]:[]].flatMap(dir=>agentsFile(dir)??[]);if(!added.length)return base;let paths=new Set(added.map(file=>file.path)),global2=base.agentsFiles.filter(item=>path28.dirname(item.path)===path28.resolve(agentDir)),rest=base.agentsFiles.filter(item=>!global2.includes(item)&&!paths.has(item.path));return{agentsFiles:[...global2,...added,...rest]}}function bookContextNote(bookId,dir){return["## Book agent context","",`This session works on Book ${bookId}. Its agent context clone is ${dir}: its AGENTS.md and .agents/skills say how that Book works, for everyone who can view it, and load with your other context. Its procedures apply to that Book only. It never holds Book data, documents or reports. Pushing publishes to everyone who can view the Book (only its editors can push): before pushing, show the user the diff and who it affects. If a push is rejected, pull, rebase and ask again; never force-push.`].join(`
2327
- `)}import{styleText as styleText2}from"node:util";var AgentStartupError=class extends Error{constructor(message){super(message),this.name="AgentStartupError"}};function reportAgentCommandError(error,log=console.error){error instanceof AgentStartupError?log(styleText2("red",`Error: ${error.message}`)):log("Error running agent command:",error)}init_dist11();import{existsSync as existsSync30}from"node:fs";import path29 from"node:path";function resolveFirstExistingPath(candidates){for(let candidate of candidates)if(existsSync30(candidate))return candidate;return candidates[0]}var RUNNING_FROM_SOURCE=import.meta.url.endsWith(".ts");function resolveDocsIndexPath(filename){let sourceDocsPath=path29.join(BKPER_PACKAGE_DIR,"skill","references",filename),builtDocsPath=path29.join(BKPER_PACKAGE_DIR,"lib","docs",filename);return resolveFirstExistingPath(RUNNING_FROM_SOURCE?[sourceDocsPath]:[builtDocsPath,sourceDocsPath])}function normalizePromptSnippet(text){if(!text)return;let oneLine=text.replace(/[\r\n]+/g," ").replace(/\s+/g," ").trim();return oneLine.length>0?oneLine:void 0}function normalizePromptGuidelines(guidelines){if(!guidelines||guidelines.length===0)return[];let unique=new Set;for(let guideline of guidelines){let normalized=guideline.trim();normalized.length>0&&unique.add(normalized)}return Array.from(unique)}function getCodingToolDefinitions(selectedTools){return[createReadToolDefinition(process.cwd()),createBashToolDefinition(process.cwd()),createPowerShellToolDefinition(process.cwd()),createEditToolDefinition(process.cwd()),createWriteToolDefinition(process.cwd())].filter(definition=>selectedTools.includes(definition.name))}function getCodemodePromptContribution(){let contribution={guidelines:[]},registrar={registerTool:tool=>{contribution.snippet=normalizePromptSnippet(tool.promptSnippet),contribution.guidelines=normalizePromptGuidelines(tool.promptGuidelines)}};return createCodemodeExtension()(registrar),contribution}function getBkperCodemodeGuidelines(codemodeDocsPath){return["Use codemode, not shell loops or jq pipelines, to repeat commands across items.",`For judgments across many items \u2014 rank, score, classify, or filter by sentiment, urgency, relevance, or quality \u2014 do not read the items yourself: in one codemode script, load them, run a classifier with models.classify() per item, and return only counts and the selected items. Read ${codemodeDocsPath} first; find classifiers with models.getAvailableOfType("classifier").`]}function buildToolPromptSection(selectedTools){let toolDefinitions=getCodingToolDefinitions(selectedTools),codemode=selectedTools.includes("codemode")?getCodemodePromptContribution():void 0,toolLines=[...toolDefinitions.flatMap(definition=>{let snippet=normalizePromptSnippet(definition.promptSnippet);return snippet?[`- ${definition.name}: ${snippet}`]:[]}),...codemode?.snippet?[`- codemode: ${codemode.snippet}`]:[]].join(`
2327
+ `)}import{styleText as styleText2}from"node:util";var AgentStartupError=class extends Error{constructor(message){super(message),this.name="AgentStartupError"}};function reportAgentCommandError(error,log=console.error){error instanceof AgentStartupError?log(styleText2("red",`Error: ${error.message}`)):log("Error running agent command:",error)}init_dist11();import{existsSync as existsSync30}from"node:fs";import path29 from"node:path";function resolveFirstExistingPath(candidates){for(let candidate of candidates)if(existsSync30(candidate))return candidate;return candidates[0]}var RUNNING_FROM_SOURCE=import.meta.url.endsWith(".ts");function resolveDocsIndexPath(filename){let sourceDocsPath=path29.join(BKPER_PACKAGE_DIR,"skill","references",filename),builtDocsPath=path29.join(BKPER_PACKAGE_DIR,"lib","docs",filename);return resolveFirstExistingPath(RUNNING_FROM_SOURCE?[sourceDocsPath]:[builtDocsPath,sourceDocsPath])}function normalizePromptSnippet(text){if(!text)return;let oneLine=text.replace(/[\r\n]+/g," ").replace(/\s+/g," ").trim();return oneLine.length>0?oneLine:void 0}function normalizePromptGuidelines(guidelines){if(!guidelines||guidelines.length===0)return[];let unique=new Set;for(let guideline of guidelines){let normalized=guideline.trim();normalized.length>0&&unique.add(normalized)}return Array.from(unique)}function getCodingToolDefinitions(selectedTools){return[createReadToolDefinition(process.cwd()),createBashToolDefinition(process.cwd()),createPowerShellToolDefinition(process.cwd()),createEditToolDefinition(process.cwd()),createWriteToolDefinition(process.cwd())].filter(definition=>selectedTools.includes(definition.name))}function getCodemodePromptContribution(){let contribution={guidelines:[]},registrar={registerTool:tool=>{contribution.snippet=normalizePromptSnippet(tool.promptSnippet),contribution.guidelines=normalizePromptGuidelines(tool.promptGuidelines)}};return createCodemodeExtension()(registrar),contribution}function getBkperCodemodeGuidelines(codemodeDocsPath){return["Use codemode, not shell loops or jq pipelines, to repeat commands across items.",`For judgments across many items \u2014 rank, score, classify, or filter by sentiment, urgency, relevance, or quality \u2014 do not read the items yourself: in one codemode script, load them, run a classifier with models.classify() per item, and return only counts and the selected items. Ask one judgment per question; the script computes amounts, dates, and lookups and combines the answers. Read ${codemodeDocsPath} first; find classifiers with models.getAvailableOfType("classifier").`]}function buildToolPromptSection(selectedTools){let toolDefinitions=getCodingToolDefinitions(selectedTools),codemode=selectedTools.includes("codemode")?getCodemodePromptContribution():void 0,toolLines=[...toolDefinitions.flatMap(definition=>{let snippet=normalizePromptSnippet(definition.promptSnippet);return snippet?[`- ${definition.name}: ${snippet}`]:[]}),...codemode?.snippet?[`- codemode: ${codemode.snippet}`]:[]].join(`
2328
2328
  `),guidelineLines=[],seenGuidelines=new Set,addGuideline=guideline=>{let normalized=guideline.trim();normalized.length===0||seenGuidelines.has(normalized)||(seenGuidelines.add(normalized),guidelineLines.push(`- ${normalized}`))};selectedTools.includes("powershell")?addGuideline("Use PowerShell for file operations like listing, searching, and finding files. Use it to run bkper CLI commands when relevant."):selectedTools.includes("bash")&&addGuideline("Use bash for discovery and search like ls, rg, and find. Use it to run bkper CLI commands when relevant.");for(let definition of toolDefinitions)for(let guideline of normalizePromptGuidelines(definition.promptGuidelines))addGuideline(guideline);return codemode&&(codemode.guidelines.forEach(addGuideline),getBkperCodemodeGuidelines(path29.resolve(getPiPackageDir(),"docs","codemode.md")).forEach(addGuideline)),addGuideline("Do not claim builds, tests, or command results unless you actually ran them."),`Available tools:
2329
2329
  ${toolLines.length>0?toolLines:"(none)"}
2330
2330
 
@@ -2405,6 +2405,6 @@ ${buildToolPromptSection(selectedTools)}
2405
2405
  `}}async function readTextFile(filePath){let content;try{content=await readFile7(filePath,"utf-8")}catch(error){let message=error instanceof Error?error.message:String(error);throw new AgentStartupError(`Could not read file ${filePath}: ${message}`)}let text=content.startsWith("\uFEFF")?content.slice(1):content;return{text:`<file name="${filePath}">
2406
2406
  ${text}
2407
2407
  </file>
2408
- `}}async function buildInitialPrompt(messages=[],fileArgs=[],cwd=process.cwd()){let parts=[],images=[],fileText="";for(let file of fileArgs){let filePath=resolveFileArgumentPath(file,cwd);try{await access5(filePath)}catch{throw new AgentStartupError(`File not found: ${filePath}`)}if((await stat6(filePath)).size===0)continue;let mimeType=await detectSupportedImageMimeTypeFromFile(filePath),content=mimeType?await readImageFile(filePath,mimeType):await readTextFile(filePath);fileText+=content.text,content.image&&images.push(content.image)}fileText&&parts.push(fileText);let[firstMessage,...initialMessages]=messages;return firstMessage!==void 0&&parts.push(firstMessage),{...parts.length>0?{initialMessage:parts.join("")}:{},...images.length>0?{initialImages:images}:{},...initialMessages.length>0?{initialMessages}:{}}}init_dist11();var PI_RESUME_HINT_TEXT="To resume this session:",ANSI_PATTERN=/\x1B\[[0-?]*[ -/]*[@-~]/g;function isPiResumeHintOutput(chunk){return chunk.replace(ANSI_PATTERN,"").trimStart().startsWith(PI_RESUME_HINT_TEXT)}function suppressPiResumeHintOutput(){let originalWrite=process.stdout.write;return process.stdout.write=function(chunk,encoding,callback){return typeof chunk=="string"&&isPiResumeHintOutput(chunk)?!0:originalWrite.call(this,chunk,encoding,callback)},()=>{process.stdout.write=originalWrite}}function installBkperStartupHeader(mode){let host=mode,piMode=InteractiveMode.prototype,resettingExtensionUI=!1;host.shouldShowStartupHeader=()=>!1,host.setExtensionHeader=factory=>{(factory||!resettingExtensionUI)&&piMode.setExtensionHeader.call(mode,factory)},host.resetExtensionUI=()=>{resettingExtensionUI=!0;try{piMode.resetExtensionUI.call(mode)}finally{resettingExtensionUI=!1}}}var BkperInteractiveMode=class extends InteractiveMode{async init(){let interactiveMode=this;interactiveMode.getChangelogForDisplay=()=>{},installBkperStartupHeader(this),interactiveMode.keybindings&&installBkperSessionKeybindings(interactiveMode.keybindings),await super.init();let authRoutingMode=this,promptHistory=new FilePromptHistory(getPromptHistoryPath(getAgentDir())),providerRegistry=authRoutingMode.session?.modelRuntime;if(providerRegistry){let editors2=new Set([authRoutingMode.defaultEditor,authRoutingMode.editor].filter(editor=>editor!==void 0));for(let editor of editors2)installBkperAuthCommandRouting(editor,providerRegistry)}let editors=new Set([authRoutingMode.defaultEditor,authRoutingMode.editor].filter(editor=>editor!==void 0));for(let editor of editors)installPromptHistoryEditor(editor,promptHistory,!1);interactiveMode.keybindings&&installPromptHistoryShortcut(authRoutingMode,promptHistory,interactiveMode.keybindings)}async run(){let restoreResumeHintOutput=suppressPiResumeHintOutput();try{await super.run()}finally{restoreResumeHintOutput()}}};function isSameModel(left,right){return left.provider===right.provider&&left.id===right.id}function isThinkingLevel2(value){return["off","minimal","low","medium","high","xhigh","max"].includes(value)}function findExactModelMatch(modelReference,availableModels){let trimmedReference=modelReference.trim();if(!trimmedReference)return[];let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels.filter(model2=>`${model2.provider}/${model2.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length>0)return canonicalMatches;let idMatches=availableModels.filter(model2=>model2.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches:[]}function hasWildcard(pattern){return pattern.includes("*")||pattern.includes("?")}function escapeRegExp2(value){return value.replace(/[|\\{}()[\]^$+?.]/g,"\\$&")}function globToRegExp(pattern){let regex="^";for(let char of pattern){if(char==="*"){regex+=".*";continue}if(char==="?"){regex+=".";continue}regex+=escapeRegExp2(char)}return regex+="$",new RegExp(regex,"i")}function resolvePatternMatches(rawPattern,availableModels){let exactMatches=findExactModelMatch(rawPattern,availableModels);if(exactMatches.length>0)return{matches:exactMatches};let pattern=rawPattern.trim(),thinkingLevel,lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex!==-1){let suffix=pattern.substring(lastColonIndex+1).trim();isThinkingLevel2(suffix)&&(thinkingLevel=suffix,pattern=pattern.substring(0,lastColonIndex).trim())}let exactPatternMatches=findExactModelMatch(pattern,availableModels);if(exactPatternMatches.length>0)return{matches:exactPatternMatches,thinkingLevel};if(!hasWildcard(pattern))return{matches:[],thinkingLevel};let regex=globToRegExp(pattern);return{matches:availableModels.filter(model2=>{let fullId=`${model2.provider}/${model2.id}`;return regex.test(fullId)||regex.test(model2.id)}),thinkingLevel}}function restorePersistedSessionOptions(settingsManager,modelRegistry,sessionManager){let availableModels=modelRegistry.getAvailable(),sessionContext=sessionManager.buildSessionContext(),hasSessionMessages=sessionContext.messages.length>0,startupDefaultModel=findDefaultBkperAiModel(availableModels),unavailableBkperSessionModel=sessionContext.model?.provider===BKPER_AI_PROVIDER_ID&&modelRegistry.find(sessionContext.model.provider,sessionContext.model.modelId)===void 0,enabledModels=settingsManager.getEnabledModels();if(!enabledModels||enabledModels.length===0){if(hasSessionMessages)return{model:unavailableBkperSessionModel?startupDefaultModel:void 0,thinkingLevel:unavailableBkperSessionModel&&startupDefaultModel?getBkperAiDefaultThinkingLevel(startupDefaultModel):void 0,scopedModels:[],diagnostics:[]};let defaultProvider2=settingsManager.getDefaultProvider(),defaultModelId2=settingsManager.getDefaultModel(),defaultModel2=defaultProvider2&&defaultModelId2?modelRegistry.find(defaultProvider2,defaultModelId2):void 0,defaultThinkingLevel=defaultModel2?getBkperAiDefaultThinkingLevel(defaultModel2):void 0,fallbackStartupModel=!defaultProvider2&&!defaultModelId2||defaultProvider2===BKPER_AI_PROVIDER_ID&&defaultModelId2!==void 0&&defaultModel2===void 0?startupDefaultModel:void 0;return{model:defaultThinkingLevel?defaultModel2:fallbackStartupModel,thinkingLevel:defaultThinkingLevel??(fallbackStartupModel?getBkperAiDefaultThinkingLevel(fallbackStartupModel):void 0),scopedModels:[],diagnostics:[]}}let scopedModels=[],diagnostics=[];for(let pattern of enabledModels){let{matches,thinkingLevel}=resolvePatternMatches(pattern,availableModels);if(matches.length===0){diagnostics.push({type:"warning",message:`No models match enabledModels pattern "${pattern}"`});continue}for(let model2 of matches){if(scopedModels.some(scopedModel=>isSameModel(scopedModel.model,model2)))continue;let catalogThinkingLevel=getBkperAiDefaultThinkingLevel(model2);scopedModels.push({model:model2,thinkingLevel:thinkingLevel??catalogThinkingLevel})}}if(hasSessionMessages)return{model:unavailableBkperSessionModel?startupDefaultModel:void 0,thinkingLevel:unavailableBkperSessionModel&&startupDefaultModel?getBkperAiDefaultThinkingLevel(startupDefaultModel):void 0,scopedModels,diagnostics};if(scopedModels.length===0)return{scopedModels,diagnostics};let defaultProvider=settingsManager.getDefaultProvider(),defaultModelId=settingsManager.getDefaultModel(),defaultModel=defaultProvider&&defaultModelId?modelRegistry.find(defaultProvider,defaultModelId):void 0,selectedModel=(defaultModel?scopedModels.find(scopedModel=>isSameModel(scopedModel.model,defaultModel)):void 0)??scopedModels[0];return{model:selectedModel?.model,thinkingLevel:selectedModel?.thinkingLevel,scopedModels,diagnostics}}init_dist11();var CODEMODE_TOOL="codemode";function isToolModifier2(entry){return typeof entry=="string"&&(entry.startsWith("+")||entry.startsWith("-"))}function applyToolModifiers2(tools,modifiers2){let result=[...tools];for(let modifier of modifiers2){let name=modifier.slice(1),index3=result.indexOf(name);modifier.startsWith("+")&&index3===-1&&name?result.push(name):modifier.startsWith("-")&&index3!==-1&&result.splice(index3,1)}return result}function getModifierOnlyToolSelection(layers){let modifiers2=[];for(let layer of layers)if(layer!==void 0){if(!isModifierList(layer))return;modifiers2.push(...layer)}return modifiers2.length>0?modifiers2:void 0}function selectCliTools(defaultTools,cliTools){return isModifierList(cliTools)?applyToolModifiers2(defaultTools,cliTools):cliTools}function isModifierList(layer){return Array.isArray(layer)&&layer.every(isToolModifier2)}function disableUnavailableShells(configuredTools,availability){let unavailableShells=configuredTools.filter(tool=>tool==="bash"&&!availability.bash||tool==="powershell"&&!availability.powershell),tools=configuredTools.filter(tool=>!unavailableShells.includes(tool));return unavailableShells.length>0?{tools,warning:`Unavailable configured shell tools were disabled: ${unavailableShells.join(", ")}.`}:{tools}}function resolveBkperAgentTools(configuredTools,platform3,availability,toolModifiers=[]){if(configuredTools)return disableUnavailableShells(configuredTools,availability);let defaults4=selectDefaultBkperAgentTools(platform3,availability);if(toolModifiers.length===0)return defaults4;let modified=disableUnavailableShells(applyToolModifiers2(defaults4.tools,toolModifiers),availability),warnings=[defaults4.warning,modified.warning].filter(warning=>warning!==void 0);return warnings.length>0?{tools:modified.tools,warning:warnings.join(" ")}:{tools:modified.tools}}function selectDefaultBkperAgentTools(platform3,availability){return platform3==="win32"&&availability.powershell?{tools:["read","powershell","edit","write",CODEMODE_TOOL]}:availability.bash?platform3==="win32"?{tools:["read","bash","edit","write",CODEMODE_TOOL],warning:"PowerShell is unavailable; using Bash instead."}:{tools:["read","bash","edit","write",CODEMODE_TOOL]}:{tools:["read","edit","write",CODEMODE_TOOL],warning:"No supported shell is available; command execution is disabled."}}function overrideDefaultTools(settingsManager,tools){settingsManager.applyOverrides({defaultTools:tools.length>0?tools:(settingsManager.getDefaultTools()??[]).map(tool=>`-${tool}`)})}function canResolveShell(resolve19){try{return resolve19(),!0}catch{return!1}}function applyBkperAgentToolSelection(settingsManager,platform3=process.platform){let forceWindows=process.env.BKPER_AGENT_FORCE_PLATFORM==="win32",effectivePlatform=forceWindows?"win32":platform3,availability={bash:canResolveShell(()=>getShellConfig(settingsManager.getShellPath())),powershell:effectivePlatform==="win32"&&(forceWindows||canResolveShell(()=>getPowerShellConfig()))},toolModifiers=getModifierOnlyToolSelection([settingsManager.getGlobalSettings().defaultTools,settingsManager.getProjectSettings().defaultTools]),resolved=toolModifiers?resolveBkperAgentTools(void 0,effectivePlatform,availability,toolModifiers):resolveBkperAgentTools(settingsManager.getDefaultTools(),effectivePlatform,availability);return overrideDefaultTools(settingsManager,resolved.tools),resolved.warning?[{type:"warning",message:resolved.warning}]:[]}function applyBkperAgentSettingsDefaults(settingsManager){let globalSettings=settingsManager.getGlobalSettings(),projectSettings=settingsManager.getProjectSettings(),hasExplicitCacheMissNotices=[globalSettings.showCacheMissNotices,projectSettings.showCacheMissNotices].some(value=>value!==void 0),hasExplicitTuiMode=[globalSettings.tuiMode,projectSettings.tuiMode].some(value=>value!==void 0);hasExplicitCacheMissNotices||settingsManager.setShowCacheMissNotices(!0),hasExplicitTuiMode||settingsManager.setTuiMode("fullscreen"),[globalSettings.warnings?.anthropicExtraUsage,projectSettings.warnings?.anthropicExtraUsage].some(value=>value!==void 0)||settingsManager.setWarnings({...globalSettings.warnings,anthropicExtraUsage:!1}),globalSettings.cacheWarming===void 0&&settingsManager.setCacheWarmingMode("idle")}function collectSettingsDiagnostics2(settingsManager,context){return settingsManager.drainErrors().map(({scope,error})=>({type:"warning",message:`(${context}, ${scope} settings) ${error.message}`}))}function createStartupSessionManager(cwd,settingsManager,createSessionManager2){return createSessionManager2(cwd,settingsManager.getSessionDir())}import path31 from"node:path";import{fileURLToPath as fileURLToPath9}from"node:url";var BKPER_THEME_SETTING="bkper-light/bkper-dark";function getBkperThemesDir(moduleDir=path31.dirname(fileURLToPath9(import.meta.url))){return path31.resolve(moduleDir,"..","themes")}var[BKPER_LIGHT_THEME,BKPER_DARK_THEME]=BKPER_THEME_SETTING.split("/");function toBkperTheme(theme2,appearance){return theme2==="light"?BKPER_LIGHT_THEME:theme2==="dark"?BKPER_DARK_THEME:theme2==="system"?appearance==="light"?BKPER_LIGHT_THEME:BKPER_DARK_THEME:theme2}function resolveBkperInitialThemeSetting(settingsManager){let setting=settingsManager.getThemeSetting();if(setting===void 0||setting==="system")return BKPER_THEME_SETTING;let slots=setting.split("/"),resolved=slots.length===2?`${toBkperTheme(slots[0],"light")}/${toBkperTheme(slots[1],"dark")}`:toBkperTheme(setting,"dark");return resolved===setting?void 0:resolved}function reportDiagnostics2(diagnostics){for(let diagnostic of diagnostics){let prefix=diagnostic.type==="error"?"Error: ":diagnostic.type==="warning"?"Warning: ":"";console.error(`${prefix}${diagnostic.message}`)}}function resolveCliModelSelection(sessionOptions,modelRuntime){if(sessionOptions.provider&&!sessionOptions.model)throw new AgentStartupError(`--provider requires --model (for example: --provider ${sessionOptions.provider} --model <pattern>)`);if(!sessionOptions.model)return{thinkingLevel:sessionOptions.thinking,diagnostics:[]};let resolved=resolveCliModel({cliProvider:sessionOptions.provider,cliModel:sessionOptions.model,cliThinking:sessionOptions.thinking,modelRuntime});if(resolved.error||!resolved.model)throw new AgentStartupError(resolved.error??`Model "${sessionOptions.model}" not found`);return{model:resolved.model,thinkingLevel:sessionOptions.thinking??resolved.thinkingLevel,diagnostics:resolved.warning?[{type:"warning",message:resolved.warning}]:[]}}function createAgentModeDependencies(sessionOptions={}){return{createRuntime:async()=>{getBkperAiBaseUrlOverride();let cwd=process.cwd(),agentDir=getAgentDir(),contextDirs={domain:getDomainContextDir(),user:getUserContextDir(),...sessionOptions.bookId?{book:getBookContextDir(sessionOptions.bookId)}:{}},startupSettingsManager=SettingsManager.create(cwd,agentDir),startupDiagnostics=collectSettingsDiagnostics2(startupSettingsManager,"startup session lookup"),createRuntime=async({cwd:cwd2,agentDir:agentDir2,sessionManager:sessionManager2,sessionStartEvent})=>{let settingsManager=SettingsManager.create(cwd2,agentDir2),toolDiagnostics=applyBkperAgentToolSelection(settingsManager),defaultTools=settingsManager.getDefaultTools()??[],selectedTools=sessionOptions.tools?selectCliTools(defaultTools,sessionOptions.tools):defaultTools,modelRuntime=await ModelRuntime.create({authPath:join50(agentDir2,"auth.json"),modelsPath:join50(agentDir2,"models.json")}),promptHandoffCommand,dispatchHandoffCommand=async command=>{if(!promptHandoffCommand)throw new Error("Handoff command dispatch is not ready.");await promptHandoffCommand(command)},promptHistory=new FilePromptHistory(getPromptHistoryPath(agentDir2)),services=await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager,modelRuntime,resourceLoaderOptions:{additionalThemePaths:[getBkperThemesDir()],additionalExtensionPaths:sessionOptions.extensionPaths,noExtensions:sessionOptions.noExtensions,noSkills:sessionOptions.noSkills,noPromptTemplates:sessionOptions.noPromptTemplates,noContextFiles:sessionOptions.noContextFiles,systemPromptOverride:()=>[getBkperAgentSystemPrompt(selectedTools),contextDirs.book&&sessionOptions.bookId?bookContextNote(sessionOptions.bookId,contextDirs.book):void 0].filter(Boolean).join(`
2408
+ `}}async function buildInitialPrompt(messages=[],fileArgs=[],cwd=process.cwd()){let parts=[],images=[],fileText="";for(let file of fileArgs){let filePath=resolveFileArgumentPath(file,cwd);try{await access5(filePath)}catch{throw new AgentStartupError(`File not found: ${filePath}`)}if((await stat6(filePath)).size===0)continue;let mimeType=await detectSupportedImageMimeTypeFromFile(filePath),content=mimeType?await readImageFile(filePath,mimeType):await readTextFile(filePath);fileText+=content.text,content.image&&images.push(content.image)}fileText&&parts.push(fileText);let[firstMessage,...initialMessages]=messages;return firstMessage!==void 0&&parts.push(firstMessage),{...parts.length>0?{initialMessage:parts.join("")}:{},...images.length>0?{initialImages:images}:{},...initialMessages.length>0?{initialMessages}:{}}}init_dist11();var BkperTerminal=class extends ProcessTerminal{setTitle(title){super.setTitle(title.replace(/^π - /,"bkper - "))}setProgramStatus(status){super.setProgramStatus(status.app==="pi"?{...status,app:"bkper"}:status)}};var PI_RESUME_HINT_TEXT="To resume this session:",ANSI_PATTERN=/\x1B\[[0-?]*[ -/]*[@-~]/g;function isPiResumeHintOutput(chunk){return chunk.replace(ANSI_PATTERN,"").trimStart().startsWith(PI_RESUME_HINT_TEXT)}function suppressPiResumeHintOutput(){let originalWrite=process.stdout.write;return process.stdout.write=function(chunk,encoding,callback){return typeof chunk=="string"&&isPiResumeHintOutput(chunk)?!0:originalWrite.call(this,chunk,encoding,callback)},()=>{process.stdout.write=originalWrite}}function installBkperStartupHeader(mode){let host=mode,piMode=InteractiveMode.prototype,resettingExtensionUI=!1;host.shouldShowStartupHeader=()=>!1,host.setExtensionHeader=factory=>{(factory||!resettingExtensionUI)&&piMode.setExtensionHeader.call(mode,factory)},host.resetExtensionUI=()=>{resettingExtensionUI=!0;try{piMode.resetExtensionUI.call(mode)}finally{resettingExtensionUI=!1}}}var BkperInteractiveMode=class extends InteractiveMode{constructor(runtimeHost,options={}){super(runtimeHost,{...options,terminal:options.terminal??new BkperTerminal})}async init(){let interactiveMode=this;interactiveMode.getChangelogForDisplay=()=>{},installBkperStartupHeader(this),interactiveMode.keybindings&&installBkperSessionKeybindings(interactiveMode.keybindings),await super.init();let authRoutingMode=this,promptHistory=new FilePromptHistory(getPromptHistoryPath(getAgentDir())),providerRegistry=authRoutingMode.session?.modelRuntime;if(providerRegistry){let editors2=new Set([authRoutingMode.defaultEditor,authRoutingMode.editor].filter(editor=>editor!==void 0));for(let editor of editors2)installBkperAuthCommandRouting(editor,providerRegistry)}let editors=new Set([authRoutingMode.defaultEditor,authRoutingMode.editor].filter(editor=>editor!==void 0));for(let editor of editors)installPromptHistoryEditor(editor,promptHistory,!1);interactiveMode.keybindings&&installPromptHistoryShortcut(authRoutingMode,promptHistory,interactiveMode.keybindings)}async run(){let restoreResumeHintOutput=suppressPiResumeHintOutput();try{await super.run()}finally{restoreResumeHintOutput()}}};function isSameModel(left,right){return left.provider===right.provider&&left.id===right.id}function isThinkingLevel2(value){return["off","minimal","low","medium","high","xhigh","max"].includes(value)}function findExactModelMatch(modelReference,availableModels){let trimmedReference=modelReference.trim();if(!trimmedReference)return[];let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels.filter(model2=>`${model2.provider}/${model2.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length>0)return canonicalMatches;let idMatches=availableModels.filter(model2=>model2.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches:[]}function hasWildcard(pattern){return pattern.includes("*")||pattern.includes("?")}function escapeRegExp2(value){return value.replace(/[|\\{}()[\]^$+?.]/g,"\\$&")}function globToRegExp(pattern){let regex="^";for(let char of pattern){if(char==="*"){regex+=".*";continue}if(char==="?"){regex+=".";continue}regex+=escapeRegExp2(char)}return regex+="$",new RegExp(regex,"i")}function resolvePatternMatches(rawPattern,availableModels){let exactMatches=findExactModelMatch(rawPattern,availableModels);if(exactMatches.length>0)return{matches:exactMatches};let pattern=rawPattern.trim(),thinkingLevel,lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex!==-1){let suffix=pattern.substring(lastColonIndex+1).trim();isThinkingLevel2(suffix)&&(thinkingLevel=suffix,pattern=pattern.substring(0,lastColonIndex).trim())}let exactPatternMatches=findExactModelMatch(pattern,availableModels);if(exactPatternMatches.length>0)return{matches:exactPatternMatches,thinkingLevel};if(!hasWildcard(pattern))return{matches:[],thinkingLevel};let regex=globToRegExp(pattern);return{matches:availableModels.filter(model2=>{let fullId=`${model2.provider}/${model2.id}`;return regex.test(fullId)||regex.test(model2.id)}),thinkingLevel}}function restorePersistedSessionOptions(settingsManager,modelRegistry,sessionManager){let availableModels=modelRegistry.getAvailable(),sessionContext=sessionManager.buildSessionContext(),hasSessionMessages=sessionContext.messages.length>0,startupDefaultModel=findDefaultBkperAiModel(availableModels),unavailableBkperSessionModel=sessionContext.model?.provider===BKPER_AI_PROVIDER_ID&&modelRegistry.find(sessionContext.model.provider,sessionContext.model.modelId)===void 0,enabledModels=settingsManager.getEnabledModels();if(!enabledModels||enabledModels.length===0){if(hasSessionMessages)return{model:unavailableBkperSessionModel?startupDefaultModel:void 0,thinkingLevel:unavailableBkperSessionModel&&startupDefaultModel?getBkperAiDefaultThinkingLevel(startupDefaultModel):void 0,scopedModels:[],diagnostics:[]};let defaultProvider2=settingsManager.getDefaultProvider(),defaultModelId2=settingsManager.getDefaultModel(),defaultModel2=defaultProvider2&&defaultModelId2?modelRegistry.find(defaultProvider2,defaultModelId2):void 0,defaultThinkingLevel=defaultModel2?getBkperAiDefaultThinkingLevel(defaultModel2):void 0,fallbackStartupModel=!defaultProvider2&&!defaultModelId2||defaultProvider2===BKPER_AI_PROVIDER_ID&&defaultModelId2!==void 0&&defaultModel2===void 0?startupDefaultModel:void 0;return{model:defaultThinkingLevel?defaultModel2:fallbackStartupModel,thinkingLevel:defaultThinkingLevel??(fallbackStartupModel?getBkperAiDefaultThinkingLevel(fallbackStartupModel):void 0),scopedModels:[],diagnostics:[]}}let scopedModels=[],diagnostics=[];for(let pattern of enabledModels){let{matches,thinkingLevel}=resolvePatternMatches(pattern,availableModels);if(matches.length===0){diagnostics.push({type:"warning",message:`No models match enabledModels pattern "${pattern}"`});continue}for(let model2 of matches){if(scopedModels.some(scopedModel=>isSameModel(scopedModel.model,model2)))continue;let catalogThinkingLevel=getBkperAiDefaultThinkingLevel(model2);scopedModels.push({model:model2,thinkingLevel:thinkingLevel??catalogThinkingLevel})}}if(hasSessionMessages)return{model:unavailableBkperSessionModel?startupDefaultModel:void 0,thinkingLevel:unavailableBkperSessionModel&&startupDefaultModel?getBkperAiDefaultThinkingLevel(startupDefaultModel):void 0,scopedModels,diagnostics};if(scopedModels.length===0)return{scopedModels,diagnostics};let defaultProvider=settingsManager.getDefaultProvider(),defaultModelId=settingsManager.getDefaultModel(),defaultModel=defaultProvider&&defaultModelId?modelRegistry.find(defaultProvider,defaultModelId):void 0,selectedModel=(defaultModel?scopedModels.find(scopedModel=>isSameModel(scopedModel.model,defaultModel)):void 0)??scopedModels[0];return{model:selectedModel?.model,thinkingLevel:selectedModel?.thinkingLevel,scopedModels,diagnostics}}init_dist11();var CODEMODE_TOOL="codemode";function isToolModifier2(entry){return typeof entry=="string"&&(entry.startsWith("+")||entry.startsWith("-"))}function applyToolModifiers2(tools,modifiers2){let result=[...tools];for(let modifier of modifiers2){let name=modifier.slice(1),index3=result.indexOf(name);modifier.startsWith("+")&&index3===-1&&name?result.push(name):modifier.startsWith("-")&&index3!==-1&&result.splice(index3,1)}return result}function getModifierOnlyToolSelection(layers){let modifiers2=[];for(let layer of layers)if(layer!==void 0){if(!isModifierList(layer))return;modifiers2.push(...layer)}return modifiers2.length>0?modifiers2:void 0}function selectCliTools(defaultTools,cliTools){return isModifierList(cliTools)?applyToolModifiers2(defaultTools,cliTools):cliTools}function isModifierList(layer){return Array.isArray(layer)&&layer.every(isToolModifier2)}function disableUnavailableShells(configuredTools,availability){let unavailableShells=configuredTools.filter(tool=>tool==="bash"&&!availability.bash||tool==="powershell"&&!availability.powershell),tools=configuredTools.filter(tool=>!unavailableShells.includes(tool));return unavailableShells.length>0?{tools,warning:`Unavailable configured shell tools were disabled: ${unavailableShells.join(", ")}.`}:{tools}}function resolveBkperAgentTools(configuredTools,platform3,availability,toolModifiers=[]){if(configuredTools)return disableUnavailableShells(configuredTools,availability);let defaults4=selectDefaultBkperAgentTools(platform3,availability);if(toolModifiers.length===0)return defaults4;let modified=disableUnavailableShells(applyToolModifiers2(defaults4.tools,toolModifiers),availability),warnings=[defaults4.warning,modified.warning].filter(warning=>warning!==void 0);return warnings.length>0?{tools:modified.tools,warning:warnings.join(" ")}:{tools:modified.tools}}function selectDefaultBkperAgentTools(platform3,availability){return platform3==="win32"&&availability.powershell?{tools:["read","powershell","edit","write",CODEMODE_TOOL]}:availability.bash?platform3==="win32"?{tools:["read","bash","edit","write",CODEMODE_TOOL],warning:"PowerShell is unavailable; using Bash instead."}:{tools:["read","bash","edit","write",CODEMODE_TOOL]}:{tools:["read","edit","write",CODEMODE_TOOL],warning:"No supported shell is available; command execution is disabled."}}function overrideDefaultTools(settingsManager,tools){settingsManager.applyOverrides({defaultTools:tools.length>0?tools:(settingsManager.getDefaultTools()??[]).map(tool=>`-${tool}`)})}function canResolveShell(resolve19){try{return resolve19(),!0}catch{return!1}}function applyBkperAgentToolSelection(settingsManager,platform3=process.platform){let forceWindows=process.env.BKPER_AGENT_FORCE_PLATFORM==="win32",effectivePlatform=forceWindows?"win32":platform3,availability={bash:canResolveShell(()=>getShellConfig(settingsManager.getShellPath())),powershell:effectivePlatform==="win32"&&(forceWindows||canResolveShell(()=>getPowerShellConfig()))},toolModifiers=getModifierOnlyToolSelection([settingsManager.getGlobalSettings().defaultTools,settingsManager.getProjectSettings().defaultTools]),resolved=toolModifiers?resolveBkperAgentTools(void 0,effectivePlatform,availability,toolModifiers):resolveBkperAgentTools(settingsManager.getDefaultTools(),effectivePlatform,availability);return overrideDefaultTools(settingsManager,resolved.tools),resolved.warning?[{type:"warning",message:resolved.warning}]:[]}function applyBkperAgentSettingsDefaults(settingsManager){let globalSettings=settingsManager.getGlobalSettings(),projectSettings=settingsManager.getProjectSettings(),hasExplicitCacheMissNotices=[globalSettings.showCacheMissNotices,projectSettings.showCacheMissNotices].some(value=>value!==void 0),hasExplicitTuiMode=[globalSettings.tuiMode,projectSettings.tuiMode].some(value=>value!==void 0);hasExplicitCacheMissNotices||settingsManager.setShowCacheMissNotices(!0),hasExplicitTuiMode||settingsManager.setTuiMode("fullscreen"),[globalSettings.warnings?.anthropicExtraUsage,projectSettings.warnings?.anthropicExtraUsage].some(value=>value!==void 0)||settingsManager.setWarnings({...globalSettings.warnings,anthropicExtraUsage:!1}),globalSettings.cacheWarming===void 0&&settingsManager.setCacheWarmingMode("idle")}function collectSettingsDiagnostics2(settingsManager,context){return settingsManager.drainErrors().map(({scope,error})=>({type:"warning",message:`(${context}, ${scope} settings) ${error.message}`}))}function createStartupSessionManager(cwd,settingsManager,createSessionManager2){return createSessionManager2(cwd,settingsManager.getSessionDir())}import path31 from"node:path";import{fileURLToPath as fileURLToPath9}from"node:url";var BKPER_THEME_SETTING="bkper-light/bkper-dark";function getBkperThemesDir(moduleDir=path31.dirname(fileURLToPath9(import.meta.url))){return path31.resolve(moduleDir,"..","themes")}var[BKPER_LIGHT_THEME,BKPER_DARK_THEME]=BKPER_THEME_SETTING.split("/");function toBkperTheme(theme2,appearance){return theme2==="light"?BKPER_LIGHT_THEME:theme2==="dark"?BKPER_DARK_THEME:theme2==="system"?appearance==="light"?BKPER_LIGHT_THEME:BKPER_DARK_THEME:theme2}function resolveBkperInitialThemeSetting(settingsManager){let setting=settingsManager.getThemeSetting();if(setting===void 0||setting==="system")return BKPER_THEME_SETTING;let slots=setting.split("/"),resolved=slots.length===2?`${toBkperTheme(slots[0],"light")}/${toBkperTheme(slots[1],"dark")}`:toBkperTheme(setting,"dark");return resolved===setting?void 0:resolved}function reportDiagnostics2(diagnostics){for(let diagnostic of diagnostics){let prefix=diagnostic.type==="error"?"Error: ":diagnostic.type==="warning"?"Warning: ":"";console.error(`${prefix}${diagnostic.message}`)}}function resolveCliModelSelection(sessionOptions,modelRuntime){if(sessionOptions.provider&&!sessionOptions.model)throw new AgentStartupError(`--provider requires --model (for example: --provider ${sessionOptions.provider} --model <pattern>)`);if(!sessionOptions.model)return{thinkingLevel:sessionOptions.thinking,diagnostics:[]};let resolved=resolveCliModel({cliProvider:sessionOptions.provider,cliModel:sessionOptions.model,cliThinking:sessionOptions.thinking,modelRuntime});if(resolved.error||!resolved.model)throw new AgentStartupError(resolved.error??`Model "${sessionOptions.model}" not found`);return{model:resolved.model,thinkingLevel:sessionOptions.thinking??resolved.thinkingLevel,diagnostics:resolved.warning?[{type:"warning",message:resolved.warning}]:[]}}function createAgentModeDependencies(sessionOptions={}){return{createRuntime:async()=>{getBkperAiBaseUrlOverride();let cwd=process.cwd(),agentDir=getAgentDir(),contextDirs={domain:getDomainContextDir(),user:getUserContextDir(),...sessionOptions.bookId?{book:getBookContextDir(sessionOptions.bookId)}:{}},startupSettingsManager=SettingsManager.create(cwd,agentDir),startupDiagnostics=collectSettingsDiagnostics2(startupSettingsManager,"startup session lookup"),createRuntime=async({cwd:cwd2,agentDir:agentDir2,sessionManager:sessionManager2,sessionStartEvent})=>{let settingsManager=SettingsManager.create(cwd2,agentDir2),toolDiagnostics=applyBkperAgentToolSelection(settingsManager),defaultTools=settingsManager.getDefaultTools()??[],selectedTools=sessionOptions.tools?selectCliTools(defaultTools,sessionOptions.tools):defaultTools,modelRuntime=await ModelRuntime.create({authPath:join50(agentDir2,"auth.json"),modelsPath:join50(agentDir2,"models.json")}),promptHandoffCommand,dispatchHandoffCommand=async command=>{if(!promptHandoffCommand)throw new Error("Handoff command dispatch is not ready.");await promptHandoffCommand(command)},promptHistory=new FilePromptHistory(getPromptHistoryPath(agentDir2)),services=await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager,modelRuntime,resourceLoaderOptions:{additionalThemePaths:[getBkperThemesDir()],additionalExtensionPaths:sessionOptions.extensionPaths,noExtensions:sessionOptions.noExtensions,noSkills:sessionOptions.noSkills,noPromptTemplates:sessionOptions.noPromptTemplates,noContextFiles:sessionOptions.noContextFiles,systemPromptOverride:()=>[getBkperAgentSystemPrompt(selectedTools),contextDirs.book&&sessionOptions.bookId?bookContextNote(sessionOptions.bookId,contextDirs.book):void 0].filter(Boolean).join(`
2409
2409
 
2410
2410
  `),skillsOverride:base=>sessionOptions.noSkills?base:withContextSkills(base,contextDirs),agentsFilesOverride:base=>sessionOptions.noContextFiles?base:withContextAgentsFiles(base,agentDir2,contextDirs),extensionFactories:[pi=>{registerBkperAgentBuiltins(pi,callbacks=>runStartupMaintenance(callbacks,startupMaintenanceDependencies(sessionOptions.bookId)),settingsManager,process.env,modelRuntime,dispatchHandoffCommand,(prefill,context)=>editHandoffGoal(prefill,context,{history:promptHistory,templates:services.resourceLoader.getPrompts().prompts,externalEditorCommand:settingsManager.getExternalEditorCommand()}))}],extensionsOverride:base=>normalizeBkperAgentExtensions(base,{verbose:isBkperAgentVerboseDiagnosticsEnabled()})}});applyBkperAgentSettingsDefaults(settingsManager),overrideDefaultTools(settingsManager,defaultTools);let restoredSessionOptions=restorePersistedSessionOptions(settingsManager,{getAvailable:()=>[...services.modelRuntime.getAvailableSnapshot()],find:(provider2,modelId)=>services.modelRuntime.getModel(provider2,modelId)},sessionManager2),cliModelSelection=resolveCliModelSelection(sessionOptions,services.modelRuntime),sessionResult=await createAgentSessionFromServices({services,sessionManager:sessionManager2,sessionStartEvent,model:cliModelSelection.model??restoredSessionOptions.model,thinkingLevel:cliModelSelection.thinkingLevel??(cliModelSelection.model?void 0:restoredSessionOptions.thinkingLevel),scopedModels:restoredSessionOptions.scopedModels,tools:sessionOptions.tools});return sessionResult.session.model&&cliModelSelection.thinkingLevel&&sessionResult.session.setThinkingLevel(sessionResult.session.thinkingLevel),promptHandoffCommand=command=>sessionResult.session.prompt(command),{...sessionResult,services,diagnostics:[...services.diagnostics,...toolDiagnostics,...collectSettingsDiagnostics2(settingsManager,"runtime creation"),...restoredSessionOptions.diagnostics,...cliModelSelection.diagnostics]}},initialPrompt=await buildInitialPrompt(sessionOptions.messages,sessionOptions.fileArgs,cwd),sessionDir=startupSettingsManager.getSessionDir(),sessionManager;sessionOptions.noSession?sessionManager=SessionManager.inMemory():sessionOptions.sessionFile?sessionManager=SessionManager.open(sessionOptions.sessionFile,sessionDir):sessionOptions.continueSession?sessionManager=SessionManager.continueRecent(cwd,sessionDir):sessionManager=createStartupSessionManager(cwd,startupSettingsManager,(sessionCwd,sessionDir2)=>SessionManager.create(sessionCwd,sessionDir2));let runtime=await createAgentSessionRuntime(createRuntime,{cwd,agentDir,sessionManager});return{runtime,modelFallbackMessage:runtime.modelFallbackMessage,diagnostics:[...startupDiagnostics,...runtime.diagnostics],initialPrompt}},createInteractiveMode:(runtime,modelFallbackMessage,initialPrompt)=>new BkperInteractiveMode(runtime,{...initialPrompt,modelFallbackMessage,initialThemeSetting:resolveBkperInitialThemeSetting(runtime.services.settingsManager)})}}async function runAgentMode(dependencies=createAgentModeDependencies()){process.env.PI_SKIP_VERSION_CHECK??="1";let{runtime,modelFallbackMessage,diagnostics=[],initialPrompt}=await dependencies.createRuntime();reportDiagnostics2(diagnostics),await dependencies.createInteractiveMode(runtime,modelFallbackMessage,initialPrompt).run()}var ASSUMED_INTERACTIVE_ENVIRONMENT={stdinIsTTY:!0,stdoutIsTTY:!0};function createDefaultDependencies(){return{runPi:(args,options)=>main(args,options),runInteractiveMode:options=>runAgentMode(createAgentModeDependencies(options)),environment:{stdinIsTTY:process.stdin.isTTY===!0,stdoutIsTTY:process.stdout.isTTY===!0}}}function canRunEmbeddedInteractiveMode(dependencies){let environment=dependencies.environment??ASSUMED_INTERACTIVE_ENVIRONMENT;return environment.stdinIsTTY&&environment.stdoutIsTTY}var PI_SESSION_OPTIONS={extensionFactories:[registerBkperAiProvider]};function hasSystemPromptArg(args){return args.some(arg=>arg==="--system-prompt"||arg.startsWith("--system-prompt="))}function buildPiArgs(args){return hasSystemPromptArg(args)?args:["--system-prompt",getBkperAgentSystemPrompt(),...args]}var PI_MANAGEMENT_COMMANDS=new Set(["install","remove","uninstall","update","list","config","mcp"]);function isPiManagementCommand(args){let[command]=args;return command!==void 0&&PI_MANAGEMENT_COMMANDS.has(command)}var EMBEDDED_ARG_KEYS=new Set(["continue","resume","noSession","session","provider","model","thinking","tools","extensions","noExtensions","noSkills","noPromptTemplates","noContextFiles","projectTrustOverride","messages","fileArgs","unknownFlags","diagnostics"]);function isSessionPath(value){return value.includes("/")||value.includes("\\")||value.endsWith(".jsonl")}function hasOnlyEmbeddedArgs(parsed){return Object.keys(parsed).every(key=>EMBEDDED_ARG_KEYS.has(key)||parsed[key]===void 0)&&parsed.unknownFlags.size===0&&parsed.diagnostics.length===0&&parsed.projectTrustOverride!==!1&&(parsed.session===void 0||isSessionPath(parsed.session))}function parseEmbeddedSessionOptions(args,cwd=process.cwd()){let parsed=parseArgs(args);if(!hasOnlyEmbeddedArgs(parsed))return;let options={continueSession:parsed.continue||parsed.resume||void 0,noSession:parsed.noSession,sessionFile:parsed.session?path32.resolve(cwd,parsed.session):void 0,provider:parsed.provider,model:parsed.model,thinking:parsed.thinking,tools:parsed.tools,extensionPaths:parsed.extensions,noExtensions:parsed.noExtensions,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noContextFiles:parsed.noContextFiles,messages:parsed.messages.length>0?parsed.messages:void 0,fileArgs:parsed.fileArgs.length>0?parsed.fileArgs:void 0};return Object.fromEntries(Object.entries(options).filter(([,value])=>value!==void 0))}function takeBookOption(args){let rest=[],bookId;for(let index3=0;index3<args.length;index3++){let arg=args[index3],value;if(arg==="-b"||arg==="--book"){if(value=args[++index3],value===void 0)throw new AgentStartupError(`${arg} requires a Book ID`)}else if(arg.startsWith("--book="))value=arg.slice(7);else{rest.push(arg);continue}if(!BOOK_ID.test(value))throw new AgentStartupError(`'${value}' is not a Book ID`);bookId=value}return{...bookId?{bookId}:{},args:rest}}async function runAgentCommand(allArgs,dependencies=createDefaultDependencies()){let canRunEmbeddedInteractive=canRunEmbeddedInteractiveMode(dependencies),{bookId,args:piArgs}=isPiManagementCommand(allArgs)?{args:allArgs}:takeBookOption(allArgs),embedded=options2=>bookId?{bookId,...options2}:options2;if(piArgs.length===0){if(!canRunEmbeddedInteractive){refuseBookOutsideAgent(bookId),await dependencies.runPi(buildPiArgs(piArgs),PI_SESSION_OPTIONS);return}await dependencies.runInteractiveMode(embedded(void 0));return}if(isPiManagementCommand(piArgs)){await dependencies.runPi(piArgs);return}let options=parseEmbeddedSessionOptions(piArgs);if(!options||!canRunEmbeddedInteractive){refuseBookOutsideAgent(bookId);let args=buildPiArgs(piArgs);await dependencies.runPi(args,PI_SESSION_OPTIONS);return}await dependencies.runInteractiveMode(embedded(options))}function refuseBookOutsideAgent(bookId){if(bookId)throw new AgentStartupError("--book works only in the interactive agent, without options only pi supports")}runAgentCommand(process.argv.slice(2)).catch(err=>{reportAgentCommandError(err),process.exit(1)});
@@ -1 +1 @@
1
- {"version":3,"file":"bkper-ai-provider.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,YAAY,EACjB,KAAK,cAAc,EAEtB,MAAM,iCAAiC,CAAC;AAGzC,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAItE,QAAA,MAAM,eAAe,sEAAuE,CAAC;AAI7F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yBAAyB,CAAC,EAAE,oBAAoB,CAAC;CACpD;AAwED,wBAAgB,yBAAyB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,MAAM,GAAG,SAAS,CA0BpB;AA6OD,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,oBAAoB,EACvE,MAAM,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACxC,oBAAoB,GAAG,SAAS,CAIlC;AAED,wBAAgB,wBAAwB,CACpC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,OAAO,GAAE,OAAO,KAAa,GAC9B,cAAc,CAkBhB;AAED,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,IAAI,CAEN"}
1
+ {"version":3,"file":"bkper-ai-provider.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,YAAY,EACjB,KAAK,cAAc,EAEtB,MAAM,iCAAiC,CAAC;AAGzC,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAItE,QAAA,MAAM,eAAe,sEAAuE,CAAC;AAI7F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yBAAyB,CAAC,EAAE,oBAAoB,CAAC;CACpD;AAqFD,wBAAgB,yBAAyB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,MAAM,GAAG,SAAS,CA0BpB;AAgPD,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,oBAAoB,EACvE,MAAM,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACxC,oBAAoB,GAAG,SAAS,CAIlC;AAED,wBAAgB,wBAAwB,CACpC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,OAAO,GAAE,OAAO,KAAa,GAC9B,cAAc,CAkBhB;AAED,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,IAAI,CAEN"}
@@ -27,8 +27,15 @@ const BKPER_AI_DEVELOPMENT_ORIGIN = 'https://ai-dev.bkper.app';
27
27
  const THINKING_LEVELS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
28
28
  const BKPER_AI_CLASSIFIER_API = 'typesafe-system-one';
29
29
  const BKPER_AI_CHAT_API = 'openai-responses';
30
- function isDecisionModel(model) {
31
- return model.type === 'decision';
30
+ /** Wire kinds of the questions Pi classifiers ask: `bool` goes out as `noul`. */
31
+ const CLASSIFIER_QUESTION_TYPES = ['noul', 'choice', 'score'];
32
+ function isSystemOneModel(model) {
33
+ return model.type === 'system-one' || model.type === 'decision';
34
+ }
35
+ /** Extraction-only models, such as Clairic, answer no question a Pi classifier asks. */
36
+ function answersClassifierQuestions(model) {
37
+ var _a, _b;
38
+ return (_b = (_a = model.question_types) === null || _a === void 0 ? void 0 : _a.some(type => CLASSIFIER_QUESTION_TYPES.includes(type))) !== null && _b !== void 0 ? _b : false;
32
39
  }
33
40
  function isChatModel(model) {
34
41
  return model.type === undefined || model.type === 'language';
@@ -177,8 +184,11 @@ function fetchBkperAiModels(baseUrl, fetchFn, signal) {
177
184
  if (!Array.isArray(catalog.data)) {
178
185
  throw new Error('Bkper AI model response is invalid.');
179
186
  }
180
- // Split by type first: decision entries lack the chat fields toProviderModel reads.
181
- const classifierModels = catalog.data.filter(isDecisionModel).map(toClassifierModel);
187
+ // Split by type first: System One entries lack the chat fields toProviderModel reads.
188
+ const classifierModels = catalog.data
189
+ .filter(isSystemOneModel)
190
+ .filter(answersClassifierQuestions)
191
+ .map(toClassifierModel);
182
192
  const chatModels = catalog.data
183
193
  .filter(isChatModel)
184
194
  .filter(model => { var _a; return (_a = model.input_modalities) === null || _a === void 0 ? void 0 : _a.includes('image'); });
@@ -1 +1 @@
1
- {"version":3,"file":"bkper-ai-provider.js","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bkper-ai-provider.js","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { InteractiveMode } from '@earendil-works/pi-coding-agent';
1
+ import { InteractiveMode, type InteractiveModeOptions } from '@earendil-works/pi-coding-agent';
2
2
  export type InteractiveRuntimeHost = ConstructorParameters<typeof InteractiveMode>[0];
3
3
  export declare function suppressPiResumeHintOutput(): () => void;
4
4
  export declare class BkperInteractiveMode extends InteractiveMode {
5
+ constructor(runtimeHost: InteractiveRuntimeHost, options?: InteractiveModeOptions);
5
6
  init(): Promise<void>;
6
7
  run(): Promise<void>;
7
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/agent/interactive/interactive-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,eAAe,EAElB,MAAM,iCAAiC,CAAC;AAgBzC,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAStF,wBAAgB,0BAA0B,IAAI,MAAM,IAAI,CAmBvD;AAkCD,qBAAa,oBAAqB,SAAQ,eAAe;IAC/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DrB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B"}
1
+ {"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/agent/interactive/interactive-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,eAAe,EAEf,KAAK,sBAAsB,EAC9B,MAAM,iCAAiC,CAAC;AAiBzC,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAStF,wBAAgB,0BAA0B,IAAI,MAAM,IAAI,CAmBvD;AAkCD,qBAAa,oBAAqB,SAAQ,eAAe;gBACzC,WAAW,EAAE,sBAAsB,EAAE,OAAO,GAAE,sBAA2B;IAO/E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DrB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B"}
@@ -13,6 +13,7 @@ import { installPromptHistoryEditor, } from './prompt-history-search.js';
13
13
  import { installPromptHistoryShortcut } from './prompt-history-shortcut.js';
14
14
  import { FilePromptHistory, getPromptHistoryPath, } from './prompt-history-store.js';
15
15
  import { installBkperSessionKeybindings, } from './session-keybindings.js';
16
+ import { BkperTerminal } from './terminal.js';
16
17
  const PI_RESUME_HINT_TEXT = 'To resume this session:';
17
18
  const ANSI_PATTERN = /\x1B\[[0-?]*[ -/]*[@-~]/g;
18
19
  function isPiResumeHintOutput(chunk) {
@@ -56,6 +57,10 @@ function installBkperStartupHeader(mode) {
56
57
  };
57
58
  }
58
59
  export class BkperInteractiveMode extends InteractiveMode {
60
+ constructor(runtimeHost, options = {}) {
61
+ var _a;
62
+ super(runtimeHost, Object.assign(Object.assign({}, options), { terminal: (_a = options.terminal) !== null && _a !== void 0 ? _a : new BkperTerminal() }));
63
+ }
59
64
  init() {
60
65
  const _super = Object.create(null, {
61
66
  init: { get: () => super.init }
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/agent/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/agent/interactive/interactive-mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ProgramStatus } from '@earendil-works/pi-tui';
2
+ import { ProcessTerminal } from '../pi-shared-modules.js';
3
+ /** Brand Pi's terminal identity without changing its status lifecycle or user settings. */
4
+ export declare class BkperTerminal extends ProcessTerminal {
5
+ setTitle(title: string): void;
6
+ setProgramStatus(status: ProgramStatus): void;
7
+ }
8
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/agent/interactive/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,2FAA2F;AAC3F,qBAAa,aAAc,SAAQ,eAAe;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;CAKzD"}
@@ -0,0 +1,11 @@
1
+ import { ProcessTerminal } from '../pi-shared-modules.js';
2
+ /** Brand Pi's terminal identity without changing its status lifecycle or user settings. */
3
+ export class BkperTerminal extends ProcessTerminal {
4
+ setTitle(title) {
5
+ super.setTitle(title.replace(/^π - /, 'bkper - '));
6
+ }
7
+ setProgramStatus(status) {
8
+ super.setProgramStatus(status.app === 'pi' ? Object.assign(Object.assign({}, status), { app: 'bkper' }) : status);
9
+ }
10
+ }
11
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/agent/interactive/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,2FAA2F;AAC3F,MAAM,OAAO,aAAc,SAAQ,eAAe;IACrC,QAAQ,CAAC,KAAa;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACvD,CAAC;IAEQ,gBAAgB,CAAC,MAAqB;QAC3C,KAAK,CAAC,gBAAgB,CAClB,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,iCAAK,MAAM,KAAE,GAAG,EAAE,OAAO,IAAE,CAAC,CAAC,MAAM,CAC3D,CAAC;IACN,CAAC;CACJ"}
@@ -6,6 +6,6 @@
6
6
  * Routing every runtime value from pi-tui or pi-ai through this file keeps it that way.
7
7
  * Type-only imports are fine anywhere.
8
8
  */
9
- export { backgroundAnsi, Box, colorToRgb, CombinedAutocompleteProvider, Editor, foregroundAnsi, getKeybindings, indexedColor, matchesKey, rgbColor, truncateToWidth, TuiAltScreen, visibleWidth, } from '@earendil-works/pi-tui';
9
+ export { backgroundAnsi, Box, colorToRgb, CombinedAutocompleteProvider, Editor, foregroundAnsi, getKeybindings, indexedColor, matchesKey, ProcessTerminal, rgbColor, truncateToWidth, TuiAltScreen, visibleWidth, } from '@earendil-works/pi-tui';
10
10
  export { typesafeSystemOneApi } from '@earendil-works/pi-ai/api/typesafe-system-one.lazy';
11
11
  //# sourceMappingURL=pi-shared-modules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pi-shared-modules.d.ts","sourceRoot":"","sources":["../../src/agent/pi-shared-modules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACH,cAAc,EACd,GAAG,EACH,UAAU,EACV,4BAA4B,EAC5B,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAC,oBAAoB,EAAC,MAAM,oDAAoD,CAAC"}
1
+ {"version":3,"file":"pi-shared-modules.d.ts","sourceRoot":"","sources":["../../src/agent/pi-shared-modules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACH,cAAc,EACd,GAAG,EACH,UAAU,EACV,4BAA4B,EAC5B,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAC,oBAAoB,EAAC,MAAM,oDAAoD,CAAC"}
@@ -6,6 +6,6 @@
6
6
  * Routing every runtime value from pi-tui or pi-ai through this file keeps it that way.
7
7
  * Type-only imports are fine anywhere.
8
8
  */
9
- export { backgroundAnsi, Box, colorToRgb, CombinedAutocompleteProvider, Editor, foregroundAnsi, getKeybindings, indexedColor, matchesKey, rgbColor, truncateToWidth, TuiAltScreen, visibleWidth, } from '@earendil-works/pi-tui';
9
+ export { backgroundAnsi, Box, colorToRgb, CombinedAutocompleteProvider, Editor, foregroundAnsi, getKeybindings, indexedColor, matchesKey, ProcessTerminal, rgbColor, truncateToWidth, TuiAltScreen, visibleWidth, } from '@earendil-works/pi-tui';
10
10
  export { typesafeSystemOneApi } from '@earendil-works/pi-ai/api/typesafe-system-one.lazy';
11
11
  //# sourceMappingURL=pi-shared-modules.js.map