@hivehub/rulebook 5.5.1 → 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 (342) 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/claude-settings-manager.d.ts.map +1 -1
  54. package/dist/core/claude-settings-manager.js +9 -3
  55. package/dist/core/claude-settings-manager.js.map +1 -1
  56. package/dist/core/console/cli-bridge.d.ts +113 -0
  57. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  58. package/dist/core/console/cli-bridge.js +1094 -0
  59. package/dist/core/console/cli-bridge.js.map +1 -0
  60. package/dist/core/detect/detector.d.ts +35 -0
  61. package/dist/core/detect/detector.d.ts.map +1 -0
  62. package/dist/core/detect/detector.js +541 -0
  63. package/dist/core/detect/detector.js.map +1 -0
  64. package/dist/core/docs/docs-generator.d.ts +9 -0
  65. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  66. package/dist/core/docs/docs-generator.js +531 -0
  67. package/dist/core/docs/docs-generator.js.map +1 -0
  68. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  69. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  70. package/dist/core/docs/mcp-reference-generator.js +66 -0
  71. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  72. package/dist/core/generators/generator.d.ts +54 -0
  73. package/dist/core/generators/generator.d.ts.map +1 -0
  74. package/dist/core/generators/generator.js +1041 -0
  75. package/dist/core/generators/generator.js.map +1 -0
  76. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  77. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  78. package/dist/core/generators/gitignore-generator.js +307 -0
  79. package/dist/core/generators/gitignore-generator.js.map +1 -0
  80. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  81. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  82. package/dist/core/generators/minimal-scaffolder.js +51 -0
  83. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  84. package/dist/core/generators/rules-generator.d.ts +73 -0
  85. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  86. package/dist/core/generators/rules-generator.js +202 -0
  87. package/dist/core/generators/rules-generator.js.map +1 -0
  88. package/dist/core/generators/workflow-generator.d.ts +15 -0
  89. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  90. package/dist/core/generators/workflow-generator.js +390 -0
  91. package/dist/core/generators/workflow-generator.js.map +1 -0
  92. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  93. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  94. package/dist/core/ide/multi-tool-generator.js +157 -0
  95. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  96. package/dist/core/ide/opencode-generator.d.ts +72 -0
  97. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  98. package/dist/core/ide/opencode-generator.js +450 -0
  99. package/dist/core/ide/opencode-generator.js.map +1 -0
  100. package/dist/core/merger.d.ts +1 -1
  101. package/dist/core/merger.d.ts.map +1 -1
  102. package/dist/core/merger.js +5 -5
  103. package/dist/core/merger.js.map +1 -1
  104. package/dist/core/migrator.d.ts +0 -1
  105. package/dist/core/migrator.d.ts.map +1 -1
  106. package/dist/core/migrator.js +4 -29
  107. package/dist/core/migrator.js.map +1 -1
  108. package/dist/core/quality/coverage-checker.d.ts +14 -0
  109. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  110. package/dist/core/quality/coverage-checker.js +176 -0
  111. package/dist/core/quality/coverage-checker.js.map +1 -0
  112. package/dist/core/quality/dependency-checker.d.ts +21 -0
  113. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  114. package/dist/core/quality/dependency-checker.js +247 -0
  115. package/dist/core/quality/dependency-checker.js.map +1 -0
  116. package/dist/core/quality/doctor.d.ts +19 -0
  117. package/dist/core/quality/doctor.d.ts.map +1 -0
  118. package/dist/core/quality/doctor.js +163 -0
  119. package/dist/core/quality/doctor.js.map +1 -0
  120. package/dist/core/quality/validator.d.ts +21 -0
  121. package/dist/core/quality/validator.d.ts.map +1 -0
  122. package/dist/core/quality/validator.js +177 -0
  123. package/dist/core/quality/validator.js.map +1 -0
  124. package/dist/core/ralph-scripts.d.ts.map +1 -1
  125. package/dist/core/ralph-scripts.js +7 -6
  126. package/dist/core/ralph-scripts.js.map +1 -1
  127. package/dist/core/skills/skills-manager.d.ts +126 -0
  128. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  129. package/dist/core/skills/skills-manager.js +630 -0
  130. package/dist/core/skills/skills-manager.js.map +1 -0
  131. package/dist/core/state/config-manager.d.ts +86 -0
  132. package/dist/core/state/config-manager.d.ts.map +1 -0
  133. package/dist/core/state/config-manager.js +562 -0
  134. package/dist/core/state/config-manager.js.map +1 -0
  135. package/dist/core/state/override-manager.d.ts +23 -0
  136. package/dist/core/state/override-manager.d.ts.map +1 -0
  137. package/dist/core/state/override-manager.js +82 -0
  138. package/dist/core/state/override-manager.js.map +1 -0
  139. package/dist/core/state/state-writer.d.ts +34 -0
  140. package/dist/core/state/state-writer.d.ts.map +1 -0
  141. package/dist/core/state/state-writer.js +78 -0
  142. package/dist/core/state/state-writer.js.map +1 -0
  143. package/dist/core/state/version-bumper.d.ts +19 -0
  144. package/dist/core/state/version-bumper.d.ts.map +1 -0
  145. package/dist/core/state/version-bumper.js +180 -0
  146. package/dist/core/state/version-bumper.js.map +1 -0
  147. package/dist/core/tasks/decision-manager.d.ts +25 -0
  148. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  149. package/dist/core/tasks/decision-manager.js +183 -0
  150. package/dist/core/tasks/decision-manager.js.map +1 -0
  151. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  152. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  153. package/dist/core/tasks/knowledge-manager.js +173 -0
  154. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  155. package/dist/core/tasks/learn-manager.d.ts +27 -0
  156. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  157. package/dist/core/tasks/learn-manager.js +121 -0
  158. package/dist/core/tasks/learn-manager.js.map +1 -0
  159. package/dist/core/tasks/plans-manager.d.ts +46 -0
  160. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  161. package/dist/core/tasks/plans-manager.js +158 -0
  162. package/dist/core/tasks/plans-manager.js.map +1 -0
  163. package/dist/core/tasks/task-manager.d.ts +127 -0
  164. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  165. package/dist/core/tasks/task-manager.js +607 -0
  166. package/dist/core/tasks/task-manager.js.map +1 -0
  167. package/dist/core/workspace/project-worker.d.ts +6 -6
  168. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  169. package/dist/core/workspace/project-worker.js +6 -6
  170. package/dist/core/workspace/project-worker.js.map +1 -1
  171. package/dist/index.d.ts +1 -1
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +19 -176
  174. package/dist/index.js.map +1 -1
  175. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  176. package/dist/mcp/rulebook-server.js +16 -960
  177. package/dist/mcp/rulebook-server.js.map +1 -1
  178. package/dist/memory/file-search.d.ts +43 -0
  179. package/dist/memory/file-search.d.ts.map +1 -0
  180. package/dist/memory/file-search.js +228 -0
  181. package/dist/memory/file-search.js.map +1 -0
  182. package/dist/memory/file-store.d.ts +99 -0
  183. package/dist/memory/file-store.d.ts.map +1 -0
  184. package/dist/memory/file-store.js +615 -0
  185. package/dist/memory/file-store.js.map +1 -0
  186. package/dist/memory/legacy-migrator.d.ts +27 -0
  187. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  188. package/dist/memory/legacy-migrator.js +185 -0
  189. package/dist/memory/legacy-migrator.js.map +1 -0
  190. package/dist/memory/memory-manager.d.ts +25 -24
  191. package/dist/memory/memory-manager.d.ts.map +1 -1
  192. package/dist/memory/memory-manager.js +97 -140
  193. package/dist/memory/memory-manager.js.map +1 -1
  194. package/dist/memory/memory-types.d.ts +1 -1
  195. package/dist/memory/memory-types.d.ts.map +1 -1
  196. package/dist/types.d.ts +8 -119
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/utils/file-system.d.ts +22 -0
  199. package/dist/utils/file-system.d.ts.map +1 -1
  200. package/dist/utils/file-system.js +31 -0
  201. package/dist/utils/file-system.js.map +1 -1
  202. package/dist/utils/git-hooks.d.ts.map +1 -1
  203. package/dist/utils/git-hooks.js +3 -2
  204. package/dist/utils/git-hooks.js.map +1 -1
  205. package/package.json +2 -6
  206. package/templates/agents/context-intelligence.md +50 -52
  207. package/templates/cli/OPENCODE.md +85 -18
  208. package/templates/commands/rulebook-learn-capture.md +41 -48
  209. package/templates/commands/rulebook-learn-list.md +13 -13
  210. package/templates/core/AGENTS_LEAN.md +0 -14
  211. package/templates/hooks/check-context-and-handoff.sh +74 -76
  212. package/templates/hooks/enforce-pre-tool.sh +70 -0
  213. package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
  214. package/templates/hooks/on-compact-reinject.sh +34 -34
  215. package/templates/hooks/resume-from-handoff.sh +61 -61
  216. package/templates/hooks/terse-activate.sh +197 -197
  217. package/templates/hooks/terse-mode-tracker.sh +190 -187
  218. package/templates/ides/OPENCODE.md +63 -0
  219. package/templates/skills/cli/opencode/SKILL.md +82 -28
  220. package/.claude/commands/ralph-config.md +0 -112
  221. package/.claude/commands/ralph-history.md +0 -110
  222. package/.claude/commands/ralph-init.md +0 -72
  223. package/.claude/commands/ralph-pause-resume.md +0 -105
  224. package/.claude/commands/ralph-run.md +0 -101
  225. package/.claude/commands/ralph-status.md +0 -76
  226. package/templates/core/RALPH.md +0 -471
  227. package/templates/frameworks/ANGULAR.md +0 -36
  228. package/templates/frameworks/DJANGO.md +0 -83
  229. package/templates/frameworks/ELECTRON.md +0 -147
  230. package/templates/frameworks/FLASK.md +0 -38
  231. package/templates/frameworks/FLUTTER.md +0 -55
  232. package/templates/frameworks/JQUERY.md +0 -32
  233. package/templates/frameworks/LARAVEL.md +0 -38
  234. package/templates/frameworks/NESTJS.md +0 -43
  235. package/templates/frameworks/NEXTJS.md +0 -127
  236. package/templates/frameworks/NUXT.md +0 -40
  237. package/templates/frameworks/RAILS.md +0 -66
  238. package/templates/frameworks/REACT.md +0 -38
  239. package/templates/frameworks/REACT_NATIVE.md +0 -47
  240. package/templates/frameworks/SPRING.md +0 -39
  241. package/templates/frameworks/SYMFONY.md +0 -36
  242. package/templates/frameworks/VUE.md +0 -36
  243. package/templates/frameworks/ZEND.md +0 -35
  244. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  245. package/templates/hooks/enforce-no-deferred.sh +0 -21
  246. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  247. package/templates/ides/COPILOT.md +0 -37
  248. package/templates/ides/CURSOR.md +0 -43
  249. package/templates/ides/JETBRAINS_AI.md +0 -35
  250. package/templates/ides/REPLIT.md +0 -36
  251. package/templates/ides/TABNINE.md +0 -29
  252. package/templates/ides/VSCODE.md +0 -40
  253. package/templates/ides/WINDSURF.md +0 -36
  254. package/templates/ides/ZED.md +0 -32
  255. package/templates/ides/cursor-mdc/go.mdc +0 -24
  256. package/templates/ides/cursor-mdc/python.mdc +0 -24
  257. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  258. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  259. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  260. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  261. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  262. package/templates/ralph/ralph-history.bat +0 -4
  263. package/templates/ralph/ralph-history.sh +0 -5
  264. package/templates/ralph/ralph-init.bat +0 -5
  265. package/templates/ralph/ralph-init.sh +0 -5
  266. package/templates/ralph/ralph-pause.bat +0 -5
  267. package/templates/ralph/ralph-pause.sh +0 -5
  268. package/templates/ralph/ralph-run.bat +0 -5
  269. package/templates/ralph/ralph-run.sh +0 -5
  270. package/templates/ralph/ralph-status.bat +0 -4
  271. package/templates/ralph/ralph-status.sh +0 -5
  272. package/templates/services/AZURE_BLOB.md +0 -184
  273. package/templates/services/CASSANDRA.md +0 -239
  274. package/templates/services/DATADOG.md +0 -26
  275. package/templates/services/DOCKER.md +0 -124
  276. package/templates/services/DOCKER_COMPOSE.md +0 -168
  277. package/templates/services/DYNAMODB.md +0 -308
  278. package/templates/services/ELASTICSEARCH.md +0 -347
  279. package/templates/services/GCS.md +0 -178
  280. package/templates/services/HELM.md +0 -194
  281. package/templates/services/INFLUXDB.md +0 -265
  282. package/templates/services/KAFKA.md +0 -341
  283. package/templates/services/KUBERNETES.md +0 -208
  284. package/templates/services/MARIADB.md +0 -183
  285. package/templates/services/MEMCACHED.md +0 -242
  286. package/templates/services/MINIO.md +0 -201
  287. package/templates/services/MONGODB.md +0 -268
  288. package/templates/services/MYSQL.md +0 -358
  289. package/templates/services/NEO4J.md +0 -247
  290. package/templates/services/OPENTELEMETRY.md +0 -25
  291. package/templates/services/ORACLE.md +0 -290
  292. package/templates/services/PINO.md +0 -24
  293. package/templates/services/POSTGRESQL.md +0 -326
  294. package/templates/services/PROMETHEUS.md +0 -33
  295. package/templates/services/RABBITMQ.md +0 -286
  296. package/templates/services/REDIS.md +0 -292
  297. package/templates/services/S3.md +0 -298
  298. package/templates/services/SENTRY.md +0 -23
  299. package/templates/services/SQLITE.md +0 -294
  300. package/templates/services/SQLSERVER.md +0 -294
  301. package/templates/services/WINSTON.md +0 -30
  302. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  303. package/templates/skills/frameworks/django/SKILL.md +0 -93
  304. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  305. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  306. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  307. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  308. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  309. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  310. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  311. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  312. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  313. package/templates/skills/frameworks/react/SKILL.md +0 -48
  314. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  315. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  316. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  317. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  318. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  319. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  320. package/templates/skills/services/cassandra/SKILL.md +0 -249
  321. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  322. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  323. package/templates/skills/services/gcs/SKILL.md +0 -188
  324. package/templates/skills/services/influxdb/SKILL.md +0 -275
  325. package/templates/skills/services/kafka/SKILL.md +0 -351
  326. package/templates/skills/services/mariadb/SKILL.md +0 -193
  327. package/templates/skills/services/memcached/SKILL.md +0 -252
  328. package/templates/skills/services/minio/SKILL.md +0 -211
  329. package/templates/skills/services/mongodb/SKILL.md +0 -278
  330. package/templates/skills/services/mysql/SKILL.md +0 -368
  331. package/templates/skills/services/neo4j/SKILL.md +0 -257
  332. package/templates/skills/services/oracle/SKILL.md +0 -300
  333. package/templates/skills/services/postgresql/SKILL.md +0 -336
  334. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  335. package/templates/skills/services/redis/SKILL.md +0 -302
  336. package/templates/skills/services/s3/SKILL.md +0 -308
  337. package/templates/skills/services/sqlite/SKILL.md +0 -304
  338. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  339. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  340. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  341. package/templates/skills/workflows/ralph/install.sh +0 -87
  342. package/templates/skills/workflows/ralph/manifest.json +0 -158
