@hivehub/rulebook 5.7.0 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. package/.claude/commands/analysis.md +35 -35
  2. package/.claude/commands/continue.md +33 -33
  3. package/.claude/commands/rulebook-decision-create.md +55 -55
  4. package/.claude/commands/rulebook-decision-list.md +15 -15
  5. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  6. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  7. package/.claude/commands/rulebook-memory-save.md +48 -48
  8. package/.claude/commands/rulebook-memory-search.md +47 -47
  9. package/.claude/commands/rulebook-task-apply.md +67 -67
  10. package/.claude/commands/rulebook-task-archive.md +94 -94
  11. package/.claude/commands/rulebook-task-create.md +93 -93
  12. package/.claude/commands/rulebook-task-list.md +42 -42
  13. package/.claude/commands/rulebook-task-show.md +52 -52
  14. package/.claude/commands/rulebook-task-validate.md +53 -53
  15. package/.claude-plugin/marketplace.json +28 -28
  16. package/.claude-plugin/plugin.json +8 -8
  17. package/README.md +86 -0
  18. package/dist/cli/commands/claude.d.ts +17 -0
  19. package/dist/cli/commands/claude.d.ts.map +1 -0
  20. package/dist/cli/commands/claude.js +56 -0
  21. package/dist/cli/commands/claude.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts.map +1 -1
  23. package/dist/cli/commands/init.js +18 -2
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/update.d.ts.map +1 -1
  26. package/dist/cli/commands/update.js +6 -1
  27. package/dist/cli/commands/update.js.map +1 -1
  28. package/dist/cli/prompts.d.ts +13 -0
  29. package/dist/cli/prompts.d.ts.map +1 -1
  30. package/dist/cli/prompts.js +106 -0
  31. package/dist/cli/prompts.js.map +1 -1
  32. package/dist/core/claude/claude-mcp.d.ts +9 -0
  33. package/dist/core/claude/claude-mcp.d.ts.map +1 -1
  34. package/dist/core/claude/claude-mcp.js +30 -0
  35. package/dist/core/claude/claude-mcp.js.map +1 -1
  36. package/dist/core/claude/claude-settings-manager.d.ts +12 -0
  37. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -1
  38. package/dist/core/claude/claude-settings-manager.js +59 -3
  39. package/dist/core/claude/claude-settings-manager.js.map +1 -1
  40. package/dist/core/detect/detector.d.ts +8 -1
  41. package/dist/core/detect/detector.d.ts.map +1 -1
  42. package/dist/core/detect/detector.js +225 -0
  43. package/dist/core/detect/detector.js.map +1 -1
  44. package/dist/core/detect/library-registry.d.ts +40 -0
  45. package/dist/core/detect/library-registry.d.ts.map +1 -0
  46. package/dist/core/detect/library-registry.js +239 -0
  47. package/dist/core/detect/library-registry.js.map +1 -0
  48. package/dist/core/generators/generator.d.ts +1 -0
  49. package/dist/core/generators/generator.d.ts.map +1 -1
  50. package/dist/core/generators/generator.js +37 -0
  51. package/dist/core/generators/generator.js.map +1 -1
  52. package/dist/core/generators/rules-generator.d.ts +1 -5
  53. package/dist/core/generators/rules-generator.d.ts.map +1 -1
  54. package/dist/core/generators/rules-generator.js +40 -1
  55. package/dist/core/generators/rules-generator.js.map +1 -1
  56. package/dist/index.js +12 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp/rulebook-server.js +0 -0
  59. package/dist/types.d.ts +13 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +23 -22
  62. package/templates/agents/accessibility-reviewer.md +43 -43
  63. package/templates/agents/api-designer.md +42 -42
  64. package/templates/agents/architect.md +51 -51
  65. package/templates/agents/build-engineer.md +36 -36
  66. package/templates/agents/code-reviewer.md +47 -47
  67. package/templates/agents/compiler/codegen-debugger.md +34 -34
  68. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  69. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  70. package/templates/agents/database-architect.md +41 -41
  71. package/templates/agents/devops-engineer.md +42 -42
  72. package/templates/agents/docs-writer.md +38 -38
  73. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  74. package/templates/agents/game-engine/render-engineer.md +22 -22
  75. package/templates/agents/game-engine/shader-engineer.md +38 -38
  76. package/templates/agents/game-engine/systems-integration.md +43 -43
  77. package/templates/agents/generic/code-reviewer.md +41 -41
  78. package/templates/agents/generic/docs-writer.md +25 -25
  79. package/templates/agents/generic/project-manager.md +36 -36
  80. package/templates/agents/generic/researcher.md +34 -34
  81. package/templates/agents/generic/test-engineer.md +41 -41
  82. package/templates/agents/i18n-engineer.md +42 -42
  83. package/templates/agents/implementer.md +42 -42
  84. package/templates/agents/migration-engineer.md +42 -42
  85. package/templates/agents/mobile/platform-specialist.md +22 -22
  86. package/templates/agents/mobile/ui-engineer.md +22 -22
  87. package/templates/agents/performance-engineer.md +49 -49
  88. package/templates/agents/project-manager.md +215 -0
  89. package/templates/agents/quality-gatekeeper.md +205 -0
  90. package/templates/agents/refactoring-agent.md +41 -41
  91. package/templates/agents/researcher.md +38 -38
  92. package/templates/agents/security-reviewer.md +40 -40
  93. package/templates/agents/team-lead.md +37 -37
  94. package/templates/agents/tester.md +48 -48
  95. package/templates/agents/ux-reviewer.md +43 -43
  96. package/templates/agents/web-app/api-designer.md +22 -22
  97. package/templates/agents/web-app/backend-engineer.md +30 -30
  98. package/templates/agents/web-app/database-engineer.md +22 -22
  99. package/templates/agents/web-app/frontend-engineer.md +29 -29
  100. package/templates/agents/web-app/security-reviewer.md +32 -32
  101. package/templates/ci/rulebook-review.yml +26 -26
  102. package/templates/claude-workflows/bugfix.js +94 -0
  103. package/templates/claude-workflows/feature-pipeline.js +88 -0
  104. package/templates/claude-workflows/release-gate.js +64 -0
  105. package/templates/claude-workflows/review-fanout.js +118 -0
  106. package/templates/claude-workflows/rulebook-driver.js +343 -0
  107. package/templates/claude-workflows/spec-author.js +133 -0
  108. package/templates/cli/AIDER.md +49 -49
  109. package/templates/cli/AMAZON_Q.md +25 -25
  110. package/templates/cli/AUGGIE.md +32 -32
  111. package/templates/cli/CLAUDE.md +117 -117
  112. package/templates/cli/CLINE.md +99 -99
  113. package/templates/cli/CODEBUDDY.md +20 -20
  114. package/templates/cli/CODEIUM.md +20 -20
  115. package/templates/cli/CODEX.md +21 -21
  116. package/templates/cli/CONTINUE.md +34 -34
  117. package/templates/cli/CURSOR_CLI.md +62 -62
  118. package/templates/cli/FACTORY.md +18 -18
  119. package/templates/cli/GEMINI.md +35 -35
  120. package/templates/cli/KILOCODE.md +18 -18
  121. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  122. package/templates/commands/rulebook-decision-create.md +55 -55
  123. package/templates/commands/rulebook-decision-list.md +15 -15
  124. package/templates/commands/rulebook-knowledge-add.md +41 -41
  125. package/templates/commands/rulebook-knowledge-list.md +15 -15
  126. package/templates/commands/rulebook-memory-save.md +48 -48
  127. package/templates/commands/rulebook-memory-search.md +47 -47
  128. package/templates/commands/rulebook-task-apply.md +67 -67
  129. package/templates/commands/rulebook-task-archive.md +94 -94
  130. package/templates/commands/rulebook-task-create.md +93 -93
  131. package/templates/commands/rulebook-task-list.md +42 -42
  132. package/templates/commands/rulebook-task-show.md +52 -52
  133. package/templates/commands/rulebook-task-validate.md +53 -53
  134. package/templates/compact-context/_default.md +23 -23
  135. package/templates/compact-context/cpp.md +26 -26
  136. package/templates/compact-context/go.md +26 -26
  137. package/templates/compact-context/python.md +26 -26
  138. package/templates/compact-context/rust.md +28 -28
  139. package/templates/compact-context/typescript.md +29 -29
  140. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  141. package/templates/core/AGENT_AUTOMATION.md +296 -296
  142. package/templates/core/CLAUDE_MD_v2.md +90 -90
  143. package/templates/core/DAG.md +304 -304
  144. package/templates/core/DECISIONS.md +38 -38
  145. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  146. package/templates/core/KNOWLEDGE.md +49 -49
  147. package/templates/core/MULTI_AGENT.md +74 -74
  148. package/templates/core/PLANS.md +28 -28
  149. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  150. package/templates/core/RULEBOOK.md +1947 -1947
  151. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  152. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  153. package/templates/git/CI_CD_PATTERNS.md +661 -661
  154. package/templates/git/GITHUB_ACTIONS.md +728 -728
  155. package/templates/git/GITLAB_CI.md +730 -730
  156. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  157. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  158. package/templates/hooks/COMMIT_MSG.md +530 -530
  159. package/templates/hooks/POST_CHECKOUT.md +546 -546
  160. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  161. package/templates/hooks/PRE_COMMIT.md +414 -414
  162. package/templates/hooks/PRE_PUSH.md +601 -601
  163. package/templates/hooks/check-context-and-handoff.sh +16 -6
  164. package/templates/hooks/update-check.ps1 +84 -0
  165. package/templates/hooks/update-check.sh +103 -0
  166. package/templates/ides/CONTINUE_RULES.md +16 -16
  167. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  168. package/templates/ides/GEMINI_RULES.md +17 -17
  169. package/templates/ides/WINDSURF_RULES.md +14 -14
  170. package/templates/languages/C.md +333 -333
  171. package/templates/languages/CPP.md +743 -743
  172. package/templates/languages/CSHARP.md +417 -417
  173. package/templates/languages/ELIXIR.md +454 -454
  174. package/templates/languages/ERLANG.md +361 -361
  175. package/templates/languages/GO.md +645 -645
  176. package/templates/languages/HASKELL.md +177 -177
  177. package/templates/languages/JAVA.md +607 -607
  178. package/templates/languages/JAVASCRIPT.md +631 -631
  179. package/templates/languages/JULIA.md +97 -97
  180. package/templates/languages/KOTLIN.md +511 -511
  181. package/templates/languages/LISP.md +100 -100
  182. package/templates/languages/LUA.md +74 -74
  183. package/templates/languages/OBJECTIVEC.md +90 -90
  184. package/templates/languages/PHP.md +416 -416
  185. package/templates/languages/PYTHON.md +682 -682
  186. package/templates/languages/RUBY.md +421 -421
  187. package/templates/languages/RUST.md +477 -477
  188. package/templates/languages/SAS.md +73 -73
  189. package/templates/languages/SCALA.md +348 -348
  190. package/templates/languages/SOLIDITY.md +580 -580
  191. package/templates/languages/SQL.md +137 -137
  192. package/templates/languages/SWIFT.md +466 -466
  193. package/templates/languages/TYPESCRIPT.md +591 -591
  194. package/templates/languages/ZIG.md +265 -265
  195. package/templates/libraries/go/ECHO.md +18 -0
  196. package/templates/libraries/go/GIN.md +18 -0
  197. package/templates/libraries/go/GORM.md +18 -0
  198. package/templates/libraries/python/DJANGO.md +18 -0
  199. package/templates/libraries/python/FASTAPI.md +18 -0
  200. package/templates/libraries/python/FLASK.md +17 -0
  201. package/templates/libraries/python/PYDANTIC.md +17 -0
  202. package/templates/libraries/python/PYTEST.md +17 -0
  203. package/templates/libraries/python/SQLALCHEMY.md +17 -0
  204. package/templates/libraries/rust/ACTIX.md +17 -0
  205. package/templates/libraries/rust/AXUM.md +18 -0
  206. package/templates/libraries/rust/SERDE.md +16 -0
  207. package/templates/libraries/rust/SQLX.md +17 -0
  208. package/templates/libraries/rust/TOKIO.md +16 -0
  209. package/templates/libraries/typescript/ANGULAR.md +17 -0
  210. package/templates/libraries/typescript/DRIZZLE.md +16 -0
  211. package/templates/libraries/typescript/EXPRESS.md +17 -0
  212. package/templates/libraries/typescript/HEROUI.md +16 -0
  213. package/templates/libraries/typescript/JEST.md +17 -0
  214. package/templates/libraries/typescript/NESTJS.md +17 -0
  215. package/templates/libraries/typescript/NEXT.md +18 -0
  216. package/templates/libraries/typescript/PRISMA.md +16 -0
  217. package/templates/libraries/typescript/RADIX.md +16 -0
  218. package/templates/libraries/typescript/REACT.md +18 -0
  219. package/templates/libraries/typescript/SHADCN.md +16 -0
  220. package/templates/libraries/typescript/SVELTE.md +16 -0
  221. package/templates/libraries/typescript/TAILWIND.md +16 -0
  222. package/templates/libraries/typescript/TRPC.md +16 -0
  223. package/templates/libraries/typescript/VITEST.md +17 -0
  224. package/templates/libraries/typescript/VUE.md +17 -0
  225. package/templates/libraries/typescript/ZOD.md +17 -0
  226. package/templates/modules/ATLASSIAN.md +255 -255
  227. package/templates/modules/CONTEXT7.md +54 -54
  228. package/templates/modules/FIGMA.md +267 -267
  229. package/templates/modules/GITHUB_MCP.md +64 -64
  230. package/templates/modules/GRAFANA.md +328 -328
  231. package/templates/modules/MEMORY.md +126 -126
  232. package/templates/modules/NOTION.md +247 -247
  233. package/templates/modules/PLAYWRIGHT.md +90 -90
  234. package/templates/modules/RULEBOOK_MCP.md +208 -208
  235. package/templates/modules/SERENA.md +337 -337
  236. package/templates/modules/SUPABASE.md +223 -223
  237. package/templates/modules/SYNAP.md +69 -69
  238. package/templates/modules/VECTORIZER.md +63 -63
  239. package/templates/modules/sequential-thinking.md +42 -42
  240. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  241. package/templates/rules/cpp.md +46 -46
  242. package/templates/rules/csharp.md +44 -44
  243. package/templates/rules/diagnostic-first.md +39 -39
  244. package/templates/rules/fail-twice-escalate.md +46 -46
  245. package/templates/rules/follow-task-sequence.md +36 -36
  246. package/templates/rules/git-safety.md +29 -29
  247. package/templates/rules/go.md +40 -40
  248. package/templates/rules/incremental-implementation.md +56 -56
  249. package/templates/rules/incremental-tests.md +29 -29
  250. package/templates/rules/java.md +43 -43
  251. package/templates/rules/javascript.md +39 -39
  252. package/templates/rules/knowledge-base-usage.md +41 -41
  253. package/templates/rules/multi-agent-teams.md +75 -75
  254. package/templates/rules/no-deferred.md +31 -31
  255. package/templates/rules/no-shortcuts.md +30 -30
  256. package/templates/rules/python.md +43 -43
  257. package/templates/rules/research-first.md +30 -30
  258. package/templates/rules/respect-handoff-trigger.md +41 -41
  259. package/templates/rules/rust.md +40 -40
  260. package/templates/rules/sequential-editing.md +21 -21
  261. package/templates/rules/session-workflow.md +24 -24
  262. package/templates/rules/task-decomposition.md +32 -32
  263. package/templates/rules/typescript.md +40 -40
  264. package/templates/skills/cli/aider/SKILL.md +59 -59
  265. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  266. package/templates/skills/cli/auggie/SKILL.md +42 -42
  267. package/templates/skills/cli/claude/SKILL.md +42 -42
  268. package/templates/skills/cli/cline/SKILL.md +42 -42
  269. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  270. package/templates/skills/cli/codeium/SKILL.md +30 -30
  271. package/templates/skills/cli/codex/SKILL.md +31 -31
  272. package/templates/skills/cli/continue/SKILL.md +44 -44
  273. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  274. package/templates/skills/cli/factory/SKILL.md +28 -28
  275. package/templates/skills/cli/gemini/SKILL.md +45 -45
  276. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  277. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  278. package/templates/skills/core/dag/SKILL.md +314 -314
  279. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  280. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  281. package/templates/skills/core/rulebook/SKILL.md +176 -176
  282. package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
  283. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
  284. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
  285. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  286. package/templates/skills/dev/analysis/SKILL.md +19 -19
  287. package/templates/skills/dev/api-design/SKILL.md +15 -15
  288. package/templates/skills/dev/architect/SKILL.md +17 -17
  289. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  290. package/templates/skills/dev/db-design/SKILL.md +15 -15
  291. package/templates/skills/dev/debug/SKILL.md +16 -16
  292. package/templates/skills/dev/deploy/SKILL.md +17 -17
  293. package/templates/skills/dev/docs/SKILL.md +17 -17
  294. package/templates/skills/dev/handoff/SKILL.md +27 -27
  295. package/templates/skills/dev/migrate/SKILL.md +15 -15
  296. package/templates/skills/dev/perf/SKILL.md +17 -17
  297. package/templates/skills/dev/refactor/SKILL.md +17 -17
  298. package/templates/skills/dev/research/SKILL.md +14 -14
  299. package/templates/skills/dev/review/SKILL.md +18 -18
  300. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  301. package/templates/skills/dev/spec/SKILL.md +65 -0
  302. package/templates/skills/ides/copilot/SKILL.md +47 -47
  303. package/templates/skills/ides/cursor/SKILL.md +53 -53
  304. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  305. package/templates/skills/ides/replit/SKILL.md +46 -46
  306. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  307. package/templates/skills/ides/vscode/SKILL.md +50 -50
  308. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  309. package/templates/skills/ides/zed/SKILL.md +42 -42
  310. package/templates/skills/languages/c/SKILL.md +343 -343
  311. package/templates/skills/languages/cpp/SKILL.md +753 -753
  312. package/templates/skills/languages/csharp/SKILL.md +427 -427
  313. package/templates/skills/languages/elixir/SKILL.md +464 -464
  314. package/templates/skills/languages/erlang/SKILL.md +371 -371
  315. package/templates/skills/languages/go/SKILL.md +655 -655
  316. package/templates/skills/languages/haskell/SKILL.md +187 -187
  317. package/templates/skills/languages/java/SKILL.md +617 -617
  318. package/templates/skills/languages/javascript/SKILL.md +641 -641
  319. package/templates/skills/languages/julia/SKILL.md +107 -107
  320. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  321. package/templates/skills/languages/lisp/SKILL.md +110 -110
  322. package/templates/skills/languages/lua/SKILL.md +84 -84
  323. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  324. package/templates/skills/languages/php/SKILL.md +426 -426
  325. package/templates/skills/languages/python/SKILL.md +692 -692
  326. package/templates/skills/languages/ruby/SKILL.md +431 -431
  327. package/templates/skills/languages/rust/SKILL.md +487 -487
  328. package/templates/skills/languages/sas/SKILL.md +83 -83
  329. package/templates/skills/languages/scala/SKILL.md +358 -358
  330. package/templates/skills/languages/solidity/SKILL.md +590 -590
  331. package/templates/skills/languages/sql/SKILL.md +147 -147
  332. package/templates/skills/languages/swift/SKILL.md +476 -476
  333. package/templates/skills/languages/typescript/SKILL.md +302 -302
  334. package/templates/skills/languages/zig/SKILL.md +275 -275
  335. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  336. package/templates/skills/modules/context7/SKILL.md +64 -64
  337. package/templates/skills/modules/figma/SKILL.md +277 -277
  338. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  339. package/templates/skills/modules/grafana/SKILL.md +338 -338
  340. package/templates/skills/modules/memory/SKILL.md +73 -73
  341. package/templates/skills/modules/notion/SKILL.md +257 -257
  342. package/templates/skills/modules/playwright/SKILL.md +100 -100
  343. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  344. package/templates/skills/modules/serena/SKILL.md +347 -347
  345. package/templates/skills/modules/supabase/SKILL.md +233 -233
  346. package/templates/skills/modules/synap/SKILL.md +79 -79
  347. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  348. package/dist/agents/ralph-parser.d.ts +0 -91
  349. package/dist/agents/ralph-parser.d.ts.map +0 -1
  350. package/dist/agents/ralph-parser.js +0 -415
  351. package/dist/agents/ralph-parser.js.map +0 -1
  352. package/dist/cli/commands/analysis.d.ts +0 -8
  353. package/dist/cli/commands/analysis.d.ts.map +0 -1
  354. package/dist/cli/commands/analysis.js +0 -78
  355. package/dist/cli/commands/analysis.js.map +0 -1
  356. package/dist/cli/commands/compress.d.ts +0 -18
  357. package/dist/cli/commands/compress.d.ts.map +0 -1
  358. package/dist/cli/commands/compress.js +0 -100
  359. package/dist/cli/commands/compress.js.map +0 -1
  360. package/dist/cli/commands/ralph.d.ts +0 -45
  361. package/dist/cli/commands/ralph.d.ts.map +0 -1
  362. package/dist/cli/commands/ralph.js +0 -694
  363. package/dist/cli/commands/ralph.js.map +0 -1
  364. package/dist/cli/docs-prompts.d.ts +0 -3
  365. package/dist/cli/docs-prompts.d.ts.map +0 -1
  366. package/dist/cli/docs-prompts.js +0 -45
  367. package/dist/cli/docs-prompts.js.map +0 -1
  368. package/dist/core/agent-manager.d.ts +0 -69
  369. package/dist/core/agent-manager.d.ts.map +0 -1
  370. package/dist/core/agent-manager.js +0 -476
  371. package/dist/core/agent-manager.js.map +0 -1
  372. package/dist/core/agent-template-engine.d.ts +0 -51
  373. package/dist/core/agent-template-engine.d.ts.map +0 -1
  374. package/dist/core/agent-template-engine.js +0 -291
  375. package/dist/core/agent-template-engine.js.map +0 -1
  376. package/dist/core/analysis-manager.d.ts +0 -56
  377. package/dist/core/analysis-manager.d.ts.map +0 -1
  378. package/dist/core/analysis-manager.js +0 -218
  379. package/dist/core/analysis-manager.js.map +0 -1
  380. package/dist/core/auto-fixer.d.ts +0 -14
  381. package/dist/core/auto-fixer.d.ts.map +0 -1
  382. package/dist/core/auto-fixer.js +0 -207
  383. package/dist/core/auto-fixer.js.map +0 -1
  384. package/dist/core/changelog-generator.d.ts +0 -44
  385. package/dist/core/changelog-generator.d.ts.map +0 -1
  386. package/dist/core/changelog-generator.js +0 -222
  387. package/dist/core/changelog-generator.js.map +0 -1
  388. package/dist/core/claude-mcp.d.ts +0 -59
  389. package/dist/core/claude-mcp.d.ts.map +0 -1
  390. package/dist/core/claude-mcp.js +0 -220
  391. package/dist/core/claude-mcp.js.map +0 -1
  392. package/dist/core/claude-md-generator.d.ts +0 -52
  393. package/dist/core/claude-md-generator.d.ts.map +0 -1
  394. package/dist/core/claude-md-generator.js +0 -104
  395. package/dist/core/claude-md-generator.js.map +0 -1
  396. package/dist/core/claude-settings-manager.d.ts +0 -44
  397. package/dist/core/claude-settings-manager.d.ts.map +0 -1
  398. package/dist/core/claude-settings-manager.js +0 -191
  399. package/dist/core/claude-settings-manager.js.map +0 -1
  400. package/dist/core/cli-bridge.d.ts +0 -113
  401. package/dist/core/cli-bridge.d.ts.map +0 -1
  402. package/dist/core/cli-bridge.js +0 -1094
  403. package/dist/core/cli-bridge.js.map +0 -1
  404. package/dist/core/compact-context-manager.d.ts +0 -34
  405. package/dist/core/compact-context-manager.d.ts.map +0 -1
  406. package/dist/core/compact-context-manager.js +0 -60
  407. package/dist/core/compact-context-manager.js.map +0 -1
  408. package/dist/core/complexity-detector.d.ts +0 -36
  409. package/dist/core/complexity-detector.d.ts.map +0 -1
  410. package/dist/core/complexity-detector.js +0 -334
  411. package/dist/core/complexity-detector.js.map +0 -1
  412. package/dist/core/compress/compressor.d.ts +0 -60
  413. package/dist/core/compress/compressor.d.ts.map +0 -1
  414. package/dist/core/compress/compressor.js +0 -232
  415. package/dist/core/compress/compressor.js.map +0 -1
  416. package/dist/core/compress/discover.d.ts +0 -19
  417. package/dist/core/compress/discover.d.ts.map +0 -1
  418. package/dist/core/compress/discover.js +0 -100
  419. package/dist/core/compress/discover.js.map +0 -1
  420. package/dist/core/compress/validator.d.ts +0 -47
  421. package/dist/core/compress/validator.d.ts.map +0 -1
  422. package/dist/core/compress/validator.js +0 -131
  423. package/dist/core/compress/validator.js.map +0 -1
  424. package/dist/core/config-manager.d.ts +0 -86
  425. package/dist/core/config-manager.d.ts.map +0 -1
  426. package/dist/core/config-manager.js +0 -621
  427. package/dist/core/config-manager.js.map +0 -1
  428. package/dist/core/coverage-checker.d.ts +0 -14
  429. package/dist/core/coverage-checker.d.ts.map +0 -1
  430. package/dist/core/coverage-checker.js +0 -176
  431. package/dist/core/coverage-checker.js.map +0 -1
  432. package/dist/core/cursor-mdc-generator.d.ts +0 -30
  433. package/dist/core/cursor-mdc-generator.d.ts.map +0 -1
  434. package/dist/core/cursor-mdc-generator.js +0 -98
  435. package/dist/core/cursor-mdc-generator.js.map +0 -1
  436. package/dist/core/decision-manager.d.ts +0 -25
  437. package/dist/core/decision-manager.d.ts.map +0 -1
  438. package/dist/core/decision-manager.js +0 -183
  439. package/dist/core/decision-manager.js.map +0 -1
  440. package/dist/core/dependency-checker.d.ts +0 -21
  441. package/dist/core/dependency-checker.d.ts.map +0 -1
  442. package/dist/core/dependency-checker.js +0 -247
  443. package/dist/core/dependency-checker.js.map +0 -1
  444. package/dist/core/detector.d.ts +0 -27
  445. package/dist/core/detector.d.ts.map +0 -1
  446. package/dist/core/detector.js +0 -1763
  447. package/dist/core/detector.js.map +0 -1
  448. package/dist/core/docs-generator.d.ts +0 -9
  449. package/dist/core/docs-generator.d.ts.map +0 -1
  450. package/dist/core/docs-generator.js +0 -531
  451. package/dist/core/docs-generator.js.map +0 -1
  452. package/dist/core/doctor.d.ts +0 -19
  453. package/dist/core/doctor.d.ts.map +0 -1
  454. package/dist/core/doctor.js +0 -229
  455. package/dist/core/doctor.js.map +0 -1
  456. package/dist/core/generator.d.ts +0 -56
  457. package/dist/core/generator.d.ts.map +0 -1
  458. package/dist/core/generator.js +0 -1193
  459. package/dist/core/generator.js.map +0 -1
  460. package/dist/core/github-issues-importer.d.ts +0 -82
  461. package/dist/core/github-issues-importer.d.ts.map +0 -1
  462. package/dist/core/github-issues-importer.js +0 -161
  463. package/dist/core/github-issues-importer.js.map +0 -1
  464. package/dist/core/gitignore-generator.d.ts +0 -13
  465. package/dist/core/gitignore-generator.d.ts.map +0 -1
  466. package/dist/core/gitignore-generator.js +0 -307
  467. package/dist/core/gitignore-generator.js.map +0 -1
  468. package/dist/core/health-scorer.d.ts +0 -61
  469. package/dist/core/health-scorer.d.ts.map +0 -1
  470. package/dist/core/health-scorer.js +0 -638
  471. package/dist/core/health-scorer.js.map +0 -1
  472. package/dist/core/iteration-tracker.d.ts +0 -85
  473. package/dist/core/iteration-tracker.d.ts.map +0 -1
  474. package/dist/core/iteration-tracker.js +0 -295
  475. package/dist/core/iteration-tracker.js.map +0 -1
  476. package/dist/core/knowledge-manager.d.ts +0 -24
  477. package/dist/core/knowledge-manager.d.ts.map +0 -1
  478. package/dist/core/knowledge-manager.js +0 -173
  479. package/dist/core/knowledge-manager.js.map +0 -1
  480. package/dist/core/learn-manager.d.ts +0 -29
  481. package/dist/core/learn-manager.d.ts.map +0 -1
  482. package/dist/core/learn-manager.js +0 -159
  483. package/dist/core/learn-manager.js.map +0 -1
  484. package/dist/core/mcp-reference-generator.d.ts +0 -13
  485. package/dist/core/mcp-reference-generator.d.ts.map +0 -1
  486. package/dist/core/mcp-reference-generator.js +0 -66
  487. package/dist/core/mcp-reference-generator.js.map +0 -1
  488. package/dist/core/minimal-scaffolder.d.ts +0 -8
  489. package/dist/core/minimal-scaffolder.d.ts.map +0 -1
  490. package/dist/core/minimal-scaffolder.js +0 -51
  491. package/dist/core/minimal-scaffolder.js.map +0 -1
  492. package/dist/core/modern-console.d.ts +0 -98
  493. package/dist/core/modern-console.d.ts.map +0 -1
  494. package/dist/core/modern-console.js +0 -556
  495. package/dist/core/modern-console.js.map +0 -1
  496. package/dist/core/multi-tool-generator.d.ts +0 -59
  497. package/dist/core/multi-tool-generator.d.ts.map +0 -1
  498. package/dist/core/multi-tool-generator.js +0 -157
  499. package/dist/core/multi-tool-generator.js.map +0 -1
  500. package/dist/core/override-manager.d.ts +0 -23
  501. package/dist/core/override-manager.d.ts.map +0 -1
  502. package/dist/core/override-manager.js +0 -82
  503. package/dist/core/override-manager.js.map +0 -1
  504. package/dist/core/plans-manager.d.ts +0 -46
  505. package/dist/core/plans-manager.d.ts.map +0 -1
  506. package/dist/core/plans-manager.js +0 -158
  507. package/dist/core/plans-manager.js.map +0 -1
  508. package/dist/core/prd-generator.d.ts +0 -48
  509. package/dist/core/prd-generator.d.ts.map +0 -1
  510. package/dist/core/prd-generator.js +0 -233
  511. package/dist/core/prd-generator.js.map +0 -1
  512. package/dist/core/ralph-manager.d.ts +0 -163
  513. package/dist/core/ralph-manager.d.ts.map +0 -1
  514. package/dist/core/ralph-manager.js +0 -555
  515. package/dist/core/ralph-manager.js.map +0 -1
  516. package/dist/core/ralph-parallel.d.ts +0 -55
  517. package/dist/core/ralph-parallel.d.ts.map +0 -1
  518. package/dist/core/ralph-parallel.js +0 -201
  519. package/dist/core/ralph-parallel.js.map +0 -1
  520. package/dist/core/ralph-plan-checkpoint.d.ts +0 -58
  521. package/dist/core/ralph-plan-checkpoint.d.ts.map +0 -1
  522. package/dist/core/ralph-plan-checkpoint.js +0 -154
  523. package/dist/core/ralph-plan-checkpoint.js.map +0 -1
  524. package/dist/core/ralph-scripts.d.ts +0 -12
  525. package/dist/core/ralph-scripts.d.ts.map +0 -1
  526. package/dist/core/ralph-scripts.js +0 -50
  527. package/dist/core/ralph-scripts.js.map +0 -1
  528. package/dist/core/review-manager.d.ts +0 -74
  529. package/dist/core/review-manager.d.ts.map +0 -1
  530. package/dist/core/review-manager.js +0 -371
  531. package/dist/core/review-manager.js.map +0 -1
  532. package/dist/core/rules-generator.d.ts +0 -73
  533. package/dist/core/rules-generator.d.ts.map +0 -1
  534. package/dist/core/rules-generator.js +0 -202
  535. package/dist/core/rules-generator.js.map +0 -1
  536. package/dist/core/skills-manager.d.ts +0 -126
  537. package/dist/core/skills-manager.d.ts.map +0 -1
  538. package/dist/core/skills-manager.js +0 -654
  539. package/dist/core/skills-manager.js.map +0 -1
  540. package/dist/core/state-writer.d.ts +0 -35
  541. package/dist/core/state-writer.d.ts.map +0 -1
  542. package/dist/core/state-writer.js +0 -81
  543. package/dist/core/state-writer.js.map +0 -1
  544. package/dist/core/task-manager.d.ts +0 -127
  545. package/dist/core/task-manager.d.ts.map +0 -1
  546. package/dist/core/task-manager.js +0 -607
  547. package/dist/core/task-manager.js.map +0 -1
  548. package/dist/core/telemetry.d.ts +0 -29
  549. package/dist/core/telemetry.d.ts.map +0 -1
  550. package/dist/core/telemetry.js +0 -57
  551. package/dist/core/telemetry.js.map +0 -1
  552. package/dist/core/validator.d.ts +0 -21
  553. package/dist/core/validator.d.ts.map +0 -1
  554. package/dist/core/validator.js +0 -177
  555. package/dist/core/validator.js.map +0 -1
  556. package/dist/core/version-bumper.d.ts +0 -19
  557. package/dist/core/version-bumper.d.ts.map +0 -1
  558. package/dist/core/version-bumper.js +0 -180
  559. package/dist/core/version-bumper.js.map +0 -1
  560. package/dist/core/watcher.d.ts +0 -9
  561. package/dist/core/watcher.d.ts.map +0 -1
  562. package/dist/core/watcher.js +0 -22
  563. package/dist/core/watcher.js.map +0 -1
  564. package/dist/core/workflow-generator.d.ts +0 -15
  565. package/dist/core/workflow-generator.d.ts.map +0 -1
  566. package/dist/core/workflow-generator.js +0 -391
  567. package/dist/core/workflow-generator.js.map +0 -1
  568. package/dist/hooks/terse-activate.d.ts +0 -59
  569. package/dist/hooks/terse-activate.d.ts.map +0 -1
  570. package/dist/hooks/terse-activate.js +0 -149
  571. package/dist/hooks/terse-activate.js.map +0 -1
  572. package/dist/hooks/terse-config.d.ts +0 -51
  573. package/dist/hooks/terse-config.d.ts.map +0 -1
  574. package/dist/hooks/terse-config.js +0 -130
  575. package/dist/hooks/terse-config.js.map +0 -1
  576. package/dist/hooks/terse-mode-tracker.d.ts +0 -78
  577. package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
  578. package/dist/hooks/terse-mode-tracker.js +0 -213
  579. package/dist/hooks/terse-mode-tracker.js.map +0 -1
  580. package/dist/memory/hnsw-index.d.ts +0 -68
  581. package/dist/memory/hnsw-index.d.ts.map +0 -1
  582. package/dist/memory/hnsw-index.js +0 -544
  583. package/dist/memory/hnsw-index.js.map +0 -1
  584. package/dist/memory/memory-cache.d.ts +0 -33
  585. package/dist/memory/memory-cache.d.ts.map +0 -1
  586. package/dist/memory/memory-cache.js +0 -85
  587. package/dist/memory/memory-cache.js.map +0 -1
  588. package/dist/memory/memory-search.d.ts +0 -42
  589. package/dist/memory/memory-search.d.ts.map +0 -1
  590. package/dist/memory/memory-search.js +0 -180
  591. package/dist/memory/memory-search.js.map +0 -1
  592. package/dist/memory/memory-store.d.ts +0 -84
  593. package/dist/memory/memory-store.d.ts.map +0 -1
  594. package/dist/memory/memory-store.js +0 -566
  595. package/dist/memory/memory-store.js.map +0 -1
  596. package/dist/memory/memory-vectorizer.d.ts +0 -29
  597. package/dist/memory/memory-vectorizer.d.ts.map +0 -1
  598. package/dist/memory/memory-vectorizer.js +0 -199
  599. package/dist/memory/memory-vectorizer.js.map +0 -1
