Commit graph

124 commits

Author SHA1 Message Date
imccyu
cf126d8699 Merge remote-tracking branch 'origin/merge/projcache-v6-compat-into-master' into release/dsh-0.1.2-alpha.5-version-to-master 2026-09-02 17:25:23 +08:00
imccyu
db6bdc3576 release(dsh): 0.1.2-alpha.5 2026-09-02 15:48:33 +08:00
Chinesezjc
3648331b11 Merge remote-tracking branch 'origin/master' into feat/toolcard-image-result
# Conflicts:
#	packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx
#	packages/client/ui-chat/src/client/chat/ChatView.tsx
#	packages/extensions/cordis-client-runner/src/client/slot-catalog.ts
2026-09-02 12:02:25 +08:00
imccyu
a9e185f205 release(dsh): 0.1.2-alpha.4 2026-09-01 23:19:57 +08:00
imccyu
e32437d18b perf(chat): throttle scroll geometry sampling 2026-09-01 23:06:52 +08:00
imccyu
0e90d47d19 perf(chat): skip stable node list mapping 2026-09-01 22:29:46 +08:00
imccyu
577f0cf7d9 refactor(client): bind keyed chat sources in renderer 2026-09-01 22:22:25 +08:00
imccyu
b8a19413e9 fix(client): satisfy strict observable contracts 2026-09-01 22:01:18 +08:00
imccyu
de07b4c05b chore(ui-chat): document local keyed sources 2026-09-01 21:46:08 +08:00
imccyu
ebe9f50b44 perf(ui-chat): contain collapsed reasoning layout 2026-09-01 21:09:48 +08:00
imccyu
aad1ce0c68 perf(ui-chat): retain the stats resize observer 2026-09-01 21:09:48 +08:00
imccyu
f808112ec8 perf(ui-chat): derive user action reveal in CSS 2026-09-01 21:09:48 +08:00
imccyu
56684331c2 test(ui-chat): compare keyed snapshot values 2026-09-01 21:09:48 +08:00
imccyu
56a4d51d2c perf(ui-chat): scope turn process updates 2026-09-01 21:09:47 +08:00
imccyu
a731536ecc perf: ChatNodeSeat use seperated source 2026-09-01 21:09:47 +08:00
imccyu
81431381d6 perf(conversation): reuse unchanged location projections 2026-09-01 21:09:47 +08:00
imccyu
203e2440ac perf(ui-chat): move reasoning tail alignment to CSS 2026-09-01 21:09:47 +08:00
Yichen Jiang
3efd4b51e0 Merge pull request #3415 from deepseek-harness/worktree/3414-turn-rail-preview-layer
fix(web): keep turn previews above code banners
2026-09-01 21:05:36 +08:00
Tianyi Cui
27bf1039db refactor(session)!: distinguish event seqs from log offsets 2026-09-01 20:36:00 +08:00
Yichen Jiang
515eca7dc7 fix(web): keep turn previews above code banners 2026-09-01 20:21:11 +08:00
yx.zhang
7020c7e122 feat(web): superellipse corners and hairline elevation strokes
Apply global visual polish across the web client: corner-shape:
superellipse(1.5) with corner-shape: round pairing for full circles,
elevation tokens that draw 0.5px stroke outlines inside box-shadow for
floating surfaces, 0.5px hairline borders and divider lines for
neutral-token strokes, and tuned stroke contrast plus larger radii for
menus, settings panels, and cards. Stylesheet-scan specs in ui-theme
reject unpaired circles, border+shadow mixes, and 1px neutral hairlines
repo-wide.

Closes #3287
2026-09-01 18:25:20 +08:00
Chinesezjc
a23c3dd64e Merge branch 'origin/master' into feat/toolcard-image-result 2026-09-01 14:45:24 +08:00
Dudu-0223
4093ce465b Merge remote-tracking branch 'origin/master' into feat/3220-steer-service 2026-09-01 13:46:35 +08:00
Turtle
d68ff7e66f Merge remote-tracking branch 'origin/master' into turtle/omit-unneeded-invariants
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	packages/session/session-projection/src/invariant.ts
#	tsconfig.base.json
2026-09-01 11:18:11 +08:00
imccyu
14bab4422b release(dsh): 0.1.2-alpha.3 2026-08-31 23:39:37 +08:00
Yichen Jiang
e71db15d1a chore(release): align session-turn-outline with root 0.1.2-alpha.2, mark mirrored preview clone
The dsh 0.1.2-alpha.2 release bumped every workspace after this branch
forked, so the new package failed the workspace version constraint in the
merge tree. The bounded preview() also grew identical enough to its
deliberate host/client mirror to trip clone detection; the client copy now
carries a jscpd ignore region naming the wire-boundary rationale.
2026-08-31 19:46:55 +08:00
Yichen Jiang
b7053eba79 refactor(session-turn-outline): bound oversized preview blocks, degrade malformed previews
preview() now slices a single text block to limit * 2 before joining and
normalizing, so one multi-megabyte block no longer pays a full-string pass;
the host projection and the client turn-navigation helper stay mirrored.
outlineEntry keeps dropping entries with damaged turn/seq (marks cannot
exist or jump without them) but degrades malformed prompt/response
previews to empty strings so the turn stays navigable.
2026-08-31 19:46:55 +08:00
Yichen Jiang
39b90961c7 fix(ui-chat): hold jumps while a plain pull owns the pager
A jump clicked while the Load-earlier pull was in flight fell through the
settle effect's nearest-turn fallback and landed on the wrong row. The
effect now keeps the pending jump (busy pulse stays) while loadingOlder is
true and a retry tick re-issues loadThrough when the pull settles.

Also repins the long-interactions e2e rail block to the outline-rail
semantics (fixed mark pitch, load-and-jump labels) and covers the
loadThrough forwarding paths in apply-inject and the client-runtime stub.
2026-08-31 19:46:55 +08:00
Yichen Jiang
7c58a95ebb test(session-turn-outline): cover fold edges and deflake settle assertion
Edge-branch coverage for the preview reading bound, repeated and empty
drafts, draftless turn ends, orphan-draft clearing, and same-response
recommits (the CI per-file gate exercises them); the jump-settle spec
now asserts only the busy lifecycle after settlement — jsdom's zero
geometry made the rAF active-turn resync timing-dependent under
coverage instrumentation, and the landing position contract lives in
the browser e2e.
2026-08-31 19:46:55 +08:00
Yichen Jiang
0e63841189 feat(session-turn-outline): settled-response previews at card budgets
Outline entries gain the turn's final text-bearing assistant preview:
each assistant message overwrites a state draft and turn/end commits
the survivor, matching the loaded rail's findLast semantic; the bare-
array wire keeps its identity across draft changes, so pushes stay at
three per turn. Preview budgets shrink to the rail card's clamps — one
50-character prompt line, up to three 120-character response lines,
ellipsis on clip — on loaded and unloaded turns alike (stateVersion 2
discards v1 cache rows).
2026-08-31 19:46:55 +08:00
Yichen Jiang
62f707bb1d fix(ui-chat): release bottom ownership when a jump starts
Clicking an unloaded rail mark from the pinned tail raced the pinned
scroll snap: the first prepend's compensation fires a non-reader scroll
delivery, the snap called toBottom, and toBottom cancels a pending jump
— so the jump silently stayed at the tail while history loaded. The
click now drops atBottom itself (jumping into history is leaving the
live tail), pinned by a jsdom regression and re-verified live: a
118-turn session lands on turn 1 in ~250ms from click.
2026-08-31 19:46:54 +08:00
Yichen Jiang
422b603874 docs: turn outline rail contracts and agent note
READMEs record the rail's outline merge and the loadThrough paging
verb in both languages; the feature Agent Note owns the decision,
alternatives (sparse windows, minSeq wire bound, outline RPC, height
estimation), and coverage map. Regenerates the client/API catalogs the
widened faces feed.
2026-08-31 19:46:54 +08:00
Yichen Jiang
3a834fe6c9 feat(ui-chat): settle jump landings after paging completes
A mid-paging landing keeps the jump armed with the target row as its
paging anchor, so later chunks and the load-earlier button's unmount
cannot drift the landing; the loader's completion runs one final
correction unless the reader already scrolled off the target. Adds the
browser contract: full outline ladder, keyboard jump on an unloaded
mark, landing geometry, and rail fades.
2026-08-31 19:46:53 +08:00
Yichen Jiang
6af1ee49b1 feat(ui-chat): scrollable fixed-pitch turn rail
Marks keep a fixed 10px pitch instead of compressing into the frame:
overflow scrolls inside a hidden-scrollbar scroller with gradient fades
over each still-scrollable end, the preview compensates the rail scroll,
and the active mark keeps itself centred while the pointer is off the
rail. Pointer-to-mark mapping now works in ladder coordinates.
2026-08-31 19:46:53 +08:00
Yichen Jiang
b3064cca77 feat(ui-chat): full-session turn rail with load-and-jump
The rail now merges the turnOutline projection with loaded-window items
(view-layer only; loaded wins, outline fills mid-turn prompt previews),
renders unloaded turns as dimmer marks, and clicking one holds the
reader's place, pages history through the turn's seq, and lands on its
row after the commit — no height estimation. Settlement repages once
per head movement, then falls back to the nearest rendered turn.
2026-08-31 19:46:53 +08:00
07akioni
1dd3e60f50 fix(web): make streaming code fences incremental 2026-08-31 17:26:04 +08:00
Chinesezjc
5bb2c46453 Merge branch 'master' into feat/toolcard-image-result 2026-08-31 17:11:15 +08:00
Turtle
a7f5b6e638 Merge remote-tracking branch 'origin/master' into turtle/omit-unneeded-invariants 2026-08-31 17:01:06 +08:00
imccyu
d7abd0a01e fix(web): activate selected view for blank sessions
fix(web): activate selected views before blank gating
2026-08-31 15:45:26 +08:00
imccyu
4203317e18 perf(client): materialize conversation targets on demand 2026-08-31 15:44:23 +08:00
imccyu
b4527bedc7 fix(client): pin inbox claim semantics 2026-08-31 15:44:22 +08:00
imccyu
8478de9b0e perf(client): linearize inbox projection state 2026-08-31 15:44:22 +08:00
Turtle
b8e3b32fcf Merge master into codex/omit-unneeded-invariants 2026-08-31 14:38:55 +08:00
creatixchu
6516fbcde8 Merge origin/master into worktree/steer-followup-images 2026-08-31 10:37:39 +08:00
imccyu
3f1b46a5db release(dsh): 0.1.2-alpha.2 2026-08-30 21:19:29 +08:00
Dudu-0223
b91e7ce366 Unify adjacent Agent messaging 2026-08-30 14:14:46 +08:00
imccyu
b27c8fbc02 chore(deps): refresh package manifests 2026-08-30 02:29:53 +08:00
imccyu
9135a13a8b refactor(consumers): remove cross-package runtime relays 2026-08-30 02:29:52 +08:00
Chinesezjc
a4d4404708 feat(ui-tool): render read_image results as the image
A settled top-level `read_image` call printed its raw attachment object as
literal text in the tool card — `{"type":"image","attachment":{…}}` —
instead of the image, because no presentation metadata told a client card
how to present the reference and the tool-card layer had no image concept.

