Updates the stale version mentions in the chat config comment, the subpath
deploy README and Caddyfile, and records the v0.12.4.5 publish in UPGRADE.md.
- Embedded chat pins Open WebUI v0.12.4.3-subpath (fork fix for title links and Back buttons).
- Studio's chat mask targets the current Open WebUI markup (main, not main#main-content),
so the admin tab bar is hidden again.
- Open WebUI pin: v0.12.0.3-subpath -> v0.12.4.1-subpath (compose default and
embedded wheel). v0.12.4.1 is upstream v0.12.4 plus the fork's subpath build fix,
so the /chat frontend base is baked in and the playground iframe loads.
- ENABLE_VERSION_UPDATE_CHECK defaults to false (Studio pins the build, so the
update banner is noise). Override via env var.
- Docs and comments updated to match.
18 days ago
feat(agentic): realistic agentic audit demo with real tool execution (#55)
* feat(chat): bump Open WebUI subpath build to v0.12.0
The port + GHCR publish were already done in the SushantGautam/open-webui
fork (tag v0.12.0-subpath, functional head 92f0108 == main). This wires it
into Studio:
- docker-compose.yml: OPEN_WEBUI_IMAGE default -> :v0.12.0-subpath
- build.sh: pinned SHA -> 15818d88 (pristine v0.12.0)
- subpath.patch: regenerated as 15818d88..92f0108 EXCLUDING .github/FORK.md
(198 files); git apply --check clean on pristine alongside the node-heap
and otel patches. Old patch kept as subpath-v0.11.4.patch.
- README.md / UPGRADE.md: current base + outcome log updated
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ports): match Open WebUI owner by package name, not checkout path
_classify_command substring-matched the whole command line against
the open-webui and open_webui spellings. A checkout whose path contains
open-webui (e.g. this worktree) made every listener process classify as
Studio's own Open WebUI - a forc…
28 days ago
feat(otel): enable Open WebUI content capture runtime
Caddy is the only front-door implementation. caddyserver is a hard
dependency with wheels for every platform, so the ~520-line Python handler
could only run on a broken install, where it silently diverged from the
Caddyfile it was meant to mirror (second implementation of identity
strip, forward-auth, CSS mask, favicon, /workspace repair and WS piping).
_caddy_binary() now raises instead of returning None and serve() has no
fallback; a missing binary (or Caddy that never binds) surfaces at start,
and the dev/CLI callers stop Open WebUI and continue the rest of the stack.
Removes the fallback-only stubs and their 19 tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Seed: seed_platform now creates a demo agent (Support Refund Assistant)
linked to an 'Acme Retail Policy' knowledge base (2 sample policy docs)
and an 'Acme Order Lookup' tool. Local rows always; when chat is enabled,
the KB, docs, and toolkit are also pushed to Open WebUI (idempotent by
name/id, external_id backfilled on rerun). Opt out with --skip-demo-agent.
Also fixes the tools endpoints: the Tools page is /api/v1/tools (toolkit
modules), not /api/v1/functions (pipes/filters) - corrected the seed
push and both pull-side readers.
Chat: repair the subpath fork's root-relative /workspace/knowledge hard
navigation (308 back onto the subpath at the front door) and pass
?embed=admin to /chat/authz via X-Studio-Embed since the Caddy rewrite
drops the query.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
mask directory-upload rows in the admin workspace embed via Caddy
The pure-Python proxy already masked 'Upload directory'/'Sync directory'
by injecting embed_admin.js into marked documents, but Caddy mode (local
dev + docker) does no document rewriting, so the buttons stayed visible
in /agents/knowledge/ and /agents/tools/.
Restore the mask in both modes with one file and no fork rebuild: Studio
now serves embed_admin.js as the subpath build's otherwise-empty
static/loader.js (the SPA's first <script>; SvelteKit hydration comes
from the separate entry/start bundle, so replacing it is safe). A Caddy
handle rewrites /chat/static/loader.js to a new /chat/loader-mask view,
mirroring the existing custom.css -> css-mask route.
The script self-gates on the PAGE URL carrying ?embed=admin: the admin
workspace iframes (which always load with that param) get masked; plain
/chat/ and the top-level /chat/workspace pages keep their full menu, so
folder bulk-upload still has one canonical place. This also re-applies
the title pin and Access List / branding masks …
feat(chat): unify Studio + Open WebUI behind one Caddy front door at /chat/
Replaces the two-port embedded model (Studio :8000 + OWUI :8801 in an
iframe) with a single-origin, single-port wiring, identical for local dev
and Docker:
- Caddy is the ONLY published listener (:8000). Studio and Open WebUI
publish no ports; /chat/* reverse-proxies to the subpath build with the
prefix preserved (handle, not handle_path); /ai/ and everything else
go to Django.
- Uses the subpath-capable Open WebUI fork wheel (v0.11.4-subpath,
WEBUI_SUBPATH=/chat), so OWUI emits every URL prefixed with /chat and
no Caddy-side URL rewriting is needed.
- Forward-auth to /chat/authz injects trusted identity headers
(X-Studio-Email/Name/Role); client-forged values are stripped at site
level; 401 redirects to the Studio login.
- Studio's /chat/css-mask serves the embed stylesheet (admin vs plain
mask) in place of a mounted custom.css.
- Local dev: manage.py dev manages a bundled Caddy (uvx caddy /
caddyserver) with a generated Caddyfile; Docker: caddy:2-alpine
chat-prox…
docs(openwebui-subpath): warn never to delete untagged ghcr versions
Registry now publishes only the v0.11.4-subpath tag family (multi-arch).
UPGRADE.md documents the final mechanics: publish-vNEW branch = pristine +
CI plumbing, dispatch-only docker builds, prune job + prune_only input.
Add deploy/openwebui-subpath: embedded OWUI under /chat (v0.11.4, published)