25848 Commits
Author SHA1 Message Date
winewill 5f1811c91c Merge pull request #7709 from deepseek-harness/fix/windows-cli-short-path
Fix Windows CLI startup through short paths
2026-11-03 13:07:23 +08:00
yudshj 3859913c68 feat(web): 网页搜索与获取设置页分开选择 Search 与 Fetch,Search 默认改为 DeepSeek Search API 2026-11-03 13:04:26 +08:00
Dudu-0223 7f9d01007f Merge pull request #7769 from deepseek-harness/fix/team-task-workflow-prompt
fix(team): restore pre-refactor shared-task guidance
2026-11-03 13:01:56 +08:00
Stevring 48b2f9adc0 fix(client): keep model menu anchored during page zoom 2026-11-03 12:57:46 +08:00
winewill 6a3c52c92b docs(desktop): record the updated archive download instructions 2026-11-03 12:55:07 +08:00
winewill 912e0383fb fix(desktop): preserve modification times in installer artifacts 2026-11-03 12:54:24 +08:00
winewill 5b6366f5bf Type the canonical CLI module import 2026-11-03 12:51:08 +08:00
winewill cbe275fe99 Keep embedded CLI imports on the carrier module tree 2026-11-03 12:51:08 +08:00
winewill 8632896e84 Resolve Windows CLI entry aliases before loading runtime modules 2026-11-03 12:51:08 +08:00
winewill d7ca2e0ac2 fix(desktop): keep configuration recovery dialog interactive 2026-11-03 12:50:36 +08:00
_Kerman 03e654e8a5 Merge remote-tracking branch 'github/master' into fix/ptc-run-code-call-limit
# Conflicts:
#	docs/tool-catalog.i18n.yaml
2026-11-03 12:46:41 +08:00
_Kerman 4f790c874d fix(ptc): address call allowance review feedback 2026-11-03 12:45:28 +08:00
Dudu-0223 2a7d2f38fb Merge branch 'master' into fix/team-task-workflow-prompt 2026-11-03 12:43:57 +08:00
imccyu b3f301e573 Revert "fix(settings): show saved API keys and preserve environment detection…" (#7775)
This reverts commit 9bb49604b63bb5d50e879bcf63c9f5cb2afbd737.
2026-11-03 12:35:13 +08:00
imccyu 06bf7ce024 Revert "fix(settings): show saved API keys and preserve environment detection…"
This reverts commit 9bb49604b63bb5d50e879bcf63c9f5cb2afbd737.
2026-11-03 12:33:44 +08:00
Magolor f07af538f8 fix(schedule): initialize stored task timing controls (#7704)
* fix(schedule): initialize stored task timing controls

* fix(schedule): preserve native editor timing on save

* fix(schedule): clarify validation and preserve calendar edits

* fix(schedule): clarify custom rule corrections
2026-11-03 12:30:08 +08:00
imccyu e4ac64c9c7 Merge pull request #7734 from deepseek-harness/worktree-sync-dsh-0.2.2-to-master
release(dsh): sync release/dsh-0.2.2 back to master
2026-11-03 12:28:59 +08:00
Dudu-0223 bed550f81e test(subagent): sync wait guidance across SDK and Web snapshots 2026-11-03 12:26:34 +08:00
_Kerman 21aa215092 fix(ptc): terminate programs that exhaust the tool call allowance 2026-11-03 12:19:55 +08:00
Dudu-0223 c3fda8ed51 docs(subagent): retain wait_agent input examples 2026-11-03 12:16:55 +08:00
imccyu a3f6f94c1e test(snapshot): refresh fixtures for the 10-query web_search default 2026-11-03 12:13:05 +08:00
Dudu-0223 cc673ec174 fix(team): identify the coordinator as the root agent 2026-11-03 12:12:37 +08:00
Dudu-0223 e180fce05a feat(team): enable new root Team mode through Cordis configuration 2026-11-03 12:09:30 +08:00
_Kerman 9ac3ef2ca7 fix(ptc): derive tool call allowance from runtime timeout 2026-11-03 12:06:58 +08:00
Dudu-0223 1f522605ed fix(subagent): clarify one-shot waits from code 2026-11-03 12:06:10 +08:00
imccyu aa4774e685 Merge master into worktree-sync-dsh-0.2.2-to-master 2026-11-03 12:05:47 +08:00
涂轶翔 012a7a2e4a Merge pull request #6958 from deepseek-harness/fix/6953-deepseek-deferred-tools
fix(llm): rebuild tool baselines after removals
2026-11-03 11:59:07 +08:00
Dudu-0223 f7c184ffd1 fix(team): restore the original shared-task policy wording 2026-11-03 11:58:27 +08:00
winewill 0535b85a1d fix(desktop): recover update settings under mandatory policy 2026-11-03 11:54:27 +08:00
Dudu-0223 48e21ac6d7 fix(team): guide agents to create and track shared tasks 2026-11-03 11:49:44 +08:00
_Kerman d3e3a2bce9 fix(ptc): cap nested tool calls per run_code invocation 2026-11-03 11:49:38 +08:00
imccyu ef5f28d0fb Merge master into worktree-sync-dsh-0.2.2-to-master 2026-11-03 11:47:40 +08:00
winewill eb5b32c9c9 fix(desktop): report and recover saved channel apply failures 2026-11-03 11:47:04 +08:00
Yichen Jiang c1ab3a24b0 refactor(web): name failed generation recovery as retry 2026-11-03 11:42:35 +08:00
Turtle 582c334472 Merge pull request #7022 from deepseek-harness/turtle/websearch-query-limit-96c308027005
feat(web): raise web_search defaults to 10 queries and 10 sources
2026-11-03 11:41:39 +08:00
winewill 224fe9a658 fix(desktop): distinguish committed and uncertain settings saves 2026-11-03 11:26:57 +08:00
Ziya 27fb833732 Merge pull request #7712 from deepseek-harness/fix/page-card-remove-keep
fix(creation-recommendations): 个性化页面卡片去掉“保留”,装好后只提供撤销和恢复
2026-11-02 19:18:45 -08:00
imccyu eb1713f856 fix(session-projection): keep released units in checkpoints (#7754)
* fix(session-projection): keep released units in checkpoints

Since the Cordis rc.11 teardown order unloads the Web layer before the
base layer, Session Controller and harness-dev-context release their
projection units before their live Sessions detach. The projection
cache is still alive at that point and wrote a checkpoint holding only
the units that were still registered, replacing the complete record.
A blank Session then lost sessionListMetadata and listed as an untitled
conversation after every graceful restart.

A released unit now stays in the registry as a predecessor: it leaves
event drives, snapshots, restores, and change notifications, while
checkpoint() keeps each Session's last cell of it without advancing it.
Registering the same key again replaces the predecessor and refolds
the log. The projection cache keeps replacing whole records.

* test(session-projection): assert frozen released units across unload tests

Update the remaining unload tests that still expected a released unit
to vanish from checkpoint(): user-approval, agent-loop inbox and scope
lifecycle, time-context, and the agent registry now assert that the
same Session keeps its pre-unload row, that a later event does not
advance it, and that a Session created after the unload has no row.
The token-meter and goal unload tests also append an event after the
unload.

Document that a retained handle read still advances a released cell
that checkpoint() serves, and that restore() folds only live units, so
its refreshed rows omit released units.

* docs(session-projection): sync the ProjectionHandle type-equiv block

* docs(session-projection): record frozen released units and their upgrade

Add the upgrade guide for checkpoint() keeping a released unit's last
row, update the registration-handles Agent Note with the frozen-cell
decision and the retained predecessor, list both consequences under the
registry README's known limitations, note in the projection cache README
that a stored row can be frozen at its unit's release, and say that
restoreFloor() ignores released predecessors.

Update the agent-loop resource-lifecycle unload test, which read
checkpoints through an alias, to the frozen-row semantics.

* docs(upgrade-guide): mark the released-checkpoint snippet ignore-check

* docs(session-projection): state the retained-handle path and narrow a rejected alternative

* docs(upgrade-guide): re-record the released-checkpoint guide pairing
2026-11-03 11:07:09 +08:00
ZiyaZhang 87f2531360 Merge remote-tracking branch 'origin/master' into fix/page-card-remove-keep 2026-11-02 19:00:32 -08:00
Yichen Jiang 2ba385e9c9 test(web): align continuation receipt accessibility snapshot 2026-11-03 10:54:04 +08:00
Yichen Jiang 3d47094702 test(web): edit continuation drafts through keyboard input 2026-11-03 10:53:03 +08:00
Yichen Jiang 9eee00fa7d fix(web): show continuation request receipts 2026-11-03 10:50:46 +08:00
Stevring dd8fb95670 Merge master into refactor/css-anchored-panels 2026-11-03 10:50:14 +08:00
imccyu 6e77ea0131 feat(web): boot past failed optional client plugins (#7733)
* feat(web): boot past failed optional client plugins

The Web client boot audit now follows Host startup strictness. An
inactive entry on the global required list (module system, Session
transport, renderer, application frame, Session view, and sidebar)
still rejects startup and the report marks the required entries.
Other inactive entries produce one console warning and the
application mounts without them. The boot page no longer draws a
failed entry before the audit decides.

* fix(web): audit boot entries whose creation rejects and name activation errors

ClientEntries.start() now logs a row whose Loader creation rejects, such
as a module that exports no plugin, and leaves it inactive for the boot
audit, as the Host Loader group does. The audit awaits only failed
fibers to report their recorded activation error. Notes, READMEs, and
the Web client subsystem page describe the browser boot audit; tests
cover invalid exports, carrier presentation of optional failures, and
required names absent from the boot graph.

* test(web): fail test carriers and e2e on inactive client entries

The product boot only warns about inactive entries outside its required
list, but tests must still surface every plugin that fails. TestClient
and createClientTest now require every roster entry to activate unless
a case passes allowInactiveEntries. The watchConsole tripwire, the
real-host smoke, and the assembled jsdom boot treat a web boot warning
as a failure with no opt-out.

Docs: the Web README names Session control, notes that an entry without
a fiber is reported as an import failure like the Host audit's "failed
to import", and the startup strictness note lists the browser tests.
2026-11-02 16:20:50 +00:00
gengruilin 9cd3fbec45 revert(webworker): drop the cross-spawn refusal from the preview worker
The refusal kept the MCP manager loading in the browser preview while
the worker had no `global` binding, which cross-spawn's isexe dependency
reads at evaluation. The worker now publishes `global`, so the real
package loads. A stdio MCP server still cannot start in the preview: it
now fails through the worker child_process instead of an explicit
refusal, and HTTP MCP servers are unaffected.
2026-11-02 23:31:27 +08:00
Dudu-0223 606729b5b5 test(web): keep the queue-actions throughput golden
Refreshing the Web lane rewrote this golden without the throughput suffix,
which no change in this branch affects.
2026-11-02 23:02:22 +08:00
Dudu-0223 a4c933ad1f fix(subagent): fail unmatched name paths and tighten name admission
Review round on the naming change.

`resolveName` now distinguishes an address from a Session id: a
slash-separated address never is one, so an unmatched path fails with
AGENT_NAME_NOT_FOUND instead of reaching member lookup as an unknown id,
while a single token keeps the Session-id fallback. Path resolution also
treats external and unknown children as leaves, so a name below an external
run reports the same clear failure instead of surfacing a session-query error
for an identity that owns no local Session.

Native V4 admission rejects a repeated sibling name in own catalog facts,
symmetrically with its duplicate-child check, so a log that would make name
lookup ambiguous fails before any member is resolved.

`SiblingNameReservations.release()` checks that it still owns the map entry,
so a stale or repeated release cannot drop a newer reservation for the same
creator.

`list_agents` explains corrupt, unsupported, and unavailable: they report that
the row's own descendants could not be read, and the row remains a member the
caller can message. The earlier wording restricted messaging to running or
inactive rows, which excluded addressable members.

`isAgentName` stays module-local; the package entry exports only
ROOT_AGENT_NAME, matching its current callers.

Package READMEs, the subsystem page, the Agent Note, and the generated API
catalogue follow; recorded-session, CLI, and Web expectations are refreshed.
2026-11-02 22:43:01 +08:00
Yichen Jiangandimccyu d721353f86 feat(forge): unify plugin entry for reviews and worktrees (#7721)
* feat(forge): unify the worktree plugin entry and add user previews

* docs(forge): show session-linked GitHub pull requests in preview

* refactor(forge): keep plugin unification out of profile loading

* docs(forge): document manual upgrade to the unified plugin entry

* fix(forge): localize preview descriptions and address review feedback

* test(web): refresh creation recommendation catalog for the forge description

---------

Co-authored-by: imccyu <276526105+imccyu@users.noreply.github.com>
2026-11-02 22:34:01 +08:00
63026c7a5c feat(client): 左侧栏纵向空间优化,工作区滚动吸顶优化 (#7337)
* feat(client): share sidebar scrolling and dock workspace header

* fix(client): keep shared sidebar scrolling vertical

* fix(client): match sticky workspace header to sidebar fill

* fix(client): stabilize transparent sticky sidebar and compact row layout

* refactor(ui-primitives): keep sticky section observer internal

* fix(ui-primitives): limit row animations to visible scrollports

* feat(ui-workspace): drive sticky clipping with scroll timelines

* refactor(ui-primitives): bound row animations by the window

* feat(client): hand off sidebar wheel scrolling to the workspace list

The workspace list scrolls inside its own one-viewport section below the toolbar instead of sliding under a clipped sticky toolbar. The sidebar viewport scrolls the navigation away first; ui-sidebar's scroll hand-off splits each wheel event between the viewport and the section scroller, which the occupant binds through the slot-level useSectionScroller hook supplied by hookContext.

* test(client): cover the sidebar scroll hand-off and align the list scrollbar

Test-owned sidebar roles declare the slot-level scroller inject and pass its hookContext. Unit tests cover the hand-off split, wheel filtering, and listener rebinding; the e2e scenario checks one wheel event crossing from the navigation into the list and back. The list area reaches 2px from the sidebar edge for its scrollbar while rows keep the 8px inset. The unused clip module, its tests, and the sticky clearance variable are removed; READMEs and the slot catalog describe the nested scrolling.

* refactor(ui-primitives): restore MenuGroup sticky observation

The section observer was extracted for a sticky workspace toolbar that nested scrolling no longer has, so MenuGroup is its only consumer again. MenuGroup and its tests return to the master implementation.

* fix(client): keep native sidebar scrolling away from the hand-off boundary

The hand-off splits a wheel gesture in JavaScript only when its first event must move the sidebar viewport or starts outside the section scroller, and then keeps that gesture, including momentum, until wheel events pause for 100ms. Gestures the section scroller can take alone stay native, an uncancelable native gesture that reaches the section top passes the rest to the viewport, and events another listener canceled are left alone. The section is at most one viewport tall, and exactly that tall while search is expanded, so a short list leaves the navigation in place. Stale absence assertions and unused viewport declarations are removed; the READMEs document portals and the data-sidebar markers.

---------

Co-authored-by: Yif <877193178@qq.com>
Co-authored-by: imccyu <276526105+imccyu@users.noreply.github.com>
2026-11-02 22:27:26 +08:00
Yif 52ba88132e Merge master and address shared menu ownership review 2026-11-02 22:05:54 +08:00