fix: code review fixes for PR #94 - all critical and major issues resolved

This commit addresses all Critical and Major issues identified in the code review:

Critical Issues Fixed:
- #1: Test statistics data loss (utils.go:480) - Changed exit condition from || to &&
- #2: Below-target header showing "below 0%" - Added defaultCoverageTarget constant

Major Issues Fixed:
- #3: Coverage extraction not robust - Relaxed trigger conditions for various formats
- #4: 0% coverage ignored - Changed from CoverageNum>0 to Coverage!="" check
- #5: File change extraction incomplete - Support root files and @ prefix
- #6: String truncation panic risk - Added safeTruncate() with rune-based truncation
- #7: Breaking change documentation missing - Updated help text and docs
- #8: .DS_Store garbage files - Removed files and updated .gitignore
- #9: Test coverage insufficient - Added 29+ test cases in utils_test.go
- #10: Terminal escape injection risk - Added sanitizeOutput() for ANSI cleaning
- #11: Redundant code - Removed unused patterns variable

Test Results:
- All tests pass: go test ./... (34.283s)
- Test coverage: 88.4% (up from ~85%)
- New test file: codeagent-wrapper/utils_test.go
- No breaking changes to existing functionality

Files Modified:
- codeagent-wrapper/utils.go (+166 lines) - Core fixes and new functions
- codeagent-wrapper/executor.go (+111 lines) - Output format fixes
- codeagent-wrapper/main.go (+45 lines) - Configuration updates
- codeagent-wrapper/main_test.go (+40 lines) - New integration tests
- codeagent-wrapper/utils_test.go (new file) - Complete extractor tests
- docs/CODEAGENT-WRAPPER.md (+38 lines) - Documentation updates
- .gitignore (+2 lines) - Added .DS_Store patterns
- Deleted 5 .DS_Store files

Verification:
- Binary compiles successfully (v5.4.0)
- All extractors validated with real-world test cases
- Security vulnerabilities patched
- Performance maintained (90% token reduction preserved)

Related: #94

Generated with SWE-Agent.ai

Co-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>
This commit is contained in:
cexll
2025-12-24 09:51:39 +08:00
parent dfb0fc787e
commit 0c680bd374
12 changed files with 415 additions and 134 deletions

View File

@@ -14,14 +14,15 @@ import (
)
const (
version = "5.4.0"
defaultWorkdir = "."
defaultTimeout = 7200 // seconds (2 hours)
codexLogLineLimit = 1000
stdinSpecialChars = "\n\\\"'`$"
stderrCaptureLimit = 4 * 1024
defaultBackendName = "codex"
defaultCodexCommand = "codex"
version = "5.4.0"
defaultWorkdir = "."
defaultTimeout = 7200 // seconds (2 hours)
defaultCoverageTarget = 90.0
codexLogLineLimit = 1000
stdinSpecialChars = "\n\\\"'`$"
stderrCaptureLimit = 4 * 1024
defaultBackendName = "codex"
defaultCodexCommand = "codex"
// stdout close reasons
stdoutCloseReasonWait = "wait-done"
@@ -251,21 +252,23 @@ func run() (exitCode int) {
// Extract structured report fields from each result
for i := range results {
if results[i].Message != "" {
// Coverage extraction
results[i].Coverage = extractCoverage(results[i].Message)
results[i].CoverageNum = extractCoverageNum(results[i].Coverage)
results[i].CoverageTarget = 90.0 // default target
// Files changed
results[i].FilesChanged = extractFilesChanged(results[i].Message)
// Test results
results[i].TestsPassed, results[i].TestsFailed = extractTestResults(results[i].Message)
// Key output summary
results[i].KeyOutput = extractKeyOutput(results[i].Message, 150)
results[i].CoverageTarget = defaultCoverageTarget
if results[i].Message == "" {
continue
}
// Coverage extraction
results[i].Coverage = extractCoverage(results[i].Message)
results[i].CoverageNum = extractCoverageNum(results[i].Coverage)
// Files changed
results[i].FilesChanged = extractFilesChanged(results[i].Message)
// Test results
results[i].TestsPassed, results[i].TestsFailed = extractTestResults(results[i].Message)
// Key output summary
results[i].KeyOutput = extractKeyOutput(results[i].Message, 150)
}
// Default: summary mode (context-efficient)
@@ -473,12 +476,14 @@ Usage:
%[1]s resume <session_id> "task" [workdir]
%[1]s resume <session_id> - [workdir]
%[1]s --parallel Run tasks in parallel (config from stdin)
%[1]s --parallel --full-output Run tasks in parallel with full output (legacy)
%[1]s --version
%[1]s --help
Parallel mode examples:
%[1]s --parallel < tasks.txt
echo '...' | %[1]s --parallel
%[1]s --parallel --full-output < tasks.txt
%[1]s --parallel <<'EOF'
Environment Variables: