skiller 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -81,7 +81,11 @@ async function updateGitignore(projectRoot, paths) {
81
81
  return relative.replace(/\\/g, '/'); // Convert to POSIX format
82
82
  })
83
83
  .filter((p) => {
84
- // Never include any path that resides inside a .claude directory (inputs, not outputs)
84
+ // Allow .claude/skills (generated output) but exclude other .claude/* paths (inputs)
85
+ if (p === '.claude/skills' || p === '/.claude/skills') {
86
+ return true;
87
+ }
88
+ // Never include any other path that resides inside a .claude directory (inputs, not outputs)
85
89
  return !p.includes('/.claude/') && !p.startsWith('.claude/');
86
90
  })
87
91
  .map((p) => {
@@ -66,40 +66,40 @@ async function discoverSkills(projectRoot, skillerDir) {
66
66
  }
67
67
  /**
68
68
  * Gets the paths that skills will generate, for gitignore purposes.
69
- * Returns empty array if skills directory doesn't exist.
69
+ * When generateFromRules is true, always includes .claude/skills even if it doesn't exist yet.
70
70
  */
71
71
  async function getSkillsGitignorePaths(projectRoot, options = {}) {
72
- const claudeSkillsDir = path.join(projectRoot, constants_1.CLAUDE_SKILLS_PATH);
73
- // Check if skills directory exists
74
- let skillsExist = false;
75
- try {
76
- await fs.access(claudeSkillsDir);
77
- skillsExist = true;
78
- }
79
- catch {
80
- return [];
81
- }
82
- if (!skillsExist) {
83
- return [];
84
- }
85
72
  const paths = [];
86
73
  // Gitignore .claude/skills if:
87
- // 1. generate_from_rules is explicitly true in config, OR
88
- // 2. .claude/rules directory exists (skills are generated from rules)
74
+ // 1. generate_from_rules is explicitly true in config (always gitignore, even if dir doesn't exist)
75
+ // 2. OR .claude/rules directory exists (skills are generated from rules)
76
+ // 3. OR .claude/skills exists AND .claude/rules exists (legacy check)
89
77
  if (options.generateFromRules) {
90
- // Config says skills are generated from rules
78
+ // Config says skills are generated from rules - always gitignore
91
79
  paths.push(path.join(projectRoot, constants_1.CLAUDE_SKILLS_PATH));
92
80
  }
93
81
  else {
94
- // Check if .claude/rules exists (fallback for when config not passed)
95
- const claudeRulesDir = path.join(projectRoot, '.claude', 'rules');
82
+ // Check if .claude/skills exists
83
+ const claudeSkillsDir = path.join(projectRoot, constants_1.CLAUDE_SKILLS_PATH);
84
+ let skillsExist = false;
96
85
  try {
97
- await fs.access(claudeRulesDir);
98
- // .claude/rules exists, so .claude/skills is generated
99
- paths.push(path.join(projectRoot, constants_1.CLAUDE_SKILLS_PATH));
86
+ await fs.access(claudeSkillsDir);
87
+ skillsExist = true;
100
88
  }
101
89
  catch {
102
- // .claude/rules doesn't exist, so .claude/skills is versioned (don't gitignore)
90
+ // Skills directory doesn't exist
91
+ }
92
+ if (skillsExist) {
93
+ // Check if .claude/rules exists (fallback for when config not passed)
94
+ const claudeRulesDir = path.join(projectRoot, '.claude', 'rules');
95
+ try {
96
+ await fs.access(claudeRulesDir);
97
+ // .claude/rules exists, so .claude/skills is generated
98
+ paths.push(path.join(projectRoot, constants_1.CLAUDE_SKILLS_PATH));
99
+ }
100
+ catch {
101
+ // .claude/rules doesn't exist, so .claude/skills is versioned (don't gitignore)
102
+ }
103
103
  }
104
104
  }
105
105
  // Always gitignore .skillz (for MCP agents)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skiller",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "description": "Skiller — apply the same rules to all coding agents",
5
5
  "main": "dist/lib.js",
6
6
  "publishConfig": {