Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/shell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ jobs:
- roadie-application-config
- roadie-fork-workspace
- roadie-wordpress-context
- roadie-wordpress-platform
- roadie-kimaki-migration
- roadie-multi-instance
- roadie-provision
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,7 @@ These are no longer managed runtimes ([#751](https://github.com/Extra-Chill/wp-c

[Roadie](https://github.com/Extra-Chill/roadie) is the Discord surface and the only managed chat bridge. Setup installs the pinned Roadie release (`bridges/roadie/roadie-version`) and its [Pi](https://pi.dev) agent backend (`bridges/roadie/pi-version`, `@earendil-works/pi-coding-agent`), each moved to its newest release hourly by its `Refresh … pin` workflow (Pi within its major version). VPS installs use root-owned prefixes under `/usr/local/lib/wp-coding-agents/`; local installs use the user's global npm. Pi is Roadie's only agent backend (Roadie v0.67.0 removed OpenCode), so the unit sets no `ROADIE_BACKEND`. It carries `ROADIE_PI_BIN` once `pi --version` passes Roadie's 1.x gate as the service user; when Pi does not verify, setup and upgrade report it, and Roadie looks for `pi` on `PATH` and fails at startup with its own error. `ROADIE_PI_MODEL` comes from the operator: pass `ROADIE_PI_MODEL=<provider/model>` to setup or upgrade, and an installed unit keeps the value it already carries. Without one, Pi uses `defaultProvider`/`defaultModel` from `settings.json` in Roadie's Pi agent dir (`<data-dir>/pi-agent`). `ROADIE_PI_TITLE_MODEL=<provider/model>` names a small model for thread titles, passed and kept the same way; without one, titles use the session model. `opencode.json` is not read for Roadie. With `--roadie-pool-url <url>` (and the bot's client key from `roadie credentials client add` on the pool host, passed once as `ROADIE_POOL_KEY` and stored as `<secrets>/pool-key`, mode 0600) the bot keeps no accounts and bills its Pi sessions through a shared pool host (`roadie credentials serve`); without the key it keeps its local pool and reports the gap. An admin client key (`client add <name> --admin`, passed once as `ROADIE_POOL_ADMIN_KEY` and stored as `<secrets>/pool-admin-key`) adds `ROADIE_POOL_ADMIN_KEY_FILE`, so `/credentials` and `/login` manage the pool host's accounts. `--roadie-pool-url local` switches back. Roadie runs with `ROADIE_MANAGED=1` so it never upgrades itself, and keeps secrets as files under `/etc/wp-coding-agents/roadie/` (`bot-token`, and a `send-token` the web user reads so scheduled dispatch can `roadie send` through the running bot without sudo). Roadie resumes runs that a restart interrupted.

Managed installs replace Roadie's generic prompt sections with a small bridge prompt (`ROADIE_PROMPT_CONFIG`) so orchestration, workspace, tunnel, and preview guidance come from the installed components that own those capabilities. The managed Roadie plugins (`host-upgrade`, `wordpress-context`, `fork-workspace`) are synced into Roadie's config directory. See [managed Roadie context](docs/roadie-managed-context.md).
Managed installs replace Roadie's generic prompt sections with a small bridge prompt (`ROADIE_PROMPT_CONFIG`) so orchestration, workspace, tunnel, and preview guidance come from the installed components that own those capabilities. The managed Roadie plugins (`host-upgrade`, `wordpress-context`, `wordpress-platform`, `fork-workspace`) are synced into Roadie's config directory. `wordpress-platform` registers WordPress itself as a Roadie chat platform: turns queued by the runtime-backed `agents/chat` handler arrive through the inbound-event connector, and the session's output is written back into the WordPress conversation run through the claim-token-bound `agents/*` write abilities. See [managed Roadie context](docs/roadie-managed-context.md).

**Migrating from Kimaki.** An upgrade on a Kimaki install migrates it in place: Kimaki is stopped, its session database is copied with an SQLite online backup and integrity check, attachments and projects are copied, the bot token, lock port, and agent slug are carried over, and the Kimaki unit is disabled. The subscription accounts move too: OpenCode's rotation pools (`<provider>-oauth-accounts.json`) and logins (`auth.json`) are imported into Roadie's shared credential pool (`roadie credentials import-opencode`), in the same order with the same active account, so nobody logs in again. Model choices follow: each direct model on those providers (`anthropic/claude-opus-5-5`, ...) in the stored channel, session and global choices gets a Roadie rotation of exactly that model (`roadie/anthropic-claude-opus-5-5`), and the choices point at it. Same model, now rotating across that provider's accounts; no routing policy is installed, and a rotation that already exists is kept. Add cross-provider fallbacks with `roadie credentials rotation set <name> <provider/model>...`. API-key providers are left as they are. This happens only while Kimaki is stopped, because refresh tokens rotate on use and two live copies invalidate each other. The Kimaki unit and `~/.kimaki` are left untouched as the rollback; a failed migration (database or accounts) restarts Kimaki.

Expand Down
2 changes: 1 addition & 1 deletion bridges/roadie.sh
Original file line number Diff line number Diff line change
Expand Up @@ -673,7 +673,7 @@ roadie_plugins_dir() {
}

roadie_plugins_value() {
printf '%s/host-upgrade.mjs,%s/wordpress-context.mjs,%s/fork-workspace.mjs\n' "$(roadie_plugins_dir)" "$(roadie_plugins_dir)" "$(roadie_plugins_dir)"
printf '%s/host-upgrade.mjs,%s/wordpress-context.mjs,%s/wordpress-platform.mjs,%s/fork-workspace.mjs\n' "$(roadie_plugins_dir)" "$(roadie_plugins_dir)" "$(roadie_plugins_dir)" "$(roadie_plugins_dir)"
}

# ROADIE_PLUGINS is installer-owned: its value is the managed plugin set this
Expand Down
Loading
Loading