@hivehub/rulebook 3.3.1 → 4.0.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 (162) hide show
  1. package/.claude/commands/continue.md +33 -0
  2. package/.claude-plugin/marketplace.json +28 -29
  3. package/.claude-plugin/plugin.json +8 -8
  4. package/README.md +32 -144
  5. package/dist/agents/ralph-parser.d.ts +44 -5
  6. package/dist/agents/ralph-parser.d.ts.map +1 -1
  7. package/dist/agents/ralph-parser.js +218 -26
  8. package/dist/agents/ralph-parser.js.map +1 -1
  9. package/dist/cli/commands.d.ts +65 -0
  10. package/dist/cli/commands.d.ts.map +1 -1
  11. package/dist/cli/commands.js +841 -175
  12. package/dist/cli/commands.js.map +1 -1
  13. package/dist/core/agent-manager.d.ts +12 -32
  14. package/dist/core/agent-manager.d.ts.map +1 -1
  15. package/dist/core/agent-manager.js +150 -220
  16. package/dist/core/agent-manager.js.map +1 -1
  17. package/dist/core/claude-mcp.d.ts +17 -0
  18. package/dist/core/claude-mcp.d.ts.map +1 -1
  19. package/dist/core/claude-mcp.js +90 -6
  20. package/dist/core/claude-mcp.js.map +1 -1
  21. package/dist/core/cli-bridge.js +1 -1
  22. package/dist/core/cli-bridge.js.map +1 -1
  23. package/dist/core/config-manager.d.ts.map +1 -1
  24. package/dist/core/config-manager.js +40 -0
  25. package/dist/core/config-manager.js.map +1 -1
  26. package/dist/core/cursor-mdc-generator.d.ts +30 -0
  27. package/dist/core/cursor-mdc-generator.d.ts.map +1 -0
  28. package/dist/core/cursor-mdc-generator.js +98 -0
  29. package/dist/core/cursor-mdc-generator.js.map +1 -0
  30. package/dist/core/detector.d.ts +25 -1
  31. package/dist/core/detector.d.ts.map +1 -1
  32. package/dist/core/detector.js +321 -1
  33. package/dist/core/detector.js.map +1 -1
  34. package/dist/core/generator.d.ts +10 -0
  35. package/dist/core/generator.d.ts.map +1 -1
  36. package/dist/core/generator.js +182 -9
  37. package/dist/core/generator.js.map +1 -1
  38. package/dist/core/github-issues-importer.d.ts +82 -0
  39. package/dist/core/github-issues-importer.d.ts.map +1 -0
  40. package/dist/core/github-issues-importer.js +161 -0
  41. package/dist/core/github-issues-importer.js.map +1 -0
  42. package/dist/core/health-scorer.d.ts +39 -0
  43. package/dist/core/health-scorer.d.ts.map +1 -1
  44. package/dist/core/health-scorer.js +256 -13
  45. package/dist/core/health-scorer.js.map +1 -1
  46. package/dist/core/iteration-tracker.d.ts +28 -0
  47. package/dist/core/iteration-tracker.d.ts.map +1 -1
  48. package/dist/core/iteration-tracker.js +86 -0
  49. package/dist/core/iteration-tracker.js.map +1 -1
  50. package/dist/core/logger.js +1 -1
  51. package/dist/core/logger.js.map +1 -1
  52. package/dist/core/migrator.js +1 -1
  53. package/dist/core/migrator.js.map +1 -1
  54. package/dist/core/modern-console.d.ts +1 -2
  55. package/dist/core/modern-console.d.ts.map +1 -1
  56. package/dist/core/modern-console.js +6 -18
  57. package/dist/core/modern-console.js.map +1 -1
  58. package/dist/core/multi-tool-generator.d.ts +59 -0
  59. package/dist/core/multi-tool-generator.d.ts.map +1 -0
  60. package/dist/core/multi-tool-generator.js +157 -0
  61. package/dist/core/multi-tool-generator.js.map +1 -0
  62. package/dist/core/override-manager.d.ts +23 -0
  63. package/dist/core/override-manager.d.ts.map +1 -0
  64. package/dist/core/override-manager.js +82 -0
  65. package/dist/core/override-manager.js.map +1 -0
  66. package/dist/core/plans-manager.d.ts +46 -0
  67. package/dist/core/plans-manager.d.ts.map +1 -0
  68. package/dist/core/plans-manager.js +158 -0
  69. package/dist/core/plans-manager.js.map +1 -0
  70. package/dist/core/prd-generator.d.ts +12 -0
  71. package/dist/core/prd-generator.d.ts.map +1 -1
  72. package/dist/core/prd-generator.js +91 -2
  73. package/dist/core/prd-generator.js.map +1 -1
  74. package/dist/core/ralph-manager.d.ts +81 -1
  75. package/dist/core/ralph-manager.d.ts.map +1 -1
  76. package/dist/core/ralph-manager.js +214 -4
  77. package/dist/core/ralph-manager.js.map +1 -1
  78. package/dist/core/ralph-parallel.d.ts +55 -0
  79. package/dist/core/ralph-parallel.d.ts.map +1 -0
  80. package/dist/core/ralph-parallel.js +201 -0
  81. package/dist/core/ralph-parallel.js.map +1 -0
  82. package/dist/core/ralph-plan-checkpoint.d.ts +58 -0
  83. package/dist/core/ralph-plan-checkpoint.d.ts.map +1 -0
  84. package/dist/core/ralph-plan-checkpoint.js +154 -0
  85. package/dist/core/ralph-plan-checkpoint.js.map +1 -0
  86. package/dist/core/ralph-scripts.d.ts +12 -0
  87. package/dist/core/ralph-scripts.d.ts.map +1 -0
  88. package/dist/core/ralph-scripts.js +49 -0
  89. package/dist/core/ralph-scripts.js.map +1 -0
  90. package/dist/core/review-manager.d.ts +74 -0
  91. package/dist/core/review-manager.d.ts.map +1 -0
  92. package/dist/core/review-manager.js +371 -0
  93. package/dist/core/review-manager.js.map +1 -0
  94. package/dist/core/task-manager.d.ts +1 -1
  95. package/dist/core/task-manager.js +1 -1
  96. package/dist/core/workflow-generator.js +1 -1
  97. package/dist/core/workflow-generator.js.map +1 -1
  98. package/dist/index.js +96 -4
  99. package/dist/index.js.map +1 -1
  100. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  101. package/dist/mcp/rulebook-server.js +300 -164
  102. package/dist/mcp/rulebook-server.js.map +1 -1
  103. package/dist/memory/memory-store.d.ts.map +1 -1
  104. package/dist/memory/memory-store.js +4 -0
  105. package/dist/memory/memory-store.js.map +1 -1
  106. package/dist/types.d.ts +55 -34
  107. package/dist/types.d.ts.map +1 -1
  108. package/package.json +1 -1
  109. package/templates/agents/implementer.md +35 -0
  110. package/templates/agents/researcher.md +34 -0
  111. package/templates/agents/team-lead.md +34 -0
  112. package/templates/agents/tester.md +42 -0
  113. package/templates/ci/rulebook-review.yml +26 -0
  114. package/templates/core/AGENTS_LEAN.md +25 -0
  115. package/templates/core/AGENTS_OVERRIDE.md +16 -0
  116. package/templates/core/MULTI_AGENT.md +74 -0
  117. package/templates/core/PLANS.md +28 -0
  118. package/templates/core/RALPH.md +45 -4
  119. package/templates/ides/CONTINUE_RULES.md +16 -0
  120. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -0
  121. package/templates/ides/GEMINI_RULES.md +17 -0
  122. package/templates/ides/WINDSURF_RULES.md +14 -0
  123. package/templates/ides/cursor-mdc/go.mdc +24 -0
  124. package/templates/ides/cursor-mdc/python.mdc +24 -0
  125. package/templates/ides/cursor-mdc/quality.mdc +25 -0
  126. package/templates/ides/cursor-mdc/ralph.mdc +39 -0
  127. package/templates/ides/cursor-mdc/rulebook.mdc +38 -0
  128. package/templates/ides/cursor-mdc/rust.mdc +24 -0
  129. package/templates/ides/cursor-mdc/typescript.mdc +25 -0
  130. package/templates/modules/sequential-thinking.md +42 -0
  131. package/templates/ralph/ralph-history.bat +4 -0
  132. package/templates/ralph/ralph-history.sh +5 -0
  133. package/templates/ralph/ralph-init.bat +5 -0
  134. package/templates/ralph/ralph-init.sh +5 -0
  135. package/templates/ralph/ralph-pause.bat +5 -0
  136. package/templates/ralph/ralph-pause.sh +5 -0
  137. package/templates/ralph/ralph-run.bat +5 -0
  138. package/templates/ralph/ralph-run.sh +5 -0
  139. package/templates/ralph/ralph-status.bat +4 -0
  140. package/templates/ralph/ralph-status.sh +5 -0
  141. package/templates/services/DATADOG.md +26 -0
  142. package/templates/services/DOCKER.md +124 -0
  143. package/templates/services/DOCKER_COMPOSE.md +168 -0
  144. package/templates/services/HELM.md +194 -0
  145. package/templates/services/KUBERNETES.md +208 -0
  146. package/templates/services/OPENTELEMETRY.md +25 -0
  147. package/templates/services/PINO.md +24 -0
  148. package/templates/services/PROMETHEUS.md +33 -0
  149. package/templates/services/SENTRY.md +23 -0
  150. package/templates/services/WINSTON.md +30 -0
  151. package/dist/core/openspec-manager.d.ts +0 -133
  152. package/dist/core/openspec-manager.d.ts.map +0 -1
  153. package/dist/core/openspec-manager.js +0 -596
  154. package/dist/core/openspec-manager.js.map +0 -1
  155. package/dist/core/openspec-migrator.d.ts +0 -27
  156. package/dist/core/openspec-migrator.d.ts.map +0 -1
  157. package/dist/core/openspec-migrator.js +0 -262
  158. package/dist/core/openspec-migrator.js.map +0 -1
  159. package/dist/core/test-task-manager.d.ts +0 -49
  160. package/dist/core/test-task-manager.d.ts.map +0 -1
  161. package/dist/core/test-task-manager.js +0 -121
  162. package/dist/core/test-task-manager.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rulebook-server.d.ts","sourceRoot":"","sources":["../../src/mcp/rulebook-server.ts"],"names":[],"mappings":";AAaA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAalE;AAoCD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0tC5D"}
