diff --git a/packages/cli/src/commands/handlers/session/list.ts b/packages/cli/src/commands/handlers/session/list.ts index 969867c9d21..5589070c4da 100644 --- a/packages/cli/src/commands/handlers/session/list.ts +++ b/packages/cli/src/commands/handlers/session/list.ts @@ -47,7 +47,7 @@ const handler = Effect.fn("cli.session.list")(function* ( null, 2, ) - : formatTable(page.data)) + EOL + : formatList(page.data)) + EOL const write = Effect.tryPromise( () => new Promise((resolve, reject) => { @@ -96,18 +96,14 @@ export default Runtime.handler(Commands.commands.session.commands.list, (input) ), ) -function formatTable(sessions: ReadonlyArray) { - const rows = sessions.map((session) => ({ - id: session.id, - title: (session.title ?? "Untitled session").replace(/[\r\n\t]/g, " "), - updated: new Date(session.time.updated).toLocaleString(), - })) - const idWidth = Math.max(20, ...rows.map((row) => row.id.length)) - const titleWidth = Math.max(25, ...rows.map((row) => row.title.length)) - const header = `${"Session ID".padEnd(idWidth)} ${"Title".padEnd(titleWidth)} Updated` - return [ - header, - "─".repeat(header.length), - ...rows.map((row) => `${row.id.padEnd(idWidth)} ${row.title.padEnd(titleWidth)} ${row.updated}`), - ].join(EOL) +function formatList(sessions: ReadonlyArray) { + return sessions + .map((session) => + [ + session.id, + (session.title ?? "Untitled session").replace(/[\r\n\t]/g, " "), + new Date(session.time.updated).toLocaleString(), + ].join("\t"), + ) + .join(EOL) } diff --git a/services/www/src/docs/content/cli/commands.mdx b/services/www/src/docs/content/cli/commands.mdx new file mode 100644 index 00000000000..50d3dd524fc --- /dev/null +++ b/services/www/src/docs/content/cli/commands.mdx @@ -0,0 +1,548 @@ +--- +title: "commands" +description: "Reference for the opencode2 command line." +--- + +Every command accepts `--help` for its full flag list, for example `opencode2 run --help`. Commands that talk to a server also accept `--standalone` to run a private server and `--server ` to target a specific one. + +## run + +`opencode2 run` sends a message and prints the reply without opening the interactive interface. + +```bash +$ opencode2 run "Explain this repository" +``` + +Choose a model. + +```bash +$ opencode2 run --model anthropic/claude-sonnet-4-5 "Refactor parseToken" +``` + +Continue the last session. + +```bash +$ opencode2 run --continue "Now handle the expired case" +``` + +Emit newline-delimited JSON for scripts. + +```bash +$ opencode2 run --format json "List the TODO comments" +``` + +Attach files to the message. + +```bash +$ opencode2 run --file src/server.ts --file src/client.ts "Review these for bugs" +``` + +Run with a specific agent. + +```bash +$ opencode2 run --agent build "Fix the failing test" +``` + +View all subcommands and flags. + +```bash +$ opencode2 run --help +``` + +## mini + +`opencode2 mini` starts the minimal interactive interface instead of the full-screen TUI. + +```bash +$ opencode2 mini +``` + +Continue the last session. + +```bash +$ opencode2 mini --continue +``` + +Start with a model and an initial prompt. + +```bash +$ opencode2 mini --model anthropic/claude-sonnet-4-5 --prompt "Summarize this repository" +``` + +View all subcommands and flags. + +```bash +$ opencode2 mini --help +``` + +## session + +`opencode2 session` manages sessions. + +```bash +$ opencode2 session list +``` + +Limit the list and print JSON. + +```bash +$ opencode2 session list --max-count 20 --format json +``` + +Delete a session and its child sessions. + +```bash +$ opencode2 session delete ses_9c1b08 +``` + +Export session data as JSON. + +```bash +$ opencode2 session export ses_4f2a1c +``` + +Redact sensitive transcript and file data when exporting. + +```bash +$ opencode2 session export ses_4f2a1c --sanitize +``` + +Import session data from a JSON file or URL. + +```bash +$ opencode2 session import session.json +``` + +Import into a specific directory. + +```bash +$ opencode2 session import session.json --directory ~/code/project +``` + +View all subcommands and flags. + +```bash +$ opencode2 session --help +``` + +## auth + +`opencode2 auth` manages AI providers and credentials. + +```bash +$ opencode2 auth list +``` + +List them as JSON. + +```bash +$ opencode2 auth list --format json +``` + +Log in to a provider. + +```bash +$ opencode2 auth login anthropic +``` + +Log in with a specific authentication method. + +```bash +$ opencode2 auth login anthropic --method api-key +``` + +Log out of a saved account. + +```bash +$ opencode2 auth logout anthropic work +``` + +Switch the active account for an integration. + +```bash +$ opencode2 auth switch anthropic work +``` + +View all subcommands and flags. + +```bash +$ opencode2 auth --help +``` + +## models + +`opencode2 models` lists every available model. + +```bash +$ opencode2 models +``` + +View all subcommands and flags. + +```bash +$ opencode2 models --help +``` + +## mcp + +`opencode2 mcp` manages MCP (Model Context Protocol) servers. + +```bash +$ opencode2 mcp list +``` + +Add a remote server. + +```bash +$ opencode2 mcp add context7 --url https://mcp.context7.com/mcp +``` + +Add a local server to the global config. + +```bash +$ opencode2 mcp add everything --global -- npx -y @modelcontextprotocol/server-everything +``` + +Add a local server with an environment variable. + +```bash +$ opencode2 mcp add everything --env LOG_LEVEL=debug -- npx -y @modelcontextprotocol/server-everything +``` + +Add a remote server with a header. + +```bash +$ opencode2 mcp add context7 --url https://mcp.context7.com/mcp --header CONTEXT7_API_KEY=secret +``` + +Authenticate with an OAuth-capable remote server. + +```bash +$ opencode2 mcp auth sentry +``` + +Remove stored OAuth credentials for a server. + +```bash +$ opencode2 mcp logout sentry +``` + +View all subcommands and flags. + +```bash +$ opencode2 mcp --help +``` + +## plugin + +`opencode2 plugin` manages plugins. + +```bash +$ opencode2 plugin list +``` + +Include built-in server plugins. + +```bash +$ opencode2 plugin list --builtin +``` + +Install a plugin and add it to the global configuration. + +```bash +$ opencode2 plugin add @example/opencode-tui +``` + +Check package plugins for updates. + +```bash +$ opencode2 plugin check +``` + +Update package plugins. + +```bash +$ opencode2 plugin update +``` + +Remove a plugin from global configuration. + +```bash +$ opencode2 plugin remove @example/opencode-tui +``` + +View all subcommands and flags. + +```bash +$ opencode2 plugin --help +``` + +## stats + +`opencode2 stats` shows shareable usage statistics. + +```bash +$ opencode2 stats +``` + +Show the last 7 days. + +```bash +$ opencode2 stats --days 7 +``` + +Show model usage. + +```bash +$ opencode2 stats --models +``` + +Show cost and token details. + +```bash +$ opencode2 stats --cost +``` + +Print JSON instead of a report. + +```bash +$ opencode2 stats --json +``` + +View all subcommands and flags. + +```bash +$ opencode2 stats --help +``` + +## serve + +`opencode2 serve` starts the API and web server. See [Web](/cli/web). + +```bash +$ opencode2 serve +``` + +Bind to all interfaces on a fixed port. + +```bash +$ opencode2 serve --hostname 0.0.0.0 --port 4096 +``` + +Allow a browser client from another origin. + +```bash +$ opencode2 serve --cors https://app.example.com +``` + +View all subcommands and flags. + +```bash +$ opencode2 serve --help +``` + +## pair + +`opencode2 pair` shows server pairing information, including URLs, credentials, and a QR code. + +```bash +$ opencode2 pair +``` + +Advertise an external URL in the QR code. + +```bash +$ opencode2 pair --url https://dev.example.com +``` + +View all subcommands and flags. + +```bash +$ opencode2 pair --help +``` + +## service + +`opencode2 service` manages the background server. See [Web](/cli/web). + +```bash +$ opencode2 service start +``` + +Restart it. + +```bash +$ opencode2 service restart +``` + +Show its status. + +```bash +$ opencode2 service status +``` + +Stop it. + +```bash +$ opencode2 service stop +``` + +Read a setting. + +```bash +$ opencode2 service get hostname +``` + +Set a setting. + +```bash +$ opencode2 service set hostname 0.0.0.0 +``` + +Allow an extra CORS origin. + +```bash +$ opencode2 service set cors https://app.example.com +``` + +Pass an environment variable to the server process. + +```bash +$ opencode2 service set env OPENCODE_LOG_LEVEL DEBUG +``` + +Reset a setting to its default. + +```bash +$ opencode2 service unset hostname +``` + +View all subcommands and flags. + +```bash +$ opencode2 service --help +``` + +## api + +`opencode2 api` makes a request to the running server. + +```bash +$ opencode2 api GET /api/session +``` + +Call an operation ID with a query parameter. + +```bash +$ opencode2 api v2.session.list --param limit=10 +``` + +Send a JSON body. + +```bash +$ opencode2 api v2.session.create --data '{"title": "New session"}' +``` + +Add a request header. + +```bash +$ opencode2 api GET /api/session -H "accept: application/json" +``` + +View all subcommands and flags. + +```bash +$ opencode2 api --help +``` + +## acp + +`opencode2 acp` starts an Agent Client Protocol server over stdin and stdout for editor integrations. It runs until the client closes the connection. + +```bash +$ opencode2 acp +``` + +View all subcommands and flags. + +```bash +$ opencode2 acp --help +``` + +## debug + +`opencode2 debug` provides debugging and troubleshooting tools. + +```bash +$ opencode2 debug agents +``` + +List configuration sources. + +```bash +$ opencode2 debug config +``` + +Show global paths. + +```bash +$ opencode2 debug paths +``` + +Print a single path. + +```bash +$ opencode2 debug paths db +``` + +View all subcommands and flags. + +```bash +$ opencode2 debug --help +``` + +## upgrade + +`opencode2 upgrade` upgrades OpenCode to the latest or a specific version. Alias: `update`. + +```bash +$ opencode2 upgrade +``` + +Upgrade to a specific version with a specific package manager. + +```bash +$ opencode2 upgrade 1.18.15 --method bun +``` + +View all subcommands and flags. + +```bash +$ opencode2 upgrade --help +``` + +## uninstall + +`opencode2 uninstall` removes OpenCode and all related files. + +```bash +$ opencode2 uninstall +``` + +Preview what would be removed. + +```bash +$ opencode2 uninstall --dry-run +``` + +Keep configuration and session data. + +```bash +$ opencode2 uninstall --keep-config --keep-data +``` + +View all subcommands and flags. + +```bash +$ opencode2 uninstall --help +``` diff --git a/services/www/src/docs/content/cli/web.mdx b/services/www/src/docs/content/cli/web.mdx new file mode 100644 index 00000000000..bbebc6dea91 --- /dev/null +++ b/services/www/src/docs/content/cli/web.mdx @@ -0,0 +1,74 @@ +--- +title: "Web" +description: "Run OpenCode in the browser." +--- + +OpenCode ships with a web ui that is served from the same server that powers the +TUI. It's available by default and password protected. + +## Access + +```bash +$ opencode2 pair + + URLs http://127.0.0.1:49374 + Username opencode + Password ******** +``` + +By default the server runs on port 49374 and listens only on localhost. You can +change this config with the `opencode2 service` command. + +## Configure + +Set any option with `opencode2 service set`: + +```bash +# Listen on every network interface +$ opencode2 service set hostname 0.0.0.0 + +# Use a fixed port instead of the channel default +$ opencode2 service set port 49374 + +# Replace the generated password +$ opencode2 service set password "a-long-secret" + +# Allow a web client served from another origin +$ opencode2 service set cors https://app.example.com,https://other.example.com + +# Pass an environment variable to the server process +$ opencode2 service set env OPENCODE_LOG_LEVEL DEBUG +``` + +Changing a setting stops the background server. To apply the new config + +```bash +$ opencode2 service start +``` + +## Standalone + +`opencode2 serve` runs the same server in the foreground instead of through the +shared background service. + +```bash +$ opencode2 serve --hostname 0.0.0.0 --port 4096 +server listening on http://0.0.0.0:4096 +server password +``` + +Use it when you want to: + +- Run OpenCode on a shared, always-on, or remote host, then connect clients with + `opencode2 --server `. +- Control the hostname, port, and CORS origins for a single process. +- Run under a supervisor like systemd, Docker, or another environment that expects + a foreground process. +- Keep a dedicated server instead of the shared background service. + + +Connect a client to it with `--server`: + +```bash +$ opencode2 --server http://127.0.0.1:4096 +``` diff --git a/services/www/src/docs/content/config.mdx b/services/www/src/docs/content/config.mdx index f63791089d4..6e73b2ab275 100644 --- a/services/www/src/docs/content/config.mdx +++ b/services/www/src/docs/content/config.mdx @@ -247,24 +247,6 @@ field, but it does not run formatters yet. See the [formatters guide](/formatters) for accepted fields and current limitations. -### LSP - -Define language server settings for compatibility and future use. V2 accepts -this field, but it does not start language servers yet. - -```jsonc -{ - "lsp": { - "typescript": { - "command": ["typescript-language-server", "--stdio"], - "extensions": [".ts", ".tsx"], - }, - }, -} -``` - -See the [LSP guide](/lsp) for accepted fields and current limitations. - ### Media Control how oversized images loaded by the `read` tool are resized or rejected diff --git a/services/www/src/docs/content/lsp.mdx b/services/www/src/docs/content/lsp.mdx deleted file mode 100644 index b2443c9c15a..00000000000 --- a/services/www/src/docs/content/lsp.mdx +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: "LSP" ---- - -Language Server Protocol (LSP) integrations can provide code diagnostics, -symbols, definitions, references, and other language-aware context. - - - OpenCode V2 does not yet have an LSP runtime or built-in language servers. The `lsp` configuration is accepted and - preserved, but it does not currently start or download servers, expose an LSP tool, or add diagnostics to file tool - results. - - -## Built-in servers - -There are no built-in LSP servers in the current V2 implementation. Setting -`lsp` to `true` declares that built-ins should be enabled, but has no runtime -effect until V2 provides a server registry and LSP runtime. - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": true, -} -``` - -## Configuration - -The `lsp` field accepts a boolean or an object keyed by server name: - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": { - "custom-typescript": { - "command": ["typescript-language-server", "--stdio"], - "extensions": [".ts", ".tsx"], - "env": { - "TSS_LOG": "-level verbose", - }, - "initialization": { - "preferences": { - "importModuleSpecifierPreference": "relative", - }, - }, - }, - }, -} -``` - -Each enabled server entry has this shape: - -| Property | Type | Required | Description | -| ---------------- | ------------------------- | -------- | --------------------------------------------------------------------------------------------- | -| `command` | `string[]` | Yes | Executable followed by any arguments. | -| `extensions` | `string[]` | No | File extensions associated with the server, including the leading dot. | -| `disabled` | `boolean` | No | Disables the entry when `true`. | -| `env` | `Record` | No | Environment variables for the server process. The property is named `env`, not `environment`. | -| `initialization` | `Record` | No | Server-specific options for the LSP `initialize` request. | - -The only entry that may omit `command` is the disable-only form: - -```jsonc -{ - "lsp": { - "typescript": { - "disabled": true, - }, - }, -} -``` - -Server names are arbitrary. The V2 schema permits `extensions` to be omitted, -including for a custom server, although a future runtime will need a way to -associate that server with files. - -## Disable LSP - -Omit `lsp` when no configuration is needed. Set it to `false` to explicitly -disable the whole integration, including when a lower-priority configuration -set it to `true` or supplied an object: - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "lsp": false, -} -``` - -Use `{ "disabled": true }` under a server name to disable one server while -retaining the object form. `OPENCODE_DISABLE_LSP_DOWNLOAD` is not used by V2; -V2 currently performs no automatic LSP downloads. - -## Current usage - -V2 loads and validates the configuration shape for compatibility and future -integration. It does not currently use LSP when reading, writing, editing, or -patching files, and those tools do not notify a language server or return LSP -diagnostics. - -For reliable feedback today, have the agent run the project's lint, typecheck, -test, or compiler commands. Record those commands in an `AGENTS.md` file or a -skill so the agent knows when and where to run them. diff --git a/services/www/src/docs/content/sharing.mdx b/services/www/src/docs/content/sharing.mdx index 60a893c0278..1f9f406aa60 100644 --- a/services/www/src/docs/content/sharing.mdx +++ b/services/www/src/docs/content/sharing.mdx @@ -1,35 +1,5 @@ --- -title: "Session sharing" +title: "Sharing" --- -Session sharing is not yet available in OpenCode V2. V2 does not currently -publish sessions, upload conversation history to a sharing service, or create -public links. - -There is no functional share or unshare server API endpoint. - -## Configuration - -The V2 configuration schema accepts a `share` field with three values: - -```jsonc title="opencode.jsonc" -{ - "$schema": "https://opencode.ai/config.json", - "share": "manual", -} -``` - -- `"manual"` represents sharing only when explicitly requested. -- `"auto"` represents automatically sharing new sessions. -- `"disabled"` represents preventing session sharing. - -These values are parsed but are not acted on by the current V2 runtime. In -particular, setting `"auto"` does not publish sessions. If `share` is omitted, -V2 leaves the sharing policy unspecified. - -## Beta limitations - -V2 currently provides no public session viewer, share URL, history sync, -retention controls, or unshare/delete operation. Until those surfaces are -implemented in the V2 server and protocol, keep using sessions locally and do -not treat the `share` configuration field as a privacy or publishing control. +OpenCode V2 does not support session sharing yet. diff --git a/services/www/src/docs/content/warming.mdx b/services/www/src/docs/content/warming.mdx index 0e3aa508409..e62c47c4740 100644 --- a/services/www/src/docs/content/warming.mdx +++ b/services/www/src/docs/content/warming.mdx @@ -1,5 +1,5 @@ --- -title: "Session warming" +title: "Warming" --- Session warming sends periodic model requests for recently active sessions. diff --git a/services/www/src/docs/lib/navigation.ts b/services/www/src/docs/lib/navigation.ts index 2da9e28518b..0c84d435e17 100644 --- a/services/www/src/docs/lib/navigation.ts +++ b/services/www/src/docs/lib/navigation.ts @@ -30,7 +30,6 @@ export const docsSections: DocsSection[] = [ { title: "Configure", items: [ - { title: "LSP", slug: "lsp" }, { title: "Agents", slug: "agents" }, { title: "Models", slug: "models" }, { title: "Skills", slug: "skills" }, @@ -46,8 +45,8 @@ export const docsSections: DocsSection[] = [ { title: "MCP servers", slug: "mcp-servers" }, { title: "Permissions", slug: "permissions" }, { title: "Instructions", slug: "instructions" }, - { title: "Session sharing", slug: "sharing" }, - { title: "Session warming", slug: "warming" }, + { title: "Sharing", slug: "sharing" }, + { title: "Warming", slug: "warming" }, ], }, { @@ -67,11 +66,8 @@ export const docsSections: DocsSection[] = [ items: [ { title: "Intro", slug: "cli" }, { title: "Config", slug: "cli/config" }, - ], - }, - { - title: "Configure", - items: [ + { title: "Web", slug: "cli/web" }, + { title: "Commands", slug: "cli/commands" }, { title: "Theme", slug: "cli/theme" }, { title: "Plugins", slug: "cli/plugins" }, { title: "Keybinds", slug: "cli/keybinds" },