Commit Graph
18711 Commits
Author SHA1 Message Date
Yichen Jiang fb2c4b9e69 Merge pull request #3978 from deepseek-harness/worktree/release-dsh-0.1.5-rc.2
release(dsh): 0.1.5-rc.2
dsh-v0.1.5-rc.2
2026-09-10 21:50:19 +08:00
Yichen Jiang a305303422 release(dsh): 0.1.5-rc.2 2026-09-10 21:38:20 +08:00
Dudu-0223 a17f0733b1 test(workspace): stabilize sidebar captures and update blank placement 2026-09-10 21:34:45 +08:00
Dudu-0223 4857614be0 fix(workspace): pause current ordering in manual mode 2026-09-10 21:25:09 +08:00
Yichen Jiang 3bfcebe15e Merge master into worktree/release-0.1.5-sync-master 2026-09-10 21:23:11 +08:00
Yichen Jiang 2107e4697e Merge pull request #3973 from deepseek-harness/worktree/release-0.1.5-backport-feedback-deliverables
feat(web): backport feedback and file refinements to 0.1.5
2026-09-10 21:09:45 +08:00
Yifffan 879949e1c9 Merge branch 'master' into refine/connecting-ui 2026-09-10 14:55:03 +02:00
yixiangihsiangandLegGasai 060323d8e2 feat(web): backport feedback and file refinements to 0.1.5
Backport the selected changes from PR #3928 and PR #3902 onto dsh-v0.1.5-rc.1, retaining baseline session recordings and excluding newer master commits.

Refs #3927
Refs #3903

