Commit Graph
100 Commits
Author SHA1 Message Date
Turtle 5876567dfc Merge pull request #5915 from deepseek-harness/turtle/exp-badge-align-42f8ebeac170
fix(web): align and localize Auto review permission option
2026-10-09 16:50:08 +08:00
Turtle a1a43cbb4e test(web): restore access mode after narrow Auto check; clarify EXP docs 2026-10-09 16:07:04 +08:00
Turtle e7c4ef0426 fix(web): raise Auto review icon A by 0.4px 2026-10-09 16:03:26 +08:00
Turtle 29b89df1b8 feat(web): add Auto review shield-A permission icon 2026-10-09 15:40:16 +08:00
Turtle 84f6a99514 Merge pull request #5942 from deepseek-harness/turtle/plan-mode-reject-33e1a9fe3ad2
fix(plan-mode): end the turn when the user dismisses a plan review
2026-10-09 15:28:21 +08:00
Turtle 0155017b73 fix(plan-mode): exit plan mode only on approval in plan guidance
A dismissed review now returns a successful exit_plan_mode result, so
the plan policy must not treat any success as leaving plan mode. Also
update the user-facing description of a dismissed review.
2026-10-09 14:58:20 +08:00
Turtle 18a4bc4093 fix(plan-mode): end the turn when the user dismisses a plan review
Choosing "Request changes" on a plan review rejected the question, and
exit_plan_mode turned that into a failed tool result asking the model to
stop. The loop then spent one more model request only to have the model
wait. A dismissed review now returns { approved: false } and concludes the
turn, so the user's next message starts the following request.
2026-10-09 14:39:43 +08:00
Turtle 039fe73c55 Merge pull request #5917 from deepseek-harness/docs/error-handling-style
docs: define error handling responsibilities and failure guarantees
2026-10-09 13:28:43 +08:00
turtle1999 1875ec4ab8 docs: keep error handling guidance concise and clarify ownership 2026-10-09 13:09:59 +08:00
TurtleandYifffan e9292ba398 fix(web): show Auto review EXP only in menu options
Co-authored-by: Yifffan <[email protected]>
2026-10-09 12:23:02 +08:00
Turtle 35f1a46a01 test(web): refresh Auto review trigger goldens and docs 2026-10-09 12:05:56 +08:00
turtle1999 4c8d377a23 docs: define error handling responsibilities and failure guarantees 2026-10-09 11:51:51 +08:00
Turtle 18fd3d06c4 fix(web): align and localize experimental permission mode 2026-10-09 11:42:28 +08:00
Turtle 8af3b410f2 Merge pull request #5900 from deepseek-harness/fix/shell-activity-timeout-diagnostics
test(subprocess): name the observed activity in shell-activity timeouts
2026-10-08 20:57:04 +08:00
turtle1999 50496cc19e test(subprocess): address review on the activity timeout message
Use the package's own `SubprocessTerminalActivity['state']` instead of a derived
alias, label the samples as `state:revision` so a reader cannot mistake the
suffix for a count, name the summariser's bound as a group count, and state only
the two observables the prompt count supports.

Refs #5755
2026-10-08 20:46:37 +08:00
turtle1999 bce796c337 test(subprocess): name the observed activity in shell-activity timeouts
An activity poll that times out reports only "unknown" or "Matcher did not
succeed in time". The Linux standby has failed that way twice, at different
polls, and the log shows nothing about what `inspect()` read, which returns
`unknown` for several distinct conditions.

Every activity poll now records the state and revision it samples and counts the
prompts printed while it waits, so a timeout names both. Repeated samples
collapse and the printed list is bounded. Timeouts, intervals and expectations
are unchanged, and where the poll budget equals the test budget the test timer
can still preempt this message.

