Commit Graph
85 Commits
Author SHA1 Message Date
Yichen Jiang 2246027c59 Merge remote-tracking branch 'origin/master' into feat/agent-terminal-panel-host 2026-11-05 14:43:16 +08:00
imccyu 6b8d868008 chore(deps): unify zod to 4.6.6
Raise all 88 workspace zod declarations to exact 4.6.6 and move @browserbasehq/stagehand to 4.4.0, which pins the same version, so the lock keeps a single zod copy. Test expectations and the Typert consumer's node types follow the new declarations; pnpm-workspace.yaml records the release-age exemption for [email protected].
2026-11-05 11:27:26 +08:00
Turtle 38c7a9fbf4 feat(release): publish package source, declaration maps, and documentation (#5884)
* feat(release): publish package source, declaration maps, and documentation

Every release member publishes its TypeScript source and the declaration
maps that resolve into it, and @deepseek-ai/dsh publishes the repository
Markdown documentation staged from docs/ at prepack time.

The ./src/* export most members already declared now resolves for an
installed consumer, and a consumer editor follows a declaration to the
implementation. Bundled JavaScript maps stay unpublished; the vendored
family and the Desktop runtime file policy are unchanged.

Rationale: .agents/notes/implemented/process/2026-10-08-published-source-and-docs.md

* feat(release): publish JavaScript maps and compress bundles

Every emitted JavaScript map ships beside the bundle it describes, and the
workspace build and the client preset compress bundles without mangling
identifiers.

The documentation payload now mirrors the website publication manifest and
is removed again by `postpack`; Desktop and the Python executable exclude
the published source, documentation, and maps; `clean` removes a staged
copy. Typert's publication contract gains the Remote declaration map.

* fix(release): keep node bundles readable for the worker image

The browser worker image lowers `yield*` only as a whole statement and
rewrites `for await` loops by their source layout, so compressed node-side
entries either fail that lowering or lower to unparseable code. Only the
browser bundles keep compression, which removes about a third of their text.

The bundle-purity assertion now matches the module-loader call regardless of
the quote style compression picks, and the release-pack fixture exercises
the installed package's new documentation requirement.

* feat(release): publish the whole documentation tree

`@deepseek-ai/dsh` copies `docs/` in full instead of the website's page
set: the maintainer documents, the generated migration records, the
translation guidelines, and the `*.i18n.yaml` consistency records ship
with the installed package, so the documentation's own links resolve
without a checkout.

* feat(release): publish the upgrade guides with the documentation

The staged documentation keeps the website's page set and adds every
`docs/upgrade-guide/` document, which is what an installed reader consults
when a released change breaks something. The rest of the maintainer tree
stays out.

* test(release): expect source and maps in master's new payload cases

* feat(release): keep installed docs and source readable in Desktop

Desktop keeps the published src/ and docs/ trees inside app.asar, and
every model shell call receives DSH_INSTALL_DIR and DSH_NODE_EXECUTABLE
so an agent can read them through Electron's Node mode. Staging also
generates docs/upgrade-guide/README.md, an index of the upgrade guides
grouped by the release they upgrade from.

Minified client bundles print string literals with backticks: the
worker image packer now recognizes those chunk requests, client license
banners are prepended after minification so their text survives, and
the affected artifact tests accept either quote.

* test(desktop): read archived docs through the Windows PowerShell form

Regenerate the config catalog for the shifted shell-env source line.

* test(desktop): wait for the GUI-subsystem Electron process from PowerShell

* build(release): publish source and maps from the message-quotes package

* build(release): publish source and maps from packages new on master

* build(release): publish source and maps from the tool-office package
2026-11-05 00:22:36 +08:00
Yichen Jiang 1bcbda3d6d Merge remote-tracking branch 'origin/master' into feat/agent-terminal-panel-host 2026-11-04 16:51:18 +08:00
Yichen Jiang c5ea810a06 Merge remote-tracking branch 'origin/master' into feat/agent-terminal-panel-host 2026-11-04 16:09:24 +08:00
imccyu 2f97f60455 release(dsh): 0.2.2-rc.1 2026-11-04 15:50:06 +08:00
Yichen Jiang 454a3f7a88 fix(terminal-controller): delete confined Agent shell history and stop pointing read-only shells at it
read-only confinement cannot write /tmp, so the per-terminal history path
did nothing there; read-only shells now get an empty HISTFILE, which also
keeps them from loading the person's history. workspace-write shells keep
their per-terminal history file, and the controller now deletes it
through the same execution environment after the shell ends, including a
failed allocation; a failed deletion is logged.
2026-11-04 15:48:30 +08:00
Yichen Jiang 9eb4144222 refactor(terminal-controller): publish AgentTerminal as an interface
The public AgentTerminal class took the internal BrowserTerminal as its
constructor parameter, so the Cordis API catalog listed BrowserTerminal
and all of its members. AgentTerminal is now a type-only interface and
the controller constructs a package-private AgentTerminalHandle; the
catalog no longer names BrowserTerminal. BrowserTerminal.onStateChange
becomes setStateListener, because a later call replaces the listener.
2026-11-04 15:41:10 +08:00
Yichen Jiang b105a29412 fix(ui-sidebar-terminal): close the tab of a terminal that ends under Agent control
The sidebar only opened tabs for Agent terminals that appeared in the
roster, so a terminal the Agent closed left a "Terminal closed." tab
behind. Each window now remembers which listed terminals the Agent
controls and closes the tabs bound to one that leaves the roster; a
terminal the person took over keeps its tab. The client terminal list
also adopts each whole roster instead of only merging it, so terminals
the Host no longer retains leave the cached list. ClientTerminals gains
boundTerminal to read a tab's terminal binding.
2026-11-04 15:38:52 +08:00
Yichen Jiang 5659e20c45 fix(ui-sidebar-terminal): keep focus reports and scrolling from taking over Agent terminals
A click that focuses a program with focus reporting (DECSET 1004), such as
vim or neovim, made xterm send ESC [ I within the gesture window, so the
click took the terminal over. Scrolling a pager on the alternate screen
did the same through wheel-generated arrow keys. Focus reports are never
typed, and the wheel no longer opens the typed-input window.
2026-11-04 15:34:43 +08:00
Yichen Jiang 6be8e43bcd fix(terminal-controller): reopen a failed roster stream for its remaining watchers
A roster stream that failed while watched used to drop its watchers, so
Agent terminals stopped opening tabs until the Session header remounted.
The stream now reopens in place on the next watch of that Session or when
the connection resets.
2026-11-04 14:23:31 +08:00
Yichen Jiang f1e90e5845 fix(terminal-controller): bound Agent terminals precisely and report closed screens uniformly
maxAgentTerminals now counts only running Agent-controlled terminals and
pending Agent allocations, each id once; exited terminals and failed
allocations awaiting cleanup still count toward maxTerminals. openForAgent
applies rename's 1-120 character title rule and trims the title.
readScreen reports a terminal closed while its read drains as
RemoteError terminal/unavailable, like a missing terminal.
2026-11-04 14:23:21 +08:00
Yichen Jiang c8cf0693ac docs(terminal-controller): state Agent terminal history and close ordering precisely
Only workspace-write can write the confined history file, so read-only
shells do not save history; unconfined shells keep the inherited HISTFILE
unless env sets one. AgentTerminal.close checks control once when called,
and a takeover during cleanup does not stop the close. The sidebar README
now says only a confined terminal's badge names its sandbox mode on hover.
2026-11-04 14:08:52 +08:00
imccyu 1c78d475bf release(dsh): 0.2.2-alpha.3 2026-11-03 13:37:26 +08:00
Yichen Jiang 1279134be3 Merge remote-tracking branch 'origin/master' into feat/agent-terminal-panel-host
# Conflicts:
#	packages/extensions/tool-cordis/src/api-catalog.ts
2026-11-02 17:22:21 +08:00
imccyu 00d541438b release(dsh): 0.2.2-alpha.2 2026-10-28 02:03:15 +08:00
imccyu 69c389ae11 release(dsh): 0.2.2-alpha.1 2026-10-28 00:00:58 +08:00
imccyu 3014b0af0f Merge master into DSH 0.2.1-rc.4 synchronization branch 2026-10-26 01:29:12 +08:00
imccyu 341beb33c0 release(dsh): 0.2.1-rc.4 2026-10-26 00:57:37 +08:00
imccyu 14f0b2aafe Merge master into DSH 0.2.1-rc.3 synchronization branch 2026-10-23 11:56:34 +08:00
imccyu d02ea370ee release(dsh): 0.2.1-rc.3 2026-10-23 01:11:35 +08:00
07akioni 84edeadc2b feat(i18n): add Spanish French German Russian and Portuguese 2026-10-22 19:53:52 +08:00
07akioni ed783066e6 fix(i18n): complete Japanese plugin metadata and guard locale coverage 2026-10-21 16:14:12 +08:00
Yichen Jiang 6b7a1712e3 feat(terminal-controller): mark logical lines and expose the Agent terminal process id 2026-10-20 15:06:50 +08:00
Yichen Jiang 8ade0f7c9b feat(terminal-controller): let callers add environment variables to Agent terminals 2026-10-20 15:04:09 +08:00
Yichen Jiang 336ee0d7fd feat(terminal-controller): read Agent terminal screens synchronously with an explicit drain 2026-10-20 15:02:36 +08:00
Yichen Jiang eaf6df53e2 docs(terminal-controller): document Agent terminals, roster watch and sidebar takeover 2026-10-20 14:51:32 +08:00
Yichen Jiang c1b8aaa194 feat(ui-sidebar-terminal): open agent terminals and mark user takeover 2026-10-20 14:51:32 +08:00
Yichen Jiang 53db16dbae feat(terminal-controller): Host API for agent terminals and roster watch 2026-10-20 14:51:32 +08:00
Yichen Jiang 8ae3b861f8 feat(terminal-controller): agent input, screen rendering and change revisions 2026-10-20 14:42:35 +08:00
Yichen Jiang 8376917743 feat(terminal-controller): record terminal origin, control and typed input 2026-10-20 14:42:35 +08:00
imccyu d1b9c04067 release(dsh): 0.2.1-rc.2 2026-10-17 15:10:31 +08:00
imccyu c6e89e6755 release(dsh): 0.2.1-rc.1 2026-10-16 21:39:18 +08:00
imccyu 0a49d91bb2 release: setup next release version for [email protected] 2026-10-16 16:17:09 +08:00
Yichen Jiang 2d7f15a644 Merge pull request #6304 from deepseek-harness/worktree/terminal-session-list
fix(web): share terminal discovery per session
2026-10-15 22:42:21 +08:00
Yichen Jiang 0ae278b935 fix(web): share terminal discovery per session 2026-10-15 20:12:52 +08:00
imccyu f2235d6c02 release(dsh): 0.2.1-alpha.4 2026-10-15 20:00:58 +08:00
Yichen Jiang 36acfb1e88 release(dsh): 0.2.1-alpha.3 2026-10-14 19:38:37 +08:00
imccyu 10672c4c24 Integrate Peer interaction scope with Remote access 2026-10-14 14:44:01 +08:00
imccyu f6316536ea feat(client-connection): carry caller principals on explicit peers 2026-10-13 23:01:37 +08:00
Yichen Jiang 5538b790c6 fix(web): bound terminal uplink and preserve final output 2026-10-12 13:54:11 +08:00
Yichen Jiang c6f3639b5e docs(web): align terminal duplex documentation 2026-10-12 12:44:06 +08:00
Yichen Jiang 5379996fcb feat(web): carry terminal input over duplex streams 2026-10-12 11:18:43 +08:00
imccyu e4410b2764 perf(client): read each tsdown preset's own package manifest
The client tsdown presets found a package's own manifest by name: a glob of
every packages/*/*/package.json, parsed until the name matched. tsdown's
native config loader imports each package config without module cache, so
the module-level cache never hit and all 82 configs repeated the glob
(40-125 ms each) synchronously on tsdown's main thread, where it delayed
every other package build. It was 34.5% of the client pass's main thread.

- clientBundle, staticLinked and clientLibrary take the package directory
  (import.meta.dirname at every call site) and read <dir>/package.json
  once; the package name, loader id and externals come from that manifest.
- A missing, unreadable or nameless manifest throws an actionable error.
- The glob, the name search and the module-level caches are removed.

tsdown client pass 12.78 s -> 8.73 s (median of 3 interleaved runs each,
-31.7%); all 11,566 lib outputs byte-identical; all 82 configs resolve the
same externals and banners.

Refs #5852
2026-10-11 18:19:23 +08:00
ZiyaandZiyaZhang c7d61ecc11 fix(i18n): 补充内置插件中文文案并精简清单展示 (#5506)
* fix(i18n): add Chinese names and descriptions for built-in plugins

* fix(i18n): keep built-in plugin localization metadata-only

---------

Co-authored-by: ZiyaZhang <[email protected]>
2026-10-09 17:18:26 +00:00
07akioni deb90c38e6 Merge pull request #5576 from deepseek-harness/fix/desktop-dependency-alignment
perf(deps): align desktop dependencies and share client libraries
2026-10-09 17:52:53 +08:00
07akioni e2c410ef84 release(dsh): 0.2.1-alpha.2 2026-10-09 15:13:40 +08:00
kingwl 0bfc4b97f2 Merge master and resolve integration conflicts for #5576 2026-10-08 14:57:40 +08:00
Tianyi Cui 0c6b1ef7bb fix(session): port directory consumers and fixtures to current runtime 2026-10-06 01:31:51 +08:00
Tianyi Cui b446e2e290 fix(web): start sidebar terminals in the session directory 2026-10-06 01:27:55 +08:00