| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { cmd } from "../cmd"
- import { tui } from "./app"
- export const AttachCommand = cmd({
- command: "attach <url>",
- describe: "attach to a running opencode server",
- builder: (yargs) =>
- yargs
- .positional("url", {
- type: "string",
- describe: "http://localhost:4096",
- demandOption: true,
- })
- .option("dir", {
- type: "string",
- description: "directory to run in",
- })
- .option("session", {
- alias: ["s"],
- type: "string",
- describe: "session id to continue",
- })
- .option("password", {
- alias: ["p"],
- type: "string",
- describe: "basic auth password (defaults to OPENCODE_SERVER_PASSWORD)",
- }),
- handler: async (args) => {
- const directory = (() => {
- if (!args.dir) return undefined
- try {
- process.chdir(args.dir)
- return process.cwd()
- } catch {
- // If the directory doesn't exist locally (remote attach), pass it through.
- return args.dir
- }
- })()
- const headers = (() => {
- const password = args.password ?? process.env.OPENCODE_SERVER_PASSWORD
- if (!password) return undefined
- const auth = `Basic ${Buffer.from(`opencode:${password}`).toString("base64")}`
- return { Authorization: auth }
- })()
- await tui({
- url: args.url,
- args: { sessionID: args.session },
- directory,
- headers,
- })
- },
- })
|