Refs #5755
2026-10-08 20:29:12 +08:00
Turtle fd78c948a5 Merge pull request #5551 from deepseek-harness/turtle/request-extension-fail-bc456a3d035d
fix(llm): keep request-extension failures from blocking model requests
2026-10-08 20:23:32 +08:00
Turtle bd097552fd Merge pull request #5868 from deepseek-harness/fix/snapshot-title-event-wait-diagnostics
test(ci): retain snapshot wait and coverage worker-exit diagnostics
2026-10-08 20:19:09 +08:00
TurtleandLegGasai 19102a4306 Credit review by @LegGasai
Co-authored-by: LegGasai <[email protected]>
2026-10-08 20:11:20 +08:00
turtle1999 e2766698df fix(coverage): keep attributing a worker exit that raced a teardown
An unexpected fork exit can close the worker's channel under a send, which
Vitest reports as a runner-level worker error instead of the clean exit. It
then tears the worker down before the ChildProcess exit event, and
DiagnosticForkWorker treated that teardown as an orderly shutdown: it cleared
the observer and marked the exit expected, so the coverage log lost the pid,
file, code and signal it exists to report.

A worker error observed before a stop now keeps the observer, and a stop
requested after that error no longer marks the exit as expected.

Vitest reports one such exit either as the clean exit path or as a
runner-level worker error, so the spec accepts both forms and compares the
record against whichever appeared.

Refs #5813
2026-10-08 19:59:17 +08:00
Turtle 2a4b025743 Merge pull request #5630 from deepseek-harness/turtle/plugin-market-index-format
docs(notes): propose plugin market index format
2026-10-08 19:48:16 +08:00
turtle1999 39821cdc67 Merge remote-tracking branch 'origin/master' into fix/snapshot-title-event-wait-diagnostics 2026-10-08 19:45:16 +08:00
turtle1999 6d48506ef1 docs(plugin-market): define optional metadata keywords 2026-10-08 16:25:58 +08:00
Turtle cdf2f4c4b6 Merge pull request #5839 from deepseek-harness/turtle/revert-preset-insert-80a9ec3a652f
revert(plugin): drop preset-scoped profile patches; ship optional tools as global Host rows
2026-10-08 15:36:24 +08:00
TurtleandTurtle 6827dd0b41 docs: align optional bundle and new session guidance
Co-authored-by: Turtle <[email protected]>
2026-10-08 15:12:00 +08:00
Turtle 67c2fc749b Merge pull request #5865 from deepseek-harness/turtle/bench-artifact-upload
ci(bench): publish the scaled benchmark report as an artifact
2026-10-08 14:21:01 +08:00
Turtleandtianyicui ac94051a22 Credit review by @tianyicui
Co-authored-by: tianyicui <[email protected]>
2026-10-08 12:27:45 +08:00
turtle1999 188880962d test(snapshot): retain title and event wait timeout diagnostics
waitForTitleAfterTurnEnd and waitForEventAfterTurnEnd now name the session,
expected record, and deadline when the deadline passes before the first log
harvest settles, and keep the vi.waitFor failure as cause. Previously they
surfaced Vitest's generic 'Timed out in waitFor!', which failed the title
diagnostic spec on the macOS Sandbox lane at master 090348e4.

The title diagnostic spec uses isolateDiagnosticTimeout like its siblings,
replacing the Windows-only 5s timeout.

Refs #5631
2026-10-08 11:58:06 +08:00
turtle1999 0e7e2ceb19 ci(bench): warn on a missing benchmark report and document the artifact
The upload warns instead of silently ignoring missing files, and the spec
pins the upload after the benchmark step. benchmarks/AGENTS.md and the
report Agent Note now name the artifact CI publishes.

Refs #5840
2026-10-08 11:55:08 +08:00
Turtle 47fa8e8b1a Merge pull request #5639 from deepseek-harness/turtle/agent-team-status-e1e8f04e4663
fix(workflow-run): keep background workflow runs running after their step closes
2026-10-08 11:33:35 +08:00
turtle1999 a646dabbe9 ci(bench): publish the scaled benchmark report as an artifact
The node-24-bench job uploads benchmarks/.dsh-report after the benchmark
step, including when a budget assertion fails, so the report the Vitest
globalSetup renders survives the runner. #5838 deferred this step because
the authoring token had no workflow scope.

Refs #5838
2026-10-08 11:32:17 +08:00
Turtle 4c93974d9b Merge pull request #5838 from deepseek-harness/turtle/benchmark-scaling-report-64158244ab21
test(bench): add scaled machine and memory-pressure benchmark report
2026-10-08 11:25:05 +08:00
Turtleandturtle1999 7facb1cf65 fix(llm): log repeated request-extension warnings once
Extension failures, unreadable package identities, a blocked session-log
upload, and degraded Messages replay recur on every request. Log the first
occurrence per field, route, module, or blocking event instead.

