2.8 KiB
2.8 KiB
迭代复盘:01-分仓管理工具
复盘日期:2026-08-28 | 迭代状态:已完成(R-002 验收通过)
迭代总结
实现了「分仓管理工具」第一个可用版本:DSH 插件(独立挂载)+ 三个策略 tab(全部持仓/网格策略持仓/做T持仓)+ 设置菜单(神之一手)+ 份额分配本地管理 + 服务端 HTTP API。
事实记录(做了什么)
- S1-S8 全部完成:插件骨架、数据源适配(QMT REST 直连)、设置管理、本地存储、分仓逻辑、服务端 API、客户端 tab、宿主挂载;
- 客户端 UI:三个 conversation.view tab + settings.section 设置菜单;
- 响应式布局:添加持仓组件支持宽/中/窄三种布局;
- 构建链路: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+手动输入。
下一步建议
- WebSocket 数据监控(老师已提):插件可开启 WebSocket(webServer.registerUpgrade + ws 库),实现持仓/行情实时推送;
- 策略配置完整管理:网格参数(区间/格距/档位)等;
- 做T 记录:交易过程记录与复盘;
- 设计约束补充:本次沉淀的 DSH 插件开发规范(RPC 冲突、ModuleLoader、slots 签名等)应写入技术方案约束,供后续迭代参考。