@hivehub/rulebook 3.0.0 → 3.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 (566) hide show
  1. package/.claude/commands/ralph-config.md +112 -0
  2. package/.claude/commands/ralph-history.md +110 -0
  3. package/.claude/commands/ralph-init.md +72 -0
  4. package/.claude/commands/ralph-pause-resume.md +105 -0
  5. package/.claude/commands/ralph-run.md +101 -0
  6. package/.claude/commands/ralph-status.md +76 -0
  7. package/.claude/commands/rulebook-memory-save.md +48 -0
  8. package/.claude/commands/rulebook-memory-search.md +47 -0
  9. package/.claude/commands/rulebook-task-apply.md +67 -0
  10. package/.claude/commands/rulebook-task-archive.md +70 -0
  11. package/.claude/commands/rulebook-task-create.md +93 -0
  12. package/.claude/commands/rulebook-task-list.md +42 -0
  13. package/.claude/commands/rulebook-task-show.md +52 -0
  14. package/.claude/commands/rulebook-task-validate.md +53 -0
  15. package/.claude-plugin/marketplace.json +29 -0
  16. package/.claude-plugin/plugin.json +8 -0
  17. package/LICENSE +0 -0
  18. package/README.md +67 -5
  19. package/dist/agents/claude-code.d.ts +0 -0
  20. package/dist/agents/claude-code.d.ts.map +0 -0
  21. package/dist/agents/claude-code.js +0 -0
  22. package/dist/agents/claude-code.js.map +0 -0
  23. package/dist/agents/cursor-agent.d.ts +0 -0
  24. package/dist/agents/cursor-agent.d.ts.map +0 -0
  25. package/dist/agents/cursor-agent.js +0 -0
  26. package/dist/agents/cursor-agent.js.map +0 -0
  27. package/dist/agents/gemini-cli.d.ts +0 -0
  28. package/dist/agents/gemini-cli.d.ts.map +0 -0
  29. package/dist/agents/gemini-cli.js +0 -0
  30. package/dist/agents/gemini-cli.js.map +0 -0
  31. package/dist/agents/ralph-parser.d.ts +52 -0
  32. package/dist/agents/ralph-parser.d.ts.map +1 -0
  33. package/dist/agents/ralph-parser.js +223 -0
  34. package/dist/agents/ralph-parser.js.map +1 -0
  35. package/dist/cli/commands.d.ts +13 -0
  36. package/dist/cli/commands.d.ts.map +1 -1
  37. package/dist/cli/commands.js +385 -21
  38. package/dist/cli/commands.js.map +1 -1
  39. package/dist/cli/docs-prompts.d.ts +0 -0
  40. package/dist/cli/docs-prompts.d.ts.map +0 -0
  41. package/dist/cli/docs-prompts.js +0 -0
  42. package/dist/cli/docs-prompts.js.map +0 -0
  43. package/dist/cli/prompts.d.ts +0 -0
  44. package/dist/cli/prompts.d.ts.map +0 -0
  45. package/dist/cli/prompts.js +0 -0
  46. package/dist/cli/prompts.js.map +0 -0
  47. package/dist/core/agent-manager.d.ts +0 -0
  48. package/dist/core/agent-manager.d.ts.map +0 -0
  49. package/dist/core/agent-manager.js +0 -0
  50. package/dist/core/agent-manager.js.map +0 -0
  51. package/dist/core/auto-fixer.d.ts +0 -0
  52. package/dist/core/auto-fixer.d.ts.map +0 -0
  53. package/dist/core/auto-fixer.js +0 -0
  54. package/dist/core/auto-fixer.js.map +0 -0
  55. package/dist/core/changelog-generator.d.ts +0 -0
  56. package/dist/core/changelog-generator.d.ts.map +0 -0
  57. package/dist/core/changelog-generator.js +0 -0
  58. package/dist/core/changelog-generator.js.map +0 -0
  59. package/dist/core/claude-mcp.d.ts +0 -0
  60. package/dist/core/claude-mcp.d.ts.map +0 -0
  61. package/dist/core/claude-mcp.js +0 -0
  62. package/dist/core/claude-mcp.js.map +0 -0
  63. package/dist/core/cli-bridge.d.ts +0 -0
  64. package/dist/core/cli-bridge.d.ts.map +0 -0
  65. package/dist/core/cli-bridge.js +0 -0
  66. package/dist/core/cli-bridge.js.map +0 -0
  67. package/dist/core/config-manager.d.ts +13 -2
  68. package/dist/core/config-manager.d.ts.map +1 -1
  69. package/dist/core/config-manager.js +185 -7
  70. package/dist/core/config-manager.js.map +1 -1
  71. package/dist/core/coverage-checker.d.ts +0 -0
  72. package/dist/core/coverage-checker.d.ts.map +0 -0
  73. package/dist/core/coverage-checker.js +0 -0
  74. package/dist/core/coverage-checker.js.map +0 -0
  75. package/dist/core/custom-templates.d.ts +0 -0
  76. package/dist/core/custom-templates.d.ts.map +0 -0
  77. package/dist/core/custom-templates.js +0 -0
  78. package/dist/core/custom-templates.js.map +0 -0
  79. package/dist/core/dependency-checker.d.ts +0 -0
  80. package/dist/core/dependency-checker.d.ts.map +0 -0
  81. package/dist/core/dependency-checker.js +0 -0
  82. package/dist/core/dependency-checker.js.map +0 -0
  83. package/dist/core/detector.d.ts +0 -0
  84. package/dist/core/detector.d.ts.map +0 -0
  85. package/dist/core/detector.js +0 -0
  86. package/dist/core/detector.js.map +0 -0
  87. package/dist/core/docs-generator.d.ts +0 -0
  88. package/dist/core/docs-generator.d.ts.map +0 -0
  89. package/dist/core/docs-generator.js +0 -0
  90. package/dist/core/docs-generator.js.map +0 -0
  91. package/dist/core/generator.d.ts +0 -0
  92. package/dist/core/generator.d.ts.map +1 -1
  93. package/dist/core/generator.js +128 -45
  94. package/dist/core/generator.js.map +1 -1
  95. package/dist/core/gitignore-generator.d.ts +0 -0
  96. package/dist/core/gitignore-generator.d.ts.map +0 -0
  97. package/dist/core/gitignore-generator.js +0 -0
  98. package/dist/core/gitignore-generator.js.map +0 -0
  99. package/dist/core/health-scorer.d.ts +0 -0
  100. package/dist/core/health-scorer.d.ts.map +0 -0
  101. package/dist/core/health-scorer.js +0 -0
  102. package/dist/core/health-scorer.js.map +0 -0
  103. package/dist/core/iteration-tracker.d.ts +57 -0
  104. package/dist/core/iteration-tracker.d.ts.map +1 -0
  105. package/dist/core/iteration-tracker.js +209 -0
  106. package/dist/core/iteration-tracker.js.map +1 -0
  107. package/dist/core/logger.d.ts +0 -0
  108. package/dist/core/logger.d.ts.map +0 -0
  109. package/dist/core/logger.js +0 -0
  110. package/dist/core/logger.js.map +0 -0
  111. package/dist/core/merger.d.ts +0 -0
  112. package/dist/core/merger.d.ts.map +0 -0
  113. package/dist/core/merger.js +0 -0
  114. package/dist/core/merger.js.map +0 -0
  115. package/dist/core/migrator.d.ts +0 -0
  116. package/dist/core/migrator.d.ts.map +0 -0
  117. package/dist/core/migrator.js +0 -0
  118. package/dist/core/migrator.js.map +0 -0
  119. package/dist/core/minimal-scaffolder.d.ts +0 -0
  120. package/dist/core/minimal-scaffolder.d.ts.map +0 -0
  121. package/dist/core/minimal-scaffolder.js +0 -0
  122. package/dist/core/minimal-scaffolder.js.map +0 -0
  123. package/dist/core/modern-console.d.ts +0 -0
  124. package/dist/core/modern-console.d.ts.map +0 -0
  125. package/dist/core/modern-console.js +0 -0
  126. package/dist/core/modern-console.js.map +0 -0
  127. package/dist/core/openspec-manager.d.ts +0 -0
  128. package/dist/core/openspec-manager.d.ts.map +0 -0
  129. package/dist/core/openspec-manager.js +0 -0
  130. package/dist/core/openspec-manager.js.map +0 -0
  131. package/dist/core/openspec-migrator.d.ts +0 -0
  132. package/dist/core/openspec-migrator.d.ts.map +0 -0
  133. package/dist/core/openspec-migrator.js +0 -0
  134. package/dist/core/openspec-migrator.js.map +0 -0
  135. package/dist/core/prd-generator.d.ts +36 -0
  136. package/dist/core/prd-generator.d.ts.map +1 -0
  137. package/dist/core/prd-generator.js +137 -0
  138. package/dist/core/prd-generator.js.map +1 -0
  139. package/dist/core/ralph-manager.d.ts +75 -0
  140. package/dist/core/ralph-manager.d.ts.map +1 -0
  141. package/dist/core/ralph-manager.js +274 -0
  142. package/dist/core/ralph-manager.js.map +1 -0
  143. package/dist/core/skills-manager.d.ts +0 -0
  144. package/dist/core/skills-manager.d.ts.map +0 -0
  145. package/dist/core/skills-manager.js +0 -0
  146. package/dist/core/skills-manager.js.map +0 -0
  147. package/dist/core/task-manager.d.ts +0 -0
  148. package/dist/core/task-manager.d.ts.map +0 -0
  149. package/dist/core/task-manager.js +0 -0
  150. package/dist/core/task-manager.js.map +0 -0
  151. package/dist/core/test-task-manager.d.ts +0 -0
  152. package/dist/core/test-task-manager.d.ts.map +0 -0
  153. package/dist/core/test-task-manager.js +0 -0
  154. package/dist/core/test-task-manager.js.map +0 -0
  155. package/dist/core/validator.d.ts +0 -0
  156. package/dist/core/validator.d.ts.map +0 -0
  157. package/dist/core/validator.js +0 -0
  158. package/dist/core/validator.js.map +0 -0
  159. package/dist/core/version-bumper.d.ts +0 -0
  160. package/dist/core/version-bumper.d.ts.map +0 -0
  161. package/dist/core/version-bumper.js +0 -0
  162. package/dist/core/version-bumper.js.map +0 -0
  163. package/dist/core/watcher.d.ts +0 -0
  164. package/dist/core/watcher.d.ts.map +0 -0
  165. package/dist/core/watcher.js +0 -0
  166. package/dist/core/watcher.js.map +0 -0
  167. package/dist/core/workflow-generator.d.ts +0 -0
  168. package/dist/core/workflow-generator.d.ts.map +0 -0
  169. package/dist/core/workflow-generator.js +297 -297
  170. package/dist/core/workflow-generator.js.map +0 -0
  171. package/dist/index.d.ts +0 -0
  172. package/dist/index.d.ts.map +0 -0
  173. package/dist/index.js +46 -1
  174. package/dist/index.js.map +1 -1
  175. package/dist/mcp/rulebook-server.d.ts +0 -0
  176. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  177. package/dist/mcp/rulebook-server.js +263 -18
  178. package/dist/mcp/rulebook-server.js.map +1 -1
  179. package/dist/memory/hnsw-index.d.ts +0 -0
  180. package/dist/memory/hnsw-index.d.ts.map +1 -1
  181. package/dist/memory/hnsw-index.js +0 -0
  182. package/dist/memory/hnsw-index.js.map +1 -1
  183. package/dist/memory/memory-cache.d.ts +0 -0
  184. package/dist/memory/memory-cache.d.ts.map +1 -1
  185. package/dist/memory/memory-cache.js +0 -0
  186. package/dist/memory/memory-cache.js.map +1 -1
  187. package/dist/memory/memory-hooks.d.ts +6 -0
  188. package/dist/memory/memory-hooks.d.ts.map +1 -1
  189. package/dist/memory/memory-hooks.js +70 -15
  190. package/dist/memory/memory-hooks.js.map +1 -1
  191. package/dist/memory/memory-manager.d.ts +1 -0
  192. package/dist/memory/memory-manager.d.ts.map +1 -1
  193. package/dist/memory/memory-manager.js +9 -7
  194. package/dist/memory/memory-manager.js.map +1 -1
  195. package/dist/memory/memory-search.d.ts +0 -0
  196. package/dist/memory/memory-search.d.ts.map +1 -1
  197. package/dist/memory/memory-search.js +3 -8
  198. package/dist/memory/memory-search.js.map +1 -1
  199. package/dist/memory/memory-store.d.ts +0 -0
  200. package/dist/memory/memory-store.d.ts.map +1 -1
  201. package/dist/memory/memory-store.js +68 -71
  202. package/dist/memory/memory-store.js.map +1 -1
  203. package/dist/memory/memory-types.d.ts +1 -0
  204. package/dist/memory/memory-types.d.ts.map +1 -1
  205. package/dist/memory/memory-types.js +0 -0
  206. package/dist/memory/memory-types.js.map +0 -0
  207. package/dist/memory/memory-vectorizer.d.ts +0 -0
  208. package/dist/memory/memory-vectorizer.d.ts.map +1 -1
  209. package/dist/memory/memory-vectorizer.js +108 -13
  210. package/dist/memory/memory-vectorizer.js.map +1 -1
  211. package/dist/types.d.ts +70 -0
  212. package/dist/types.d.ts.map +1 -1
  213. package/dist/types.js +0 -0
  214. package/dist/types.js.map +0 -0
  215. package/dist/utils/file-system.d.ts +0 -0
  216. package/dist/utils/file-system.d.ts.map +0 -0
  217. package/dist/utils/file-system.js +0 -0
  218. package/dist/utils/file-system.js.map +0 -0
  219. package/dist/utils/git-hooks.d.ts +0 -0
  220. package/dist/utils/git-hooks.d.ts.map +0 -0
  221. package/dist/utils/git-hooks.js +0 -0
  222. package/dist/utils/git-hooks.js.map +0 -0
  223. package/dist/utils/rulesignore.d.ts +0 -0
  224. package/dist/utils/rulesignore.d.ts.map +0 -0
  225. package/dist/utils/rulesignore.js +0 -0
  226. package/dist/utils/rulesignore.js.map +0 -0
  227. package/package.json +108 -107
  228. package/templates/cli/AIDER.md +0 -0
  229. package/templates/cli/AMAZON_Q.md +0 -0
  230. package/templates/cli/AUGGIE.md +0 -0
  231. package/templates/cli/CLAUDE.md +85 -0
  232. package/templates/cli/CLAUDE_CODE.md +0 -0
  233. package/templates/cli/CLINE.md +69 -2
  234. package/templates/cli/CODEBUDDY.md +0 -0
  235. package/templates/cli/CODEIUM.md +0 -0
  236. package/templates/cli/CODEX.md +0 -0
  237. package/templates/cli/CONTINUE.md +0 -0
  238. package/templates/cli/CURSOR_CLI.md +37 -3
  239. package/templates/cli/FACTORY.md +0 -0
  240. package/templates/cli/GEMINI.md +0 -0
  241. package/templates/cli/KILOCODE.md +0 -0
  242. package/templates/cli/OPENCODE.md +0 -0
  243. package/templates/cli/_GENERIC_TEMPLATE.md +0 -0
  244. package/templates/cli/gemini-extension.json +0 -0
  245. package/templates/commands/rulebook-memory-save.md +0 -0
  246. package/templates/commands/rulebook-memory-search.md +0 -0
  247. package/templates/commands/rulebook-task-apply.md +0 -0
  248. package/templates/commands/rulebook-task-archive.md +0 -0
  249. package/templates/commands/rulebook-task-create.md +0 -0
  250. package/templates/commands/rulebook-task-list.md +0 -0
  251. package/templates/commands/rulebook-task-show.md +0 -0
  252. package/templates/commands/rulebook-task-validate.md +0 -0
  253. package/templates/core/AGENT_AUTOMATION.md +142 -38
  254. package/templates/core/DAG.md +0 -0
  255. package/templates/core/DOCUMENTATION_RULES.md +0 -0
  256. package/templates/core/QUALITY_ENFORCEMENT.md +0 -0
  257. package/templates/core/RALPH.md +430 -0
  258. package/templates/core/RULEBOOK.md +20 -1
  259. package/templates/frameworks/ANGULAR.md +0 -0
  260. package/templates/frameworks/DJANGO.md +0 -0
  261. package/templates/frameworks/ELECTRON.md +0 -0
  262. package/templates/frameworks/FLASK.md +0 -0
  263. package/templates/frameworks/FLUTTER.md +0 -0
  264. package/templates/frameworks/JQUERY.md +0 -0
  265. package/templates/frameworks/LARAVEL.md +0 -0
  266. package/templates/frameworks/NESTJS.md +0 -0
  267. package/templates/frameworks/NEXTJS.md +0 -0
  268. package/templates/frameworks/NUXT.md +0 -0
  269. package/templates/frameworks/RAILS.md +0 -0
  270. package/templates/frameworks/REACT.md +0 -0
  271. package/templates/frameworks/REACT_NATIVE.md +0 -0
  272. package/templates/frameworks/SPRING.md +0 -0
  273. package/templates/frameworks/SYMFONY.md +0 -0
  274. package/templates/frameworks/VUE.md +0 -0
  275. package/templates/frameworks/ZEND.md +0 -0
  276. package/templates/git/CI_CD_PATTERNS.md +0 -0
  277. package/templates/git/GITHUB_ACTIONS.md +0 -0
  278. package/templates/git/GITLAB_CI.md +0 -0
  279. package/templates/git/GIT_WORKFLOW.md +0 -0
  280. package/templates/git/SECRETS_MANAGEMENT.md +0 -0
  281. package/templates/hooks/COMMIT_MSG.md +0 -0
  282. package/templates/hooks/POST_CHECKOUT.md +0 -0
  283. package/templates/hooks/PREPARE_COMMIT_MSG.md +0 -0
  284. package/templates/hooks/PRE_COMMIT.md +0 -0
  285. package/templates/hooks/PRE_PUSH.md +0 -0
  286. package/templates/hooks/csharp-pre-commit.sh +0 -0
  287. package/templates/hooks/csharp-pre-push.sh +0 -0
  288. package/templates/hooks/dart-pre-commit.sh +0 -0
  289. package/templates/hooks/dart-pre-push.sh +0 -0
  290. package/templates/hooks/elixir-pre-commit.sh +0 -0
  291. package/templates/hooks/elixir-pre-push.sh +0 -0
  292. package/templates/hooks/erlang-pre-commit.sh +0 -0
  293. package/templates/hooks/erlang-pre-push.sh +0 -0
  294. package/templates/hooks/go-pre-commit.sh +0 -0
  295. package/templates/hooks/go-pre-push.sh +0 -0
  296. package/templates/hooks/haskell-pre-commit.sh +0 -0
  297. package/templates/hooks/haskell-pre-push.sh +0 -0
  298. package/templates/hooks/java-pre-commit.sh +0 -0
  299. package/templates/hooks/java-pre-push.sh +0 -0
  300. package/templates/hooks/kotlin-pre-commit.sh +0 -0
  301. package/templates/hooks/kotlin-pre-push.sh +0 -0
  302. package/templates/hooks/php-pre-commit.sh +0 -0
  303. package/templates/hooks/php-pre-push.sh +0 -0
  304. package/templates/hooks/python-pre-commit.sh +0 -0
  305. package/templates/hooks/python-pre-push.sh +0 -0
  306. package/templates/hooks/ruby-pre-commit.sh +0 -0
  307. package/templates/hooks/ruby-pre-push.sh +0 -0
  308. package/templates/hooks/rust-pre-commit.sh +0 -0
  309. package/templates/hooks/rust-pre-push.sh +0 -0
  310. package/templates/hooks/scala-pre-commit.sh +0 -0
  311. package/templates/hooks/scala-pre-push.sh +0 -0
  312. package/templates/hooks/swift-pre-commit.sh +0 -0
  313. package/templates/hooks/swift-pre-push.sh +0 -0
  314. package/templates/hooks/typescript-pre-commit.sh +0 -0
  315. package/templates/hooks/typescript-pre-push.sh +0 -0
  316. package/templates/ides/COPILOT.md +0 -0
  317. package/templates/ides/CURSOR.md +0 -0
  318. package/templates/ides/JETBRAINS_AI.md +0 -0
  319. package/templates/ides/REPLIT.md +0 -0
  320. package/templates/ides/TABNINE.md +0 -0
  321. package/templates/ides/VSCODE.md +0 -0
  322. package/templates/ides/WINDSURF.md +0 -0
  323. package/templates/ides/ZED.md +0 -0
  324. package/templates/languages/ADA.md +0 -0
  325. package/templates/languages/C.md +0 -0
  326. package/templates/languages/CPP.md +0 -0
  327. package/templates/languages/CSHARP.md +0 -0
  328. package/templates/languages/DART.md +0 -0
  329. package/templates/languages/ELIXIR.md +0 -0
  330. package/templates/languages/ERLANG.md +0 -0
  331. package/templates/languages/GO.md +0 -0
  332. package/templates/languages/HASKELL.md +0 -0
  333. package/templates/languages/JAVA.md +0 -0
  334. package/templates/languages/JAVASCRIPT.md +0 -0
  335. package/templates/languages/JULIA.md +0 -0
  336. package/templates/languages/KOTLIN.md +0 -0
  337. package/templates/languages/LISP.md +0 -0
  338. package/templates/languages/LUA.md +0 -0
  339. package/templates/languages/OBJECTIVEC.md +0 -0
  340. package/templates/languages/PHP.md +0 -0
  341. package/templates/languages/PYTHON.md +0 -0
  342. package/templates/languages/R.md +0 -0
  343. package/templates/languages/RUBY.md +0 -0
  344. package/templates/languages/RUST.md +0 -0
  345. package/templates/languages/SAS.md +0 -0
  346. package/templates/languages/SCALA.md +0 -0
  347. package/templates/languages/SOLIDITY.md +0 -0
  348. package/templates/languages/SQL.md +0 -0
  349. package/templates/languages/SWIFT.md +0 -0
  350. package/templates/languages/TYPESCRIPT.md +0 -0
  351. package/templates/languages/ZIG.md +0 -0
  352. package/templates/modules/ATLASSIAN.md +0 -0
  353. package/templates/modules/CONTEXT7.md +0 -0
  354. package/templates/modules/FIGMA.md +0 -0
  355. package/templates/modules/GITHUB_MCP.md +0 -0
  356. package/templates/modules/GRAFANA.md +0 -0
  357. package/templates/modules/MEMORY.md +74 -11
  358. package/templates/modules/NOTION.md +0 -0
  359. package/templates/modules/PLAYWRIGHT.md +0 -0
  360. package/templates/modules/RULEBOOK_MCP.md +0 -0
  361. package/templates/modules/SERENA.md +0 -0
  362. package/templates/modules/SUPABASE.md +0 -0
  363. package/templates/modules/SYNAP.md +0 -0
  364. package/templates/modules/VECTORIZER.md +0 -0
  365. package/templates/services/AZURE_BLOB.md +0 -0
  366. package/templates/services/CASSANDRA.md +0 -0
  367. package/templates/services/DYNAMODB.md +0 -0
  368. package/templates/services/ELASTICSEARCH.md +0 -0
  369. package/templates/services/GCS.md +0 -0
  370. package/templates/services/INFLUXDB.md +0 -0
  371. package/templates/services/KAFKA.md +0 -0
  372. package/templates/services/MARIADB.md +0 -0
  373. package/templates/services/MEMCACHED.md +0 -0
  374. package/templates/services/MINIO.md +0 -0
  375. package/templates/services/MONGODB.md +0 -0
  376. package/templates/services/MYSQL.md +0 -0
  377. package/templates/services/NEO4J.md +0 -0
  378. package/templates/services/ORACLE.md +0 -0
  379. package/templates/services/POSTGRESQL.md +0 -0
  380. package/templates/services/RABBITMQ.md +0 -0
  381. package/templates/services/REDIS.md +0 -0
  382. package/templates/services/S3.md +0 -0
  383. package/templates/services/SQLITE.md +0 -0
  384. package/templates/services/SQLSERVER.md +0 -0
  385. package/templates/skills/cli/aider/SKILL.md +0 -0
  386. package/templates/skills/cli/amazon-q/SKILL.md +0 -0
  387. package/templates/skills/cli/auggie/SKILL.md +0 -0
  388. package/templates/skills/cli/claude/SKILL.md +0 -0
  389. package/templates/skills/cli/claude-code/SKILL.md +0 -0
  390. package/templates/skills/cli/cline/SKILL.md +0 -0
  391. package/templates/skills/cli/codebuddy/SKILL.md +0 -0
  392. package/templates/skills/cli/codeium/SKILL.md +0 -0
  393. package/templates/skills/cli/codex/SKILL.md +0 -0
  394. package/templates/skills/cli/continue/SKILL.md +0 -0
  395. package/templates/skills/cli/cursor-cli/SKILL.md +0 -0
  396. package/templates/skills/cli/factory/SKILL.md +0 -0
  397. package/templates/skills/cli/gemini/SKILL.md +0 -0
  398. package/templates/skills/cli/kilocode/SKILL.md +0 -0
  399. package/templates/skills/cli/opencode/SKILL.md +0 -0
  400. package/templates/skills/core/agent-automation/SKILL.md +0 -0
  401. package/templates/skills/core/dag/SKILL.md +0 -0
  402. package/templates/skills/core/documentation-rules/SKILL.md +0 -0
  403. package/templates/skills/core/quality-enforcement/SKILL.md +0 -0
  404. package/templates/skills/core/rulebook/SKILL.md +0 -0
  405. package/templates/skills/frameworks/angular/SKILL.md +0 -0
  406. package/templates/skills/frameworks/django/SKILL.md +0 -0
  407. package/templates/skills/frameworks/electron/SKILL.md +0 -0
  408. package/templates/skills/frameworks/flask/SKILL.md +0 -0
  409. package/templates/skills/frameworks/flutter/SKILL.md +0 -0
  410. package/templates/skills/frameworks/jquery/SKILL.md +0 -0
  411. package/templates/skills/frameworks/laravel/SKILL.md +0 -0
  412. package/templates/skills/frameworks/nestjs/SKILL.md +0 -0
  413. package/templates/skills/frameworks/nextjs/SKILL.md +0 -0
  414. package/templates/skills/frameworks/nuxt/SKILL.md +0 -0
  415. package/templates/skills/frameworks/rails/SKILL.md +0 -0
  416. package/templates/skills/frameworks/react/SKILL.md +0 -0
  417. package/templates/skills/frameworks/react-native/SKILL.md +0 -0
  418. package/templates/skills/frameworks/spring/SKILL.md +0 -0
  419. package/templates/skills/frameworks/symfony/SKILL.md +0 -0
  420. package/templates/skills/frameworks/vue/SKILL.md +0 -0
  421. package/templates/skills/frameworks/zend/SKILL.md +0 -0
  422. package/templates/skills/ides/copilot/SKILL.md +0 -0
  423. package/templates/skills/ides/cursor/SKILL.md +0 -0
  424. package/templates/skills/ides/jetbrains-ai/SKILL.md +0 -0
  425. package/templates/skills/ides/replit/SKILL.md +0 -0
  426. package/templates/skills/ides/tabnine/SKILL.md +0 -0
  427. package/templates/skills/ides/vscode/SKILL.md +0 -0
  428. package/templates/skills/ides/windsurf/SKILL.md +0 -0
  429. package/templates/skills/ides/zed/SKILL.md +0 -0
  430. package/templates/skills/languages/ada/SKILL.md +0 -0
  431. package/templates/skills/languages/c/SKILL.md +0 -0
  432. package/templates/skills/languages/cpp/SKILL.md +0 -0
  433. package/templates/skills/languages/csharp/SKILL.md +0 -0
  434. package/templates/skills/languages/dart/SKILL.md +0 -0
  435. package/templates/skills/languages/elixir/SKILL.md +0 -0
  436. package/templates/skills/languages/erlang/SKILL.md +0 -0
  437. package/templates/skills/languages/go/SKILL.md +0 -0
  438. package/templates/skills/languages/haskell/SKILL.md +0 -0
  439. package/templates/skills/languages/java/SKILL.md +0 -0
  440. package/templates/skills/languages/javascript/SKILL.md +0 -0
  441. package/templates/skills/languages/julia/SKILL.md +0 -0
  442. package/templates/skills/languages/kotlin/SKILL.md +0 -0
  443. package/templates/skills/languages/lisp/SKILL.md +0 -0
  444. package/templates/skills/languages/lua/SKILL.md +0 -0
  445. package/templates/skills/languages/objectivec/SKILL.md +0 -0
  446. package/templates/skills/languages/php/SKILL.md +0 -0
  447. package/templates/skills/languages/python/SKILL.md +0 -0
  448. package/templates/skills/languages/r/SKILL.md +0 -0
  449. package/templates/skills/languages/ruby/SKILL.md +0 -0
  450. package/templates/skills/languages/rust/SKILL.md +0 -0
  451. package/templates/skills/languages/sas/SKILL.md +0 -0
  452. package/templates/skills/languages/scala/SKILL.md +0 -0
  453. package/templates/skills/languages/solidity/SKILL.md +0 -0
  454. package/templates/skills/languages/sql/SKILL.md +0 -0
  455. package/templates/skills/languages/swift/SKILL.md +0 -0
  456. package/templates/skills/languages/typescript/SKILL.md +0 -0
  457. package/templates/skills/languages/zig/SKILL.md +0 -0
  458. package/templates/skills/modules/atlassian/SKILL.md +0 -0
  459. package/templates/skills/modules/context7/SKILL.md +0 -0
  460. package/templates/skills/modules/figma/SKILL.md +0 -0
  461. package/templates/skills/modules/github-mcp/SKILL.md +0 -0
  462. package/templates/skills/modules/grafana/SKILL.md +0 -0
  463. package/templates/skills/modules/memory/SKILL.md +0 -0
  464. package/templates/skills/modules/notion/SKILL.md +0 -0
  465. package/templates/skills/modules/playwright/SKILL.md +0 -0
  466. package/templates/skills/modules/rulebook-mcp/SKILL.md +0 -0
  467. package/templates/skills/modules/serena/SKILL.md +0 -0
  468. package/templates/skills/modules/supabase/SKILL.md +0 -0
  469. package/templates/skills/modules/synap/SKILL.md +0 -0
  470. package/templates/skills/modules/vectorizer/SKILL.md +0 -0
  471. package/templates/skills/services/azure-blob/SKILL.md +0 -0
  472. package/templates/skills/services/cassandra/SKILL.md +0 -0
  473. package/templates/skills/services/dynamodb/SKILL.md +0 -0
  474. package/templates/skills/services/elasticsearch/SKILL.md +0 -0
  475. package/templates/skills/services/gcs/SKILL.md +0 -0
  476. package/templates/skills/services/influxdb/SKILL.md +0 -0
  477. package/templates/skills/services/kafka/SKILL.md +0 -0
  478. package/templates/skills/services/mariadb/SKILL.md +0 -0
  479. package/templates/skills/services/memcached/SKILL.md +0 -0
  480. package/templates/skills/services/minio/SKILL.md +0 -0
  481. package/templates/skills/services/mongodb/SKILL.md +0 -0
  482. package/templates/skills/services/mysql/SKILL.md +0 -0
  483. package/templates/skills/services/neo4j/SKILL.md +0 -0
  484. package/templates/skills/services/oracle/SKILL.md +0 -0
  485. package/templates/skills/services/postgresql/SKILL.md +0 -0
  486. package/templates/skills/services/rabbitmq/SKILL.md +0 -0
  487. package/templates/skills/services/redis/SKILL.md +0 -0
  488. package/templates/skills/services/s3/SKILL.md +0 -0
  489. package/templates/skills/services/sqlite/SKILL.md +0 -0
  490. package/templates/skills/services/sqlserver/SKILL.md +0 -0
  491. package/templates/skills/workflows/ralph/SETUP.md +228 -0
  492. package/templates/skills/workflows/ralph/SKILL.md +309 -0
  493. package/templates/skills/workflows/ralph/install.sh +87 -0
  494. package/templates/skills/workflows/ralph/manifest.json +158 -0
  495. package/templates/workflows/codespell.yml +0 -0
  496. package/templates/workflows/cpp-lint.yml +0 -0
  497. package/templates/workflows/cpp-publish.yml +0 -0
  498. package/templates/workflows/cpp-test.yml +0 -0
  499. package/templates/workflows/dotnet-lint.yml +0 -0
  500. package/templates/workflows/dotnet-publish.yml +0 -0
  501. package/templates/workflows/dotnet-test.yml +0 -0
  502. package/templates/workflows/elixir-lint.yml +0 -0
  503. package/templates/workflows/elixir-publish.yml +0 -0
  504. package/templates/workflows/elixir-test.yml +0 -0
  505. package/templates/workflows/erlang-lint.yml +0 -0
  506. package/templates/workflows/erlang-test.yml +0 -0
  507. package/templates/workflows/go-lint.yml +0 -0
  508. package/templates/workflows/go-publish.yml +0 -0
  509. package/templates/workflows/go-test.yml +0 -0
  510. package/templates/workflows/java-lint.yml +0 -0
  511. package/templates/workflows/java-publish.yml +0 -0
  512. package/templates/workflows/java-test.yml +0 -0
  513. package/templates/workflows/kotlin-lint.yml +0 -0
  514. package/templates/workflows/kotlin-publish.yml +0 -0
  515. package/templates/workflows/kotlin-test.yml +0 -0
  516. package/templates/workflows/php-lint.yml +0 -0
  517. package/templates/workflows/php-publish.yml +0 -0
  518. package/templates/workflows/php-test.yml +0 -0
  519. package/templates/workflows/python-lint.yml +0 -0
  520. package/templates/workflows/python-publish.yml +0 -0
  521. package/templates/workflows/python-test.yml +0 -0
  522. package/templates/workflows/rust-lint.yml +0 -0
  523. package/templates/workflows/rust-publish.yml +0 -0
  524. package/templates/workflows/rust-test.yml +0 -0
  525. package/templates/workflows/solidity-lint.yml +0 -0
  526. package/templates/workflows/solidity-test.yml +0 -0
  527. package/templates/workflows/swift-lint.yml +0 -0
  528. package/templates/workflows/swift-publish.yml +0 -0
  529. package/templates/workflows/swift-test.yml +0 -0
  530. package/templates/workflows/typescript-lint.yml +0 -0
  531. package/templates/workflows/typescript-publish.yml +0 -0
  532. package/templates/workflows/typescript-test.yml +0 -0
  533. package/templates/workflows/zig-lint.yml +0 -0
  534. package/templates/workflows/zig-test.yml +0 -0
  535. package/dist/core/modern-console-new.d.ts +0 -81
  536. package/dist/core/modern-console-new.d.ts.map +0 -1
  537. package/dist/core/modern-console-new.js +0 -340
  538. package/dist/core/modern-console-new.js.map +0 -1
  539. package/dist/mcp/handlers/archive-task.d.ts +0 -17
  540. package/dist/mcp/handlers/archive-task.d.ts.map +0 -1
  541. package/dist/mcp/handlers/archive-task.js +0 -36
  542. package/dist/mcp/handlers/archive-task.js.map +0 -1
  543. package/dist/mcp/handlers/create-task.d.ts +0 -17
  544. package/dist/mcp/handlers/create-task.d.ts.map +0 -1
  545. package/dist/mcp/handlers/create-task.js +0 -56
  546. package/dist/mcp/handlers/create-task.js.map +0 -1
  547. package/dist/mcp/handlers/list-tasks.d.ts +0 -22
  548. package/dist/mcp/handlers/list-tasks.d.ts.map +0 -1
  549. package/dist/mcp/handlers/list-tasks.js +0 -42
  550. package/dist/mcp/handlers/list-tasks.js.map +0 -1
  551. package/dist/mcp/handlers/show-task.d.ts +0 -25
  552. package/dist/mcp/handlers/show-task.d.ts.map +0 -1
  553. package/dist/mcp/handlers/show-task.js +0 -43
  554. package/dist/mcp/handlers/show-task.js.map +0 -1
  555. package/dist/mcp/handlers/update-task.d.ts +0 -17
  556. package/dist/mcp/handlers/update-task.d.ts.map +0 -1
  557. package/dist/mcp/handlers/update-task.js +0 -35
  558. package/dist/mcp/handlers/update-task.js.map +0 -1
  559. package/dist/mcp/handlers/validate-task.d.ts +0 -15
  560. package/dist/mcp/handlers/validate-task.d.ts.map +0 -1
  561. package/dist/mcp/handlers/validate-task.js +0 -27
  562. package/dist/mcp/handlers/validate-task.js.map +0 -1
  563. package/dist/mcp/rulebook-config.d.ts +0 -22
  564. package/dist/mcp/rulebook-config.d.ts.map +0 -1
  565. package/dist/mcp/rulebook-config.js +0 -65
  566. package/dist/mcp/rulebook-config.js.map +0 -1
