/** * Autonomous AI agent: QVAC (local) or OpenAI-compatible REST, ReAct loop, ~/.agent/config.json. */ async function run(ctx, argv) { const argv0 = argv[0] || 'agent' const args = argv.slice(1) const wantHelp = args.includes('-h') || args.includes('--help') if (wantHelp || args.length === 0) { ctx.console.log( 'usage: ' + argv0 + ' [--setup | --config | --reset] YOUR_REQUEST_HERE\n' + ' ' + argv0 + ' --setup\n' + ' ' + argv0 + ' --config\n' + ' ' + argv0 + ' --reset\n' + ' ' + argv0 + ' reset\n' + '\n' + 'Runs an autonomous coding/OS agent. Default backend is QVAC (local on-device);\n' + 'or configure any OpenAI-compatible HTTPS REST API.\n' + 'Configuration: ~/.agent/config.json on your personal drive (created on first run).\n' + 'Use --setup or --config to choose QVAC vs REST, model profile / API URL+key (plain TTY prompts).\n' + 'Use --reset or `reset` to clear ~/.agent/history.json and start a fresh chat session.\n' + '\n' + 'Examples:\n' + ' ' + argv0 + ' "summarize ~/README and list five files in /bin"\n' + ' ' + argv0 + ' --setup\n' + ' ' + argv0 + ' --config\n' + ' ' + argv0 + ' --reset\n' + '\n' + 'See man agent.' ) ctx.exitCode = wantHelp ? 0 : 1 return } let setupFlag = false let resetFlag = false /** @type {string[]} */ const rest = [] for (let i = 0; i < args.length; i++) { const a = args[i] if (a === '--setup' || a === '--config') setupFlag = true else if (a === '--reset') resetFlag = true else rest.push(a) } const wantReset = resetFlag || (rest.length === 1 && rest[0] === 'reset') if (wantReset) { const home = bareAgentResolveHome(ctx) const paths = bareAgentPaths(home) try { await bareAgentResetChatSession(ctx, paths, argv0) ctx.exitCode = 0 } catch (e) { const msg = e && typeof e === 'object' && 'message' in e ? String(e.message) : String(e) ctx.console.error(argv0 + ': ' + msg) ctx.exitCode = 1 } return } const task = rest.join(' ').trim() if (!task && !setupFlag) { ctx.console.error(argv0 + ': missing task (or use --setup / --config)') ctx.exitCode = 1 return } if (setupFlag && !task) { await bareAgentRunSetupOnly(ctx, argv0) return } await bareOsRunAgentSession(ctx, argv0, task, { setupFlag }) }