@@ -0,0 +1,86 @@
1
+ import type { RulebookConfig } from '../../types.js';
2
+ export declare class ConfigManager {
3
+ private configPath;
4
+ private configDir;
5
+ private projectRoot;
6
+ private config;
7
+ constructor(projectRoot: string);
8
+ /**
9
+ * Load configuration from .rulebook/rulebook.json file
10
+ */
11
+ loadConfig(): Promise<RulebookConfig>;
12
+ /**
13
+ * Save configuration to .rulebook/rulebook.json file
14
+ */
15
+ saveConfig(config: RulebookConfig): Promise<void>;
16
+ /**
17
+ * Migrate old .rulebook file to new .rulebook/rulebook.json structure
18
+ */
19
+ private migrateOldRulebookFile;
20
+ /**
21
+ * Initialize new configuration with defaults
22
+ */
23
+ initializeConfig(): Promise<RulebookConfig>;
24
+ /**
25
+ * Migrate configuration from older versions
26
+ */
27
+ migrateConfig(config: RulebookConfig): Promise<RulebookConfig>;
28
+ /**
29
+ * Update specific configuration values
30
+ */
31
+ updateConfig(updates: Partial<RulebookConfig>): Promise<RulebookConfig>;
32
+ /**
33
+ * Enable or disable a feature
34
+ */
35
+ toggleFeature(feature: keyof RulebookConfig['features'], enabled: boolean): Promise<RulebookConfig>;
36
+ /**
37
+ * Detect available CLI tools
38
+ */
39
+ detectCLITools(): Promise<string[]>;
40
+ /**
41
+ * Update detected CLI tools in config
42
+ */
43
+ updateCLITools(): Promise<RulebookConfig>;
44
+ /**
45
+ * Get configuration value
46
+ */
47
+ getConfigValue<K extends keyof RulebookConfig>(key: K): Promise<RulebookConfig[K]>;
48
+ /**
49
+ * Check if feature is enabled
50
+ */
51
+ isFeatureEnabled(feature: keyof RulebookConfig['features']): Promise<boolean>;
52
+ /**
53
+ * Get configuration summary
54
+ */
55
+ getConfigSummary(): Promise<{
56
+ version: string;
57
+ projectId: string;
58
+ enabledFeatures: string[];
59
+ coverageThreshold: number;
60
+ cliTools: string[];
61
+ }>;
62
+ /**
63
+ * Migrate old rulebook/ directory into .rulebook/
64
+ * Moves rulebook/specs/ → .rulebook/specs/ and rulebook/tasks/ → .rulebook/tasks/
65
+ * Then removes the now-empty rulebook/ directory
66
+ */
67
+ migrateRulebookDirectory(): Promise<void>;
68
+ /**
69
+ * Migrate old directory structure to new consolidated structure
70
+ * Moves .rulebook-memory/ to .rulebook/memory/ and .rulebook-ralph/ to .rulebook/ralph/
71
+ */
72
+ migrateDirectoryStructure(projectRoot: string): Promise<void>;
73
+ /**
74
+ * Ensure .gitignore has .rulebook entries with specs/ and tasks/ exceptions
75
+ */
76
+ ensureGitignore(): Promise<void>;
77
+ }
78
+ /**
79
+ * Create a new ConfigManager instance
80
+ */
81
+ export declare function createConfigManager(projectRoot: string): ConfigManager;
82
+ /**
83
+ * Get default configuration
84
+ */
85
+ export declare function getDefaultConfig(): RulebookConfig;
86
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/core/state/config-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAmBrD,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA+B;gBAEjC,WAAW,EAAE,MAAM;IAM/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA8B3C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BvD;;OAEG;YACW,sBAAsB;IAiCpC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC;IAsDjD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAuEpE;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ7E;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,EACzC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC;IAc1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBzC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;IAK/C;;OAEG;IACG,cAAc,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKxF;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnF;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAgBF;;;;OAIG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD/C;;;OAGG;IACG,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiFnE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CA6DvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAEtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAuCjD"}
@@ -0,0 +1,562 @@
1
+ import { readFile, writeFile, existsSync, readFileSync } from 'fs';
2
+ import { promisify } from 'util';
3
+ import { join, dirname } from 'path';
4
+ import { randomUUID } from 'crypto';
5
+ import { fileURLToPath } from 'url';
6
+ import { cp, rm, mkdir } from 'fs/promises';
7
+ const readFileAsync = promisify(readFile);
8
+ const writeFileAsync = promisify(writeFile);
9
+ const CONFIG_DIR = '.rulebook';
10
+ const CONFIG_FILE = 'rulebook.json';
11
+ function getPackageVersion() {
12
+ try {
13
+ const __dirname = dirname(fileURLToPath(import.meta.url));
14
+ const packagePath = join(__dirname, '..', '..', '..', 'package.json');
15
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
16
+ return packageJson.version;
17
+ }
18
+ catch {
19
+ return '2.2.0';
20
+ }
21
+ }
22
+ export class ConfigManager {
23
+ configPath;
24
+ configDir;
25
+ projectRoot;
26
+ config = null;
27
+ constructor(projectRoot) {
28
+ this.projectRoot = projectRoot;
29
+ this.configDir = join(projectRoot, CONFIG_DIR);
30
+ this.configPath = join(this.configDir, CONFIG_FILE);
31
+ }
32
+ /**
33
+ * Load configuration from .rulebook/rulebook.json file
34
+ */
35
+ async loadConfig() {
36
+ if (this.config) {
37
+ return this.config;
38
+ }
39
+ // Migrate old .rulebook file to new directory structure if needed
40
+ await this.migrateOldRulebookFile();
41
+ // Migrate old rulebook/ directory into .rulebook/
42
+ await this.migrateRulebookDirectory();
43
+ if (!existsSync(this.configPath)) {
44
+ return await this.initializeConfig();
45
+ }
46
+ try {
47
+ const data = await readFileAsync(this.configPath, 'utf-8');
48
+ const loadedConfig = JSON.parse(data);
49
+ // Migrate config if needed
50
+ const migratedConfig = await this.migrateConfig(loadedConfig);
51
+ this.config = migratedConfig;
52
+ return migratedConfig;
53
+ }
54
+ catch (error) {
55
+ console.warn('Failed to load config, initializing new one:', error);
56
+ return await this.initializeConfig();
57
+ }
58
+ }
59
+ /**
60
+ * Save configuration to .rulebook/rulebook.json file
61
+ */
62
+ async saveConfig(config) {
63
+ try {
64
+ const fsPromises = await import('fs/promises');
65
+ // Check if .rulebook exists as a file (old structure) and remove it
66
+ const oldConfigPath = join(this.projectRoot, '.rulebook');
67
+ if (existsSync(oldConfigPath)) {
68
+ const stats = await fsPromises.stat(oldConfigPath);
69
+ if (stats.isFile()) {
70
+ // It's a file, remove it
71
+ await fsPromises.rm(oldConfigPath, { force: true });
72
+ }
73
+ }
74
+ // Ensure .rulebook directory exists
75
+ await mkdir(this.configDir, { recursive: true });
76
+ const configToSave = {
77
+ ...config,
78
+ updatedAt: new Date().toISOString(),
79
+ };
80
+ await writeFileAsync(this.configPath, JSON.stringify(configToSave, null, 2));
81
+ this.config = configToSave;
82
+ }
83
+ catch (error) {
84
+ throw new Error(`Failed to save config: ${error}`);
85
+ }
86
+ }
87
+ /**
88
+ * Migrate old .rulebook file to new .rulebook/rulebook.json structure
89
+ */
90
+ async migrateOldRulebookFile() {
91
+ const oldConfigPath = join(this.projectRoot, '.rulebook');
92
+ const fsPromises = await import('fs/promises');
93
+ // Check if old .rulebook file exists and is a file (not directory)
94
+ if (!existsSync(oldConfigPath)) {
95
+ return;
96
+ }
97
+ try {
98
+ const stats = await fsPromises.stat(oldConfigPath);
99
+ if (stats.isDirectory()) {
100
+ // Already migrated
101
+ return;
102
+ }
103
+ // Old file exists as a file, migrate it
104
+ const data = await readFileAsync(oldConfigPath, 'utf-8');
105
+ const config = JSON.parse(data);
106
+ // Remove old file first (before creating directory with same name)
107
+ await fsPromises.rm(oldConfigPath, { force: true });
108
+ // Create .rulebook directory
109
+ await mkdir(this.configDir, { recursive: true });
110
+ // Save config to new location
111
+ await this.saveConfig(config);
112
+ }
113
+ catch {
114
+ // Silently skip migration errors - they'll be handled by loadConfig
115
+ }
116
+ }
117
+ /**
118
+ * Initialize new configuration with defaults
119
+ */
120
+ async initializeConfig() {
121
+ const now = new Date().toISOString();
122
+ const projectId = randomUUID();
123
+ const defaultConfig = {
124
+ version: getPackageVersion(),
125
+ installedAt: now,
126
+ updatedAt: now,
127
+ projectId,
128
+ mode: 'full',
129
+ features: {
130
+ watcher: true,
131
+ agent: true,
132
+ logging: true,
133
+ notifications: false,
134
+ dryRun: false,
135
+ gitHooks: false,
136
+ repl: false,
137
+ templates: false,
138
+ context: false,
139
+ health: false,
140
+ plugins: false,
141
+ parallel: false,
142
+ smartContinue: false,
143
+ },
144
+ coverageThreshold: 95,
145
+ language: 'en',
146
+ outputLanguage: 'en',
147
+ cliTools: [],
148
+ maxParallelTasks: 1,
149
+ timeouts: {
150
+ taskExecution: 300000, // 5 minutes
151
+ cliResponse: 60000, // 1 minute
152
+ testRun: 120000, // 2 minutes
153
+ },
154
+ memory: {
155
+ enabled: false,
156
+ dbPath: '.rulebook/memory/memory.db',
157
+ maxSizeBytes: 524288000,
158
+ autoCapture: false,
159
+ vectorDimensions: 256,
160
+ },
161
+ agentsMode: 'lean',
162
+ monorepo: {
163
+ detected: false,
164
+ tool: null,
165
+ packages: [],
166
+ },
167
+ };
168
+ await this.saveConfig(defaultConfig);
169
+ return defaultConfig;
170
+ }
171
+ /**
172
+ * Migrate configuration from older versions
173
+ */
174
+ async migrateConfig(config) {
175
+ const migrated = { ...config };
176
+ // Migrate directory structure from old to new layout
177
+ await this.migrateDirectoryStructure(this.projectRoot);
178
+ // Add missing features with defaults
179
+ const defaultFeatures = {
180
+ watcher: true,
181
+ agent: true,
182
+ logging: true,
183
+ notifications: false,
184
+ dryRun: false,
185
+ gitHooks: false,
186
+ repl: false,
187
+ templates: false,
188
+ context: false,
189
+ health: false,
190
+ plugins: false,
191
+ parallel: false,
192
+ smartContinue: false,
193
+ };
194
+ migrated.features = { ...defaultFeatures, ...migrated.features };
195
+ if (!migrated.mode) {
196
+ migrated.mode = 'full';
197
+ }
198
+ // Add missing top-level properties
199
+ if (!migrated.outputLanguage) {
200
+ migrated.outputLanguage = migrated.language || 'en';
201
+ }
202
+ if (!migrated.maxParallelTasks) {
203
+ migrated.maxParallelTasks = 1;
204
+ }
205
+ if (!migrated.timeouts) {
206
+ migrated.timeouts = {
207
+ taskExecution: 300000,
208
+ cliResponse: 60000,
209
+ testRun: 120000,
210
+ };
211
+ }
212
+ // Add memory config with defaults (disabled by default to save resources)
213
+ if (!migrated.memory) {
214
+ migrated.memory = {
215
+ enabled: false,
216
+ dbPath: '.rulebook/memory/memory.db',
217
+ maxSizeBytes: 524288000,
218
+ autoCapture: false,
219
+ vectorDimensions: 256,
220
+ };
221
+ }
222
+ else {
223
+ // Preserve existing memory.enabled — don't force it
224
+ if (!migrated.memory.dbPath)
225
+ migrated.memory.dbPath = '.rulebook/memory/memory.db';
226
+ if (!migrated.memory.maxSizeBytes)
227
+ migrated.memory.maxSizeBytes = 524288000;
228
+ if (migrated.memory.autoCapture === undefined)
229
+ migrated.memory.autoCapture = false;
230
+ if (!migrated.memory.vectorDimensions)
231
+ migrated.memory.vectorDimensions = 256;
232
+ }
233
+ // v4 migration: ensure .rulebook/scripts/ dir is noted in config
234
+ // Scripts dir will be populated on next init/update
235
+ // No config changes needed — scripts are filesystem-only
236
+ // Update version
237
+ migrated.version = getPackageVersion();
238
+ return migrated;
239
+ }
240
+ /**
241
+ * Update specific configuration values
242
+ */
243
+ async updateConfig(updates) {
244
+ const currentConfig = await this.loadConfig();
245
+ const updatedConfig = { ...currentConfig, ...updates };
246
+ await this.saveConfig(updatedConfig);
247
+ return updatedConfig;
248
+ }
249
+ /**
250
+ * Enable or disable a feature
251
+ */
252
+ async toggleFeature(feature, enabled) {
253
+ const currentConfig = await this.loadConfig();
254
+ const updatedConfig = {
255
+ ...currentConfig,
256
+ features: {
257
+ ...currentConfig.features,
258
+ [feature]: enabled,
259
+ },
260
+ };
261
+ await this.saveConfig(updatedConfig);
262
+ return updatedConfig;
263
+ }
264
+ /**
265
+ * Detect available CLI tools
266
+ */
267
+ async detectCLITools() {
268
+ const { execa } = await import('execa');
269
+ const cliTools = [];
270
+ const tools = ['cursor-agent', 'claude-code', 'gemini-cli', 'opencode'];
271
+ for (const tool of tools) {
272
+ try {
273
+ await execa(tool, ['--version'], { timeout: 5000 });
274
+ cliTools.push(tool);
275
+ }
276
+ catch {
277
+ // Tool not available
278
+ }
279
+ }
280
+ return cliTools;
281
+ }
282
+ /**
283
+ * Update detected CLI tools in config
284
+ */
285
+ async updateCLITools() {
286
+ const detectedTools = await this.detectCLITools();
287
+ return await this.updateConfig({ cliTools: detectedTools });
288
+ }
289
+ /**
290
+ * Get configuration value
291
+ */
292
+ async getConfigValue(key) {
293
+ const config = await this.loadConfig();
294
+ return config[key];
295
+ }
296
+ /**
297
+ * Check if feature is enabled
298
+ */
299
+ async isFeatureEnabled(feature) {
300
+ const config = await this.loadConfig();
301
+ return config.features[feature];
302
+ }
303
+ /**
304
+ * Get configuration summary
305
+ */
306
+ async getConfigSummary() {
307
+ const config = await this.loadConfig();
308
+ const enabledFeatures = Object.entries(config.features)
309
+ .filter(([, enabled]) => enabled)
310
+ .map(([feature]) => feature);
311
+ return {
312
+ version: config.version,
313
+ projectId: config.projectId,
314
+ enabledFeatures,
315
+ coverageThreshold: config.coverageThreshold,
316
+ cliTools: config.cliTools,
317
+ };
318
+ }
319
+ /**
320
+ * Migrate old rulebook/ directory into .rulebook/
321
+ * Moves rulebook/specs/ → .rulebook/specs/ and rulebook/tasks/ → .rulebook/tasks/
322
+ * Then removes the now-empty rulebook/ directory
323
+ */
324
+ async migrateRulebookDirectory() {
325
+ const fsPromises = await import('fs/promises');
326
+ const oldRulebookDir = join(this.projectRoot, 'rulebook');
327
+ const newRulebookDir = join(this.projectRoot, '.rulebook');
328
+ // Only migrate if old rulebook/ directory exists
329
+ if (!existsSync(oldRulebookDir)) {
330
+ return;
331
+ }
332
+ try {
333
+ const stats = await fsPromises.stat(oldRulebookDir);
334
+ if (!stats.isDirectory()) {
335
+ return;
336
+ }
337
+ }
338
+ catch {
339
+ return;
340
+ }
341
+ try {
342
+ // Ensure .rulebook directory exists
343
+ await mkdir(newRulebookDir, { recursive: true });
344
+ // Migrate specs/
345
+ const oldSpecsDir = join(oldRulebookDir, 'specs');
346
+ const newSpecsDir = join(newRulebookDir, 'specs');
347
+ if (existsSync(oldSpecsDir)) {
348
+ if (!existsSync(newSpecsDir)) {
349
+ await cp(oldSpecsDir, newSpecsDir, { recursive: true });
350
+ }
351
+ await rm(oldSpecsDir, { recursive: true, force: true });
352
+ }
353
+ // Migrate tasks/
354
+ const oldTasksDir = join(oldRulebookDir, 'tasks');
355
+ const newTasksDir = join(newRulebookDir, 'tasks');
356
+ if (existsSync(oldTasksDir)) {
357
+ if (!existsSync(newTasksDir)) {
358
+ await cp(oldTasksDir, newTasksDir, { recursive: true });
359
+ }
360
+ await rm(oldTasksDir, { recursive: true, force: true });
361
+ }
362
+ // Remove empty rulebook/ directory if it's now empty
363
+ try {
364
+ const remaining = await fsPromises.readdir(oldRulebookDir);
365
+ if (remaining.length === 0) {
366
+ await rm(oldRulebookDir, { recursive: true, force: true });
367
+ }
368
+ }
369
+ catch {
370
+ // Ignore errors reading the directory
371
+ }
372
+ }
373
+ catch (error) {
374
+ console.warn(`Rulebook directory migration warning: ${error}`);
375
+ }
376
+ }
377
+ /**
378
+ * Migrate old directory structure to new consolidated structure
379
+ * Moves .rulebook-memory/ to .rulebook/memory/ and .rulebook-ralph/ to .rulebook/ralph/
380
+ */
381
+ async migrateDirectoryStructure(projectRoot) {
382
+ const fsPromises = await import('fs/promises');
383
+ const { mkdir } = fsPromises;
384
+ const oldMemoryDir = join(projectRoot, '.rulebook-memory');
385
+ const oldRalphDir = join(projectRoot, '.rulebook-ralph');
386
+ const newRulebookDir = join(projectRoot, '.rulebook');
387
+ const newMemoryDir = join(newRulebookDir, 'memory');
388
+ const newRalphDir = join(newRulebookDir, 'ralph');
389
+ try {
390
+ // Check if .rulebook exists
391
+ if (existsSync(newRulebookDir)) {
392
+ const stats = await fsPromises.stat(newRulebookDir);
393
+ if (stats.isFile()) {
394
+ // Old .rulebook file exists, remove it
395
+ await fsPromises.rm(newRulebookDir, { force: true });
396
+ }
397
+ else if (stats.isDirectory()) {
398
+ // Already migrated to directory structure, skip migration
399
+ // Clean up accidental subdirectories and exit
400
+ const accidentalDir = join(newRulebookDir, '.rulebook');
401
+ if (existsSync(accidentalDir)) {
402
+ await fsPromises.rm(accidentalDir, { recursive: true, force: true });
403
+ }
404
+ return;
405
+ }
406
+ }
407
+ // Create parent .rulebook directory if needed
408
+ if (!existsSync(newRulebookDir)) {
409
+ await mkdir(newRulebookDir, { recursive: true });
410
+ }
411
+ // Migrate memory directory if it exists (but not if it's already in new location)
412
+ // Also prevent copying .rulebook into itself
413
+ if (existsSync(oldMemoryDir) &&
414
+ oldMemoryDir !== newMemoryDir &&
415
+ !oldMemoryDir.includes(newRulebookDir)) {
416
+ if (!existsSync(newMemoryDir)) {
417
+ await cp(oldMemoryDir, newMemoryDir, { recursive: true });
418
+ }
419
+ // Remove old directory after successful copy
420
+ await rm(oldMemoryDir, { recursive: true, force: true });
421
+ }
422
+ // Migrate ralph directory if it exists (but not if it's already in new location)
423
+ // Also prevent copying .rulebook into itself
424
+ if (existsSync(oldRalphDir) &&
425
+ oldRalphDir !== newRalphDir &&
426
+ !oldRalphDir.includes(newRulebookDir)) {
427
+ if (!existsSync(newRalphDir)) {
428
+ await cp(oldRalphDir, newRalphDir, { recursive: true });
429
+ }
430
+ // Remove old directory after successful copy
431
+ await rm(oldRalphDir, { recursive: true, force: true });
432
+ }
433
+ // Clean up any accidental .rulebook/.rulebook directory
434
+ const accidentalDir = join(newRulebookDir, '.rulebook');
435
+ if (existsSync(accidentalDir)) {
436
+ await rm(accidentalDir, { recursive: true, force: true });
437
+ }
438
+ }
439
+ catch (error) {
440
+ // Log error but don't fail - migration is non-critical
441
+ // Still clean up accidental directories even if there's an error
442
+ try {
443
+ const accidentalDir = join(newRulebookDir, '.rulebook');
444
+ if (existsSync(accidentalDir)) {
445
+ const fsP = await import('fs/promises');
446
+ await fsP.rm(accidentalDir, { recursive: true, force: true });
447
+ }
448
+ }
449
+ catch {
450
+ // Ignore cleanup errors
451
+ }
452
+ console.warn(`Directory migration warning: ${error}`);
453
+ }
454
+ }
455
+ /**
456
+ * Ensure .gitignore has .rulebook entries with specs/ and tasks/ exceptions
457
+ */
458
+ async ensureGitignore() {
459
+ const gitignorePath = join(this.projectRoot, '.gitignore');
460
+ const rulebookBlock = [
461
+ '',
462
+ '# Rulebook - ignore runtime data, keep specs and tasks',
463
+ '/.rulebook/*',
464
+ '!/.rulebook/specs/',
465
+ '!/.rulebook/tasks/',
466
+ '!/.rulebook/tasks/**/*.md',
467
+ '!/.rulebook/rulebook.json',
468
+ ].join('\n');
469
+ try {
470
+ if (existsSync(gitignorePath)) {
471
+ let content = await readFileAsync(gitignorePath, 'utf-8');
472
+ // Already has the correct block with all exceptions
473
+ if (content.includes('!/.rulebook/specs/') &&
474
+ content.includes('!/.rulebook/tasks/**/*.md')) {
475
+ return;
476
+ }
477
+ // Has old-style entry without exceptions — replace it
478
+ if (content.includes('.rulebook')) {
479
+ // Remove old entries (with or without leading /)
480
+ const lines = content.split('\n');
481
+ const filtered = lines.filter((line) => {
482
+ const trimmed = line.trim();
483
+ return (trimmed !== '.rulebook' &&
484
+ trimmed !== '.rulebook/' &&
485
+ trimmed !== '.rulebook/*' &&
486
+ trimmed !== '/.rulebook' &&
487
+ trimmed !== '/.rulebook/' &&
488
+ trimmed !== '/.rulebook/*' &&
489
+ trimmed !== '!.rulebook/specs/' &&
490
+ trimmed !== '!.rulebook/tasks/' &&
491
+ trimmed !== '!.rulebook/tasks/**/*.md' &&
492
+ trimmed !== '!.rulebook/rulebook.json' &&
493
+ trimmed !== '!/.rulebook/specs/' &&
494
+ trimmed !== '!/.rulebook/tasks/' &&
495
+ trimmed !== '!/.rulebook/tasks/**/*.md' &&
496
+ trimmed !== '!/.rulebook/rulebook.json' &&
497
+ trimmed !== '# Rulebook - ignore runtime data, keep specs and tasks');
498
+ });
499
+ content = filtered.join('\n');
500
+ }
501
+ // Append the correct block
502
+ const separator = content.endsWith('\n') ? '' : '\n';
503
+ await writeFileAsync(gitignorePath, content + separator + rulebookBlock + '\n');
504
+ }
505
+ else {
506
+ await writeFileAsync(gitignorePath, rulebookBlock.trimStart() + '\n');
507
+ }
508
+ }
509
+ catch {
510
+ // Non-critical, don't fail init
511
+ }
512
+ }
513
+ }
514
+ /**
515
+ * Create a new ConfigManager instance
516
+ */
517
+ export function createConfigManager(projectRoot) {
518
+ return new ConfigManager(projectRoot);
519
+ }
520
+ /**
521
+ * Get default configuration
522
+ */
523
+ export function getDefaultConfig() {
524
+ const now = new Date().toISOString();
525
+ const projectId = randomUUID();
526
+ return {
527
+ version: getPackageVersion(),
528
+ installedAt: now,
529
+ updatedAt: now,
530
+ projectId,
531
+ mode: 'full',
532
+ features: {
533
+ watcher: true,
534
+ agent: true,
535
+ logging: true,
536
+ notifications: false,
537
+ dryRun: false,
538
+ gitHooks: false,
539
+ repl: false,
540
+ templates: false,
541
+ context: false,
542
+ health: false,
543
+ plugins: false,
544
+ parallel: false,
545
+ smartContinue: false,
546
+ },
547
+ coverageThreshold: 95,
548
+ language: 'en',
549
+ outputLanguage: 'en',
550
+ cliTools: [],
551
+ maxParallelTasks: 1,
552
+ timeouts: {
553
+ taskExecution: 300000,
554
+ cliResponse: 60000,
555
+ testRun: 120000,
556
+ },
557
+ memory: {
558
+ enabled: false,
559
+ },
560
+ };
561
+ }
562
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/state/config-manager.ts"],"names":[],"mappings":"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"}