Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions design-qa-agent-management-card-title.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Agent Management Card Title Design QA

**Source visual truth path**

`/var/folders/0l/4dc990md3yn_g3b46dtmhp880000gn/T/orca-paste-1786355815911-c1768617-d9d5-4b7c-bc02-17762b0964a4.png`

**Implementation screenshot paths**

- Memory and Workspace: `/var/folders/0l/4dc990md3yn_g3b46dtmhp880000gn/T/orca-computer-use/8319c5ab-6c27-406a-b73d-46545f9b40f0-screenshot.png`
- Usage: `/var/folders/0l/4dc990md3yn_g3b46dtmhp880000gn/T/orca-computer-use/4239e809-2f34-4949-be50-d3d161209a31-screenshot.png`
Comment on lines +3 to +10

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

使用仓库可访问的视觉证据路径。

这些 /var/folders/... 路径是本机临时文件路径。合并后,审阅者和 CI 无法访问截图。将截图作为受版本控制的工件保存,并使用仓库相对路径引用它们。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@design-qa-agent-management-card-title.md` around lines 3 - 10, Replace the
local /var/folders screenshot references in the “Source visual truth path” and
“Implementation screenshot paths” sections with screenshots stored as
version-controlled repository artifacts, then reference each image using its
repository-relative path.


**Viewport and normalization**

- Source: 1496 x 1036 pixels, cropped to the Settings content region; density metadata is unavailable.
- Implementation: 2796 x 1818 pixels at 2x, representing a 1398 x 909 CSS-pixel Dao Debug window.
- State: light theme, `dao://settings/agent`, Data and management section with loaded metrics.
- The source is a content crop rather than a full browser viewport. The comparison therefore uses the visible card-header region for alignment and hierarchy, not pixel-perfect browser-frame geometry.

**Full-view comparison evidence**

The source and both implementation screenshots were opened together in one comparison input. The implementation preserves the independent Memory, Workspace, and Usage cards, existing row density, action surfaces, card spacing, borders, radii, and shadows. Browser chrome and sidebar are expected implementation-only context.

**Focused region comparison evidence**

Focused comparison was required because the requested change concerns the compact 52px card headers. Memory, Workspace, and Usage each show the title visually centered between the header boundaries. Each title uses the same 14px semibold hierarchy, 3px Dao-blue inline-start border, and 10px text inset. No title is clipped, wrapped, or offset toward the top edge.

**Required fidelity surfaces**

- Fonts and typography: the system font remains unchanged; the titles are consistently 14px, weight 650, and visually stronger than metric labels without competing with the section heading.
- Spacing and layout rhythm: vertical centering is corrected; the existing 52px header, card insets, 16px desktop gap, row heights, radii, and shadows remain visually stable.
- Colors and visual tokens: the accent border uses the existing Dao Settings blue; text and surfaces retain their existing light-theme tokens. Dark-theme behavior is token-backed but was not separately captured.
- Image quality and asset fidelity: no image, icon, logo, illustration, or generated asset is part of this change.
- Copy and content: Memory, Workspace, and Usage copy and all metrics/actions remain unchanged.

**Findings**

- No actionable P0, P1, or P2 mismatch remains for the requested card-title treatment.
- P3 verification gap: a separate dark-theme screenshot was not captured; the implementation reuses the existing accent and text tokens rather than adding theme-specific colors.

**Primary interactions checked**

- The page loads at `dao://settings/agent` in the freshly rebuilt Dao Debug app.
- Scrolling exposes all three management cards without changing their layout.
- Existing action rows remain visible and aligned; no action was invoked because this change is presentation-only.

**Comparison history**

- Iteration 1: the source showed titles sitting too close to the top of their headers and lacking a card identity marker.
- Fix: shared header alignment changed to vertical center; shared titles gained 14px semibold text and a Dao-blue inline-start border.
- Post-fix evidence: the Memory and Workspace screenshot confirms the shared treatment in adjacent cards; the Usage screenshot confirms the third card receives the same treatment.

**Implementation checklist**

- [x] Vertically center all three titles in the existing 52px headers.
- [x] Preserve horizontal left alignment and content inset.
- [x] Apply the same 3px accent border, 14px type, 650 weight, and 10px inset to all three titles.
- [x] Preserve card content, actions, semantics, responsive spacing, and localization.
- [x] Import and rebuild successfully through the approved project commands.
- [x] Compare the supplied screenshot and freshly rendered implementation together.

