From 66b18959ebc7b699a74ce69d3adfb4c4dcaa5fd1 Mon Sep 17 00:00:00 2001 From: Jay V Date: Mon, 26 May 2025 17:25:06 -0400 Subject: Merging docs and share app --- www/src/assets/lander/check.svg | 2 - www/src/assets/lander/copy.svg | 2 - www/src/assets/logo-dark.svg | 11 - www/src/assets/logo-light.svg | 11 - www/src/components/Header.astro | 57 ----- www/src/components/Hero.astro | 11 - www/src/components/Lander.astro | 269 ----------------------- www/src/components/Share.tsx | 353 ------------------------------ www/src/content.config.ts | 7 - www/src/content/docs/docs/cli.mdx | 89 -------- www/src/content/docs/docs/config.mdx | 88 -------- www/src/content/docs/docs/index.mdx | 58 ----- www/src/content/docs/docs/lsp-servers.mdx | 34 --- www/src/content/docs/docs/mcp-servers.mdx | 51 ----- www/src/content/docs/docs/models.mdx | 34 --- www/src/content/docs/docs/shortcuts.mdx | 68 ------ www/src/content/docs/docs/themes.mdx | 75 ------- www/src/content/docs/index.mdx | 12 - www/src/pages/share/[...id].astro | 35 --- 19 files changed, 1267 deletions(-) delete mode 100644 www/src/assets/lander/check.svg delete mode 100644 www/src/assets/lander/copy.svg delete mode 100644 www/src/assets/logo-dark.svg delete mode 100644 www/src/assets/logo-light.svg delete mode 100644 www/src/components/Header.astro delete mode 100644 www/src/components/Hero.astro delete mode 100644 www/src/components/Lander.astro delete mode 100644 www/src/components/Share.tsx delete mode 100644 www/src/content.config.ts delete mode 100644 www/src/content/docs/docs/cli.mdx delete mode 100644 www/src/content/docs/docs/config.mdx delete mode 100644 www/src/content/docs/docs/index.mdx delete mode 100644 www/src/content/docs/docs/lsp-servers.mdx delete mode 100644 www/src/content/docs/docs/mcp-servers.mdx delete mode 100644 www/src/content/docs/docs/models.mdx delete mode 100644 www/src/content/docs/docs/shortcuts.mdx delete mode 100644 www/src/content/docs/docs/themes.mdx delete mode 100644 www/src/content/docs/index.mdx delete mode 100644 www/src/pages/share/[...id].astro (limited to 'www/src') diff --git a/www/src/assets/lander/check.svg b/www/src/assets/lander/check.svg deleted file mode 100644 index 22de6f2a8..000000000 --- a/www/src/assets/lander/check.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/www/src/assets/lander/copy.svg b/www/src/assets/lander/copy.svg deleted file mode 100644 index f1baac30a..000000000 --- a/www/src/assets/lander/copy.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/www/src/assets/logo-dark.svg b/www/src/assets/logo-dark.svg deleted file mode 100644 index 8fd212081..000000000 --- a/www/src/assets/logo-dark.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/www/src/assets/logo-light.svg b/www/src/assets/logo-light.svg deleted file mode 100644 index 0a9007e1a..000000000 --- a/www/src/assets/logo-light.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/www/src/components/Header.astro b/www/src/components/Header.astro deleted file mode 100644 index 85cdc2ea5..000000000 --- a/www/src/components/Header.astro +++ /dev/null @@ -1,57 +0,0 @@ ---- -import config from 'virtual:starlight/user-config'; -import { Icon } from '@astrojs/starlight/components'; -import { HeaderLinks } from 'toolbeam-docs-theme/components'; -import Default from 'toolbeam-docs-theme/overrides/Header.astro'; -import SiteTitle from '@astrojs/starlight/components/SiteTitle.astro'; - -const path = Astro.url.pathname; - -const links = config.social || []; ---- - -{ path.startsWith("/share/") - ?
-
- -
-
- -
-
- : -} - - - diff --git a/www/src/components/Hero.astro b/www/src/components/Hero.astro deleted file mode 100644 index f80f85266..000000000 --- a/www/src/components/Hero.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/Hero.astro'; -import Lander from './Lander.astro'; - -const { slug } = Astro.locals.starlightRoute.entry; ---- - -{ slug === "" - ? - : -} diff --git a/www/src/components/Lander.astro b/www/src/components/Lander.astro deleted file mode 100644 index d27358f8f..000000000 --- a/www/src/components/Lander.astro +++ /dev/null @@ -1,269 +0,0 @@ ---- -import { Image } from 'astro:assets'; -import config from "virtual:starlight/user-config"; -import type { Props } from '@astrojs/starlight/props'; - -import CopyIcon from "../assets/lander/copy.svg"; -import CheckIcon from "../assets/lander/check.svg"; - -const { data } = Astro.locals.starlightRoute.entry; -const { title = data.title, tagline, image, actions = [] } = data.hero || {}; - -const imageAttrs = { - loading: 'eager' as const, - decoding: 'async' as const, - width: 400, - alt: image?.alt || '', -}; - -const github = config.social.filter(s => s.icon === 'github')[0]; - -const command = "npm i -g"; -const pkg = "opencode"; - -let darkImage: ImageMetadata | undefined; -let lightImage: ImageMetadata | undefined; -let rawHtml: string | undefined; -if (image) { - if ('file' in image) { - darkImage = image.file; - } else if ('dark' in image) { - darkImage = image.dark; - lightImage = image.light; - } else { - rawHtml = image.html; - } -} ---- -
-
- -

