Skip to content

Commit bc10079

Browse files
v1.15.6 (#11)
* chore: 发布v1.14.0-dev版本并修复widget url拼接逻辑 1. 更新package.json和多语言文件中的版本号到v1.14.0-dev 2. 重构DebugWidget的url拼接逻辑,新增对/v1/proxy接口的单独处理 3. 为DashboardCanvas添加useMemo缓存过滤结果,同时修复重复widget/layout项的问题 * feat(table): add table settings modal and related features - 新增表格设置弹窗,支持配置小数位数和可见列 - 为表格组件添加小数位数格式化和列显示控制功能 - 新增多语言国际化词条支持中英文界面 - 添加表格渲染器测试用例覆盖格式化逻辑 - 实现仪表盘内表格设置的状态管理与持久化 * release: bump version to 1.14.0 将项目版本从开发版1.14.0-dev正式更新为1.14.0,同步更新中英文国际化文件中的版本号展示 * feat(settings): 集成 MCP 服务器管理功能 - 新增 MCP 服务端配置页面,支持添加、编辑、删除服务器连接 - 实现 MCP 协议栈,包含 JSON-RPC 编解码、会话管理 - 开发 MCP 客户端,支持服务器连接、工具发现与调用 - 构建工具注册表,管理服务器工具的启用状态 - 完善响应格式化与错误处理能力 - 更新多语言文案,适配 MCP 相关界面 - 升级版本号至 1.14.1-dev * feat: 新增MCP Companion集成与配套功能 - 新增WidgetConfig的mcpToolMatch元数据字段 - 新增MCP Companion侧边栏入口与配置弹窗 - 添加多语言国际化支持(中英) - 新增dashboard标签页配置支持 - 新增完整的MCP服务层: - 新增companionBridge桥接服务 - 新增widgetSchemaService、widgetLayoutService - 新增workspaceNavigationService、navigationService - 新增appsService应用模板服务 - 新增widgetCRUDService组件CRUD服务 - 新增generativeWidgetService生成式widget服务 - 新增backendsService后端管理服务 - 新增snapshotGenerator工作区快照服务 - 新增dashboardService仪表盘服务 - 新增widgetToolMapping widget与工具映射服务 - 新增securityService安全权限服务 - 重构errorHandler错误处理模块 - 更新依赖包与类型定义 - 优化MCP服务器列表与连接逻辑 * feat(mcp,widgets): add widget list and schema query commands 1. 新增widgetFactory导入以注册内置组件类型 2. 重构MCP命令参数解析逻辑,提取标准命令字段 3. 添加list_available_widgets和get_widget_schema命令处理 4. 移除设置页面中冗余的MCP连接状态相关代码 * feat(mcp): add manage_backends command for backend operations 新增manage_backends命令及其处理逻辑,支持列出、新增、更新、刷新和删除后端连接,通过connectionService完成具体操作 * fix(mcp): 修复参数为空值导致的处理异常 1. 将endpoint_headers的undefined检查改为!=null以兼容null值 2. 预处理传入的参数,过滤掉所有null和undefined值避免下游校验问题 * refactor(mcp/companionBridge): 适配workspace-mcp多格式参数并补全命令处理器 (widget测试完成) 1. 重构companionBridge参数解析逻辑,适配不同命令的参数格式 2. 为commandHandler新增get_widget_data等十余种MCP命令处理实现 3. 新增全套MCP命令的单元测试用例 * fix(mcp): 完善应用和后端连接校验逻辑 1. 为getAppDefinition添加按应用名模糊匹配的降级查找逻辑 2. 新增backend_id存在性校验,不存在时返回对应错误提示 * feat(mcp): 增加图表参数和内嵌标签页校验 * feat(mcp): 添加任务分配验证与技能内容 * fix(mcp): 兼容 workspace-mcp 的命令与字段映射 * fix(mcp): 处理仪表盘未找到的情况 * fix(widget): 补充保存组件的宽高属性 * chore: 发布 v1.15.0 * feat(sidebar): 添加 MCP Companion 连接状态指示器 * feat(mcp): 实现真实浏览器导航以替代会话上下文更新 (cb) * feat(dashboard): 添加标签页管理功能 * style(components): 替换弹窗关闭按钮为UI组件Icon 将原有的svg关闭按钮替换为@openbb/ui的Icon组件,统一UI组件使用规范,同时调整按钮样式类名优化关闭按钮的交互视觉效果 * fix(widgets): 修复组件ID和表格渲染稳定性问题 1. 在widgetService中自动为缺少ID的组件设置JSON键作为ID 2. 修复DebugWidget使用时间戳导致的不必要重渲染,改用widgetDef.id 3. 过滤DebugWidget的无效空ID组件 4. 重构TableRenderer的列配置逻辑,使用深拷贝实现稳定的列定义 5. 新增gridContext缓存避免不必要的表格重渲染 * fix(dashboard): 修复端点参数组件及调试小部件连接信息解析 * feat(widgets): 新增下拉参数组件并映射文本选项类型 将带有静态选项的"text"类型参数映射为"dropdown"类型, 新增DropdownParameterComponent组件以支持搜索、多选和键盘导航, 同时修复DebugWidget等场景下映射缺失的问题。 * fix(dashboard): 修复组件标签页泄漏及添加定位问题 * feat: 新增股票代码搜索参数组件 * feat(ui): 添加日期选择器组件并支持日期修饰符解析 * build(deps): 添加 tiptap 富文本编辑器依赖 * feat(vite): 添加 VITE_APP_HOST 到允许的主机名 * fix: 添加 data-cfasync 属性以禁用 Cloudflare 缓存 * chore: bump version to 1.15.6 and remove dev tag update version field in package.json and both chinese/english i18n resource files to remove the dev suffix, prepare for official release --------- Co-authored-by: finanalyzer <finanalyzer@foxmail.com>
1 parent 9971127 commit bc10079

36 files changed

Lines changed: 4197 additions & 309 deletions

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
</head>
1111
<body>
1212
<div id="root"></div>
13-
<script type="module" src="/src/main.tsx"></script>
13+
<script type="module" src="/src/main.tsx" data-cfasync="false"></script>
1414
</body>
1515
</html>

package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "finanalyzer-app",
33
"private": true,
4-
"version": "1.15.0",
4+
"version": "1.15.6",
55
"description": "Finanalyzer 前端应用 - 投资组合管理平台",
66
"type": "module",
77
"scripts": {
@@ -22,6 +22,12 @@
2222
"@tanstack/react-query": "^5.8.0",
2323
"@tanstack/react-router": "^1.168.7",
2424
"@tanstack/router-plugin": "^1.167.8",
25+
"@tiptap/extension-color": "^3.26.1",
26+
"@tiptap/extension-placeholder": "^3.26.1",
27+
"@tiptap/extension-text-style": "^3.26.1",
28+
"@tiptap/extension-underline": "^3.26.1",
29+
"@tiptap/react": "^3.26.1",
30+
"@tiptap/starter-kit": "^3.26.1",
2531
"ag-grid-community": "^35.2.1",
2632
"ag-grid-react": "^35.2.1",
2733
"axios": "^1.6.0",

pnpm-lock.yaml

Lines changed: 581 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/dashboard/DashboardCanvas.css

Lines changed: 242 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,245 @@
1+
/* Navigation Bar */
2+
.nav-bar {
3+
display: flex;
4+
align-items: center;
5+
justify-content: space-between;
6+
height: 44px;
7+
padding: 0 16px;
8+
border-bottom: 1px solid #e2e8f0;
9+
background-color: #ffffff;
10+
flex-shrink: 0;
11+
}
12+
13+
.dark .nav-bar {
14+
background-color: #151518;
15+
border-bottom-color: #303038;
16+
}
17+
18+
.nav-bar-tabs {
19+
display: flex;
20+
align-items: center;
21+
gap: 4px;
22+
overflow-x: auto;
23+
flex: 1;
24+
min-width: 0;
25+
scrollbar-width: none;
26+
-ms-overflow-style: none;
27+
}
28+
29+
.nav-bar-tabs::-webkit-scrollbar {
30+
display: none;
31+
}
32+
33+
.nav-tab {
34+
position: relative;
35+
padding: 8px 12px;
36+
font-size: 14px;
37+
font-weight: 500;
38+
white-space: nowrap;
39+
color: #64748b;
40+
border-radius: 6px;
41+
cursor: pointer;
42+
user-select: none;
43+
transition: color 0.15s ease, background-color 0.15s ease;
44+
background: transparent;
45+
border: none;
46+
}
47+
48+
.nav-tab:hover {
49+
color: #334155;
50+
background-color: #f1f5f9;
51+
}
52+
53+
.dark .nav-tab {
54+
color: #94a3b8;
55+
}
56+
57+
.dark .nav-tab:hover {
58+
color: #e2e8f0;
59+
background-color: #202025;
60+
}
61+
62+
.nav-tab-active {
63+
color: #0f172a;
64+
}
65+
66+
.dark .nav-tab-active {
67+
color: #f1f5f9;
68+
}
69+
70+
.nav-tab-indicator {
71+
position: absolute;
72+
bottom: 0;
73+
left: 12px;
74+
right: 12px;
75+
height: 2px;
76+
background-color: #0088CC;
77+
border-radius: 2px 2px 0 0;
78+
}
79+
80+
.dark .nav-tab-indicator {
81+
background-color: #4dacdb;
82+
}
83+
84+
.nav-bar-actions {
85+
display: flex;
86+
align-items: center;
87+
gap: 4px;
88+
margin-left: 12px;
89+
flex-shrink: 0;
90+
}
91+
92+
.nav-action-btn {
93+
padding: 6px;
94+
border-radius: 6px;
95+
color: #94a3b8;
96+
cursor: pointer;
97+
transition: color 0.15s ease, background-color 0.15s ease;
98+
background: transparent;
99+
border: none;
100+
}
101+
102+
.nav-action-btn:hover {
103+
color: #475569;
104+
background-color: #f1f5f9;
105+
}
106+
107+
.dark .nav-action-btn {
108+
color: #6d6e74;
109+
}
110+
111+
.dark .nav-action-btn:hover {
112+
color: #9ca3af;
113+
background-color: #202025;
114+
}
115+
116+
@media (max-width: 480px) {
117+
.nav-bar {
118+
height: 40px;
119+
padding: 0 12px;
120+
}
121+
122+
.nav-tab {
123+
padding: 6px 10px;
124+
font-size: 13px;
125+
}
126+
127+
.nav-tab-indicator {
128+
left: 10px;
129+
right: 10px;
130+
}
131+
132+
.nav-bar-actions {
133+
margin-left: 8px;
134+
}
135+
}
136+
137+
/* Manage Tabs Modal */
138+
.manage-tabs-modal-list {
139+
overflow-y: auto;
140+
space-y: 12px;
141+
}
142+
143+
.manage-tabs-row {
144+
display: flex;
145+
align-items: center;
146+
gap: 8px;
147+
}
148+
149+
.manage-tabs-drag-handle {
150+
color: #94a3b8;
151+
cursor: grab;
152+
flex-shrink: 0;
153+
user-select: none;
154+
}
155+
156+
.manage-tabs-drag-handle:active {
157+
cursor: grabbing;
158+
}
159+
160+
.dark .manage-tabs-drag-handle {
161+
color: #6d6e74;
162+
}
163+
164+
.manage-tabs-input-wrapper {
165+
position: relative;
166+
flex: 1;
167+
}
168+
169+
.manage-tabs-input {
170+
width: 100%;
171+
padding: 8px 32px 8px 12px;
172+
font-size: 14px;
173+
border-radius: 6px;
174+
border: 1px solid #d1d5db;
175+
background-color: #ffffff;
176+
color: #111827;
177+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
178+
}
179+
180+
.manage-tabs-input::placeholder {
181+
color: #9ca3af;
182+
}
183+
184+
.manage-tabs-input:focus {
185+
outline: none;
186+
border-color: #0088CC;
187+
box-shadow: 0 0 0 3px rgba(0, 136, 204, 0.12);
188+
}
189+
190+
.dark .manage-tabs-input {
191+
background-color: #202025;
192+
border-color: #303038;
193+
color: #f1f5f9;
194+
}
195+
196+
.dark .manage-tabs-input::placeholder {
197+
color: #505059;
198+
}
199+
200+
.manage-tabs-clear-btn {
201+
position: absolute;
202+
right: 8px;
203+
top: 50%;
204+
transform: translateY(-50%);
205+
padding: 2px;
206+
border-radius: 4px;
207+
color: #94a3b8;
208+
transition: color 0.15s ease;
209+
cursor: pointer;
210+
background: transparent;
211+
border: none;
212+
}
213+
214+
.manage-tabs-clear-btn:hover {
215+
color: #475569;
216+
}
217+
218+
.dark .manage-tabs-clear-btn:hover {
219+
color: #9ca3af;
220+
}
221+
222+
.manage-tabs-delete-btn {
223+
padding: 8px;
224+
border-radius: 6px;
225+
color: #94a3b8;
226+
transition: color 0.15s ease, background-color 0.15s ease;
227+
cursor: pointer;
228+
flex-shrink: 0;
229+
background: transparent;
230+
border: none;
231+
}
232+
233+
.manage-tabs-delete-btn:hover {
234+
color: #ef4444;
235+
background-color: #fef2f2;
236+
}
237+
238+
.dark .manage-tabs-delete-btn:hover {
239+
color: #f87171;
240+
background-color: rgba(239, 68, 68, 0.1);
241+
}
242+
1243
/* Dashboard Canvas */
2244
.dashboard-canvas {
3245
display: flex;
@@ -285,7 +527,6 @@
285527
border-radius: 8px;
286528
border: 1px solid #e2e8f0;
287529
transition: box-shadow 0.2s, border-color 0.2s;
288-
overflow: hidden;
289530
position: relative;
290531
}
291532

0 commit comments

Comments
 (0)