This commit is contained in:
2026-08-29 16:20:33 +08:00
commit cba31428dc
52 changed files with 6553 additions and 0 deletions
@@ -0,0 +1,40 @@
# 迭代复盘: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.patchcordis.patch.yml**顶层必须是 insert 操作**,不是裸插件行;
- 客户端插件需要 **exports["./client"]** 指向 bundle,且 bundle 必须 __ModuleLoader__ 包装;
- 修改宿主配置(bundles/cordis.patch.yml)在 session workspace 外,需要沙箱升级 + 用户批准。
### 3. 需求讨论的价值
- 需求从「交易管理插件」→「智能交易辅助系统」→「分仓管理工具」多轮收敛;
- 老师的关键输入:分仓=按策略(网格超市/手动做T)、份额拆分(1000股→网格600+做T400)、策略 tab 内编辑(添加/移出)、步进100+手动输入。
## 下一步建议
1. **WebSocket 数据监控**(老师已提):插件可开启 WebSocketwebServer.registerUpgrade + ws 库),实现持仓/行情实时推送;
2. **策略配置完整管理**:网格参数(区间/格距/档位)等;
3. **做T 记录**:交易过程记录与复盘;
4. **设计约束补充**:本次沉淀的 DSH 插件开发规范(RPC 冲突、ModuleLoader、slots 签名等)应写入技术方案约束,供后续迭代参考。