@@ -1,371 +0,0 @@
1
- import { exec } from 'child_process';
2
- import { promisify } from 'util';
3
- import chalk from 'chalk';
4
- import { fileExists, readFile } from '../utils/file-system.js';
5
- import path from 'path';
6
- const execAsync = promisify(exec);
7
- /** Maximum diff length sent to the AI tool to avoid token limits. */
8
- const MAX_DIFF_LENGTH = 10_000;
9
- /** Maximum length of AGENTS.md context included in the prompt. */
10
- const MAX_AGENTS_CONTEXT_LENGTH = 2_000;
11
- // ─── Diff retrieval ─────────────────────────────────────────────────────────
12
- /**
13
- * Retrieve the git diff between the current HEAD and a base branch.
14
- *
15
- * Returns an empty string when:
16
- * - The working directory is not a git repo.
17
- * - There is no diff between the branches.
18
- * - An error occurs during execution.
19
- *
20
- * The returned string is truncated to {@link MAX_DIFF_LENGTH} characters.
21
- */
22
- export async function getDiffContext(projectRoot, baseBranch = 'main') {
23
- try {
24
- const [statResult, diffResult] = await Promise.all([
25
- execAsync(`git diff ${baseBranch}...HEAD --stat`, {
26
- cwd: projectRoot,
27
- timeout: 15_000,
28
- }).catch(() => ({ stdout: '' })),
29
- execAsync(`git diff ${baseBranch}...HEAD`, {
30
- cwd: projectRoot,
31
- timeout: 15_000,
32
- }).catch(() => ({ stdout: '' })),
33
- ]);
34
- const stat = (statResult.stdout ?? '').trim();
35
- const diff = (diffResult.stdout ?? '').trim();
36
- if (!stat && !diff) {
37
- return '';
38
- }
39
- const combined = `${stat}\n\n${diff}`;
40
- if (combined.length > MAX_DIFF_LENGTH) {
41
- return combined.slice(0, MAX_DIFF_LENGTH) + '\n\n[... diff truncated]';
42
- }
43
- return combined;
44
- }
45
- catch {
46
- return '';
47
- }
48
- }
49
- // ─── Prompt construction ────────────────────────────────────────────────────
50
- /**
51
- * Build a structured review prompt suitable for an AI code reviewer.
52
- */
53
- export function buildReviewPrompt(diff, context) {
54
- const projectLine = context.projectName
55
- ? `Project: ${context.projectName}`
56
- : 'Project: (unknown)';
57
- const guidelinesBlock = context.agentsMdContent
58
- ? context.agentsMdContent.slice(0, MAX_AGENTS_CONTEXT_LENGTH)
59
- : '(no project guidelines available)';
60
- return [
61
- 'You are a code reviewer. Review the following git diff for issues.',
62
- '',
63
- projectLine,
64
- '',
65
- 'Guidelines:',
66
- guidelinesBlock,
67
- '',
68
- 'Git Diff:',
69
- diff,
70
- '',
71
- 'Provide your review in this exact format:',
72
- '',
73
- '## Summary',
74
- '<one paragraph summary>',
75
- '',
76
- '## Issues',
77
- 'For each issue, use this format:',
78
- '- [CRITICAL|MAJOR|MINOR|SUGGESTION] <file>:<line> — <message>',
79
- '',
80
- '## Suggestions',
81
- '- <suggestion 1>',
82
- '- <suggestion 2>',
83
- ].join('\n');
84
- }
85
- // ─── Output parsing ─────────────────────────────────────────────────────────
86
- const SEVERITY_MAP = {
87
- CRITICAL: 'critical',
88
- MAJOR: 'major',
89
- MINOR: 'minor',
90
- SUGGESTION: 'suggestion',
91
- };
92
- /**
93
- * Parse the raw AI output into a structured {@link ReviewResult}.
94
- *
95
- * Handles missing sections gracefully — every field has a sensible default.
96
- */
97
- export function parseReviewOutput(output) {
98
- const summary = extractSection(output, 'Summary');
99
- const issuesRaw = extractSection(output, 'Issues');
100
- const suggestionsRaw = extractSection(output, 'Suggestions');
101
- const issues = parseIssues(issuesRaw);
102
- const suggestions = parseBulletList(suggestionsRaw);
103
- const approved = !issues.some((i) => i.severity === 'critical' || i.severity === 'major');
104
- return { summary, issues, suggestions, approved };
105
- }
106
- /**
107
- * Extract the text content under a `## <heading>` section.
108
- *
109
- * Returns everything between the given heading and either the next `##` heading
110
- * or the end of the string.
111
- */
112
- function extractSection(text, heading) {
113
- const pattern = new RegExp(`##\\s+${heading}\\s*\\n([\\s\\S]*?)(?=\\n##\\s|$)`, 'i');
114
- const match = pattern.exec(text);
115
- return match ? match[1].trim() : '';
116
- }
117
- /**
118
- * Parse issue lines from the Issues section.
119
- *
120
- * Expected line format:
121
- * `- [SEVERITY] file.ts:42 — Some message`
122
- * or
123
- * `- [SEVERITY] Some message without file reference`
124
- */
125
- function parseIssues(raw) {
126
- if (!raw)
127
- return [];
128
- const issues = [];
129
- const lines = raw.split('\n');
130
- const issuePattern = /^[-*]\s*\[(CRITICAL|MAJOR|MINOR|SUGGESTION)]\s*(.*)/i;
131
- for (const line of lines) {
132
- const match = issuePattern.exec(line.trim());
133
- if (!match)
134
- continue;
135
- const severity = SEVERITY_MAP[match[1].toUpperCase()];
136
- if (!severity)
137
- continue;
138
- const rest = match[2].trim();
139
- const issue = { severity, message: rest };
140
- // Try to extract file:line — pattern: filename.ext:123 — message
141
- const fileLinePattern = /^(\S+?):(\d+)\s*[—-]\s*(.*)/;
142
- const fileLineMatch = fileLinePattern.exec(rest);
143
- if (fileLineMatch) {
144
- issue.file = fileLineMatch[1];
145
- issue.line = parseInt(fileLineMatch[2], 10);
146
- issue.message = fileLineMatch[3].trim();
147
- }
148
- else {
149
- // Try file without line number — filename.ext — message
150
- const fileOnlyPattern = /^(\S+?\.\w+)\s*[—-]\s*(.*)/;
151
- const fileOnlyMatch = fileOnlyPattern.exec(rest);
152
- if (fileOnlyMatch) {
153
- issue.file = fileOnlyMatch[1];
154
- issue.message = fileOnlyMatch[2].trim();
155
- }
156
- }
157
- issues.push(issue);
158
- }
159
- return issues;
160
- }
161
- /**
162
- * Parse a markdown bullet list into an array of strings.
163
- */
164
- function parseBulletList(raw) {
165
- if (!raw)
166
- return [];
167
- return raw
168
- .split('\n')
169
- .map((line) => line.replace(/^[-*]\s*/, '').trim())
170
- .filter((line) => line.length > 0);
171
- }
172
- // ─── AI tool execution ──────────────────────────────────────────────────────
173
- /**
174
- * Run the specified AI CLI tool with the given prompt.
175
- *
176
- * Returns the tool's stdout. On any error (timeout, missing tool, etc.)
177
- * returns an empty string.
178
- */
179
- export async function runAIReview(prompt, tool = 'claude') {
180
- const commands = {
181
- claude: 'claude',
182
- gemini: 'gemini',
183
- amp: 'amp',
184
- };
185
- const binary = commands[tool];
186
- const flag = tool === 'gemini' ? '' : '-p';
187
- // Build the command — pipe prompt via stdin for safety (avoids shell escaping)
188
- const escapedPrompt = prompt.replace(/'/g, "'\\''");
189
- const command = flag
190
- ? `echo '${escapedPrompt}' | ${binary} ${flag} -`
191
- : `${binary} '${escapedPrompt}'`;
192
- try {
193
- const { stdout } = await execAsync(command, { timeout: 60_000 });
194
- return stdout.trim();
195
- }
196
- catch {
197
- return '';
198
- }
199
- }
200
- // ─── Terminal formatting ────────────────────────────────────────────────────
201
- const SEVERITY_COLORS = {
202
- critical: chalk.red,
203
- major: chalk.yellow,
204
- minor: chalk.blue,
205
- suggestion: chalk.gray,
206
- };
207
- const SEVERITY_LABELS = {
208
- critical: 'CRITICAL',
209
- major: 'MAJOR',
210
- minor: 'MINOR',
211
- suggestion: 'SUGGESTION',
212
- };
213
- /**
214
- * Format a {@link ReviewResult} as a chalk-colored terminal string.
215
- */
216
- export function formatReviewTerminal(result) {
217
- const lines = [];
218
- // Header
219
- if (result.approved) {
220
- lines.push(chalk.green.bold('\n Review Result: APPROVED'));
221
- }
222
- else {
223
- lines.push(chalk.red.bold('\n Review Result: REJECTED'));
224
- }
225
- // Issue counts
226
- const counts = countBySeverity(result.issues);
227
- const countLine = [
228
- counts.critical > 0 ? chalk.red(`${counts.critical} critical`) : null,
229
- counts.major > 0 ? chalk.yellow(`${counts.major} major`) : null,
230
- counts.minor > 0 ? chalk.blue(`${counts.minor} minor`) : null,
231
- counts.suggestion > 0 ? chalk.gray(`${counts.suggestion} suggestion`) : null,
232
- ]
233
- .filter(Boolean)
234
- .join(', ');
235
- if (countLine) {
236
- lines.push(` Issues: ${countLine}`);
237
- }
238
- else {
239
- lines.push(chalk.green(' No issues found'));
240
- }
241
- lines.push('');
242
- // Summary
243
- if (result.summary) {
244
- lines.push(chalk.bold(' Summary'));
245
- lines.push(` ${result.summary}`);
246
- lines.push('');
247
- }
248
- // Issues
249
- if (result.issues.length > 0) {
250
- lines.push(chalk.bold(' Issues'));
251
- for (const issue of result.issues) {
252
- const colorFn = SEVERITY_COLORS[issue.severity];
253
- const label = SEVERITY_LABELS[issue.severity];
254
- const location = issue.file ? (issue.line ? `${issue.file}:${issue.line}` : issue.file) : '';
255
- const locationStr = location ? ` ${chalk.gray(location)}` : '';
256
- lines.push(` ${colorFn(`[${label}]`)}${locationStr} ${issue.message}`);
257
- }
258
- lines.push('');
259
- }
260
- // Suggestions
261
- if (result.suggestions.length > 0) {
262
- lines.push(chalk.bold(' Suggestions'));
263
- for (const suggestion of result.suggestions) {
264
- lines.push(` ${chalk.gray('-')} ${suggestion}`);
265
- }
266
- lines.push('');
267
- }
268
- return lines.join('\n');
269
- }
270
- /**
271
- * Count issues grouped by severity.
272
- */
273
- function countBySeverity(issues) {
274
- const counts = {
275
- critical: 0,
276
- major: 0,
277
- minor: 0,
278
- suggestion: 0,
279
- };
280
- for (const issue of issues) {
281
- counts[issue.severity]++;
282
- }
283
- return counts;
284
- }
285
- // ─── GitHub comment posting ─────────────────────────────────────────────────
286
- /**
287
- * Format a {@link ReviewResult} as a GitHub-flavored markdown comment.
288
- */
289
- export function formatReviewMarkdown(result) {
290
- const lines = [];
291
- const statusIcon = result.approved ? ':white_check_mark:' : ':x:';
292
- lines.push(`## ${statusIcon} Rulebook AI Review`);
293
- lines.push('');
294
- if (result.summary) {
295
- lines.push(`**Summary:** ${result.summary}`);
296
- lines.push('');
297
- }
298
- if (result.issues.length > 0) {
299
- lines.push('### Issues');
300
- lines.push('');
301
- for (const issue of result.issues) {
302
- const label = issue.severity.toUpperCase();
303
- const location = issue.file
304
- ? issue.line
305
- ? `\`${issue.file}:${issue.line}\``
306
- : `\`${issue.file}\``
307
- : '';
308
- const locationStr = location ? ` ${location}` : '';
309
- lines.push(`- **[${label}]**${locationStr} ${issue.message}`);
310
- }
311
- lines.push('');
312
- }
313
- if (result.suggestions.length > 0) {
314
- lines.push('### Suggestions');
315
- lines.push('');
316
- for (const suggestion of result.suggestions) {
317
- lines.push(`- ${suggestion}`);
318
- }
319
- lines.push('');
320
- }
321
- lines.push('---');
322
- lines.push('*Generated by [@hivehub/rulebook](https://github.com/hivellm/rulebook) AI Review*');
323
- return lines.join('\n');
324
- }
325
- /**
326
- * Post a review result as a PR comment using the `gh` CLI.
327
- *
328
- * When `prNumber` is omitted the `gh` CLI auto-detects the current PR
329
- * from the branch.
330
- */
331
- export async function postGitHubComment(result, prNumber) {
332
- const markdown = formatReviewMarkdown(result);
333
- const prArg = prNumber ? ` ${prNumber}` : '';
334
- const escapedBody = markdown.replace(/'/g, "'\\''");
335
- const command = `gh pr comment${prArg} --body '${escapedBody}'`;
336
- try {
337
- await execAsync(command, { timeout: 15_000 });
338
- }
339
- catch (error) {
340
- const message = error instanceof Error ? error.message : String(error);
341
- throw new Error(`Failed to post GitHub comment: ${message}`);
342
- }
343
- }
344
- // ─── Severity threshold check ───────────────────────────────────────────────
345
- const SEVERITY_RANK = {
346
- critical: 3,
347
- major: 2,
348
- minor: 1,
349
- suggestion: 0,
350
- };
351
- /**
352
- * Check whether any issue meets or exceeds the given severity threshold.
353
- *
354
- * Returns `true` when at least one issue is at the threshold level or higher.
355
- */
356
- export function hasFailingIssues(issues, failOn) {
357
- const threshold = SEVERITY_RANK[failOn];
358
- return issues.some((i) => SEVERITY_RANK[i.severity] >= threshold);
359
- }
360
- // ─── Convenience: read project AGENTS.md ────────────────────────────────────
361
- /**
362
- * Read AGENTS.md from the given project root, if it exists.
363
- */
364
- export async function readAgentsMd(projectRoot) {
365
- const agentsPath = path.join(projectRoot, 'AGENTS.md');
366
- if (await fileExists(agentsPath)) {
367
- return readFile(agentsPath);
368
- }
369
- return undefined;
370
- }
371
- //# sourceMappingURL=review-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review-manager.js","sourceRoot":"","sources":["../../src/core/review-manager.ts"],"names":[],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- import type { DetectionResult } from '../types.js';
2
- /**
3
- * v5.3.0 `.claude/rules/` generator.
4
- *
5
- * For every detected language that rulebook ships a template for, emit
6
- * `.claude/rules/<language>.md` with YAML `paths:` frontmatter. These are
7
- * Anthropic's path-scoped rules (loaded only when Claude reads a file
8
- * matching the glob), so they cost zero context budget outside of the
9
- * relevant file types.
10
- *
11
- * Files generated by rulebook carry a sentinel comment immediately after
12
- * the frontmatter. On `rulebook update`, any `.claude/rules/*.md` without
13
- * the sentinel is treated as user-authored and left alone. This lets users
14
- * adopt a generated rule file as their own by simply deleting the sentinel
15
- * comment line.
16
- */
17
- export declare const RULES_DIR = ".claude/rules";
18
- export declare const GENERATED_SENTINEL = "Generated by @hivehub/rulebook v5.3.0";
19
- /**
20
- * Languages with shipped rule templates. Adding a new entry here requires a
21
- * matching `templates/rules/<slug>.md` file.
22
- */
23
- export declare const SUPPORTED_RULE_LANGUAGES: readonly ["typescript", "javascript", "rust", "python", "go", "cpp", "java", "csharp"];
24
- /**
25
- * Generic (non-language) rules shipped by rulebook v5.3.0.
26
- * These are always emitted regardless of detection result.
27
- */
28
- export declare const ALWAYS_ON_RULES: readonly ["full-task-no-questions", "multi-agent-teams", "consult-analysis-before-implementing", "respect-handoff-trigger", "diagnostic-first", "fail-twice-escalate"];
29
- export type SupportedRuleLanguage = (typeof SUPPORTED_RULE_LANGUAGES)[number];
30
- export interface RulesGenerationResult {
31
- /** Paths of rule files written (new or overwritten). */
32
- written: string[];
33
- /** Paths of rule files skipped because they lack the generated sentinel. */
34
- preserved: string[];
35
- /** Languages detected but not shipped as rule templates. */
36
- unsupported: string[];
37
- }
38
- export declare function getRulesDir(projectRoot: string): string;
39
- export declare function getRulePath(projectRoot: string, language: SupportedRuleLanguage): string;
40
- /**
41
- * Normalize a detected language string to a supported rule template slug.
42
- * Returns null if rulebook does not ship a template for it.
43
- */
44
- export declare function resolveRuleLanguage(detected: string): SupportedRuleLanguage | null;
45
- /**
46
- * Read a language rule template from the package's `templates/rules/`
47
- * directory.
48
- */
49
- export declare function readRuleTemplate(language: SupportedRuleLanguage): Promise<string>;
50
- /**
51
- * Check whether an existing rule file was generated by rulebook. Returns
52
- * true only if the canonical sentinel comment is present. User files that
53
- * the user "adopted" by deleting the sentinel return false and are
54
- * preserved across updates.
55
- */
56
- export declare function hasGeneratedSentinel(content: string): boolean;
57
- /**
58
- * Generate `.claude/rules/<language>.md` for every detected language that
59
- * has a shipped template. User-authored rules (no sentinel) are preserved.
60
- */
61
- export declare function generateRules(projectRoot: string, detection: Pick<DetectionResult, 'languages'>): Promise<RulesGenerationResult>;
62
- /**
63
- * List all rule files currently present in `.claude/rules/`, classifying
64
- * each by origin (generated by rulebook vs user-authored).
65
- */
66
- export interface ListedRule {
67
- name: string;
68
- path: string;
69
- source: 'generated' | 'user';
70
- paths: string[] | null;
71
- }
72
- export declare function listRulesWithSource(projectRoot: string): Promise<ListedRule[]>;
73
- //# sourceMappingURL=rules-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules-generator.d.ts","sourceRoot":"","sources":["../../src/core/rules-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,kBAAkB,0CAA0C,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wFAS3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,eAAe,wKAOlB,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkB9E,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAExF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAMlF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMvF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAC5C,OAAO,CAAC,qBAAqB,CAAC,CA2DhC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACxB;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAuBpF"}
@@ -1,202 +0,0 @@
1
- import path from 'path';
2
- import { readFile, writeFile, fileExists, ensureDir } from '../utils/file-system.js';
3
- import { getTemplatesDir } from './generator.js';
4
- /**
5
- * v5.3.0 `.claude/rules/` generator.
6
- *
7
- * For every detected language that rulebook ships a template for, emit
8
- * `.claude/rules/<language>.md` with YAML `paths:` frontmatter. These are
9
- * Anthropic's path-scoped rules (loaded only when Claude reads a file
10
- * matching the glob), so they cost zero context budget outside of the
11
- * relevant file types.
12
- *
13
- * Files generated by rulebook carry a sentinel comment immediately after
14
- * the frontmatter. On `rulebook update`, any `.claude/rules/*.md` without
15
- * the sentinel is treated as user-authored and left alone. This lets users
16
- * adopt a generated rule file as their own by simply deleting the sentinel
17
- * comment line.
18
- */
19
- export const RULES_DIR = '.claude/rules';
20
- export const GENERATED_SENTINEL = 'Generated by @hivehub/rulebook v5.3.0';
21
- /**
22
- * Languages with shipped rule templates. Adding a new entry here requires a
23
- * matching `templates/rules/<slug>.md` file.
24
- */
25
- export const SUPPORTED_RULE_LANGUAGES = [
26
- 'typescript',
27
- 'javascript',
28
- 'rust',
29
- 'python',
30
- 'go',
31
- 'cpp',
32
- 'java',
33
- 'csharp',
34
- ];
35
- /**
36
- * Generic (non-language) rules shipped by rulebook v5.3.0.
37
- * These are always emitted regardless of detection result.
38
- */
39
- export const ALWAYS_ON_RULES = [
40
- 'full-task-no-questions',
41
- 'multi-agent-teams',
42
- 'consult-analysis-before-implementing',
43
- 'respect-handoff-trigger',
44
- 'diagnostic-first',
45
- 'fail-twice-escalate',
46
- ];
47
- /**
48
- * Detected languages from the `detector.ts` pipeline may use aliases
49
- * (e.g. `"c"` — which rulebook treats as C/C++ and routes to the `cpp`
50
- * template). Map them here.
51
- */
52
- const LANGUAGE_ALIASES = {
53
- c: 'cpp',
54
- 'c++': 'cpp',
55
- cs: 'csharp',
56
- 'c#': 'csharp',
57
- ts: 'typescript',
58
- js: 'javascript',
59
- py: 'python',
60
- rs: 'rust',
61
- };
62
- export function getRulesDir(projectRoot) {
63
- return path.join(projectRoot, RULES_DIR);
64
- }
65
- export function getRulePath(projectRoot, language) {
66
- return path.join(getRulesDir(projectRoot), `${language}.md`);
67
- }
68
- /**
69
- * Normalize a detected language string to a supported rule template slug.
70
- * Returns null if rulebook does not ship a template for it.
71
- */
72
- export function resolveRuleLanguage(detected) {
73
- const lower = detected.toLowerCase().trim();
74
- if (SUPPORTED_RULE_LANGUAGES.includes(lower)) {
75
- return lower;
76
- }
77
- return LANGUAGE_ALIASES[lower] ?? null;
78
- }
79
- /**
80
- * Read a language rule template from the package's `templates/rules/`
81
- * directory.
82
- */
83
- export async function readRuleTemplate(language) {
84
- const templatePath = path.join(getTemplatesDir(), 'rules', `${language}.md`);
85
- if (!(await fileExists(templatePath))) {
86
- throw new Error(`Rule template not found at ${templatePath}`);
87
- }
88
- return await readFile(templatePath);
89
- }
90
- /**
91
- * Check whether an existing rule file was generated by rulebook. Returns
92
- * true only if the canonical sentinel comment is present. User files that
93
- * the user "adopted" by deleting the sentinel return false and are
94
- * preserved across updates.
95
- */
96
- export function hasGeneratedSentinel(content) {
97
- return content.includes(GENERATED_SENTINEL);
98
- }
99
- /**
100
- * Generate `.claude/rules/<language>.md` for every detected language that
101
- * has a shipped template. User-authored rules (no sentinel) are preserved.
102
- */
103
- export async function generateRules(projectRoot, detection) {
104
- const rulesDir = getRulesDir(projectRoot);
105
- await ensureDir(rulesDir);
106
- const result = {
107
- written: [],
108
- preserved: [],
109
- unsupported: [],
110
- };
111
- // Deduplicate: a project might detect both "typescript" and "javascript";
112
- // we emit both rules since both apply. But if two detection entries map
113
- // to the same template slug, only write once.
114
- const seen = new Set();
115
- for (const entry of detection.languages) {
116
- const slug = resolveRuleLanguage(entry.language);
117
- if (!slug) {
118
- result.unsupported.push(entry.language);
119
- continue;
120
- }
121
- if (seen.has(slug))
122
- continue;
123
- seen.add(slug);
124
- const targetPath = getRulePath(projectRoot, slug);
125
- if (await fileExists(targetPath)) {
126
- const existing = await readFile(targetPath);
127
- if (!hasGeneratedSentinel(existing)) {
128
- // User-owned file — never touch it.
129
- result.preserved.push(targetPath);
130
- continue;
131
- }
132
- }
133
- const template = await readRuleTemplate(slug);
134
- await writeFile(targetPath, template);
135
- result.written.push(targetPath);
136
- }
137
- // Always-on rules (not language-scoped) — emit if sentinel-based skip allows
138
- for (const ruleName of ALWAYS_ON_RULES) {
139
- const targetPath = path.join(rulesDir, `${ruleName}.md`);
140
- if (await fileExists(targetPath)) {
141
- const existing = await readFile(targetPath);
142
- if (!hasGeneratedSentinel(existing)) {
143
- result.preserved.push(targetPath);
144
- continue;
145
- }
146
- }
147
- const templatePath = path.join(getTemplatesDir(), 'rules', `${ruleName}.md`);
148
- if (await fileExists(templatePath)) {
149
- const template = await readFile(templatePath);
150
- await writeFile(targetPath, template);
151
- result.written.push(targetPath);
152
- }
153
- }
154
- return result;
155
- }
156
- export async function listRulesWithSource(projectRoot) {
157
- const rulesDir = getRulesDir(projectRoot);
158
- if (!(await fileExists(rulesDir)))
159
- return [];
160
- const { promises: fs } = await import('fs');
161
- const entries = await fs.readdir(rulesDir, { withFileTypes: true });
162
- const results = [];
163
- for (const entry of entries) {
164
- if (!entry.isFile() || !entry.name.endsWith('.md'))
165
- continue;
166
- const filePath = path.join(rulesDir, entry.name);
167
- const content = await readFile(filePath);
168
- const source = hasGeneratedSentinel(content) ? 'generated' : 'user';
169
- results.push({
170
- name: entry.name.replace(/\.md$/, ''),
171
- path: filePath,
172
- source,
173
- paths: extractPathsFrontmatter(content),
174
- });
175
- }
176
- results.sort((a, b) => a.name.localeCompare(b.name));
177
- return results;
178
- }
179
- /**
180
- * Extract the `paths:` field from a YAML frontmatter block at the top of a
181
- * markdown file. Returns null if no frontmatter or no `paths:` field.
182
- * Intentionally simple — handles the exact shape the shipped templates use,
183
- * not arbitrary YAML. Callers that need full YAML support should use a real
184
- * parser.
185
- */
186
- function extractPathsFrontmatter(content) {
187
- // Handle both LF and CRLF line endings (Windows writes CRLF)
188
- const normalized = content.replace(/\r\n/g, '\n');
189
- const match = normalized.match(/^---\n([\s\S]*?)\n---/);
190
- if (!match)
191
- return null;
192
- const frontmatter = match[1];
193
- const pathsMatch = frontmatter.match(/^paths:\s*\n((?:\s*-\s+.+\n?)+)/m);
194
- if (!pathsMatch)
195
- return null;
196
- const lines = pathsMatch[1].split('\n').filter((l) => l.trim().startsWith('-'));
197
- return lines.map((l) => l
198
- .replace(/^\s*-\s+/, '')
199
- .replace(/^["']|["']$/g, '')
200
- .trim());
201
- }
202
- //# sourceMappingURL=rules-generator.js.map