centaurus-cli 2.9.4 → 2.9.6

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 (98) hide show
  1. package/dist/cli-adapter.d.ts +29 -4
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +700 -121
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/config/slash-commands.d.ts.map +1 -1
  6. package/dist/config/slash-commands.js +7 -0
  7. package/dist/config/slash-commands.js.map +1 -1
  8. package/dist/context/context-manager.d.ts +10 -0
  9. package/dist/context/context-manager.d.ts.map +1 -1
  10. package/dist/context/context-manager.js +17 -0
  11. package/dist/context/context-manager.js.map +1 -1
  12. package/dist/context/handlers/docker-handler.d.ts +7 -1
  13. package/dist/context/handlers/docker-handler.d.ts.map +1 -1
  14. package/dist/context/handlers/docker-handler.js +89 -16
  15. package/dist/context/handlers/docker-handler.js.map +1 -1
  16. package/dist/context/handlers/ssh-handler.d.ts +47 -1
  17. package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
  18. package/dist/context/handlers/ssh-handler.js +546 -73
  19. package/dist/context/handlers/ssh-handler.js.map +1 -1
  20. package/dist/context/handlers/wsl-handler.d.ts +5 -1
  21. package/dist/context/handlers/wsl-handler.d.ts.map +1 -1
  22. package/dist/context/handlers/wsl-handler.js +24 -6
  23. package/dist/context/handlers/wsl-handler.js.map +1 -1
  24. package/dist/context/subshell-handler.d.ts +8 -2
  25. package/dist/context/subshell-handler.d.ts.map +1 -1
  26. package/dist/index.js +12 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/services/checkpoint-manager.d.ts +162 -0
  29. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  30. package/dist/services/checkpoint-manager.js +926 -0
  31. package/dist/services/checkpoint-manager.js.map +1 -0
  32. package/dist/services/local-chat-storage.d.ts +3 -1
  33. package/dist/services/local-chat-storage.d.ts.map +1 -1
  34. package/dist/services/local-chat-storage.js +8 -3
  35. package/dist/services/local-chat-storage.js.map +1 -1
  36. package/dist/tools/background-command.d.ts.map +1 -1
  37. package/dist/tools/background-command.js +132 -24
  38. package/dist/tools/background-command.js.map +1 -1
  39. package/dist/tools/command.d.ts.map +1 -1
  40. package/dist/tools/command.js +106 -42
  41. package/dist/tools/command.js.map +1 -1
  42. package/dist/tools/create-image.d.ts.map +1 -1
  43. package/dist/tools/create-image.js +43 -18
  44. package/dist/tools/create-image.js.map +1 -1
  45. package/dist/tools/file-ops.d.ts.map +1 -1
  46. package/dist/tools/file-ops.js +12 -12
  47. package/dist/tools/file-ops.js.map +1 -1
  48. package/dist/tools/get-diff.d.ts +9 -45
  49. package/dist/tools/get-diff.d.ts.map +1 -1
  50. package/dist/tools/get-diff.js +288 -171
  51. package/dist/tools/get-diff.js.map +1 -1
  52. package/dist/tools/grep-search.d.ts +1 -1
  53. package/dist/tools/grep-search.d.ts.map +1 -1
  54. package/dist/tools/grep-search.js +80 -1
  55. package/dist/tools/grep-search.js.map +1 -1
  56. package/dist/tools/types.d.ts +3 -0
  57. package/dist/tools/types.d.ts.map +1 -1
  58. package/dist/ui/components/App.d.ts +8 -0
  59. package/dist/ui/components/App.d.ts.map +1 -1
  60. package/dist/ui/components/App.js +256 -66
  61. package/dist/ui/components/App.js.map +1 -1
  62. package/dist/ui/components/Breadcrumbs.d.ts.map +1 -1
  63. package/dist/ui/components/Breadcrumbs.js +22 -2
  64. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  65. package/dist/ui/components/ConfirmPrompt.d.ts +2 -0
  66. package/dist/ui/components/ConfirmPrompt.d.ts.map +1 -1
  67. package/dist/ui/components/ConfirmPrompt.js +8 -3
  68. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  69. package/dist/ui/components/InputBox.d.ts +6 -0
  70. package/dist/ui/components/InputBox.d.ts.map +1 -1
  71. package/dist/ui/components/InputBox.js +188 -23
  72. package/dist/ui/components/InputBox.js.map +1 -1
  73. package/dist/ui/components/InteractiveShell.d.ts +2 -0
  74. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  75. package/dist/ui/components/InteractiveShell.js +88 -26
  76. package/dist/ui/components/InteractiveShell.js.map +1 -1
  77. package/dist/ui/components/KeyboardHelp.d.ts.map +1 -1
  78. package/dist/ui/components/KeyboardHelp.js +14 -6
  79. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  80. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  81. package/dist/ui/components/ToolExecutionMessage.js +35 -16
  82. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  83. package/dist/utils/ansi-encoder.d.ts +5 -0
  84. package/dist/utils/ansi-encoder.d.ts.map +1 -1
  85. package/dist/utils/ansi-encoder.js +12 -5
  86. package/dist/utils/ansi-encoder.js.map +1 -1
  87. package/dist/utils/editor-utils.d.ts +14 -0
  88. package/dist/utils/editor-utils.d.ts.map +1 -1
  89. package/dist/utils/editor-utils.js +172 -0
  90. package/dist/utils/editor-utils.js.map +1 -1
  91. package/dist/utils/input-classifier.d.ts.map +1 -1
  92. package/dist/utils/input-classifier.js +2 -1
  93. package/dist/utils/input-classifier.js.map +1 -1
  94. package/dist/utils/terminal-output.d.ts +3 -1
  95. package/dist/utils/terminal-output.d.ts.map +1 -1
  96. package/dist/utils/terminal-output.js +235 -195
  97. package/dist/utils/terminal-output.js.map +1 -1
  98. package/package.json +3 -1
