Commit graph

14826 commits

Author SHA1 Message Date
fz
0a0f9e59ff feat(base): expose web fetch by default 2026-09-01 15:18:18 +08:00
fz
aefbee95e2 test(acp): refresh adjacent messaging schema 2026-09-01 14:22:49 +08:00
fz
ab9dcd5a2a Merge remote-tracking branch 'origin/master' into feat/sdk-default-web-fetch 2026-09-01 14:17:15 +08:00
Dudu-0223
52af48f808 Merge pull request #3250 from deepseek-harness/feat/3220-steer-service
Unify adjacent Agent delivery on Steer
2026-09-01 14:14:38 +08:00
Dudu-0223
11719fd83c test(web): await goal composer settlement 2026-09-01 14:00:07 +08:00
Dudu-0223
d960d90a98 test(snapshot): refresh Python PTC prompt 2026-09-01 13:46:36 +08:00
Dudu-0223
bfdede9d9e test(subagent): adapt session reads after rebase 2026-09-01 13:46:36 +08:00
Dudu-0223
22b08a9b9b test(subagent): update parent id expectation 2026-09-01 13:46:36 +08:00
Dudu-0223
4093ce465b Merge remote-tracking branch 'origin/master' into feat/3220-steer-service 2026-09-01 13:46:35 +08:00
fz
1bd880c587 Merge remote-tracking branch 'origin/master' into feat/sdk-default-web-fetch
# Conflicts:
#	packages/bundle/headless/README.i18n.yaml
#	packages/bundle/headless/README.md
#	packages/bundle/headless/README.zh.md
2026-09-01 13:45:44 +08:00
Turtle
714bec1316 Merge pull request #3367 from deepseek-harness/omit-unneeded-invariants
cleanup: omit unneeded invariant companions
2026-09-01 12:59:03 +08:00
fz
036abf8c6c test(snapshots): refresh remaining headless web headers 2026-09-01 12:02:29 +08:00
Turtle
d7811225dc 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/code-runtime/code-runtime-python/README.md
#	packages/code-runtime/code-runtime-python/README.zh.md
#	packages/experimental/code-runtime-python/README.i18n.yaml
#	packages/experimental/code-runtime-python/package.json
#	packages/experimental/code-runtime-python/src/invariant.ts
#	packages/experimental/code-runtime-python/tsconfig.json
#	pnpm-lock.yaml
#	tsconfig.base.json
2026-09-01 11:54:10 +08:00
fz
aaf10753a1 test(snapshots): separate ACP web headers 2026-09-01 11:49:55 +08:00
Chinesezjc
9d15938073 Merge pull request #1148 from deepseek-harness/feat/code-runtime-python-backend
feat(code-runtime-python): add the CPython subprocess backend
2026-09-01 11:44:16 +08:00
fz
cf7b0bd5a4 feat(headless): expose web fetch by default 2026-09-01 11:40:10 +08:00
Chinesezjc
a0c0b55c8a Merge remote-tracking branch 'origin/master' into feat/code-runtime-python-backend
# Conflicts:
#	packages/experimental/code-runtime-python/package.json
2026-09-01 11:29:10 +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
fz
b5c61b613a Merge remote-tracking branch 'origin/master' into feat/sdk-default-web-fetch 2026-09-01 11:13:00 +08:00
_Kerman
5dd876025d Merge pull request #2907 from deepseek-harness/xtr/session-log-read-api
perf(session): separate indexed and snapshot log reads
2026-09-01 10:49:54 +08:00
imccyu
dd6322d604 Merge pull request #3387 from deepseek-harness/release/dsh-0.1.2-alpha.3
release: dsh@0.1.2-alpha.3
2026-08-31 23:53:17 +08:00
imccyu
14bab4422b release(dsh): 0.1.2-alpha.3 2026-08-31 23:39:37 +08:00
imccyu
8b4b815e7e Merge pull request #3384 from deepseek-harness/worktree-connerr
fix(connection): avoid disconnecting during host stalls
2026-08-31 22:43:12 +08:00
imccyu
8372c3e188 Merge pull request #3383 from deepseek-harness/worktree-shikiperf
perf(ui-primitives): defer offscreen syntax highlighting
2026-08-31 22:41:45 +08:00
imccyu
ddecdf6b33 test(web): wait for settled background job 2026-08-31 22:30:51 +08:00
imccyu
49bf26a794 fix(connection): tolerate stalled hosts 2026-08-31 22:17:39 +08:00
imccyu
07be260245 test(ui-primitives): cover lazy viewport highlighting 2026-08-31 22:11:39 +08:00
imccyu
faa61ada74 perf(ui-primitives): defer offscreen syntax highlighting 2026-08-31 21:58:22 +08:00
Chinesezjc
6ce131c4f4 Merge remote-tracking branch 'origin/master' into feat/code-runtime-python-backend 2026-08-31 21:41:18 +08:00
imccyu
94bbfb95e8 Merge pull request #3379 from deepseek-harness/schedule-catalog-left-alignment
fix(web): align Schedule catalog within viewport
2026-08-31 20:53:40 +08:00
_Kerman
ad02fa37b4 Merge remote-tracking branch 'github/master' into xtr/session-log-read-api 2026-08-31 20:50:19 +08:00
imccyu
76557f4899 Merge pull request #3328 from deepseek-harness/worktree/navbar-pagination-interaction-24d006
feat(web): navigate every session turn from the chat rail
2026-08-31 20:45:45 +08:00
imccyu
9ba9a35c72 test(session-projection): cover view transition matrix 2026-08-31 20:30:43 +08:00
fz
ca723d9273 feat(sdk): expose web fetch by default 2026-08-31 20:18:50 +08:00
imccyu
6f0daff1dd fix(session-projection): compare observed live views 2026-08-31 19:59:54 +08:00
Yichen Jiang
12bef3b577 perf(session-projection): memoize raw views by state identity
Review follow-up: the per-step gate recomputed view(previous) on every
changed apply — a property read for identity-stable views, but a fresh
throwaway object per change for computing views. The registry now keeps a
WeakMap from state object to raw view: the previous state's view was
cached when that state was current, so each distinct state's view computes
exactly once (gate and snapshot share the memo) and the quiet path
allocates nothing. Unlike the earlier lastView record, an entry is keyed
by the state itself — the view of that exact state by the pure-view
contract — so no stamping discipline exists to get wrong. Primitive
states bypass the WeakMap and compute directly.
2026-08-31 19:46:56 +08:00
Yichen Jiang
a2437db180 revert(session-projection): drop the viewKey token, keep the per-step raw-view gate
Review consensus: for the only declaring unit the token function was
literally the view function, so the extra wire member bought nothing —
default raw-view comparison produces the identical Object.is on
state.turns at the identical cost (one property read per side). The
per-step gate stays: it holds the no-stored-baseline property, and its
measured overhead (~ns per changed state) is four orders of magnitude
below the push path it guards.
2026-08-31 19:46:56 +08:00
Yichen Jiang
f2e4078d8c docs(session-projection): carry viewKey through the subsystem type fences 2026-08-31 19:46:56 +08:00
Yichen Jiang
9836fdbbd7 docs(session-projection): describe the change feed by its viewKey token 2026-08-31 19:46:56 +08:00
Yichen Jiang
acc23f6d9c feat(session-projection): unit-declared viewKey change token
Review follow-up (imccyu): comparing view(previous) recomputes the view on
every quiet change. The wire block now takes an optional viewKey(state)
declaring the cheap comparison token; the drive compares tokens across the
previous and next states and calls view only for an actual push. Default
stays the raw view output. turnOutline declares viewKey: state => state.turns,
making the identity-stable-turns convention an explicit contract; the
registration erasure forwards viewKey (dropping it silently reverted the
gate to the fallback, caught by the new view-call-counting test).
2026-08-31 19:46:55 +08:00
Yichen Jiang
9069a8b6f8 refactor(session-projection): compare per-step views instead of storing a dedup baseline
Review suggestion (imccyu): the drive holds both the previous and next
state, so the identity gate can compute view(previous) and view(next) in
the driving step and compare them directly. The stored lastView cell field
and its stamp-on-every-change rule are deleted; with no dedup memory,
nothing can go stale across listener generations by construction, and a
rebuilt cell no longer pushes an unchanged view on its first live event.
Costs one extra pure view() call per changed state.
2026-08-31 19:46:55 +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
8322f804cb fix(session-projection): advance the view dedup baseline on every change
The change feed stamped lastView only when a listener was subscribed, so a
value change during a listener-free window (HMR swap) froze the baseline
and a later transition back to the old value was silently deduplicated.
The baseline now advances on every changed state, heard or not; broadcast
still only happens with listeners. Docs, catalog, and the feature note
follow the corrected semantics.
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
db5417ff6f fix(session-controller): keep refused jumps from parking a stale target
loadThrough now assigns its low-water target only when it owns the loop
(retargeting stays inside the running-jump branch): a call refused while
a plain load-earlier pull holds the pager no longer leaves jumpTargetSeq
behind to drag a later jump all the way to the head. The loop also
carries the doOpen stale-pass guard so a mid-flight resync stops it
instead of paging the new stream generation toward the old target.
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
ceadd90e71 feat(session-projection): identity-gated change feed
The feed previously fired on every changed state reference of a
client-visible unit; it now also compares the raw view output against
the last delivered one and stays quiet when Object.is-identical, so a
unit can buffer working fields in state behind an identity-stable
projection. Units whose views build fresh objects per call are
unaffected.
2026-08-31 19:46:54 +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