41 lines
2.8 KiB
Markdown
41 lines
2.8 KiB
Markdown
# 迭代复盘:01-分仓管理工具
|
||
|
||
> 复盘日期:2026-08-28 | 迭代状态:已完成(R-002 验收通过)
|
||
|
||
## 迭代总结
|
||
|
||
实现了「分仓管理工具」第一个可用版本:DSH 插件(独立挂载)+ 三个策略 tab(全部持仓/网格策略持仓/做T持仓)+ 设置菜单(神之一手)+ 份额分配本地管理 + 服务端 HTTP API。
|
||
|
||
## 事实记录(做了什么)
|
||
|
||
1. S1-S8 全部完成:插件骨架、数据源适配(QMT REST 直连)、设置管理、本地存储、分仓逻辑、服务端 API、客户端 tab、宿主挂载;
|
||
2. 客户端 UI:三个 conversation.view tab + settings.section 设置菜单;
|
||
3. 响应式布局:添加持仓组件支持宽/中/窄三种布局;
|
||
4. 构建链路:tsdown 构建 + __ModuleLoader__ 包装脚本。
|
||
|
||
## 经验教训(复盘沉淀)
|
||
|
||
### 1. DSH 插件开发的「坑」(重要)
|
||
- **RPC 通道冲突**:DSH 的 /api RPC 通道**只能一个 interceptor**(api-gateway 占用)—— 插件不能直接 intercept('/api'),应改用 **webServer 自开路由**;
|
||
- **slots.register 签名**:component 必须是**第二参数**(register({...}, Component)),写在 options 里会导致 React #130 崩溃;
|
||
- **客户端 bundle 格式**:必须 **window.__ModuleLoader__.load({id, factory})** 包装(CJS 格式),裸 ESM 无法加载;
|
||
- **settings schema**:必须是 **schemastery z.object()**(函数式 schema),普通对象会报 "schema is not a function";
|
||
- **ctx 属性赋值**:Cordis 不允许直接给 ctx 设属性(ctx.xxx = ...),会报 "cannot set property without provide"。
|
||
|
||
### 2. 插件安装与宿主集成
|
||
- 用 **dsh plugin add**(而非 pnpm add)—— 它会自动 reconcile bundles;
|
||
- 插件的 dsh.bundle.patch(cordis.patch.yml)**顶层必须是 insert 操作**,不是裸插件行;
|
||
- 客户端插件需要 **exports["./client"]** 指向 bundle,且 bundle 必须 __ModuleLoader__ 包装;
|
||
- 修改宿主配置(bundles/cordis.patch.yml)在 session workspace 外,需要沙箱升级 + 用户批准。
|
||
|
||
### 3. 需求讨论的价值
|
||
- 需求从「交易管理插件」→「智能交易辅助系统」→「分仓管理工具」多轮收敛;
|
||
- 老师的关键输入:分仓=按策略(网格超市/手动做T)、份额拆分(1000股→网格600+做T400)、策略 tab 内编辑(添加/移出)、步进100+手动输入。
|
||
|
||
## 下一步建议
|
||
|
||
1. **WebSocket 数据监控**(老师已提):插件可开启 WebSocket(webServer.registerUpgrade + ws 库),实现持仓/行情实时推送;
|
||
2. **策略配置完整管理**:网格参数(区间/格距/档位)等;
|
||
3. **做T 记录**:交易过程记录与复盘;
|
||
4. **设计约束补充**:本次沉淀的 DSH 插件开发规范(RPC 冲突、ModuleLoader、slots 签名等)应写入技术方案约束,供后续迭代参考。
|