Co-authored-by: LegGasai <[email protected]>
2026-09-10 20:51:46 +08:00
ZiyaZhang 884485e7e6 test(python): restore concat through its spy 2026-09-10 05:40:50 -07:00
ZiyaZhang 7bce0c26f5 test(python): make stray fragment coverage deterministic 2026-09-10 05:35:32 -07:00
Yif 11ca8020cd fix(sidebar): keep one reconnect label and confirm recovery from visibility
ConnectionController deduplicates repeated connecting states across backoff
attempts, so the shell cannot tell manual retries from automatic ones; a
shell-held flag either flipped the label mid-hold or stuck across later
attempts. Every attempt now reads the single connecting label, and the
two-second recovery confirmation starts when the recovered pill becomes
visible rather than at the state transition, so the 800ms hold never
shortens it.
2026-09-10 20:12:09 +08:00
ZiyaZhang 69db89f848 fix(web): shorten English question skip label 2026-09-10 05:06:14 -07:00
ZiyaZhang 2eed93628c fix(web): shorten Chinese question skip label 2026-09-10 05:00:38 -07:00
Yif b044e45438 test(web): pin the static connection pill in the lifecycle browser snapshot 2026-09-10 19:52:38 +08:00
lsdsjy 71b2cc80aa fix(headless): waive the deferred Session history read
Master's `deprecate-synchronous-session-event-reads` marks `Session.eventAt`
deprecated and rejects new production calls. `liveEvents` predates that decision
and still needs the ordered log to reconstruct the preset a session runs under,
so carry the repository's standard line-scoped waiver for deferred migration.
2026-09-10 19:32:54 +08:00
Yif 16e986548e test(sidebar): pin the refined connection indicator behavior and docs
Update the behavior tests for the static retry label, the 800ms minimum
connecting hold, manual-versus-automatic attempt naming, and the 150ms
fade-out unmount; restate the interaction in both packages' bilingual
READMEs and record the decision as an Agent Note.
2026-09-10 19:29:48 +08:00
lsdsjy 79bd986fa7 Merge remote-tracking branch 'origin/master' into HEAD 2026-09-10 19:16:53 +08:00
lsdsjy 145f20f712 Merge remote-tracking branch 'origin/master' into HEAD 2026-09-10 19:13:38 +08:00
lsdsjy 3be1ea10b9 refactor(headless): move the runner process hooks out of the package entry
Address the Code Entropy follow-up on d9c4f53758: the runner entry still
expanded its process-substitution object with a `readStdin` hook used only by
tests. Move that seam to `src/runner-internals.ts`, mirroring
`src/startup-internals.ts`, so neither entry grows package API for tests.
2026-09-10 19:13:05 +08:00
turtle1999 464e1cce49 fix(ci): canonicalize browser dependency scan roots 2026-09-10 19:01:00 +08:00
_Kerman b59d3605b7 fix(client): address compact tool details review 2026-09-10 18:29:12 +08:00
turtle1999 0963bdd7d3 test(python): control stray-output fragments for sealing coverage 2026-09-10 18:29:04 +08:00
turtle1999 39e6e6fb89 Retain awaited client cleanup after rebase 2026-09-10 18:21:19 +08:00
turtle1999 0e6505454e Align client boot import failure test with reverted Loader 2026-09-10 18:18:10 +08:00
turtle1999 ab4d22595b Merge master and await client plugin cleanup after removal 2026-09-10 18:18:10 +08:00
turtle1999 3b5daf10be test(ci): verify current master on PR runners 2026-09-10 18:16:47 +08:00
Turtle 060ae6f336 Merge pull request #3957 from deepseek-harness/fix/subprocess-linux-scope-empty-range
fix(ci): resolve Blacksmith scope teardown and hosted test failures
2026-09-10 18:11:48 +08:00
_Kerman 42b50bd377 Merge pull request #3828 from deepseek-harness/xtr/deprecate-session-event-readers
docs(session): deprecate synchronous event-history reads
2026-09-10 18:03:54 +08:00
Chinesezjc 1050091d82 Merge pull request #3926 from deepseek-harness/ci/blacksmith-hosted-image-fixes
test/ci: remove the host-paced assumptions the hosted coverage lanes hit
2026-09-10 18:01:54 +08:00
turtle1999 989b3d4390 Merge hosted-image test fixes for Blacksmith CI 2026-09-10 17:53:36 +08:00
07akioni 69005cb956 Merge pull request #3860 from deepseek-harness/fix/parallel-macos-notarization
perf(desktop): 并行 macOS 公证并记录上传加速说明
2026-09-10 17:52:40 +08:00
Chinesezjc 0377049465 ci: give the Linux coverage lane the hosted image's teardown budget
The managed-scope disposal cases in subprocess-local and bash-sandbox run past
the 5000ms default when this lane's four partitions, six workers per gate, and
sibling gates share one host. The same commit stays inside the budget on the
in-house pool: the hosted image exceeded it (run 34449848541) and the lane is
green with 90000 (run 34457655892). The Windows coverage lane already grants
the same budget for the same class of teardown.

(cherry picked from commit bf3468adf0947a51f09d4a1aaae2865f3e50a2f2)
2026-09-10 17:47:27 +08:00
Chinesezjc 114e8c9b09 test: drop two host-paced assumptions the hosted image exposes
The ACP plugin-config case drove a real dispose with 150ms graces. On the hosted
image the SIGKILL escalation landed while the managed scope could not take the
signal — systemctl failed the kill ("Failed to send signal SIGKILL to auxiliary
processes: Invalid argument") — so the run reported a teardown failure the
configuration never asked for. The case asserts that config graces reach the
real run, so the values only need to clear the host's scope handling. Its mock
refuses stdin EOF and SIGTERM by design, so the case waits out both graces and
carries its own budget for that fixed cost.

Both illegal-UTF-8 residual cases relied on a plain sched_yield leaving each
write as its own read chunk. A starved reader coalesces hundreds of bytes into
one chunk, which inflates the measured peak for correct accounting too: the
hosted image measured 2563 against the 2048 bound. Pace with a real sleep so
each byte is its own chunk everywhere, and keep each payload above the bound
(3200 bytes; 1100 CESU-8 sequences) so a raw-byte undercount still flushes past
it instead of only at EOF.

(cherry picked from commit 30e0c3ff0415befe3652a55611df8a18d82c18bb)
2026-09-10 17:47:27 +08:00
Chinesezjc c4c2d16308 test(subprocess): align the teardown race with the settlement contract
`disposal contains a spawn-failure rejection that races teardown` asserted one
winner of the race. A bootstrap that publishes its pre-exec failure rejects with
that failure, and a teardown that stops the bootstrap first settles as the
requested termination — the recorded failure only outranks the stop when it was
published before the stop landed. Assert the contract instead: a rejection
carries the failure, a stop carries SIGTERM, which only the Linux scope records
because the win32 job owner and the fallback launcher both reject the start.

The two terminal cases that drive a mocked PTY exit state why they pin
`internals.platform`: under the host's native scope the mocked exit races the
scope bootstrap and fails as `terminal scope exited before its bootstrap
consumed the launch request`.

(cherry picked from commit fee113eb9a5632555304858d2bf6355588a3aaf0)
2026-09-10 17:47:27 +08:00
Yif 626fa816a5 feat(sidebar): refine the connection indicator states and styling
The disconnected pill now names the retry action statically (refresh icon +
"连接异常,刷新重试") instead of swapping text on hover; connecting shows a
spinner, holds visible for at least 800ms, and distinguishes manual retry
(重新连接中) from automatic backoff (自动重连中); state changes fade over
150ms. Pill chrome tightened to 28px height with a 20%-alpha label border.
2026-09-10 17:45:56 +08:00
Turtle def3f88bf5 Merge pull request #3943 from deepseek-harness/fix/master-ci-corpus-css-pin
fix(ci): admit any `.css` refusal for the dockkit corpus exemption
2026-09-10 17:44:34 +08:00
creatixchu ffa536712a Merge remote-tracking branch 'origin/master' into worktree/issue-3929-v41-request-image
# Conflicts:
#	packages/attachment/attachment-local/README.i18n.yaml
#	packages/attachment/attachment-local/README.md
#	packages/attachment/attachment-local/README.zh.md
2026-09-10 17:41:17 +08:00
Turtle 3ece27847c Merge pull request #3925 from deepseek-harness/turtle/dsh-cache-path
feat(attachment-local): use shared cache for request images
2026-09-10 17:38:26 +08:00
Chinesezjc 87f32dc8ca docs(notes): record the hosted-image assumptions the coverage suite names
The failover leg runs this suite on pools this repository does not own, and the
coverage lanes failed there on host properties their cases never named: the
containment a mocked PTY exit raced, the grace a managed scope needs before it
can take a SIGKILL, reader coalescing in the illegal-UTF-8 residual cases, and
a Windows image that refuses the folder dialog class. Record what each case
pins now, what was rejected, and the runs that measured it, so the next pool
change starts from those host dependencies instead of re-diagnosing them.
2026-09-10 17:36:16 +08:00
Chinesezjc 45c10ed2ce ci: give the Linux coverage lane the hosted image's teardown budget
The managed-scope disposal cases in subprocess-local and bash-sandbox run past
the 5000ms default when this lane's four partitions, six workers per gate, and
sibling gates share one host. The same commit stays inside the budget on the
in-house pool: the hosted image exceeded it (run 34449848541) and the lane is
green with 90000 (run 34457655892). The Windows coverage lane already grants
the same budget for the same class of teardown.
2026-09-10 17:36:16 +08:00
Chinesezjc f45ca2d9ac test: drop two host-paced assumptions the hosted image exposes
The ACP plugin-config case drove a real dispose with 150ms graces. On the hosted
image the SIGKILL escalation landed while the managed scope could not take the
signal — systemctl failed the kill ("Failed to send signal SIGKILL to auxiliary
processes: Invalid argument") — so the run reported a teardown failure the
configuration never asked for. The case asserts that config graces reach the
real run, so the values only need to clear the host's scope handling. Its mock
refuses stdin EOF and SIGTERM by design, so the case waits out both graces and
carries its own budget for that fixed cost.

Both illegal-UTF-8 residual cases relied on a plain sched_yield leaving each
write as its own read chunk. A starved reader coalesces hundreds of bytes into
one chunk, which inflates the measured peak for correct accounting too: the
hosted image measured 2563 against the 2048 bound. Pace with a real sleep so
each byte is its own chunk everywhere, and keep each payload above the bound
(3200 bytes; 1100 CESU-8 sequences) so a raw-byte undercount still flushes past
it instead of only at EOF.
2026-09-10 17:36:15 +08:00
Chinesezjc df709f442c test(subprocess): align the teardown race with the settlement contract
`disposal contains a spawn-failure rejection that races teardown` asserted one
winner of the race. A bootstrap that publishes its pre-exec failure rejects with
that failure, and a teardown that stops the bootstrap first settles as the
requested termination — the recorded failure only outranks the stop when it was
published before the stop landed. Assert the contract instead: a rejection
carries the failure, a stop carries SIGTERM, which only the Linux scope records
because the win32 job owner and the fallback launcher both reject the start.

The two terminal cases that drive a mocked PTY exit state why they pin
`internals.platform`: under the host's native scope the mocked exit races the
scope bootstrap and fails as `terminal scope exited before its bootstrap
consumed the launch request`.
2026-09-10 17:36:14 +08:00
Chinesezjc ac5f851095 test(directory-picker): probe the folder dialog class instead of the platform
A Windows Server image can answer CoCreateInstance(CLSID_FileOpenDialog)
with CLASS_E_CLASSNOTAVAILABLE, so the win32 COM smoke has no dialog to
open and the POSIX rejection expectation is the only proof that image can
produce. Gate the pair on a PowerShell activation probe taken outside the
code under test, so a GUID or vtable regression in src still fails the
smoke instead of skipping it.
2026-09-10 17:36:13 +08:00
lsdsjy 40dc25fe1d Merge remote-tracking branch 'origin/master' into HEAD 2026-09-10 17:32:26 +08:00
lsdsjy 6d05765405 refactor(headless): keep the startup process seam out of the public entry
Address the Code Entropy finding on f67d722243: the `./startup` entry exported
`internals` only so tests could substitute process facts, which added avoidable
package API. Move the seam to `src/startup-internals.ts`, which no package
export names, and have the provider and its tests import it from there.
2026-09-10 17:29:15 +08:00
turtle1999 aaa02a3970 fix(subprocess): settle a Linux scope left active with no processes
Range observation waited for an active transient scope to leave `active`
before it would prove the managed range empty. systemd ends a scope only when
it observes the populated-to-empty transition, so a payload killed before the
manager placed it in the scope's cgroup leaves the unit active with an empty
cgroup forever. `waitForExit()` then polled a unit that could not change, and
`LocalSubprocessRuntime.disposeManagedProcesses()` awaited it without bound —
teardown hung for any command cancelled immediately after spawn.

Each state query now also reads the unit's process count. Once termination was
requested and the launcher has exited, a still-active unit reporting no
processes is the empty range: the launcher forked every process it will ever
fork, so nothing later joins that cgroup. The owner stops the leftover unit so
transient units cannot accumulate, and an unreported or `[not set]` count
stays unknown and keeps waiting.

The race needs a live user-systemd manager, so it stayed dormant wherever the
native scope path was unavailable and surfaced once CI routed lanes onto the
Blacksmith hosted image, whose runners accept that path. Ten repetitions of
`local.spec.ts > disposal kills still-running processes and awaits their exit`
in a Linux container with a user manager failed seven times before the change
and passed ten times after it.
2026-09-10 17:27:52 +08:00
Yichen Jiang 59c1ee7c82 test(web): retain historical Messages replay after provider consolidation 2026-09-10 17:27:32 +08:00
creatixchu 4b1408e1df Merge origin/master into worktree/3041-image-offload-log-design 2026-09-10 17:20:54 +08:00
Yichen Jiang 15dd4fa046 Merge remote-tracking branch 'origin/master' into worktree/llm-deepseek-messages 2026-09-10 17:20:22 +08:00
Yichen Jiang 6a137ea702 refactor(llm): unify DeepSeek protocol implementations 2026-09-10 17:19:51 +08:00