@robota-sdk/agent-cli 3.0.0-beta.7 → 3.0.0-beta.70
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/README.md +414 -114
- package/bin/robota.cjs +47 -0
- package/dist/node/bin.d.ts +2 -1
- package/dist/node/bin.js +50 -10
- package/dist/node/bin.js.map +1 -0
- package/dist/node/child-process-subagent-ipc--Vp2dk1v.js +2 -0
- package/dist/node/child-process-subagent-ipc--Vp2dk1v.js.map +1 -0
- package/dist/node/child-process-subagent-ipc-Aitv2i6E.cjs +1 -0
- package/dist/node/child-process-subagent-ipc-CEy8bLN6.cjs +1 -0
- package/dist/node/child-process-subagent-ipc-DVpVp43R.js +2 -0
- package/dist/node/child-process-subagent-ipc-DVpVp43R.js.map +1 -0
- package/dist/node/cli.cjs +1 -0
- package/dist/node/cli.d.ts +7 -0
- package/dist/node/cli.d.ts.map +1 -0
- package/dist/node/cli.js +2 -0
- package/dist/node/cli.js.map +1 -0
- package/dist/node/constants.cjs +1 -0
- package/dist/node/constants.js +2 -0
- package/dist/node/constants.js.map +1 -0
- package/dist/node/index.cjs +42 -1257
- package/dist/node/index.d.ts +12 -47
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +43 -13
- package/dist/node/index.js.map +1 -0
- package/dist/node/init/init-command.cjs +32 -0
- package/dist/node/init/init-command.js +33 -0
- package/dist/node/init/init-command.js.map +1 -0
- package/dist/node/modes/print-mode.cjs +6 -0
- package/dist/node/modes/print-mode.js +7 -0
- package/dist/node/modes/print-mode.js.map +1 -0
- package/dist/node/modes/shell-exec.cjs +1 -0
- package/dist/node/modes/shell-exec.js +2 -0
- package/dist/node/modes/shell-exec.js.map +1 -0
- package/dist/node/modes/tui-mode.cjs +1 -0
- package/dist/node/modes/tui-mode.js +2 -0
- package/dist/node/modes/tui-mode.js.map +1 -0
- package/dist/node/provider-default-definitions-CKtxv2k0.js +2 -0
- package/dist/node/provider-default-definitions-CKtxv2k0.js.map +1 -0
- package/dist/node/provider-default-definitions-GFiYzACo.cjs +1 -0
- package/dist/node/provider-default-definitions-g0ZUDeii.cjs +1 -0
- package/dist/node/startup/append-system-prompt.cjs +3 -0
- package/dist/node/startup/append-system-prompt.js +4 -0
- package/dist/node/startup/append-system-prompt.js.map +1 -0
- package/dist/node/startup/args-to-options.cjs +1 -0
- package/dist/node/startup/args-to-options.js +2 -0
- package/dist/node/startup/args-to-options.js.map +1 -0
- package/dist/node/startup/command-setup.cjs +1 -0
- package/dist/node/startup/command-setup.d.ts +11 -0
- package/dist/node/startup/command-setup.d.ts.map +1 -0
- package/dist/node/startup/command-setup.js +2 -0
- package/dist/node/startup/command-setup.js.map +1 -0
- package/dist/node/startup/config-phase.cjs +1 -0
- package/dist/node/startup/config-phase.js +2 -0
- package/dist/node/startup/config-phase.js.map +1 -0
- package/dist/node/startup/preflight.cjs +1 -0
- package/dist/node/startup/preflight.js +2 -0
- package/dist/node/startup/preflight.js.map +1 -0
- package/dist/node/startup/provider-setup.cjs +1 -0
- package/dist/node/startup/provider-setup.js +2 -0
- package/dist/node/startup/provider-setup.js.map +1 -0
- package/dist/node/startup/provider-startup.cjs +2 -0
- package/dist/node/startup/provider-startup.js +3 -0
- package/dist/node/startup/provider-startup.js.map +1 -0
- package/dist/node/startup/reset-config.cjs +1 -0
- package/dist/node/startup/reset-config.js +2 -0
- package/dist/node/startup/reset-config.js.map +1 -0
- package/dist/node/startup/session-setup.cjs +1 -0
- package/dist/node/startup/session-setup.js +2 -0
- package/dist/node/startup/session-setup.js.map +1 -0
- package/dist/node/startup/subagent-setup.cjs +1 -0
- package/dist/node/startup/subagent-setup.js +2 -0
- package/dist/node/startup/subagent-setup.js.map +1 -0
- package/dist/node/startup/update-notice.cjs +1 -0
- package/dist/node/startup/update-notice.js +2 -0
- package/dist/node/startup/update-notice.js.map +1 -0
- package/dist/node/startup/version.cjs +1 -0
- package/dist/node/startup/version.js +2 -0
- package/dist/node/startup/version.js.map +1 -0
- package/dist/node/subagents/child-process-subagent-worker.cjs +1 -0
- package/dist/node/subagents/child-process-subagent-worker.d.ts +1 -0
- package/dist/node/subagents/child-process-subagent-worker.js +2 -0
- package/dist/node/subagents/child-process-subagent-worker.js.map +1 -0
- package/dist/node/user-local-direct-command.cjs +1 -0
- package/dist/node/user-local-direct-command.js +2 -0
- package/dist/node/user-local-direct-command.js.map +1 -0
- package/dist/node/utils/cli-args.cjs +35 -0
- package/dist/node/utils/cli-args.js +36 -0
- package/dist/node/utils/cli-args.js.map +1 -0
- package/package.json +52 -16
- package/dist/node/bin.cjs +0 -1240
- package/dist/node/bin.d.cts +0 -1
- package/dist/node/chunk-A2A66S6Q.js +0 -1219
- package/dist/node/index.d.cts +0 -49
package/dist/node/index.d.ts
CHANGED
|
@@ -1,49 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { IProviderDefinition } from "@robota-sdk/agent-core";
|
|
2
|
+
import { ICommandModule } from "@robota-sdk/agent-framework";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* Spinner handle returned by ITerminalOutput.spinner()
|
|
9
|
-
*/
|
|
10
|
-
interface ISpinner {
|
|
11
|
-
stop(): void;
|
|
12
|
-
update(message: string): void;
|
|
4
|
+
//#region src/startup/command-setup.d.ts
|
|
5
|
+
interface IStartCliOptions {
|
|
6
|
+
commandModules?: readonly ICommandModule[];
|
|
7
|
+
providerDefinitions?: readonly IProviderDefinition[];
|
|
13
8
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
writeMarkdown(md: string): void;
|
|
21
|
-
writeError(text: string): void;
|
|
22
|
-
prompt(question: string): Promise<string>;
|
|
23
|
-
/** Arrow-key selector. Returns the index of the chosen option. */
|
|
24
|
-
select(options: string[], initialIndex?: number): Promise<number>;
|
|
25
|
-
spinner(message: string): ISpinner;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* CLI entry point — parses arguments, loads config/context, and starts the
|
|
30
|
-
* Ink TUI or runs in print mode.
|
|
31
|
-
*
|
|
32
|
-
* CLI flags:
|
|
33
|
-
* robota Interactive TUI mode
|
|
34
|
-
* robota "prompt" TUI with initial prompt (future)
|
|
35
|
-
* robota -p "prompt" Print mode (one-shot, exit after response)
|
|
36
|
-
* robota -c Continue last session
|
|
37
|
-
* robota -r <id> Resume session by ID
|
|
38
|
-
* robota --model <model> Model override
|
|
39
|
-
* robota --permission-mode <m> plan|default|acceptEdits|bypassPermissions
|
|
40
|
-
* robota --max-turns <n> Limit agentic turns
|
|
41
|
-
* robota --version Print package version and exit
|
|
42
|
-
*/
|
|
43
|
-
/**
|
|
44
|
-
* Main CLI orchestration function.
|
|
45
|
-
* Called from bin.ts as the top-level entry.
|
|
46
|
-
*/
|
|
47
|
-
declare function startCli(): Promise<void>;
|
|
48
|
-
|
|
49
|
-
export { type ISpinner, type ITerminalOutput, startCli };
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/cli.d.ts
|
|
11
|
+
declare function startCli(options?: IStartCliOptions): Promise<void>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { startCli };
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/startup/command-setup.ts","../../src/cli.ts"],"mappings":";;;;UAuBiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA;;;iBCkB9B,QAAA,CAAS,OAAA,GAAS,gBAAA,GAAwB,OAAO"}
|
package/dist/node/index.js
CHANGED
|
@@ -1,13 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import{execSync as e}from"node:child_process";import{HeadlessInteractionChannel as t,PrintTerminal as n,promptInput as r}from"@robota-sdk/agent-transport/headless";import{applyProviderConfiguration as i,applyProviderSwitch as a,checkForCliUpdate as o,createProjectSessionStore as s,createProviderFromSettings as c,formatCliUpdateCheckMessage as l,formatCliUpdateNotice as u,getStartupCliUpdateNotice as d,getUserSettingsPath as f,projectPaths as p,readMergedProviderSettings as m,readPackageVersion as h,readProviderSettings as g,readSettings as _,resetUserConfig as v,resolveLatestSessionId as y,resolveProviderSettingsWriteTargetPath as b,resolveSessionIdByIdOrName as x,resolveSettingsPathForScope as S,shouldRunStartupCliUpdateCheck as C,writeSettings as w}from"@robota-sdk/agent-framework";import{parseArgs as T}from"node:util";import{formatSupportedProviderTypes as E}from"@robota-sdk/agent-core";import{createDefaultProviderDefinitions as D}from"@robota-sdk/agent-provider";import{createDefaultCommandModules as O,createDefaultPluginCommandAdapter as k,ensureProviderConfig as A,executeUserLocalDirectCommand as ee,reloadPluginCommandSource as j,runProviderStartupSetup as M}from"@robota-sdk/agent-command";import{createDefaultTuiCliAdapter as N,renderApp as P}from"@robota-sdk/agent-transport/tui";import{createDefaultTransportRegistry as F}from"@robota-sdk/agent-transport";import{createDefaultBackgroundTaskRunners as I}from"@robota-sdk/agent-executor";import{createChildProcessSubagentRunnerFactory as L,getDefaultSubagentWorkerPath as R}from"@robota-sdk/agent-subagent-runner";import{readFileSync as z}from"node:fs";import{resolve as B}from"node:path";const V=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],H=[`text`,`json`,`stream-json`];function U(){return`
|
|
2
|
+
Usage: robota [options] [-p <prompt>]
|
|
3
|
+
|
|
4
|
+
Options:
|
|
5
|
+
-p <prompt> Run in print (headless) mode with the given prompt
|
|
6
|
+
--output-format <format> Output format: text | json | stream-json (default: text)
|
|
7
|
+
--system-prompt <text> Override the system prompt for this session
|
|
8
|
+
--append-system-prompt <t> Append text to the system prompt
|
|
9
|
+
--language <lang> Language preference (e.g. ko, en)
|
|
10
|
+
--no-session-persistence Disable session persistence for this run
|
|
11
|
+
--permission-mode <mode> Permission mode: plan | default | acceptEdits | bypassPermissions
|
|
12
|
+
--max-turns <n> Maximum agent turns before stopping
|
|
13
|
+
-c, --continue Continue the most recent session
|
|
14
|
+
-r, --resume <id> Resume a session by ID or name
|
|
15
|
+
-n, --name <name> Name for the new session
|
|
16
|
+
--fork-session Fork the current session into a new independent session
|
|
17
|
+
--task-file <path> Read a task prompt from file and append it to the system prompt
|
|
18
|
+
--bare Print mode: output raw text only, no formatting wrapper
|
|
19
|
+
--configure Run interactive provider configuration
|
|
20
|
+
--configure-provider <n> Configure a specific provider
|
|
21
|
+
--dry-run Plan-only run: show what the agent would do without modifying files
|
|
22
|
+
--check-update Check for CLI updates
|
|
23
|
+
--version Show version number
|
|
24
|
+
-h, --help Show this help message
|
|
25
|
+
|
|
26
|
+
Commands:
|
|
27
|
+
robota init Initialize AGENTS.md and .robota/settings.json
|
|
28
|
+
|
|
29
|
+
Examples:
|
|
30
|
+
robota Start interactive TUI session
|
|
31
|
+
robota init Initialize project files
|
|
32
|
+
robota -p "Hello" Print mode: send prompt and exit
|
|
33
|
+
robota -p "Hello" --output-format json
|
|
34
|
+
robota -p "Review this diff" --bare Raw output for shell pipelines
|
|
35
|
+
robota --task-file task.md Run task from file (appended to system prompt)
|
|
36
|
+
robota --dry-run "Refactor the auth module" Show plan without modifying files
|
|
37
|
+
robota --continue Resume the last session
|
|
38
|
+
`}function W(e){if(e!==void 0){if(!H.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${H.join(` | `)}`);return e}}function G(e){if(e!==void 0){if(!V.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${V.join(` | `)}`);return e}}function K(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 te={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`},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`},"denied-tools":{type:`string`},model:{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},"dry-run":{type:`boolean`,default:!1},yes:{type:`boolean`,short:`y`,default:!1}}};function q(e,t){return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,language:e.language,permissionMode:G(e[`permission-mode`]),maxTurns:K(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:W(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`],deniedTools:e[`denied-tools`],model:e.model,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,dryRun:e[`dry-run`]??!1,yes:e.yes??!1}}function J(){let{values:e,positionals:t}=T(te);return q(e,t)}function Y(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function X(e,t,n,r=D()){let o=S(e,Y(t.settingsScope));return t.configureProvider?(i(o,ne(t),{providerDefinitions:r}),n.writeLine(`Provider profile saved to ${o}`),!t.printMode&&t.positional.length===0):t.provider&&t.setCurrent?(a(t.settingsScope===void 0?b(e):o,t.provider,{knownProviders:m(e).providers}),n.writeLine(`Current provider set to ${t.provider}`),!t.printMode&&t.positional.length===0):!1}async function Z(e,t,n,r,i=D(),a){await A(e,{provider:t.provider,settingsScope:Y(t.settingsScope)},n,r,i,{formatError:re,isInteractive:a===void 0?()=>process.stdin.isTTY===!0&&process.stdout.isTTY===!0:()=>a})}async function Q(e,t,n,r,i=D()){await M(e,{settingsScope:Y(t.settingsScope)},n,r,i)}function ne(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 re(e=D()){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${E(e)}`,...e.map(ie)].join(`
|
|
39
|
+
`)}function ie(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 ae(e,t,n){if(e.positional[0]!==`user-local`)return!1;let r=await ee({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}const oe=()=>h(import.meta.url);function $(e){let t=v();t.deleted?e.writeLine(`Deleted ${t.path}`):e.writeLine(`No user settings found.`)}function se(e,t,n,r){let i={settings:{read:()=>_(f()),write:e=>w(f(),e)},plugin:k(e)},a=n.providerDefinitions??D();return{commandHostAdapters:i,providerDefinitions:a,commandModules:[...O({cwd:e,providerDefinitions:a,providerSettingsAdapter:{readMergedSettings:()=>m(e),readTargetSettings:()=>_(b(e)),writeTargetSettings:t=>w(b(e),t)}}),...n.commandModules??[]],startupUpdateNoticePromise:C(t)?d({currentVersion:r}):void 0}}function ce(e,t){let n=z(B(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function le(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(ce(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
|
+
|
|
41
|
+
`):void 0}async function ue(e,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.
|
|
42
|
+
`),process.exit(1));let u=le(e,n),d=new t({cwd:e,provider:r,outputFormat:n.outputFormat??`text`,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,...n.systemPrompt?{systemPrompt:n.systemPrompt}:{},backgroundTaskRunners:a,subagentRunnerFactory:o,commandModules:s,commandHostAdapters:c});await d.run(l),process.exit(d.getExitCode())}async function de(t={}){let i;try{i=J()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let a=oe();if(i.help){process.stdout.write(U());return}if(i.version){process.stdout.write(`robota ${a}\n`);return}if(i.checkUpdate){let e=await o({currentVersion:a,force:!0}),t=l(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}let d=process.cwd(),f=new n;if(i.reset){$(f);return}try{if(await ae(i,d,f))return}catch(e){f.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let{commandHostAdapters:m,providerDefinitions:h,commandModules:_,startupUpdateNoticePromise:v}=se(d,i,t,a);if(i.configure){await Q(d,i,r,f,h);return}if(X(d,i,f,h))return;try{await Z(d,i,r,f,h)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let b=i.provider?{providerOverride:i.provider,providerDefinitions:h}:{providerDefinitions:h},S=g(d,b),C=i.model??S.model,w=c(d,i.model,b),T=I(),E=p(d),D=L({workerPath:R(),providerConfig:{...S,model:C},logsDir:E.logs}),O=s(d),k,A=!1;if(i.continueMode?k=y(O,d):i.resumeId!==void 0&&(i.resumeId===``?A=!0:(k=x(O,i.resumeId),k===void 0&&(process.stderr.write(`Session not found: ${i.resumeId}\n`),process.exit(1)))),i.printMode){await ue(d,i,w,O,T,D,_,m);return}await P({cwd:d,provider:w,providerOverride:i.provider,providerType:S.name,modelId:C,language:i.language,permissionMode:i.permissionMode,maxTurns:i.maxTurns,version:a,sessionStore:i.noSessionPersistence?void 0:O,resumeSessionId:k,showSessionPickerOnStart:A,forkSession:i.forkSession,sessionName:i.sessionName,backgroundTaskRunners:T,subagentRunnerFactory:D,commandModules:_,commandHostAdapters:m,shellExec:t=>e(t,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:v?v.then(e=>e?u(e):void 0):void 0,transportRegistry:F(),cliAdapter:N({providerDefinitions:h,reloadPluginCommandSource:j}),reloadPluginCommandSource:j,agentName:`robota-cli`}),process.exit(0)}export{de as startCli};
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/utils/cli-args.ts","../../src/startup/provider-startup.ts","../../src/user-local-direct-command.ts","../../src/startup/version.ts","../../src/startup/reset-config.ts","../../src/startup/command-setup.ts","../../src/startup/append-system-prompt.ts","../../src/modes/print-mode.ts","../../src/cli.ts"],"sourcesContent":["/**\n * CLI argument parsing and validation.\n * Pure functions — throw on invalid input, no process.* side effects.\n */\n\nimport { parseArgs } from 'node:util';\n\nimport type { TPermissionMode } from '@robota-sdk/agent-core';\n\nconst VALID_MODES: TPermissionMode[] = ['plan', 'default', 'acceptEdits', 'bypassPermissions'];\n\nconst VALID_OUTPUT_FORMATS = ['text', 'json', 'stream-json'] as const;\nexport type TOutputFormat = (typeof VALID_OUTPUT_FORMATS)[number];\n\nexport interface IParsedCliArgs {\n positional: string[];\n help: boolean;\n printMode: boolean;\n continueMode: boolean;\n resumeId: string | undefined;\n language: string | undefined;\n permissionMode: TPermissionMode | undefined;\n maxTurns: number | undefined;\n forkSession: boolean;\n sessionName: string | undefined;\n outputFormat: TOutputFormat | undefined;\n format: string | undefined;\n summary: string | undefined;\n source: string | undefined;\n systemPrompt: string | undefined;\n appendSystemPrompt: string | undefined;\n taskFile: string | undefined;\n version: boolean;\n reset: boolean;\n bare: boolean;\n allowedTools: string | undefined;\n deniedTools: string | undefined;\n model: string | undefined;\n noSessionPersistence: boolean;\n jsonSchema: string | undefined;\n configure: boolean;\n configureProvider: string | undefined;\n provider: string | undefined;\n providerType: string | undefined;\n baseURL: string | undefined;\n apiKey: string | undefined;\n apiKeyEnv: string | undefined;\n setCurrent: boolean;\n settingsScope: string | undefined;\n checkUpdate: boolean;\n disableUpdateCheck: boolean;\n dryRun: boolean;\n yes: boolean;\n}\n\n/** Return CLI usage help text. */\nexport function printHelp(): string {\n return `\nUsage: robota [options] [-p <prompt>]\n\nOptions:\n -p <prompt> Run in print (headless) mode with the given prompt\n --output-format <format> Output format: text | json | stream-json (default: text)\n --system-prompt <text> Override the system prompt for this session\n --append-system-prompt <t> Append text to the system prompt\n --language <lang> Language preference (e.g. ko, en)\n --no-session-persistence Disable session persistence for this run\n --permission-mode <mode> Permission mode: plan | default | acceptEdits | bypassPermissions\n --max-turns <n> Maximum agent turns before stopping\n -c, --continue Continue the most recent session\n -r, --resume <id> Resume a session by ID or name\n -n, --name <name> Name for the new session\n --fork-session Fork the current session into a new independent session\n --task-file <path> Read a task prompt from file and append it to the system prompt\n --bare Print mode: output raw text only, no formatting wrapper\n --configure Run interactive provider configuration\n --configure-provider <n> Configure a specific provider\n --dry-run Plan-only run: show what the agent would do without modifying files\n --check-update Check for CLI updates\n --version Show version number\n -h, --help Show this help message\n\nCommands:\n robota init Initialize AGENTS.md and .robota/settings.json\n\nExamples:\n robota Start interactive TUI session\n robota init Initialize project files\n robota -p \"Hello\" Print mode: send prompt and exit\n robota -p \"Hello\" --output-format json\n robota -p \"Review this diff\" --bare Raw output for shell pipelines\n robota --task-file task.md Run task from file (appended to system prompt)\n robota --dry-run \"Refactor the auth module\" Show plan without modifying files\n robota --continue Resume the last session\n`;\n}\n\n/** Validate and return a TOutputFormat from a raw CLI string, or throw on error. */\nexport function parseOutputFormat(raw: string | undefined): TOutputFormat | undefined {\n if (raw === undefined) return undefined;\n if (!(VALID_OUTPUT_FORMATS as readonly string[]).includes(raw)) {\n throw new Error(`Invalid --output-format \"${raw}\". Valid: ${VALID_OUTPUT_FORMATS.join(' | ')}`);\n }\n return raw as TOutputFormat;\n}\n\n/** Validate and return a TPermissionMode from a raw CLI string, or throw on error. */\nexport function parsePermissionMode(raw: string | undefined): TPermissionMode | undefined {\n if (raw === undefined) return undefined;\n if (!VALID_MODES.includes(raw as TPermissionMode)) {\n throw new Error(`Invalid --permission-mode \"${raw}\". Valid: ${VALID_MODES.join(' | ')}`);\n }\n return raw as TPermissionMode;\n}\n\n/** Validate and return a positive integer from a raw CLI string, or throw on error. */\nexport function parseMaxTurns(raw: string | undefined): number | undefined {\n if (raw === undefined) return undefined;\n const n = parseInt(raw, 10);\n if (isNaN(n) || n <= 0) {\n throw new Error(`Invalid --max-turns \"${raw}\". Must be a positive integer.`);\n }\n return n;\n}\n\nconst PARSE_ARGS_CONFIG = {\n allowPositionals: true,\n options: {\n help: { type: 'boolean', short: 'h', default: false },\n p: { type: 'boolean', short: 'p', default: false },\n continue: { type: 'boolean', short: 'c', default: false },\n resume: { type: 'string', short: 'r' },\n language: { type: 'string' },\n 'permission-mode': { type: 'string' },\n 'max-turns': { type: 'string' },\n 'fork-session': { type: 'boolean', default: false },\n name: { type: 'string', short: 'n' },\n 'output-format': { type: 'string' },\n format: { type: 'string' },\n summary: { type: 'string' },\n source: { type: 'string' },\n 'system-prompt': { type: 'string' },\n 'append-system-prompt': { type: 'string' },\n 'task-file': { type: 'string' },\n version: { type: 'boolean', default: false },\n reset: { type: 'boolean', default: false },\n bare: { type: 'boolean', default: false },\n 'allowed-tools': { type: 'string' },\n 'denied-tools': { type: 'string' },\n model: { type: 'string' },\n 'no-session-persistence': { type: 'boolean', default: false },\n 'json-schema': { type: 'string' },\n configure: { type: 'boolean', default: false },\n 'configure-provider': { type: 'string' },\n provider: { type: 'string' },\n type: { type: 'string' },\n 'base-url': { type: 'string' },\n 'api-key': { type: 'string' },\n 'api-key-env': { type: 'string' },\n 'set-current': { type: 'boolean', default: false },\n 'settings-scope': { type: 'string' },\n 'check-update': { type: 'boolean', default: false },\n 'disable-update-check': { type: 'boolean', default: false },\n 'dry-run': { type: 'boolean', default: false },\n yes: { type: 'boolean', short: 'y', default: false },\n },\n} as const;\n\nfunction mapParsedValues(\n values: ReturnType<typeof parseArgs<typeof PARSE_ARGS_CONFIG>>['values'],\n positionals: string[],\n): IParsedCliArgs {\n return {\n positional: positionals,\n help: values['help'] ?? false,\n printMode: values['p'] ?? false,\n continueMode: values['continue'] ?? false,\n resumeId: values['resume'],\n language: values['language'],\n permissionMode: parsePermissionMode(values['permission-mode']),\n maxTurns: parseMaxTurns(values['max-turns']),\n forkSession: values['fork-session'] ?? false,\n sessionName: values['name'],\n outputFormat: parseOutputFormat(values['output-format']),\n format: values['format'],\n summary: values['summary'],\n source: values['source'],\n systemPrompt: values['system-prompt'],\n appendSystemPrompt: values['append-system-prompt'],\n taskFile: values['task-file'],\n version: values['version'] ?? false,\n reset: values['reset'] ?? false,\n bare: values['bare'] ?? false,\n allowedTools: values['allowed-tools'],\n deniedTools: values['denied-tools'],\n model: values['model'],\n noSessionPersistence: values['no-session-persistence'] ?? false,\n jsonSchema: values['json-schema'],\n configure: values['configure'] ?? false,\n configureProvider: values['configure-provider'],\n provider: values['provider'],\n providerType: values['type'],\n baseURL: values['base-url'],\n apiKey: values['api-key'],\n apiKeyEnv: values['api-key-env'],\n setCurrent: values['set-current'] ?? false,\n settingsScope: values['settings-scope'],\n checkUpdate: values['check-update'] ?? false,\n disableUpdateCheck: values['disable-update-check'] ?? false,\n dryRun: values['dry-run'] ?? false,\n yes: values['yes'] ?? false,\n };\n}\n\n/** Parse and validate CLI arguments. */\nexport function parseCliArgs(): IParsedCliArgs {\n const { values, positionals } = parseArgs(PARSE_ARGS_CONFIG);\n return mapParsedValues(values, positionals);\n}\n","import { formatSupportedProviderTypes, type IProviderDefinition } from '@robota-sdk/agent-core';\nimport type { IParsedCliArgs } from '../utils/cli-args.js';\nimport {\n applyProviderConfiguration,\n applyProviderSwitch,\n readMergedProviderSettings,\n resolveProviderSettingsWriteTargetPath,\n resolveSettingsPathForScope,\n} from '@robota-sdk/agent-framework';\nimport type { TSettingsScope } from '@robota-sdk/agent-framework';\nimport { createDefaultProviderDefinitions } from '@robota-sdk/agent-provider';\nimport { type IProviderSetupInput } from '@robota-sdk/agent-framework';\nimport {\n ensureProviderConfig,\n runProviderStartupSetup,\n type TPromptInput,\n} from '@robota-sdk/agent-command';\nimport type { ITerminalOutput } from '@robota-sdk/agent-core';\n\nfunction validateSettingsScope(scope: string | undefined): TSettingsScope | undefined {\n if (scope === undefined || scope === 'user' || scope === 'project-local') {\n return scope as TSettingsScope | undefined;\n }\n throw new Error(`Invalid --settings-scope \"${scope}\". Valid: user | project-local`);\n}\n\nexport function handleProviderConfigurationArgs(\n cwd: string,\n args: IParsedCliArgs,\n terminal: ITerminalOutput,\n providerDefinitions: readonly IProviderDefinition[] = createDefaultProviderDefinitions(),\n): boolean {\n const settingsPath = resolveSettingsPathForScope(cwd, validateSettingsScope(args.settingsScope));\n if (args.configureProvider) {\n applyProviderConfiguration(settingsPath, buildSetupInputFromArgs(args), {\n providerDefinitions,\n });\n terminal.writeLine(`Provider profile saved to ${settingsPath}`);\n return !args.printMode && args.positional.length === 0;\n }\n if (args.provider && args.setCurrent) {\n const switchSettingsPath =\n args.settingsScope === undefined ? resolveProviderSettingsWriteTargetPath(cwd) : settingsPath;\n applyProviderSwitch(switchSettingsPath, args.provider, {\n knownProviders: readMergedProviderSettings(cwd).providers,\n });\n terminal.writeLine(`Current provider set to ${args.provider}`);\n return !args.printMode && args.positional.length === 0;\n }\n return false;\n}\n\nexport async function ensureConfig(\n cwd: string,\n args: IParsedCliArgs,\n promptInput: TPromptInput,\n terminal: ITerminalOutput,\n providerDefinitions: readonly IProviderDefinition[] = createDefaultProviderDefinitions(),\n isInteractive?: boolean,\n): Promise<void> {\n await ensureProviderConfig(\n cwd,\n { provider: args.provider, settingsScope: validateSettingsScope(args.settingsScope) },\n promptInput,\n terminal,\n providerDefinitions,\n {\n formatError: formatMissingProviderConfigMessage,\n isInteractive:\n isInteractive !== undefined\n ? () => isInteractive\n : () => process.stdin.isTTY === true && process.stdout.isTTY === true,\n },\n );\n}\n\nexport async function runInteractiveProviderSetup(\n cwd: string,\n args: IParsedCliArgs,\n promptInput: TPromptInput,\n terminal: ITerminalOutput,\n providerDefinitions: readonly IProviderDefinition[] = createDefaultProviderDefinitions(),\n): Promise<void> {\n await runProviderStartupSetup(\n cwd,\n { settingsScope: validateSettingsScope(args.settingsScope) },\n promptInput,\n terminal,\n providerDefinitions,\n );\n}\n\nfunction buildSetupInputFromArgs(args: IParsedCliArgs): IProviderSetupInput {\n const type = args.providerType ?? args.configureProvider;\n if (!args.configureProvider || !type) {\n throw new Error('--configure-provider requires a provider profile and --type');\n }\n return {\n profile: args.configureProvider,\n type,\n ...(args.model !== undefined && { model: args.model }),\n ...(args.apiKey !== undefined && { apiKey: args.apiKey }),\n ...(args.apiKeyEnv !== undefined && { apiKeyEnv: args.apiKeyEnv }),\n ...(args.baseURL !== undefined && { baseURL: args.baseURL }),\n setCurrent: args.setCurrent,\n };\n}\n\nexport function formatMissingProviderConfigMessage(\n providerDefinitions: readonly IProviderDefinition[] = createDefaultProviderDefinitions(),\n): string {\n return [\n 'No provider configuration found.',\n 'Run `robota --configure` in an interactive terminal, or configure a provider:',\n `Supported providers: ${formatSupportedProviderTypes(providerDefinitions)}`,\n ...providerDefinitions.map(formatConfigureProviderExample),\n ].join('\\n');\n}\n\nfunction formatConfigureProviderExample(definition: IProviderDefinition): string {\n const flags = [\n `robota --configure-provider ${definition.type}`,\n `--type ${definition.type}`,\n ...(definition.defaults?.baseURL !== undefined ? ['--base-url <url>'] : []),\n '--model <model>',\n ...(definition.requiresApiKey === true ? ['--api-key-env <ENV_NAME>'] : []),\n '--set-current',\n ];\n return ` ${flags.join(' ')}`;\n}\n","import { executeUserLocalDirectCommand } from '@robota-sdk/agent-command';\nimport type { ITerminalOutput } from '@robota-sdk/agent-core';\nimport type { IParsedCliArgs } from './utils/cli-args.js';\n\nexport async function runUserLocalDirectCommandIfRequested(\n args: IParsedCliArgs,\n cwd: string,\n terminal: ITerminalOutput,\n): Promise<boolean> {\n if (args.positional[0] !== 'user-local') {\n return false;\n }\n\n const result = await executeUserLocalDirectCommand({\n cwd,\n argv: args.positional.slice(1),\n format: args.format,\n summary: args.summary,\n source: args.source,\n });\n const output = result.message.trimEnd();\n if (!result.success) {\n throw new Error(output);\n }\n terminal.writeLine(output);\n return true;\n}\n","import { readPackageVersion } from '@robota-sdk/agent-framework';\n\nexport const readVersion = (): string => readPackageVersion(import.meta.url);\n","import { resetUserConfig } from '@robota-sdk/agent-framework';\nimport type { ITerminalOutput } from '@robota-sdk/agent-core';\n\nexport function runResetConfig(terminal: ITerminalOutput): void {\n const result = resetUserConfig();\n if (result.deleted) {\n terminal.writeLine(`Deleted ${result.path}`);\n } else {\n terminal.writeLine('No user settings found.');\n }\n}\n","import type { IProviderDefinition } from '@robota-sdk/agent-core';\nimport {\n getStartupCliUpdateNotice,\n getUserSettingsPath,\n readMergedProviderSettings,\n readSettings,\n resolveProviderSettingsWriteTargetPath,\n shouldRunStartupCliUpdateCheck,\n writeSettings,\n} from '@robota-sdk/agent-framework';\nimport type {\n ICliUpdateNotice,\n ICommandHostAdapters,\n ICommandModule,\n TProviderSettingsDocument,\n} from '@robota-sdk/agent-framework';\nimport {\n createDefaultCommandModules,\n createDefaultPluginCommandAdapter,\n} from '@robota-sdk/agent-command';\nimport { createDefaultProviderDefinitions } from '@robota-sdk/agent-provider';\nimport type { IParsedCliArgs } from '../utils/cli-args.js';\n\nexport interface IStartCliOptions {\n commandModules?: readonly ICommandModule[];\n providerDefinitions?: readonly IProviderDefinition[];\n}\n\nexport interface ICliSetup {\n commandHostAdapters: ICommandHostAdapters;\n providerDefinitions: readonly IProviderDefinition[];\n commandModules: readonly ICommandModule[];\n startupUpdateNoticePromise: Promise<ICliUpdateNotice | undefined> | undefined;\n}\n\nexport function buildCommandSetup(\n cwd: string,\n args: IParsedCliArgs,\n options: IStartCliOptions,\n version: string,\n): ICliSetup {\n const commandHostAdapters: ICommandHostAdapters = {\n settings: {\n read: () => readSettings(getUserSettingsPath()),\n write: (settings) => writeSettings(getUserSettingsPath(), settings),\n },\n plugin: createDefaultPluginCommandAdapter(cwd),\n };\n const providerDefinitions = options.providerDefinitions ?? createDefaultProviderDefinitions();\n const providerSettingsAdapter = {\n readMergedSettings: () => readMergedProviderSettings(cwd),\n readTargetSettings: () =>\n readSettings(resolveProviderSettingsWriteTargetPath(cwd)) as TProviderSettingsDocument,\n writeTargetSettings: (settings: TProviderSettingsDocument) =>\n writeSettings(resolveProviderSettingsWriteTargetPath(cwd), settings),\n };\n const commandModules: readonly ICommandModule[] = [\n ...createDefaultCommandModules({ cwd, providerDefinitions, providerSettingsAdapter }),\n ...(options.commandModules ?? []),\n ];\n const startupUpdateNoticePromise = shouldRunStartupCliUpdateCheck(args)\n ? getStartupCliUpdateNotice({ currentVersion: version })\n : undefined;\n return { commandHostAdapters, providerDefinitions, commandModules, startupUpdateNoticePromise };\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport type { IParsedCliArgs } from '../utils/cli-args.js';\n\nfunction readTaskFilePrompt(cwd: string, taskFile: string): string {\n const taskPath = resolve(cwd, taskFile);\n const content = readFileSync(taskPath, 'utf8').trim();\n if (content.length === 0) {\n throw new Error(`Task file is empty: ${taskFile}`);\n }\n return `Task file (${taskFile}):\\n${content}`;\n}\n\nexport function buildAppendSystemPrompt(cwd: string, args: IParsedCliArgs): string | undefined {\n const appendParts: string[] = [];\n if (args.appendSystemPrompt) appendParts.push(args.appendSystemPrompt);\n if (args.taskFile) {\n try {\n appendParts.push(readTaskFilePrompt(cwd, args.taskFile));\n } catch (error) {\n // allow-fallback: terminal failure — task file read failure exits process\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exit(1);\n }\n }\n if (args.jsonSchema)\n appendParts.push(\n `Respond with valid JSON only, matching this JSON schema:\\n${args.jsonSchema}`,\n );\n return appendParts.length > 0 ? appendParts.join('\\n\\n') : undefined;\n}\n","import type { IAIProvider } from '@robota-sdk/agent-core';\nimport type { ICommandHostAdapters, ICommandModule } from '@robota-sdk/agent-framework';\nimport type { createProjectSessionStore } from '@robota-sdk/agent-framework';\nimport { HeadlessInteractionChannel } from '@robota-sdk/agent-transport/headless';\nimport type { IBackgroundTaskRunner } from '@robota-sdk/agent-executor';\nimport type { createChildProcessSubagentRunnerFactory } from '@robota-sdk/agent-subagent-runner';\nimport type { IParsedCliArgs } from '../utils/cli-args.js';\nimport { buildAppendSystemPrompt } from '../startup/append-system-prompt.js';\n\nexport async function runPrintMode(\n cwd: string,\n args: IParsedCliArgs,\n provider: IAIProvider,\n sessionStore: ReturnType<typeof createProjectSessionStore>,\n backgroundTaskRunners: IBackgroundTaskRunner[],\n subagentRunnerFactory: ReturnType<typeof createChildProcessSubagentRunnerFactory>,\n commandModules: readonly ICommandModule[],\n commandHostAdapters: ICommandHostAdapters,\n): Promise<void> {\n let prompt = args.positional.join(' ').trim();\n\n if (!prompt && !process.stdin.isTTY) {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk as Buffer);\n }\n prompt = Buffer.concat(chunks).toString('utf-8').trim();\n }\n\n if (!prompt) {\n process.stderr.write('Print mode (-p) requires a prompt argument.\\n');\n process.exit(1);\n }\n\n const appendSystemPrompt = buildAppendSystemPrompt(cwd, args);\n\n const channel = new HeadlessInteractionChannel({\n cwd,\n provider,\n outputFormat: args.outputFormat ?? 'text',\n permissionMode: args.permissionMode ?? 'bypassPermissions',\n maxTurns: args.maxTurns,\n sessionStore: args.noSessionPersistence ? undefined : sessionStore,\n sessionName: args.sessionName,\n bare: args.bare || undefined,\n allowedTools: args.allowedTools\n ? args.allowedTools\n .split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n : undefined,\n appendSystemPrompt,\n ...(args.systemPrompt ? { systemPrompt: args.systemPrompt } : {}),\n backgroundTaskRunners,\n subagentRunnerFactory,\n commandModules,\n commandHostAdapters,\n });\n\n await channel.run(prompt);\n process.exit(channel.getExitCode());\n}\n","/**\n * CLI entry point — pure composition root.\n * Parses arguments and delegates to startup modules, mode runners, and transports.\n */\n\nimport { execSync } from 'node:child_process';\nimport { PrintTerminal, promptInput } from '@robota-sdk/agent-transport/headless';\nimport {\n createProjectSessionStore,\n projectPaths,\n resolveLatestSessionId,\n resolveSessionIdByIdOrName,\n readMergedProviderSettings,\n readProviderSettings,\n createProviderFromSettings,\n checkForCliUpdate,\n formatCliUpdateCheckMessage,\n formatCliUpdateNotice,\n} from '@robota-sdk/agent-framework';\nimport { parseCliArgs, printHelp } from './utils/cli-args.js';\nimport type { IParsedCliArgs } from './utils/cli-args.js';\nimport {\n ensureConfig,\n handleProviderConfigurationArgs,\n runInteractiveProviderSetup,\n} from './startup/provider-startup.js';\nimport { renderApp, createDefaultTuiCliAdapter } from '@robota-sdk/agent-transport/tui';\nimport { createDefaultTransportRegistry } from '@robota-sdk/agent-transport';\nimport { createDefaultBackgroundTaskRunners } from '@robota-sdk/agent-executor';\nimport {\n createChildProcessSubagentRunnerFactory,\n getDefaultSubagentWorkerPath,\n} from '@robota-sdk/agent-subagent-runner';\nimport { reloadPluginCommandSource } from '@robota-sdk/agent-command';\nimport { runUserLocalDirectCommandIfRequested } from './user-local-direct-command.js';\nimport { readVersion } from './startup/version.js';\nimport { runResetConfig } from './startup/reset-config.js';\nimport type { IStartCliOptions } from './startup/command-setup.js';\nimport { buildCommandSetup } from './startup/command-setup.js';\nimport { runPrintMode } from './modes/print-mode.js';\n\nexport type { IStartCliOptions };\n\nexport async function startCli(options: IStartCliOptions = {}): Promise<void> {\n let args: IParsedCliArgs;\n try {\n args = parseCliArgs();\n } catch (error) {\n // allow-fallback: argument validation errors are terminal — exit is the correct response\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exit(1);\n }\n const version = readVersion();\n\n if (args.help) {\n process.stdout.write(printHelp());\n return;\n }\n\n if (args.version) {\n process.stdout.write(`robota ${version}\\n`);\n return;\n }\n\n if (args.checkUpdate) {\n const result = await checkForCliUpdate({ currentVersion: version, force: true });\n const message = formatCliUpdateCheckMessage(result);\n if (result.status === 'error') {\n process.stderr.write(`${message}\\n`);\n process.exit(1);\n }\n process.stdout.write(`${message}\\n`);\n return;\n }\n\n const cwd = process.cwd();\n const terminal = new PrintTerminal();\n\n if (args.reset) {\n runResetConfig(terminal);\n return;\n }\n\n try {\n if (await runUserLocalDirectCommandIfRequested(args, cwd, terminal)) {\n return;\n }\n } catch (error) {\n // allow-fallback: user-local command failure is terminal — exit is the correct response\n terminal.writeError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n const { commandHostAdapters, providerDefinitions, commandModules, startupUpdateNoticePromise } =\n buildCommandSetup(cwd, args, options, version);\n\n if (args.configure) {\n await runInteractiveProviderSetup(cwd, args, promptInput, terminal, providerDefinitions);\n return;\n }\n\n if (handleProviderConfigurationArgs(cwd, args, terminal, providerDefinitions)) {\n return;\n }\n\n try {\n await ensureConfig(cwd, args, promptInput, terminal, providerDefinitions);\n } catch (error) {\n // allow-fallback: terminal failure — not a silent fallback\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exit(1);\n }\n\n const providerOptions = args.provider\n ? { providerOverride: args.provider, providerDefinitions }\n : { providerDefinitions };\n const providerSettings = readProviderSettings(cwd, providerOptions);\n const modelId = args.model ?? providerSettings.model;\n const provider = createProviderFromSettings(cwd, args.model, providerOptions);\n const backgroundTaskRunners = createDefaultBackgroundTaskRunners();\n const paths = projectPaths(cwd);\n const subagentRunnerFactory = createChildProcessSubagentRunnerFactory({\n workerPath: getDefaultSubagentWorkerPath(),\n providerConfig: { ...providerSettings, model: modelId },\n logsDir: paths.logs,\n });\n\n const sessionStore = createProjectSessionStore(cwd);\n let resumeSessionId: string | undefined;\n let showSessionPickerOnStart = false;\n\n if (args.continueMode) {\n resumeSessionId = resolveLatestSessionId(sessionStore, cwd);\n } else if (args.resumeId !== undefined) {\n if (args.resumeId === '') {\n showSessionPickerOnStart = true;\n } else {\n resumeSessionId = resolveSessionIdByIdOrName(sessionStore, args.resumeId);\n if (resumeSessionId === undefined) {\n process.stderr.write(`Session not found: ${args.resumeId}\\n`);\n process.exit(1);\n }\n }\n }\n\n if (args.printMode) {\n await runPrintMode(\n cwd,\n args,\n provider,\n sessionStore,\n backgroundTaskRunners,\n subagentRunnerFactory,\n commandModules,\n commandHostAdapters,\n );\n return;\n }\n\n await renderApp({\n cwd,\n provider,\n providerOverride: args.provider,\n providerType: providerSettings.name,\n modelId,\n language: args.language,\n permissionMode: args.permissionMode,\n maxTurns: args.maxTurns,\n version,\n sessionStore: args.noSessionPersistence ? undefined : sessionStore,\n resumeSessionId,\n showSessionPickerOnStart,\n forkSession: args.forkSession,\n sessionName: args.sessionName,\n backgroundTaskRunners,\n subagentRunnerFactory,\n commandModules,\n commandHostAdapters,\n shellExec: (command: string) =>\n execSync(command, { timeout: 5000, encoding: 'utf-8', stdio: 'pipe' }).trimEnd(),\n startupUpdateNotice: startupUpdateNoticePromise\n ? startupUpdateNoticePromise.then((n) => (n ? formatCliUpdateNotice(n) : undefined))\n : undefined,\n transportRegistry: createDefaultTransportRegistry(),\n cliAdapter: createDefaultTuiCliAdapter({ providerDefinitions, reloadPluginCommandSource }),\n reloadPluginCommandSource,\n agentName: 'robota-cli',\n });\n process.exit(0);\n}\n"],"mappings":"goDASA,MAAM,EAAiC,CAAC,OAAQ,UAAW,cAAe,mBAAmB,EAEvF,EAAuB,CAAC,OAAQ,OAAQ,aAAa,EA6C3D,SAAgB,GAAoB,CAClC,MAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCT,CAGA,SAAgB,EAAkB,EAAoD,CAChF,OAAQ,IAAA,GACZ,IAAI,CAAE,EAA2C,SAAS,CAAG,EAC3D,MAAU,MAAM,4BAA4B,EAAI,YAAY,EAAqB,KAAK,KAAK,GAAG,EAEhG,OAAO,CAFyF,CAGlG,CAGA,SAAgB,EAAoB,EAAsD,CACpF,OAAQ,IAAA,GACZ,IAAI,CAAC,EAAY,SAAS,CAAsB,EAC9C,MAAU,MAAM,8BAA8B,EAAI,YAAY,EAAY,KAAK,KAAK,GAAG,EAEzF,OAAO,CAFkF,CAG3F,CAGA,SAAgB,EAAc,EAA6C,CACzE,GAAI,IAAQ,IAAA,GAAW,OACvB,IAAM,EAAI,SAAS,EAAK,EAAE,EAC1B,GAAI,MAAM,CAAC,GAAK,GAAK,EACnB,MAAU,MAAM,wBAAwB,EAAI,+BAA+B,EAE7E,OAAO,CACT,CAEA,MAAM,GAAoB,CACxB,iBAAkB,GAClB,QAAS,CACP,KAAM,CAAE,KAAM,UAAW,MAAO,IAAK,QAAS,EAAM,EACpD,EAAG,CAAE,KAAM,UAAW,MAAO,IAAK,QAAS,EAAM,EACjD,SAAU,CAAE,KAAM,UAAW,MAAO,IAAK,QAAS,EAAM,EACxD,OAAQ,CAAE,KAAM,SAAU,MAAO,GAAI,EACrC,SAAU,CAAE,KAAM,QAAS,EAC3B,kBAAmB,CAAE,KAAM,QAAS,EACpC,YAAa,CAAE,KAAM,QAAS,EAC9B,eAAgB,CAAE,KAAM,UAAW,QAAS,EAAM,EAClD,KAAM,CAAE,KAAM,SAAU,MAAO,GAAI,EACnC,gBAAiB,CAAE,KAAM,QAAS,EAClC,OAAQ,CAAE,KAAM,QAAS,EACzB,QAAS,CAAE,KAAM,QAAS,EAC1B,OAAQ,CAAE,KAAM,QAAS,EACzB,gBAAiB,CAAE,KAAM,QAAS,EAClC,uBAAwB,CAAE,KAAM,QAAS,EACzC,YAAa,CAAE,KAAM,QAAS,EAC9B,QAAS,CAAE,KAAM,UAAW,QAAS,EAAM,EAC3C,MAAO,CAAE,KAAM,UAAW,QAAS,EAAM,EACzC,KAAM,CAAE,KAAM,UAAW,QAAS,EAAM,EACxC,gBAAiB,CAAE,KAAM,QAAS,EAClC,eAAgB,CAAE,KAAM,QAAS,EACjC,MAAO,CAAE,KAAM,QAAS,EACxB,yBAA0B,CAAE,KAAM,UAAW,QAAS,EAAM,EAC5D,cAAe,CAAE,KAAM,QAAS,EAChC,UAAW,CAAE,KAAM,UAAW,QAAS,EAAM,EAC7C,qBAAsB,CAAE,KAAM,QAAS,EACvC,SAAU,CAAE,KAAM,QAAS,EAC3B,KAAM,CAAE,KAAM,QAAS,EACvB,WAAY,CAAE,KAAM,QAAS,EAC7B,UAAW,CAAE,KAAM,QAAS,EAC5B,cAAe,CAAE,KAAM,QAAS,EAChC,cAAe,CAAE,KAAM,UAAW,QAAS,EAAM,EACjD,iBAAkB,CAAE,KAAM,QAAS,EACnC,eAAgB,CAAE,KAAM,UAAW,QAAS,EAAM,EAClD,uBAAwB,CAAE,KAAM,UAAW,QAAS,EAAM,EAC1D,UAAW,CAAE,KAAM,UAAW,QAAS,EAAM,EAC7C,IAAK,CAAE,KAAM,UAAW,MAAO,IAAK,QAAS,EAAM,CACrD,CACF,EAEA,SAAS,EACP,EACA,EACgB,CAChB,MAAO,CACL,WAAY,EACZ,KAAM,EAAO,MAAW,GACxB,UAAW,EAAO,GAAQ,GAC1B,aAAc,EAAO,UAAe,GACpC,SAAU,EAAO,OACjB,SAAU,EAAO,SACjB,eAAgB,EAAoB,EAAO,kBAAkB,EAC7D,SAAU,EAAc,EAAO,YAAY,EAC3C,YAAa,EAAO,iBAAmB,GACvC,YAAa,EAAO,KACpB,aAAc,EAAkB,EAAO,gBAAgB,EACvD,OAAQ,EAAO,OACf,QAAS,EAAO,QAChB,OAAQ,EAAO,OACf,aAAc,EAAO,iBACrB,mBAAoB,EAAO,wBAC3B,SAAU,EAAO,aACjB,QAAS,EAAO,SAAc,GAC9B,MAAO,EAAO,OAAY,GAC1B,KAAM,EAAO,MAAW,GACxB,aAAc,EAAO,iBACrB,YAAa,EAAO,gBACpB,MAAO,EAAO,MACd,qBAAsB,EAAO,2BAA6B,GAC1D,WAAY,EAAO,eACnB,UAAW,EAAO,WAAgB,GAClC,kBAAmB,EAAO,sBAC1B,SAAU,EAAO,SACjB,aAAc,EAAO,KACrB,QAAS,EAAO,YAChB,OAAQ,EAAO,WACf,UAAW,EAAO,eAClB,WAAY,EAAO,gBAAkB,GACrC,cAAe,EAAO,kBACtB,YAAa,EAAO,iBAAmB,GACvC,mBAAoB,EAAO,yBAA2B,GACtD,OAAQ,EAAO,YAAc,GAC7B,IAAK,EAAO,KAAU,EACxB,CACF,CAGA,SAAgB,GAA+B,CAC7C,GAAM,CAAE,SAAQ,eAAgB,EAAU,EAAiB,EAC3D,OAAO,EAAgB,EAAQ,CAAW,CAC5C,CCvMA,SAAS,EAAsB,EAAuD,CACpF,GAAI,IAAU,IAAA,IAAa,IAAU,QAAU,IAAU,gBACvD,OAAO,EAET,MAAU,MAAM,6BAA6B,EAAM,+BAA+B,CACpF,CAEA,SAAgB,EACd,EACA,EACA,EACA,EAAsD,EAAiC,EAC9E,CACT,IAAM,EAAe,EAA4B,EAAK,EAAsB,EAAK,aAAa,CAAC,EAiB/F,OAhBI,EAAK,mBACP,EAA2B,EAAc,GAAwB,CAAI,EAAG,CACtE,qBACF,CAAC,EACD,EAAS,UAAU,6BAA6B,GAAc,EACvD,CAAC,EAAK,WAAa,EAAK,WAAW,SAAW,GAEnD,EAAK,UAAY,EAAK,YAGxB,EADE,EAAK,gBAAkB,IAAA,GAAY,EAAuC,CAAG,EAAI,EAC3C,EAAK,SAAU,CACrD,eAAgB,EAA2B,CAAG,EAAE,SAClD,CAAC,EACD,EAAS,UAAU,2BAA2B,EAAK,UAAU,EACtD,CAAC,EAAK,WAAa,EAAK,WAAW,SAAW,GAEhD,EACT,CAEA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EAAsD,EAAiC,EACvF,EACe,CACf,MAAM,EACJ,EACA,CAAE,SAAU,EAAK,SAAU,cAAe,EAAsB,EAAK,aAAa,CAAE,EACpF,EACA,EACA,EACA,CACE,YAAa,GACb,cACE,IAAkB,IAAA,OAER,QAAQ,MAAM,QAAU,IAAQ,QAAQ,OAAO,QAAU,OADzD,CAEd,CACF,CACF,CAEA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EAAsD,EAAiC,EACxE,CACf,MAAM,EACJ,EACA,CAAE,cAAe,EAAsB,EAAK,aAAa,CAAE,EAC3D,EACA,EACA,CACF,CACF,CAEA,SAAS,GAAwB,EAA2C,CAC1E,IAAM,EAAO,EAAK,cAAgB,EAAK,kBACvC,GAAI,CAAC,EAAK,mBAAqB,CAAC,EAC9B,MAAU,MAAM,6DAA6D,EAE/E,MAAO,CACL,QAAS,EAAK,kBACd,OACA,GAAI,EAAK,QAAU,IAAA,IAAa,CAAE,MAAO,EAAK,KAAM,EACpD,GAAI,EAAK,SAAW,IAAA,IAAa,CAAE,OAAQ,EAAK,MAAO,EACvD,GAAI,EAAK,YAAc,IAAA,IAAa,CAAE,UAAW,EAAK,SAAU,EAChE,GAAI,EAAK,UAAY,IAAA,IAAa,CAAE,QAAS,EAAK,OAAQ,EAC1D,WAAY,EAAK,UACnB,CACF,CAEA,SAAgB,GACd,EAAsD,EAAiC,EAC/E,CACR,MAAO,CACL,mCACA,gFACA,wBAAwB,EAA6B,CAAmB,IACxE,GAAG,EAAoB,IAAI,EAA8B,CAC3D,EAAE,KAAK;CAAI,CACb,CAEA,SAAS,GAA+B,EAAyC,CAS/E,MAAO,KAAK,CAPV,+BAA+B,EAAW,OAC1C,UAAU,EAAW,OACrB,GAAI,EAAW,UAAU,UAAY,IAAA,GAAmC,CAAC,EAAxB,CAAC,kBAAkB,EACpE,kBACA,GAAI,EAAW,iBAAmB,GAAO,CAAC,0BAA0B,EAAI,CAAC,EACzE,eAEc,EAAE,KAAK,GAAG,GAC5B,CC7HA,eAAsB,GACpB,EACA,EACA,EACkB,CAClB,GAAI,EAAK,WAAW,KAAO,aACzB,MAAO,GAGT,IAAM,EAAS,MAAM,GAA8B,CACjD,MACA,KAAM,EAAK,WAAW,MAAM,CAAC,EAC7B,OAAQ,EAAK,OACb,QAAS,EAAK,QACd,OAAQ,EAAK,MACf,CAAC,EACK,EAAS,EAAO,QAAQ,QAAQ,EACtC,GAAI,CAAC,EAAO,QACV,MAAU,MAAM,CAAM,EAGxB,OADA,EAAS,UAAU,CAAM,EAClB,EACT,CCxBA,MAAa,OAA4B,EAAmB,OAAO,KAAK,GAAG,ECC3E,SAAgB,EAAe,EAAiC,CAC9D,IAAM,EAAS,EAAgB,EAC3B,EAAO,QACT,EAAS,UAAU,WAAW,EAAO,MAAM,EAE3C,EAAS,UAAU,yBAAyB,CAEhD,CCyBA,SAAgB,GACd,EACA,EACA,EACA,EACW,CACX,IAAM,EAA4C,CAChD,SAAU,CACR,SAAY,EAAa,EAAoB,CAAC,EAC9C,MAAQ,GAAa,EAAc,EAAoB,EAAG,CAAQ,CACpE,EACA,OAAQ,EAAkC,CAAG,CAC/C,EACM,EAAsB,EAAQ,qBAAuB,EAAiC,EAe5F,MAAO,CAAE,sBAAqB,sBAAqB,eAAA,CANjD,GAAG,EAA4B,CAAE,MAAK,sBAAqB,wBAAA,CAP3D,uBAA0B,EAA2B,CAAG,EACxD,uBACE,EAAa,EAAuC,CAAG,CAAC,EAC1D,oBAAsB,GACpB,EAAc,EAAuC,CAAG,EAAG,CAAQ,CAGY,CAAE,CAAC,EACpF,GAAI,EAAQ,gBAAkB,CAAC,CAK+B,EAAG,2BAHhC,EAA+B,CAAI,EAClE,EAA0B,CAAE,eAAgB,CAAQ,CAAC,EACrD,IAAA,EAC0F,CAChG,CC5DA,SAAS,GAAmB,EAAa,EAA0B,CAEjE,IAAM,EAAU,EADC,EAAQ,EAAK,CACM,EAAG,MAAM,EAAE,KAAK,EACpD,GAAI,EAAQ,SAAW,EACrB,MAAU,MAAM,uBAAuB,GAAU,EAEnD,MAAO,cAAc,EAAS,MAAM,GACtC,CAEA,SAAgB,GAAwB,EAAa,EAA0C,CAC7F,IAAM,EAAwB,CAAC,EAE/B,GADI,EAAK,oBAAoB,EAAY,KAAK,EAAK,kBAAkB,EACjE,EAAK,SACP,GAAI,CACF,EAAY,KAAK,GAAmB,EAAK,EAAK,QAAQ,CAAC,CACzD,OAAS,EAAO,CAEd,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,KAAK,CAAC,CAChB,CAMF,OAJI,EAAK,YACP,EAAY,KACV,6DAA6D,EAAK,YACpE,EACK,EAAY,OAAS,EAAI,EAAY,KAAK;;CAAM,EAAI,IAAA,EAC7D,CCrBA,eAAsB,GACpB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACe,CACf,IAAI,EAAS,EAAK,WAAW,KAAK,GAAG,EAAE,KAAK,EAE5C,GAAI,CAAC,GAAU,CAAC,QAAQ,MAAM,MAAO,CACnC,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAChC,EAAO,KAAK,CAAe,EAE7B,EAAS,OAAO,OAAO,CAAM,EAAE,SAAS,OAAO,EAAE,KAAK,CACxD,CAEK,IACH,QAAQ,OAAO,MAAM;CAA+C,EACpE,QAAQ,KAAK,CAAC,GAGhB,IAAM,EAAqB,GAAwB,EAAK,CAAI,EAEtD,EAAU,IAAI,EAA2B,CAC7C,MACA,WACA,aAAc,EAAK,cAAgB,OACnC,eAAgB,EAAK,gBAAkB,oBACvC,SAAU,EAAK,SACf,aAAc,EAAK,qBAAuB,IAAA,GAAY,EACtD,YAAa,EAAK,YAClB,KAAM,EAAK,MAAQ,IAAA,GACnB,aAAc,EAAK,aACf,EAAK,aACF,MAAM,GAAG,EACT,IAAK,GAAM,EAAE,KAAK,CAAC,EACnB,OAAQ,GAAM,EAAE,OAAS,CAAC,EAC7B,IAAA,GACJ,qBACA,GAAI,EAAK,aAAe,CAAE,aAAc,EAAK,YAAa,EAAI,CAAC,EAC/D,wBACA,wBACA,iBACA,qBACF,CAAC,EAED,MAAM,EAAQ,IAAI,CAAM,EACxB,QAAQ,KAAK,EAAQ,YAAY,CAAC,CACpC,CClBA,eAAsB,GAAS,EAA4B,CAAC,EAAkB,CAC5E,IAAI,EACJ,GAAI,CACF,EAAO,EAAa,CACtB,OAAS,EAAO,CAEd,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,KAAK,CAAC,CAChB,CACA,IAAM,EAAU,GAAY,EAE5B,GAAI,EAAK,KAAM,CACb,QAAQ,OAAO,MAAM,EAAU,CAAC,EAChC,MACF,CAEA,GAAI,EAAK,QAAS,CAChB,QAAQ,OAAO,MAAM,UAAU,EAAQ,GAAG,EAC1C,MACF,CAEA,GAAI,EAAK,YAAa,CACpB,IAAM,EAAS,MAAM,EAAkB,CAAE,eAAgB,EAAS,MAAO,EAAK,CAAC,EACzE,EAAU,EAA4B,CAAM,EAC9C,EAAO,SAAW,UACpB,QAAQ,OAAO,MAAM,GAAG,EAAQ,GAAG,EACnC,QAAQ,KAAK,CAAC,GAEhB,QAAQ,OAAO,MAAM,GAAG,EAAQ,GAAG,EACnC,MACF,CAEA,IAAM,EAAM,QAAQ,IAAI,EAClB,EAAW,IAAI,EAErB,GAAI,EAAK,MAAO,CACd,EAAe,CAAQ,EACvB,MACF,CAEA,GAAI,CACF,GAAI,MAAM,GAAqC,EAAM,EAAK,CAAQ,EAChE,MAEJ,OAAS,EAAO,CAEd,EAAS,WAAW,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAAC,EAC1E,QAAQ,KAAK,CAAC,CAChB,CAEA,GAAM,CAAE,sBAAqB,sBAAqB,iBAAgB,8BAChE,GAAkB,EAAK,EAAM,EAAS,CAAO,EAE/C,GAAI,EAAK,UAAW,CAClB,MAAM,EAA4B,EAAK,EAAM,EAAa,EAAU,CAAmB,EACvF,MACF,CAEA,GAAI,EAAgC,EAAK,EAAM,EAAU,CAAmB,EAC1E,OAGF,GAAI,CACF,MAAM,EAAa,EAAK,EAAM,EAAa,EAAU,CAAmB,CAC1E,OAAS,EAAO,CAEd,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,KAAK,CAAC,CAChB,CAEA,IAAM,EAAkB,EAAK,SACzB,CAAE,iBAAkB,EAAK,SAAU,qBAAoB,EACvD,CAAE,qBAAoB,EACpB,EAAmB,EAAqB,EAAK,CAAe,EAC5D,EAAU,EAAK,OAAS,EAAiB,MACzC,EAAW,EAA2B,EAAK,EAAK,MAAO,CAAe,EACtE,EAAwB,EAAmC,EAC3D,EAAQ,EAAa,CAAG,EACxB,EAAwB,EAAwC,CACpE,WAAY,EAA6B,EACzC,eAAgB,CAAE,GAAG,EAAkB,MAAO,CAAQ,EACtD,QAAS,EAAM,IACjB,CAAC,EAEK,EAAe,EAA0B,CAAG,EAC9C,EACA,EAA2B,GAgB/B,GAdI,EAAK,aACP,EAAkB,EAAuB,EAAc,CAAG,EACjD,EAAK,WAAa,IAAA,KACvB,EAAK,WAAa,GACpB,EAA2B,IAE3B,EAAkB,EAA2B,EAAc,EAAK,QAAQ,EACpE,IAAoB,IAAA,KACtB,QAAQ,OAAO,MAAM,sBAAsB,EAAK,SAAS,GAAG,EAC5D,QAAQ,KAAK,CAAC,KAKhB,EAAK,UAAW,CAClB,MAAM,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACA,MACF,CAEA,MAAM,EAAU,CACd,MACA,WACA,iBAAkB,EAAK,SACvB,aAAc,EAAiB,KAC/B,UACA,SAAU,EAAK,SACf,eAAgB,EAAK,eACrB,SAAU,EAAK,SACf,UACA,aAAc,EAAK,qBAAuB,IAAA,GAAY,EACtD,kBACA,2BACA,YAAa,EAAK,YAClB,YAAa,EAAK,YAClB,wBACA,wBACA,iBACA,sBACA,UAAY,GACV,EAAS,EAAS,CAAE,QAAS,IAAM,SAAU,QAAS,MAAO,MAAO,CAAC,EAAE,QAAQ,EACjF,oBAAqB,EACjB,EAA2B,KAAM,GAAO,EAAI,EAAsB,CAAC,EAAI,IAAA,EAAU,EACjF,IAAA,GACJ,kBAAmB,EAA+B,EAClD,WAAY,EAA2B,CAAE,sBAAqB,2BAA0B,CAAC,EACzF,4BACA,UAAW,YACb,CAAC,EACD,QAAQ,KAAK,CAAC,CAChB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
let e=require(`@robota-sdk/agent-transport/headless`),t=require(`node:fs`),n=require(`node:path`);const r={permissions:{allow:[`Read(.robota/**)`,`Read(.claude/**)`,`Read(.agents/**)`],deny:[]}};function i(e){let r=(0,n.join)(e,`settings.json`);if(!(0,t.existsSync)(r))return{};let i=(0,t.readFileSync)(r,`utf8`);return JSON.parse(i)}async function a(t){let n=await(0,e.promptInput)(`${t} [y/N] `);return n.toLowerCase()===`y`||n.toLowerCase()===`yes`}async function o(e,o){o.writeLine(``),o.writeLine(`Robota project initialization`),o.writeLine(`─`.repeat(40));let s=(0,n.join)(e,`.robota`),c=(0,n.join)(s,`settings.json`),l=(0,n.join)(e,`AGENTS.md`),u=(0,n.join)(e,`.claude`),d=(0,t.existsSync)(u),f=(0,t.existsSync)(c),p=(0,t.existsSync)(l);if(f&&p&&(o.writeLine(``),o.writeLine(`Both AGENTS.md and .robota/settings.json already exist.`),!await a(`Overwrite existing files?`))){o.writeLine(`Init cancelled.`);return}let m={...r};if(d&&(o.writeLine(``),o.writeLine(`Detected .claude/ directory (Claude Code configuration).`),await a(`Migrate Claude Code settings to .robota/?`))){let e=i(u),t=e.permissions;m={...e,permissions:{...typeof e.permissions==`object`&&e.permissions!==null?e.permissions:{},allow:[...r.permissions.allow,...t?.allow??[]],deny:t?.deny??[]}},o.writeLine(`Settings imported from .claude/settings.json.`)}(0,t.mkdirSync)(s,{recursive:!0}),(0,t.writeFileSync)(c,JSON.stringify(m,null,2)+`
|
|
2
|
+
`,`utf8`),o.writeLine(``),o.writeLine(`Created: .robota/settings.json`),(0,t.writeFileSync)(l,`# AGENTS.md — Project Agent Guidelines
|
|
3
|
+
|
|
4
|
+
This file guides the AI agent working in this project. Customize it for your project.
|
|
5
|
+
|
|
6
|
+
## Project Overview
|
|
7
|
+
|
|
8
|
+
<!-- Describe your project's purpose, tech stack, and key conventions -->
|
|
9
|
+
|
|
10
|
+
## Common Commands
|
|
11
|
+
|
|
12
|
+
\`\`\`bash
|
|
13
|
+
# Install dependencies
|
|
14
|
+
npm install
|
|
15
|
+
|
|
16
|
+
# Run tests
|
|
17
|
+
npm test
|
|
18
|
+
|
|
19
|
+
# Build
|
|
20
|
+
npm run build
|
|
21
|
+
\`\`\`
|
|
22
|
+
|
|
23
|
+
## Coding Conventions
|
|
24
|
+
|
|
25
|
+
- Language: <!-- e.g. TypeScript strict mode -->
|
|
26
|
+
- Test framework: <!-- e.g. Vitest, Jest -->
|
|
27
|
+
- Linting: <!-- e.g. ESLint with prettier -->
|
|
28
|
+
|
|
29
|
+
## Important Notes
|
|
30
|
+
|
|
31
|
+
<!-- Anything the agent should know before making changes -->
|
|
32
|
+
`,`utf8`),o.writeLine(`Created: AGENTS.md`),o.writeLine(``),o.writeLine(`Initialization complete.`),o.writeLine(``),o.writeLine(`Next steps:`),o.writeLine(` 1. Edit AGENTS.md to describe your project conventions`),o.writeLine(" 2. Run `robota --configure` to set up your AI provider"),o.writeLine(" 3. Run `robota` to start the assistant"),o.writeLine(``)}exports.runInitCommand=o;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import{promptInput as e}from"@robota-sdk/agent-transport/headless";import{existsSync as t,mkdirSync as n,readFileSync as r,writeFileSync as i}from"node:fs";import{join as a}from"node:path";const o={permissions:{allow:[`Read(.robota/**)`,`Read(.claude/**)`,`Read(.agents/**)`],deny:[]}};function s(e){let n=a(e,`settings.json`);if(!t(n))return{};let i=r(n,`utf8`);return JSON.parse(i)}async function c(t){let n=await e(`${t} [y/N] `);return n.toLowerCase()===`y`||n.toLowerCase()===`yes`}async function l(e,r){r.writeLine(``),r.writeLine(`Robota project initialization`),r.writeLine(`─`.repeat(40));let l=a(e,`.robota`),u=a(l,`settings.json`),d=a(e,`AGENTS.md`),f=a(e,`.claude`),p=t(f),m=t(u),h=t(d);if(m&&h&&(r.writeLine(``),r.writeLine(`Both AGENTS.md and .robota/settings.json already exist.`),!await c(`Overwrite existing files?`))){r.writeLine(`Init cancelled.`);return}let g={...o};if(p&&(r.writeLine(``),r.writeLine(`Detected .claude/ directory (Claude Code configuration).`),await c(`Migrate Claude Code settings to .robota/?`))){let e=s(f),t=e.permissions;g={...e,permissions:{...typeof e.permissions==`object`&&e.permissions!==null?e.permissions:{},allow:[...o.permissions.allow,...t?.allow??[]],deny:t?.deny??[]}},r.writeLine(`Settings imported from .claude/settings.json.`)}n(l,{recursive:!0}),i(u,JSON.stringify(g,null,2)+`
|
|
2
|
+
`,`utf8`),r.writeLine(``),r.writeLine(`Created: .robota/settings.json`),i(d,`# AGENTS.md — Project Agent Guidelines
|
|
3
|
+
|
|
4
|
+
This file guides the AI agent working in this project. Customize it for your project.
|
|
5
|
+
|
|
6
|
+
## Project Overview
|
|
7
|
+
|
|
8
|
+
<!-- Describe your project's purpose, tech stack, and key conventions -->
|
|
9
|
+
|
|
10
|
+
## Common Commands
|
|
11
|
+
|
|
12
|
+
\`\`\`bash
|
|
13
|
+
# Install dependencies
|
|
14
|
+
npm install
|
|
15
|
+
|
|
16
|
+
# Run tests
|
|
17
|
+
npm test
|
|
18
|
+
|
|
19
|
+
# Build
|
|
20
|
+
npm run build
|
|
21
|
+
\`\`\`
|
|
22
|
+
|
|
23
|
+
## Coding Conventions
|
|
24
|
+
|
|
25
|
+
- Language: <!-- e.g. TypeScript strict mode -->
|
|
26
|
+
- Test framework: <!-- e.g. Vitest, Jest -->
|
|
27
|
+
- Linting: <!-- e.g. ESLint with prettier -->
|
|
28
|
+
|
|
29
|
+
## Important Notes
|
|
30
|
+
|
|
31
|
+
<!-- Anything the agent should know before making changes -->
|
|
32
|
+
`,`utf8`),r.writeLine(`Created: AGENTS.md`),r.writeLine(``),r.writeLine(`Initialization complete.`),r.writeLine(``),r.writeLine(`Next steps:`),r.writeLine(` 1. Edit AGENTS.md to describe your project conventions`),r.writeLine(" 2. Run `robota --configure` to set up your AI provider"),r.writeLine(" 3. Run `robota` to start the assistant"),r.writeLine(``)}export{l as runInitCommand};
|
|
33
|
+
//# sourceMappingURL=init-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-command.js","names":[],"sources":["../../../src/init/init-command.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { promptInput } from '@robota-sdk/agent-transport/headless';\n\nimport type { ITerminalOutput } from '@robota-sdk/agent-core';\n\nconst AGENTS_MD_TEMPLATE = `# AGENTS.md — Project Agent Guidelines\n\nThis file guides the AI agent working in this project. Customize it for your project.\n\n## Project Overview\n\n<!-- Describe your project's purpose, tech stack, and key conventions -->\n\n## Common Commands\n\n\\`\\`\\`bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n\\`\\`\\`\n\n## Coding Conventions\n\n- Language: <!-- e.g. TypeScript strict mode -->\n- Test framework: <!-- e.g. Vitest, Jest -->\n- Linting: <!-- e.g. ESLint with prettier -->\n\n## Important Notes\n\n<!-- Anything the agent should know before making changes -->\n`;\n\nconst SETTINGS_TEMPLATE = {\n permissions: {\n allow: ['Read(.robota/**)', 'Read(.claude/**)', 'Read(.agents/**)'],\n deny: [],\n },\n};\n\nfunction readClaudeSettings(claudeDir: string): Record<string, unknown> {\n const settingsPath = join(claudeDir, 'settings.json');\n if (!existsSync(settingsPath)) return {};\n const raw = readFileSync(settingsPath, 'utf8');\n return JSON.parse(raw) as Record<string, unknown>;\n}\n\nasync function askYesNo(question: string): Promise<boolean> {\n const answer = await promptInput(`${question} [y/N] `);\n return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';\n}\n\nexport async function runInitCommand(cwd: string, terminal: ITerminalOutput): Promise<void> {\n terminal.writeLine('');\n terminal.writeLine('Robota project initialization');\n terminal.writeLine('─'.repeat(40));\n\n const robotaDir = join(cwd, '.robota');\n const settingsPath = join(robotaDir, 'settings.json');\n const agentsMdPath = join(cwd, 'AGENTS.md');\n const claudeDir = join(cwd, '.claude');\n const hasClaudeDir = existsSync(claudeDir);\n\n const hasSettings = existsSync(settingsPath);\n const hasAgentsMd = existsSync(agentsMdPath);\n\n if (hasSettings && hasAgentsMd) {\n terminal.writeLine('');\n terminal.writeLine('Both AGENTS.md and .robota/settings.json already exist.');\n const overwrite = await askYesNo('Overwrite existing files?');\n if (!overwrite) {\n terminal.writeLine('Init cancelled.');\n return;\n }\n }\n\n let settingsData: Record<string, unknown> = { ...SETTINGS_TEMPLATE };\n\n if (hasClaudeDir) {\n terminal.writeLine('');\n terminal.writeLine('Detected .claude/ directory (Claude Code configuration).');\n const migrate = await askYesNo('Migrate Claude Code settings to .robota/?');\n if (migrate) {\n const claudeSettings = readClaudeSettings(claudeDir);\n const claudePerms = claudeSettings.permissions as\n | { allow?: string[]; deny?: string[] }\n | undefined;\n settingsData = {\n ...claudeSettings,\n permissions: {\n ...(typeof claudeSettings.permissions === 'object' && claudeSettings.permissions !== null\n ? (claudeSettings.permissions as Record<string, unknown>)\n : {}),\n allow: [...SETTINGS_TEMPLATE.permissions.allow, ...(claudePerms?.allow ?? [])],\n deny: claudePerms?.deny ?? [],\n },\n };\n terminal.writeLine('Settings imported from .claude/settings.json.');\n }\n }\n\n mkdirSync(robotaDir, { recursive: true });\n writeFileSync(settingsPath, JSON.stringify(settingsData, null, 2) + '\\n', 'utf8');\n terminal.writeLine('');\n terminal.writeLine('Created: .robota/settings.json');\n\n writeFileSync(agentsMdPath, AGENTS_MD_TEMPLATE, 'utf8');\n terminal.writeLine('Created: AGENTS.md');\n\n terminal.writeLine('');\n terminal.writeLine('Initialization complete.');\n terminal.writeLine('');\n terminal.writeLine('Next steps:');\n terminal.writeLine(' 1. Edit AGENTS.md to describe your project conventions');\n terminal.writeLine(' 2. Run `robota --configure` to set up your AI provider');\n terminal.writeLine(' 3. Run `robota` to start the assistant');\n terminal.writeLine('');\n}\n"],"mappings":"6LAOA,MAgCM,EAAoB,CACxB,YAAa,CACX,MAAO,CAAC,mBAAoB,mBAAoB,kBAAkB,EAClE,KAAM,CAAC,CACT,CACF,EAEA,SAAS,EAAmB,EAA4C,CACtE,IAAM,EAAe,EAAK,EAAW,eAAe,EACpD,GAAI,CAAC,EAAW,CAAY,EAAG,MAAO,CAAC,EACvC,IAAM,EAAM,EAAa,EAAc,MAAM,EAC7C,OAAO,KAAK,MAAM,CAAG,CACvB,CAEA,eAAe,EAAS,EAAoC,CAC1D,IAAM,EAAS,MAAM,EAAY,GAAG,EAAS,QAAQ,EACrD,OAAO,EAAO,YAAY,IAAM,KAAO,EAAO,YAAY,IAAM,KAClE,CAEA,eAAsB,EAAe,EAAa,EAA0C,CAC1F,EAAS,UAAU,EAAE,EACrB,EAAS,UAAU,+BAA+B,EAClD,EAAS,UAAU,IAAI,OAAO,EAAE,CAAC,EAEjC,IAAM,EAAY,EAAK,EAAK,SAAS,EAC/B,EAAe,EAAK,EAAW,eAAe,EAC9C,EAAe,EAAK,EAAK,WAAW,EACpC,EAAY,EAAK,EAAK,SAAS,EAC/B,EAAe,EAAW,CAAS,EAEnC,EAAc,EAAW,CAAY,EACrC,EAAc,EAAW,CAAY,EAE3C,GAAI,GAAe,IACjB,EAAS,UAAU,EAAE,EACrB,EAAS,UAAU,yDAAyD,EAExE,CAAC,MADmB,EAAS,2BAA2B,GAC5C,CACd,EAAS,UAAU,iBAAiB,EACpC,MACF,CAGF,IAAI,EAAwC,CAAE,GAAG,CAAkB,EAEnE,GAAI,IACF,EAAS,UAAU,EAAE,EACrB,EAAS,UAAU,0DAA0D,EAEzE,MADkB,EAAS,2CAA2C,GAC7D,CACX,IAAM,EAAiB,EAAmB,CAAS,EAC7C,EAAc,EAAe,YAGnC,EAAe,CACb,GAAG,EACH,YAAa,CACX,GAAI,OAAO,EAAe,aAAgB,UAAY,EAAe,cAAgB,KAChF,EAAe,YAChB,CAAC,EACL,MAAO,CAAC,GAAG,EAAkB,YAAY,MAAO,GAAI,GAAa,OAAS,CAAC,CAAE,EAC7E,KAAM,GAAa,MAAQ,CAAC,CAC9B,CACF,EACA,EAAS,UAAU,+CAA+C,CACpE,CAGF,EAAU,EAAW,CAAE,UAAW,EAAK,CAAC,EACxC,EAAc,EAAc,KAAK,UAAU,EAAc,KAAM,CAAC,EAAI;EAAM,MAAM,EAChF,EAAS,UAAU,EAAE,EACrB,EAAS,UAAU,gCAAgC,EAEnD,EAAc,EAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAoB,MAAM,EACtD,EAAS,UAAU,oBAAoB,EAEvC,EAAS,UAAU,EAAE,EACrB,EAAS,UAAU,0BAA0B,EAC7C,EAAS,UAAU,EAAE,EACrB,EAAS,UAAU,aAAa,EAChC,EAAS,UAAU,0DAA0D,EAC7E,EAAS,UAAU,0DAA0D,EAC7E,EAAS,UAAU,0CAA0C,EAC7D,EAAS,UAAU,EAAE,CACvB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const e=require(`../startup/append-system-prompt.cjs`),t=require(`../constants.cjs`),n=require(`./shell-exec.cjs`);let r=require(`@robota-sdk/agent-transport/headless`);async function i(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.
|
|
2
|
+
`),process.exit(1)),t}async function a(a,o){let s=await i(a);a.dryRun&&process.stdout.write(`DRY RUN — plan mode enabled. No files will be modified.
|
|
3
|
+
|
|
4
|
+
`);let c=[];a.dryRun&&c.push(`You are in dry-run (plan) mode. Analyze the request and describe step by step what you would do, without executing any write or edit operations. Format your response as a numbered action plan.`);let l=e.buildAppendSystemPrompt(o.cwd,a);l&&c.push(l);let u=c.length>0?c.join(`
|
|
5
|
+
|
|
6
|
+
`):void 0,d=n.createShellExec(),f=o.createSession({permissionMode:a.permissionMode??`bypassPermissions`,maxTurns:a.maxTurns,sessionStore:a.noSessionPersistence?void 0:o.sessionStore,sessionName:a.sessionName,bare:a.bare||void 0,allowedTools:a.allowedTools?a.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:u,systemPrompt:a.systemPrompt,shellExec:d,agentName:t.AGENT_CLI_NAME}),p=(0,r.createHeadlessTransport)({outputFormat:a.outputFormat??`text`,prompt:s});f.attachTransport(p),await p.start(),await f.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(p.getExitCode())}exports.runPrintMode=a;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{buildAppendSystemPrompt as e}from"../startup/append-system-prompt.js";import{AGENT_CLI_NAME as t}from"../constants.js";import{createShellExec as n}from"./shell-exec.js";import{createHeadlessTransport as r}from"@robota-sdk/agent-transport/headless";async function i(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.
|
|
2
|
+
`),process.exit(1)),t}async function a(a,o){let s=await i(a);a.dryRun&&process.stdout.write(`DRY RUN — plan mode enabled. No files will be modified.
|
|
3
|
+
|
|
4
|
+
`);let c=[];a.dryRun&&c.push(`You are in dry-run (plan) mode. Analyze the request and describe step by step what you would do, without executing any write or edit operations. Format your response as a numbered action plan.`);let l=e(o.cwd,a);l&&c.push(l);let u=c.length>0?c.join(`
|
|
5
|
+
|
|
6
|
+
`):void 0,d=n(),f=o.createSession({permissionMode:a.permissionMode??`bypassPermissions`,maxTurns:a.maxTurns,sessionStore:a.noSessionPersistence?void 0:o.sessionStore,sessionName:a.sessionName,bare:a.bare||void 0,allowedTools:a.allowedTools?a.allowedTools.split(`,`).map(e=>e.trim()).filter(e=>e.length>0):void 0,appendSystemPrompt:u,systemPrompt:a.systemPrompt,shellExec:d,agentName:t}),p=r({outputFormat:a.outputFormat??`text`,prompt:s});f.attachTransport(p),await p.start(),await f.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`}),process.exit(p.getExitCode())}export{a as runPrintMode};
|
|
7
|
+
//# sourceMappingURL=print-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print-mode.js","names":[],"sources":["../../../src/modes/print-mode.ts"],"sourcesContent":["import { createHeadlessTransport } from '@robota-sdk/agent-transport/headless';\n\nimport { buildAppendSystemPrompt } from '../startup/append-system-prompt.js';\nimport { AGENT_CLI_NAME } from '../constants.js';\nimport { createShellExec } from './shell-exec.js';\n\nimport type { ISessionRunOptions } from '../startup/args-to-options.js';\nimport type { IAgentRuntime } from '@robota-sdk/agent-framework';\n\nasync function resolvePrompt(opts: ISessionRunOptions): Promise<string> {\n let prompt = opts.positional.join(' ').trim();\n\n if (!prompt && !process.stdin.isTTY) {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk as Buffer);\n }\n prompt = Buffer.concat(chunks).toString('utf-8').trim();\n }\n\n if (!prompt) {\n process.stderr.write('Print mode (-p) requires a prompt argument.\\n');\n process.exit(1);\n }\n\n return prompt;\n}\n\nconst DRY_RUN_SYSTEM_PROMPT =\n 'You are in dry-run (plan) mode. Analyze the request and describe step by step what you would do, without executing any write or edit operations. Format your response as a numbered action plan.';\n\nexport async function runPrintMode(\n opts: ISessionRunOptions,\n runtime: IAgentRuntime,\n): Promise<void> {\n const prompt = await resolvePrompt(opts);\n\n if (opts.dryRun) {\n process.stdout.write('DRY RUN — plan mode enabled. No files will be modified.\\n\\n');\n }\n\n const appendSystemPromptParts: string[] = [];\n if (opts.dryRun) appendSystemPromptParts.push(DRY_RUN_SYSTEM_PROMPT);\n const baseAppend = buildAppendSystemPrompt(runtime.cwd, opts);\n if (baseAppend) appendSystemPromptParts.push(baseAppend);\n const appendSystemPrompt =\n appendSystemPromptParts.length > 0 ? appendSystemPromptParts.join('\\n\\n') : undefined;\n const shellExec = createShellExec();\n\n const session = runtime.createSession({\n permissionMode: opts.permissionMode ?? 'bypassPermissions',\n maxTurns: opts.maxTurns,\n sessionStore: opts.noSessionPersistence ? undefined : runtime.sessionStore,\n sessionName: opts.sessionName,\n bare: opts.bare || undefined,\n allowedTools: opts.allowedTools\n ? opts.allowedTools\n .split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0)\n : undefined,\n appendSystemPrompt,\n systemPrompt: opts.systemPrompt,\n shellExec,\n agentName: AGENT_CLI_NAME,\n });\n\n const transport = createHeadlessTransport({\n outputFormat: opts.outputFormat ?? 'text',\n prompt,\n });\n session.attachTransport(transport);\n await transport.start();\n await session.shutdown({ reason: 'prompt_input_exit', message: 'Headless transport complete' });\n process.exit(transport.getExitCode());\n}\n"],"mappings":"+PASA,eAAe,EAAc,EAA2C,CACtE,IAAI,EAAS,EAAK,WAAW,KAAK,GAAG,EAAE,KAAK,EAE5C,GAAI,CAAC,GAAU,CAAC,QAAQ,MAAM,MAAO,CACnC,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAChC,EAAO,KAAK,CAAe,EAE7B,EAAS,OAAO,OAAO,CAAM,EAAE,SAAS,OAAO,EAAE,KAAK,CACxD,CAOA,OALK,IACH,QAAQ,OAAO,MAAM;CAA+C,EACpE,QAAQ,KAAK,CAAC,GAGT,CACT,CAKA,eAAsB,EACpB,EACA,EACe,CACf,IAAM,EAAS,MAAM,EAAc,CAAI,EAEnC,EAAK,QACP,QAAQ,OAAO,MAAM;;CAA6D,EAGpF,IAAM,EAAoC,CAAC,EACvC,EAAK,QAAQ,EAAwB,KAAK,kMAAqB,EACnE,IAAM,EAAa,EAAwB,EAAQ,IAAK,CAAI,EACxD,GAAY,EAAwB,KAAK,CAAU,EACvD,IAAM,EACJ,EAAwB,OAAS,EAAI,EAAwB,KAAK;;CAAM,EAAI,IAAA,GACxE,EAAY,EAAgB,EAE5B,EAAU,EAAQ,cAAc,CACpC,eAAgB,EAAK,gBAAkB,oBACvC,SAAU,EAAK,SACf,aAAc,EAAK,qBAAuB,IAAA,GAAY,EAAQ,aAC9D,YAAa,EAAK,YAClB,KAAM,EAAK,MAAQ,IAAA,GACnB,aAAc,EAAK,aACf,EAAK,aACF,MAAM,GAAG,EACT,IAAK,GAAM,EAAE,KAAK,CAAC,EACnB,OAAQ,GAAM,EAAE,OAAS,CAAC,EAC7B,IAAA,GACJ,qBACA,aAAc,EAAK,aACnB,YACA,UAAW,CACb,CAAC,EAEK,EAAY,EAAwB,CACxC,aAAc,EAAK,cAAgB,OACnC,QACF,CAAC,EACD,EAAQ,gBAAgB,CAAS,EACjC,MAAM,EAAU,MAAM,EACtB,MAAM,EAAQ,SAAS,CAAE,OAAQ,oBAAqB,QAAS,6BAA8B,CAAC,EAC9F,QAAQ,KAAK,EAAU,YAAY,CAAC,CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require(`node:child_process`);function t(){return t=>(0,e.execSync)(t,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd()}exports.createShellExec=t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-exec.js","names":[],"sources":["../../../src/modes/shell-exec.ts"],"sourcesContent":["import { execSync } from 'node:child_process';\n\nexport const SHELL_EXEC_TIMEOUT_MS = 5_000;\n\nexport function createShellExec(): (command: string) => string {\n return (command: string): string =>\n execSync(command, {\n timeout: SHELL_EXEC_TIMEOUT_MS,\n encoding: 'utf-8',\n stdio: 'pipe',\n }).trimEnd();\n}\n"],"mappings":"8CAIA,SAAgB,GAA+C,CAC7D,MAAQ,IACN,EAAS,EAAS,CAChB,QAAS,IACT,SAAU,QACV,MAAO,MACT,CAAC,EAAE,QAAQ,CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../constants.cjs`),t=require(`./shell-exec.cjs`);let n=require(`@robota-sdk/agent-transport/tui`);async function r(r){let{runtime:i,version:a,commandSetup:o,providerSetup:s,sessionSetup:c,sessionOpts:l,startupUpdateNotice:u}=r;await new n.TuiTransport({runtime:i,providerOverride:s.activeProfileName,providerType:s.providerSettings.name,modelId:s.modelId,language:l.language,permissionMode:l.permissionMode,maxTurns:l.maxTurns,version:a,resumeSessionId:c.resumeSessionId,showSessionPickerOnStart:c.showSessionPickerOnStart,forkSession:l.forkSession,sessionName:l.sessionName,shellExec:t.createShellExec(),startupUpdateNotice:u,cliAdapter:(0,n.createDefaultTuiCliAdapter)({providerDefinitions:o.providerDefinitions,reloadPluginCommandSource:o.reloadPluginCommandSource}),agentName:e.AGENT_CLI_NAME}).start()}exports.runTuiMode=r;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AGENT_CLI_NAME as e}from"../constants.js";import{createShellExec as t}from"./shell-exec.js";import{TuiTransport as n,createDefaultTuiCliAdapter as r}from"@robota-sdk/agent-transport/tui";async function i(i){let{runtime:a,version:o,commandSetup:s,providerSetup:c,sessionSetup:l,sessionOpts:u,startupUpdateNotice:d}=i;await new n({runtime:a,providerOverride:c.activeProfileName,providerType:c.providerSettings.name,modelId:c.modelId,language:u.language,permissionMode:u.permissionMode,maxTurns:u.maxTurns,version:o,resumeSessionId:l.resumeSessionId,showSessionPickerOnStart:l.showSessionPickerOnStart,forkSession:u.forkSession,sessionName:u.sessionName,shellExec:t(),startupUpdateNotice:d,cliAdapter:r({providerDefinitions:s.providerDefinitions,reloadPluginCommandSource:s.reloadPluginCommandSource}),agentName:e}).start()}export{i as runTuiMode};
|
|
2
|
+
//# sourceMappingURL=tui-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-mode.js","names":[],"sources":["../../../src/modes/tui-mode.ts"],"sourcesContent":["import { TuiTransport, createDefaultTuiCliAdapter } from '@robota-sdk/agent-transport/tui';\n\nimport type { ISessionRunOptions } from '../startup/args-to-options.js';\nimport type { ICommandSetup } from '../startup/command-setup.js';\nimport type { IProviderSetup } from '../startup/provider-setup.js';\nimport type { ISessionSetup } from '../startup/session-setup.js';\nimport type { IAgentRuntime } from '@robota-sdk/agent-framework';\nimport { AGENT_CLI_NAME } from '../constants.js';\nimport { createShellExec } from './shell-exec.js';\n\nexport interface ITuiModeOptions {\n runtime: IAgentRuntime;\n version: string;\n commandSetup: ICommandSetup;\n providerSetup: IProviderSetup;\n sessionSetup: ISessionSetup;\n sessionOpts: ISessionRunOptions;\n startupUpdateNotice: Promise<string | undefined> | undefined;\n}\n\nexport async function runTuiMode(opts: ITuiModeOptions): Promise<void> {\n const {\n runtime,\n version,\n commandSetup,\n providerSetup,\n sessionSetup,\n sessionOpts,\n startupUpdateNotice,\n } = opts;\n\n const tuiTransport = new TuiTransport({\n runtime,\n providerOverride: providerSetup.activeProfileName,\n providerType: providerSetup.providerSettings.name,\n modelId: providerSetup.modelId,\n language: sessionOpts.language,\n permissionMode: sessionOpts.permissionMode,\n maxTurns: sessionOpts.maxTurns,\n version,\n resumeSessionId: sessionSetup.resumeSessionId,\n showSessionPickerOnStart: sessionSetup.showSessionPickerOnStart,\n forkSession: sessionOpts.forkSession,\n sessionName: sessionOpts.sessionName,\n shellExec: createShellExec(),\n startupUpdateNotice,\n cliAdapter: createDefaultTuiCliAdapter({\n providerDefinitions: commandSetup.providerDefinitions,\n reloadPluginCommandSource: commandSetup.reloadPluginCommandSource,\n }),\n agentName: AGENT_CLI_NAME,\n });\n\n await tuiTransport.start();\n}\n"],"mappings":"kMAoBA,eAAsB,EAAW,EAAsC,CACrE,GAAM,CACJ,UACA,UACA,eACA,gBACA,eACA,cACA,uBACE,EAwBJ,MAAM,IAtBmB,EAAa,CACpC,UACA,iBAAkB,EAAc,kBAChC,aAAc,EAAc,iBAAiB,KAC7C,QAAS,EAAc,QACvB,SAAU,EAAY,SACtB,eAAgB,EAAY,eAC5B,SAAU,EAAY,SACtB,UACA,gBAAiB,EAAa,gBAC9B,yBAA0B,EAAa,yBACvC,YAAa,EAAY,YACzB,YAAa,EAAY,YACzB,UAAW,EAAgB,EAC3B,sBACA,WAAY,EAA2B,CACrC,oBAAqB,EAAa,oBAClC,0BAA2B,EAAa,yBAC1C,CAAC,EACD,UAAW,CACb,CAEiB,EAAE,MAAM,CAC3B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createAnthropicProviderDefinition as e}from"@robota-sdk/agent-provider/anthropic";import{createDeepSeekProviderDefinition as t}from"@robota-sdk/agent-provider/deepseek";import{createGemmaProviderDefinition as n}from"@robota-sdk/agent-provider/gemma";import{createGeminiProviderDefinition as r}from"@robota-sdk/agent-provider/gemini";import{createOpenAIProviderDefinition as i}from"@robota-sdk/agent-provider/openai";import{createQwenProviderDefinition as a}from"@robota-sdk/agent-provider/qwen";const o=[e(),i(),r(),n(),a(),t()];export{o as t};
|
|
2
|
+
//# sourceMappingURL=provider-default-definitions-CKtxv2k0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-default-definitions-CKtxv2k0.js","names":[],"sources":["../../src/utils/provider-default-definitions.ts"],"sourcesContent":["import { createAnthropicProviderDefinition } from '@robota-sdk/agent-provider/anthropic';\nimport { createDeepSeekProviderDefinition } from '@robota-sdk/agent-provider/deepseek';\nimport { createGemmaProviderDefinition } from '@robota-sdk/agent-provider/gemma';\nimport { createGeminiProviderDefinition } from '@robota-sdk/agent-provider/gemini';\nimport { createOpenAIProviderDefinition } from '@robota-sdk/agent-provider/openai';\nimport { createQwenProviderDefinition } from '@robota-sdk/agent-provider/qwen';\nimport type { IProviderDefinition } from './provider-definition.js';\n\nexport const DEFAULT_PROVIDER_DEFINITIONS: readonly IProviderDefinition[] = [\n createAnthropicProviderDefinition(),\n createOpenAIProviderDefinition(),\n createGeminiProviderDefinition(),\n createGemmaProviderDefinition(),\n createQwenProviderDefinition(),\n createDeepSeekProviderDefinition(),\n];\n"],"mappings":"sfAQA,MAAa,EAA+D,CAC1E,EAAkC,EAClC,EAA+B,EAC/B,EAA+B,EAC/B,EAA8B,EAC9B,EAA6B,EAC7B,EAAiC,CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require(`@robota-sdk/agent-provider/anthropic`),t=require(`@robota-sdk/agent-provider/deepseek`),n=require(`@robota-sdk/agent-provider/gemma`),r=require(`@robota-sdk/agent-provider/gemini`),i=require(`@robota-sdk/agent-provider/openai`),a=require(`@robota-sdk/agent-provider/qwen`);const o=[(0,e.createAnthropicProviderDefinition)(),(0,i.createOpenAIProviderDefinition)(),(0,r.createGeminiProviderDefinition)(),(0,n.createGemmaProviderDefinition)(),(0,a.createQwenProviderDefinition)(),(0,t.createDeepSeekProviderDefinition)()];Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`./index.cjs`);let e=require(`@robota-sdk/agent-provider/anthropic`),t=require(`@robota-sdk/agent-provider/deepseek`),n=require(`@robota-sdk/agent-provider/gemma`),r=require(`@robota-sdk/agent-provider/gemini`),i=require(`@robota-sdk/agent-provider/openai`),a=require(`@robota-sdk/agent-provider/qwen`);const o=[(0,e.createAnthropicProviderDefinition)(),(0,i.createOpenAIProviderDefinition)(),(0,r.createGeminiProviderDefinition)(),(0,n.createGemmaProviderDefinition)(),(0,a.createQwenProviderDefinition)(),(0,t.createDeepSeekProviderDefinition)()];Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
let e=require(`node:fs`),t=require(`node:path`);function n(n,r){let i=(0,e.readFileSync)((0,t.resolve)(n,r),`utf8`).trim();if(i.length===0)throw Error(`Task file is empty: ${r}`);return`Task file (${r}):\n${i}`}function r(e,t){let r=[];return t.appendSystemPrompt&&r.push(t.appendSystemPrompt),t.taskFile&&r.push(n(e,t.taskFile)),t.jsonSchema&&r.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),r.length>0?r.join(`
|
|
2
|
+
|
|
3
|
+
`):void 0}exports.buildAppendSystemPrompt=r;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{readFileSync as e}from"node:fs";import{resolve as t}from"node:path";function n(n,r){let i=e(t(n,r),`utf8`).trim();if(i.length===0)throw Error(`Task file is empty: ${r}`);return`Task file (${r}):\n${i}`}function r(e,t){let r=[];return t.appendSystemPrompt&&r.push(t.appendSystemPrompt),t.taskFile&&r.push(n(e,t.taskFile)),t.jsonSchema&&r.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),r.length>0?r.join(`
|
|
2
|
+
|
|
3
|
+
`):void 0}export{r as buildAppendSystemPrompt};
|
|
4
|
+
//# sourceMappingURL=append-system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append-system-prompt.js","names":[],"sources":["../../../src/startup/append-system-prompt.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport interface IAppendSystemPromptOptions {\n appendSystemPrompt?: string;\n taskFile?: string;\n jsonSchema?: string;\n}\n\nfunction readTaskFilePrompt(cwd: string, taskFile: string): string {\n const taskPath = resolve(cwd, taskFile);\n const content = readFileSync(taskPath, 'utf8').trim();\n if (content.length === 0) {\n throw new Error(`Task file is empty: ${taskFile}`);\n }\n return `Task file (${taskFile}):\\n${content}`;\n}\n\nexport function buildAppendSystemPrompt(\n cwd: string,\n opts: IAppendSystemPromptOptions,\n): string | undefined {\n const appendParts: string[] = [];\n if (opts.appendSystemPrompt) appendParts.push(opts.appendSystemPrompt);\n if (opts.taskFile) {\n appendParts.push(readTaskFilePrompt(cwd, opts.taskFile));\n }\n if (opts.jsonSchema)\n appendParts.push(\n `Respond with valid JSON only, matching this JSON schema:\\n${opts.jsonSchema}`,\n );\n return appendParts.length > 0 ? appendParts.join('\\n\\n') : undefined;\n}\n"],"mappings":"2EASA,SAAS,EAAmB,EAAa,EAA0B,CAEjE,IAAM,EAAU,EADC,EAAQ,EAAK,CACM,EAAG,MAAM,EAAE,KAAK,EACpD,GAAI,EAAQ,SAAW,EACrB,MAAU,MAAM,uBAAuB,GAAU,EAEnD,MAAO,cAAc,EAAS,MAAM,GACtC,CAEA,SAAgB,EACd,EACA,EACoB,CACpB,IAAM,EAAwB,CAAC,EAS/B,OARI,EAAK,oBAAoB,EAAY,KAAK,EAAK,kBAAkB,EACjE,EAAK,UACP,EAAY,KAAK,EAAmB,EAAK,EAAK,QAAQ,CAAC,EAErD,EAAK,YACP,EAAY,KACV,6DAA6D,EAAK,YACpE,EACK,EAAY,OAAS,EAAI,EAAY,KAAK;;CAAM,EAAI,IAAA,EAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(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||e.dryRun,positional:e.positional}}function t(e){return{positional:e.positional,language:e.language,permissionMode:e.dryRun?`plan`: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,dryRun:e.dryRun}}function n(e){return{positional:e.positional,format:e.format,summary:e.summary,source:e.source}}function r(e){return{printMode:e.printMode,disableUpdateCheck:e.disableUpdateCheck}}exports.toConfigPhaseOptions=e,exports.toSessionRunOptions=t,exports.toStartupUpdatePolicyOptions=r,exports.toUserLocalCommandOptions=n;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(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||e.dryRun,positional:e.positional}}function t(e){return{positional:e.positional,language:e.language,permissionMode:e.dryRun?`plan`: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,dryRun:e.dryRun}}function n(e){return{positional:e.positional,format:e.format,summary:e.summary,source:e.source}}function r(e){return{printMode:e.printMode,disableUpdateCheck:e.disableUpdateCheck}}export{e as toConfigPhaseOptions,t as toSessionRunOptions,r as toStartupUpdatePolicyOptions,n as toUserLocalCommandOptions};
|
|
2
|
+
//# sourceMappingURL=args-to-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args-to-options.js","names":[],"sources":["../../../src/startup/args-to-options.ts"],"sourcesContent":["import type { IParsedCliArgs, TOutputFormat } from '../utils/cli-args.js';\nimport type { TPermissionMode } from '@robota-sdk/agent-core';\n\nexport interface IConfigPhaseOptions {\n configure: boolean;\n provider?: string;\n settingsScope?: string;\n configureProvider?: string;\n providerType?: string;\n model?: string;\n apiKey?: string;\n apiKeyEnv?: string;\n baseURL?: string;\n setCurrent: boolean;\n printMode: boolean;\n positional: readonly string[];\n}\n\nexport interface ISessionRunOptions {\n positional: readonly string[];\n language?: string;\n permissionMode?: TPermissionMode;\n maxTurns?: number;\n sessionName?: string;\n noSessionPersistence: boolean;\n continueMode: boolean;\n resumeId?: string;\n forkSession: boolean;\n outputFormat?: TOutputFormat;\n bare: boolean;\n allowedTools?: string;\n systemPrompt?: string;\n appendSystemPrompt?: string;\n taskFile?: string;\n jsonSchema?: string;\n dryRun: boolean;\n}\n\nexport interface IUserLocalCommandOptions {\n positional: readonly string[];\n format?: string;\n summary?: string;\n source?: string;\n}\n\nexport interface IStartupUpdatePolicyOptions {\n printMode: boolean;\n disableUpdateCheck: boolean;\n}\n\nexport function toConfigPhaseOptions(args: IParsedCliArgs): IConfigPhaseOptions {\n return {\n configure: args.configure,\n provider: args.provider,\n settingsScope: args.settingsScope,\n configureProvider: args.configureProvider,\n providerType: args.providerType,\n model: args.model,\n apiKey: args.apiKey,\n apiKeyEnv: args.apiKeyEnv,\n baseURL: args.baseURL,\n setCurrent: args.setCurrent,\n printMode: args.printMode || args.dryRun,\n positional: args.positional,\n };\n}\n\nexport function toSessionRunOptions(args: IParsedCliArgs): ISessionRunOptions {\n return {\n positional: args.positional,\n language: args.language,\n permissionMode: args.dryRun ? 'plan' : args.permissionMode,\n maxTurns: args.maxTurns,\n sessionName: args.sessionName,\n noSessionPersistence: args.noSessionPersistence,\n continueMode: args.continueMode,\n resumeId: args.resumeId,\n forkSession: args.forkSession,\n outputFormat: args.outputFormat,\n bare: args.bare,\n allowedTools: args.allowedTools,\n systemPrompt: args.systemPrompt,\n appendSystemPrompt: args.appendSystemPrompt,\n taskFile: args.taskFile,\n jsonSchema: args.jsonSchema,\n dryRun: args.dryRun,\n };\n}\n\nexport function toUserLocalCommandOptions(args: IParsedCliArgs): IUserLocalCommandOptions {\n return {\n positional: args.positional,\n format: args.format,\n summary: args.summary,\n source: args.source,\n };\n}\n\nexport function toStartupUpdatePolicyOptions(args: IParsedCliArgs): IStartupUpdatePolicyOptions {\n return {\n printMode: args.printMode,\n disableUpdateCheck: args.disableUpdateCheck,\n };\n}\n"],"mappings":"AAkDA,SAAgB,EAAqB,EAA2C,CAC9E,MAAO,CACL,UAAW,EAAK,UAChB,SAAU,EAAK,SACf,cAAe,EAAK,cACpB,kBAAmB,EAAK,kBACxB,aAAc,EAAK,aACnB,MAAO,EAAK,MACZ,OAAQ,EAAK,OACb,UAAW,EAAK,UAChB,QAAS,EAAK,QACd,WAAY,EAAK,WACjB,UAAW,EAAK,WAAa,EAAK,OAClC,WAAY,EAAK,UACnB,CACF,CAEA,SAAgB,EAAoB,EAA0C,CAC5E,MAAO,CACL,WAAY,EAAK,WACjB,SAAU,EAAK,SACf,eAAgB,EAAK,OAAS,OAAS,EAAK,eAC5C,SAAU,EAAK,SACf,YAAa,EAAK,YAClB,qBAAsB,EAAK,qBAC3B,aAAc,EAAK,aACnB,SAAU,EAAK,SACf,YAAa,EAAK,YAClB,aAAc,EAAK,aACnB,KAAM,EAAK,KACX,aAAc,EAAK,aACnB,aAAc,EAAK,aACnB,mBAAoB,EAAK,mBACzB,SAAU,EAAK,SACf,WAAY,EAAK,WACjB,OAAQ,EAAK,MACf,CACF,CAEA,SAAgB,EAA0B,EAAgD,CACxF,MAAO,CACL,WAAY,EAAK,WACjB,OAAQ,EAAK,OACb,QAAS,EAAK,QACd,OAAQ,EAAK,MACf,CACF,CAEA,SAAgB,EAA6B,EAAmD,CAC9F,MAAO,CACL,UAAW,EAAK,UAChB,mBAAoB,EAAK,kBAC3B,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require(`@robota-sdk/agent-framework`),t=require(`@robota-sdk/agent-command`),n=require(`@robota-sdk/agent-provider`);function r(r,i={}){let a={settings:{read:()=>(0,e.readSettings)((0,e.getUserSettingsPath)()),write:t=>(0,e.writeSettings)((0,e.getUserSettingsPath)(),t)},plugin:(0,t.createDefaultPluginCommandAdapter)(r)},o=i.providerDefinitions??(0,n.createDefaultProviderDefinitions)();return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...(0,t.createDefaultCommandModules)({cwd:r,providerDefinitions:o,providerSettingsAdapter:{readMergedSettings:()=>(0,e.readMergedProviderSettings)(r),readTargetSettings:()=>(0,e.readSettings)((0,e.resolveProviderSettingsWriteTargetPath)(r)),writeTargetSettings:t=>(0,e.writeSettings)((0,e.resolveProviderSettingsWriteTargetPath)(r),t)}}),...i.commandModules??[]],reloadPluginCommandSource:t.reloadPluginCommandSource}}exports.createCommandSetup=r;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ICommandModule } from "@robota-sdk/agent-framework";
|
|
2
|
+
import { IProviderDefinition } from "@robota-sdk/agent-core";
|
|
3
|
+
|
|
4
|
+
//#region src/startup/command-setup.d.ts
|
|
5
|
+
interface IStartCliOptions {
|
|
6
|
+
commandModules?: readonly ICommandModule[];
|
|
7
|
+
providerDefinitions?: readonly IProviderDefinition[];
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { IStartCliOptions };
|
|
11
|
+
//# sourceMappingURL=command-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-setup.d.ts","names":[],"sources":["../../../src/startup/command-setup.ts"],"mappings":";;;;UAqBiB,gBAAA;EACf,cAAA,YAA0B,cAAA;EAC1B,mBAAA,YAA+B,mBAAmB;AAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getUserSettingsPath as e,readMergedProviderSettings as t,readSettings as n,resolveProviderSettingsWriteTargetPath as r,writeSettings as i}from"@robota-sdk/agent-framework";import{createDefaultCommandModules as a,createDefaultPluginCommandAdapter as o,reloadPluginCommandSource as s}from"@robota-sdk/agent-command";import{createDefaultProviderDefinitions as c}from"@robota-sdk/agent-provider";function l(l,u={}){let d={settings:{read:()=>n(e()),write:t=>i(e(),t)},plugin:o(l)},f=u.providerDefinitions??c();return{commandHostAdapters:d,providerDefinitions:f,commandModules:[...a({cwd:l,providerDefinitions:f,providerSettingsAdapter:{readMergedSettings:()=>t(l),readTargetSettings:()=>n(r(l)),writeTargetSettings:e=>i(r(l),e)}}),...u.commandModules??[]],reloadPluginCommandSource:s}}export{l as createCommandSetup};
|
|
2
|
+
//# sourceMappingURL=command-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-setup.js","names":[],"sources":["../../../src/startup/command-setup.ts"],"sourcesContent":["import type { IProviderDefinition } from '@robota-sdk/agent-core';\nimport {\n getUserSettingsPath,\n readMergedProviderSettings,\n readSettings,\n resolveProviderSettingsWriteTargetPath,\n writeSettings,\n} from '@robota-sdk/agent-framework';\nimport type {\n ICommandHostAdapters,\n ICommandModule,\n TProviderSettingsDocument,\n} from '@robota-sdk/agent-framework';\nimport type { CommandRegistry } from '@robota-sdk/agent-framework';\nimport {\n createDefaultCommandModules,\n createDefaultPluginCommandAdapter,\n reloadPluginCommandSource,\n} from '@robota-sdk/agent-command';\nimport { createDefaultProviderDefinitions } from '@robota-sdk/agent-provider';\n\nexport interface IStartCliOptions {\n commandModules?: readonly ICommandModule[];\n providerDefinitions?: readonly IProviderDefinition[];\n}\n\nexport interface ICommandSetup {\n commandHostAdapters: ICommandHostAdapters;\n providerDefinitions: readonly IProviderDefinition[];\n commandModules: readonly ICommandModule[];\n reloadPluginCommandSource: (registry: CommandRegistry) => void;\n}\n\nexport function createCommandSetup(cwd: string, options: IStartCliOptions = {}): ICommandSetup {\n const commandHostAdapters: ICommandHostAdapters = {\n settings: {\n read: () => readSettings(getUserSettingsPath()),\n write: (settings) => writeSettings(getUserSettingsPath(), settings),\n },\n plugin: createDefaultPluginCommandAdapter(cwd),\n };\n const providerDefinitions = options.providerDefinitions ?? createDefaultProviderDefinitions();\n const providerSettingsAdapter = {\n readMergedSettings: () => readMergedProviderSettings(cwd),\n readTargetSettings: () =>\n readSettings(resolveProviderSettingsWriteTargetPath(cwd)) as TProviderSettingsDocument,\n writeTargetSettings: (settings: TProviderSettingsDocument) =>\n writeSettings(resolveProviderSettingsWriteTargetPath(cwd), settings),\n };\n const commandModules: readonly ICommandModule[] = [\n ...createDefaultCommandModules({ cwd, providerDefinitions, providerSettingsAdapter }),\n ...(options.commandModules ?? []),\n ];\n return { commandHostAdapters, providerDefinitions, commandModules, reloadPluginCommandSource };\n}\n"],"mappings":"+YAiCA,SAAgB,EAAmB,EAAa,EAA4B,CAAC,EAAkB,CAC7F,IAAM,EAA4C,CAChD,SAAU,CACR,SAAY,EAAa,EAAoB,CAAC,EAC9C,MAAQ,GAAa,EAAc,EAAoB,EAAG,CAAQ,CACpE,EACA,OAAQ,EAAkC,CAAG,CAC/C,EACM,EAAsB,EAAQ,qBAAuB,EAAiC,EAY5F,MAAO,CAAE,sBAAqB,sBAAqB,eAAA,CAHjD,GAAG,EAA4B,CAAE,MAAK,sBAAqB,wBAAA,CAP3D,uBAA0B,EAA2B,CAAG,EACxD,uBACE,EAAa,EAAuC,CAAG,CAAC,EAC1D,oBAAsB,GACpB,EAAc,EAAuC,CAAG,EAAG,CAAQ,CAGY,CAAE,CAAC,EACpF,GAAI,EAAQ,gBAAkB,CAAC,CAE+B,EAAG,2BAA0B,CAC/F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./provider-startup.cjs`);let t=require(`@robota-sdk/agent-transport/headless`);async function n(n,r,i,a,o){return r.configure?(await e.runInteractiveProviderSetup(n,r,t.promptInput,a,i.providerDefinitions),{handled:!0}):e.handleProviderConfigurationArgs(n,r,a,i.providerDefinitions)?{handled:!0}:(await e.ensureConfig(n,r,t.promptInput,a,i.providerDefinitions,o),{handled:!1})}exports.handleConfigPhase=n;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ensureConfig as e,handleProviderConfigurationArgs as t,runInteractiveProviderSetup as n}from"./provider-startup.js";import{promptInput as r}from"@robota-sdk/agent-transport/headless";async function i(i,a,o,s,c){return a.configure?(await n(i,a,r,s,o.providerDefinitions),{handled:!0}):t(i,a,s,o.providerDefinitions)?{handled:!0}:(await e(i,a,r,s,o.providerDefinitions,c),{handled:!1})}export{i as handleConfigPhase};
|
|
2
|
+
//# sourceMappingURL=config-phase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-phase.js","names":[],"sources":["../../../src/startup/config-phase.ts"],"sourcesContent":["import type { ITerminalOutput } from '@robota-sdk/agent-core';\nimport { promptInput } from '@robota-sdk/agent-transport/headless';\nimport type { IConfigPhaseOptions } from './args-to-options.js';\nimport type { ICommandSetup } from './command-setup.js';\nimport {\n ensureConfig,\n handleProviderConfigurationArgs,\n runInteractiveProviderSetup,\n} from './provider-startup.js';\n\nexport type TConfigPhaseResult = { handled: true } | { handled: false };\n\nexport async function handleConfigPhase(\n cwd: string,\n opts: IConfigPhaseOptions,\n commandSetup: ICommandSetup,\n terminal: ITerminalOutput,\n isInteractive: boolean,\n): Promise<TConfigPhaseResult> {\n if (opts.configure) {\n await runInteractiveProviderSetup(\n cwd,\n opts,\n promptInput,\n terminal,\n commandSetup.providerDefinitions,\n );\n return { handled: true };\n }\n\n if (handleProviderConfigurationArgs(cwd, opts, terminal, commandSetup.providerDefinitions)) {\n return { handled: true };\n }\n\n await ensureConfig(\n cwd,\n opts,\n promptInput,\n terminal,\n commandSetup.providerDefinitions,\n isInteractive,\n );\n\n return { handled: false };\n}\n"],"mappings":"8LAYA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EAC6B,CAyB7B,OAxBI,EAAK,WACP,MAAM,EACJ,EACA,EACA,EACA,EACA,EAAa,mBACf,EACO,CAAE,QAAS,EAAK,GAGrB,EAAgC,EAAK,EAAM,EAAU,EAAa,mBAAmB,EAChF,CAAE,QAAS,EAAK,GAGzB,MAAM,EACJ,EACA,EACA,EACA,EACA,EAAa,oBACb,CACF,EAEO,CAAE,QAAS,EAAM,EAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../utils/cli-args.cjs`),t=require(`../init/init-command.cjs`),n=require(`./reset-config.cjs`);let r=require(`@robota-sdk/agent-framework`);async function i(i,a){if(i.positional[0]===`init`)return await t.runInitCommand(a.cwd,a.terminal),{handled:!0};if(i.help)return a.terminal.write(e.printHelp()),{handled:!0};if(i.version)return a.terminal.writeLine(`robota ${a.version}`),{handled:!0};if(i.checkUpdate){let e=await(0,r.checkForCliUpdate)({currentVersion:a.version,force:!0}),t=(0,r.formatCliUpdateCheckMessage)(e);if(e.status===`error`)throw Error(t);return a.terminal.writeLine(t),{handled:!0}}return i.reset?(n.runResetConfig(a.terminal),{handled:!0}):{handled:!1}}exports.handlePreflightCommands=i;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{printHelp as e}from"../utils/cli-args.js";import{runInitCommand as t}from"../init/init-command.js";import{runResetConfig as n}from"./reset-config.js";import{checkForCliUpdate as r,formatCliUpdateCheckMessage as i}from"@robota-sdk/agent-framework";async function a(a,o){if(a.positional[0]===`init`)return await t(o.cwd,o.terminal),{handled:!0};if(a.help)return o.terminal.write(e()),{handled:!0};if(a.version)return o.terminal.writeLine(`robota ${o.version}`),{handled:!0};if(a.checkUpdate){let e=await r({currentVersion:o.version,force:!0}),t=i(e);if(e.status===`error`)throw Error(t);return o.terminal.writeLine(t),{handled:!0}}return a.reset?(n(o.terminal),{handled:!0}):{handled:!1}}export{a as handlePreflightCommands};
|
|
2
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","names":[],"sources":["../../../src/startup/preflight.ts"],"sourcesContent":["import type { ITerminalOutput } from '@robota-sdk/agent-core';\nimport { checkForCliUpdate, formatCliUpdateCheckMessage } from '@robota-sdk/agent-framework';\nimport type { IParsedCliArgs } from '../utils/cli-args.js';\nimport { printHelp } from '../utils/cli-args.js';\nimport { runInitCommand } from '../init/init-command.js';\nimport { runResetConfig } from './reset-config.js';\n\nexport type TPreflightResult = { handled: true } | { handled: false };\n\nexport interface IPreflightContext {\n version: string;\n terminal: ITerminalOutput;\n cwd: string;\n}\n\nexport async function handlePreflightCommands(\n args: IParsedCliArgs,\n ctx: IPreflightContext,\n): Promise<TPreflightResult> {\n if (args.positional[0] === 'init') {\n await runInitCommand(ctx.cwd, ctx.terminal);\n return { handled: true };\n }\n if (args.help) {\n ctx.terminal.write(printHelp());\n return { handled: true };\n }\n if (args.version) {\n ctx.terminal.writeLine(`robota ${ctx.version}`);\n return { handled: true };\n }\n if (args.checkUpdate) {\n const result = await checkForCliUpdate({ currentVersion: ctx.version, force: true });\n const message = formatCliUpdateCheckMessage(result);\n if (result.status === 'error') {\n throw new Error(message);\n }\n ctx.terminal.writeLine(message);\n return { handled: true };\n }\n if (args.reset) {\n runResetConfig(ctx.terminal);\n return { handled: true };\n }\n return { handled: false };\n}\n"],"mappings":"8PAeA,eAAsB,EACpB,EACA,EAC2B,CAC3B,GAAI,EAAK,WAAW,KAAO,OAEzB,OADA,MAAM,EAAe,EAAI,IAAK,EAAI,QAAQ,EACnC,CAAE,QAAS,EAAK,EAEzB,GAAI,EAAK,KAEP,OADA,EAAI,SAAS,MAAM,EAAU,CAAC,EACvB,CAAE,QAAS,EAAK,EAEzB,GAAI,EAAK,QAEP,OADA,EAAI,SAAS,UAAU,UAAU,EAAI,SAAS,EACvC,CAAE,QAAS,EAAK,EAEzB,GAAI,EAAK,YAAa,CACpB,IAAM,EAAS,MAAM,EAAkB,CAAE,eAAgB,EAAI,QAAS,MAAO,EAAK,CAAC,EAC7E,EAAU,EAA4B,CAAM,EAClD,GAAI,EAAO,SAAW,QACpB,MAAU,MAAM,CAAO,EAGzB,OADA,EAAI,SAAS,UAAU,CAAO,EACvB,CAAE,QAAS,EAAK,CACzB,CAKA,OAJI,EAAK,OACP,EAAe,EAAI,QAAQ,EACpB,CAAE,QAAS,EAAK,GAElB,CAAE,QAAS,EAAM,CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./subagent-setup.cjs`);let t=require(`@robota-sdk/agent-framework`);function n(n,r,i){let a=r.provider?{providerOverride:r.provider,providerDefinitions:i.providerDefinitions}:{providerDefinitions:i.providerDefinitions},o=(0,t.readProviderSettings)(n,a),s=r.model??o.model,c=(0,t.createProviderFromSettings)(n,r.model,a),l=r.provider??(0,t.readMergedProviderSettings)(n).currentProvider,{subagentRunnerFactory:u}=e.createSubagentSetup({providerConfig:{...o,model:s},logsDir:(0,t.projectPaths)(n).logs});return{provider:c,providerSettings:o,modelId:s,activeProfileName:l,subagentRunnerFactory:u}}exports.createProviderSetup=n;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createSubagentSetup as e}from"./subagent-setup.js";import{createProviderFromSettings as t,projectPaths as n,readMergedProviderSettings as r,readProviderSettings as i}from"@robota-sdk/agent-framework";function a(a,o,s){let c=o.provider?{providerOverride:o.provider,providerDefinitions:s.providerDefinitions}:{providerDefinitions:s.providerDefinitions},l=i(a,c),u=o.model??l.model,d=t(a,o.model,c),f=o.provider??r(a).currentProvider,{subagentRunnerFactory:p}=e({providerConfig:{...l,model:u},logsDir:n(a).logs});return{provider:d,providerSettings:l,modelId:u,activeProfileName:f,subagentRunnerFactory:p}}export{a as createProviderSetup};
|
|
2
|
+
//# sourceMappingURL=provider-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-setup.js","names":[],"sources":["../../../src/startup/provider-setup.ts"],"sourcesContent":["import type { IAIProvider, IProviderConfig } from '@robota-sdk/agent-core';\nimport type { TSubagentRunnerFactory } from '@robota-sdk/agent-framework';\nimport {\n projectPaths,\n readMergedProviderSettings,\n readProviderSettings,\n createProviderFromSettings,\n} from '@robota-sdk/agent-framework';\nimport type { IConfigPhaseOptions } from './args-to-options.js';\nimport type { ICommandSetup } from './command-setup.js';\nimport { createSubagentSetup } from './subagent-setup.js';\n\nexport interface IProviderSetup {\n provider: IAIProvider;\n providerSettings: IProviderConfig;\n modelId: string;\n activeProfileName: string | undefined;\n subagentRunnerFactory: TSubagentRunnerFactory;\n}\n\nexport function createProviderSetup(\n cwd: string,\n opts: IConfigPhaseOptions,\n commandSetup: ICommandSetup,\n): IProviderSetup {\n const providerOptions = opts.provider\n ? { providerOverride: opts.provider, providerDefinitions: commandSetup.providerDefinitions }\n : { providerDefinitions: commandSetup.providerDefinitions };\n\n const providerSettings = readProviderSettings(cwd, providerOptions);\n const modelId = opts.model ?? providerSettings.model;\n const provider = createProviderFromSettings(cwd, opts.model, providerOptions);\n const activeProfileName = opts.provider ?? readMergedProviderSettings(cwd).currentProvider;\n\n const { subagentRunnerFactory } = createSubagentSetup({\n providerConfig: { ...providerSettings, model: modelId },\n logsDir: projectPaths(cwd).logs,\n });\n\n return { provider, providerSettings, modelId, activeProfileName, subagentRunnerFactory };\n}\n"],"mappings":"+MAoBA,SAAgB,EACd,EACA,EACA,EACgB,CAChB,IAAM,EAAkB,EAAK,SACzB,CAAE,iBAAkB,EAAK,SAAU,oBAAqB,EAAa,mBAAoB,EACzF,CAAE,oBAAqB,EAAa,mBAAoB,EAEtD,EAAmB,EAAqB,EAAK,CAAe,EAC5D,EAAU,EAAK,OAAS,EAAiB,MACzC,EAAW,EAA2B,EAAK,EAAK,MAAO,CAAe,EACtE,EAAoB,EAAK,UAAY,EAA2B,CAAG,EAAE,gBAErE,CAAE,yBAA0B,EAAoB,CACpD,eAAgB,CAAE,GAAG,EAAkB,MAAO,CAAQ,EACtD,QAAS,EAAa,CAAG,EAAE,IAC7B,CAAC,EAED,MAAO,CAAE,WAAU,mBAAkB,UAAS,oBAAmB,uBAAsB,CACzF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require(`@robota-sdk/agent-framework`),t=require(`@robota-sdk/agent-command`),n=require(`@robota-sdk/agent-core`);function r(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function i(t,n,i,a){let o=(0,e.resolveSettingsPathForScope)(t,r(n.settingsScope));return n.configureProvider?((0,e.applyProviderConfiguration)(o,s(n),{providerDefinitions:a}),i.writeLine(`Provider profile saved to ${o}`),!n.printMode&&n.positional.length===0):n.provider&&n.setCurrent?((0,e.applyProviderSwitch)(n.settingsScope===void 0?(0,e.resolveProviderSettingsWriteTargetPath)(t):o,n.provider,{knownProviders:(0,e.readMergedProviderSettings)(t).providers}),i.writeLine(`Current provider set to ${n.provider}`),!n.printMode&&n.positional.length===0):!1}async function a(e,n,i,a,o,s){await(0,t.ensureProviderConfig)(e,{provider:n.provider,settingsScope:r(n.settingsScope)},i,a,o,{formatError:c,isInteractive:()=>s})}async function o(e,n,i,a,o){await(0,t.runProviderStartupSetup)(e,{settingsScope:r(n.settingsScope)},i,a,o)}function s(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 c(e){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${(0,n.formatSupportedProviderTypes)(e)}`,...e.map(l)].join(`
|
|
2
|
+
`)}function l(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(` `)}`}exports.ensureConfig=a,exports.handleProviderConfigurationArgs=i,exports.runInteractiveProviderSetup=o;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{applyProviderConfiguration as e,applyProviderSwitch as t,readMergedProviderSettings as n,resolveProviderSettingsWriteTargetPath as r,resolveSettingsPathForScope as i}from"@robota-sdk/agent-framework";import{ensureProviderConfig as a,runProviderStartupSetup as o}from"@robota-sdk/agent-command";import{formatSupportedProviderTypes as s}from"@robota-sdk/agent-core";function c(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function l(a,o,s,l){let u=i(a,c(o.settingsScope));return o.configureProvider?(e(u,f(o),{providerDefinitions:l}),s.writeLine(`Provider profile saved to ${u}`),!o.printMode&&o.positional.length===0):o.provider&&o.setCurrent?(t(o.settingsScope===void 0?r(a):u,o.provider,{knownProviders:n(a).providers}),s.writeLine(`Current provider set to ${o.provider}`),!o.printMode&&o.positional.length===0):!1}async function u(e,t,n,r,i,o){await a(e,{provider:t.provider,settingsScope:c(t.settingsScope)},n,r,i,{formatError:p,isInteractive:()=>o})}async function d(e,t,n,r,i){await o(e,{settingsScope:c(t.settingsScope)},n,r,i)}function f(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 p(e){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${s(e)}`,...e.map(m)].join(`
|
|
2
|
+
`)}function m(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(` `)}`}export{u as ensureConfig,l as handleProviderConfigurationArgs,d as runInteractiveProviderSetup};
|
|
3
|
+
//# sourceMappingURL=provider-startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-startup.js","names":[],"sources":["../../../src/startup/provider-startup.ts"],"sourcesContent":["import { formatSupportedProviderTypes, type IProviderDefinition } from '@robota-sdk/agent-core';\nimport type { IConfigPhaseOptions } from './args-to-options.js';\nimport {\n applyProviderConfiguration,\n applyProviderSwitch,\n readMergedProviderSettings,\n resolveProviderSettingsWriteTargetPath,\n resolveSettingsPathForScope,\n} from '@robota-sdk/agent-framework';\nimport type { TSettingsScope } from '@robota-sdk/agent-framework';\nimport { type IProviderSetupInput } from '@robota-sdk/agent-framework';\nimport {\n ensureProviderConfig,\n runProviderStartupSetup,\n type TPromptInput,\n} from '@robota-sdk/agent-command';\nimport type { ITerminalOutput } from '@robota-sdk/agent-core';\n\nfunction validateSettingsScope(scope: string | undefined): TSettingsScope | undefined {\n if (scope === undefined || scope === 'user' || scope === 'project-local') {\n return scope as TSettingsScope | undefined;\n }\n throw new Error(`Invalid --settings-scope \"${scope}\". Valid: user | project-local`);\n}\n\nexport function handleProviderConfigurationArgs(\n cwd: string,\n opts: IConfigPhaseOptions,\n terminal: ITerminalOutput,\n providerDefinitions: readonly IProviderDefinition[],\n): boolean {\n const settingsPath = resolveSettingsPathForScope(cwd, validateSettingsScope(opts.settingsScope));\n if (opts.configureProvider) {\n applyProviderConfiguration(settingsPath, buildSetupInputFromOptions(opts), {\n providerDefinitions,\n });\n terminal.writeLine(`Provider profile saved to ${settingsPath}`);\n return !opts.printMode && opts.positional.length === 0;\n }\n if (opts.provider && opts.setCurrent) {\n const switchSettingsPath =\n opts.settingsScope === undefined ? resolveProviderSettingsWriteTargetPath(cwd) : settingsPath;\n applyProviderSwitch(switchSettingsPath, opts.provider, {\n knownProviders: readMergedProviderSettings(cwd).providers,\n });\n terminal.writeLine(`Current provider set to ${opts.provider}`);\n return !opts.printMode && opts.positional.length === 0;\n }\n return false;\n}\n\nexport async function ensureConfig(\n cwd: string,\n opts: IConfigPhaseOptions,\n promptInput: TPromptInput,\n terminal: ITerminalOutput,\n providerDefinitions: readonly IProviderDefinition[],\n isInteractive: boolean,\n): Promise<void> {\n await ensureProviderConfig(\n cwd,\n { provider: opts.provider, settingsScope: validateSettingsScope(opts.settingsScope) },\n promptInput,\n terminal,\n providerDefinitions,\n {\n formatError: formatMissingProviderConfigMessage,\n isInteractive: () => isInteractive,\n },\n );\n}\n\nexport async function runInteractiveProviderSetup(\n cwd: string,\n opts: IConfigPhaseOptions,\n promptInput: TPromptInput,\n terminal: ITerminalOutput,\n providerDefinitions: readonly IProviderDefinition[],\n): Promise<void> {\n await runProviderStartupSetup(\n cwd,\n { settingsScope: validateSettingsScope(opts.settingsScope) },\n promptInput,\n terminal,\n providerDefinitions,\n );\n}\n\nfunction buildSetupInputFromOptions(opts: IConfigPhaseOptions): IProviderSetupInput {\n const type = opts.providerType ?? opts.configureProvider;\n if (!opts.configureProvider || !type) {\n throw new Error('--configure-provider requires a provider profile and --type');\n }\n return {\n profile: opts.configureProvider,\n type,\n ...(opts.model !== undefined && { model: opts.model }),\n ...(opts.apiKey !== undefined && { apiKey: opts.apiKey }),\n ...(opts.apiKeyEnv !== undefined && { apiKeyEnv: opts.apiKeyEnv }),\n ...(opts.baseURL !== undefined && { baseURL: opts.baseURL }),\n setCurrent: opts.setCurrent,\n };\n}\n\nexport function formatMissingProviderConfigMessage(\n providerDefinitions: readonly IProviderDefinition[],\n): string {\n return [\n 'No provider configuration found.',\n 'Run `robota --configure` in an interactive terminal, or configure a provider:',\n `Supported providers: ${formatSupportedProviderTypes(providerDefinitions)}`,\n ...providerDefinitions.map(formatConfigureProviderExample),\n ].join('\\n');\n}\n\nfunction formatConfigureProviderExample(definition: IProviderDefinition): string {\n const flags = [\n `robota --configure-provider ${definition.type}`,\n `--type ${definition.type}`,\n ...(definition.defaults?.baseURL !== undefined ? ['--base-url <url>'] : []),\n '--model <model>',\n ...(definition.requiresApiKey === true ? ['--api-key-env <ENV_NAME>'] : []),\n '--set-current',\n ];\n return ` ${flags.join(' ')}`;\n}\n"],"mappings":"mXAkBA,SAAS,EAAsB,EAAuD,CACpF,GAAI,IAAU,IAAA,IAAa,IAAU,QAAU,IAAU,gBACvD,OAAO,EAET,MAAU,MAAM,6BAA6B,EAAM,+BAA+B,CACpF,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACS,CACT,IAAM,EAAe,EAA4B,EAAK,EAAsB,EAAK,aAAa,CAAC,EAiB/F,OAhBI,EAAK,mBACP,EAA2B,EAAc,EAA2B,CAAI,EAAG,CACzE,qBACF,CAAC,EACD,EAAS,UAAU,6BAA6B,GAAc,EACvD,CAAC,EAAK,WAAa,EAAK,WAAW,SAAW,GAEnD,EAAK,UAAY,EAAK,YAGxB,EADE,EAAK,gBAAkB,IAAA,GAAY,EAAuC,CAAG,EAAI,EAC3C,EAAK,SAAU,CACrD,eAAgB,EAA2B,CAAG,EAAE,SAClD,CAAC,EACD,EAAS,UAAU,2BAA2B,EAAK,UAAU,EACtD,CAAC,EAAK,WAAa,EAAK,WAAW,SAAW,GAEhD,EACT,CAEA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACA,EACe,CACf,MAAM,EACJ,EACA,CAAE,SAAU,EAAK,SAAU,cAAe,EAAsB,EAAK,aAAa,CAAE,EACpF,EACA,EACA,EACA,CACE,YAAa,EACb,kBAAqB,CACvB,CACF,CACF,CAEA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACe,CACf,MAAM,EACJ,EACA,CAAE,cAAe,EAAsB,EAAK,aAAa,CAAE,EAC3D,EACA,EACA,CACF,CACF,CAEA,SAAS,EAA2B,EAAgD,CAClF,IAAM,EAAO,EAAK,cAAgB,EAAK,kBACvC,GAAI,CAAC,EAAK,mBAAqB,CAAC,EAC9B,MAAU,MAAM,6DAA6D,EAE/E,MAAO,CACL,QAAS,EAAK,kBACd,OACA,GAAI,EAAK,QAAU,IAAA,IAAa,CAAE,MAAO,EAAK,KAAM,EACpD,GAAI,EAAK,SAAW,IAAA,IAAa,CAAE,OAAQ,EAAK,MAAO,EACvD,GAAI,EAAK,YAAc,IAAA,IAAa,CAAE,UAAW,EAAK,SAAU,EAChE,GAAI,EAAK,UAAY,IAAA,IAAa,CAAE,QAAS,EAAK,OAAQ,EAC1D,WAAY,EAAK,UACnB,CACF,CAEA,SAAgB,EACd,EACQ,CACR,MAAO,CACL,mCACA,gFACA,wBAAwB,EAA6B,CAAmB,IACxE,GAAG,EAAoB,IAAI,CAA8B,CAC3D,EAAE,KAAK;CAAI,CACb,CAEA,SAAS,EAA+B,EAAyC,CAS/E,MAAO,KAAK,CAPV,+BAA+B,EAAW,OAC1C,UAAU,EAAW,OACrB,GAAI,EAAW,UAAU,UAAY,IAAA,GAAmC,CAAC,EAAxB,CAAC,kBAAkB,EACpE,kBACA,GAAI,EAAW,iBAAmB,GAAO,CAAC,0BAA0B,EAAI,CAAC,EACzE,eAEc,EAAE,KAAK,GAAG,GAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require(`@robota-sdk/agent-framework`);function t(t){let n=(0,e.resetUserConfig)();n.deleted?t.writeLine(`Deleted ${n.path}`):t.writeLine(`No user settings found.`)}exports.runResetConfig=t;
|