You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 8cabb86
Browse filesBrowse the repository at this point in the historyBrowse files
Say what the last change actually did, in the changelog and the docs (#634)
The Unreleased entry described a desktop release for a commit that also put a
new route on the server. Rewritten against the code rather than the summary.
What it was getting wrong: Bun is not "replaced", the version already on the
machine is left untouched and simply not used, and the check now gates Start as
well as install. Repair moved under Installation options on the install screen
only; it is still a top-level button on the stopped screen. "Existing Docker
credentials are preserved" described code that is not in the tree, since nothing
reads or writes Docker's config.json; the real change is that the inherited PATH
is now kept and appended to rather than replaced.
What it was missing: OPENBOT_MODEL_OAUTH_FILE and the route it mounts, the
Gemini transport, a provider 403 no longer reading as an expired sign-in, the
leftover-database reset, the Windows Compose separator, and the organization
sign-in fix for a callback that arrives in pieces.
The docs had drifted in the two files that call themselves the full reference.
charts/openbot/README.md never absorbed computers.podSecurityContext, so an
existing k3s install upgrading to 0.0.14 hits CrashLoopBackOff with the
explanation only in the changelog; that upgrade note is the one operators will
actually need. docs/configuration.md was missing SIGNIN_ALLOWED_EMAIL_DOMAINS,
OPENBOT_ORGANIZATION_AUTH_URL and OPENBOT_ACCESSIBILITY_DISABLED, and said
nothing about the desktop owning OPENAI_BASE_URL and OPENAI_API_KEY under
provider OAuth. docs/architecture.md now lists the new route beside the other
boundaries, and the docs index links the two desktop documents nothing pointed at.
Copy file name to clipboardExpand all lines: docs/architecture.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -346,5 +346,6 @@ Connector credentials are stored through the credential vault and referenced by
346
346
-`KEY_ENCRYPTION_KEY` must be a base64-encoded 32-byte value. The example key is refused with `NODE_ENV=production`.
347
347
- Credential plaintext is encrypted at rest, never returned by APIs, and redacted from audit events.
348
348
- Browser navigation allows `http` and `https`; cloud metadata addresses are refused under every configuration.
349
+
-`POST /api/model-provider/v1/chat/completions` exists only when `OPENBOT_MODEL_OAUTH_FILE` names a model credential file, which the desktop app sets and nothing else does. It answers a Chat Completions request using a stored Google or xAI OAuth grant. It does not use the session guard: the caller presents a separate local bearer taken from that file and compared in constant time, and the provider's own refresh token never leaves the server. The credential file is refused unless it is a regular file under 64KB with no group or other permission bits, and the upstream host, path and headers are fixed so a caller cannot redirect the request.
349
350
-`AGENT_COMPUTER_ALLOW_PRIVATE_HOSTS=true` is for local development only, and a deployment running with `NODE_ENV=production` refuses to start while it is set.
350
351
- Computer tokens and supervisor tokens must be long random values outside local development.
Copy file name to clipboardExpand all lines: docs/configuration.md
+26Lines changed: 26 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,6 +63,7 @@ at `agent-langgraph` on a laptop.
63
63
|`AUDIT_RETENTION_DAYS`| unset | Whole number of days to keep audit rows; older ones are removed. Unset keeps the trail forever. |
64
64
|`WORKER_SHARED_SECRET`| unset; `start.sh` uses a fixed local default | The secret the routines worker presents to fire a due routine. Without it the server refuses every handoff, whether or not a worker exists to send one. |
65
65
|`OPENBOT_GENERATIVE_UI`| unset (capability on) | Set `false` or `0` to stop Bots from answering with generated interfaces. |
66
+
|`OPENBOT_ACCESSIBILITY_DISABLED`|`true` or `1` stops naming OpenBot on the analytics the runtime already sends. |
66
67
|`COMPOSIO_API_KEY`| unset | One key for the whole deployment, for the broker that holds people's accounts for a few hundred apps. Unset, there is nothing to connect, nothing to grant and no Composio tool for a Bot to call; what remains is one row that goes nowhere, under **More apps** on the admin Plugins page, naming this variable. See [Composio](plugins/composio.md). |
67
68
68
69
**`OPENBOT_GENERATIVE_UI`** enables generated interfaces by default: streamed HTML/CSS/JavaScript
@@ -179,6 +180,15 @@ Two things are worth knowing before pointing a deployment at any gateway. Not ev
179
180
| `INITIAL_ADMIN_EMAILS` | Comma-separated administrators. **Required** with any provider. |
180
181
| `OPENBOT_PUBLIC_URL` | Public address of this API. Defaults to `BETTER_AUTH_URL`. |
181
182
| `OPENBOT_APP_URL` | Where the browser app is served. Defaults to the first `TRUSTED_ORIGINS` entry. |
183
+
| `SIGNIN_ALLOWED_EMAIL_DOMAINS` | Comma-separated email domains admitted at sign-in. Empty means no opinion. Exact, no wildcards. |
184
+
| `OPENBOT_ORGANIZATION_AUTH_URL` | An OpenBot deployment that verifies employee identity and roles. Decides sign-in ahead of `OPENBOT_SINGLE_USER`. |
185
+
186
+
**Some variables belong to the desktop app, not to you.** A desktop installation writes these into
187
+
its own deployment's `.env` and owns their values: `OPENBOT_MODEL_OAUTH_FILE`, `CHATGPT_AUTH_FILE`
188
+
and `CLAUDE_CODE_OAUTH_TOKEN`. When a model provider is connected by OAuth rather than by key, the
189
+
desktop also points `OPENAI_BASE_URL` at OpenBot's own loopback route and sets `OPENAI_API_KEY` to a
190
+
local proxy credential rather than a provider key, so those two do not mean what the table above says
191
+
in that mode. A server you configure yourself is unaffected by all of this.
182
192
183
193
**With no provider at all, `OPENBOT_SINGLE_USER=true` is required.** A deployment that configures
184
194
nothing to sign anybody in and does not say that was deliberate refuses to start, naming what to
@@ -194,6 +204,22 @@ address and a `.local` name are what this flag is mostly used for, and anybody o
194
204
the administrator. A value that cannot be parsed as a URL counts as public, because nobody checked
195
205
it.
196
206
207
+
**`SIGNIN_ALLOWED_EMAIL_DOMAINS` decides who may sign in**, as distinct from who is an
208
+
administrator once in. Matching is exact with no wildcards, so `example.com` admits neither
209
+
`sub.example.com`nor `evil-example.com`, and both sides go through the same IDNA normalisation, so
210
+
a rule may be written `@Example.COM.` or in punycode and still mean what it says. Two arrangements
211
+
are refused at start-up rather than documented and hoped for: a list that normalises to nothing,
212
+
which `@` and a stray `.` both produce, because it is a non-empty list no address can match; and a
213
+
list combined with a `MICROSOFT_OAUTH_TENANT_ID` that names no directory (`common`, `organizations`
214
+
or `consumers`), because there the address the list is checked against is one the signing-in tenant
215
+
writes for itself. A production deployment that names no domains and leaves the tenant multi-tenant
216
+
is warned rather than refused.
217
+
218
+
**`OPENBOT_ORGANIZATION_AUTH_URL` names an authority, not a provider.** It must be an HTTPS OpenBot
219
+
origin, or HTTP on loopback, and a bare origin: a username, password, query, fragment or any path
220
+
other than `/` is refused at start-up. Naming one settles sign-in by itself, ahead of
221
+
`OPENBOT_SINGLE_USER`.
222
+
197
223
**Any one provider turns sign-in on**, and several may be configured at once. Each provider's id and
198
224
secret must be set together, Okta additionally needs its issuer, and any of them requires
199
225
`BETTER_AUTH_SECRET`, `BETTER_AUTH_URL` and `INITIAL_ADMIN_EMAILS`. Every incomplete combination is
0 commit comments