summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-11-03 16:10:13 -0500
committerDax Raad <[email protected]>2025-11-03 16:10:23 -0500
commit902763b47de362091de012c05807e867d6cf2bc1 (patch)
treefa4e9e537085eb90c98d9e97fe1612ee0e0f1023
parent55d07a139c064371d65726d13266bc99efd91af4 (diff)
downloadopencode-902763b47de362091de012c05807e867d6cf2bc1.tar.gz
opencode-902763b47de362091de012c05807e867d6cf2bc1.zip
web command
-rw-r--r--packages/opencode/src/cli/cmd/serve.ts8
-rw-r--r--packages/opencode/src/cli/cmd/tui/app.tsx8
-rw-r--r--packages/opencode/src/cli/cmd/web.ts38
-rw-r--r--packages/opencode/src/index.ts2
4 files changed, 53 insertions, 3 deletions
diff --git a/packages/opencode/src/cli/cmd/serve.ts b/packages/opencode/src/cli/cmd/serve.ts
index 3af3316a9..0fe2d1b0c 100644
--- a/packages/opencode/src/cli/cmd/serve.ts
+++ b/packages/opencode/src/cli/cmd/serve.ts
@@ -1,4 +1,5 @@
import { Server } from "../../server/server"
+import { UI } from "../ui"
import { cmd } from "./cmd"
export const ServeCommand = cmd({
@@ -24,7 +25,12 @@ export const ServeCommand = cmd({
port,
hostname,
})
- console.log(`opencode server listening on http://${server.hostname}:${server.port}`)
+ UI.println(
+ UI.Style.TEXT_NORMAL_BOLD,
+ "Web interface: ",
+ UI.Style.TEXT_NORMAL,
+ `https://desktop.dev.opencode.ai?url=${server.url}`,
+ )
await new Promise(() => {})
await server.stop()
},
diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx
index f0cbfba5e..989defd94 100644
--- a/packages/opencode/src/cli/cmd/tui/app.tsx
+++ b/packages/opencode/src/cli/cmd/tui/app.tsx
@@ -178,12 +178,16 @@ function App() {
useKeyboard(async (evt) => {
if (evt.meta && evt.name === "t") {
- renderer.toggleDebugOverlay()
+ if (process.env.DEBUG) {
+ renderer.toggleDebugOverlay()
+ }
return
}
if (evt.meta && evt.name === "d") {
- renderer.console.toggle()
+ if (process.env.DEBUG) {
+ renderer.console.toggle()
+ }
return
}
})
diff --git a/packages/opencode/src/cli/cmd/web.ts b/packages/opencode/src/cli/cmd/web.ts
new file mode 100644
index 000000000..4823414f7
--- /dev/null
+++ b/packages/opencode/src/cli/cmd/web.ts
@@ -0,0 +1,38 @@
+import { Server } from "../../server/server"
+import { UI } from "../ui"
+import { cmd } from "./cmd"
+import open from "open"
+
+export const WebCommand = cmd({
+ command: "web",
+ builder: (yargs) =>
+ yargs
+ .option("port", {
+ alias: ["p"],
+ type: "number",
+ describe: "port to listen on",
+ default: 0,
+ })
+ .option("hostname", {
+ type: "string",
+ describe: "hostname to listen on",
+ default: "127.0.0.1",
+ }),
+ describe: "starts a headless opencode server",
+ handler: async (args) => {
+ const hostname = args.hostname
+ const port = args.port
+ const server = Server.listen({
+ port,
+ hostname,
+ })
+ const url = `https://desktop.dev.opencode.ai?url=${server.url}`
+ UI.empty()
+ UI.println(UI.logo(" "))
+ UI.empty()
+ UI.println(UI.Style.TEXT_INFO_BOLD + " Web interface: ", UI.Style.TEXT_NORMAL, url)
+ open(url).catch(() => {})
+ await new Promise(() => {})
+ await server.stop()
+ },
+})
diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts
index bfdadff2a..9c2877d2d 100644
--- a/packages/opencode/src/index.ts
+++ b/packages/opencode/src/index.ts
@@ -22,6 +22,7 @@ import { TuiThreadCommand } from "./cli/cmd/tui/thread"
import { TuiSpawnCommand } from "./cli/cmd/tui/spawn"
import { AcpCommand } from "./cli/cmd/acp"
import { EOL } from "os"
+import { WebCommand } from "./cli/cmd/web"
process.on("unhandledRejection", (e) => {
Log.Default.error("rejection", {
@@ -81,6 +82,7 @@ const cli = yargs(hideBin(process.argv))
.command(AgentCommand)
.command(UpgradeCommand)
.command(ServeCommand)
+ .command(WebCommand)
.command(ModelsCommand)
.command(StatsCommand)
.command(ExportCommand)