Commit Graph
2610 Commits
Author SHA1 Message Date
pku-xht f6fb074036 refactor(i18n): remove obsolete link lookup 2026-08-18 20:19:38 +08:00
pku-xht df11a8af92 fix(i18n): scope switcher and merge validation 2026-08-18 20:05:01 +08:00
pku-xht 205159049f Merge master at 44f371c into localized Chinese links 2026-08-18 19:50:29 +08:00
pku-xht 1c253f7c5a refactor(i18n): narrow link normalization 2026-08-18 19:41:52 +08:00
pku-xht 08ec2622b0 fix(i18n): share Markdown link parsing 2026-08-18 19:37:53 +08:00
pku-xht c119710560 Merge pull request #2579 from deepseek-harness/codex/installable-codex-provider
feat(subagent): make Codex provider directly installable
2026-08-18 19:37:21 +08:00
pku-xht 1df24165d0 Merge pull request #2392 from deepseek-harness/codex/installable-product-subagents
feat(subagent): make Claude Code provider directly installable
2026-08-18 19:33:03 +08:00
pku-xht 8729f38015 Merge master at 43f08ef into localized Chinese links 2026-08-18 19:13:47 +08:00
pku-xht 8d3674695b docs(i18n): localize Chinese internal links 2026-08-18 19:00:37 +08:00
pku-xht 1ec9c0c4a6 Merge codex/installable-product-subagents into codex/installable-codex-provider 2026-08-18 18:29:37 +08:00
pku-xht b1a895640e Merge master into codex/installable-product-subagents 2026-08-18 18:11:42 +08:00
Chinesezjc 9301def7eb fix(locale): tighten parity gate and correct copy-source wording
Address the three open review threads on the dictionary parity gate.

Regex/TEXT: localeOf now requires an uppercase ASCII [A-Z] flat-letter at
the third position of a name-prefix shape, so zh2Foo/zh_probe are no longer
treated as dictionaries in localeOf while the admission pre-filter skips
them. The two now agree exactly.

register detection now also admits a bare register identifier callee in
addition to a property access, covering a future destructured
register(NS, 'zh'|'en', dict) call instead of silently dropping it.

A 3-arg register whose dictionary argument is a local variable is resolved
through module-scope const initializers; one that cannot be resolved to an
object literal makes the gate refuse with a named error rather than skipping
the registration and narrowing the sweep.

Also restate the FALLBACK_LOCALE rationale: the residual case points at
English because a browser naming neither shipped language is the reader
least likely to read Chinese, not because English is the copy's source
language (Chinese is; packages/client/AGENTS.md). Sync the identical claim
in the bilingual Agent Note and re-record its .i18n.yaml pairing.
2026-08-18 17:56:49 +08:00
Chinesezjc e78fdf05fe Merge branch 'master' of github.com:deepseek-harness/deepseek-harness into fix/locale-default-english 2026-08-18 17:38:33 +08:00
lsdsjy c1c955bb09 feat(community,infra): publish README assets through CDN 2026-08-18 16:21:54 +08:00
Chinesezjc 8e2785d9eb fix(locale): cover direct register() dictionaries and assert <html lang> assembled
The parity gate recognized only a `[['zh',{...}],['en',{...}]]` array, so the
two separate ctx.locale.register(NS, 'zh'|'en', {...}) calls in
ui-permission-presets were unchecked: deleting a key from one side left the
gate green. Pair those calls by their namespace argument. Widen the pre-filter
to admit zhSettings/accessZh spellings, which a bare \b(zh|en)\b misses and
would have skipped before parsing.

Assert document.documentElement.lang in the assembled app. The served markup
already ships lang="en", so the fr-FR scenario passes whether or not the sync
runs; the zh scenario is the discriminating half and now asserts zh-CN before
the switch and en after it.

Drop the dead vi.unstubAllGlobals() from the document-language spec, which
manages navigator with defineProperty and never calls vi.stubGlobal.
2026-08-18 13:28:18 +08:00
Chinesezjc cb0d835582 Merge remote-tracking branch 'origin/master' into fix/locale-default-english 2026-08-18 12:48:52 +08:00
Chinesezjc 6e9b2560a3 fix(locale): keep the test-runtime devDependency and narrow the parity gate catch
Restore @deepseek-ai/dsh-client-test-runtime in ui-settings-general: the
package still imports bindSnapshotSelector from it in
tests/components.client.spec.tsx, so removing it was manifest drift. The
earlier knip report predated that file arriving on this branch.