Co-authored-by: turtle1999 <[email protected]>
2026-10-08 11:24:00 +08:00
Turtle 0aed8de976 fix(llm): keep request-extension failures from blocking model requests
Request-extension fields are auxiliary. A contributor whose preparation
throws is now logged and omitted while the other fields are still sent,
and a post-2xx acceptance failure is logged without failing the request.
Package inventory is best effort: a named manifest without a version, or
a bare package whose manifest is missing or unreadable, reports version
"unknown" instead of failing preparation.
2026-10-08 11:10:56 +08:00
Turtle 3377602a4f fix(llm): name the contributor failure in request-extension errors
A failing request-extension contributor surfaced only
'DeepSeek request extension preparation failed'; the cause stayed on
LlmError.cause, which the turn failure record and retry notice drop.
Append the cause chain to preparation and acceptance messages.
2026-10-08 11:09:16 +08:00
Turtle d83cdfafd6 Merge pull request #5760 from deepseek-harness/turtle/image-viewer-windows-e0e1e6a26a6b
fix(client): keep the image lightbox clear of the Windows caption
2026-10-08 11:04:04 +08:00
Turtle 1c29d96067 test(bench): describe cases, measure storage share, and model core counts
Every recorded case states what it measures and which user scenario it
affects, shown on hover in the report. Endpoints whose workers report
process CPU time default to the measured non-CPU share and busy
parallelism; the Session corpus worker now reports CPU time per
endpoint. Machine profiles carry logical CPU counts, and the page
shows each default share with its source and can reset overrides.
2026-10-08 10:52:34 +08:00
Turtle 29f6cceb0d Merge pull request #5328 from deepseek-harness/turtle/configurable-fonts-13764c079ba3
feat(client): configure text, code, and terminal fonts independently
2026-10-08 10:50:43 +08:00
Turtle b4443d4a90 Merge pull request #5768 from deepseek-harness/turtle/button-hover-shape-f946572b0faa
fix(web): match Windows caption hover radius across sidebar states
2026-10-08 10:34:15 +08:00
Turtle 6a7549037c Merge pull request #5765 from deepseek-harness/turtle/task-panel-occlusion-042a27be126e
fix(ui-jobs): keep the background job list above the right sidebar
2026-10-08 10:26:54 +08:00
Turtle 849e9ebd8d feat(client): configure text, code, and terminal fonts and sizes independently
The General font-size row gains a More font settings disclosure that expands
a font field for each of text, code, and the sidebar terminal, plus code
(10-16 px) and terminal (10-20 px) size steppers. Font lists are normalized,
stored in the ui-theme namespace, embedded by the boot script, and placed
ahead of each role's built-in stack; the code size moves the code typography
tokens; the terminal applies font and size live and refits without replacing
the shell. ThemeRuntime adopts Host sections only after its own writes settle.

