| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { cmd } from "@/cli/cmd/cmd"
- import { Instance } from "@/project/instance"
- import path from "path"
- import { Server } from "@/server/server"
- import { upgrade } from "@/cli/upgrade"
- export const TuiSpawnCommand = cmd({
- command: "spawn [project]",
- builder: (yargs) =>
- yargs
- .positional("project", {
- type: "string",
- describe: "path to start opencode in",
- })
- .option("port", {
- type: "number",
- describe: "port to listen on",
- default: 0,
- })
- .option("hostname", {
- type: "string",
- describe: "hostname to listen on",
- default: "127.0.0.1",
- }),
- handler: async (args) => {
- upgrade()
- const server = Server.listen({
- port: args.port,
- hostname: "127.0.0.1",
- })
- const bin = process.execPath
- const cmd = []
- let cwd = process.cwd()
- if (bin.endsWith("bun")) {
- cmd.push(
- process.execPath,
- "run",
- "--conditions",
- "browser",
- new URL("../../../index.ts", import.meta.url).pathname,
- )
- cwd = new URL("../../../../", import.meta.url).pathname
- } else cmd.push(process.execPath)
- cmd.push("attach", server.url.toString(), "--dir", args.project ? path.resolve(args.project) : process.cwd())
- const proc = Bun.spawn({
- cmd,
- cwd,
- stdout: "inherit",
- stderr: "inherit",
- stdin: "inherit",
- env: {
- ...process.env,
- BUN_OPTIONS: "",
- },
- })
- await proc.exited
- await Instance.disposeAll()
- await server.stop(true)
- },
- })
|