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,399 @@
1
+ /**
2
+ * Status Command
3
+ *
4
+ * Check the current loop status with rich session information
5
+ */
6
+ import fs from 'node:fs/promises';
7
+ import path from 'node:path';
8
+ import { exec } from 'node:child_process';
9
+ import { promisify } from 'node:util';
10
+ import { info, success, heading, dim, code, warn } from '../utils/index.js';
11
+ import { ProgressTracker } from '../core/progress-tracker.js';
12
+ import { getLocalStateDir } from '../utils/paths.js';
13
+ import chalk from 'chalk';
14
+ const execAsync = promisify(exec);
15
+ export function registerStatusCommand(program) {
16
+ program
17
+ .command('status')
18
+ .description('Check current loop status')
19
+ .option('--json', 'Output in JSON format')
20
+ .option('--files', 'Show file operations (created, modified, blocked)')
21
+ .option('--history', 'Show past Ralph sessions')
22
+ .action(async (options) => {
23
+ // Handle --files flag
24
+ if (options.files) {
25
+ await showFileStatus(options.json);
26
+ return;
27
+ }
28
+ // Handle --history flag
29
+ if (options.history) {
30
+ await showHistory(options.json);
31
+ return;
32
+ }
33
+ await showCurrentStatus(options.json);
34
+ });
35
+ }
36
+ /**
37
+ * Show current session status with rich information
38
+ */
39
+ async function showCurrentStatus(jsonOutput) {
40
+ const tracker = new ProgressTracker();
41
+ const progressPath = tracker.getProgressFilePath();
42
+ // Check if progress file exists
43
+ let progressContent = null;
44
+ try {
45
+ progressContent = await fs.readFile(progressPath, 'utf-8');
46
+ }
47
+ catch {
48
+ // No session
49
+ }
50
+ if (!progressContent) {
51
+ if (jsonOutput) {
52
+ console.log(JSON.stringify({ active: false, message: 'No active session' }));
53
+ }
54
+ else {
55
+ console.log('');
56
+ success('No active Ralph session');
57
+ console.log('');
58
+ console.log(dim(' Start a new session with:'));
59
+ console.log(` ${code('ghcralph run --task "your task description"')}`);
60
+ console.log('');
61
+ }
62
+ return;
63
+ }
64
+ // Parse session info from progress file
65
+ const session = parseProgressFile(progressContent);
66
+ // Get branch info
67
+ let branch = '';
68
+ try {
69
+ const { stdout } = await execAsync('git rev-parse --abbrev-ref HEAD');
70
+ branch = stdout.trim();
71
+ }
72
+ catch {
73
+ // Not in git repo
74
+ }
75
+ // Get modified files
76
+ const modifiedFiles = await getModifiedFiles();
77
+ if (jsonOutput) {
78
+ console.log(JSON.stringify({
79
+ active: true,
80
+ status: session.status,
81
+ task: session.task,
82
+ branch,
83
+ iteration: session.iteration,
84
+ maxIterations: session.maxIterations,
85
+ tokensUsed: session.tokensUsed,
86
+ started: session.started,
87
+ elapsed: session.elapsed,
88
+ lastCheckpoint: session.lastCheckpoint,
89
+ modifiedFiles,
90
+ progressFile: progressPath,
91
+ stateDir: getLocalStateDir(),
92
+ }, null, 2));
93
+ return;
94
+ }
95
+ // Rich output
96
+ console.log('');
97
+ console.log(heading('📋 Ralph Session Status'));
98
+ console.log(chalk.dim('━'.repeat(40)));
99
+ console.log('');
100
+ // Status indicator
101
+ const statusIcon = getStatusIcon(session.status);
102
+ console.log(` ${dim('Status:')} ${statusIcon} ${session.status}`);
103
+ console.log(` ${dim('Task:')} ${session.task}`);
104
+ if (branch) {
105
+ console.log(` ${dim('Branch:')} ${code(branch)}`);
106
+ }
107
+ console.log(` ${dim('Started:')} ${session.started} (${session.elapsed})`);
108
+ console.log('');
109
+ // Progress bar
110
+ const progressPercent = session.maxIterations > 0 ? session.iteration / session.maxIterations : 0;
111
+ const progressBar = createProgressBar(progressPercent, 20);
112
+ console.log(` ${dim('Progress:')} ${progressBar} ${session.iteration}/${session.maxIterations} iterations`);
113
+ // Token usage
114
+ const tokenDisplay = session.tokensUsed.toLocaleString();
115
+ console.log(` ${dim('Tokens:')} ${tokenDisplay} used`);
116
+ console.log('');
117
+ // Modified files
118
+ if (modifiedFiles.length > 0) {
119
+ console.log(dim(' Modified Files:'));
120
+ for (const file of modifiedFiles.slice(0, 6)) {
121
+ const prefix = file.status === 'A' ? chalk.green('+') :
122
+ file.status === 'D' ? chalk.red('-') :
123
+ chalk.yellow('~');
124
+ console.log(` ${prefix} ${file.path}`);
125
+ }
126
+ if (modifiedFiles.length > 6) {
127
+ console.log(dim(` ...and ${modifiedFiles.length - 6} more files`));
128
+ }
129
+ console.log('');
130
+ }
131
+ // Last commit
132
+ if (session.lastCheckpoint) {
133
+ console.log(` ${dim('Last Commit:')} ${code(session.lastCheckpoint.substring(0, 7))}`);
134
+ console.log('');
135
+ }
136
+ // Helpful tips based on status
137
+ console.log(dim(' 💡 Tips:'));
138
+ if (session.status === 'In Progress' || session.status === 'Paused') {
139
+ console.log(dim(` • Run ${code("ghcralph rollback")} to undo the last iteration`));
140
+ console.log(dim(` • Run ${code("ghcralph status --files")} to see all file changes`));
141
+ }
142
+ else if (session.status === 'Completed') {
143
+ console.log(dim(` • Review changes with ${code("git diff HEAD~" + session.iteration)}`));
144
+ console.log(dim(` • Create a PR with ${code("gh pr create")}`));
145
+ }
146
+ else if (session.status === 'Failed') {
147
+ console.log(dim(` • Check logs: ${code(progressPath)}`));
148
+ console.log(dim(` • Rollback with ${code("ghcralph rollback --all --force")}`));
149
+ }
150
+ console.log('');
151
+ }
152
+ /**
153
+ * Parse progress.md file into structured data
154
+ */
155
+ function parseProgressFile(content) {
156
+ const lines = content.split('\n');
157
+ const session = {
158
+ status: 'Unknown',
159
+ task: '',
160
+ iteration: 0,
161
+ maxIterations: 0,
162
+ tokensUsed: 0,
163
+ started: '',
164
+ elapsed: '',
165
+ };
166
+ for (const line of lines) {
167
+ if (line.startsWith('- **Started**:')) {
168
+ session.started = line.replace('- **Started**:', '').trim();
169
+ }
170
+ else if (line.startsWith('- **Task**:')) {
171
+ session.task = line.replace('- **Task**:', '').trim();
172
+ }
173
+ else if (line.startsWith('- **Status**:')) {
174
+ // Remove status emojis and extract text - just keep alpha characters and spaces
175
+ const statusText = line.replace('- **Status**:', '').trim();
176
+ // Extract just the text portion after any emoji
177
+ session.status = statusText.replace(/^[^\w]+/, '').trim() || statusText;
178
+ }
179
+ else if (line.startsWith('- **Iterations**:')) {
180
+ const match = line.match(/(\d+)\/(\d+)/);
181
+ if (match && match[1] && match[2]) {
182
+ session.iteration = parseInt(match[1], 10);
183
+ session.maxIterations = parseInt(match[2], 10);
184
+ }
185
+ }
186
+ else if (line.startsWith('- **Tokens Used**:')) {
187
+ session.tokensUsed = parseInt(line.replace('- **Tokens Used**:', '').replace(/,/g, '').trim(), 10) || 0;
188
+ }
189
+ else if (line.startsWith('- **Elapsed**:')) {
190
+ session.elapsed = line.replace('- **Elapsed**:', '').trim();
191
+ }
192
+ else if (line.startsWith('- **Last Checkpoint**:')) {
193
+ session.lastCheckpoint = line.replace('- **Last Checkpoint**:', '').replace(/`/g, '').trim();
194
+ }
195
+ }
196
+ return session;
197
+ }
198
+ /**
199
+ * Get status icon
200
+ */
201
+ function getStatusIcon(status) {
202
+ if (status.includes('Progress'))
203
+ return '🟢';
204
+ if (status.includes('Complete'))
205
+ return '✅';
206
+ if (status.includes('Failed'))
207
+ return '🔴';
208
+ if (status.includes('Paused'))
209
+ return '🟡';
210
+ if (status.includes('Stopped'))
211
+ return '⏹️';
212
+ return '❓';
213
+ }
214
+ /**
215
+ * Create a progress bar
216
+ */
217
+ function createProgressBar(percent, width) {
218
+ const filled = Math.round(percent * width);
219
+ const empty = width - filled;
220
+ return chalk.green('█'.repeat(filled)) + chalk.dim('░'.repeat(empty));
221
+ }
222
+ /**
223
+ * Get modified files from git
224
+ */
225
+ async function getModifiedFiles() {
226
+ const files = [];
227
+ try {
228
+ const { stdout } = await execAsync('git status --porcelain');
229
+ const lines = stdout.trim().split('\n').filter(Boolean);
230
+ for (const line of lines) {
231
+ const status = line.substring(0, 2).trim();
232
+ const filePath = line.substring(3).trim();
233
+ files.push({ path: filePath, status: status.charAt(0) || 'M' });
234
+ }
235
+ }
236
+ catch {
237
+ // Git not available
238
+ }
239
+ return files;
240
+ }
241
+ /**
242
+ * Show past Ralph sessions from git log
243
+ */
244
+ async function showHistory(jsonOutput) {
245
+ try {
246
+ // Find Ralph commits
247
+ const { stdout } = await execAsync('git --no-pager log --oneline --grep="ghcralph:" -n 50');
248
+ const lines = stdout.trim().split('\n').filter(Boolean);
249
+ if (lines.length === 0) {
250
+ if (jsonOutput) {
251
+ console.log(JSON.stringify({ sessions: [] }));
252
+ }
253
+ else {
254
+ info('No past Ralph sessions found in git history');
255
+ }
256
+ return;
257
+ }
258
+ // Group by session (consecutive ralph commits with same prefix)
259
+ const sessions = [];
260
+ for (const line of lines) {
261
+ const [hash, ...msgParts] = line.split(' ');
262
+ if (hash) {
263
+ sessions.push({ hash, message: msgParts.join(' '), date: '' });
264
+ }
265
+ }
266
+ // Get dates for commits
267
+ for (const session of sessions) {
268
+ try {
269
+ const { stdout: dateOut } = await execAsync(`git --no-pager log -1 --format=%ai ${session.hash}`);
270
+ session.date = dateOut.trim().substring(0, 16); // YYYY-MM-DD HH:MM
271
+ }
272
+ catch {
273
+ session.date = 'unknown';
274
+ }
275
+ }
276
+ if (jsonOutput) {
277
+ console.log(JSON.stringify({ sessions }, null, 2));
278
+ return;
279
+ }
280
+ console.log('');
281
+ console.log(heading('📜 Past Ralph Sessions'));
282
+ console.log(chalk.dim('━'.repeat(40)));
283
+ console.log('');
284
+ // Group into sessions by detecting gaps
285
+ let lastIteration = 0;
286
+ for (let i = 0; i < Math.min(sessions.length, 20); i++) {
287
+ const sessionItem = sessions[i];
288
+ if (!sessionItem)
289
+ continue;
290
+ const match = sessionItem.message.match(/iteration (\d+)/);
291
+ const iteration = match?.[1] ? parseInt(match[1], 10) : 0;
292
+ // Detect new session (iteration resets or non-consecutive)
293
+ if (i > 0 && (iteration >= lastIteration || Math.abs(iteration - lastIteration) > 1)) {
294
+ console.log('');
295
+ }
296
+ lastIteration = iteration;
297
+ console.log(` ${dim(sessionItem.date)} ${code(sessionItem.hash.substring(0, 7))} ${sessionItem.message}`);
298
+ }
299
+ if (sessions.length > 20) {
300
+ console.log('');
301
+ console.log(dim(` ...and ${sessions.length - 20} more commits`));
302
+ }
303
+ console.log('');
304
+ console.log(dim(' 💡 Use "ghcralph rollback --to <hash>" to restore to a specific commit'));
305
+ console.log('');
306
+ }
307
+ catch {
308
+ if (jsonOutput) {
309
+ console.log(JSON.stringify({ error: 'Failed to get git history' }));
310
+ }
311
+ else {
312
+ warn('Failed to get git history');
313
+ }
314
+ }
315
+ }
316
+ async function showFileStatus(jsonOutput) {
317
+ const baselinePath = path.join(process.cwd(), '.ralph', 'baseline-files.json');
318
+ let baseline = null;
319
+ try {
320
+ const content = await fs.readFile(baselinePath, 'utf-8');
321
+ baseline = JSON.parse(content);
322
+ }
323
+ catch {
324
+ // No baseline
325
+ }
326
+ if (!baseline) {
327
+ if (jsonOutput) {
328
+ console.log(JSON.stringify({ hasBaseline: false, message: 'No baseline snapshot found' }));
329
+ }
330
+ else {
331
+ info('No baseline snapshot found. Run a Ralph session to create one.');
332
+ }
333
+ return;
334
+ }
335
+ // Get current git status to find modified/created files
336
+ const modifiedFiles = [];
337
+ const createdFiles = [];
338
+ try {
339
+ const { stdout: statusOut } = await execAsync('git status --porcelain');
340
+ const lines = statusOut.trim().split('\n').filter(Boolean);
341
+ for (const line of lines) {
342
+ const status = line.substring(0, 2).trim();
343
+ const file = line.substring(3).trim();
344
+ if (status === '??' || status === 'A') {
345
+ // Untracked or added
346
+ if (!baseline.files.includes(file)) {
347
+ createdFiles.push(file);
348
+ }
349
+ }
350
+ else if (status === 'M' || status === 'MM') {
351
+ modifiedFiles.push(file);
352
+ }
353
+ }
354
+ }
355
+ catch {
356
+ // Git not available
357
+ }
358
+ if (jsonOutput) {
359
+ console.log(JSON.stringify({
360
+ hasBaseline: true,
361
+ baselineCreatedAt: baseline.createdAt,
362
+ baselineFileCount: baseline.count,
363
+ createdFiles,
364
+ modifiedFiles,
365
+ }, null, 2));
366
+ }
367
+ else {
368
+ console.log('');
369
+ console.log(heading('📁 File Operations'));
370
+ console.log('');
371
+ console.log(` ${dim('Baseline created:')} ${baseline.createdAt}`);
372
+ console.log(` ${dim('Baseline files:')} ${baseline.count}`);
373
+ console.log('');
374
+ if (createdFiles.length > 0) {
375
+ console.log(dim(' Files created this session:'));
376
+ for (const file of createdFiles.slice(0, 10)) {
377
+ console.log(` + ${file}`);
378
+ }
379
+ if (createdFiles.length > 10) {
380
+ console.log(` ${dim(`...and ${createdFiles.length - 10} more`)}`);
381
+ }
382
+ console.log('');
383
+ }
384
+ if (modifiedFiles.length > 0) {
385
+ console.log(dim(' Files modified:'));
386
+ for (const file of modifiedFiles.slice(0, 10)) {
387
+ console.log(` ~ ${file}`);
388
+ }
389
+ if (modifiedFiles.length > 10) {
390
+ console.log(` ${dim(`...and ${modifiedFiles.length - 10} more`)}`);
391
+ }
392
+ console.log('');
393
+ }
394
+ if (createdFiles.length === 0 && modifiedFiles.length === 0) {
395
+ info('No file changes detected since baseline');
396
+ }
397
+ }
398
+ }
399
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Action Executor
3
+ *
4
+ * Executes parsed actions from AI responses.
5
+ * This component bridges the gap between AI intent and filesystem reality.
6
+ */
7
+ import type { Action, ParseResult } from './response-parser.js';
8
+ /**
9
+ * Result of executing a single action
10
+ */
11
+ export interface ActionResult {
12
+ /** The action that was executed */
13
+ action: Action;
14
+ /** Whether the action succeeded */
15
+ success: boolean;
16
+ /** Human-readable description of what happened */
17
+ message: string;
18
+ /** Output from command execution (for EXECUTE actions) */
19
+ output?: string;
20
+ /** Error message if failed */
21
+ error?: string;
22
+ }
23
+ /**
24
+ * Result of executing all actions from a response
25
+ */
26
+ export interface ExecutionResult {
27
+ /** Results for each action */
28
+ results: ActionResult[];
29
+ /** Whether all actions succeeded */
30
+ allSucceeded: boolean;
31
+ /** Whether a COMPLETE action was found */
32
+ taskComplete: boolean;
33
+ /** Completion reason if task is complete */
34
+ completionReason?: string;
35
+ /** Summary of executed actions */
36
+ summary: string;
37
+ }
38
+ /**
39
+ * Action executor configuration
40
+ */
41
+ export interface ActionExecutorConfig {
42
+ /** Working directory for file operations */
43
+ cwd: string;
44
+ /** Whether to actually execute actions (false = dry run) */
45
+ execute: boolean;
46
+ /** Timeout for shell commands in ms */
47
+ commandTimeout: number;
48
+ /** File safeguard manager for deletion protection */
49
+ fileSafeguard?: {
50
+ canDelete: (path: string) => boolean;
51
+ };
52
+ }
53
+ /**
54
+ * Action Executor class
55
+ */
56
+ export declare class ActionExecutor {
57
+ private config;
58
+ constructor(config?: Partial<ActionExecutorConfig>);
59
+ /**
60
+ * Execute all actions from a parsed response
61
+ */
62
+ executeAll(parseResult: ParseResult): Promise<ExecutionResult>;
63
+ /**
64
+ * Execute a single action
65
+ */
66
+ executeAction(action: Action): Promise<ActionResult>;
67
+ /**
68
+ * Execute a CREATE action
69
+ */
70
+ private executeCreate;
71
+ /**
72
+ * Execute an EDIT action
73
+ */
74
+ private executeEdit;
75
+ /**
76
+ * Execute a DELETE action
77
+ */
78
+ private executeDelete;
79
+ /**
80
+ * Execute an EXECUTE action (shell command)
81
+ */
82
+ private executeCommand;
83
+ /**
84
+ * Execute a COMPLETE action (just marks completion)
85
+ */
86
+ private executeComplete;
87
+ /**
88
+ * Build a human-readable summary of executed actions
89
+ */
90
+ private buildSummary;
91
+ }
92
+ /**
93
+ * Create an action executor with custom configuration
94
+ */
95
+ export declare function createActionExecutor(config?: Partial<ActionExecutorConfig>): ActionExecutor;
96
+ //# sourceMappingURL=action-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../../src/core/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,MAAM,EAMN,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAI9B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,oCAAoC;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,aAAa,CAAC,EAAE;QACd,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;KACtC,CAAC;CACH;AAQD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAItD;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAsCpE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0C1D;;OAEG;YACW,aAAa;IAiC3B;;OAEG;YACW,WAAW;IA+CzB;;OAEG;YACW,aAAa;IA6C3B;;OAEG;YACW,cAAc;IAgC5B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAsBrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,cAAc,CAEhB"}