mirror of
https://github.com/cexll/myclaude.git
synced 2025-12-24 13:47:58 +08:00
通过设置 --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>
123 lines
4.1 KiB
Go
123 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestClaudeBuildArgs_ModesAndPermissions(t *testing.T) {
|
|
backend := ClaudeBackend{}
|
|
|
|
t.Run("new mode uses workdir without skip by default", func(t *testing.T) {
|
|
cfg := &Config{Mode: "new", WorkDir: "/repo"}
|
|
got := backend.BuildArgs(cfg, "todo")
|
|
want := []string{"-p", "--dangerously-skip-permissions", "--setting-sources", "", "--output-format", "stream-json", "--verbose", "todo"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("new mode opt-in skip permissions with default workdir", func(t *testing.T) {
|
|
cfg := &Config{Mode: "new", SkipPermissions: true}
|
|
got := backend.BuildArgs(cfg, "-")
|
|
want := []string{"-p", "--dangerously-skip-permissions", "--setting-sources", "", "--output-format", "stream-json", "--verbose", "-"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("resume mode uses session id and omits workdir", func(t *testing.T) {
|
|
cfg := &Config{Mode: "resume", SessionID: "sid-123", WorkDir: "/ignored"}
|
|
got := backend.BuildArgs(cfg, "resume-task")
|
|
want := []string{"-p", "--dangerously-skip-permissions", "--setting-sources", "", "-r", "sid-123", "--output-format", "stream-json", "--verbose", "resume-task"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("resume mode without session still returns base flags", func(t *testing.T) {
|
|
cfg := &Config{Mode: "resume", WorkDir: "/ignored"}
|
|
got := backend.BuildArgs(cfg, "follow-up")
|
|
want := []string{"-p", "--dangerously-skip-permissions", "--setting-sources", "", "--output-format", "stream-json", "--verbose", "follow-up"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("nil config returns nil", func(t *testing.T) {
|
|
if backend.BuildArgs(nil, "ignored") != nil {
|
|
t.Fatalf("nil config should return nil args")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestClaudeBuildArgs_GeminiAndCodexModes(t *testing.T) {
|
|
t.Run("gemini new mode defaults workdir", func(t *testing.T) {
|
|
backend := GeminiBackend{}
|
|
cfg := &Config{Mode: "new", WorkDir: "/workspace"}
|
|
got := backend.BuildArgs(cfg, "task")
|
|
want := []string{"-o", "stream-json", "-y", "-p", "task"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("gemini resume mode uses session id", func(t *testing.T) {
|
|
backend := GeminiBackend{}
|
|
cfg := &Config{Mode: "resume", SessionID: "sid-999"}
|
|
got := backend.BuildArgs(cfg, "resume")
|
|
want := []string{"-o", "stream-json", "-y", "-r", "sid-999", "-p", "resume"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("gemini resume mode without session omits identifier", func(t *testing.T) {
|
|
backend := GeminiBackend{}
|
|
cfg := &Config{Mode: "resume"}
|
|
got := backend.BuildArgs(cfg, "resume")
|
|
want := []string{"-o", "stream-json", "-y", "-p", "resume"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("gemini nil config returns nil", func(t *testing.T) {
|
|
backend := GeminiBackend{}
|
|
if backend.BuildArgs(nil, "ignored") != nil {
|
|
t.Fatalf("nil config should return nil args")
|
|
}
|
|
})
|
|
|
|
t.Run("codex build args passthrough remains intact", func(t *testing.T) {
|
|
backend := CodexBackend{}
|
|
cfg := &Config{Mode: "new", WorkDir: "/tmp"}
|
|
got := backend.BuildArgs(cfg, "task")
|
|
want := []string{"e", "--skip-git-repo-check", "-C", "/tmp", "--json", "task"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestClaudeBuildArgs_BackendMetadata(t *testing.T) {
|
|
tests := []struct {
|
|
backend Backend
|
|
name string
|
|
command string
|
|
}{
|
|
{backend: CodexBackend{}, name: "codex", command: "codex"},
|
|
{backend: ClaudeBackend{}, name: "claude", command: "claude"},
|
|
{backend: GeminiBackend{}, name: "gemini", command: "gemini"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
if got := tt.backend.Name(); got != tt.name {
|
|
t.Fatalf("Name() = %s, want %s", got, tt.name)
|
|
}
|
|
if got := tt.backend.Command(); got != tt.command {
|
|
t.Fatalf("Command() = %s, want %s", got, tt.command)
|
|
}
|
|
}
|
|
}
|