From d4155f290680506d80b76dc7cda5e24820956d3b Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 8 Jul 2026 23:28:40 -0400 Subject: [PATCH] refactor(cli): simplify mini arguments --- packages/cli/src/commands/commands.ts | 50 +++++++++------------- packages/cli/src/commands/handlers/mini.ts | 4 -- packages/cli/src/mini/mini.ts | 10 ++--- 3 files changed, 25 insertions(+), 39 deletions(-) diff --git a/packages/cli/src/commands/commands.ts b/packages/cli/src/commands/commands.ts index fea2480274..2bc9884b49 100644 --- a/packages/cli/src/commands/commands.ts +++ b/packages/cli/src/commands/commands.ts @@ -3,31 +3,6 @@ import { Spec } from "../framework/spec" declare const OPENCODE_CLI_NAME: string | undefined -const MiniParams = { - continue: Flag.boolean("continue").pipe( - Flag.withAlias("c"), - Flag.withDescription("Continue the last session"), - Flag.withDefault(false), - ), - session: Flag.string("session").pipe( - Flag.withAlias("s"), - Flag.withDescription("Session ID to continue"), - Flag.optional, - ), - fork: Flag.boolean("fork").pipe( - Flag.withDescription("Fork the session when continuing"), - Flag.withDefault(false), - ), - replay: Flag.boolean("replay").pipe( - Flag.withDescription("Replay session history on resume and after resize"), - Flag.withDefault(true), - ), - replayLimit: Flag.integer("replay-limit").pipe( - Flag.withDescription("Cap visible replay to the newest N messages"), - Flag.optional, - ), -} - const ServerParams = { standalone: Flag.boolean("standalone").pipe( Flag.withDescription("Run with a private server instead of the background service"), @@ -131,11 +106,28 @@ export const Commands = Spec.make(typeof OPENCODE_CLI_NAME === "string" ? OPENCO Spec.make("mini", { description: "Start the minimal interactive interface", params: { - ...MiniParams, ...ServerParams, - project: Argument.string("project").pipe( - Argument.withDescription("Path to start OpenCode in"), - Argument.optional, + continue: Flag.boolean("continue").pipe( + Flag.withAlias("c"), + Flag.withDescription("Continue the last session"), + Flag.withDefault(false), + ), + session: Flag.string("session").pipe( + Flag.withAlias("s"), + Flag.withDescription("Session ID to continue"), + Flag.optional, + ), + fork: Flag.boolean("fork").pipe( + Flag.withDescription("Fork the session when continuing"), + Flag.withDefault(false), + ), + replay: Flag.boolean("replay").pipe( + Flag.withDescription("Replay session history on resume and after resize"), + Flag.withDefault(true), + ), + replayLimit: Flag.integer("replay-limit").pipe( + Flag.withDescription("Cap visible replay to the newest N messages"), + Flag.optional, ), model: Flag.string("model").pipe( Flag.withAlias("m"), diff --git a/packages/cli/src/commands/handlers/mini.ts b/packages/cli/src/commands/handlers/mini.ts index 6480d93fe8..7919b2bc8e 100644 --- a/packages/cli/src/commands/handlers/mini.ts +++ b/packages/cli/src/commands/handlers/mini.ts @@ -1,5 +1,4 @@ import { Effect, Option } from "effect" -import path from "node:path" import { Commands } from "../commands" import { Runtime } from "../../framework/runtime" import { Server } from "../../services/server" @@ -8,14 +7,11 @@ export default Runtime.handler(Commands.commands.mini, (input) => Effect.gen(function* () { const { runMini, validateMiniTerminal } = yield* Effect.promise(() => import("../../mini")) yield* Effect.promise(async () => validateMiniTerminal()) - const project = Option.getOrUndefined(input.project) const serverURL = Option.getOrUndefined(input.server) const server = yield* Server.resolve({ server: serverURL, standalone: input.standalone }) yield* Effect.promise(() => runMini({ server, - directory: - project === undefined ? process.cwd() : path.resolve(process.env.PWD ?? process.cwd(), project), continue: input.continue, session: Option.getOrUndefined(input.session), fork: input.fork, diff --git a/packages/cli/src/mini/mini.ts b/packages/cli/src/mini/mini.ts index 8b28929929..521995b45c 100644 --- a/packages/cli/src/mini/mini.ts +++ b/packages/cli/src/mini/mini.ts @@ -1,6 +1,5 @@ import { Service } from "@opencode-ai/client/effect" import { OpenCode, type OpenCodeClient } from "@opencode-ai/client/promise" -import path from "node:path" import { Server } from "../services/server" import { waitForCatalogReady } from "./catalog.shared" import { INTERACTIVE_INPUT_ERROR, resolveInteractiveStdin } from "./runtime.stdin" @@ -8,7 +7,6 @@ import type { RunInput, RunTuiConfig } from "./types" export type MiniCommandInput = { server: Server.Resolved - directory?: string continue?: boolean session?: string fork?: boolean @@ -26,7 +24,7 @@ export async function runMini(input: MiniCommandInput) { validate(input) const initialInput = mergeInput(process.stdin.isTTY ? undefined : await Bun.stdin.text(), input.prompt) const runtimeTask = import("./runtime") - const directory = localDirectory(input.directory) + const directory = localDirectory() try { const sdk = OpenCode.make({ @@ -98,13 +96,13 @@ function validate(input: MiniCommandInput) { resolveInteractiveStdin().cleanup?.() } -function localDirectory(directory?: string): string { +function localDirectory(): string { const root = process.env.PWD ?? process.cwd() try { - process.chdir(directory ? (path.isAbsolute(directory) ? directory : path.join(root, directory)) : root) + process.chdir(root) return process.cwd() } catch { - fail(`Failed to change directory to ${directory}`) + fail(`Failed to change directory to ${root}`) } }