@@ -1,203 +1,320 @@
1
1
  import { exec } from 'child_process';
2
2
  import { promisify } from 'util';
3
3
  const execAsync = promisify(exec);
4
- export class GetDiffTool {
5
- /**
6
- * Execute git diff to show changes in the working directory
7
- */
8
- async execute(params, cwd) {
9
- const { filePath, staged = false } = params;
10
- try {
11
- // Check if git is available
12
- await this.checkGitAvailable();
13
- // Check if directory is a git repository
14
- await this.checkGitRepository(cwd);
15
- // Get list of changed files
16
- const filesChanged = await this.getChangedFiles(cwd, staged, filePath);
17
- // If no changes, return early
18
- if (filesChanged.length === 0) {
19
- return {
20
- diff: 'No changes detected in the working directory.',
21
- filesChanged: [],
22
- hasChanges: false,
23
- truncated: false,
24
- };
25
- }
26
- // Get the diff output
27
- const diff = await this.getDiffOutput(cwd, staged, filePath);
28
- // Truncate if necessary
29
- const { truncatedDiff, wasTruncated } = this.truncateDiff(diff);
30
- return {
31
- diff: truncatedDiff,
32
- filesChanged: this.normalizeFilePaths(filesChanged),
33
- hasChanges: true,
34
- truncated: wasTruncated,
35
- };
36
- }
37
- catch (error) {
38
- throw this.handleError(error);
39
- }
40
- }
41
- /**
42
- * Check if git command is available
43
- */
44
- async checkGitAvailable() {
45
- try {
46
- await execAsync('git --version');
47
- }
48
- catch (error) {
49
- throw new Error('Git command not found\n' +
50
- 'Suggestion: Install git to use diff functionality: https://git-scm.com/downloads');
51
- }
52
- }
53
- /**
54
- * Check if the current directory is a git repository
55
- */
56
- async checkGitRepository(cwd) {
57
- try {
58
- await execAsync('git rev-parse --git-dir', { cwd });
59
- }
60
- catch (error) {
61
- throw new Error('Not a git repository\n' +
62
- 'Suggestion: This directory is not under git version control. Initialize with \'git init\' to use diff functionality.');
63
- }
64
- }
65
- /**
66
- * Get list of changed files
67
- */
68
- async getChangedFiles(cwd, staged, filePath) {
69
- const stagedFlag = staged ? '--staged' : '';
70
- const fileArg = filePath ? `-- "${filePath}"` : '';
71
- const command = `git diff --name-only ${stagedFlag} ${fileArg}`.trim();
72
- try {
73
- const { stdout } = await execAsync(command, { cwd });
74
- return stdout
75
- .trim()
76
- .split('\n')
77
- .filter(line => line.length > 0);
78
- }
79
- catch (error) {
80
- // If the command fails, return empty array (no changes)
81
- return [];
82
- }
83
- }
84
- /**
85
- * Get the full diff output
86
- */
87
- async getDiffOutput(cwd, staged, filePath) {
88
- const stagedFlag = staged ? '--staged' : '';
89
- const fileArg = filePath ? `-- "${filePath}"` : '';
90
- const command = `git diff ${stagedFlag} ${fileArg}`.trim();
91
- try {
92
- const { stdout } = await execAsync(command, { cwd, maxBuffer: 10 * 1024 * 1024 });
93
- return stdout;
94
- }
95
- catch (error) {
96
- if (error.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') {
97
- throw new Error('Diff output too large. Try specifying a specific file with filePath parameter.');
98
- }
99
- throw error;
100
- }
101
- }
102
- /**
103
- * Truncate diff output to 500 lines maximum
104
- */
105
- truncateDiff(diff) {
106
- const lines = diff.split('\\n');
107
- const maxLines = 500;
108
- if (lines.length <= maxLines) {
109
- return { truncatedDiff: diff, wasTruncated: false };
110
- }
111
- const truncatedLines = lines.slice(0, maxLines);
112
- const remainingLines = lines.length - maxLines;
113
- truncatedLines.push('');
114
- truncatedLines.push(`[Diff truncated: ${remainingLines} more lines not shown]`);
115
- truncatedLines.push(`Total lines: ${lines.length}`);
116
- return {
117
- truncatedDiff: truncatedLines.join('\\n'),
118
- wasTruncated: true,
119
- };
120
- }
121
- /**
122
- * Normalize file paths to use forward slashes
123
- */
124
- normalizeFilePaths(files) {
125
- return files.map(file => file.replace(/\\\\/g, '/'));
126
- }
127
- /**
128
- * Handle errors with helpful messages
129
- */
130
- handleError(error) {
131
- if (error.message) {
132
- return error;
133
- }
134
- return new Error(`Failed to get diff: ${error.toString()}\\n` +
135
- 'Suggestion: Ensure you are in a git repository and git is installed.');
136
- }
137
- }
138
4
  /**
139
- * Tool wrapper for the registry
5
+ * Rewritten get_diff tool with action-based pattern and session scope support.
6
+ *
7
+ * Actions:
8
+ * - "overview" (default): Shows a compact summary of files changed.
9
+ * - "file_diff": Shows the detailed diff for a single specific file.
10
+ *
11
+ * Scopes:
12
+ * - "request" (default): Changes made in the current turn (since last user message).
13
+ * - "session": Cumulative changes made since the start of the conversation.
140
14
  */
