Patch between component pages, and add an SCV stream composition Navigating between component pages threw the sidebar away and scrolled it back to the top on every click, which makes a long catalog tedious to read: you lose your place each time you look at anything. /components and /components/:slug are the same LiveView, so moving between them is a patch. The DOM is diffed, each row's selected state updates in place, and the sidebar keeps its scroll position. The index cards patch for the same reason. It cannot be an unconditional patch: /components/icons is a different LiveView, and a patch can neither reach it nor leave it. sidebar_link/1 takes a `patchable` flag and falls back to a navigate that remounts on purpose, so the one case that must remount still does. Adds scv_streams/1. The swarm answers "how is the fleet"; this answers "what is it doing" -- a status ring can say an SCV is running, but not that it has been rewriting the same test for four minutes. Rows are a fixed height so a chatty agent cannot push the others off screen: fifteen rows that stay put are readable, fifteen that reflow are not. The tail clips from the left rather than the right, so the newest text stays visible as the line grows. The stream is a bounded tail by construction, never the whole transcript -- scv_steps records every provider and tool boundary, and rendering all of it would make a busy fleet unreadable and expensive at once. The catalog test caught sidebar_link/1 shipping without a page, so it is catalogued rather than exempted: it is a real reusable primitive, and its demo is where the patch-versus-navigate rule is written down. mix precommit green: 1416 tests, 17 JS.
Patch between component pages, and add an SCV stream composition
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
assets/css/openagents.css -
modified
lib/openagents_web/component_catalog.ex -
modified
lib/openagents_web/components/graph.ex -
modified
lib/openagents_web/components/layouts.ex -
modified
lib/openagents_web/components/layouts/components.html.heex -
modified
lib/openagents_web/live/components_live.ex
Diff
6 files changed, +434 -30
assets/css/openagents.css modified +126
@@ -1949,3 +1949,129 @@
| 1949 | 1949 |
|
| 1950 | 1950 |
|
| 1951 | 1951 |
|
| 1952 |
|
|
| 1953 |
|
|
| 1954 |
|
|
| 1955 |
|
|
| 1956 |
|
|
| 1957 |
|
|
| 1958 |
|
|
| 1959 |
|
|
| 1960 |
|
|
| 1961 |
|
|
| 1962 |
|
|
| 1963 |
|
|
| 1964 |
|
|
| 1965 |
|
|
| 1966 |
|
|
| 1967 |
|
|
| 1968 |
|
|
| 1969 |
|
|
| 1970 |
|
|
| 1971 |
|
|
| 1972 |
|
|
| 1973 |
|
|
| 1974 |
|
|
| 1975 |
|
|
| 1976 |
|
|
| 1977 |
|
|
| 1978 |
|
|
| 1979 |
|
|
| 1980 |
|
|
| 1981 |
|
|
| 1982 |
|
|
| 1983 |
|
|
| 1984 |
|
|
| 1985 |
|
|
| 1986 |
|
|
| 1987 |
|
|
| 1988 |
|
|
| 1989 |
|
|
| 1990 |
|
|
| 1991 |
|
|
| 1992 |
|
|
| 1993 |
|
|
| 1994 |
|
|
| 1995 |
|
|
| 1996 |
|
|
| 1997 |
|
|
| 1998 |
|
|
| 1999 |
|
|
| 2000 |
|
|
| 2001 |
|
|
| 2002 |
|
|
| 2003 |
|
|
| 2004 |
|
|
| 2005 |
|
|
| 2006 |
|
|
| 2007 |
|
|
| 2008 |
|
|
| 2009 |
|
|
| 2010 |
|
|
| 2011 |
|
|
| 2012 |
|
|
| 2013 |
|
|
| 2014 |
|
|
| 2015 |
|
|
| 2016 |
|
|
| 2017 |
|
|
| 2018 |
|
|
| 2019 |
|
|
| 2020 |
|
|
| 2021 |
|
|
| 2022 |
|
|
| 2023 |
|
|
| 2024 |
|
|
| 2025 |
|
|
| 2026 |
|
|
| 2027 |
|
|
| 2028 |
|
|
| 2029 |
|
|
| 2030 |
|
|
| 2031 |
|
|
| 2032 |
|
|
| 2033 |
|
|
| 2034 |
|
|
| 2035 |
|
|
| 2036 |
|
|
| 2037 |
|
|
| 2038 |
|
|
| 2039 |
|
|
| 2040 |
|
|
| 2041 |
|
|
| 2042 |
|
|
| 2043 |
|
|
| 2044 |
|
|
| 2045 |
|
|
| 2046 |
|
|
| 2047 |
|
|
| 2048 |
|
|
| 2049 |
|
|
| 2050 |
|
|
| 2051 |
|
|
| 2052 |
|
|
| 2053 |
|
|
| 2054 |
|
|
| 2055 |
|
|
| 2056 |
|
|
| 2057 |
|
|
| 2058 |
|
|
| 2059 |
|
|
| 2060 |
|
|
| 2061 |
|
|
| 2062 |
|
|
| 2063 |
|
|
| 2064 |
|
|
| 2065 |
|
|
| 2066 |
|
|
| 2067 |
|
|
| 2068 |
|
|
| 2069 |
|
|
| 2070 |
|
|
| 2071 |
|
|
| 2072 |
|
|
| 2073 |
|
|
| 2074 |
|
|
| 2075 |
|
|
| 2076 |
|
|
| 2077 |
|
lib/openagents_web/component_catalog.ex modified +14
@@ -189,6 +189,13 @@ defmodule OpenAgentsWeb.ComponentCatalog do
| 189 | 189 |
|
| 190 | 190 |
|
| 191 | 191 |
|
| 192 |
|
|
| 193 |
|
|
| 194 |
|
|
| 195 |
|
|
| 196 |
|
|
| 197 |
|
|
| 198 |
|
|
| 192 | 199 |
|
| 193 | 200 |
|
| 194 | 201 |
|
@@ -223,6 +230,13 @@ defmodule OpenAgentsWeb.ComponentCatalog do
| 223 | 230 |
|
| 224 | 231 |
|
| 225 | 232 |
|
| 233 |
|
|
| 234 |
|
|
| 235 |
|
|
| 236 |
|
|
| 237 |
|
|
| 238 |
|
|
| 239 |
|
|
| 226 | 240 |
|
| 227 | 241 |
|
| 228 | 242 |
|
lib/openagents_web/components/graph.ex modified +65
@@ -298,6 +298,71 @@ defmodule OpenAgentsWeb.UI.Graph do
| 298 | 298 |
|
| 299 | 299 |
|
| 300 | 300 |
|
| 301 |
|
|
| 302 |
|
|
| 303 |
|
|
| 304 |
|
|
| 305 |
|
|
| 306 |
|
|
| 307 |
|
|
| 308 |
|
|
| 309 |
|
|
| 310 |
|
|
| 311 |
|
|
| 312 |
|
|
| 313 |
|
|
| 314 |
|
|
| 315 |
|
|
| 316 |
|
|
| 317 |
|
|
| 318 |
|
|
| 319 |
|
|
| 320 |
|
|
| 321 |
|
|
| 322 |
|
|
| 323 |
|
|
| 324 |
|
|
| 325 |
|
|
| 326 |
|
|
| 327 |
|
|
| 328 |
|
|
| 329 |
|
|
| 330 |
|
|
| 331 |
|
|
| 332 |
|
|
| 333 |
|
|
| 334 |
|
|
| 335 |
|
|
| 336 |
|
|
| 337 |
|
|
| 338 |
|
|
| 339 |
|
|
| 340 |
|
|
| 341 |
|
|
| 342 |
|
|
| 343 |
|
|
| 344 |
|
|
| 345 |
|
|
| 346 |
|
|
| 347 |
|
|
| 348 |
|
|
| 349 |
|
|
| 350 |
|
|
| 351 |
|
|
| 352 |
|
|
| 353 |
|
|
| 354 |
|
|
| 355 |
|
|
| 356 |
|
|
| 357 |
|
|
| 358 |
|
|
| 359 |
|
|
| 360 |
|
|
| 361 |
|
|
| 362 |
|
|
| 363 |
|
|
| 364 |
|
|
| 365 |
|
|
| 301 | 366 |
|
| 302 | 367 |
|
| 303 | 368 |
|
lib/openagents_web/components/layouts.ex modified +44
@@ -135,6 +135,50 @@ defmodule OpenAgentsWeb.Layouts do
| 135 | 135 |
|
| 136 | 136 |
|
| 137 | 137 |
|
| 138 |
|
|
| 139 |
|
|
| 140 |
|
|
| 141 |
|
|
| 142 |
|
|
| 143 |
|
|
| 144 |
|
|
| 145 |
|
|
| 146 |
|
|
| 147 |
|
|
| 148 |
|
|
| 149 |
|
|
| 150 |
|
|
| 151 |
|
|
| 152 |
|
|
| 153 |
|
|
| 154 |
|
|
| 155 |
|
|
| 156 |
|
|
| 157 |
|
|
| 158 |
|
|
| 159 |
|
|
| 160 |
|
|
| 161 |
|
|
| 162 |
|
|
| 163 |
|
|
| 164 |
|
|
| 165 |
|
|
| 166 |
|
|
| 167 |
|
|
| 168 |
|
|
| 169 |
|
|
| 170 |
|
|
| 171 |
|
|
| 172 |
|
|
| 173 |
|
|
| 174 |
|
|
| 175 |
|
|
| 176 |
|
|
| 177 |
|
|
| 178 |
|
|
| 179 |
|
|
| 180 |
|
|
| 181 |
|
|
| 138 | 182 |
|
| 139 | 183 |
|
| 140 | 184 |
|
lib/openagents_web/components/layouts/components.html.heex modified +22 -28
@@ -1,3 +1,4 @@
| 1 |
|
|
| 1 | 2 |
|
| 2 | 3 |
|
| 3 | 4 |
|
@@ -13,13 +14,13 @@
| 13 | 14 |
|
| 14 | 15 |
|
| 15 | 16 |
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 23 |
|
|
| 23 | 24 |
|
| 24 | 25 |
|
| 25 | 26 |
|
@@ -27,32 +28,25 @@
| 27 | 28 |
|
| 28 | 29 |
|
| 29 | 30 |
|
| 30 |
|
|
| 31 |
|
|
| 31 | 32 |
|
| 32 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
|
|
| 38 |
|
|
| 39 |
|
|
| 40 |
|
|
| 41 |
|
|
| 42 |
|
|
| 43 |
|
|
| 44 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
|
|
| 38 |
|
|
| 45 | 39 |
|
| 46 | 40 |
|
| 47 | 41 |
|
| 48 | 42 |
|
| 49 |
|
|
| 50 |
|
|
| 51 |
|
|
| 52 |
|
|
| 53 |
|
|
| 54 |
|
|
| 55 |
|
|
| 43 |
|
|
| 44 |
|
|
| 45 |
|
|
| 46 |
|
|
| 47 |
|
|
| 48 |
|
|
| 49 |
|
|
| 56 | 50 |
|
| 57 | 51 |
|
| 58 | 52 |
|
lib/openagents_web/live/components_live.ex modified +163 -2
@@ -53,6 +53,126 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 53 | 53 |
|
| 54 | 54 |
|
| 55 | 55 |
|
| 56 |
|
|
| 57 |
|
|
| 58 |
|
|
| 59 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 75 |
|
|
| 76 |
|
|
| 77 |
|
|
| 78 |
|
|
| 79 |
|
|
| 80 |
|
|
| 81 |
|
|
| 82 |
|
|
| 83 |
|
|
| 84 |
|
|
| 85 |
|
|
| 86 |
|
|
| 87 |
|
|
| 88 |
|
|
| 89 |
|
|
| 90 |
|
|
| 91 |
|
|
| 92 |
|
|
| 93 |
|
|
| 94 |
|
|
| 95 |
|
|
| 96 |
|
|
| 97 |
|
|
| 98 |
|
|
| 99 |
|
|
| 100 |
|
|
| 101 |
|
|
| 102 |
|
|
| 103 |
|
|
| 104 |
|
|
| 105 |
|
|
| 106 |
|
|
| 107 |
|
|
| 108 |
|
|
| 109 |
|
|
| 110 |
|
|
| 111 |
|
|
| 112 |
|
|
| 113 |
|
|
| 114 |
|
|
| 115 |
|
|
| 116 |
|
|
| 117 |
|
|
| 118 |
|
|
| 119 |
|
|
| 120 |
|
|
| 121 |
|
|
| 122 |
|
|
| 123 |
|
|
| 124 |
|
|
| 125 |
|
|
| 126 |
|
|
| 127 |
|
|
| 128 |
|
|
| 129 |
|
|
| 130 |
|
|
| 131 |
|
|
| 132 |
|
|
| 133 |
|
|
| 134 |
|
|
| 135 |
|
|
| 136 |
|
|
| 137 |
|
|
| 138 |
|
|
| 139 |
|
|
| 140 |
|
|
| 141 |
|
|
| 142 |
|
|
| 143 |
|
|
| 144 |
|
|
| 145 |
|
|
| 146 |
|
|
| 147 |
|
|
| 148 |
|
|
| 149 |
|
|
| 150 |
|
|
| 151 |
|
|
| 152 |
|
|
| 153 |
|
|
| 154 |
|
|
| 155 |
|
|
| 156 |
|
|
| 157 |
|
|
| 158 |
|
|
| 159 |
|
|
| 160 |
|
|
| 161 |
|
|
| 162 |
|
|
| 163 |
|
|
| 164 |
|
|
| 165 |
|
|
| 166 |
|
|
| 167 |
|
|
| 168 |
|
|
| 169 |
|
|
| 170 |
|
|
| 171 |
|
|
| 172 |
|
|
| 173 |
|
|
| 174 |
|
|
| 175 |
|
|
| 56 | 176 |
|
| 57 | 177 |
|
| 58 | 178 |
|
@@ -72,7 +192,8 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 72 | 192 |
|
| 73 | 193 |
|
| 74 | 194 |
|
| 75 |
|
|
| 195 |
|
|
| 196 |
|
|
| 76 | 197 |
|
| 77 | 198 |
|
| 78 | 199 |
|
@@ -131,7 +252,7 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 131 | 252 |
|
| 132 | 253 |
|
| 133 | 254 |
|
| 134 |
|
|
| 255 |
|
|
| 135 | 256 |
|
| 136 | 257 |
|
| 137 | 258 |
|
@@ -495,6 +616,29 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 495 | 616 |
|
| 496 | 617 |
|
| 497 | 618 |
|
| 619 |
|
|
| 620 |
|
|
| 621 |
|
|
| 622 |
|
|
| 623 |
|
|
| 624 |
|
|
| 625 |
|
|
| 626 |
|
|
| 627 |
|
|
| 628 |
|
|
| 629 |
|
|
| 630 |
|
|
| 631 |
|
|
| 632 |
|
|
| 633 |
|
|
| 634 |
|
|
| 635 |
|
|
| 636 |
|
|
| 637 |
|
|
| 638 |
|
|
| 639 |
|
|
| 640 |
|
|
| 641 |
|
|
| 498 | 642 |
|
| 499 | 643 |
|
| 500 | 644 |
|
@@ -681,6 +825,23 @@ defmodule OpenAgentsWeb.ComponentsLive do
| 681 | 825 |
|
| 682 | 826 |
|
| 683 | 827 |
|
| 828 |
|
|
| 829 |
|
|
| 830 |
|
|
| 831 |
|
|
| 832 |
|
|
| 833 |
|
|
| 834 |
|
|
| 835 |
|
|
| 836 |
|
|
| 837 |
|
|
| 838 |
|
|
| 839 |
|
|
| 840 |
|
|
| 841 |
|
|
| 842 |
|
|
| 843 |
|
|
| 844 |
|
|
| 684 | 845 |
|
| 685 | 846 |
|
| 686 | 847 |
|