Host: `read_image` declares an `output.presentationMeta` persisting
`{ path }` only. The attachment reference deliberately lives in the
settled result content — the single record a `tools/post-execute`
replacement rewrites — not in `meta`; the id is opaque and
provider-owned, checked for existence only.

Client: `imageCardModel` derives the card from the call head, the meta
path, the result's own image block, and a shape-matched envelope. ToolRow
gains an `image` card slot; the `read_image` toolview declares the
Tool-owned `tool.call.images` slot as its child and dispatches the
gallery through it. ui-chat down-threads the session-authorized loader
(`ChatNodeOwnerProps.loadImage`), so the tool layer supplies only derived
references plus the loader and never imports an attachment
implementation; ui-attachment fills the slot with its message gallery
renderer. The card keeps the envelope text below the gallery for the
no-attachment-plugin deployment. An image-bearing tool registers a keyed
toolview; the generic fallback keeps its flattened text. `read_image`
joins the read variant with its own locale title key; both rows share
`read-family-row.tsx`.

Verification: `read-image.spec.ts` (metadata projection, envelope by
shape, reference narrowing, real-execution round trip, rejection
branches incl. non-digest ids), `image-card.client.spec.tsx` (derivation,
row render site dispatching the slot, keyed registration with the
child-slot declaration, empty-slot fallbacks, media-type enum), keyless
snapshots (`read-image-gif` added; read-image/-dimension/-reencode
updated to the `{path}` meta), five injected-defect negative controls,
and a demo GIF recorded from this PR's head through the official
image-capable model.
2026-08-29 17:41:05 +08:00
imccyu
a3207a758b chore: package.json update 2026-08-29 14:26:43 +08:00