f4b9620的任务收尾

This commit is contained in:
2025-12-18 11:22:54 +08:00
parent f4b96202d0
commit 83a63046b5
14 changed files with 328 additions and 64 deletions

View File

@@ -1,5 +1,5 @@
{ {
"next_number": 13, "next_number": 14,
"branches": [ "branches": [
{ {
"number": 1, "number": 1,
@@ -138,6 +138,18 @@
"task_summary": "开始任务准备: 修复 aide finish 后 .lock 文件残留问题", "task_summary": "开始任务准备: 修复 aide finish 后 .lock 文件残留问题",
"started_at": "2025-12-18T10:09:00+08:00", "started_at": "2025-12-18T10:09:00+08:00",
"status": "active" "status": "active"
},
{
"number": 13,
"branch_name": "aide/013",
"source_branch": "aide/012",
"start_commit": "f4b96202d0d4407407e9291f74dd74af3b1067a9",
"task_id": "2025-12-18T10-41-43",
"task_summary": "开始任务准备: 改进 aide flow 的 git 工作流",
"started_at": "2025-12-18T10:41:43+08:00",
"status": "finished",
"end_commit": "f4b96202d0d4407407e9291f74dd74af3b1067a9",
"finished_at": "2025-12-18T11:22:54+08:00"
} }
] ]
} }

View File

