Commit Graph

2128 Commits

Author SHA1 Message Date
_Kerman
d5ec13bdd9 Merge pull request #2250 from deepseek-harness/xtr/sidebar-workspace-controls
feat(web): improve workspace sidebar navigation
2026-08-12 12:41:53 +08:00
_Kerman
64326cb597 refactor(ui-workspace): extract shared drag-accept and status-dot renderers
The flat-list ordering change duplicated the document-level native-drag
acceptance effect and the status-dot block across the search and session
rows, tripping the duplication gate. Extract useNativeDragAcceptance and
SessionStatusDots so both call sites share one implementation.
2026-08-12 12:01:23 +08:00
_Kerman
3a3248b31d feat(ui-workspace): support manual flat-list ordering 2026-08-12 11:14:25 +08:00
Ziya
4a8ee7674a Merge pull request #2287 from deepseek-harness/agent/black-whale-logo
style(web): use black hero whale with hover motion
2026-08-12 11:06:42 +08:00
_Kerman
3a0baa1e9d Merge remote-tracking branch 'origin/master' into dshw/pr-2250
# Conflicts:
#	packages/client/connection/tests/fake-api.client.ts
#	packages/client/runtime/tests/manager.client.spec.ts
#	packages/client/runtime/tests/workspaces-service.client.spec.ts
#	packages/host/apiproxy/tests/rpc-schemas.spec.ts
2026-08-12 04:50:51 +08:00
_Kerman
f7e45ae377 test(ui-trajectory): provide the settings and remote seams the locale plugin needs
The locale plugin's inject list gained 'remote' and 'settingsScope' on
2026-08-10, but the built-bundle harness mounted it without providing
those services, so the locale fiber never started and the trajectory
plugin's apply never ran — the ring assertion saw no 'trajectory' entry.
Provide the same stubs ui-layout's apply bench uses.
2026-08-12 02:52:15 +08:00
imccyu
58b6fa3ae1 fix: test constract 2026-08-12 02:30:08 +08:00
imccyu
929086fb36 fix: docs 2026-08-12 02:30:08 +08:00
imccyu
2c2d9f26e5 fix: client spec 2026-08-12 02:16:39 +08:00
imccyu
7ad54e7791 refactor(client): name the compile face in every client test filename
A test file under packages/client now says which face it covers:
`*.client.spec.{ts,tsx}` and its `*.client.{ts,tsx}` helpers belong to the
Client aggregate, `*.host.spec.ts` to the host aggregate. The carrier's four
node-half specs take the Host suffix.

The two suffixes are mutually exclusive, so each aggregate excludes the
other's and both keep one broad test glob: `exclude` wins over `include`, and
`packages/client/**` no longer has to be excluded wholesale from the host
program with per-file `files` entries carved back out of it. A Host-face spec
that reaches only Host source therefore needs no cross-face project
reference, which the split-project rule rejects.

vitest still discovers every file through `**/*.spec.{ts,tsx}`.
2026-08-12 01:41:40 +08:00
Ziya
dd0898ad9c Merge branch 'master' into agent/black-whale-logo 2026-08-12 00:54:39 +08:00
ZiyaZhang
d5820df03b fix(web): stabilize hero whale hover 2026-08-11 08:53:39 -07:00
imccyu
b0d3686f57 fix: pkg 2026-08-11 23:33:18 +08:00
imccyu
378141bf5d fix: test 2026-08-11 23:33:18 +08:00
imccyu
6332bd3513 fix: build 2026-08-11 23:33:18 +08:00
imccyu
7a9d7d2657 chore(hygiene): restore the cordis peers and teach knip the split faces
`@deepseek-ai/cordis` returns to the peer and dev dependencies of
`dsh-client-ui-model` and `dsh-client-ui-skill`; every harness package declares
it, and the client type-assembly rename dropped it from both. The commands
manifest ships `src` alongside its generated typert faces, matching the
`./src/*` export it already declares.

knip gains the two directory-picker surface workspaces, whose specs are `.tsx`
and matched no default pattern, and ignores `zod` in the commands workspace:
that dependency belongs to the generated Remote and Host faces in `lib/`, which
knip never scans. The unused `dsh-client-test-runtime` and
`dsh-client-connection` dev dependencies are gone; the picker surface's own spec
never imported the former, and ui-settings reads the carrier's types through the
Remote assembly now.
2026-08-11 23:33:17 +08:00
imccyu
92e0e3377f test: finish the Remote-result and picker-split test migrations
Every generated Remote method resolves to `RemoteResult<T>`, so the Gateway
client spec asserts the ok and error branches instead of the unwrapped value
and a throw, and the generator fixtures declare the wrapper in the consumer
face they typecheck. The RPC-failure test splits into the Host error carried
verbatim in the error branch plus a transport throw folded into it.

