feat: add mdtodo v3s microservice

This commit is contained in:
Codex
2026-05-16 03:27:22 +00:00
parent 7b86eb4217
commit 502f5971b1
18 changed files with 1383 additions and 5 deletions
+11
View File
@@ -179,6 +179,17 @@ Baidu Netdisk 在 UniDesk 语境中按纯后端服务管理:不得暴露百度
- 代理路径:只允许 `/health``/logs``/api/` 前缀;允许方法为 `GET``HEAD``POST``DELETE``PATCH`。Code Queue 只在 Compose 内网暴露 `4222/tcp`,不得映射或开放到公网。
- UniDesk 前端:`用户服务 / Code Queue` React 页面负责展示队列卡片、任务 ID、复制任务 ID、引用按钮、任务耗时、默认模型、模型下拉、执行 Provider 下拉、执行模式下拉、Provider/模式对应默认工作目录、显式入队份数、引用任务 ID、清空输入、创建成功提示、MiniMax judge 状态、Codex CLI-like 输出流、attempt 终态、追加 prompt、打断和手动重试控件;选择 `windows-native` 时应优先切到支持 Windows 原生 Codex 的非主 server Provider,并把工作目录提示切到 `/mnt/<drive>` 默认路径;整个 agent loop 消息流统一命名为专有名词 `Trace``Trace` 包含 assistant message、user prompt、system event 和 tool callCode Queue 与 Pipeline/OpenCode messages 必须共用 `src/components/frontend/src/trace.tsx` 的 Trace 公共组件、统一 Trace item 接口和 codex/opencode port 适配层;连续 read/edit/run 工具调用只是在 Trace 内折叠为可展开工具调用组,汇总格式至少包含 `xx read, xx edit, xx run`,并展示读取文件、编辑文件、运行命令和耗时摘要;最近 3 个工具调用保持展开,工具调用内容不得自动换行且必须在工具调用块内部横向滚动,工具调用组展开后不得再增加额外左侧缩进;message 与 prompt 必须自动换行,普通 message 不显示左侧项目符号缩进且永不折叠;点击队列卡片引用按钮必须自动把该任务 ID 写入提交表单的引用任务 ID 输入框;引用任务 ID 创建新任务时必须自动注入 `bun scripts/cli.ts codex task <taskId>` 的提示,让 Codex 读取初始 prompt、最后消息和工具摘要后继续;连续执行同一 prompt 应使用 `入队份数` 一次性生成多条队列任务,而不是依赖快速连点按钮;左侧 queue/session 卡片的 `QUEUED` 状态必须显示原因,例如 `QUEUED(PREV TASK)``QUEUED(MEM LIMIT)``QUEUED(ACTIVE LIMIT)`;原始任务 JSON 只能通过显式 `查看原始JSON` 打开。
### MDTODO V3S-Managed
当前 MDTODO 作为 `id=mdtodo``v3sctl-managed` 用户服务登记在 `config.json`,用于把 D601 Windows 工作区 `F:\Work\vscode-mdtodo` 从 VS Code 扩展形态拆成 UniDesk 可代理的后端服务:
- Orchestrator`deployment.mode=v3sctl-managed``deployment.adapterServiceId=v3sctl-adapter``deployment.v3sServiceId=mdtodo``backend.proxyMode=v3sctl-adapter-http``backend.nodeBaseUrl=v3s://mdtodo`;正式链路只能是 `frontend -> backend-core -> v3sctl-adapter -> Kubernetes API service proxy -> Kubernetes Service mdtodo:4267`
- 代码与部署引用:后端源码位于 UniDesk 仓库 `src/components/microservices/mdtodo`Dockerfile 为 `src/components/microservices/mdtodo/Dockerfile`v3s manifest 为 `src/components/microservices/v3sctl-adapter/v3s/mdtodo.v3s.json`Kubernetes 运行清单为 `src/components/microservices/v3sctl-adapter/v3s/mdtodo.k8s.yaml`,镜像名固定为 `unidesk-mdtodo:d601`
- 持久化边界:D601 的 `F:\Work\vscode-mdtodo` 先同步到 k3s 可见的 WSL hostPath `/home/ubuntu/cq-deploy/.state/mdtodo-workspace`Pod 将该目录挂载为 `/workspace`,后端直接读写 Markdown TODO 文件;`.state/mdtodo/logs` 只保存 JSONL 日志,不作为任务权威状态。该服务不得把原 VS Code webview 前端或 VSIX 构建产物作为浏览器入口。
- API`GET /health``GET /live``GET /logs``GET /api/files``GET /api/tasks?file=...``GET|PATCH|DELETE /api/tasks/{id}``POST /api/tasks``GET|PUT /api/content``POST /api/execute-command``/health` 必须证明 hostPath 可读并至少能扫描到 TODO Markdown 文件。
- 代理路径:只允许 `/health``/live``/logs``/api/` 前缀;允许方法为 `GET``HEAD``POST``PUT``PATCH``DELETE`。业务请求不得退化为 provider-gateway 直连、NodePort 或 D601 本机端口。
- UniDesk 前端:`用户服务 / MDTODO` React 页面负责展示文件列表、任务树、任务状态、标题/正文编辑、新增/删除任务、执行命令生成和显式原始 JSON 按钮;默认页面不得裸铺完整 Markdown 或 JSON。
## D601 User Services
当前 `D601` 同时承载以下 UniDesk 用户服务: