AgentSwarms 1.2.2
AgentSwarms 1.2.2
Two arcs, one visible and one not. The visible one is AgentSwarms Native —
dark navigation chrome around a light working pane, now the default theme. The
other is a cluster of self-hosted Docker failures that all announced themselves
as "Unauthorized" while the real fault was a connection the container could not
make. A failure that lies about its own cause costs far more to find than one
that simply reports itself, which is the same reason this release adds a schema
health check.
35 commits, 54 files, no migrations.
Highlights
A new default theme. AgentSwarms Native puts dark navigation chrome around a
light working pane — the pattern the Oracle and AWS consoles use. Navigation
reads as a persistent frame while content sits on light surfaces, which is where
dense tables, charts and long documents are easiest to read. Dark and light are
untouched and still selectable. A follow-up fix removed the white seam where the
sidebar met the top bar: a full-height right border drawn on a transparent
element, so the translucent border colour composited against the page instead of
against the chrome it was meant to divide.
Self-hosting under Docker actually works. Every server-side Supabase call
failed on a containerized install and reported "Unauthorized" while doing it —
resolving the caller is the first thing those handlers do, so a
connect ECONNREFUSED 127.0.0.1:8000 surfaced as a rejected token. Document
generation (PowerPoint, Word, Excel) failed the same way and for the same
reason. Separately, setup-selfhosted.sh could not complete against a stock
stack: the migration step built its connection string without sslmode, so the
Supabase CLI negotiated TLS against a Postgres serving plaintext. All three are
fixed, along with a first-boot race and a js-sandbox health check that was
polling a port Docker never binds.
An unapplied migration now says so. A contributor pulls code expecting a
column a recent migration added, never re-applies migrations, and PostgREST
rejects the query — which until now surfaced as a broken page or an unhandled
rejection with no hint that "run your migrations" is the fix. Detection runs in
two layers, a proactive check on mount and a reactive fetch interceptor that
catches the failure as it happens, deduped by table and column. The modal names
the specific tables and columns, gives the migration filename and description
where known, and hands over three copyable commands — supabase db push,
migration up, and a danger-styled db reset. Dismissing is session-scoped,
because the problem has not gone away just because the modal did. It is mounted
for every route, authenticated or not: an unapplied migration can break the
public landing page as easily as a dashboard.
Pick a model from a list, not a text box. Choosing a model meant typing an
exact id into a free-text field, with a suggestion row capped at 24 so a large
catalogue would not become a wall of badges — which left an OpenRouter user with
24 chips and a text box in front of roughly 400 models. Swarm nodes were worse:
they offered a bundled, hand-maintained list of about a dozen ids per provider,
when the app already fetches the full catalogue for the agent editor. The
searchable picker now covers swarm nodes, the agent editor and prompt compare.
Read a web page without a third-party key. web_browse was hidden from the
model unless a Firecrawl key existed, and adding a URL to a knowledge base
returned FIRECRAWL_NOT_CONNECTED — while web_search, its sibling, degraded
to a free provider rather than disappearing. Both surfaces now have the same
floor.
Also in this release
- A resizable sidebar. A drag handle on the right edge clamped to 200–400px,
Cmd/Ctrl+\alongside the existingCmd/Ctrl+B, and both the collapsed state
and the chosen width persisted to localStorage rather than to a cookie nothing
read back. Dragging below 100px auto-hides it, VS Code style, and a Show/Hide
toggle in the profile menu works without hunting for the header trigger.
Collapsing now hides the panel completely instead of leaving a 48px icon rail. - The Create Agent form survives an accidental dismissal. Clicking outside
the dialog unmounts the form entirely and threw away everything typed into it.
Every field it manages — guardrails, tool toggles, MCP allow-lists,
knowledge-base links, memory config, not just name and prompt — now
round-trips through a sessionStorage draft. - An instance-wide OpenRouter key counts as a connected provider in BI. On an
instance whose only provider wasOPENROUTER_API_KEYin.env, the analyst's
"New analyst" dialog said "Connect a model provider in Integrations" while
agent chat and swarms called OpenRouter through that same key without
complaint. - One command starts every service. Six of the seven services sit behind
Compose profiles, so a plaindocker compose updeliberately starts the app
alone — and there is no--allflag for it. Every profiled service now also
carriesall, sodocker compose --profile all up -d --buildbrings up the
whole stack, while the narrower--profile docgen/notebooks/sandboxkeep
working unchanged.
Security fixes
.envbackups are ignored properly. The existing rules covered.env,
.env.localand.env.*.local— none of which match.env.cloud.bak,
.env.production.backupor.env.old.copy, which are the names people
actually leave behind when switching backends. Those files hold the same
service-role and provider keys as.envitself and sat onegit add -Aaway
from being committed.
Notable fixes
- Popovers no longer clipped by the dialogs containing them — the Prompt Library
popover in the Agent Builder lost the first characters of every title, and its
"Use this prompt" button could not be reached at all. - "Browse registry" failed with "expected object, received undefined" on every
open. - The model dropdown wiped a registry pick one render later: the toast said
"Selected Jamba Large 1.7" and the control fell back to "Select a model".
Upgrading
git pull
npm install # new dependency: turndown
docker compose --profile all up -d --buildNo migrations and no new environment variables in this release. --profile all
starts all seven services; a plain docker compose up still starts the app
alone, which is unchanged.
One thing to know before you upgrade: AgentSwarms Native is now the default
theme, so an installation where nobody picked a theme explicitly will look
different afterwards. Dark and light are unchanged and still selectable from the
theme toggle.
Known limits
- The schema health check is not exhaustive. RLS-locked tables can
false-negative, and the curated list of checks is deliberately partial — it is
there to turn a confusing failure into an actionable one, not to prove a schema
correct. Seedocs/SCHEMA_HEALTH_CHECK.md. - The standing limits from 1.2.0 are unchanged: a billion-row import into a
local dataset is not supported (the warehouse is the engine — see
docs/SCALE_AND_LIMITS.md), the embedded analyst takes 30–95 seconds per
question, and signed viewers remain dashboard-only by design.