@olegkoval/agent-skills 1.9.2 → 1.10.1

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.
Files changed (82) hide show
  1. package/.claude-plugin/plugin.json +1 -4
  2. package/.cursor-plugin/index.json +0 -15
  3. package/README.md +0 -10
  4. package/catalog/skills.json +0 -68
  5. package/collections/docs-tools.json +1 -1
  6. package/collections/git-tools.json +1 -1
  7. package/collections/software-development.json +0 -2
  8. package/package.json +1 -1
  9. package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +2 -3
  10. package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +1 -2
  11. package/packages/marketing/search-console-indexing-audit/adapters/kiro/steering/search-console-indexing-audit.md +0 -1
  12. package/packages/marketing/search-console-indexing-audit/adapters/windsurf/rules/search-console-indexing-audit.md +0 -1
  13. package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +2 -3
  14. package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +1 -2
  15. package/packages/marketing/viral-launch/adapters/kiro/steering/viral-launch.md +0 -1
  16. package/packages/marketing/viral-launch/adapters/windsurf/rules/viral-launch.md +0 -1
  17. package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +2 -3
  18. package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +1 -2
  19. package/packages/music/fill-music-player/adapters/kiro/steering/fill-music-player.md +0 -1
  20. package/packages/music/fill-music-player/adapters/windsurf/rules/fill-music-player.md +0 -1
  21. package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +2 -3
  22. package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +1 -2
  23. package/packages/photography/gallery/adapters/kiro/steering/gallery.md +0 -1
  24. package/packages/photography/gallery/adapters/windsurf/rules/gallery.md +0 -1
  25. package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +2 -3
  26. package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +2 -3
  27. package/packages/software-development/add-to-my-skills/adapters/kiro/steering/add-to-my-skills.md +0 -1
  28. package/packages/software-development/add-to-my-skills/adapters/windsurf/rules/add-to-my-skills.md +0 -1
  29. package/packages/software-development/ai-tools-setup/adapters/claude/skills/ai-tools-setup/SKILL.md +2 -3
  30. package/packages/software-development/ai-tools-setup/adapters/cursor/skills/ai-tools-setup/SKILL.md +2 -3
  31. package/packages/software-development/ai-tools-setup/adapters/kiro/steering/ai-tools-setup.md +0 -1
  32. package/packages/software-development/ai-tools-setup/adapters/windsurf/rules/ai-tools-setup.md +0 -1
  33. package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +5 -6
  34. package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +5 -6
  35. package/packages/software-development/changelog-generator/adapters/kiro/steering/changelog-generator.md +0 -1
  36. package/packages/software-development/changelog-generator/adapters/windsurf/rules/changelog-generator.md +0 -1
  37. package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +2 -3
  38. package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -2
  39. package/packages/software-development/cloudflare-block-countries/adapters/kiro/steering/cloudflare-block-countries.md +0 -1
  40. package/packages/software-development/cloudflare-block-countries/adapters/windsurf/rules/cloudflare-block-countries.md +0 -1
  41. package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +2 -3
  42. package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +1 -2
  43. package/packages/software-development/docs-index-keeper/adapters/kiro/steering/docs-index-keeper.md +0 -1
  44. package/packages/software-development/docs-index-keeper/adapters/windsurf/rules/docs-index-keeper.md +0 -1
  45. package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +2 -3
  46. package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +1 -2
  47. package/packages/software-development/gh-cli/adapters/kiro/steering/gh-cli.md +0 -1
  48. package/packages/software-development/gh-cli/adapters/windsurf/rules/gh-cli.md +0 -1
  49. package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +2 -3
  50. package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -2
  51. package/packages/software-development/git-commit/adapters/kiro/steering/git-commit.md +0 -1
  52. package/packages/software-development/git-commit/adapters/windsurf/rules/git-commit.md +0 -1
  53. package/packages/software-development/obsidian-pr-sync/adapters/claude/skills/obsidian-pr-sync/SKILL.md +2 -3
  54. package/packages/software-development/obsidian-pr-sync/adapters/cursor/skills/obsidian-pr-sync/SKILL.md +1 -2
  55. package/packages/software-development/obsidian-pr-sync/adapters/kiro/steering/obsidian-pr-sync.md +0 -1
  56. package/packages/software-development/obsidian-pr-sync/adapters/windsurf/rules/obsidian-pr-sync.md +0 -1
  57. package/packages/software-development/obsidian-task-rollover/adapters/claude/skills/obsidian-task-rollover/SKILL.md +7 -8
  58. package/packages/software-development/obsidian-task-rollover/adapters/cursor/skills/obsidian-task-rollover/SKILL.md +6 -7
  59. package/packages/software-development/obsidian-task-rollover/adapters/kiro/steering/obsidian-task-rollover.md +0 -1
  60. package/packages/software-development/obsidian-task-rollover/adapters/windsurf/rules/obsidian-task-rollover.md +0 -1
  61. package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +2 -3
  62. package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +1 -2
  63. package/packages/software-development/open-source-publisher/adapters/kiro/steering/open-source-publisher.md +0 -1
  64. package/packages/software-development/open-source-publisher/adapters/windsurf/rules/open-source-publisher.md +0 -1
  65. package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +2 -3
  66. package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +1 -2
  67. package/packages/software-development/product-builder/adapters/kiro/steering/product-builder.md +0 -1
  68. package/packages/software-development/product-builder/adapters/windsurf/rules/product-builder.md +0 -1
  69. package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +2 -3
  70. package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +1 -2
  71. package/packages/software-development/promptctl/adapters/kiro/steering/promptctl.md +0 -1
  72. package/packages/software-development/promptctl/adapters/windsurf/rules/promptctl.md +0 -1
  73. package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +2 -3
  74. package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +1 -2
  75. package/packages/software-development/semantic-release-beta/adapters/kiro/steering/semantic-release-beta.md +0 -1
  76. package/packages/software-development/semantic-release-beta/adapters/windsurf/rules/semantic-release-beta.md +0 -1
  77. package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +2 -3
  78. package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +1 -2
  79. package/packages/software-development/starter-rules/adapters/kiro/steering/starter-rules.md +0 -1
  80. package/packages/software-development/starter-rules/adapters/windsurf/rules/starter-rules.md +0 -1
  81. package/scripts/build-adapters.sh +15 -4
  82. package/scripts/validate-catalog.sh +16 -0
@@ -1,5 +1,3 @@
1
- <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
-
3
1
  ---
4
2
  name: semantic-release-beta
5
3
  description: Set up or update a Node.js release pipeline that uses semantic-release-npm-github-publish with a stable main channel and a prerelease beta channel on a beta branch, including GitHub Actions validation and npm publishing behavior.
@@ -17,6 +15,7 @@ metadata:
17
15
  - github-actions
18
16
  - npm
19
17
  ---
18
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
19
 
21
20
  # semantic-release-beta
22
21
 
@@ -5,7 +5,6 @@ inclusion: manual
5
5
  description: "Set up semantic-release-npm-github-publish with stable main releases and prerelease beta releases on a beta branch."
6
6
  ---
7
7
 
8
-
9
8
  # semantic-release-beta
10
9
 
11
10
  Use this skill when a project needs a reusable beta prerelease workflow with:
@@ -4,7 +4,6 @@
4
4
  description: "Set up semantic-release-npm-github-publish with stable main releases and prerelease beta releases on a beta branch."
5
5
  ---
6
6
 
7
-
8
7
  # semantic-release-beta
9
8
 
10
9
  Use this skill when a project needs a reusable beta prerelease workflow with:
@@ -1,5 +1,3 @@
1
- <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
-
3
1
  ---
4
2
  name: starter-rules
5
3
  description: Load and enforce the hard rules every oleg-koval/* starter must obey. Use when starting or auditing work in saas-init, ts-npm-starter, go-starter, py-starter, or any future oleg-koval template repo. Covers functional style, 300-line file cap, E2E > unit tests, pre-commit hooks, no-comment policy, KISS/DRY/SOLID, and Vertical Slice as default architecture for SaaS/app starters.
@@ -7,7 +5,7 @@ license: MIT
7
5
  allowed-tools: Read, Bash
8
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools.
9
7
  metadata:
10
- targets: ["claude"]
8
+ targets: [_source-only]
11
9
  author: Oleg Koval
12
10
  tags:
13
11
  - starters
@@ -17,6 +15,7 @@ metadata:
17
15
  - linting
18
16
  - pre-commit
19
17
  ---
18
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
19
 
21
20
  # Starter Rules
22
21
 
@@ -1,5 +1,3 @@
1
- <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
-
3
1
  ---
4
2
  name: starter-rules
5
3
  description: Load and enforce the hard rules every oleg-koval/* starter must obey. Use when starting or auditing work in saas-init, ts-npm-starter, go-starter, py-starter, or any future oleg-koval template repo. Covers functional style, 300-line file cap, E2E > unit tests, pre-commit hooks, no-comment policy, KISS/DRY/SOLID, and Vertical Slice as default architecture for SaaS/app starters.
@@ -17,6 +15,7 @@ metadata:
17
15
  - linting
18
16
  - pre-commit
19
17
  ---
18
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
19
 
21
20
  # Starter Rules
22
21
 
@@ -5,7 +5,6 @@ inclusion: manual
5
5
  description: "Load and enforce hard rules for every oleg-koval/* starter: 300-line files, E2E tests, pre-commit hooks, Vertical Slice architecture, no comments, KISS/DRY/SOLID."
6
6
  ---
7
7
 
8
-
9
8
  # Starter Rules
10
9
 
11
10
  ## Overview
@@ -4,7 +4,6 @@
4
4
  description: "Load and enforce hard rules for every oleg-koval/* starter: 300-line files, E2E tests, pre-commit hooks, Vertical Slice architecture, no comments, KISS/DRY/SOLID."
5
5
  ---
6
6
 
7
-
8
7
  # Starter Rules
9
8
 
10
9
  ## Overview
@@ -16,6 +16,11 @@ const skillPathFor = (pkg) => path.join(root, pkg.path, 'SKILL.md')
16
16
  const promptNameFor = (pkg) => `${pkg.name}.prompt.md`
17
17
  const generatedHeader = '<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->'
18
18
  const stripFrontmatter = (content) => content.replace(/^---\n[\s\S]*?\n---\n?/, '')
19
+ const extractFrontmatter = (content) => {
20
+ const m = content.match(/^(---\n[\s\S]*?\n---\n?)/)
21
+ if (!m) return ''
22
+ return m[1].endsWith('\n') ? m[1] : m[1] + '\n'
23
+ }
19
24
  const injectTargets = (content, targets) => {
20
25
  const targetsYaml = targets.length > 0
21
26
  ? ` targets: [${targets.map(t => JSON.stringify(t)).join(', ')}]`
@@ -193,6 +198,9 @@ for (const pkg of catalog.packages) {
193
198
 
194
199
  for (const pkg of catalog.packages) {
195
200
  const canonical = fs.readFileSync(skillPathFor(pkg), 'utf8').trimEnd()
201
+ const fm = extractFrontmatter(canonical)
202
+ if (!fm) throw new Error(`canonical SKILL.md has no frontmatter: ${skillPathFor(pkg)}`)
203
+ const body = stripTrailingLineWhitespace(stripFrontmatter(canonical).trimStart().trimEnd())
196
204
 
197
205
  if (pkg.adapters.includes('claude')) {
198
206
  const claudeDestDir = path.join(root, pkg.path, 'adapters', 'claude', 'skills', pkg.name)
@@ -209,7 +217,7 @@ for (const pkg of catalog.packages) {
209
217
  2,
210
218
  ) + '\n',
211
219
  )
212
- fs.writeFileSync(path.join(claudeDestDir, 'SKILL.md'), [generatedHeader, '', injectTargets(canonical, ['claude']), ''].join('\n'))
220
+ fs.writeFileSync(path.join(claudeDestDir, 'SKILL.md'), [fm + generatedHeader, '', body, ''].join('\n'))
213
221
  copySkillResources(pkg, claudeDestDir)
214
222
  }
215
223
 
@@ -230,12 +238,15 @@ for (const pkg of catalog.packages) {
230
238
  2,
231
239
  ) + '\n',
232
240
  )
233
- fs.writeFileSync(path.join(destDir, 'SKILL.md'), [generatedHeader, '', injectTargets(canonical, ['cursor']), ''].join('\n'))
241
+ const cursorCanonical = injectTargets(canonical, ['cursor'])
242
+ const cursorFrontmatter = extractFrontmatter(cursorCanonical)
243
+ const cursorBody = stripTrailingLineWhitespace(stripFrontmatter(cursorCanonical).trimStart().trimEnd())
244
+ fs.writeFileSync(path.join(destDir, 'SKILL.md'), [cursorFrontmatter + generatedHeader, '', cursorBody, ''].join('\n'))
234
245
  copySkillResources(pkg, destDir)
235
246
  }
236
247
 
237
248
  if (pkg.adapters.includes('windsurf')) {
238
- const skillBody = stripFrontmatter(canonical).trimEnd()
249
+ const skillBody = stripFrontmatter(canonical).trimStart().trimEnd()
239
250
  const content = stripTrailingLineWhitespace([
240
251
  generatedHeader,
241
252
  '',
@@ -252,7 +263,7 @@ for (const pkg of catalog.packages) {
252
263
  }
253
264
 
254
265
  if (pkg.adapters.includes('kiro')) {
255
- const skillBody = stripFrontmatter(canonical).trimEnd()
266
+ const skillBody = stripFrontmatter(canonical).trimStart().trimEnd()
256
267
  const content = stripTrailingLineWhitespace([
257
268
  generatedHeader,
258
269
  '',
@@ -118,6 +118,22 @@ for (const pkg of catalog.packages) {
118
118
  throw new Error(`stale flat package path exists: ${oldFlatPath}`)
119
119
  }
120
120
  }
121
+
122
+ // Assert every SKILL.md (canonical + adapter wrappers) has a valid closed frontmatter block
123
+ // Codex adapter files use README.md and are validated separately above
124
+ const walk = (dir) => {
125
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
126
+ const full = path.join(dir, entry.name)
127
+ if (entry.isDirectory()) walk(full)
128
+ else if (entry.name === 'SKILL.md') {
129
+ const content = fs.readFileSync(full, 'utf8')
130
+ if (!content.match(/^---\n[\s\S]*?\n---\n?/)) {
131
+ throw new Error(`SKILL.md does not have valid closed frontmatter: ${full}`)
132
+ }
133
+ }
134
+ }
135
+ }
136
+ walk('packages')
121
137
  EOF
122
138
 
123
139
  echo "catalog validation passed"