@hivehub/rulebook 1.2.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 (379) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +539 -0
  3. package/dist/agents/claude-code.d.ts +69 -0
  4. package/dist/agents/claude-code.d.ts.map +1 -0
  5. package/dist/agents/claude-code.js +180 -0
  6. package/dist/agents/claude-code.js.map +1 -0
  7. package/dist/agents/cursor-agent.d.ts +184 -0
  8. package/dist/agents/cursor-agent.d.ts.map +1 -0
  9. package/dist/agents/cursor-agent.js +299 -0
  10. package/dist/agents/cursor-agent.js.map +1 -0
  11. package/dist/agents/gemini-cli.d.ts +69 -0
  12. package/dist/agents/gemini-cli.d.ts.map +1 -0
  13. package/dist/agents/gemini-cli.js +180 -0
  14. package/dist/agents/gemini-cli.js.map +1 -0
  15. package/dist/cli/commands.d.ts +57 -0
  16. package/dist/cli/commands.d.ts.map +1 -0
  17. package/dist/cli/commands.js +1370 -0
  18. package/dist/cli/commands.js.map +1 -0
  19. package/dist/cli/docs-prompts.d.ts +3 -0
  20. package/dist/cli/docs-prompts.d.ts.map +1 -0
  21. package/dist/cli/docs-prompts.js +45 -0
  22. package/dist/cli/docs-prompts.js.map +1 -0
  23. package/dist/cli/prompts.d.ts +6 -0
  24. package/dist/cli/prompts.d.ts.map +1 -0
  25. package/dist/cli/prompts.js +376 -0
  26. package/dist/cli/prompts.js.map +1 -0
  27. package/dist/core/agent-manager.d.ts +89 -0
  28. package/dist/core/agent-manager.d.ts.map +1 -0
  29. package/dist/core/agent-manager.js +546 -0
  30. package/dist/core/agent-manager.js.map +1 -0
  31. package/dist/core/auto-fixer.d.ts +14 -0
  32. package/dist/core/auto-fixer.d.ts.map +1 -0
  33. package/dist/core/auto-fixer.js +207 -0
  34. package/dist/core/auto-fixer.js.map +1 -0
  35. package/dist/core/changelog-generator.d.ts +44 -0
  36. package/dist/core/changelog-generator.d.ts.map +1 -0
  37. package/dist/core/changelog-generator.js +222 -0
  38. package/dist/core/changelog-generator.js.map +1 -0
  39. package/dist/core/cli-bridge.d.ts +113 -0
  40. package/dist/core/cli-bridge.d.ts.map +1 -0
  41. package/dist/core/cli-bridge.js +1094 -0
  42. package/dist/core/cli-bridge.js.map +1 -0
  43. package/dist/core/config-manager.d.ts +65 -0
  44. package/dist/core/config-manager.d.ts.map +1 -0
  45. package/dist/core/config-manager.js +266 -0
  46. package/dist/core/config-manager.js.map +1 -0
  47. package/dist/core/coverage-checker.d.ts +14 -0
  48. package/dist/core/coverage-checker.d.ts.map +1 -0
  49. package/dist/core/coverage-checker.js +176 -0
  50. package/dist/core/coverage-checker.js.map +1 -0
  51. package/dist/core/custom-templates.d.ts +27 -0
  52. package/dist/core/custom-templates.d.ts.map +1 -0
  53. package/dist/core/custom-templates.js +122 -0
  54. package/dist/core/custom-templates.js.map +1 -0
  55. package/dist/core/dependency-checker.d.ts +21 -0
  56. package/dist/core/dependency-checker.d.ts.map +1 -0
  57. package/dist/core/dependency-checker.js +247 -0
  58. package/dist/core/dependency-checker.js.map +1 -0
  59. package/dist/core/detector.d.ts +3 -0
  60. package/dist/core/detector.d.ts.map +1 -0
  61. package/dist/core/detector.js +1443 -0
  62. package/dist/core/detector.js.map +1 -0
  63. package/dist/core/docs-generator.d.ts +9 -0
  64. package/dist/core/docs-generator.d.ts.map +1 -0
  65. package/dist/core/docs-generator.js +531 -0
  66. package/dist/core/docs-generator.js.map +1 -0
  67. package/dist/core/generator.d.ts +16 -0
  68. package/dist/core/generator.d.ts.map +1 -0
  69. package/dist/core/generator.js +561 -0
  70. package/dist/core/generator.js.map +1 -0
  71. package/dist/core/gitignore-generator.d.ts +13 -0
  72. package/dist/core/gitignore-generator.d.ts.map +1 -0
  73. package/dist/core/gitignore-generator.js +307 -0
  74. package/dist/core/gitignore-generator.js.map +1 -0
  75. package/dist/core/health-scorer.d.ts +22 -0
  76. package/dist/core/health-scorer.d.ts.map +1 -0
  77. package/dist/core/health-scorer.js +395 -0
  78. package/dist/core/health-scorer.js.map +1 -0
  79. package/dist/core/logger.d.ts +116 -0
  80. package/dist/core/logger.d.ts.map +1 -0
  81. package/dist/core/logger.js +289 -0
  82. package/dist/core/logger.js.map +1 -0
  83. package/dist/core/merger.d.ts +6 -0
  84. package/dist/core/merger.d.ts.map +1 -0
  85. package/dist/core/merger.js +131 -0
  86. package/dist/core/merger.js.map +1 -0
  87. package/dist/core/migrator.d.ts +19 -0
  88. package/dist/core/migrator.d.ts.map +1 -0
  89. package/dist/core/migrator.js +102 -0
  90. package/dist/core/migrator.js.map +1 -0
  91. package/dist/core/minimal-scaffolder.d.ts +8 -0
  92. package/dist/core/minimal-scaffolder.d.ts.map +1 -0
  93. package/dist/core/minimal-scaffolder.js +51 -0
  94. package/dist/core/minimal-scaffolder.js.map +1 -0
  95. package/dist/core/modern-console-new.d.ts +81 -0
  96. package/dist/core/modern-console-new.d.ts.map +1 -0
  97. package/dist/core/modern-console-new.js +340 -0
  98. package/dist/core/modern-console-new.js.map +1 -0
  99. package/dist/core/modern-console.d.ts +99 -0
  100. package/dist/core/modern-console.d.ts.map +1 -0
  101. package/dist/core/modern-console.js +568 -0
  102. package/dist/core/modern-console.js.map +1 -0
  103. package/dist/core/openspec-manager.d.ts +133 -0
  104. package/dist/core/openspec-manager.d.ts.map +1 -0
  105. package/dist/core/openspec-manager.js +605 -0
  106. package/dist/core/openspec-manager.js.map +1 -0
  107. package/dist/core/openspec-migrator.d.ts +27 -0
  108. package/dist/core/openspec-migrator.d.ts.map +1 -0
  109. package/dist/core/openspec-migrator.js +255 -0
  110. package/dist/core/openspec-migrator.js.map +1 -0
  111. package/dist/core/task-manager.d.ts +65 -0
  112. package/dist/core/task-manager.d.ts.map +1 -0
  113. package/dist/core/task-manager.js +318 -0
  114. package/dist/core/task-manager.js.map +1 -0
  115. package/dist/core/test-task-manager.d.ts +49 -0
  116. package/dist/core/test-task-manager.d.ts.map +1 -0
  117. package/dist/core/test-task-manager.js +121 -0
  118. package/dist/core/test-task-manager.js.map +1 -0
  119. package/dist/core/validator.d.ts +21 -0
  120. package/dist/core/validator.d.ts.map +1 -0
  121. package/dist/core/validator.js +177 -0
  122. package/dist/core/validator.js.map +1 -0
  123. package/dist/core/version-bumper.d.ts +19 -0
  124. package/dist/core/version-bumper.d.ts.map +1 -0
  125. package/dist/core/version-bumper.js +180 -0
  126. package/dist/core/version-bumper.js.map +1 -0
  127. package/dist/core/watcher.d.ts +9 -0
  128. package/dist/core/watcher.d.ts.map +1 -0
  129. package/dist/core/watcher.js +22 -0
  130. package/dist/core/watcher.js.map +1 -0
  131. package/dist/core/workflow-generator.d.ts +10 -0
  132. package/dist/core/workflow-generator.d.ts.map +1 -0
  133. package/dist/core/workflow-generator.js +279 -0
  134. package/dist/core/workflow-generator.js.map +1 -0
  135. package/dist/index.d.ts +3 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +159 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/mcp/handlers/archive-task.d.ts +17 -0
  140. package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
  141. package/dist/mcp/handlers/archive-task.js +36 -0
  142. package/dist/mcp/handlers/archive-task.js.map +1 -0
  143. package/dist/mcp/handlers/create-task.d.ts +17 -0
  144. package/dist/mcp/handlers/create-task.d.ts.map +1 -0
  145. package/dist/mcp/handlers/create-task.js +56 -0
  146. package/dist/mcp/handlers/create-task.js.map +1 -0
  147. package/dist/mcp/handlers/list-tasks.d.ts +22 -0
  148. package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
  149. package/dist/mcp/handlers/list-tasks.js +42 -0
  150. package/dist/mcp/handlers/list-tasks.js.map +1 -0
  151. package/dist/mcp/handlers/show-task.d.ts +25 -0
  152. package/dist/mcp/handlers/show-task.d.ts.map +1 -0
  153. package/dist/mcp/handlers/show-task.js +43 -0
  154. package/dist/mcp/handlers/show-task.js.map +1 -0
  155. package/dist/mcp/handlers/update-task.d.ts +17 -0
  156. package/dist/mcp/handlers/update-task.d.ts.map +1 -0
  157. package/dist/mcp/handlers/update-task.js +35 -0
  158. package/dist/mcp/handlers/update-task.js.map +1 -0
  159. package/dist/mcp/handlers/validate-task.d.ts +15 -0
  160. package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
  161. package/dist/mcp/handlers/validate-task.js +27 -0
  162. package/dist/mcp/handlers/validate-task.js.map +1 -0
  163. package/dist/mcp/rulebook-config.d.ts +22 -0
  164. package/dist/mcp/rulebook-config.d.ts.map +1 -0
  165. package/dist/mcp/rulebook-config.js +65 -0
  166. package/dist/mcp/rulebook-config.js.map +1 -0
  167. package/dist/mcp/rulebook-server.d.ts +4 -0
  168. package/dist/mcp/rulebook-server.d.ts.map +1 -0
  169. package/dist/mcp/rulebook-server.js +246 -0
  170. package/dist/mcp/rulebook-server.js.map +1 -0
  171. package/dist/types.d.ts +190 -0
  172. package/dist/types.d.ts.map +1 -0
  173. package/dist/types.js +2 -0
  174. package/dist/types.js.map +1 -0
  175. package/dist/utils/file-system.d.ts +9 -0
  176. package/dist/utils/file-system.d.ts.map +1 -0
  177. package/dist/utils/file-system.js +51 -0
  178. package/dist/utils/file-system.js.map +1 -0
  179. package/dist/utils/git-hooks.d.ts +8 -0
  180. package/dist/utils/git-hooks.d.ts.map +1 -0
  181. package/dist/utils/git-hooks.js +440 -0
  182. package/dist/utils/git-hooks.js.map +1 -0
  183. package/dist/utils/rulesignore.d.ts +9 -0
  184. package/dist/utils/rulesignore.d.ts.map +1 -0
  185. package/dist/utils/rulesignore.js +42 -0
  186. package/dist/utils/rulesignore.js.map +1 -0
  187. package/package.json +106 -0
  188. package/templates/cli/AIDER.md +49 -0
  189. package/templates/cli/AMAZON_Q.md +25 -0
  190. package/templates/cli/AUGGIE.md +32 -0
  191. package/templates/cli/CLAUDE.md +32 -0
  192. package/templates/cli/CLAUDE_CODE.md +35 -0
  193. package/templates/cli/CLINE.md +32 -0
  194. package/templates/cli/CODEBUDDY.md +20 -0
  195. package/templates/cli/CODEIUM.md +20 -0
  196. package/templates/cli/CODEX.md +21 -0
  197. package/templates/cli/CONTINUE.md +34 -0
  198. package/templates/cli/CURSOR_CLI.md +28 -0
  199. package/templates/cli/FACTORY.md +18 -0
  200. package/templates/cli/GEMINI.md +35 -0
  201. package/templates/cli/KILOCODE.md +18 -0
  202. package/templates/cli/OPENCODE.md +18 -0
  203. package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
  204. package/templates/commands/rulebook-task-apply.md +67 -0
  205. package/templates/commands/rulebook-task-archive.md +70 -0
  206. package/templates/commands/rulebook-task-create.md +93 -0
  207. package/templates/commands/rulebook-task-list.md +42 -0
  208. package/templates/commands/rulebook-task-show.md +52 -0
  209. package/templates/commands/rulebook-task-validate.md +53 -0
  210. package/templates/core/AGENT_AUTOMATION.md +184 -0
  211. package/templates/core/DAG.md +304 -0
  212. package/templates/core/DOCUMENTATION_RULES.md +37 -0
  213. package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
  214. package/templates/core/RULEBOOK.md +1874 -0
  215. package/templates/frameworks/ANGULAR.md +36 -0
  216. package/templates/frameworks/DJANGO.md +83 -0
  217. package/templates/frameworks/ELECTRON.md +147 -0
  218. package/templates/frameworks/FLASK.md +38 -0
  219. package/templates/frameworks/FLUTTER.md +55 -0
  220. package/templates/frameworks/JQUERY.md +32 -0
  221. package/templates/frameworks/LARAVEL.md +38 -0
  222. package/templates/frameworks/NESTJS.md +43 -0
  223. package/templates/frameworks/NEXTJS.md +127 -0
  224. package/templates/frameworks/NUXT.md +40 -0
  225. package/templates/frameworks/RAILS.md +66 -0
  226. package/templates/frameworks/REACT.md +38 -0
  227. package/templates/frameworks/REACT_NATIVE.md +47 -0
  228. package/templates/frameworks/SPRING.md +39 -0
  229. package/templates/frameworks/SYMFONY.md +36 -0
  230. package/templates/frameworks/VUE.md +36 -0
  231. package/templates/frameworks/ZEND.md +35 -0
  232. package/templates/git/CI_CD_PATTERNS.md +661 -0
  233. package/templates/git/GITHUB_ACTIONS.md +728 -0
  234. package/templates/git/GITLAB_CI.md +730 -0
  235. package/templates/git/GIT_WORKFLOW.md +1157 -0
  236. package/templates/git/SECRETS_MANAGEMENT.md +585 -0
  237. package/templates/hooks/COMMIT_MSG.md +530 -0
  238. package/templates/hooks/POST_CHECKOUT.md +546 -0
  239. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
  240. package/templates/hooks/PRE_COMMIT.md +414 -0
  241. package/templates/hooks/PRE_PUSH.md +601 -0
  242. package/templates/hooks/csharp-pre-commit.sh +23 -0
  243. package/templates/hooks/csharp-pre-push.sh +23 -0
  244. package/templates/hooks/dart-pre-commit.sh +30 -0
  245. package/templates/hooks/dart-pre-push.sh +25 -0
  246. package/templates/hooks/elixir-pre-commit.sh +32 -0
  247. package/templates/hooks/elixir-pre-push.sh +31 -0
  248. package/templates/hooks/erlang-pre-commit.sh +30 -0
  249. package/templates/hooks/erlang-pre-push.sh +37 -0
  250. package/templates/hooks/go-pre-commit.sh +40 -0
  251. package/templates/hooks/go-pre-push.sh +31 -0
  252. package/templates/hooks/haskell-pre-commit.sh +41 -0
  253. package/templates/hooks/haskell-pre-push.sh +37 -0
  254. package/templates/hooks/java-pre-commit.sh +34 -0
  255. package/templates/hooks/java-pre-push.sh +24 -0
  256. package/templates/hooks/kotlin-pre-commit.sh +32 -0
  257. package/templates/hooks/kotlin-pre-push.sh +16 -0
  258. package/templates/hooks/php-pre-commit.sh +36 -0
  259. package/templates/hooks/php-pre-push.sh +26 -0
  260. package/templates/hooks/python-pre-commit.sh +51 -0
  261. package/templates/hooks/python-pre-push.sh +25 -0
  262. package/templates/hooks/ruby-pre-commit.sh +33 -0
  263. package/templates/hooks/ruby-pre-push.sh +32 -0
  264. package/templates/hooks/rust-pre-commit.sh +30 -0
  265. package/templates/hooks/rust-pre-push.sh +30 -0
  266. package/templates/hooks/scala-pre-commit.sh +32 -0
  267. package/templates/hooks/scala-pre-push.sh +24 -0
  268. package/templates/hooks/swift-pre-commit.sh +25 -0
  269. package/templates/hooks/swift-pre-push.sh +23 -0
  270. package/templates/hooks/typescript-pre-commit.sh +37 -0
  271. package/templates/hooks/typescript-pre-push.sh +36 -0
  272. package/templates/ides/COPILOT.md +37 -0
  273. package/templates/ides/CURSOR.md +43 -0
  274. package/templates/ides/JETBRAINS_AI.md +35 -0
  275. package/templates/ides/REPLIT.md +36 -0
  276. package/templates/ides/TABNINE.md +29 -0
  277. package/templates/ides/VSCODE.md +40 -0
  278. package/templates/ides/WINDSURF.md +36 -0
  279. package/templates/ides/ZED.md +32 -0
  280. package/templates/languages/ADA.md +58 -0
  281. package/templates/languages/C.md +333 -0
  282. package/templates/languages/CPP.md +743 -0
  283. package/templates/languages/CSHARP.md +417 -0
  284. package/templates/languages/DART.md +332 -0
  285. package/templates/languages/ELIXIR.md +454 -0
  286. package/templates/languages/ERLANG.md +361 -0
  287. package/templates/languages/GO.md +645 -0
  288. package/templates/languages/HASKELL.md +177 -0
  289. package/templates/languages/JAVA.md +607 -0
  290. package/templates/languages/JAVASCRIPT.md +631 -0
  291. package/templates/languages/JULIA.md +97 -0
  292. package/templates/languages/KOTLIN.md +511 -0
  293. package/templates/languages/LISP.md +100 -0
  294. package/templates/languages/LUA.md +74 -0
  295. package/templates/languages/OBJECTIVEC.md +90 -0
  296. package/templates/languages/PHP.md +416 -0
  297. package/templates/languages/PYTHON.md +682 -0
  298. package/templates/languages/R.md +350 -0
  299. package/templates/languages/RUBY.md +421 -0
  300. package/templates/languages/RUST.md +477 -0
  301. package/templates/languages/SAS.md +73 -0
  302. package/templates/languages/SCALA.md +348 -0
  303. package/templates/languages/SOLIDITY.md +580 -0
  304. package/templates/languages/SQL.md +137 -0
  305. package/templates/languages/SWIFT.md +466 -0
  306. package/templates/languages/TYPESCRIPT.md +591 -0
  307. package/templates/languages/ZIG.md +265 -0
  308. package/templates/modules/ATLASSIAN.md +255 -0
  309. package/templates/modules/CONTEXT7.md +54 -0
  310. package/templates/modules/FIGMA.md +267 -0
  311. package/templates/modules/GITHUB_MCP.md +64 -0
  312. package/templates/modules/GRAFANA.md +328 -0
  313. package/templates/modules/NOTION.md +247 -0
  314. package/templates/modules/PLAYWRIGHT.md +90 -0
  315. package/templates/modules/RULEBOOK_MCP.md +156 -0
  316. package/templates/modules/SERENA.md +337 -0
  317. package/templates/modules/SUPABASE.md +223 -0
  318. package/templates/modules/SYNAP.md +69 -0
  319. package/templates/modules/VECTORIZER.md +63 -0
  320. package/templates/services/AZURE_BLOB.md +184 -0
  321. package/templates/services/CASSANDRA.md +239 -0
  322. package/templates/services/DYNAMODB.md +308 -0
  323. package/templates/services/ELASTICSEARCH.md +347 -0
  324. package/templates/services/GCS.md +178 -0
  325. package/templates/services/INFLUXDB.md +265 -0
  326. package/templates/services/KAFKA.md +341 -0
  327. package/templates/services/MARIADB.md +183 -0
  328. package/templates/services/MEMCACHED.md +242 -0
  329. package/templates/services/MINIO.md +201 -0
  330. package/templates/services/MONGODB.md +268 -0
  331. package/templates/services/MYSQL.md +358 -0
  332. package/templates/services/NEO4J.md +247 -0
  333. package/templates/services/ORACLE.md +290 -0
  334. package/templates/services/POSTGRESQL.md +326 -0
  335. package/templates/services/RABBITMQ.md +286 -0
  336. package/templates/services/REDIS.md +292 -0
  337. package/templates/services/S3.md +298 -0
  338. package/templates/services/SQLITE.md +294 -0
  339. package/templates/services/SQLSERVER.md +294 -0
  340. package/templates/workflows/codespell.yml +31 -0
  341. package/templates/workflows/cpp-lint.yml +47 -0
  342. package/templates/workflows/cpp-publish.yml +119 -0
  343. package/templates/workflows/cpp-test.yml +77 -0
  344. package/templates/workflows/dotnet-lint.yml +29 -0
  345. package/templates/workflows/dotnet-publish.yml +40 -0
  346. package/templates/workflows/dotnet-test.yml +41 -0
  347. package/templates/workflows/elixir-lint.yml +45 -0
  348. package/templates/workflows/elixir-publish.yml +49 -0
  349. package/templates/workflows/elixir-test.yml +54 -0
  350. package/templates/workflows/erlang-lint.yml +47 -0
  351. package/templates/workflows/erlang-test.yml +62 -0
  352. package/templates/workflows/go-lint.yml +39 -0
  353. package/templates/workflows/go-publish.yml +95 -0
  354. package/templates/workflows/go-test.yml +59 -0
  355. package/templates/workflows/java-lint.yml +60 -0
  356. package/templates/workflows/java-publish.yml +120 -0
  357. package/templates/workflows/java-test.yml +85 -0
  358. package/templates/workflows/kotlin-lint.yml +34 -0
  359. package/templates/workflows/kotlin-publish.yml +56 -0
  360. package/templates/workflows/kotlin-test.yml +48 -0
  361. package/templates/workflows/php-lint.yml +39 -0
  362. package/templates/workflows/php-publish.yml +50 -0
  363. package/templates/workflows/php-test.yml +54 -0
  364. package/templates/workflows/python-lint.yml +47 -0
  365. package/templates/workflows/python-publish.yml +91 -0
  366. package/templates/workflows/python-test.yml +59 -0
  367. package/templates/workflows/rust-lint.yml +54 -0
  368. package/templates/workflows/rust-publish.yml +66 -0
  369. package/templates/workflows/rust-test.yml +75 -0
  370. package/templates/workflows/solidity-lint.yml +41 -0
  371. package/templates/workflows/solidity-test.yml +47 -0
  372. package/templates/workflows/swift-lint.yml +32 -0
  373. package/templates/workflows/swift-publish.yml +58 -0
  374. package/templates/workflows/swift-test.yml +44 -0
  375. package/templates/workflows/typescript-lint.yml +61 -0
  376. package/templates/workflows/typescript-publish.yml +60 -0
  377. package/templates/workflows/typescript-test.yml +73 -0
  378. package/templates/workflows/zig-lint.yml +27 -0
  379. package/templates/workflows/zig-test.yml +40 -0
