Commit Graph

12010 Commits

Author SHA1 Message Date
Yif
625711e718 fix(client): distinguish grep/glob rows from the web search row
The grep, glob, and web_search tool rows all rendered as "Search" with
the same magnifier icon, so a transcript full of local searches was
indistinguishable from web searches. Grep and glob now carry their own
command-named titles through TOOL_TITLES, and the web_search row wears
a new globe glyph (IconGlobeOutline14) while keeping its "Search" title.
2026-08-12 12:57:59 +08:00
Ziya
91e073e5e1 Merge branch 'master' into feat/web-loader-plugin-inventory-settings 2026-08-12 12:51:46 +08:00
Yichen Jiang
d57463c2fb fix(web): end first-run onboarding on any usable provider
The step and the Models page both asked one question of a join that
describes every provider: is deepseek-official's credential stored? A user
who configured some other route was taken over on every blank session, and
the DeepSeek setup card opened over them on every visit to Models with a
Cancel that could not close it — while clearing the add card's draft,
because it shared the row-editor close handler.

providerUsable(row) now answers what both surfaces need: the route is
registered and whatever credential its profile names is stored. Readiness
(renamed onboardingReadiness) ends on any usable row, needsSetup takes the
same fact, and each card kind owns its own close handler.

Fixes #2325
2026-08-12 12:50:45 +08:00
_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
ZiyaZhang
46c0e3dba7 fix(ci): align plugin inventory with current contracts 2026-08-11 21:38:11 -07:00
creatixchu
2c9036b102 feat(web): whole-page image drop, projected intake limits, and thumbnail tiling
Second alignment step for #2248: document-level drag intake behind the new
DropOverlay atom, lightbox close icon and shared dialog mask, DeepSeek Chat
thumbnail rules (single 240px long edge with ratio clamp, 64px tiles, merged
consecutive assistant images), image limits raised to 20/10MiB/100MiB and
published to clients as the imageLimits projection, whole-batch intake
pre-check with product-copy banners, and attachment-error reasons mapped to
localized copy.
2026-08-12 12:31:52 +08:00
ZiyaZhang
eea356e785 Show module names for dynamic plugins 2026-08-11 21:10:14 -07:00
ZiyaZhang
2614a2df93 Refine plugin inventory card details 2026-08-11 21:10:14 -07:00
ZiyaZhang
4cf76f2362 Fix plugin status tag clipping 2026-08-11 21:10:14 -07:00
ZiyaZhang
6ed5df964e feat(web): add read-only Loader plugin inventory 2026-08-11 21:10:14 -07:00
imccyu
ff9ee1d9e3 fix: client tsconfig spec 2026-08-12 12:04:30 +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
Turtle
258331f0da Merge pull request #2261 from deepseek-harness/codex/linear-web-onboarding
docs: make Web UI the primary onboarding path
2026-08-12 12:01:14 +08:00
Yichen Jiang
d4e06d6dd8 Merge pull request #2279 from deepseek-harness/worktree/preset-user-root-in-package
agent-presets owns the writable preset root instead of awaiting an app
2026-08-12 11:53:55 +08:00
Turtle
04fe477e7e docs: make Web UI the primary onboarding path 2026-08-12 11:44:33 +08:00
Huanqi Cao
50bedaf03b Merge pull request #2234 from deepseek-harness/feat/loader-entry-disabled-interpolation
feat(loader): interpolate the entry disabled field
2026-08-12 11:40:02 +08:00
Yichen Jiang
2646da8d56 refactor(agent-presets): keep the user-root segment out of the package API
`USER_PRESET_DIR` was exported with no production consumer — only the new test
read it, and a test that imports the implementation constant cannot catch that
constant being wrong. It stays module-internal, and the test spells the segment
it expects.
2026-08-12 11:36:24 +08:00
imccyu
660d24e705 fix: client/host spec 2026-08-12 11:22:24 +08:00
_Kerman
3a3248b31d feat(ui-workspace): support manual flat-list ordering 2026-08-12 11:14:25 +08:00
Yichen Jiang
dfa2d91dcb Merge master into worktree/preset-user-root-in-package
Overlaps master on the preset e2e, the web scaffold, and the generated
config-catalog triplet; all merged textually, so the catalog is regenerated and
its pairing hashes re-recorded rather than trusted.
2026-08-12 11:08:55 +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
Chinesezjc
f1deffeccb test(sandbox-local): pin the windows-acl runner-entry arms independent of build state
The source-through-tsx fallback in windowsAclRunnerInvocation was only
reachable while sandbox-windows-acl/lib/runner.js was absent, so the
per-file 100% gate failed wherever a gate had already built it. In
ci-primary and ci-windows-complete the typert-contracts gate runs
build:lib:host ahead of test:coverage in one workspace, leaving both
fallback statements uncovered; the sharded coverage job never builds
first and stayed green.

