@hivehub/rulebook 5.5.1 → 5.7.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.
Files changed (342) hide show
  1. package/.claude/commands/rulebook-learn-capture.md +41 -48
  2. package/.claude/commands/rulebook-learn-list.md +13 -13
  3. package/README.md +332 -394
  4. package/dist/cli/commands/context-intelligence.d.ts +0 -1
  5. package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
  6. package/dist/cli/commands/context-intelligence.js +12 -33
  7. package/dist/cli/commands/context-intelligence.js.map +1 -1
  8. package/dist/cli/commands/index.d.ts +4 -7
  9. package/dist/cli/commands/index.d.ts.map +1 -1
  10. package/dist/cli/commands/index.js +4 -7
  11. package/dist/cli/commands/index.js.map +1 -1
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +40 -81
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli/commands/mcp.d.ts +0 -1
  16. package/dist/cli/commands/mcp.d.ts.map +1 -1
  17. package/dist/cli/commands/mcp.js +1 -7
  18. package/dist/cli/commands/mcp.js.map +1 -1
  19. package/dist/cli/commands/memory.d.ts +7 -1
  20. package/dist/cli/commands/memory.d.ts.map +1 -1
  21. package/dist/cli/commands/memory.js +51 -57
  22. package/dist/cli/commands/memory.js.map +1 -1
  23. package/dist/cli/commands/misc.d.ts +1 -15
  24. package/dist/cli/commands/misc.d.ts.map +1 -1
  25. package/dist/cli/commands/misc.js +36 -215
  26. package/dist/cli/commands/misc.js.map +1 -1
  27. package/dist/cli/commands/plans.d.ts +0 -6
  28. package/dist/cli/commands/plans.d.ts.map +1 -1
  29. package/dist/cli/commands/plans.js +9 -77
  30. package/dist/cli/commands/plans.js.map +1 -1
  31. package/dist/cli/commands/skills.js +6 -6
  32. package/dist/cli/commands/skills.js.map +1 -1
  33. package/dist/cli/commands/task.js +4 -4
  34. package/dist/cli/commands/task.js.map +1 -1
  35. package/dist/cli/commands/update.d.ts.map +1 -1
  36. package/dist/cli/commands/update.js +122 -52
  37. package/dist/cli/commands/update.js.map +1 -1
  38. package/dist/cli/prompts.d.ts.map +1 -1
  39. package/dist/cli/prompts.js +1 -78
  40. package/dist/cli/prompts.js.map +1 -1
  41. package/dist/core/claude/claude-mcp.d.ts +59 -0
  42. package/dist/core/claude/claude-mcp.d.ts.map +1 -0
  43. package/dist/core/claude/claude-mcp.js +220 -0
  44. package/dist/core/claude/claude-mcp.js.map +1 -0
  45. package/dist/core/claude/claude-md-generator.d.ts +52 -0
  46. package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
  47. package/dist/core/claude/claude-md-generator.js +104 -0
  48. package/dist/core/claude/claude-md-generator.js.map +1 -0
  49. package/dist/core/claude/claude-settings-manager.d.ts +44 -0
  50. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
  51. package/dist/core/claude/claude-settings-manager.js +194 -0
  52. package/dist/core/claude/claude-settings-manager.js.map +1 -0
  53. package/dist/core/claude-settings-manager.d.ts.map +1 -1
  54. package/dist/core/claude-settings-manager.js +9 -3
  55. package/dist/core/claude-settings-manager.js.map +1 -1
  56. package/dist/core/console/cli-bridge.d.ts +113 -0
  57. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  58. package/dist/core/console/cli-bridge.js +1094 -0
  59. package/dist/core/console/cli-bridge.js.map +1 -0
  60. package/dist/core/detect/detector.d.ts +35 -0
  61. package/dist/core/detect/detector.d.ts.map +1 -0
  62. package/dist/core/detect/detector.js +541 -0
  63. package/dist/core/detect/detector.js.map +1 -0
  64. package/dist/core/docs/docs-generator.d.ts +9 -0
  65. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  66. package/dist/core/docs/docs-generator.js +531 -0
  67. package/dist/core/docs/docs-generator.js.map +1 -0
  68. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  69. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  70. package/dist/core/docs/mcp-reference-generator.js +66 -0
  71. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  72. package/dist/core/generators/generator.d.ts +54 -0
  73. package/dist/core/generators/generator.d.ts.map +1 -0
  74. package/dist/core/generators/generator.js +1041 -0
  75. package/dist/core/generators/generator.js.map +1 -0
  76. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  77. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  78. package/dist/core/generators/gitignore-generator.js +307 -0
  79. package/dist/core/generators/gitignore-generator.js.map +1 -0
  80. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  81. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  82. package/dist/core/generators/minimal-scaffolder.js +51 -0
  83. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  84. package/dist/core/generators/rules-generator.d.ts +73 -0
  85. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  86. package/dist/core/generators/rules-generator.js +202 -0
  87. package/dist/core/generators/rules-generator.js.map +1 -0
  88. package/dist/core/generators/workflow-generator.d.ts +15 -0
  89. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  90. package/dist/core/generators/workflow-generator.js +390 -0
  91. package/dist/core/generators/workflow-generator.js.map +1 -0
  92. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  93. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  94. package/dist/core/ide/multi-tool-generator.js +157 -0
  95. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  96. package/dist/core/ide/opencode-generator.d.ts +72 -0
  97. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  98. package/dist/core/ide/opencode-generator.js +450 -0
  99. package/dist/core/ide/opencode-generator.js.map +1 -0
  100. package/dist/core/merger.d.ts +1 -1
  101. package/dist/core/merger.d.ts.map +1 -1
  102. package/dist/core/merger.js +5 -5
  103. package/dist/core/merger.js.map +1 -1
  104. package/dist/core/migrator.d.ts +0 -1
  105. package/dist/core/migrator.d.ts.map +1 -1
  106. package/dist/core/migrator.js +4 -29
  107. package/dist/core/migrator.js.map +1 -1
  108. package/dist/core/quality/coverage-checker.d.ts +14 -0
  109. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  110. package/dist/core/quality/coverage-checker.js +176 -0
  111. package/dist/core/quality/coverage-checker.js.map +1 -0
  112. package/dist/core/quality/dependency-checker.d.ts +21 -0
  113. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  114. package/dist/core/quality/dependency-checker.js +247 -0
  115. package/dist/core/quality/dependency-checker.js.map +1 -0
  116. package/dist/core/quality/doctor.d.ts +19 -0
  117. package/dist/core/quality/doctor.d.ts.map +1 -0
  118. package/dist/core/quality/doctor.js +163 -0
  119. package/dist/core/quality/doctor.js.map +1 -0
  120. package/dist/core/quality/validator.d.ts +21 -0
  121. package/dist/core/quality/validator.d.ts.map +1 -0
  122. package/dist/core/quality/validator.js +177 -0
  123. package/dist/core/quality/validator.js.map +1 -0
  124. package/dist/core/ralph-scripts.d.ts.map +1 -1
  125. package/dist/core/ralph-scripts.js +7 -6
  126. package/dist/core/ralph-scripts.js.map +1 -1
  127. package/dist/core/skills/skills-manager.d.ts +126 -0
  128. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  129. package/dist/core/skills/skills-manager.js +630 -0
  130. package/dist/core/skills/skills-manager.js.map +1 -0
  131. package/dist/core/state/config-manager.d.ts +86 -0
  132. package/dist/core/state/config-manager.d.ts.map +1 -0
  133. package/dist/core/state/config-manager.js +562 -0
  134. package/dist/core/state/config-manager.js.map +1 -0
  135. package/dist/core/state/override-manager.d.ts +23 -0
  136. package/dist/core/state/override-manager.d.ts.map +1 -0
  137. package/dist/core/state/override-manager.js +82 -0
  138. package/dist/core/state/override-manager.js.map +1 -0
  139. package/dist/core/state/state-writer.d.ts +34 -0
  140. package/dist/core/state/state-writer.d.ts.map +1 -0
  141. package/dist/core/state/state-writer.js +78 -0
  142. package/dist/core/state/state-writer.js.map +1 -0
  143. package/dist/core/state/version-bumper.d.ts +19 -0
  144. package/dist/core/state/version-bumper.d.ts.map +1 -0
  145. package/dist/core/state/version-bumper.js +180 -0
  146. package/dist/core/state/version-bumper.js.map +1 -0
  147. package/dist/core/tasks/decision-manager.d.ts +25 -0
  148. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  149. package/dist/core/tasks/decision-manager.js +183 -0
  150. package/dist/core/tasks/decision-manager.js.map +1 -0
  151. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  152. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  153. package/dist/core/tasks/knowledge-manager.js +173 -0
  154. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  155. package/dist/core/tasks/learn-manager.d.ts +27 -0
  156. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  157. package/dist/core/tasks/learn-manager.js +121 -0
  158. package/dist/core/tasks/learn-manager.js.map +1 -0
  159. package/dist/core/tasks/plans-manager.d.ts +46 -0
  160. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  161. package/dist/core/tasks/plans-manager.js +158 -0
  162. package/dist/core/tasks/plans-manager.js.map +1 -0
  163. package/dist/core/tasks/task-manager.d.ts +127 -0
  164. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  165. package/dist/core/tasks/task-manager.js +607 -0
  166. package/dist/core/tasks/task-manager.js.map +1 -0
  167. package/dist/core/workspace/project-worker.d.ts +6 -6
  168. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  169. package/dist/core/workspace/project-worker.js +6 -6
  170. package/dist/core/workspace/project-worker.js.map +1 -1
  171. package/dist/index.d.ts +1 -1
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +19 -176
  174. package/dist/index.js.map +1 -1
  175. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  176. package/dist/mcp/rulebook-server.js +16 -960
  177. package/dist/mcp/rulebook-server.js.map +1 -1
  178. package/dist/memory/file-search.d.ts +43 -0
  179. package/dist/memory/file-search.d.ts.map +1 -0
  180. package/dist/memory/file-search.js +228 -0
  181. package/dist/memory/file-search.js.map +1 -0
  182. package/dist/memory/file-store.d.ts +99 -0
  183. package/dist/memory/file-store.d.ts.map +1 -0
  184. package/dist/memory/file-store.js +615 -0
  185. package/dist/memory/file-store.js.map +1 -0
  186. package/dist/memory/legacy-migrator.d.ts +27 -0
  187. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  188. package/dist/memory/legacy-migrator.js +185 -0
  189. package/dist/memory/legacy-migrator.js.map +1 -0
  190. package/dist/memory/memory-manager.d.ts +25 -24
  191. package/dist/memory/memory-manager.d.ts.map +1 -1
  192. package/dist/memory/memory-manager.js +97 -140
  193. package/dist/memory/memory-manager.js.map +1 -1
  194. package/dist/memory/memory-types.d.ts +1 -1
  195. package/dist/memory/memory-types.d.ts.map +1 -1
  196. package/dist/types.d.ts +8 -119
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/utils/file-system.d.ts +22 -0
  199. package/dist/utils/file-system.d.ts.map +1 -1
  200. package/dist/utils/file-system.js +31 -0
  201. package/dist/utils/file-system.js.map +1 -1
  202. package/dist/utils/git-hooks.d.ts.map +1 -1
  203. package/dist/utils/git-hooks.js +3 -2
  204. package/dist/utils/git-hooks.js.map +1 -1
  205. package/package.json +2 -6
  206. package/templates/agents/context-intelligence.md +50 -52
  207. package/templates/cli/OPENCODE.md +85 -18
  208. package/templates/commands/rulebook-learn-capture.md +41 -48
  209. package/templates/commands/rulebook-learn-list.md +13 -13
  210. package/templates/core/AGENTS_LEAN.md +0 -14
  211. package/templates/hooks/check-context-and-handoff.sh +74 -76
  212. package/templates/hooks/enforce-pre-tool.sh +70 -0
  213. package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
  214. package/templates/hooks/on-compact-reinject.sh +34 -34
  215. package/templates/hooks/resume-from-handoff.sh +61 -61
  216. package/templates/hooks/terse-activate.sh +197 -197
  217. package/templates/hooks/terse-mode-tracker.sh +190 -187
  218. package/templates/ides/OPENCODE.md +63 -0
  219. package/templates/skills/cli/opencode/SKILL.md +82 -28
  220. package/.claude/commands/ralph-config.md +0 -112
  221. package/.claude/commands/ralph-history.md +0 -110
  222. package/.claude/commands/ralph-init.md +0 -72
  223. package/.claude/commands/ralph-pause-resume.md +0 -105
  224. package/.claude/commands/ralph-run.md +0 -101
  225. package/.claude/commands/ralph-status.md +0 -76
  226. package/templates/core/RALPH.md +0 -471
  227. package/templates/frameworks/ANGULAR.md +0 -36
  228. package/templates/frameworks/DJANGO.md +0 -83
  229. package/templates/frameworks/ELECTRON.md +0 -147
  230. package/templates/frameworks/FLASK.md +0 -38
  231. package/templates/frameworks/FLUTTER.md +0 -55
  232. package/templates/frameworks/JQUERY.md +0 -32
  233. package/templates/frameworks/LARAVEL.md +0 -38
  234. package/templates/frameworks/NESTJS.md +0 -43
  235. package/templates/frameworks/NEXTJS.md +0 -127
  236. package/templates/frameworks/NUXT.md +0 -40
  237. package/templates/frameworks/RAILS.md +0 -66
  238. package/templates/frameworks/REACT.md +0 -38
  239. package/templates/frameworks/REACT_NATIVE.md +0 -47
  240. package/templates/frameworks/SPRING.md +0 -39
  241. package/templates/frameworks/SYMFONY.md +0 -36
  242. package/templates/frameworks/VUE.md +0 -36
  243. package/templates/frameworks/ZEND.md +0 -35
  244. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  245. package/templates/hooks/enforce-no-deferred.sh +0 -21
  246. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  247. package/templates/ides/COPILOT.md +0 -37
  248. package/templates/ides/CURSOR.md +0 -43
  249. package/templates/ides/JETBRAINS_AI.md +0 -35
  250. package/templates/ides/REPLIT.md +0 -36
  251. package/templates/ides/TABNINE.md +0 -29
  252. package/templates/ides/VSCODE.md +0 -40
  253. package/templates/ides/WINDSURF.md +0 -36
  254. package/templates/ides/ZED.md +0 -32
  255. package/templates/ides/cursor-mdc/go.mdc +0 -24
  256. package/templates/ides/cursor-mdc/python.mdc +0 -24
  257. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  258. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  259. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  260. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  261. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  262. package/templates/ralph/ralph-history.bat +0 -4
  263. package/templates/ralph/ralph-history.sh +0 -5
  264. package/templates/ralph/ralph-init.bat +0 -5
  265. package/templates/ralph/ralph-init.sh +0 -5
  266. package/templates/ralph/ralph-pause.bat +0 -5
  267. package/templates/ralph/ralph-pause.sh +0 -5
  268. package/templates/ralph/ralph-run.bat +0 -5
  269. package/templates/ralph/ralph-run.sh +0 -5
  270. package/templates/ralph/ralph-status.bat +0 -4
  271. package/templates/ralph/ralph-status.sh +0 -5
  272. package/templates/services/AZURE_BLOB.md +0 -184
  273. package/templates/services/CASSANDRA.md +0 -239
  274. package/templates/services/DATADOG.md +0 -26
  275. package/templates/services/DOCKER.md +0 -124
  276. package/templates/services/DOCKER_COMPOSE.md +0 -168
  277. package/templates/services/DYNAMODB.md +0 -308
  278. package/templates/services/ELASTICSEARCH.md +0 -347
  279. package/templates/services/GCS.md +0 -178
  280. package/templates/services/HELM.md +0 -194
  281. package/templates/services/INFLUXDB.md +0 -265
  282. package/templates/services/KAFKA.md +0 -341
  283. package/templates/services/KUBERNETES.md +0 -208
  284. package/templates/services/MARIADB.md +0 -183
  285. package/templates/services/MEMCACHED.md +0 -242
  286. package/templates/services/MINIO.md +0 -201
  287. package/templates/services/MONGODB.md +0 -268
  288. package/templates/services/MYSQL.md +0 -358
  289. package/templates/services/NEO4J.md +0 -247
  290. package/templates/services/OPENTELEMETRY.md +0 -25
  291. package/templates/services/ORACLE.md +0 -290
  292. package/templates/services/PINO.md +0 -24
  293. package/templates/services/POSTGRESQL.md +0 -326
  294. package/templates/services/PROMETHEUS.md +0 -33
  295. package/templates/services/RABBITMQ.md +0 -286
  296. package/templates/services/REDIS.md +0 -292
  297. package/templates/services/S3.md +0 -298
  298. package/templates/services/SENTRY.md +0 -23
  299. package/templates/services/SQLITE.md +0 -294
  300. package/templates/services/SQLSERVER.md +0 -294
  301. package/templates/services/WINSTON.md +0 -30
  302. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  303. package/templates/skills/frameworks/django/SKILL.md +0 -93
  304. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  305. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  306. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  307. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  308. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  309. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  310. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  311. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  312. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  313. package/templates/skills/frameworks/react/SKILL.md +0 -48
  314. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  315. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  316. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  317. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  318. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  319. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  320. package/templates/skills/services/cassandra/SKILL.md +0 -249
  321. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  322. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  323. package/templates/skills/services/gcs/SKILL.md +0 -188
  324. package/templates/skills/services/influxdb/SKILL.md +0 -275
  325. package/templates/skills/services/kafka/SKILL.md +0 -351
  326. package/templates/skills/services/mariadb/SKILL.md +0 -193
  327. package/templates/skills/services/memcached/SKILL.md +0 -252
  328. package/templates/skills/services/minio/SKILL.md +0 -211
  329. package/templates/skills/services/mongodb/SKILL.md +0 -278
  330. package/templates/skills/services/mysql/SKILL.md +0 -368
  331. package/templates/skills/services/neo4j/SKILL.md +0 -257
  332. package/templates/skills/services/oracle/SKILL.md +0 -300
  333. package/templates/skills/services/postgresql/SKILL.md +0 -336
  334. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  335. package/templates/skills/services/redis/SKILL.md +0 -302
  336. package/templates/skills/services/s3/SKILL.md +0 -308
  337. package/templates/skills/services/sqlite/SKILL.md +0 -304
  338. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  339. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  340. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  341. package/templates/skills/workflows/ralph/install.sh +0 -87
  342. package/templates/skills/workflows/ralph/manifest.json +0 -158
