@robota-sdk/agent-cli 3.0.0-beta.65 → 3.0.0-beta.67

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,8 @@
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:fs`),i=require(`node:path`),a=require(`node:child_process`),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,r.readFileSync)((0,i.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=[];return t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile&&n.push(f(e,t.taskFile)),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}const m=`robota-cli`;function h(){return e=>(0,a.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd()}async function g(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 _(e,t){let r=await g(e),i=p(t.cwd,e),a=h(),o=t.createSession({permissionMode:e.permissionMode??`bypassPermissions`,maxTurns:e.maxTurns,sessionStore:e.noSessionPersistence?void 0:t.sessionStore,sessionName:e.sessionName,bare:e.bare||void 0,allowedTools:e.allowedTools?e.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:i,systemPrompt:e.systemPrompt,shellExec:a,agentName:m}),s=(0,n.createHeadlessTransport)({outputFormat:e.outputFormat??`text`,prompt:r});o.attachTransport(s),await s.start(),await o.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(s.getExitCode())}async function v(e){let{runtime:t,version:n,commandSetup:r,providerSetup:i,sessionSetup:a,sessionOpts:s,startupUpdateNotice:c}=e;await new o.TuiTransport({runtime:t,providerOverride:i.activeProfileName,providerType:i.providerSettings.name,modelId:i.modelId,language:s.language,permissionMode:s.permissionMode,maxTurns:s.maxTurns,version:n,resumeSessionId:a.resumeSessionId,showSessionPickerOnStart:a.showSessionPickerOnStart,forkSession:s.forkSession,sessionName:s.sessionName,shellExec:h(),startupUpdateNotice:c,cliAdapter:(0,o.createDefaultTuiCliAdapter)({providerDefinitions:r.providerDefinitions,reloadPluginCommandSource:r.reloadPluginCommandSource}),agentName:m}).start()}function y(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 b(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 x(e){return{positional:e.positional,format:e.format,summary:e.summary,source:e.source}}function S(e){return{printMode:e.printMode,disableUpdateCheck:e.disableUpdateCheck}}function C(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 w(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function T(t,n,r,i){let a=(0,e.resolveSettingsPathForScope)(t,w(n.settingsScope));return n.configureProvider?((0,e.applyProviderConfiguration)(a,O(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 E(e,t,n,r,i,a){await(0,s.ensureProviderConfig)(e,{provider:t.provider,settingsScope:w(t.settingsScope)},n,r,i,{formatError:k,isInteractive:()=>a})}async function D(e,t,n,r,i){await(0,s.runProviderStartupSetup)(e,{settingsScope:w(t.settingsScope)},n,r,i)}function O(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 k(e){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${(0,l.formatSupportedProviderTypes)(e)}`,...e.map(A)].join(`
5
+ `)}function A(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 j(e,t,r,i,a){return t.configure?(await D(e,t,n.promptInput,i,r.providerDefinitions),{handled:!0}):T(e,t,i,r.providerDefinitions)?{handled:!0}:(await E(e,t,n.promptInput,i,r.providerDefinitions,a),{handled:!1})}const M=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],N=[`text`,`json`,`stream-json`];function P(){return`
2
6
  Usage: robota [options] [-p <prompt>]
3
7
 
4
8
  Options:
@@ -26,19 +30,4 @@ Examples:
26
30
  robota -p "Hello" Print mode: send prompt and exit
27
31
  robota -p "Hello" --output-format json
28
32
  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(){return[{label:`plan`,value:`plan`,description:`Plan only, no execution`},{label:`default`,value:`default`,description:`Ask before risky actions`},{label:`acceptEdits`,value:`acceptEdits`,description:`Auto-approve file edits`},{label:`bypassPermissions`,value:`bypassPermissions`,description:`Skip all permission checks`}]}function rt(){return[{label:`ko Korean`,value:`ko`,description:`한국어`},{label:`en English`,value:`en`,description:`English`},{label:`ja Japanese`,value:`ja`,description:`日本語`},{label:`zh Chinese`,value:`zh`,description:`中文`}]}function it(){return[{label:`current`,value:`current`,description:`Show current provider`},{label:`list`,value:`list`,description:`List available providers`},{label:`use`,value:`use`,description:`Switch to a provider`},{label:`add`,value:`add`,description:`Add a new provider`},{label:`test`,value:`test`,description:`Test provider connection`}]}const at={agent:void 0,background:void 0,clear:{onMissingArgs:`confirm`,message:`Clear conversation history?`},compact:void 0,context:void 0,cost:void 0,exit:{onMissingArgs:`confirm`,message:`Exit the session?`},help:void 0,language:{onMissingArgs:`picker`,getItems:rt},memory:void 0,mode:{onMissingArgs:`picker`,getItems:Q},model:void 0,permissions:void 0,plugin:void 0,provider:{onMissingArgs:`picker`,getItems:it},rename:void 0,reset:void 0,resume:void 0,rewind:void 0,settings:void 0,skills:void 0,statusline:void 0,"user-local":void 0,"validate-session":void 0};function ot(e){return at[e]}function st(){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 ct(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 lt(){let e=y();S(e)?process.stdout.write(`Deleted ${e}\n`):process.stdout.write(`No user settings found.
40
- `)}function ut({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 dt(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:[...ut({cwd:t,providerDefinitions:o}),...r.commandModules??[]],startupUpdateNoticePromise:Fe(n)?Pe({currentVersion:i}):void 0}}function ft(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(ct(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 pt(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=ft(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 mt(e={}){let n=te(),r=st();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){lt();return}let i=process.cwd();if(await nt(n,i))return;let{commandHostAdapters:o,providerDefinitions:s,commandModules:l,startupUpdateNoticePromise:u}=dt(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 pt(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:gt(),cliAdapter:ht(s),reloadPluginCommandSource:Z,agentName:`robota-cli`,resolveInteraction:ot}).start(),process.exit(0)}function ht(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 gt(){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=mt;
33
+ `}function F(e){if(e!==void 0){if(!N.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${N.join(` | `)}`);return e}}function I(e){if(e!==void 0){if(!M.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${M.join(` | `)}`);return e}}function L(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 R={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 z(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:I(e[`permission-mode`]),maxTurns:L(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:F(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 B(){let{values:e,positionals:t}=(0,u.parseArgs)(R);return z(e,t)}function V(t){let n=(0,e.resetUserConfig)();n.deleted?t.writeLine(`Deleted ${n.path}`):t.writeLine(`No user settings found.`)}async function H(t,n){if(t.help)return n.terminal.write(P()),{handled:!0};if(t.version)return n.terminal.writeLine(`robota ${n.version}`),{handled:!0};if(t.checkUpdate){let t=await(0,e.checkForCliUpdate)({currentVersion:n.version,force:!0}),r=(0,e.formatCliUpdateCheckMessage)(t);if(t.status===`error`)throw Error(r);return n.terminal.writeLine(r),{handled:!0}}return t.reset?(V(n.terminal),{handled:!0}):{handled:!1}}function U(e){return{subagentRunnerFactory:(0,d.createChildProcessSubagentRunnerFactory)({providerConfig:e.providerConfig,logsDir:e.logsDir})}}function W(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),c=n.provider??(0,e.readMergedProviderSettings)(t).currentProvider,{subagentRunnerFactory:l}=U({providerConfig:{...a,model:o},logsDir:(0,e.projectPaths)(t).logs});return{provider:s,providerSettings:a,modelId:o,activeProfileName:c,subagentRunnerFactory:l}}function G(t,n){let r=n.noSessionPersistence?void 0:(0,e.createProjectSessionStore)(t),i,a=!1;if(n.continueMode)i=(0,e.resolveLatestSessionId)(r,t);else if(n.resumeId!==void 0){if(n.resumeId===``)a=!0;else if(i=(0,e.resolveSessionIdByIdOrName)(r,n.resumeId),i===void 0)throw Error(`Session not found: ${n.resumeId}`)}return{sessionStore:r,resumeSessionId:i,showSessionPickerOnStart:a}}function K(t,n){if((0,e.shouldRunStartupCliUpdateCheck)(n))return(0,e.getStartupCliUpdateNotice)({currentVersion:t}).then(t=>t?(0,e.formatCliUpdateNotice)(t):void 0)}const q=()=>(0,e.readPackageVersion)(require(`url`).pathToFileURL(__filename).href);async function J(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}function Y(){try{return B()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}}async function X(r={}){let i=Y(),a=q(),o=new n.PrintTerminal;if((await H(i,{version:a,terminal:o})).handled)return;let s=process.cwd(),c=y(i),l=b(i);try{if(await J(x(i),s,o))return}catch(e){o.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let u=process.stdin.isTTY===!0&&process.stdout.isTTY===!0,d=C(s,r);if((await j(s,c,d,o,u)).handled)return;let f=W(s,c,d),p=G(s,l),m=(0,e.createAgentRuntime)({cwd:s,provider:f.provider,commandModules:d.commandModules,commandHostAdapters:d.commandHostAdapters,reloadPluginCommandSource:d.reloadPluginCommandSource,subagentRunnerFactory:f.subagentRunnerFactory,sessionStore:p.sessionStore,transportRegistry:(0,t.createDefaultTransportRegistry)()});if(c.printMode){await _(l,m);return}await v({runtime:m,version:a,commandSetup:d,providerSetup:f,sessionSetup:p,sessionOpts:l,startupUpdateNotice:K(a,S(i))}),process.exit(0)}exports.startCli=X;
@@ -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":";;;;;;;;UA+LiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA;AAAA,iBAyK9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO;;;UCtUtD,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;;;iBCc9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO"}
@@ -1,4 +1,8 @@
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{applyProviderConfiguration as e,applyProviderSwitch as t,checkForCliUpdate as n,createAgentRuntime as r,createProjectSessionStore as i,createProviderFromSettings as a,formatCliUpdateCheckMessage as o,formatCliUpdateNotice as s,getStartupCliUpdateNotice as c,getUserSettingsPath as l,projectPaths as u,readMergedProviderSettings as d,readPackageVersion as f,readProviderSettings as p,readSettings as m,resetUserConfig as ee,resolveLatestSessionId as h,resolveProviderSettingsWriteTargetPath as g,resolveSessionIdByIdOrName as _,resolveSettingsPathForScope as v,shouldRunStartupCliUpdateCheck as te,writeSettings as y}from"@robota-sdk/agent-framework";import{createDefaultTransportRegistry as ne}from"@robota-sdk/agent-transport";import{PrintTerminal as b,createHeadlessTransport as x,promptInput as S}from"@robota-sdk/agent-transport/headless";import{readFileSync as C}from"node:fs";import{resolve as w}from"node:path";import{execSync as T}from"node:child_process";import{TuiTransport as E,createDefaultTuiCliAdapter as D}from"@robota-sdk/agent-transport/tui";import{createDefaultCommandModules as O,createDefaultPluginCommandAdapter as k,ensureProviderConfig as A,executeUserLocalDirectCommand as j,reloadPluginCommandSource as M,runProviderStartupSetup as N}from"@robota-sdk/agent-command";import{createDefaultProviderDefinitions as P}from"@robota-sdk/agent-provider";import{formatSupportedProviderTypes as F}from"@robota-sdk/agent-core";import{parseArgs as I}from"node:util";import{createChildProcessSubagentRunnerFactory as L}from"@robota-sdk/agent-subagent-runner";function R(e,t){let n=C(w(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function z(e,t){let n=[];return t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile&&n.push(R(e,t.taskFile)),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}const B=`robota-cli`;function V(){return e=>T(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd()}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(e,t){let n=await H(e),r=z(t.cwd,e),i=V(),a=t.createSession({permissionMode:e.permissionMode??`bypassPermissions`,maxTurns:e.maxTurns,sessionStore:e.noSessionPersistence?void 0:t.sessionStore,sessionName:e.sessionName,bare:e.bare||void 0,allowedTools:e.allowedTools?e.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:r,systemPrompt:e.systemPrompt,shellExec:i,agentName:B}),o=x({outputFormat:e.outputFormat??`text`,prompt:n});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 E({runtime:t,providerOverride:i.activeProfileName,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:V(),startupUpdateNotice:s,cliAdapter:D({providerDefinitions:r.providerDefinitions,reloadPluginCommandSource:r.reloadPluginCommandSource}),agentName:B}).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(l()),write:e=>y(l(),e)},plugin:k(e)},r=t.providerDefinitions??P();return{commandHostAdapters:n,providerDefinitions:r,commandModules:[...O({cwd:e,providerDefinitions:r,providerSettingsAdapter:{readMergedSettings:()=>d(e),readTargetSettings:()=>m(g(e)),writeTargetSettings:t=>y(g(e),t)}}),...t.commandModules??[]],reloadPluginCommandSource:M}}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(n,r,i,a){let o=v(n,Y(r.settingsScope));return r.configureProvider?(e(o,oe(r),{providerDefinitions:a}),i.writeLine(`Provider profile saved to ${o}`),!r.printMode&&r.positional.length===0):r.provider&&r.setCurrent?(t(r.settingsScope===void 0?g(n):o,r.provider,{knownProviders:d(n).providers}),i.writeLine(`Current provider set to ${r.provider}`),!r.printMode&&r.positional.length===0):!1}async function ie(e,t,n,r,i,a){await A(e,{provider:t.provider,settingsScope:Y(t.settingsScope)},n,r,i,{formatError:se,isInteractive:()=>a})}async function ae(e,t,n,r,i){await N(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){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${F(e)}`,...e.map(ce)].join(`
5
+ `)}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,i){return t.configure?(await ae(e,t,S,r,n.providerDefinitions),{handled:!0}):X(e,t,r,n.providerDefinitions)?{handled:!0}:(await ie(e,t,S,r,n.providerDefinitions,i),{handled:!1})}const Z=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],Q=[`text`,`json`,`stream-json`];function ue(){return`
2
6
  Usage: robota [options] [-p <prompt>]
3
7
 
4
8
  Options:
@@ -26,20 +30,5 @@ Examples:
26
30
  robota -p "Hello" Print mode: send prompt and exit
27
31
  robota -p "Hello" --output-format json
28
32
  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 Qt(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 $t(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 en(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 tn(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 nn(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 rn(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 an(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function on(e){let t=$t(e);return{listInstalled:()=>en(t),listAvailablePlugins:e=>tn(t,e),install:(e,n)=>nn(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=>rn(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>an(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}async function sn(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 cn(){return[{label:`plan`,value:`plan`,description:`Plan only, no execution`},{label:`default`,value:`default`,description:`Ask before risky actions`},{label:`acceptEdits`,value:`acceptEdits`,description:`Auto-approve file edits`},{label:`bypassPermissions`,value:`bypassPermissions`,description:`Skip all permission checks`}]}function ln(){return[{label:`ko Korean`,value:`ko`,description:`한국어`},{label:`en English`,value:`en`,description:`English`},{label:`ja Japanese`,value:`ja`,description:`日本語`},{label:`zh Chinese`,value:`zh`,description:`中文`}]}function un(){return[{label:`current`,value:`current`,description:`Show current provider`},{label:`list`,value:`list`,description:`List available providers`},{label:`use`,value:`use`,description:`Switch to a provider`},{label:`add`,value:`add`,description:`Add a new provider`},{label:`test`,value:`test`,description:`Test provider connection`}]}const dn={agent:void 0,background:void 0,clear:{onMissingArgs:`confirm`,message:`Clear conversation history?`},compact:void 0,context:void 0,cost:void 0,exit:{onMissingArgs:`confirm`,message:`Exit the session?`},help:void 0,language:{onMissingArgs:`picker`,getItems:ln},memory:void 0,mode:{onMissingArgs:`picker`,getItems:cn},model:void 0,permissions:void 0,plugin:void 0,provider:{onMissingArgs:`picker`,getItems:un},rename:void 0,reset:void 0,resume:void 0,rewind:void 0,settings:void 0,skills:void 0,statusline:void 0,"user-local":void 0,"validate-session":void 0};function fn(e){return dn[e]}function pn(){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 $(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 mn(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 hn(){let e=T();O(e)?process.stdout.write(`Deleted ${e}\n`):process.stdout.write(`No user settings found.
40
- `)}function gn({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 _n(t,n,r,i){let a={settings:{read:()=>E(T()),write:e=>D(T(),e)},plugin:on(t)},o=r.providerDefinitions??e;return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...gn({cwd:t,providerDefinitions:o}),...r.commandModules??[]],startupUpdateNoticePromise:Rt(n)?Lt({currentVersion:i}):void 0}}function vn(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(mn(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 yn(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=vn(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 bn(e={}){let t=et(),r=pn();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){hn();return}let i=process.cwd();if(await sn(t,i))return;let{commandHostAdapters:a,providerDefinitions:o,commandModules:s,startupUpdateNoticePromise:c}=_n(i,t,e,r);if(t.configure){await L(i,t,$,o);return}if(ct(i,t,o))return;try{await lt(i,t,$,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 yn(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:Sn(),cliAdapter:xn(o),reloadPluginCommandSource:Qt,agentName:`robota-cli`,resolveInteraction:fn}).start(),process.exit(0)}function xn(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=>{Qt(e)},applyActiveModelChange:(e,t,n)=>(it(e,t,n),{applied:!0}),getGitBranch:e=>Yt(e),getProviderDisplayName:t=>ie(e,t)?.displayName??t}}function Sn(){let e=new ht(T());return e.register(new Je),e}export{H as ChildProcessSubagentRunner,ze as GitWorktreeIsolationAdapter,V as createChildProcessSubagentRunnerFactory,He as createGitWorktreeIsolationAdapter,bn as startCli};
33
+ `}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 me={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 he(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 ge(){let{values:e,positionals:t}=I(me);return he(e,t)}function _e(e){let t=ee();t.deleted?e.writeLine(`Deleted ${t.path}`):e.writeLine(`No user settings found.`)}async function ve(e,t){if(e.help)return t.terminal.write(ue()),{handled:!0};if(e.version)return t.terminal.writeLine(`robota ${t.version}`),{handled:!0};if(e.checkUpdate){let e=await n({currentVersion:t.version,force:!0}),r=o(e);if(e.status===`error`)throw Error(r);return t.terminal.writeLine(r),{handled:!0}}return e.reset?(_e(t.terminal),{handled:!0}):{handled:!1}}function ye(e){return{subagentRunnerFactory:L({providerConfig:e.providerConfig,logsDir:e.logsDir})}}function be(e,t,n){let r=t.provider?{providerOverride:t.provider,providerDefinitions:n.providerDefinitions}:{providerDefinitions:n.providerDefinitions},i=p(e,r),o=t.model??i.model,s=a(e,t.model,r),c=t.provider??d(e).currentProvider,{subagentRunnerFactory:l}=ye({providerConfig:{...i,model:o},logsDir:u(e).logs});return{provider:s,providerSettings:i,modelId:o,activeProfileName:c,subagentRunnerFactory:l}}function $(e,t){let n=t.noSessionPersistence?void 0:i(e),r,a=!1;if(t.continueMode)r=h(n,e);else if(t.resumeId!==void 0){if(t.resumeId===``)a=!0;else if(r=_(n,t.resumeId),r===void 0)throw Error(`Session not found: ${t.resumeId}`)}return{sessionStore:n,resumeSessionId:r,showSessionPickerOnStart:a}}function xe(e,t){if(te(t))return c({currentVersion:e}).then(e=>e?s(e):void 0)}const Se=()=>f(import.meta.url);async function Ce(e,t,n){if(e.positional[0]!==`user-local`)return!1;let r=await j({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}function we(){try{return ge()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}}async function Te(e={}){let t=we(),n=Se(),i=new b;if((await ve(t,{version:n,terminal:i})).handled)return;let a=process.cwd(),o=G(t),s=K(t);try{if(await Ce(q(t),a,i))return}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let c=process.stdin.isTTY===!0&&process.stdout.isTTY===!0,l=J(a,e);if((await le(a,o,l,i,c)).handled)return;let u=be(a,o,l),d=$(a,s),f=r({cwd:a,provider:u.provider,commandModules:l.commandModules,commandHostAdapters:l.commandHostAdapters,reloadPluginCommandSource:l.reloadPluginCommandSource,subagentRunnerFactory:u.subagentRunnerFactory,sessionStore:d.sessionStore,transportRegistry:ne()});if(o.printMode){await U(s,f);return}await W({runtime:f,version:n,commandSetup:l,providerSetup:u,sessionSetup:d,sessionOpts:s,startupUpdateNotice:xe(n,re(t))}),process.exit(0)}export{Te as startCli};
45
34
  //# sourceMappingURL=index.js.map