final result: passed
6 changes: 3 additions & 3 deletions docs/feature-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ Flagship feature. C++ services + `dao://dao-agent` WebUI + vendor runtime.
|---|---------|--------------------|------|----------------------|
| ☐ | 4 keyed-service factories registered (memory, skill, workspace, dream) | `profiles/chrome_browser_main_extra_parts_profiles.cc.patch` | 🟡 | Services instantiate per profile; agent features work |
| ☐ | Agent WebUI host allowed to make network requests (LLM API) | `webui/chrome_web_ui_controller_factory.cc.patch` (`origin.host()=="agent"`) | 🟢 | `dao://agent` reaches external LLM endpoints |
| ☐ | Unified Profile-scoped Agent settings and legacy migration | `src/dao/.../agent/dao_agent_settings_handler.{h,cc}`, `resources/agent/agent_settings_{sync,native_bridge}.ts`, `resources/settings/dao_page/dao_page.{html,ts}.patch`, `webui/settings/settings_ui.cc.patch` | 🟡 | Run `agent_settings_sync.test.ts`, `dao_agent_app.test.ts`, `DaoPage`, and `DaoAgentSettingsHandlerTest`; verify legacy `dao://agent` local-storage values migrate once without overwriting Settings values, partial usage dictionaries receive validated defaults and derived totals, malformed/non-finite fields fail closed, canonical stored snapshots still require the complete schema, both WebUIs receive `dao-agent-settings-changed`, rapid tool toggles serialize cumulative disabled-tool arrays and resync after failure, the resume window defaults to 3 and accepts 0, runtime-only state is not migrated, and the Agent gear opens `dao://settings/#dao` without rendering a duplicate settings view |
| ☐ | Settings Agent management summaries and limited native facade | `src/dao/.../agent/dao_agent_settings_handler.{h,cc}`, `resources/settings/dao_page/dao_page.{html,ts}.patch`, `resources/agent/agent_settings_native_bridge.ts` | 🟡 | Verify legacy `dao_agent_stats` migration preserves existing counters once; a Settings-side reset updates an already-open Agent WebUI; Memory clear requires confirmation and refreshes aggregate counts; Workspace reveal works without registering workspace mutation messages; configuration loading/error/retry is independent, including when `getSettings()` fails; all three management cards remain visible, usable, and independently loadable in light and dark themes; and the existing Skills, Memory, and Dream secondary links still open |
| ☐ | Unified Profile-scoped Agent settings and legacy migration | `src/dao/.../agent/dao_agent_settings_handler.{h,cc}`, `resources/agent/agent_settings_{sync,native_bridge}.ts`, `resources/settings/dao_page/dao_agent_page*.patch`, `webui/settings/settings_ui.cc.patch` | 🟡 | Run `agent_settings_sync.test.ts`, `dao_agent_app.test.ts`, `DaoAgentPage`, and `DaoAgentSettingsHandlerTest`; verify legacy `dao://agent` local-storage values migrate once without overwriting Settings values, partial usage dictionaries receive validated defaults and derived totals, malformed/non-finite fields fail closed, canonical stored snapshots still require the complete schema, both WebUIs receive `dao-agent-settings-changed`, rapid tool toggles serialize cumulative disabled-tool arrays and resync after failure, the resume window defaults to 3 and accepts 0, and runtime-only state is not migrated. With no active Agent turn, the gear opens exactly one foreground `dao://settings/agent` tab through its fixed native command; success closes the sidebar and failure leaves it open |
| ☐ | Settings Agent management summaries and limited native facade | `src/dao/.../agent/dao_agent_settings_handler.{h,cc}`, `resources/settings/dao_page/dao_agent_page*.patch`, `resources/agent/agent_settings_native_bridge.ts` | 🟡 | Verify legacy `dao_agent_stats` migration preserves existing counters once; persona reset removes the override and restores the runtime default; manual Dream generation remains disabled until Memory and Dream analysis are enabled, then reports success and failure without duplicate submissions; a Settings-side usage reset updates an already-open Agent WebUI; Memory clear requires confirmation and refreshes aggregate counts; Workspace reveal works without registering workspace mutation messages; configuration loading/error/retry is independent, including when `getSettings()` fails; Memory, Workspace, and Usage remain visible, independently loadable inset cards with 16px desktop spacing, 12px narrow spacing, compact rows, the shared content inset, and visible keyboard focus in light and dark themes; and the existing Skills, Memory, and Dream secondary links still open |
| ☐ | 7 Dao WebUI configs registered (agent, dream, index, memory, sidebar, skills, welcome) | `webui/chrome_web_ui_configs.cc.patch` | 🟡 | All 7 pages load; confirm upstream `SkillsUIConfig` still exists (dao takes over `dao://skills`) |
| ☐ | Agent tab helpers, cursor overlay, lock banner | `ui/tab_helpers.cc.patch` + `src/dao/.../agent/`, `dao_agent_*_view.*` | 🟢 | AI action cursor + lock banner show while agent controls a tab |
| ☐ | Window-scoped Agent/MCP tab tools with stable identities | `src/dao/.../automation/dao_tab_tools.{h,cc}`, `dao_browser_automation_session.{h,cc}`, `dao_tab_identity.{h,cc}`, `dao_agent_ui.cc`, `browser_tool_catalog.json` | 🟡 | Run `DaoMcpTabToolsBrowserTest.*`, `DaoMcpSessionTest.*`, `DaoSidebarTabIdentityBrowserTest.*`, and `agent_bridge_call_native.test.ts`; verify WebContents replacement keeps the target, restored IDs reconcile uniquely, duplicate selectors fail closed, open rejects non-HTTP(S) schemes without mutation, constrained insertion returns the actual new tab, and unload-gated close reports the accepted/cancelled outcome once before Agent target-state cleanup |
Expand Down Expand Up @@ -228,7 +228,7 @@ Not in `src/patches/`. Import mechanically rewrites `chrome://`→`dao://` in:
| ✔ | Feature | Patch(es) | Risk | Verify |
|---|---------|-----------|------|--------|
| ☐ | Open Design continuous settings overview | `resources/settings/settings_{ui,main,menu}/`, top-level `*_page_index.html.patch` files, `settings_shared.css.patch`, `settings_page/settings_section.html.patch` | 🟡 | Verify the 184px table of contents and content share one background; all visible top-level sections render continuously in a 680px column with 30px spacing; nested page-index views have non-zero flow height and never overlap the following section; menu clicks and scroll position synchronize selection/hash without Router navigation; legacy top-level paths normalize to hashes; secondary routes remain independent and restore overview context; the real `#searchField` Polymer key is wired; entering search captures overview scroll once, shows only matching menu IDs, clears selection on zero results, restores the full menu and captured scroll on clear, and never navigates top-level routes; href, `pageVisibility_`, pref, policy, toggle, and link-row inventories remain intact. Run the Settings main/menu/UI and local redesign contract tests in light, dark, and narrow layouts. |
| ☐ | Top-level Agent settings section beside You and Dao | `resources/settings/dao_page/dao_{page,agent_page}.{html,ts}.patch`, `settings_main/`, `settings_menu/`, `lazy_load.ts.patch`, `route.ts.patch`, `router_dao.ts.patch` | 🟡 | Verify exact inventory preservation in the independent `agent` section; `/agent`, `#agent`, menu `data-section`, Settings Main view ID, overview scroll selection, and search filtering agree; `You and Dao` contains no Agent summary or state; the Agent module remains in Chromium's shared Settings lazy bundle without dynamic chunks; all Agent categories remain searchable; English-first localization passes; and both sibling sections work in light and dark themes, desktop and below 760 px, mouse and keyboard navigation, visible focus, and reduced motion. |
| ☐ | Compact Agent overview entry and five-section secondary page | `resources/settings/dao_page/dao_agent_page*.patch`, `settings_main/`, `settings_menu/`, `lazy_load.ts.patch`, `route.ts.patch`, `router_dao.ts.patch` | 🟡 | Verify the continuous overview renders one compact Agent entry and no full Agent form; `#agent` scrolls to that entry; activating it or navigating directly to `/agent` opens only the secondary detail view; Back restores the overview and Agent scroll context; the Agent menu item remains selected on the child route; Settings search finds the compact entry; and the detail page renders exactly Model and connection, Behavior and context, Capabilities, Learning and analysis, and Data and management in that order with no section rail or tabs. Check mouse and keyboard activation, heading focus, visible focus, reduced motion, light/dark themes, desktop, and below 760 px. |
| ☐ | Dao settings page UI (Profile feature controls + global MCP card + enhanced-PiP preview) | `resources/settings/dao_page/dao_page.{html,ts}.patch` (new files), `src/dao/.../mcp/dao_mcp_settings_handler.{h,cc}` | 🟡 | Page renders the Profile-backed feature toggles plus an independent MCP header/connection/enabled-only-setup card. Verify aligned, narrow-width-stacking setup controls; lease-only client/Stop controls; whitespace-preserving preview; native three-space Generic MCP JSON identical to copied content; malformed JSON failure without clipboard change; dynamic copy feedback; no standalone configuration action; and the animated PiP preview |
| ☐ | Dao settings prefs exposed through SettingsPrivate allowlist | `extensions/api/settings_private/prefs_util.cc.patch`, `src/dao/browser/dao_pref_names.*` | 🟡 | Toggles read/write `dao.little_dao_enabled`, `dao.enhanced_pip_enabled`, and `dao.enhanced_command_bar_suggestions_enabled` without console errors |
| ☐ | Page registered in build | `resources/settings/BUILD.gn.patch` | 🟢 | `dao_page.ts` compiled/bundled |
Expand Down
26 changes: 16 additions & 10 deletions docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ The stack includes: **LLM tool calling**, **long-term memory** (SQLite + FTS5),

**Application shell** (`src/dao/browser/ui/webui/resources/agent/`)
- `agent.{html,css,ts}` + `dao_agent_app.ts` — Chat app entry; its settings
button opens the unified `dao://settings/#agent` overview section
button uses a fixed native navigation command to open the unified
`dao://settings/agent` secondary page and closes the sidebar only after the navigation succeeds
- `skills.html` + `skills.ts` — Skill manager standalone entry
- `agent_bridge.ts` — Mojo bridge
- `agent_settings_{sync,native_bridge}.ts` — One-time migration from the
Expand All @@ -172,21 +173,24 @@ The stack includes: **LLM tool calling**, **long-term memory** (SQLite + FTS5),
- `skill_registry.ts` — Skill catalog and lookup
- `tool_catalog.ts` — Tool catalog schema

**Unified Agent settings** (`dao://settings/#agent`, top-level route `/agent`)
**Unified Agent settings** (`dao://settings/agent`, overview entry `#agent`)
- `DaoAgentSettingsHandler` stores durable Agent choices in Profile prefs and
is shared by the Agent and Settings WebUIs
- `Agent` is a top-level Dao-exclusive Settings section beside `You and Dao`.
`You and Dao` owns browser capabilities only; all Agent configuration,
Memory, Workspace, Usage, Skills, and Dream controls appear exactly once in
the Agent section
- `Agent` remains a compact top-level Dao-exclusive Settings entry beside
`You and Dao`. `You and Dao` owns browser capabilities only; the complete
Agent configuration, Memory, Workspace, Usage, Skills, and Dream controls
appear exactly once on the Agent secondary page
- The Agent module is packaged in Chromium's shared Settings lazy bundle and
rendered as its own continuous-overview section. Search delegates directly
to it, keeping provider, model, API key, session, personality, context,
tools, search, memory, proactive suggestions, Dream, workspace, skills, and
usage discoverable without a duplicate summary or intermediate subpage
reached from the compact overview entry. The detail page uses five vertical Settings sections:
Model and connection, Behavior and context,
Capabilities, Learning and analysis, and Data and management. It adds no
section rail or tabs
- Model/provider credentials, session/display behavior, persona, page and
conversation context, web search, memory/proactive suggestions, and Dream
analysis are managed in the Agent Settings section
- The persona card can restore the runtime default, while the Dream card can
generate a report immediately when Memory and Dream analysis are enabled and
keeps the existing Dream report history link available
- Tool group shortcuts and the expandable individual-permission list preserve
the existing per-tool enable/disable controls. Rapid changes update one
optimistic disabled-tool set and serialize complete-array writes before
Expand All @@ -199,6 +203,8 @@ The stack includes: **LLM tool calling**, **long-term memory** (SQLite + FTS5),
hours. Configuration has independent loading, error, and retry feedback, so
a configuration failure does not hide or disable management summaries
- The Agent section owns complete Memory, Workspace, and Usage management.
These modules render as independent compact cards inside Data and management
so their headings and actions remain visually separated.
Memory and workspace data come from their Profile-keyed services; usage
counters are stored in the Profile `dao.agent_usage_stats` pref, which is the
source of truth shared with already-open Agent WebUIs
Expand Down
Loading
Loading