Commit Graph
19656 Commits
Author SHA1 Message Date
mektpoy 5b4be3cfe8 fix(client): align the icon button's ring with the shared ring colour
Master's newest agent-preset sheet carries both the new `.helpButton` and the
retained `.iconButton`, whose focus ring still declared the brand token
directly. The stylesheet corpus spec rejects that form, so it now reads
`--dsw-focus-ring-color` with the brand-token fallback.
2026-09-23 18:21:14 +08:00
mektpoy ef7f44662d Merge remote-tracking branch 'origin/master' into fix/focus-ring-brand-primary
ui-theme/README.md, README.zh.md and README.i18n.yaml conflicted again: master
extended the `design-platform.css` sentence with the `--dsw-alias-file-diff-*`
palette. Kept that sentence together with this branch's `focus.css` paragraphs
and the seven-sheet entry list, then re-recorded the pairing hashes.
2026-09-23 18:20:56 +08:00
imccyu 7eb9629e0a Merge pull request #5041 from deepseek-harness/fix-gateway-mem
fix(gateway): bound stream cancellation retention
2026-09-23 18:10:58 +08:00
Turtle 4aa207c5fe feat(preset): add plugin practices reference to creator skill (#5025)
* feat(preset): add creator-mode plugin practices skill

Creator mode mounts packages/preset/agent-preset/skills. The new
cordis-plugin-practices skill states Harness-specific principles and
concrete rules for plugins that survive upgrades and avoid polling or
rescanning session logs: waterfall delegation, restrict/guard over
assemble, agent.ctx ownership, no new session event types from profile
plugins, session projections, and slot-based UI.

* refactor(preset): fold plugin practices into cordis-plugin-development

A separate skill competed with cordis-plugin-development for the same
trigger. The practices now live in references/practices.md, read from
procedure step 2 before choosing an extension point.

* feat(preset): require Harness components and tokens for plugin pages

A creator-built management page served as an iframe with its own
stylesheet could not match the Harness design. The practices reference
now requires slot-rendered React pages built from ui-primitives, theme
tokens from Theme inspection, and light/dark checks in the real slot.

* feat(preset): make host UI consistency a principle and a verification step

Adds principle 6: the rendering surface decides whether a plugin can
match the Harness UI, so it is chosen before any view. Step 4 of
cordis-plugin-development now verifies primitives, token-only styles,
and light/dark rendering beside a comparable host page.

* feat(preset): prefer theme tokens over pre-stable ui-primitives

ui-primitives is a pre-stable platform module; creator plugins are plain
JS without type checks, and a throwing component blanks the slot entry.
The practices reference now treats tokens as the default way to match
the host, limits primitives to behavior that is costly to reproduce, and
tells the agent how to detect a slot entry crash after an upgrade.

* feat(preset): forbid runtime imports of Harness Client packages in plugins

Creator plugins must assume ui-primitives and other Client packages break
without notice. The practices reference now has plugins copy markup, CSS,
and behavior from primitives, or inspect the rendered host control, and
keep --dsw-alias-* tokens as the only shared styling dependency.

* fix(preset): correct plugin practices against runtime behavior

- agent.ctx registrations need a plugin-owned disposer too; plugin
  unload does not remove them.
- Timers start work with followup(); inject() does not wake the agent.
- inject() logs agent/inbox/spliced at call time; agent/request cannot
  change messages.
- Guards are synchronous; awaited decisions return ask from
  tools/pre-execute.
- Chat node renderers are keyed by kind; slot inject reinstalls on
  declaration return.

skills.spec now keeps whole-file cordis-plugin-development references
below the pruner threshold as the read tool renders them.
2026-09-23 18:06:52 +08:00
mektpoy 9fd52295fc fix(client): finish the ring-colour sweep and name the tooltip/ring split
Two focus treatments still named a colour of their own: the TurnNavigator
mark's tick filled with `state-business-primary` under a comment that already
claimed the brand colour, and the plugin inventory search input drew its focus
border in `state-business-primary` while the shadow beside it read
`--dsw-focus-ring-color`. Both now read the same ring colour as the rest.

`Tooltip` states why it takes `pointerModality()`'s wide answer while focus
rings read the narrower `data-input-modality` attribute the module publishes.
2026-09-23 17:58:06 +08:00
Xu Hanxiang c5dc0853d6 Merge pull request #4686 from deepseek-harness/fix/desktop-dev-runtime-target
fix(desktop): resolve the development runtime directory from the build target
2026-09-23 17:43:43 +08:00
imccyu 45f5cd34b0 fix(gateway): pass explicit undefined in retention test 2026-09-23 17:20:38 +08:00
Xu Hanxiang 62aef4c583 Merge branch 'master' into fix/desktop-dev-runtime-target 2026-09-23 17:19:03 +08:00
Ziya e68fb0bc8d Merge pull request #5022 from deepseek-harness/fix/subagent-zh-terminology
fix(i18n): 将 UI「子代理」改为「子智能体」
2026-09-23 17:08:26 +08:00
imccyu 4cfd292a7b fix(gateway): bound stream cancellation retention 2026-09-23 17:07:09 +08:00
ZiyaZhang dc0ae81905 Merge remote-tracking branch 'upstream/master' into fix/subagent-zh-terminology 2026-09-23 01:54:16 -07:00
mektpoy a8776afa87 Merge remote-tracking branch 'origin/master' into fix/desktop-dev-runtime-target 2026-09-23 16:43:00 +08:00
Yudong Han 219db5454a Merge pull request #5027 from deepseek-harness/fix/excel-preview-sheet-navigation
fix(web): separate spreadsheet tab navigation from zoom controls
2026-09-23 16:38:47 +08:00
ZiyaZhang 3675e91cf9 fix(i18n): update subagent labels added on master 2026-09-23 01:34:17 -07:00
Yudong Han 5e25475857 fix(office): use bundled LibreOffice Kit 0.1.0 CLI across deployments (#4902)
* chore(office): upgrade libreoffice kit to 0.0.1-2

* fix(office): guide bounded CLI rendering and preview reuse

* chore(office): consume published LibreOffice Kit 0.0.3

* test(office): mock the complete LibreOffice converter interface

* chore(office): upgrade LibreOffice Kit to 0.0.4

* fix(office): expose bundled LibreOffice Kit 0.1.0 CLI across deployments

* fix(office): inspect Excel visuals only for layout tasks

* fix(office): allow compatible LibreOffice Kit 0.1 updates

* fix(office): stop Excel QA on blank previews and run regressions in CI

* fix(office): end workbook visual QA after an empty preview
2026-09-23 08:32:15 +00:00
ZiyaZhang f4c6b012aa Merge remote-tracking branch 'upstream/master' into fix/subagent-zh-terminology 2026-09-23 01:32:15 -07:00
mektpoy fe4d18fda3 test(desktop): provide the required primary runtime directory in the welcome startup spec
`welcome-startup.spec.ts` imports the unpackaged main entry, which now
requires `DSH_DESKTOP_PRIMARY_RUNTIME_DIR`. Stub it beside the neighbouring
`DSH_DESKTOP_*` values so the suite reaches the welcome startup it covers.
2026-09-23 16:29:28 +08:00
imccyu e5e9b5b982 Merge pull request #4985 from deepseek-harness/feat/tool-call-preparing
feat(chat): show preparing tools during live generation
2026-09-23 16:24:46 +08:00
yudshj c920174964 fix(web): separate spreadsheet tab navigation from zoom controls 2026-09-23 16:13:21 +08:00
imccyu 3776169373 test(client): align wait agent row title expectation 2026-09-23 16:11:44 +08:00
imccyu 19675fd061 fix(client): align subagent coordination and wait labels 2026-09-23 16:11:44 +08:00
imccyu 536764c8b4 test(web): align snapshots with write activity labels 2026-09-23 16:11:44 +08:00
imccyu b66b602c72 fix(chat): address preparing lifecycle review feedback 2026-09-23 16:11:44 +08:00
imccyu 913aa2289b fix(chat): unify tool lifecycle titles and activity labels 2026-09-23 16:11:44 +08:00
imccyu 701026b5bf test(chat): bind the preparation start spy 2026-09-23 16:11:44 +08:00
imccyu 5840898e07 perf(tool): retain unchanged subcall branches 2026-09-23 16:11:44 +08:00
imccyu b2817d77fb perf(chat): batch preparing tool updates 2026-09-23 16:11:44 +08:00
imccyu a60d4df027 test(desktop): await ASAR fixture output completion 2026-09-23 16:11:44 +08:00
imccyu 833835d95c test(chat): retire unknown casts from tool row fixtures 2026-09-23 16:11:44 +08:00
imccyu 74511b3dcb test(chat): cover live preparation and durable history replay 2026-09-23 16:11:43 +08:00
imccyu d3086e6571 feat(chat): present tools in preparing, start, and result stages 2026-09-23 16:11:43 +08:00
imccyu d550f1c4af feat(conversation): initialize contexts from transient start matches 2026-09-23 16:11:43 +08:00
Turtle ccaa0dc11c fix(plugin-manager): bound pnpm runs so a silent child cannot hold the profile lock (#4982)
* fix(plugin-manager): bound pnpm runs so a silent child cannot hold the profile lock

A pnpm child that prints its completion line and then never exits holds the
profile write lock until the host is restarted, so every other session and host
on that profile fails after its own lock timeout (issue #4981). execa resolves
its promise only once the piped stdio has ended, so a run now completes on the
process's own exit and drains the pipes under a bound instead of awaiting their
end.

A service run whose captured output stays silent for idleTimeoutMs is
terminated, reports timedOut alongside its exit status, and is not retried on
the next registry; a run with inherited descriptors captures nothing and is
left unbounded for its operator.

* test(plugin-manager): type the mocked child and await the drain descendants

The inherited-descriptor fixture no longer needs its legacy `as unknown` cast,
because the mocked child is typed for the fields the operations read; the
retired baseline entry is pruned (verify-no-unknown-casts).

The drain specs wait for the killed descendant to exit before removing its
directory: Windows refuses to delete a directory a live process still holds.

* test(plugin-manager): stop the drain descendant deterministically

The descendant that holds the pipes now ends on a stop file the teardown
writes, and on its own after a minute, so the fixture leaves no process behind
when a kill cannot be delivered. Windows stops it through taskkill, and the
spec waits for the exit before removing the directory it ran in.

* test(plugin-manager): run the drain descendant from its own script file

Windows cannot carry a nested `-e` script through another spawn argument: the
descendant failed to start there, so the fixture asserted on a process that was
already gone. The descendant now runs from a script file the fixture writes.

* test(plugin-manager): cover the bounded drain everywhere and stage the real descendant on POSIX

Windows does not stage a descendant that keeps the inherited pipes open past
the direct child's exit, so the real-process cases run on POSIX only. The
mocked child now models execa's own completion rule — its promise settles only
once both pipes end — which covers the bounded drain on every platform and
still fails without the raw-exit race.

* test(plugin-manager): cover the drain failure path without a child process

An output consumer failure that the bounded drain cuts short is staged with the
mocked child as well, so the per-file coverage gate also holds where the
real-process cases are skipped.

* fix(plugin-manager): terminate the whole tree of a stalled run

A lifecycle script is a child of pnpm, so signalling pnpm alone left an
approved postinstall writing into the profile after the operation reported a
timeout and released the lock. A stalled run now stops its process group (or
Windows process tree) and waits for it to disappear before the caller restores
the files. The cut tail's close is told apart from a reading failure by where it
happened, so a failure from before the cut still surfaces.

* docs(plugin-manager): regenerate the config catalog after the rebase

The English catalog gains `idleTimeoutMs` from the regenerator, and the Chinese
counterpart carries the same interface line so the pair stays consistent.

* fix(plugin-manager): terminate a run's tree through execa, keeping exit cleanup

Spawning a service run with `detached` made execa skip the handler that kills
the child when the manager exits, so a crashed manager left the pnpm tree
running in the profile. `killDescendants` spawns the run as its own process
group while keeping that cleanup, and it addresses the tree on every kill path,
including cancellation. The module now only decides the probe target and waits
for quiescence.
2026-09-23 16:11:30 +08:00
Jiawei Song 19844ea9ad Merge pull request #5001 from deepseek-harness/fix/diff-review-colors
fix(web): 优化文件 diff Review 的浅色和深色配色
2026-09-23 16:09:33 +08:00
ZiyaZhang a2278b460c fix(i18n): limit subagent terminology changes to requested UI copy 2026-09-23 01:09:27 -07:00
mektpoy 80e4da0e3d fix(desktop): take the development project target as an explicit input
`prepareDevelopmentProject()` resolved the build target from the host
platform and architecture, so a Linux host threw `unsupported target
linux-x64` while writing the runtime descriptor. Pass the target in
instead: the launcher supplies the target it prepared, and isolated tests
supply a fixed supported target.

Extract `desktopTargetPlatform()` into desktop-build-paths.mjs so the
target-to-payload mapping has one home, and use it for the qualification
runner, which previously derived both its target directory and its
descriptor from the host architecture.

Correct the README limitation to name the module that now performs the
architecture check.
2026-09-23 16:03:17 +08:00
ZiyaZhang f132684c81 fix(i18n): scope subagent terminology to UI and refresh snapshots 2026-09-23 00:57:07 -07:00
Turtle 3d6d46b8a6 Merge pull request #4896 from deepseek-harness/fix/preset-ui-20260921
fix(ui-agent-preset): restore the read-only configuration viewer
2026-09-23 15:50:34 +08:00
Yudong Han dd004b4221 fix(web): simplify read-only spreadsheet preview controls (#5006)
* fix(web): simplify read-only spreadsheet preview controls

* fix(web): soften read-only spreadsheet freeze dividers

* fix(web): hide read-only spreadsheet freeze dividers

* fix(web): keep spreadsheet formula bar on one line
2026-09-23 07:46:13 +00:00
Xu Hanxiang 38596d5c70 Merge pull request #4876 from deepseek-harness/fix/windows-open-through-explorer
fix(native-command): open Windows paths through explorer.exe
2026-09-23 15:46:04 +08:00
ZiyaZhang 8833ef9f63 Merge upstream/master into fix/subagent-zh-terminology 2026-09-23 00:38:59 -07:00
ZiyaZhang 995caa05ed fix(i18n): translate subagent as 子智能体 in Chinese UI 2026-09-23 00:33:41 -07:00
Yifffan 10292baeff Merge pull request #4818 from deepseek-harness/ui/agent-team-header-panel-refine
feat(web): refine the Team header panel interactions and adaptive header
2026-09-23 15:26:24 +08:00
Turtle bbeef5f250 Merge pull request #5020 from deepseek-harness/copy/plugin-experimental-labels
fix(web): label beta features as experimental
2026-09-23 15:24:43 +08:00
turtle1999 d52424042c Merge remote-tracking branch 'origin/master' into fix/preset-ui-20260921 2026-09-23 15:21:17 +08:00
Dudu-0223 2ea753960c fix(web): align Team card elevation and preset header expectations 2026-09-23 15:14:29 +08:00
Dudu-0223 2b44a4b657 fix(web): preserve Team hover pinning and responsive task expansion 2026-09-23 15:14:29 +08:00
Dudu-0223 4face54ea7 test(web): align adjacent navigation snapshots with header UI 2026-09-23 15:14:29 +08:00
Dudu-0223 0b62921f37 test(web): align Team panel snapshot with pinned projection UI 2026-09-23 15:14:29 +08:00
Yif 86e3e0e448 feat(web): refine the Team header panel interactions and adaptive header
The Team panel opens on hover with the subagent-catalog grace timings, pins
on click, polls the one-shot view RPC every 20s while open (replacing the
toolbar refresh/close controls), and eagerly loads on mount so the trigger
keeps a stable two-person icon. The lead card navigates from teammate
conversations, the current conversation carries a Current chat tag (selected
ring only among multiple members), task descriptions clamp to two lines
behind an expand toggle, an empty board shows a one-line description, and a
lone member narrows the panel to one column.

The header title row becomes an inline-size container: the preset label
hides first, then the Team trigger collapses to its icon and switches to
click-only opening. The subagent catalog moves to the front of the actions
band so lineage stays beside the title crumbs, and its pinned-menu behavior
matches the Team panel. Tooltip gains a gap prop for tight anchors.
2026-09-23 15:14:29 +08:00