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>
This commit is contained in:
swe-agent[bot]
2025-12-12 22:06:23 +08:00
parent 3c6f22ca48
commit 0bbcc6c68e
5 changed files with 40 additions and 35 deletions

View File

@@ -125,7 +125,7 @@ Requirements → Architecture → Sprint Plan → Development → Review → QA
## Enterprise Workflow Features
- **Multi-backend execution:** `codeagent-wrapper --backend codex|claude|gemini` (default `codex`) so you can match the model to the task without changing workflows.
- **GitHub workflow commands:** `/gh-create-issue "short need"` creates structured issues; `/gh-implement 123` pulls issue #123, drives development, and prepares the PR.
- **GitHub workflow commands:** `/gh-create-issue "short need"` creates structured issues; `/gh-issue-implement 123` pulls issue #123, drives development, and prepares the PR.
- **Skills + hooks activation:** .claude/hooks run automation (tests, reviews), while `.claude/skills/skill-rules.json` auto-suggests the right skills. Keep hooks enabled in `.claude/settings.json` to activate the enterprise workflow helpers.
---
@@ -242,8 +242,6 @@ python3 install.py --module dev
# Manual
bash install.sh
# Create legacy codex-wrapper alias (uses $INSTALL_DIR or ~/bin)
bash scripts/install.sh
```
#### Windows

View File

@@ -233,8 +233,6 @@ python3 install.py --module dev
# 手动
bash install.sh
# 创建 codex-wrapper 兼容别名(使用 $INSTALL_DIR 或 ~/bin
bash scripts/install.sh
```
#### Windows 系统

View File

@@ -249,6 +249,8 @@ func parseArgs() (*Config, error) {
return cfg, nil
}
const maxParallelWorkersLimit = 100
func resolveMaxParallelWorkers() int {
raw := strings.TrimSpace(os.Getenv("CODEAGENT_MAX_PARALLEL_WORKERS"))
if raw == "" {
@@ -261,5 +263,10 @@ func resolveMaxParallelWorkers() int {
return 0
}
if value > maxParallelWorkersLimit {
logWarn(fmt.Sprintf("CODEAGENT_MAX_PARALLEL_WORKERS=%d exceeds limit, capping at %d", value, maxParallelWorkersLimit))
return maxParallelWorkersLimit
}
return value
}

View File

@@ -3881,3 +3881,35 @@ func TestRun_CLI_Success(t *testing.T) {
t.Fatalf("unexpected output: %q", output)
}
}
func TestResolveMaxParallelWorkers(t *testing.T) {
tests := []struct {
name string
envValue string
want int
}{
{"empty env returns unlimited", "", 0},
{"valid value", "4", 4},
{"zero value", "0", 0},
{"at limit", "100", 100},
{"exceeds limit capped", "150", 100},
{"negative falls back to unlimited", "-1", 0},
{"invalid string falls back to unlimited", "abc", 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.envValue != "" {
os.Setenv("CODEAGENT_MAX_PARALLEL_WORKERS", tt.envValue)
} else {
os.Unsetenv("CODEAGENT_MAX_PARALLEL_WORKERS")
}
defer os.Unsetenv("CODEAGENT_MAX_PARALLEL_WORKERS")
got := resolveMaxParallelWorkers()
if got != tt.want {
t.Errorf("resolveMaxParallelWorkers() = %d, want %d", got, tt.want)
}
})
}
}

View File

@@ -1,30 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Legacy alias installer: create codex-wrapper -> codeagent-wrapper symlink
# in the configured install directory (defaults to ~/bin).
BIN_DIR="${INSTALL_DIR:-"$HOME/bin"}"
TARGET_NAME="codeagent-wrapper"
LEGACY_NAME="codex-wrapper"
mkdir -p "$BIN_DIR"
cd "$BIN_DIR"
if [[ ! -x "$TARGET_NAME" ]]; then
echo "ERROR: $BIN_DIR/$TARGET_NAME not found or not executable; install the wrapper first." >&2
exit 1
fi
if [[ -L "$LEGACY_NAME" ]]; then
echo "Legacy alias already present: $BIN_DIR/$LEGACY_NAME -> $(readlink "$LEGACY_NAME")"
exit 0
fi
if [[ -e "$LEGACY_NAME" ]]; then
echo "INFO: $BIN_DIR/$LEGACY_NAME exists and is not a symlink; leaving user-managed binary untouched." >&2
exit 0
fi
ln -s "$TARGET_NAME" "$LEGACY_NAME"
echo "Created legacy alias $BIN_DIR/$LEGACY_NAME -> $TARGET_NAME"