Commit Graph
2424 Commits
Author SHA1 Message Date
Yichen Jiang fecfabcac4 fix(credentials): name reference update event explicitly 2026-08-20 17:58:39 +08:00
pku-xht 36aead7320 Merge remote-tracking branch 'origin/master' into codex/cache-hit-decimal-display-v2 2026-08-20 17:18:29 +08:00
Yichen Jiang 6d6262703b Merge pull request #2820 from deepseek-harness/feat/1687-multiline-question-answer
feat(web): answer ask_user_question over multiple lines
2026-08-20 17:12:39 +08:00
Yichen Jiang 7260f4cf64 fix(web): cap the answer field at six text lines in both variants
The card-wide `border-box` reached `.fieldMirror`, so the growth cap counted
text plus padding. The inline variant carries none and landed on the declared
line count, while the optionless variant's 16px inset spent two thirds of a
line and delivered its last one as an 8px sliver. The e2e measured only the
inline shape, so nothing caught the drift.

The mirror now takes `box-sizing: content-box`, which states the cap in the
units it is written in, and the cap moves to six lines. The e2e asserts whole
text lines rather than a box height, and covers the optionless shape — asked
straight through the user-questions seam, since a layout metric needs no model
round — including that the reserved empty field is fully covered by its own
control.
2026-08-20 16:58:41 +08:00
imccyu be3a630da8 docs(web): retire tap-era prose across READMEs, subsystems, and notes 2026-08-20 16:13:05 +08:00
imccyu 10f9f506e2 fix(web): stand down prefetch only when the transport owns bundle bytes 2026-08-20 16:13:05 +08:00
imccyu 3ca4997cd2 test: cover gateway rollback and theme fallback branches 2026-08-20 16:13:05 +08:00
imccyu 156bd075a9 feat(webserver): structured index injection table and the client boot seams
Replace per-plugin tapIndex regex edits with pure-data IndexInjection rows
collected fresh per render over one webserver/index-inject event. One table,
two renderers: the served form renders rows into index.html; a static worker
form ships the same rows over its boot payload. tapIndex survives as the
raw-HTML escape hatch, applied after row rendering; client-modules and
ui-theme move to the event, and the manifest global renders as
globalThis["__DSH_BOOT__"].

The client boot chain gains the seams a pre-injected transport needs: the
module loader takes loadBundle from the transport global by default, HTTP
prefetch stands down when a transport owns bundle bytes, the web-app bundle
can decline frontend serving, the gateway client installs a namespace's
whole method group inside its fiber apply so a parked dependent never
observes the service without its methods, and the dynamic-code precheck
gates through new Function so hosts without a real node:vm keep the
define-time parse gate.
2026-08-20 16:13:04 +08:00
07akioni e483c9e30e Merge pull request #2776 from deepseek-harness/feat/table-optmize
feat(web): wrap markdown tables to the column with an overflow wide view
2026-08-20 15:46:40 +08:00
Yichen Jiang 9616790b6c feat(web): answer ask_user_question over multiple lines
A question that carried options collected its free-text answer in a
single-line input: a long sentence scrolled sideways inside one line and
Shift+Enter was inert, so an answer with structure could not be typed.
The optionless question already used a textarea, but a fixed 64-140px box
that never followed the draft.

