Skip to content

Commit 04ff014

Browse files
committed
Reuse skill functions for root case
Signed-off-by: Gorkem Ercan <gorkem.ercan@gmail.com>
1 parent 7edd30f commit 04ff014

3 files changed

Lines changed: 20 additions & 13 deletions

File tree

pkg/lib/kitfile/generate/generate.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,12 @@ func GenerateKitfile(dir *DirectoryListing, packageOpt *artifact.Package) (*arti
9494
kitfile.Package = *packageOpt
9595
}
9696

97-
// SKILL.md: found at ROOT treat entire directory as a skill
98-
if found, skillPath := dirContainsSkillMD(*dir); found {
97+
// SKILL.md at root: treat entire directory as a single skill
98+
if found, _ := dirContainsSkillMD(*dir); found {
9999
output.Logf(output.LogLevelTrace, "SKILL.md found; treating as a skill directory")
100-
prompt := artifact.Prompt{Path: "."}
101-
if fm := parseSkillFrontmatter(skillPath); fm != nil {
102-
prompt.Name = fm.Name
103-
prompt.Description = fm.Description
100+
prompt, fm := buildPromptFromSkill(*dir)
101+
kitfile.Prompts = append(kitfile.Prompts, prompt)
102+
if fm != nil {
104103
if kitfile.Package.Name == "" {
105104
kitfile.Package.Name = fm.Name
106105
}
@@ -111,7 +110,6 @@ func GenerateKitfile(dir *DirectoryListing, packageOpt *artifact.Package) (*arti
111110
kitfile.Package.License = fm.License
112111
}
113112
}
114-
kitfile.Prompts = append(kitfile.Prompts, prompt)
115113
return kitfile, nil
116114
}
117115

@@ -240,7 +238,7 @@ func GenerateKitfile(dir *DirectoryListing, packageOpt *artifact.Package) (*arti
240238
func addDirToKitfile(kitfile *artifact.KitFile, dir DirectoryListing) (modelFiles []FileListing, err error) {
241239
if found, _ := dirContainsSkillMD(dir); found {
242240
output.Logf(output.LogLevelTrace, "Directory %s contains SKILL.md; treating as skill", dir.Path)
243-
prompt := buildPromptFromSkill(dir)
241+
prompt, _ := buildPromptFromSkill(dir)
244242
kitfile.Prompts = append(kitfile.Prompts, prompt)
245243
return nil, nil
246244
}

pkg/lib/kitfile/generate/skill.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,22 @@ func dirContainsSkillMD(dir DirectoryListing) (bool, string) {
7878
return false, ""
7979
}
8080

81-
func buildPromptFromSkill(dir DirectoryListing) artifact.Prompt {
81+
func buildPromptFromSkill(dir DirectoryListing) (artifact.Prompt, *SkillFrontmatter) {
8282
prompt := artifact.Prompt{
8383
Path: dir.Path,
8484
}
8585

8686
found, skillPath := dirContainsSkillMD(dir)
8787
if !found {
88-
return prompt
88+
return prompt, nil
8989
}
9090

9191
fm := parseSkillFrontmatter(skillPath)
9292
if fm != nil {
9393
prompt.Name = fm.Name
9494
prompt.Description = fm.Description
9595
}
96-
return prompt
96+
return prompt, fm
9797
}
9898

9999
func applySkillMetadataToPackage(kitfile *artifact.KitFile, dir DirectoryListing) {
@@ -110,7 +110,12 @@ func applySkillMetadataToPackage(kitfile *artifact.KitFile, dir DirectoryListing
110110
return
111111
}
112112

113-
if len(skillFrontmatters) == 1 {
113+
// Only promote name/description when the Kitfile contains exclusively
114+
// prompt layers. A mixed Kitfile (model + skill) should not inherit the
115+
// skill's name as the package name.
116+
hasOnlyPrompts := kitfile.Model == nil && len(kitfile.Code) == 0 &&
117+
len(kitfile.DataSets) == 0 && len(kitfile.Docs) == 0
118+
if hasOnlyPrompts && len(skillFrontmatters) == 1 {
114119
fm := skillFrontmatters[0]
115120
if kitfile.Package.Name == "" {
116121
kitfile.Package.Name = fm.Name

pkg/lib/kitfile/generate/skill_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func TestBuildPromptFromSkill(t *testing.T) {
183183
},
184184
}
185185

186-
prompt := buildPromptFromSkill(dir)
186+
prompt, _ := buildPromptFromSkill(dir)
187187
if prompt.Path != "myskill" {
188188
t.Errorf("Path = %q, want %q", prompt.Path, "myskill")
189189
}
@@ -401,6 +401,10 @@ func TestGenerateKitfile_MultiSkillMixedDirs(t *testing.T) {
401401
if len(kitfile.Docs) != 1 {
402402
t.Fatalf("expected 1 docs layer, got %d", len(kitfile.Docs))
403403
}
404+
// Mixed content: skill name should NOT be promoted to package
405+
if kitfile.Package.Name != "" {
406+
t.Errorf("package name should be empty for mixed content, got %q", kitfile.Package.Name)
407+
}
404408
}
405409

406410
func TestGenerateKitfile_RootSkillOverridesSubdir(t *testing.T) {

0 commit comments

Comments
 (0)