Refs #5217
2026-10-08 10:26:16 +08:00
Turtle 1bc11bdba8 Merge pull request #5783 from deepseek-harness/turtle/highlight-blocking-ccc7ca395ecb
fix(web): leave overlong source lines uncolored
2026-10-08 10:24:16 +08:00
turtle1999 5b00e30678 Merge remote-tracking branch 'origin/master' into fix/inspector-eventsource-abort 2026-10-08 10:22:22 +08:00
Turtle bb9b26cdc6 Merge pull request #5652 from deepseek-harness/turtle/trajectory-state-1125dc1155f8
fix(trajectory): report streaming requests and running compactions as pending
2026-10-08 10:20:27 +08:00
Turtle ddd15a1ffe Merge pull request #5841 from deepseek-harness/turtle/memory-pressure-bench-4bc6543c10da
test(bench): rerun memory-sensitive benchmarks under 4 GiB and 8 GiB caps
2026-10-08 10:13:55 +08:00
Turtle a8e9e9b546 fix(plugin): address review on the preset-patch revert
Let a title provider replace one that is still draining, so switching the
titles bundle during an in-flight request no longer leaves no provider.
Omit group container rows from bundle inventories, since they have no
plugin entry to switch. Drop the obsolete preset-target product-use case,
fix the Claude Code row id example, and refresh stale Agent Note text.
2026-10-07 21:27:38 +08:00
Turtle 59fd47e451 test(bench): reject swap-enabled cgroups and record the memory-limit decision 2026-10-07 21:20:08 +08:00
Turtle 51e2e5630f test(bench): rerun memory-sensitive benchmarks under 4 GiB and 8 GiB cgroup caps 2026-10-07 21:04:13 +08:00
Turtle 9baa8bc8fe test(bench): scale storage share per endpoint and record the report decision
Session restore and projection run after the file closes, so they use
no storage share; the page keeps one share per endpoint. Record the
repeat projection-list budget, drop the post-GC page heap from the
memory view, remove the unused profile group, and add the owning
Agent Note.
2026-10-07 20:58:13 +08:00
Turtle b173f3e2a2 revert(plugin): drop preset-scoped profile patches; ship optional tools as global Host rows
Remove the `{ preset, insert }` / `{ preset, id, ...override }` profile patch
operation added in #5773, together with the app-boot compiler and reload drain,
config-editor filtering, plugin-manager preset row inventory and retained-module
removal checks, the read-only preset rows on the Plugins page, and the
agent-preset-registry row identities that served them.

Session search, Ralph, persistent terminals, Codex, and Claude Code bundles now
insert ordinary Host rows whose tools register in the global tool layer, like the
earlier optional bundles. Every preset, including minimal, sees them, and toggling
a bundle updates live Agents without new composition generations.
2026-10-07 20:46:37 +08:00
Turtle 12c33f6d0c test(bench): add scaled machine and memory-pressure report
Record budgeted benchmark endpoints and peak memory, and render a
self-contained interactive report that rescales measured times to
reviewed laptop and cloud profiles by single-thread CPU rating and
default-disk latency, and compares peaks with 4 GB and 8 GB of
available memory.
2026-10-07 20:42:30 +08:00
Turtle 3e46f68151 docs(web): record the long-line cap's cost and grammar-state effect
Pair the Chinese README, pin the 1,000-unit boundary, and check that
streamed and settled highlighting agree after a skipped line.
2026-10-06 11:09:21 +08:00
Turtle a150f22c91 fix(web): leave overlong source lines uncolored
TextMate scanning cost grows superlinearly with line length, so a
generated line of tens of thousands of characters blocked the page for
seconds when the sidebar previewed the file. Lines of 1,000 or more
UTF-16 units now render as one plain run in every highlighted surface.
2026-10-06 10:53:31 +08:00
Turtle 97fe4720a1 fix(ui-jobs): keep keyboard order and modal layering for the portaled job list
Bridge Tab between the trigger and the portaled list, layer the list
below modal overlays, and wait for the sidebar animation in the e2e.
2026-10-06 00:00:47 +08:00
Turtle e127ed2d6c refactor(client): position the lightbox in a stage below the Windows caption 2026-10-05 23:55:51 +08:00
Turtle d7453dd878 fix(web): match Windows caption hover radius across sidebar states
The collapsed Windows caption toggle and New Session kept a 50% circle after
the unified radius standard moved compact icon buttons to --dsw-radius-sm, so
the toggle's hover fill changed shape when the sidebar collapsed.
2026-10-05 23:55:31 +08:00
Turtle 703340cce9 fix(ui-jobs): keep the background job list above the right sidebar
Portal the session-header job popover to the document body and place it
with useAnchoredPosition, so the clipping center column and the right
sidebar no longer cut off its right edge.
2026-10-05 23:32:22 +08:00
Turtle 407d7a1475 fix(client): keep the image lightbox clear of the Windows caption 2026-10-05 23:08:46 +08:00
turtle1999 70723f41c8 fix(inspector): key the retained fetch Request on the caller body only
The capture clone shares one source with the caller's body stream, so the
caller key alone keeps the Request reachable on every path, including when
capture has already stopped at its byte limit. Cover that path in the
regression test and document the process-wide --expose-gc flag.