Both shapes now answer into one AnswerField: a `textarea rows=1` sharing a
grid cell with a hidden mirror that renders the draft plus a trailing
newline and so owns the height. Soft wraps are invisible to a '\n' count,
so the mirror is what grows the box; growth stops at eight lines and the
textarea scrolls from there, keeping the choices the answer belongs to in
view. Enter still continues and submits, Shift+Enter breaks the line, and
the IME guard is unchanged.
2026-08-20 15:29:13 +08:00
_Kerman e333dfc8f5 Merge pull request #2794 from deepseek-harness/fix/web-new-session-first
fix(ui-workspace): pin the current blank New Session row first
2026-08-20 14:53:08 +08:00
07akioni c9ce61136d feat(web): reveal the wide-table scrollbar on hover instead of painting it
The themed WebKit scrollbar skin keeps a wide table's horizontal bar
permanently painted. Chromium never repaints state-conditioned scrollbar
styles (hover-conditioned ::-webkit-scrollbar* rules and :hover
scrollbar-color changes both compute but never reach the painted bar,
measured headed and headless), so the hover reveal toggles overflow-x
itself: hidden at rest with a padding-bottom matching the themed bar
height, auto on hover or keyboard focus with the padding released — the
appearing bar exactly replaces the padding and nothing below shifts.
Resting hidden overflow drops Chromium's implicit scroller focusability,
so wide wrappers carry an explicit tabindex for arrow-key scrolling.
2026-08-20 14:45:15 +08:00
_Kerman b3b6407a2c fix(ui-workspace): promote new sessions only once 2026-08-20 14:21:55 +08:00
_Kerman d53292b30a fix(ui-workspace): make the blank-session pin render-only and skip masked drags
Review follow-up on #2794: the pin was applied inside nextSessionOrderAccount,
whose output syncSessionOrderAccount persists into sessionOrderByAccount, so a
reused blank stayed first forever after turning non-blank (even across
reloads). Move the pin to the render-derived layer (orderedWorkspaces,
orderedUngroupedSessionIds, ungrouped order, flat rows) so the persisted
account order is never touched, and skip drags the pin would mask (dragging
the pinned blank, or parking another row into the pinned slot) entirely,
including the Host account write.

Adds regression tests for the masked-drag skip and for the pin releasing when
the blank turns real; updates the sidebar-order Agent Note (EN + ZH) and its
pairing hash.
2026-08-20 13:25:55 +08:00
Yichen Jiang d18f4ed3de Merge pull request #2796 from deepseek-harness/worktree/mention-backdrop-perf-issue-4bd518
fix(web): key composer reference decorations by draft order
2026-08-20 13:21:29 +08:00
Yichen Jiang 99aad0ebcd fix(web): key composer reference decorations by draft order
The backdrop keyed each plain-text reference mark by its draft offset, so
any character typed ahead of a reference changed the key and made React
unmount the mark with its nested spans and inline glyph. Every keystroke
before a reference rebuilt every reference after the caret.

A scan derives these ranges fresh on every render, so a range carries no
identity past the render slot it occupies. The mark now keys by its index
in the offset-sorted textRefs list. Structured chips keep occurrenceId,
the identity their occurrence table owns.
2026-08-20 12:59:13 +08:00
_Kerman d0b7dea8af fix(ui-workspace): pin the current blank New Session row first
Clicking New Session reuses the workspace's existing blank session when one
exists; reuse only opens it, so its updatedAt (host: max(createdAt,
lastPromptAt)) never advances and the row kept its old creation-time
position in the sidebar. nextSessionOrderAccount now pins the currently
selected blank session to the front of its account in both Manual and Last
updated modes; non-blank navigation stays untouched.

