Commit Graph
16580 Commits
Author SHA1 Message Date
Yichen Jiang e4fd8a87ff Merge branch 'worktree/forge-pr-worktree-panel' into worktree/forge-session-list 2026-10-24 22:03:03 +08:00
Yichen Jiang 53d8a336f7 Merge commit 'bf1df01ae99' into worktree/forge-session-list
Brings the Session list branch up to date with the forge panel, whose
held messages now wait at inbox insertion.

- client-ui-forge keeps the Session list's remote-access import and the
  panel's messageOf; the agent-controller import is gone.
- The README and the forge panel Agent Note combine both sides: the
  forgeWorktree projection keeps its client view next to the inbox hold,
  and the Session list paragraphs stay.
- The config catalog is regenerated, and the README, forge subsystem
  page, and Agent Note pairings are recorded again.
2026-10-24 22:02:44 +08:00
Yichen Jiang bec0ac67ba Merge commit '45db0d28ce5' into worktree/forge-pr-worktree-panel 2026-10-24 21:45:54 +08:00
Yichen Jiang 3a52eb1993 Merge commit '861f5200ded' into worktree/forge-pr-worktree-panel
Master replaced the creation and plugin recommendation bundles with one
personalized recommendations bundle.

- The CLI manifest keeps master's bundle and the forge bundle.
- The plugin page expectation ranks the forge bundle before the held-back
  personalized recommendations bundle.
- The experimental README pairing is recorded again.
2026-10-24 21:45:41 +08:00
Yichen Jiang 91bd19ea98 Merge remote-tracking branch 'origin/worktree/composer-host-confirmed-echo' into worktree/forge-change-request-bindings 2026-10-24 21:42:23 +08:00
Yichen Jiang ba94a90da3 Merge commit '66a7e6cf07b' into worktree/forge-change-request-bindings
The experimental README pairing is recorded again for the merged
package rows.
2026-10-24 21:42:17 +08:00
Yichen Jiang b10ba84a0f Merge remote-tracking branch 'origin/master' into worktree/composer-host-confirmed-echo 2026-10-24 21:40:27 +08:00
Yichen Jiang 3764b60205 Merge commit '3dd445fe163' into worktree/composer-host-confirmed-echo
The session-controller README pairing is recorded again for the merged
sections.
2026-10-24 21:39:51 +08:00
imccyu b9266aefd6 Merge pull request #7094 from deepseek-harness/worktree/ci-schedule
ci: cut PR check latency across the slow lanes
2026-10-24 14:58:40 +08:00
Turtle d3da3b7640 fix(tool-ask-user): share skip guidance with the timed description
Refs #7134
2026-10-24 13:39:08 +08:00
Turtle 94ed636380 fix(tool-ask-user): tell the model a skipped question is answered
The blocking ask_user_question description did not explain that an answer
item with empty selected and no custom is a user skip, so models re-asked
the same question after the user clicked Skip.

Refs #7134
2026-10-24 13:23:53 +08:00
Turtle 2099andTurtle c262a09fd0 fix(ui-primitives): keep backslashes in Windows-path Markdown links- #7098
* fix(ui-primitives): keep backslashes in Windows-path Markdown destinations

CommonMark reads \. in a link destination as an escaped dot, so
[x](D:\repo\.github\a.md) opened D:\repo.github\a.md. Destinations
that look like Windows paths now keep their authored text.

Fixes #7095

* fix(ui-primitives): cover relative paths and character references

Treat a backslash destination without a URL scheme as a Windows path
when it has no slash or a backslash before a letter or digit, keep
every backslash literal there, and still decode character references.
Pin the behavior in the Markdown file-links Web snapshot.

* chore: list micromark-util-decode-string in third-party notices

---------