Refs #5614
2026-10-05 17:36:53 +08:00
Turtle 7d89563970 Merge pull request #5554 from deepseek-harness/fix/deepseek-extension-preparation
fix(llm): keep plugin package metadata from blocking requests
2026-10-05 17:02:06 +08:00
turtle1999 d8c5187187 fix(inspector): keep observed fetch Requests reachable so caller aborts reach native fetch
Node's fetch forwards a caller's AbortSignal only while the Request it was
given is reachable. The fetch observer creates that Request locally, so after
garbage collection an abort after response headers no longer cancelled the
body: capture never finished, Network.loadingFinished was never sent, and the
connection stayed open.

Fixes #5614
2026-10-05 16:18:03 +08:00
Turtle 31ff3a73c0 fix(trajectory): report streaming Assistant records and running compactions as pending 2026-10-03 21:02:36 +08:00
turtle1999 5535f0bcf7 docs(notes): add an optional homepage to market index plugins 2026-10-03 12:02:13 +08:00
turtle1999 a042d53289 docs(notes): follow the registry plan and tighten market index wording 2026-10-03 12:02:13 +08:00
turtle1999 6ac8f8766c docs(notes): explain relative icon references in the market index 2026-10-03 12:02:13 +08:00
turtle1999 2c073b3e0f docs(notes): group market index versions per plugin and use engines.dsh 2026-10-03 12:02:13 +08:00
turtle1999 55261c310b docs(notes): propose plugin market index format 2026-10-03 12:02:13 +08:00
Turtle d3c2b3e642 fix(workflow-run): infer interruption only from crash or fork closers
Replace the persisted background marker with a client-only rule. A
foreground run writes run-end before its Tool Step ends and a background
run outlives that Step, so only a Turn closed after a crash or at a fork
boundary shows a run without run-end as interrupted.
2026-10-03 10:16:11 +08:00
Turtle 34aef8c140 docs(workflow): state forward-only background marker and lost-run limits 2026-10-03 02:32:09 +08:00
Turtle a4af361ed7 fix(workflow): keep background workflow runs running after their step closes
A background workflow run outlives the Tool Step that started it, so the
Web workflow node inferred interruption as soon as that Step closed and
showed live members as interrupted. Mark background runs on
tool-workflow/run-start and infer interruption only for foreground runs.

Refs #5638
2026-10-03 02:16:21 +08:00
Turtle 31fbe85ec5 Merge pull request #5626 from deepseek-harness/turtle/unrun-build-dep-bc6bf626ae0d
fix(build): reject Node processes without TypeScript type stripping
2026-10-02 13:40:47 +08:00
Turtle c71cd255ac test(scripts): expect the native config loader in build:bench 2026-10-02 13:03:29 +08:00
Turtle 500614c0d5 fix(build): pin tsdown to the native config loader
Root build scripts, the desktop bundle and the dev:web watcher pass the
native loader so tsdown never selects the undeclared unrun fallback. A spec
covers the build.ts rejection path.
2026-10-02 12:48:01 +08:00
Turtle f3013b2d8d fix(build): reject Node processes without TypeScript type stripping
Without process.features.typescript, tsdown falls back to the undeclared
unrun loader, which fails to import and, once installed, resolves
import.meta.url in packages/client/tsdown.client.ts to the entry config.

