serve: early-return for socket, skip network options resolve
This commit is contained in:
parent
342d02aefe
commit
08e4d4fe0c
1 changed files with 8 additions and 18 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { Server } from "../../server/server"
|
import { Server } from "../../server/server"
|
||||||
import { effectCmd, fail } from "../effect-cmd"
|
import { effectCmd } from "../effect-cmd"
|
||||||
import { withNetworkOptions, resolveNetworkOptions } from "../network"
|
import { withNetworkOptions, resolveNetworkOptions } from "../network"
|
||||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||||
|
|
||||||
|
|
@ -13,27 +13,21 @@ export const ServeCommand = effectCmd({
|
||||||
describe: "Unix socket path or Windows named pipe name/path to listen on",
|
describe: "Unix socket path or Windows named pipe name/path to listen on",
|
||||||
}),
|
}),
|
||||||
describe: "starts a headless opencode server",
|
describe: "starts a headless opencode server",
|
||||||
// Server loads instances per-request via x-opencode-directory header — no
|
|
||||||
// need for an ambient project InstanceContext at startup.
|
|
||||||
instance: false,
|
instance: false,
|
||||||
handler: Effect.fn("Cli.serve")(function* (args) {
|
handler: Effect.fn("Cli.serve")(function* (args) {
|
||||||
if (!Flag.OPENCODE_SERVER_PASSWORD) {
|
if (!Flag.OPENCODE_SERVER_PASSWORD) {
|
||||||
console.log("Warning: OPENCODE_SERVER_PASSWORD is not set; server is unsecured.")
|
console.log("Warning: OPENCODE_SERVER_PASSWORD is not set; server is unsecured.")
|
||||||
}
|
}
|
||||||
if (args.socket) {
|
if (args.socket) {
|
||||||
const conflicts = explicitNetworkConflicts()
|
const server = yield* Effect.promise(() =>
|
||||||
if (conflicts.length) yield* fail(`--socket cannot be used with ${conflicts.join(", ")}`)
|
Server.listen({ type: "socket", socket: resolveSocketPath(args.socket) }),
|
||||||
}
|
)
|
||||||
const opts = yield* resolveNetworkOptions(args)
|
|
||||||
const server = args.socket
|
|
||||||
? yield* Effect.promise(() =>
|
|
||||||
Server.listen({ type: "socket", socket: resolveSocketPath(args.socket), cors: opts.cors }),
|
|
||||||
)
|
|
||||||
: yield* Effect.promise(() => Server.listen(opts))
|
|
||||||
if (server.type === "socket") {
|
|
||||||
console.log(`opencode server listening on socket ${server.socket}`)
|
console.log(`opencode server listening on socket ${server.socket}`)
|
||||||
yield* Effect.never
|
yield* Effect.never
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const opts = yield* resolveNetworkOptions(args)
|
||||||
|
const server = yield* Effect.promise(() => Server.listen(opts))
|
||||||
console.log(`opencode server listening on http://${server.hostname}:${server.port}`)
|
console.log(`opencode server listening on http://${server.hostname}:${server.port}`)
|
||||||
|
|
||||||
yield* Effect.never
|
yield* Effect.never
|
||||||
|
|
@ -51,8 +45,4 @@ function resolveSocketPath(input: string) {
|
||||||
return `\\\\.\\pipe\\${name || "opencode"}`
|
return `\\\\.\\pipe\\${name || "opencode"}`
|
||||||
}
|
}
|
||||||
|
|
||||||
function explicitNetworkConflicts() {
|
|
||||||
return ["--port", "--hostname", "--mdns", "--mdns-domain"].filter((flag) =>
|
|
||||||
process.argv.some((arg) => arg === flag || arg.startsWith(`${flag}=`)),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue