@robota-sdk/agent-cli 3.0.0-beta.64 → 3.0.0-beta.66

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.
@@ -1,4 +1,9 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./child-process-subagent-ipc-CEy8bLN6.cjs`);let t=require(`node:child_process`),n=require(`node:fs`),r=require(`node:path`),i=require(`node:url`),a=require(`@robota-sdk/agent-framework`),o=require(`@robota-sdk/agent-command`),s=require(`node:util`),c=require(`@robota-sdk/agent-executor`),l=require(`@robota-sdk/agent-core`),u=require(`@robota-sdk/agent-transport/headless`),d=require(`@robota-sdk/agent-transport/ws`),f=require(`@robota-sdk/agent-transport/tui`),p=require(`node:os`);const m=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],h=[`text`,`json`,`stream-json`];function ee(){process.stdout.write(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@robota-sdk/agent-framework`),t=require(`@robota-sdk/agent-transport`),n=require(`@robota-sdk/agent-transport/headless`),r=require(`node:child_process`),i=require(`node:fs`),a=require(`node:path`),o=require(`@robota-sdk/agent-transport/tui`),s=require(`@robota-sdk/agent-command`),c=require(`@robota-sdk/agent-provider`),l=require(`@robota-sdk/agent-core`),u=require(`node:util`),d=require(`@robota-sdk/agent-subagent-runner`);function f(e,t){let n=(0,i.readFileSync)((0,a.resolve)(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function p(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(f(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
2
+
3
+ `):void 0}async function m(e){let t=e.positional.join(` `).trim();if(!t&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);t=Buffer.concat(e).toString(`utf-8`).trim()}return t||(process.stderr.write(`Print mode (-p) requires a prompt argument.
4
+ `),process.exit(1)),t}async function h(t,i){let a=await m(t),o=p(i.cwd,t);t.systemPrompt&&process.stderr.write(`Warning: --system-prompt is not yet functional and will be ignored.
5
+ `);let s=new e.InteractiveSession({cwd:i.cwd,provider:i.provider,permissionMode:t.permissionMode??`bypassPermissions`,maxTurns:t.maxTurns,sessionStore:t.noSessionPersistence?void 0:i.sessionStore,sessionName:t.sessionName,bare:t.bare||void 0,allowedTools:t.allowedTools?t.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:o,backgroundTaskRunners:i.backgroundTaskRunners,subagentRunnerFactory:i.subagentRunnerFactory,commandModules:i.commandModules,commandHostAdapters:i.commandHostAdapters,shellExec:e=>(0,r.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),agentName:`robota-cli`}),c=(0,n.createHeadlessTransport)({outputFormat:t.outputFormat??`text`,prompt:a});s.attachTransport(c),await c.start(),await s.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(c.getExitCode())}async function g(e){let{runtime:t,version:n,commandSetup:i,providerSetup:a,sessionSetup:s,sessionOpts:c,startupUpdateNotice:l}=e;await new o.TuiTransport({runtime:t,providerOverride:a.providerSettings.name,providerType:a.providerSettings.name,modelId:a.modelId,language:c.language,permissionMode:c.permissionMode,maxTurns:c.maxTurns,version:n,resumeSessionId:s.resumeSessionId,showSessionPickerOnStart:s.showSessionPickerOnStart,forkSession:c.forkSession,sessionName:c.sessionName,shellExec:e=>(0,r.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:l,cliAdapter:(0,o.createDefaultTuiCliAdapter)({providerDefinitions:i.providerDefinitions,reloadPluginCommandSource:i.reloadPluginCommandSource}),agentName:`robota-cli`}).start()}function _(e){return{configure:e.configure,provider:e.provider,settingsScope:e.settingsScope,configureProvider:e.configureProvider,providerType:e.providerType,model:e.model,apiKey:e.apiKey,apiKeyEnv:e.apiKeyEnv,baseURL:e.baseURL,setCurrent:e.setCurrent,printMode:e.printMode,positional:e.positional}}function v(e){return{positional:e.positional,language:e.language,permissionMode:e.permissionMode,maxTurns:e.maxTurns,sessionName:e.sessionName,noSessionPersistence:e.noSessionPersistence,continueMode:e.continueMode,resumeId:e.resumeId,forkSession:e.forkSession,outputFormat:e.outputFormat,bare:e.bare,allowedTools:e.allowedTools,systemPrompt:e.systemPrompt,appendSystemPrompt:e.appendSystemPrompt,taskFile:e.taskFile,jsonSchema:e.jsonSchema}}function y(e){return{positional:e.positional,format:e.format,summary:e.summary,source:e.source}}function b(e){return{printMode:e.printMode,disableUpdateCheck:e.disableUpdateCheck}}function x(t,n={}){let r={settings:{read:()=>(0,e.readSettings)((0,e.getUserSettingsPath)()),write:t=>(0,e.writeSettings)((0,e.getUserSettingsPath)(),t)},plugin:(0,s.createDefaultPluginCommandAdapter)(t)},i=n.providerDefinitions??(0,c.createDefaultProviderDefinitions)();return{commandHostAdapters:r,providerDefinitions:i,commandModules:[...(0,s.createDefaultCommandModules)({cwd:t,providerDefinitions:i,providerSettingsAdapter:{readMergedSettings:()=>(0,e.readMergedProviderSettings)(t),readTargetSettings:()=>(0,e.readSettings)((0,e.resolveProviderSettingsWriteTargetPath)(t)),writeTargetSettings:n=>(0,e.writeSettings)((0,e.resolveProviderSettingsWriteTargetPath)(t),n)}}),...n.commandModules??[]],reloadPluginCommandSource:s.reloadPluginCommandSource}}function S(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function C(t,n,r,i=(0,c.createDefaultProviderDefinitions)()){let a=(0,e.resolveSettingsPathForScope)(t,S(n.settingsScope));return n.configureProvider?((0,e.applyProviderConfiguration)(a,E(n),{providerDefinitions:i}),r.writeLine(`Provider profile saved to ${a}`),!n.printMode&&n.positional.length===0):n.provider&&n.setCurrent?((0,e.applyProviderSwitch)(n.settingsScope===void 0?(0,e.resolveProviderSettingsWriteTargetPath)(t):a,n.provider,{knownProviders:(0,e.readMergedProviderSettings)(t).providers}),r.writeLine(`Current provider set to ${n.provider}`),!n.printMode&&n.positional.length===0):!1}async function w(e,t,n,r,i=(0,c.createDefaultProviderDefinitions)()){await(0,s.ensureProviderConfig)(e,{provider:t.provider,settingsScope:S(t.settingsScope)},n,r,i,{formatError:D,isInteractive:()=>process.stdin.isTTY===!0&&process.stdout.isTTY===!0})}async function T(e,t,n,r,i=(0,c.createDefaultProviderDefinitions)()){await(0,s.runProviderStartupSetup)(e,{settingsScope:S(t.settingsScope)},n,r,i)}function E(e){let t=e.providerType??e.configureProvider;if(!e.configureProvider||!t)throw Error(`--configure-provider requires a provider profile and --type`);return{profile:e.configureProvider,type:t,...e.model!==void 0&&{model:e.model},...e.apiKey!==void 0&&{apiKey:e.apiKey},...e.apiKeyEnv!==void 0&&{apiKeyEnv:e.apiKeyEnv},...e.baseURL!==void 0&&{baseURL:e.baseURL},setCurrent:e.setCurrent}}function D(e=(0,c.createDefaultProviderDefinitions)()){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${(0,l.formatSupportedProviderTypes)(e)}`,...e.map(O)].join(`
6
+ `)}function O(e){return` ${[`robota --configure-provider ${e.type}`,`--type ${e.type}`,...e.defaults?.baseURL===void 0?[]:[`--base-url <url>`],`--model <model>`,...e.requiresApiKey===!0?[`--api-key-env <ENV_NAME>`]:[],`--set-current`].join(` `)}`}async function k(e,t,r,i){if(t.configure)return await T(e,t,n.promptInput,i,r.providerDefinitions),{handled:!0};if(C(e,t,i,r.providerDefinitions))return{handled:!0};try{await w(e,t,n.promptInput,i,r.providerDefinitions)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return{handled:!1}}const A=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],j=[`text`,`json`,`stream-json`];function M(){return`
2
7
  Usage: robota [options] [-p <prompt>]
3
8
 
4
9
  Options:
@@ -26,19 +31,4 @@ Examples:
26
31
  robota -p "Hello" Print mode: send prompt and exit
27
32
  robota -p "Hello" --output-format json
28
33
  robota --continue Resume the last session
29
- `)}function g(e){if(e!==void 0)return h.includes(e)||(process.stderr.write(`Invalid --output-format "${e}". Valid: ${h.join(` | `)}\n`),process.exit(1)),e}function _(e){if(e!==void 0)return m.includes(e)||(process.stderr.write(`Invalid --permission-mode "${e}". Valid: ${m.join(` | `)}\n`),process.exit(1)),e}function v(e){if(e===void 0)return;let t=parseInt(e,10);return(isNaN(t)||t<=0)&&(process.stderr.write(`Invalid --max-turns "${e}". Must be a positive integer.\n`),process.exit(1)),t}function te(){let{values:e,positionals:t}=(0,s.parseArgs)({allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},model:{type:`string`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1}}});return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,model:e.model,language:e.language,permissionMode:_(e[`permission-mode`]),maxTurns:v(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:g(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1}}function y(){return(0,r.join)(process.env.HOME??process.env.USERPROFILE??`/`,`.robota`,`settings.json`)}function b(e){if(!(0,n.existsSync)(e))return{};let t=(0,n.readFileSync)(e,`utf8`);try{return JSON.parse(t)}catch{return process.stderr.write(`Warning: corrupt settings file at ${e}, resetting to defaults\n`),{}}}function x(e,t){(0,n.mkdirSync)((0,r.dirname)(e),{recursive:!0}),(0,n.writeFileSync)(e,JSON.stringify(t,null,2)+`
30
- `,`utf8`)}function S(e){return(0,n.existsSync)(e)?((0,n.unlinkSync)(e),!0):!1}function C(e){let t=ne();return[(0,r.join)(t,`.robota`,`settings.json`),(0,r.join)(t,`.claude`,`settings.json`),(0,r.join)(e,`.robota`,`settings.json`),(0,r.join)(e,`.robota`,`settings.local.json`),(0,r.join)(e,`.claude`,`settings.json`),(0,r.join)(e,`.claude`,`settings.local.json`)]}function ne(){return process.env.HOME??process.env.USERPROFILE??`/`}function w(e){return(0,a.readMergedProviderSettingsFromPaths)(C(e))}function T(e,t={}){let n=(0,a.resolveActiveProvider)(w(e),t.providerOverride,D(t));if(n!==void 0)return n;throw Error("No provider configuration found. Run `robota` to set up.")}function E(e,t,n={}){let r=D(n),i=T(e,{...n,providerDefinitions:r}),a=t??i.model;return(0,c.createProviderFromConfig)({...i,model:a},r)}function D(t){return t.providerDefinitions??e.r}function O(e,t={}){let n=t.settingsPaths??C(e),r=oe(n)??n[0];if(r===void 0)throw Error(`No settings path available for provider update`);return r}function k(e){return b(e)}function A(e,t,n={}){let r=(0,a.mergeProviderPatch)(k(e),(0,a.buildProviderSetupPatch)(t,n));return x(e,r),r}function j(e,t,n={}){let r=k(e),i=r.providers?.[t]!==void 0,o=n.knownProviders?.[t]!==void 0,s=i||o?{...r,currentProvider:t}:(0,a.setCurrentProvider)(r,t);return x(e,s),s}function re(e,t,n={}){let r=n.settingsPaths??C(e),i=(0,a.readMergedProviderSettingsFromPaths)(r),o=n.providerOverride??i.currentProvider;if(typeof o!=`string`)throw Error(`Cannot update model: no active provider profile. Set "currentProvider" in settings.`);return ie(r,o,t)}function ie(e,t,n){let r=ae(e,t)??e[0];if(r===void 0)throw Error(`No settings path available for model update`);let i=k(r),a=i.providers??{},o=a[t]??{},s={...i,providers:{...a,[t]:{...o,model:n}}};return x(r,s),{settingsPath:r,settings:s,profileName:t}}function ae(e,t){for(let n=e.length-1;n>=0;--n){let r=e[n];if(r!==void 0&&k(r).providers?.[t]!==void 0)return r}}function oe(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&k(n).currentProvider!==void 0)return n}}function M(e,t){if(t===void 0||t===`user`)return y();if(t===`project-local`)return(0,r.join)(e,`.robota`,`settings.local.json`);throw Error(`Invalid --settings-scope "${t}". Valid: user | project-local`)}function se(t,n,r=e.r){let i=M(t,n.settingsScope);return n.configureProvider?(A(i,le(n),{providerDefinitions:r}),process.stdout.write(`Provider profile saved to ${i}\n`),!n.printMode&&n.positional.length===0):n.provider&&n.setCurrent?(j(n.settingsScope===void 0?O(t):i,n.provider,{knownProviders:w(t).providers}),process.stdout.write(`Current provider set to ${n.provider}\n`),!n.printMode&&n.positional.length===0):!1}async function ce(t,n,r,i=e.r){let o=w(t);if((0,a.checkSettingsDocument)(n.provider===void 0?o:{...o,currentProvider:n.provider},i)===`valid`)return;if(!fe())throw Error(P(i));await N(t,ue(t,n),r,i);let s=w(t);if((0,a.checkSettingsDocument)(n.provider===void 0?s:{...s,currentProvider:n.provider},i)!==`valid`)throw Error(P(i))}async function N(t,n,r,i=e.r){let a=(0,o.resolveProviderSetupSelection)(await r((0,o.formatProviderSetupSelectionPrompt)(i)),i),s=M(t,n.settingsScope);A(s,await(0,o.runProviderSetupPromptFlow)(a,r,i,{existingProfileNames:Object.keys(w(t).providers??{})}),{providerDefinitions:i});let c=await r(` Response language (ko/en/ja/zh, default: en): `);if(c){let e=b(s);e.language=c,x(s,e)}process.stdout.write(`\n Config saved to ${s}\n\n`)}function le(e){let t=e.providerType??e.configureProvider;if(!e.configureProvider||!t)throw Error(`--configure-provider requires a provider profile and --type`);return{profile:e.configureProvider,type:t,...e.model!==void 0&&{model:e.model},...e.apiKey!==void 0&&{apiKey:e.apiKey},...e.apiKeyEnv!==void 0&&{apiKeyEnv:e.apiKeyEnv},...e.baseURL!==void 0&&{baseURL:e.baseURL},setCurrent:e.setCurrent}}function ue(e,t){if(t.settingsScope!==void 0||t.provider!==void 0)return t;let n=de(C(e));if(n===void 0)return t;let i=(0,r.join)(e,`.robota`,`settings.json`),a=(0,r.join)(e,`.robota`,`settings.local.json`);return n===i||n===a?{...t,settingsScope:`project-local`}:t}function de(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&typeof b(n).currentProvider==`string`)return n}}function fe(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function P(t=e.r){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${(0,l.formatSupportedProviderTypes)(t)}`,...t.map(pe)].join(`
31
- `)}function pe(e){return` ${[`robota --configure-provider ${e.type}`,`--type ${e.type}`,...e.defaults?.baseURL===void 0?[]:[`--base-url <url>`],`--model <model>`,...e.requiresApiKey===!0?[`--api-key-env <ENV_NAME>`]:[],`--set-current`].join(` `)}`}var me=class{entries=new Map;settingsPath;constructor(e){this.settingsPath=e}register(e){this.entries.set(e.name,e)}getAll(){let e=this.readTransportSettings();return Array.from(this.entries.values()).map(t=>({transport:t,config:this.resolveConfig(t,e[t.name])}))}getEnabled(){return this.getAll().filter(e=>e.config.enabled).map(e=>e.transport)}async setEnabled(e,t){let n=b(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,x(this.settingsPath,n)}async setOptions(e,t){let n=b(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,x(this.settingsPath,n)}async startAll(e){let t=this.getEnabled();for(let n of t)n.attach(e),await n.start()}async stopAll(){for(let e of this.entries.values())await e.stop()}resolveConfig(e,t){return{enabled:t?.enabled??e.defaultEnabled,options:t?.options??{}}}readTransportSettings(){let e=b(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};function he(e,t,n,r,i){switch(e.type){case`ready`:t();break;case`result`:n(e.output);break;case`error`:r(new c.BackgroundTaskError(`runner`,e.message));break;case`cancelled`:r(new c.BackgroundTaskError(`runner`,e.reason??`Subagent worker cancelled`));break;case`text_delta`:i?.({type:`background_task_text_delta`,delta:e.delta});break;case`tool_start`:i?.({type:`background_task_tool_start`,toolName:e.toolName,firstArg:F(e.toolArgs)});break;case`tool_end`:i?.({type:`background_task_tool_end`,toolName:e.toolName,success:e.success});break;default:r(new c.BackgroundTaskError(`runner`,`Unhandled subagent worker message`))}}function F(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function I(e,t){return new Promise((n,r)=>{if(!e.connected){r(new c.BackgroundTaskError(`crash`,`Subagent worker IPC channel is closed`));return}e.send(t,e=>{if(e){r(e);return}n()})})}async function L(e,t){e.child.connected&&await I(e.child,{type:`cancel`,reason:t}).catch(()=>void 0),e.killTimer=setTimeout(()=>{e.child.killed||e.child.kill(`SIGTERM`)},e.killGraceMs)}function R(e){return new Promise((t,n)=>{new ge(e,t,n).start()})}var ge=class{options;resolve;reject;settled=!1;started=!1;timeoutTimer;constructor(e,t,n){this.options=e,this.resolve=t,this.reject=n,this.timeoutTimer=ve(this.options.runtime,e=>this.rejectOnce(e))}start(){let{child:e}=this.options.runtime;e.on(`message`,this.onMessage),e.on(`error`,this.onError),e.on(`exit`,this.onExit),e.once(`spawn`,()=>{setImmediate(this.startWorker)})}startWorker=()=>{if(this.started)return;this.started=!0;let{child:e}=this.options.runtime;I(e,{type:`start`,payload:this.options.payload}).catch(e=>{this.rejectOnce(e instanceof Error?e:Error(String(e)))})};onMessage=t=>{if(!e.t(t)){this.rejectOnce(new c.BackgroundTaskError(`runner`,`Received malformed subagent worker message`));return}let{job:n}=this.options.runtime;he(t,this.startWorker,this.resolveOnce,this.rejectOnce,n.emit)};onError=e=>{this.rejectOnce(new c.BackgroundTaskError(`crash`,e.message))};onExit=(e,t)=>{this.settled||this.rejectOnce(new c.BackgroundTaskError(`crash`,be(e,t)))};resolveOnce=e=>{if(this.settled)return;this.settled=!0,this.clearTimers(),this.cleanup();let{runtime:t,resolveTranscriptPath:n}=this.options;this.resolve(ye(t.job,e,n))};rejectOnce=e=>{this.settled||(this.settled=!0,this.clearTimers(),this.cleanup(),this.reject(e))};clearTimers(){this.timeoutTimer&&clearTimeout(this.timeoutTimer),this.options.runtime.killTimer&&clearTimeout(this.options.runtime.killTimer)}cleanup(){let{child:e}=this.options.runtime;e.off(`message`,this.onMessage),e.off(`error`,this.onError),e.off(`exit`,this.onExit)}};function _e(e){let t=!1,n=()=>{};return{promise:new Promise((e,t)=>{n=t}),reject(r){t||(t=!0,n(new c.BackgroundTaskError(`runner`,r??`Subagent job cancelled: ${e}`)))}}}function ve(e,t){if(e.job.request.timeoutMs)return setTimeout(()=>{L(e,`Subagent worker timed out`),t(new c.BackgroundTaskError(`timeout`,`Subagent worker timed out`))},e.job.request.timeoutMs)}function ye(e,t,n){let r=n(e);return{jobId:e.jobId,output:t,...r?{metadata:{transcriptPath:r,logPath:r}}:{}}}function be(e,t){return`Subagent worker exited before result: ${t===null?`exit code ${e===null?`unknown`:e}`:`signal ${t}`}`}function z(e={}){return t=>{let n=new B(t,e);return e.worktreeIsolation===!1?n:(0,c.createWorktreeSubagentRunner)({runner:n,worktreeAdapter:e.worktreeAdapter??(0,c.createGitWorktreeIsolationAdapter)(),hooks:t.config.hooks,hookTypeExecutors:t.hookTypeExecutors})}}var B=class{deps;workerPath;execArgv;killGraceMs;providerConfig;env;logsDir;constructor(e,t={}){this.deps=e,this.workerPath=t.workerPath??we(),this.execArgv=t.execArgv,this.killGraceMs=t.killGraceMs??2e3,this.providerConfig=t.providerConfig,this.env=t.env,this.logsDir=t.logsDir}start(e){let n=(0,t.fork)(this.workerPath,[],{cwd:e.request.cwd,env:{...process.env,...this.env??{}},execArgv:this.execArgv??Te(this.workerPath),stdio:[`ignore`,`ignore`,`ignore`,`ipc`]}),r={job:e,child:n,killGraceMs:this.killGraceMs},i=R({runtime:r,payload:this.createStartPayload(e),resolveTranscriptPath:e=>this.resolveTranscriptPath(e)}),a=_e(e.jobId);i.catch(()=>void 0);let o=Promise.race([i,a.promise]),s=this.resolveTranscriptPath(e);return{jobId:e.jobId,...n.pid!==void 0&&{pid:n.pid},...s!==void 0&&{transcriptPath:s,logPath:s},result:o,cancel:async e=>{a.reject(e),await L(r,e)},send:async e=>{await I(n,{type:`send`,prompt:e})},...s!==void 0&&{readLog:async t=>Ee(e.jobId,s,t)}}}createStartPayload(e){let t=xe(e.request.type,this.deps.customAgentRegistry);return{jobId:e.jobId,request:e.request,agentDefinition:Se(t,e),parentConfig:this.deps.config,parentContext:this.deps.context,providerProfile:Ce(this.providerConfig,this.deps,e),permissionMode:this.deps.permissionMode,...this.logsDir?{logsDir:this.logsDir}:{}}}resolveTranscriptPath(e){if(this.logsDir)return(0,r.join)(this.logsDir,e.request.parentSessionId,`subagents`,`${e.jobId}.jsonl`)}};function xe(e,t){let n=t?.(e)??(0,a.getBuiltInAgent)(e);if(!n)throw new c.BackgroundTaskError(`validation`,`Unknown agent type: ${e}`);return n}function Se(e,t){return{...e,...t.request.model?{model:t.request.model}:{},...t.request.allowedTools?{tools:t.request.allowedTools}:{},...t.request.disallowedTools?{disallowedTools:t.request.disallowedTools}:{}}}function Ce(e,t,n){let r=e??t.config.provider;return{profileName:t.config.currentProvider,type:r.name,model:n.request.model??r.model,apiKey:r.apiKey,baseURL:r.baseURL,timeout:r.timeout,options:r.options}}function we(){let e=process.argv[1]??``,t=e?(0,r.dirname)(e):process.cwd(),i=e.endsWith(`.ts`)||e.endsWith(`.tsx`)?`.ts`:`.js`,a=[(0,r.join)(t,`subagents`,`child-process-subagent-worker${i}`),(0,r.join)(t,`child-process-subagent-worker${i}`)];for(let e of a)if((0,n.existsSync)(e))return e;return a[0]}function Te(e){return!e.endsWith(`.ts`)||process.execArgv.some(e=>e.includes(`tsx`))?process.execArgv:[...process.execArgv,`--import`,`tsx`]}function Ee(e,t,r){return(0,n.existsSync)(t)?(0,c.createBackgroundTaskLogPage)(e,(0,n.readFileSync)(t,`utf8`).split(/\r?\n/).filter(Boolean),r):{taskId:e,cursor:r,lines:[]}}function De(e,t){let n=V(e),r=V(t);if(n===void 0||r===void 0)return Math.sign(e.localeCompare(t));let i=U(n.major,r.major)||U(n.minor,r.minor)||U(n.patch,r.patch);return i===0?ke(n.prerelease,r.prerelease):i}function Oe(e,t){return De(e,t)>0}function V(e){let[t,n]=(e.trim().replace(/^v/,``).split(`+`)[0]??``).split(`-`,2),[r,i,a]=t.split(`.`),o=H(r),s=H(i),c=H(a);if(!(o===void 0||s===void 0||c===void 0))return{major:o,minor:s,patch:c,prerelease:n?n.split(`.`):[]}}function H(e){if(!(e===void 0||!/^\d+$/.test(e)))return Number(e)}function U(e,t){return Math.sign(e-t)}function ke(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return 1;if(t.length===0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n===void 0)return-1;if(i===void 0)return 1;let a=Ae(n,i);if(a!==0)return a}return 0}function Ae(e,t){let n=H(e),r=H(t);return n!==void 0&&r!==void 0?U(n,r):n===void 0?r===void 0?Math.sign(e.localeCompare(t)):1:-1}function je(e=process.env.HOME??process.env.USERPROFILE??`/`){return(0,r.join)(e,`.robota`,`update-check.json`)}function Me(e){if((0,n.existsSync)(e))try{return Ve(JSON.parse((0,n.readFileSync)(e,`utf8`)))}catch{return}}function Ne(e,t){(0,n.mkdirSync)((0,r.dirname)(e),{recursive:!0}),(0,n.writeFileSync)(e,JSON.stringify(t,null,2)+`
32
- `,`utf8`)}async function W(e){if(e.disabled===!0)return{status:`skipped`,reason:`disabled`};let t=e.packageName??`@robota-sdk/agent-cli`,n=e.cachePath??je(),r=e.now??new Date,i=e.ttlMs??864e5;if(e.force!==!0){let a=Me(n);if(a!==void 0&&Re(a,r,i,t))return Le(a,e.currentVersion)}try{let i=await ze({fetchImpl:e.fetchImpl??fetch,packageName:t,registryUrl:e.registryUrl??`https://registry.npmjs.org`,timeoutMs:e.timeoutMs??1500});return G(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,latestVersion:i}),q(e.currentVersion,i)}catch(i){let a=i instanceof Error?i.message:String(i);return G(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,errorMessage:a}),{status:`error`,errorMessage:a}}}function G(e,t){try{Ne(e,t)}catch{}}async function Pe(e){let t=await W(e);return t.status===`update_available`?t.notice:void 0}function Fe(e){return e.printMode===!1&&e.disableUpdateCheck===!1}function K(e){return[`Robota update available: ${e.currentVersion} -> ${e.latestVersion}.`,`Run ${e.installCommand}`].join(` `)}function Ie(e){return e.status===`update_available`?K(e.notice):e.status===`current`?`Robota is up to date (${e.currentVersion}).`:e.status===`skipped`?`Robota update check skipped.`:`Robota update check failed: ${e.errorMessage}`}function Le(e,t){return e.errorMessage===void 0?e.latestVersion===void 0?{status:`error`,errorMessage:`Cached update check has no latest version`}:q(t,e.latestVersion):{status:`error`,errorMessage:e.errorMessage}}function q(e,t){return Oe(t,e)?{status:`update_available`,notice:{currentVersion:e,latestVersion:t,installCommand:`npm install -g '@robota-sdk/agent-cli@latest'`}}:{status:`current`,currentVersion:e,latestVersion:t}}function Re(e,t,n,r){if(e.packageName!==r)return!1;let i=Date.parse(e.checkedAt);return Number.isFinite(i)?t.getTime()-i<n:!1}async function ze(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e.timeoutMs);try{let n=Be(e.registryUrl,e.packageName),r=await e.fetchImpl(n,{headers:{accept:`application/json`},signal:t.signal});if(!r.ok)throw Error(`registry responded with HTTP ${r.status}`);let i=(await r.json())[`dist-tags`]?.latest;if(typeof i!=`string`||i.trim().length===0)throw Error(`registry metadata is missing dist-tags.latest`);return i}finally{clearTimeout(n)}}function Be(e,t){return`${e.replace(/\/+$/,``)}/${encodeURIComponent(t)}`}function Ve(e){if(!He(e))return;let t=e;if(typeof t.packageName==`string`&&typeof t.checkedAt==`string`&&typeof t.currentVersion==`string`&&(t.latestVersion===void 0||typeof t.latestVersion==`string`)&&(t.errorMessage===void 0||typeof t.errorMessage==`string`))return{packageName:t.packageName,checkedAt:t.checkedAt,currentVersion:t.currentVersion,...t.latestVersion!==void 0&&{latestVersion:t.latestVersion},...t.errorMessage!==void 0&&{errorMessage:t.errorMessage}}}function He(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const J={...a.DEFAULT_STATUS_LINE_COMMAND_SETTINGS};function Ue(e){let t=e.statusline;return Ge(t)?{enabled:typeof t.enabled==`boolean`?t.enabled:J.enabled,gitBranch:typeof t.gitBranch==`boolean`?t.gitBranch:J.gitBranch}:{...J}}function We(e,t){let n=b(e),r={...Ue(n),...t};return n.statusline=r,x(e,n),r}function Ge(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Ke(e){try{let t=qe(e);if(!t)return;let i=(0,n.readFileSync)((0,r.join)(t,`HEAD`),`utf8`).trim();if(!i)return;if(i.startsWith(`ref: `)){let e=i.slice(5).trim();return e.startsWith(`refs/heads/`)?e.slice(11):e}return i.slice(0,7)}catch{return}}function qe(e){let t=(0,r.resolve)(e),n=(0,r.dirname)(t);for(;n!==t;){let e=Y((0,r.join)(t,`.git`),t);if(e)return e;t=n,n=(0,r.dirname)(t)}return Y((0,r.join)(t,`.git`),t)}function Y(e,t){if(!(0,n.existsSync)(e))return;let i=(0,n.lstatSync)(e);if(i.isDirectory())return e;if(!i.isFile())return;let a=(0,n.readFileSync)(e,`utf8`).trim();if(!a.startsWith(`gitdir:`))return;let o=a.slice(7).trim();return(0,r.isAbsolute)(o)?o:(0,r.resolve)(t,o)}const X=`plugin`;function Je(){return process.env.HOME??(0,p.homedir)()}function Z(e){let t=new a.BundlePluginLoader((0,r.join)(Je(),`.robota`,`plugins`));try{let n=t.loadPluginsSync();return n.length===0?(e.replaceSource(X),0):(e.replaceSource(X,new a.PluginCommandSource(n)),n.length)}catch{return e.replaceSource(X),0}}function Ye(e){let n=(0,p.homedir)(),i=(0,r.join)(n,`.robota`,`plugins`),o=(0,r.join)(n,`.robota`,`settings.json`),s=(e,n)=>(0,t.execSync)(e,{timeout:n.timeout,stdio:n.stdio??`pipe`}),c=new a.PluginSettingsStore(o),l=new a.MarketplaceClient({pluginsDir:i,exec:s});return{cwd:e,marketplace:l,installer:new a.BundlePluginInstaller({pluginsDir:i,settingsStore:c,marketplaceClient:l,exec:s}),loader:new a.BundlePluginLoader(i),settingsStore:c}}async function Xe(e){let t=await e.loader.loadAll(),n=e.settingsStore.getEnabledPlugins();return t.map(e=>{let t=e.pluginDir.split(`/`),r=t.indexOf(`cache`),i=r>=0?t[r+1]??``:``,a=i?`${e.manifest.name}@${i}`:e.manifest.name;return{name:a,description:e.manifest.description,enabled:n[a]!==!1&&n[e.manifest.name]!==!1}})}async function Ze(e,t){let n;try{n=e.marketplace.fetchManifest(t)}catch{return[]}let r=e.installer.getInstalledPlugins(),i=new Set(Object.values(r).map(e=>e.pluginName));return n.plugins.map(e=>({name:e.name,description:e.description,installed:i.has(e.name)}))}async function Qe(e,n,i){let[o,s]=n.split(`@`);if(!o||!s)throw Error(`Plugin ID must be in format: name@marketplace`);if(i===`project`){let n=(0,r.join)(e.cwd,`.robota`,`plugins`);await new a.BundlePluginInstaller({pluginsDir:n,settingsStore:e.settingsStore,marketplaceClient:e.marketplace,exec:(e,n)=>(0,t.execSync)(e,{timeout:n.timeout,stdio:n.stdio??`pipe`})}).install(o,s);return}await e.installer.install(o,s)}async function $e(e,t){let n=e.installer.getPluginsByMarketplace(t);for(let t of n)await e.installer.uninstall(`${t.pluginName}@${t.marketplace}`);e.marketplace.removeMarketplace(t)}function et(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function tt(e){let t=Ye(e);return{listInstalled:()=>Xe(t),listAvailablePlugins:e=>Ze(t,e),install:(e,n)=>Qe(t,e,n),uninstall:async e=>t.installer.uninstall(e),enable:async e=>t.installer.enable(e),disable:async e=>t.installer.disable(e),marketplaceAdd:async e=>e.includes(`/`)&&!e.includes(`:`)?t.marketplace.addMarketplace({type:`github`,repo:e}):t.marketplace.addMarketplace({type:`git`,url:e}),marketplaceRemove:e=>$e(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>et(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}async function nt(e,t){if(e.positional[0]!==`user-local`)return!1;let n=await(0,o.executeUserLocalDirectCommand)({cwd:t,argv:e.positional.slice(1),format:e.format,summary:e.summary,source:e.source}),r=n.message.endsWith(`
33
- `)?n.message:`${n.message}\n`;return n.success||(process.stderr.write(r),process.exit(1)),process.stdout.write(r),!0}function Q(){try{let e=(0,r.dirname)((0,i.fileURLToPath)(require(`url`).pathToFileURL(__filename).href)),t=[(0,r.join)(e,`..`,`..`,`package.json`),(0,r.join)(e,`..`,`package.json`)];for(let e of t)try{let t=(0,n.readFileSync)(e,`utf-8`),r=JSON.parse(t);if(r.version!==void 0&&r.name!==void 0)return r.version}catch{}return`0.0.0`}catch{return`0.0.0`}}function $(e,t=!1){return new Promise((n,r)=>{process.stdout.write(e);let i=``,a=process.stdin,o=a.isRaw;if(!a.isTTY){r(Error(`Cannot prompt for input: stdin is not a TTY.
34
- Set your API key via environment variable instead:
35
- ANTHROPIC_API_KEY=<key> robota
36
- OPENAI_API_KEY=<key> robota`));return}a.setRawMode(!0),a.resume(),a.setEncoding(`utf8`);let s=e=>{for(let r of e)if(r===`\r`||r===`
37
- `){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
38
- `),n(i.trim());return}else r===``||r===`\b`?i.length>0&&(i=i.slice(0,-1),process.stdout.write(`\b \b`)):r===``?(a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
39
- `),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)})}function rt(e,t){let i=(0,n.readFileSync)((0,r.resolve)(e,t),`utf8`).trim();if(i.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${i}`}function it(){let e=y();S(e)?process.stdout.write(`Deleted ${e}\n`):process.stdout.write(`No user settings found.
40
- `)}function at({cwd:e,providerDefinitions:t}){return[(0,o.createSkillsCommandModule)({cwd:e}),(0,o.createHelpCommandModule)(),(0,o.createAgentCommandModule)(),(0,o.createModelCommandModule)({providerDefinitions:t,settings:{readMergedSettings:()=>w(e)}}),(0,o.createPermissionsCommandModule)(),(0,o.createModeCommandModule)(),(0,o.createLanguageCommandModule)(),(0,o.createBackgroundCommandModule)(),(0,o.createMemoryCommandModule)(),(0,o.createUserLocalCommandModule)(),(0,o.createCompactCommandModule)(),(0,o.createContextCommandModule)(),(0,o.createExitCommandModule)(),(0,o.createSessionCommandModule)(),(0,o.createResetCommandModule)(),(0,o.createRewindCommandModule)(),(0,o.createStatusLineCommandModule)(),(0,o.createPluginCommandModule)(),(0,o.createSettingsCommandModule)(),(0,o.createProviderCommandModule)({providerDefinitions:t,settings:{readMergedSettings:()=>w(e),readTargetSettings:()=>b(O(e)),writeTargetSettings:t=>x(O(e),t)}})]}function ot(t,n,r,i){let a={settings:{read:()=>b(y()),write:e=>x(y(),e)},plugin:tt(t)},o=r.providerDefinitions??e.r;return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...at({cwd:t,providerDefinitions:o}),...r.commandModules??[]],startupUpdateNoticePromise:Fe(n)?Pe({currentVersion:i}):void 0}}function st(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(rt(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
41
-
42
- `):void 0}async function ct(e,n,r,i,o,s,c,l){let d=n.positional.join(` `).trim();if(!d&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);d=Buffer.concat(e).toString(`utf-8`).trim()}d||(process.stderr.write(`Print mode (-p) requires a prompt argument.
43
- `),process.exit(1));let f=st(e,n);n.systemPrompt&&process.stderr.write(`Warning: --system-prompt is not yet functional and will be ignored.
44
- `);let p=new a.InteractiveSession({cwd:e,provider:r,permissionMode:n.permissionMode??`bypassPermissions`,maxTurns:n.maxTurns,sessionStore:n.noSessionPersistence?void 0:i,sessionName:n.sessionName,bare:n.bare||void 0,allowedTools:n.allowedTools?n.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:f,backgroundTaskRunners:o,subagentRunnerFactory:s,commandModules:c,commandHostAdapters:l,shellExec:e=>(0,t.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),agentName:`robota-cli`}),m=(0,u.createHeadlessTransport)({outputFormat:n.outputFormat??`text`,prompt:d});p.attachTransport(m),await m.start(),await p.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(m.getExitCode())}async function lt(e={}){let n=te(),r=Q();if(n.help){ee();return}if(n.version){process.stdout.write(`robota ${r}\n`);return}if(n.checkUpdate){let e=await W({currentVersion:r,force:!0}),t=Ie(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}if(n.reset){it();return}let i=process.cwd();if(await nt(n,i))return;let{commandHostAdapters:o,providerDefinitions:s,commandModules:l,startupUpdateNoticePromise:u}=ot(i,n,e,r);if(n.configure){await N(i,n,$,s);return}if(se(i,n,s))return;try{await ce(i,n,$,s)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let d=n.provider?{providerOverride:n.provider,providerDefinitions:s}:{providerDefinitions:s},p=w(i);n.provider??p.currentProvider;let m=T(i,d),h=n.model??m.model,g=E(i,n.model,d),_=(0,c.createDefaultBackgroundTaskRunners)(),v=(0,a.projectPaths)(i),y=z({providerConfig:{...m,model:h},logsDir:v.logs}),b=(0,a.createProjectSessionStore)(i),x,S=!1;if(n.continueMode?x=(0,a.resolveLatestSessionId)(b,i):n.resumeId!==void 0&&(n.resumeId===``?S=!0:(x=(0,a.resolveSessionIdByIdOrName)(b,n.resumeId),x===void 0&&(process.stderr.write(`Session not found: ${n.resumeId}\n`),process.exit(1)))),n.printMode){await ct(i,n,g,b,_,y,l,o);return}await new f.TuiTransport({cwd:i,provider:g,providerOverride:n.provider,providerType:m.name,modelId:h,language:n.language,permissionMode:n.permissionMode,maxTurns:n.maxTurns,version:r,sessionStore:n.noSessionPersistence?void 0:b,resumeSessionId:x,showSessionPickerOnStart:S,forkSession:n.forkSession,sessionName:n.sessionName,backgroundTaskRunners:_,subagentRunnerFactory:y,commandModules:l,commandHostAdapters:o,shellExec:e=>(0,t.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:u?u.then(e=>e?K(e):void 0):void 0,transportRegistry:dt(),cliAdapter:ut(s),reloadPluginCommandSource:Z,agentName:`robota-cli`}).start(),process.exit(0)}function ut(e){return{getUserSettingsPath:()=>y(),readSettings:e=>b(e),writeSettings:(e,t)=>x(e,t),deleteSettings:e=>S(e),applyStatusLineSettings:(e,t)=>We(e,t),reloadPluginCommandSource:e=>{Z(e)},applyActiveModelChange:(e,t,n)=>(re(e,t,n),{applied:!0}),getGitBranch:e=>Ke(e),getProviderDisplayName:t=>(0,a.findProviderDefinition)(e,t)?.displayName??t}}function dt(){let e=new me(y());return e.register(new d.WsTransport),e}exports.ChildProcessSubagentRunner=B,Object.defineProperty(exports,`GitWorktreeIsolationAdapter`,{enumerable:!0,get:function(){return c.GitWorktreeIsolationAdapter}}),exports.createChildProcessSubagentRunnerFactory=z,Object.defineProperty(exports,`createGitWorktreeIsolationAdapter`,{enumerable:!0,get:function(){return c.createGitWorktreeIsolationAdapter}}),exports.startCli=lt;
34
+ `}function N(e){if(e!==void 0){if(!j.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${j.join(` | `)}`);return e}}function P(e){if(e!==void 0){if(!A.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${A.join(` | `)}`);return e}}function F(e){if(e===void 0)return;let t=parseInt(e,10);if(isNaN(t)||t<=0)throw Error(`Invalid --max-turns "${e}". Must be a positive integer.`);return t}const I={allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},model:{type:`string`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1}}};function L(e,t){return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,model:e.model,language:e.language,permissionMode:P(e[`permission-mode`]),maxTurns:F(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:N(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1}}function R(){let{values:e,positionals:t}=(0,u.parseArgs)(I);return L(e,t)}function z(t){let n=(0,e.resetUserConfig)();n.deleted?t.writeLine(`Deleted ${n.path}`):t.writeLine(`No user settings found.`)}async function B(t,n){if(t.help)return process.stdout.write(M()),{handled:!0};if(t.version)return process.stdout.write(`robota ${n.version}\n`),{handled:!0};if(t.checkUpdate){let t=await(0,e.checkForCliUpdate)({currentVersion:n.version,force:!0}),r=(0,e.formatCliUpdateCheckMessage)(t);return t.status===`error`&&(process.stderr.write(`${r}\n`),process.exit(1)),process.stdout.write(`${r}\n`),{handled:!0}}return t.reset?(z(n.terminal),{handled:!0}):{handled:!1}}function V(e){return{subagentRunnerFactory:(0,d.createChildProcessSubagentRunnerFactory)({workerPath:(0,d.getDefaultSubagentWorkerPath)(),providerConfig:e.providerConfig,logsDir:e.logsDir})}}function H(t,n,r){let i=n.provider?{providerOverride:n.provider,providerDefinitions:r.providerDefinitions}:{providerDefinitions:r.providerDefinitions},a=(0,e.readProviderSettings)(t,i),o=n.model??a.model,s=(0,e.createProviderFromSettings)(t,n.model,i),{subagentRunnerFactory:c}=V({providerConfig:{...a,model:o},logsDir:(0,e.projectPaths)(t).logs});return{provider:s,providerSettings:a,modelId:o,subagentRunnerFactory:c}}function U(t,n){let r=n.noSessionPersistence?void 0:(0,e.createProjectSessionStore)(t),i,a=!1;return n.continueMode?i=(0,e.resolveLatestSessionId)(r,t):n.resumeId!==void 0&&(n.resumeId===``?a=!0:(i=(0,e.resolveSessionIdByIdOrName)(r,n.resumeId),i===void 0&&(process.stderr.write(`Session not found: ${n.resumeId}\n`),process.exit(1)))),{sessionStore:r,resumeSessionId:i,showSessionPickerOnStart:a}}function W(t,n){if((0,e.shouldRunStartupCliUpdateCheck)(n))return(0,e.getStartupCliUpdateNotice)({currentVersion:t}).then(t=>t?(0,e.formatCliUpdateNotice)(t):void 0)}const G=()=>(0,e.readPackageVersion)(require(`url`).pathToFileURL(__filename).href);async function K(e,t,n){if(e.positional[0]!==`user-local`)return!1;let r=await(0,s.executeUserLocalDirectCommand)({cwd:t,argv:e.positional.slice(1),format:e.format,summary:e.summary,source:e.source}),i=r.message.trimEnd();if(!r.success)throw Error(i);return n.writeLine(i),!0}async function q(r={}){let i;try{i=R()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let a=G(),o=new n.PrintTerminal;if((await B(i,{version:a,terminal:o})).handled)return;let s=process.cwd(),c=_(i),l=v(i);try{if(await K(y(i),s,o))return}catch(e){o.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let u=x(s,r);if((await k(s,c,u,o)).handled)return;let d=H(s,c,u),f=U(s,l),p=(0,e.createAgentRuntime)({cwd:s,provider:d.provider,commandModules:u.commandModules,commandHostAdapters:u.commandHostAdapters,reloadPluginCommandSource:u.reloadPluginCommandSource,subagentRunnerFactory:d.subagentRunnerFactory,sessionStore:f.sessionStore,transportRegistry:(0,t.createDefaultTransportRegistry)()});if(c.printMode){await h(l,p);return}await g({runtime:p,version:a,commandSetup:u,providerSetup:d,sessionSetup:f,sessionOpts:l,startupUpdateNotice:W(a,b(i))}),process.exit(0)}exports.startCli=q;
@@ -1,42 +1,14 @@
1
- import { ICommandModule, IInProcessSubagentRunnerDeps, IProviderDefinition, TSubagentRunnerFactory } from "@robota-sdk/agent-framework";
2
- import { GitWorktreeIsolationAdapter, IGitWorktreeIsolationAdapterOptions, ISubagentJobHandle, ISubagentJobStart, ISubagentRunner, ISubagentWorktreeAdapter, createGitWorktreeIsolationAdapter } from "@robota-sdk/agent-executor";
3
- import { IProviderConfig, ISpinner, ITerminalOutput } from "@robota-sdk/agent-core";
1
+ import { IProviderDefinition } from "@robota-sdk/agent-core";
2
+ import { ICommandModule } from "@robota-sdk/agent-framework";
4
3
 
5
- //#region src/cli.d.ts
6
- /**
7
- * Main CLI orchestration function.
8
- */
4
+ //#region src/startup/command-setup.d.ts
9
5
  interface IStartCliOptions {
10
6
  commandModules?: readonly ICommandModule[];
11
7
  providerDefinitions?: readonly IProviderDefinition[];
12
8
  }
13
- declare function startCli(options?: IStartCliOptions): Promise<void>;
14
9
  //#endregion
15
- //#region src/subagents/child-process-subagent-runner.d.ts
16
- interface IChildProcessSubagentRunnerOptions {
17
- providerConfig?: IProviderConfig;
18
- workerPath?: string;
19
- execArgv?: string[];
20
- killGraceMs?: number;
21
- env?: NodeJS.ProcessEnv;
22
- worktreeIsolation?: boolean;
23
- worktreeAdapter?: ISubagentWorktreeAdapter;
24
- logsDir?: string;
25
- }
26
- declare function createChildProcessSubagentRunnerFactory(options?: IChildProcessSubagentRunnerOptions): TSubagentRunnerFactory;
27
- declare class ChildProcessSubagentRunner implements ISubagentRunner {
28
- private readonly deps;
29
- private readonly workerPath;
30
- private readonly execArgv?;
31
- private readonly killGraceMs;
32
- private readonly providerConfig?;
33
- private readonly env?;
34
- private readonly logsDir?;
35
- constructor(deps: IInProcessSubagentRunnerDeps, options?: IChildProcessSubagentRunnerOptions);
36
- start(job: ISubagentJobStart): ISubagentJobHandle;
37
- private createStartPayload;
38
- private resolveTranscriptPath;
39
- }
10
+ //#region src/cli.d.ts
11
+ declare function startCli(options?: IStartCliOptions): Promise<void>;
40
12
  //#endregion
41
- export { ChildProcessSubagentRunner, GitWorktreeIsolationAdapter, type IChildProcessSubagentRunnerOptions, type IGitWorktreeIsolationAdapterOptions, type ISpinner, type ITerminalOutput, createChildProcessSubagentRunnerFactory, createGitWorktreeIsolationAdapter, startCli };
13
+ export { startCli };
42
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/cli.ts","../../src/subagents/child-process-subagent-runner.ts"],"mappings":";;;;;;;;UA8LiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA;AAAA,iBAyK9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO;;;UCrUtD,kCAAA;EACf,cAAA,GAAiB,eAAA;EACjB,UAAA;EACA,QAAA;EACA,WAAA;EACA,GAAA,GAAM,MAAA,CAAO,UAAA;EACb,iBAAA;EACA,eAAA,GAAkB,wBAAA;EAClB,OAAA;AAAA;AAAA,iBAGc,uCAAA,CACd,OAAA,GAAS,kCAAA,GACR,sBAAsB;AAAA,cAaZ,0BAAA,YAAsC,eAAA;EAAA,iBAS9B,IAAA;EAAA,iBARF,UAAA;EAAA,iBACA,QAAA;EAAA,iBACA,WAAA;EAAA,iBACA,cAAA;EAAA,iBACA,GAAA;EAAA,iBACA,OAAA;cAGE,IAAA,EAAM,4BAAA,EACvB,OAAA,GAAS,kCAAA;EAUX,KAAA,CAAM,GAAA,EAAK,iBAAA,GAAoB,kBAAA;EAAA,QA0CvB,kBAAA;EAAA,QAcA,qBAAA;AAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/startup/command-setup.ts","../../src/cli.ts"],"mappings":";;;;UAqBiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA;;;iBCI9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO"}
@@ -1,4 +1,9 @@
1
- import{r as e,t}from"./child-process-subagent-ipc-DVpVp43R.js";import{execSync as n,fork as r}from"node:child_process";import{existsSync as i,lstatSync as a,mkdirSync as o,readFileSync as s,unlinkSync as c,writeFileSync as l}from"node:fs";import{dirname as u,isAbsolute as d,join as f,resolve as p}from"node:path";import{fileURLToPath as m}from"node:url";import{BundlePluginInstaller as h,BundlePluginLoader as g,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as _,InteractiveSession as v,MarketplaceClient as y,PluginCommandSource as ee,PluginSettingsStore as te,buildProviderSetupPatch as ne,checkSettingsDocument as b,createProjectSessionStore as re,findProviderDefinition as ie,getBuiltInAgent as ae,mergeProviderPatch as oe,projectPaths as se,readMergedProviderSettingsFromPaths as ce,readMergedProviderSettingsFromPaths as le,resolveActiveProvider as ue,resolveLatestSessionId as de,resolveSessionIdByIdOrName as fe,setCurrentProvider as pe}from"@robota-sdk/agent-framework";import{createAgentCommandModule as me,createBackgroundCommandModule as he,createCompactCommandModule as ge,createContextCommandModule as _e,createExitCommandModule as ve,createHelpCommandModule as ye,createLanguageCommandModule as be,createMemoryCommandModule as xe,createModeCommandModule as Se,createModelCommandModule as Ce,createPermissionsCommandModule as we,createPluginCommandModule as Te,createProviderCommandModule as Ee,createResetCommandModule as De,createRewindCommandModule as Oe,createSessionCommandModule as ke,createSettingsCommandModule as Ae,createSkillsCommandModule as je,createStatusLineCommandModule as Me,createUserLocalCommandModule as Ne,executeUserLocalDirectCommand as Pe,formatProviderSetupSelectionPrompt as Fe,resolveProviderSetupSelection as Ie,runProviderSetupPromptFlow as Le}from"@robota-sdk/agent-command";import{parseArgs as Re}from"node:util";import{BackgroundTaskError as x,GitWorktreeIsolationAdapter as ze,createBackgroundTaskLogPage as Be,createDefaultBackgroundTaskRunners as Ve,createGitWorktreeIsolationAdapter as He,createGitWorktreeIsolationAdapter as Ue,createProviderFromConfig as We,createWorktreeSubagentRunner as Ge}from"@robota-sdk/agent-executor";import{formatSupportedProviderTypes as Ke}from"@robota-sdk/agent-core";import{createHeadlessTransport as qe}from"@robota-sdk/agent-transport/headless";import{WsTransport as Je}from"@robota-sdk/agent-transport/ws";import{TuiTransport as Ye}from"@robota-sdk/agent-transport/tui";import{homedir as S}from"node:os";const C=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],w=[`text`,`json`,`stream-json`];function Xe(){process.stdout.write(`
1
+ import{InteractiveSession as e,applyProviderConfiguration as t,applyProviderSwitch as n,checkForCliUpdate as r,createAgentRuntime as i,createProjectSessionStore as a,createProviderFromSettings as o,formatCliUpdateCheckMessage as s,formatCliUpdateNotice as c,getStartupCliUpdateNotice as l,getUserSettingsPath as u,projectPaths as d,readMergedProviderSettings as f,readPackageVersion as ee,readProviderSettings as p,readSettings as m,resetUserConfig as h,resolveLatestSessionId as g,resolveProviderSettingsWriteTargetPath as _,resolveSessionIdByIdOrName as v,resolveSettingsPathForScope as te,shouldRunStartupCliUpdateCheck as ne,writeSettings as y}from"@robota-sdk/agent-framework";import{createDefaultTransportRegistry as b}from"@robota-sdk/agent-transport";import{PrintTerminal as x,createHeadlessTransport as S,promptInput as C}from"@robota-sdk/agent-transport/headless";import{execSync as w}from"node:child_process";import{readFileSync as T}from"node:fs";import{resolve as E}from"node:path";import{TuiTransport as D,createDefaultTuiCliAdapter as O}from"@robota-sdk/agent-transport/tui";import{createDefaultCommandModules as k,createDefaultPluginCommandAdapter as A,ensureProviderConfig as j,executeUserLocalDirectCommand as M,reloadPluginCommandSource as N,runProviderStartupSetup as P}from"@robota-sdk/agent-command";import{createDefaultProviderDefinitions as F}from"@robota-sdk/agent-provider";import{formatSupportedProviderTypes as I}from"@robota-sdk/agent-core";import{parseArgs as L}from"node:util";import{createChildProcessSubagentRunnerFactory as R,getDefaultSubagentWorkerPath as z}from"@robota-sdk/agent-subagent-runner";function B(e,t){let n=T(E(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function V(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(B(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
2
+
3
+ `):void 0}async function H(e){let t=e.positional.join(` `).trim();if(!t&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);t=Buffer.concat(e).toString(`utf-8`).trim()}return t||(process.stderr.write(`Print mode (-p) requires a prompt argument.
4
+ `),process.exit(1)),t}async function U(t,n){let r=await H(t),i=V(n.cwd,t);t.systemPrompt&&process.stderr.write(`Warning: --system-prompt is not yet functional and will be ignored.
5
+ `);let a=new e({cwd:n.cwd,provider:n.provider,permissionMode:t.permissionMode??`bypassPermissions`,maxTurns:t.maxTurns,sessionStore:t.noSessionPersistence?void 0:n.sessionStore,sessionName:t.sessionName,bare:t.bare||void 0,allowedTools:t.allowedTools?t.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:i,backgroundTaskRunners:n.backgroundTaskRunners,subagentRunnerFactory:n.subagentRunnerFactory,commandModules:n.commandModules,commandHostAdapters:n.commandHostAdapters,shellExec:e=>w(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),agentName:`robota-cli`}),o=S({outputFormat:t.outputFormat??`text`,prompt:r});a.attachTransport(o),await o.start(),await a.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(o.getExitCode())}async function W(e){let{runtime:t,version:n,commandSetup:r,providerSetup:i,sessionSetup:a,sessionOpts:o,startupUpdateNotice:s}=e;await new D({runtime:t,providerOverride:i.providerSettings.name,providerType:i.providerSettings.name,modelId:i.modelId,language:o.language,permissionMode:o.permissionMode,maxTurns:o.maxTurns,version:n,resumeSessionId:a.resumeSessionId,showSessionPickerOnStart:a.showSessionPickerOnStart,forkSession:o.forkSession,sessionName:o.sessionName,shellExec:e=>w(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:s,cliAdapter:O({providerDefinitions:r.providerDefinitions,reloadPluginCommandSource:r.reloadPluginCommandSource}),agentName:`robota-cli`}).start()}function G(e){return{configure:e.configure,provider:e.provider,settingsScope:e.settingsScope,configureProvider:e.configureProvider,providerType:e.providerType,model:e.model,apiKey:e.apiKey,apiKeyEnv:e.apiKeyEnv,baseURL:e.baseURL,setCurrent:e.setCurrent,printMode:e.printMode,positional:e.positional}}function K(e){return{positional:e.positional,language:e.language,permissionMode:e.permissionMode,maxTurns:e.maxTurns,sessionName:e.sessionName,noSessionPersistence:e.noSessionPersistence,continueMode:e.continueMode,resumeId:e.resumeId,forkSession:e.forkSession,outputFormat:e.outputFormat,bare:e.bare,allowedTools:e.allowedTools,systemPrompt:e.systemPrompt,appendSystemPrompt:e.appendSystemPrompt,taskFile:e.taskFile,jsonSchema:e.jsonSchema}}function q(e){return{positional:e.positional,format:e.format,summary:e.summary,source:e.source}}function re(e){return{printMode:e.printMode,disableUpdateCheck:e.disableUpdateCheck}}function J(e,t={}){let n={settings:{read:()=>m(u()),write:e=>y(u(),e)},plugin:A(e)},r=t.providerDefinitions??F();return{commandHostAdapters:n,providerDefinitions:r,commandModules:[...k({cwd:e,providerDefinitions:r,providerSettingsAdapter:{readMergedSettings:()=>f(e),readTargetSettings:()=>m(_(e)),writeTargetSettings:t=>y(_(e),t)}}),...t.commandModules??[]],reloadPluginCommandSource:N}}function Y(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function X(e,r,i,a=F()){let o=te(e,Y(r.settingsScope));return r.configureProvider?(t(o,oe(r),{providerDefinitions:a}),i.writeLine(`Provider profile saved to ${o}`),!r.printMode&&r.positional.length===0):r.provider&&r.setCurrent?(n(r.settingsScope===void 0?_(e):o,r.provider,{knownProviders:f(e).providers}),i.writeLine(`Current provider set to ${r.provider}`),!r.printMode&&r.positional.length===0):!1}async function ie(e,t,n,r,i=F()){await j(e,{provider:t.provider,settingsScope:Y(t.settingsScope)},n,r,i,{formatError:se,isInteractive:()=>process.stdin.isTTY===!0&&process.stdout.isTTY===!0})}async function ae(e,t,n,r,i=F()){await P(e,{settingsScope:Y(t.settingsScope)},n,r,i)}function oe(e){let t=e.providerType??e.configureProvider;if(!e.configureProvider||!t)throw Error(`--configure-provider requires a provider profile and --type`);return{profile:e.configureProvider,type:t,...e.model!==void 0&&{model:e.model},...e.apiKey!==void 0&&{apiKey:e.apiKey},...e.apiKeyEnv!==void 0&&{apiKeyEnv:e.apiKeyEnv},...e.baseURL!==void 0&&{baseURL:e.baseURL},setCurrent:e.setCurrent}}function se(e=F()){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${I(e)}`,...e.map(ce)].join(`
6
+ `)}function ce(e){return` ${[`robota --configure-provider ${e.type}`,`--type ${e.type}`,...e.defaults?.baseURL===void 0?[]:[`--base-url <url>`],`--model <model>`,...e.requiresApiKey===!0?[`--api-key-env <ENV_NAME>`]:[],`--set-current`].join(` `)}`}async function le(e,t,n,r){if(t.configure)return await ae(e,t,C,r,n.providerDefinitions),{handled:!0};if(X(e,t,r,n.providerDefinitions))return{handled:!0};try{await ie(e,t,C,r,n.providerDefinitions)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return{handled:!1}}const Z=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],Q=[`text`,`json`,`stream-json`];function ue(){return`
2
7
  Usage: robota [options] [-p <prompt>]
3
8
 
4
9
  Options:
@@ -26,20 +31,5 @@ Examples:
26
31
  robota -p "Hello" Print mode: send prompt and exit
27
32
  robota -p "Hello" --output-format json
28
33
  robota --continue Resume the last session
29
- `)}function Ze(e){if(e!==void 0)return w.includes(e)||(process.stderr.write(`Invalid --output-format "${e}". Valid: ${w.join(` | `)}\n`),process.exit(1)),e}function Qe(e){if(e!==void 0)return C.includes(e)||(process.stderr.write(`Invalid --permission-mode "${e}". Valid: ${C.join(` | `)}\n`),process.exit(1)),e}function $e(e){if(e===void 0)return;let t=parseInt(e,10);return(isNaN(t)||t<=0)&&(process.stderr.write(`Invalid --max-turns "${e}". Must be a positive integer.\n`),process.exit(1)),t}function et(){let{values:e,positionals:t}=Re({allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},model:{type:`string`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1}}});return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,model:e.model,language:e.language,permissionMode:Qe(e[`permission-mode`]),maxTurns:$e(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:Ze(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1}}function T(){return f(process.env.HOME??process.env.USERPROFILE??`/`,`.robota`,`settings.json`)}function E(e){if(!i(e))return{};let t=s(e,`utf8`);try{return JSON.parse(t)}catch{return process.stderr.write(`Warning: corrupt settings file at ${e}, resetting to defaults\n`),{}}}function D(e,t){o(u(e),{recursive:!0}),l(e,JSON.stringify(t,null,2)+`
30
- `,`utf8`)}function O(e){return i(e)?(c(e),!0):!1}function k(e){let t=tt();return[f(t,`.robota`,`settings.json`),f(t,`.claude`,`settings.json`),f(e,`.robota`,`settings.json`),f(e,`.robota`,`settings.local.json`),f(e,`.claude`,`settings.json`),f(e,`.claude`,`settings.local.json`)]}function tt(){return process.env.HOME??process.env.USERPROFILE??`/`}function A(e){return ce(k(e))}function j(e,t={}){let n=ue(A(e),t.providerOverride,M(t));if(n!==void 0)return n;throw Error("No provider configuration found. Run `robota` to set up.")}function nt(e,t,n={}){let r=M(n),i=j(e,{...n,providerDefinitions:r}),a=t??i.model;return We({...i,model:a},r)}function M(t){return t.providerDefinitions??e}function N(e,t={}){let n=t.settingsPaths??k(e),r=st(n)??n[0];if(r===void 0)throw Error(`No settings path available for provider update`);return r}function P(e){return E(e)}function F(e,t,n={}){let r=oe(P(e),ne(t,n));return D(e,r),r}function rt(e,t,n={}){let r=P(e),i=r.providers?.[t]!==void 0,a=n.knownProviders?.[t]!==void 0,o=i||a?{...r,currentProvider:t}:pe(r,t);return D(e,o),o}function it(e,t,n={}){let r=n.settingsPaths??k(e),i=le(r),a=n.providerOverride??i.currentProvider;if(typeof a!=`string`)throw Error(`Cannot update model: no active provider profile. Set "currentProvider" in settings.`);return at(r,a,t)}function at(e,t,n){let r=ot(e,t)??e[0];if(r===void 0)throw Error(`No settings path available for model update`);let i=P(r),a=i.providers??{},o=a[t]??{},s={...i,providers:{...a,[t]:{...o,model:n}}};return D(r,s),{settingsPath:r,settings:s,profileName:t}}function ot(e,t){for(let n=e.length-1;n>=0;--n){let r=e[n];if(r!==void 0&&P(r).providers?.[t]!==void 0)return r}}function st(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&P(n).currentProvider!==void 0)return n}}function I(e,t){if(t===void 0||t===`user`)return T();if(t===`project-local`)return f(e,`.robota`,`settings.local.json`);throw Error(`Invalid --settings-scope "${t}". Valid: user | project-local`)}function ct(t,n,r=e){let i=I(t,n.settingsScope);return n.configureProvider?(F(i,ut(n),{providerDefinitions:r}),process.stdout.write(`Provider profile saved to ${i}\n`),!n.printMode&&n.positional.length===0):n.provider&&n.setCurrent?(rt(n.settingsScope===void 0?N(t):i,n.provider,{knownProviders:A(t).providers}),process.stdout.write(`Current provider set to ${n.provider}\n`),!n.printMode&&n.positional.length===0):!1}async function lt(t,n,r,i=e){let a=A(t);if(b(n.provider===void 0?a:{...a,currentProvider:n.provider},i)===`valid`)return;if(!pt())throw Error(R(i));await L(t,dt(t,n),r,i);let o=A(t);if(b(n.provider===void 0?o:{...o,currentProvider:n.provider},i)!==`valid`)throw Error(R(i))}async function L(t,n,r,i=e){let a=Ie(await r(Fe(i)),i),o=I(t,n.settingsScope);F(o,await Le(a,r,i,{existingProfileNames:Object.keys(A(t).providers??{})}),{providerDefinitions:i});let s=await r(` Response language (ko/en/ja/zh, default: en): `);if(s){let e=E(o);e.language=s,D(o,e)}process.stdout.write(`\n Config saved to ${o}\n\n`)}function ut(e){let t=e.providerType??e.configureProvider;if(!e.configureProvider||!t)throw Error(`--configure-provider requires a provider profile and --type`);return{profile:e.configureProvider,type:t,...e.model!==void 0&&{model:e.model},...e.apiKey!==void 0&&{apiKey:e.apiKey},...e.apiKeyEnv!==void 0&&{apiKeyEnv:e.apiKeyEnv},...e.baseURL!==void 0&&{baseURL:e.baseURL},setCurrent:e.setCurrent}}function dt(e,t){if(t.settingsScope!==void 0||t.provider!==void 0)return t;let n=ft(k(e));if(n===void 0)return t;let r=f(e,`.robota`,`settings.json`),i=f(e,`.robota`,`settings.local.json`);return n===r||n===i?{...t,settingsScope:`project-local`}:t}function ft(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&typeof E(n).currentProvider==`string`)return n}}function pt(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function R(t=e){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${Ke(t)}`,...t.map(mt)].join(`
31
- `)}function mt(e){return` ${[`robota --configure-provider ${e.type}`,`--type ${e.type}`,...e.defaults?.baseURL===void 0?[]:[`--base-url <url>`],`--model <model>`,...e.requiresApiKey===!0?[`--api-key-env <ENV_NAME>`]:[],`--set-current`].join(` `)}`}var ht=class{entries=new Map;settingsPath;constructor(e){this.settingsPath=e}register(e){this.entries.set(e.name,e)}getAll(){let e=this.readTransportSettings();return Array.from(this.entries.values()).map(t=>({transport:t,config:this.resolveConfig(t,e[t.name])}))}getEnabled(){return this.getAll().filter(e=>e.config.enabled).map(e=>e.transport)}async setEnabled(e,t){let n=E(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,D(this.settingsPath,n)}async setOptions(e,t){let n=E(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,D(this.settingsPath,n)}async startAll(e){let t=this.getEnabled();for(let n of t)n.attach(e),await n.start()}async stopAll(){for(let e of this.entries.values())await e.stop()}resolveConfig(e,t){return{enabled:t?.enabled??e.defaultEnabled,options:t?.options??{}}}readTransportSettings(){let e=E(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};function gt(e,t,n,r,i){switch(e.type){case`ready`:t();break;case`result`:n(e.output);break;case`error`:r(new x(`runner`,e.message));break;case`cancelled`:r(new x(`runner`,e.reason??`Subagent worker cancelled`));break;case`text_delta`:i?.({type:`background_task_text_delta`,delta:e.delta});break;case`tool_start`:i?.({type:`background_task_tool_start`,toolName:e.toolName,firstArg:_t(e.toolArgs)});break;case`tool_end`:i?.({type:`background_task_tool_end`,toolName:e.toolName,success:e.success});break;default:r(new x(`runner`,`Unhandled subagent worker message`))}}function _t(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function z(e,t){return new Promise((n,r)=>{if(!e.connected){r(new x(`crash`,`Subagent worker IPC channel is closed`));return}e.send(t,e=>{if(e){r(e);return}n()})})}async function B(e,t){e.child.connected&&await z(e.child,{type:`cancel`,reason:t}).catch(()=>void 0),e.killTimer=setTimeout(()=>{e.child.killed||e.child.kill(`SIGTERM`)},e.killGraceMs)}function vt(e){return new Promise((t,n)=>{new yt(e,t,n).start()})}var yt=class{options;resolve;reject;settled=!1;started=!1;timeoutTimer;constructor(e,t,n){this.options=e,this.resolve=t,this.reject=n,this.timeoutTimer=xt(this.options.runtime,e=>this.rejectOnce(e))}start(){let{child:e}=this.options.runtime;e.on(`message`,this.onMessage),e.on(`error`,this.onError),e.on(`exit`,this.onExit),e.once(`spawn`,()=>{setImmediate(this.startWorker)})}startWorker=()=>{if(this.started)return;this.started=!0;let{child:e}=this.options.runtime;z(e,{type:`start`,payload:this.options.payload}).catch(e=>{this.rejectOnce(e instanceof Error?e:Error(String(e)))})};onMessage=e=>{if(!t(e)){this.rejectOnce(new x(`runner`,`Received malformed subagent worker message`));return}let{job:n}=this.options.runtime;gt(e,this.startWorker,this.resolveOnce,this.rejectOnce,n.emit)};onError=e=>{this.rejectOnce(new x(`crash`,e.message))};onExit=(e,t)=>{this.settled||this.rejectOnce(new x(`crash`,Ct(e,t)))};resolveOnce=e=>{if(this.settled)return;this.settled=!0,this.clearTimers(),this.cleanup();let{runtime:t,resolveTranscriptPath:n}=this.options;this.resolve(St(t.job,e,n))};rejectOnce=e=>{this.settled||(this.settled=!0,this.clearTimers(),this.cleanup(),this.reject(e))};clearTimers(){this.timeoutTimer&&clearTimeout(this.timeoutTimer),this.options.runtime.killTimer&&clearTimeout(this.options.runtime.killTimer)}cleanup(){let{child:e}=this.options.runtime;e.off(`message`,this.onMessage),e.off(`error`,this.onError),e.off(`exit`,this.onExit)}};function bt(e){let t=!1,n=()=>{};return{promise:new Promise((e,t)=>{n=t}),reject(r){t||(t=!0,n(new x(`runner`,r??`Subagent job cancelled: ${e}`)))}}}function xt(e,t){if(e.job.request.timeoutMs)return setTimeout(()=>{B(e,`Subagent worker timed out`),t(new x(`timeout`,`Subagent worker timed out`))},e.job.request.timeoutMs)}function St(e,t,n){let r=n(e);return{jobId:e.jobId,output:t,...r?{metadata:{transcriptPath:r,logPath:r}}:{}}}function Ct(e,t){return`Subagent worker exited before result: ${t===null?`exit code ${e===null?`unknown`:e}`:`signal ${t}`}`}function V(e={}){return t=>{let n=new H(t,e);return e.worktreeIsolation===!1?n:Ge({runner:n,worktreeAdapter:e.worktreeAdapter??Ue(),hooks:t.config.hooks,hookTypeExecutors:t.hookTypeExecutors})}}var H=class{deps;workerPath;execArgv;killGraceMs;providerConfig;env;logsDir;constructor(e,t={}){this.deps=e,this.workerPath=t.workerPath??Dt(),this.execArgv=t.execArgv,this.killGraceMs=t.killGraceMs??2e3,this.providerConfig=t.providerConfig,this.env=t.env,this.logsDir=t.logsDir}start(e){let t=r(this.workerPath,[],{cwd:e.request.cwd,env:{...process.env,...this.env??{}},execArgv:this.execArgv??Ot(this.workerPath),stdio:[`ignore`,`ignore`,`ignore`,`ipc`]}),n={job:e,child:t,killGraceMs:this.killGraceMs},i=vt({runtime:n,payload:this.createStartPayload(e),resolveTranscriptPath:e=>this.resolveTranscriptPath(e)}),a=bt(e.jobId);i.catch(()=>void 0);let o=Promise.race([i,a.promise]),s=this.resolveTranscriptPath(e);return{jobId:e.jobId,...t.pid!==void 0&&{pid:t.pid},...s!==void 0&&{transcriptPath:s,logPath:s},result:o,cancel:async e=>{a.reject(e),await B(n,e)},send:async e=>{await z(t,{type:`send`,prompt:e})},...s!==void 0&&{readLog:async t=>kt(e.jobId,s,t)}}}createStartPayload(e){let t=wt(e.request.type,this.deps.customAgentRegistry);return{jobId:e.jobId,request:e.request,agentDefinition:Tt(t,e),parentConfig:this.deps.config,parentContext:this.deps.context,providerProfile:Et(this.providerConfig,this.deps,e),permissionMode:this.deps.permissionMode,...this.logsDir?{logsDir:this.logsDir}:{}}}resolveTranscriptPath(e){if(this.logsDir)return f(this.logsDir,e.request.parentSessionId,`subagents`,`${e.jobId}.jsonl`)}};function wt(e,t){let n=t?.(e)??ae(e);if(!n)throw new x(`validation`,`Unknown agent type: ${e}`);return n}function Tt(e,t){return{...e,...t.request.model?{model:t.request.model}:{},...t.request.allowedTools?{tools:t.request.allowedTools}:{},...t.request.disallowedTools?{disallowedTools:t.request.disallowedTools}:{}}}function Et(e,t,n){let r=e??t.config.provider;return{profileName:t.config.currentProvider,type:r.name,model:n.request.model??r.model,apiKey:r.apiKey,baseURL:r.baseURL,timeout:r.timeout,options:r.options}}function Dt(){let e=process.argv[1]??``,t=e?u(e):process.cwd(),n=e.endsWith(`.ts`)||e.endsWith(`.tsx`)?`.ts`:`.js`,r=[f(t,`subagents`,`child-process-subagent-worker${n}`),f(t,`child-process-subagent-worker${n}`)];for(let e of r)if(i(e))return e;return r[0]}function Ot(e){return!e.endsWith(`.ts`)||process.execArgv.some(e=>e.includes(`tsx`))?process.execArgv:[...process.execArgv,`--import`,`tsx`]}function kt(e,t,n){return i(t)?Be(e,s(t,`utf8`).split(/\r?\n/).filter(Boolean),n):{taskId:e,cursor:n,lines:[]}}function At(e,t){let n=U(e),r=U(t);if(n===void 0||r===void 0)return Math.sign(e.localeCompare(t));let i=G(n.major,r.major)||G(n.minor,r.minor)||G(n.patch,r.patch);return i===0?Mt(n.prerelease,r.prerelease):i}function jt(e,t){return At(e,t)>0}function U(e){let[t,n]=(e.trim().replace(/^v/,``).split(`+`)[0]??``).split(`-`,2),[r,i,a]=t.split(`.`),o=W(r),s=W(i),c=W(a);if(!(o===void 0||s===void 0||c===void 0))return{major:o,minor:s,patch:c,prerelease:n?n.split(`.`):[]}}function W(e){if(!(e===void 0||!/^\d+$/.test(e)))return Number(e)}function G(e,t){return Math.sign(e-t)}function Mt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return 1;if(t.length===0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n===void 0)return-1;if(i===void 0)return 1;let a=Nt(n,i);if(a!==0)return a}return 0}function Nt(e,t){let n=W(e),r=W(t);return n!==void 0&&r!==void 0?G(n,r):n===void 0?r===void 0?Math.sign(e.localeCompare(t)):1:-1}function Pt(e=process.env.HOME??process.env.USERPROFILE??`/`){return f(e,`.robota`,`update-check.json`)}function Ft(e){if(i(e))try{return Wt(JSON.parse(s(e,`utf8`)))}catch{return}}function It(e,t){o(u(e),{recursive:!0}),l(e,JSON.stringify(t,null,2)+`
32
- `,`utf8`)}async function K(e){if(e.disabled===!0)return{status:`skipped`,reason:`disabled`};let t=e.packageName??`@robota-sdk/agent-cli`,n=e.cachePath??Pt(),r=e.now??new Date,i=e.ttlMs??864e5;if(e.force!==!0){let a=Ft(n);if(a!==void 0&&Vt(a,r,i,t))return Bt(a,e.currentVersion)}try{let i=await Ht({fetchImpl:e.fetchImpl??fetch,packageName:t,registryUrl:e.registryUrl??`https://registry.npmjs.org`,timeoutMs:e.timeoutMs??1500});return q(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,latestVersion:i}),Y(e.currentVersion,i)}catch(i){let a=i instanceof Error?i.message:String(i);return q(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,errorMessage:a}),{status:`error`,errorMessage:a}}}function q(e,t){try{It(e,t)}catch{}}async function Lt(e){let t=await K(e);return t.status===`update_available`?t.notice:void 0}function Rt(e){return e.printMode===!1&&e.disableUpdateCheck===!1}function J(e){return[`Robota update available: ${e.currentVersion} -> ${e.latestVersion}.`,`Run ${e.installCommand}`].join(` `)}function zt(e){return e.status===`update_available`?J(e.notice):e.status===`current`?`Robota is up to date (${e.currentVersion}).`:e.status===`skipped`?`Robota update check skipped.`:`Robota update check failed: ${e.errorMessage}`}function Bt(e,t){return e.errorMessage===void 0?e.latestVersion===void 0?{status:`error`,errorMessage:`Cached update check has no latest version`}:Y(t,e.latestVersion):{status:`error`,errorMessage:e.errorMessage}}function Y(e,t){return jt(t,e)?{status:`update_available`,notice:{currentVersion:e,latestVersion:t,installCommand:`npm install -g '@robota-sdk/agent-cli@latest'`}}:{status:`current`,currentVersion:e,latestVersion:t}}function Vt(e,t,n,r){if(e.packageName!==r)return!1;let i=Date.parse(e.checkedAt);return Number.isFinite(i)?t.getTime()-i<n:!1}async function Ht(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e.timeoutMs);try{let n=Ut(e.registryUrl,e.packageName),r=await e.fetchImpl(n,{headers:{accept:`application/json`},signal:t.signal});if(!r.ok)throw Error(`registry responded with HTTP ${r.status}`);let i=(await r.json())[`dist-tags`]?.latest;if(typeof i!=`string`||i.trim().length===0)throw Error(`registry metadata is missing dist-tags.latest`);return i}finally{clearTimeout(n)}}function Ut(e,t){return`${e.replace(/\/+$/,``)}/${encodeURIComponent(t)}`}function Wt(e){if(!Gt(e))return;let t=e;if(typeof t.packageName==`string`&&typeof t.checkedAt==`string`&&typeof t.currentVersion==`string`&&(t.latestVersion===void 0||typeof t.latestVersion==`string`)&&(t.errorMessage===void 0||typeof t.errorMessage==`string`))return{packageName:t.packageName,checkedAt:t.checkedAt,currentVersion:t.currentVersion,...t.latestVersion!==void 0&&{latestVersion:t.latestVersion},...t.errorMessage!==void 0&&{errorMessage:t.errorMessage}}}function Gt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const X={..._};function Kt(e){let t=e.statusline;return Jt(t)?{enabled:typeof t.enabled==`boolean`?t.enabled:X.enabled,gitBranch:typeof t.gitBranch==`boolean`?t.gitBranch:X.gitBranch}:{...X}}function qt(e,t){let n=E(e),r={...Kt(n),...t};return n.statusline=r,D(e,n),r}function Jt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Yt(e){try{let t=Xt(e);if(!t)return;let n=s(f(t,`HEAD`),`utf8`).trim();if(!n)return;if(n.startsWith(`ref: `)){let e=n.slice(5).trim();return e.startsWith(`refs/heads/`)?e.slice(11):e}return n.slice(0,7)}catch{return}}function Xt(e){let t=p(e),n=u(t);for(;n!==t;){let e=Z(f(t,`.git`),t);if(e)return e;t=n,n=u(t)}return Z(f(t,`.git`),t)}function Z(e,t){if(!i(e))return;let n=a(e);if(n.isDirectory())return e;if(!n.isFile())return;let r=s(e,`utf8`).trim();if(!r.startsWith(`gitdir:`))return;let o=r.slice(7).trim();return d(o)?o:p(t,o)}const Q=`plugin`;function Zt(){return process.env.HOME??S()}function $(e){let t=new g(f(Zt(),`.robota`,`plugins`));try{let n=t.loadPluginsSync();return n.length===0?(e.replaceSource(Q),0):(e.replaceSource(Q,new ee(n)),n.length)}catch{return e.replaceSource(Q),0}}function Qt(e){let t=S(),r=f(t,`.robota`,`plugins`),i=f(t,`.robota`,`settings.json`),a=(e,t)=>n(e,{timeout:t.timeout,stdio:t.stdio??`pipe`}),o=new te(i),s=new y({pluginsDir:r,exec:a});return{cwd:e,marketplace:s,installer:new h({pluginsDir:r,settingsStore:o,marketplaceClient:s,exec:a}),loader:new g(r),settingsStore:o}}async function $t(e){let t=await e.loader.loadAll(),n=e.settingsStore.getEnabledPlugins();return t.map(e=>{let t=e.pluginDir.split(`/`),r=t.indexOf(`cache`),i=r>=0?t[r+1]??``:``,a=i?`${e.manifest.name}@${i}`:e.manifest.name;return{name:a,description:e.manifest.description,enabled:n[a]!==!1&&n[e.manifest.name]!==!1}})}async function en(e,t){let n;try{n=e.marketplace.fetchManifest(t)}catch{return[]}let r=e.installer.getInstalledPlugins(),i=new Set(Object.values(r).map(e=>e.pluginName));return n.plugins.map(e=>({name:e.name,description:e.description,installed:i.has(e.name)}))}async function tn(e,t,r){let[i,a]=t.split(`@`);if(!i||!a)throw Error(`Plugin ID must be in format: name@marketplace`);if(r===`project`){await new h({pluginsDir:f(e.cwd,`.robota`,`plugins`),settingsStore:e.settingsStore,marketplaceClient:e.marketplace,exec:(e,t)=>n(e,{timeout:t.timeout,stdio:t.stdio??`pipe`})}).install(i,a);return}await e.installer.install(i,a)}async function nn(e,t){let n=e.installer.getPluginsByMarketplace(t);for(let t of n)await e.installer.uninstall(`${t.pluginName}@${t.marketplace}`);e.marketplace.removeMarketplace(t)}function rn(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function an(e){let t=Qt(e);return{listInstalled:()=>$t(t),listAvailablePlugins:e=>en(t,e),install:(e,n)=>tn(t,e,n),uninstall:async e=>t.installer.uninstall(e),enable:async e=>t.installer.enable(e),disable:async e=>t.installer.disable(e),marketplaceAdd:async e=>e.includes(`/`)&&!e.includes(`:`)?t.marketplace.addMarketplace({type:`github`,repo:e}):t.marketplace.addMarketplace({type:`git`,url:e}),marketplaceRemove:e=>nn(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>rn(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}async function on(e,t){if(e.positional[0]!==`user-local`)return!1;let n=await Pe({cwd:t,argv:e.positional.slice(1),format:e.format,summary:e.summary,source:e.source}),r=n.message.endsWith(`
33
- `)?n.message:`${n.message}\n`;return n.success||(process.stderr.write(r),process.exit(1)),process.stdout.write(r),!0}function sn(){try{let e=u(m(import.meta.url)),t=[f(e,`..`,`..`,`package.json`),f(e,`..`,`package.json`)];for(let e of t)try{let t=s(e,`utf-8`),n=JSON.parse(t);if(n.version!==void 0&&n.name!==void 0)return n.version}catch{}return`0.0.0`}catch{return`0.0.0`}}function cn(e,t=!1){return new Promise((n,r)=>{process.stdout.write(e);let i=``,a=process.stdin,o=a.isRaw;if(!a.isTTY){r(Error(`Cannot prompt for input: stdin is not a TTY.
34
- Set your API key via environment variable instead:
35
- ANTHROPIC_API_KEY=<key> robota
36
- OPENAI_API_KEY=<key> robota`));return}a.setRawMode(!0),a.resume(),a.setEncoding(`utf8`);let s=e=>{for(let r of e)if(r===`\r`||r===`
37
- `){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
38
- `),n(i.trim());return}else r===``||r===`\b`?i.length>0&&(i=i.slice(0,-1),process.stdout.write(`\b \b`)):r===``?(a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
39
- `),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)})}function ln(e,t){let n=s(p(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function un(){let e=T();O(e)?process.stdout.write(`Deleted ${e}\n`):process.stdout.write(`No user settings found.
40
- `)}function dn({cwd:e,providerDefinitions:t}){return[je({cwd:e}),ye(),me(),Ce({providerDefinitions:t,settings:{readMergedSettings:()=>A(e)}}),we(),Se(),be(),he(),xe(),Ne(),ge(),_e(),ve(),ke(),De(),Oe(),Me(),Te(),Ae(),Ee({providerDefinitions:t,settings:{readMergedSettings:()=>A(e),readTargetSettings:()=>E(N(e)),writeTargetSettings:t=>D(N(e),t)}})]}function fn(t,n,r,i){let a={settings:{read:()=>E(T()),write:e=>D(T(),e)},plugin:an(t)},o=r.providerDefinitions??e;return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...dn({cwd:t,providerDefinitions:o}),...r.commandModules??[]],startupUpdateNoticePromise:Rt(n)?Lt({currentVersion:i}):void 0}}function pn(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(ln(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
41
-
42
- `):void 0}async function mn(e,t,r,i,a,o,s,c){let l=t.positional.join(` `).trim();if(!l&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);l=Buffer.concat(e).toString(`utf-8`).trim()}l||(process.stderr.write(`Print mode (-p) requires a prompt argument.
43
- `),process.exit(1));let u=pn(e,t);t.systemPrompt&&process.stderr.write(`Warning: --system-prompt is not yet functional and will be ignored.
44
- `);let d=new v({cwd:e,provider:r,permissionMode:t.permissionMode??`bypassPermissions`,maxTurns:t.maxTurns,sessionStore:t.noSessionPersistence?void 0:i,sessionName:t.sessionName,bare:t.bare||void 0,allowedTools:t.allowedTools?t.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:u,backgroundTaskRunners:a,subagentRunnerFactory:o,commandModules:s,commandHostAdapters:c,shellExec:e=>n(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),agentName:`robota-cli`}),f=qe({outputFormat:t.outputFormat??`text`,prompt:l});d.attachTransport(f),await f.start(),await d.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(f.getExitCode())}async function hn(e={}){let t=et(),r=sn();if(t.help){Xe();return}if(t.version){process.stdout.write(`robota ${r}\n`);return}if(t.checkUpdate){let e=await K({currentVersion:r,force:!0}),t=zt(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}if(t.reset){un();return}let i=process.cwd();if(await on(t,i))return;let{commandHostAdapters:a,providerDefinitions:o,commandModules:s,startupUpdateNoticePromise:c}=fn(i,t,e,r);if(t.configure){await L(i,t,cn,o);return}if(ct(i,t,o))return;try{await lt(i,t,cn,o)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let l=t.provider?{providerOverride:t.provider,providerDefinitions:o}:{providerDefinitions:o},u=A(i);t.provider??u.currentProvider;let d=j(i,l),f=t.model??d.model,p=nt(i,t.model,l),m=Ve(),h=se(i),g=V({providerConfig:{...d,model:f},logsDir:h.logs}),_=re(i),v,y=!1;if(t.continueMode?v=de(_,i):t.resumeId!==void 0&&(t.resumeId===``?y=!0:(v=fe(_,t.resumeId),v===void 0&&(process.stderr.write(`Session not found: ${t.resumeId}\n`),process.exit(1)))),t.printMode){await mn(i,t,p,_,m,g,s,a);return}await new Ye({cwd:i,provider:p,providerOverride:t.provider,providerType:d.name,modelId:f,language:t.language,permissionMode:t.permissionMode,maxTurns:t.maxTurns,version:r,sessionStore:t.noSessionPersistence?void 0:_,resumeSessionId:v,showSessionPickerOnStart:y,forkSession:t.forkSession,sessionName:t.sessionName,backgroundTaskRunners:m,subagentRunnerFactory:g,commandModules:s,commandHostAdapters:a,shellExec:e=>n(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:c?c.then(e=>e?J(e):void 0):void 0,transportRegistry:_n(),cliAdapter:gn(o),reloadPluginCommandSource:$,agentName:`robota-cli`}).start(),process.exit(0)}function gn(e){return{getUserSettingsPath:()=>T(),readSettings:e=>E(e),writeSettings:(e,t)=>D(e,t),deleteSettings:e=>O(e),applyStatusLineSettings:(e,t)=>qt(e,t),reloadPluginCommandSource:e=>{$(e)},applyActiveModelChange:(e,t,n)=>(it(e,t,n),{applied:!0}),getGitBranch:e=>Yt(e),getProviderDisplayName:t=>ie(e,t)?.displayName??t}}function _n(){let e=new ht(T());return e.register(new Je),e}export{H as ChildProcessSubagentRunner,ze as GitWorktreeIsolationAdapter,V as createChildProcessSubagentRunnerFactory,He as createGitWorktreeIsolationAdapter,hn as startCli};
34
+ `}function de(e){if(e!==void 0){if(!Q.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${Q.join(` | `)}`);return e}}function fe(e){if(e!==void 0){if(!Z.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${Z.join(` | `)}`);return e}}function pe(e){if(e===void 0)return;let t=parseInt(e,10);if(isNaN(t)||t<=0)throw Error(`Invalid --max-turns "${e}". Must be a positive integer.`);return t}const $={allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},model:{type:`string`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1}}};function me(e,t){return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,model:e.model,language:e.language,permissionMode:fe(e[`permission-mode`]),maxTurns:pe(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:de(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1}}function he(){let{values:e,positionals:t}=L($);return me(e,t)}function ge(e){let t=h();t.deleted?e.writeLine(`Deleted ${t.path}`):e.writeLine(`No user settings found.`)}async function _e(e,t){if(e.help)return process.stdout.write(ue()),{handled:!0};if(e.version)return process.stdout.write(`robota ${t.version}\n`),{handled:!0};if(e.checkUpdate){let e=await r({currentVersion:t.version,force:!0}),n=s(e);return e.status===`error`&&(process.stderr.write(`${n}\n`),process.exit(1)),process.stdout.write(`${n}\n`),{handled:!0}}return e.reset?(ge(t.terminal),{handled:!0}):{handled:!1}}function ve(e){return{subagentRunnerFactory:R({workerPath:z(),providerConfig:e.providerConfig,logsDir:e.logsDir})}}function ye(e,t,n){let r=t.provider?{providerOverride:t.provider,providerDefinitions:n.providerDefinitions}:{providerDefinitions:n.providerDefinitions},i=p(e,r),a=t.model??i.model,s=o(e,t.model,r),{subagentRunnerFactory:c}=ve({providerConfig:{...i,model:a},logsDir:d(e).logs});return{provider:s,providerSettings:i,modelId:a,subagentRunnerFactory:c}}function be(e,t){let n=t.noSessionPersistence?void 0:a(e),r,i=!1;return t.continueMode?r=g(n,e):t.resumeId!==void 0&&(t.resumeId===``?i=!0:(r=v(n,t.resumeId),r===void 0&&(process.stderr.write(`Session not found: ${t.resumeId}\n`),process.exit(1)))),{sessionStore:n,resumeSessionId:r,showSessionPickerOnStart:i}}function xe(e,t){if(ne(t))return l({currentVersion:e}).then(e=>e?c(e):void 0)}const Se=()=>ee(import.meta.url);async function Ce(e,t,n){if(e.positional[0]!==`user-local`)return!1;let r=await M({cwd:t,argv:e.positional.slice(1),format:e.format,summary:e.summary,source:e.source}),i=r.message.trimEnd();if(!r.success)throw Error(i);return n.writeLine(i),!0}async function we(e={}){let t;try{t=he()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let n=Se(),r=new x;if((await _e(t,{version:n,terminal:r})).handled)return;let a=process.cwd(),o=G(t),s=K(t);try{if(await Ce(q(t),a,r))return}catch(e){r.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let c=J(a,e);if((await le(a,o,c,r)).handled)return;let l=ye(a,o,c),u=be(a,s),d=i({cwd:a,provider:l.provider,commandModules:c.commandModules,commandHostAdapters:c.commandHostAdapters,reloadPluginCommandSource:c.reloadPluginCommandSource,subagentRunnerFactory:l.subagentRunnerFactory,sessionStore:u.sessionStore,transportRegistry:b()});if(o.printMode){await U(s,d);return}await W({runtime:d,version:n,commandSetup:c,providerSetup:l,sessionSetup:u,sessionOpts:s,startupUpdateNotice:xe(n,re(t))}),process.exit(0)}export{we as startCli};
45
35
  //# sourceMappingURL=index.js.map