diff --git a/src/cli.ts b/src/cli.ts index 6d499b75..fabbb2b6 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -90,7 +90,7 @@ const noInstanceCommands: Record Promise> = { '-v': () => cmdVersion(args), 'update': () => cmdUpdate(args), 'adopt': () => cmdAdopt(args), - 'instances': async () => cmdInstances(args), + 'instances': async () => cmdInstances(args, flags), 'integrate': () => cmdIntegrate(args), 'dev': () => cmdDev(args), } diff --git a/src/cli/commands/instances.ts b/src/cli/commands/instances.ts index f62b7bbf..8906a488 100644 --- a/src/cli/commands/instances.ts +++ b/src/cli/commands/instances.ts @@ -33,7 +33,7 @@ export async function buildInstanceListEntries(): Promise { }) } -export async function cmdInstances(args: string[] = []): Promise { +export async function cmdInstances(args: string[] = [], parentFlags?: { dir?: string; from?: string; name?: string }): Promise { if (wantsHelp(args)) { printInstancesHelp() return @@ -42,6 +42,13 @@ export async function cmdInstances(args: string[] = []): Promise { const sub = args[0] const subArgs = args.slice(1) + // Re-inject flags that were consumed by top-level parser + if (parentFlags) { + if (parentFlags.dir && !subArgs.includes('--dir')) subArgs.push('--dir', parentFlags.dir) + if (parentFlags.from && !subArgs.includes('--from')) subArgs.push('--from', parentFlags.from) + if (parentFlags.name && !subArgs.includes('--name')) subArgs.push('--name', parentFlags.name) + } + if (!sub || sub === 'list') return cmdInstancesList(subArgs) if (sub === 'create') return cmdInstancesCreate(subArgs) @@ -167,15 +174,27 @@ export async function cmdInstancesCreate(args: string[]): Promise { } else if (noInteractive || !process.stdin.isTTY) { // Minimal config for non-interactive mode fs.mkdirSync(instanceRoot, { recursive: true }) - const config: Record = { instanceName: name, runMode: 'daemon' } - if (agent) config.defaultAgent = agent + const config: Record = { + channels: { sse: { enabled: true } }, + defaultAgent: agent || 'claude', + workspace: { baseDir: '~/openacp-workspace' }, + runMode: 'daemon', + autoStart: false, + instanceName: name, + } fs.writeFileSync(path.join(instanceRoot, 'config.json'), JSON.stringify(config, null, 2)) fs.writeFileSync(path.join(instanceRoot, 'plugins.json'), JSON.stringify({ version: 1, installed: {} }, null, 2)) } else { // Interactive wizard — requires plugin system; fall back to minimal config fs.mkdirSync(instanceRoot, { recursive: true }) - const config: Record = { instanceName: name, runMode: 'daemon' } - if (agent) config.defaultAgent = agent + const config: Record = { + channels: { sse: { enabled: true } }, + defaultAgent: agent || 'claude', + workspace: { baseDir: '~/openacp-workspace' }, + runMode: 'daemon', + autoStart: false, + instanceName: name, + } fs.writeFileSync(path.join(instanceRoot, 'config.json'), JSON.stringify(config, null, 2)) fs.writeFileSync(path.join(instanceRoot, 'plugins.json'), JSON.stringify({ version: 1, installed: {} }, null, 2)) console.log(`Instance created at ${resolvedDir}. Run 'openacp setup' inside that directory to configure it.`) diff --git a/src/cli/version.ts b/src/cli/version.ts index dabcdc0e..241b7a03 100644 --- a/src/cli/version.ts +++ b/src/cli/version.ts @@ -72,7 +72,7 @@ export async function runUpdate(): Promise { } export async function checkAndPromptUpdate(): Promise { - if (process.env.OPENACP_DEV_LOOP || process.env.OPENACP_SKIP_UPDATE_CHECK) return + if (process.env.OPENACP_DEV_LOOP || process.env.OPENACP_SKIP_UPDATE_CHECK || !process.stdin.isTTY) return const current = getCurrentVersion() if (current === '0.0.0-dev') return