attocode 0.1.4 → 0.1.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 (130) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/dist/src/agent.d.ts +40 -1
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +492 -37
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/core/index.d.ts +1 -6
  7. package/dist/src/core/index.d.ts.map +1 -1
  8. package/dist/src/core/index.js +4 -7
  9. package/dist/src/core/index.js.map +1 -1
  10. package/dist/src/defaults.d.ts +1 -1
  11. package/dist/src/defaults.d.ts.map +1 -1
  12. package/dist/src/integrations/agent-registry.d.ts.map +1 -1
  13. package/dist/src/integrations/agent-registry.js +8 -1
  14. package/dist/src/integrations/agent-registry.js.map +1 -1
  15. package/dist/src/integrations/codebase-context.d.ts +163 -0
  16. package/dist/src/integrations/codebase-context.d.ts.map +1 -1
  17. package/dist/src/integrations/codebase-context.js +462 -0
  18. package/dist/src/integrations/codebase-context.js.map +1 -1
  19. package/dist/src/integrations/economics.d.ts +94 -2
  20. package/dist/src/integrations/economics.d.ts.map +1 -1
  21. package/dist/src/integrations/economics.js +265 -12
  22. package/dist/src/integrations/economics.js.map +1 -1
  23. package/dist/src/integrations/file-change-tracker.d.ts +1 -0
  24. package/dist/src/integrations/file-change-tracker.d.ts.map +1 -1
  25. package/dist/src/integrations/file-change-tracker.js +30 -12
  26. package/dist/src/integrations/file-change-tracker.js.map +1 -1
  27. package/dist/src/integrations/graph-visualization.d.ts +72 -0
  28. package/dist/src/integrations/graph-visualization.d.ts.map +1 -0
  29. package/dist/src/integrations/graph-visualization.js +383 -0
  30. package/dist/src/integrations/graph-visualization.js.map +1 -0
  31. package/dist/src/integrations/index.d.ts +2 -1
  32. package/dist/src/integrations/index.d.ts.map +1 -1
  33. package/dist/src/integrations/index.js +2 -0
  34. package/dist/src/integrations/index.js.map +1 -1
  35. package/dist/src/integrations/memory.d.ts +8 -0
  36. package/dist/src/integrations/memory.d.ts.map +1 -1
  37. package/dist/src/integrations/memory.js +23 -0
  38. package/dist/src/integrations/memory.js.map +1 -1
  39. package/dist/src/integrations/pending-plan.d.ts +26 -1
  40. package/dist/src/integrations/pending-plan.d.ts.map +1 -1
  41. package/dist/src/integrations/pending-plan.js +131 -3
  42. package/dist/src/integrations/pending-plan.js.map +1 -1
  43. package/dist/src/integrations/planning.d.ts +19 -0
  44. package/dist/src/integrations/planning.d.ts.map +1 -1
  45. package/dist/src/integrations/planning.js +78 -4
  46. package/dist/src/integrations/planning.js.map +1 -1
  47. package/dist/src/integrations/safety.d.ts +4 -0
  48. package/dist/src/integrations/safety.d.ts.map +1 -1
  49. package/dist/src/integrations/safety.js +46 -7
  50. package/dist/src/integrations/safety.js.map +1 -1
  51. package/dist/src/integrations/sqlite-store.d.ts.map +1 -1
  52. package/dist/src/integrations/sqlite-store.js +7 -1
  53. package/dist/src/integrations/sqlite-store.js.map +1 -1
  54. package/dist/src/main.js +0 -0
  55. package/dist/src/modes.d.ts +7 -0
  56. package/dist/src/modes.d.ts.map +1 -1
  57. package/dist/src/modes.js +69 -2
  58. package/dist/src/modes.js.map +1 -1
  59. package/dist/src/providers/llm-resilience.d.ts +8 -0
  60. package/dist/src/providers/llm-resilience.d.ts.map +1 -1
  61. package/dist/src/providers/llm-resilience.js +36 -0
  62. package/dist/src/providers/llm-resilience.js.map +1 -1
  63. package/dist/src/tools/agent.d.ts +20 -0
  64. package/dist/src/tools/agent.d.ts.map +1 -1
  65. package/dist/src/tools/agent.js +114 -0
  66. package/dist/src/tools/agent.js.map +1 -1
  67. package/dist/src/tools/file.d.ts.map +1 -1
  68. package/dist/src/tools/file.js +17 -3
  69. package/dist/src/tools/file.js.map +1 -1
  70. package/dist/src/tracing/trace-collector.d.ts +11 -1
  71. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  72. package/dist/src/tracing/trace-collector.js +92 -12
  73. package/dist/src/tracing/trace-collector.js.map +1 -1
  74. package/dist/src/tracing/types.d.ts +6 -0
  75. package/dist/src/tracing/types.d.ts.map +1 -1
  76. package/dist/src/tracing/types.js.map +1 -1
  77. package/dist/src/tui/app.d.ts.map +1 -1
  78. package/dist/src/tui/app.js +244 -66
  79. package/dist/src/tui/app.js.map +1 -1
  80. package/dist/src/tui/components/CollapsibleDiffView.d.ts +49 -0
  81. package/dist/src/tui/components/CollapsibleDiffView.d.ts.map +1 -0
  82. package/dist/src/tui/components/CollapsibleDiffView.js +302 -0
  83. package/dist/src/tui/components/CollapsibleDiffView.js.map +1 -0
  84. package/dist/src/tui/components/DiffView.d.ts +55 -0
  85. package/dist/src/tui/components/DiffView.d.ts.map +1 -0
  86. package/dist/src/tui/components/DiffView.js +356 -0
  87. package/dist/src/tui/components/DiffView.js.map +1 -0
  88. package/dist/src/tui/components/FileChangeSummary.d.ts +48 -0
  89. package/dist/src/tui/components/FileChangeSummary.d.ts.map +1 -0
  90. package/dist/src/tui/components/FileChangeSummary.js +152 -0
  91. package/dist/src/tui/components/FileChangeSummary.js.map +1 -0
  92. package/dist/src/tui/components/SideBySideDiff.d.ts +62 -0
  93. package/dist/src/tui/components/SideBySideDiff.d.ts.map +1 -0
  94. package/dist/src/tui/components/SideBySideDiff.js +320 -0
  95. package/dist/src/tui/components/SideBySideDiff.js.map +1 -0
  96. package/dist/src/tui/components/SyntaxText.d.ts +47 -0
  97. package/dist/src/tui/components/SyntaxText.d.ts.map +1 -0
  98. package/dist/src/tui/components/SyntaxText.js +43 -0
  99. package/dist/src/tui/components/SyntaxText.js.map +1 -0
  100. package/dist/src/tui/components/index.d.ts +5 -0
  101. package/dist/src/tui/components/index.d.ts.map +1 -1
  102. package/dist/src/tui/components/index.js +7 -0
  103. package/dist/src/tui/components/index.js.map +1 -1
  104. package/dist/src/tui/syntax/index.d.ts +12 -0
  105. package/dist/src/tui/syntax/index.d.ts.map +1 -0
  106. package/dist/src/tui/syntax/index.js +14 -0
  107. package/dist/src/tui/syntax/index.js.map +1 -0
  108. package/dist/src/tui/syntax/languages/bash.d.ts +8 -0
  109. package/dist/src/tui/syntax/languages/bash.d.ts.map +1 -0
  110. package/dist/src/tui/syntax/languages/bash.js +296 -0
  111. package/dist/src/tui/syntax/languages/bash.js.map +1 -0
  112. package/dist/src/tui/syntax/languages/javascript.d.ts +8 -0
  113. package/dist/src/tui/syntax/languages/javascript.d.ts.map +1 -0
  114. package/dist/src/tui/syntax/languages/javascript.js +253 -0
  115. package/dist/src/tui/syntax/languages/javascript.js.map +1 -0
  116. package/dist/src/tui/syntax/languages/json.d.ts +8 -0
  117. package/dist/src/tui/syntax/languages/json.d.ts.map +1 -0
  118. package/dist/src/tui/syntax/languages/json.js +112 -0
  119. package/dist/src/tui/syntax/languages/json.js.map +1 -0
  120. package/dist/src/tui/syntax/languages/python.d.ts +8 -0
  121. package/dist/src/tui/syntax/languages/python.d.ts.map +1 -0
  122. package/dist/src/tui/syntax/languages/python.js +232 -0
  123. package/dist/src/tui/syntax/languages/python.js.map +1 -0
  124. package/dist/src/tui/syntax/lexer.d.ts +51 -0
  125. package/dist/src/tui/syntax/lexer.d.ts.map +1 -0
  126. package/dist/src/tui/syntax/lexer.js +131 -0
  127. package/dist/src/tui/syntax/lexer.js.map +1 -0
  128. package/dist/src/types.d.ts +56 -0
  129. package/dist/src/types.d.ts.map +1 -1
  130. package/package.json +4 -1
