skiller 0.7.23 → 0.8.0

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.
package/README.md CHANGED
@@ -37,7 +37,7 @@ npx skiller@latest apply
37
37
  | `agentsmd` | AgentsMd (pseudo) | `AGENTS.md` | - | - |
38
38
  | `copilot` | GitHub Copilot | `AGENTS.md` | `.vscode/mcp.json` (`servers`) | `.claude/skills` |
39
39
  | `claude` | Claude Code | `CLAUDE.md` (`@file` refs) | `.mcp.json` | `.claude/skills` |
40
- | `codex` | OpenAI Codex CLI | `AGENTS.md`, `.codex/config.toml` | `.codex/config.toml` | `.codex/skills` |
40
+ | `codex` | OpenAI Codex CLI | `AGENTS.md`, `.codex/config.toml` | `.codex/config.toml` | `.agents/skills` |
41
41
  | `cursor` | Cursor | `AGENTS.md` | `.cursor/mcp.json` | `.cursor/skills` |
42
42
  | `windsurf` | Windsurf | `AGENTS.md` | `.windsurf/mcp_config.json` | - |
43
43
  | `cline` | Cline | `.clinerules` | - | - |
@@ -143,7 +143,7 @@ class CodexCliAgent {
143
143
  return true;
144
144
  }
145
145
  getSkillsPath(projectRoot) {
146
- return path.join(projectRoot, '.codex/skills');
146
+ return path.join(projectRoot, '.agents/skills');
147
147
  }
148
148
  }
149
149
  exports.CodexCliAgent = CodexCliAgent;
@@ -49,6 +49,8 @@ const yaml = __importStar(require("js-yaml"));
49
49
  const constants_1 = require("../constants");
50
50
  const SkillsUtils_1 = require("./SkillsUtils");
51
51
  const FrontmatterParser_1 = require("./FrontmatterParser");
52
+ const LEGACY_CODEX_SKILLS_PATH = path.join('.codex', 'skills');
53
+ const UNIVERSAL_AGENTS_SKILLS_PATH = path.join('.agents', 'skills');
52
54
  /**
53
55
  * For non-Claude agents, compile a wrapper SKILL.md (body is a single @reference)
54
56
  * into a standalone SKILL.md with the referenced file's body inlined.
@@ -570,6 +572,45 @@ function getSkillsGitignorePaths(projectRoot, agents) {
570
572
  * This function now only discovers and validates skills.
571
573
  */
572
574
  async function propagateSkills(projectRoot, agents, skillsEnabled, verbose, dryRun, skillerDir) {
575
+ async function migrateLegacyCodexSkillsDir(destinationPaths) {
576
+ const universalSkillsDir = path.join(projectRoot, UNIVERSAL_AGENTS_SKILLS_PATH);
577
+ const legacyCodexSkillsDir = path.join(projectRoot, LEGACY_CODEX_SKILLS_PATH);
578
+ if (!destinationPaths.has(universalSkillsDir))
579
+ return;
580
+ try {
581
+ await fs.access(legacyCodexSkillsDir);
582
+ }
583
+ catch {
584
+ return;
585
+ }
586
+ (0, constants_1.logVerboseInfo)(dryRun
587
+ ? `DRY RUN: Would migrate legacy Codex skills from ${legacyCodexSkillsDir} to ${universalSkillsDir}`
588
+ : `Migrating legacy Codex skills from ${legacyCodexSkillsDir} to ${universalSkillsDir}`, verbose, dryRun);
589
+ if (dryRun)
590
+ return;
591
+ await fs.mkdir(path.dirname(universalSkillsDir), { recursive: true });
592
+ try {
593
+ await fs.access(universalSkillsDir);
594
+ const entries = await fs.readdir(legacyCodexSkillsDir, {
595
+ withFileTypes: true,
596
+ });
597
+ for (const entry of entries) {
598
+ const sourcePath = path.join(legacyCodexSkillsDir, entry.name);
599
+ const targetPath = path.join(universalSkillsDir, entry.name);
600
+ try {
601
+ await fs.access(targetPath);
602
+ await fs.rm(sourcePath, { recursive: true, force: true });
603
+ }
604
+ catch {
605
+ await fs.rename(sourcePath, targetPath);
606
+ }
607
+ }
608
+ await fs.rmdir(legacyCodexSkillsDir).catch(() => undefined);
609
+ }
610
+ catch {
611
+ await fs.rename(legacyCodexSkillsDir, universalSkillsDir);
612
+ }
613
+ }
573
614
  if (!skillsEnabled) {
574
615
  (0, constants_1.logVerboseInfo)('Skills support disabled', verbose, dryRun);
575
616
  return;
@@ -589,6 +630,7 @@ async function propagateSkills(projectRoot, agents, skillsEnabled, verbose, dryR
589
630
  }
590
631
  }
591
632
  }
633
+ await migrateLegacyCodexSkillsDir(destinationPaths);
592
634
  // Check if skills directory exists
593
635
  let skillsDirExists = true;
594
636
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skiller",
3
- "version": "0.7.23",
3
+ "version": "0.8.0",
4
4
  "description": "Skiller — apply the same rules to all coding agents",
5
5
  "main": "dist/lib.js",
6
6
  "publishConfig": {