The runtime client, ui-command and ui-plan benches answer the generated
commands Remote through its result branches and provide the `remote.commands`
namespace their plugins now inject; the ui-command bench also serves the `$on`
the service subscribes on construction.

The directory-picker chooser mounts a backend and its surface as a pair, so the
real-Loader composition serves both surface packages and asserts each entry
arrives and leaves with its backend.
2026-08-11 23:33:17 +08:00
imccyu
51b5f5b565 test(picker): cover the node halves of the split directory-picker faces 2026-08-11 23:33:17 +08:00
imccyu
159d102f99 refactor(client): name one assembly package for the carrier types
A business package imported the Remote assembly for `ctx.remote` and the
Connection plugin for the wire types it passes around. The assembly now
re-exports the carrier's Client-facing types, so a business package names one
package. The re-export is type-only: the carrier's runtime values keep their
own module edge, since inlining them here would duplicate the carrier inside
the assembly bundle.

Four surfaces that had no Remote assembly dependency declare one now.
2026-08-11 23:33:16 +08:00
imccyu
027cbdfe5d refactor(faces): keep the generated contributions out of the Host aggregate
The Gateway and the carrier each compiled both halves under one tsconfig, so
the Host aggregate built their browser faces — including the face that owns
`ctx.remote`, the most likely future consumer of a generated `/remote`
contribution. Both packages now expose a host and a client face, and each
aggregate references only its own; three modules the halves share appear in
both file lists, as api/remotes already does.

The two apps/web specs in the Host aggregate restate the conversation engine's
Context key format instead of importing the Client runtime for it. A drift
makes the key miss its rendered node, so the assertion fails loudly.

The Host aggregate now reaches one Client project, the carrier's host face,
which the Gateway's own dispatch face needs; no generated contribution is
reachable from it.
2026-08-11 23:33:16 +08:00
imccyu
40af20cafe refactor(picker): split the directory-picker faces into their own packages
The browse and native backends were dual-face packages: a Node backend plus a
browser surface under one tsconfig that referenced Client packages. That put
Client projects — and through them the Client runtime — inside the Host
compiler aggregate, which builds before the generated Remote contributions
exist. Each browser half moves to its own Client package, and both backends
become Node-only.

The interaction is still one choice: the adaptive chooser mounts the backend
and its surface as a pair of Loader entries and tears both down in reverse, so
a resolved kind still swaps both faces. Compositions that pin an interaction
directly now pin the pair, and the chooser's runtime-string package list keeps
naming everything a composing app must resolve.
2026-08-11 23:33:16 +08:00
imccyu
070a2a7f1e refactor(commands): move the command service to Remote
`CommandService.list` and `execute` carry the wire contract directly through
`@Remote`, and the Client assembly mounts the generated commands
contribution. The legacy API Proxy route, its schemas, the map rows, the
generated client methods and the fixture's command domain are removed, so the
catalog and the admission call have one owner again.

`Session.command()` keeps a result-shaped public face for parity with the
prompt, cancel and attachment neighbours it sits beside, and reads the
generated namespace through one `SessionRemotes` parameter. The Session
cluster declares that face against the owning business package rather than the
generated contribution: the Host compiler aggregate builds this package, and
it runs before any contribution is emitted.

Migrated calls lose the `title-invalid` class of protocol-only error codes and
report `internal`; no production caller branched on them.
2026-08-11 23:33:15 +08:00
imccyu
a2981207b0 feat(typert): deliver the carrier outcome from ctx.remote
Every generated Remote method now resolves to `RemoteResult<T>`: the Client
face folds a carrier failure, a transport throw and a rejected result payload
into one error branch, so no consumer wraps a call to recover them. Only
assembly faults still reject — a wrong argument count, an unmounted method, a
missing Context binder, an absent Connection.

`RemoteFailure.code` stays an open string because the closed RPC code union
lives in the carrier package, which already depends on type-meta; naming it
here would invert that edge.