@@ -0,0 +1,630 @@
1
+ /**
2
+ * Skills Manager Module
3
+ *
4
+ * Handles discovery, loading, merging, and management of skills for Rulebook v2.0.
5
+ * Skills are self-contained capability modules with SKILL.md files containing
6
+ * YAML frontmatter (metadata) and guidance content.
7
+ *
8
+ * Compatible with:
9
+ * - Hugging Face Skills format
10
+ * - Claude Code plugin system
11
+ * - Codex AGENTS.md format
12
+ * - Gemini CLI extensions
13
+ */
14
+ import { readdir } from 'fs/promises';
15
+ import { join, dirname, relative } from 'path';
16
+ import { fileExists, readFile, writeFile } from '../../utils/file-system.js';
17
+ // Default skills directory relative to templates
18
+ const DEFAULT_SKILLS_DIR = 'skills';
19
+ const SKILL_FILE_NAME = 'SKILL.md';
20
+ const LEGACY_TEMPLATE_EXTENSIONS = ['.md'];
21
+ // Category mappings from legacy template structure
22
+ const CATEGORY_MAPPINGS = {
23
+ languages: 'languages',
24
+ modules: 'modules',
25
+ workflows: 'workflows',
26
+ ides: 'ides',
27
+ core: 'core',
28
+ cli: 'cli',
29
+ git: 'git',
30
+ hooks: 'hooks',
31
+ };
32
+ /**
33
+ * Parse YAML frontmatter from SKILL.md content
34
+ */
35
+ export function parseSkillFrontmatter(content) {
36
+ const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/;
37
+ const match = content.match(frontmatterRegex);
38
+ if (!match) {
39
+ // No frontmatter, treat entire content as body
40
+ return {
41
+ metadata: {
42
+ name: 'Unknown',
43
+ description: 'No description provided',
44
+ },
45
+ body: content,
46
+ };
47
+ }
48
+ const [, yamlContent, body] = match;
49
+ const metadata = parseYamlMetadata(yamlContent);
50
+ return { metadata, body };
51
+ }
52
+ /**
53
+ * Parse simple YAML metadata (key: value format)
54
+ */
55
+ function parseYamlMetadata(yaml) {
56
+ const lines = yaml.split('\n');
57
+ const metadata = {};
58
+ for (const line of lines) {
59
+ const colonIndex = line.indexOf(':');
60
+ if (colonIndex === -1)
61
+ continue;
62
+ const key = line.slice(0, colonIndex).trim();
63
+ let value = line.slice(colonIndex + 1).trim();
64
+ // Handle arrays (simple format: [item1, item2])
65
+ if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
66
+ value = value
67
+ .slice(1, -1)
68
+ .split(',')
69
+ .map((s) => s.trim().replace(/^['"]|['"]$/g, ''));
70
+ }
71
+ // Handle quoted strings
72
+ else if (typeof value === 'string' && /^['"].*['"]$/.test(value)) {
73
+ value = value.slice(1, -1);
74
+ }
75
+ if (key && value !== '') {
76
+ metadata[key] = value;
77
+ }
78
+ }
79
+ return {
80
+ name: metadata.name || 'Unknown',
81
+ description: metadata.description || 'No description provided',
82
+ version: metadata.version,
83
+ category: metadata.category,
84
+ author: metadata.author,
85
+ tags: metadata.tags,
86
+ dependencies: metadata.dependencies,
87
+ conflicts: metadata.conflicts,
88
+ };
89
+ }
90
+ /**
91
+ * Generate YAML frontmatter from metadata
92
+ */
93
+ export function generateSkillFrontmatter(metadata) {
94
+ const lines = ['---'];
95
+ lines.push(`name: "${metadata.name}"`);
96
+ lines.push(`description: "${metadata.description}"`);
97
+ if (metadata.version) {
98
+ lines.push(`version: "${metadata.version}"`);
99
+ }
100
+ if (metadata.category) {
101
+ lines.push(`category: "${metadata.category}"`);
102
+ }
103
+ if (metadata.author) {
104
+ lines.push(`author: "${metadata.author}"`);
105
+ }
106
+ if (metadata.tags && metadata.tags.length > 0) {
107
+ lines.push(`tags: [${metadata.tags.map((t) => `"${t}"`).join(', ')}]`);
108
+ }
109
+ if (metadata.dependencies && metadata.dependencies.length > 0) {
110
+ lines.push(`dependencies: [${metadata.dependencies.map((d) => `"${d}"`).join(', ')}]`);
111
+ }
112
+ if (metadata.conflicts && metadata.conflicts.length > 0) {
113
+ lines.push(`conflicts: [${metadata.conflicts.map((c) => `"${c}"`).join(', ')}]`);
114
+ }
115
+ lines.push('---');
116
+ return lines.join('\n');
117
+ }
118
+ /**
119
+ * Convert legacy template to skill format
120
+ */
121
+ export function convertLegacyTemplateToSkill(templateContent, templateName, category) {
122
+ // Extract name from filename (e.g., TYPESCRIPT.md -> TypeScript)
123
+ const name = templateName
124
+ .replace(/\.md$/i, '')
125
+ .replace(/_/g, ' ')
126
+ .split(' ')
127
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
128
+ .join(' ');
129
+ // Try to extract description from first paragraph
130
+ const lines = templateContent.split('\n');
131
+ let description = `${name} skill for Rulebook`;
132
+ // Look for first non-empty, non-header line
133
+ for (const line of lines) {
134
+ const trimmed = line.trim();
135
+ if (trimmed && !trimmed.startsWith('#') && !trimmed.startsWith('<!--')) {
136
+ description = trimmed.slice(0, 150);
137
+ break;
138
+ }
139
+ }
140
+ const metadata = {
141
+ name,
142
+ description,
143
+ version: '1.0.0',
144
+ category,
145
+ tags: [category],
146
+ };
147
+ return { metadata, content: templateContent };
148
+ }
149
+ /**
150
+ * Skills Manager Class
151
+ */
152
+ export class SkillsManager {
153
+ templatesPath;
154
+ skillsPath;
155
+ skillsIndex = null;
156
+ constructor(templatesPath, _projectPath = process.cwd()) {
157
+ this.templatesPath = templatesPath;
158
+ this.skillsPath = join(templatesPath, DEFAULT_SKILLS_DIR);
159
+ // _projectPath reserved for future custom skills path support
160
+ }
161
+ /**
162
+ * Discover all available skills from templates directory
163
+ */
164
+ async discoverSkills() {
165
+ const skills = [];
166
+ const categories = {
167
+ languages: [],
168
+ modules: [],
169
+ workflows: [],
170
+ ides: [],
171
+ core: [],
172
+ cli: [],
173
+ git: [],
174
+ hooks: [],
175
+ };
176
+ // First, check if new skills directory exists
177
+ if (await fileExists(this.skillsPath)) {
178
+ await this.scanSkillsDirectory(this.skillsPath, skills, categories);
179
+ }
180
+ // Also scan legacy template directories for backward compatibility
181
+ await this.scanLegacyTemplates(skills, categories);
182
+ this.skillsIndex = {
183
+ skills,
184
+ categories,
185
+ lastUpdated: new Date().toISOString(),
186
+ };
187
+ return this.skillsIndex;
188
+ }
189
+ /**
190
+ * Scan skills directory for SKILL.md files
191
+ */
192
+ async scanSkillsDirectory(dir, skills, categories) {
193
+ try {
194
+ const entries = await readdir(dir, { withFileTypes: true });
195
+ for (const entry of entries) {
196
+ const entryPath = join(dir, entry.name);
197
+ if (entry.isDirectory()) {
198
+ // Check if this directory contains SKILL.md
199
+ const skillFilePath = join(entryPath, SKILL_FILE_NAME);
200
+ if (await fileExists(skillFilePath)) {
201
+ const skill = await this.loadSkillFromFile(skillFilePath, entry.name);
202
+ if (skill) {
203
+ skills.push(skill);
204
+ categories[skill.category].push(skill);
205
+ }
206
+ }
207
+ else {
208
+ // Recurse into subdirectories
209
+ await this.scanSkillsDirectory(entryPath, skills, categories);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ catch {
215
+ // Directory doesn't exist or can't be read
216
+ }
217
+ }
218
+ /**
219
+ * Scan legacy template directories
220
+ */
221
+ async scanLegacyTemplates(skills, categories) {
222
+ for (const [dirName, category] of Object.entries(CATEGORY_MAPPINGS)) {
223
+ const dirPath = join(this.templatesPath, dirName);
224
+ if (!(await fileExists(dirPath)))
225
+ continue;
226
+ try {
227
+ const entries = await readdir(dirPath, { withFileTypes: true });
228
+ for (const entry of entries) {
229
+ if (!entry.isFile())
230
+ continue;
231
+ const ext = entry.name.slice(entry.name.lastIndexOf('.'));
232
+ if (!LEGACY_TEMPLATE_EXTENSIONS.includes(ext.toLowerCase()))
233
+ continue;
234
+ // Skip if already loaded as skill
235
+ const skillId = this.generateSkillId(entry.name, category);
236
+ if (skills.some((s) => s.id === skillId))
237
+ continue;
238
+ const filePath = join(dirPath, entry.name);
239
+ const skill = await this.loadLegacyTemplate(filePath, entry.name, category);
240
+ if (skill) {
241
+ skills.push(skill);
242
+ categories[category].push(skill);
243
+ }
244
+ }
245
+ }
246
+ catch {
247
+ // Directory can't be read
248
+ }
249
+ }
250
+ }
251
+ /**
252
+ * Load skill from SKILL.md file
253
+ */
254
+ async loadSkillFromFile(filePath, dirName) {
255
+ try {
256
+ const content = await readFile(filePath);
257
+ const { metadata, body } = parseSkillFrontmatter(content);
258
+ // Determine category from directory structure
259
+ const relPath = relative(this.skillsPath, dirname(filePath));
260
+ const pathParts = relPath.split(/[/\\]/);
261
+ const category = (CATEGORY_MAPPINGS[pathParts[0]] ||
262
+ metadata.category ||
263
+ 'core');
264
+ const skillId = this.generateSkillId(metadata.name || dirName, category);
265
+ return {
266
+ id: skillId,
267
+ path: filePath,
268
+ metadata,
269
+ content: body,
270
+ category,
271
+ enabled: false,
272
+ };
273
+ }
274
+ catch {
275
+ return null;
276
+ }
277
+ }
278
+ /**
279
+ * Load legacy template as skill
280
+ */
281
+ async loadLegacyTemplate(filePath, fileName, category) {
282
+ try {
283
+ const content = await readFile(filePath);
284
+ const { metadata, content: skillContent } = convertLegacyTemplateToSkill(content, fileName, category);
285
+ const skillId = this.generateSkillId(fileName.replace(/\.md$/i, ''), category);
286
+ return {
287
+ id: skillId,
288
+ path: filePath,
289
+ metadata,
290
+ content: skillContent,
291
+ category,
292
+ enabled: false,
293
+ };
294
+ }
295
+ catch {
296
+ return null;
297
+ }
298
+ }
299
+ /**
300
+ * Generate unique skill ID
301
+ */
302
+ generateSkillId(name, category) {
303
+ const cleanName = name
304
+ .toLowerCase()
305
+ .replace(/[^a-z0-9]+/g, '-')
306
+ .replace(/^-|-$/g, '');
307
+ return `${category}/${cleanName}`;
308
+ }
309
+ /**
310
+ * Get all available skills
311
+ */
312
+ async getSkills() {
313
+ if (!this.skillsIndex) {
314
+ await this.discoverSkills();
315
+ }
316
+ return this.skillsIndex.skills;
317
+ }
318
+ /**
319
+ * Get skills by category
320
+ */
321
+ async getSkillsByCategory(category) {
322
+ if (!this.skillsIndex) {
323
+ await this.discoverSkills();
324
+ }
325
+ return this.skillsIndex.categories[category] || [];
326
+ }
327
+ /**
328
+ * Get skill by ID
329
+ */
330
+ async getSkillById(id) {
331
+ const skills = await this.getSkills();
332
+ return skills.find((s) => s.id === id) || null;
333
+ }
334
+ /**
335
+ * Search skills by name or description
336
+ */
337
+ async searchSkills(query) {
338
+ const skills = await this.getSkills();
339
+ const lowerQuery = query.toLowerCase();
340
+ return skills.filter((s) => s.id.toLowerCase().includes(lowerQuery) ||
341
+ s.metadata.name.toLowerCase().includes(lowerQuery) ||
342
+ s.metadata.description.toLowerCase().includes(lowerQuery) ||
343
+ (s.metadata.tags || []).some((t) => t.toLowerCase().includes(lowerQuery)));
344
+ }
345
+ /**
346
+ * Enable a skill in the configuration
347
+ */
348
+ async enableSkill(skillId, config) {
349
+ const skill = await this.getSkillById(skillId);
350
+ if (!skill) {
351
+ throw new Error(`Skill not found: ${skillId}`);
352
+ }
353
+ // Initialize skills config if not present
354
+ if (!config.skills) {
355
+ config.skills = {
356
+ enabled: [],
357
+ disabled: [],
358
+ order: [],
359
+ autoDetect: true,
360
+ };
361
+ }
362
+ // Initialize optional arrays if not present
363
+ if (!config.skills.disabled) {
364
+ config.skills.disabled = [];
365
+ }
366
+ if (!config.skills.order) {
367
+ config.skills.order = [];
368
+ }
369
+ // Remove from disabled if present
370
+ config.skills.disabled = config.skills.disabled.filter((id) => id !== skillId);
371
+ // Add to enabled if not present
372
+ if (!config.skills.enabled.includes(skillId)) {
373
+ config.skills.enabled.push(skillId);
374
+ }
375
+ // Add to order if not present
376
+ if (!config.skills.order.includes(skillId)) {
377
+ config.skills.order.push(skillId);
378
+ }
379
+ return config;
380
+ }
381
+ /**
382
+ * Disable a skill in the configuration
383
+ */
384
+ async disableSkill(skillId, config) {
385
+ const skill = await this.getSkillById(skillId);
386
+ if (!skill) {
387
+ throw new Error(`Skill not found: ${skillId}`);
388
+ }
389
+ // Initialize skills config if not present
390
+ if (!config.skills) {
391
+ config.skills = {
392
+ enabled: [],
393
+ disabled: [],
394
+ order: [],
395
+ autoDetect: true,
396
+ };
397
+ }
398
+ // Initialize optional arrays if not present
399
+ if (!config.skills.disabled) {
400
+ config.skills.disabled = [];
401
+ }
402
+ if (!config.skills.order) {
403
+ config.skills.order = [];
404
+ }
405
+ // Remove from enabled if present
406
+ config.skills.enabled = config.skills.enabled.filter((id) => id !== skillId);
407
+ // Add to disabled if not present
408
+ if (!config.skills.disabled.includes(skillId)) {
409
+ config.skills.disabled.push(skillId);
410
+ }
411
+ // Remove from order
412
+ config.skills.order = config.skills.order.filter((id) => id !== skillId);
413
+ return config;
414
+ }
415
+ /**
416
+ * Validate skills configuration
417
+ */
418
+ async validateSkills(config) {
419
+ const result = {
420
+ valid: true,
421
+ errors: [],
422
+ warnings: [],
423
+ conflicts: [],
424
+ };
425
+ if (!config.skills) {
426
+ return result;
427
+ }
428
+ const enabledSkills = [];
429
+ // Check that all enabled skills exist
430
+ for (const skillId of config.skills.enabled) {
431
+ const skill = await this.getSkillById(skillId);
432
+ if (!skill) {
433
+ result.errors.push(`Enabled skill not found: ${skillId}`);
434
+ result.valid = false;
435
+ }
436
+ else {
437
+ enabledSkills.push(skill);
438
+ }
439
+ }
440
+ // Check for conflicts
441
+ for (let i = 0; i < enabledSkills.length; i++) {
442
+ const skillA = enabledSkills[i];
443
+ const conflictsA = skillA.metadata.conflicts || [];
444
+ for (let j = i + 1; j < enabledSkills.length; j++) {
445
+ const skillB = enabledSkills[j];
446
+ // Check if A conflicts with B
447
+ if (conflictsA.includes(skillB.id) || conflictsA.includes(skillB.metadata.name)) {
448
+ result.conflicts.push({
449
+ skillA: skillA.id,
450
+ skillB: skillB.id,
451
+ reason: `${skillA.metadata.name} conflicts with ${skillB.metadata.name}`,
452
+ });
453
+ result.warnings.push(`Conflict detected: ${skillA.metadata.name} and ${skillB.metadata.name}`);
454
+ }
455
+ // Check if B conflicts with A
456
+ const conflictsB = skillB.metadata.conflicts || [];
457
+ if (conflictsB.includes(skillA.id) || conflictsB.includes(skillA.metadata.name)) {
458
+ if (!result.conflicts.some((c) => c.skillA === skillA.id && c.skillB === skillB.id)) {
459
+ result.conflicts.push({
460
+ skillA: skillB.id,
461
+ skillB: skillA.id,
462
+ reason: `${skillB.metadata.name} conflicts with ${skillA.metadata.name}`,
463
+ });
464
+ result.warnings.push(`Conflict detected: ${skillB.metadata.name} and ${skillA.metadata.name}`);
465
+ }
466
+ }
467
+ }
468
+ }
469
+ // Check dependencies
470
+ for (const skill of enabledSkills) {
471
+ const deps = skill.metadata.dependencies || [];
472
+ for (const dep of deps) {
473
+ const depEnabled = enabledSkills.some((s) => s.id === dep || s.metadata.name === dep);
474
+ if (!depEnabled) {
475
+ result.warnings.push(`Skill ${skill.metadata.name} depends on ${dep}, which is not enabled`);
476
+ }
477
+ }
478
+ }
479
+ return result;
480
+ }
481
+ /**
482
+ * Get enabled skills in order
483
+ */
484
+ async getEnabledSkills(config) {
485
+ if (!config.skills || config.skills.enabled.length === 0) {
486
+ return [];
487
+ }
488
+ const skills = await this.getSkills();
489
+ const enabledIds = new Set(config.skills.enabled);
490
+ const order = config.skills.order || [];
491
+ // Filter and sort by order
492
+ const enabledSkills = skills.filter((s) => enabledIds.has(s.id));
493
+ enabledSkills.sort((a, b) => {
494
+ const indexA = order.indexOf(a.id);
495
+ const indexB = order.indexOf(b.id);
496
+ if (indexA === -1 && indexB === -1)
497
+ return 0;
498
+ if (indexA === -1)
499
+ return 1;
500
+ if (indexB === -1)
501
+ return -1;
502
+ return indexA - indexB;
503
+ });
504
+ return enabledSkills.map((s) => ({ ...s, enabled: true }));
505
+ }
506
+ /**
507
+ * Merge enabled skills into single content for AGENTS.md
508
+ */
509
+ async mergeSkillsContent(config) {
510
+ const enabledSkills = await this.getEnabledSkills(config);
511
+ if (enabledSkills.length === 0) {
512
+ return '';
513
+ }
514
+ const sections = [];
515
+ // Add skills index header
516
+ sections.push('<!-- RULEBOOK:SKILLS_INDEX:START -->');
517
+ sections.push('## Installed Skills\n');
518
+ sections.push('| Category | Skill | Description |');
519
+ sections.push('|----------|-------|-------------|');
520
+ for (const skill of enabledSkills) {
521
+ const category = skill.category.charAt(0).toUpperCase() + skill.category.slice(1);
522
+ sections.push(`| ${category} | ${skill.metadata.name} | ${skill.metadata.description} |`);
523
+ }
524
+ sections.push('\n<!-- RULEBOOK:SKILLS_INDEX:END -->\n');
525
+ // Add each skill's content
526
+ for (const skill of enabledSkills) {
527
+ sections.push(`<!-- RULEBOOK:SKILL:${skill.id}:START -->`);
528
+ sections.push(skill.content);
529
+ sections.push(`<!-- RULEBOOK:SKILL:${skill.id}:END -->\n`);
530
+ }
531
+ return sections.join('\n');
532
+ }
533
+ /**
534
+ * Auto-detect skills based on project configuration
535
+ */
536
+ async autoDetectSkills(config) {
537
+ const detectedSkills = [];
538
+ // Detect language skills
539
+ if (config.languages) {
540
+ for (const lang of config.languages) {
541
+ const skillId = `languages/${lang.toLowerCase()}`;
542
+ const skill = await this.getSkillById(skillId);
543
+ if (skill) {
544
+ detectedSkills.push(skillId);
545
+ }
546
+ }
547
+ }
548
+ // Detect module skills
549
+ if (config.modules) {
550
+ for (const module of config.modules) {
551
+ const skillId = `modules/${module.toLowerCase()}`;
552
+ const skill = await this.getSkillById(skillId);
553
+ if (skill) {
554
+ detectedSkills.push(skillId);
555
+ }
556
+ }
557
+ }
558
+ // Always include core skills
559
+ const coreSkills = await this.getSkillsByCategory('core');
560
+ for (const skill of coreSkills) {
561
+ if (!detectedSkills.includes(skill.id)) {
562
+ detectedSkills.push(skill.id);
563
+ }
564
+ }
565
+ return detectedSkills;
566
+ }
567
+ /**
568
+ * Create a new skill from template
569
+ */
570
+ async createSkill(name, description, category, content = '') {
571
+ const metadata = {
572
+ name,
573
+ description,
574
+ version: '1.0.0',
575
+ category,
576
+ tags: [category],
577
+ };
578
+ const skillId = this.generateSkillId(name, category);
579
+ const skillDir = join(this.skillsPath, category, skillId.split('/')[1]);
580
+ const skillFile = join(skillDir, SKILL_FILE_NAME);
581
+ // Generate SKILL.md content
582
+ const frontmatter = generateSkillFrontmatter(metadata);
583
+ const fullContent = `${frontmatter}\n\n${content || `# ${name}\n\n${description}`}`;
584
+ // Write skill file
585
+ await writeFile(skillFile, fullContent);
586
+ return {
587
+ id: skillId,
588
+ path: skillFile,
589
+ metadata,
590
+ content: content || `# ${name}\n\n${description}`,
591
+ category,
592
+ enabled: false,
593
+ };
594
+ }
595
+ /**
596
+ * Get skills summary for display
597
+ */
598
+ async getSkillsSummary() {
599
+ const index = await this.discoverSkills();
600
+ const byCategory = {};
601
+ const categories = [];
602
+ for (const [cat, skills] of Object.entries(index.categories)) {
603
+ if (skills.length > 0) {
604
+ byCategory[cat] = skills.length;
605
+ categories.push(cat);
606
+ }
607
+ }
608
+ return {
609
+ total: index.skills.length,
610
+ byCategory,
611
+ categories,
612
+ };
613
+ }
614
+ }
615
+ /**
616
+ * Create a new SkillsManager instance
617
+ */
618
+ export function createSkillsManager(templatesPath, projectPath) {
619
+ return new SkillsManager(templatesPath, projectPath);
620
+ }
621
+ /**
622
+ * Get the default templates path
623
+ */
624
+ export function getDefaultTemplatesPath() {
625
+ // In production, templates are in the package's templates directory
626
+ // In development, they're in the project root
627
+ const packagePath = dirname(dirname(dirname(import.meta.url.replace('file:///', ''))));
628
+ return join(packagePath, 'templates');
629
+ }
630
+ //# sourceMappingURL=skills-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-manager.js","sourceRoot":"","sources":["../../../src/core/skills/skills-manager.ts"],"names":[],"mappings":"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"}