Merge remote-tracking branch 'origin/master' into mergebot/pr711

# Conflicts:
#	packages/client/ui-workspace/src/client/WorkspaceBrowser.tsx
#	packages/client/ui-workspace/src/client/index.ts
#	packages/client/ui-workspace/src/client/rows/Rows.tsx
#	packages/client/ui-workspace/src/client/tree.ts
#	packages/client/ui-workspace/tests/apply.spec.ts
#	packages/client/ui-workspace/tests/rows.spec.tsx
#	packages/client/ui-workspace/tests/tree.spec.ts
#	packages/client/ui-workspace/tests/workspace-browser.spec.tsx
This commit is contained in:
imccyu
2026-07-31 04:37:08 +08:00
243 changed files with 3584 additions and 1336 deletions
@@ -1,6 +1,7 @@
import { Context } from 'cordis'
import { describe, expect, it, vi } from 'vitest'
import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client'
import { LocaleService } from '@deepseek-ai/dsh-client-locale/client'
import { apply, inject } from '@deepseek-ai/dsh-client-ui-workspace/client'
import type { WorkspaceBrowserInjected, WorkspacePickerInjected } from '@deepseek-ai/dsh-client-ui-workspace/client'
import { WorkspaceBrowser } from '../src/client/WorkspaceBrowser.tsx'
@@ -30,8 +31,10 @@ async function bench() {
create, startSession, rename, insertSessionBefore,
} as never)
ctx.provide('sessions', { open, clear, search, searchResultLimit: 20, binding, fork } as never)
const locale = new LocaleService(ctx)
ctx.provide('locale', locale)
return {
ctx, slots: ctx.get('slots') as SlotsService, create, startSession, rename,
ctx, slots: ctx.get('slots') as SlotsService, locale, create, startSession, rename,
insertSessionBefore, open, clear, search, renameSession, binding, fork,
}
}
@@ -46,7 +49,7 @@ function declare(slots: SlotsService, ...names: HoleName[]): () => void {
describe('ui-workspace apply', () => {
it('declares the services it drives', () => {
expect(inject).toEqual(['slots', 'sessions', 'workspaces'])
expect(inject).toEqual(['slots', 'sessions', 'workspaces', 'locale'])
})
it('registers browser and pickers for declarations arriving before or after apply', async () => {
@@ -54,6 +57,10 @@ describe('ui-workspace apply', () => {
declare(before.slots, 'sidebar.workspaces')
await before.ctx.plugin({ inject: [...inject], apply }).await()
expect(before.slots.entries('sidebar.workspaces')[0]!.component).toBe(WorkspaceBrowser)
// Copy rides the standard locale seat: the entry declares the namespace
// and apply registered both dictionaries.
expect(before.slots.entries('sidebar.workspaces')[0]!.locale).toBe('workspace')
expect(before.locale.bind('workspace')('session.new')).toBe('新会话')
const after = await bench()
await after.ctx.plugin({ inject: [...inject], apply }).await()