Fixes #2788
2026-08-20 12:51:51 +08:00
Kaige-Gao 027b1d579f Merge remote-tracking branch 'origin/master' into fix/permission-copy-and-default 2026-08-19 23:23:54 +08:00
imccyu f1f7dc36fa release(dsh): 0.1.0-rc.8 2026-08-19 23:00:28 +08:00
Kaige-Gao 8304a25d8a Merge remote-tracking branch 'origin/master' into fix/permission-copy-and-default
# Conflicts:
#	packages/subagent/subagent-codex/tests/subagent-codex.spec.ts
2026-08-19 22:50:35 +08:00
Kaige-Gao 35778ec2ff fix(web): address permission preset review feedback 2026-08-19 22:45:54 +08:00
07akioni 000ab970f3 feat(web): size markdown tables by column count, widen wide ones past the column
Markdown tables were always rendered at natural width, so anything wider
than the 748px message column could only be read through horizontal
scrolling. Following the deepsuite chat TableWrapper treatment: tables
under four columns (and any table inside a blockquote) now fill the column
and wrap cell text down to the cells' minimum readable width, while
four-or-more-column tables keep their natural width behind the wrapper's
horizontal scroll and carry the stable md-table-wide hook. The chat
transcript widens hooked tables past the message column with a pure-CSS
container-query breakout (100cqw against ChatView's scroll container
standing in for deepsuite's JS-measured list width), keeping the table
content aligned with the message column and clamping to neutral when the
transcript is narrower than the column.
2026-08-19 19:58:14 +08:00
imccyu 50a953fef3 fix: ci 2026-08-19 18:21:35 +08:00
imccyu 319d9a7984 feat(client): compose deployment branding through slots 2026-08-19 18:21:35 +08:00
imccyu 66a7081c15 feat(build): bind client artifacts to build profiles 2026-08-19 18:21:27 +08:00
imccyu 93cbb3799d feat(client): inject public build environment 2026-08-19 18:21:26 +08:00
Yichen Jiang 1585e539d2 fix(web): address reference review defects 2026-08-19 18:02:10 +08:00
Yichen Jiang bbc356144d Merge remote-tracking branch 'origin/master' into worktree/web-reference-ui-polish 2026-08-19 17:11:46 +08:00
Yichen Jiang 988dd7824a fix(web): align reference input and recall ordering 2026-08-19 17:11:36 +08:00
CreatixChu 24ef32c7b8 Merge pull request #2134 from deepseek-harness/worktree/abort-partial-finalize
feat(agent-loop): finalize a cancelled stream's delivered prefix
2026-08-19 15:39:14 +08:00
creatixchu 54cd736a4e Merge remote-tracking branch 'origin/master' into worktree/web-file-session-references 2026-08-19 15:21:17 +08:00
creatixchu 09b3dfa06d Merge remote-tracking branch 'origin/master' into worktree/abort-partial-finalize 2026-08-19 15:09:59 +08:00
creatixchu ff88d3dd00 Merge remote-tracking branch 'origin/master' into worktree/abort-partial-finalize 2026-08-19 14:55:32 +08:00
creatixchu e7a668906a Merge remote-tracking branch 'origin/master' into worktree/web-file-session-references
# Conflicts:
#	packages/client/connection/src/client/fixture.ts
#	packages/client/ui-conversation/src/client/input/facade.ts
#	packages/client/ui-conversation/src/client/input/hub.ts
#	packages/client/ui-conversation/tests/input-matrix.client.spec.tsx
#	packages/client/ui-conversation/tests/input-scenarios.client.spec.tsx
#	packages/client/ui-conversation/tests/skeleton.client.spec.tsx
2026-08-19 14:49:57 +08:00
pku-xht fa2ce12162 review fix: avoid bigint cache-hit formatting 2026-08-19 14:41:23 +08:00
pku-xht a4da0f40d5 feat(web): preserve near-full cache-hit precision 2026-08-19 14:41:23 +08:00
yx.zhang f6a90db467 review: address ds-review-bot findings on rail-search fix
- Translate the zh Agent Note's title and section headings and align
  its rail terminology with the established zh READMEs (轨道).
- Disambiguate 'the browser's listener' to WorkspaceBrowser's in the
  English note.
- Record the in-flight outside-click exception in the ui-workspace
  README (both languages) and the owning workspace-sidebar feature
  note, cross-linked to the bug-fix note.
- Add an apps/web real-browser scenario pinning the document-level
  bubble the jsdom test cannot replay: one real rail click must leave
  the search expanded and focused, and a genuine outside click must
  dismiss it afterwards. Negative-controlled against the unguarded
  code (fails in 12s on the aria-expanded assertion).
- Register the new e2e file in the host tsconfig face and the client
  face's exclude list.
2026-08-19 14:34:17 +08:00
yx.zhang 106b117e18 fix(ui-workspace): keep rail-opened search expanded when the opening click reaches document
The rail search click flips the shell wide and mounts the outside-click
dismissal listener during its own dispatch; the click then bubbles to
document with the unmounted rail button as its target — outside
searchRoot — so the listener dismissed the search it just opened. The
listener now stays off while the rail gesture is in flight
(searchOnExpand), which already ends exactly when focus lands.

The regression test replays the document-level bubbling order that
fireEvent on the button alone does not exercise.
2026-08-19 14:34:16 +08:00
Yichen Jiang 458a742cfe Merge remote-tracking branch 'origin/master' into worktree/deepseek-native-multimodal 2026-08-19 14:22:22 +08:00
07akioni 7d2982de68 Merge pull request #2695 from deepseek-harness/fix/open-file-fail
feat(web): Implement file-open failure handling in chat view
2026-08-19 14:16:37 +08:00
07akioni 2aaf760fa2 Merge pull request #2709 from deepseek-harness/feat/home-path-abbr
feat(ui-tool): integrate connection handling for POSIX home path abbreviation
2026-08-19 14:16:08 +08:00
Chinesezjc 6079181d1a Merge pull request #2673 from deepseek-harness/fix/web-feedback-note-popover
fix(feedback): float the note editor in a popover
2026-08-19 13:59:30 +08:00
Chinesezjc e2ee5c0f5d feat(feedback): float the note editor in a popover, not inline in the actions row
The message-feedback note editor previously expanded inline inside the
assistant message's shared IconActions row, overflowing the row at every
viewport and pushing the branch action and the clock out of the column.
Rework it into a portable popover: the note editor is a fixed-position panel
portaled to document.body and anchored to the note trigger, so the row keeps
its single 28px line whether the editor is open or not and the panel escapes
the column's overflow clip.

The like/dislike buttons and the note trigger stay in the row unchanged; the
trigger toggles the popover (textarea + Save/Cancel + note-save failure) which
auto-focuses the input and closes on Escape or an outside click, returning
focus to the trigger. Rating/list-load failures surface in the row, note-save
failures inside the popover. Reuse the Menu portal surface tokens and add
@types/react-dom so the createPortal usage typechecks.

Layout e2e sweeps six viewports and pins that opening the editor leaves the
row's overflow, line count, and out-of-column items unchanged, and that the
panel is outside the column, within the viewport, and anchored to its trigger.
Unit tests cover the popover's portal-to-body, toggle, Escape/outside-click
dismissal, and unmount early-returns.
2026-08-19 13:49:30 +08:00
Yichen Jiang cd7e45ced6 Merge remote-tracking branch 'origin/master' into worktree/deepseek-native-multimodal 2026-08-19 12:35:05 +08:00
07akioni 11ed98de55 Merge remote-tracking branch 'origin/master' into fix/open-file-fail 2026-08-19 12:27:34 +08:00
07akioni 149d4ba01c Merge remote-tracking branch 'origin/master' into feat/home-path-abbr 2026-08-19 12:24:40 +08:00
Yichen Jiang 7078918b30 feat(llm-deepseek): support multimodal requests 2026-08-19 11:39:52 +08:00
creatixchu fcaa0efec5 Merge remote-tracking branch 'origin/master' into worktree/command-attachment-envelope 2026-08-19 11:11:15 +08:00
creatixchu c91672a44a Merge remote-tracking branch 'origin/master' into worktree/abort-partial-finalize 2026-08-19 11:06:59 +08:00
Yichen Jiang 67a7c79004 Merge remote-tracking branch 'origin/master' into worktree/web-file-session-references
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	packages/context/agent-instructions/tests/agent-instructions.spec.ts
2026-08-19 11:01:27 +08:00