AkurAI Build
Menu

AkurAI-IDPCommit af7028f8

Commit af7028f8

af7028f8868d6e4af1ace94a8dcb2dc3d5d84d3f by Ólafur Búi Ólafsson

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()
 }