Commit Graph
18711 Commits
Author SHA1 Message Date
creatixchu 1ea80b7b69 Merge remote-tracking branch 'origin/master' into worktree/code-diff-card
# Conflicts:
#	packages/client/ui-deliverables/package.json
#	snapshots/web/present-svg/ui.expected.md
2026-09-15 15:11:02 +08:00
07akioni 830c82687b revert: restore original CLI profile boot exports 2026-09-15 14:56:19 +08:00
ihsiang 9441552679 Merge pull request #4163 from deepseek-harness/ihsiang/fix-conversation-width-handle-layering
fix(ui): keep transcript resize handles unobtrusive
2026-09-15 14:53:40 +08:00
yixiangihsiang 1bec11e366 fix(ui): keep transcript resize handles unobtrusive 2026-09-15 14:39:38 +08:00
liukx0205 21a785902b fix(client): keep a launcher-opened menu open through its own focus track
Opening the trigger menu from the launcher button has to put the keyboard in
the editor for the arrows to drive it, and Lexical's focus restores its
selection a tick later — a track the controller read as an empty draft and
answered by closing the menu the gesture had just opened. A launcher-opened
menu now survives that single follow-up track; typing, picking, Escape or a
pointer press still takes over.

The access-confirmation golden follows the panel's new highlight: it parks on
the row the options mark as the current value rather than the top row.
2026-09-15 14:39:21 +08:00
07akioni 9ce6d98e11 fix(ci): validate Web injection payload and cover macOS sidebar controls 2026-09-15 14:32:29 +08:00
Turtle 07c6a65f4f Merge pull request #4232 from deepseek-harness/turtle/orchestrator-0d396914f8c0
fix(web): clarify external-app limits for delivered files
2026-09-15 14:25:00 +08:00
Yichen Jiang 6d05c9557f fix(web): forward client graphs without Host lifecycle waits 2026-09-15 14:23:47 +08:00
liukx0205 afbe3a4b1d refactor(client): compute the menu's keyboard region once per key 2026-09-15 14:22:03 +08:00
liukx0205 b263581e92 fix(client): answer the review bot's findings on the keyboard hand-offs
- The model seat decides before consuming: a focused control that is not a row
  (a retry button) keeps the browser's traversal, and Tab enters the list only
  from the trigger.
- A launcher-opened menu is a fresh intent, so the dismissal that closed the
  same token earlier no longer silences it.
- Comments and JSDoc now match the implementation: the near-end entry resumes
  from the walk's last index, Shift+Tab leaves whenever the menu is open, and
  the anchor hand-back names the control that opened the menu.
- The e2e focus assertions all go through `expect.poll`.
- Regression coverage for a rowless pane (the trigger keeps the keyboard) and
  for a focused retry keeping its Tab, in the seat and the popup shell.
- The PR records the two public-surface changes (`SessionInput.focus()` in,
  `bindComposerFocus` out) and the row-fill focus decision.
2026-09-15 14:21:00 +08:00
07akioni 255374afa1 fix(cli): expose only the shared profile runner API 2026-09-15 14:16:48 +08:00
liukx0205 5c3081eeaa fix(client): tighten the keyboard hand-offs, and drop the dialog Escape layering
Review follow-ups on the hand-offs this branch added:

- Menu gives the keyboard back to the control that opened it (an anchor may
  wrap several, as a split button does), falls back to a disabled-free anchor
  button, leaves a Tab it cannot use to the browser, and no longer moves focus
  while the owner keeps the list open.
- The model seat settles only real rows with Tab and keeps the keyboard on its
  trigger when a pane's rows are disabled or absent.