Swallow only ENOENT when reading a directory in the parity gate. A broad catch
treated EACCES or an I/O failure as "absent", which would narrow the sweep and
let the gate pass while checking less.
2026-08-18 12:25:09 +08:00
Chinesezjc 9de06952ab fix(locale): persist an explicit pick of the provisional locale
setLocale returned early when the id already matched the active locale, so
choosing the language already on screen wrote nothing. That value may be a
provisional browser-derived or fallback resolution nothing has stored, so a
different browser sharing the DSH home still resolved on its own. Write
unconditionally; keep the render publish conditional.

Broaden the dictionary parity gate to every workspace package, pair zh/en
across sibling files and inline registrations, and fail when a dictionary has
no counterpart. It previously scanned only packages/client and packages/
extensions, compared within a single module, and silently skipped unpaired
dictionaries -- so the split locales/zh.ts + en.ts common pair, the inline
directory-picker-browse dictionary, and session-log-export were unchecked.
Normalize paths at ingestion so the sweep does not narrow on Windows.

Regenerate the client API catalog and update the locale README pair: both
described the old zh fallback direction.

Add the English fallback dialog golden, and drop a dead afterEach plus the
blank lines left where the dead browser-language pins were removed.
2026-08-18 12:18:03 +08:00
Dudu-0223 570aff0e27 refactor(team): incubate Agent Teams packages 2026-08-18 11:58:11 +08:00
Dudu-0223 3546f595b9 feat(team): add durable Agent Teams runtime 2026-08-18 11:58:11 +08:00
creatixchu 609ee2facf Merge remote-tracking branch 'origin/master' into worktree/image-dimension-limit 2026-08-18 11:12:56 +08:00
Chinesezjc acc9359a53 Merge remote-tracking branch 'origin/master' into fix/locale-default-english
# Conflicts:
#	packages/client/ui-settings-models/tests/apply.client.spec.ts
#	packages/client/ui-settings-plugins/tests/apply.client.spec.ts
#	packages/client/ui-theme/tests/apply.client.spec.ts
2026-08-18 10:53:18 +08:00
imccyu d9ea5da2ff fix(ci): satisfy client script quality gates 2026-08-18 02:07:09 +08:00
imccyu 8088d2a6a0 fix(client): harden bootstrap invariants 2026-08-18 01:34:55 +08:00
imccyu 1c94446a56 fix(client): preserve dependency boundary cleanup 2026-08-18 01:34:54 +08:00
imccyu cf603b847f fix(client): complete dynamic module bootstrap 2026-08-18 01:34:53 +08:00
imccyu aa03eff500 build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
imccyu e1777b7891 fix(client): tighten UI ownership boundaries 2026-08-18 01:34:25 +08:00
imccyu cf5e686408 refactor(client): merge React bindings into UI renderer 2026-08-18 01:34:23 +08:00
imccyu f37bc082c5 refactor(client): move web rendering into a dynamic plugin 2026-08-18 01:34:21 +08:00
creatixchu 0e39055121 fix(attachment): refuse oversized image sides at admission
An image with a side above the deployed routes' 2000px many-image bound
could be durably committed by read_image, ride every later request, and
permanently fail the session with provider 400s. Admission now enforces a
configurable maxImageDimension (default 2000) during the full decode, so
read_image surfaces a recoverable tool error naming the limit instead of
poisoning durable history; the Web composer gets dedicated copy for the
new IMAGE_DIMENSION_TOO_LARGE reason.

Fixes #2626
2026-08-17 20:49:08 +08:00
Chinesezjc d496d48c4b Merge remote-tracking branch 'origin/master' into fix/locale-default-english 2026-08-17 20:28:21 +08:00
Chinesezjc 94135092a5 fix(locale): open in English when the browser names no shipped language
The provisional locale fell back to zh, so a browser asking for neither
zh nor en (fr, de) opened the product in Chinese. Resolve to en instead,
and use en as the dictionary fallback: the shipped zh/en dictionaries
declare identical key sets, so one constant serves both roles.

Add scripts/locale-dictionary-parity.spec.ts to gate that symmetry, and
set the asserted locale explicitly in specs that had relied on the old
zh fallback through a dead usePinnedBrowserLanguages call (those files
declare no jsdom environment, so browser detection never ran there).
2026-08-17 18:55:28 +08:00
Chinesezjc 177fbfad4f Merge remote-tracking branch 'origin/master' into feat/code-runtime-python-protocol 2026-08-17 18:52:50 +08:00
Tianyi Cui 8822d6744f Merge pull request #2252 from deepseek-harness/worktree/fix-1463-rich-content-bridge
fix: bridge durable image content across MCP and ACP
2026-08-17 18:38:01 +08:00
_Kerman cc68bbf382 Merge pull request #2517 from deepseek-harness/xtr/node-pty-1.2-beta
chore(subprocess-local): bump node-pty beta
2026-08-17 18:12:16 +08:00
Chinesezjc b90b45158e Merge remote-tracking branch 'origin/master' into feat/code-runtime-python-protocol
Resolutions:

- docs/module-graph.md, docs/config-catalog.md: generated files. Regenerated
  with gen-module-graph and gen-config-catalog on the merged tree, then carried
  the new package's entries into the Chinese sides and re-recorded both
  pairings. Each side now differs from master by exactly the
  code-runtime-python rows.
- scripts/verify-package-readme-model-experience.ts, tsconfig.host.json: master
  renamed packages/bash -> packages/shell, packages/pty -> packages/terminal,
  code-runtime-worker -> code-runtime-worker-thread and agent-tool-mode ->
  agent-tool-presentation. Kept master's names and re-added this branch's
  code-runtime-python entry.

Adapted the package to conventions master introduced while the branch was open:
version 0.1.0-rc.6 with publishConfig.access "public" (the release-member rule
check-workspace-constraints now enforces), the invariants project reference
moved to packages/runtime-diagnostics/invariants, and the README companion link
retargeted to code-runtime-worker-thread.
2026-08-17 17:26:11 +08:00
Yichen Jiang 47d6760052 Merge branch 'master' into worktree/python-sdk-model-visible-assertions 2026-08-17 17:01:52 +08:00
Yichen Jiang 8692a1b76b test(python): pin the minimal composition's model-visible surface
The Python lane never compared what the minimal composition shows the
model: the mock model only asserted system-role messages, and the
advanced snapshot tokenizes the assembled system prompt and tool
schemas.

