fix(qwen): align Go hooks with Qwen Code 0.20

This commit is contained in:
ZacharyZhang-NY committed 2026-07-20 16:06:52 -04:00
1 parent 4521cbe32f
commit dd72793cdb
18 files changed
+2921 -741

No files matched your search

+133
View File
@@ -0,0 +1,133 @@
package main
import (
"bytes"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"testing"
)
type qwenCLIResult struct {
stdout string
stderr string
err error
}
func runQwenCLI(
t *testing.T,
binary, directory string,
environment []string,
arguments ...string,
) qwenCLIResult {
t.Helper()
command := exec.Command(binary, arguments...)
command.Dir = directory
command.Env = environment
var stdout bytes.Buffer
var stderr bytes.Buffer
command.Stdout = &stdout
command.Stderr = &stderr
err := command.Run()
return qwenCLIResult{stdout: stdout.String(), stderr: stderr.String(), err: err}
}
func TestQwenCLIInstallStatusAndUninstallEndToEnd(t *testing.T) {
root := t.TempDir()
binary := filepath.Join(root, "elydora")
if runtime.GOOS == "windows" {
binary += ".exe"
}
build := exec.Command("go", "build", "-o", binary, ".")
if output, err := build.CombinedOutput(); err != nil {
t.Fatalf("build Elydora CLI: %v\n%s", err, output)
}
home := filepath.Join(root, "home")
workspace := filepath.Join(home, "workspace")
if err := os.MkdirAll(workspace, 0755); err != nil {
t.Fatalf("create workspace: %v", err)
}
privateKeyPath := filepath.Join(root, "private.key")
tokenPath := filepath.Join(root, "token.txt")
if err := os.WriteFile(
privateKeyPath,
[]byte("AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\n"),
0600,
); err != nil {
t.Fatalf("write private key: %v", err)
}
if err := os.WriteFile(tokenPath, []byte("token-1\n"), 0600); err != nil {
t.Fatalf("write token: %v", err)
}
environment := append(
os.Environ(),
"HOME="+home,
"USERPROFILE="+home,
"QWEN_HOME=",
"QWEN_RUNTIME_DIR=",
"QWEN_CODE_SYSTEM_SETTINGS_PATH="+filepath.Join(root, "system.json"),
"QWEN_CODE_SYSTEM_DEFAULTS_PATH="+filepath.Join(root, "defaults.json"),
"QWEN_CODE_TRUSTED_FOLDERS_PATH="+filepath.Join(root, "trusted.json"),
)
install := runQwenCLI(
t,
binary,
workspace,
environment,
"install",
"--agent", "qwen",
"--org-id", "org-1",
"--agent-id", qwenTestCLIAgentID,
"--kid", "kid-1",
"--private-key-file", privateKeyPath,
"--token-file", tokenPath,
"--base-url", "https://api.elydora.test",
)
if install.err != nil {
t.Fatalf("install Qwen CLI hooks: %v\n%s", install.err, install.stderr)
}
settingsPath := filepath.Join(home, ".qwen", "settings.json")
settings, err := os.ReadFile(settingsPath)
if err != nil {
t.Fatalf("read Qwen settings: %v", err)
}
for _, marker := range []string{
"PreToolUse",
"PostToolUse",
"PostToolUseFailure",
"elydora-guard",
"elydora-audit",
} {
if !strings.Contains(string(settings), marker) {
t.Fatalf("installed settings are missing %q", marker)
}
}
status := runQwenCLI(t, binary, workspace, environment, "status", "--agent", "qwen")
if status.err != nil || !strings.Contains(status.stdout, "installed") {
t.Fatalf("Qwen status: %v\n%s\n%s", status.err, status.stdout, status.stderr)
}
uninstall := runQwenCLI(
t,
binary,
workspace,
environment,
"uninstall",
"--agent", "qwen",
"--agent-id", qwenTestCLIAgentID,
)
if uninstall.err != nil {
t.Fatalf("uninstall Qwen CLI hooks: %v\n%s", uninstall.err, uninstall.stderr)
}
for _, path := range []string{
settingsPath,
filepath.Join(home, ".elydora", qwenTestCLIAgentID),
} {
if _, err := os.Stat(path); !os.IsNotExist(err) {
t.Fatalf("uninstall left %s: %v", path, err)
}
}
}
const qwenTestCLIAgentID = "qwen-e2e-agent"