From 087e4f9e7eb0b64c802846b9cab3421adfad6128 Mon Sep 17 00:00:00 2001 From: lxowalle Date: Sun, 12 Apr 2026 23:14:36 +0800 Subject: [PATCH] fix github blob skill install directory resolution --- pkg/skills/github_registry_test.go | 12 ++++++++++++ pkg/skills/installer.go | 7 +++++++ pkg/skills/installer_test.go | 22 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/pkg/skills/github_registry_test.go b/pkg/skills/github_registry_test.go index 754291ba1..f6436b11e 100644 --- a/pkg/skills/github_registry_test.go +++ b/pkg/skills/github_registry_test.go @@ -197,4 +197,16 @@ func TestGitHubRegistryResolveInstallDirNameSupportsFullURLs(t *testing.T) { dirName, err = registry.ResolveInstallDirName("https://github.com/org/repo/tree/main/skills/release-checklist") require.NoError(t, err) assert.Equal(t, "release-checklist", dirName) + + dirName, err = registry.ResolveInstallDirName( + "https://ghe.example.com/git/org/repo/blob/dev/skills/pr-review/SKILL.md", + ) + require.NoError(t, err) + assert.Equal(t, "pr-review", dirName) + + dirName, err = registry.ResolveInstallDirName( + "https://ghe.example.com/git/org/repo/blob/dev/SKILL.md", + ) + require.NoError(t, err) + assert.Equal(t, "repo", dirName) } diff --git a/pkg/skills/installer.go b/pkg/skills/installer.go index c46dd9f53..c88cc046c 100644 --- a/pkg/skills/installer.go +++ b/pkg/skills/installer.go @@ -363,6 +363,13 @@ func githubInstallDirNameWithBaseURL(repo, githubBaseURL string) (string, error) return "", err } if ref.SubPath != "" { + if isSkillMarkdownPath(ref.SubPath) { + skillDir := path.Dir(strings.Trim(ref.SubPath, "/")) + if skillDir == "." || skillDir == "" { + return ref.RepoName, nil + } + return path.Base(skillDir), nil + } return filepath.Base(ref.SubPath), nil } return ref.RepoName, nil diff --git a/pkg/skills/installer_test.go b/pkg/skills/installer_test.go index 981b61302..9de991354 100644 --- a/pkg/skills/installer_test.go +++ b/pkg/skills/installer_test.go @@ -166,6 +166,28 @@ func TestParseGitHubRefWithBaseURL(t *testing.T) { t.Fatalf("dirName = %q, want test", dirName) } + dirName, err = githubInstallDirNameWithBaseURL( + "https://ghe.example.com/git/org/repo/blob/dev/skills/test/SKILL.md", + "https://ghe.example.com/git", + ) + if err != nil { + t.Fatalf("githubInstallDirNameWithBaseURL() unexpected error for blob skill url = %v", err) + } + if dirName != "test" { + t.Fatalf("dirName for nested blob skill = %q, want test", dirName) + } + + dirName, err = githubInstallDirNameWithBaseURL( + "https://ghe.example.com/git/org/repo/blob/dev/SKILL.md", + "https://ghe.example.com/git", + ) + if err != nil { + t.Fatalf("githubInstallDirNameWithBaseURL() unexpected error for repo root blob skill = %v", err) + } + if dirName != "repo" { + t.Fatalf("dirName for repo root blob skill = %q, want repo", dirName) + } + ref, err = parseGitHubRefWithBaseURL("https://ghe.example.com/git/org/repo", "https://ghe.example.com/git", "") if err != nil { t.Fatalf("parseGitHubRefWithBaseURL() unexpected error = %v", err)