Merge remote-tracking branch 'origin/master' into feat/loader-entry-disabled-interpolation

This commit is contained in:
Huanqi Cao
2026-08-11 20:00:54 +08:00
428 changed files with 8913 additions and 2452 deletions
+4 -8
View File
@@ -122,6 +122,7 @@ export const SERVICE_WALK_EXEMPTIONS: Record<string, string> = {
apiProxy: 'interface-typed (ApiProxy) with the class in api-proxy.ts, not index.ts — packages/host/apiproxy/README.md owns the API',
appShell: 'client-side interface-typed browser service — packages/client/web/README.md owns the API',
connection: 'client-side interface-typed browser service — packages/client/connection/README.md owns the API',
settingsScope: 'client-side settings-namespace transport service — packages/client/ui-settings/README.md owns the API',
chatFileMentions: 'client-side slot-contract accessor (ChatFileMentions) — packages/client/ui-conversation/README.md owns the API',
command: 'client-side interface-typed browser service — packages/client/ui-command/README.md owns the API',
conversation: 'client-side interface-typed browser service — packages/client/ui-conversation/README.md owns the API',
@@ -148,6 +149,7 @@ export const SERVICE_WALK_EXEMPTIONS: Record<string, string> = {
export const EVENT_SCOPE_PAGE: Record<string, string> = {
'agent': 'core.md',
'agent-loop': 'core.md',
'agent-preset': 'core.md',
'approval': 'approval.md',
'commands': 'commands.md',
'credentials': 'credentials.md',
@@ -172,18 +174,12 @@ export const EVENT_SCOPE_PAGE: Record<string, string> = {
* scan reads EVERY `declare module '@deepseek-ai/cordis'` Events merge under
* `packages/x/x/src/**`, so a declared event either renders onto a subsystems
* page (via {@link EVENT_SCOPE_PAGE}) or names itself here — never vanishes
* silently. Keys are full event names, not scopes: client-face events share
* scopes with rendered host events (`commands/changed` beside `commands/*`),
* so a scope-level exemption would mask a host-face regression.
* silently. Keys are full event names rather than scopes, so a scope-level
* exemption cannot mask another declaration in that scope.
*/
export const EVENT_WALK_EXEMPTIONS: Record<string, string> = {
'commands/changed': 'client-face registry invalidation signal — packages/client/runtime/README.md owns the API',
'connection/reset': 'client-face transport signal — packages/client/runtime/README.md owns the API',
'credentials/changed': 'client-face registry invalidation signal — packages/client/runtime/README.md owns the API',
'locale/change': 'client-face locale switch signal — packages/client/locale/README.md owns the API',
'models/changed': 'client-face registry invalidation signal — packages/client/runtime/README.md owns the API',
'session/preset-changed': 'client-face per-session catalog invalidation signal — packages/client/runtime/README.md owns the API',
'settings/changed': 'client-face registry invalidation signal — packages/client/runtime/README.md owns the API',
'slash/input-begin-command': 'client-face slash-input protocol — packages/client/ui-slash/README.md owns the API',
'slash/input-consume-token': 'client-face slash-input protocol — packages/client/ui-slash/README.md owns the API',
'slash/input-insert-reference': 'client-face slash-input protocol — packages/client/ui-slash/README.md owns the API',
+2 -4
View File
@@ -758,10 +758,8 @@ const EVENT_API_METHODS = new Set(['on', 'once', 'emit', 'parallel', 'serial', '
* documents why: one program cannot hold both faces' Context merges), so a
* Client package enters only when a host file imports it. Client-face
* listeners on client-face events are therefore under-reported —
* `connection/reset` omits `ui-skill`/`ui-agent-preset`, `models/changed`
* omits `ui-model`, `session/preset-changed` omits `ui-skill`. Closing it
* needs a second Client program whose relations merge into these, not a
* wider seed.
* `connection/reset` omits `ui-skill`/`ui-agent-preset`. Closing it needs a
* second Client program whose relations merge into these, not a wider seed.
*/
export class EventRelationCollector {
private readonly relations = new Map<string, EventRelation>()
+15 -2
View File
@@ -251,6 +251,19 @@ describe('rewriteMarkdown', () => {
})
describe('docsPages locale routes', () => {
it('redirects both locale roots to their locale-relative quick-start page', () => {
const homes = docsPages.filter(page => page.sidebar === null)
expect(homes.map(page => page.route).sort()).toEqual(['en/index.md', 'index.md'])
for (const page of homes) {
const source = readFileSync(resolve(repositoryRoot, page.source), 'utf8')
const projected = projectedPageContent(source, page)
expect(projected).toContain('layout: false')
expect(projected).toContain('http-equiv: refresh')
expect(projected).toContain('content: 0; url=./guide/quickstart')
expect(projected).not.toContain('# DeepSeek Harness')
}
})
it('publishes every route in both locales and uses every available Chinese counterpart', () => {
const byRoute = new Map(docsPages.map(page => [page.route, page]))
for (const page of docsPages.filter(page => page.locale === 'root')) {
@@ -388,9 +401,9 @@ describe('projectedPageContent', () => {
it('omits the source-only body from locale home pages', () => {
expect(projectedPageContent(
'---\nlayout: home\nhero:\n name: Harness\n---\n\n# Harness\n\n[English](index.md) | 中文\n',
'---\nlayout: false\nhead:\n - - meta\n - http-equiv: refresh\n content: 0; url=./guide/quickstart\n---\n\n# Harness\n\n[English](index.md) | 中文\n',
page(null),
)).toBe('---\nlayout: home\nhero:\n name: Harness\n---\n')
)).toBe('---\nlayout: false\nhead:\n - - meta\n - http-equiv: refresh\n content: 0; url=./guide/quickstart\n---\n')
})
it('keeps the full body for ordinary pages', () => {
+2 -2
View File
@@ -242,8 +242,8 @@ const EXACT_EDITS: readonly ExactEdit[] = [
{
id: 'vendor-readme-local-modification-log',
file: 'vendor/README.md',
find: '\n18. **`cordis/package.json` publishes `src`**',
replace: '\n17. **`@deepseek-ai` rescope**: every vendored manifest `name`, every internal dependency entry among the vendored set, and every module specifier that reaches them use the scoped names in the manifest table\'s `npm name` column. Directory names, version numbers, and dependency ranges are unchanged, and no upstream runtime identifier is renamed — `Symbol.for(\'schemastery\')` and Schemastery\'s `vendor:` metadata field keep their upstream values. Re-apply with `pnpm run rescope-vendor --apply` after a sync; the table\'s two name columns are the mapping, restated for consumers in [docs/rescope.md](../docs/rescope.md).\n18. **`cordis/package.json` publishes `src`**',
find: '\n16. **`cordis/package.json` publishes `src`**',
replace: '\n16. **`cordis/package.json` publishes `src`**: added `src` to the `files` list, joining the other eight vendored packages. Cordis declares `"./src/*": "./src/*"` in its exports, so a tarball without `src` publishes an export map pointing at absent files; the release change judgement also reads `files` to decide whether a diff reaches the payload, and a package whose only published paths are build output has no tracked path to match.\n17. **`@deepseek-ai` rescope**: every vendored manifest `name`, every internal dependency entry among the vendored set, and every module specifier that reaches them use the scoped names in the manifest table\'s `npm name` column. Directory names, version numbers, and dependency ranges are unchanged, and no upstream runtime identifier is renamed — `Symbol.for(\'schemastery\')` and Schemastery\'s `vendor:` metadata field keep their upstream values. Re-apply with `pnpm run rescope-vendor --apply` after a sync; the table\'s two name columns are the mapping, restated for consumers in [docs/rescope.md](../docs/rescope.md).',
expect: 1,
},
{
File diff suppressed because one or more lines are too long
+4
View File
@@ -182,6 +182,9 @@ describe('translation pairing records', () => {
describe('translation scope discovery', () => {
it.each([
'README.md',
'CONTRIBUTING.md',
'CONTRIBUTING.zh.md',
'CONTRIBUTING.i18n.yaml',
'apps/cli/README.md',
'future/subtree/readme.md',
'packages/example/README.zh.md',
@@ -195,6 +198,7 @@ describe('translation scope discovery', () => {
it.each([
'packages/example/guide.md',
'packages/example/CONTRIBUTING.md',
'examples/tutorial.md',
'website/reference.md',
'packages/example/README.txt',
+2
View File
@@ -125,6 +125,7 @@ export interface TranslationPairingManifest {
}
const README_ARTIFACT = /(?:^|\/)readme(?:\.md|\.zh\.md|\.i18n\.yaml)$/i
const ROOT_CONTRIBUTING_ARTIFACT = /^contributing(?:\.md|\.zh\.md|\.i18n\.yaml)$/i
const NON_SOURCE_DIRECTORIES = new Set([
'node_modules',
'lib',
@@ -179,6 +180,7 @@ function isTranslationSourceExcluded(file: string): boolean {
export function isTranslationScopeFile(file: string): boolean {
return !file.startsWith('.agents/notes/archived/')
&& !isTranslationSourceExcluded(file) && (README_ARTIFACT.test(file)
|| ROOT_CONTRIBUTING_ARTIFACT.test(file)
|| file.startsWith('.agents/notes/')
|| file.startsWith('docs/')
|| file.startsWith('python/'))
+5 -5
View File
@@ -1288,7 +1288,7 @@
{
"doc": "docs/subsystems/workflow.md",
"symbol": "WorkflowStartRequest",
"source": "packages/workflow/workflow/src/types.ts"
"source": "packages/workflow/workflow/src/runtime-types.ts"
},
{
"doc": "docs/subsystems/workflow.md",
@@ -1303,7 +1303,7 @@
{
"doc": "docs/subsystems/workflow.md",
"symbol": "WorkflowRun",
"source": "packages/workflow/workflow/src/types.ts"
"source": "packages/workflow/workflow/src/runtime-types.ts"
},
{
"doc": "docs/subsystems/lsp.md",
@@ -1483,7 +1483,7 @@
{
"doc": "docs/subsystems/settings.md",
"symbol": "SettingsNamespace",
"source": "packages/settings/settings/src/index.ts"
"source": "packages/settings/settings/src/types.ts"
},
{
"doc": "docs/subsystems/settings.md",
@@ -1508,7 +1508,7 @@
{
"doc": "docs/subsystems/settings.md",
"symbol": "SettingsUpdateSource",
"source": "packages/settings/settings/src/index.ts"
"source": "packages/settings/settings/src/types.ts"
},
{
"doc": "docs/subsystems/credentials.md",
@@ -1713,7 +1713,7 @@
{
"doc": "docs/subsystems/credentials.md",
"symbol": "CredentialRef",
"source": "packages/credentials/credentials/src/index.ts"
"source": "packages/credentials/credentials/src/types.ts"
},
{
"doc": "docs/subsystems/permission.md",
@@ -61,6 +61,7 @@ const SENTENCE_MODEL_EXPERIENCE: Readonly<Record<string, SentenceContract>> = {
'packages/client/modules': { kind: 'none', reason: 'Browser-side module-loading kernel machinery; registers nothing model-facing.' },
'packages/client/test-runtime': { kind: 'none', reason: 'Browser-side test infrastructure (jsdom bench); registers nothing model-facing.' },
'packages/client/ui-slots': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
'packages/client/ui-attachment': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
'packages/client/ui-primitives': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
'packages/client/web-react': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
'packages/client/schema-form': { kind: 'none', reason: 'Browser-side form-rendering library; registers nothing model-facing.' },
@@ -73,6 +74,7 @@ const SENTENCE_MODEL_EXPERIENCE: Readonly<Record<string, SentenceContract>> = {
'packages/client/ui-tool': { kind: 'none', reason: 'Browser-side Tool presentation layer; renders logged calls without changing model context.' },
'packages/client/ui-deliverables': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
'packages/client/ui-task': { kind: 'none', reason: 'Browser-side read-only projection of ctx.tasks records; dsh-tool-tasks owns the model-facing behavior.' },
'packages/client/ui-workflow-run': { kind: 'none', reason: 'Browser-side UI plugin layer; renders durable workflow records without changing model context.' },
'packages/client/ui-slash': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
'packages/client/ui-command': { kind: 'indirect', reason: 'The dispatch paths trigger the host command.execute RPC; each command handler\'s host package owns any model-visible effect.' },
'packages/client/ui-model': { kind: 'indirect', reason: 'Selection routes session.selectModel; the Host snapshots the selection at the next prompt-assembly boundary and owns the model-visible effect.' },