@@ -5,7 +5,7 @@ import { promptProjectConfig, promptSimplifiedConfig, promptMergeStrategy } from
5
5
  import { generateFullAgents } from '../core/generator.js';
6
6
  import { mergeFullAgents } from '../core/merger.js';
7
7
  import { generateWorkflows, generateIDEFiles, generateAICLIFiles, } from '../core/workflow-generator.js';
8
- import { writeFile, createBackup, readFile, fileExists } from '../utils/file-system.js';
8
+ import { writeFile, createBackup } from '../utils/file-system.js';
9
9
  import { existsSync } from 'fs';
10
10
  import { parseRulesIgnore } from '../utils/rulesignore.js';
11
11
  import { installGitHooks } from '../utils/git-hooks.js';
@@ -179,6 +179,10 @@ export async function initCommand(options) {
179
179
  // Save project configuration to .rulebook
180
180
  const { createConfigManager } = await import('../core/config-manager.js');
181
181
  const configManager = createConfigManager(cwd);
182
+ // Migrate old directory structure to new consolidated structure
183
+ const dirMigrationSpinner = ora('Migrating directory structure...').start();
184
+ await configManager.migrateDirectoryStructure(cwd);
185
+ dirMigrationSpinner.succeed('Directory structure migrated');
182
186
  // Auto-detect and enable skills based on project detection (v2.0)
183
187
  let enabledSkills = [];
184
188
  try {
@@ -202,6 +206,8 @@ export async function initCommand(options) {
202
206
  catch {
203
207
  // Skills system not available or error - continue without skills
204
208
  }
209
+ // Load existing config to preserve ralph and memory settings
210
+ const existingConfig = await configManager.loadConfig();
205
211
  await configManager.updateConfig({
206
212
  languages: config.languages,
207
213
  frameworks: config.frameworks,
@@ -210,6 +216,8 @@ export async function initCommand(options) {
210
216
  modular: config.modular ?? true,
211
217
  rulebookDir: config.rulebookDir || 'rulebook',
212
218
  skills: enabledSkills.length > 0 ? { enabled: enabledSkills } : undefined,
219
+ ralph: existingConfig.ralph,
220
+ memory: existingConfig.memory,
213
221
  });
214
222
  // Generate or merge AGENTS.md
215
223
  const agentsPath = path.join(cwd, 'AGENTS.md');
@@ -1155,22 +1163,18 @@ export async function updateCommand(options) {
1155
1163
  console.log(chalk.gray('\nℹ Git hooks were not installed during update. Re-run "rulebook update" later or install them manually if you change your mind.'));
1156
1164
  }
1157
1165
  const agentsPath = path.join(cwd, 'AGENTS.md');
1158
- const rulebookPath = path.join(cwd, '.rulebook');
1166
+ // Load existing config using ConfigManager
1167
+ const { createConfigManager } = await import('../core/config-manager.js');
1168
+ const configManager = createConfigManager(cwd);
1169
+ const existingConfig = await configManager.loadConfig();
1159
1170
  let existingMode;
1160
1171
  let existingLightMode;
1161
- if (await fileExists(rulebookPath)) {
1162
- try {
1163
- const currentConfig = JSON.parse(await readFile(rulebookPath));
1164
- if (currentConfig && (currentConfig.mode === 'minimal' || currentConfig.mode === 'full')) {
1165
- existingMode = currentConfig.mode;
1166
- }
1167
- if (currentConfig && currentConfig.lightMode !== undefined) {
1168
- existingLightMode = currentConfig.lightMode;
1169
- }
1172
+ if (existingConfig) {
1173
+ if (existingConfig && (existingConfig.mode === 'minimal' || existingConfig.mode === 'full')) {
1174
+ existingMode = existingConfig.mode;
1170
1175
  }
1171
- catch {
1172
- existingMode = undefined;
1173
- existingLightMode = undefined;
1176
+ if (existingConfig && existingConfig.lightMode !== undefined) {
1177
+ existingLightMode = existingConfig.lightMode;
1174
1178
  }
1175
1179
  }
1176
1180
  const minimalMode = options.minimal ?? existingMode === 'minimal';
@@ -1341,12 +1345,11 @@ export async function updateCommand(options) {
1341
1345
  }
1342
1346
  }
1343
1347
  }
1344
- // Save project configuration to .rulebook
1345
- const { createConfigManager } = await import('../core/config-manager.js');
1346
- const configManager = createConfigManager(cwd);
1347
- // Load existing config to preserve skills
1348
- const existingConfig = await configManager.loadConfig();
1348
+ // Migration already done via configManager.loadConfig() -> migrateConfig() -> migrateDirectoryStructure()
1349
+ // No need to call it again here
1350
+ // Load existing config to preserve skills and ralph settings (already loaded above)
1349
1351
  const existingSkills = existingConfig.skills?.enabled || [];
1352
+ const existingRalph = existingConfig.ralph;
1350
1353
  // Auto-detect skills based on project detection (v2.0)
1351
1354
  let detectedSkills = [];
1352
1355
  try {
@@ -1385,6 +1388,8 @@ export async function updateCommand(options) {
1385
1388
  modular: config.modular ?? true,
1386
1389
  rulebookDir: config.rulebookDir || 'rulebook',
1387
1390
  skills: detectedSkills.length > 0 ? { enabled: detectedSkills } : undefined,
1391
+ ralph: existingRalph,
1392
+ memory: existingConfig.memory,
1388
1393
  });
1389
1394
  // Migrate flat layout to specs/ subdirectory if needed
1390
1395
  {
@@ -1466,9 +1471,10 @@ export async function updateCommand(options) {
1466
1471
  testRun: 600000,
1467
1472
  },
1468
1473
  ...(existingConfig.memory ? { memory: existingConfig.memory } : {}),
1474
+ ...(existingConfig.ralph ? { ralph: existingConfig.ralph } : {}),
1469
1475
  ...(existingConfig.skills ? { skills: existingConfig.skills } : {}),
1470
1476
  };
1471
- await writeFile(rulebookPath, JSON.stringify(rulebookConfig, null, 2));
1477
+ await configManager.saveConfig(rulebookConfig);
1472
1478
  configSpinner.succeed('.rulebook configuration updated');
1473
1479
  // Auto-setup Claude Code integration (MCP + skills)
1474
1480
  const claudeSpinner = ora('Checking Claude Code integration...').start();
@@ -1491,6 +1497,31 @@ export async function updateCommand(options) {
1491
1497
  catch {
1492
1498
  claudeSpinner.info('Claude Code integration skipped');
1493
1499
  }
1500
+ // Migrate memory directory if old structure exists
1501
+ try {
1502
+ await migrateMemoryDirectory();
1503
+ }
1504
+ catch {
1505
+ // Silently skip if migration fails
1506
+ }
1507
+ // Install plugin in Claude Code
1508
+ try {
1509
+ await setupClaudeCodePlugin();
1510
+ }
1511
+ catch {
1512
+ // Silently skip if plugin installation fails
1513
+ }
1514
+ // Clean up any accidental duplicate directories
1515
+ try {
1516
+ const fsPromises = await import('fs/promises');
1517
+ const accidentalDir = path.join(cwd, '.rulebook', '.rulebook');
1518
+ if (existsSync(accidentalDir)) {
1519
+ await fsPromises.rm(accidentalDir, { recursive: true, force: true });
1520
+ }
1521
+ }
1522
+ catch {
1523
+ // Ignore cleanup errors
1524
+ }
1494
1525
  // Success message
1495
1526
  console.log(chalk.bold.green('\n✅ Update complete!\n'));
1496
1527
  console.log(chalk.white('Updated components:'));
@@ -1931,7 +1962,8 @@ export async function memoryStatsCommand() {
1931
1962
  const sizeMB = (stats.dbSizeBytes / 1024 / 1024).toFixed(2);
1932
1963
  const maxMB = (stats.maxSizeBytes / 1024 / 1024).toFixed(0);
1933
1964
  const usage = stats.usagePercent.toFixed(1);
1934
- const bar = '█'.repeat(Math.floor(stats.usagePercent / 5)) + '░'.repeat(20 - Math.floor(stats.usagePercent / 5));
1965
+ const bar = '█'.repeat(Math.floor(stats.usagePercent / 5)) +
1966
+ '░'.repeat(20 - Math.floor(stats.usagePercent / 5));
1935
1967
  console.log(`\n Memories: ${chalk.cyan(stats.memoryCount)}`);
1936
1968
  console.log(` Sessions: ${chalk.cyan(stats.sessionCount)}`);
1937
1969
  console.log(` DB Size: ${chalk.cyan(sizeMB + ' MB')} / ${maxMB} MB`);
@@ -2011,4 +2043,336 @@ export async function memoryExportCommand(options) {
2011
2043
  process.exit(1);
2012
2044
  }
2013
2045
  }
2046
+ // Ralph Autonomous Loop Commands (v3.0)
2047
+ export async function ralphInitCommand() {
2048
+ const oraModule = await import('ora');
2049
+ const ora = oraModule.default;
2050
+ const spinner = ora('Initializing Ralph autonomous loop...').start();
2051
+ try {
2052
+ const cwd = process.cwd();
2053
+ const { Logger } = await import('../core/logger.js');
2054
+ const { RalphManager } = await import('../core/ralph-manager.js');
2055
+ const { PRDGenerator } = await import('../core/prd-generator.js');
2056
+ const { createConfigManager } = await import('../core/config-manager.js');
2057
+ const logger = new Logger(cwd);
2058
+ const configManager = createConfigManager(cwd);
2059
+ const config = await configManager.loadConfig();
2060
+ // Create managers
2061
+ const ralphManager = new RalphManager(cwd, logger);
2062
+ const prdGenerator = new PRDGenerator(cwd, logger);
2063
+ // Initialize Ralph
2064
+ const maxIterations = config.ralph?.maxIterations || 10;
2065
+ const tool = (config.ralph?.tool || 'claude');
2066
+ await ralphManager.initialize(maxIterations, tool);
2067
+ // Generate PRD from rulebook tasks
2068
+ const prd = await prdGenerator.generatePRD(path.basename(cwd));
2069
+ // Save PRD
2070
+ const prdPath = path.join(cwd, '.rulebook', 'ralph', 'prd.json');
2071
+ await writeFile(prdPath, JSON.stringify(prd, null, 2));
2072
+ spinner.succeed(`Ralph initialized: ${prd.userStories.length} user stories loaded`);
2073
+ console.log(`\n 📋 PRD: ${prdPath}`);
2074
+ console.log(` 🔄 Max iterations: ${maxIterations}`);
2075
+ console.log(` 🤖 AI Tool: ${tool}`);
2076
+ console.log(`\n Run: ${chalk.bold('rulebook ralph run')}\n`);
2077
+ }
2078
+ catch (error) {
2079
+ spinner.fail('Ralph initialization failed');
2080
+ console.error(chalk.red(String(error)));
2081
+ process.exit(1);
2082
+ }
2083
+ }
2084
+ export async function ralphRunCommand(options) {
2085
+ const oraModule = await import('ora');
2086
+ const ora = oraModule.default;
2087
+ const spinner = ora('Starting Ralph autonomous loop...').start();
2088
+ try {
2089
+ const cwd = process.cwd();
2090
+ const { Logger } = await import('../core/logger.js');
2091
+ const { RalphManager } = await import('../core/ralph-manager.js');
2092
+ const { createConfigManager } = await import('../core/config-manager.js');
2093
+ const logger = new Logger(cwd);
2094
+ const configManager = createConfigManager(cwd);
2095
+ const config = await configManager.loadConfig();
2096
+ const ralphManager = new RalphManager(cwd, logger);
2097
+ const maxIterations = options.maxIterations || config.ralph?.maxIterations || 10;
2098
+ const tool = options.tool || config.ralph?.tool || 'claude';
2099
+ await ralphManager.initialize(maxIterations, tool);
2100
+ spinner.text = 'Ralph loop running (Ctrl+C to pause)...';
2101
+ let iterationCount = 0;
2102
+ while (ralphManager.canContinue()) {
2103
+ iterationCount++;
2104
+ const task = await ralphManager.getNextTask();
2105
+ if (!task) {
2106
+ break;
2107
+ }
2108
+ spinner.text = `Iteration ${iterationCount}: ${task.title}...`;
2109
+ // In production, would execute agent here
2110
+ // For now, just mark story as complete
2111
+ await ralphManager.markStoryComplete(task.id);
2112
+ // Simulate iteration result (placeholder)
2113
+ const result = {
2114
+ iteration: iterationCount,
2115
+ timestamp: new Date().toISOString(),
2116
+ task_id: task.id,
2117
+ task_title: task.title,
2118
+ status: 'success',
2119
+ ai_tool: tool,
2120
+ execution_time_ms: 5000,
2121
+ quality_checks: { type_check: true, lint: true, tests: true, coverage_met: true },
2122
+ output_summary: `Completed ${task.title}`,
2123
+ git_commit: undefined,
2124
+ learnings: [],
2125
+ errors: [],
2126
+ metadata: { context_loss_count: 0, parsed_completion: true },
2127
+ };
2128
+ await ralphManager.recordIteration(result);
2129
+ }
2130
+ const stats = await ralphManager.getTaskStats();
2131
+ spinner.succeed(`Ralph loop complete: ${stats.completed}/${stats.total} tasks completed`);
2132
+ console.log(`\n ✅ Iterations: ${iterationCount}`);
2133
+ console.log(` 📊 Completed: ${stats.completed}/${stats.total}`);
2134
+ console.log(`\n View history: ${chalk.bold('rulebook ralph history')}\n`);
2135
+ }
2136
+ catch (error) {
2137
+ spinner.fail('Ralph loop failed');
2138
+ console.error(chalk.red(String(error)));
2139
+ process.exit(1);
2140
+ }
2141
+ }
2142
+ export async function ralphStatusCommand() {
2143
+ const oraModule = await import('ora');
2144
+ const ora = oraModule.default;
2145
+ const spinner = ora('Loading Ralph status...').start();
2146
+ try {
2147
+ const cwd = process.cwd();
2148
+ const { Logger } = await import('../core/logger.js');
2149
+ const { RalphManager } = await import('../core/ralph-manager.js');
2150
+ const logger = new Logger(cwd);
2151
+ const ralphManager = new RalphManager(cwd, logger);
2152
+ const status = await ralphManager.getStatus();
2153
+ if (!status) {
2154
+ spinner.fail('Ralph not initialized');
2155
+ console.log(`\n Run: ${chalk.bold('rulebook ralph init')}\n`);
2156
+ return;
2157
+ }
2158
+ spinner.stop();
2159
+ console.log(`\n ${chalk.bold('Ralph Loop Status')}`);
2160
+ console.log(` Iteration: ${status.current_iteration}/${status.max_iterations}`);
2161
+ console.log(` Tasks: ${status.completed_tasks}/${status.total_tasks}`);
2162
+ console.log(` Status: ${status.paused ? chalk.yellow('PAUSED') : chalk.green('RUNNING')}`);
2163
+ console.log(` AI Tool: ${status.tool}`);
2164
+ console.log(` Started: ${new Date(status.started_at).toLocaleString()}`);
2165
+ console.log();
2166
+ }
2167
+ catch (error) {
2168
+ spinner.fail('Failed to load status');
2169
+ console.error(chalk.red(String(error)));
2170
+ process.exit(1);
2171
+ }
2172
+ }
2173
+ export async function ralphHistoryCommand(options) {
2174
+ const oraModule = await import('ora');
2175
+ const ora = oraModule.default;
2176
+ const spinner = ora('Loading iteration history...').start();
2177
+ try {
2178
+ const cwd = process.cwd();
2179
+ const { Logger } = await import('../core/logger.js');
2180
+ const { IterationTracker } = await import('../core/iteration-tracker.js');
2181
+ const logger = new Logger(cwd);
2182
+ const tracker = new IterationTracker(cwd, logger);
2183
+ const limit = options.limit || 10;
2184
+ const history = await tracker.getHistory(limit);
2185
+ if (history.length === 0) {
2186
+ spinner.fail('No iteration history found');
2187
+ return;
2188
+ }
2189
+ spinner.stop();
2190
+ console.log(`\n ${chalk.bold('Recent Iterations')} (${history.length})\n`);
2191
+ for (const iter of history) {
2192
+ const statusIcon = iter.status === 'success'
2193
+ ? chalk.green('✓')
2194
+ : iter.status === 'partial'
2195
+ ? chalk.yellow('◐')
2196
+ : chalk.red('✗');
2197
+ console.log(` ${statusIcon} Iteration ${iter.iteration}: ${iter.task_title}`);
2198
+ console.log(` Status: ${iter.status} | Duration: ${(iter.duration_ms || 0) / 1000}s`);
2199
+ console.log(` Checks: type=${iter.quality_checks.type_check ? '✓' : '✗'} lint=${iter.quality_checks.lint ? '✓' : '✗'} tests=${iter.quality_checks.tests ? '✓' : '✗'}`);
2200
+ if (iter.git_commit) {
2201
+ console.log(` Commit: ${iter.git_commit}`);
2202
+ }
2203
+ console.log();
2204
+ }
2205
+ // Show statistics
2206
+ const stats = await tracker.getStatistics();
2207
+ console.log(` ${chalk.bold('Statistics')}`);
2208
+ console.log(` Total: ${stats.total_iterations} | Success: ${stats.successful_iterations} | Failed: ${stats.failed_iterations}`);
2209
+ console.log(` Success rate: ${(stats.success_rate * 100).toFixed(1)}%`);
2210
+ console.log(` Avg duration: ${stats.average_duration_ms}ms\n`);
2211
+ }
2212
+ catch (error) {
2213
+ spinner.fail('Failed to load history');
2214
+ console.error(chalk.red(String(error)));
2215
+ process.exit(1);
2216
+ }
2217
+ }
2218
+ export async function ralphPauseCommand() {
2219
+ const oraModule = await import('ora');
2220
+ const ora = oraModule.default;
2221
+ const spinner = ora('Pausing Ralph loop...').start();
2222
+ try {
2223
+ const cwd = process.cwd();
2224
+ const { Logger } = await import('../core/logger.js');
2225
+ const { RalphManager } = await import('../core/ralph-manager.js');
2226
+ const logger = new Logger(cwd);
2227
+ const ralphManager = new RalphManager(cwd, logger);
2228
+ await ralphManager.pause();
2229
+ spinner.succeed('Ralph loop paused');
2230
+ console.log(`\n Resume with: ${chalk.bold('rulebook ralph resume')}\n`);
2231
+ }
2232
+ catch (error) {
2233
+ spinner.fail('Failed to pause');
2234
+ console.error(chalk.red(String(error)));
2235
+ process.exit(1);
2236
+ }
2237
+ }
2238
+ export async function ralphResumeCommand() {
2239
+ const oraModule = await import('ora');
2240
+ const ora = oraModule.default;
2241
+ const spinner = ora('Resuming Ralph loop...').start();
2242
+ try {
2243
+ const cwd = process.cwd();
2244
+ const { Logger } = await import('../core/logger.js');
2245
+ const { RalphManager } = await import('../core/ralph-manager.js');
2246
+ const logger = new Logger(cwd);
2247
+ const ralphManager = new RalphManager(cwd, logger);
2248
+ await ralphManager.resume();
2249
+ spinner.succeed('Ralph loop resumed');
2250
+ console.log(`\n Continue loop: ${chalk.bold('rulebook ralph run')}\n`);
2251
+ }
2252
+ catch (error) {
2253
+ spinner.fail('Failed to resume');
2254
+ console.error(chalk.red(String(error)));
2255
+ process.exit(1);
2256
+ }
2257
+ }
2258
+ export async function setupClaudeCodePlugin() {
2259
+ const oraModule = await import('ora');
2260
+ const ora = oraModule.default;
2261
+ const spinner = ora('Setting up Claude Code plugin...').start();
2262
+ try {
2263
+ const { readFile } = await import('../utils/file-system.js');
2264
+ const os = await import('os');
2265
+ const fs = await import('fs/promises');
2266
+ const url = await import('url');
2267
+ // Get plugin info from .claude-plugin/plugin.json relative to this module
2268
+ const packageDir = path.dirname(url.fileURLToPath(import.meta.url));
2269
+ const pluginJsonPath = path.join(packageDir, '..', '..', '.claude-plugin', 'plugin.json');
2270
+ const pluginJson = JSON.parse(await readFile(pluginJsonPath));
2271
+ // Get Claude Code plugins directory
2272
+ const homeDir = os.homedir();
2273
+ const pluginsDir = path.join(homeDir, '.claude', 'plugins');
2274
+ const installCountsPath = path.join(pluginsDir, 'install-counts-cache.json');
2275
+ const installedPluginsPath = path.join(pluginsDir, 'installed_plugins.json');
2276
+ // Create plugins directory if it doesn't exist
2277
+ await fs.mkdir(pluginsDir, { recursive: true });
2278
+ // Load or create installed_plugins.json
2279
+ let installedPlugins = {
2280
+ version: 2,
2281
+ plugins: {},
2282
+ };
2283
+ if (existsSync(installedPluginsPath)) {
2284
+ const content = await readFile(installedPluginsPath);
2285
+ installedPlugins = JSON.parse(content);
2286
+ }
2287
+ // Add rulebook plugin
2288
+ const pluginKey = `rulebook@hivehub`;
2289
+ const version = pluginJson.version || '3.2.0';
2290
+ const installPath = path.join(pluginsDir, 'cache', 'hivehub', 'rulebook', version);
2291
+ if (!installedPlugins.plugins[pluginKey]) {
2292
+ installedPlugins.plugins[pluginKey] = [];
2293
+ }
2294
+ // Check if already installed
2295
+ const existing = installedPlugins.plugins[pluginKey].find((p) => p.version === version);
2296
+ if (!existing) {
2297
+ installedPlugins.plugins[pluginKey].push({
2298
+ scope: 'user',
2299
+ installPath: installPath,
2300
+ version: version,
2301
+ installedAt: new Date().toISOString(),
2302
+ lastUpdated: new Date().toISOString(),
2303
+ });
2304
+ }
2305
+ // Save installed_plugins.json
2306
+ await fs.writeFile(installedPluginsPath, JSON.stringify(installedPlugins, null, 2));
2307
+ // Update install-counts-cache.json
2308
+ let installCounts = {};
2309
+ if (existsSync(installCountsPath)) {
2310
+ const content = await readFile(installCountsPath);
2311
+ installCounts = JSON.parse(content);
2312
+ }
2313
+ installCounts[pluginKey] = (installCounts[pluginKey] || 0) + 1;
2314
+ await fs.writeFile(installCountsPath, JSON.stringify(installCounts, null, 2));
2315
+ spinner.succeed('Claude Code plugin installed');
2316
+ console.log(`\n ${chalk.green('✓')} Plugin: ${pluginKey} v${version}`);
2317
+ console.log(` ${chalk.gray('Installed to:')} ${installPath}`);
2318
+ console.log(`\n ${chalk.blue('Note:')} Restart Claude Code to load the plugin.\n`);
2319
+ }
2320
+ catch (error) {
2321
+ spinner.fail('Failed to install plugin');
2322
+ console.error(chalk.red(String(error)));
2323
+ process.exit(1);
2324
+ }
2325
+ }
2326
+ export async function migrateMemoryDirectory() {
2327
+ const oraModule = await import('ora');
2328
+ const ora = oraModule.default;
2329
+ const spinner = ora('Migrating memory directory structure...').start();
2330
+ try {
2331
+ const { createConfigManager } = await import('../core/config-manager.js');
2332
+ const fs = await import('fs');
2333
+ const fsPromises = fs.promises;
2334
+ const cwd = process.cwd();
2335
+ const oldDir = path.join(cwd, '.rulebook-memory');
2336
+ const rulebookDir = path.join(cwd, '.rulebook');
2337
+ const newDir = path.join(rulebookDir, 'memory');
2338
+ // Check if old directory exists
2339
+ if (!existsSync(oldDir)) {
2340
+ spinner.info('No old memory directory found (.rulebook-memory)');
2341
+ return;
2342
+ }
2343
+ // Create .rulebook directory if it doesn't exist
2344
+ if (!existsSync(rulebookDir)) {
2345
+ await fsPromises.mkdir(rulebookDir, { recursive: true });
2346
+ }
2347
+ // Create memory subdirectory
2348
+ await fsPromises.mkdir(newDir, { recursive: true });
2349
+ // Copy files from old to new
2350
+ const files = await fsPromises.readdir(oldDir);
2351
+ for (const file of files) {
2352
+ const oldPath = path.join(oldDir, file);
2353
+ const newPath = path.join(newDir, file);
2354
+ await fsPromises.copyFile(oldPath, newPath);
2355
+ }
2356
+ // Remove old directory
2357
+ await fsPromises.rm(oldDir, { recursive: true, force: true });
2358
+ // Update config to use new path
2359
+ const configManager = createConfigManager(cwd);
2360
+ const existingConfig = await configManager.loadConfig();
2361
+ if (existingConfig.memory) {
2362
+ existingConfig.memory.dbPath = '.rulebook/memory/memory.db';
2363
+ }
2364
+ await configManager.updateConfig(existingConfig);
2365
+ spinner.succeed('Memory directory migrated');
2366
+ console.log(`\n ${chalk.green('✓')} Migrated to: ${newDir}`);
2367
+ console.log(` ${chalk.gray('Old directory removed: .rulebook-memory')}\n`);
2368
+ }
2369
+ catch (error) {
2370
+ const oraModule = await import('ora');
2371
+ const ora = oraModule.default;
2372
+ const spinner2 = ora();
2373
+ spinner2.fail('Failed to migrate memory directory');
2374
+ console.error(chalk.red(String(error)));
2375
+ process.exit(1);
2376
+ }
2377
+ }
2014
2378
  //# sourceMappingURL=commands.js.map