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

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.
Files changed (74) hide show
  1. package/README.md +116 -35
  2. package/bin/robota.cjs +5 -1
  3. package/dist/node/bin.d.ts +1 -0
  4. package/dist/node/bin.js +23 -8
  5. package/dist/node/bin.js.map +1 -1
  6. package/dist/node/cli.cjs +1 -0
  7. package/dist/node/cli.d.ts +7 -0
  8. package/dist/node/cli.d.ts.map +1 -0
  9. package/dist/node/cli.js +2 -0
  10. package/dist/node/cli.js.map +1 -0
  11. package/dist/node/constants.cjs +1 -0
  12. package/dist/node/constants.js +2 -0
  13. package/dist/node/constants.js.map +1 -0
  14. package/dist/node/index.cjs +17 -8
  15. package/dist/node/index.d.ts.map +1 -1
  16. package/dist/node/index.js +17 -8
  17. package/dist/node/index.js.map +1 -1
  18. package/dist/node/init/init-command.cjs +32 -0
  19. package/dist/node/init/init-command.js +33 -0
  20. package/dist/node/init/init-command.js.map +1 -0
  21. package/dist/node/modes/print-mode.cjs +6 -0
  22. package/dist/node/modes/print-mode.js +7 -0
  23. package/dist/node/modes/print-mode.js.map +1 -0
  24. package/dist/node/modes/shell-exec.cjs +1 -0
  25. package/dist/node/modes/shell-exec.js +2 -0
  26. package/dist/node/modes/shell-exec.js.map +1 -0
  27. package/dist/node/modes/tui-mode.cjs +1 -0
  28. package/dist/node/modes/tui-mode.js +2 -0
  29. package/dist/node/modes/tui-mode.js.map +1 -0
  30. package/dist/node/startup/append-system-prompt.cjs +3 -0
  31. package/dist/node/startup/append-system-prompt.js +4 -0
  32. package/dist/node/startup/append-system-prompt.js.map +1 -0
  33. package/dist/node/startup/args-to-options.cjs +1 -0
  34. package/dist/node/startup/args-to-options.js +2 -0
  35. package/dist/node/startup/args-to-options.js.map +1 -0
  36. package/dist/node/startup/command-setup.cjs +1 -0
  37. package/dist/node/startup/command-setup.d.ts +11 -0
  38. package/dist/node/startup/command-setup.d.ts.map +1 -0
  39. package/dist/node/startup/command-setup.js +2 -0
  40. package/dist/node/startup/command-setup.js.map +1 -0
  41. package/dist/node/startup/config-phase.cjs +1 -0
  42. package/dist/node/startup/config-phase.js +2 -0
  43. package/dist/node/startup/config-phase.js.map +1 -0
  44. package/dist/node/startup/preflight.cjs +1 -0
  45. package/dist/node/startup/preflight.js +2 -0
  46. package/dist/node/startup/preflight.js.map +1 -0
  47. package/dist/node/startup/provider-setup.cjs +1 -0
  48. package/dist/node/startup/provider-setup.js +2 -0
  49. package/dist/node/startup/provider-setup.js.map +1 -0
  50. package/dist/node/startup/provider-startup.cjs +2 -0
  51. package/dist/node/startup/provider-startup.js +3 -0
  52. package/dist/node/startup/provider-startup.js.map +1 -0
  53. package/dist/node/startup/reset-config.cjs +1 -0
  54. package/dist/node/startup/reset-config.js +2 -0
  55. package/dist/node/startup/reset-config.js.map +1 -0
  56. package/dist/node/startup/session-setup.cjs +1 -0
  57. package/dist/node/startup/session-setup.js +2 -0
  58. package/dist/node/startup/session-setup.js.map +1 -0
  59. package/dist/node/startup/subagent-setup.cjs +1 -0
  60. package/dist/node/startup/subagent-setup.js +2 -0
  61. package/dist/node/startup/subagent-setup.js.map +1 -0
  62. package/dist/node/startup/update-notice.cjs +1 -0
  63. package/dist/node/startup/update-notice.js +2 -0
  64. package/dist/node/startup/update-notice.js.map +1 -0
  65. package/dist/node/startup/version.cjs +1 -0
  66. package/dist/node/startup/version.js +2 -0
  67. package/dist/node/startup/version.js.map +1 -0
  68. package/dist/node/user-local-direct-command.cjs +1 -0
  69. package/dist/node/user-local-direct-command.js +2 -0
  70. package/dist/node/user-local-direct-command.js.map +1 -0
  71. package/dist/node/utils/cli-args.cjs +35 -0
  72. package/dist/node/utils/cli-args.js +36 -0
  73. package/dist/node/utils/cli-args.js.map +1 -0
  74. package/package.json +25 -8
