136 lines
3.8 KiB
Markdown
136 lines
3.8 KiB
Markdown
# opencode server guide
|
|
|
|
How to run `opencode serve` and use `ai` from ComputerCraft directly, no proxy.
|
|
|
|
See [`opencode_api.md`](opencode_api.md) for the full API reference.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
CC Computer
|
|
└─ ai.lua (libai.lua)
|
|
└─ POST /session/:id/message → opencode serve
|
|
```
|
|
|
|
## 0. Install TrapOS and the AI package
|
|
|
|
On a fresh CC computer (beta branch):
|
|
|
|
```
|
|
wget run https://raw.githubusercontent.com/guillaumearm/cc-libs/next/install-ccpm.lua --beta
|
|
ccpm update
|
|
ccpm install trapos
|
|
```
|
|
|
|
## 1. Start `opencode serve`
|
|
|
|
```bash
|
|
opencode serve --hostname 0.0.0.0 --port 4096
|
|
```
|
|
|
|
With Basic Auth (recommended for LAN exposure):
|
|
|
|
```bash
|
|
OPENCODE_SERVER_PASSWORD=secret opencode serve \
|
|
--hostname 0.0.0.0 \
|
|
--port 4096
|
|
```
|
|
|
|
Default username is `opencode`. Override with `OPENCODE_SERVER_USERNAME=myuser`.
|
|
|
|
Check it's alive:
|
|
|
|
```bash
|
|
curl http://localhost:4096/global/health
|
|
```
|
|
|
|
With Basic Auth:
|
|
|
|
```bash
|
|
curl -u opencode:secret http://localhost:4096/global/health
|
|
```
|
|
|
|
## 2. (Optional) Attach the TUI
|
|
|
|
Open the interactive TUI connected to the running server. CC clients and the TUI share the same session state.
|
|
|
|
```bash
|
|
opencode attach http://127.0.0.1:4096
|
|
```
|
|
|
|
To target a specific session from CC, grab the session ID shown in the TUI and run:
|
|
|
|
```sh
|
|
set opencc.session_id ses_abc123
|
|
```
|
|
|
|
## 3. Configure CC settings
|
|
|
|
Use the CraftOS shell `set` program at the ComputerCraft console or CraftOS-PC terminal. It persists immediately — no `save` step. The Lua [settings](https://tweaked.cc/module/settings.html) API would also work from a script, but at the shell prompt use `set`.
|
|
|
|
```sh
|
|
set opencc.server_url http://<host-ip>:4096
|
|
```
|
|
|
|
For example locally:
|
|
|
|
```sh
|
|
set opencc.server_url http://127.0.0.1:4096
|
|
```
|
|
|
|
With auth:
|
|
|
|
```sh
|
|
set opencc.password secret
|
|
```
|
|
|
|
Optional — override the Basic Auth username (default `opencode`):
|
|
|
|
```sh
|
|
set opencc.username myuser
|
|
```
|
|
|
|
Pick the provider and model. `ai` posts to `/session/:id/prompt_async`, which (unlike the blocking `/message` endpoint) does **not** fall back to a server-side default — the assistant message will never be generated if these are unset:
|
|
|
|
```sh
|
|
set opencc.provider_id anthropic
|
|
set opencc.model_id claude-opus-4-7
|
|
```
|
|
|
|
- **CraftOS-PC (localhost):** `http://127.0.0.1:4096`
|
|
- **In-game ATM10:** use your LAN IP (e.g. `192.168.x.x`) — add it to `http.rules` in `config/computercraft-server.toml`
|
|
|
|
## 4. Run `ai`
|
|
|
|
```
|
|
ai ping -- ping, reuses existing session
|
|
ai "explain what a turtle is"
|
|
ai new "start a fresh topic" -- forget current session, start fresh
|
|
ai sessions -- list all server sessions with their IDs
|
|
ai --help
|
|
ai --version
|
|
```
|
|
|
|
Expected `ai ping` output on a working setup: `pong`.
|
|
|
|
## 5. CraftOS-PC (no Minecraft)
|
|
|
|
```bash
|
|
just trapos --headless -- /programs/ai.lua ping
|
|
```
|
|
|
|
Set settings inside the harness before running, or inject them via the test API.
|
|
|
|
## Troubleshooting
|
|
|
|
| Error | Cause | Fix |
|
|
|---|---|---|
|
|
| `missing opencc.server_url` | Setting not set | `set opencc.server_url http://...` |
|
|
| `serveur injoignable` | Server not running or wrong URL | Start `opencode serve`, check URL/port |
|
|
| `erreur message: HTTP 401` | Wrong password | Check `opencc.password` matches `OPENCODE_SERVER_PASSWORD` |
|
|
| `missing prompt` | No prompt was passed | Run `ai <prompt>` or `ai ping` |
|
|
| `session introuvable; lance: ai new <prompt>` | Session was deleted or server restarted | Run `ai new <prompt>` |
|
|
| `erreur message: HTTP 504` | AI took too long | Retry; consider a faster model |
|
|
| `delai depasse en attendant la reponse AI` | Async polling timed out — often because opencode received the prompt but never started generation | Make sure `opencc.provider_id` and `opencc.model_id` are set; otherwise increase `opencc.poll_timeout_seconds` or check opencode logs |
|
|
| `reponse vide` | Reply had no text parts | Check opencode logs |
|