The goal surface drops its own try/catch plus the structural probe that
guessed whether a thrown cause was an RPC failure, and reads the result
instead.
2026-08-11 23:33:15 +08:00
_Kerman
a2432be53b Merge remote-tracking branch 'origin/master' into dshw/pr-2250 2026-08-11 23:10:27 +08:00
imccyu
5ca7be5dcb release(dsh): 0.0.1-rc.2 2026-08-11 22:52:39 +08:00
ZiyaZhang
1d7ce83894 style(web): use black hero whale with hover motion 2026-08-11 07:41:51 -07:00
_Kerman
a1d0d6a3a1 Merge remote-tracking branch 'origin/master' into dshw/pr-2250 2026-08-11 22:33:12 +08:00
ZiyaZhang
3545bbbaaf Merge remote-tracking branch 'upstream/master' into feat/produced-files-folder 2026-08-11 05:58:13 -07:00
ZiyaZhang
67a5b2ceca Merge upstream master into feat/produced-files-folder 2026-08-11 05:40:11 -07:00
Tianyi Cui
7583778fbd Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at
# Conflicts:
#	packages/client/runtime/README.i18n.yaml
#	packages/client/runtime/README.md
#	packages/client/runtime/README.zh.md
2026-08-11 20:34:34 +08:00
Tianyi Cui
9dc4af386d Merge branch 'master' into worktree/schedule-conversational-after 2026-08-11 20:31:49 +08:00
ZiyaZhang
693a093dfe Merge upstream master into feat/produced-files-folder 2026-08-11 05:22:59 -07:00
Tianyi Cui
3e131befb5 Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at 2026-08-11 20:06:58 +08:00
Yichen Jiang
f7efe2a3b3 Merge remote-tracking branch 'origin/master' into worktree/web-plugin-config 2026-08-11 20:03:23 +08:00
Tianyi Cui
466854a1d6 Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after 2026-08-11 20:03:21 +08:00
_Kerman
ef3eb0494c Merge remote-tracking branch 'origin/master' into xtr/sidebar-workspace-controls 2026-08-11 19:58:15 +08:00
Tianyi Cui
e4fdd4b1e9 Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at 2026-08-11 19:57:55 +08:00
_Kerman
fb3ac235d1 style(ui-workspace): refine drag insertion marker 2026-08-11 19:57:07 +08:00
Tianyi Cui
5f64b6815c Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
2026-08-11 19:54:39 +08:00
Yichen Jiang
fb6fb1fa12 Merge origin/master into worktree/web-plugin-config, adapting to ctx.remote.$on
#2201 landed three moves this branch sits on top of. `bindSettingsScope` became
`ctx.settingsScope.bind` on the Settings surface, so the section injects that
service and the Remote face instead of importing a free function; the
`SettingsScope` types moved into the runtime contract module, which is where
this branch's `base`, `user`, and `unset` now live; and the client
`credentials/changed` event became the forwarded owner event
`credentials/updated`, which the web-search card subscribes to through
`ctx.remote.$on`.

The generated module graph crossed mermaid's 1000-edge render guard with this
branch's 14 new edges. The guard doubles again, exactly as it did at 500 — the
graph counts real package edges, and trimming them to fit a renderer default
would make the document lie about the dependency set.
2026-08-11 19:52:34 +08:00
creatixchu
b9e6113af0 Merge remote-tracking branch 'origin/master' into worktree/multimodal-ui
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-08-11 19:44:01 +08:00
_Kerman
16dddc128b fix(ui-workspace): expand workspace before new session 2026-08-11 19:31:02 +08:00
imccyu
23c35108d6 fix(test): inject locale settings dependencies 2026-08-11 19:25:43 +08:00
imccyu
3727e242cd fix(ci): satisfy lint contracts-ready lane 2026-08-11 19:25:43 +08:00
imccyu
ac01c3b035 fix: lint 2026-08-11 19:25:42 +08:00
imccyu
f484111e37 fix: build 2026-08-11 19:25:42 +08:00
imccyu
2c4b3d015b fix: setting scope ctx 2026-08-11 19:25:42 +08:00
imccyu
ffdf81b28d fix(ci): repair remote event coverage and catalogs 2026-08-11 19:25:42 +08:00
imccyu
e0bbe42242 refactor(web): consume owner remote events directly 2026-08-11 19:25:42 +08:00
imccyu
80f1a064f5 fix: dep 2026-08-11 19:25:41 +08:00