@@ -0,0 +1,440 @@
1
+ import { access, mkdir, writeFile, unlink, readFile } from 'fs/promises';
2
+ import { readFileSync } from 'fs';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ const LANGUAGE_HOOK_MAP = {
8
+ typescript: 'typescript',
9
+ javascript: 'typescript',
10
+ rust: 'rust',
11
+ python: 'python',
12
+ go: 'go',
13
+ java: 'java',
14
+ csharp: 'csharp',
15
+ php: 'php',
16
+ ruby: 'ruby',
17
+ elixir: 'elixir',
18
+ kotlin: 'kotlin',
19
+ swift: 'swift',
20
+ scala: 'scala',
21
+ dart: 'dart',
22
+ erlang: 'erlang',
23
+ haskell: 'haskell',
24
+ };
25
+ async function loadHookTemplate(language, hookType) {
26
+ try {
27
+ const templatePath = path.join(__dirname, '../../templates/hooks', `${language}-${hookType}.sh`);
28
+ return await readFile(templatePath, 'utf-8');
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ function parseShellHookToNode(hookContent) {
35
+ const commands = [];
36
+ const lines = hookContent.split('\n');
37
+ let insideConditional = false;
38
+ for (let i = 0; i < lines.length; i++) {
39
+ const trimmed = lines[i].trim();
40
+ // Skip comments and empty lines
41
+ if (!trimmed || trimmed.startsWith('#')) {
42
+ continue;
43
+ }
44
+ // Track conditional blocks
45
+ if (trimmed.startsWith('if ') || trimmed.startsWith('elif ')) {
46
+ insideConditional = true;
47
+ continue;
48
+ }
49
+ if (trimmed === 'fi') {
50
+ insideConditional = false;
51
+ continue;
52
+ }
53
+ // Skip echo and exit statements
54
+ if (trimmed.startsWith('echo') || trimmed.startsWith('exit')) {
55
+ continue;
56
+ }
57
+ // Extract command before || exit 1 or similar
58
+ const mainCommand = trimmed.split('||')[0].trim().split('{')[0].trim();
59
+ const options = insideConditional ? ', { allowFailure: true }' : '';
60
+ // Skip shell-specific commands and conditionals, but try to extract commands from them
61
+ if (mainCommand.startsWith('if ') || mainCommand.startsWith('$(')) {
62
+ // Try to extract commands from complex conditionals (e.g., "if [ "$(gofmt -l . | wc -l)" -gt 0 ]")
63
+ if (mainCommand.includes('gofmt')) {
64
+ // Extract gofmt command from conditional
65
+ const gofmtMatch = mainCommand.match(/gofmt\s+(-l|-w)?\s*\.?/);
66
+ if (gofmtMatch) {
67
+ commands.push(`await runCommand('gofmt', ['-l', '.']${options});`);
68
+ }
69
+ }
70
+ continue;
71
+ }
72
+ if (mainCommand.startsWith('[') && !mainCommand.includes('gofmt')) {
73
+ continue;
74
+ }
75
+ // Parse npm/npx commands
76
+ if (mainCommand.startsWith('npm run ')) {
77
+ const script = mainCommand.replace('npm run ', '').trim();
78
+ commands.push(`await runCommand('npm', ['run', '${script}']${options});`);
79
+ }
80
+ else if (mainCommand.startsWith('npx ')) {
81
+ const parts = mainCommand.replace('npx ', '').trim();
82
+ const partsArray = parts.split(/\s+/).filter((p) => p && !p.startsWith('2>'));
83
+ const cmd = partsArray[0];
84
+ const args = partsArray.slice(1).filter((arg) => arg && !arg.match(/^["'].*["']$/));
85
+ if (args.length > 0) {
86
+ commands.push(`await runCommand('npx', ['${cmd}', ...${JSON.stringify(args)}]${options});`);
87
+ }
88
+ else {
89
+ commands.push(`await runCommand('npx', ['${cmd}']${options});`);
90
+ }
91
+ }
92
+ else if (mainCommand === 'npm test' || mainCommand.startsWith('npm test ')) {
93
+ commands.push(`await runCommand('npm', ['test']${options});`);
94
+ }
95
+ else if (mainCommand === 'npm run build' || mainCommand.startsWith('npm run build ')) {
96
+ commands.push(`await runCommand('npm', ['run', 'build']${options});`);
97
+ }
98
+ else {
99
+ // Parse other commands (cargo, go, python tools, etc.)
100
+ // Split command and arguments
101
+ const parts = mainCommand.split(/\s+/).filter((p) => p && !p.startsWith('2>'));
102
+ if (parts.length > 0) {
103
+ const cmd = parts[0];
104
+ const args = parts.slice(1).filter((arg) => {
105
+ // Filter out shell-specific syntax
106
+ return (arg &&
107
+ !arg.match(/^["'].*["']$/) &&
108
+ !arg.startsWith('$') &&
109
+ !arg.includes('|') &&
110
+ !arg.includes('&&'));
111
+ });
112
+ // Only add if it's a recognized command (not a shell builtin)
113
+ const recognizedCommands = [
114
+ 'cargo',
115
+ 'go',
116
+ 'gofmt',
117
+ 'black',
118
+ 'ruff',
119
+ 'flake8',
120
+ 'mypy',
121
+ 'pytest',
122
+ 'python',
123
+ 'python3',
124
+ 'golangci-lint',
125
+ 'make',
126
+ ];
127
+ if (recognizedCommands.includes(cmd) || cmd.startsWith('./')) {
128
+ if (args.length > 0) {
129
+ commands.push(`await runCommand('${cmd}', ${JSON.stringify(args)}${options});`);
130
+ }
131
+ else {
132
+ commands.push(`await runCommand('${cmd}', []${options});`);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ return commands;
139
+ }
140
+ export async function installGitHooks(options) {
141
+ const { languages, cwd } = options;
142
+ const gitDir = path.join(cwd, '.git');
143
+ try {
144
+ await access(gitDir);
145
+ }
146
+ catch {
147
+ throw new Error('Git repository not initialized. Run "git init" before installing hooks.');
148
+ }
149
+ const hooksDir = path.join(gitDir, 'hooks');
150
+ // Ensure hooks directory exists
151
+ await mkdir(hooksDir, { recursive: true });
152
+ // Clean up old hook files that might cause conflicts
153
+ const oldHookFiles = [
154
+ 'pre-commit-internal',
155
+ 'pre-push-internal',
156
+ 'pre-commit-internal.sh',
157
+ 'pre-push-internal.sh',
158
+ ];
159
+ for (const oldFile of oldHookFiles) {
160
+ try {
161
+ await unlink(path.join(hooksDir, oldFile));
162
+ }
163
+ catch {
164
+ // Ignore if file doesn't exist
165
+ }
166
+ }
167
+ // Generate and install pre-commit hook
168
+ const { shellScript, nodeScript } = await generatePreCommitHook(languages, cwd);
169
+ const preCommitShellPath = path.join(hooksDir, 'pre-commit');
170
+ const preCommitNodePath = path.join(hooksDir, 'pre-commit.js');
171
+ await writeFile(preCommitShellPath, shellScript, { mode: 0o755 });
172
+ await writeFile(preCommitNodePath, nodeScript, { mode: 0o644 });
173
+ // Generate and install pre-push hook
174
+ const { shellScript: prePushShell, nodeScript: prePushNode } = await generatePrePushHook(languages, cwd);
175
+ const prePushShellPath = path.join(hooksDir, 'pre-push');
176
+ const prePushNodePath = path.join(hooksDir, 'pre-push.js');
177
+ await writeFile(prePushShellPath, prePushShell, { mode: 0o755 });
178
+ await writeFile(prePushNodePath, prePushNode, { mode: 0o644 });
179
+ }
180
+ async function generatePreCommitHook(languages, cwd) {
181
+ const commands = [];
182
+ const packageJsonPath = path.join(cwd, 'package.json');
183
+ const hasTypeScript = languages.some((l) => l.language === 'typescript' || l.language === 'javascript');
184
+ // Check if package.json exists and read scripts
185
+ let hasPackageJson = false;
186
+ let packageJson = {};
187
+ try {
188
+ if (await access(packageJsonPath)
189
+ .then(() => true)
190
+ .catch(() => false)) {
191
+ hasPackageJson = true;
192
+ packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
193
+ }
194
+ }
195
+ catch {
196
+ // Ignore
197
+ }
198
+ // Try to load template for each language
199
+ for (const lang of languages) {
200
+ const mappedLang = LANGUAGE_HOOK_MAP[lang.language];
201
+ if (!mappedLang)
202
+ continue;
203
+ const template = await loadHookTemplate(mappedLang, 'pre-commit');
204
+ if (template) {
205
+ const parsedCommands = parseShellHookToNode(template);
206
+ if (parsedCommands.length > 0) {
207
+ commands.push(...parsedCommands);
208
+ }
209
+ }
210
+ }
211
+ // TypeScript/JavaScript specific checks - add common commands if TypeScript detected
212
+ // Templates may not parse perfectly, so we add fallback commands
213
+ if (hasTypeScript) {
214
+ // Always add lint command for TypeScript projects
215
+ if (!commands.some((c) => c.includes("'lint'"))) {
216
+ commands.push(`await runCommand('npm', ['run', 'lint'], { allowFailure: true });`);
217
+ }
218
+ // Add type-check if not already present
219
+ if (!commands.some((c) => c.includes("'type-check'"))) {
220
+ commands.push(`await runCommand('npm', ['run', 'type-check'], { allowFailure: true });`);
221
+ }
222
+ }
223
+ // Generic fallback
224
+ if (commands.length === 0) {
225
+ if (hasPackageJson && packageJson.scripts?.test) {
226
+ commands.push(`await runCommand('npm', ['test']);`);
227
+ }
228
+ }
229
+ const nodeScript = generateNodeScript('pre-commit', commands);
230
+ const shellScript = generateShellWrapper('pre-commit');
231
+ return { shellScript, nodeScript };
232
+ }
233
+ async function generatePrePushHook(languages, cwd) {
234
+ const commands = [];
235
+ const packageJsonPath = path.join(cwd, 'package.json');
236
+ const hasTypeScript = languages.some((l) => l.language === 'typescript' || l.language === 'javascript');
237
+ // Check if package.json exists and read scripts
238
+ let hasPackageJson = false;
239
+ let packageJson = {};
240
+ try {
241
+ if (await access(packageJsonPath)
242
+ .then(() => true)
243
+ .catch(() => false)) {
244
+ hasPackageJson = true;
245
+ packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
246
+ }
247
+ }
248
+ catch {
249
+ // Ignore
250
+ }
251
+ // Try to load template for each language
252
+ for (const lang of languages) {
253
+ const mappedLang = LANGUAGE_HOOK_MAP[lang.language];
254
+ if (!mappedLang)
255
+ continue;
256
+ const template = await loadHookTemplate(mappedLang, 'pre-push');
257
+ if (template) {
258
+ const parsedCommands = parseShellHookToNode(template);
259
+ if (parsedCommands.length > 0) {
260
+ commands.push(...parsedCommands);
261
+ }
262
+ }
263
+ }
264
+ // TypeScript/JavaScript specific checks - add common commands if TypeScript detected
265
+ if (hasTypeScript) {
266
+ // Always add build command for TypeScript projects
267
+ if (!commands.some((c) => c.includes("'build'"))) {
268
+ commands.push(`await runCommand('npm', ['run', 'build'], { allowFailure: true });`);
269
+ }
270
+ // Add test if not already present
271
+ if (!commands.some((c) => c.includes("'test'") && !c.includes("'test:coverage'"))) {
272
+ commands.push(`await runCommand('npm', ['test'], { allowFailure: true });`);
273
+ }
274
+ }
275
+ // Generic fallback
276
+ if (commands.length === 0) {
277
+ if (hasPackageJson && packageJson.scripts?.build) {
278
+ commands.push(`await runCommand('npm', ['run', 'build']);`);
279
+ }
280
+ }
281
+ const nodeScript = generateNodeScript('pre-push', commands);
282
+ const shellScript = generateShellWrapper('pre-push');
283
+ return { shellScript, nodeScript };
284
+ }
285
+ function generateShellWrapper(hookType) {
286
+ // Cross-platform shell wrapper that works on both Windows (Git Bash) and Linux
287
+ // Using explicit file descriptor handling to avoid "Bad fd number" errors
288
+ return `#!/bin/sh
289
+ # Git ${hookType === 'pre-commit' ? 'Pre-Commit' : 'Pre-Push'} Hook Wrapper
290
+ # Generated by @hivehub/rulebook
291
+ # Cross-platform wrapper that works on Windows and Linux
292
+
293
+ set -e
294
+
295
+ # Get the directory where this script is located
296
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
297
+ NODE_SCRIPT="$HOOK_DIR/${hookType}.js"
298
+
299
+ # Verify Node.js script exists
300
+ if [ ! -f "$NODE_SCRIPT" ]; then
301
+ echo "❌ Hook script not found: $NODE_SCRIPT" >&2
302
+ exit 1
303
+ fi
304
+
305
+ # Try to find node in common locations
306
+ NODE_CMD=""
307
+ if command -v node >/dev/null 2>/dev/null; then
308
+ NODE_CMD="node"
309
+ elif [ -f "/usr/bin/node" ]; then
310
+ NODE_CMD="/usr/bin/node"
311
+ elif [ -f "/usr/local/bin/node" ]; then
312
+ NODE_CMD="/usr/local/bin/node"
313
+ elif [ -f "/c/Program Files/nodejs/node.exe" ]; then
314
+ NODE_CMD="/c/Program Files/nodejs/node.exe"
315
+ elif [ -f "/c/Program Files (x86)/nodejs/node.exe" ]; then
316
+ NODE_CMD="/c/Program Files (x86)/nodejs/node.exe"
317
+ fi
318
+
319
+ # Check if node was found
320
+ if [ -z "$NODE_CMD" ]; then
321
+ echo "❌ Node.js not found. Please install Node.js to use git hooks." >&2
322
+ exit 1
323
+ fi
324
+
325
+ # Execute the Node.js script
326
+ exec "$NODE_CMD" "$NODE_SCRIPT"
327
+ `;
328
+ }
329
+ function generateNodeScript(hookType, commands) {
330
+ const hookName = hookType === 'pre-commit' ? 'Pre-Commit' : 'Pre-Push';
331
+ const emoji = hookType === 'pre-commit' ? '🔍' : '🚀';
332
+ if (commands.length === 0) {
333
+ return `// Git ${hookName} Hook
334
+ // Generated by @hivehub/rulebook
335
+ // Cross-platform hook that works on Windows and Linux
336
+
337
+ process.exit(0);
338
+ `;
339
+ }
340
+ return `// Git ${hookName} Hook
341
+ // Generated by @hivehub/rulebook
342
+ // Cross-platform hook that works on Windows and Linux
343
+
344
+ import { spawn } from 'child_process';
345
+ import { fileURLToPath } from 'url';
346
+ import { dirname, join } from 'path';
347
+
348
+ const __filename = fileURLToPath(import.meta.url);
349
+ const __dirname = dirname(__filename);
350
+ // Go up from .git/hooks to project root
351
+ const projectRoot = join(__dirname, '..', '..');
352
+
353
+ function runCommand(command: string, args: string[] = [], options: { allowFailure?: boolean } = {}): Promise<void> {
354
+ return new Promise((resolve, reject) => {
355
+ console.log(\` → Running: \${command} \${args.join(' ')}\`);
356
+
357
+ const isWindows = process.platform === 'win32';
358
+ const cmd = isWindows && !command.includes('/') && !command.includes('\\\\') ? command + '.cmd' : command;
359
+ const child = spawn(cmd, args, {
360
+ cwd: projectRoot,
361
+ stdio: ['ignore', 'inherit', 'inherit'],
362
+ shell: isWindows,
363
+ env: { ...process.env }
364
+ });
365
+
366
+ child.on('close', (code) => {
367
+ if (code === null) {
368
+ // Process was killed
369
+ if (options.allowFailure) {
370
+ resolve();
371
+ } else {
372
+ console.error(\`❌ \${command} was terminated\`);
373
+ reject(new Error(\`Command terminated: \${command}\`));
374
+ }
375
+ } else if (code === 0) {
376
+ resolve();
377
+ } else if (options.allowFailure) {
378
+ resolve();
379
+ } else {
380
+ console.error(\`❌ \${command} failed with exit code \${code}\`);
381
+ reject(new Error(\`Command failed: \${command}\`));
382
+ }
383
+ });
384
+
385
+ child.on('error', (error) => {
386
+ if (options.allowFailure) {
387
+ resolve();
388
+ } else {
389
+ console.error(\`❌ Error running \${command}:\`, error.message);
390
+ reject(error);
391
+ }
392
+ });
393
+ });
394
+ }
395
+
396
+ async function main() {
397
+ console.log(\`${emoji} Running ${hookName.toLowerCase()} checks...\`);
398
+
399
+ ${commands.map((cmd) => ` ${cmd}`).join('\n')}
400
+
401
+ console.log(\`✅ All ${hookName.toLowerCase()} checks passed!\`);
402
+ process.exit(0);
403
+ }
404
+
405
+ main().catch((error) => {
406
+ console.error('❌ Hook failed:', error.message);
407
+ process.exit(1);
408
+ });
409
+ `;
410
+ }
411
+ export async function uninstallGitHooks(cwd) {
412
+ const hooksDir = path.join(cwd, '.git', 'hooks');
413
+ // Remove shell wrappers
414
+ try {
415
+ await unlink(path.join(hooksDir, 'pre-commit'));
416
+ }
417
+ catch {
418
+ // Ignore if file doesn't exist
419
+ }
420
+ try {
421
+ await unlink(path.join(hooksDir, 'pre-push'));
422
+ }
423
+ catch {
424
+ // Ignore if file doesn't exist
425
+ }
426
+ // Remove Node.js scripts
427
+ try {
428
+ await unlink(path.join(hooksDir, 'pre-commit.js'));
429
+ }
430
+ catch {
431
+ // Ignore if file doesn't exist
432
+ }
433
+ try {
434
+ await unlink(path.join(hooksDir, 'pre-push.js'));
435
+ }
436
+ catch {
437
+ // Ignore if file doesn't exist
438
+ }
439
+ }
440
+ //# sourceMappingURL=git-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-hooks.js","sourceRoot":"","sources":["../../src/utils/git-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface RulesIgnore {
2
+ patterns: string[];
3
+ isIgnored: (ruleName: string) => boolean;
4
+ }
5
+ export declare function parseRulesIgnore(cwd?: string): Promise<RulesIgnore>;
6
+ export declare function filterRules<T extends {
7
+ name: string;
8
+ }>(rules: T[], rulesIgnore: RulesIgnore): T[];
9
+ //# sourceMappingURL=rulesignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rulesignore.d.ts","sourceRoot":"","sources":["../../src/utils/rulesignore.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1C;AAED,wBAAsB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoCxF;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,CAEjG"}
@@ -0,0 +1,42 @@
1
+ import { fileExists, readFile } from './file-system.js';
2
+ import path from 'path';
3
+ export async function parseRulesIgnore(cwd = process.cwd()) {
4
+ const rulesIgnorePath = path.join(cwd, '.rulesignore');
5
+ const patterns = [];
6
+ if (await fileExists(rulesIgnorePath)) {
7
+ const content = await readFile(rulesIgnorePath);
8
+ const lines = content.split('\n');
9
+ for (const line of lines) {
10
+ const trimmed = line.trim();
11
+ // Skip empty lines and comments
12
+ if (trimmed && !trimmed.startsWith('#')) {
13
+ patterns.push(trimmed);
14
+ }
15
+ }
16
+ }
17
+ return {
18
+ patterns,
19
+ isIgnored: (ruleName) => {
20
+ return patterns.some((pattern) => {
21
+ if (pattern.endsWith('/*')) {
22
+ // Match prefix (e.g., "typescript/*" matches "typescript/anything")
23
+ const prefix = pattern.slice(0, -2);
24
+ return ruleName.startsWith(prefix + '/');
25
+ }
26
+ else if (pattern.includes('*')) {
27
+ // Simple glob matching
28
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
29
+ return regex.test(ruleName);
30
+ }
31
+ else {
32
+ // Exact match
33
+ return ruleName === pattern;
34
+ }
35
+ });
36
+ },
37
+ };
38
+ }
39
+ export function filterRules(rules, rulesIgnore) {
40
+ return rules.filter((rule) => !rulesIgnore.isIgnored(rule.name));
41
+ }
42
+ //# sourceMappingURL=rulesignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rulesignore.js","sourceRoot":"","sources":["../../src/utils/rulesignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,gCAAgC;YAChC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE;YAC9B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,oEAAoE;oBACpE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACpC,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjC,uBAAuB;oBACvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACnE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,cAAc;oBACd,OAAO,QAAQ,KAAK,OAAO,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAA6B,KAAU,EAAE,WAAwB;IAC1F,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,106 @@
1
+ {
2
+ "name": "@hivehub/rulebook",
3
+ "version": "1.2.0",
4
+ "description": "Standardize AI-generated projects with automated templates, quality gates, and framework detection for 28 languages, 17 frameworks, 12 MCP modules, and 20 services",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "rulebook": "./dist/index.js",
9
+ "rulebook-mcp": "./dist/mcp/rulebook-server.js"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx src/index.ts",
14
+ "test": "vitest --run",
15
+ "test:watch": "vitest",
16
+ "test:coverage": "vitest --coverage --run",
17
+ "test:agent": "node scripts/test-agent-simple.mjs",
18
+ "test:agent:quick": "node scripts/test-agent-simple.mjs",
19
+ "test:agent:full": "node scripts/test-agent-manager.js all",
20
+ "test:agent:comprehensive": "npx vitest run tests/agent-manager-comprehensive.test.ts",
21
+ "setup:mcp": "node scripts/setup-mcp-config.js",
22
+ "lint": "npx eslint src/**/*.ts --quiet",
23
+ "lint:fix": "npx eslint src/**/*.ts --fix --quiet",
24
+ "format": "npx prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
25
+ "type-check": "tsc --noEmit",
26
+ "prepublishOnly": "npm run build",
27
+ "publish:wsl": "export BROWSER=wslview && npm publish",
28
+ "mcp-server": "node dist/mcp/rulebook-server.js"
29
+ },
30
+ "keywords": [
31
+ "ai",
32
+ "automation",
33
+ "templates",
34
+ "rules",
35
+ "standards",
36
+ "cli",
37
+ "npx",
38
+ "agents",
39
+ "cursor",
40
+ "windsurf",
41
+ "git-hooks",
42
+ "frameworks",
43
+ "nestjs",
44
+ "django",
45
+ "nextjs",
46
+ "mcp",
47
+ "typescript",
48
+ "rust",
49
+ "python"
50
+ ],
51
+ "author": "HiveLLM Team",
52
+ "license": "Apache-2.0",
53
+ "engines": {
54
+ "node": ">=20.0.0"
55
+ },
56
+ "dependencies": {
57
+ "@modelcontextprotocol/sdk": "^1.22.0",
58
+ "@types/blessed": "^0.1.26",
59
+ "ansi-escapes": "^7.2.0",
60
+ "blessed": "^0.1.81",
61
+ "chalk": "^5.3.0",
62
+ "cli-cursor": "^5.0.0",
63
+ "commander": "^14.0.2",
64
+ "execa": "^9.6.0",
65
+ "glob": "^13.0.0",
66
+ "inquirer": "^13.0.1",
67
+ "js-yaml": "^4.1.1",
68
+ "node-notifier": "^10.0.1",
69
+ "ora": "^9.0.0",
70
+ "picocolors": "^1.0.0",
71
+ "uuid": "^13.0.0",
72
+ "zod": "^3.25.76"
73
+ },
74
+ "devDependencies": {
75
+ "@types/inquirer": "^9.0.0",
76
+ "@types/js-yaml": "^4.0.0",
77
+ "@types/node": "^24.10.1",
78
+ "@types/node-notifier": "^8.0.5",
79
+ "@types/uuid": "^10.0.0",
80
+ "@eslint/js": "^9.37.0",
81
+ "@typescript-eslint/eslint-plugin": "^8.47.0",
82
+ "globals": "^15.11.0",
83
+ "@typescript-eslint/parser": "^8.47.0",
84
+ "@vitest/coverage-v8": "^4.0.13",
85
+ "eslint": "^9.37.0",
86
+ "prettier": "^3.2.0",
87
+ "tsx": "^4.7.0",
88
+ "typescript": "^5.3.3",
89
+ "vitest": "^4.0.13"
90
+ },
91
+ "publishConfig": {
92
+ "access": "public"
93
+ },
94
+ "files": [
95
+ "dist",
96
+ "templates"
97
+ ],
98
+ "repository": {
99
+ "type": "git",
100
+ "url": "https://github.com/hivellm/rulebook.git"
101
+ },
102
+ "bugs": {
103
+ "url": "https://github.com/hivellm/rulebook/issues"
104
+ },
105
+ "homepage": "https://github.com/hivellm/rulebook#readme"
106
+ }