@hivehub/rulebook 5.2.1 → 5.3.1

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 (159) hide show
  1. package/.claude/commands/analysis.md +35 -0
  2. package/.claude/commands/rulebook-task-apply.md +7 -25
  3. package/.claude/commands/rulebook-task-archive.md +10 -19
  4. package/.claude/commands/rulebook-task-create.md +1 -1
  5. package/README.md +354 -965
  6. package/dist/cli/commands/analysis.d.ts +8 -0
  7. package/dist/cli/commands/analysis.d.ts.map +1 -0
  8. package/dist/cli/commands/analysis.js +78 -0
  9. package/dist/cli/commands/analysis.js.map +1 -0
  10. package/dist/cli/commands/context-intelligence.d.ts +33 -0
  11. package/dist/cli/commands/context-intelligence.d.ts.map +1 -0
  12. package/dist/cli/commands/context-intelligence.js +181 -0
  13. package/dist/cli/commands/context-intelligence.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +19 -0
  15. package/dist/cli/commands/index.d.ts.map +1 -0
  16. package/dist/cli/commands/index.js +19 -0
  17. package/dist/cli/commands/index.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +15 -0
  19. package/dist/cli/commands/init.d.ts.map +1 -0
  20. package/dist/cli/commands/init.js +608 -0
  21. package/dist/cli/commands/init.js.map +1 -0
  22. package/dist/cli/commands/mcp.d.ts +10 -0
  23. package/dist/cli/commands/mcp.d.ts.map +1 -0
  24. package/dist/cli/commands/mcp.js +128 -0
  25. package/dist/cli/commands/mcp.js.map +1 -0
  26. package/dist/cli/commands/memory.d.ts +24 -0
  27. package/dist/cli/commands/memory.d.ts.map +1 -0
  28. package/dist/cli/commands/memory.js +265 -0
  29. package/dist/cli/commands/memory.js.map +1 -0
  30. package/dist/cli/commands/misc.d.ts +33 -0
  31. package/dist/cli/commands/misc.d.ts.map +1 -0
  32. package/dist/cli/commands/misc.js +576 -0
  33. package/dist/cli/commands/misc.js.map +1 -0
  34. package/dist/cli/commands/plans.d.ts +15 -0
  35. package/dist/cli/commands/plans.d.ts.map +1 -0
  36. package/dist/cli/commands/plans.js +266 -0
  37. package/dist/cli/commands/plans.js.map +1 -0
  38. package/dist/cli/commands/ralph.d.ts +45 -0
  39. package/dist/cli/commands/ralph.d.ts.map +1 -0
  40. package/dist/cli/commands/ralph.js +694 -0
  41. package/dist/cli/commands/ralph.js.map +1 -0
  42. package/dist/cli/commands/skills.d.ts +9 -0
  43. package/dist/cli/commands/skills.d.ts.map +1 -0
  44. package/dist/cli/commands/skills.js +249 -0
  45. package/dist/cli/commands/skills.js.map +1 -0
  46. package/dist/cli/commands/task.d.ts +16 -0
  47. package/dist/cli/commands/task.d.ts.map +1 -0
  48. package/dist/cli/commands/task.js +256 -0
  49. package/dist/cli/commands/task.js.map +1 -0
  50. package/dist/cli/commands/update.d.ts +14 -0
  51. package/dist/cli/commands/update.d.ts.map +1 -0
  52. package/dist/cli/commands/update.js +636 -0
  53. package/dist/cli/commands/update.js.map +1 -0
  54. package/dist/cli/commands/workspace.d.ts +6 -0
  55. package/dist/cli/commands/workspace.d.ts.map +1 -0
  56. package/dist/cli/commands/workspace.js +141 -0
  57. package/dist/cli/commands/workspace.js.map +1 -0
  58. package/dist/core/agent-template-engine.js +28 -28
  59. package/dist/core/analysis-manager.d.ts +56 -0
  60. package/dist/core/analysis-manager.d.ts.map +1 -0
  61. package/dist/core/analysis-manager.js +218 -0
  62. package/dist/core/analysis-manager.js.map +1 -0
  63. package/dist/core/claude-md-generator.d.ts +52 -0
  64. package/dist/core/claude-md-generator.d.ts.map +1 -0
  65. package/dist/core/claude-md-generator.js +104 -0
  66. package/dist/core/claude-md-generator.js.map +1 -0
  67. package/dist/core/claude-settings-manager.d.ts +37 -0
  68. package/dist/core/claude-settings-manager.d.ts.map +1 -0
  69. package/dist/core/claude-settings-manager.js +168 -0
  70. package/dist/core/claude-settings-manager.js.map +1 -0
  71. package/dist/core/compact-context-manager.d.ts +34 -0
  72. package/dist/core/compact-context-manager.d.ts.map +1 -0
  73. package/dist/core/compact-context-manager.js +60 -0
  74. package/dist/core/compact-context-manager.js.map +1 -0
  75. package/dist/core/doctor.d.ts +19 -0
  76. package/dist/core/doctor.d.ts.map +1 -0
  77. package/dist/core/doctor.js +163 -0
  78. package/dist/core/doctor.js.map +1 -0
  79. package/dist/core/generator.js +28 -28
  80. package/dist/core/mcp-reference-generator.d.ts +13 -0
  81. package/dist/core/mcp-reference-generator.d.ts.map +1 -0
  82. package/dist/core/mcp-reference-generator.js +66 -0
  83. package/dist/core/mcp-reference-generator.js.map +1 -0
  84. package/dist/core/merger.d.ts +35 -0
  85. package/dist/core/merger.d.ts.map +1 -1
  86. package/dist/core/merger.js +120 -0
  87. package/dist/core/merger.js.map +1 -1
  88. package/dist/core/prd-generator.d.ts.map +1 -1
  89. package/dist/core/prd-generator.js +7 -1
  90. package/dist/core/prd-generator.js.map +1 -1
  91. package/dist/core/ralph-manager.d.ts.map +1 -1
  92. package/dist/core/ralph-manager.js +17 -0
  93. package/dist/core/ralph-manager.js.map +1 -1
  94. package/dist/core/rules-generator.d.ts +73 -0
  95. package/dist/core/rules-generator.d.ts.map +1 -0
  96. package/dist/core/rules-generator.js +202 -0
  97. package/dist/core/rules-generator.js.map +1 -0
  98. package/dist/core/state-writer.d.ts +35 -0
  99. package/dist/core/state-writer.d.ts.map +1 -0
  100. package/dist/core/state-writer.js +81 -0
  101. package/dist/core/state-writer.js.map +1 -0
  102. package/dist/core/task-manager.d.ts +35 -0
  103. package/dist/core/task-manager.d.ts.map +1 -1
  104. package/dist/core/task-manager.js +135 -38
  105. package/dist/core/task-manager.js.map +1 -1
  106. package/dist/core/telemetry.d.ts +29 -0
  107. package/dist/core/telemetry.d.ts.map +1 -0
  108. package/dist/core/telemetry.js +57 -0
  109. package/dist/core/telemetry.js.map +1 -0
  110. package/dist/core/workflow-generator.d.ts.map +1 -1
  111. package/dist/core/workflow-generator.js +2 -177
  112. package/dist/core/workflow-generator.js.map +1 -1
  113. package/dist/index.js +28 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  116. package/dist/mcp/rulebook-server.js +190 -7
  117. package/dist/mcp/rulebook-server.js.map +1 -1
  118. package/dist/memory/memory-store.js +91 -91
  119. package/dist/types.d.ts +11 -0
  120. package/dist/types.d.ts.map +1 -1
  121. package/dist/utils/gitignore.d.ts +10 -0
  122. package/dist/utils/gitignore.d.ts.map +1 -0
  123. package/dist/utils/gitignore.js +38 -0
  124. package/dist/utils/gitignore.js.map +1 -0
  125. package/package.json +1 -1
  126. package/templates/compact-context/_default.md +23 -0
  127. package/templates/compact-context/cpp.md +26 -0
  128. package/templates/compact-context/go.md +26 -0
  129. package/templates/compact-context/python.md +26 -0
  130. package/templates/compact-context/rust.md +28 -0
  131. package/templates/compact-context/typescript.md +29 -0
  132. package/templates/core/CLAUDE_MD_v2.md +71 -0
  133. package/templates/hooks/check-context-and-handoff.ps1 +50 -0
  134. package/templates/hooks/check-context-and-handoff.sh +69 -0
  135. package/templates/hooks/enforce-mcp-for-tasks.sh +31 -0
  136. package/templates/hooks/enforce-no-deferred.sh +21 -0
  137. package/templates/hooks/enforce-no-shortcuts.sh +31 -0
  138. package/templates/hooks/enforce-team-for-background-agents.ps1 +63 -0
  139. package/templates/hooks/enforce-team-for-background-agents.sh +55 -0
  140. package/templates/hooks/on-compact-reinject.sh +34 -0
  141. package/templates/hooks/resume-from-handoff.ps1 +33 -0
  142. package/templates/hooks/resume-from-handoff.sh +55 -0
  143. package/templates/rules/consult-analysis-before-implementing.md +23 -0
  144. package/templates/rules/cpp.md +46 -0
  145. package/templates/rules/csharp.md +44 -0
  146. package/templates/rules/diagnostic-first.md +39 -0
  147. package/templates/rules/fail-twice-escalate.md +46 -0
  148. package/templates/rules/full-task-no-questions.md +37 -0
  149. package/templates/rules/go.md +40 -0
  150. package/templates/rules/incremental-implementation.md +56 -56
  151. package/templates/rules/java.md +43 -0
  152. package/templates/rules/javascript.md +39 -0
  153. package/templates/rules/multi-agent-teams.md +75 -0
  154. package/templates/rules/python.md +43 -0
  155. package/templates/rules/respect-handoff-trigger.md +41 -0
  156. package/templates/rules/rust.md +40 -0
  157. package/templates/rules/typescript.md +40 -0
  158. package/templates/skills/dev/analysis/SKILL.md +19 -0
  159. package/templates/skills/dev/handoff/SKILL.md +27 -0
