Menu
Commit af7028f8
af7028f8868d6e4af1ace94a8dcb2dc3d5d84d3f by Ólafur Búi Ólafsson
- CHANGELOG.md +5 -0
- Cargo.toml +1 -1
- VERSION +1 -1
- src/routes/agent_os.css +38 -0
- src/routes/agent_view.rs +30 -11
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57b93e9..9d51e67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,11 @@ All notable changes to this project are documented here. Format: Keep a Changelo
## [Unreleased]
+## [0.1.3] - 2026-06-29
+
+- Kanban: full-viewport board layout — drop the centered card wrapper, give the board its own full-height main so columns stretch and scroll independently.
+
+
## [0.1.2] - 2026-06-29
- Add suite theme picker to agent console: serve /themes.json registry + mount the Framework theme selector (17 themes, all families) in the sidebar Account section, matching every other AkurAI-Framework app.
diff --git a/Cargo.toml b/Cargo.toml
index 93cd32a..7222ce7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "akurai-idp"
-version = "0.1.2"
+version = "0.1.3"
edition = "2024"
description = "Lightweight Rust OIDC/OAuth2 identity provider for AkurAI — replaces 96MB Node process"
license = "MIT"
diff --git a/VERSION b/VERSION
index d917d3e..b1e80bb 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.2
+0.1.3
diff --git a/src/routes/agent_os.css b/src/routes/agent_os.css
index 7915b9f..9e87602 100644
--- a/src/routes/agent_os.css
+++ b/src/routes/agent_os.css
@@ -482,6 +482,44 @@ body {
box-shadow: var(--shadow);
}
+/* Kanban is a full-viewport board, not a centered card. Its own agent-main fills
+ the main column; the stage fills the remaining height; the columns stretch to
+ full height and scroll independently (cards scroll inside each column). */
+.agent-kanban-main {
+ grid-template-rows: 56px minmax(0, 1fr);
+}
+
+.agent-kanban-stage {
+ min-width: 0;
+ min-height: 0;
+ display: flex;
+ padding: 16px;
+ overflow: hidden;
+}
+
+.agent-kanban-stage .kanban-shell {
+ flex: 1 1 auto;
+ min-width: 0;
+ min-height: 0;
+ display: flex;
+ flex-direction: column;
+}
+
+.agent-kanban-stage .kanban-columns {
+ flex: 1 1 auto;
+ min-height: 0;
+ grid-template-rows: minmax(0, 1fr);
+}
+
+.agent-kanban-stage .kanban-column {
+ min-height: 0;
+}
+
+.agent-kanban-stage .kanban-column > div {
+ min-height: 0;
+ overflow-y: auto;
+}
+
.agent-panel-head {
display: flex;
align-items: flex-start;
diff --git a/src/routes/agent_view.rs b/src/routes/agent_view.rs
index aa627f9..58b00ff 100644
--- a/src/routes/agent_view.rs
+++ b/src/routes/agent_view.rs
@@ -55,6 +55,7 @@ fn agent_page_body(
let sidebar = render_sidebar(page);
let main = match page {
AgentPage::Chat => render_chat_main(prompt, outcome, csrf),
+ AgentPage::Kanban => render_kanban_main(),
_ => render_workspace_main(user, page, &cfg.agent_provider, &cfg.agent_model),
};
@@ -297,7 +298,7 @@ fn render_tool_meta(outcome: &AgentOutcome) -> String {
fn render_page_content(user: &AuthUser, page: AgentPage, provider: &str, model: &str) -> String {
match page {
AgentPage::Chat => String::new(),
- AgentPage::Kanban => render_kanban_page(),
+ AgentPage::Kanban => render_kanban_board(),
AgentPage::Run => render_run_page(user, provider, model),
}
}
@@ -328,11 +329,33 @@ fn render_run_page(user: &AuthUser, provider: &str, model: &str) -> String {
)
}
-fn render_kanban_page() -> String {
- r#"<div class="agent-panel-head">
- <div><h2>Kanban</h2><p>Rust Agent board, tasks, claims, and project delivery state.</p></div>
- </div>
- <section class="kanban-shell" data-kanban-board>
+// The Kanban surface is a full-viewport board, not a centered card. It gets its
+// own `agent-main` so the board fills the entire main column (full width + full
+// height) with columns that stretch and scroll independently — see the
+// `.agent-kanban-*` rules in agent_os.css.
+fn render_kanban_main() -> String {
+ format!(
+ r#"<section class="agent-main agent-kanban-main" aria-label="Kanban">
+ <header class="agent-head">
+ <div>
+ <h1 class="agent-title">Kanban</h1>
+ <p class="agent-subtitle">Rust Agent board, tasks, claims, and delivery state.</p>
+ </div>
+ <div class="agent-meta" aria-label="Runtime">
+ <a href="/agent">Chat</a>
+ <a href="/agent/run">Run details</a>
+ </div>
+ </header>
+ <div class="agent-kanban-stage">
+ {board}
+ </div>
+ </section>"#,
+ board = render_kanban_board(),
+ )
+}
+
+fn render_kanban_board() -> String {
+ r#"<section class="kanban-shell" data-kanban-board>
<div class="kanban-toolbar">
<label>Board <select data-kanban-board-select aria-label="Kanban board"></select></label>
<label class="kanban-check"><input type="checkbox" data-kanban-include-done checked> Done</label>
@@ -355,11 +378,7 @@ fn render_kanban_page() -> String {
</div>
<section class="kanban-detail" data-kanban-detail hidden></section>
<p class="agent-panel-status" data-kanban-status></p>
- </section>
- <div class="agent-panel-actions">
- <button type="button" data-agent-prompt="Review the Rust Agent kanban board, summarize blocked tasks, and propose the next project-management action.">Review board</button>
- <button type="button" data-agent-prompt="Create a practical agile plan from the active kanban work, including next task, owner, and verification step.">Plan sprint</button>
- </div>"#
+ </section>"#
.to_string()
}