diff --git a/.changeset/feat-cli-port-discovery-warning.md b/.changeset/feat-cli-port-discovery-warning.md new file mode 100644 index 00000000000..2cd4bbb1511 --- /dev/null +++ b/.changeset/feat-cli-port-discovery-warning.md @@ -0,0 +1,5 @@ +--- +"@kilocode/cli": patch +--- + +Warn when `kilo console` or `kilo daemon` is invoked with an explicit `--port` outside the discovery range (4097–4116). diff --git a/packages/opencode/src/kilocode/cli/cmd/console.ts b/packages/opencode/src/kilocode/cli/cmd/console.ts index 8c8f6a27e8a..4cb8b2b1327 100644 --- a/packages/opencode/src/kilocode/cli/cmd/console.ts +++ b/packages/opencode/src/kilocode/cli/cmd/console.ts @@ -3,6 +3,7 @@ import { cmd } from "@/cli/cmd/cmd" import { withNetworkOptions, resolveNetworkOptions } from "@/cli/network" import { AppRuntime } from "@/effect/app-runtime" import { Daemon } from "@/kilocode/daemon/daemon" +import { warnPort } from "@/kilocode/cli/port-warning" function publicUrl(state: Daemon.State) { return new URL("/console", state.url).toString() @@ -41,6 +42,7 @@ export const KiloConsoleCommand = cmd({ builder: (yargs) => withNetworkOptions(yargs), handler: async (args) => { const opts = await AppRuntime.runPromise(resolveNetworkOptions(args)) + warnPort(opts.port) const result = await Daemon.start(opts) const state = result.state if (!state) throw new Error("Kilo daemon did not provide connection state") diff --git a/packages/opencode/src/kilocode/cli/cmd/daemon.ts b/packages/opencode/src/kilocode/cli/cmd/daemon.ts index d295d2d4d4e..4561397c247 100644 --- a/packages/opencode/src/kilocode/cli/cmd/daemon.ts +++ b/packages/opencode/src/kilocode/cli/cmd/daemon.ts @@ -3,6 +3,7 @@ import { cmd } from "@/cli/cmd/cmd" import { withNetworkOptions, resolveNetworkOptions } from "@/cli/network" import { AppRuntime } from "@/effect/app-runtime" import { Daemon } from "@/kilocode/daemon/daemon" +import { warnPort } from "@/kilocode/cli/port-warning" function withJson(yargs: Argv) { return yargs.option("json", { @@ -60,6 +61,7 @@ const StartCommand = cmd({ builder: (yargs) => withJson(withNetworkOptions(yargs)), handler: async (args) => { const opts = await AppRuntime.runPromise(resolveNetworkOptions(args)) + warnPort(opts.port) const result = await Daemon.start(opts) if (args.json) { print(result, true) @@ -99,6 +101,7 @@ const RestartCommand = cmd({ builder: (yargs) => withJson(withNetworkOptions(yargs)), handler: async (args) => { const opts = await AppRuntime.runPromise(resolveNetworkOptions(args)) + warnPort(opts.port) const result = await Daemon.restart(opts) if (args.json) { print(result, true) diff --git a/packages/opencode/src/kilocode/cli/port-warning.ts b/packages/opencode/src/kilocode/cli/port-warning.ts new file mode 100644 index 00000000000..afba3dd5632 --- /dev/null +++ b/packages/opencode/src/kilocode/cli/port-warning.ts @@ -0,0 +1,11 @@ +import { Daemon } from "@/kilocode/daemon/daemon" + +export function warnPort(port: number) { + if (port === 0) return + if (port < Daemon.PortRange.start || port > Daemon.PortRange.end) { + console.warn( + `\x1B[33mPort ${port} is outside the recommended daemon discovery range (${Daemon.PortRange.start}-${Daemon.PortRange.end}). ` + + `The console will work, but auto-discovery may not find this server.\x1B[0m`, + ) + } +}