Refs #5622
2026-10-02 12:31:36 +08:00
Turtle c130868430 Merge pull request #5567 from deepseek-harness/turtle/port-auto-assign-fe24bf6ef1d1
fix(desktop): listen on an OS-assigned port by default
2026-10-02 12:28:03 +08:00
Turtle 186e630b4a Merge pull request #5612 from deepseek-harness/turtle/spinner-scroll-sync-9edd522c716b
fix(client): re-pin StateDot loaders whose animation restarts
2026-10-01 23:15:39 +08:00
Turtle 4b9d8ad6f7 fix(client): re-pin StateDot loaders whose animation restarts
Moving a loader's element (a keyed list reorder) or showing it again
after a display:none ancestor restarts its CSS animations, and the mount
ref does not run again, so the loader left the shared phase. The loader
now pins its animations to document time zero on every animationstart.
2026-10-01 22:40:13 +08:00
turtle1999 68ead9fced docs(ui-chat): state static plugin priority and Escape close 2026-10-01 19:50:18 +08:00
turtle1999 1f8cdc08a1 fix(ui-chat): document dock pill replacement order and outside-click close 2026-10-01 19:06:32 +08:00
turtle1999 f8c3c7efa0 docs: remove plugin inventory upgrade guide 2026-10-01 18:35:14 +08:00
turtle1999 f3c69681d0 fix(llm): report plugin names when versions are unavailable 2026-10-01 18:11:19 +08:00
Turtle e1c49269b2 Merge pull request #5517 from deepseek-harness/turtle/remove-invariants-ccf1396aaf61
refactor: remove runtime invariant plugins
2026-10-01 17:50:15 +08:00
turtle1999 2190082866 refactor(ui-chat): register composer stats pills as separate dock entries
Split the single 'stats' conversation.composer.dock entry into
'activity' (counts, speed, time dialog) and 'usage' (tokens, cache hit)
so another plugin can replace one pill by id instead of reimplementing
the whole row. The rendered pills are unchanged.
2026-10-01 17:47:35 +08:00
Turtle 819eb8078e Merge origin/master into turtle/remove-invariants-ccf1396aaf61 2026-10-01 16:33:09 +08:00
Turtle 1ff1d43192 Merge pull request #5561 from deepseek-harness/fix/packer-agent-presets-mock
test(webworker-packer): accept the inventory agentPresets read
2026-10-01 14:28:50 +08:00
Turtle 9c5fb6b0c5 Merge pull request #5550 from deepseek-harness/turtle/plugin-version-hint-66b6a2501f82
feat(plugin-manager): name the exact spec when pnpm installs an older version
2026-10-01 12:36:36 +08:00
turtle1999 6080e07ca3 chore: merge master into package inventory fix 2026-10-01 12:22:37 +08:00
Turtle 0bd1492940 fix(ui-plugin-manager): state the supply-chain policy, risk and remedy in the version notice 2026-10-01 12:19:01 +08:00
turtle1999 8e1dbdf88c fix(llm): keep package metadata failures from blocking requests 2026-10-01 12:11:31 +08:00
Turtle 06f39bc83b Merge pull request #5537 from deepseek-harness/perf/recent-trace-hotspot
perf(api): time-slice Session list work
2026-10-01 12:01:45 +08:00
Turtle ecd9bf9273 fix(desktop): listen on an OS-assigned port by default
The fixed 19387 listener fails when Windows (Hyper-V/WinNAT) reserves a dynamic
port range covering it, even though no process uses the port. Electron already
reads the bound port from the Host's ready message.
2026-09-30 21:04:32 +08:00
turtle1999 c09be4813d test(webworker-packer): avoid counting inventory service reads in comment 2026-09-30 20:28:12 +08:00
turtle1999 a1df190fd9 test(webworker-packer): accept the inventory agentPresets read
Refs #5560
2026-09-30 20:04:26 +08:00
turtle1999 28107071fe fix(llm): omit unversioned private plugins from DeepSeek inventory 2026-09-30 18:47:07 +08:00
Turtle 43c5f1e924 fix(plugin-manager): explain another installed version only for one-registry runs 2026-09-30 18:42:32 +08:00
Turtle 97bbbdfa13 Merge pull request #5489 from deepseek-harness/fix/windows-coverage-electron
fix(ci): stabilize Windows coverage and tooltip snapshots
2026-09-30 18:34:29 +08:00
Turtle a2dcede62a Merge pull request #5540 from deepseek-harness/turtle/paused-goal-copy-48ed636139ee
fix(ui-goal): label disarmed goals as 已暂停的目标
2026-09-30 18:26:19 +08:00
Turtle bab69fbec5 feat(plugin-manager): name the exact spec when pnpm installs an older version 2026-09-30 18:13:26 +08:00
Turtle c006c6c074 Merge pull request #5535 from deepseek-harness/fix/retired-schedule-bundle
fix: drop retired bundle selections and let the Plugins page remove orphans
2026-09-30 18:11:54 +08:00
Turtle 5572d0503f Merge pull request #5384 from deepseek-harness/docs/plugin-skill-display-checks
docs(skills): require plugin display metadata and icons
2026-09-30 18:10:42 +08:00