- 新增 src/client/service.ts: BetterSidebarService 接口 + createBetterSidebarService 工厂
- registerTab/registerFileViewer 返回 disposer(HMR-safe,挂到 cordis fiber)
- matchFileViewer 三段匹配: priority desc → detect(内容嗅探) → exts
- openTab 走 descriptor.dedupeKey 统一去重(替代 isSingle/editor-path/diff-id 三分支)
- createTab 回调支持自定义 tab 创建(terminal 的 nextTerminal 递增)
- 新增 src/client/builtins.tsx: 6 内置 tab + 6 内置 viewer 自我注册(吃狗粮)
- tab: editor(hidden) / explorer / git / subagent / terminal / diff(hidden)
- viewer: image / pdf / docx / xlsx / pptx / binary-download
- code/markdown 保持 EditorView 内联兜底(matchFileViewer 返回 undefined 时走 fsRead+CodeMirror)
- 新增 src/client/OrphanedTab.tsx: 未注册 type 的占位组件(插件未加载时降级)
- 改造 src/client/index.tsx: ctx.provide('betterSidebar') + registerBuiltins
- 改造 src/client/Sidebar.tsx: TabContent/buildNewTabOptions/onNewTab 查表替代 switch
- 改造 src/client/EditorView.tsx: 预览路由查 matchFileViewer 替代 if/else 链
- 改造 src/client/state.ts: TabType 联合字面量→string,sanitizeNode 接受所有 string type
- 改造 src/context-types.ts: declare module 'cordis' 加 betterSidebar 字段
- 改造 src/index.ts: re-export Context + 服务类型(consumer import type 触发 augmentation)
- package.json: 加 ./client/service exports 子路径,version 0.4.0
- tests/service.spec.ts: 12 个新测试覆盖 register/dispose/matchFileViewer/dedupe/createTab
- tests/unit.spec.ts: sanitizeState 测试更新(未知 type 不再被拒绝,渲染 OrphanedTab)
139 lines
5.2 KiB
JSON
139 lines
5.2 KiB
JSON
{
|
|
"name": "dsh-better-sidebar",
|
|
"version": "0.4.0",
|
|
"description": "DSH web plugin: a VSCode-like right sidebar (explorer / editor / terminal / git), isolated per conversation session. Exposes a service for other plugins to register sidebar tabs and file viewers.",
|
|
"private": true,
|
|
"type": "module",
|
|
"main": "lib/index.js",
|
|
"types": "lib/types/index.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"types": "./lib/types/index.d.ts",
|
|
"default": "./lib/index.js"
|
|
},
|
|
"./invariant": {
|
|
"types": "./lib/types/invariant.d.ts",
|
|
"default": "./lib/invariant.js"
|
|
},
|
|
"./client": {
|
|
"types": "./lib/types/client/index.d.ts",
|
|
"default": "./lib/client.js"
|
|
},
|
|
"./client/service": {
|
|
"types": "./lib/types/client/service.d.ts",
|
|
"default": "./lib/client.js"
|
|
},
|
|
"./src/*": "./src/*",
|
|
"./package.json": "./package.json"
|
|
},
|
|
"engines": {
|
|
"node": ">=20"
|
|
},
|
|
"dshClient": {
|
|
"inject": [
|
|
"@deepseek-ai/dsh-client-runtime",
|
|
"@deepseek-ai/dsh-client-ui-slots",
|
|
"@deepseek-ai/dsh-client-ui-conversation"
|
|
],
|
|
"platform": "web"
|
|
},
|
|
"files": [
|
|
"lib/index.js",
|
|
"lib/invariant.js",
|
|
"lib/client.js",
|
|
"lib/types/**/*.d.ts",
|
|
"src"
|
|
],
|
|
"scripts": {
|
|
"build": "rm -rf lib && tsc -p tsconfig.build.json && tsdown",
|
|
"typecheck": "tsc --noEmit",
|
|
"bundle": "tsdown",
|
|
"watch": "tsdown --watch",
|
|
"prepare": "tsdown",
|
|
"test": "vitest run"
|
|
},
|
|
"license": "MIT",
|
|
"peerDependencies": {
|
|
"@deepseek-ai/dsh-agent": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-runtime": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-schema-form": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-ui-conversation": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-ui-primitives": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-ui-settings": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-ui-slots": "^0.0.1",
|
|
"@deepseek-ai/dsh-client-web-react": "^0.0.1",
|
|
"@deepseek-ai/dsh-host-webserver": "^0.0.1",
|
|
"@deepseek-ai/dsh-invariants": "^0.0.1",
|
|
"@deepseek-ai/dsh-llm": "^0.0.1",
|
|
"@deepseek-ai/dsh-session": "^0.0.1",
|
|
"@deepseek-ai/dsh-settings": "^0.0.1",
|
|
"@deepseek-ai/dsh-tools": "^0.0.1",
|
|
"cordis": "^4.0.0-rc.7",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0"
|
|
},
|
|
"dependencies": {
|
|
"@aiden0z/pptx-renderer": "^1.2.4",
|
|
"@codemirror/commands": "^6.10.4",
|
|
"@codemirror/lang-cpp": "^6.0.3",
|
|
"@codemirror/lang-css": "^6.3.1",
|
|
"@codemirror/lang-go": "^6.0.1",
|
|
"@codemirror/lang-html": "^6.4.12",
|
|
"@codemirror/lang-java": "^6.0.2",
|
|
"@codemirror/lang-javascript": "^6.2.5",
|
|
"@codemirror/lang-json": "^6.0.2",
|
|
"@codemirror/lang-markdown": "^6.5.2",
|
|
"@codemirror/lang-php": "^6.0.2",
|
|
"@codemirror/lang-python": "^6.2.1",
|
|
"@codemirror/lang-rust": "^6.0.2",
|
|
"@codemirror/lang-sql": "^6.10.0",
|
|
"@codemirror/lang-xml": "^6.1.0",
|
|
"@codemirror/lang-yaml": "^6.1.3",
|
|
"@codemirror/language": "^6.12.4",
|
|
"@codemirror/legacy-modes": "^6.5.3",
|
|
"@codemirror/search": "^6.7.1",
|
|
"@codemirror/state": "^6.7.1",
|
|
"@codemirror/view": "^6.43.8",
|
|
"@lezer/highlight": "^1.2.3",
|
|
"@univerjs/preset-sheets-core": "^0.25.1",
|
|
"@univerjs/presets": "^0.25.1",
|
|
"@xterm/addon-fit": "^0.10.0",
|
|
"clsx": "^2.1.1",
|
|
"docx-preview": "^0.4.0",
|
|
"node-pty": "^1.1.0",
|
|
"rxjs": "^7.8.2",
|
|
"schemastery": "^3.18.0",
|
|
"ws": "^8.18.0",
|
|
"xlsx": "^0.18.5",
|
|
"xterm": "^5.3.0"
|
|
},
|
|
"devDependencies": {
|
|
"@deepseek-ai/dsh-agent": "link:/Users/menghuan/.dsh/source/current/packages/core/agent",
|
|
"@deepseek-ai/dsh-client-runtime": "link:/Users/menghuan/.dsh/source/current/packages/client/runtime",
|
|
"@deepseek-ai/dsh-client-schema-form": "link:/Users/menghuan/.dsh/source/current/packages/client/schema-form",
|
|
"@deepseek-ai/dsh-client-ui-conversation": "link:/Users/menghuan/.dsh/source/current/packages/client/ui-conversation",
|
|
"@deepseek-ai/dsh-client-ui-primitives": "link:/Users/menghuan/.dsh/source/current/packages/client/ui-primitives",
|
|
"@deepseek-ai/dsh-client-ui-settings": "link:/Users/menghuan/.dsh/source/current/packages/client/ui-settings",
|
|
"@deepseek-ai/dsh-client-ui-slots": "link:/Users/menghuan/.dsh/source/current/packages/client/ui-slots",
|
|
"@deepseek-ai/dsh-client-web-react": "link:/Users/menghuan/.dsh/source/current/packages/client/web-react",
|
|
"@deepseek-ai/dsh-host-webserver": "link:/Users/menghuan/.dsh/source/current/packages/host/webserver",
|
|
"@deepseek-ai/dsh-invariants": "link:/Users/menghuan/.dsh/source/current/packages/support/invariants",
|
|
"@deepseek-ai/dsh-llm": "link:/Users/menghuan/.dsh/source/current/packages/llm/llm",
|
|
"@deepseek-ai/dsh-session": "link:/Users/menghuan/.dsh/source/current/packages/core/session",
|
|
"@deepseek-ai/dsh-settings": "link:/Users/menghuan/.dsh/source/current/packages/settings/settings",
|
|
"@deepseek-ai/dsh-tools": "link:/Users/menghuan/.dsh/source/current/packages/core/tools",
|
|
"@types/node": "^24.0.0",
|
|
"@types/react": "~18.3.1",
|
|
"@types/react-dom": "~18.3.1",
|
|
"@types/ws": "^8.5.10",
|
|
"@cordisjs/plugin-loader": "^1.0.0-rc.5",
|
|
"cordis": "^4.0.0-rc.7",
|
|
"lightningcss": "^1.32.0",
|
|
"react": "^18.2.0",
|
|
"react-dom": "18.2.0",
|
|
"tsdown": "^0.22.2",
|
|
"typescript": "^5.6.0",
|
|
"vitest": "^4.1.8"
|
|
}
|
|
}
|