1
+ {"version":3,"file":"rulebook-server.d.ts","sourceRoot":"","sources":["../../src/mcp/rulebook-server.ts"],"names":[],"mappings":";AAaA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAalE;AA2CD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA04C5D"}
@@ -22,7 +22,12 @@ export function findRulebookConfig(startDir) {
22
22
  }
23
23
  // Load configuration
24
24
  function loadConfig() {
25
- const rulebookPath = findRulebookConfig(process.cwd());
25
+ // Use --project-root flag as starting directory when provided
26
+ const projectRootFlagIndex = process.argv.indexOf('--project-root');
27
+ const startDir = projectRootFlagIndex !== -1 && process.argv[projectRootFlagIndex + 1]
28
+ ? process.argv[projectRootFlagIndex + 1]
29
+ : process.cwd();
30
+ const rulebookPath = findRulebookConfig(startDir);
26
31
  if (!rulebookPath) {
27
32
  console.error('[rulebook-mcp] .rulebook not found. Run `rulebook mcp init` in your project.');
28
33
  process.exit(1);
@@ -55,7 +60,7 @@ export async function startRulebookMcpServer() {
55
60
  const configManager = new ConfigManager(config.projectRoot);
56
61
  const server = new McpServer({
57
62
  name: 'rulebook-task-management',
58
- version: '2.0.0',
63
+ version: '4.0.0',
59
64
  });
60
65
  // Register tool: rulebook_task_create
61
66
  server.registerTool('rulebook_task_create', {
@@ -544,6 +549,8 @@ export async function startRulebookMcpServer() {
544
549
  if (rulebookConfig.memory?.enabled) {
545
550
  try {
546
551
  const { createMemoryManager } = await import('../memory/memory-manager.js');
552
+ const memoryDbPath = join(config.projectRoot, rulebookConfig.memory.dbPath ?? '.rulebook/memory/memory.db');
553
+ console.error(`[rulebook-mcp] Memory DB: ${memoryDbPath}`);
547
554
  memoryManager = createMemoryManager(config.projectRoot, rulebookConfig.memory);
548
555
  autoCaptureEnabled = rulebookConfig.memory.autoCapture !== false; // enabled by default when memory is on
549
556
  }
@@ -781,11 +788,13 @@ export async function startRulebookMcpServer() {
781
788
  const configData = await configManager.loadConfig();
782
789
  const maxIterations = configData.ralph?.maxIterations || 10;
783
790
  const tool = (configData.ralph?.tool || 'claude');
784
- await ralphManager.initialize(maxIterations, tool);
791
+ // Generate PRD first, then initialize with correct task count
785
792
  const prd = await prdGenerator.generatePRD(basename(config.projectRoot) || 'project');
786
793
  const { writeFile } = await import('../utils/file-system.js');
787
794
  const prdPath = join(config.projectRoot, '.rulebook', 'ralph', 'prd.json');
788
795
  await writeFile(prdPath, JSON.stringify(prd, null, 2));
796
+ // Initialize after PRD is written so task count is correct
797
+ await ralphManager.initialize(maxIterations, tool);
789
798
  return {
790
799
  content: [
791
800
  {
@@ -826,182 +835,297 @@ export async function startRulebookMcpServer() {
826
835
  const { RalphManager } = await import('../core/ralph-manager.js');
827
836
  const { RalphParser } = await import('../agents/ralph-parser.js');
828
837
  const { spawn } = await import('child_process');
838
+ const { execSync } = await import('child_process');
829
839
  const logger = new Logger(config.projectRoot);
830
840
  const ralphManager = new RalphManager(config.projectRoot, logger);
831
841
  const configData = await configManager.loadConfig();
832
842
  const maxIterations = args.maxIterations || configData.ralph?.maxIterations || 10;
833
843
  const tool = (args.tool || configData.ralph?.tool || 'claude');
834
- // Resume existing state if available, otherwise initialize fresh
835
- const existingState = await ralphManager.getStatus();
836
- if (!existingState) {
837
- await ralphManager.initialize(maxIterations, tool);
844
+ // ── Concurrency guard: prevent multiple simultaneous Ralph runs ──
845
+ const lockAcquired = await ralphManager.acquireLock(tool);
846
+ if (!lockAcquired) {
847
+ const lockInfo = await ralphManager.getLockInfo();
848
+ return {
849
+ content: [
850
+ {
851
+ type: 'text',
852
+ text: JSON.stringify({
853
+ success: false,
854
+ error: `Ralph is already running (PID ${lockInfo?.pid}, started ${lockInfo?.startedAt}, task: ${lockInfo?.currentTask || 'starting'}, iteration: ${lockInfo?.iteration || 0}). Wait for it to finish or check ralph_status. Do NOT start another run.`,
855
+ }),
856
+ },
857
+ ],
858
+ };
838
859
  }
839
- // Helper: run a shell command and return stdout
840
- const runCmd = (cmd, cmdArgs) => new Promise((resolve) => {
841
- let stdout = '';
842
- let stderr = '';
843
- const proc = spawn(cmd, cmdArgs, {
844
- cwd: config.projectRoot,
845
- shell: true,
846
- stdio: ['pipe', 'pipe', 'pipe'],
847
- });
848
- proc.stdout?.on('data', (d) => {
849
- stdout += d.toString();
850
- });
851
- proc.stderr?.on('data', (d) => {
852
- stderr += d.toString();
853
- });
854
- proc.on('close', (code) => resolve({ code: code ?? 1, stdout, stderr }));
855
- proc.on('error', (err) => resolve({ code: 1, stdout, stderr: err.message }));
856
- });
857
- // Helper: build prompt for AI agent
858
- const buildPrompt = (task, prd) => {
859
- const criteria = (task.acceptanceCriteria || [])
860
- .map((c) => `- ${c}`)
861
- .join('\n');
862
- return [
863
- `You are working on project: ${prd?.project || 'unknown'}`,
864
- ``,
865
- `## Current Task: ${task.title}`,
866
- `ID: ${task.id}`,
867
- ``,
868
- `## Description`,
869
- task.description,
870
- ``,
871
- `## Acceptance Criteria`,
872
- criteria,
873
- ``,
874
- task.notes ? `## Notes\n${task.notes}\n` : '',
875
- `## Instructions`,
876
- `1. Implement the changes described above`,
877
- `2. Ensure all acceptance criteria are met`,
878
- `3. Run quality checks: type-check, lint, tests`,
879
- `4. Fix any issues found by quality checks`,
880
- `5. When done, summarize what was changed`,
881
- ]
882
- .filter(Boolean)
883
- .join('\n');
860
+ // Ensure lock is released on exit, even on crashes
861
+ const cleanupLock = async () => {
862
+ await ralphManager.releaseLock();
884
863
  };
885
- // Helper: execute AI agent
886
- const executeAgent = (agentTool, prompt) => new Promise((resolve, reject) => {
887
- let output = '';
888
- const toolCmds = {
889
- claude: {
890
- cmd: 'claude',
891
- args: ['-p', '--dangerously-skip-permissions', '--verbose'],
892
- stdinPrompt: true,
893
- },
894
- amp: { cmd: 'amp', args: ['-p', prompt], stdinPrompt: false },
895
- gemini: { cmd: 'gemini', args: ['-p', prompt], stdinPrompt: false },
864
+ process.on('SIGTERM', cleanupLock);
865
+ process.on('SIGINT', cleanupLock);
866
+ try {
867
+ // Validate tool is available before starting
868
+ const toolCmdNames = {
869
+ claude: 'claude',
870
+ amp: 'amp',
871
+ gemini: 'gemini',
896
872
  };
897
- const cfg = toolCmds[agentTool] || toolCmds.claude;
898
- const proc = spawn(cfg.cmd, cfg.args, {
899
- cwd: config.projectRoot,
900
- shell: true,
901
- stdio: ['pipe', 'pipe', 'pipe'],
902
- });
903
- if (cfg.stdinPrompt && proc.stdin) {
904
- proc.stdin.write(prompt);
905
- proc.stdin.end();
873
+ const toolCmd = toolCmdNames[tool] || 'claude';
874
+ try {
875
+ execSync(`${toolCmd} --version`, { stdio: 'pipe', timeout: 10000 });
876
+ }
877
+ catch {
878
+ return {
879
+ content: [
880
+ {
881
+ type: 'text',
882
+ text: JSON.stringify({
883
+ success: false,
884
+ error: `CLI tool "${toolCmd}" not found or not responding. Install it first: https://docs.anthropic.com/claude-code`,
885
+ }),
886
+ },
887
+ ],
888
+ };
889
+ }
890
+ // Resume existing state if available, otherwise initialize fresh
891
+ const existingState = await ralphManager.getStatus();
892
+ if (!existingState) {
893
+ await ralphManager.initialize(maxIterations, tool);
906
894
  }
907
- proc.stdout?.on('data', (d) => {
908
- output += d.toString();
895
+ // Helper: run a shell command and return stdout
896
+ const runCmd = (cmd, cmdArgs) => new Promise((resolve) => {
897
+ let stdout = '';
898
+ let stderr = '';
899
+ const proc = spawn(cmd, cmdArgs, {
900
+ cwd: config.projectRoot,
901
+ shell: true,
902
+ stdio: ['pipe', 'pipe', 'pipe'],
903
+ });
904
+ proc.stdout?.on('data', (d) => {
905
+ stdout += d.toString();
906
+ });
907
+ proc.stderr?.on('data', (d) => {
908
+ stderr += d.toString();
909
+ });
910
+ proc.on('close', (code) => resolve({ code: code ?? 1, stdout, stderr }));
911
+ proc.on('error', (err) => resolve({ code: 1, stdout, stderr: err.message }));
909
912
  });
910
- proc.stderr?.on('data', () => { });
911
- proc.on('close', (code) => {
912
- if (code === 0 || output.length > 0)
913
- resolve(output);
914
- else
915
- reject(new Error(`Agent ${agentTool} exited with code ${code}`));
913
+ // Helper: build prompt for AI agent
914
+ const buildPrompt = (task, projectName) => {
915
+ const criteria = (task.acceptanceCriteria || [])
916
+ .map((c) => `- ${c}`)
917
+ .join('\n');
918
+ return [
919
+ `You are working on project: ${projectName}`,
920
+ ``,
921
+ `## Current Task: ${task.title}`,
922
+ `ID: ${task.id}`,
923
+ ``,
924
+ `## Description`,
925
+ task.description,
926
+ ``,
927
+ `## Acceptance Criteria`,
928
+ criteria,
929
+ ``,
930
+ task.notes ? `## Notes\n${task.notes}\n` : '',
931
+ `## Instructions`,
932
+ `1. Implement the changes described above`,
933
+ `2. Ensure all acceptance criteria are met`,
934
+ `3. Run quality checks: type-check, lint, tests`,
935
+ `4. Fix any issues found by quality checks`,
936
+ `5. When done, summarize what was changed`,
937
+ ]
938
+ .filter(Boolean)
939
+ .join('\n');
940
+ };
941
+ // Helper: execute AI agent with proper error handling
942
+ const executeAgent = (agentTool, prompt) => new Promise((resolve, reject) => {
943
+ let output = '';
944
+ let stderrOutput = '';
945
+ const toolCmds = {
946
+ claude: {
947
+ cmd: 'claude',
948
+ args: ['-p', '--dangerously-skip-permissions', '--verbose'],
949
+ stdinPrompt: true,
950
+ },
951
+ amp: { cmd: 'amp', args: ['-p', prompt], stdinPrompt: false },
952
+ gemini: { cmd: 'gemini', args: ['-p', prompt], stdinPrompt: false },
953
+ };
954
+ const cfg = toolCmds[agentTool] || toolCmds.claude;
955
+ let settled = false;
956
+ const settle = (fn) => {
957
+ if (!settled) {
958
+ settled = true;
959
+ fn();
960
+ }
961
+ };
962
+ const proc = spawn(cfg.cmd, cfg.args, {
963
+ cwd: config.projectRoot,
964
+ shell: true,
965
+ stdio: ['pipe', 'pipe', 'pipe'],
966
+ });
967
+ if (cfg.stdinPrompt && proc.stdin) {
968
+ proc.stdin.write(prompt);
969
+ proc.stdin.end();
970
+ }
971
+ proc.stdout?.on('data', (d) => {
972
+ output += d.toString();
973
+ });
974
+ proc.stderr?.on('data', (d) => {
975
+ stderrOutput += d.toString();
976
+ });
977
+ proc.on('close', (code) => {
978
+ settle(() => {
979
+ if (code === 0 || output.length > 0) {
980
+ resolve(output);
981
+ }
982
+ else {
983
+ reject(new Error(`Agent ${agentTool} exited with code ${code}${stderrOutput ? ': ' + stderrOutput.slice(0, 500) : ''}`));
984
+ }
985
+ });
986
+ });
987
+ proc.on('error', (err) => {
988
+ settle(() => reject(new Error(`Failed to spawn ${agentTool}: ${err.message}`)));
989
+ });
990
+ const timeout = setTimeout(() => {
991
+ proc.kill('SIGTERM');
992
+ settle(() => resolve(output || `Agent ${agentTool} timed out after 10 minutes`));
993
+ }, 600000);
994
+ proc.on('close', () => clearTimeout(timeout));
916
995
  });
917
- proc.on('error', (err) => reject(err));
918
- setTimeout(() => {
919
- proc.kill('SIGTERM');
920
- resolve(output || 'Agent timed out');
921
- }, 600000);
922
- });
923
- // Sync task count from PRD
924
- await ralphManager.refreshTaskCount();
925
- const prd = await ralphManager.loadPRD();
926
- let iterationCount = 0;
927
- while (ralphManager.canContinue() && iterationCount < maxIterations) {
928
- iterationCount++;
929
- const task = await ralphManager.getNextTask();
930
- if (!task)
931
- break;
932
- const startTime = Date.now();
933
- // 1. Execute AI agent
934
- let agentOutput = '';
935
- try {
936
- const prompt = buildPrompt(task, prd);
937
- agentOutput = await executeAgent(tool, prompt);
938
- }
939
- catch (agentErr) {
940
- agentOutput = `Error: ${agentErr.message || agentErr}`;
996
+ // Sync task count from PRD
997
+ await ralphManager.refreshTaskCount();
998
+ // Load PRD for project name (used in prompts)
999
+ const prd = await ralphManager.loadPRD();
1000
+ if (!prd || !prd.userStories || prd.userStories.length === 0) {
1001
+ return {
1002
+ content: [
1003
+ {
1004
+ type: 'text',
1005
+ text: JSON.stringify({
1006
+ success: false,
1007
+ error: 'No PRD found or no user stories. Run rulebook_ralph_init first.',
1008
+ }),
1009
+ },
1010
+ ],
1011
+ };
941
1012
  }
942
- // 2. Run quality gates
943
- const [typeCheck, lint, tests] = await Promise.all([
944
- runCmd('npm', ['run', 'type-check']).then((r) => r.code === 0),
945
- runCmd('npm', ['run', 'lint']).then((r) => r.code === 0),
946
- runCmd('npm', ['test']).then((r) => r.code === 0),
947
- ]);
948
- const qualityChecks = { type_check: typeCheck, lint, tests, coverage_met: tests };
949
- const allPass = typeCheck && lint && tests;
950
- const passCount = Object.values(qualityChecks).filter(Boolean).length;
951
- const status = allPass
952
- ? 'success'
953
- : passCount >= 2
954
- ? 'partial'
955
- : 'failed';
956
- // 3. Git commit if all gates pass
957
- let gitCommit;
958
- if (allPass) {
959
- await runCmd('git', ['add', '-A']);
960
- const commitResult = await runCmd('git', [
961
- 'commit',
962
- '-m',
963
- `ralph(${task.id}): ${task.title}\n\nIteration ${iterationCount} - Ralph autonomous loop`,
1013
+ const projectName = prd.project || 'unknown';
1014
+ const totalTasks = prd.userStories.filter((s) => !s.passes).length;
1015
+ let iterationCount = 0;
1016
+ const iterationResults = [];
1017
+ // Log to stderr so MCP callers can see progress
1018
+ const logProgress = (msg) => {
1019
+ process.stderr.write(`[Ralph] ${msg}\n`);
1020
+ };
1021
+ logProgress(`Starting Ralph loop: ${totalTasks} pending tasks, max ${maxIterations} iterations, tool=${tool}`);
1022
+ while (ralphManager.canContinue() && iterationCount < maxIterations) {
1023
+ iterationCount++;
1024
+ const task = await ralphManager.getNextTask();
1025
+ if (!task)
1026
+ break;
1027
+ // Update lock with current progress
1028
+ await ralphManager.updateLockProgress(iterationCount, `${task.id}: ${task.title}`);
1029
+ logProgress(`Iteration ${iterationCount}/${maxIterations} — Task: ${task.id} "${task.title}"`);
1030
+ const startTime = Date.now();
1031
+ // 1. Execute AI agent
1032
+ let agentOutput = '';
1033
+ try {
1034
+ logProgress(` Executing ${tool} agent...`);
1035
+ const prompt = buildPrompt(task, projectName);
1036
+ agentOutput = await executeAgent(tool, prompt);
1037
+ logProgress(` Agent finished (${((Date.now() - startTime) / 1000).toFixed(0)}s)`);
1038
+ }
1039
+ catch (agentErr) {
1040
+ agentOutput = `Error: ${agentErr.message || agentErr}`;
1041
+ logProgress(` Agent error: ${agentErr.message || agentErr}`);
1042
+ }
1043
+ // 2. Run quality gates
1044
+ logProgress(` Running quality gates...`);
1045
+ const [typeCheck, lint, tests] = await Promise.all([
1046
+ runCmd('npm', ['run', 'type-check']).then((r) => r.code === 0),
1047
+ runCmd('npm', ['run', 'lint']).then((r) => r.code === 0),
1048
+ runCmd('npm', ['test']).then((r) => r.code === 0),
964
1049
  ]);
965
- const hashMatch = commitResult.stdout.match(/\[[\w/.-]+ ([a-f0-9]+)\]/);
966
- gitCommit = hashMatch ? hashMatch[1] : undefined;
967
- await ralphManager.markStoryComplete(task.id);
1050
+ const qualityChecks = { type_check: typeCheck, lint, tests, coverage_met: tests };
1051
+ const allPass = typeCheck && lint && tests;
1052
+ const passCount = Object.values(qualityChecks).filter(Boolean).length;
1053
+ const status = allPass
1054
+ ? 'success'
1055
+ : passCount >= 2
1056
+ ? 'partial'
1057
+ : 'failed';
1058
+ logProgress(` Quality: type-check=${typeCheck ? 'PASS' : 'FAIL'} lint=${lint ? 'PASS' : 'FAIL'} tests=${tests ? 'PASS' : 'FAIL'} → ${status.toUpperCase()}`);
1059
+ // 3. Git commit if all gates pass
1060
+ let gitCommit;
1061
+ if (allPass) {
1062
+ await runCmd('git', ['add', '-A']);
1063
+ const commitResult = await runCmd('git', [
1064
+ 'commit',
1065
+ '-m',
1066
+ `ralph(${task.id}): ${task.title}\n\nIteration ${iterationCount} - Ralph autonomous loop`,
1067
+ ]);
1068
+ const hashMatch = commitResult.stdout.match(/\[[\w/.-]+ ([a-f0-9]+)\]/);
1069
+ gitCommit = hashMatch ? hashMatch[1] : undefined;
1070
+ await ralphManager.markStoryComplete(task.id);
1071
+ logProgress(` Committed: ${gitCommit || 'no hash'} — Story ${task.id} COMPLETE`);
1072
+ }
1073
+ const iterDuration = Date.now() - startTime;
1074
+ // 4. Parse output for learnings/errors
1075
+ const parsed = RalphParser.parseAgentOutput(agentOutput, iterationCount, task.id, task.title, tool);
1076
+ // 5. Record iteration and refresh task count for canContinue()
1077
+ await ralphManager.recordIteration({
1078
+ iteration: iterationCount,
1079
+ timestamp: new Date().toISOString(),
1080
+ task_id: task.id,
1081
+ task_title: task.title,
1082
+ status,
1083
+ ai_tool: tool,
1084
+ execution_time_ms: iterDuration,
1085
+ quality_checks: qualityChecks,
1086
+ output_summary: parsed.output_summary || `Iteration ${iterationCount}: ${task.title}`,
1087
+ git_commit: gitCommit,
1088
+ learnings: parsed.learnings,
1089
+ errors: parsed.errors,
1090
+ metadata: {
1091
+ context_loss_count: parsed.metadata.context_loss_count,
1092
+ parsed_completion: parsed.metadata.parsed_completion,
1093
+ },
1094
+ });
1095
+ iterationResults.push({
1096
+ iteration: iterationCount,
1097
+ taskId: task.id,
1098
+ taskTitle: task.title,
1099
+ status,
1100
+ durationMs: iterDuration,
1101
+ });
1102
+ // Refresh task count so canContinue() reflects updated PRD
1103
+ await ralphManager.refreshTaskCount();
1104
+ logProgress(` Iteration ${iterationCount} complete (${(iterDuration / 1000).toFixed(0)}s)\n`);
968
1105
  }
969
- // 4. Parse output for learnings/errors
970
- const parsed = RalphParser.parseAgentOutput(agentOutput, iterationCount, task.id, task.title, tool);
971
- // 5. Record iteration
972
- await ralphManager.recordIteration({
973
- iteration: iterationCount,
974
- timestamp: new Date().toISOString(),
975
- task_id: task.id,
976
- task_title: task.title,
977
- status,
978
- ai_tool: tool,
979
- execution_time_ms: Date.now() - startTime,
980
- quality_checks: qualityChecks,
981
- output_summary: parsed.output_summary || `Iteration ${iterationCount}: ${task.title}`,
982
- git_commit: gitCommit,
983
- learnings: parsed.learnings,
984
- errors: parsed.errors,
985
- metadata: {
986
- context_loss_count: parsed.metadata.context_loss_count,
987
- parsed_completion: parsed.metadata.parsed_completion,
988
- },
989
- });
1106
+ const stats = await ralphManager.getTaskStats();
1107
+ logProgress(`Ralph loop finished: ${iterationCount} iterations, ${stats.completed}/${stats.total} tasks completed`);
1108
+ return {
1109
+ content: [
1110
+ {
1111
+ type: 'text',
1112
+ text: JSON.stringify({
1113
+ success: true,
1114
+ iterations: iterationCount,
1115
+ completed: stats.completed,
1116
+ total: stats.total,
1117
+ results: iterationResults,
1118
+ }),
1119
+ },
1120
+ ],
1121
+ };
1122
+ }
1123
+ finally {
1124
+ // Always release lock, even on error
1125
+ await ralphManager.releaseLock();
1126
+ process.removeListener('SIGTERM', cleanupLock);
1127
+ process.removeListener('SIGINT', cleanupLock);
990
1128
  }
991
- const stats = await ralphManager.getTaskStats();
992
- return {
993
- content: [
994
- {
995
- type: 'text',
996
- text: JSON.stringify({
997
- success: true,
998
- iterations: iterationCount,
999
- completed: stats.completed,
1000
- total: stats.total,
1001
- }),
1002
- },
1003
- ],
1004
- };
1005
1129
  }
1006
1130
  catch (error) {
1007
1131
  return {
@@ -1037,12 +1161,24 @@ export async function startRulebookMcpServer() {
1037
1161
  };
1038
1162
  }
1039
1163
  const stats = await ralphManager.getTaskStats();
1164
+ // Check if Ralph is currently running (lock held by alive process)
1165
+ const running = await ralphManager.isRunning();
1166
+ const lockInfo = running ? await ralphManager.getLockInfo() : null;
1040
1167
  return {
1041
1168
  content: [
1042
1169
  {
1043
1170
  type: 'text',
1044
1171
  text: JSON.stringify({
1045
1172
  success: true,
1173
+ running,
1174
+ ...(running && lockInfo
1175
+ ? {
1176
+ runningPid: lockInfo.pid,
1177
+ runningTask: lockInfo.currentTask || null,
1178
+ runningIteration: lockInfo.iteration || 0,
1179
+ runningSince: lockInfo.startedAt,
1180
+ }
1181
+ : {}),
1046
1182
  iteration: status.current_iteration,
1047
1183
  maxIterations: status.max_iterations,
1048
1184
  completedTasks: stats.completed,