@@ -0,0 +1,356 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * DiffView Component
4
+ *
5
+ * Displays unified diff with color coding for additions/deletions.
6
+ * Supports:
7
+ * - Collapsed summary (+N/-M) or expanded full diff
8
+ * - Line numbers (optional)
9
+ * - Word-level diff highlighting within modified lines
10
+ * - Parsed UnifiedDiff format for structured rendering
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * // Simple string diff
15
+ * <DiffView diff={diffString} expanded={true} />
16
+ *
17
+ * // With line numbers
18
+ * <DiffView diff={diffString} expanded={true} showLineNumbers={true} />
19
+ *
20
+ * // With word-level highlighting (shows exactly what changed within lines)
21
+ * <DiffView parsedDiff={parsed} expanded={true} showWordDiff={true} />
22
+ *
23
+ * // Full featured: line numbers + word diff
24
+ * const parsed = parseUnifiedDiff(diffString);
25
+ * <DiffView parsedDiff={parsed[0]} expanded={true} showLineNumbers={true} showWordDiff={true} />
26
+ * ```
27
+ */
28
+ import { memo, useMemo } from 'react';
29
+ import { Box, Text } from 'ink';
30
+ import { diffWords } from 'diff';
31
+ import { tokenize, detectLanguage, getTokenColor } from '../syntax/index.js';
32
+ // =============================================================================
33
+ // COLORS
34
+ // =============================================================================
35
+ const COLORS = {
36
+ addition: '#98FB98', // Green for additions
37
+ deletion: '#FF6B6B', // Red for deletions
38
+ context: '#666666', // Gray for context
39
+ hunkHeader: '#87CEEB', // Cyan for @@ lines
40
+ fileHeader: '#DDA0DD', // Purple for --- +++ lines
41
+ lineNumber: '#555555', // Dim for line numbers
42
+ };
43
+ // =============================================================================
44
+ // HELPER FUNCTIONS
45
+ // =============================================================================
46
+ /**
47
+ * Parse diff statistics from a unified diff string.
48
+ */
49
+ function parseDiffStats(diff) {
50
+ const lines = diff.split('\n');
51
+ let additions = 0;
52
+ let deletions = 0;
53
+ for (const line of lines) {
54
+ if (line.startsWith('+') && !line.startsWith('+++')) {
55
+ additions++;
56
+ }
57
+ else if (line.startsWith('-') && !line.startsWith('---')) {
58
+ deletions++;
59
+ }
60
+ }
61
+ return { additions, deletions };
62
+ }
63
+ /**
64
+ * Get stats from a parsed diff.
65
+ */
66
+ function getParsedDiffStats(diff) {
67
+ let additions = 0;
68
+ let deletions = 0;
69
+ for (const hunk of diff.hunks) {
70
+ for (const line of hunk.lines) {
71
+ if (line.type === 'add')
72
+ additions++;
73
+ else if (line.type === 'remove')
74
+ deletions++;
75
+ }
76
+ }
77
+ return { additions, deletions };
78
+ }
79
+ /**
80
+ * Get color for a diff line based on its prefix.
81
+ */
82
+ function getDiffLineColor(line) {
83
+ if (line.startsWith('+') && !line.startsWith('+++')) {
84
+ return COLORS.addition;
85
+ }
86
+ if (line.startsWith('-') && !line.startsWith('---')) {
87
+ return COLORS.deletion;
88
+ }
89
+ if (line.startsWith('@@')) {
90
+ return COLORS.hunkHeader;
91
+ }
92
+ if (line.startsWith('---') || line.startsWith('+++')) {
93
+ return COLORS.fileHeader;
94
+ }
95
+ return COLORS.context;
96
+ }
97
+ /**
98
+ * Get color for a DiffLine type.
99
+ */
100
+ function getLineTypeColor(type) {
101
+ switch (type) {
102
+ case 'add': return COLORS.addition;
103
+ case 'remove': return COLORS.deletion;
104
+ default: return COLORS.context;
105
+ }
106
+ }
107
+ /**
108
+ * Get prefix character for a DiffLine type.
109
+ */
110
+ function getLinePrefix(type) {
111
+ switch (type) {
112
+ case 'add': return '+';
113
+ case 'remove': return '-';
114
+ default: return ' ';
115
+ }
116
+ }
117
+ /**
118
+ * Pair up adjacent removed and added lines for word-level diffing.
119
+ * Returns Map<lineIndex, pairedLineContent> for lines that should show word diffs.
120
+ */
121
+ function findLinePairs(lines) {
122
+ const pairs = new Map();
123
+ for (let i = 0; i < lines.length - 1; i++) {
124
+ const current = lines[i];
125
+ const next = lines[i + 1];
126
+ // If we have a remove followed by an add, they're likely a modification
127
+ if (current.type === 'remove' && next.type === 'add') {
128
+ pairs.set(i, next.content); // removed line paired with added content
129
+ pairs.set(i + 1, current.content); // added line paired with removed content
130
+ }
131
+ }
132
+ return pairs;
133
+ }
134
+ /**
135
+ * Render word-level diff between old and new content.
136
+ */
137
+ function renderWordDiff(oldContent, newContent, lineType) {
138
+ const changes = diffWords(oldContent, newContent);
139
+ return changes.map((change, i) => {
140
+ // For a removed line, highlight what was removed
141
+ // For an added line, highlight what was added
142
+ if (lineType === 'remove') {
143
+ if (change.removed) {
144
+ // This part was removed - highlight it strongly
145
+ return (_jsx(Text, { color: COLORS.deletion, bold: true, inverse: true, children: change.value }, i));
146
+ }
147
+ else if (change.added) {
148
+ // This part was added in the new version - don't show on removed line
149
+ return null;
150
+ }
151
+ // Unchanged part
152
+ return _jsx(Text, { color: COLORS.deletion, children: change.value }, i);
153
+ }
154
+ else {
155
+ // lineType === 'add'
156
+ if (change.added) {
157
+ // This part was added - highlight it strongly
158
+ return (_jsx(Text, { color: COLORS.addition, bold: true, inverse: true, children: change.value }, i));
159
+ }
160
+ else if (change.removed) {
161
+ // This part was in the old version - don't show on added line
162
+ return null;
163
+ }
164
+ // Unchanged part
165
+ return _jsx(Text, { color: COLORS.addition, children: change.value }, i);
166
+ }
167
+ });
168
+ }
169
+ /**
170
+ * Render content with syntax highlighting.
171
+ */
172
+ function renderSyntaxHighlight(content, theme, language, baseColor) {
173
+ if (!language) {
174
+ return _jsx(Text, { color: baseColor, children: content });
175
+ }
176
+ const tokens = tokenize(content, language);
177
+ return tokens.map((token, i) => (_jsx(Text, { color: getTokenColor(token.type, theme), children: token.content }, i)));
178
+ }
179
+ /**
180
+ * Render word-level diff with syntax highlighting.
181
+ * Combines word-diff highlighting with syntax colors.
182
+ */
183
+ function renderWordDiffWithSyntax(oldContent, newContent, lineType, theme, language) {
184
+ const changes = diffWords(oldContent, newContent);
185
+ const elements = [];
186
+ let keyIndex = 0;
187
+ for (const change of changes) {
188
+ if (lineType === 'remove') {
189
+ if (change.removed) {
190
+ // Removed content - use inverse highlighting
191
+ elements.push(_jsx(Text, { color: COLORS.deletion, bold: true, inverse: true, children: change.value }, keyIndex++));
192
+ }
193
+ else if (change.added) {
194
+ // Skip added content on removed line
195
+ continue;
196
+ }
197
+ else {
198
+ // Unchanged - apply syntax highlighting
199
+ if (language) {
200
+ const tokens = tokenize(change.value, language);
201
+ for (const token of tokens) {
202
+ elements.push(_jsx(Text, { color: getTokenColor(token.type, theme), children: token.content }, keyIndex++));
203
+ }
204
+ }
205
+ else {
206
+ elements.push(_jsx(Text, { color: COLORS.deletion, children: change.value }, keyIndex++));
207
+ }
208
+ }
209
+ }
210
+ else {
211
+ // lineType === 'add'
212
+ if (change.added) {
213
+ // Added content - use inverse highlighting
214
+ elements.push(_jsx(Text, { color: COLORS.addition, bold: true, inverse: true, children: change.value }, keyIndex++));
215
+ }
216
+ else if (change.removed) {
217
+ // Skip removed content on added line
218
+ continue;
219
+ }
220
+ else {
221
+ // Unchanged - apply syntax highlighting
222
+ if (language) {
223
+ const tokens = tokenize(change.value, language);
224
+ for (const token of tokens) {
225
+ elements.push(_jsx(Text, { color: getTokenColor(token.type, theme), children: token.content }, keyIndex++));
226
+ }
227
+ }
228
+ else {
229
+ elements.push(_jsx(Text, { color: COLORS.addition, children: change.value }, keyIndex++));
230
+ }
231
+ }
232
+ }
233
+ }
234
+ return _jsx(_Fragment, { children: elements });
235
+ }
236
+ // =============================================================================
237
+ // SUB-COMPONENTS
238
+ // =============================================================================
239
+ /**
240
+ * Render diff summary (collapsed view).
241
+ */
242
+ const DiffSummary = memo(function DiffSummary({ additions, deletions, }) {
243
+ return (_jsxs(Text, { children: [_jsxs(Text, { color: COLORS.addition, children: ["+", additions] }), _jsx(Text, { color: COLORS.context, children: "/" }), _jsxs(Text, { color: COLORS.deletion, children: ["-", deletions] })] }));
244
+ });
245
+ /**
246
+ * Render a single diff line with optional line numbers and word-level highlighting.
247
+ */
248
+ const DiffLineView = memo(function DiffLineView({ line, showLineNumbers, lineNumberWidth = 4, pairedContent, showWordDiff, syntaxHighlight, theme, language, }) {
249
+ const color = getLineTypeColor(line.type);
250
+ const prefix = getLinePrefix(line.type);
251
+ // Determine if we should render word-level diff
252
+ const useWordDiff = showWordDiff && pairedContent !== undefined &&
253
+ (line.type === 'add' || line.type === 'remove');
254
+ // Determine if we should use syntax highlighting
255
+ const useSyntax = syntaxHighlight && theme && language;
256
+ // Render the content
257
+ let contentNode;
258
+ if (useWordDiff && useSyntax) {
259
+ // Word diff with syntax highlighting
260
+ contentNode = (_jsxs(Text, { children: [_jsx(Text, { color: color, children: prefix }), renderWordDiffWithSyntax(line.type === 'remove' ? line.content : pairedContent, line.type === 'add' ? line.content : pairedContent, line.type, theme, language)] }));
261
+ }
262
+ else if (useWordDiff) {
263
+ // Word diff without syntax
264
+ contentNode = (_jsxs(Text, { children: [_jsx(Text, { color: color, children: prefix }), renderWordDiff(line.type === 'remove' ? line.content : pairedContent, line.type === 'add' ? line.content : pairedContent, line.type)] }));
265
+ }
266
+ else if (useSyntax) {
267
+ // Syntax highlighting without word diff
268
+ contentNode = (_jsxs(Text, { children: [_jsx(Text, { color: color, children: prefix }), renderSyntaxHighlight(line.content, theme, language, color)] }));
269
+ }
270
+ else {
271
+ // Plain text
272
+ contentNode = _jsxs(Text, { color: color, children: [prefix, line.content] });
273
+ }
274
+ if (showLineNumbers) {
275
+ const oldNum = line.oldLineNumber?.toString().padStart(lineNumberWidth) ?? ' '.repeat(lineNumberWidth);
276
+ const newNum = line.newLineNumber?.toString().padStart(lineNumberWidth) ?? ' '.repeat(lineNumberWidth);
277
+ return (_jsxs(Box, { children: [_jsx(Text, { color: COLORS.lineNumber, dimColor: true, children: oldNum }), _jsx(Text, { children: " " }), _jsx(Text, { color: COLORS.lineNumber, dimColor: true, children: newNum }), _jsx(Text, { children: " " }), contentNode] }));
278
+ }
279
+ return contentNode;
280
+ });
281
+ /**
282
+ * Render a hunk header (@@...@@).
283
+ */
284
+ const HunkHeaderView = memo(function HunkHeaderView({ hunk, showLineNumbers, lineNumberWidth = 4, }) {
285
+ const header = `@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@`;
286
+ const gutterWidth = showLineNumbers ? (lineNumberWidth * 2 + 2) : 0;
287
+ return (_jsxs(Box, { children: [showLineNumbers && _jsx(Text, { color: COLORS.lineNumber, children: ' '.repeat(gutterWidth) }), _jsx(Text, { color: COLORS.hunkHeader, children: header })] }));
288
+ });
289
+ /**
290
+ * Render a single hunk.
291
+ */
292
+ const HunkView = memo(function HunkView({ hunk, showLineNumbers, lineNumberWidth, maxLines, showWordDiff, syntaxHighlight, theme, language, }) {
293
+ const linesToShow = maxLines ? hunk.lines.slice(0, maxLines) : hunk.lines;
294
+ const hasMore = maxLines && hunk.lines.length > maxLines;
295
+ // Pre-compute line pairs for word-level diffing
296
+ const linePairs = useMemo(() => {
297
+ if (!showWordDiff)
298
+ return new Map();
299
+ return findLinePairs(linesToShow);
300
+ }, [showWordDiff, linesToShow]);
301
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(HunkHeaderView, { hunk: hunk, showLineNumbers: showLineNumbers, lineNumberWidth: lineNumberWidth }), linesToShow.map((line, i) => (_jsx(DiffLineView, { line: line, showLineNumbers: showLineNumbers, lineNumberWidth: lineNumberWidth, pairedContent: linePairs.get(i), showWordDiff: showWordDiff, syntaxHighlight: syntaxHighlight, theme: theme, language: language }, i))), hasMore && (_jsxs(Text, { color: COLORS.context, dimColor: true, children: ["... (", hunk.lines.length - (maxLines ?? 0), " more lines in hunk)"] }))] }));
302
+ });
303
+ // =============================================================================
304
+ // MAIN COMPONENT
305
+ // =============================================================================
306
+ export const DiffView = memo(function DiffView({ diff, parsedDiff, expanded, maxLines = 50, showLineNumbers = false, lineNumberWidth = 4, showWordDiff = false, syntaxHighlight = false, theme, filePath, }) {
307
+ // Use parsed diff if provided, otherwise fall back to string diff
308
+ const hasParsedDiff = parsedDiff !== undefined;
309
+ const hasStringDiff = diff !== undefined && diff.trim().length > 0;
310
+ // Detect language for syntax highlighting
311
+ const detectedLanguage = useMemo(() => {
312
+ if (!syntaxHighlight)
313
+ return null;
314
+ // Try to detect from filePath prop first
315
+ if (filePath) {
316
+ return detectLanguage(filePath);
317
+ }
318
+ // Fall back to parsed diff paths
319
+ if (hasParsedDiff) {
320
+ const path = parsedDiff.newPath || parsedDiff.oldPath;
321
+ if (path)
322
+ return detectLanguage(path);
323
+ }
324
+ return null;
325
+ }, [syntaxHighlight, filePath, hasParsedDiff, parsedDiff]);
326
+ // Compute stats
327
+ const stats = useMemo(() => {
328
+ if (hasParsedDiff) {
329
+ return getParsedDiffStats(parsedDiff);
330
+ }
331
+ if (hasStringDiff) {
332
+ return parseDiffStats(diff);
333
+ }
334
+ return { additions: 0, deletions: 0 };
335
+ }, [diff, parsedDiff, hasParsedDiff, hasStringDiff]);
336
+ // No content
337
+ if (!hasParsedDiff && !hasStringDiff) {
338
+ return _jsx(Text, { color: COLORS.context, dimColor: true, children: "No changes" });
339
+ }
340
+ // Collapsed view: just show +N/-M summary
341
+ if (!expanded) {
342
+ return _jsx(DiffSummary, { additions: stats.additions, deletions: stats.deletions });
343
+ }
344
+ // Expanded view with parsed diff (structured rendering)
345
+ if (hasParsedDiff) {
346
+ const linesPerHunk = maxLines ? Math.ceil(maxLines / Math.max(parsedDiff.hunks.length, 1)) : undefined;
347
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { gap: 1, children: [_jsxs(Text, { color: COLORS.fileHeader, bold: true, children: [parsedDiff.isNewFile ? 'New: ' : parsedDiff.isDeletedFile ? 'Deleted: ' : 'Modified: ', parsedDiff.newPath] }), _jsx(DiffSummary, { additions: stats.additions, deletions: stats.deletions })] }), _jsx(Box, { flexDirection: "column", marginLeft: 1, marginTop: 1, children: parsedDiff.hunks.map((hunk, i) => (_jsx(HunkView, { hunk: hunk, showLineNumbers: showLineNumbers, lineNumberWidth: lineNumberWidth, maxLines: linesPerHunk, showWordDiff: showWordDiff, syntaxHighlight: syntaxHighlight, theme: theme, language: detectedLanguage }, i))) })] }));
348
+ }
349
+ // Expanded view with string diff (legacy rendering)
350
+ const lines = diff.split('\n');
351
+ const displayLines = lines.slice(0, maxLines);
352
+ const hasMore = lines.length > maxLines;
353
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: COLORS.fileHeader, bold: true, children: "Diff:" }), _jsx(DiffSummary, { additions: stats.additions, deletions: stats.deletions })] }), _jsxs(Box, { flexDirection: "column", marginLeft: 2, marginTop: 1, children: [displayLines.map((line, i) => (_jsx(Text, { color: getDiffLineColor(line), children: line || ' ' }, i))), hasMore && (_jsxs(Text, { color: COLORS.context, dimColor: true, children: ["... (", lines.length - maxLines, " more lines)"] }))] })] }));
354
+ });
355
+ export default DiffView;
356
+ //# sourceMappingURL=DiffView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiffView.js","sourceRoot":"","sources":["../../../../src/tui/components/DiffView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * FileChangeSummary Component
3
+ *
4
+ * Displays a summary of all files changed during a session.
5
+ * Shows total additions/deletions and per-file breakdown.
6
+ *
7
+ * Features:
8
+ * - Collapsed mode: Just totals
9
+ * - Expanded mode: Full file list with stats
10
+ * - Visual indicators for new vs modified files
11
+ * - Sortable by various criteria
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <FileChangeSummary
16
+ * changes={[
17
+ * { path: 'src/index.ts', additions: 10, deletions: 5, type: 'modify' },
18
+ * { path: 'src/new.ts', additions: 50, deletions: 0, type: 'create' },
19
+ * ]}
20
+ * expanded={true}
21
+ * />
22
+ * ```
23
+ */
24
+ export interface FileChange {
25
+ /** File path (relative to project root) */
26
+ path: string;
27
+ /** Number of lines added */
28
+ additions: number;
29
+ /** Number of lines deleted */
30
+ deletions: number;
31
+ /** Type of change */
32
+ type: 'create' | 'modify' | 'delete' | 'rename';
33
+ /** For renames, the original path */
34
+ oldPath?: string;
35
+ }
36
+ export interface FileChangeSummaryProps {
37
+ /** List of file changes */
38
+ changes: FileChange[];
39
+ /** Whether to show expanded view with per-file details */
40
+ expanded?: boolean;
41
+ /** Sort order for file list */
42
+ sortBy?: 'path' | 'additions' | 'deletions' | 'total';
43
+ /** Maximum files to show in expanded view */
44
+ maxFiles?: number;
45
+ }
46
+ export declare const FileChangeSummary: import("react").NamedExoticComponent<FileChangeSummaryProps>;
47
+ export default FileChangeSummary;
48
+ //# sourceMappingURL=FileChangeSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileChangeSummary.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/FileChangeSummary.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,2BAA2B;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;IACtD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAoJD,eAAO,MAAM,iBAAiB,8DA6G5B,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * FileChangeSummary Component
4
+ *
5
+ * Displays a summary of all files changed during a session.
6
+ * Shows total additions/deletions and per-file breakdown.
7
+ *
8
+ * Features:
9
+ * - Collapsed mode: Just totals
10
+ * - Expanded mode: Full file list with stats
11
+ * - Visual indicators for new vs modified files
12
+ * - Sortable by various criteria
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <FileChangeSummary
17
+ * changes={[
18
+ * { path: 'src/index.ts', additions: 10, deletions: 5, type: 'modify' },
19
+ * { path: 'src/new.ts', additions: 50, deletions: 0, type: 'create' },
20
+ * ]}
21
+ * expanded={true}
22
+ * />
23
+ * ```
24
+ */
25
+ import { memo, useMemo } from 'react';
26
+ import { Box, Text } from 'ink';
27
+ // =============================================================================
28
+ // COLORS
29
+ // =============================================================================
30
+ const COLORS = {
31
+ addition: '#98FB98',
32
+ deletion: '#FF6B6B',
33
+ create: '#87CEEB',
34
+ modify: '#DDA0DD',
35
+ delete: '#FF6B6B',
36
+ rename: '#FFD700',
37
+ border: '#444444',
38
+ muted: '#666666',
39
+ };
40
+ // =============================================================================
41
+ // HELPER FUNCTIONS
42
+ // =============================================================================
43
+ /**
44
+ * Get status indicator for a file change type.
45
+ */
46
+ function getStatusIndicator(type) {
47
+ switch (type) {
48
+ case 'create':
49
+ return { char: 'A', color: COLORS.create };
50
+ case 'modify':
51
+ return { char: 'M', color: COLORS.modify };
52
+ case 'delete':
53
+ return { char: 'D', color: COLORS.delete };
54
+ case 'rename':
55
+ return { char: 'R', color: COLORS.rename };
56
+ }
57
+ }
58
+ /**
59
+ * Sort file changes by specified criteria.
60
+ */
61
+ function sortChanges(changes, sortBy) {
62
+ const sorted = [...changes];
63
+ switch (sortBy) {
64
+ case 'additions':
65
+ return sorted.sort((a, b) => b.additions - a.additions);
66
+ case 'deletions':
67
+ return sorted.sort((a, b) => b.deletions - a.deletions);
68
+ case 'total':
69
+ return sorted.sort((a, b) => (b.additions + b.deletions) - (a.additions + a.deletions));
70
+ case 'path':
71
+ default:
72
+ return sorted.sort((a, b) => a.path.localeCompare(b.path));
73
+ }
74
+ }
75
+ /**
76
+ * Truncate path for display, showing end of path.
77
+ */
78
+ function truncatePath(path, maxWidth) {
79
+ if (path.length <= maxWidth)
80
+ return path;
81
+ return '…' + path.slice(-(maxWidth - 1));
82
+ }
83
+ // =============================================================================
84
+ // SUB-COMPONENTS
85
+ // =============================================================================
86
+ /**
87
+ * Render a single file change row.
88
+ */
89
+ const FileChangeRow = memo(function FileChangeRow({ change, maxPathWidth, }) {
90
+ const status = getStatusIndicator(change.type);
91
+ const displayPath = change.type === 'rename' && change.oldPath
92
+ ? `${truncatePath(change.oldPath, maxPathWidth / 2 - 2)} → ${truncatePath(change.path, maxPathWidth / 2 - 2)}`
93
+ : truncatePath(change.path, maxPathWidth);
94
+ return (_jsxs(Box, { children: [_jsx(Text, { color: status.color, bold: true, children: status.char }), _jsx(Text, { children: " " }), _jsx(Text, { color: COLORS.muted, children: displayPath }), _jsx(Text, { children: " " }), change.additions > 0 && (_jsxs(Text, { color: COLORS.addition, children: ["+", change.additions] })), change.additions > 0 && change.deletions > 0 && (_jsx(Text, { color: COLORS.muted, children: "/" })), change.deletions > 0 && (_jsxs(Text, { color: COLORS.deletion, children: ["-", change.deletions] }))] }));
95
+ });
96
+ /**
97
+ * Render a visual stats bar.
98
+ */
99
+ const StatsBar = memo(function StatsBar({ additions, deletions, maxWidth = 20, }) {
100
+ const total = additions + deletions;
101
+ if (total === 0)
102
+ return null;
103
+ const addWidth = Math.round((additions / total) * maxWidth);
104
+ const delWidth = maxWidth - addWidth;
105
+ return (_jsxs(Box, { children: [_jsx(Text, { backgroundColor: COLORS.addition, children: ' '.repeat(Math.max(1, addWidth)) }), _jsx(Text, { backgroundColor: COLORS.deletion, children: ' '.repeat(Math.max(1, delWidth)) })] }));
106
+ });
107
+ // =============================================================================
108
+ // MAIN COMPONENT
109
+ // =============================================================================
110
+ export const FileChangeSummary = memo(function FileChangeSummary({ changes, expanded = false, sortBy = 'path', maxFiles = 20, }) {
111
+ // Calculate totals
112
+ const stats = useMemo(() => {
113
+ let additions = 0;
114
+ let deletions = 0;
115
+ let created = 0;
116
+ let modified = 0;
117
+ let deleted = 0;
118
+ let renamed = 0;
119
+ for (const change of changes) {
120
+ additions += change.additions;
121
+ deletions += change.deletions;
122
+ switch (change.type) {
123
+ case 'create':
124
+ created++;
125
+ break;
126
+ case 'modify':
127
+ modified++;
128
+ break;
129
+ case 'delete':
130
+ deleted++;
131
+ break;
132
+ case 'rename':
133
+ renamed++;
134
+ break;
135
+ }
136
+ }
137
+ return { additions, deletions, created, modified, deleted, renamed };
138
+ }, [changes]);
139
+ // Sort and limit changes for display
140
+ const displayChanges = useMemo(() => {
141
+ const sorted = sortChanges(changes, sortBy);
142
+ return sorted.slice(0, maxFiles);
143
+ }, [changes, sortBy, maxFiles]);
144
+ const hasMore = changes.length > maxFiles;
145
+ // Empty state
146
+ if (changes.length === 0) {
147
+ return (_jsx(Box, { borderStyle: "round", borderColor: COLORS.border, paddingX: 1, children: _jsx(Text, { color: COLORS.muted, dimColor: true, children: "No changes in this session" }) }));
148
+ }
149
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: COLORS.border, paddingX: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, children: "Session Changes: " }), _jsxs(Text, { color: COLORS.addition, children: ["+", stats.additions] }), _jsx(Text, { color: COLORS.muted, children: "/" }), _jsxs(Text, { color: COLORS.deletion, children: ["-", stats.deletions] }), _jsx(Text, { color: COLORS.muted, children: " in " }), _jsxs(Text, { children: [changes.length, " file", changes.length !== 1 ? 's' : ''] })] }), _jsx(Box, { marginTop: 1, children: _jsx(StatsBar, { additions: stats.additions, deletions: stats.deletions, maxWidth: 30 }) }), _jsxs(Box, { marginTop: 1, children: [stats.created > 0 && (_jsxs(Text, { color: COLORS.create, children: [stats.created, " new "] })), stats.modified > 0 && (_jsxs(Text, { color: COLORS.modify, children: [stats.modified, " modified "] })), stats.deleted > 0 && (_jsxs(Text, { color: COLORS.delete, children: [stats.deleted, " deleted "] })), stats.renamed > 0 && (_jsxs(Text, { color: COLORS.rename, children: [stats.renamed, " renamed "] }))] }), expanded && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [displayChanges.map((change, i) => (_jsx(FileChangeRow, { change: change, maxPathWidth: 50 }, `${change.path}-${i}`))), hasMore && (_jsxs(Text, { color: COLORS.muted, dimColor: true, children: ["... and ", changes.length - maxFiles, " more files"] }))] }))] }));
150
+ });
151
+ export default FileChangeSummary;
152
+ //# sourceMappingURL=FileChangeSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileChangeSummary.js","sourceRoot":"","sources":["../../../../src/tui/components/FileChangeSummary.tsx"],"names":[],"mappings":"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"}