141
15
  export const getDiffTool = {
142
16
  schema: {
143
17
  name: 'get_diff',
144
- description: `View changes in the working directory using git diff. Use this to verify your edits before completing a task.
18
+ description: `View changes made during the current session.
145
19
 
146
- WHEN TO USE:
147
- - After making file edits to see what changed
148
- - To verify changes before task completion
149
- - To check if your modifications worked as expected
150
- - To see if there are any uncommitted changes
20
+ ACTIONS:
21
+ - action="overview" (default): Shows a compact summary of files changed with line counts. Does NOT show content.
22
+ - action="file_diff": Shows the detailed diff for ONE specific file. Requires filePath.
151
23
 
152
- IMPORTANT: Output your summary then call task_complete after reviewing the diff if the changes look correct.`,
24
+ SCOPES (controlled by 'scope' parameter):
25
+ - scope="request" (default): Shows changes made only in the current turn (since the last user message).
26
+ - scope="session": Shows cumulative changes made since the beginning of the entire conversation.
27
+
28
+ WORKFLOW:
29
+ 1. Call with action="overview" to see changed files.
30
+ 2. If needed, call with action="file_diff" and filePath="<path>" to see details.
31
+ 3. Use scope="session" to review all changes made during the conversation.`,
153
32
  parameters: {
154
33
  type: 'object',
155
34
  properties: {
156
35
  reason_text: {
157
36
  type: 'string',
158
- description: 'REQUIRED: Brief explanation of why you are checking the diff. Example: "Verifying that the port change was applied correctly"'
37
+ description: 'REQUIRED: Brief explanation of why you are checking the diff.'
159
38
  },
160
- filePath: {
39
+ action: {
161
40
  type: 'string',
162
- description: 'Optional: Specific file to diff. If not provided, shows all changes.'
41
+ enum: ['overview', 'file_diff'],
42
+ description: 'The action to perform. "overview" (summary) or "file_diff" (detailed).'
163
43
  },
164
- staged: {
165
- type: 'boolean',
166
- description: 'Optional: Show staged changes instead of unstaged. Default: false'
44
+ scope: {
45
+ type: 'string',
46
+ enum: ['request', 'session'],
47
+ description: 'Scope of changes. "request" (default): Current turn only. "session": Entire conversation history.'
48
+ },
49
+ filePath: {
50
+ type: 'string',
51
+ description: 'The file path to get the detailed diff for. REQUIRED for action="file_diff".'
167
52
  }
168
53
  },
169
54
  required: ['reason_text']
170
55
  }
171
56
  },
172
57
  async execute(args, context) {
173
- const tool = new GetDiffTool();
174
- const params = {
175
- filePath: args.filePath,
176
- staged: args.staged
177
- };
178
- // Note: Do NOT call notifyToolStatus here - cli-adapter.ts already handles
179
- // tool status notifications automatically for all tools. Calling it here
180
- // would cause duplicate UI elements.
181
- try {
182
- const result = await tool.execute(params, context.cwd);
183
- if (!result.hasChanges) {
184
- return result.diff;
58
+ const action = args.action || 'overview';
59
+ const scope = args.scope || 'request';
60
+ const filePath = args.filePath;
61
+ const checkpointManager = context.checkpointManager;
62
+ let targetCheckpointId = context.currentCheckpointId;
63
+ // Determine current context (local vs remote) and handler
64
+ const currentContext = context.contextManager && typeof context.contextManager.getCurrentContext === 'function'
65
+ ? context.contextManager.getCurrentContext()
66
+ : null;
67
+ const isRemote = currentContext && currentContext.type !== 'local';
68
+ let remoteHandler;
69
+ if (isRemote && currentContext.handler) {
70
+ if (typeof currentContext.handler.readFile === 'function' &&
71
+ typeof currentContext.handler.writeFile === 'function' &&
72
+ typeof currentContext.handler.executeCommand === 'function' &&
73
+ typeof currentContext.handler.isConnected === 'function') {
74
+ remoteHandler = currentContext.handler;
185
75
  }
186
- // Format the output
187
- let output = `## Git Diff Results\\n\\n`;
188
- output += `**Files Changed:** ${result.filesChanged.length}\\n`;
189
- if (result.filesChanged.length > 0) {
190
- output += result.filesChanged.map(f => ` - ${f}`).join('\\n') + '\\n';
76
+ }
77
+ // Determine target checkpoint based on scope
78
+ if (checkpointManager && scope === 'session') {
79
+ try {
80
+ if (isRemote) {
81
+ const currentHost = currentContext?.metadata?.hostname;
82
+ const all = checkpointManager.list();
83
+ const matching = all.filter((cp) => {
84
+ if (cp.contextType !== currentContext.type)
85
+ return false;
86
+ if (!currentHost)
87
+ return true;
88
+ return cp.remoteSessionInfo?.hostname === currentHost;
89
+ });
90
+ if (matching.length > 0) {
91
+ const earliest = matching.reduce((a, b) => (a.createdAtMs < b.createdAtMs ? a : b));
92
+ targetCheckpointId = earliest.id;
93
+ }
94
+ }
95
+ else {
96
+ const initialCheckpoint = checkpointManager.getInitialCheckpoint();
97
+ if (initialCheckpoint) {
98
+ targetCheckpointId = initialCheckpoint.id;
99
+ }
100
+ }
191
101
  }
192
- output += `\\n${result.diff}\\n`;
193
- if (result.truncated) {
194
- output += `\\n**Note:** Output was truncated. Use filePath parameter to see specific file changes.\\n`;
102
+ catch (e) {
103
+ // Fallback to current if getting initial fails
195
104
  }
196
- return output;
197
105
  }
198
- catch (error) {
199
- throw new Error(`Get diff failed: ${error.message}`);
106
+ switch (action) {
107
+ case 'overview':
108
+ return handleOverview(checkpointManager, targetCheckpointId, context.cwd, scope, isRemote, remoteHandler);
109
+ case 'file_diff':
110
+ if (!filePath) {
111
+ throw new Error('Missing required parameter "filePath" for action "file_diff".');
112
+ }
113
+ return handleFileDiff(checkpointManager, targetCheckpointId, filePath, context.cwd, scope, isRemote, remoteHandler);
114
+ default:
115
+ throw new Error(`Unknown action "${action}". Valid actions are: "overview", "file_diff".`);
200
116
  }
201
117
  }
202
118
  };
119
+ /**
120
+ * Handle the "overview" action
121
+ */
122
+ async function handleOverview(checkpointManager, targetCheckpointId, cwd, scope, isRemote, remoteHandler) {
123
+ const scopeLabel = scope === 'session' ? 'Total Session Changes' : 'Current Request Changes';
124
+ // Try checkpoint-based changes
125
+ if (checkpointManager && targetCheckpointId) {
126
+ try {
127
+ const sessionData = await checkpointManager.getSessionChanges(targetCheckpointId, remoteHandler);
128
+ if (sessionData) {
129
+ const { changes, stats } = sessionData;
130
+ const totalFiles = changes.added.length + changes.modified.length + changes.deleted.length;
131
+ if (totalFiles === 0) {
132
+ // Return JSON with empty summary
133
+ return JSON.stringify({
134
+ result: `No changes detected in ${scope} scope.`,
135
+ summary: `No changes (${scope})`
136
+ });
137
+ }
138
+ let output = `## ${scopeLabel} Overview\n\n`;
139
+ output += `**${totalFiles} file(s) changed** (${changes.modified.length} modified, ${changes.added.length} added, ${changes.deleted.length} deleted)\n\n`;
140
+ let totalInsertions = 0;
141
+ let totalDeletions = 0;
142
+ if (changes.modified.length > 0) {
143
+ output += `**Modified:**\n`;
144
+ for (const filePath of changes.modified) {
145
+ const stat = stats.find((s) => s.filePath === filePath);
146
+ if (stat) {
147
+ output += ` - ${filePath} (+${stat.insertions}, -${stat.deletions})\n`;
148
+ totalInsertions += stat.insertions;
149
+ totalDeletions += stat.deletions;
150
+ }
151
+ else {
152
+ output += ` - ${filePath}\n`;
153
+ }
154
+ }
155
+ output += '\n';
156
+ }
157
+ if (changes.added.length > 0) {
158
+ output += `**Added:**\n`;
159
+ for (const filePath of changes.added) {
160
+ const stat = stats.find((s) => s.filePath === filePath);
161
+ if (stat) {
162
+ output += ` - ${filePath} (${stat.insertions} lines)\n`;
163
+ totalInsertions += stat.insertions;
164
+ }
165
+ else {
166
+ output += ` - ${filePath}\n`;
167
+ }
168
+ }
169
+ output += '\n';
170
+ }
171
+ if (changes.deleted.length > 0) {
172
+ output += `**Deleted:**\n`;
173
+ for (const filePath of changes.deleted) {
174
+ const stat = stats.find((s) => s.filePath === filePath);
175
+ if (stat) {
176
+ output += ` - ${filePath} (${stat.deletions} lines)\n`;
177
+ totalDeletions += stat.deletions;
178
+ }
179
+ else {
180
+ output += ` - ${filePath}\n`;
181
+ }
182
+ }
183
+ output += '\n';
184
+ }
185
+ output += `To see detailed diff for a file, use action="file_diff" with filePath and scope="${scope}".`;
186
+ // Create concise summary for UI
187
+ const summary = `${totalFiles} file(s) changed (+${totalInsertions}, -${totalDeletions})`;
188
+ return JSON.stringify({
189
+ result: output,
190
+ summary: summary
191
+ });
192
+ }
193
+ }
194
+ catch (error) {
195
+ // Fall through to git fallback
196
+ }
197
+ }
198
+ // Fallback
199
+ if (isRemote) {
200
+ return JSON.stringify({
201
+ result: 'No checkpoint data available for this remote session. Reconnect to the session where the checkpoint was created.',
202
+ summary: 'No remote checkpoint'
203
+ });
204
+ }
205
+ return await gitDiffStatFallback(cwd, scope);
206
+ return await gitDiffStatFallback(cwd, scope);
207
+ }
208
+ /**
209
+ * Handle the "file_diff" action
210
+ */
211
+ async function handleFileDiff(checkpointManager, targetCheckpointId, filePath, cwd, scope, isRemote, remoteHandler) {
212
+ const scopeLabel = scope === 'session' ? 'Session' : 'Request';
213
+ // Try checkpoint-based diff
214
+ if (checkpointManager && targetCheckpointId) {
215
+ try {
216
+ const diff = await checkpointManager.getFileDiff(targetCheckpointId, filePath, remoteHandler);
217
+ if (diff !== null) {
218
+ // Calculate lines added/deleted from diff string
219
+ const lines = diff.split('\n');
220
+ const added = lines.filter((l) => l.startsWith('+') && !l.startsWith('+++')).length;
221
+ const deleted = lines.filter((l) => l.startsWith('-') && !l.startsWith('---')).length;
222
+ const summary = `${filePath} (+${added}, -${deleted})`;
223
+ return JSON.stringify({
224
+ result: `## ${scopeLabel} Diff: ${filePath}\n\n\`\`\`diff\n${diff}\n\`\`\``,
225
+ summary: summary
226
+ });
227
+ }
228
+ return JSON.stringify({
229
+ result: `No changes found for "${filePath}" in ${scope} scope.`,
230
+ summary: `No changes: ${filePath}`
231
+ });
232
+ }
233
+ catch (error) {
234
+ // Fall through to git fallback
235
+ }
236
+ }
237
+ // Fallback
238
+ if (isRemote) {
239
+ return JSON.stringify({
240
+ result: `No checkpoint data available for remote diff of "${filePath}". Reconnect to the session where the checkpoint was created.`,
241
+ summary: `No remote checkpoint: ${filePath}`
242
+ });
243
+ }
244
+ return await gitDiffFileFallback(cwd, filePath, scope);
245
+ return await gitDiffFileFallback(cwd, filePath, scope);
246
+ }
247
+ /**
248
+ * Fallback: git diff --stat
249
+ */
250
+ async function gitDiffStatFallback(cwd, scope) {
251
+ const scopeNote = scope === 'session' ? '(Session scope requested, but using git status as fallback)' : '(Request scope requested, using git status as fallback)';
252
+ try {
253
+ await execAsync('git rev-parse --git-dir', { cwd });
254
+ }
255
+ catch {
256
+ return JSON.stringify({
257
+ result: 'No active checkpoint available and not in a git repository.',
258
+ summary: 'No git repo'
259
+ });
260
+ }
261
+ try {
262
+ // If session scope requested but no checkpoint, we can only really show current git status
263
+ // which effectively IS "session changes" if user commits between sessions?
264
+ // Actually git diff shows uncommitted changes.
265
+ const { stdout } = await execAsync('git diff --stat', { cwd, maxBuffer: 5 * 1024 * 1024 });
266
+ if (!stdout.trim()) {
267
+ return JSON.stringify({
268
+ result: 'No changes detected (git diff --stat empty).',
269
+ summary: 'No git changes'
270
+ });
271
+ }
272
+ // Extract file count from git diff --stat output
273
+ // Example: " 2 files changed, 10 insertions(+), 5 deletions(-)"
274
+ const lines = stdout.trim().split('\n');
275
+ const lastLine = lines[lines.length - 1].trim();
276
+ return JSON.stringify({
277
+ result: `## Git Diff Summary ${scopeNote}\n\n\`\`\`\n${stdout.trim()}\n\`\`\`\n\nNote: This is a git-based summary because checkpoints were unavailable.`,
278
+ summary: lastLine || 'Git changes detected'
279
+ });
280
+ }
281
+ catch (error) {
282
+ throw new Error(`Failed to get git diff stat: ${error.message}`);
283
+ }
284
+ }
285
+ /**
286
+ * Fallback: git diff file
287
+ */
288
+ async function gitDiffFileFallback(cwd, filePath, scope) {
289
+ try {
290
+ await execAsync('git rev-parse --git-dir', { cwd });
291
+ }
292
+ catch {
293
+ return JSON.stringify({
294
+ result: `No active checkpoint and not in a git repo. Cannot diff "${filePath}".`,
295
+ summary: 'No git repo'
296
+ });
297
+ }
298
+ try {
299
+ const { stdout } = await execAsync(`git diff -- "${filePath}"`, { cwd, maxBuffer: 5 * 1024 * 1024 });
300
+ if (!stdout.trim()) {
301
+ return JSON.stringify({
302
+ result: `No changes detected in "${filePath}" (via git diff).`,
303
+ summary: `No changes: ${filePath}`
304
+ });
305
+ }
306
+ // Calculate lines added/deleted
307
+ const lines = stdout.split('\n');
308
+ const added = lines.filter((l) => l.startsWith('+') && !l.startsWith('+++')).length;
309
+ const deleted = lines.filter((l) => l.startsWith('-') && !l.startsWith('---')).length;
310
+ const summary = `${filePath} (git: +${added}, -${deleted})`;
311
+ return JSON.stringify({
312
+ result: `## Git Diff: ${filePath} (${scope})\n\n\`\`\`diff\n${stdout.trim()}\n\`\`\``,
313
+ summary: summary
314
+ });
315
+ }
316
+ catch (error) {
317
+ throw new Error(`Failed to get git diff for "${filePath}": ${error.message}`);
318
+ }
319
+ }
203
320
  //# sourceMappingURL=get-diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-diff.js","sourceRoot":"","sources":["../../src/tools/get-diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-diff.js","sourceRoot":"","sources":["../../src/tools/get-diff.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ export interface GrepMatch {
31
31
  /**
32
32
  * Backend type - now includes powershell and nodejs
33
33
  */
34
- export type GrepBackend = 'ripgrep' | 'grep' | 'powershell' | 'findstr' | 'nodejs';
34
+ export type GrepBackend = 'ripgrep' | 'grep' | 'powershell' | 'findstr' | 'nodejs' | 'remote';
35
35
  /**
36
36
  * Reason for result truncation
37
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"grep-search.d.ts","sourceRoot":"","sources":["../../src/tools/grep-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grep-search.d.ts","sourceRoot":"","sources":["../../src/tools/grep-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,MAAM,YAAY,CAAC;AAexD,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAClC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9F;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,SAAS,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,UAAU,oBAAoB;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,cAAc;IACvB,gBAAuB,mBAAmB,MAAM;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAK;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAG/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAmC;IAE3D;;OAEG;YACW,UAAU;YAmBV,UAAU;YAIV,OAAO;YAIP,aAAa;IAS3B;;OAEG;YACW,gBAAgB;IAK9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;YACW,YAAY;YAqBZ,0BAA0B;YA0K1B,uBAAuB;YAyHvB,oBAAoB;YA8HpB,gBAAgB;IAkI9B;;OAEG;YACW,YAAY;IAgCpB,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;CA8CjH;AA6ID,eAAO,MAAM,cAAc,EAAE,IAuK5B,CAAC"}