ghcralph 0.1.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 (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +327 -0
  3. package/bin/ghcralph.js +2 -0
  4. package/dist/cli.d.ts +12 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +92 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/config.d.ts +8 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +118 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/index.d.ts +11 -0
  13. package/dist/commands/index.d.ts.map +1 -0
  14. package/dist/commands/index.js +11 -0
  15. package/dist/commands/index.js.map +1 -0
  16. package/dist/commands/init.d.ts +15 -0
  17. package/dist/commands/init.d.ts.map +1 -0
  18. package/dist/commands/init.js +116 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/rollback.d.ts +8 -0
  21. package/dist/commands/rollback.d.ts.map +1 -0
  22. package/dist/commands/rollback.js +238 -0
  23. package/dist/commands/rollback.js.map +1 -0
  24. package/dist/commands/run.d.ts +28 -0
  25. package/dist/commands/run.d.ts.map +1 -0
  26. package/dist/commands/run.js +407 -0
  27. package/dist/commands/run.js.map +1 -0
  28. package/dist/commands/status.d.ts +8 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +399 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/core/action-executor.d.ts +96 -0
  33. package/dist/core/action-executor.d.ts.map +1 -0
  34. package/dist/core/action-executor.js +289 -0
  35. package/dist/core/action-executor.js.map +1 -0
  36. package/dist/core/checkpoint-manager.d.ts +94 -0
  37. package/dist/core/checkpoint-manager.d.ts.map +1 -0
  38. package/dist/core/checkpoint-manager.js +236 -0
  39. package/dist/core/checkpoint-manager.js.map +1 -0
  40. package/dist/core/config-manager.d.ts +62 -0
  41. package/dist/core/config-manager.d.ts.map +1 -0
  42. package/dist/core/config-manager.js +184 -0
  43. package/dist/core/config-manager.js.map +1 -0
  44. package/dist/core/config-schema.d.ts +74 -0
  45. package/dist/core/config-schema.d.ts.map +1 -0
  46. package/dist/core/config-schema.js +84 -0
  47. package/dist/core/config-schema.js.map +1 -0
  48. package/dist/core/context-builder.d.ts +116 -0
  49. package/dist/core/context-builder.d.ts.map +1 -0
  50. package/dist/core/context-builder.js +388 -0
  51. package/dist/core/context-builder.js.map +1 -0
  52. package/dist/core/feedback-builder.d.ts +94 -0
  53. package/dist/core/feedback-builder.d.ts.map +1 -0
  54. package/dist/core/feedback-builder.js +226 -0
  55. package/dist/core/feedback-builder.js.map +1 -0
  56. package/dist/core/file-safeguard.d.ts +109 -0
  57. package/dist/core/file-safeguard.d.ts.map +1 -0
  58. package/dist/core/file-safeguard.js +200 -0
  59. package/dist/core/file-safeguard.js.map +1 -0
  60. package/dist/core/git-branch-manager.d.ts +122 -0
  61. package/dist/core/git-branch-manager.d.ts.map +1 -0
  62. package/dist/core/git-branch-manager.js +302 -0
  63. package/dist/core/git-branch-manager.js.map +1 -0
  64. package/dist/core/github-plan.d.ts +86 -0
  65. package/dist/core/github-plan.d.ts.map +1 -0
  66. package/dist/core/github-plan.js +333 -0
  67. package/dist/core/github-plan.js.map +1 -0
  68. package/dist/core/index.d.ts +43 -0
  69. package/dist/core/index.d.ts.map +1 -0
  70. package/dist/core/index.js +26 -0
  71. package/dist/core/index.js.map +1 -0
  72. package/dist/core/local-markdown-plan.d.ts +65 -0
  73. package/dist/core/local-markdown-plan.d.ts.map +1 -0
  74. package/dist/core/local-markdown-plan.js +154 -0
  75. package/dist/core/local-markdown-plan.js.map +1 -0
  76. package/dist/core/loop-engine.d.ts +133 -0
  77. package/dist/core/loop-engine.d.ts.map +1 -0
  78. package/dist/core/loop-engine.js +420 -0
  79. package/dist/core/loop-engine.js.map +1 -0
  80. package/dist/core/loop-events.d.ts +48 -0
  81. package/dist/core/loop-events.d.ts.map +1 -0
  82. package/dist/core/loop-events.js +24 -0
  83. package/dist/core/loop-events.js.map +1 -0
  84. package/dist/core/loop-state.d.ts +51 -0
  85. package/dist/core/loop-state.d.ts.map +1 -0
  86. package/dist/core/loop-state.js +48 -0
  87. package/dist/core/loop-state.js.map +1 -0
  88. package/dist/core/markdown-parser.d.ts +51 -0
  89. package/dist/core/markdown-parser.d.ts.map +1 -0
  90. package/dist/core/markdown-parser.js +122 -0
  91. package/dist/core/markdown-parser.js.map +1 -0
  92. package/dist/core/plan-manager.d.ts +61 -0
  93. package/dist/core/plan-manager.d.ts.map +1 -0
  94. package/dist/core/plan-manager.js +7 -0
  95. package/dist/core/plan-manager.js.map +1 -0
  96. package/dist/core/progress-tracker.d.ts +74 -0
  97. package/dist/core/progress-tracker.d.ts.map +1 -0
  98. package/dist/core/progress-tracker.js +198 -0
  99. package/dist/core/progress-tracker.js.map +1 -0
  100. package/dist/core/prompt-examples.d.ts +52 -0
  101. package/dist/core/prompt-examples.d.ts.map +1 -0
  102. package/dist/core/prompt-examples.js +194 -0
  103. package/dist/core/prompt-examples.js.map +1 -0
  104. package/dist/core/response-parser.d.ts +90 -0
  105. package/dist/core/response-parser.d.ts.map +1 -0
  106. package/dist/core/response-parser.js +209 -0
  107. package/dist/core/response-parser.js.map +1 -0
  108. package/dist/core/verification-hooks.d.ts +103 -0
  109. package/dist/core/verification-hooks.d.ts.map +1 -0
  110. package/dist/core/verification-hooks.js +268 -0
  111. package/dist/core/verification-hooks.js.map +1 -0
  112. package/dist/index.d.ts +13 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +17 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/integrations/auth.d.ts +28 -0
  117. package/dist/integrations/auth.d.ts.map +1 -0
  118. package/dist/integrations/auth.js +76 -0
  119. package/dist/integrations/auth.js.map +1 -0
  120. package/dist/integrations/copilot-agent.d.ts +104 -0
  121. package/dist/integrations/copilot-agent.d.ts.map +1 -0
  122. package/dist/integrations/copilot-agent.js +235 -0
  123. package/dist/integrations/copilot-agent.js.map +1 -0
  124. package/dist/integrations/index.d.ts +18 -0
  125. package/dist/integrations/index.d.ts.map +1 -0
  126. package/dist/integrations/index.js +14 -0
  127. package/dist/integrations/index.js.map +1 -0
  128. package/dist/integrations/mcp-tools.d.ts +129 -0
  129. package/dist/integrations/mcp-tools.d.ts.map +1 -0
  130. package/dist/integrations/mcp-tools.js +272 -0
  131. package/dist/integrations/mcp-tools.js.map +1 -0
  132. package/dist/integrations/tokens.d.ts +45 -0
  133. package/dist/integrations/tokens.d.ts.map +1 -0
  134. package/dist/integrations/tokens.js +50 -0
  135. package/dist/integrations/tokens.js.map +1 -0
  136. package/dist/types/index.d.ts +53 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/index.js +7 -0
  139. package/dist/types/index.js.map +1 -0
  140. package/dist/utils/index.d.ts +23 -0
  141. package/dist/utils/index.d.ts.map +1 -0
  142. package/dist/utils/index.js +37 -0
  143. package/dist/utils/index.js.map +1 -0
  144. package/dist/utils/output.d.ts +59 -0
  145. package/dist/utils/output.d.ts.map +1 -0
  146. package/dist/utils/output.js +96 -0
  147. package/dist/utils/output.js.map +1 -0
  148. package/dist/utils/paths.d.ts +34 -0
  149. package/dist/utils/paths.d.ts.map +1 -0
  150. package/dist/utils/paths.js +67 -0
  151. package/dist/utils/paths.js.map +1 -0
  152. package/dist/utils/shell.d.ts +26 -0
  153. package/dist/utils/shell.d.ts.map +1 -0
  154. package/dist/utils/shell.js +65 -0
  155. package/dist/utils/shell.js.map +1 -0
  156. package/dist/utils/validation.d.ts +27 -0
  157. package/dist/utils/validation.d.ts.map +1 -0
  158. package/dist/utils/validation.js +43 -0
  159. package/dist/utils/validation.js.map +1 -0
  160. package/package.json +86 -0
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Init Command
3
+ *
4
+ * Initialize GitHub Copilot Ralph in a repository
5
+ */
6
+ import { execSync } from 'node:child_process';
7
+ import { info, success, error, warn, debug, heading, code, dim } from '../utils/index.js';
8
+ import { ConfigManager } from '../core/config-manager.js';
9
+ /**
10
+ * Check if we're in a git repository
11
+ */
12
+ function isGitRepository() {
13
+ try {
14
+ execSync('git rev-parse --is-inside-work-tree', {
15
+ stdio: ['pipe', 'pipe', 'pipe'],
16
+ });
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ /**
24
+ * Get the git repository root
25
+ */
26
+ function getGitRoot() {
27
+ try {
28
+ return execSync('git rev-parse --show-toplevel', {
29
+ encoding: 'utf-8',
30
+ stdio: ['pipe', 'pipe', 'pipe'],
31
+ }).trim();
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ export function registerInitCommand(program) {
38
+ program
39
+ .command('init')
40
+ .description('Initialize GitHub Copilot Ralph in the current repository')
41
+ .option('--force', 'Overwrite existing configuration')
42
+ .option('--local', 'Use local Markdown files as plan source')
43
+ .option('--github', 'Use GitHub Issues as plan source')
44
+ .option('--plan-source <source>', 'Plan source (github or local)')
45
+ .addHelpText('after', `
46
+ Examples:
47
+ $ ghcralph init # Interactive initialization
48
+ $ ghcralph init --local # Use local Markdown plan files
49
+ $ ghcralph init --github # Use GitHub Issues as plan source
50
+ $ ghcralph init --force # Overwrite existing configuration
51
+
52
+ This command will:
53
+ 1. Create .ghcralph/ directory in your project
54
+ 2. Generate config.json with default settings
55
+ 3. Add .ghcralph/ to .gitignore (optional)
56
+
57
+ See also:
58
+ ghcralph run Execute a coding loop
59
+ ghcralph config View or modify configuration
60
+ `)
61
+ .action(async (options) => {
62
+ console.log('');
63
+ console.log(heading('🤖 GitHub Copilot Ralph - Initialize'));
64
+ console.log('');
65
+ // Check for git repository
66
+ if (!isGitRepository()) {
67
+ error('Not in a git repository. Please run "git init" first.');
68
+ process.exit(1);
69
+ }
70
+ const gitRoot = getGitRoot();
71
+ debug(`Git root: ${gitRoot}`);
72
+ // Create config manager
73
+ const configManager = new ConfigManager(gitRoot ?? undefined);
74
+ // Check for existing configuration
75
+ const hasExisting = await configManager.hasLocalConfig();
76
+ if (hasExisting && !options.force) {
77
+ warn('GitHub Copilot Ralph is already initialized in this repository.');
78
+ info(`Use ${code('--force')} to reinitialize.`);
79
+ return;
80
+ }
81
+ // Load existing or default config
82
+ await configManager.load();
83
+ // Determine plan source
84
+ let planSource = 'local';
85
+ if (options.github) {
86
+ planSource = 'github';
87
+ }
88
+ else if (options.local) {
89
+ planSource = 'local';
90
+ }
91
+ else if (options.planSource) {
92
+ planSource = options.planSource;
93
+ }
94
+ // Update configuration
95
+ configManager.set('planSource', planSource);
96
+ // Initialize local directory and save config
97
+ const stateDir = await configManager.initLocal();
98
+ // Display configuration
99
+ const config = configManager.getConfig();
100
+ console.log(dim('Configuration:'));
101
+ console.log(` ${dim('Plan source:')} ${code(config.planSource)}`);
102
+ console.log(` ${dim('Max iterations:')} ${config.maxIterations}`);
103
+ console.log(` ${dim('Max tokens:')} ${config.maxTokens.toLocaleString()}`);
104
+ console.log(` ${dim('Model:')} ${code(config.defaultModel)}`);
105
+ console.log(` ${dim('Auto commit:')} ${config.autoCommit}`);
106
+ console.log(` ${dim('Branch prefix:')} ${code(config.branchPrefix)}`);
107
+ console.log('');
108
+ console.log(dim('Created:'));
109
+ console.log(` ${code(stateDir)}`);
110
+ console.log('');
111
+ success('GitHub Copilot Ralph initialized successfully!');
112
+ console.log('');
113
+ info(`Run ${code('ghcralph run --task "Your task"')} to start.`);
114
+ });
115
+ }
116
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,QAAQ,CAAC,qCAAqC,EAAE;YAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,+BAA+B,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AASD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,yCAAyC,CAAC;SAC5D,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,wBAAwB,EAAE,+BAA+B,CAAC;SACjE,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;CAezB,CAAC;SACG,MAAM,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,2BAA2B;QAC3B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QAE9B,wBAAwB;QACxB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;QAE9D,mCAAmC;QACnC,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;QACzD,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAE3B,wBAAwB;QACxB,IAAI,UAAU,GAAe,OAAO,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,GAAG,QAAQ,CAAC;QACxB,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC9B,UAAU,GAAG,OAAO,CAAC,UAAwB,CAAC;QAChD,CAAC;QAED,uBAAuB;QACvB,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAE5C,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;QAEjD,wBAAwB;QACxB,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,OAAO,IAAI,CAAC,iCAAiC,CAAC,YAAY,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rollback Command
3
+ *
4
+ * Revert to a previous checkpoint
5
+ */
6
+ import type { Command } from 'commander';
7
+ export declare function registerRollbackCommand(program: Command): void;
8
+ //# sourceMappingURL=rollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmFzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsL9D"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Rollback Command
3
+ *
4
+ * Revert to a previous checkpoint
5
+ */
6
+ import { exec } from 'node:child_process';
7
+ import { promisify } from 'node:util';
8
+ import { info, success, warn, error, dim, heading, code, parsePositiveInt } from '../utils/index.js';
9
+ const execAsync = promisify(exec);
10
+ /**
11
+ * Get recent Ralph commits
12
+ */
13
+ async function getRalphCommits(limit = 10) {
14
+ try {
15
+ const { stdout } = await execAsync(`git log --oneline --format="%H|%s|%ar" -n ${limit} 2>/dev/null`);
16
+ const lines = stdout.trim().split('\n').filter(Boolean);
17
+ const commits = lines
18
+ .map(line => {
19
+ const [hash, message, date] = line.split('|');
20
+ return { hash: hash ?? '', message: message ?? '', date: date ?? '' };
21
+ })
22
+ .filter(c => c.message.startsWith('ghcralph:'));
23
+ return commits;
24
+ }
25
+ catch {
26
+ return [];
27
+ }
28
+ }
29
+ /**
30
+ * Get files changed in a commit
31
+ */
32
+ async function getCommitFiles(hash) {
33
+ try {
34
+ const { stdout } = await execAsync(`git diff-tree --no-commit-id --name-only -r ${hash} 2>/dev/null`);
35
+ return stdout.trim().split('\n').filter(Boolean);
36
+ }
37
+ catch {
38
+ return [];
39
+ }
40
+ }
41
+ /**
42
+ * Get the initial commit before Ralph session
43
+ */
44
+ async function getPreSessionCommit() {
45
+ try {
46
+ // Find the first Ralph commit and get its parent
47
+ const { stdout } = await execAsync('git log --oneline --format="%H|%s" 2>/dev/null');
48
+ const lines = stdout.trim().split('\n').filter(Boolean);
49
+ let firstRalphCommit = null;
50
+ for (let i = 0; i < lines.length; i++) {
51
+ const [hash, message] = lines[i]?.split('|') ?? [];
52
+ if (message?.startsWith('ghcralph:')) {
53
+ firstRalphCommit = hash ?? null;
54
+ }
55
+ else if (firstRalphCommit) {
56
+ // Found the first non-Ralph commit after Ralph commits
57
+ return hash ?? null;
58
+ }
59
+ }
60
+ // If we found Ralph commits but no parent, try to get the parent of first Ralph commit
61
+ if (firstRalphCommit) {
62
+ try {
63
+ const { stdout: parentHash } = await execAsync(`git rev-parse "${firstRalphCommit}^" 2>/dev/null`);
64
+ return parentHash.trim();
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ return null;
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ export function registerRollbackCommand(program) {
77
+ program
78
+ .command('rollback')
79
+ .description('Revert to a previous checkpoint')
80
+ .option('--to <commit>', 'Specific commit hash to rollback to')
81
+ .option('--iterations <n>', 'Number of iterations to undo')
82
+ .option('--all', 'Undo entire Ralph session')
83
+ .option('--list', 'List available checkpoints')
84
+ .option('--force', 'Skip confirmation prompt')
85
+ .addHelpText('after', `
86
+ Examples:
87
+ $ ghcralph rollback # Undo last iteration
88
+ $ ghcralph rollback --iterations 3 # Undo last 3 iterations
89
+ $ ghcralph rollback --to abc1234 # Rollback to specific commit
90
+ $ ghcralph rollback --all --force # Reset to pre-session state
91
+ $ ghcralph rollback --list # Show available checkpoints
92
+
93
+ Safety:
94
+ - All rollback operations require --force flag
95
+ - Preview shows files that will be affected
96
+ - Original state can be recovered from git reflog
97
+
98
+ See also:
99
+ ghcralph status View current progress
100
+ ghcralph run Start a new coding loop
101
+ `)
102
+ .action(async (options) => {
103
+ // List checkpoints
104
+ if (options.list) {
105
+ console.log(heading('📋 Ralph Checkpoints'));
106
+ console.log('');
107
+ const commits = await getRalphCommits(20);
108
+ if (commits.length === 0) {
109
+ info('No Ralph checkpoints found');
110
+ return;
111
+ }
112
+ for (const commit of commits) {
113
+ console.log(` ${code(commit.hash.substring(0, 7))} ${commit.message} ${dim(`(${commit.date})`)}`);
114
+ }
115
+ console.log('');
116
+ info(`Use ${code('ghcralph rollback --to <hash>')} to rollback to a specific checkpoint`);
117
+ return;
118
+ }
119
+ // Rollback all
120
+ if (options.all) {
121
+ const preSession = await getPreSessionCommit();
122
+ if (!preSession) {
123
+ error('Could not find pre-session commit');
124
+ return;
125
+ }
126
+ const commits = await getRalphCommits(100);
127
+ console.log('');
128
+ warn(`This will reset to the state before the Ralph session started.`);
129
+ console.log(` ${dim('Target:')} ${code(preSession.substring(0, 7))}`);
130
+ console.log(` ${dim('Iterations to undo:')} ${commits.length}`);
131
+ console.log('');
132
+ if (!options.force) {
133
+ warn('Use --force to confirm this destructive operation');
134
+ return;
135
+ }
136
+ try {
137
+ await execAsync(`git reset --hard "${preSession}"`);
138
+ success(`Reset to pre-session state (${preSession.substring(0, 7)})`);
139
+ }
140
+ catch (err) {
141
+ error(`Failed to rollback: ${err instanceof Error ? err.message : String(err)}`);
142
+ }
143
+ return;
144
+ }
145
+ // Rollback to specific commit
146
+ if (options.to) {
147
+ const files = await getCommitFiles(options.to);
148
+ console.log('');
149
+ console.log(`Rolling back to commit ${code(options.to.substring(0, 7))}`);
150
+ if (files.length > 0) {
151
+ console.log(` ${dim('Files affected:')} ${files.length}`);
152
+ for (const file of files.slice(0, 5)) {
153
+ console.log(` - ${file}`);
154
+ }
155
+ if (files.length > 5) {
156
+ console.log(` ${dim(`...and ${files.length - 5} more`)}`);
157
+ }
158
+ }
159
+ console.log('');
160
+ if (!options.force) {
161
+ warn('Use --force to confirm this operation');
162
+ return;
163
+ }
164
+ try {
165
+ await execAsync(`git reset --hard "${options.to}"`);
166
+ success(`Rolled back to ${options.to.substring(0, 7)}`);
167
+ }
168
+ catch (err) {
169
+ error(`Failed to rollback: ${err instanceof Error ? err.message : String(err)}`);
170
+ }
171
+ return;
172
+ }
173
+ // Rollback N iterations
174
+ let iterations = 1;
175
+ if (options.iterations) {
176
+ const iterationsResult = parsePositiveInt(options.iterations, 'iterations');
177
+ if (!iterationsResult.valid) {
178
+ error(iterationsResult.error ?? 'Invalid iterations value');
179
+ return;
180
+ }
181
+ if (iterationsResult.value === undefined) {
182
+ error(iterationsResult.error ?? 'Invalid iterations value');
183
+ return;
184
+ }
185
+ iterations = iterationsResult.value;
186
+ }
187
+ const commits = await getRalphCommits(iterations + 1);
188
+ if (commits.length < iterations) {
189
+ error(`Only ${commits.length} Ralph iterations found, cannot rollback ${iterations}`);
190
+ return;
191
+ }
192
+ // Find the commit to reset to (one before the iterations we're undoing)
193
+ const targetIndex = iterations;
194
+ const targetCommit = commits[targetIndex];
195
+ if (!targetCommit) {
196
+ // Need to find parent of oldest Ralph commit being undone
197
+ const lastUndone = commits[iterations - 1];
198
+ if (!lastUndone) {
199
+ error('Could not determine rollback target');
200
+ return;
201
+ }
202
+ try {
203
+ const { stdout } = await execAsync(`git rev-parse "${lastUndone.hash}^" 2>/dev/null`);
204
+ const parentHash = stdout.trim();
205
+ console.log('');
206
+ console.log(`Rolling back ${iterations} iteration(s)`);
207
+ console.log(` ${dim('Target:')} ${code(parentHash.substring(0, 7))}`);
208
+ console.log('');
209
+ if (!options.force) {
210
+ warn('Use --force to confirm this operation');
211
+ return;
212
+ }
213
+ await execAsync(`git reset --hard "${parentHash}"`);
214
+ success(`Rolled back ${iterations} iteration(s)`);
215
+ }
216
+ catch (err) {
217
+ error(`Failed to rollback: ${err instanceof Error ? err.message : String(err)}`);
218
+ }
219
+ return;
220
+ }
221
+ console.log('');
222
+ console.log(`Rolling back ${iterations} iteration(s)`);
223
+ console.log(` ${dim('Target:')} ${code(targetCommit.hash.substring(0, 7))} - ${targetCommit.message}`);
224
+ console.log('');
225
+ if (!options.force) {
226
+ warn('Use --force to confirm this operation');
227
+ return;
228
+ }
229
+ try {
230
+ await execAsync(`git reset --hard "${targetCommit.hash}"`);
231
+ success(`Rolled back to iteration ${commits.length - iterations}`);
232
+ }
233
+ catch (err) {
234
+ error(`Failed to rollback: ${err instanceof Error ? err.message : String(err)}`);
235
+ }
236
+ });
237
+ }
238
+ //# sourceMappingURL=rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Run Command
3
+ *
4
+ * Execute an agentic coding loop
5
+ */
6
+ import type { Command } from 'commander';
7
+ export interface RunOptions {
8
+ task?: string;
9
+ file?: string;
10
+ plan?: string;
11
+ github?: string;
12
+ label?: string;
13
+ milestone?: string;
14
+ assignee?: string;
15
+ context?: string[];
16
+ branch?: string;
17
+ force?: boolean;
18
+ noCommit?: boolean;
19
+ unlimited?: boolean;
20
+ timeout?: string;
21
+ allowDelete?: boolean;
22
+ maxIterations: string;
23
+ maxTokens?: string;
24
+ model?: string;
25
+ dryRun?: boolean;
26
+ }
27
+ export declare function registerRunCommand(program: Command): void;
28
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA2ED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmXzD"}