实现第二阶段分工表中吉海燕负责的 P0/P1 前端能力。
- Agent Trace 可视化:新增 traceService 将扁平事件流折叠为树
(ModelCallStarted 区间内的工具/文本事件挂为子节点,运行级事件保持顶层),
TraceTimeline 支持时间线/树两种视图、耗时统计与引用跳转。
- 主题包:新增 themePackageService(Web Mock Adapter),
校验 manifest 必填字段与 theme_id 格式,拒绝远程 css_entry;
CSS 侧拒绝 @import / expression() / javascript:,
未通过校验的 CSS 不会注入页面。内置主题走 data-theme=light|dark|sepia,
自定义主题走 data-theme={theme_id} + 独立 style 节点。
ThemesView 增加“已安装/社区主题”两个标签页与导入、预览、卸载流程。
- Mermaid:新增 mermaidService(securityLevel: strict)与 MermaidBlock,
markdown 渲染管线识别 mermaid 代码块;MarkdownContent 随亮/暗主题重渲染
(SVG 配色在渲染时烘焙,无法靠 CSS 变量事后调整)。
- 插件贡献 UI:PluginsView 增加“概览/命令/设置”标签页,
PluginSettingsPanel 按 Schema 动态生成表单;
secret 字段只写不读,仅展示 configured 状态,不进 store 也不回显。
与 main 上队友成果的整合(rebase 时处理):
- 命令面板保留队友基于真实后端的实现(when 条件求值、效果白名单、
参数命令跳详情页),仅叠加我新增的主题/任务两条内置命令。
- 删除我先前的 pluginContributionService(mock 版),
统一改用队友已落地的 pluginService 真实接口;
相应修正表单以匹配真实契约(options 为 string[]、min/max 可空、无 placeholder)。
- 移除 contracts 中与队友重复的 PluginHostStatus / PluginCommand /
PluginSettingField / PluginSettingsSchema 声明,以队友版本为准。
- PluginsView 概览页保留队友的 PluginMcpPanel,并补回被我改写时丢掉的空状态。
顺带修复:
- 开启 skipLibCheck —— mermaid 11.17 把 type-fest 泄漏进了发布产物的
.d.ts,但只声明为自身 devDependency,vue-tsc -b 会因此报错。
验证:pnpm test 26 文件 / 113 测试通过(新增 traceService、
themePackageService 两个测试文件共 22 项);pnpm build 通过。
52 lines
1.4 KiB
JSON
52 lines
1.4 KiB
JSON
{
|
|
"name": "notes-agent-frontend",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vue-tsc -b && vite build",
|
|
"test": "vitest run",
|
|
"preview": "vite preview",
|
|
"type-check": "vue-tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@codemirror/lang-markdown": "^6.5.0",
|
|
"@codemirror/theme-one-dark": "^6.1.0",
|
|
"@element-plus/icons-vue": "^2.3.2",
|
|
"@milkdown/crepe": "7.22.1",
|
|
"@milkdown/kit": "7.22.1",
|
|
"@milkdown/plugin-block": "^7.22.0",
|
|
"@milkdown/plugin-cursor": "^7.22.0",
|
|
"@milkdown/plugin-history": "^7.22.0",
|
|
"@milkdown/plugin-listener": "^7.22.0",
|
|
"@milkdown/plugin-slash": "^7.22.0",
|
|
"@milkdown/plugin-tooltip": "^7.22.0",
|
|
"@milkdown/plugin-trailing": "^7.22.0",
|
|
"@milkdown/theme-nord": "^7.22.0",
|
|
"@milkdown/vue": "^7.22.0",
|
|
"@shikijs/engine-javascript": "4.4.3",
|
|
"@shikijs/langs": "4.4.3",
|
|
"@shikijs/themes": "4.4.3",
|
|
"@vueuse/core": "^14.0.0",
|
|
"codemirror": "^6.0.0",
|
|
"dompurify": "^3.4.14",
|
|
"marked": "^15.0.0",
|
|
"mermaid": "^11.17.2",
|
|
"pinia": "^4.0.0",
|
|
"shiki": "^4.4.3",
|
|
"vue": "^3.5.0",
|
|
"vue-router": "^5.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.0.0",
|
|
"@vitejs/plugin-vue": "^5.0.0",
|
|
"@vue/test-utils": "^2.5.0",
|
|
"happy-dom": "^20.11.15",
|
|
"typescript": "~5.9.3",
|
|
"vite": "^6.0.0",
|
|
"vitest": "^4.1.11",
|
|
"vue-tsc": "^2.0.0"
|
|
}
|
|
}
|