@hivehub/rulebook 5.5.2 → 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 (325) 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/console/cli-bridge.d.ts +113 -0
  54. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  55. package/dist/core/console/cli-bridge.js +1094 -0
  56. package/dist/core/console/cli-bridge.js.map +1 -0
  57. package/dist/core/detect/detector.d.ts +35 -0
  58. package/dist/core/detect/detector.d.ts.map +1 -0
  59. package/dist/core/detect/detector.js +541 -0
  60. package/dist/core/detect/detector.js.map +1 -0
  61. package/dist/core/docs/docs-generator.d.ts +9 -0
  62. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  63. package/dist/core/docs/docs-generator.js +531 -0
  64. package/dist/core/docs/docs-generator.js.map +1 -0
  65. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  66. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  67. package/dist/core/docs/mcp-reference-generator.js +66 -0
  68. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  69. package/dist/core/generators/generator.d.ts +54 -0
  70. package/dist/core/generators/generator.d.ts.map +1 -0
  71. package/dist/core/generators/generator.js +1041 -0
  72. package/dist/core/generators/generator.js.map +1 -0
  73. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  74. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  75. package/dist/core/generators/gitignore-generator.js +307 -0
  76. package/dist/core/generators/gitignore-generator.js.map +1 -0
  77. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  78. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  79. package/dist/core/generators/minimal-scaffolder.js +51 -0
  80. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  81. package/dist/core/generators/rules-generator.d.ts +73 -0
  82. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  83. package/dist/core/generators/rules-generator.js +202 -0
  84. package/dist/core/generators/rules-generator.js.map +1 -0
  85. package/dist/core/generators/workflow-generator.d.ts +15 -0
  86. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  87. package/dist/core/generators/workflow-generator.js +390 -0
  88. package/dist/core/generators/workflow-generator.js.map +1 -0
  89. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  90. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  91. package/dist/core/ide/multi-tool-generator.js +157 -0
  92. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  93. package/dist/core/ide/opencode-generator.d.ts +72 -0
  94. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  95. package/dist/core/ide/opencode-generator.js +450 -0
  96. package/dist/core/ide/opencode-generator.js.map +1 -0
  97. package/dist/core/merger.d.ts +1 -1
  98. package/dist/core/merger.d.ts.map +1 -1
  99. package/dist/core/merger.js +5 -5
  100. package/dist/core/merger.js.map +1 -1
  101. package/dist/core/migrator.d.ts +0 -1
  102. package/dist/core/migrator.d.ts.map +1 -1
  103. package/dist/core/migrator.js +4 -29
  104. package/dist/core/migrator.js.map +1 -1
  105. package/dist/core/quality/coverage-checker.d.ts +14 -0
  106. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  107. package/dist/core/quality/coverage-checker.js +176 -0
  108. package/dist/core/quality/coverage-checker.js.map +1 -0
  109. package/dist/core/quality/dependency-checker.d.ts +21 -0
  110. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  111. package/dist/core/quality/dependency-checker.js +247 -0
  112. package/dist/core/quality/dependency-checker.js.map +1 -0
  113. package/dist/core/quality/doctor.d.ts +19 -0
  114. package/dist/core/quality/doctor.d.ts.map +1 -0
  115. package/dist/core/quality/doctor.js +163 -0
  116. package/dist/core/quality/doctor.js.map +1 -0
  117. package/dist/core/quality/validator.d.ts +21 -0
  118. package/dist/core/quality/validator.d.ts.map +1 -0
  119. package/dist/core/quality/validator.js +177 -0
  120. package/dist/core/quality/validator.js.map +1 -0
  121. package/dist/core/skills/skills-manager.d.ts +126 -0
  122. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  123. package/dist/core/skills/skills-manager.js +630 -0
  124. package/dist/core/skills/skills-manager.js.map +1 -0
  125. package/dist/core/state/config-manager.d.ts +86 -0
  126. package/dist/core/state/config-manager.d.ts.map +1 -0
  127. package/dist/core/state/config-manager.js +562 -0
  128. package/dist/core/state/config-manager.js.map +1 -0
  129. package/dist/core/state/override-manager.d.ts +23 -0
  130. package/dist/core/state/override-manager.d.ts.map +1 -0
  131. package/dist/core/state/override-manager.js +82 -0
  132. package/dist/core/state/override-manager.js.map +1 -0
  133. package/dist/core/state/state-writer.d.ts +34 -0
  134. package/dist/core/state/state-writer.d.ts.map +1 -0
  135. package/dist/core/state/state-writer.js +78 -0
  136. package/dist/core/state/state-writer.js.map +1 -0
  137. package/dist/core/state/version-bumper.d.ts +19 -0
  138. package/dist/core/state/version-bumper.d.ts.map +1 -0
  139. package/dist/core/state/version-bumper.js +180 -0
  140. package/dist/core/state/version-bumper.js.map +1 -0
  141. package/dist/core/tasks/decision-manager.d.ts +25 -0
  142. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  143. package/dist/core/tasks/decision-manager.js +183 -0
  144. package/dist/core/tasks/decision-manager.js.map +1 -0
  145. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  146. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  147. package/dist/core/tasks/knowledge-manager.js +173 -0
  148. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  149. package/dist/core/tasks/learn-manager.d.ts +27 -0
  150. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  151. package/dist/core/tasks/learn-manager.js +121 -0
  152. package/dist/core/tasks/learn-manager.js.map +1 -0
  153. package/dist/core/tasks/plans-manager.d.ts +46 -0
  154. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  155. package/dist/core/tasks/plans-manager.js +158 -0
  156. package/dist/core/tasks/plans-manager.js.map +1 -0
  157. package/dist/core/tasks/task-manager.d.ts +127 -0
  158. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  159. package/dist/core/tasks/task-manager.js +607 -0
  160. package/dist/core/tasks/task-manager.js.map +1 -0
  161. package/dist/core/workspace/project-worker.d.ts +6 -6
  162. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  163. package/dist/core/workspace/project-worker.js +6 -6
  164. package/dist/core/workspace/project-worker.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +19 -176
  168. package/dist/index.js.map +1 -1
  169. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  170. package/dist/mcp/rulebook-server.js +16 -960
  171. package/dist/mcp/rulebook-server.js.map +1 -1
  172. package/dist/memory/file-search.d.ts +43 -0
  173. package/dist/memory/file-search.d.ts.map +1 -0
  174. package/dist/memory/file-search.js +228 -0
  175. package/dist/memory/file-search.js.map +1 -0
  176. package/dist/memory/file-store.d.ts +99 -0
  177. package/dist/memory/file-store.d.ts.map +1 -0
  178. package/dist/memory/file-store.js +615 -0
  179. package/dist/memory/file-store.js.map +1 -0
  180. package/dist/memory/legacy-migrator.d.ts +27 -0
  181. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  182. package/dist/memory/legacy-migrator.js +185 -0
  183. package/dist/memory/legacy-migrator.js.map +1 -0
  184. package/dist/memory/memory-manager.d.ts +25 -24
  185. package/dist/memory/memory-manager.d.ts.map +1 -1
  186. package/dist/memory/memory-manager.js +97 -140
  187. package/dist/memory/memory-manager.js.map +1 -1
  188. package/dist/memory/memory-types.d.ts +1 -1
  189. package/dist/memory/memory-types.d.ts.map +1 -1
  190. package/dist/types.d.ts +8 -119
  191. package/dist/types.d.ts.map +1 -1
  192. package/package.json +1 -6
  193. package/templates/agents/context-intelligence.md +50 -52
  194. package/templates/cli/OPENCODE.md +85 -18
  195. package/templates/commands/rulebook-learn-capture.md +41 -48
  196. package/templates/commands/rulebook-learn-list.md +13 -13
  197. package/templates/core/AGENTS_LEAN.md +0 -14
  198. package/templates/hooks/check-context-and-handoff.sh +8 -10
  199. package/templates/hooks/enforce-pre-tool.sh +70 -0
  200. package/templates/hooks/terse-mode-tracker.sh +146 -143
  201. package/templates/ides/OPENCODE.md +63 -0
  202. package/templates/skills/cli/opencode/SKILL.md +82 -28
  203. package/.claude/commands/ralph-config.md +0 -112
  204. package/.claude/commands/ralph-history.md +0 -110
  205. package/.claude/commands/ralph-init.md +0 -72
  206. package/.claude/commands/ralph-pause-resume.md +0 -105
  207. package/.claude/commands/ralph-run.md +0 -101
  208. package/.claude/commands/ralph-status.md +0 -76
  209. package/templates/core/RALPH.md +0 -471
  210. package/templates/frameworks/ANGULAR.md +0 -36
  211. package/templates/frameworks/DJANGO.md +0 -83
  212. package/templates/frameworks/ELECTRON.md +0 -147
  213. package/templates/frameworks/FLASK.md +0 -38
  214. package/templates/frameworks/FLUTTER.md +0 -55
  215. package/templates/frameworks/JQUERY.md +0 -32
  216. package/templates/frameworks/LARAVEL.md +0 -38
  217. package/templates/frameworks/NESTJS.md +0 -43
  218. package/templates/frameworks/NEXTJS.md +0 -127
  219. package/templates/frameworks/NUXT.md +0 -40
  220. package/templates/frameworks/RAILS.md +0 -66
  221. package/templates/frameworks/REACT.md +0 -38
  222. package/templates/frameworks/REACT_NATIVE.md +0 -47
  223. package/templates/frameworks/SPRING.md +0 -39
  224. package/templates/frameworks/SYMFONY.md +0 -36
  225. package/templates/frameworks/VUE.md +0 -36
  226. package/templates/frameworks/ZEND.md +0 -35
  227. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  228. package/templates/hooks/enforce-no-deferred.sh +0 -21
  229. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  230. package/templates/ides/COPILOT.md +0 -37
  231. package/templates/ides/CURSOR.md +0 -43
  232. package/templates/ides/JETBRAINS_AI.md +0 -35
  233. package/templates/ides/REPLIT.md +0 -36
  234. package/templates/ides/TABNINE.md +0 -29
  235. package/templates/ides/VSCODE.md +0 -40
  236. package/templates/ides/WINDSURF.md +0 -36
  237. package/templates/ides/ZED.md +0 -32
  238. package/templates/ides/cursor-mdc/go.mdc +0 -24
  239. package/templates/ides/cursor-mdc/python.mdc +0 -24
  240. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  241. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  242. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  243. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  244. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  245. package/templates/ralph/ralph-history.bat +0 -4
  246. package/templates/ralph/ralph-history.sh +0 -5
  247. package/templates/ralph/ralph-init.bat +0 -5
  248. package/templates/ralph/ralph-init.sh +0 -5
  249. package/templates/ralph/ralph-pause.bat +0 -5
  250. package/templates/ralph/ralph-pause.sh +0 -5
  251. package/templates/ralph/ralph-run.bat +0 -5
  252. package/templates/ralph/ralph-run.sh +0 -5
  253. package/templates/ralph/ralph-status.bat +0 -4
  254. package/templates/ralph/ralph-status.sh +0 -5
  255. package/templates/services/AZURE_BLOB.md +0 -184
  256. package/templates/services/CASSANDRA.md +0 -239
  257. package/templates/services/DATADOG.md +0 -26
  258. package/templates/services/DOCKER.md +0 -124
  259. package/templates/services/DOCKER_COMPOSE.md +0 -168
  260. package/templates/services/DYNAMODB.md +0 -308
  261. package/templates/services/ELASTICSEARCH.md +0 -347
  262. package/templates/services/GCS.md +0 -178
  263. package/templates/services/HELM.md +0 -194
  264. package/templates/services/INFLUXDB.md +0 -265
  265. package/templates/services/KAFKA.md +0 -341
  266. package/templates/services/KUBERNETES.md +0 -208
  267. package/templates/services/MARIADB.md +0 -183
  268. package/templates/services/MEMCACHED.md +0 -242
  269. package/templates/services/MINIO.md +0 -201
  270. package/templates/services/MONGODB.md +0 -268
  271. package/templates/services/MYSQL.md +0 -358
  272. package/templates/services/NEO4J.md +0 -247
  273. package/templates/services/OPENTELEMETRY.md +0 -25
  274. package/templates/services/ORACLE.md +0 -290
  275. package/templates/services/PINO.md +0 -24
  276. package/templates/services/POSTGRESQL.md +0 -326
  277. package/templates/services/PROMETHEUS.md +0 -33
  278. package/templates/services/RABBITMQ.md +0 -286
  279. package/templates/services/REDIS.md +0 -292
  280. package/templates/services/S3.md +0 -298
  281. package/templates/services/SENTRY.md +0 -23
  282. package/templates/services/SQLITE.md +0 -294
  283. package/templates/services/SQLSERVER.md +0 -294
  284. package/templates/services/WINSTON.md +0 -30
  285. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  286. package/templates/skills/frameworks/django/SKILL.md +0 -93
  287. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  288. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  289. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  290. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  291. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  292. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  293. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  294. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  295. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  296. package/templates/skills/frameworks/react/SKILL.md +0 -48
  297. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  298. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  299. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  300. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  301. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  302. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  303. package/templates/skills/services/cassandra/SKILL.md +0 -249
  304. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  305. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  306. package/templates/skills/services/gcs/SKILL.md +0 -188
  307. package/templates/skills/services/influxdb/SKILL.md +0 -275
  308. package/templates/skills/services/kafka/SKILL.md +0 -351
  309. package/templates/skills/services/mariadb/SKILL.md +0 -193
  310. package/templates/skills/services/memcached/SKILL.md +0 -252
  311. package/templates/skills/services/minio/SKILL.md +0 -211
  312. package/templates/skills/services/mongodb/SKILL.md +0 -278
  313. package/templates/skills/services/mysql/SKILL.md +0 -368
  314. package/templates/skills/services/neo4j/SKILL.md +0 -257
  315. package/templates/skills/services/oracle/SKILL.md +0 -300
  316. package/templates/skills/services/postgresql/SKILL.md +0 -336
  317. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  318. package/templates/skills/services/redis/SKILL.md +0 -302
  319. package/templates/skills/services/s3/SKILL.md +0 -308
  320. package/templates/skills/services/sqlite/SKILL.md +0 -304
  321. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  322. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  323. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  324. package/templates/skills/workflows/ralph/install.sh +0 -87
  325. 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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"}