Files
ycode/docs/三模块首批开发记录-2026-10-17.md
T

61 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 定时任务、资料库、项目:首批开发与验收记录
日期:2026-10-17。用户“是否可以开发了”之后,按主上下文规划/集成、三个执行 agent 限定文件边界的方式完成首批本地链路。安全中心不在此批。此前未提交的代码、文档和图标改动均保留,未重置工作树,未重启用户正在使用的 YCode。
本记录描述实际实现与验证,不代表三个模块已完整 1:1。原版依据继续沿用各专项拆解中的固定 REA Evidence(5.8.2 有效历史内容、5.8.3 新增模块证据);本轮没有通过其他渠道查看 WorkBuddy,也没有导航其运行中的用户任务。
## 已实现
| 模块 | 首批实际能力 | 入口/存储 |
| --- | --- | --- |
| 定时任务 | 单次、间隔、每天、每周、双周、每月、每年;真实新建/编辑、启停、手动运行、删除、搜索/筛选和运行记录 | 左栏“定时任务”;`userData/automations.json` 同文件保存定义和运行记录 |
| 实际执行 | 按定义快照创建会话,冻结项目/空间/模型/权限/思考强度;运行中回填 sessionId/runId,终态等待真实消息保存;单任务不重叠,停止时取消并等待 | `main/automations/host.ts` 调用统一会话工厂和对话执行服务,不伪造 renderer/IPC sender |
| 资料库 | 跨任务本地产物,空间→任务→文件层级,搜索、类型/空间/收藏筛选、排序、最近访问、打开来源产物 | 左栏“资料库”;索引从会话重建;收藏/最近访问保存到 `userData/library/user-state.json` |
| 产物来源 | 只提取助手显式 artifact、成功 present_files、成功写入/编辑;同任务同路径汇总,跨任务保留独立来源;保留项目/空间/消息/工具来源 | `shared/artifact-index.ts` 为主进程资料库与工作台共用提取器;不会枚举源码目录或把读取/附件当作生成文件 |
| 文件边界 | 索引检查词法根及 realpath,跨根/symlink/junction 越界标为不可访问;打开时继续使用来源会话的资源读取守卫 | 不扩大 `resources:read` 原有范围,不移动或删除用户产物 |
| 项目 | 真实任务首发、失败草稿恢复;运行点按 run 的 sessionId;任务状态按活跃 run/最新助手结果推导,进行中/完成筛选;指令即时同步父对象;配置编辑保存真实能力引用 | “更多→项目”;原有项目仓库与 projectId/workspaceId 校验复用 |
共享执行抽取至 `main/chat-turn-service.ts`,会话校验抽取至 `main/session-factory.ts`。普通 `chat:send` 保持原传输返回值;只有主进程调用方取得内部 completion Promise。后台新建会话的 started 广播会补入侧栏,用户不必重新加载。
关闭窗口的广播访问已加隔离:枚举结果中的窗口、读取 webContents、判断销毁、发送消息均不能通过关闭对象异常中断执行。IPC 纯回归新增“销毁对象访问抛错”的场景,并等待实际回合终态屏障,避免把内存状态已完成误认为落盘及广播已完成。
## 验证
以下为本批实际执行的检查:
- `npm run build`:通过,包含 node/web 类型检查和生产构建。
- `npm run test:automations`:19 个 suite 通过,涵盖七类规则、DST、月底/闰年、持久化/损坏保护/恢复写失败、去重与竞争、后台轮询、长任务不阻塞后续任务、运行中会话关联、关闭时取消/等待和手动 claim 竞态。
- `npm run test:library`:通过,含成功/失败来源白名单、原生小写 OMP write、用户 artifact 排除、跨任务同路径、收藏/最近访问重载、跨根和 symlink/junction 检查;64 个未引用文件未被扫描,只有 3 个显式安全测试条目接受探测。
- `npm run test:project-tasks`、`node scripts/verify-project-storage.cjs`:通过,涵盖真实状态推导、筛选、能力引用 provider 身份、并发存储与损坏文件保护。
- `node scripts/verify-project-page.cjs`:最终生产构建上真实隔离 Electron 通过;报告 `.tmp/project-page-QBihjh/report.json`,包含指令父对象同步、配置编辑和页面几何/深色检查。
- `npm run test:conversation-ipc`、`test:chat`、`test:persistence`、`test:sessions`、`test:resources`、`test:artifacts`、`test:omp-session`:通过。旧 sessions/resources 测试适配了当前配置依赖与 ESM bundling,未通过跳过断言消除失败。
- `npm run test:three-modules`:生产 Electron、真实 OMP、真实 preload/IPC、仅绑定 localhost 的受控 OpenAI 上游通过。最终集成报告见下方更新。
- `node scripts/verify-new-task-switch.cjs`:最终生产构建上通过;报告 `.tmp/new-task-switch-58fWzV/report.json`,验证即时切页、准备占位、成功替换和首发失败恢复。
三模块端到端覆盖:
1. 单次任务自动到期,真实模型请求→宿主写文件→最终回复→消息落盘→自动化成功记录;模型、空间、项目归属正确,任务及时出现在侧栏。
2. 手动运行立即返回运行中记录;回复仍被上游 gate 阻塞时就能读取真实会话身份;重复执行被拒绝。
3. 上游失败写为 failed,实际助手消息为 error;暂停后拒绝手动运行。
4. 资料库只收录真实生成文件,收藏与最近访问可持久化;点击通过来源任务打开真实文件。
5. renderer 重载保留定义、运行记录和收藏;浅色/深色页面及编辑器截图可检查。
6. 可见表单创建/编辑双周规则,修改提示词不移动周期 anchor,页面启停和确认删除真实落盘。
7. 项目输入区首发切到实际对话并收到回复;另用未被 OMP 占用的独立测试空间模拟目录不可用,确认失败恢复草稿且不留下空任务。
截图为 YCode 自身运行时验收,不是原版逐像素差异报告。主题截图等待状态更新及颜色过渡完成,避免把切换中的白色卡片误当最终深色效果。
## 当前限制与下一批
- **资料库尚未完成个人资料存储与引用。** “我的资料/团队空间”明确未接入;本批本地产物索引不等于个人资料库或项目资产库。Markdown/CSV/文件夹/链接导入、资料编辑、显式引用 chip 到实际请求的统一解析(开发计划 C3/L3/L4)仍待开发。
- **项目动态/计划/资产尚未配置。** 项目待办、交接创建事项及资料关联、归档/删除等完整生命周期未接。配置中保存了专家/技能/连接器引用,不等于项目任务已自动激活这些能力。
- **不引入未经证实的自动策略。** 会话计划不自动变项目待办;生成文件不自动上传到个人/项目资料;不按轮数/复杂度硬编码拆解或沉淀;不把整个资料库作为每次请求默认上下文。
- **调度是本地策略。** 主进程运行时每秒检查;默认 60 秒迟到容差,超出后记录 missed 并跳过,不自动重试,重启未完成记录标为中断失败。同一任务不重叠,不代表已实现原版服务端队列/全局并发策略。应用完全退出后不执行。以上包括迟到容差均是 YCode 本地实现,原版时区/DST/漏跑/重试行为仍需 REA 证据验证。
- **视觉与交互未完整 1:1。** 列表与表单复用现有 token 及已回收尺寸依据;编辑器存在本地执行设置扩展、原生选择/日期控件、模板图标和未采集状态等差异。已知下一批还须对齐原版默认 fullAccess 与保存确认、禁止遮罩/Escape 关闭的编辑器约束(本批默认 default-sandbox 且允许关闭)、有效期到期时的页面刷新边界。尚缺同数据/同主题/同视口的原版像素及动效验收,不能把本批功能通过标记为完整复刻。
- 云成员协作、远端通知与产品侧子代理调度继续按用户原授权暂后。安全中心另行拆解。
## 最终报告路径
- 最终全链路:`.tmp/three-modules-x8nrxz/report.json`;截图 `library-light.png`、`library-dark.png`、`automations-light.png`、`automations-dark.png`、`automation-editor-dark.png`。先前通过报告 `.tmp/three-modules-Hf6e02/report.json` 保留。
- 最终构建日志:`.tmp/three-modules-build.log`。
- 独立窗口回归:广播关闭对象访问隔离后,`npm run test:task-window` 通过;报告 `.tmp/task-window-stream-fRrpwz/report.json`。真实 OMP 验证窗口内发送/流式/取消、关闭发送窗口后持久化终态、重开活跃回合及双窗口同步。首轮超时保留在 `.tmp/task-window-stream-Gw2hxF/failure.json`,不抹去失败记录。