@hivehub/rulebook 5.5.2 → 5.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/.claude/commands/rulebook-learn-capture.md +41 -48
  2. package/.claude/commands/rulebook-learn-list.md +13 -13
  3. package/README.md +332 -394
  4. package/dist/cli/commands/context-intelligence.d.ts +0 -1
  5. package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
  6. package/dist/cli/commands/context-intelligence.js +12 -33
  7. package/dist/cli/commands/context-intelligence.js.map +1 -1
  8. package/dist/cli/commands/index.d.ts +4 -7
  9. package/dist/cli/commands/index.d.ts.map +1 -1
  10. package/dist/cli/commands/index.js +4 -7
  11. package/dist/cli/commands/index.js.map +1 -1
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +40 -81
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli/commands/mcp.d.ts +0 -1
  16. package/dist/cli/commands/mcp.d.ts.map +1 -1
  17. package/dist/cli/commands/mcp.js +1 -7
  18. package/dist/cli/commands/mcp.js.map +1 -1
  19. package/dist/cli/commands/memory.d.ts +7 -1
  20. package/dist/cli/commands/memory.d.ts.map +1 -1
  21. package/dist/cli/commands/memory.js +51 -57
  22. package/dist/cli/commands/memory.js.map +1 -1
  23. package/dist/cli/commands/misc.d.ts +1 -15
  24. package/dist/cli/commands/misc.d.ts.map +1 -1
  25. package/dist/cli/commands/misc.js +36 -215
  26. package/dist/cli/commands/misc.js.map +1 -1
  27. package/dist/cli/commands/plans.d.ts +0 -6
  28. package/dist/cli/commands/plans.d.ts.map +1 -1
  29. package/dist/cli/commands/plans.js +9 -77
  30. package/dist/cli/commands/plans.js.map +1 -1
  31. package/dist/cli/commands/skills.js +6 -6
  32. package/dist/cli/commands/skills.js.map +1 -1
  33. package/dist/cli/commands/task.js +4 -4
  34. package/dist/cli/commands/task.js.map +1 -1
  35. package/dist/cli/commands/update.d.ts.map +1 -1
  36. package/dist/cli/commands/update.js +122 -52
  37. package/dist/cli/commands/update.js.map +1 -1
  38. package/dist/cli/prompts.d.ts.map +1 -1
  39. package/dist/cli/prompts.js +1 -78
  40. package/dist/cli/prompts.js.map +1 -1
  41. package/dist/core/claude/claude-mcp.d.ts +59 -0
  42. package/dist/core/claude/claude-mcp.d.ts.map +1 -0
  43. package/dist/core/claude/claude-mcp.js +220 -0
  44. package/dist/core/claude/claude-mcp.js.map +1 -0
  45. package/dist/core/claude/claude-md-generator.d.ts +52 -0
  46. package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
  47. package/dist/core/claude/claude-md-generator.js +104 -0
  48. package/dist/core/claude/claude-md-generator.js.map +1 -0
  49. package/dist/core/claude/claude-settings-manager.d.ts +44 -0
  50. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
  51. package/dist/core/claude/claude-settings-manager.js +194 -0
  52. package/dist/core/claude/claude-settings-manager.js.map +1 -0
  53. package/dist/core/console/cli-bridge.d.ts +113 -0
  54. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  55. package/dist/core/console/cli-bridge.js +1094 -0
  56. package/dist/core/console/cli-bridge.js.map +1 -0
  57. package/dist/core/detect/detector.d.ts +35 -0
  58. package/dist/core/detect/detector.d.ts.map +1 -0
  59. package/dist/core/detect/detector.js +541 -0
  60. package/dist/core/detect/detector.js.map +1 -0
  61. package/dist/core/docs/docs-generator.d.ts +9 -0
  62. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  63. package/dist/core/docs/docs-generator.js +531 -0
  64. package/dist/core/docs/docs-generator.js.map +1 -0
  65. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  66. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  67. package/dist/core/docs/mcp-reference-generator.js +66 -0
  68. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  69. package/dist/core/generators/generator.d.ts +54 -0
  70. package/dist/core/generators/generator.d.ts.map +1 -0
  71. package/dist/core/generators/generator.js +1041 -0
  72. package/dist/core/generators/generator.js.map +1 -0
  73. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  74. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  75. package/dist/core/generators/gitignore-generator.js +307 -0
  76. package/dist/core/generators/gitignore-generator.js.map +1 -0
  77. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  78. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  79. package/dist/core/generators/minimal-scaffolder.js +51 -0
  80. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  81. package/dist/core/generators/rules-generator.d.ts +73 -0
  82. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  83. package/dist/core/generators/rules-generator.js +202 -0
  84. package/dist/core/generators/rules-generator.js.map +1 -0
  85. package/dist/core/generators/workflow-generator.d.ts +15 -0
  86. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  87. package/dist/core/generators/workflow-generator.js +390 -0
  88. package/dist/core/generators/workflow-generator.js.map +1 -0
  89. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  90. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  91. package/dist/core/ide/multi-tool-generator.js +157 -0
  92. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  93. package/dist/core/ide/opencode-generator.d.ts +72 -0
  94. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  95. package/dist/core/ide/opencode-generator.js +450 -0
  96. package/dist/core/ide/opencode-generator.js.map +1 -0
  97. package/dist/core/merger.d.ts +1 -1
  98. package/dist/core/merger.d.ts.map +1 -1
  99. package/dist/core/merger.js +5 -5
  100. package/dist/core/merger.js.map +1 -1
  101. package/dist/core/migrator.d.ts +0 -1
  102. package/dist/core/migrator.d.ts.map +1 -1
  103. package/dist/core/migrator.js +4 -29
  104. package/dist/core/migrator.js.map +1 -1
  105. package/dist/core/quality/coverage-checker.d.ts +14 -0
  106. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  107. package/dist/core/quality/coverage-checker.js +176 -0
  108. package/dist/core/quality/coverage-checker.js.map +1 -0
  109. package/dist/core/quality/dependency-checker.d.ts +21 -0
  110. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  111. package/dist/core/quality/dependency-checker.js +247 -0
  112. package/dist/core/quality/dependency-checker.js.map +1 -0
  113. package/dist/core/quality/doctor.d.ts +19 -0
  114. package/dist/core/quality/doctor.d.ts.map +1 -0
  115. package/dist/core/quality/doctor.js +163 -0
  116. package/dist/core/quality/doctor.js.map +1 -0
  117. package/dist/core/quality/validator.d.ts +21 -0
  118. package/dist/core/quality/validator.d.ts.map +1 -0
  119. package/dist/core/quality/validator.js +177 -0
  120. package/dist/core/quality/validator.js.map +1 -0
  121. package/dist/core/skills/skills-manager.d.ts +126 -0
  122. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  123. package/dist/core/skills/skills-manager.js +630 -0
  124. package/dist/core/skills/skills-manager.js.map +1 -0
  125. package/dist/core/state/config-manager.d.ts +86 -0
  126. package/dist/core/state/config-manager.d.ts.map +1 -0
  127. package/dist/core/state/config-manager.js +562 -0
  128. package/dist/core/state/config-manager.js.map +1 -0
  129. package/dist/core/state/override-manager.d.ts +23 -0
  130. package/dist/core/state/override-manager.d.ts.map +1 -0
  131. package/dist/core/state/override-manager.js +82 -0
  132. package/dist/core/state/override-manager.js.map +1 -0
  133. package/dist/core/state/state-writer.d.ts +34 -0
  134. package/dist/core/state/state-writer.d.ts.map +1 -0
  135. package/dist/core/state/state-writer.js +78 -0
  136. package/dist/core/state/state-writer.js.map +1 -0
  137. package/dist/core/state/version-bumper.d.ts +19 -0
  138. package/dist/core/state/version-bumper.d.ts.map +1 -0
  139. package/dist/core/state/version-bumper.js +180 -0
  140. package/dist/core/state/version-bumper.js.map +1 -0
  141. package/dist/core/tasks/decision-manager.d.ts +25 -0
  142. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  143. package/dist/core/tasks/decision-manager.js +183 -0
  144. package/dist/core/tasks/decision-manager.js.map +1 -0
  145. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  146. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  147. package/dist/core/tasks/knowledge-manager.js +173 -0
  148. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  149. package/dist/core/tasks/learn-manager.d.ts +27 -0
  150. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  151. package/dist/core/tasks/learn-manager.js +121 -0
  152. package/dist/core/tasks/learn-manager.js.map +1 -0
  153. package/dist/core/tasks/plans-manager.d.ts +46 -0
  154. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  155. package/dist/core/tasks/plans-manager.js +158 -0
  156. package/dist/core/tasks/plans-manager.js.map +1 -0
  157. package/dist/core/tasks/task-manager.d.ts +127 -0
  158. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  159. package/dist/core/tasks/task-manager.js +607 -0
  160. package/dist/core/tasks/task-manager.js.map +1 -0
  161. package/dist/core/workspace/project-worker.d.ts +6 -6
  162. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  163. package/dist/core/workspace/project-worker.js +6 -6
  164. package/dist/core/workspace/project-worker.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +19 -176
  168. package/dist/index.js.map +1 -1
  169. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  170. package/dist/mcp/rulebook-server.js +16 -960
  171. package/dist/mcp/rulebook-server.js.map +1 -1
  172. package/dist/memory/file-search.d.ts +43 -0
  173. package/dist/memory/file-search.d.ts.map +1 -0
  174. package/dist/memory/file-search.js +228 -0
  175. package/dist/memory/file-search.js.map +1 -0
  176. package/dist/memory/file-store.d.ts +99 -0
  177. package/dist/memory/file-store.d.ts.map +1 -0
  178. package/dist/memory/file-store.js +615 -0
  179. package/dist/memory/file-store.js.map +1 -0
  180. package/dist/memory/legacy-migrator.d.ts +27 -0
  181. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  182. package/dist/memory/legacy-migrator.js +185 -0
  183. package/dist/memory/legacy-migrator.js.map +1 -0
  184. package/dist/memory/memory-manager.d.ts +25 -24
  185. package/dist/memory/memory-manager.d.ts.map +1 -1
  186. package/dist/memory/memory-manager.js +97 -140
  187. package/dist/memory/memory-manager.js.map +1 -1
  188. package/dist/memory/memory-types.d.ts +1 -1
  189. package/dist/memory/memory-types.d.ts.map +1 -1
  190. package/dist/types.d.ts +8 -119
  191. package/dist/types.d.ts.map +1 -1
  192. package/package.json +1 -6
  193. package/templates/agents/context-intelligence.md +50 -52
  194. package/templates/cli/OPENCODE.md +85 -18
  195. package/templates/commands/rulebook-learn-capture.md +41 -48
  196. package/templates/commands/rulebook-learn-list.md +13 -13
  197. package/templates/core/AGENTS_LEAN.md +0 -14
  198. package/templates/hooks/check-context-and-handoff.sh +8 -10
  199. package/templates/hooks/enforce-pre-tool.sh +70 -0
  200. package/templates/hooks/terse-mode-tracker.sh +146 -143
  201. package/templates/ides/OPENCODE.md +63 -0
  202. package/templates/skills/cli/opencode/SKILL.md +82 -28
  203. package/.claude/commands/ralph-config.md +0 -112
  204. package/.claude/commands/ralph-history.md +0 -110
  205. package/.claude/commands/ralph-init.md +0 -72
  206. package/.claude/commands/ralph-pause-resume.md +0 -105
  207. package/.claude/commands/ralph-run.md +0 -101
  208. package/.claude/commands/ralph-status.md +0 -76
  209. package/templates/core/RALPH.md +0 -471
  210. package/templates/frameworks/ANGULAR.md +0 -36
  211. package/templates/frameworks/DJANGO.md +0 -83
  212. package/templates/frameworks/ELECTRON.md +0 -147
  213. package/templates/frameworks/FLASK.md +0 -38
  214. package/templates/frameworks/FLUTTER.md +0 -55
  215. package/templates/frameworks/JQUERY.md +0 -32
  216. package/templates/frameworks/LARAVEL.md +0 -38
  217. package/templates/frameworks/NESTJS.md +0 -43
  218. package/templates/frameworks/NEXTJS.md +0 -127
  219. package/templates/frameworks/NUXT.md +0 -40
  220. package/templates/frameworks/RAILS.md +0 -66
  221. package/templates/frameworks/REACT.md +0 -38
  222. package/templates/frameworks/REACT_NATIVE.md +0 -47
  223. package/templates/frameworks/SPRING.md +0 -39
  224. package/templates/frameworks/SYMFONY.md +0 -36
  225. package/templates/frameworks/VUE.md +0 -36
  226. package/templates/frameworks/ZEND.md +0 -35
  227. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  228. package/templates/hooks/enforce-no-deferred.sh +0 -21
  229. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  230. package/templates/ides/COPILOT.md +0 -37
  231. package/templates/ides/CURSOR.md +0 -43
  232. package/templates/ides/JETBRAINS_AI.md +0 -35
  233. package/templates/ides/REPLIT.md +0 -36
  234. package/templates/ides/TABNINE.md +0 -29
  235. package/templates/ides/VSCODE.md +0 -40
  236. package/templates/ides/WINDSURF.md +0 -36
  237. package/templates/ides/ZED.md +0 -32
  238. package/templates/ides/cursor-mdc/go.mdc +0 -24
  239. package/templates/ides/cursor-mdc/python.mdc +0 -24
  240. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  241. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  242. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  243. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  244. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  245. package/templates/ralph/ralph-history.bat +0 -4
  246. package/templates/ralph/ralph-history.sh +0 -5
  247. package/templates/ralph/ralph-init.bat +0 -5
  248. package/templates/ralph/ralph-init.sh +0 -5
  249. package/templates/ralph/ralph-pause.bat +0 -5
  250. package/templates/ralph/ralph-pause.sh +0 -5
  251. package/templates/ralph/ralph-run.bat +0 -5
  252. package/templates/ralph/ralph-run.sh +0 -5
  253. package/templates/ralph/ralph-status.bat +0 -4
  254. package/templates/ralph/ralph-status.sh +0 -5
  255. package/templates/services/AZURE_BLOB.md +0 -184
  256. package/templates/services/CASSANDRA.md +0 -239
  257. package/templates/services/DATADOG.md +0 -26
  258. package/templates/services/DOCKER.md +0 -124
  259. package/templates/services/DOCKER_COMPOSE.md +0 -168
  260. package/templates/services/DYNAMODB.md +0 -308
  261. package/templates/services/ELASTICSEARCH.md +0 -347
  262. package/templates/services/GCS.md +0 -178
  263. package/templates/services/HELM.md +0 -194
  264. package/templates/services/INFLUXDB.md +0 -265
  265. package/templates/services/KAFKA.md +0 -341
  266. package/templates/services/KUBERNETES.md +0 -208
  267. package/templates/services/MARIADB.md +0 -183
  268. package/templates/services/MEMCACHED.md +0 -242
  269. package/templates/services/MINIO.md +0 -201
  270. package/templates/services/MONGODB.md +0 -268
  271. package/templates/services/MYSQL.md +0 -358
  272. package/templates/services/NEO4J.md +0 -247
  273. package/templates/services/OPENTELEMETRY.md +0 -25
  274. package/templates/services/ORACLE.md +0 -290
  275. package/templates/services/PINO.md +0 -24
  276. package/templates/services/POSTGRESQL.md +0 -326
  277. package/templates/services/PROMETHEUS.md +0 -33
  278. package/templates/services/RABBITMQ.md +0 -286
  279. package/templates/services/REDIS.md +0 -292
  280. package/templates/services/S3.md +0 -298
  281. package/templates/services/SENTRY.md +0 -23
  282. package/templates/services/SQLITE.md +0 -294
  283. package/templates/services/SQLSERVER.md +0 -294
  284. package/templates/services/WINSTON.md +0 -30
  285. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  286. package/templates/skills/frameworks/django/SKILL.md +0 -93
  287. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  288. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  289. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  290. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  291. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  292. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  293. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  294. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  295. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  296. package/templates/skills/frameworks/react/SKILL.md +0 -48
  297. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  298. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  299. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  300. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  301. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  302. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  303. package/templates/skills/services/cassandra/SKILL.md +0 -249
  304. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  305. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  306. package/templates/skills/services/gcs/SKILL.md +0 -188
  307. package/templates/skills/services/influxdb/SKILL.md +0 -275
  308. package/templates/skills/services/kafka/SKILL.md +0 -351
  309. package/templates/skills/services/mariadb/SKILL.md +0 -193
  310. package/templates/skills/services/memcached/SKILL.md +0 -252
  311. package/templates/skills/services/minio/SKILL.md +0 -211
  312. package/templates/skills/services/mongodb/SKILL.md +0 -278
  313. package/templates/skills/services/mysql/SKILL.md +0 -368
  314. package/templates/skills/services/neo4j/SKILL.md +0 -257
  315. package/templates/skills/services/oracle/SKILL.md +0 -300
  316. package/templates/skills/services/postgresql/SKILL.md +0 -336
  317. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  318. package/templates/skills/services/redis/SKILL.md +0 -302
  319. package/templates/skills/services/s3/SKILL.md +0 -308
  320. package/templates/skills/services/sqlite/SKILL.md +0 -304
  321. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  322. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  323. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  324. package/templates/skills/workflows/ralph/install.sh +0 -87
  325. package/templates/skills/workflows/ralph/manifest.json +0 -158
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Get path to AGENTS.override.md in the project root.
3
+ */
4
+ export declare function getOverridePath(projectRoot: string): string;
5
+ /**
6
+ * Check if AGENTS.override.md exists.
7
+ */
8
+ export declare function overrideExists(projectRoot: string): boolean;
9
+ /**
10
+ * Read override content, stripping OVERRIDE:START/END markers.
11
+ * Returns empty string if file does not exist or has no custom content.
12
+ */
13
+ export declare function readOverrideContent(projectRoot: string): Promise<string>;
14
+ /**
15
+ * Create AGENTS.override.md from template if it does not already exist.
16
+ * Returns true if file was created, false if it already existed.
17
+ */
18
+ export declare function initOverride(projectRoot: string): Promise<boolean>;
19
+ /**
20
+ * Clear AGENTS.override.md back to the empty template.
21
+ */
22
+ export declare function clearOverride(projectRoot: string): Promise<void>;
23
+ //# sourceMappingURL=override-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"override-manager.d.ts","sourceRoot":"","sources":["../../../src/core/state/override-manager.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB9E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYtE"}
@@ -0,0 +1,82 @@
1
+ import { existsSync } from 'fs';
2
+ import { readFile, writeFile } from 'fs/promises';
3
+ import path from 'path';
4
+ import { fileExists } from '../../utils/file-system.js';
5
+ const OVERRIDE_FILE = 'AGENTS.override.md';
6
+ /**
7
+ * Get path to AGENTS.override.md in the project root.
8
+ */
9
+ export function getOverridePath(projectRoot) {
10
+ return path.join(projectRoot, OVERRIDE_FILE);
11
+ }
12
+ /**
13
+ * Check if AGENTS.override.md exists.
14
+ */
15
+ export function overrideExists(projectRoot) {
16
+ return existsSync(getOverridePath(projectRoot));
17
+ }
18
+ /**
19
+ * Read override content, stripping OVERRIDE:START/END markers.
20
+ * Returns empty string if file does not exist or has no custom content.
21
+ */
22
+ export async function readOverrideContent(projectRoot) {
23
+ const overridePath = getOverridePath(projectRoot);
24
+ if (!existsSync(overridePath))
25
+ return '';
26
+ const raw = await readFile(overridePath, 'utf-8');
27
+ // Strip marker comments — return only actual content between them
28
+ const match = raw.match(/<!-- OVERRIDE:START -->([\s\S]*?)<!-- OVERRIDE:END -->/);
29
+ if (!match)
30
+ return raw.trim();
31
+ const content = match[1].trim();
32
+ // If it still contains only the template placeholder text, treat as empty
33
+ if (content.includes('This file contains project-specific directives') &&
34
+ !content.split('\n').some((line) => line.startsWith('- ') && !line.includes('**Example'))) {
35
+ return '';
36
+ }
37
+ return content;
38
+ }
39
+ /**
40
+ * Create AGENTS.override.md from template if it does not already exist.
41
+ * Returns true if file was created, false if it already existed.
42
+ */
43
+ export async function initOverride(projectRoot) {
44
+ const overridePath = getOverridePath(projectRoot);
45
+ if (existsSync(overridePath))
46
+ return false;
47
+ const templatePath = path.join(path.dirname(path.dirname(new URL(import.meta.url).pathname)), 'templates', 'core', 'AGENTS_OVERRIDE.md');
48
+ let templateContent = '';
49
+ if (await fileExists(templatePath)) {
50
+ templateContent = await readFile(templatePath, 'utf-8');
51
+ }
52
+ else {
53
+ templateContent = [
54
+ '<!-- OVERRIDE:START -->',
55
+ '# Project-Specific Overrides',
56
+ '',
57
+ 'Add your custom rules and team conventions here.',
58
+ 'This file is never overwritten by `rulebook init` or `rulebook update`.',
59
+ '<!-- OVERRIDE:END -->',
60
+ '',
61
+ ].join('\n');
62
+ }
63
+ await writeFile(overridePath, templateContent);
64
+ return true;
65
+ }
66
+ /**
67
+ * Clear AGENTS.override.md back to the empty template.
68
+ */
69
+ export async function clearOverride(projectRoot) {
70
+ const overridePath = getOverridePath(projectRoot);
71
+ const emptyContent = [
72
+ '<!-- OVERRIDE:START -->',
73
+ '# Project-Specific Overrides',
74
+ '',
75
+ 'Add your custom rules and team conventions here.',
76
+ 'This file is never overwritten by `rulebook init` or `rulebook update`.',
77
+ '<!-- OVERRIDE:END -->',
78
+ '',
79
+ ].join('\n');
80
+ await writeFile(overridePath, emptyContent);
81
+ }
82
+ //# sourceMappingURL=override-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"override-manager.js","sourceRoot":"","sources":["../../../src/core/state/override-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * v5.3.0 F3 — `.rulebook/STATE.md` auto-regeneration.
3
+ *
4
+ * Renders a short (<40 line) machine-written status file imported by
5
+ * CLAUDE.md via `@.rulebook/STATE.md`. Updated on every task state
6
+ * change. Users can opt out by adding a `manual: true` YAML
7
+ * frontmatter flag.
8
+ */
9
+ export declare const STATE_FILE = ".rulebook/STATE.md";
10
+ export interface StateSnapshot {
11
+ activeTask?: {
12
+ id: string;
13
+ phase: string;
14
+ progress: string;
15
+ } | null;
16
+ lastQualityGate?: string | null;
17
+ healthScore?: number | null;
18
+ updatedAt: string;
19
+ }
20
+ export declare function getStatePath(projectRoot: string): string;
21
+ /**
22
+ * Check whether the STATE.md has `manual: true` frontmatter, meaning
23
+ * the user maintains it by hand and rulebook should not touch it.
24
+ */
25
+ export declare function isManuallyMaintained(projectRoot: string): Promise<boolean>;
26
+ /**
27
+ * Write or overwrite `.rulebook/STATE.md` with the given snapshot.
28
+ * No-op if the file has `manual: true` frontmatter.
29
+ */
30
+ export declare function writeState(projectRoot: string, snapshot: StateSnapshot): Promise<{
31
+ path: string;
32
+ written: boolean;
33
+ }>;
34
+ //# sourceMappingURL=state-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-writer.d.ts","sourceRoot":"","sources":["../../../src/core/state/state-writer.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,eAAO,MAAM,UAAU,uBAAuB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhF;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAU7C"}
@@ -0,0 +1,78 @@
1
+ import path from 'path';
2
+ import { writeFile, fileExists, readFile, ensureDir } from '../../utils/file-system.js';
3
+ /**
4
+ * v5.3.0 F3 — `.rulebook/STATE.md` auto-regeneration.
5
+ *
6
+ * Renders a short (<40 line) machine-written status file imported by
7
+ * CLAUDE.md via `@.rulebook/STATE.md`. Updated on every task state
8
+ * change. Users can opt out by adding a `manual: true` YAML
9
+ * frontmatter flag.
10
+ */
11
+ export const STATE_FILE = '.rulebook/STATE.md';
12
+ export function getStatePath(projectRoot) {
13
+ return path.join(projectRoot, STATE_FILE);
14
+ }
15
+ /**
16
+ * Check whether the STATE.md has `manual: true` frontmatter, meaning
17
+ * the user maintains it by hand and rulebook should not touch it.
18
+ */
19
+ export async function isManuallyMaintained(projectRoot) {
20
+ const target = getStatePath(projectRoot);
21
+ if (!(await fileExists(target)))
22
+ return false;
23
+ const content = await readFile(target);
24
+ return /^---\n[\s\S]*?manual:\s*true/m.test(content);
25
+ }
26
+ /**
27
+ * Write or overwrite `.rulebook/STATE.md` with the given snapshot.
28
+ * No-op if the file has `manual: true` frontmatter.
29
+ */
30
+ export async function writeState(projectRoot, snapshot) {
31
+ if (await isManuallyMaintained(projectRoot)) {
32
+ return { path: getStatePath(projectRoot), written: false };
33
+ }
34
+ const target = getStatePath(projectRoot);
35
+ await ensureDir(path.dirname(target));
36
+ const content = renderState(snapshot);
37
+ await writeFile(target, content);
38
+ return { path: target, written: true };
39
+ }
40
+ function renderState(s) {
41
+ const lines = [
42
+ '<!-- Auto-generated by rulebook v5.3.0. Do not edit — changes will be overwritten. -->',
43
+ '<!-- Add `manual: true` frontmatter to opt out of auto-generation. -->',
44
+ '',
45
+ '# Project state',
46
+ '',
47
+ `**Last updated**: ${s.updatedAt}`,
48
+ '',
49
+ ];
50
+ if (s.activeTask) {
51
+ lines.push(`## Active task`);
52
+ lines.push('');
53
+ lines.push(`- **ID**: \`${s.activeTask.id}\``);
54
+ lines.push(`- **Phase**: ${s.activeTask.phase}`);
55
+ lines.push(`- **Progress**: ${s.activeTask.progress}`);
56
+ lines.push('');
57
+ }
58
+ else {
59
+ lines.push('## Active task');
60
+ lines.push('');
61
+ lines.push('No active task.');
62
+ lines.push('');
63
+ }
64
+ if (s.lastQualityGate) {
65
+ lines.push(`## Quality gate`);
66
+ lines.push('');
67
+ lines.push(`- **Last status**: ${s.lastQualityGate}`);
68
+ lines.push('');
69
+ }
70
+ if (s.healthScore != null) {
71
+ lines.push(`## Health`);
72
+ lines.push('');
73
+ lines.push(`- **Score**: ${s.healthScore}/100`);
74
+ lines.push('');
75
+ }
76
+ return lines.join('\n');
77
+ }
78
+ //# sourceMappingURL=state-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-writer.js","sourceRoot":"","sources":["../../../src/core/state/state-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type BumpType = 'major' | 'minor' | 'patch';
2
+ export interface VersionBumpResult {
3
+ oldVersion: string;
4
+ newVersion: string;
5
+ filesUpdated: string[];
6
+ }
7
+ /**
8
+ * Bump semantic version
9
+ */
10
+ export declare function bumpVersion(version: string, type: BumpType): string;
11
+ /**
12
+ * Get current version from project files
13
+ */
14
+ export declare function getCurrentVersion(projectDir: string): Promise<string | null>;
15
+ /**
16
+ * Bump version across all project files
17
+ */
18
+ export declare function bumpProjectVersion(projectDir: string, bumpType: BumpType): Promise<VersionBumpResult>;
19
+ //# sourceMappingURL=version-bumper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-bumper.d.ts","sourceRoot":"","sources":["../../../src/core/state/version-bumper.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAyBnE;AA+GD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BlF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,iBAAiB,CAAC,CA4C5B"}
@@ -0,0 +1,180 @@
1
+ import { readFile, writeFile, fileExists } from '../../utils/file-system.js';
2
+ import path from 'path';
3
+ import { exec } from 'child_process';
4
+ import { promisify } from 'util';
5
+ const execAsync = promisify(exec);
6
+ /**
7
+ * Bump semantic version
8
+ */
9
+ export function bumpVersion(version, type) {
10
+ const parts = version.replace(/^v/, '').split('.').map(Number);
11
+ if (parts.length !== 3 || parts.some(isNaN)) {
12
+ throw new Error(`Invalid version format: ${version}`);
13
+ }
14
+ let [major, minor, patch] = parts;
15
+ switch (type) {
16
+ case 'major':
17
+ major += 1;
18
+ minor = 0;
19
+ patch = 0;
20
+ break;
21
+ case 'minor':
22
+ minor += 1;
23
+ patch = 0;
24
+ break;
25
+ case 'patch':
26
+ patch += 1;
27
+ break;
28
+ }
29
+ return `${major}.${minor}.${patch}`;
30
+ }
31
+ /**
32
+ * Update version in package.json
33
+ */
34
+ async function updatePackageJson(projectDir, newVersion) {
35
+ const packagePath = path.join(projectDir, 'package.json');
36
+ if (!(await fileExists(packagePath))) {
37
+ return false;
38
+ }
39
+ const content = await readFile(packagePath);
40
+ const pkg = JSON.parse(content);
41
+ pkg.version = newVersion;
42
+ await writeFile(packagePath, JSON.stringify(pkg, null, 2) + '\n');
43
+ return true;
44
+ }
45
+ /**
46
+ * Update version in Cargo.toml
47
+ */
48
+ async function updateCargoToml(projectDir, newVersion) {
49
+ const cargoPath = path.join(projectDir, 'Cargo.toml');
50
+ if (!(await fileExists(cargoPath))) {
51
+ return false;
52
+ }
53
+ let content = await readFile(cargoPath);
54
+ content = content.replace(/^version\s*=\s*"[^"]+"/m, `version = "${newVersion}"`);
55
+ await writeFile(cargoPath, content);
56
+ return true;
57
+ }
58
+ /**
59
+ * Update version in pyproject.toml
60
+ */
61
+ async function updatePyprojectToml(projectDir, newVersion) {
62
+ const pyprojectPath = path.join(projectDir, 'pyproject.toml');
63
+ if (!(await fileExists(pyprojectPath))) {
64
+ return false;
65
+ }
66
+ let content = await readFile(pyprojectPath);
67
+ content = content.replace(/^version\s*=\s*"[^"]+"/m, `version = "${newVersion}"`);
68
+ await writeFile(pyprojectPath, content);
69
+ return true;
70
+ }
71
+ /**
72
+ * Update version in mix.exs (Elixir)
73
+ */
74
+ async function updateMixExs(projectDir, newVersion) {
75
+ const mixPath = path.join(projectDir, 'mix.exs');
76
+ if (!(await fileExists(mixPath))) {
77
+ return false;
78
+ }
79
+ let content = await readFile(mixPath);
80
+ content = content.replace(/version:\s*"[^"]+"/, `version: "${newVersion}"`);
81
+ await writeFile(mixPath, content);
82
+ return true;
83
+ }
84
+ /**
85
+ * Update version in build.gradle.kts (Kotlin)
86
+ */
87
+ async function updateGradleKts(projectDir, newVersion) {
88
+ const gradlePath = path.join(projectDir, 'build.gradle.kts');
89
+ if (!(await fileExists(gradlePath))) {
90
+ return false;
91
+ }
92
+ let content = await readFile(gradlePath);
93
+ content = content.replace(/version\s*=\s*"[^"]+"/, `version = "${newVersion}"`);
94
+ await writeFile(gradlePath, content);
95
+ return true;
96
+ }
97
+ /**
98
+ * Update version in .csproj (C#)
99
+ */
100
+ async function updateCsproj(projectDir, newVersion) {
101
+ const csprojFiles = await execAsync(`find . -maxdepth 2 -name "*.csproj" 2>/dev/null || true`, {
102
+ cwd: projectDir,
103
+ });
104
+ if (!csprojFiles.stdout.trim()) {
105
+ return false;
106
+ }
107
+ const csprojPath = path.join(projectDir, csprojFiles.stdout.trim().split('\n')[0].replace('./', ''));
108
+ let content = await readFile(csprojPath);
109
+ content = content.replace(/<Version>[^<]+<\/Version>/, `<Version>${newVersion}</Version>`);
110
+ await writeFile(csprojPath, content);
111
+ return true;
112
+ }
113
+ /**
114
+ * Get current version from project files
115
+ */
116
+ export async function getCurrentVersion(projectDir) {
117
+ // Check package.json
118
+ const packagePath = path.join(projectDir, 'package.json');
119
+ if (await fileExists(packagePath)) {
120
+ const content = await readFile(packagePath);
121
+ const pkg = JSON.parse(content);
122
+ return pkg.version;
123
+ }
124
+ // Check Cargo.toml
125
+ const cargoPath = path.join(projectDir, 'Cargo.toml');
126
+ if (await fileExists(cargoPath)) {
127
+ const content = await readFile(cargoPath);
128
+ const match = content.match(/^version\s*=\s*"([^"]+)"/m);
129
+ if (match)
130
+ return match[1];
131
+ }
132
+ // Check pyproject.toml
133
+ const pyprojectPath = path.join(projectDir, 'pyproject.toml');
134
+ if (await fileExists(pyprojectPath)) {
135
+ const content = await readFile(pyprojectPath);
136
+ const match = content.match(/^version\s*=\s*"([^"]+)"/m);
137
+ if (match)
138
+ return match[1];
139
+ }
140
+ return null;
141
+ }
142
+ /**
143
+ * Bump version across all project files
144
+ */
145
+ export async function bumpProjectVersion(projectDir, bumpType) {
146
+ const currentVersion = await getCurrentVersion(projectDir);
147
+ if (!currentVersion) {
148
+ throw new Error('Could not find version in project files');
149
+ }
150
+ const newVersion = bumpVersion(currentVersion, bumpType);
151
+ const filesUpdated = [];
152
+ // Update all version files
153
+ if (await updatePackageJson(projectDir, newVersion)) {
154
+ filesUpdated.push('package.json');
155
+ }
156
+ if (await updateCargoToml(projectDir, newVersion)) {
157
+ filesUpdated.push('Cargo.toml');
158
+ }
159
+ if (await updatePyprojectToml(projectDir, newVersion)) {
160
+ filesUpdated.push('pyproject.toml');
161
+ }
162
+ if (await updateMixExs(projectDir, newVersion)) {
163
+ filesUpdated.push('mix.exs');
164
+ }
165
+ if (await updateGradleKts(projectDir, newVersion)) {
166
+ filesUpdated.push('build.gradle.kts');
167
+ }
168
+ if (await updateCsproj(projectDir, newVersion)) {
169
+ filesUpdated.push('*.csproj');
170
+ }
171
+ if (filesUpdated.length === 0) {
172
+ throw new Error('No version files found to update');
173
+ }
174
+ return {
175
+ oldVersion: currentVersion,
176
+ newVersion,
177
+ filesUpdated,
178
+ };
179
+ }
180
+ //# sourceMappingURL=version-bumper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-bumper.js","sourceRoot":"","sources":["../../../src/core/state/version-bumper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Decision, DecisionStatus } from '../../types.js';
2
+ export declare class DecisionManager {
3
+ private decisionsPath;
4
+ constructor(projectRoot: string, rulebookDir?: string);
5
+ private ensureDir;
6
+ getNextId(): Promise<number>;
7
+ create(title: string, options?: {
8
+ context?: string;
9
+ decision?: string;
10
+ alternatives?: string[];
11
+ consequences?: string;
12
+ relatedTasks?: string[];
13
+ status?: DecisionStatus;
14
+ }): Promise<Decision>;
15
+ list(status?: DecisionStatus): Promise<Decision[]>;
16
+ show(id: number): Promise<{
17
+ decision: Decision;
18
+ content: string;
19
+ } | null>;
20
+ update(id: number, fields: Partial<Pick<Decision, 'status' | 'context' | 'decision' | 'consequences' | 'alternatives'>>): Promise<Decision | null>;
21
+ supersede(oldId: number, newId: number): Promise<boolean>;
22
+ getForGenerator(): Promise<string>;
23
+ private renderMarkdown;
24
+ }
25
+ //# sourceMappingURL=decision-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-manager.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/decision-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAe/D,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB;IAIlE,OAAO,CAAC,SAAS;IAMX,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAW5B,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,cAAc,CAAC;KACpB,GACL,OAAO,CAAC,QAAQ,CAAC;IA4Cd,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBlD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAmBzE,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CACb,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC,CACpF,GACA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAkCrB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BzD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAqBxC,OAAO,CAAC,cAAc;CAsBvB"}