The AI coding agent built for the terminal.

-
- -
- -
- -
- -
- -
-
    -
  • Native TUI: A native terminal UI for a smoother, snappier experience.
  • -
  • LSP enabled: Loads the right LSPs for your codebase. Helps the LLM make fewer mistakes.
  • -
  • Multi-session: Start multiple conversations in a project to have agents working in parallel.
  • -
  • Use any model: Supports all the models from OpenAI, Anthropic, Google, OpenRouter, and more.
  • -
  • Change tracking: View the file changes from the current conversation in the sidebar.
  • -
  • Edit with Vim: Use Vim as an external editor to compose longer messages.
  • -
-
- - -
- - - - - - diff --git a/www/src/components/Share.tsx b/www/src/components/Share.tsx deleted file mode 100644 index 66748bcab..000000000 --- a/www/src/components/Share.tsx +++ /dev/null @@ -1,353 +0,0 @@ -import { createSignal, onCleanup, onMount, Show, For, createMemo } from "solid-js" - -type MessagePart = { - type: string - text?: string - [key: string]: any -} - -type MessageContent = { - role?: string - parts?: MessagePart[] - metadata?: { - time?: { - created?: number - } - } - [key: string]: any -} - -type Message = { - key: string - content: string -} - -type SessionInfo = { - tokens?: { - input?: number - output?: number - reasoning?: number - } -} - -export default function Share(props: { id: string, api: string }) { - const [messages, setMessages] = createSignal([]) - const [connectionStatus, setConnectionStatus] = createSignal("Disconnected") - const [sessionInfo, setSessionInfo] = createSignal(null) - - onMount(() => { - // Get the API URL from environment - const apiUrl = props.api - const shareId = props.id - - console.log("Mounting Share component with ID:", shareId) - console.log("API URL:", apiUrl) - - if (!shareId) { - console.error("Share ID not found in environment variables") - setConnectionStatus("Error: Share ID not found") - return - } - - if (!apiUrl) { - console.error("API URL not found in environment variables") - setConnectionStatus("Error: API URL not found") - return - } - - let reconnectTimer: number | undefined - let socket: WebSocket | null = null - - // Function to create and set up WebSocket with auto-reconnect - const setupWebSocket = () => { - // Close any existing connection - if (socket) { - socket.close() - } - - setConnectionStatus("Connecting...") - - // Always use secure WebSocket protocol (wss) - const wsBaseUrl = apiUrl.replace(/^https?:\/\//, "wss://") - const wsUrl = `${wsBaseUrl}/share_poll?shareID=${shareId}` - console.log("Connecting to WebSocket URL:", wsUrl) - - // Create WebSocket connection - socket = new WebSocket(wsUrl) - - // Handle connection opening - socket.onopen = () => { - setConnectionStatus("Connected") - console.log("WebSocket connection established") - } - - // Handle incoming messages - socket.onmessage = (event) => { - console.log("WebSocket message received") - try { - const data = JSON.parse(event.data) as Message - - // Check if this is a session info message - if (data.key.startsWith("session/info/")) { - try { - const infoContent = JSON.parse(data.content) as SessionInfo; - setSessionInfo(infoContent); - console.log("Session info updated:", infoContent); - } catch (e) { - console.error("Error parsing session info:", e); - } - } else { - // For all other messages - setMessages((prev) => { - // Check if message with this key already exists - const existingIndex = prev.findIndex(msg => msg.key === data.key) - - if (existingIndex >= 0) { - // Update existing message - const updated = [...prev] - updated[existingIndex] = data - return updated - } else { - // Add new message - return [...prev, data] - } - }) - } - } catch (error) { - console.error("Error parsing WebSocket message:", error) - } - } - - // Handle errors - socket.onerror = (error) => { - console.error("WebSocket error:", error) - setConnectionStatus("Error: Connection failed") - } - - // Handle connection close and reconnection - socket.onclose = (event) => { - console.log(`WebSocket closed: ${event.code} ${event.reason}`) - setConnectionStatus("Disconnected, reconnecting...") - - // Try to reconnect after 2 seconds - clearTimeout(reconnectTimer) - reconnectTimer = window.setTimeout( - setupWebSocket, - 2000, - ) as unknown as number - } - } - - // Initial connection - setupWebSocket() - - // Clean up on component unmount - onCleanup(() => { - console.log("Cleaning up WebSocket connection") - if (socket) { - socket.close() - } - clearTimeout(reconnectTimer) - }) - }) - - return ( -
-

Share: {props.id}

- -
-

WebSocket Connection

-

- Status: {connectionStatus()} -

- -

Live Updates

- - -
-

Session Information

-
-
- Input Tokens: {sessionInfo()?.tokens?.input || 0} -
-
- Output Tokens: {sessionInfo()?.tokens?.output || 0} -
-
- Reasoning Tokens: {sessionInfo()?.tokens?.reasoning || 0} -
-
-
-
- -
- 0} - fallback={

Waiting for messages...

} - > -
    - - {(msg) => ( -
  • -
    - Key: {msg.key} -
    - - {(() => { - try { - const parsed = JSON.parse(msg.content) as MessageContent; - const createdTime = parsed.metadata?.time?.created - ? new Date(parsed.metadata.time.created).toLocaleString() - : 'Unknown time'; - - return ( - <> -
    - Full Content: -
    -                                {JSON.stringify(parsed, null, 2)}
    -                              
    -
    - - {parsed.parts && parsed.parts.length > 0 && ( -
    -
    - Role: {parsed.role || 'Unknown'} - - {createdTime} - -
    - -
    - - {(part, index) => ( -
    - {part.type === "text" ? ( -
    -                                            {part.text}
    -                                          
    - ) : ( -
    -
    - Part type: {part.type} -
    -
    -                                              {JSON.stringify(part, null, 2)}
    -                                            
    -
    - )} -
    - )} -
    -
    -
    - )} - - ); - } catch (e) { - return ( -
    - Content: -
    -                              {msg.content}
    -                            
    -
    - ); - } - })()} -
  • - )} -
    -
-
-
-
-
- ) -} - diff --git a/www/src/content.config.ts b/www/src/content.config.ts deleted file mode 100644 index d9ee8c9d1..000000000 --- a/www/src/content.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineCollection } from 'astro:content'; -import { docsLoader } from '@astrojs/starlight/loaders'; -import { docsSchema } from '@astrojs/starlight/schema'; - -export const collections = { - docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), -}; diff --git a/www/src/content/docs/docs/cli.mdx b/www/src/content/docs/docs/cli.mdx deleted file mode 100644 index 44a56e1fb..000000000 --- a/www/src/content/docs/docs/cli.mdx +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: CLI ---- - -Once installed you can run the OpenCode CLI. - -```bash -opencode -``` - -Or pass in flags. For example, to start with debug logging: - -```bash -opencode -d -``` - -Or start with a specific working directory. - -```bash -opencode -c /path/to/project -``` - -## Flags - -The OpenCode CLI takes the following flags. - -| Flag | Short | Description | -| -- | -- | -- | -| `--help` | `-h` | Display help | -| `--debug` | `-d` | Enable debug mode | -| `--cwd` | `-c` | Set current working directory | -| `--prompt` | `-p` | Run a single prompt in non-interactive mode | -| `--output-format` | `-f` | Output format for non-interactive mode, `text` or `json` | -| `--quiet` | `-q` | Hide spinner in non-interactive mode | -| `--verbose` | | Display logs to stderr in non-interactive mode | -| `--allowedTools` | | Restrict the agent to only use specified tools | -| `--excludedTools` | | Prevent the agent from using specified tools | - -## Non-interactive - -By default, OpenCode runs in interactive mode. - -But you can also run OpenCode in non-interactive mode by passing a prompt directly as a command-line argument. This is useful for scripting, automation, or when you want a quick answer without launching the full TUI. - -For example, to run a single prompt use the `-p` flag. - -```bash "-p" -opencode -p "Explain the use of context in Go" -``` - -If you want to run without showing the spinner, use `-q`. - -```bash "-q" -opencode -p "Explain the use of context in Go" -q -``` - -In this mode, OpenCode will process your prompt, print the result to standard output, and then exit. All **permissions are auto-approved** for the session. - -#### Tool restrictions - -You can control which tools the AI assistant has access to in non-interactive mode. - -- `--allowedTools` - - A comma-separated list of tools that the agent is allowed to use. Only these tools will be available. - - ```bash "--allowedTools" - opencode -p "Explain the use of context in Go" --allowedTools=view,ls,glob - ``` - -- `--excludedTools` - - Comma-separated list of tools that the agent is not allowed to use. All other tools will be available. - - ```bash "--excludedTools" - opencode -p "Explain the use of context in Go" --excludedTools=bash,edit - ``` - -These flags are mutually exclusive. So you can either use `--allowedTools` or `--excludedTools`, but not both. - -#### Output formats - -In non-interactive mode, you can also set the CLI to return as JSON using `-f`. - -```bash "-f json" -opencode -p "Explain the use of context in Go" -f json -``` - -By default, this is set to `text`, to return plain text. diff --git a/www/src/content/docs/docs/config.mdx b/www/src/content/docs/docs/config.mdx deleted file mode 100644 index 288f194c5..000000000 --- a/www/src/content/docs/docs/config.mdx +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Config ---- - -You can configure OpenCode using the OpenCode config. It can be places in: - -- `$HOME/.opencode.json` -- `$XDG_CONFIG_HOME/opencode/.opencode.json` - -Or in the current directory, `./.opencode.json`. - -## OpenCode config - -The config file has the following structure. - -```json title=".opencode.json" -{ - "data": { - "directory": ".opencode" - }, - "providers": { - "openai": { - "apiKey": "your-api-key", - "disabled": false - }, - "anthropic": { - "apiKey": "your-api-key", - "disabled": false - }, - "groq": { - "apiKey": "your-api-key", - "disabled": false - }, - "openrouter": { - "apiKey": "your-api-key", - "disabled": false - } - }, - "agents": { - "primary": { - "model": "claude-3.7-sonnet", - "maxTokens": 5000 - }, - "task": { - "model": "claude-3.7-sonnet", - "maxTokens": 5000 - }, - "title": { - "model": "claude-3.7-sonnet", - "maxTokens": 80 - } - }, - "mcpServers": { - "example": { - "type": "stdio", - "command": "path/to/mcp-server", - "env": [], - "args": [] - } - }, - "lsp": { - "go": { - "disabled": false, - "command": "gopls" - } - }, - "debug": false, - "debugLSP": false -} -``` - -## Environment variables - -For the providers, you can also specify the keys using environment variables. - -| Environment Variable | Models | -| -------------------------- | ----------- | -| `ANTHROPIC_API_KEY` | Claude | -| `OPENAI_API_KEY` | OpenAI | -| `GEMINI_API_KEY` | Google Gemini | -| `GROQ_API_KEY` | Groq | -| `AWS_ACCESS_KEY_ID` | Amazon Bedrock | -| `AWS_SECRET_ACCESS_KEY` | Amazon Bedrock | -| `AWS_REGION` | Amazon Bedrock | -| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI | -| `AZURE_OPENAI_API_KEY` | Azure OpenAI, optional when using Entra ID | -| `AZURE_OPENAI_API_VERSION` | Azure OpenAI | - diff --git a/www/src/content/docs/docs/index.mdx b/www/src/content/docs/docs/index.mdx deleted file mode 100644 index e6f71be19..000000000 --- a/www/src/content/docs/docs/index.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Intro ---- - -OpenCode is an AI coding agent built natively for the terminal. It features: - -- Native TUI for a smoother, snappier experience -- Uses LSPs to help the LLM make fewer mistakes -- Opening multiple conversations with the same project -- Use of any model through the AI SDK -- Tracks and visualizes all the file changes -- Editing longer messages with Vim - -## Installation - -```bash -npm i -g opencode -``` - -If you don't have NPM installed, you can also install the OpenCode binary through the following. - -#### Using the install script - -```bash -curl -fsSL https://opencode.ai/install | bash -``` - -Or install a specific version. - -```bash -curl -fsSL https://opencode.ai/install | VERSION=0.1.0 bash -``` - -#### Using Homebrew on macOS and Linux - -```bash -brew install sst/tap/opencode -``` - -#### Using AUR in Arch Linux - -With yay. - -```bash -yay -S opencode-bin -``` - -Or with paru. - -```bash -paru -S opencode-bin -``` - -#### Using Go - -```bash -go install github.com/sst/opencode@latest -``` diff --git a/www/src/content/docs/docs/lsp-servers.mdx b/www/src/content/docs/docs/lsp-servers.mdx deleted file mode 100644 index cd259dea7..000000000 --- a/www/src/content/docs/docs/lsp-servers.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: LSP servers ---- - -OpenCode integrates with _Language Server Protocol_, or LSP to improve how the LLM interacts with your codebase. - -LSP servers for different languages give the LLM: - -- **Diagnostics**: These include things like errors and lint warnings. So the LLM can generate code that has fewer mistakes without having to run the code. -- **Quick actions**: The LSP can allow the LLM to better navigate the codebase through features like _go-to-definition_ and _find references_. - -## Auto-detection - -By default, OpenCode will **automatically detect** the languages used in your project and add the right LSP servers. - -## Manual configuration - -You can also manually configure LSP servers by adding them under the `lsp` section in your OpenCode config. - -```json title=".opencode.json" -{ - "lsp": { - "go": { - "disabled": false, - "command": "gopls" - }, - "typescript": { - "disabled": false, - "command": "typescript-language-server", - "args": ["--stdio"] - } - } -} -``` diff --git a/www/src/content/docs/docs/mcp-servers.mdx b/www/src/content/docs/docs/mcp-servers.mdx deleted file mode 100644 index 28c6d2ab2..000000000 --- a/www/src/content/docs/docs/mcp-servers.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: MCP servers ---- - -You can add external tools to OpenCode using the _Model Context Protocol_, or MCP. OpenCode supports both: - -- Local servers that use standard input/output, `stdio` -- Remote servers that use server-sent events `sse` - -## Add MCP servers - -You can define MCP servers in your OpenCode config under the `mcpServers` section: - -### Local - -To add a local or `stdio` MCP server. - -```json title=".opencode.json" {4} -{ - "mcpServers": { - "local-example": { - "type": "stdio", - "command": "path/to/mcp-server", - "env": [], - "args": [] - } - } -} -``` - -### Remote - -To add a remote or `sse` MCP server. - -```json title=".opencode.json" {4} -{ - "mcpServers": { - "remote-example": { - "type": "sse", - "url": "https://example.com/mcp", - "headers": { - "Authorization": "Bearer token" - } - } - } -} -``` - -## Usage - -Once added, MCP tools are automatically available to the LLM alongside built-in tools. They follow the same permission model; requiring user approval before execution. diff --git a/www/src/content/docs/docs/models.mdx b/www/src/content/docs/docs/models.mdx deleted file mode 100644 index c40216695..000000000 --- a/www/src/content/docs/docs/models.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Models ---- - -OpenCode uses the [AI SDK](https://ai-sdk.dev/) to have the support for **all the AI models**. - -Start by setting the [keys for the providers](/docs/config) you want to use in your OpenCode config. - -## Model select - -You can now select the model you want from the menu by hitting `Ctrl+O`. - -## Multiple models - -You can also use specific models for specific tasks. For example, you can use a smaller model to generate the title of the conversation or to run a sub task. - -```json title=".opencode.json" -{ - "agents": { - "primary": { - "model": "gpt-4", - "maxTokens": 5000 - }, - "task": { - "model": "gpt-3.5-turbo", - "maxTokens": 5000 - }, - "title": { - "model": "gpt-3.5-turbo", - "maxTokens": 80 - } - } -} -``` diff --git a/www/src/content/docs/docs/shortcuts.mdx b/www/src/content/docs/docs/shortcuts.mdx deleted file mode 100644 index dd866e0f3..000000000 --- a/www/src/content/docs/docs/shortcuts.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Keyboard shortcuts -sidebar: - label: Shortcuts ---- - -Below are a list of keyboard shortcuts that OpenCode supports. - -## Global - -| Shortcut | Action | -| -------- | ------------------------------------------------------- | -| `Ctrl+C` | Quit application | -| `Ctrl+?` | Toggle help dialog | -| `?` | Toggle help dialog (when not in editing mode) | -| `Ctrl+L` | View logs | -| `Ctrl+A` | Switch session | -| `Ctrl+K` | Command dialog | -| `Ctrl+O` | Toggle model selection dialog | -| `Esc` | Close current overlay/dialog or return to previous mode | - -## Chat pane - -| Shortcut | Action | -| -------- | --------------------------------------- | -| `Ctrl+N` | Create new session | -| `Ctrl+X` | Cancel current operation/generation | -| `i` | Focus editor (when not in writing mode) | -| `Esc` | Exit writing mode and focus messages | - -## Editor view - -| Shortcut | Action | -| ------------------- | ----------------------------------------- | -| `Ctrl+S` | Send message (when editor is focused) | -| `Enter` or `Ctrl+S` | Send message (when editor is not focused) | -| `Ctrl+E` | Open external editor | -| `Esc` | Blur editor and focus messages | - -## Session dialog - -| Shortcut | Action | -| ---------- | ---------------- | -| `↑` or `k` | Previous session | -| `↓` or `j` | Next session | -| `Enter` | Select session | -| `Esc` | Close dialog | - -## Model dialog - -| Shortcut | Action | -| ---------- | ----------------- | -| `↑` or `k` | Move up | -| `↓` or `j` | Move down | -| `←` or `h` | Previous provider | -| `→` or `l` | Next provider | -| `Esc` | Close dialog | - -## Permission dialog - -| Shortcut | Action | -| ----------------------- | ---------------------------- | -| `←` or `left` | Switch options left | -| `→` or `right` or `tab` | Switch options right | -| `Enter` or `space` | Confirm selection | -| `a` | Allow permission | -| `A` | Allow permission for session | -| `d` | Deny permission | diff --git a/www/src/content/docs/docs/themes.mdx b/www/src/content/docs/docs/themes.mdx deleted file mode 100644 index e691a22e7..000000000 --- a/www/src/content/docs/docs/themes.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Themes ---- - -OpenCode supports most common terminal themes and you can create your own custom theme. - -## Built-in themes - -The following predefined themes are available: - -- `opencode` -- `catppuccin` -- `dracula` -- `flexoki` -- `gruvbox` -- `monokai` -- `onedark` -- `tokyonight` -- `tron` -- `custom` - -Where `opencode` is the default theme and `custom` let's you define your own theme. - -## Setting a theme - -You can set your theme in your OpenCode config. - -```json title=".opencode.json" -{ - "tui": { - "theme": "monokai" - } -} -``` - -## Create a theme - -You can create your own custom theme by setting the `theme: custom` and providing color definitions through the `customTheme`. - -```json title=".opencode.json" -{ - "tui": { - "theme": "custom", - "customTheme": { - "primary": "#ffcc00", - "secondary": "#00ccff", - "accent": { "dark": "#aa00ff", "light": "#ddccff" }, - "error": "#ff0000" - } - } -} -``` - -#### Color keys - -You can define any of the following color keys in your `customTheme`. - -| Type | Color keys | -| --- | --- | -| Base colors | `primary`, `secondary`, `accent` | -| Status colors | `error`, `warning`, `success`, `info` | -| Text colors | `text`, `textMuted`, `textEmphasized` | -| Background colors | `background`, `backgroundSecondary`, `backgroundDarker` | -| Border colors | `borderNormal`, `borderFocused`, `borderDim` | -| Diff view colors | `diffAdded`, `diffRemoved`, `diffContext`, etc. | - -You don't need to define all the color keys. Any undefined colors will fall back to the default `opencode` theme colors. - -#### Color definitions - -Color keys can take: - -1. **Hex string**: A single hex color string, like `"#aabbcc"`, that'll be used for both light and dark terminal backgrounds. - -2. **Light and dark colors**: An object with `dark` and `light` hex colors that'll be set based on the terminal's background. diff --git a/www/src/content/docs/index.mdx b/www/src/content/docs/index.mdx deleted file mode 100644 index 176520ec5..000000000 --- a/www/src/content/docs/index.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: OpenCode -description: The AI coding agent built for the terminal. -template: splash -hero: - title: The AI coding agent built for the terminal. - tagline: The AI coding agent built for the terminal. - image: - dark: ../../assets/logo-dark.svg - light: ../../assets/logo-light.svg - alt: OpenCode logo ---- diff --git a/www/src/pages/share/[...id].astro b/www/src/pages/share/[...id].astro deleted file mode 100644 index c3bc50d3b..000000000 --- a/www/src/pages/share/[...id].astro +++ /dev/null @@ -1,35 +0,0 @@ ---- -import config from "virtual:starlight/user-config"; - -import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro'; -import Share from "../../components/Share.tsx"; - -export const prerender = false; - -// TODO: Replace with API URL from environment - -const { id } = Astro.params; -console.log(Astro.url.pathname); -//console.log(config); ---- - - - - - - -- cgit v1.2.3