@@ -1,5 +1,15 @@
# Git 分支概况 # Git 分支概况
## aide/013
- **任务**: 开始任务准备: 改进 aide flow 的 git 工作流
- **任务ID**: 2025-12-18T10-41-43
- **源分支**: aide/012
- **起始提交**: f4b9620
- **结束提交**: f4b9620
- **状态**: finished
- **时间**: 2025-12-18 10:41 ~ 11:22
## aide/012 ## aide/012
- **任务**: 开始任务准备: 修复 aide finish 后 .lock 文件残留问题 - **任务**: 开始任务准备: 修复 aide finish 后 .lock 文件残留问题

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -0,0 +1,49 @@
@startuml program-logic
title 程序逻辑流图finish_branch_merge 重构
start
:进入 finish_branch_merge();
note right: branch.py
:获取分支信息\nbranch_info = get_active_branch_info();
if (源分支有新提交?) then (是)
:创建临时分支合并\n(保持现有逻辑);
:返回提示信息;
stop
else (否)
:进入 _merge_normal();
endif
partition "清理操作" {
:删除 .aide/*.lock;
:删除 task-spec.md;
:清空 task-now.md\n(保留文件);
:备份并删除\nflow-status.json;
:备份并删除\ndecisions/*.json;
}
partition "创建临时提交" {
:git add -A;
:git commit\n"清理任务临时文件";
}
partition "切换并合并" {
:git checkout\n源分支;
:清理 .lock 文件;
:git merge --squash\n任务分支;
:构建提交信息\n格式: {hash}的任务收尾;
:git add -A;
:git commit\n收尾提交;
}
partition "更新记录" {
:更新分支记录\nstatus = finished;
:git add -A;
:git commit\n更新分支记录;
}
:返回成功;
stop
@enduml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View File

@@ -1,48 +1,45 @@
@startuml task-flow @startuml task-flow
!theme plain title 任务执行流程图:改进 aide flow 的 git 工作流
skinparam backgroundColor #FFFFFF
skinparam activityBackgroundColor #F5F5F5
skinparam activityBorderColor #333333
title 任务执行流程图 - 多模块调整
|#LightBlue|子计划1: 创建 skill|
start start
:读取 statements/optimize.md; :阅读任务细则;
:分析并扩展内容; note right: task-spec.md
:创建 task-parser.md;
:验证 skill 结构完整性;
|#LightGreen|子计划2: 修改 run 命令| partition "代码修改" {
:阅读现有 run.md; :修改 branch.py;
:设计口语化检测逻辑; note right
:添加 skill 触发规则; - 重构 _merge_normal()
:更新命令文档; - 添加清理函数
- 修改提交信息格式
end note
|#LightYellow|子计划3: 强化流程图规范| :修改 tracker.py;
:定义两种流程图类型; note right
:编写任务执行流程图规范; 调整 finish 触发逻辑
:编写程序逻辑流图规范; (如需要)
:更新 run.md 流程设计部分; end note
}
|#LightCoral|子计划4: 创建示例程序| partition "测试验证" {
:设计 Python 程序结构; :创建测试任务;
:创建 test-cache/demo-program/; :执行完整 flow 流程;
:实现模块化程序; :检查最终 git 历史;
:绘制程序逻辑流图;
:验证流程图规范有效性;
|#LightCyan|子计划5: 调整 git 提交顺序| if (只有 2 个提交?) then (是)
:分析 tracker.py 当前逻辑; :检查文件清理结果;
:重构 _apply_action 方法; if (清理正确?) then (是)
:确保状态先保存再提交; :验证通过;
:测试验证; else (否)
:修复清理逻辑;
|#Lavender|子计划6: 更新文档| -> 执行完整 flow 流程;
:更新 aide-plugin-skills.md; endif
:更新 aide-plugin-commands.md; else (否)
:更新 aide-program-flow.md; :修复合并逻辑;
:检查其他相关文档; -> 执行完整 flow 流程;
endif
}
:更新文档;
stop stop
@enduml @enduml

View File

@@ -0,0 +1,107 @@
{
"task_id": "2025-12-18T10-41-43",
"current_phase": "finish",
"current_step": 12,
"started_at": "2025-12-18T10:41:43+08:00",
"history": [
{
"timestamp": "2025-12-18T10:41:43+08:00",
"action": "start",
"phase": "task-optimize",
"step": 1,
"summary": "开始任务准备: 改进 aide flow 的 git 工作流",
"git_commit": "68db39fd46d28a8a22d4b8a3494d74be0fdcae47"
},
{
"timestamp": "2025-12-18T11:09:10+08:00",
"action": "next-step",
"phase": "task-optimize",
"step": 2,
"summary": "任务细则已确认",
"git_commit": "39477a4bdc09a9303d97239d1451aed22ae5739b"
},
{
"timestamp": "2025-12-18T11:09:24+08:00",
"action": "next-part",
"phase": "flow-design",
"step": 3,
"summary": "进入流程设计环节",
"git_commit": "88ae24d4a158fa17c5fd7f3cf38cf234718ef65d"
},
{
"timestamp": "2025-12-18T11:11:04+08:00",
"action": "next-step",
"phase": "flow-design",
"step": 4,
"summary": "流程图设计完成",
"git_commit": "100a1339821494213fd33272e83d4a063ed01295"
},
{
"timestamp": "2025-12-18T11:11:54+08:00",
"action": "next-part",
"phase": "impl",
"step": 5,
"summary": "流程设计完成,进入实现环节",
"git_commit": "6c2304e92cd353dd111b51082241c176a194c208"
},
{
"timestamp": "2025-12-18T11:15:53+08:00",
"action": "next-step",
"phase": "impl",
"step": 6,
"summary": "完成 branch.py 和 tracker.py 修改",
"git_commit": "5397a4f6007baca020549ef66f9945176b06513f"
},
{
"timestamp": "2025-12-18T11:18:38+08:00",
"action": "next-step",
"phase": "impl",
"step": 7,
"summary": "修复收尾提交逻辑,确保最终只有 2 个提交",
"git_commit": "59efe233b2e7976e674b39ed37739ae8ef59c162"
},
{
"timestamp": "2025-12-18T11:19:03+08:00",
"action": "next-part",
"phase": "verify",
"step": 8,
"summary": "实现完成,进入验证环节",
"git_commit": "fc347f6bd3a886a7558729d98acb124c0aa7c1c0"
},
{
"timestamp": "2025-12-18T11:20:24+08:00",
"action": "next-step",
"phase": "verify",
"step": 9,
"summary": "验证完成: 所有成功标准均已满足",
"git_commit": "f9bed1d6af0dfe2514756204045b8a51e59983f7"
},
{
"timestamp": "2025-12-18T11:20:50+08:00",
"action": "next-part",
"phase": "docs",
"step": 10,
"summary": "验证通过,进入文档环节",
"git_commit": "dee577df67aac98d65088cfa4243d9c37260812c"
},
{
"timestamp": "2025-12-18T11:22:42+08:00",
"action": "next-step",
"phase": "docs",
"step": 11,
"summary": "文档更新完成CHANGELOG.md 已更新",
"git_commit": "c7d44fc3d7b4fe1465cbd0ab20dade20cfe7de49"
},
{
"timestamp": "2025-12-18T11:22:53+08:00",
"action": "next-part",
"phase": "finish",
"step": 12,
"summary": "文档更新完成,进入收尾",
"git_commit": "41ccaa0b50054a28f543737e1eb33a9559c8b180"
}
],
"source_branch": "aide/012",
"start_commit": "f4b96202d0d4407407e9291f74dd74af3b1067a9",
"task_branch": "aide/013"
}

View File

@@ -2,6 +2,26 @@
本文件记录 Aide 项目对使用者可见的重要变更。 本文件记录 Aide 项目对使用者可见的重要变更。
## 2025-12-18
### 变更
**aide flow finish 流程重构**
- 简化 git 历史finish 后原分支只保留 2 个提交(起始 + 收尾)
- 收尾提交信息格式改为:`{起始哈希}的任务收尾`
- 分支记录不再保存 `end_commit`(简化数据结构)
**finish 时自动清理任务文件**
- 删除 `.aide/*.lock` 文件
- 删除任务细则文件(`task.spec` 配置路径)
- 清空任务原文件(`task.source` 配置路径,保留文件本身)
- 备份并删除 `flow-status.json``.aide/logs/{task_id}-status.json`
- 备份并删除 `decisions/*.json``.aide/logs/{task_id}-decisions/`
### 修改的文件
- `aide-program/aide/flow/branch.py` - 重构 `_merge_normal()` 方法,新增 `_cleanup_task_files()` 清理函数
- `aide-program/aide/flow/tracker.py` - 传递 `ConfigManager``BranchManager`
## 2025-12-17 ## 2025-12-17
### 修复 ### 修复

View File

@@ -3,14 +3,18 @@
from __future__ import annotations from __future__ import annotations
import json import json
import shutil
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any, TYPE_CHECKING
from aide.flow.errors import FlowError from aide.flow.errors import FlowError
from aide.flow.git import GitIntegration from aide.flow.git import GitIntegration
from aide.flow.utils import now_iso from aide.flow.utils import now_iso
if TYPE_CHECKING:
from aide.core.config import ConfigManager
@dataclass @dataclass
class BranchInfo: class BranchInfo:
@@ -86,13 +90,15 @@ class BranchesData:
class BranchManager: class BranchManager:
"""管理 aide flow 任务分支""" """管理 aide flow 任务分支"""
def __init__(self, root: Path, git: GitIntegration): def __init__(self, root: Path, git: GitIntegration, cfg: "ConfigManager"):
self.root = root self.root = root
self.git = git self.git = git
self.cfg = cfg
self.aide_dir = root / ".aide" self.aide_dir = root / ".aide"
self.branches_json = self.aide_dir / "branches.json" self.branches_json = self.aide_dir / "branches.json"
self.branches_md = self.aide_dir / "branches.md" self.branches_md = self.aide_dir / "branches.md"
self.lock_path = self.aide_dir / "flow-status.lock" self.lock_path = self.aide_dir / "flow-status.lock"
self.logs_dir = self.aide_dir / "logs"
self._data: BranchesData | None = None self._data: BranchesData | None = None
self._current_branch_info: BranchInfo | None = None self._current_branch_info: BranchInfo | None = None
@@ -104,6 +110,71 @@ class BranchManager:
except OSError: except OSError:
pass pass
def _cleanup_task_files(self, task_id: str) -> None:
"""清理任务相关文件
- 删除 .aide/*.lock
- 删除任务细则文件 (task.spec)
- 清空任务原文件 (task.source),保留文件本身
- 备份并删除 flow-status.json
- 备份并删除 decisions/*.json
"""
# 确保 logs 目录存在
self.logs_dir.mkdir(parents=True, exist_ok=True)
# 1. 删除所有 .lock 文件
for lock_file in self.aide_dir.glob("*.lock"):
try:
lock_file.unlink()
except OSError:
pass
# 2. 删除任务细则文件
task_spec = self.cfg.get_value("task.spec")
if task_spec:
spec_path = self.root / task_spec
if spec_path.exists():
try:
spec_path.unlink()
except OSError:
pass
# 3. 清空任务原文件(保留文件本身)
task_source = self.cfg.get_value("task.source")
if task_source:
source_path = self.root / task_source
if source_path.exists():
try:
source_path.write_text("", encoding="utf-8")
except OSError:
pass
# 4. 备份并删除 flow-status.json
status_path = self.aide_dir / "flow-status.json"
if status_path.exists():
backup_name = f"{task_id}-status.json"
backup_path = self.logs_dir / backup_name
try:
shutil.copy2(status_path, backup_path)
status_path.unlink()
except OSError:
pass
# 5. 备份并删除 decisions/*.json
decisions_dir = self.aide_dir / "decisions"
if decisions_dir.exists():
decision_files = list(decisions_dir.glob("*.json"))
if decision_files:
# 创建备份目录
backup_decisions_dir = self.logs_dir / f"{task_id}-decisions"
backup_decisions_dir.mkdir(parents=True, exist_ok=True)
for decision_file in decision_files:
try:
shutil.copy2(decision_file, backup_decisions_dir / decision_file.name)
decision_file.unlink()
except OSError:
pass
def load_branches(self) -> BranchesData: def load_branches(self) -> BranchesData:
"""加载分支概况""" """加载分支概况"""
if self._data is not None: if self._data is not None:
@@ -319,33 +390,37 @@ class BranchManager:
branch_info: BranchInfo, branch_info: BranchInfo,
task_summary: str, task_summary: str,
) -> tuple[bool, str]: ) -> tuple[bool, str]:
"""正常合并流程squash 合并任务分支到源分支""" """正常合并流程:清理 → 临时提交 → squash 合并 → 收尾提交"""
source_branch = branch_info.source_branch source_branch = branch_info.source_branch
task_branch = branch_info.branch_name task_branch = branch_info.branch_name
task_id = branch_info.task_id
start_commit = branch_info.start_commit
# 切回源分支 # 1. 执行任务文件清理(在工作分支上)
self._cleanup_task_files(task_id)
# 2. 创建临时提交保存清理后的变更
self.git.add_all()
self.git.commit("[aide] 清理任务临时文件")
# 3. 切回源分支
self.git.checkout(source_branch) self.git.checkout(source_branch)
# 切换分支后清理 lock 文件(确保 master 上的 lock 文件也被删除) # 切换分支后清理 lock 文件
self._cleanup_lock_file() self._cleanup_lock_file()
# squash 合并任务分支 # 4. squash 合并任务分支
self.git.merge_squash(task_branch) self.git.merge_squash(task_branch)
# 创建压缩提交(结束提交 # 5. 先更新分支记录(不再记录 end_commit
self.git.add_all() self.record_branch_finish(status="finished")
commit_msg = f"[aide] 任务: {task_summary}"
end_commit = self.git.commit(commit_msg)
# 记录完成(更新 branches.json/md # 6. 创建收尾提交(包含 squash 内容和分支记录更新
self.record_branch_finish( # 格式:{起始哈希}的任务收尾
status="finished",
end_commit=end_commit,
)
# 收尾提交:清理工作区(包含 branches.json/md 的更新)
self.git.add_all() self.git.add_all()
self.git.commit("[aide] 收尾: 更新分支记录") short_hash = start_commit[:7] if start_commit else "unknown"
commit_msg = f"{short_hash}的任务收尾"
self.git.commit(commit_msg)
return True, f"任务分支已合并到 {source_branch}" return True, f"任务分支已合并到 {source_branch}"

View File

@@ -24,7 +24,7 @@ class FlowTracker:
self.cfg = cfg self.cfg = cfg
self.storage = FlowStorage(root) self.storage = FlowStorage(root)
self.git = GitIntegration(root) self.git = GitIntegration(root)
self.branch_mgr = BranchManager(root, self.git) self.branch_mgr = BranchManager(root, self.git, cfg)
def start(self, phase: str, summary: str) -> bool: def start(self, phase: str, summary: str) -> bool:
return self._run(action="start", to_phase=phase, text=summary) return self._run(action="start", to_phase=phase, text=summary)

View File

@@ -1,6 +0,0 @@
我期望的是起始时的提交是为了保证工作仓库状态干净同时保存版本要记录但起始它不是flow的一环它在start之前
而后面的finish时的提交完成之后要记录finish时的提交哈希到flow数据中同时把这个记录为该工作分支的结束分支
而且flow到这里其实已经结束了后续的过程是清理也仅仅只是单纯地清理
我希望能在工作分支aide/NNN完成删除多余文件和收尾的清理提交
然后在工作仓库干净的情况下把这个工作分支合并到原分支的起始提交处然后把从起始提交到结束提交中的所有提交都进行squash压缩
最后在原分支的git历史中应该只能看到3个提交起始、结束、收尾且此时仓库状态干净