Why: The first S4 pass makes the project the navigation context, keeps deep views in one overlay, and leaves domain panels empty until a plugin declares them. Evidence: npx tsc -b and npm test (61 passed) in modules/frontend. Impact: Top bar, project sidebar, inbox all/todo filter, one-way scroll sync, drag-and-drop on the whole chat column, and local molv/system themes. Refs: feature/s4-shell-overhaul Co-authored-by: Cursor <cursoragent@cursor.com>
26 lines
1007 B
TypeScript
26 lines
1007 B
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { buildWorkspaceEntries } from '../src/workspaces'
|
|
|
|
describe('buildWorkspaceEntries', () => {
|
|
it('没有领域插件时,工件和代理补在 ⌘1 ⌘2', () => {
|
|
const entries = buildWorkspaceEntries([])
|
|
expect(entries.map(e => `${e.shortcut} ${e.title}`)).toEqual(['⌘1 工件', '⌘2 代理'])
|
|
})
|
|
|
|
it('声明了 shortcut 的工作区占住该位,内置工具让位', () => {
|
|
const entries = buildWorkspaceEntries([
|
|
{ id: 'trace', title: '追溯网', shortcut: '1' },
|
|
])
|
|
expect(entries.map(e => e.title)).toEqual(['追溯网', '工件', '代理'])
|
|
expect(entries.map(e => e.shortcut)).toEqual(['⌘1', '⌘2', '⌘3'])
|
|
expect(entries[0].key).toBe('ws:trace')
|
|
})
|
|
|
|
it('未编号的工作区排在内置工具后面', () => {
|
|
const entries = buildWorkspaceEntries([
|
|
{ id: 'mem', title: '记忆库' },
|
|
])
|
|
expect(entries.map(e => e.title)).toEqual(['工件', '代理', '记忆库'])
|
|
})
|
|
})
|