@@ -0,0 +1,608 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { detectProject } from '../../core/detector.js';
4
+ import { generateFullAgents } from '../../core/generator.js';
5
+ import { mergeFullAgents, mergeClaudeMd } from '../../core/merger.js';
6
+ import { generateWorkflows, generateIDEFiles, generateAICLIFiles, } from '../../core/workflow-generator.js';
7
+ import { writeFile, ensureDir } from '../../utils/file-system.js';
8
+ import { existsSync } from 'fs';
9
+ import { parseRulesIgnore } from '../../utils/rulesignore.js';
10
+ import { installGitHooks } from '../../utils/git-hooks.js';
11
+ import { scaffoldMinimalProject } from '../../core/minimal-scaffolder.js';
12
+ import path from 'path';
13
+ import { SkillsManager, getDefaultTemplatesPath } from '../../core/skills-manager.js';
14
+ import { WorkspaceManager } from '../../core/workspace/workspace-manager.js';
15
+ const FRAMEWORK_LABELS = {
16
+ nestjs: 'NestJS',
17
+ spring: 'Spring Boot',
18
+ laravel: 'Laravel',
19
+ angular: 'Angular',
20
+ react: 'React',
21
+ vue: 'Vue.js',
22
+ nuxt: 'Nuxt',
23
+ nextjs: 'Next.js',
24
+ django: 'Django',
25
+ rails: 'Ruby on Rails',
26
+ flask: 'Flask',
27
+ symfony: 'Symfony',
28
+ zend: 'Zend Framework',
29
+ jquery: 'jQuery',
30
+ reactnative: 'React Native',
31
+ flutter: 'Flutter',
32
+ electron: 'Electron',
33
+ };
34
+ /**
35
+ * Add sequential-thinking MCP server entry to mcp.json (or .cursor/mcp.json).
36
+ * Non-destructive: skips if already present.
37
+ */
38
+ export async function addSequentialThinkingMcp(cwd) {
39
+ const { readFileSync, writeFileSync, existsSync: fsExists } = await import('fs');
40
+ const { mkdirSync } = await import('fs');
41
+ const seqEntry = {
42
+ command: 'npx',
43
+ args: ['-y', '@modelcontextprotocol/server-sequential-thinking'],
44
+ };
45
+ const candidates = [
46
+ path.join(cwd, 'mcp.json'),
47
+ path.join(cwd, '.cursor', 'mcp.json'),
48
+ path.join(cwd, '.mcp.json'),
49
+ ];
50
+ let mcpPath = candidates.find((p) => fsExists(p)) ?? path.join(cwd, 'mcp.json');
51
+ let mcpConfig = {};
52
+ if (fsExists(mcpPath)) {
53
+ try {
54
+ mcpConfig = JSON.parse(readFileSync(mcpPath, 'utf8'));
55
+ }
56
+ catch {
57
+ mcpConfig = {};
58
+ }
59
+ }
60
+ mcpConfig.mcpServers = mcpConfig.mcpServers ?? {};
61
+ const keys = Object.keys(mcpConfig.mcpServers);
62
+ const alreadyPresent = keys.some((k) => ['sequential-thinking', 'sequential_thinking', 'sequentialThinking'].includes(k));
63
+ if (alreadyPresent)
64
+ return;
65
+ mcpConfig.mcpServers['sequential-thinking'] = seqEntry;
66
+ const dir = path.dirname(mcpPath);
67
+ if (!fsExists(dir))
68
+ mkdirSync(dir, { recursive: true });
69
+ writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2) + '\n');
70
+ }
71
+ export async function initCommand(options) {
72
+ try {
73
+ const cwd = process.cwd();
74
+ console.log(chalk.bold.blue('\n🔍 Rulebook Project Initializer\n'));
75
+ const spinner = ora('Detecting project structure...').start();
76
+ const detection = await detectProject(cwd);
77
+ spinner.succeed('Project detection complete');
78
+ const { assessComplexity } = await import('../../core/complexity-detector.js');
79
+ const complexity = assessComplexity(cwd);
80
+ console.log(chalk.gray(` Complexity: ${complexity.tier.toUpperCase()} (${complexity.metrics.estimatedLoc.toLocaleString()} LOC, ${complexity.metrics.languageCount} languages)`));
81
+ if (detection.languages.length > 0) {
82
+ console.log(chalk.green('\n✓ Detected languages:'));
83
+ for (const lang of detection.languages) {
84
+ console.log(` - ${lang.language} (${(lang.confidence * 100).toFixed(0)}% confidence)`);
85
+ console.log(` Indicators: ${lang.indicators.join(', ')}`);
86
+ }
87
+ }
88
+ if (detection.modules.filter((m) => m.detected).length > 0) {
89
+ console.log(chalk.green('\n✓ Detected modules:'));
90
+ for (const module of detection.modules.filter((m) => m.detected)) {
91
+ console.log(` - ${module.module} (${module.source})`);
92
+ }
93
+ }
94
+ if (detection.monorepo?.detected) {
95
+ const mono = detection.monorepo;
96
+ console.log(chalk.green(`\n✓ Monorepo detected: ${chalk.bold(mono.tool ?? 'manual')}`));
97
+ if (mono.packages.length > 0) {
98
+ console.log(` Packages (${mono.packages.length}): ${mono.packages.slice(0, 5).join(', ')}${mono.packages.length > 5 ? ` +${mono.packages.length - 5} more` : ''}`);
99
+ }
100
+ if (options.package) {
101
+ console.log(chalk.cyan(` → Initializing package: ${options.package}`));
102
+ }
103
+ }
104
+ const seqThinking = detection.modules.find((m) => m.module === 'sequential_thinking');
105
+ if (seqThinking && !seqThinking.detected) {
106
+ console.log(chalk.yellow('\n💡 Tip: Install sequential-thinking MCP for structured problem solving:\n' +
107
+ ' npx @modelcontextprotocol/create-server sequential-thinking\n' +
108
+ ' or add to .mcp.json: { "mcpServers": { "sequential-thinking": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] } } }'));
109
+ }
110
+ const detectedFrameworks = detection.frameworks.filter((f) => f.detected);
111
+ if (detectedFrameworks.length > 0) {
112
+ console.log(chalk.green('\n✓ Detected frameworks:'));
113
+ for (const framework of detectedFrameworks) {
114
+ const languagesLabel = framework.languages.map((lang) => lang.toUpperCase()).join(', ');
115
+ const indicators = framework.indicators.join(', ');
116
+ const label = FRAMEWORK_LABELS[framework.framework] || framework.framework;
117
+ console.log(` - ${label} (${languagesLabel})${indicators ? ` [${indicators}]` : ''}`);
118
+ }
119
+ }
120
+ if (detection.existingAgents) {
121
+ console.log(chalk.yellow(`\n⚠ Found existing AGENTS.md with ${detection.existingAgents.blocks.length} blocks`));
122
+ for (const block of detection.existingAgents.blocks) {
123
+ console.log(` - ${block.name}`);
124
+ }
125
+ }
126
+ const cliMinimal = Boolean(options.minimal);
127
+ const cliLight = Boolean(options.light);
128
+ const cliLean = Boolean(options.lean);
129
+ const config = {
130
+ languages: detection.languages.map((l) => l.language),
131
+ modules: cliMinimal ? [] : detection.modules.filter((m) => m.detected).map((m) => m.module),
132
+ frameworks: detection.frameworks.filter((f) => f.detected).map((f) => f.framework),
133
+ ides: cliMinimal ? [] : ['cursor'],
134
+ projectType: 'application',
135
+ coverageThreshold: 95,
136
+ strictDocs: true,
137
+ generateWorkflows: true,
138
+ includeGitWorkflow: true,
139
+ gitPushMode: 'manual',
140
+ installGitHooks: false,
141
+ minimal: cliMinimal,
142
+ lightMode: cliLight,
143
+ modular: true,
144
+ };
145
+ console.log(chalk.blue('\nAuto-configuring from detection results...'));
146
+ const minimalMode = config.minimal ?? cliMinimal;
147
+ config.minimal = minimalMode;
148
+ config.modules = minimalMode ? [] : config.modules || [];
149
+ config.frameworks = config.frameworks || [];
150
+ config.ides = minimalMode ? [] : config.ides || ['cursor'];
151
+ config.includeGitWorkflow = config.includeGitWorkflow ?? true;
152
+ config.generateWorkflows = config.generateWorkflows ?? true;
153
+ config.modular = config.modular ?? true;
154
+ if (cliLean) {
155
+ config.agentsMode = 'lean';
156
+ }
157
+ let minimalArtifacts = [];
158
+ if (minimalMode) {
159
+ minimalArtifacts = await scaffoldMinimalProject(cwd, {
160
+ projectName: path.basename(cwd),
161
+ description: 'Essential project scaffolding generated by Rulebook minimal mode.',
162
+ license: 'MIT',
163
+ });
164
+ }
165
+ const detectedHookStatus = {
166
+ preCommit: detection.gitHooks?.preCommitExists ?? false,
167
+ prePush: detection.gitHooks?.prePushExists ?? false,
168
+ };
169
+ const hookLanguages = detection.languages.length > 0
170
+ ? detection.languages
171
+ : config.languages.map((language) => ({
172
+ language: language,
173
+ confidence: 1,
174
+ indicators: [],
175
+ }));
176
+ let hooksInstalled = false;
177
+ if (config.installGitHooks) {
178
+ const hookSpinner = ora('Installing Git hooks (pre-commit & pre-push)...').start();
179
+ try {
180
+ await installGitHooks({ languages: hookLanguages, cwd });
181
+ hookSpinner.succeed('Git hooks installed successfully');
182
+ hooksInstalled = true;
183
+ }
184
+ catch (error) {
185
+ hookSpinner.fail('Failed to install Git hooks');
186
+ console.error(chalk.red(' ➤'), error instanceof Error ? error.message : error);
187
+ console.log(chalk.yellow(' ⚠ Skipping automatic hook installation. You can rerun "rulebook init" later to retry or install manually.'));
188
+ }
189
+ }
190
+ else if (!detectedHookStatus.preCommit || !detectedHookStatus.prePush) {
191
+ console.log(chalk.gray('\nℹ Git hooks were not installed automatically. Run "rulebook init" again if you want to add them later.'));
192
+ }
193
+ const gitHooksActive = hooksInstalled || (detectedHookStatus.preCommit && detectedHookStatus.prePush);
194
+ config.installGitHooks = gitHooksActive;
195
+ const rulesIgnore = await parseRulesIgnore(cwd);
196
+ if (rulesIgnore.patterns.length > 0) {
197
+ console.log(chalk.yellow('\n📋 Found .rulesignore with patterns:'));
198
+ for (const pattern of rulesIgnore.patterns) {
199
+ console.log(` - ${pattern}`);
200
+ }
201
+ }
202
+ const { createConfigManager } = await import('../../core/config-manager.js');
203
+ const configManager = createConfigManager(cwd);
204
+ const dirMigrationSpinner = ora('Migrating directory structure...').start();
205
+ await configManager.migrateDirectoryStructure(cwd);
206
+ dirMigrationSpinner.succeed('Directory structure migrated');
207
+ await ensureDir(path.join(cwd, '.rulebook', 'memory'));
208
+ await configManager.ensureGitignore();
209
+ let enabledSkills = [];
210
+ try {
211
+ const skillsManager = new SkillsManager(getDefaultTemplatesPath(), cwd);
212
+ const rulebookConfigForSkills = {
213
+ languages: config.languages,
214
+ frameworks: config.frameworks,
215
+ modules: config.modules,
216
+ services: config.services,
217
+ };
218
+ enabledSkills = await skillsManager.autoDetectSkills(rulebookConfigForSkills);
219
+ if (enabledSkills.length > 0) {
220
+ console.log(chalk.green('\n✓ Auto-detected skills:'));
221
+ for (const skillId of enabledSkills) {
222
+ console.log(chalk.gray(` - ${skillId}`));
223
+ }
224
+ }
225
+ }
226
+ catch {
227
+ // Skills system not available or error - continue without skills
228
+ }
229
+ const existingConfig = await configManager.loadConfig();
230
+ await configManager.updateConfig({
231
+ languages: config.languages,
232
+ frameworks: config.frameworks,
233
+ modules: config.modules,
234
+ services: config.services,
235
+ modular: config.modular ?? true,
236
+ rulebookDir: config.rulebookDir || '.rulebook',
237
+ ...(config.agentsMode ? { agentsMode: config.agentsMode } : {}),
238
+ skills: enabledSkills.length > 0 ? { enabled: enabledSkills } : undefined,
239
+ ralph: existingConfig.ralph,
240
+ memory: existingConfig.memory,
241
+ });
242
+ if (options.package) {
243
+ const packageRoot = path.join(cwd, options.package);
244
+ const { generatePackageAgentsMd } = await import('../../core/generator.js');
245
+ await generatePackageAgentsMd(packageRoot, config, cwd);
246
+ console.log(chalk.green(`\n✅ AGENTS.md generated for package: ${options.package}`));
247
+ return;
248
+ }
249
+ const agentsPath = path.join(cwd, 'AGENTS.md');
250
+ let finalContent;
251
+ if (detection.existingAgents) {
252
+ {
253
+ const { hasFlatLayout, migrateFlatToSpecs } = await import('../../core/migrator.js');
254
+ const rulebookDirForMigration = config.rulebookDir || '.rulebook';
255
+ if (await hasFlatLayout(cwd, rulebookDirForMigration)) {
256
+ const { migratedFiles } = await migrateFlatToSpecs(cwd, rulebookDirForMigration);
257
+ if (migratedFiles.length > 0) {
258
+ console.log(chalk.gray(` Migrated ${migratedFiles.length} file(s) to /${rulebookDirForMigration}/specs/`));
259
+ }
260
+ }
261
+ }
262
+ const mergeSpinner = ora('Merging with existing AGENTS.md...').start();
263
+ finalContent = await mergeFullAgents(detection.existingAgents, config, cwd);
264
+ const { createBackup } = await import('../../utils/file-system.js');
265
+ const backupPath = await createBackup(agentsPath);
266
+ mergeSpinner.succeed(`Backup created: ${path.basename(backupPath)}`);
267
+ }
268
+ else {
269
+ const genSpinner = ora('Generating AGENTS.md...').start();
270
+ finalContent = await generateFullAgents(config, cwd);
271
+ genSpinner.succeed('AGENTS.md generated');
272
+ }
273
+ await writeFile(agentsPath, finalContent);
274
+ console.log(chalk.green(`\n✅ AGENTS.md written to ${agentsPath}`));
275
+ {
276
+ const { installRule, projectRules } = await import('../../core/rule-engine.js');
277
+ const { getTemplatesDir } = await import('../../core/generator.js');
278
+ const templatesDir = getTemplatesDir();
279
+ const tier1Rules = [
280
+ 'no-shortcuts',
281
+ 'git-safety',
282
+ 'sequential-editing',
283
+ 'research-first',
284
+ 'follow-task-sequence',
285
+ 'incremental-implementation',
286
+ ];
287
+ const tier2Rules = [
288
+ 'task-decomposition',
289
+ 'incremental-tests',
290
+ 'no-deferred',
291
+ 'session-workflow',
292
+ ];
293
+ const rulesToInstall = [...tier1Rules];
294
+ if (complexity.recommendations.tier2Rules) {
295
+ rulesToInstall.push(...tier2Rules);
296
+ }
297
+ let installedCount = 0;
298
+ for (const name of rulesToInstall) {
299
+ const result = await installRule(cwd, name, templatesDir);
300
+ if (result)
301
+ installedCount++;
302
+ }
303
+ if (installedCount > 0) {
304
+ console.log(chalk.gray(` • Installed ${installedCount} canonical rules to .rulebook/rules/`));
305
+ }
306
+ const ruleResult = await projectRules(cwd, {
307
+ claudeCode: existsSync(path.join(cwd, '.claude')) || existsSync(path.join(cwd, 'CLAUDE.md')),
308
+ cursor: detection.cursor?.detected,
309
+ gemini: detection.geminiCli?.detected,
310
+ windsurf: detection.windsurf?.detected,
311
+ copilot: detection.githubCopilot?.detected,
312
+ continueDev: detection.continueDev?.detected,
313
+ });
314
+ const totalProjected = ruleResult.claudeCode.length +
315
+ ruleResult.cursor.length +
316
+ ruleResult.gemini.length +
317
+ ruleResult.copilot.length +
318
+ ruleResult.windsurf.length +
319
+ ruleResult.continueDev.length;
320
+ if (totalProjected > 0) {
321
+ console.log(chalk.gray(` • Projected rules to ${totalProjected} tool-specific files`));
322
+ }
323
+ }
324
+ if (detection.cursor?.detected) {
325
+ if (detection.cursor.hasMdcRules) {
326
+ console.log(chalk.gray(' • Cursor .mdc rules updated in .cursor/rules/'));
327
+ }
328
+ else {
329
+ console.log(chalk.gray(' • Cursor .mdc rules generated in .cursor/rules/'));
330
+ }
331
+ }
332
+ if (detection.geminiCli?.detected) {
333
+ console.log(chalk.gray(' • Gemini CLI config generated: GEMINI.md'));
334
+ }
335
+ if (detection.continueDev?.detected) {
336
+ console.log(chalk.gray(' • Continue.dev rules generated in .continue/rules/'));
337
+ }
338
+ if (detection.windsurf?.detected) {
339
+ console.log(chalk.gray(' • Windsurf rules generated: .windsurfrules'));
340
+ }
341
+ if (detection.githubCopilot?.detected) {
342
+ console.log(chalk.gray(' • GitHub Copilot instructions generated in .github/'));
343
+ }
344
+ if (config.generateWorkflows) {
345
+ const workflowSpinner = ora('Generating GitHub Actions workflows...').start();
346
+ const workflows = await generateWorkflows(config, cwd, {
347
+ mode: minimalMode ? 'minimal' : 'full',
348
+ });
349
+ workflowSpinner.succeed(`Generated ${workflows.length} workflow files`);
350
+ for (const workflow of workflows) {
351
+ console.log(chalk.gray(` - ${path.relative(cwd, workflow)}`));
352
+ }
353
+ }
354
+ const gitignoreSpinner = ora('Generating/updating .gitignore...').start();
355
+ const { generateGitignore } = await import('../../core/gitignore-generator.js');
356
+ const gitignoreResult = await generateGitignore(cwd, detection.languages);
357
+ if (gitignoreResult.created) {
358
+ gitignoreSpinner.succeed('.gitignore created');
359
+ }
360
+ else if (gitignoreResult.updated) {
361
+ gitignoreSpinner.succeed('.gitignore updated with missing patterns');
362
+ }
363
+ else {
364
+ gitignoreSpinner.info('.gitignore already contains all necessary patterns');
365
+ }
366
+ if (!minimalMode && config.ides.length > 0) {
367
+ const ideSpinner = ora('Generating IDE-specific files...').start();
368
+ const ideFiles = await generateIDEFiles(config, cwd);
369
+ if (ideFiles.length > 0) {
370
+ ideSpinner.succeed(`Generated ${ideFiles.length} IDE configuration files`);
371
+ for (const file of ideFiles) {
372
+ console.log(chalk.gray(` - ${path.relative(cwd, file)}`));
373
+ }
374
+ }
375
+ else {
376
+ ideSpinner.info('IDE files already exist (skipped)');
377
+ }
378
+ }
379
+ if (!minimalMode) {
380
+ const claudeSpinner = ora('Generating CLAUDE.md (v5.3.0 @import format)...').start();
381
+ try {
382
+ const result = await mergeClaudeMd(cwd);
383
+ const label = result.mode === 'create'
384
+ ? 'created'
385
+ : result.mode === 'replace'
386
+ ? 'updated'
387
+ : 'migrated (legacy directives moved to AGENTS.override.md)';
388
+ claudeSpinner.succeed(`CLAUDE.md ${label}`);
389
+ if (result.backupPath) {
390
+ console.log(chalk.gray(` - backup: ${path.relative(cwd, result.backupPath)}`));
391
+ }
392
+ if (result.mode === 'migrate' && result.overridePath) {
393
+ console.log(chalk.yellow(` ! Your previous CLAUDE.md directives were migrated to ${path.relative(cwd, result.overridePath)}.`));
394
+ console.log(chalk.yellow(' Claude Code still loads them at session start via @AGENTS.override.md.'));
395
+ console.log(chalk.yellow(' Review and prune AGENTS.override.md when convenient — rulebook will never overwrite it.'));
396
+ }
397
+ }
398
+ catch (err) {
399
+ claudeSpinner.warn(`CLAUDE.md generation skipped: ${err instanceof Error ? err.message : String(err)}`);
400
+ }
401
+ try {
402
+ const { ensureDir: ensureDirUtil } = await import('../../utils/file-system.js');
403
+ await ensureDirUtil(path.join(cwd, '.rulebook', 'handoff'));
404
+ }
405
+ catch {
406
+ // non-fatal
407
+ }
408
+ try {
409
+ const { ensureGitignoreEntries } = await import('../../utils/gitignore.js');
410
+ const localMdPath = path.join(cwd, 'CLAUDE.local.md');
411
+ if (!existsSync(localMdPath)) {
412
+ const stub = [
413
+ '# CLAUDE.local.md',
414
+ '',
415
+ '<!-- Personal per-project overrides. Not committed to version control. -->',
416
+ '<!-- Loaded alongside CLAUDE.md with the same priority. -->',
417
+ '',
418
+ '# Add your personal preferences below. Examples:',
419
+ '# - Preferred test data or sandbox URLs',
420
+ '# - Personal tooling shortcuts',
421
+ '# - Debugging tips specific to your machine',
422
+ '',
423
+ ].join('\n');
424
+ const { writeFile: wf } = await import('../../utils/file-system.js');
425
+ await wf(localMdPath, stub);
426
+ console.log(chalk.gray(' • created CLAUDE.local.md (personal overrides, gitignored)'));
427
+ }
428
+ await ensureGitignoreEntries(cwd, [
429
+ 'CLAUDE.local.md',
430
+ '.rulebook/backup/',
431
+ '.rulebook/handoff/_pending.md',
432
+ '.rulebook/handoff/.urgent',
433
+ ]);
434
+ }
435
+ catch {
436
+ // non-fatal
437
+ }
438
+ try {
439
+ const { seedCompactContext } = await import('../../core/compact-context-manager.js');
440
+ const seedResult = await seedCompactContext(cwd, { languages: detection.languages });
441
+ if (seedResult.seeded) {
442
+ console.log(chalk.gray(` • seeded ${path.relative(cwd, seedResult.path)}`));
443
+ }
444
+ }
445
+ catch (err) {
446
+ console.log(chalk.gray(` · COMPACT_CONTEXT seed skipped: ${err instanceof Error ? err.message : String(err)}`));
447
+ }
448
+ try {
449
+ const { applyClaudeSettings } = await import('../../core/claude-settings-manager.js');
450
+ const rulebookCfg = await configManager.loadConfig();
451
+ const multiAgentEnabled = rulebookCfg?.multiAgent?.enabled ?? false;
452
+ const handoffEnabled = rulebookCfg?.handoff?.enabled ?? true;
453
+ await applyClaudeSettings(cwd, {
454
+ teamEnforcement: multiAgentEnabled,
455
+ sessionHandoff: handoffEnabled,
456
+ compactContextReinject: true,
457
+ qualityEnforcement: true,
458
+ });
459
+ }
460
+ catch (err) {
461
+ console.log(chalk.gray(` · .claude/settings.json skipped: ${err instanceof Error ? err.message : String(err)}`));
462
+ }
463
+ try {
464
+ const { generateMcpReference } = await import('../../core/mcp-reference-generator.js');
465
+ const mcpRef = await generateMcpReference(cwd);
466
+ if (mcpRef.written) {
467
+ console.log(chalk.gray(` • generated ${path.relative(cwd, mcpRef.path)}`));
468
+ }
469
+ }
470
+ catch {
471
+ // non-fatal
472
+ }
473
+ const rulesSpinner = ora('Generating path-scoped .claude/rules/ for detected languages...').start();
474
+ try {
475
+ const { generateRules } = await import('../../core/rules-generator.js');
476
+ const rulesResult = await generateRules(cwd, { languages: detection.languages });
477
+ if (rulesResult.written.length > 0) {
478
+ rulesSpinner.succeed(`Generated ${rulesResult.written.length} language rule file(s) in .claude/rules/`);
479
+ for (const f of rulesResult.written) {
480
+ console.log(chalk.gray(` - ${path.relative(cwd, f)}`));
481
+ }
482
+ }
483
+ else {
484
+ rulesSpinner.info('No language rule templates applicable (no supported languages detected)');
485
+ }
486
+ if (rulesResult.preserved.length > 0) {
487
+ console.log(chalk.gray(` · ${rulesResult.preserved.length} user-authored rule file(s) preserved`));
488
+ }
489
+ }
490
+ catch (err) {
491
+ rulesSpinner.warn(`Rules generation skipped: ${err instanceof Error ? err.message : String(err)}`);
492
+ }
493
+ const cliSpinner = ora('Generating AI CLI configuration files...').start();
494
+ const cliFiles = await generateAICLIFiles(config, cwd);
495
+ if (cliFiles.length > 0) {
496
+ cliSpinner.succeed(`Generated ${cliFiles.length} AI CLI configuration files`);
497
+ for (const file of cliFiles) {
498
+ console.log(chalk.gray(` - ${path.relative(cwd, file)}`));
499
+ }
500
+ }
501
+ else {
502
+ cliSpinner.info('AI CLI files already exist (skipped)');
503
+ }
504
+ }
505
+ if (!minimalMode) {
506
+ const claudeIntSpinner = ora('Checking Claude Code integration...').start();
507
+ try {
508
+ const { setupClaudeCodeIntegration } = await import('../../core/claude-mcp.js');
509
+ const result = await setupClaudeCodeIntegration(cwd);
510
+ if (result.detected) {
511
+ claudeIntSpinner.succeed('Claude Code integration configured');
512
+ if (result.mcpConfigured) {
513
+ console.log(chalk.gray(' • MCP server added to .mcp.json'));
514
+ }
515
+ if (result.skillsInstalled.length > 0) {
516
+ console.log(chalk.gray(` • ${result.skillsInstalled.length} skills installed to .claude/commands/`));
517
+ }
518
+ if (result.agentTeamsEnabled) {
519
+ console.log(chalk.gray(' • Multi-agent teams enabled in .claude/settings.json'));
520
+ }
521
+ if (result.agentDefinitionsInstalled.length > 0) {
522
+ console.log(chalk.gray(` • ${result.agentDefinitionsInstalled.length} agent definitions installed to .claude/agents/`));
523
+ }
524
+ }
525
+ else {
526
+ claudeIntSpinner.info('Claude Code not detected (skipped)');
527
+ }
528
+ }
529
+ catch {
530
+ claudeIntSpinner.info('Claude Code integration skipped');
531
+ }
532
+ }
533
+ try {
534
+ const { installRalphScripts } = await import('../../core/ralph-scripts.js');
535
+ const scripts = await installRalphScripts(cwd);
536
+ if (scripts.length > 0) {
537
+ console.log(chalk.gray(` • ${scripts.length} Ralph scripts installed to .rulebook/scripts/`));
538
+ }
539
+ }
540
+ catch {
541
+ // Skip if Ralph scripts installation fails
542
+ }
543
+ try {
544
+ const { initPlans } = await import('../../core/plans-manager.js');
545
+ const created = await initPlans(cwd);
546
+ if (created) {
547
+ console.log(chalk.gray(' • PLANS.md created for session continuity'));
548
+ }
549
+ }
550
+ catch {
551
+ // Non-blocking
552
+ }
553
+ try {
554
+ const { initOverride } = await import('../../core/override-manager.js');
555
+ const created = await initOverride(cwd);
556
+ if (created) {
557
+ console.log(chalk.gray(' • AGENTS.override.md created (add project-specific rules here)'));
558
+ }
559
+ }
560
+ catch {
561
+ // Non-blocking
562
+ }
563
+ if (options.addSequentialThinking) {
564
+ try {
565
+ await addSequentialThinkingMcp(cwd);
566
+ console.log(chalk.gray(' • sequential-thinking MCP added to mcp.json'));
567
+ }
568
+ catch {
569
+ console.log(chalk.yellow(' ⚠ Could not add sequential-thinking MCP'));
570
+ }
571
+ }
572
+ if (minimalMode && minimalArtifacts.length > 0) {
573
+ console.log(chalk.green('\n✅ Essentials created:'));
574
+ for (const artifact of minimalArtifacts) {
575
+ console.log(chalk.gray(` - ${path.relative(cwd, artifact)}`));
576
+ }
577
+ }
578
+ try {
579
+ const fsPromises = await import('fs/promises');
580
+ const accidentalDir = path.join(cwd, '.rulebook', '.rulebook');
581
+ if (existsSync(accidentalDir)) {
582
+ await fsPromises.rm(accidentalDir, { recursive: true, force: true });
583
+ }
584
+ }
585
+ catch {
586
+ // Ignore cleanup errors
587
+ }
588
+ const wsConfig = WorkspaceManager.findWorkspaceConfig(cwd);
589
+ if (wsConfig && wsConfig.projects.length > 1) {
590
+ console.log(chalk.yellow(`\n⚠ Workspace detected: "${wsConfig.name}" with ${wsConfig.projects.length} projects.`));
591
+ console.log(chalk.yellow(' The MCP server will auto-detect workspace mode. For explicit setup, run:'));
592
+ console.log(chalk.yellow(' rulebook workspace init'));
593
+ console.log(chalk.yellow(' Then run `rulebook init` inside each sub-project individually for best results.\n'));
594
+ }
595
+ console.log(chalk.bold.green('\n✨ Rulebook initialization complete!\n'));
596
+ console.log(chalk.gray('Next steps:'));
597
+ console.log(chalk.gray(' 1. Review AGENTS.md'));
598
+ console.log(chalk.gray(' 2. Review generated workflows in .github/workflows/'));
599
+ console.log(chalk.gray(' 3. Create .rulesignore if needed'));
600
+ console.log(chalk.gray(' 4. Set up /docs structure'));
601
+ console.log(chalk.gray(' 5. Run your AI assistant with the new rules\n'));
602
+ }
603
+ catch (error) {
604
+ console.error(chalk.red('\n❌ Error:'), error);
605
+ process.exit(1);
606
+ }
607
+ }
608
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}