48 Commits
Author SHA1 Message Date
_Kerman a53ecb2f3a Merge origin/master into xtr/tool-executor-plugins 2026-10-21 15:56:44 +08:00
_Kerman ffe122ffd4 docs(tools): document executor plugins and migration 2026-10-19 14:50:00 +08:00
_Kerman 7aaa6b3c5a refactor(agent): deprecate the agent/request hook 2026-10-15 20:00:19 +08:00
Turtle e7def469e1 feat(i18n): key translation pairing records by heading section (#5036)
* feat(i18n): key translation pairing records by heading section

Replace the whole-file blob hashes in *.i18n.yaml with one entry per
heading section that still holds language-specific content, keyed by the
English heading-slug path. Blocks identical across the pair (generated
table rows, code blocks, shared regions) stay out of the hash, so edits to
different sections and identical regenerations merge with Git's default
text merge, including on GitHub.

Remove the dsh-translation-pairing merge driver, its resolver command and
installer wiring; gen-translation-brief recovers last-confirmed text from
commit history. Migrate all active records, archive the superseded Agent
Note, and record the replayed conflict reduction in the new one.

* test(i18n): refresh translation prompt snapshot for the terminology note

* feat(i18n): exclude only code blocks and generated regions from pairing records

Replace byte-equality masking with an explicit rule: a record hash skips
fenced code blocks and BEGIN/END GENERATED regions, the two kinds of
content the pairing gate already requires to be identical on both sides.

Move generated data into regions written into both pages:
gen-config-catalog renders both languages and the record with per-package
regions labelled by code identifiers; gen-module-graph keeps its table in a
region; gen-doc-graphs splices the event matrix regions into the Chinese
page. Add a generic region splice beside the region grammar.
2026-09-23 22:32:06 +08:00
Turtle 3f7016a422 feat(config): add volatile schemas and watcher-driven updates (#4579)
* feat(cordis): add volatile config references without remounting

* refactor(cordis): use internal prefix for volatile updates

* fix(schemastery): preserve metadata-free serialized schemas

* refactor(config): move volatile updates into an opt-in Loader plugin

* refactor(config): reuse Loader context patch for volatile updates

* refactor(config): let the volatile watcher commit equal candidates

* refactor(config): separate comparison from volatile reconciliation

* refactor(loader): extract pure entry option diff

* refactor(loader): compare volatile config through schema metadata

* refactor(loader): make volatile comparison policy explicit

* refactor: name config reload and volatile HMR events

* refactor(loader): compare volatile config in one schema walk; declare hmr/volatile-update in volatile-hmr

Replace the mask/project pair in vendor/loader/src/config/diff.ts with one recursive schema-guided comparison. Absent objects now compare as their declared schema default at every object node, not only under volatile ancestors; both inputs resolve to the same validated config, so the one changed assertion (undefined vs {} under a non-volatile object schema) becomes unchanged. The isJsExpr special case is dropped: expression keys fall through to raw comparison.

Move the hmr/volatile-update Events declaration from vendored Cordis core to its producer, packages/boot/volatile-hmr, matching how dsh-hmr declares hmr/change and hmr/reload. Vendored cordis events.ts returns to upstream content; the inherited Cordis API catalog and the event matrix are regenerated, and the tutorial example imports the package types.

* fix(cosmokit): compare sparse array slots in deepEqual; extend volatile diff coverage

Array.prototype.every skipped holes, so deepEqual(Array(1), ['new']) was true in one direction. Compare every index with holes read as undefined.

config/diff.ts treats expression objects as opaque values even when a schema field shares the marker name, and looks up field schemas with Object.hasOwn so unknown keys named after Object prototype members compare raw. Tests cover absent-object defaults, sparse arrays in both directions, prototype-named keys, metadata-free serialized schema nodes, and a runtime remount check in volatile-hmr. READMEs and the architecture note describe the object-default rule.

* test(schemastery): build serialized schema fixtures without unknown casts

verify-no-unknown-casts rejects the two as-unknown assertions in scripts/volatile-config.spec.ts. Parse the serialized nodes from JSON text instead, matching scripts/loader-config-diff.spec.ts.

* docs(volatile-hmr): drop the scope-scan tag from hmr/volatile-update

verify-scoped-events rejects @dshScopeScan on an event that carries no scoped keys. Catalogs and the event matrix are regenerated.

* docs: regenerate module graph for the volatile-hmr dependency edge

verify-module-graph reports the merged docs stale: volatile-hmr now lists its app-boot dependency.

* test(volatile-hmr): watch the real YAML through an exact config watch

The Windows coverage lane lost the whole spec: its vitest worker exited without a report once this test started a chokidar directory watch (root: ['.']), the only real directory watch in the test suite. Register the include file through hmr.watchConfig instead, the pattern the HMR package's own real-file tests run on Windows, and emit loader/config-reload from the refresh callback as the root-watch path does. packages/boot/hmr/tests/coordination.spec.ts already covers that root-watch emission with a mocked watcher; volatile-hmr and hmr sources stay at 100% coverage.

* test(volatile-hmr): pass the Include path as a file URL

On Windows the plain absolute path made the include subtree fail to load, so the profile-patch test found no consumer entry. Other Include fixtures in this spec already pass file URLs.

* refactor(loader): commit volatile config in Entry.update and remove volatile-hmr

loader/config-reload was emitted from two places (app-boot profile reconciliation and the HMR root watch) and by hand in tests, because a separate plugin needed a "configuration applied" signal to run its own pass. Every update path already funnels through Entry.update, which is where the Loader decides to skip a remount for a volatile-only change. Entry._commitVolatile now parses the candidate through the fiber's internal/config hook and schema, commits the new values into the running references when the ordinary effective values still match, and emits loader/volatile-update to the owning fiber. A changed ordinary effective value falls back to the ordinary remount instead of leaving the instance stale; an invalid candidate is logged and keeps the running references, with the raw config retained for the next activation. Forced group updates take the same path.

Remove packages/boot/volatile-hmr, its event, the app-boot loader/config-reload declaration and emit, and the HMR emission. Loader runtime and real-file tests move to scripts/loader-volatile-update.spec.ts. Docs, catalogs, the event matrix, module graph and the architecture note follow.

* test: share the volatile schema fixture between the schema and Loader specs

The duplication gate flagged the identical Config fixture in scripts/volatile-config.spec.ts and scripts/loader-volatile-update.spec.ts.

* refactor(loader): reduce config/diff.ts to equalExceptVolatile

Entry.update now computes the strict raw option changes itself and only asks diff.ts whether two raw configs differ at most in volatile fields. The ignoreVolatile flag, the options object and the "config is the sole change" rule leave diff.ts; they were the Loader's decision and now sit next to the commit they gate. The raw-config deepEqual in the volatile branch is gone because the strict change list already answers it.

* refactor(loader): type the volatile comparison against Schemastery's Schema

config/diff.ts narrows the plugin's Standard Schema to Schemastery's own Schema type instead of a hand-written structural interface, which makes vendor/loader a type-only dependent of @deepseek-ai/schemastery. The rescope codemod treats the vendor identifier comparison like schemastery's own source and renames the import through an exact edit.

* fix(loader): address review findings on the volatile commit path

Entry.update only replaces the fiber's pending raw config for a volatile-only change, so a noSave direct update survives a no-op entry update. _commitVolatile logs at debug level when ordinary effective values changed and the ordinary update applies, dispatches loader/volatile-update with a Context receiver like Cordis' own filtered emits, and isolates a throwing listener. Schemastery reports unsupported volatile values as ValidationError with their path and validates a lazy inner once when it is built. The inherited-event catalog gains internal/config and corrected source lines; the Loader spec imports dsh-hmr by package name and covers the new behaviors. Docs record that class-instance ordinary fields always take the remount path and that .default() accepts the raw input type.
2026-09-21 00:04:06 +08:00
Turtle d06e6b5519 feat: coordinate profile management through dsh-hmr 2026-09-14 23:09:06 +08:00
imccyu 795d8ec985 docs: describe runtime dependency ownership 2026-08-30 02:29:53 +08:00
_Kerman 9365ef496d Merge remote-tracking branch 'origin/master' into xtr/message-tool-call-id
# Conflicts:
#	packages/acp/acp/tests/approval.spec.ts
#	packages/acp/acp/tests/edges.spec.ts
#	packages/api/session-controller/tests/event-script.client.ts
#	packages/client/connection/src/client/fixture.ts
#	packages/client/ui-conversation/src/client/contract/slots.ts
#	packages/client/ui-conversation/src/client/contract/views.ts
#	packages/client/ui-conversation/src/client/index.ts
#	packages/client/ui-conversation/src/client/stores.ts
#	packages/core/agent-loop/tests/loop.spec.ts
#	packages/extensions/cordis-client-runner/src/client/slot-catalog.ts
#	packages/extensions/tool-cordis/src/api-catalog.ts
#	packages/host/apiproxy/src/api-proxy.ts
#	packages/host/apiproxy/src/api/events.ts
#	packages/host/apiproxy/tests/api-proxy-view.spec.ts
#	packages/interaction/user-approval/src/index.ts
#	packages/llm/llm-deepseek/tests/adapter.e2e.ts
#	packages/llm/llm-pi-ai/src/context.ts
#	packages/llm/llm-pi-ai/tests/context.spec.ts
#	packages/llm/llm/tests/content.spec.ts
#	packages/subagent/subagent/tests/continuation.spec.ts
#	packages/subagent/tool-subagent/tests/tool-subagent.spec.ts
#	packages/test-support/llm-replay/tests/llm-replay.spec.ts
#	packages/todo/tool-todo/tests/tool-todo.spec.ts
#	scripts/gen-persistence-catalog.ts
2026-08-25 14:37:44 +08:00
Tianyi Cui 4125514a08 refactor(repo): retire top-level examples 2026-08-24 22:02:44 +08:00
_Kerman a789637db6 refactor(llm): rename CallId to ToolCallId 2026-08-21 16:10:24 +08:00
pku-xht 8d3674695b docs(i18n): localize Chinese internal links 2026-08-18 19:00:37 +08:00
Turtle 62080d49c2 docs: fix release smoke test failures 2026-08-13 14:20:09 +08:00
Tianyi Cui a2d0f7f411 refactor: apply repository naming contract
Apply the accepted pre-release package, service, type, directory, and role renames as one repository-wide change.
2026-08-13 00:54:38 +08:00
xjt 19c48b2ae3 Merge remote-tracking branch 'origin/master' into docs/post-v3-release-proofreading
# Conflicts:
#	packages/client/ui-models/README.i18n.yaml
#	packages/client/ui-models/README.zh.md
2026-08-12 14:28:09 +08:00
Yichen Jiang 0a2ac90617 docs: fix reference sidebar ordering and group the subsystem pages
The VitePress config declared no position for the subsystem or other-interface
sections, so `indexOf` returned -1 and sorted them ahead of every declared
group: the reference landing page's own sidebar entry sat 1549px below the
fold. Four subsystem pages also shared `order` values with pages in the same
section, resolved only by sort stability and array concatenation order.

Section placement and collapse move into the manifest as a per-locale
declaration, and `sectionSpec` throws for an undeclared section instead of
sorting it silently to the top. Subsystem pages are grouped by concern, the
six topical groups collapse until one holds the page being read, and page
order derives from array position.

The projector drops the language-switcher line and repository badge the
canonical pages carry for their GitHub readers. The navigation bar gains the
DeepSeek wordmark, a release-stage tag, and a favicon; the sidebar scrollbar
rests invisible and appears while scrolling. Subsystem pages carry a two-level
outline, and the two plugin-development tracks now cross-link.
2026-08-12 13:52:27 +08:00
xjt ab140cd299 Merge remote-tracking branch 'origin/master' into docs/post-v3-release-proofreading
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-20-dsh-cli-personal-config.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-20-dsh-cli-personal-config.zh.md
#	.agents/notes/implemented/feature/2026-07-25-session-list-browsing-and-manual-order.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-25-session-list-browsing-and-manual-order.zh.md
#	.agents/notes/implemented/feature/2026-07-25-workspace-ui-product-flow.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-25-workspace-ui-product-flow.zh.md
#	.agents/notes/implemented/feature/2026-07-26-code-dispatch-ui-foundation.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-26-code-dispatch-ui-foundation.zh.md
#	docs/user/develop/basic/index.i18n.yaml
#	docs/user/develop/basic/index.zh.md
#	docs/user/guide/config.i18n.yaml
#	docs/user/guide/config.zh.md
#	docs/user/guide/providers.i18n.yaml
#	docs/user/guide/providers.zh.md
#	packages/bundle/base/README.i18n.yaml
#	packages/bundle/base/README.zh.md
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/README.zh.md
2026-08-12 12:59:38 +08:00
xjt 4806d94715 docs(i18n): include complete proofreading corpus 2026-08-12 12:30:19 +08:00
Turtle 04fe477e7e docs: make Web UI the primary onboarding path 2026-08-12 11:44:33 +08:00
Huanqi Cao e56b1ccab2 refactor(loader): tighten the disabled gate and rehome the note
Address review: the gate module docstring now states the actual evaluation
contexts (config after injections against the plugin context, disabled at
every mount decision against the loader context); metadataExpressionErrors
rejects expressions nested below disabled and syntax-checks the disabled
expression itself so an unparseable gate fails at the gate instead of the
boot. The tutorial's !!js claims follow, and the loader note moves to
implemented/architecture with its inbound links retargeted.
2026-08-11 18:52:52 +08:00
Turtle d00590c707 docs: replace nonexistent repository references 2026-08-11 12:35:38 +08:00
imccyu ec601ca13d build(vendor): rescope the vendored Cordis packages into @deepseek-ai
Machine-produced by `pnpm run rescope-vendor --apply` plus the regeneration it
prints: `pnpm install` for the lockfile, `pnpm run gen-third-party-notices`,
`verify-translation-pairing --write` for the touched bilingual pairs,
`gen-doc-graphs`, and one typert snapshot whose ids embed character offsets.
`pnpm run rescope-vendor --check` verifies the result.

Renames nine vendored packages (cordis, cosmokit, schemastery and the six
@cordisjs plugins) and every reference that resolves them: manifest names and
dependency keys, module specifiers including declare-module merges, cordis.yml
plugin names, tsconfig paths, every Markdown fence, and `docs/` prose.
Directory names, upstream versions, and dependency ranges are unchanged, so
vendor/README.md still reads as an upstream snapshot; its manifest table gains
an upstream-name column so THIRD_PARTY_NOTICES keeps MIT attribution pointed
at each fork's origin.

The tutorial tier follows the rename end to end: its yaml fences named plugins
the Loader can no longer resolve, its `ts ignore-check` fences disagreed with
the compiled fences beside them, and its prose quoted both. The contracts that
told readers to keep upstream names — the root convention and the vendoring
cookbook's tree comment and manifest invariant — now say to rescope instead.

Two rules read `@deepseek-ai/` as "another workspace plugin": the client bundle
purity gate now names the vendored libraries a browser bundle inlines, and the
files where a bare `cordis` is an agent-preset id keep that product data.
2026-08-10 22:04:13 +08:00
Turtle a27efdef36 docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
Turtle a7fc81d745 docs: replace front door terminology 2026-08-10 13:07:46 +08:00
Tianyi Cui 25dcd7293c docs: purge chain-of-thought leakage from prose
Delete design-session citations (decision/audit/plan ordinals, stack
positions), change narration, review choreography, and reviewer-addressed
justification from comments, JSDoc, docs, READMEs, Agent Notes, tests, and
generator templates; restate every affected fact as current-state contract
prose. Fix generated docs at their sources and regenerate the catalogs and
cordis-surface regions; re-paste type-equiv blocks; update every bilingual
counterpart and re-record the pairs. Record the citation rule in the
committed-artifact-citations Agent Note.
2026-08-09 21:10:59 +08:00
xjt 30e3e5a50c Merge remote-tracking branch 'origin/master' into xjt/generated-docs-zh-translation-apply
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.zh.md
#	.agents/notes/implemented/architecture/2026-07-19-gui-layering-and-rpc-protocol.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-19-gui-layering-and-rpc-protocol.zh.md
#	.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md
#	.agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.zh.md
#	.agents/notes/implemented/architecture/2026-07-28-directory-picker-capability-seam.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-28-directory-picker-capability-seam.zh.md
#	.agents/notes/implemented/architecture/2026-07-30-static-repository-plugin-format.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-30-static-repository-plugin-format.zh.md
#	.agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.zh.md
#	.agents/notes/implemented/architecture/2026-07-31-code-runtime-portable-identifier-seam.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-31-code-runtime-portable-identifier-seam.zh.md
#	.agents/notes/implemented/architecture/2026-08-01-packaged-ripgrep-search.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-01-packaged-ripgrep-search.zh.md
#	.agents/notes/implemented/architecture/2026-08-04-websocket-downlink-carrier.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-04-websocket-downlink-carrier.zh.md
#	.agents/notes/implemented/architecture/2026-08-05-large-session-jsonl-restore-pipeline.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-05-large-session-jsonl-restore-pipeline.zh.md
#	.agents/notes/implemented/architecture/2026-08-06-agent-event-payload-objects.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-06-agent-event-payload-objects.zh.md
#	.agents/notes/implemented/architecture/2026-08-06-subagent-list-identity-projection.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-06-subagent-list-identity-projection.zh.md
#	.agents/notes/implemented/architecture/2026-08-06-web-markdown-incremental-ast-renderer.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-06-web-markdown-incremental-ast-renderer.zh.md
#	.agents/notes/implemented/architecture/2026-08-08-client-tool-presentation-ownership.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-08-client-tool-presentation-ownership.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-27-glob-sampling.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-27-glob-sampling.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-28-themed-scrollbars-and-reserved-gutter.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-28-themed-scrollbars-and-reserved-gutter.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-28-web-gui-feedback-loop.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-28-web-gui-feedback-loop.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-29-web-details-session-lifecycle.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-29-web-details-session-lifecycle.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-31-fork-anchor-floors-to-event-seq.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-31-fork-anchor-floors-to-event-seq.zh.md
#	.agents/notes/implemented/bug-fix/2026-07-31-web-stop-preserves-queue.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-07-31-web-stop-preserves-queue.zh.md
#	.agents/notes/implemented/bug-fix/2026-08-02-goal-round-wrapup-message.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-08-02-goal-round-wrapup-message.zh.md
#	.agents/notes/implemented/bug-fix/2026-08-03-hmr-initial-scan-boot-deadlock.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-08-03-hmr-initial-scan-boot-deadlock.zh.md
#	.agents/notes/implemented/bug-fix/2026-08-06-onboarding-step-owned-takeover-chrome.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-08-06-onboarding-step-owned-takeover-chrome.zh.md
#	.agents/notes/implemented/bug-fix/2026-08-06-provider-credential-lifecycle.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-08-06-provider-credential-lifecycle.zh.md
#	.agents/notes/implemented/bug-fix/2026-08-06-token-surface-unpriced-replace-compatibility.i18n.yaml
#	.agents/notes/implemented/bug-fix/2026-08-06-token-surface-unpriced-replace-compatibility.zh.md
#	.agents/notes/implemented/feature/2026-07-05-skill-system.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-05-skill-system.zh.md
#	.agents/notes/implemented/feature/2026-07-08-background-subagent-tasks.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-08-background-subagent-tasks.zh.md
#	.agents/notes/implemented/feature/2026-07-20-dsh-cli-personal-config.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-20-dsh-cli-personal-config.zh.md
#	.agents/notes/implemented/feature/2026-07-21-continuable-background-subagents.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-21-continuable-background-subagents.zh.md
#	.agents/notes/implemented/feature/2026-07-22-durable-subagent-catalog-and-list-agents.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-22-durable-subagent-catalog-and-list-agents.zh.md
#	.agents/notes/implemented/feature/2026-07-23-web-assistant-markdown.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-23-web-assistant-markdown.zh.md
#	.agents/notes/implemented/feature/2026-07-23-web-permission-and-approval.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-23-web-permission-and-approval.zh.md
#	.agents/notes/implemented/feature/2026-07-25-session-list-browsing-and-manual-order.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-25-session-list-browsing-and-manual-order.zh.md
#	.agents/notes/implemented/feature/2026-07-27-skill-catalog-hot-refresh.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-27-skill-catalog-hot-refresh.zh.md
#	.agents/notes/implemented/feature/2026-07-27-web-session-fork-actions.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-27-web-session-fork-actions.zh.md
#	.agents/notes/implemented/feature/2026-07-27-web-session-search.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-27-web-session-search.zh.md
#	.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.zh.md
#	.agents/notes/implemented/feature/2026-07-28-continuable-subagent-conversations.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-28-continuable-subagent-conversations.zh.md
#	.agents/notes/implemented/feature/2026-07-28-skill-invocation-policy.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-28-skill-invocation-policy.zh.md
#	.agents/notes/implemented/feature/2026-07-28-web-terminal-card.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-28-web-terminal-card.zh.md
#	.agents/notes/implemented/feature/2026-07-30-deepseek-onboarding-credential-setup.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-deepseek-onboarding-credential-setup.zh.md
#	.agents/notes/implemented/feature/2026-07-30-search-render-card.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-search-render-card.zh.md
#	.agents/notes/implemented/feature/2026-07-30-web-diff-card.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-web-diff-card.zh.md
#	.agents/notes/implemented/feature/2026-07-30-web-read-card.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-web-read-card.zh.md
#	.agents/notes/implemented/feature/2026-07-30-web-result-card-frontend.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-web-result-card-frontend.zh.md
#	.agents/notes/implemented/feature/2026-07-30-web-result-card.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-30-web-result-card.zh.md
#	.agents/notes/implemented/feature/2026-07-31-code-mode-language-dispatch.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-31-code-mode-language-dispatch.zh.md
#	.agents/notes/implemented/feature/2026-07-31-telemetry-anonymous-user-id.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-31-telemetry-anonymous-user-id.zh.md
#	.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.zh.md
#	.agents/notes/implemented/feature/2026-08-01-pwsh-tool-and-executor.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-01-pwsh-tool-and-executor.zh.md
#	.agents/notes/implemented/feature/2026-08-02-pwsh-tool-bash-parity.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-02-pwsh-tool-bash-parity.zh.md
#	.agents/notes/implemented/feature/2026-08-02-web-thinking-tail-scroll.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-02-web-thinking-tail-scroll.zh.md
#	.agents/notes/implemented/feature/2026-08-05-pwsh-ui-bash-parity.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-05-pwsh-ui-bash-parity.zh.md
#	.agents/notes/implemented/feature/2026-08-06-resolved-theme-color-metadata.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-06-resolved-theme-color-metadata.zh.md
#	.agents/notes/implemented/feature/2026-08-06-web-skill-tool-row.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-06-web-skill-tool-row.zh.md
#	.agents/notes/implemented/process/2026-06-17-ts-build-config.i18n.yaml
#	.agents/notes/implemented/process/2026-06-17-ts-build-config.zh.md
#	.agents/notes/implemented/process/2026-07-22-tsconfig-solution-root-two-aggregates.i18n.yaml
#	.agents/notes/implemented/process/2026-07-22-tsconfig-solution-root-two-aggregates.zh.md
#	.agents/notes/implemented/process/2026-07-31-installer-adopts-existing-checkout.i18n.yaml
#	.agents/notes/implemented/process/2026-07-31-installer-adopts-existing-checkout.zh.md
#	.agents/notes/implemented/process/2026-08-08-api-remotes-generated-contract-build.i18n.yaml
#	.agents/notes/implemented/process/2026-08-08-api-remotes-generated-contract-build.zh.md
#	.agents/notes/implemented/simplification/2026-07-20-remove-stdio-and-echo-agents.i18n.yaml
#	.agents/notes/implemented/simplification/2026-07-20-remove-stdio-and-echo-agents.zh.md
#	.agents/notes/implemented/simplification/2026-07-26-merge-subagent-control-service.i18n.yaml
#	.agents/notes/implemented/simplification/2026-07-26-merge-subagent-control-service.zh.md
#	.agents/notes/implemented/simplification/2026-07-31-one-route-to-add-a-workspace.i18n.yaml
#	.agents/notes/implemented/simplification/2026-07-31-one-route-to-add-a-workspace.zh.md
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md
#	.agents/notes/proposed/architecture/2026-07-29-durable-last-activity-index.i18n.yaml
#	.agents/notes/proposed/architecture/2026-07-29-durable-last-activity-index.zh.md
#	.agents/notes/proposed/architecture/2026-08-08-semantic-composer-chain-phases.i18n.yaml
#	.agents/notes/proposed/architecture/2026-08-08-semantic-composer-chain-phases.zh.md
#	.agents/notes/proposed/feature/2026-07-17-sdk-follow-up-capabilities.i18n.yaml
#	.agents/notes/proposed/feature/2026-07-17-sdk-follow-up-capabilities.zh.md
#	apps/cli/reference/README.i18n.yaml
#	apps/cli/reference/README.zh.md
#	docs/api-gateway.i18n.yaml
#	docs/api-gateway.zh.md
#	docs/cookbook/adding-a-package.i18n.yaml
#	docs/cookbook/adding-a-package.zh.md
#	docs/cookbook/adding-a-tool.i18n.yaml
#	docs/cookbook/adding-a-tool.zh.md
#	docs/development.i18n.yaml
#	docs/development.zh.md
#	docs/i18n/README.i18n.yaml
#	docs/i18n/README.zh.md
#	docs/i18n/style-samples.md
#	docs/i18n/terminology.md
#	docs/testing.i18n.yaml
#	docs/testing.zh.md
#	examples/web-cordis/README.i18n.yaml
#	examples/web-cordis/README.zh.md
#	packages/api/gateway/README.i18n.yaml
#	packages/api/gateway/README.zh.md
#	packages/bash/bash-env/README.i18n.yaml
#	packages/bash/bash-env/README.zh.md
#	packages/bash/tool-bash/README.i18n.yaml
#	packages/bash/tool-bash/README.zh.md
#	packages/bash/tool-pwsh/README.i18n.yaml
#	packages/bash/tool-pwsh/README.zh.md
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.zh.md
#	packages/client/ui-tool/README.i18n.yaml
#	packages/client/ui-tool/README.zh.md
#	packages/feedback/command-feedback/README.i18n.yaml
#	packages/feedback/command-feedback/README.zh.md
#	packages/host/webserver/README.i18n.yaml
#	packages/host/webserver/README.zh.md
#	packages/pty/tool-bash-persistent/README.i18n.yaml
#	packages/pty/tool-bash-persistent/README.zh.md
#	packages/subagent/subagent-claude-code/README.i18n.yaml
#	packages/subagent/subagent-claude-code/README.zh.md
#	packages/subagent/subagent-codex/README.i18n.yaml
#	packages/subagent/subagent-codex/README.zh.md
#	packages/typert/type-meta/README.i18n.yaml
#	packages/typert/type-meta/README.zh.md
#	packages/util/atomic-write/README.i18n.yaml
#	packages/util/atomic-write/README.zh.md
#	scripts/snapshots/translation-prompt-v4/request-response.expected.json
2026-08-09 13:15:27 +08:00
xjt a7af54a8d3 docs(i18n): standardize contract terminology 2026-08-09 11:33:14 +08:00
xjt 7ff0cbcb7e docs: complete Chinese proofreading and generated reference pairing 2026-08-09 11:02:16 +08:00
Tianyi Cui f7323354bb docs: generate each subsystem's cordis surface into its own page; delete the flat catalogs
Rebuild of the region machinery (PR3) on the post-#904 Typert projection:
renderPageRegion/renderInheritedPage live in dsh-typert-generator beside the
projection; scripts/gen-cordis-catalog.ts owns the curated SERVICE_PAGE /
EVENT_SCOPE_PAGE / SERVICE_WALK_EXEMPTIONS / LINK_MAP partition (fail-loud in
both directions, with the independent Context-merge scan backstopping the
projection's blind spot), spliceRegion, and the guarded pair auto-record.
docs/cordis-catalog/ is deleted: the flat events/services catalogs dissolve
into per-page regions and docs/cordis-catalog/core moves to docs/cordis-api/
with the inherited tier as its own generated page. The partition absorbs the
post-regrouping surface: ctx.typert → invariants.md, ctx.directoryPicker →
workspace.md, skills/* events → skills.md, and the four launcher-provided tui
accessor values join the named exemptions.
2026-08-09 01:31:57 +08:00
Tianyi Cui 6d09c315b9 cleanup: remove private repository references 2026-08-08 01:10:57 +08:00
Tianyi Cui 3dfb16008d docs(config): align environment and credential contracts
Code already treats $DSH_HOME/.env as ordinary launch environment and stores managed credentials in .credentials.yaml, but public docs still described the old store, old precedence, removed literal adapter keys, and the deleted TUI. That directed users to the wrong file and overstated the supported configuration surface.

Update the existing English and Chinese owners in place, document inherited > managed > project > user credential resolution, and record the loadLayeredEnv export. Regenerate only pairing records and the source-line catalog; add no new section or site route.
2026-08-07 22:04:04 +08:00
Turtle 07d24b005f docs: profile scheme across guides, notes, and generated catalogs; Agent Note
Update every doc referencing base.cordis.yml/web.cordis.yml, --config, -p, or
$DSH_HOME/config.yaml to the profile vocabulary with bilingual counterparts
re-recorded; regenerate the catalogs and graphs; add the
profile-plugin-bundles Agent Note recording the design and its rejected
alternatives.
2026-08-06 06:29:06 +08:00
xjt 2db712eec7 docs(i18n): proofread active Chinese documentation 2026-08-04 17:36:14 +08:00
Turtle 10bb9cbf4a cleanup: remove TUI package and legacy dsh entrypoints 2026-08-04 13:20:28 +08:00
Turtle a51143bded fix(cli): close shared config review gaps 2026-07-30 14:56:39 +08:00
Turtle c086de2074 fix(docs): align catalogs with consolidated CLI 2026-07-30 10:34:21 +08:00
Turtle 5dbcedfbba Merge origin/master into feature/shared-cli-config-foundation 2026-07-30 10:11:38 +08:00
Turtle f290a8b851 refactor(cli)!: one shared base config with per-surface overlays
`dsh` shipped two config trees that were 43 rows the same: apps/cli/cordis.yml
composed web as 74 flat rows, while the TUI booted examples/tui-agent/cordis.yml
whose single `@deepseek-ai/dsh-tui-demo` row mounted twelve plugins behind a
twenty-key pass-through Config. Neither file was what its location claimed —
apps/cli hardcoded the "example" as the product default and the "demo" bundle
was the application — and every capability change had to be made twice.

- apps/cli/base.cordis.yml holds the 43 shared rows; tui.cordis.yml and
  web.cordis.yml are patch lists stating only what differs per surface
- overlays apply as SIBLING patch lists at one include level, because include
  patches never cross an include boundary. Precedence: base < surface <
  (--config | personal ~/.dsh/config.yaml) < launcher flag/profile patches
- `--config` now applies an overlay INSTEAD OF the personal one, so a demo or
  test tree never inherits the user's route; new `--config-replace` boots a file
  as the entire tree (the old `--config` behaviour). Both survive /resume
- vendor/include: index each `insert`ed row as it is added so a later patch can
  configure or disable it. Upstream built the id index once before the patch
  loop, leaving every surface-only row — the whole TUI front door — silently
  unpatchable from user config. Logged as local modification 8
- session identity moves to dsh-agent-loop's CONFIGURED_AGENT_IDENTITIES_KEY;
  dsh-tui's MAIN_SESSION_ID_KEY is deleted (only the bundle read it)
- delete examples/tui-agent, examples/cordis-agent, packages/examples/tui-demo;
  TUI tests → apps/cli/tests, cordis e2e → packages/cordis/tool-cordis/tests,
  examples/code-mode survives as an overlay leaf
- `dsh web` gains --config, threaded into AppCLIEntry as an extra overlay

Three latent defects surfaced and are fixed here: the TUI captured the optional
sessionQuery service once at construction and could permanently disable /resume
when it won the mount race; the session-store root silently reverted to a
project-local ./.sessions; --config-replace was dropped by the resume handoff.

Verified by booting each tree through the real Loader (TUI 55 entries, web 75,
zero unsettled) rather than reading YAML. All eight terminal snapshots replay
byte-identically; 14/14 PTY smoke, 112/112 snapshots, 25/25 doc-sync, hygiene
and lint clean.
2026-07-29 21:15:42 +08:00
Tianyi Cui 30db52fa4b docs: translate remaining non-README documentation 2026-07-26 02:33:29 +08:00
Tianyi Cui eb0cc4eb18 refactor: drop obsolete expose-internals flag 2026-07-23 20:35:09 +08:00
Tianyi Cui 625e8f0ed2 docs: update tutorial for canonical tool output 2026-07-23 18:04:49 +08:00
Turtle 1f9633a8ce docs(cordis-tutorial): address review — effect-wrap demo timer, drop entry-order promise, stable ids in HMR example 2026-07-22 18:59:05 +08:00
Turtle 2cbb7848a7 docs(cordis-tutorial): trim API-key aside from full-agent pointer 2026-07-22 18:37:13 +08:00
Turtle 5fe5a6bc78 docs(cordis-tutorial): drop 'What belongs in config' section 2026-07-22 18:30:04 +08:00
Turtle 484b5f5a06 docs(cordis-tutorial): say short-circuit instead of veto 2026-07-22 17:44:31 +08:00
Turtle 1df2445072 docs(cordis-tutorial): rename 'Dependencies are live' heading to state the mechanism 2026-07-22 17:24:03 +08:00
Turtle bbcc8faa95 docs(cordis-tutorial): note PENDING fibers do not keep Node alive 2026-07-22 17:19:46 +08:00
Turtle 1628f50283 docs(cordis-tutorial): clarify ctx.plugin function form; add dsh badge to every chapter 2026-07-22 17:07:15 +08:00
Turtle 21456a36ca docs: add hands-on Cordis tutorial
Seven-chapter tutorial under docs/cordis-tutorial/ for agent developers
new to Cordis: first plugin, lifecycle/effects, services, events,
config, composition/HMR, and a final chapter registering a tool against
real harness services. Every transcript was produced by running the
chapter files in a gitignored tmp/ scratch directory.

Published to both website locales as mirrored English pages under a new
'Cordis tutorial' develop-sidebar section; a Chinese pair can be added
later without route changes.
2026-07-22 16:36:48 +08:00