diff --git a/pyproject.toml b/pyproject.toml index 9c7aeca..79e5602 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "ratatoskr" -version = "0.17.12" +version = "0.17.13" description = "Worldtree Conversation API debug TUI — multi-pane observability dashboard" readme = "README.md" requires-python = ">=3.12" diff --git a/src/ratatoskr/web/static/index.html b/src/ratatoskr/web/static/index.html index 08eea23..c93850a 100644 --- a/src/ratatoskr/web/static/index.html +++ b/src/ratatoskr/web/static/index.html @@ -510,6 +510,14 @@ body {
+ +
+ +
@@ -734,19 +742,35 @@ async function startSession() { try { // end_user_id is server-configured (RATATOSKR_END_USER_ID) — not sent // from the browser; the server ignores any end_user_id in this body. + // Issue #17: the browser selects only the PLANE; the consumer key + host + // are server-held (the key never reaches the browser). + const plane = $("bifrost-plane").value; + const reqBody = { agent_id: agentId }; + if (plane) reqBody.bifrost_plane = plane; const r = await fetch("/api/sessions", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ agent_id: agentId }), + body: JSON.stringify(reqBody), }); if (r.status !== 201) { - $("setup-err").textContent = "create session failed: HTTP " + r.status; + let detail = "HTTP " + r.status; + try { + const err = await r.json(); + if (err && err.error_code) { + detail = err.error_code + (err.bifrost_error ? " (" + err.bifrost_error + ")" : ""); + } + } catch (_) { /* non-JSON body */ } + $("setup-err").textContent = "create session failed: " + detail; $("start-btn").disabled = false; return; } const info = await r.json(); state.sessionId = info.session_id; + // Issue #17 bound-state indicator: plane + endpoint (never the key). + const boundTag = info.bifrost + ? ` · ⇄ ${esc(info.bifrost.plane)} ${esc(info.bifrost.endpoint)}` + : ""; $("identity").innerHTML = - `${esc(agentId)} · …${esc(info.session_id.slice(-8))}`; + `${esc(agentId)} · …${esc(info.session_id.slice(-8))}${boundTag}`; setConn("idle", "connected"); $("setup").style.display = "none"; $("workspace").classList.add("live"); diff --git a/uv.lock b/uv.lock index 907c63a..e41d344 100644 --- a/uv.lock +++ b/uv.lock @@ -1052,7 +1052,7 @@ wheels = [ [[package]] name = "ratatoskr" -version = "0.17.12" +version = "0.17.13" source = { editable = "." } dependencies = [ { name = "httpx" },