Commit Graph

206 Commits

Author SHA1 Message Date
cexll
4dd735034e fix: parser critical bugs and add PR #86 compatibility
Fixes 3 critical bugs in parser.go:

1. Gemini detection: Change Delta from bool to *bool for proper field
   presence detection. Fixes issue where delta:false events were lost.

2. Codex detection: Tighten logic to only classify as Codex if
   thread_id exists OR item.type is non-empty. Prevents Claude events
   with item:null/item:{} from being misclassified and dropped.

3. Performance: Move itemHeader parsing inside item.completed case,
   only parse when actually needed.

Additional changes:
- Implement PR #86's Gemini notifyMessage trigger on Status field
  instead of Content, resolving parser.go conflict between PRs
- Add regression tests for all fixed scenarios
- All tests pass: go test ./...

Co-authored-by: Codeagent (Codex)

Generated with SWE-Agent.ai

Co-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>
2025-12-21 13:55:48 +08:00
徐文彬
a08dd62b59 Parser重复解析问题优化 2025-12-21 00:29:07 +08:00
cexll
a30f434b5d update all readme v5.2.6 2025-12-19 20:53:27 +08:00
makoMako
41f4e21268 fix(gemini): filter noisy stderr output from gemini backend (#83)
* fix(gemini): filter noisy stderr output from gemini backend

- Add filteringWriter to filter [STARTUP], Warning, Session cleanup etc.
- Apply filter only for gemini backend stderr output
- Add unit tests for filtering logic

* fix: use defer for stderrFilter.Flush to cover all return paths

Address review feedback: ensure filter is flushed on failure paths
2025-12-19 20:50:21 +08:00
Jahan
a67aa00c9a BMADh和Requirements-Driven支持根据语义生成对应的文档 (#82)
Co-authored-by: root <root@5090523.zyx>
2025-12-18 22:37:40 +08:00
Wei
d61a0f9ffd fix: 修復 wsl install.sh 格式問題 (#78) 2025-12-17 22:24:02 +08:00
ben
fe5508228f fix: 修复多 backend 并行日志 PID 混乱并移除包装格式 (#74) (#76)
* fix(logger): 修复多 backend 并行日志 PID 混乱并移除包装格式

**问题:**
- logger.go:288 使用 os.Getpid() 导致并行任务日志 PID 混乱
- 日志文件添加时间戳/PID/级别前缀包装,应输出 backend 原始内容

**修复:**
1. Logger 结构体添加 pid 字段,创建时捕获 PID
2. 日志写入使用固定 l.pid 替代 os.Getpid()
3. 移除日志输出格式包装,直接写入原始消息
4. 添加内存缓存 ERROR/WARN 条目,ExtractRecentErrors 从缓存读取
5. 优化 executor.go context 初始化顺序,避免重复创建 logger

**测试:**
- 所有测试通过(23.7s)
- 更新相关测试用例匹配新格式

Closes #74

* fix(logger): 增强并发日志隔离和 task ID 清理

## 核心修复

### 1. Task ID Sanitization (logger.go)
- 新增 sanitizeLogSuffix(): 清理非法字符 (/, \, :, 等)
- 新增 fallbackLogSuffix(): 为空/非法 ID 生成唯一后备名
- 新增 isSafeLogRune(): 仅允许 [A-Za-z0-9._-]
- 路径穿越防护: ../../../etc/passwd → etc-passwd-{hash}.log
- 超长 ID 处理: 截断到 64 字符 + hash 确保唯一性
- 自动创建 TMPDIR (MkdirAll)

### 2. 共享日志标识 (executor.go)
- 新增 taskLoggerHandle 结构: 封装 logger、路径、共享标志
- 新增 newTaskLoggerHandle(): 统一处理 logger 创建和回退
- printTaskStart(): 显示 "Log (shared)" 标识
- generateFinalOutput(): 在 summary 中标记共享日志
- 并发失败时明确标识所有任务使用共享主日志

### 3. 内部标志 (config.go)
- TaskResult.sharedLog: 非导出字段,标识共享日志状态

### 4. Race Detector 修复 (logger.go:209-219)
- Close() 在关闭 channel 前先等待 pendingWG
- 消除 Logger.Close() 与 Logger.log() 之间的竞态条件

## 测试覆盖

### 新增测试 (logger_suffix_test.go)
- TestLoggerWithSuffixSanitizesUnsafeSuffix: 非法字符清理
- TestLoggerWithSuffixReturnsErrorWhenTempDirNotWritable: 只读目录处理

### 新增测试 (executor_concurrent_test.go)
- TestConcurrentTaskLoggerFailure: 多任务失败时共享日志标识
- TestSanitizeTaskID: 并发场景下 task ID 清理验证

## 验证结果

 所有单元测试通过
 Race detector 无竞态 (65.4s)
 路径穿越攻击防护
 并发日志完全隔离
 边界情况正确处理

Resolves: PR #76 review feedback
Co-Authored-By: Codex Review <codex@anthropic.ai>

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>

* fix(logger): 修复关键 bug 并优化日志系统 (v5.2.5)

修复 P0 级别问题:
- sanitizeLogSuffix 的 trim 碰撞(防止多 task 日志文件名冲突)
- ExtractRecentErrors 边界检查(防止 slice 越界)
- Logger.Close 阻塞风险(新增可配置超时机制)

代码质量改进:
- 删除无用字段 Logger.pid 和 logEntry.level
- 优化 sharedLog 标记绑定到最终 LogPath
- 移除日志前缀,直接输出 backend 原始内容

测试覆盖增强:
- 新增 4 个测试用例(碰撞防护、边界检查、缓存上限、shared 判定)
- 优化测试注释和逻辑

版本更新:5.2.4 → 5.2.5

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>

---------

Co-authored-by: swe-agent-bot <agent@swe-agent.ai>
v5.2.5
2025-12-17 10:33:38 +08:00
ben
50093036c3 Merge pull request #71 from aliceric27/master
fix: 修復 win python install.py
2025-12-16 17:37:01 +08:00
Wei
0cae0ede08 Merge branch 'cexll:master' into master 2025-12-16 16:21:34 +08:00
ben
4613b57240 Merge pull request #72 from changxvv/master
fix: replace "Codex" to "codeagent" in dev-plan-generator subagent description
2025-12-16 14:13:57 +08:00
cexll
7535a7b101 update changelog 2025-12-16 13:05:28 +08:00
cexll
f6bb97eba9 update codeagent skill backend select 2025-12-16 13:02:40 +08:00
changxv
78a411462b fix: replace "Codex" to "codeagent" in dev-plan-generator subagent 2025-12-16 12:32:18 +08:00
alex
9471a981e3 fix: 修復 win python install.py 2025-12-16 12:29:50 +08:00
cexll
3d27d44676 chore(ci): integrate git-cliff for automated changelog generation
- Add cliff.toml configuration matching current CHANGELOG.md format
- Replace awk script with npx git-cliff in release workflow
- Add `make changelog` command for one-click CHANGELOG updates
- Use git-cliff --current flag to generate release notes per version

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
v5.2.4
2025-12-16 10:47:18 +08:00
ben
6a66c9741f Merge pull request #70 from cexll/fix/prevent-codeagent-infinite-recursion
fix(codeagent): 防止 Claude backend 无限递归调用
2025-12-16 10:37:45 +08:00
cexll
a09c103cfb fix(codeagent): 防止 Claude backend 无限递归调用
通过设置 --setting-sources="" 禁用所有配置源(user, project, local),
避免被调用的 Claude 实例加载 ~/.claude/CLAUDE.md 和 skills,
从而防止再次调用 codeagent 导致的循环超时问题。

修改内容:
- backend.go: ClaudeBackend.BuildArgs 添加 --setting-sources="" 参数
- backend_test.go: 更新 4 个测试用例以匹配新的参数列表
- main_test.go: 更新 2 个测试用例以匹配新的参数列表

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-16 10:27:21 +08:00
ben
1dec763e26 Merge pull request #69 from cexll/myclaude-master-20251215-073053-338465000
fix(executor): isolate log files per task in parallel mode
2025-12-16 10:20:30 +08:00
cexll
f57ea2df59 chore: bump version to 5.2.4
Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-16 10:17:47 +08:00
cexll
d215c33549 fix(executor): isolate log files per task in parallel mode
Previously, all parallel tasks shared the same log file path, making it
difficult to debug individual task execution. This change creates a
separate log file for each task using the naming convention:
codeagent-wrapper-{pid}-{taskName}.log

Changes:
- Add withTaskLogger/taskLoggerFromContext for per-task logger injection
- Modify executeConcurrentWithContext to create independent Logger per task
- Update printTaskStart to display task-specific log paths
- Extract defaultRunCodexTaskFn for proper test hook reset
- Add runCodexTaskFn reset to resetTestHooks()

Test coverage: 93.7%

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-16 10:05:54 +08:00
swe-agent[bot]
b3f8fcfea6 update CHANGELOG.md 2025-12-15 22:23:34 +08:00
ben
806bb04a35 Merge pull request #65 from cexll/fix/issue-64-buffer-overflow
fix(parser): 修复 bufio.Scanner token too long 错误
2025-12-15 14:22:03 +08:00
swe-agent[bot]
b1156038de test: 同步测试中的版本号至 5.2.3
修复 CI 失败:将 main_test.go 中的版本期望值从 5.2.2 更新为 5.2.3,
与 main.go 中的实际版本号保持一致。

修改文件:
- codeagent-wrapper/main_test.go:2693 (TestVersionFlag)
- codeagent-wrapper/main_test.go:2707 (TestVersionShortFlag)
- codeagent-wrapper/main_test.go:2721 (TestVersionLegacyAlias)

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
v5.2.3
2025-12-15 14:13:03 +08:00
swe-agent[bot]
0c93bbe574 change version 2025-12-15 13:23:26 +08:00
swe-agent[bot]
6f4f4e701b fix(parser): 修复 bufio.Scanner token too long 错误 (#64)
## 问题
- 执行 rg 等命令时,如果匹配到 minified 文件,单行输出可能超过 10MB
- 旧实现使用 bufio.Scanner,遇到超长行会报错并中止整个解析
- 导致后续的 agent_message 无法读取,任务失败

## 修复
1. **parser.go**:
   - 移除 bufio.Scanner,改用 bufio.Reader + readLineWithLimit
   - 超长行(>10MB)会被跳过但继续处理后续事件
   - 添加 codexHeader 轻量级解析,只在 agent_message 时完整解析

2. **utils.go**:
   - 修复 logWriter 内存膨胀问题
   - 添加 writeLimited 方法限制缓冲区大小

3. **测试**:
   - parser_token_too_long_test.go: 验证超长行处理
   - log_writer_limit_test.go: 验证日志缓冲限制

## 测试结果
-  TestParseJSONStream_SkipsOverlongLineAndContinues
-  TestLogWriterWriteLimitsBuffer
-  完整测试套件通过

Fixes #64

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-15 13:19:51 +08:00
swe-agent[bot]
ff301507fe test: Fix tests for ClaudeBackend default --dangerously-skip-permissions
- Update TestClaudeBuildArgs_ModesAndPermissions expectations
- Update TestBackendBuildArgs_ClaudeBackend expectations
- Update TestClaudeBackendBuildArgs_OutputValidation expectations
- Update version tests to expect 5.2.2

ClaudeBackend now defaults to adding --dangerously-skip-permissions
for automation workflows.

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
v5.2.2
2025-12-13 21:53:38 +08:00
swe-agent[bot]
93b72eba42 chore(v5.2.2): Bump version and clean up documentation
- Update version to 5.2.2 in README.md, README_CN.md, and codeagent-wrapper/main.go
- Remove non-existent documentation links from README.md (architecture.md, GITHUB-WORKFLOW.md, enterprise-workflow-ideas.md)
- Add coverage.out to .gitignore

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-13 21:43:49 +08:00
swe-agent[bot]
b01758e7e1 fix codeagent backend claude no auto 2025-12-13 21:42:17 +08:00
swe-agent[bot]
c51b38c671 fix install.py dev fail 2025-12-13 21:41:55 +08:00
swe-agent[bot]
b227fee225 fix codeagent claude and gemini root dir v5.2.1 2025-12-13 16:56:53 +08:00
swe-agent[bot]
2b7569335b update readme 2025-12-13 15:29:12 +08:00
swe-agent[bot]
9e667f0895 feat(v5.2.0): Complete skills system integration and config cleanup
Core Changes:
- **Skills System**: Added codeagent, product-requirements, prototype-prompt-generator to skill-rules.json
- **Config Cleanup**: Removed deprecated gh module from config.json
- **Workflow Update**: Changed memorys/CLAUDE.md to use codeagent skill instead of codex

Details:
- config.json:88-119: Removed gh module (github-workflow directory doesn't exist)
- skills/skill-rules.json:24-114: Added 3 new skills with keyword/pattern triggers
  - codeagent: multi-backend, parallel task execution
  - product-requirements: PRD, requirements gathering
  - prototype-prompt-generator: UI/UX design specifications
- memorys/CLAUDE.md:3,24-25: Updated Codex skill → Codeagent skill

Verification:
- All skill activation tests PASS
- codeagent skill triggers correctly on keyword match

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
v5.2.0
2025-12-13 13:25:21 +08:00
swe-agent[bot]
4759eb2c42 chore(v5.2.0): Update CHANGELOG and remove deprecated test files
- Added Skills System Enhancements section to CHANGELOG
- Documented new skills: codeagent, product-requirements, prototype-prompt-generator
- Removed deprecated test files (tests/test_*.py)
- Updated release date to 2025-12-13

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-13 13:21:59 +08:00
swe-agent[bot]
edbf168b57 fix(codeagent-wrapper): fix race condition in stdout parsing
修复 GitHub Actions CI 中的测试失败问题。

问题分析:
在 TestRun_PipedTaskSuccess 测试中,当脚本运行很快时,cmd.Wait()
可能在 parseJSONStreamInternal goroutine 开始读取之前就返回,
导致 stdout 管道被过早关闭,出现 "read |0: file already closed" 错误。

解决方案:
将 parseJSONStreamInternal goroutine 的启动提前到 cmd.Start() 之前。
这确保解析器在进程启动前就 ready,避免竞态条件。

测试结果:
- 本地所有测试通过 ✓
- 覆盖率保持 93.7% ✓

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-13 13:20:49 +08:00
swe-agent[bot]
9bfea81ca6 docs(changelog): remove GitHub workflow related content
GitHub workflow features have been removed from the project.

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-13 13:01:06 +08:00
swe-agent[bot]
a9bcea45f5 Merge rc/5.2 into master: v5.2.0 release improvements 2025-12-13 12:56:37 +08:00
swe-agent[bot]
8554da6e2f feat(v5.2.0): Improve release notes and installation scripts
**Main Changes**:
1. release.yml: Extract version release notes from CHANGELOG.md
2. install.bat: codex-wrapper → codeagent-wrapper
3. README.md: Update multi-backend architecture description
4. README_CN.md: Sync Chinese description
5. CHANGELOG.md: Complete v5.2.0 release notes in English

Generated with swe-agent-bot

Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
2025-12-13 12:53:28 +08:00
ben
b2f941af5f Merge pull request #53 from cexll/rc/5.2
feat: Enterprise Workflow with Multi-Backend Support (v5.2)
2025-12-13 12:38:38 +08:00
swe-agent[bot]
6861a9d057 remove docs 2025-12-13 12:37:45 +08:00
swe-agent[bot]
18189f095c remove docs 2025-12-13 12:36:12 +08:00
swe-agent[bot]
f1c306cb23 add prototype prompt skill 2025-12-13 12:33:02 +08:00
swe-agent[bot]
0dc6df4e71 add prd skill 2025-12-13 12:32:37 +08:00
swe-agent[bot]
21bb45a7af update memory claude 2025-12-13 12:32:15 +08:00
swe-agent[bot]
e7464d1286 remove command gh flow 2025-12-13 12:32:06 +08:00
swe-agent[bot]
373d75cc36 update license 2025-12-13 12:31:49 +08:00
swe-agent[bot]
0bbcc6c68e fix(codeagent-wrapper): add worker limit cap and remove legacy alias
- Add maxParallelWorkersLimit=100 cap for CODEAGENT_MAX_PARALLEL_WORKERS
- Remove scripts/install.sh (codex-wrapper legacy alias no longer needed)
- Fix README command example: /gh-implement -> /gh-issue-implement
- Add TestResolveMaxParallelWorkers unit test for limit validation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 22:06:23 +08:00
swe-agent[bot]
3c6f22ca48 fix(codeagent-wrapper): use -r flag for gemini backend resume
Gemini CLI uses -r <session_id> for session resume, not --session-id.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 15:35:39 +08:00
swe-agent[bot]
87016ce331 fix(install): clarify module list shows default state not enabled
Renamed "Enabled" column to "Default" and added hint explaining
the meaning of the checkmark.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 15:14:41 +08:00
swe-agent[bot]
86d18ca19a fix(codeagent-wrapper): use -r flag for claude backend resume
Claude CLI uses `-r <session_id>` for resume, not `--session-id`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 15:10:17 +08:00
swe-agent[bot]
4edd2d2d2d fix(codeagent-wrapper): remove binary artifacts and improve error messages
- Remove committed binaries from git tracking (codeagent-wrapper, *.test)
- Remove coverage.out from tracking (generated by CI)
- Update .gitignore to exclude build artifacts
- Add task block index to parallel config error messages for better debugging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 14:41:54 +08:00