Skip to content

Commit 2f9eeec

Browse files
LivXueclaude
andauthored
docs: add webui screenshots to the launch webui section (#576)
## Summary Two commits. The first fills the Launch WebUI section of both READMEs, which carried three `Screenshot placeholder` lines and no images, with two figures each: the new task page and the subagents page. The second lands the Raven mark those figures show. On the figures: - Two, not three. The third placeholder asked for a task graph, which cannot be captured from stored data: the web DAG panel is driven by live `dag.*` events and its disk restore is gated on a localStorage note that only a live event writes, so showing one would have required a real `run_subagent_dag` turn. That slot is dropped rather than filled with something its caption does not match. - They come from an isolated instance with its own `RAVEN_HOME` and an empty session store, so no conversation titles, memory entries or workspace file names appear. The A2A block was removed from its config, and the config carries no channels and no cron, so the throwaway instance had no outward side effects. Its home, which held a copy of real provider keys, was deleted after the run. - Each README gets its own language, captured with `language` set to `en` and to `zh`. Following the convention already in these files, `alt` text stays English in both while the caption follows the prose language. On the mark: - The new file is a dark bird on an antique-gold halo. Against the dark theme's surface that ink measures 1.07:1, and no tone filter can lift it because it is not one colour to invert, so it carries an opaque plate rather than the `prefers-color-scheme` rule the previous file used. Ink against plate measures 18.29:1 on both themes. - The plate is a card, so the mark fills its frame the way `miromind.svg` already does. Keyed by file rather than by `data-agent`, which carries the preset and raven's own rows have none. - The halo stroke goes from 1.6 to 3.2. Against a 64 unit canvas the old width lands under one device pixel at the two smaller slots the mark renders in, 0.45 at 18px and 0.65 at 26px, so the ring washed out wherever the roster draws it. Reviewer note: the figures were captured before the stroke went to 3.2, so the halo in them is thinner than what this branch now renders. Everything else in them is current. Re-capturing would mean a second upload for a difference of half a device pixel, so they are left as they are. Assets are hosted as a comment on issue #505 rather than committed, per the repository asset rule. ## Type - [ ] Fix - [ ] Feature - [x] Docs - [ ] CI / tooling - [ ] Refactor - [ ] Other ## Verification ``` .venv/bin/python -m pytest tests/test_ui_agent_marks.py -q -p no:randomly -> 7 passed .venv/bin/python -m pytest tests/test_scope_canon.py tests/test_docs_site.py \ tests/test_docker_runtime.py -q -p no:randomly -> 27 passed npx --prefix ui-web vitest run --root ui-web \ scripts/agent-mark-css.test.mjs src/shell/agent-mark.test.tsx -> 2 files, 18 passed make check-large-files -> exit 0 make check-source-language -> exit 0 make check-commits -> exit 0 ``` The gates were run over a committed range rather than an empty diff, and the mark suite was re-run afterwards because `make check-commits` can rebuild the virtualenv under it. The mark change was rendered and measured rather than eyeballed: at 1440px the mark is 28px, and the two candidate files differ only in a sub-pixel halo and a plate that is near the tile colour in the light theme, so the two are not visually separable at full size. The renders were compared by pixel signature against standalone renders of each file. Every uploaded asset was fetched back with a GET and compared by sha256 against the local render; all four are byte identical. A HEAD request is not a valid check here, because user-attachments URLs answer 403 to HEAD and 200 to GET. Both README sections were rendered through the GitHub markdown API to confirm the figures resolve, the alt text survives and each file references the assets for its own language. - [x] Relevant tests pass locally - [x] Relevant lint / type checks pass locally - [x] User-facing docs or screenshots are updated when needed ## Risk Two user-visible changes. Both READMEs render two figures in Launch WebUI where three placeholder lines used to be. The Raven mark in the subagents roster and in every other slot it draws in is a different image, larger in its frame, and no longer answers the theme from inside its own file. Rollback is a revert of either commit independently; they touch disjoint files. The hosted assets can stay either way. Backward compatibility is not applicable: no interface, config key or stored value changes. - [x] Security impact considered - [ ] Backward compatibility considered - [x] Rollback path is clear for risky changes ## Related Issues #505 --------- Co-authored-by: Claude (claude-opus-5[1m]) <noreply@anthropic.com>
1 parent db7862a commit 2f9eeec

5 files changed

Lines changed: 65 additions & 48 deletions

File tree

‎README.md‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,17 @@ raven web
268268

269269
The command opens the WebUI in your browser and keeps Raven running in the background. Use `raven web --stop` to stop the background service.
270270

271-
> **Screenshot placeholder 1:** Conversations and workspace.
271+
<p align="center">
272+
<a href="https://github.com/user-attachments/assets/f73c1f5e-10cc-4d39-976d-22560a5e971c"><img src="https://github.com/user-attachments/assets/f73c1f5e-10cc-4d39-976d-22560a5e971c" alt="Raven WebUI new task page" width="90%"></a>
273+
</p>
274+
275+
<p align="center"><em>New task: one composer, with skills, playbooks, knowledge and memory a click away.</em></p>
272276

273-
> **Screenshot placeholder 2:** Agent collaboration and task graph.
277+
<p align="center">
278+
<a href="https://github.com/user-attachments/assets/00361ef7-4071-4864-928a-5fe5086ebb81"><img src="https://github.com/user-attachments/assets/00361ef7-4071-4864-928a-5fe5086ebb81" alt="Raven WebUI subagents page" width="90%"></a>
279+
</p>
274280

275-
> **Screenshot placeholder 3:** Memory and skill management.
281+
<p align="center"><em>Subagents: every connected agent in one roster, built-in and third-party alike.</em></p>
276282

277283
## ❯❯ EverMind Ecosystem
278284

‎README.zh-CN.md‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,17 @@ raven web
256256

257257
该命令会在浏览器中打开 WebUI,并让 Raven 在后台持续运行。使用 `raven web --stop` 停止后台服务。
258258

259-
> **截图占位 1:** 对话与工作区。
259+
<p align="center">
260+
<a href="https://github.com/user-attachments/assets/5ffb877b-8e53-4079-a0bc-70607e415746"><img src="https://github.com/user-attachments/assets/5ffb877b-8e53-4079-a0bc-70607e415746" alt="Raven WebUI new task page" width="90%"></a>
261+
</p>
262+
263+
<p align="center"><em>新建任务:一个输入框,技能、剧本、知识库与记忆都在一侧。</em></p>
260264

261-
> **截图占位 2:** Agent 协作与任务图。
265+
<p align="center">
266+
<a href="https://github.com/user-attachments/assets/3821466d-73d4-4544-9b0b-065e4beda2a4"><img src="https://github.com/user-attachments/assets/3821466d-73d4-4544-9b0b-065e4beda2a4" alt="Raven WebUI subagents page" width="90%"></a>
267+
</p>
262268

263-
> **截图占位 3:** 记忆与技能管理。
269+
<p align="center"><em>子智能体:内置与第三方 Agent 汇总在同一张花名册里。</em></p>
264270

265271
## ❯❯ EverMind 生态
266272

‎tests/test_ui_agent_marks.py‎

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,21 +131,30 @@ def test_the_own_mark_ships() -> None:
131131
assert (_ASSETS / f"{_own_mark()}.svg").is_file()
132132

133133

134-
def test_the_own_mark_answers_the_theme_from_inside_the_file() -> None:
134+
def test_the_own_mark_carries_its_own_plate() -> None:
135135
"""The two halves of that are one fact, and neither is safe alone.
136136
137-
A raven is black, and the dark theme's surface is ``#1e1c14`` -- 1.2:1, a
138-
silhouette that leaves two white eyes floating in an empty frame. The mark
139-
cannot be filtered into legibility the way a ``mono`` one is, because it is
140-
not one colour, so it carries a ``prefers-color-scheme`` rule of its own,
141-
as miromind.svg does; an ``<img>`` resolves that against the embedding
142-
element's used colour-scheme, which the stylesheet pins to the chosen
143-
theme.
144-
145-
The tone must therefore stay absent: a ``mono`` or ``hybrid`` here would
146-
invert the file on top of the answer it already gave, which lands back at
147-
black on black in exactly one theme -- and no DOM assertion sees a colour.
137+
A raven is dark, and the dark theme's surface is ``#1e1c14``. Measured at
138+
the roster's render size, the bird against that surface is 1.07:1 -- gone,
139+
leaving the halo alone in an empty frame. The mark cannot be filtered into
140+
legibility the way a ``mono`` one is, because it is not one colour to
141+
invert, so it answers the theme by not participating in it: an opaque plate
142+
behind every shape, which renders the same on either surface.
143+
144+
That is why the plate is asserted rather than a ``prefers-color-scheme``
145+
rule. The file used to carry one, as miromind.svg still does; a plate makes
146+
the rule redundant, and the stylesheet's ``color-scheme`` lines no longer
147+
decide anything for this mark. Either mechanism is a fact about the file,
148+
and a file with neither is the failure this guards.
149+
150+
The tone must stay absent for the same reason it always did: a ``mono`` or
151+
``hybrid`` here would invert the plate along with the bird, which lands at
152+
dark-on-dark in exactly one theme -- and no DOM assertion sees a colour.
148153
"""
149154
svg = (_ASSETS / f"{_own_mark()}.svg").read_text(encoding="utf-8")
150-
assert "prefers-color-scheme: dark" in svg
155+
root = svg[: svg.index(">") + 1]
156+
shapes = _SHAPE.findall(svg)
157+
plate = [el for el in shapes if el.startswith("<rect") and 'fill="#FFFFFF"' in el]
158+
assert plate, "the own mark carries neither a plate nor a prefers-color-scheme rule"
159+
assert 'fill="none"' in root, "a root fill would paint outside the plate"
151160
assert _tone_of(_own_mark()) is None

‎ui-web/src/assets/agents/raven.svg‎

Lines changed: 11 additions & 22 deletions
Loading

‎ui-web/src/styles/page.css‎

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5068,9 +5068,14 @@ body:has(.app[data-page="on"]) #deskHost { display: none; }
50685068
overflow: hidden; color: var(--muted); }
50695069
.agent-mark svg { display: block; width: 14px; height: 14px; stroke-linecap: round; stroke-linejoin: round; }
50705070
.agent-mark img { display: block; width: 14px; height: 14px; object-fit: contain; }
5071-
/* The one mark that IS a tile: MiroMind's file is a favicon and carries its own
5072-
rounded card, so it fills the frame instead of sitting a card inside one. */
5071+
/* The two marks that ARE tiles fill the frame instead of sitting a card inside
5072+
one. MiroMind's file is a favicon and carries its own rounded card. */
50735073
.agent-mark img[data-agent="mirothinker"] { width: 100%; height: 100%; }
5074+
/* The second mark that is a tile: raven.svg carries an opaque plate of its own,
5075+
for the reason the color-scheme comment below records. Keyed by file, because
5076+
`data-agent` carries the preset and raven's own rows have none -- the same
5077+
reason agent-mark.tsx holds it outside MARKS. */
5078+
.agent-mark img[src$="agents/raven.svg"] { width: 100%; height: 100%; }
50745079
/* Only the marks that draw in currentColor, which an <img> resolves against its
50755080
own document and so renders black. `mono` is every shape, so the whole file
50765081
inverts, as the provider marks already do. `hybrid` is qoder alone: brand
@@ -5085,15 +5090,17 @@ body:has(.app[data-page="on"]) #deskHost { display: none; }
50855090
:root:not([data-theme="light"]) .agent-mark img[data-tone="mono"] { filter: invert(1); }
50865091
:root:not([data-theme="light"]) .agent-mark img[data-tone="hybrid"] { filter: invert(1) hue-rotate(180deg); }
50875092
}
5088-
/* Two marks answer the theme from inside their own file, each with a
5089-
prefers-color-scheme rule: miromind.svg, which is a favicon, and raven.svg,
5090-
which is a black bird and would otherwise sit at 1.2:1 on the dark surface --
5091-
no tone filter can help it, because it is not one colour to invert. An
5093+
/* miromind.svg answers the theme from inside its own file, with a
5094+
prefers-color-scheme rule of its own. An
50925095
<img>'s SVG evaluates that rule against the used color-scheme of the element
50935096
embedding it, NOT against this page's data-theme, so without these two lines
5094-
both follow the operating system while the rest of the roster follows the
5097+
it follows the operating system while the rest of the roster follows the
50955098
switch -- and since the app's default is explicitly light, a fresh install on
50965099
a dark OS is a normal way to see it.
5100+
raven.svg once needed the same treatment for the opposite reason: a black bird
5101+
sits at 1.2:1 on the dark surface and no tone filter can lift it, because it is
5102+
not one colour to invert. It now carries an opaque plate, which is theme
5103+
independent, so these two lines no longer decide anything for it.
50975104
Declared on the tile rather than on :root: there it would also hand every
50985105
native scrollbar and form control to the dark palette, which is a change to
50995106
the whole page and not to a mark. */

0 commit comments

Comments
 (0)