Cover the fallback through an injected entry path that is guaranteed not
to exist, and keep the uninjected case asserting only the verdict that
holds under either arm. Verified at 100% statements/branches/functions/
lines with lib/runner.js both present and absent.
2026-08-12 09:56:17 +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
pku-xht
bbdeb5363b Merge commit 'a9cbb8db5009bccbd41746fc43c531b758e6a9fe' into codex/workflow-run-auto-disclosure 2026-08-12 02:53:08 +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
82d21ab3c3 Merge pull request #2206 from deepseek-harness/worktree-rpchost
refactor(commands): move the command service to Remote and settle the Remote compile faces
2026-08-12 02:44:19 +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
19303da8de fix: no .map
fix: no map
2026-08-12 02:30:03 +08:00
imccyu
d91180db9a docs: client spec 2026-08-12 02:16:39 +08:00
imccyu
2c2d9f26e5 fix: client spec 2026-08-12 02:16:39 +08:00
pku-xht
e4a5c6fb9d docs(workflow): state current pointer ownership 2026-08-12 02:11:08 +08:00
pku-xht
8f308023a2 docs(workflow): align disclosure lifecycle evidence 2026-08-12 01:41:43 +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
_Kerman
ee3bdac52d test(web): refresh browser goldens for the compact workspace sidebar
Re-record the sidebar regions that the redesign intentionally changed:
group session counts are gone, search is a collapsed header action, and
grouping lives in the View options menu. Session rows also follow the new
recency ordering, so their tree order updates with the counts.
2026-08-12 01:32:23 +08:00
_Kerman
e76a03a20c test(web): adapt workspace browser e2e interactions to the compact sidebar
The sidebar redesign removed group session counts, collapsed search into a
header action, and moved grouping into the View options menu. Update the
browser scenarios that waited on the old surfaces:

- Wait on the Ungrouped bucket row instead of the removed session-count text.
- Expand the collapsed search control before filling the renamed input.
- Open the View options menu instead of the removed Group by button.
- Assert the persisted grouping under the new dsh.workspace.view.v4 key.
- built-boot: assert the fixture workspace group row instead of its count.
2026-08-12 01:32:08 +08:00
pku-xht
33112b4957 fix(workflow): scope clean-cycle reset to phases 2026-08-12 01:09:03 +08:00
Huanqi Cao
0c0a2a2b65 fix(gate): allowlist the cordis preset id in the rescope check
The preset-roster loop added by this PR names the \cordis\ preset id in
apps/cli/tests/windows-shell.spec.ts; the bare token is product data like
the existing agent-preset allowlist entries, not a package reference, so
the rescope-vendor hygiene check must not rewrite it.
2026-08-12 01:02:31 +08:00
pku-xht
1b91e5b4fe fix(workflow): refold coalesced disclosure cycles 2026-08-12 01:01:25 +08:00
Ziya
dd0898ad9c Merge branch 'master' into agent/black-whale-logo 2026-08-12 00:54:39 +08:00
pku-xht
3dff212c5d feat(workflow): auto-follow run and phase disclosures 2026-08-12 00:38:46 +08:00
imccyu
7c3bd75bcc test(remotes): unwrap the Remote envelope in the built-lib chain
Every generated method resolves to RemoteResult, so the plain-Node script
must read the business value through `.value`: the CAS ref it passed on to
goals/edit was undefined, which the client codec rejected before the request
left. The invalid-payload case keeps its try/catch — a codec-rejected
argument still throws at the Client Remote face rather than folding into the
error branch.
2026-08-11 23:56:39 +08:00
ZiyaZhang
d5820df03b fix(web): stabilize hero whale hover 2026-08-11 08:53:39 -07:00
pku-xht
0c232cf5b8 fix(subprocess): prioritize host-exit cleanup listener 2026-08-11 23:46:16 +08:00
imccyu
b0d3686f57 fix: pkg 2026-08-11 23:33:18 +08:00
imccyu
9b2925e50f fix: restore the credential-rejected branch and admit SRC absence by key
Review follow-ups that are logic rather than documentation:

- rpc.schema.ts had lost the credential-rejected branch while api-proxy.ts
  still returns that code, so a legitimate business error failed the
  client's response parse. Restore the branch and assert it.
- rpc-schemas.spec.ts had lost the workspace list, archiveSession and
  insertSessionBefore cases along with the command schemas; those routes
  still ship, so restore their coverage.
- An omitted SRC field is now recognized by an absent key instead of an
  undefined value, which makes the allowance assertExactArguments already
  granted reachable; an explicitly undefined field stays invalid input. A
  weak descriptor's undefined result rides the wire as an absent value,
  matching the envelope removal.
- The chooser unmounts an already-created backend when the surface entry
  fails to load, and no longer reverses the captured id array in place.
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
91e7b3d086 test(apiproxy): drop the carrier-signal case for the removed command route
`command.execute` no longer exists on the API Proxy, and the fake's own
handler went with it, so the case only reached a 404 body. The same carrier
behaviour is asserted on live routes by its `session.search`,
`subagent.prompt` and `host.pickDirectory` siblings.
2026-08-11 23:33:18 +08:00
imccyu
dffc0a9a15 test(gateway): pin each folded carrier failure message verbatim
Matching the full `RemoteFailure` keeps the assertion inside the typed result
and drops the `expect.stringContaining` placeholders, whose `any` return the
lint rule rejects on assignment.
2026-08-11 23:33:18 +08:00