Co-authored-by: Turtle <[email protected]>
2026-10-23 23:40:50 +08:00
imccyu 3081c71bab Revert "fix(compaction): retry oversized summaries with smaller prefixes" 2026-10-23 22:59:05 +08:00
CreatixChu 17b13383af fix(plugins): 默认隐藏 CUA 并保留已启用用户的管理入口 (#7068)
* fix(plugins): temporarily hide the CUA bundle

* test(plugins): update expectations for hidden CUA

* fix(cua): preserve management for enabled bundles

* test(cua): cover default-hidden activation and retained details

* test(cua): verify installed state survives disabling

* test(cua): use the native provider display name
2026-10-23 22:54:03 +08:00
1tops e54b1326f8 Merge pull request #6993 from deepseek-harness/fix/summary-overflow-recovery
fix(compaction): retry oversized summaries with smaller prefixes
2026-10-23 21:16:37 +08:00
imccyu 22ddee3792 Merge pull request #7075 from deepseek-harness/worktree-chatgap
feat(chat): tighten the process-row gap to 4px
2026-10-23 19:48:59 +08:00
ZiyaandZiyaZhang 0741cf26a5 fix(plugin): give personalized recommendations its own icon (#7071)
Co-authored-by: ZiyaZhang <[email protected]>
2026-10-23 10:16:43 +00:00
Yudong Han 02bffe2f6b Merge pull request #7054 from deepseek-harness/turtle/tab-scroll-animation-3b47b9bdbb50
fix(dockkit): continue the tab strip from its last offset on selection changes
2026-10-23 18:09:55 +08:00
imccyu 83a0433bc7 Merge pull request #7003 from deepseek-harness/session-baseline-split-6998
feat(typert): extract Session baseline cleanup and default resource resolvers
2026-10-23 18:06:28 +08:00
imccyu 048845f841 fix(typert): harden default resource declarations and sync contracts 2026-10-23 17:39:35 +08:00
Turtle 0b8eabaf66 fix(dockkit): record the strip offset when the strip unmounts
Reading scrollLeft in the layout cleanup also captures positions that fire no
scroll event, such as a restore the browser clamps to the current offset.

Refs #7049
2026-10-23 16:27:34 +08:00
imccyu 3c4a79cc1b chore(session): remove stray blank lines 2026-10-23 16:22:07 +08:00
imccyu b2b3bf4568 fix(typert): reject ambiguous and multiple default resource identities 2026-10-23 16:13:38 +08:00
mektpoy 09ccbf785f chore(release): carry liveshare-protocol to the rc.3 family version 2026-10-23 16:13:34 +08:00
mektpoy c682dfaa3b refactor(liveshare-protocol): publish one entry point
The root entry already re-exports the wire codecs, the identity contract, the
viewer carrier, and the viewer-state vocabulary, so `./protocol` and
`./identity` were aliases of subsets that every consumer had to mirror in the
tsconfig path list. Keep `.` alone, keep the mock provider in its source module
for tests, and bundle only the root.
2026-10-23 16:13:34 +08:00
mektpoy c34276ec5a refactor(liveshare-protocol): publish the mock identity provider on its own entry
A package that promises authentication-adjacent types must not hand production
callers a provider that fabricates principals from its public `./identity`
entry. The mock keeps its own `./identity/mock` export, the console face drops
it, and the entrypoint tests pin both halves.
2026-10-23 16:13:34 +08:00
mektpoy 774e618112 fix(liveshare-protocol): forward only the page's own origin
Matching a forwarded route on the pathname alone let any origin whose URL
carried `/api/present.host` or `/open-in-app/apps` reach the owner instead of
the destination it named. Resolve the request against the page base and forward
it only when the target origin is the page's own; every other request reaches
the fetch this carrier replaced.
2026-10-23 16:13:34 +08:00
mektpoy 3f8f220ccd docs(experimental): align the liveshare ctx-key column
Every other row states the ctx key or an em dash; the protocol row said
'library and protocol — no ctx key' in both languages. It now uses the
same em dash as the other rows without a ctx key.
2026-10-23 16:13:34 +08:00
mektpoy fa579c64d4 docs(liveshare-protocol): point the viewer-state module at the package entry
The @module tag named a viewer-states subpath the package does not export.
The vocabulary is reached through the package root, so the tag now names
that entry.
2026-10-23 16:13:23 +08:00
mektpoy 81c3d89ab1 docs(liveshare-protocol): describe the current consumers and viewer entries
The summary claimed both packages import the package and named only
dsh-brand, while nothing imports it in this tree and cordis is a peer. It
now states the shared definitions and both dependencies without claiming
current importers. When to use it names the package root for the viewer
carrier and viewer-state vocabulary, and the Known Limitations anchor moves
ahead of its heading like the other sections.
2026-10-23 16:13:23 +08:00
mektpoy eab3bd4769 test(liveshare-protocol): round-trip the IPC fixtures with request tokens
The v1 host/worker fixtures carried no registrationToken or token, so a
legacy branch asserted them rejected and the optional-field case skipped
them. They now carry valid tokens and round-trip through their codecs. The
unknown access-mode fixture carries a token too, so its refusal is about
the mode rather than the missing identity. The unread required lists are
deleted; the optional lists now match what the parsers accept.
2026-10-23 16:13:23 +08:00
mektpoy 3a2a59a635 fix(liveshare-protocol): release a stream whose unreadable open reached the owner
A 200 open whose body was not a JSON object threw from readable() before the
abort listener was armed, so the page never sent stream-cancel and the owner
held the id until its own budget expired. The unreadable-open path now
cancels the id before rethrowing; the spec pins the cancel.
2026-10-23 16:13:23 +08:00
mektpoy 59ed57540b refactor(liveshare-protocol): name the offered capabilities in their type
LIVESHARE_CAPABILITIES was a runtime string array, so a peer could neither
check a capability name at compile time nor compare against the same union.
The tuple is now const and LiveshareCapability derives from it; the wire
values are unchanged.
2026-10-23 16:13:23 +08:00
mektpoy a64d6406f5 refactor(liveshare-protocol): decode a relay frame once
parseRelayFrame parsed the wire text for the lifecycle snapshot and again
for the envelope, and unsupportedFrameRefusal repeated both parses. One
JSON.parse now feeds the snapshot check, the envelope, and the refusal
branch, so the hot path decodes each frame exactly once.
2026-10-23 16:13:23 +08:00
mektpoy 6bebb9ef3f fix(liveshare-protocol): reject an empty tenant in the asserted actor
The wire parser accepted an empty tenant while the Relay's identity adapters
store a non-empty one and identityFromKey refuses an empty segment, so a
share ACL built from such an actor could never match a normalized entry.
Reject the unnormalized actor at both the Relay frame and IPC ingress.
2026-10-23 16:13:23 +08:00
mektpoy a4f851f028 test(liveshare-protocol): carry malformed share frames without unknown assertions 2026-10-23 16:13:23 +08:00
mektpoy ddd9cbc243 chore(build): split the liveshare protocol compiler faces
The package carried one Host-based tsconfig that both aggregates registered, so the browser carrier
was compiled under the Host face while the wire codecs that use Buffer were compiled under the same
config. It now follows the repository's double-face template: a solution-only package root, a Host
leaf (wire codecs, identity contract, shared vocabulary, and the root barrel that re-exports the
carrier), and a browser leaf for the viewer carrier and the pure types it shares. The two repository
aggregates register the matching leaf, and the carrier stays in the Host file list because the root
barrel re-exports it for the Relay's script generation.

The tsdown comment now states the two compiler faces and why only the Host face publishes runtime
modules.
2026-10-23 16:13:23 +08:00
mektpoy 202c196e00 fix(liveshare-protocol): declare the brand runtime dependency
The published declarations reference Branded from @deepseek-ai/dsh-brand, so an external consumer
must be able to resolve that package from the manifest. It moves from devDependencies to
dependencies; the lockfile records the importer under dependencies.
2026-10-23 16:13:23 +08:00
mektpoy 535c40d4b7 test(liveshare-protocol): gate the package at per-file coverage
The protocol package leaves the repository-wide coverage exemption and meets the same per-file 100%
gate as the other packages. The new specs cover the identity mock, the wire helpers and every
additive-field parser branch, both public entry points, and the carrier's forwarded-route paths; the
key parser drops an unreachable guard so its remaining branches are exercised.
2026-10-23 16:13:23 +08:00
mektpoy abb9d0c50f test(liveshare-protocol): neutralize provider-specific fixture subjects
The recorded frames no longer name a provider-specific subject prefix; the cases keep their shape
with a neutral subject id.
2026-10-23 16:13:23 +08:00
mektpoy e803c2647a fix(liveshare-protocol): reject an unparseable share expiry
An IPC share spec accepted any string as its deadline while the frame parser required a parseable
time, so a registration could carry an expiry no reader could enforce. Both parsers now apply the
same rule: a stated expiry must be a string Date.parse accepts.
2026-10-23 16:13:23 +08:00
mektpoy 90695b11a5 docs(liveshare-protocol): document identity normalization and the viewer entries
The key codec now states its precondition: a caller normalizes an identity first, because an
unnormalized empty tenant renders a segment the parser cannot read back. The viewer carrier and the
viewer-state vocabulary join the file map, reached through the package root rather than their own
subpaths, and the placeholder-tenant comment is one complete rule again.
2026-10-23 16:13:23 +08:00
mektpoy 605f4947e1 test(liveshare-protocol): reject invalid additive wire values
The new actor credential and share connection are untrusted wire inputs: a non-string credential and an unknown connection mode are refused, an absent connection parses as the relay default, and an absent credential keeps the Relay-asserted actor.
2026-10-23 16:13:23 +08:00
mektpoy 4800bbed30 feat(liveshare-protocol): reserve actor credentials and direct connections
Additive wire evolution: an actor may carry an owner-verifiable credential (type-checked here, verified by the owner, absent keeps today's Relay assertion), and a share spec may carry a connection that defaults to relay while a Relay that owns the data path refuses direct. Capabilities actor-credential and direct-connection declare support; the recorded frames carry both fields.
2026-10-23 16:13:22 +08:00
mektpoy a2c5d40e30 refactor(liveshare-protocol): share the permission facts between request and frame
TunnelShareSpec and ShareAccessStateFrame repeated the same six permission fields. They now extend one SharePermissions interface (the committed frame is the authority), with the upload switch optional in a request and required in a frame. The wire shape is unchanged, so the recorded frames replay byte for byte; the display-only and grouping fields plus the registration-token and request-id roles are documented in place.
2026-10-23 16:13:22 +08:00
mektpoy f1aca0df84 docs(liveshare-protocol): keep identity providers out of the protocol package
The identity contract and its fixtures named specific providers even though the package only describes the abstract triple. The JSDocs now say a deployment's adapter implements it, and every fixture and spec uses the neutral example provider while keeping the encoding, round-trip, and empty-field cases they pin.
2026-10-23 16:13:22 +08:00
mektpoy 590826f66d revert(liveshare-protocol): reset the wire protocol to version 1 and drop development history
The v2 upgrade guide and the fork-readonly normalization were development-period artifacts that never shipped, so the protocol returns to version 1: the guide triplet is deleted with its references, the withdrawn tier is no longer named anywhere (unknown tiers are rejected generically), and the README plus the version test state version 1. The file-upload capability and its additive field stay.
2026-10-23 16:13:22 +08:00
mektpoy 73df748c7f feat(liveshare-protocol): carry the viewer file-upload switch
The share spec gains an optional allowsFileUpload switch, the access-state frame always states it (an absent field reads as off), and the file-upload capability separates the field from the tier and fork switches. The wire version stays 2 because the change is additive; the upgrade guide says so and the recorded add-share frame names the new field.
2026-10-23 16:13:22 +08:00
mektpoy 8a5ee7bda9 fix(liveshare-protocol): keep the forking half of the withdrawn tier
Normalizing fork-readonly to view dropped the switch the withdrawn name implied when no allowsFork was present, so a legacy registration silently lost forking. Both parsers now set allowsFork true for that case, matching what the old name granted.
2026-10-23 16:13:22 +08:00
mektpoy 7139e5cd8d fix(liveshare-protocol): keep the protocol vocabulary off the client and normalize the withdrawn tier
viewer-states publishes only each condition's retry decision: HTTP statuses and error codes belong to the Relay and copy keys to the client, so the mismatched accessDeniedTitle key is gone with the wire discriminator. Both parsers read the withdrawn fork-readonly tier back as view while keeping allowsFork, matching the documented treatment, and the protocol version is pinned in a test. The coverage-exclusion comment now names this package's own deferred lane instead of another package's.
2026-10-23 16:13:22 +08:00