The sdk-minimal scenario now records model-visible.json — every model
request's advertised tool schemas verbatim and its message list, with
system and user text kept and assistant/tool payloads reduced to call
identity so the expected output replays on macOS and Linux. It excludes
the dynamic runtime-context snapshot, which the same composition emits
on macOS and not on Linux (#2488).

AGENTS.md and the testing policy name both SDKs as independent
projections of the agent loop, session lifecycle, and SessionEventMap.
2026-08-17 16:49:14 +08:00
Tianyi Cui 5139329d29 Merge remote-tracking branch 'origin/master' into worktree/fix-1463-rich-content-bridge 2026-08-17 13:56:17 +08:00
Tianyi Cui b2f23f88ad Merge commit '70396085b141370ce32de1be4e225b4384eaf46d' into HEAD
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.md
#	.agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
#	.agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml
#	docs/config-catalog.i18n.yaml
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/tool-catalog.i18n.yaml
#	docs/tool-catalog.md
#	docs/tool-catalog.zh.md
#	examples/acp-agent/tests/snapshots/advanced-toolchain/tool-schemas.expected.json
#	examples/acp-agent/tests/snapshots/both-mode-turn/tool-schemas.expected.json
#	examples/acp-agent/tests/snapshots/code-mode-turn/tool-schemas.expected.json
#	packages/core/tools/README.i18n.yaml
#	packages/core/tools/README.zh.md
#	packages/core/tools/src/code-mode.ts
#	packages/host/apiproxy/tests/api-proxy-models.spec.ts
#	packages/host/plugin-inventory/tests/inventory.spec.ts
#	packages/mcp/mcp-client/tests/mcp-client.e2e.ts
#	packages/mcp/mcp-client/tests/mcp-client.spec.ts
#	packages/self-modification/tool-cordis/src/api-catalog.ts
#	packages/test-support/acp-snapshot/README.i18n.yaml
#	pnpm-lock.yaml
2026-08-17 11:31:59 +08:00
Yichen Jiang 7e95a00c8a fix(llm): align replay state with assembled content and degrade unusable state
A max-tokens response that included a tool call persisted assembler-transformed
content next to replay metadata projected from the untransformed native message,
so the next request died in history reconstruction with INVALID_REPLAY_STATE and
the session stayed permanently stuck.

Write side: the finish chunk's replayState becomes a typed ReplayEnvelope —
opaque response-level metadata plus optional per-block entries aligned with the
emitted block sequence. BlockAssembler computes one keep/drop decision for
blocks and entries together, so stored metadata always describes stored content
and retained blocks keep their signatures. pi-ai splits its state into a
version-2 response half and per-block signature entries.

Read side: durable content is authoritative. toPiAssistant degrades any
unusable state — foreign kind, other versions (including the flat v1 form
already on disk), malformed metadata, or content/block mismatches — to the
existing provider-neutral conversion with an onReplayDegrade diagnostic instead
of failing the request, which un-bricks sessions poisoned before this change.

Covered by assembler and replay unit tests, an agent-loop continuation
regression, keyless real-composition continuation tests (native pruned-envelope
replay and legacy flat-state degrade), and the authored keyless snapshot
scenario max-tokens-continue through the assembled ACP app.
2026-08-15 16:07:30 +08:00
pku-xht cb229c8964 refactor(infra): keep Codex notices direct 2026-08-15 05:26:12 +08:00
pku-xht d1a767c66b test(infra): isolate Codex alias fixture 2026-08-15 04:32:30 +08:00
pku-xht b6c52c82bb fix(infra): resolve Codex notices from wrapper 2026-08-15 03:52:23 +08:00
pku-xht b2178ade80 feat(subagent): make Codex provider directly installable 2026-08-15 03:25:43 +08:00
imccyu f2830fec6d Revert "fix(client): declare browser-only externals as devDependencies" 2026-08-15 02:19:09 +08:00
imccyu b6d0195d5f fix(scripts): resolve workspace names to source in the notices dry run
The shell's Vite config aliases a few workspace packages to source; every other
workspace name resolved through node_modules to a lib/ entry the real build has
emitted but a clean checkout has not, so the generator only worked on a built
tree — and a static gate has to pass on a clean one. The dry run now supplies
source aliases for the names the shell leaves out.

Aliases rather than the recorder's resolveId hook, because Vite resolves a
stylesheet @import through aliases alone, and the theme package publishes its
stylesheets from lib/styles/. lib/ is compiled from src/, and the recorded set is
identical either way: 24 packages on a built tree and on a clean one.
2026-08-14 22:35:11 +08:00
imccyu 1fae5dc40e fix(scripts): disclose browser-bundled packages as shipped
Moving react, shiki, katex and the markdown pipeline to devDependencies took
them out of the notices runtime tier, which tiers by declaring section — yet
their code is inside lib/client.js and the shell dist. The generator now learns
what the browser artifacts carry from the real build configs: each client bundle
through its own tsdown config, the shell through apps/web's Vite config, with a
recorder that resolves each bare specifier, notes the package behind it, and
stops there. About three seconds, and only packages a resolved file backs, so a
bundler's virtual module is not mistaken for a shipped one.

Net effect on the file: the type-only packages @types/mdast and
micromark-util-types move to the development tier, because neither ships code.
2026-08-14 22:24:23 +08:00
imccyu 6e77499326 feat(scripts): gate browser-only dependencies out of the install face
verify-client-runtime-deps walks each package's host and browser faces from the
entries its manifest publishes, over the bound host and client Programs, and
reports an external package no host-face reference reaches. Wired into hygiene.

A workspace name is out of scope: it also states which package supplies an
injected service or a mounted Remote contribution, and the app installs it
either way. A package whose published Node entry has no source counterpart is
skipped and named, because a generated artifact carries imports no source
states.
2026-08-14 20:18:35 +08:00