Standalone Botto Svelte app
  • TypeScript 79.9%
  • Python 6.8%
  • Shell 4.1%
  • JavaScript 3.2%
  • Svelte 3%
  • Other 3%
Find a file
Jannick Lawson e2a1a55b4b
Some checks failed
ci / build (push) Has been cancelled
ci / publish (push) Has been cancelled
botto: preserve memory v2 transition state
2026-05-22 22:36:45 +02:00
.forgejo/workflows Initial Botto Svelte app 2026-04-16 22:57:45 +02:00
docs/adr botto: preserve memory v2 transition state 2026-05-22 22:36:45 +02:00
runtime botto: preserve memory v2 transition state 2026-05-22 22:36:45 +02:00
src board: improve provider and model controls 2026-05-05 14:39:25 +02:00
.gitignore botto: preserve memory v2 transition state 2026-05-22 22:36:45 +02:00
CONTEXT.md botto: preserve memory v2 transition state 2026-05-22 22:36:45 +02:00
Dockerfile Initial Botto Svelte app 2026-04-16 22:57:45 +02:00
package-lock.json Initial Botto Svelte app 2026-04-16 22:57:45 +02:00
package.json Initial Botto Svelte app 2026-04-16 22:57:45 +02:00
platform.py botto: preserve memory v2 transition state 2026-05-22 22:36:45 +02:00
preview.html UI redesign with dynamic accent colors and robo aesthetic 2026-04-17 15:17:58 +02:00
provider-auth-worker backend: extract provider auth and control service 2026-05-05 14:38:59 +02:00
README.md backend: extract provider auth and control service 2026-05-05 14:38:59 +02:00
RUNTIME-EXTRACTION-PLAN.md backend: extract provider auth and control service 2026-05-05 14:38:59 +02:00
svelte.config.js Initial Botto Svelte app 2026-04-16 22:57:45 +02:00
vite.config.js Initial Botto Svelte app 2026-04-16 22:57:45 +02:00

Botto app

Standalone Botto web app built with SvelteKit.

Local dev

For fast iteration on minel, run the app locally and bind it to a pooled dev preview slot instead of rebuilding the production image.

npm install
export BOTTO_CONFIG_PATH=/srv/botto/config/botto-config.json
export BOTTO_CONTROL_SOCKET=/run/botto-control/botto-control.sock
export BOTTO_AVATARS_PATH=/srv/botto/state/avatars
export SYNAPSE_ADMIN_TOKEN_FILE=/srv/botto/secrets/synapse-admin-token
export BOTTO_OIDC_BASE_URL=https://auth.el.nay.network
export BOTTO_OIDC_CLIENT_ID=botto
export BOTTO_OIDC_CLIENT_SECRET="..."
export BOTTO_SESSION_SECRET="..."
npm run dev

Then expose the local server on a dev slot:

app-dev-bind-port-owned --app botto --port 4448 --health-path /health

That gives you a live preview URL like https://dev3.storel.xyz backed by your local dev server.

Use the full image build + digest repin + nixos-rebuild switch path only when you want to validate the shipped deployment.

The standalone app now uses app-managed OIDC with signed session cookies, not forwarded auth headers.

Key env vars:

  • BOTTO_CONFIG_PATH
  • BOTTO_CONTROL_SOCKET
  • BOTTO_AVATARS_PATH
  • SYNAPSE_URL
  • SYNAPSE_SERVER_NAME
  • SYNAPSE_ADMIN_TOKEN_FILE
  • OLLAMA_LOCAL_URL
  • BOTTO_OIDC_BASE_URL
  • BOTTO_OIDC_CLIENT_ID
  • BOTTO_OIDC_CLIENT_SECRET
  • BOTTO_OIDC_REDIRECT_PATH
  • BOTTO_OIDC_SCOPES
  • BOTTO_OIDC_LOGOUT_URL
  • BOTTO_SESSION_SECRET

Notes:

  • The app reads all user/service/UI state from BOTTO_CONFIG_PATH.
  • Mutations go through the local control API on BOTTO_CONTROL_SOCKET.
  • Provider auth/default-model state also flows through the control API.

Transitional backend location

The Botto control/export backend now also lives in this repo as:

  • platform.py
  • provider-auth-worker

During the current extraction phase, nix-setup is wired to prefer these files when present on minel, with a fallback to its in-repo copies during transition.

That means the first backend slices have moved here, but the deployment/wiring in nix-setup is still temporarily responsible for launching them.

Host adapter contract direction

The target contract is:

  • host exports a list of candidate users
  • host exports an integration capability catalog
  • standalone Botto owns enable/disable state and runtime behavior
  • the app/backend uses allowlisted wrapper IDs and action IDs, not raw shell commands

Current exported config now includes a transitional host adapter section:

  • hostAdapter.candidateUsers
  • hostAdapter.integrationCatalog

The older users and services sections are still exported for compatibility while the app is being aligned to the cleaner contract.