@@ -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,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;
@@ -0,0 +1,2 @@
1
+ import{resetUserConfig as e}from"@robota-sdk/agent-framework";function t(t){let n=e();n.deleted?t.writeLine(`Deleted ${n.path}`):t.writeLine(`No user settings found.`)}export{t as runResetConfig};
2
+ //# sourceMappingURL=reset-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset-config.js","names":[],"sources":["../../../src/startup/reset-config.ts"],"sourcesContent":["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"],"mappings":"8DAGA,SAAgB,EAAe,EAAiC,CAC9D,IAAM,EAAS,EAAgB,EAC3B,EAAO,QACT,EAAS,UAAU,WAAW,EAAO,MAAM,EAE3C,EAAS,UAAU,yBAAyB,CAEhD"}
@@ -0,0 +1 @@
1
+ let e=require(`@robota-sdk/agent-framework`);function t(t,n){let r=n.noSessionPersistence?void 0:(0,e.createProjectSessionStore)(t),i,a=!1;if(n.continueMode)i=(0,e.resolveLatestSessionId)(r,t);else if(n.resumeId!==void 0){if(n.resumeId===``)a=!0;else if(i=(0,e.resolveSessionIdByIdOrName)(r,n.resumeId),i===void 0)throw Error(`Session not found: ${n.resumeId}`)}return{sessionStore:r,resumeSessionId:i,showSessionPickerOnStart:a}}exports.createSessionSetup=t;
@@ -0,0 +1,2 @@
1
+ import{createProjectSessionStore as e,resolveLatestSessionId as t,resolveSessionIdByIdOrName as n}from"@robota-sdk/agent-framework";function r(r,i){let a=i.noSessionPersistence?void 0:e(r),o,s=!1;if(i.continueMode)o=t(a,r);else if(i.resumeId!==void 0){if(i.resumeId===``)s=!0;else if(o=n(a,i.resumeId),o===void 0)throw Error(`Session not found: ${i.resumeId}`)}return{sessionStore:a,resumeSessionId:o,showSessionPickerOnStart:s}}export{r as createSessionSetup};
2
+ //# sourceMappingURL=session-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-setup.js","names":[],"sources":["../../../src/startup/session-setup.ts"],"sourcesContent":["import type { IInteractiveSessionStore } from '@robota-sdk/agent-framework';\nimport {\n createProjectSessionStore,\n resolveLatestSessionId,\n resolveSessionIdByIdOrName,\n} from '@robota-sdk/agent-framework';\nimport type { ISessionRunOptions } from './args-to-options.js';\n\nexport interface ISessionSetup {\n sessionStore: IInteractiveSessionStore | undefined;\n resumeSessionId: string | undefined;\n showSessionPickerOnStart: boolean;\n}\n\nexport function createSessionSetup(cwd: string, opts: ISessionRunOptions): ISessionSetup {\n const sessionStore = opts.noSessionPersistence ? undefined : createProjectSessionStore(cwd);\n\n let resumeSessionId: string | undefined;\n let showSessionPickerOnStart = false;\n\n if (opts.continueMode) {\n resumeSessionId = resolveLatestSessionId(sessionStore, cwd);\n } else if (opts.resumeId !== undefined) {\n if (opts.resumeId === '') {\n showSessionPickerOnStart = true;\n } else {\n resumeSessionId = resolveSessionIdByIdOrName(sessionStore, opts.resumeId);\n if (resumeSessionId === undefined) {\n throw new Error(`Session not found: ${opts.resumeId}`);\n }\n }\n }\n\n return { sessionStore, resumeSessionId, showSessionPickerOnStart };\n}\n"],"mappings":"oIAcA,SAAgB,EAAmB,EAAa,EAAyC,CACvF,IAAM,EAAe,EAAK,qBAAuB,IAAA,GAAY,EAA0B,CAAG,EAEtF,EACA,EAA2B,GAE/B,GAAI,EAAK,aACP,EAAkB,EAAuB,EAAc,CAAG,OACrD,GAAI,EAAK,WAAa,IAAA,GAC3B,IAAI,EAAK,WAAa,GACpB,EAA2B,QAG3B,GADA,EAAkB,EAA2B,EAAc,EAAK,QAAQ,EACpE,IAAoB,IAAA,GACtB,MAAU,MAAM,sBAAsB,EAAK,UAAU,CAEzD,CAGF,MAAO,CAAE,eAAc,kBAAiB,0BAAyB,CACnE"}
@@ -0,0 +1 @@
1
+ let e=require(`@robota-sdk/agent-subagent-runner`);function t(t){return{subagentRunnerFactory:(0,e.createChildProcessSubagentRunnerFactory)({providerConfig:t.providerConfig,logsDir:t.logsDir})}}exports.createSubagentSetup=t;
@@ -0,0 +1,2 @@
1
+ import{createChildProcessSubagentRunnerFactory as e}from"@robota-sdk/agent-subagent-runner";function t(t){return{subagentRunnerFactory:e({providerConfig:t.providerConfig,logsDir:t.logsDir})}}export{t as createSubagentSetup};
2
+ //# sourceMappingURL=subagent-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-setup.js","names":[],"sources":["../../../src/startup/subagent-setup.ts"],"sourcesContent":["import type { IProviderConfig } from '@robota-sdk/agent-core';\nimport type { TSubagentRunnerFactory } from '@robota-sdk/agent-framework';\nimport { createChildProcessSubagentRunnerFactory } from '@robota-sdk/agent-subagent-runner';\n\nexport interface ISubagentSetupConfig {\n providerConfig: IProviderConfig;\n logsDir: string;\n}\n\nexport interface ISubagentSetup {\n subagentRunnerFactory: TSubagentRunnerFactory;\n}\n\nexport function createSubagentSetup(config: ISubagentSetupConfig): ISubagentSetup {\n return {\n subagentRunnerFactory: createChildProcessSubagentRunnerFactory({\n providerConfig: config.providerConfig,\n logsDir: config.logsDir,\n }),\n };\n}\n"],"mappings":"4FAaA,SAAgB,EAAoB,EAA8C,CAChF,MAAO,CACL,sBAAuB,EAAwC,CAC7D,eAAgB,EAAO,eACvB,QAAS,EAAO,OAClB,CAAC,CACH,CACF"}
@@ -0,0 +1 @@
1
+ let e=require(`@robota-sdk/agent-framework`);function t(t,n){if((0,e.shouldRunStartupCliUpdateCheck)(n))return(0,e.getStartupCliUpdateNotice)({currentVersion:t}).then(t=>t?(0,e.formatCliUpdateNotice)(t):void 0)}exports.resolveStartupUpdateNotice=t;
@@ -0,0 +1,2 @@
1
+ import{formatCliUpdateNotice as e,getStartupCliUpdateNotice as t,shouldRunStartupCliUpdateCheck as n}from"@robota-sdk/agent-framework";function r(r,i){if(n(i))return t({currentVersion:r}).then(t=>t?e(t):void 0)}export{r as resolveStartupUpdateNotice};
2
+ //# sourceMappingURL=update-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-notice.js","names":[],"sources":["../../../src/startup/update-notice.ts"],"sourcesContent":["import {\n shouldRunStartupCliUpdateCheck,\n getStartupCliUpdateNotice,\n formatCliUpdateNotice,\n} from '@robota-sdk/agent-framework';\nimport type { IStartupUpdatePolicyOptions } from './args-to-options.js';\n\nexport function resolveStartupUpdateNotice(\n version: string,\n policy: IStartupUpdatePolicyOptions,\n): Promise<string | undefined> | undefined {\n if (!shouldRunStartupCliUpdateCheck(policy)) return undefined;\n return getStartupCliUpdateNotice({ currentVersion: version }).then((n) =>\n n ? formatCliUpdateNotice(n) : undefined,\n );\n}\n"],"mappings":"uIAOA,SAAgB,EACd,EACA,EACyC,CACpC,KAA+B,CAAM,EAC1C,OAAO,EAA0B,CAAE,eAAgB,CAAQ,CAAC,EAAE,KAAM,GAClE,EAAI,EAAsB,CAAC,EAAI,IAAA,EACjC,CACF"}
@@ -0,0 +1 @@
1
+ let e=require(`@robota-sdk/agent-framework`);const t=()=>(0,e.readPackageVersion)(require(`url`).pathToFileURL(__filename).href);exports.readVersion=t;
@@ -0,0 +1,2 @@
1
+ import{readPackageVersion as e}from"@robota-sdk/agent-framework";const t=()=>e(import.meta.url);export{t as readVersion};
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","names":[],"sources":["../../../src/startup/version.ts"],"sourcesContent":["import { readPackageVersion } from '@robota-sdk/agent-framework';\n\nexport const readVersion = (): string => readPackageVersion(import.meta.url);\n"],"mappings":"iEAEA,MAAa,MAA4B,EAAmB,OAAO,KAAK,GAAG"}
@@ -0,0 +1 @@
1
+ let e=require(`@robota-sdk/agent-command`);async function t(t,n,r){if(t.positional[0]!==`user-local`)return!1;let i=await(0,e.executeUserLocalDirectCommand)({cwd:n,argv:t.positional.slice(1),format:t.format,summary:t.summary,source:t.source}),a=i.message.trimEnd();if(!i.success)throw Error(a);return r.writeLine(a),!0}exports.runUserLocalDirectCommandIfRequested=t;
@@ -0,0 +1,2 @@
1
+ import{executeUserLocalDirectCommand as e}from"@robota-sdk/agent-command";async function t(t,n,r){if(t.positional[0]!==`user-local`)return!1;let i=await e({cwd:n,argv:t.positional.slice(1),format:t.format,summary:t.summary,source:t.source}),a=i.message.trimEnd();if(!i.success)throw Error(a);return r.writeLine(a),!0}export{t as runUserLocalDirectCommandIfRequested};
2
+ //# sourceMappingURL=user-local-direct-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-local-direct-command.js","names":[],"sources":["../../src/user-local-direct-command.ts"],"sourcesContent":["import { executeUserLocalDirectCommand } from '@robota-sdk/agent-command';\nimport type { ITerminalOutput } from '@robota-sdk/agent-core';\nimport type { IUserLocalCommandOptions } from './startup/args-to-options.js';\n\nexport async function runUserLocalDirectCommandIfRequested(\n opts: IUserLocalCommandOptions,\n cwd: string,\n terminal: ITerminalOutput,\n): Promise<boolean> {\n if (opts.positional[0] !== 'user-local') {\n return false;\n }\n\n const result = await executeUserLocalDirectCommand({\n cwd,\n argv: opts.positional.slice(1),\n format: opts.format,\n summary: opts.summary,\n source: opts.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"],"mappings":"0EAIA,eAAsB,EACpB,EACA,EACA,EACkB,CAClB,GAAI,EAAK,WAAW,KAAO,aACzB,MAAO,GAGT,IAAM,EAAS,MAAM,EAA8B,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"}
@@ -0,0 +1,35 @@
1
+ let e=require(`node:util`);const t=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],n=[`text`,`json`,`stream-json`];function r(){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
+ --model <model> Override model for this session
12
+ --permission-mode <mode> Permission mode: plan | default | acceptEdits | bypassPermissions
13
+ --max-turns <n> Maximum agent turns before stopping
14
+ -c, --continue Continue the most recent session
15
+ -r, --resume <id> Resume a session by ID or name
16
+ -n, --name <name> Name for the new session
17
+ --fork-session Fork the current session
18
+ --configure Run interactive provider configuration
19
+ --configure-provider <n> Configure a specific provider
20
+ --dry-run <prompt> Plan-only run: show what the agent would do without modifying files
21
+ --check-update Check for CLI updates
22
+ --version Show version number
23
+ -h, --help Show this help message
24
+
25
+ Commands:
26
+ robota init Initialize AGENTS.md and .robota/settings.json
27
+
28
+ Examples:
29
+ robota Start interactive TUI session
30
+ robota init Initialize project files
31
+ robota -p "Hello" Print mode: send prompt and exit
32
+ robota -p "Hello" --output-format json
33
+ robota --dry-run "Refactor the auth module" Show plan without modifying files
34
+ robota --continue Resume the last session
35
+ `}function i(e){if(e!==void 0){if(!n.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${n.join(` | `)}`);return e}}function a(e){if(e!==void 0){if(!t.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${t.join(` | `)}`);return e}}function o(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 s={allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},model:{type:`string`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1},"dry-run":{type:`boolean`,default:!1}}};function c(e,t){return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,model:e.model,language:e.language,permissionMode:a(e[`permission-mode`]),maxTurns:o(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:i(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1,dryRun:e[`dry-run`]??!1}}function l(){let{values:t,positionals:n}=(0,e.parseArgs)(s);return c(t,n)}exports.parseCliArgs=l,exports.printHelp=r;
@@ -0,0 +1,36 @@
1
+ import{parseArgs as e}from"node:util";const t=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],n=[`text`,`json`,`stream-json`];function r(){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
+ --model <model> Override model for this session
12
+ --permission-mode <mode> Permission mode: plan | default | acceptEdits | bypassPermissions
13
+ --max-turns <n> Maximum agent turns before stopping
14
+ -c, --continue Continue the most recent session
15
+ -r, --resume <id> Resume a session by ID or name
16
+ -n, --name <name> Name for the new session
17
+ --fork-session Fork the current session
18
+ --configure Run interactive provider configuration
19
+ --configure-provider <n> Configure a specific provider
20
+ --dry-run <prompt> Plan-only run: show what the agent would do without modifying files
21
+ --check-update Check for CLI updates
22
+ --version Show version number
23
+ -h, --help Show this help message
24
+
25
+ Commands:
26
+ robota init Initialize AGENTS.md and .robota/settings.json
27
+
28
+ Examples:
29
+ robota Start interactive TUI session
30
+ robota init Initialize project files
31
+ robota -p "Hello" Print mode: send prompt and exit
32
+ robota -p "Hello" --output-format json
33
+ robota --dry-run "Refactor the auth module" Show plan without modifying files
34
+ robota --continue Resume the last session
35
+ `}function i(e){if(e!==void 0){if(!n.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${n.join(` | `)}`);return e}}function a(e){if(e!==void 0){if(!t.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${t.join(` | `)}`);return e}}function o(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 s={allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},model:{type:`string`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1},"dry-run":{type:`boolean`,default:!1}}};function c(e,t){return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,model:e.model,language:e.language,permissionMode:a(e[`permission-mode`]),maxTurns:o(e[`max-turns`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:i(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1,dryRun:e[`dry-run`]??!1}}function l(){let{values:t,positionals:n}=e(s);return c(t,n)}export{l as parseCliArgs,r as printHelp};
36
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","names":[],"sources":["../../../src/utils/cli-args.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 model: 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 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}\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 --model <model> Override model for this session\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\n --configure Run interactive provider configuration\n --configure-provider <n> Configure a specific provider\n --dry-run <prompt> 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 --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 model: { type: 'string' },\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 '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 },\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 model: values['model'],\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 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 };\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"],"mappings":"sCASA,MAAM,EAAiC,CAAC,OAAQ,UAAW,cAAe,mBAAmB,EAEvF,EAAuB,CAAC,OAAQ,OAAQ,aAAa,EA2C3D,SAAgB,GAAoB,CAClC,MAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCT,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,EAAoB,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,MAAO,CAAE,KAAM,QAAS,EACxB,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,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,CAC/C,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,MAAO,EAAO,MACd,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,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,EAC/B,CACF,CAGA,SAAgB,GAA+B,CAC7C,GAAM,CAAE,SAAQ,eAAgB,EAAU,CAAiB,EAC3D,OAAO,EAAgB,EAAQ,CAAW,CAC5C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robota-sdk/agent-cli",
3
- "version": "3.0.0-beta.67",
3
+ "version": "3.0.0-beta.68",
4
4
  "description": "AI coding assistant CLI built on Robota SDK",
5
5
  "type": "module",
6
6
  "bin": {
@@ -45,12 +45,12 @@
45
45
  "open": "^11.0.0",
46
46
  "string-width": "^8.2.0",
47
47
  "ws": "^8.18.3",
48
- "@robota-sdk/agent-command": "3.0.0-beta.67",
49
- "@robota-sdk/agent-core": "3.0.0-beta.67",
50
- "@robota-sdk/agent-provider": "3.0.0-beta.67",
51
- "@robota-sdk/agent-framework": "3.0.0-beta.67",
52
- "@robota-sdk/agent-transport": "3.0.0-beta.67",
53
- "@robota-sdk/agent-subagent-runner": "3.0.0-beta.67"
48
+ "@robota-sdk/agent-command": "3.0.0-beta.68",
49
+ "@robota-sdk/agent-core": "3.0.0-beta.68",
50
+ "@robota-sdk/agent-subagent-runner": "3.0.0-beta.68",
51
+ "@robota-sdk/agent-provider": "3.0.0-beta.68",
52
+ "@robota-sdk/agent-transport": "3.0.0-beta.68",
53
+ "@robota-sdk/agent-framework": "3.0.0-beta.68"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
@@ -61,8 +61,25 @@
61
61
  "tsx": "^4.7.0",
62
62
  "typescript": "^5.3.3",
63
63
  "vitest": "^1.6.1",
64
- "@robota-sdk/agent-executor": "3.0.0-beta.67"
64
+ "@robota-sdk/agent-executor": "3.0.0-beta.68"
65
65
  },
66
+ "keywords": [
67
+ "ai",
68
+ "cli",
69
+ "coding-assistant",
70
+ "agent",
71
+ "llm",
72
+ "anthropic",
73
+ "openai",
74
+ "claude",
75
+ "typescript",
76
+ "developer-tools",
77
+ "terminal",
78
+ "automation",
79
+ "multi-provider",
80
+ "robota",
81
+ "open-source"
82
+ ],
66
83
  "license": "MIT",
67
84
  "publishConfig": {
68
85
  "access": "public"