- The popup shell leaves Tab to the browser when nothing can be settled (the
  error strip's retry button stays reachable), and a dismissal caused by a
  stale catalog returns the keyboard like the other paths.
- A frozen-tier track is the submit gesture's own bookkeeping and no longer
  re-arms a menu the user dismissed.
- The launcher reuses the shared caret-preserving focus helper; the option
  contract records that `active` is the row an accept gesture confirms; the
  conversation README documents the composer's key and focus behavior.

The dialog/menu Escape layering this branch also carried is out of scope here
and has been removed again.
2026-09-15 14:16:14 +08:00
Turtle 59fb655d66 Merge remote-tracking branch 'origin/master' into turtle/plugin-manager 2026-09-15 14:16:09 +08:00
Yichen Jiang 2c9375e509 fix(web): reconcile pending plugin revisions and preserve bootstrap 2026-09-15 14:15:23 +08:00
Turtle b77c19c376 fix(hmr): retain consecutive profile configuration changes 2026-09-15 14:13:57 +08:00
Turtle 9cee793b90 Merge branch 'master' into turtle/blame-weighted-approval 2026-09-15 14:08:57 +08:00
liukx0205 3065f9cc27 docs(client): drop a reverted implementation from the note's evidence list 2026-09-15 13:59:38 +08:00
07akioni b43e85129c Merge macOS hidden titlebar while preserving local Web startup 2026-09-15 13:58:23 +08:00
liukx0205 4fc515cb68 fix(client): keep the ring on the triggers and off the menu rows
The two split the other way around: the composer's triggers keep the focus
ring their design gives them (a 2px `--dsw-alias-border-l3` ring), while a
walked menu row shows the hover fill alone, without the browser's default
outline doubling it.
2026-09-15 13:55:50 +08:00
liukx0205 449a4610d7 fix(client): keep the browser ring on the focused menu row
The menu family was the only place that suppressed the browser's default focus
ring. It keeps that ring now, like the app's other controls, on top of the
hover fill a walked row already carried.
2026-09-15 13:52:49 +08:00
07akioni 4feb87da34 feat(desktop): load bundled Web UI before backend readiness 2026-09-15 13:43:27 +08:00
Turtle 0976569d16 fix(web): clarify external app availability for delivered files 2026-09-15 13:42:42 +08:00
Turtle b5bbf210d1 Merge pull request #4198 from deepseek-harness/turtle/master-ci-packed-inventory
test(ci): repair packed inventory context fixture
2026-09-15 13:40:44 +08:00
liukx0205 4b8a47a198 docs(client): record the SessionInput focus addition in the note 2026-09-15 13:38:56 +08:00
liukx0205 f46b025fd5 feat(client): give the shared menu family its keyboard model
Arrow navigation was bound to `autoFocus`, so the dropdowns that open with the
keyboard on their trigger — the composer's permission seat, the settings
pickers, the workspace and preset chips — had no walk at all, and a walk that
read its position from `document.activeElement` alternated between the first
and last row as soon as a row refused focus. The walk now works either way and
resumes from the index it last focused.

The keyboard returns to the anchor on Escape and on a selection — unless the
owner moved it itself, as a presented file card does for its preview button —
and the focused row wears the hover fill instead of the browser's ring. An open
menu takes the first Escape from the dialog it sits in.

The composer's trigger menu keeps its own Tab, which settles or drills the
highlighted candidate; Escape and Shift+Tab leave it without settling, and a
dismissed menu stays dismissed until its query changes. Opening it from the
launcher button returns the keyboard to the editor first, since the menu is a
combobox over that editor.
2026-09-15 13:35:27 +08:00
liukx0205 c47a469aec feat(client): accept and leave with Enter, Tab, and Escape in the composer
The popup select panel and the model seat hold focus while open, and their Tab
fell through to the browser's traversal, leaving an open surface that only a
pointer press clears. Both now settle on Enter or Tab, leave on Escape or
Shift+Tab, walk with the arrows, and park on the value in use: the panel's
highlight on the row its options mark current, the seat's drilled pane on its
checked row, with the keyboard handed back to the cell that drilled in when the
pane is left.

Dismissal rides the conversation's own focus(), so the caret returns where the
draft left it instead of at the start.
2026-09-15 13:35:04 +08:00
Yichen Jiang 1fec9adb61 docs(web): clarify client plugin reload failures 2026-09-15 13:29:58 +08:00
kingwl 3df6f92d03 feat(web): configure model image input in settings 2026-09-15 13:26:25 +08:00
Yichen Jiang 358384f045 Merge pull request #4206 from deepseek-harness/worktree/sidebar-session-recovery
feat(web): restore sidebar layouts and reclaim unattended terminals
2026-09-15 13:25:27 +08:00
Turtle 86497c479c Merge remote-tracking branch 'origin/master' into turtle/plugin-manager
# Conflicts:
#	packages/client/ui-settings-plugin-inventory/package.json
2026-09-15 13:09:38 +08:00
Yichen Jiang 149ed69912 test(subprocess-local): cover configured ZDOTDIR without zsh 2026-09-15 13:08:03 +08:00
Turtle abd765a600 refactor(hmr): own profile reload lifecycle through YAML 2026-09-15 13:01:06 +08:00
Yichen Jiang ac2bed35e2 feat(web): guide plugin installation with a pre-install check and classified failures
The install dialog asks the Host to read a spec before installing it:
`plugins/inspect` sorts the spec (registry name, absolute path, git address,
tarball), asks the registry through `pnpm view` in the profile directory, or
reads a directory's package.json, and refuses what would fail with
`plugins/inspect-rejected` and a problem the dialog words under the field.
A failed pnpm run carries a `kind` classified from how it ended and what pnpm
printed, shown as one line with the output folded behind the details.
Enabling happens after the fact from the installed screen, which scrolls the
list to the first new bundle. Refusals of the moment and the confirmed
cancellation are toasts; the run is stopped through the manager's
`cancelInstall` and the dialog offers the spec again once the Host confirms.
The non-pack dependency group folds by default under its own name.

The host config gains `inspectTimeoutMs`; the CLI passes it explicitly.
2026-09-15 12:43:44 +08:00
Yichen Jiang ad8a00c291 Merge remote-tracking branch 'origin/master' into worktree/sidebar-session-recovery
# Conflicts:
#	packages/subprocess/subprocess-local/src/index.ts
2026-09-15 12:15:20 +08:00
Yichen Jiang 281723bed8 fix(web): isolate terminal bindings and validate saved layouts 2026-09-15 12:07:01 +08:00
Dudu-0223 53046b21b4 fix(session-controller): reconcile list cache in linear time 2026-09-15 11:36:52 +08:00
07akioni aa083ebfa4 Merge latest master into thin Electron Web UI 2026-09-15 11:25:07 +08:00
imccyu 0d1f50007f Merge pull request #4192 from deepseek-harness/worktree-bootfast2
perf(web): bootstrap client fast
2026-09-15 11:16:06 +08:00
imccyu e459e32637 perf(typert): materialize generated schemas on first use 2026-09-15 11:06:43 +08:00
imccyu 232ab768a9 perf(runtime): defer optional native dependencies 2026-09-15 11:06:43 +08:00
imccyu eb8cc594b3 feat(util): add caller-relative lazy require 2026-09-15 11:06:42 +08:00
imccyu 42286726c8 perf(web): defer client combo assembly 2026-09-15 11:00:34 +08:00
Yichen Jiang a2112c07e4 test(subprocess): refresh terminal activity API snapshot 2026-09-15 10:47:47 +08:00
CreatixChu 0a15e36e7f Merge pull request #4171 from deepseek-harness/worktree/release-dsh-0.1.6-alpha.1
release(dsh): 0.1.6-alpha.1
dsh-v0.1.6-alpha.1
2026-09-15 10:42:33 +08:00
Yichen Jiang ccd6121c99 Merge remote-tracking branch 'origin/master' into worktree/sidebar-session-recovery
# Conflicts:
#	apps/web/tests/sidebar-terminal.e2e.ts
#	packages/client/ui-sidebar-terminal/src/client/TerminalBody.module.css
2026-09-15 10:29:08 +08:00
Yichen Jiang b25c5ad82e feat(web): restore sidebar layouts and reclaim unattended terminals 2026-09-15 10:27:44 +08:00
creatixchu ea53423b60 release(dsh): 0.1.6-alpha.1 2026-09-15 09:35:57 +08:00
Yif f2db686404 feat(desktop): macOS hidden titlebar with vibrancy sidebar
hiddenInset titlebar with traffic lights over a vibrancy sidebar, darwin-only
via data-platform set by the desktop preload: transparent chain to the window
material, native-theme sync from the app theme source, sidebar top strip +
full hide when collapsed with reopen controls in the new
conversation.session.header.leading slot, title-row drag regions, and
fullscreen right-sidebar traffic-light clearance via the dockkit strip inset.
2026-09-15 02:26:57 +08:00
turtle1999 dcf1d274d9 test(ci): repair packed inventory context fixture 2026-09-15 01:34:35 +08:00
07akioni bafe2b7d55 Merge master into thin Electron Web UI and reconcile runtime resolution 2026-09-15 01:17:42 +08:00