Skip to content

复用项目任务,完善冲突取回与自动测试及未推送状态 - #6

Merged
XDoldyuan merged 8 commits into
mainfrom
feat/reuse-project-task
Nov 3, 2026
Merged

XDoldyuan merged 8 commits into
mainfrom
feat/reuse-project-task

Conversation

@XDoldyuan

@XDoldyuan XDoldyuan commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

同一执行项目的冲突修复、UE 更新和高级工作流复用一个项目处理任务;各请求独立记录,未知请求不重放。UE 磁盘预检自动读取和估算,不要求用户手填容量上限。README 记录完整冲突流程及分阶段恢复合并内容的交接。

日常工作页显示当前分支、“已提交、未推送”数量及提交清单,即使工作区干净也提示未上传提交。基于本机远端缓存判断,分别显示领先/落后和待核对,不自动联网或推送。

Stash 支持条目、文件清单、本地/服务器最新版本对比、安全取回。真实隔离预检、文件/索引备份、固定条目标识、持久回执保护完整取回。冲突时可在同一项目任务协助合并并取回全部文件,保留双方文本、原有修改、暂存状态和原 Stash;二进制和语义取舍先询问。检查只读,不重新 apply 或自动更新。任务结束仍保持写入保护,核对后才解除;取消须匹配未改动指纹。

冲突修复先列出真实冲突清单(编号、相对路径、类型、原因、双方来源及建议),再由用户逐文件选择建议合并、保留本地、保留另一方、逐段决定或暂不处理。文本先预览再确认写入;二进制只给适用选项。选择按文件生效,最多三个独立文件一轮,不默认批量覆盖;内容或版本变化重新确认。暂不处理继续待解决,覆盖隔离预检冲突而不把整条 Stash 当成冲突。清单与选择由原项目 AI 任务展示,不新增窗口,缺选择框时用编号等待回答。
新增完整预览与重选:逐段决定后展示完整候选和相对本地差异,MD 给可读预览,长文件不得截断冒充全文;确认写入前可返回段落、撤销本轮选择或取消,源版本/选择变化后重新预览确认。实际写入前保存本轮逐文件原内容/索引及备份,写后记录摘要;撤销写入仅恢复用户确认的本轮文件,遇后续改动或缺快照先停下核对,不重置整库或整个索引。撤销/重写使测试回报回到 pending,再次完成后重测。

支持在原 AI 任务选择多份文件采用同一方案;使用真实可用的多选工具,缺多选时用稳定编号选集合。先列范围、数量、来源和逐项影响,逐文件预览确认才批量写入;二进制排除文本合并,失败停止剩余项并说明已写/未写与备份。此为 AI 工作流指令,未内置逐段编辑器或一键撤销执行器,真实交互待安装后验收。
新增合并后自动测试:任务读取项目规则、测试脚本和 CI,最终合并内容恢复后实际运行适用测试,再通过 report_conflict_tests 记录命令、退出码、摘要。按 Host 注入会话及处理编号核对回报,不受当前界面切换项目影响。测试回报为空、失败或缺少退出码不能 passed;任务结束本身不代表测试通过,测试后 Git 指纹变化要求重测。恢复卡显示待验证/运行中/通过/失败/无法运行及命令详情。Stash 完成确认要求测试通过;保留未改动取消及明确的人工解除入口,人工解除不会标记测试通过或取回完成。插件记录的是 Agent 执行回报,不是 Host 对进程的独立认证;更新中途解除限制只是交接,最终内容恢复后才测试。

不修改 Cindy 源码,不自动提交/上传用户项目或新增窗口。独立应用尚未接入 AI 修复/自动测试;旧任务不自动应用新指令。

验证:新增冲突服务/测试回报定向 14 项通过,覆盖通过/失败/缺少退出码/无入口、会话与编号归属、切换项目、状态变化失效、人工解除和防重放。浏览器使用正式 UI、真实 Git/Node worker 和配置控制器,真实执行成功及故意失败命令,验证未测和失败不能确认取回,测试通过后才确认;模拟的是 AI 派发/回报传输,真实模型待安装后验收。320/860 明暗模式、原更新恢复及实际 Electron IPC/Stash 取回回归通过。

Windows 完整 Node 回归仍为原有 23 项平台夹具失败,失败项集合未增加;本机发布脚本测试受 Windows shell/hook 夹具限制,不能算通过,完整结果以当前提交 CI 为准。仓库/语法检查通过,Forge 0.2.34 包的 66 个生产文件与源码逐字节一致。

当前提交 fe8d997(0.2.34)已推送,云端 214/214 项 Node 测试、29 项发布测试、三平台核心及全部 CodeQL 检查通过。保持草稿,仅上传 feat/reuse-project-task;未合并 main、未安装、未发布 Release。

@XDoldyuan XDoldyuan changed the title 复用单个项目处理任务,并补齐 README 冲突恢复流程 复用项目处理任务,完善冲突流程并增加分支与 Stash 对比 Oct 30, 2026
Comment thread tests/stash-ui-check.mjs Fixed
@XDoldyuan XDoldyuan changed the title 复用项目处理任务,完善冲突流程并增加分支与 Stash 对比 复用项目处理任务,完善冲突流程与 Stash 查看、对比和安全取回 Oct 30, 2026
@XDoldyuan XDoldyuan changed the title 复用项目处理任务,完善冲突流程与 Stash 查看、对比和安全取回 复用项目任务,完善 Stash 冲突取回并显示未推送状态 Oct 30, 2026
@XDoldyuan XDoldyuan changed the title 复用项目任务,完善 Stash 冲突取回并显示未推送状态 复用项目任务,完善冲突取回与自动测试及未推送状态 Nov 2, 2026
@XDoldyuan
XDoldyuan marked this pull request as ready for review November 3, 2026 01:22
@XDoldyuan
XDoldyuan merged commit 71becc1 into main Nov 3, 2026
10 checks passed
@XDoldyuan
XDoldyuan deleted the feat/reuse-project-task branch November 3, 2026 01:24
@greptile-apps

