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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node/bin.js CHANGED
@@ -31,17 +31,17 @@ Examples:
31
31
  `,`utf8`)}function O(e){return n(e)?(o(e),!0):!1}const k=[He(),Ke(),Ge(),We(),qe(),Ue()];function A(e){let t=rt();return[u(t,`.robota`,`settings.json`),u(t,`.claude`,`settings.json`),u(e,`.robota`,`settings.json`),u(e,`.robota`,`settings.local.json`),u(e,`.claude`,`settings.json`),u(e,`.claude`,`settings.local.json`)]}function rt(){return process.env.HOME??process.env.USERPROFILE??`/`}function j(e){return oe(A(e))}function M(e,t={}){let n=ce(j(e),t.providerOverride,N(t));if(n!==void 0)return n;throw Error("No provider configuration found. Run `robota` to set up.")}function it(e,t,n={}){let r=N(n),i=M(e,{...n,providerDefinitions:r}),a=t??i.model;return Be({...i,model:a},r)}function N(e){return e.providerDefinitions??k}function P(e,t={}){let n=t.settingsPaths??A(e),r=lt(n)??n[0];if(r===void 0)throw Error(`No settings path available for provider update`);return r}function F(e){return E(e)}function I(e,t,n={}){let r=ie(F(e),ee(t,n));return D(e,r),r}function at(e,t,n={}){let r=F(e),i=r.providers?.[t]!==void 0,a=n.knownProviders?.[t]!==void 0,o=i||a?{...r,currentProvider:t}:de(r,t);return D(e,o),o}function ot(e,t,n={}){let r=n.settingsPaths??A(e),i=se(r),a=n.providerOverride??i.currentProvider;if(typeof a!=`string`)throw Error(`Cannot update model: no active provider profile. Set "currentProvider" in settings.`);return st(r,a,t)}function st(e,t,n){let r=ct(e,t)??e[0];if(r===void 0)throw Error(`No settings path available for model update`);let i=F(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 ct(e,t){for(let n=e.length-1;n>=0;--n){let r=e[n];if(r!==void 0&&F(r).providers?.[t]!==void 0)return r}}function lt(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&F(n).currentProvider!==void 0)return n}}function L(e,t){if(t===void 0||t===`user`)return T();if(t===`project-local`)return u(e,`.robota`,`settings.local.json`);throw Error(`Invalid --settings-scope "${t}". Valid: user | project-local`)}function ut(e,t,n=k){let r=L(e,t.settingsScope);return t.configureProvider?(I(r,ft(t),{providerDefinitions:n}),process.stdout.write(`Provider profile saved to ${r}\n`),!t.printMode&&t.positional.length===0):t.provider&&t.setCurrent?(at(t.settingsScope===void 0?P(e):r,t.provider,{knownProviders:j(e).providers}),process.stdout.write(`Current provider set to ${t.provider}\n`),!t.printMode&&t.positional.length===0):!1}async function dt(e,t,n,r=k){let i=j(e);if(b(t.provider===void 0?i:{...i,currentProvider:t.provider},r)===`valid`)return;if(!ht())throw Error(z(r));await R(e,pt(e,t),n,r);let a=j(e);if(b(t.provider===void 0?a:{...a,currentProvider:t.provider},r)!==`valid`)throw Error(z(r))}async function R(e,t,n,r=k){let i=Pe(await n(Ne(r)),r),a=L(e,t.settingsScope);I(a,await Fe(i,n,r,{existingProfileNames:Object.keys(j(e).providers??{})}),{providerDefinitions:r});let o=await n(` Response language (ko/en/ja/zh, default: en): `);if(o){let e=E(a);e.language=o,D(a,e)}process.stdout.write(`\n Config saved to ${a}\n\n`)}function ft(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 pt(e,t){if(t.settingsScope!==void 0||t.provider!==void 0)return t;let n=mt(A(e));if(n===void 0)return t;let r=u(e,`.robota`,`settings.json`),i=u(e,`.robota`,`settings.local.json`);return n===r||n===i?{...t,settingsScope:`project-local`}:t}function mt(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 ht(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0}function z(e=k){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${Je(e)}`,...e.map(gt)].join(`
32
32
  `)}function gt(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 _t=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 vt(e){return typeof e==`object`&&!!e}function B(e,t){return typeof e[t]==`string`}function yt(e){if(!vt(e)||!B(e,`type`))return!1;switch(e.type){case`ready`:return!0;case`text_delta`:return B(e,`delta`);case`tool_start`:return B(e,`toolName`);case`tool_end`:return B(e,`toolName`)&&typeof e.success==`boolean`;case`result`:return B(e,`output`);case`error`:return B(e,`message`);case`cancelled`:return e.reason===void 0||typeof e.reason==`string`;default:return!1}}function bt(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:xt(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 xt(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function V(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 H(e,t){e.child.connected&&await V(e.child,{type:`cancel`,reason:t}).catch(()=>void 0),e.killTimer=setTimeout(()=>{e.child.killed||e.child.kill(`SIGTERM`)},e.killGraceMs)}function St(e){return new Promise((t,n)=>{new Ct(e,t,n).start()})}var Ct=class{options;resolve;reject;settled=!1;started=!1;timeoutTimer;constructor(e,t,n){this.options=e,this.resolve=t,this.reject=n,this.timeoutTimer=Tt(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;V(e,{type:`start`,payload:this.options.payload}).catch(e=>{this.rejectOnce(e instanceof Error?e:Error(String(e)))})};onMessage=e=>{if(!yt(e)){this.rejectOnce(new x(`runner`,`Received malformed subagent worker message`));return}let{job:t}=this.options.runtime;bt(e,this.startWorker,this.resolveOnce,this.rejectOnce,t.emit)};onError=e=>{this.rejectOnce(new x(`crash`,e.message))};onExit=(e,t)=>{this.settled||this.rejectOnce(new x(`crash`,Dt(e,t)))};resolveOnce=e=>{if(this.settled)return;this.settled=!0,this.clearTimers(),this.cleanup();let{runtime:t,resolveTranscriptPath:n}=this.options;this.resolve(Et(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 wt(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 Tt(e,t){if(e.job.request.timeoutMs)return setTimeout(()=>{H(e,`Subagent worker timed out`),t(new x(`timeout`,`Subagent worker timed out`))},e.job.request.timeoutMs)}function Et(e,t,n){let r=n(e);return{jobId:e.jobId,output:t,...r?{metadata:{transcriptPath:r,logPath:r}}:{}}}function Dt(e,t){return`Subagent worker exited before result: ${t===null?`exit code ${e===null?`unknown`:e}`:`signal ${t}`}`}function Ot(e={}){return t=>{let n=new kt(t,e);return e.worktreeIsolation===!1?n:Ve({runner:n,worktreeAdapter:e.worktreeAdapter??ze(),hooks:t.config.hooks,hookTypeExecutors:t.hookTypeExecutors})}}var kt=class{deps;workerPath;execArgv;killGraceMs;providerConfig;env;logsDir;constructor(e,t={}){this.deps=e,this.workerPath=t.workerPath??Nt(),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=t(this.workerPath,[],{cwd:e.request.cwd,env:{...process.env,...this.env??{}},execArgv:this.execArgv??Pt(this.workerPath),stdio:[`ignore`,`ignore`,`ignore`,`ipc`]}),r={job:e,child:n,killGraceMs:this.killGraceMs},i=St({runtime:r,payload:this.createStartPayload(e),resolveTranscriptPath:e=>this.resolveTranscriptPath(e)}),a=wt(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 H(r,e)},send:async e=>{await V(n,{type:`send`,prompt:e})},...s!==void 0&&{readLog:async t=>Ft(e.jobId,s,t)}}}createStartPayload(e){let t=At(e.request.type,this.deps.customAgentRegistry);return{jobId:e.jobId,request:e.request,agentDefinition:jt(t,e),parentConfig:this.deps.config,parentContext:this.deps.context,providerProfile:Mt(this.providerConfig,this.deps,e),permissionMode:this.deps.permissionMode,...this.logsDir?{logsDir:this.logsDir}:{}}}resolveTranscriptPath(e){if(this.logsDir)return u(this.logsDir,e.request.parentSessionId,`subagents`,`${e.jobId}.jsonl`)}};function At(e,t){let n=t?.(e)??re(e);if(!n)throw new x(`validation`,`Unknown agent type: ${e}`);return n}function jt(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 Mt(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 Nt(){let e=process.argv[1]??``,t=e?c(e):process.cwd(),r=e.endsWith(`.ts`)||e.endsWith(`.tsx`)?`.ts`:`.js`,i=[u(t,`subagents`,`child-process-subagent-worker${r}`),u(t,`child-process-subagent-worker${r}`)];for(let e of i)if(n(e))return e;return i[0]}function Pt(e){return!e.endsWith(`.ts`)||process.execArgv.some(e=>e.includes(`tsx`))?process.execArgv:[...process.execArgv,`--import`,`tsx`]}function Ft(e,t,r){return n(t)?Le(e,a(t,`utf8`).split(/\r?\n/).filter(Boolean),r):{taskId:e,cursor:r,lines:[]}}function It(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?Rt(n.prerelease,r.prerelease):i}function Lt(e,t){return It(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 Rt(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=zt(n,i);if(a!==0)return a}return 0}function zt(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 Bt(e=process.env.HOME??process.env.USERPROFILE??`/`){return u(e,`.robota`,`update-check.json`)}function Vt(e){if(n(e))try{return Xt(JSON.parse(a(e,`utf8`)))}catch{return}}function Ht(e,t){i(c(e),{recursive:!0}),s(e,JSON.stringify(t,null,2)+`
33
33
  `,`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??Bt(),r=e.now??new Date,i=e.ttlMs??864e5;if(e.force!==!0){let a=Vt(n);if(a!==void 0&&qt(a,r,i,t))return Kt(a,e.currentVersion)}try{let i=await Jt({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{Ht(e,t)}catch{}}async function Ut(e){let t=await K(e);return t.status===`update_available`?t.notice:void 0}function Wt(e){return e.printMode===!1&&e.disableUpdateCheck===!1}function J(e){return[`Robota update available: ${e.currentVersion} -> ${e.latestVersion}.`,`Run ${e.installCommand}`].join(` `)}function Gt(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 Kt(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 Lt(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 qt(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 Jt(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e.timeoutMs);try{let n=Yt(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 Yt(e,t){return`${e.replace(/\/+$/,``)}/${encodeURIComponent(t)}`}function Xt(e){if(!Zt(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 Zt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const X={...h};function Qt(e){let t=e.statusline;return en(t)?{enabled:typeof t.enabled==`boolean`?t.enabled:X.enabled,gitBranch:typeof t.gitBranch==`boolean`?t.gitBranch:X.gitBranch}:{...X}}function $t(e,t){let n=E(e),r={...Qt(n),...t};return n.statusline=r,D(e,n),r}function en(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function tn(e){try{let t=nn(e);if(!t)return;let n=a(u(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 nn(e){let t=d(e),n=c(t);for(;n!==t;){let e=Z(u(t,`.git`),t);if(e)return e;t=n,n=c(t)}return Z(u(t,`.git`),t)}function Z(e,t){if(!n(e))return;let i=r(e);if(i.isDirectory())return e;if(!i.isFile())return;let o=a(e,`utf8`).trim();if(!o.startsWith(`gitdir:`))return;let s=o.slice(7).trim();return l(s)?s:d(t,s)}const Q=`plugin`;function rn(){return process.env.HOME??S()}function $(e){let t=new m(u(rn(),`.robota`,`plugins`));try{let n=t.loadPluginsSync();return n.length===0?(e.replaceSource(Q),0):(e.replaceSource(Q,new v(n)),n.length)}catch{return e.replaceSource(Q),0}}function an(t){let n=S(),r=u(n,`.robota`,`plugins`),i=u(n,`.robota`,`settings.json`),a=(t,n)=>e(t,{timeout:n.timeout,stdio:n.stdio??`pipe`}),o=new y(i),s=new _({pluginsDir:r,exec:a});return{cwd:t,marketplace:s,installer:new p({pluginsDir:r,settingsStore:o,marketplaceClient:s,exec:a}),loader:new m(r),settingsStore:o}}async function on(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 sn(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 cn(t,n,r){let[i,a]=n.split(`@`);if(!i||!a)throw Error(`Plugin ID must be in format: name@marketplace`);if(r===`project`){await new p({pluginsDir:u(t.cwd,`.robota`,`plugins`),settingsStore:t.settingsStore,marketplaceClient:t.marketplace,exec:(t,n)=>e(t,{timeout:n.timeout,stdio:n.stdio??`pipe`})}).install(i,a);return}await t.installer.install(i,a)}async function ln(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 un(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function dn(e){let t=an(e);return{listInstalled:()=>on(t),listAvailablePlugins:e=>sn(t,e),install:(e,n)=>cn(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=>ln(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>un(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}async function fn(e,t){if(e.positional[0]!==`user-local`)return!1;let n=await Me({cwd:t,argv:e.positional.slice(1),format:e.format,summary:e.summary,source:e.source}),r=n.message.endsWith(`
34
- `)?n.message:`${n.message}\n`;return n.success||(process.stderr.write(r),process.exit(1)),process.stdout.write(r),!0}function pn(){try{let e=c(f(import.meta.url)),t=[u(e,`..`,`..`,`package.json`),u(e,`..`,`package.json`)];for(let e of t)try{let t=a(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 mn(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
+ `)?n.message:`${n.message}\n`;return n.success||(process.stderr.write(r),process.exit(1)),process.stdout.write(r),!0}function pn(){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 mn(){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 hn(){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 gn={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:mn},memory:void 0,mode:{onMissingArgs:`picker`,getItems:pn},model:void 0,permissions:void 0,plugin:void 0,provider:{onMissingArgs:`picker`,getItems:hn},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 _n(e){return gn[e]}function vn(){try{let e=c(f(import.meta.url)),t=[u(e,`..`,`..`,`package.json`),u(e,`..`,`package.json`)];for(let e of t)try{let t=a(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 yn(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.
35
35
  Set your API key via environment variable instead:
36
36
  ANTHROPIC_API_KEY=<key> robota
37
37
  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===`
38
38
  `){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
39
39
  `),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(`
40
- `),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)})}function hn(e,t){let n=a(d(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function gn(){let e=T();O(e)?process.stdout.write(`Deleted ${e}\n`):process.stdout.write(`No user settings found.
41
- `)}function _n({cwd:e,providerDefinitions:t}){return[ke({cwd:e}),_e(),fe(),xe({providerDefinitions:t,settings:{readMergedSettings:()=>j(e)}}),Se(),be(),ve(),pe(),ye(),je(),me(),he(),ge(),De(),Te(),Ee(),Ae(),Ce(),Oe(),we({providerDefinitions:t,settings:{readMergedSettings:()=>j(e),readTargetSettings:()=>E(P(e)),writeTargetSettings:t=>D(P(e),t)}})]}function vn(e,t,n,r){let i={settings:{read:()=>E(T()),write:e=>D(T(),e)},plugin:dn(e)},a=n.providerDefinitions??k;return{commandHostAdapters:i,providerDefinitions:a,commandModules:[..._n({cwd:e,providerDefinitions:a}),...n.commandModules??[]],startupUpdateNoticePromise:Wt(t)?Ut({currentVersion:r}):void 0}}function yn(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(hn(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(`
40
+ `),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)})}function bn(e,t){let n=a(d(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function xn(){let e=T();O(e)?process.stdout.write(`Deleted ${e}\n`):process.stdout.write(`No user settings found.
41
+ `)}function Sn({cwd:e,providerDefinitions:t}){return[ke({cwd:e}),_e(),fe(),xe({providerDefinitions:t,settings:{readMergedSettings:()=>j(e)}}),Se(),be(),ve(),pe(),ye(),je(),me(),he(),ge(),De(),Te(),Ee(),Ae(),Ce(),Oe(),we({providerDefinitions:t,settings:{readMergedSettings:()=>j(e),readTargetSettings:()=>E(P(e)),writeTargetSettings:t=>D(P(e),t)}})]}function Cn(e,t,n,r){let i={settings:{read:()=>E(T()),write:e=>D(T(),e)},plugin:dn(e)},a=n.providerDefinitions??k;return{commandHostAdapters:i,providerDefinitions:a,commandModules:[...Sn({cwd:e,providerDefinitions:a}),...n.commandModules??[]],startupUpdateNoticePromise:Wt(t)?Ut({currentVersion:r}):void 0}}function wn(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(bn(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(`
42
42
 
43
- `):void 0}async function bn(t,n,r,i,a,o,s,c){let l=n.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.
44
- `),process.exit(1));let u=yn(t,n);n.systemPrompt&&process.stderr.write(`Warning: --system-prompt is not yet functional and will be ignored.
45
- `);let d=new g({cwd:t,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:u,backgroundTaskRunners:a,subagentRunnerFactory:o,commandModules:s,commandHostAdapters:c,shellExec:t=>e(t,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),agentName:`robota-cli`}),f=Ye({outputFormat:n.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 xn(t={}){let n=nt(),r=pn();if(n.help){Qe();return}if(n.version){process.stdout.write(`robota ${r}\n`);return}if(n.checkUpdate){let e=await K({currentVersion:r,force:!0}),t=Gt(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}if(n.reset){gn();return}let i=process.cwd();if(await fn(n,i))return;let{commandHostAdapters:a,providerDefinitions:o,commandModules:s,startupUpdateNoticePromise:c}=vn(i,n,t,r);if(n.configure){await R(i,n,mn,o);return}if(ut(i,n,o))return;try{await dt(i,n,mn,o)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let l=n.provider?{providerOverride:n.provider,providerDefinitions:o}:{providerDefinitions:o},u=j(i);n.provider??u.currentProvider;let d=M(i,l),f=n.model??d.model,p=it(i,n.model,l),m=Re(),h=ae(i),g=Ot({providerConfig:{...d,model:f},logsDir:h.logs}),_=te(i),v,y=!1;if(n.continueMode?v=le(_,i):n.resumeId!==void 0&&(n.resumeId===``?y=!0:(v=ue(_,n.resumeId),v===void 0&&(process.stderr.write(`Session not found: ${n.resumeId}\n`),process.exit(1)))),n.printMode){await bn(i,n,p,_,m,g,s,a);return}await new Ze({cwd:i,provider:p,providerOverride:n.provider,providerType:d.name,modelId:f,language:n.language,permissionMode:n.permissionMode,maxTurns:n.maxTurns,version:r,sessionStore:n.noSessionPersistence?void 0:_,resumeSessionId:v,showSessionPickerOnStart:y,forkSession:n.forkSession,sessionName:n.sessionName,backgroundTaskRunners:m,subagentRunnerFactory:g,commandModules:s,commandHostAdapters:a,shellExec:t=>e(t,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:c?c.then(e=>e?J(e):void 0):void 0,transportRegistry:Cn(),cliAdapter:Sn(o),reloadPluginCommandSource:$,agentName:`robota-cli`}).start(),process.exit(0)}function Sn(e){return{getUserSettingsPath:()=>T(),readSettings:e=>E(e),writeSettings:(e,t)=>D(e,t),deleteSettings:e=>O(e),applyStatusLineSettings:(e,t)=>$t(e,t),reloadPluginCommandSource:e=>{$(e)},applyActiveModelChange:(e,t,n)=>(ot(e,t,n),{applied:!0}),getGitBranch:e=>tn(e),getProviderDisplayName:t=>ne(e,t)?.displayName??t}}function Cn(){let e=new _t(T());return e.register(new Xe),e}process.on(`uncaughtException`,e=>{let t=e.message??``;if(t.includes(`string-width`)||t.includes(`setCursorPosition`)||t.includes(`getStringWidth`)||t.includes(`slice`)||t.includes(`charCodeAt`)){process.stderr.write(`[robota] IME error suppressed: ${t}\n`);return}throw e}),xn().catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(t+`
43
+ `):void 0}async function Tn(t,n,r,i,a,o,s,c){let l=n.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.
44
+ `),process.exit(1));let u=wn(t,n);n.systemPrompt&&process.stderr.write(`Warning: --system-prompt is not yet functional and will be ignored.
45
+ `);let d=new g({cwd:t,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:u,backgroundTaskRunners:a,subagentRunnerFactory:o,commandModules:s,commandHostAdapters:c,shellExec:t=>e(t,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),agentName:`robota-cli`}),f=Ye({outputFormat:n.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 En(t={}){let n=nt(),r=vn();if(n.help){Qe();return}if(n.version){process.stdout.write(`robota ${r}\n`);return}if(n.checkUpdate){let e=await K({currentVersion:r,force:!0}),t=Gt(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}if(n.reset){xn();return}let i=process.cwd();if(await fn(n,i))return;let{commandHostAdapters:a,providerDefinitions:o,commandModules:s,startupUpdateNoticePromise:c}=Cn(i,n,t,r);if(n.configure){await R(i,n,yn,o);return}if(ut(i,n,o))return;try{await dt(i,n,yn,o)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let l=n.provider?{providerOverride:n.provider,providerDefinitions:o}:{providerDefinitions:o},u=j(i);n.provider??u.currentProvider;let d=M(i,l),f=n.model??d.model,p=it(i,n.model,l),m=Re(),h=ae(i),g=Ot({providerConfig:{...d,model:f},logsDir:h.logs}),_=te(i),v,y=!1;if(n.continueMode?v=le(_,i):n.resumeId!==void 0&&(n.resumeId===``?y=!0:(v=ue(_,n.resumeId),v===void 0&&(process.stderr.write(`Session not found: ${n.resumeId}\n`),process.exit(1)))),n.printMode){await Tn(i,n,p,_,m,g,s,a);return}await new Ze({cwd:i,provider:p,providerOverride:n.provider,providerType:d.name,modelId:f,language:n.language,permissionMode:n.permissionMode,maxTurns:n.maxTurns,version:r,sessionStore:n.noSessionPersistence?void 0:_,resumeSessionId:v,showSessionPickerOnStart:y,forkSession:n.forkSession,sessionName:n.sessionName,backgroundTaskRunners:m,subagentRunnerFactory:g,commandModules:s,commandHostAdapters:a,shellExec:t=>e(t,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:c?c.then(e=>e?J(e):void 0):void 0,transportRegistry:On(),cliAdapter:Dn(o),reloadPluginCommandSource:$,agentName:`robota-cli`,resolveInteraction:_n}).start(),process.exit(0)}function Dn(e){return{getUserSettingsPath:()=>T(),readSettings:e=>E(e),writeSettings:(e,t)=>D(e,t),deleteSettings:e=>O(e),applyStatusLineSettings:(e,t)=>$t(e,t),reloadPluginCommandSource:e=>{$(e)},applyActiveModelChange:(e,t,n)=>(ot(e,t,n),{applied:!0}),getGitBranch:e=>tn(e),getProviderDisplayName:t=>ne(e,t)?.displayName??t}}function On(){let e=new _t(T());return e.register(new Xe),e}process.on(`uncaughtException`,e=>{let t=e.message??``;if(t.includes(`string-width`)||t.includes(`setCursorPosition`)||t.includes(`getStringWidth`)||t.includes(`slice`)||t.includes(`charCodeAt`)){process.stderr.write(`[robota] IME error suppressed: ${t}\n`);return}throw e}),En().catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(t+`
46
46
  `),process.exit(1)});export{};
47
47
  //# sourceMappingURL=bin.js.map