Files
deepseek-harness/apps/web/tests/expected/clickable-links-gallery/ui.expected.md
T
5ff29190ed feat(ui): add navigation entry customization (#6247)
* fix(ui): avoid tooltip trigger overlap when a side fits

* feat(ui): add navigation entry customization

* fix(test): keep tooltip geometry independent of JSX types

* fix(ui): align customization catalogs and integration fixtures

* test(ui): complete customization lifecycle and release integration coverage

* fix(ui): return entry discovery to the installed plugin list

* docs: refresh module graph for entry customization

* build: refresh workspace links for the moved entry customization package

* docs: regenerate catalogs and pairing hashes for the moved entry customization package

* test(web): cover default-loaded entry customization in the Web e2e

* test(ui): describe entry customization as a browser plugin in the host entry spec

* build: order entry customization publication files as workspace constraints require

* test(release): drop the moved entry customization package from the experimental family list

* style(ui): use the shared focus ring color on entry customization triggers

* test(web): re-record goldens for the default-loaded More navigation menus

* test(web): add the More conversation views trigger to the remaining CI-reported goldens

* docs: record region-owned pins for plugin entry customization

* refactor(ui): rebuild entry customization on region-owned pins and More menus

- Each navigation region (left sidebar, Conversation header, right sidebar
  guide) persists its own unpinned list under
  dsh.slot.manual-order.<list slot key>.v1, filters its own launchers, and
  draws its own More button and Menu around its actions slot.
- ui-entry-customization only registers the shared menu rows (entries with
  pin buttons, Browse other plugins, Create your plugin) into the three
  actions slots and keeps no state.
- Remove ctx.layout.entryVisibility, the plugin store, left-sidebar drag
  reordering, and agentPresetNavigation; ui-layout and ui-agent-preset match
  release/dsh-0.2.1 again.
- Keep the release <nav> and Conversation tab-bar visibility conditions.
- Move the More glyph into ui-primitives as IconAppsAddOutline{Regular,Medium}.

* docs: compile the entry customization owner props example

* docs(ui): describe the wrapping Conversation tab row in the header comment

* fix(ui): return New Session to the Workspace blank and its unsent draft

- New Session (startSession without options) takes the blank-reuse path
  again instead of creating a fresh Session on every call, which hid the
  previous blank and its unsent draft since a5c9c2aaeef (#5775).
- A request that names an Agent preset skips blanks listing a different
  preset, so Creator entries no longer take over an ordinary draft.
- Record the change in a v0.2.1-rc.2 upgrade guide; the Host refresh of a
  stale loaded blank stays deferred (see the Agent Note).

* docs: regenerate the Cordis inspect catalog for New Session blank reuse

* fix(ui): keep the selected entry visible while unpinned

- Left-sidebar rows and View tabs keep the selected entry, with aria-current or aria-selected, until another entry is selected.
- Entry menu Creator action takes no region argument; the registration's region selects the prompt.
- Document the 2px panel-row and 32px View-tab gaps; drop commit hashes from the New Session Agent Note.

* fix(ui): leave a blank of another preset unstaged when starting Creator

startCreatorDraft stages cordis only when the main blank lists no preset or already lists cordis; navigation opens a separate Creator blank otherwise, so a Standard draft blank keeps its preset.

* feat(ui): choose whether a draft prompt replaces, appends to, or keeps an existing draft

- DraftInitializationOptions gains whenDraftExists ('replace' | 'append' | 'keep', default 'keep'); clearPreviousDraft stays and maps to 'replace' only when whenDraftExists is omitted.
- Append adds the prompt as new paragraphs after the existing text and references; attachments stay in every mode.
- The three Create your plugin entries append their regional prompt.

* test(web): align e2e with New Session blank reuse and the visible selected entry

* refactor(ui): share the draft paragraph writer between setDraft and appendDraft

---------

Co-authored-by: Yif <877193178@qq.com>
Co-authored-by: imccyu <276526105+imccyu@users.noreply.github.com>
2026-10-20 15:17:13 +08:00

5.7 KiB

  • banner:
    • navigation "Session hierarchy": Clickable links gallery
    • button "More actions"
    • button "Open right sidebar"
    • tablist:
      • tab "Chat" [selected]
      • tab "Trajectory"
    • button "More conversation views"
  • text: "Assemble the link gallery: write the report and styles, inspect the sources, and summarize. {{clock}}"
  • button "Copy"
  • status: Completed
  • button "Completed in {{duration}}" [expanded]
  • button "Wrote files, ran commands, called tools, etc." [expanded]
  • button "Write site/report.html 1KB +1 -0":
    • text: Write
    • button "site/report.html"
    • text: 1KB +1 -0
  • button "Write a/style.css 1KB +1 -0":
    • text: Write
    • button "a/style.css"
    • text: 1KB +1 -0
  • button "Write b/style.css 1KB +1 -0":
    • text: Write
    • button "b/style.css"
    • text: 1KB +1 -0
  • button "Write site/index.html 1KB +1 -0":
    • text: Write
    • button "site/index.html"
    • text: 1KB +1 -0
  • button "Write site/app.js 1KB +1 -0":
    • text: Write
    • button "site/app.js"
    • text: 1KB +1 -0
  • button "Edit src/tokens.css 1KB +1 -1" [expanded]:
    • text: Edit
    • button "src/tokens.css"
    • text: 1KB +1 -1
  • text: css
  • button "Wrap lines"
  • button "Copy"
  • text: "src/tokens.css - --inline-code: #EBEEF2; + --inline-code: #F5F5F5;"
  • button "Inspect"
  • button "Tool call str_replace_editor · create" [expanded]
  • text: "IN { "command": "create", "path": "docs/press.md", "file_text": "# Press kit\n" } OUT Created docs/press.md"
  • button "Inspect"
  • text: Failed
  • 'button "Write permission denied: c/broken.css"'
  • button "Read docs/guide.md" [expanded]:
    • text: Read
    • button "docs/guide.md"
  • text: Code block docs/guide.md
  • button "Wrap lines"
  • button "Copy"
  • text: "# Link style guide guide line 2 guide line 3 guide line 4"
  • button "Expand 4 more lines": … 4 more lines
  • text: guide line 9 guide line 10 guide line 11 guide line 12
  • button "Inspect"
  • button "Grep linkColor" [expanded]
  • text: 9 matches · 3 files
  • button "Copy"
  • button "a/style.css 3" [expanded]
  • text: "3: color: var(--linkColor); 7: color: var(--linkColor); 11: color: var(--linkColor);"
  • button "Expand 4 more result lines": … 4 more lines
  • button "src/tokens.css 3" [expanded]
  • text: "3: color: var(--linkColor); 7: color: var(--linkColor); 11: color: var(--linkColor);"
  • button "Inspect"
  • button "Glob **/*.css"
  • button "Bash List the built site"
  • button "Failed Bash Run the lint gate exit code 1" [expanded]
  • text: Failed site pnpm run lint exit code 1
  • button "Copy"
  • text: "style.css: unexpected hex literal"
  • button "Inspect"
  • button "Failed Bash Check every generated stylesheet and component theme against the shared design tokens, inspect the application pages for inconsistent colors, and report all remaining lint failures before publishing the production build exit code 1"
  • button "Failed Bash Build the site no exit code" [expanded]
  • text: Failed site pnpm run build no exit code
  • button "Copy"
  • text: (no output) [timed out after {{duration}}]
  • button "Inspect"
  • button "Search clickable link styles, produced files ui" [expanded]
  • paragraph:
  • list:
    • listitem:
    • listitem: Mirror spec (non-http) A non-http source renders inert.
  • button "Inspect"
  • button "Fetch https://docs.example.test/tokens" [expanded]:
  • link "https://docs.example.test/tokens":
  • text: HTTP 200
  • button "Inspect"
  • button "Tool call design_tokens_sync · design-platform.css" [expanded]
  • text: "IN { "source": "design-platform.css", "dryRun": false } OUT {"synced":true,"tokens":12}"
  • button "Inspect"
  • heading "Link gallery" [level=2]
  • paragraph:
  • paragraph:
  • paragraph:
  • paragraph:
    • text: "Inert contrasts:"
    • code: curl https://docs.example.test/api
    • text: ","
    • code: javascript:alert(1)
    • text: ", and"
    • code: pnpm run build
    • text: .
  • paragraph:
    • text: Wrote
    • code:
      • button "Open site/report.html in sidebar": report.html
    • text: plus two
    • code: style.css
    • text: copies;
    • code: notes.md
    • text: untouched.
  • paragraph:
    • 'button "View full image: Token preview"':
      • img "Token preview"
  • text: css
  • button "Wrap lines" [pressed]
  • button "Copy"
  • code: "--inline-code: #F5F5F5;"
  • paragraph: LINK_GALLERY_DONE
  • heading "Footnotes" [level=2]
  • list:
    • listitem:
      • paragraph: Footnote references stay inert superscripts. ↩
  • button "Copy"
  • button "Good response"
  • button "Bad response"
  • button "Branch into a new conversation"
  • text: {{clock}}
  • button "Back to bottom"
  • textbox "Message or run a task, / commands, @ files or sessions"
  • button "Add files or run commands"
  • 'button "Access mode, current: Workspace Write"': Workspace Write
  • button "Select model, current DeepSeek-V4-Flash": DeepSeek-V4-Flash
  • button "Send message" [disabled]
  • button "1 turns 2 steps"