greptile-apps Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[High impact] The PR changes project-task and Git behavior across several common plugin workflows.

合并前应补齐冲突任务的会话编号,否则正常测试回报可能始终无法保存。

Findings

  1. P1 原任务的测试回报被拒绝 ▶
  2. P2 合并未结束却显示通过 ▶
Fix with agent prompt
### Issue 1
plugin/conflict-service.js:26
如果 `agent.errand` 先返回 `jobId`,随后由 `queryErrand` 返回 `sessionId`,冲突记录就始终缺少会话编号。`conflict-read` 只保存任务状态,没有补存 `reply.sessionId`,而这里要求会话编号完全匹配。因此,原任务的所有测试回报都会被拒绝,Stash 协助也无法正常确认测试通过。请像 `project-sidebar.js` 一样,从查询回执补存会话编号。

### Issue 2
plugin/conflict-service.js:30-31
这里读取的 `diagnosis-status` 没有返回 `pendingGit`,所以未完成 Git 操作的检查永远不生效。项目仍有 `MERGE_HEAD`、正在 rebase 或存在未合并文件时,只要任务回报零退出码且没有插件写锁,就会保存并显示测试通过。`verifyTests` 也依赖同一个缺失字段。后续解除限制仍会被另一道检查拦住,但页面已经显示了错误状态。请让这条只读状态路径返回真实的 `pendingGit`,并用真实 Git 状态补充回归测试。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

本次改动让同一执行目录复用项目处理任务,并新增 Stash 查看、隔离预检、备份取回、冲突协助和测试回报。日常页面也新增当前分支和未推送提交清单。

  • Workflows and conflict help continue in one task for each project directory.
  • Conflict help checks files, records test results, and protects uncertain repairs.
  • Stash entries can be compared and restored after a separate preflight.
  • The work page shows the current branch and commits not yet pushed.
  • UE update instructions estimate disk space instead of asking users to set a capacity limit.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[选择固定 Stash] --> B[隔离预检]
  B -->|通过并确认| C[备份文件与索引]
  C --> D[执行整条取回]
  D -->|结果不确定| E[持久回执阻止后续写入]
  B -->|冲突| F[复用项目 AI 任务]
  E --> F
  F --> G[确认方案并完成合并]
  G --> H[运行项目测试并回报]
  H --> I[核对会话编号与处理编号]
  I --> J[用户核对并解除 AI 限制]
  J --> K[必要时单独确认取回回执]
Loading

Reviews (1) · Last reviewed commit: "feat: preview full merges and guide undo..." · Reviewed by Greptile

async function handle(method,params,source) {
if(method==='conflict-tests-report') {
const data=await store.read(),sessionId=source.sessionContext?.session_id;
const entry=Object.entries(data.conflictRepairsByDirectory||{}).find(([,item])=>item.id===params.recordId&&item.sessionId===sessionId);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 原任务的测试回报被拒绝

如果 agent.errand 先返回 jobId,随后由 queryErrand 返回 sessionId,冲突记录就始终缺少会话编号。conflict-read 只保存任务状态,没有补存 reply.sessionId,而这里要求会话编号完全匹配。因此,原任务的所有测试回报都会被拒绝,Stash 协助也无法正常确认测试通过。请像 project-sidebar.js 一样,从查询回执补存会话编号。

Prompt To Fix With AI
This is a comment left during a code review.
Path: plugin/conflict-service.js
Line: 26

Comment:
**原任务的测试回报被拒绝**

如果 `agent.errand` 先返回 `jobId`,随后由 `queryErrand` 返回 `sessionId`,冲突记录就始终缺少会话编号。`conflict-read` 只保存任务状态,没有补存 `reply.sessionId`,而这里要求会话编号完全匹配。因此,原任务的所有测试回报都会被拒绝,Stash 协助也无法正常确认测试通过。请像 `project-sidebar.js` 一样,从查询回执补存会话编号。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment on lines +30 to +31
const actual=await git(record.directory,{action:'diagnosis-status'});
if(actual.pendingGit||actual.operationLocked||!actual.fingerprint)fail('TESTS_UNVERIFIED','项目仍有未结束操作或状态无法核对,请先完成合并再测试。');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 合并未结束却显示通过

这里读取的 diagnosis-status 没有返回 pendingGit,所以未完成 Git 操作的检查永远不生效。项目仍有 MERGE_HEAD、正在 rebase 或存在未合并文件时,只要任务回报零退出码且没有插件写锁,就会保存并显示测试通过。verifyTests 也依赖同一个缺失字段。后续解除限制仍会被另一道检查拦住,但页面已经显示了错误状态。请让这条只读状态路径返回真实的 pendingGit,并用真实 Git 状态补充回归测试。

Prompt To Fix With AI
This is a comment left during a code review.
Path: plugin/conflict-service.js
Line: 30-31

Comment:
**合并未结束却显示通过**

这里读取的 `diagnosis-status` 没有返回 `pendingGit`,所以未完成 Git 操作的检查永远不生效。项目仍有 `MERGE_HEAD`、正在 rebase 或存在未合并文件时,只要任务回报零退出码且没有插件写锁,就会保存并显示测试通过。`verifyTests` 也依赖同一个缺失字段。后续解除限制仍会被另一道检查拦住,但页面已经显示了错误状态。请让这条只读状态路径返回真实的 `pendingGit`,并用真实 Git 状态补充回归测试。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant