caigode 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- caigode-0.1.0/.env.example +3 -0
- caigode-0.1.0/.github/workflows/ci.yml +34 -0
- caigode-0.1.0/.github/workflows/release.yml +60 -0
- caigode-0.1.0/.gitignore +20 -0
- caigode-0.1.0/.harness/prompts/discuss.md +54 -0
- caigode-0.1.0/.harness/prompts/run.md +36 -0
- caigode-0.1.0/.harness/state/architecture.md +110 -0
- caigode-0.1.0/.harness/state/codex-progress.md +111 -0
- caigode-0.1.0/.harness/state/decisions-needed.md +9 -0
- caigode-0.1.0/.harness/state/feature_list.json +600 -0
- caigode-0.1.0/.harness/state/spec.md +48 -0
- caigode-0.1.0/PKG-INFO +159 -0
- caigode-0.1.0/README.md +152 -0
- caigode-0.1.0/codex.sh +740 -0
- caigode-0.1.0/pyproject.toml +25 -0
- caigode-0.1.0/src/caigode/__init__.py +1 -0
- caigode-0.1.0/src/caigode/application/agent_service.py +475 -0
- caigode-0.1.0/src/caigode/application/tool_runtime.py +326 -0
- caigode-0.1.0/src/caigode/cli.py +119 -0
- caigode-0.1.0/src/caigode/config.py +191 -0
- caigode-0.1.0/src/caigode/domain/task.py +51 -0
- caigode-0.1.0/src/caigode/infra/openai_client.py +232 -0
- caigode-0.1.0/src/caigode/infra/review_artifacts.py +131 -0
- caigode-0.1.0/src/caigode/infra/shell.py +62 -0
- caigode-0.1.0/src/caigode/infra/state_store.py +256 -0
- caigode-0.1.0/src/caigode/infra/workspace.py +74 -0
- caigode-0.1.0/src/caigode/interface/repl.py +180 -0
- caigode-0.1.0/src/caigode/interface/review_handler.py +78 -0
- caigode-0.1.0/src/caigode/interface/run_handler.py +137 -0
- caigode-0.1.0/src/caigode/interface/status_handler.py +75 -0
- caigode-0.1.0/tests/__init__.py +1 -0
- caigode-0.1.0/tests/fixtures/e2e_workspace/docs/context.txt +1 -0
- caigode-0.1.0/tests/test_agent_service.py +232 -0
- caigode-0.1.0/tests/test_cli_help.py +17 -0
- caigode-0.1.0/tests/test_config.py +175 -0
- caigode-0.1.0/tests/test_e2e_flow.py +143 -0
- caigode-0.1.0/tests/test_openai_client.py +215 -0
- caigode-0.1.0/tests/test_repl_chat.py +182 -0
- caigode-0.1.0/tests/test_review_command.py +116 -0
- caigode-0.1.0/tests/test_run_command.py +121 -0
- caigode-0.1.0/tests/test_state_store.py +85 -0
- caigode-0.1.0/tests/test_status_command.py +99 -0
- caigode-0.1.0/tests/test_workspace_tools.py +52 -0
- caigode-0.1.0/uv.lock +79 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
- main
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.11", "3.12"]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Setup uv
|
|
23
|
+
uses: astral-sh/setup-uv@v5
|
|
24
|
+
|
|
25
|
+
- name: Setup Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: ${{ matrix.python-version }}
|
|
29
|
+
|
|
30
|
+
- name: Sync dependencies
|
|
31
|
+
run: uv sync --dev
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: uv run pytest -q
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Setup Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
|
|
23
|
+
- name: Install build tooling
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
python -m pip install build twine
|
|
27
|
+
|
|
28
|
+
- name: Build distributions
|
|
29
|
+
run: python -m build
|
|
30
|
+
|
|
31
|
+
- name: Check distributions
|
|
32
|
+
run: twine check dist/*
|
|
33
|
+
|
|
34
|
+
- name: Upload dist artifacts
|
|
35
|
+
uses: actions/upload-artifact@v4
|
|
36
|
+
with:
|
|
37
|
+
name: dist
|
|
38
|
+
path: dist/*
|
|
39
|
+
|
|
40
|
+
- name: Create GitHub Release
|
|
41
|
+
uses: softprops/action-gh-release@v2
|
|
42
|
+
with:
|
|
43
|
+
files: dist/*
|
|
44
|
+
generate_release_notes: true
|
|
45
|
+
|
|
46
|
+
publish-pypi:
|
|
47
|
+
needs: build
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
permissions:
|
|
50
|
+
id-token: write
|
|
51
|
+
|
|
52
|
+
steps:
|
|
53
|
+
- name: Download dist artifacts
|
|
54
|
+
uses: actions/download-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: dist
|
|
57
|
+
path: dist
|
|
58
|
+
|
|
59
|
+
- name: Publish to PyPI
|
|
60
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
caigode-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Codex local runtime
|
|
2
|
+
.codex-home/
|
|
3
|
+
|
|
4
|
+
# Harness runtime artifacts
|
|
5
|
+
.harness/logs/*.log
|
|
6
|
+
.harness/state/discussion.lock
|
|
7
|
+
.harness/state/last_thread_id.txt
|
|
8
|
+
.harness/state/harness-protected.snapshot
|
|
9
|
+
.harness/state/harness-protect-alert.md
|
|
10
|
+
|
|
11
|
+
# macOS
|
|
12
|
+
.DS_Store
|
|
13
|
+
|
|
14
|
+
# pycache
|
|
15
|
+
__pycache__/
|
|
16
|
+
*.pyc
|
|
17
|
+
*.pyo
|
|
18
|
+
*.pyd
|
|
19
|
+
|
|
20
|
+
.caigode/*
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
你现在是“架构优先”的需求澄清代理。先定架构与任务边界,再进入执行。
|
|
2
|
+
|
|
3
|
+
必须执行的流程(不可跳过):
|
|
4
|
+
1) 先阅读并更新这些文件:
|
|
5
|
+
- .harness/state/spec.md
|
|
6
|
+
- .harness/state/architecture.md
|
|
7
|
+
- .harness/state/feature_list.json
|
|
8
|
+
- .harness/state/decisions-needed.md
|
|
9
|
+
2) 先用“选项式问卷”向用户澄清,不接受仅泛泛描述。每次最多问 3 个问题,每个问题都要带候选项与推荐项。
|
|
10
|
+
3) 所有关键问题确认后,再落盘架构与任务树;未确认项必须进入决策门控,不得假设完成。
|
|
11
|
+
|
|
12
|
+
问卷最小集合(必须覆盖):
|
|
13
|
+
A. 分层模型(单选)
|
|
14
|
+
- A1: 三层(接口/领域/基础设施)
|
|
15
|
+
- A2: 四层(接口/编排/领域/基础设施)【推荐】
|
|
16
|
+
- A3: 六边形(端口/适配器)
|
|
17
|
+
- A4: 事件驱动(命令/事件/投影)
|
|
18
|
+
B. 模块边界(多选)
|
|
19
|
+
- B1: 入口层(Web/API/CLI/Worker)
|
|
20
|
+
- B2: 应用编排层(UseCase/Service)
|
|
21
|
+
- B3: 领域模型层(Domain/Policy)
|
|
22
|
+
- B4: 数据与集成层(DB/Cache/MQ/Third-party)
|
|
23
|
+
- B5: 运营与质量层(日志/监控/测试/发布)
|
|
24
|
+
C. 数据与状态(单选)
|
|
25
|
+
- C1: 文件状态为主【推荐】
|
|
26
|
+
- C2: SQLite
|
|
27
|
+
- C3: 外部服务
|
|
28
|
+
D. MVP 交付边界(单选)
|
|
29
|
+
- D1: 只做本地可用
|
|
30
|
+
- D2: 本地 + 最小自动化测试【推荐】
|
|
31
|
+
- D3: 本地 + CI
|
|
32
|
+
|
|
33
|
+
注意:
|
|
34
|
+
- 上述选项是“澄清脚手架”,不是项目类型假设。
|
|
35
|
+
- 不要把用户项目默认成 coding agent、CLI 工具或特定技术栈。
|
|
36
|
+
|
|
37
|
+
落盘要求:
|
|
38
|
+
1) .harness/state/spec.md:写清问题、目标、约束、非目标、MVP 验收标准(可量化)。
|
|
39
|
+
2) .harness/state/architecture.md:按文件模板补齐层职责、模块边界、依赖约束、状态策略、风险边界。
|
|
40
|
+
3) .harness/state/feature_list.json:必须是“L1 能力组 + L2 可执行任务”混合数组。
|
|
41
|
+
|
|
42
|
+
L2 任务硬约束(每条都必须满足):
|
|
43
|
+
- kind 必须是 workitem,level 必须是 L2。
|
|
44
|
+
- title 必须包含 动词 + 对象 + 位置(文件或模块)。
|
|
45
|
+
- entrypoints/changed_files 至少各 1 项,且可定位。
|
|
46
|
+
- implementation_steps 必须是 3~7 条可执行步骤。
|
|
47
|
+
- verification 必须给出可执行命令与预期信号。
|
|
48
|
+
- session_budget 必须为 1(单次会话可完成)。
|
|
49
|
+
- status 初始为 todo,passes 初始为 false。
|
|
50
|
+
|
|
51
|
+
如果信息不足或冲突:
|
|
52
|
+
- 将 .harness/state/decisions-needed.md 写成 status: pending
|
|
53
|
+
- items 中写 question/options/recommendation
|
|
54
|
+
- 输出 DECISION_REQUIRED 并停止,不进入实现阶段
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
你现在是连续执行代理。目标是“一轮只完成一个 L2 任务并提交”。
|
|
2
|
+
|
|
3
|
+
1) 先阅读这些文件:
|
|
4
|
+
- .harness/state/spec.md
|
|
5
|
+
- .harness/state/architecture.md
|
|
6
|
+
- .harness/state/feature_list.json
|
|
7
|
+
- .harness/state/codex-progress.md
|
|
8
|
+
- .harness/state/decisions-needed.md
|
|
9
|
+
- git log --oneline -n 20
|
|
10
|
+
|
|
11
|
+
2) 只允许选择一个 kind=workitem 且 level=L2 且 status=todo 的任务执行,并满足:
|
|
12
|
+
- depends_on 里的任务都已 done
|
|
13
|
+
- session_budget=1
|
|
14
|
+
- changed_files 与 entrypoints 清晰可定位
|
|
15
|
+
3) 先输出本轮执行计划:目标任务 ID、涉及文件、验证命令。计划不清楚则先补全任务定义,不能硬做。
|
|
16
|
+
4) 仅实现该 L2 任务范围内改动,不扩散到无关任务。
|
|
17
|
+
5) 完成后执行该任务 verification 中定义的命令,并记录结果。
|
|
18
|
+
6) 验证通过后,必须执行 git add -A 和 git commit。
|
|
19
|
+
- 提交信息格式:feat(<task-id>): <task-title>
|
|
20
|
+
- 非新功能可用 fix/chore,但必须包含 task-id
|
|
21
|
+
7) 仅在“验证通过 + commit 成功”后,将该任务 status=done 且 passes=true。
|
|
22
|
+
8) 更新 .harness/state/codex-progress.md,记录:任务 ID、改动文件、验证命令与结果、提交哈希、下一步、阻塞点。
|
|
23
|
+
9) 如果任务未完成,不允许在原地空转:
|
|
24
|
+
- 若是定义不清:先修正该任务字段(entrypoints/steps/verification)
|
|
25
|
+
- 若是任务过大:拆成 2~4 个新的 L2 任务,并把原任务 status=blocked,notes 写明拆分原因
|
|
26
|
+
- 禁止连续两轮在同一未完成任务上重复相同尝试
|
|
27
|
+
10) 如果需要人类决策:
|
|
28
|
+
- 将 .harness/state/decisions-needed.md 写成 status: pending
|
|
29
|
+
- 在 items 下列出决策问题、可选项、推荐项
|
|
30
|
+
- 输出标记词 DECISION_REQUIRED
|
|
31
|
+
- 本轮停止继续实现,等待人类输入
|
|
32
|
+
11) 不要预设项目类型(如 agent/CLI/Web/数据平台 等),执行内容必须以 spec/architecture/feature_list 的已确认信息为准。
|
|
33
|
+
12) 不要修改以下 harness 文件:
|
|
34
|
+
- codex.sh
|
|
35
|
+
- .harness/prompts/discuss.md
|
|
36
|
+
- .harness/prompts/run.md
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Architecture Contract
|
|
2
|
+
|
|
3
|
+
## 1) 业务分层(必填)
|
|
4
|
+
- 采用分层:
|
|
5
|
+
- A1 三层:接口层 / 领域层 / 基础设施层。
|
|
6
|
+
- 层与职责:
|
|
7
|
+
- L-Interface:
|
|
8
|
+
- 承接多子命令 CLI 入口、REPL 会话循环、参数解析、用户交互输出。
|
|
9
|
+
- 承接 B2 应用编排模块,负责将一次用户输入编排为领域决策、模型调用、工具执行和状态落盘。
|
|
10
|
+
- 计划中的主要模块:`src/caigode/cli.py`、`src/caigode/interface/repl.py`、`src/caigode/interface/handlers/`、`src/caigode/application/`。
|
|
11
|
+
- L-Orchestration:
|
|
12
|
+
- 本项目不设独立编排层。
|
|
13
|
+
- B2 以逻辑模块形式存在于接口层内部的 `application` 包中,避免与 A1 冲突。
|
|
14
|
+
- L-Domain:
|
|
15
|
+
- 定义会话、消息、任务计划、工作项、工具调用、验证结果、交付产物等核心对象。
|
|
16
|
+
- 定义规则:状态转移、工具权限、验证结论、交付材料拼装规则。
|
|
17
|
+
- 计划中的主要模块:`src/caigode/domain/session.py`、`src/caigode/domain/task.py`、`src/caigode/domain/policies.py`.
|
|
18
|
+
- L-Infra:
|
|
19
|
+
- 提供 OpenAI 兼容 API 客户端、文件状态仓储、工作区文件读写、shell 执行、git 信息采集、日志与测试支撑。
|
|
20
|
+
- 计划中的主要模块:`src/caigode/infra/openai_client.py`、`src/caigode/infra/state_store.py`、`src/caigode/infra/workspace.py`、`src/caigode/infra/shell.py`、`src/caigode/infra/review_artifacts.py`.
|
|
21
|
+
|
|
22
|
+
## 2) 模块边界(必填)
|
|
23
|
+
- 模块清单:
|
|
24
|
+
- B1 入口层:CLI 子命令、参数与交互适配。
|
|
25
|
+
- B2 应用编排层:聊天会话服务、单次运行服务、状态查询服务、交付摘要服务。
|
|
26
|
+
- B3 领域模型层:会话状态、消息、工具调用、验证报告、交付材料等对象与策略。
|
|
27
|
+
- B4 数据与集成层:OpenAI 兼容 API、文件状态存储、工作区访问、shell、git。
|
|
28
|
+
- B5 运营与质量层:日志、夹具、自动化测试、开发文档。
|
|
29
|
+
- 入口文件/命令:
|
|
30
|
+
- 产品入口不使用 `codex.sh`。
|
|
31
|
+
- 新产品入口定义为 Python CLI:
|
|
32
|
+
- `uv run python -m caigode.cli chat`
|
|
33
|
+
- `uv run python -m caigode.cli run`
|
|
34
|
+
- `uv run python -m caigode.cli status`
|
|
35
|
+
- `uv run python -m caigode.cli review`
|
|
36
|
+
- 后续如提供可执行脚本,统一指向 `src/caigode/cli.py`。
|
|
37
|
+
- 模块依赖约束(谁可以依赖谁):
|
|
38
|
+
- 接口层可依赖领域层和基础设施层暴露的抽象与适配器。
|
|
39
|
+
- 接口层中的 `application` 编排模块可以组合领域对象与基础设施服务,但不得把基础设施细节泄漏给领域层。
|
|
40
|
+
- 领域层不得依赖 CLI、HTTP、文件系统、shell 或 git 具体实现。
|
|
41
|
+
- 基础设施层不得承载业务策略,只实现端点访问、状态读写和外部副作用。
|
|
42
|
+
- 运营与质量层可引用任意层进行测试和观测,但不反向参与运行时领域决策。
|
|
43
|
+
|
|
44
|
+
## 3) 数据与状态(必填)
|
|
45
|
+
- 核心数据对象:
|
|
46
|
+
- `AgentConfig`:模型、URL、API Key、工作区、会话目录、默认验证命令。
|
|
47
|
+
- `SessionState`:会话 ID、当前模式、消息历史、计划、最近动作、错误状态。
|
|
48
|
+
- `TaskIntent`:用户任务、约束、目标文件、交付要求。
|
|
49
|
+
- `ToolAction`:文件读取、文件修改、shell 执行、git 摘要、review 产物写入。
|
|
50
|
+
- `VerificationResult`:命令、退出码、摘要、时间戳。
|
|
51
|
+
- `ReviewArtifact`:变更摘要、验证摘要、提交说明草稿、后续风险。
|
|
52
|
+
- 持久化策略:
|
|
53
|
+
- C1 文件状态为主。
|
|
54
|
+
- 运行时状态写入工作区内 `.caigode/` 目录。
|
|
55
|
+
- Python 依赖、锁文件与脚本执行由 `uv` 管理,锁文件应纳入仓库。
|
|
56
|
+
- 推荐文件布局:
|
|
57
|
+
- `pyproject.toml`
|
|
58
|
+
- `uv.lock`
|
|
59
|
+
- `.caigode/config.snapshot.json`
|
|
60
|
+
- `.caigode/sessions/<session-id>.json`
|
|
61
|
+
- `.caigode/logs/<session-id>.log`
|
|
62
|
+
- `.caigode/artifacts/<session-id>-review.md`
|
|
63
|
+
- `.caigode/artifacts/<session-id>-commit.txt`
|
|
64
|
+
- 状态一致性与回滚策略:
|
|
65
|
+
- 状态文件采用“临时文件写入 + 原子替换”策略。
|
|
66
|
+
- 文件修改前后均记录摘要;失败命令不回滚工作区,但必须记录到会话状态与日志。
|
|
67
|
+
- 对高风险 shell 指令和批量文件改动,接口层应要求显式确认或启用安全策略。
|
|
68
|
+
|
|
69
|
+
## 4) 外部集成(可选)
|
|
70
|
+
- 第三方服务:
|
|
71
|
+
- 唯一批准的外部网络集成是 OpenAI 兼容 API 端点。
|
|
72
|
+
- API 端点必须支持自定义 `base_url`、`model` 和鉴权信息。
|
|
73
|
+
- 不把 `codex` CLI 作为模型引擎依赖。
|
|
74
|
+
- 失败与重试策略:
|
|
75
|
+
- 模型请求失败时保留原始错误上下文,并返回可读诊断。
|
|
76
|
+
- 对网络超时、429、5xx 可配置有限重试;默认重试次数应保守。
|
|
77
|
+
- 本地命令执行只按退出码判定成功与否,不做隐式重放。
|
|
78
|
+
|
|
79
|
+
## 5) 非功能性要求(必填)
|
|
80
|
+
- 性能:
|
|
81
|
+
- 目标为单用户本地使用,不追求高并发。
|
|
82
|
+
- CLI 冷启动应仅完成配置装载与必要初始化,避免非必要扫描全仓库。
|
|
83
|
+
- 稳定性:
|
|
84
|
+
- 任一子命令失败时返回非零退出码,并在日志或终端给出可定位原因。
|
|
85
|
+
- 最小自动化测试至少覆盖配置装载、CLI 入口、会话状态持久化、模型客户端适配和 review 产物输出。
|
|
86
|
+
- 本地开发、测试与运行命令统一通过 `uv run` 执行,避免环境漂移。
|
|
87
|
+
- 安全与高风险操作边界:
|
|
88
|
+
- shell 执行范围限制在用户指定工作区。
|
|
89
|
+
- 不默认允许跨工作区写入、系统级目录写入或任意外部服务访问。
|
|
90
|
+
- API Key 不写入 review 产物与普通日志;如需快照,仅保留脱敏信息。
|
|
91
|
+
- 可观测性(日志/指标):
|
|
92
|
+
- 运行日志写入 `.caigode/logs/`。
|
|
93
|
+
- `status` 子命令应能读取最近会话状态、最近验证结果与最近错误。
|
|
94
|
+
- MVP 不强制引入指标平台,但日志字段需要支撑问题定位。
|
|
95
|
+
|
|
96
|
+
## 6) 实施边界(必填)
|
|
97
|
+
- 本轮实现范围(In):
|
|
98
|
+
- 新建独立 Python 项目骨架与多子命令 CLI。
|
|
99
|
+
- 建立基于 `uv` 的依赖管理、锁文件与执行命令约定。
|
|
100
|
+
- 实现交互式会话主路径、文件状态持久化、OpenAI 兼容 API 客户端、本地工具适配。
|
|
101
|
+
- 实现最小 review/交付材料输出。
|
|
102
|
+
- 编写本地最小自动化测试。
|
|
103
|
+
- 明确不做(Out):
|
|
104
|
+
- 改写 `codex.sh` 成为产品主入口。
|
|
105
|
+
- 接入数据库、浏览器自动化、远程 CI 托管、插件系统、多代理协作。
|
|
106
|
+
- 实现远程 PR 创建、代码托管平台发布或多工作区集中调度。
|
|
107
|
+
- 每个二级任务的完成定义模板:
|
|
108
|
+
- 修改文件:限定到单一能力闭环内的明确文件集合。
|
|
109
|
+
- 验证命令:必须可直接在仓库根目录执行。
|
|
110
|
+
- 完成信号:退出码为 `0`,并出现对应 CLI/测试/产物文件信号。
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Codex Progress
|
|
2
|
+
|
|
3
|
+
## Session Notes
|
|
4
|
+
- Task ID: `TASK-CLI-TEST-001`
|
|
5
|
+
- Status: `done`
|
|
6
|
+
- Changed files: `tests/test_e2e_flow.py`, `tests/fixtures/e2e_workspace/docs/context.txt`, `README.md`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
7
|
+
- Verification command: `uv run pytest tests/test_e2e_flow.py`
|
|
8
|
+
- Verification result: `passed` (exit code `0`, `1 passed`)
|
|
9
|
+
- Commit hash: `ee7858e`
|
|
10
|
+
- Next step: 当前 `L2 workitem` 已全部完成;如需继续,应先补充新的任务树或做收尾规划
|
|
11
|
+
- Blockers: `(none)`
|
|
12
|
+
|
|
13
|
+
- Task ID: `TASK-CLI-CHAT-001`
|
|
14
|
+
- Status: `done`
|
|
15
|
+
- Changed files: `src/caigode/interface/repl.py`, `src/caigode/cli.py`, `tests/test_repl_chat.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
16
|
+
- Verification command: `uv run pytest tests/test_repl_chat.py`
|
|
17
|
+
- Verification result: `passed` (exit code `0`, `2 passed`)
|
|
18
|
+
- Commit hash: `b6845f2`
|
|
19
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-TEST-001`
|
|
20
|
+
- Blockers: `(none)`
|
|
21
|
+
|
|
22
|
+
- Task ID: `TASK-CLI-REVIEW-001`
|
|
23
|
+
- Status: `done`
|
|
24
|
+
- Changed files: `src/caigode/cli.py`, `src/caigode/interface/review_handler.py`, `src/caigode/infra/review_artifacts.py`, `tests/test_review_command.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
25
|
+
- Verification command: `uv run pytest tests/test_review_command.py`
|
|
26
|
+
- Verification result: `passed` (exit code `0`, `2 passed`)
|
|
27
|
+
- Commit hash: `f2242c4`
|
|
28
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-CHAT-001`
|
|
29
|
+
- Blockers: `(none)`
|
|
30
|
+
|
|
31
|
+
- Task ID: `TASK-CLI-RUN-001`
|
|
32
|
+
- Status: `done`
|
|
33
|
+
- Changed files: `src/caigode/interface/run_handler.py`, `src/caigode/cli.py`, `tests/test_run_command.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
34
|
+
- Verification command: `uv run pytest tests/test_run_command.py`
|
|
35
|
+
- Verification result: `passed` (exit code `0`, `2 passed`)
|
|
36
|
+
- Commit hash: `0dc2bac`
|
|
37
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-REVIEW-001`
|
|
38
|
+
- Blockers: `(none)`
|
|
39
|
+
|
|
40
|
+
- Task ID: `TASK-CLI-STATUS-001`
|
|
41
|
+
- Status: `done`
|
|
42
|
+
- Changed files: `src/caigode/interface/status_handler.py`, `src/caigode/cli.py`, `tests/test_status_command.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
43
|
+
- Verification command: `uv run pytest tests/test_status_command.py`
|
|
44
|
+
- Verification result: `passed` (exit code `0`, `2 passed`)
|
|
45
|
+
- Commit hash: `e8474a2`
|
|
46
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-RUN-001`
|
|
47
|
+
- Blockers: `(none)`
|
|
48
|
+
|
|
49
|
+
- Task ID: `TASK-CLI-STATE-001`
|
|
50
|
+
- Status: `done`
|
|
51
|
+
- Changed files: `src/caigode/infra/state_store.py`, `tests/test_state_store.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
52
|
+
- Verification command: `uv run pytest tests/test_state_store.py`
|
|
53
|
+
- Verification result: `passed` (exit code `0`)
|
|
54
|
+
- Commit hash: `5d8dfd2`
|
|
55
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-CHAT-001`
|
|
56
|
+
- Blockers: `(none)`
|
|
57
|
+
|
|
58
|
+
- Task ID: `TASK-CLI-AGENT-001`
|
|
59
|
+
- Status: `done`
|
|
60
|
+
- Changed files: `src/caigode/application/agent_service.py`, `src/caigode/domain/task.py`, `tests/test_agent_service.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
61
|
+
- Verification command: `uv run pytest tests/test_agent_service.py`
|
|
62
|
+
- Verification result: `passed` (exit code `0`)
|
|
63
|
+
- Commit hash: `f2855a5`
|
|
64
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-STATE-001`
|
|
65
|
+
- Blockers: `(none)`
|
|
66
|
+
|
|
67
|
+
- Task ID: `TASK-CLI-TOOLS-001`
|
|
68
|
+
- Status: `done`
|
|
69
|
+
- Changed files: `src/caigode/infra/workspace.py`, `src/caigode/infra/shell.py`, `tests/test_workspace_tools.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
70
|
+
- Verification command: `uv run pytest tests/test_workspace_tools.py`
|
|
71
|
+
- Verification result: `passed` (exit code `0`)
|
|
72
|
+
- Commit hash: `4ca6b13`
|
|
73
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-AGENT-001`
|
|
74
|
+
- Blockers: `(none)`
|
|
75
|
+
|
|
76
|
+
- Task ID: `TASK-CLI-OPENAI-001`
|
|
77
|
+
- Status: `done`
|
|
78
|
+
- Changed files: `src/caigode/infra/openai_client.py`, `tests/test_openai_client.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
79
|
+
- Verification command: `uv run pytest tests/test_openai_client.py`
|
|
80
|
+
- Verification result: `passed` (exit code `0`)
|
|
81
|
+
- Commit hash: `f9d6c33`
|
|
82
|
+
- Next step: 继续执行下一个已满足依赖且范围清晰的 L2 任务 `TASK-CLI-TOOLS-001`
|
|
83
|
+
- Blockers: `(none)`
|
|
84
|
+
|
|
85
|
+
- Task ID: `TASK-CLI-ENTRY-001`
|
|
86
|
+
- Status: `done`
|
|
87
|
+
- Changed files: `.gitignore`, `src/caigode/cli.py`, `tests/test_cli_help.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
88
|
+
- Verification command: `uv run pytest tests/test_cli_help.py`; `uv run python -m caigode.cli --help | grep -q 'chat' && uv run python -m caigode.cli --help | grep -q 'review'`
|
|
89
|
+
- Verification result: `passed` (both commands exit code `0`)
|
|
90
|
+
- Commit hash: `171bd21`
|
|
91
|
+
- Next step: 继续执行下一个已满足依赖的 L2 任务 `TASK-CLI-OPENAI-001`
|
|
92
|
+
- Blockers: `(none)`
|
|
93
|
+
|
|
94
|
+
- Task ID: `TASK-CLI-CONFIG-001`
|
|
95
|
+
- Status: `done`
|
|
96
|
+
- Changed files: `pyproject.toml`, `uv.lock`, `src/caigode/config.py`, `tests/test_config.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`
|
|
97
|
+
- Verification command: `uv run pytest tests/test_config.py`
|
|
98
|
+
- Verification result: `passed` (exit code `0`)
|
|
99
|
+
- Commit hash: `c1b56c0`
|
|
100
|
+
- Next step: 继续执行下一个已满足依赖的 L2 任务 `TASK-CLI-ENTRY-001`
|
|
101
|
+
- Blockers: `(none)`
|
|
102
|
+
|
|
103
|
+
- Task ID: `TASK-CLI-BOOT-001`
|
|
104
|
+
- Status: `done`
|
|
105
|
+
- Changed files: `pyproject.toml`, `uv.lock`, `src/caigode/__init__.py`, `tests/__init__.py`, `.harness/state/feature_list.json`, `.harness/state/codex-progress.md`, `.harness/state/decisions-needed.md`
|
|
106
|
+
- Verification command: `test -f pyproject.toml && test -f uv.lock && test -f src/caigode/__init__.py && test -d tests`
|
|
107
|
+
- Verification result: `passed` (exit code `0`)
|
|
108
|
+
- Commit hash: `9572c5a`
|
|
109
|
+
- Push result: `origin/master` 已更新
|
|
110
|
+
- Next step: 继续执行下一个 L2 任务 `TASK-CLI-CONFIG-001`
|
|
111
|
+
- Blockers: `(none)`
|