@agi-cli/web-sdk 0.1.113 → 0.1.115

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 (80) hide show
  1. package/dist/components/git/GitSidebar.d.ts.map +1 -1
  2. package/dist/components/git/GitSidebar.js +2 -2
  3. package/dist/components/git/GitSidebar.js.map +1 -1
  4. package/dist/components/git/GitSidebarToggle.js +1 -1
  5. package/dist/components/git/GitSidebarToggle.js.map +1 -1
  6. package/dist/components/index.d.ts +3 -0
  7. package/dist/components/index.d.ts.map +1 -1
  8. package/dist/components/index.js +4 -0
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/components/messages/MessagePartItem.d.ts.map +1 -1
  11. package/dist/components/messages/MessagePartItem.js +9 -5
  12. package/dist/components/messages/MessagePartItem.js.map +1 -1
  13. package/dist/components/messages/MessageThread.d.ts.map +1 -1
  14. package/dist/components/messages/MessageThread.js +116 -30
  15. package/dist/components/messages/MessageThread.js.map +1 -1
  16. package/dist/components/messages/renderers/GitDiffRenderer.d.ts.map +1 -1
  17. package/dist/components/messages/renderers/GitDiffRenderer.js +15 -6
  18. package/dist/components/messages/renderers/GitDiffRenderer.js.map +1 -1
  19. package/dist/components/messages/renderers/ListRenderer.d.ts.map +1 -1
  20. package/dist/components/messages/renderers/ListRenderer.js +18 -9
  21. package/dist/components/messages/renderers/ListRenderer.js.map +1 -1
  22. package/dist/components/messages/renderers/ReasoningRenderer.js +1 -1
  23. package/dist/components/messages/renderers/ReasoningRenderer.js.map +1 -1
  24. package/dist/components/messages/renderers/SearchRenderer.d.ts.map +1 -1
  25. package/dist/components/messages/renderers/SearchRenderer.js +24 -18
  26. package/dist/components/messages/renderers/SearchRenderer.js.map +1 -1
  27. package/dist/components/messages/renderers/TreeRenderer.d.ts.map +1 -1
  28. package/dist/components/messages/renderers/TreeRenderer.js +18 -12
  29. package/dist/components/messages/renderers/TreeRenderer.js.map +1 -1
  30. package/dist/components/messages/renderers/WebSearchRenderer.d.ts.map +1 -1
  31. package/dist/components/messages/renderers/WebSearchRenderer.js +20 -26
  32. package/dist/components/messages/renderers/WebSearchRenderer.js.map +1 -1
  33. package/dist/components/session-files/SessionFilesDiffPanel.d.ts +2 -0
  34. package/dist/components/session-files/SessionFilesDiffPanel.d.ts.map +1 -0
  35. package/dist/components/session-files/SessionFilesDiffPanel.js +344 -0
  36. package/dist/components/session-files/SessionFilesDiffPanel.js.map +1 -0
  37. package/dist/components/session-files/SessionFilesSidebar.d.ts +6 -0
  38. package/dist/components/session-files/SessionFilesSidebar.d.ts.map +1 -0
  39. package/dist/components/session-files/SessionFilesSidebar.js +80 -0
  40. package/dist/components/session-files/SessionFilesSidebar.js.map +1 -0
  41. package/dist/components/session-files/SessionFilesSidebarToggle.d.ts +6 -0
  42. package/dist/components/session-files/SessionFilesSidebarToggle.d.ts.map +1 -0
  43. package/dist/components/session-files/SessionFilesSidebarToggle.js +15 -0
  44. package/dist/components/session-files/SessionFilesSidebarToggle.js.map +1 -0
  45. package/dist/components/session-files/index.d.ts +4 -0
  46. package/dist/components/session-files/index.d.ts.map +1 -0
  47. package/dist/components/session-files/index.js +4 -0
  48. package/dist/components/session-files/index.js.map +1 -0
  49. package/dist/components/terminals/TerminalsSidebarToggle.js +1 -1
  50. package/dist/components/terminals/TerminalsSidebarToggle.js.map +1 -1
  51. package/dist/hooks/index.d.ts +1 -0
  52. package/dist/hooks/index.d.ts.map +1 -1
  53. package/dist/hooks/index.js +1 -0
  54. package/dist/hooks/index.js.map +1 -1
  55. package/dist/hooks/useConfig.d.ts.map +1 -1
  56. package/dist/hooks/useSessionFiles.d.ts +2 -0
  57. package/dist/hooks/useSessionFiles.d.ts.map +1 -0
  58. package/dist/hooks/useSessionFiles.js +15 -0
  59. package/dist/hooks/useSessionFiles.js.map +1 -0
  60. package/dist/lib/api-client.d.ts +2 -1
  61. package/dist/lib/api-client.d.ts.map +1 -1
  62. package/dist/lib/api-client.js +15 -0
  63. package/dist/lib/api-client.js.map +1 -1
  64. package/dist/stores/gitStore.d.ts.map +1 -1
  65. package/dist/stores/gitStore.js +2 -0
  66. package/dist/stores/gitStore.js.map +1 -1
  67. package/dist/stores/index.d.ts +1 -0
  68. package/dist/stores/index.d.ts.map +1 -1
  69. package/dist/stores/index.js +1 -0
  70. package/dist/stores/index.js.map +1 -1
  71. package/dist/stores/sessionFilesStore.d.ts +17 -0
  72. package/dist/stores/sessionFilesStore.d.ts.map +1 -0
  73. package/dist/stores/sessionFilesStore.js +47 -0
  74. package/dist/stores/sessionFilesStore.js.map +1 -0
  75. package/dist/stores/terminalStore.d.ts.map +1 -1
  76. package/dist/stores/terminalStore.js +2 -0
  77. package/dist/stores/terminalStore.js.map +1 -1
  78. package/dist/types/api.d.ts +29 -0
  79. package/dist/types/api.d.ts.map +1 -1
  80. package/package.json +2 -2
@@ -0,0 +1,344 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, memo } from 'react';
3
+ import { X, ChevronLeft, ChevronRight } from 'lucide-react';
4
+ import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
5
+ import { prism, vscDarkPlus, } from 'react-syntax-highlighter/dist/esm/styles/prism';
6
+ import { useSessionFilesStore } from '../../stores/sessionFilesStore';
7
+ import { useSidebarStore } from '../../stores/sidebarStore';
8
+ import { Button } from '../ui/Button';
9
+ function transformToUnifiedDiff(patch) {
10
+ const lines = patch.split('\n');
11
+ const result = [];
12
+ let addCount = 0;
13
+ let removeCount = 0;
14
+ const diffLines = [];
15
+ for (const line of lines) {
16
+ if (line.startsWith('*** Begin Patch') ||
17
+ line.startsWith('*** End Patch') ||
18
+ line.startsWith('*** Update File:') ||
19
+ line.startsWith('*** Add File:') ||
20
+ line.startsWith('*** Delete File:')) {
21
+ if (diffLines.length > 0) {
22
+ result.push(`@@ -1,${removeCount} +1,${addCount} @@`);
23
+ result.push(...diffLines);
24
+ diffLines.length = 0;
25
+ addCount = 0;
26
+ removeCount = 0;
27
+ }
28
+ result.push(line);
29
+ continue;
30
+ }
31
+ if (line.match(/^@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@/)) {
32
+ if (diffLines.length > 0) {
33
+ result.push(`@@ -1,${removeCount} +1,${addCount} @@`);
34
+ result.push(...diffLines);
35
+ diffLines.length = 0;
36
+ addCount = 0;
37
+ removeCount = 0;
38
+ }
39
+ result.push(line);
40
+ continue;
41
+ }
42
+ if (line.startsWith('@@')) {
43
+ result.push(line);
44
+ continue;
45
+ }
46
+ if (line.startsWith('+')) {
47
+ addCount++;
48
+ diffLines.push(line);
49
+ }
50
+ else if (line.startsWith('-')) {
51
+ removeCount++;
52
+ diffLines.push(line);
53
+ }
54
+ else if (line.startsWith(' ') || line.startsWith('\t')) {
55
+ addCount++;
56
+ removeCount++;
57
+ diffLines.push(line.startsWith('\t') ? ` ${line}` : line);
58
+ }
59
+ else if (line.trim() === '') {
60
+ diffLines.push(' ');
61
+ addCount++;
62
+ removeCount++;
63
+ }
64
+ else {
65
+ addCount++;
66
+ removeCount++;
67
+ diffLines.push(` ${line}`);
68
+ }
69
+ }
70
+ if (diffLines.length > 0) {
71
+ result.push(`@@ -1,${removeCount} +1,${addCount} @@`);
72
+ result.push(...diffLines);
73
+ }
74
+ return result.join('\n');
75
+ }
76
+ function getLanguageFromPath(path) {
77
+ const ext = path.split('.').pop()?.toLowerCase();
78
+ const langMap = {
79
+ js: 'javascript',
80
+ jsx: 'jsx',
81
+ ts: 'typescript',
82
+ tsx: 'tsx',
83
+ py: 'python',
84
+ rb: 'ruby',
85
+ go: 'go',
86
+ rs: 'rust',
87
+ java: 'java',
88
+ c: 'c',
89
+ cpp: 'cpp',
90
+ h: 'c',
91
+ hpp: 'cpp',
92
+ cs: 'csharp',
93
+ php: 'php',
94
+ sh: 'bash',
95
+ bash: 'bash',
96
+ zsh: 'bash',
97
+ sql: 'sql',
98
+ json: 'json',
99
+ yaml: 'yaml',
100
+ yml: 'yaml',
101
+ xml: 'xml',
102
+ html: 'html',
103
+ css: 'css',
104
+ scss: 'scss',
105
+ md: 'markdown',
106
+ txt: 'text',
107
+ svelte: 'svelte',
108
+ };
109
+ return langMap[ext || ''] || 'javascript';
110
+ }
111
+ function parseDiff(patch) {
112
+ const lines = patch.split('\n');
113
+ const result = [];
114
+ let oldLineNum = 0;
115
+ let newLineNum = 0;
116
+ let inHunk = false;
117
+ let filePath = '';
118
+ for (const line of lines) {
119
+ if (line.startsWith('+++') || line.startsWith('*** Update File:')) {
120
+ const match = line.match(/\+\+\+ b\/(.+)/) || line.match(/\*\*\* Update File: (.+)/);
121
+ if (match)
122
+ filePath = match[1];
123
+ }
124
+ if (line.startsWith('*** Add File:')) {
125
+ const match = line.match(/\*\*\* Add File: (.+)/);
126
+ if (match)
127
+ filePath = match[1];
128
+ }
129
+ const hunkMatch = line.match(/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
130
+ if (hunkMatch) {
131
+ oldLineNum = Number.parseInt(hunkMatch[1], 10);
132
+ newLineNum = Number.parseInt(hunkMatch[2], 10);
133
+ inHunk = true;
134
+ result.push({
135
+ content: line,
136
+ codeContent: line,
137
+ type: 'header',
138
+ });
139
+ continue;
140
+ }
141
+ if (line.startsWith('***') ||
142
+ line.startsWith('diff ') ||
143
+ line.startsWith('index ') ||
144
+ line.startsWith('---') ||
145
+ line.startsWith('+++') ||
146
+ (line.startsWith('@@') && !inHunk)) {
147
+ result.push({
148
+ content: line,
149
+ codeContent: line,
150
+ type: 'meta',
151
+ });
152
+ continue;
153
+ }
154
+ if (inHunk) {
155
+ if (line.startsWith('+')) {
156
+ result.push({
157
+ content: line,
158
+ codeContent: line.slice(1),
159
+ type: 'add',
160
+ newLineNum: newLineNum++,
161
+ });
162
+ }
163
+ else if (line.startsWith('-')) {
164
+ result.push({
165
+ content: line,
166
+ codeContent: line.slice(1),
167
+ type: 'remove',
168
+ oldLineNum: oldLineNum++,
169
+ });
170
+ }
171
+ else if (line.startsWith(' ') || line === '') {
172
+ result.push({
173
+ content: line,
174
+ codeContent: line.startsWith(' ') ? line.slice(1) : line,
175
+ type: 'context',
176
+ oldLineNum: oldLineNum++,
177
+ newLineNum: newLineNum++,
178
+ });
179
+ }
180
+ else {
181
+ result.push({
182
+ content: line,
183
+ codeContent: line,
184
+ type: 'context',
185
+ oldLineNum: oldLineNum++,
186
+ newLineNum: newLineNum++,
187
+ });
188
+ }
189
+ }
190
+ else {
191
+ result.push({
192
+ content: line,
193
+ codeContent: line,
194
+ type: 'meta',
195
+ });
196
+ }
197
+ }
198
+ return { lines: result, filePath };
199
+ }
200
+ function FullHeightDiffView({ patch }) {
201
+ const { lines: diffLines, filePath } = parseDiff(patch);
202
+ const language = getLanguageFromPath(filePath);
203
+ const syntaxTheme = document?.documentElement.classList.contains('dark')
204
+ ? vscDarkPlus
205
+ : prism;
206
+ return (_jsx("div", { className: "bg-card/60 border border-border rounded-lg overflow-hidden h-full", children: _jsx("div", { className: "overflow-x-auto overflow-y-auto h-full text-xs font-mono", children: diffLines.map((line, i) => {
207
+ const key = `line-${i}-${line.content.slice(0, 20)}`;
208
+ if (line.type === 'meta' || line.type === 'header') {
209
+ return (_jsx("div", { className: `px-3 py-0.5 whitespace-pre-wrap break-all ${line.type === 'header'
210
+ ? 'text-muted-foreground/80 bg-muted/20'
211
+ : 'text-muted-foreground/80'}`, children: line.content }, key));
212
+ }
213
+ let lineClass = '';
214
+ let bgClass = '';
215
+ switch (line.type) {
216
+ case 'add':
217
+ lineClass = 'text-emerald-700 dark:text-emerald-300';
218
+ bgClass = 'bg-emerald-500/10';
219
+ break;
220
+ case 'remove':
221
+ lineClass = 'text-red-600 dark:text-red-300';
222
+ bgClass = 'bg-red-500/10';
223
+ break;
224
+ default:
225
+ lineClass = 'text-foreground/80';
226
+ }
227
+ let renderedContent = line.content;
228
+ if (line.codeContent.trim() && language !== 'text') {
229
+ renderedContent = (_jsx(SyntaxHighlighter, { language: language, style: syntaxTheme, customStyle: {
230
+ margin: 0,
231
+ padding: 0,
232
+ background: 'transparent',
233
+ display: 'inline',
234
+ fontSize: 'inherit',
235
+ lineHeight: 'inherit',
236
+ }, codeTagProps: {
237
+ style: {
238
+ fontFamily: 'inherit',
239
+ background: 'transparent',
240
+ },
241
+ }, PreTag: "span", children: line.codeContent }));
242
+ if (line.type === 'add') {
243
+ renderedContent = (_jsxs(_Fragment, { children: [_jsx("span", { className: "select-none", children: "+" }), renderedContent] }));
244
+ }
245
+ else if (line.type === 'remove') {
246
+ renderedContent = (_jsxs(_Fragment, { children: [_jsx("span", { className: "select-none", children: "-" }), renderedContent] }));
247
+ }
248
+ else if (line.type === 'context') {
249
+ renderedContent = (_jsxs(_Fragment, { children: [_jsx("span", { className: "select-none", children: " " }), renderedContent] }));
250
+ }
251
+ }
252
+ return (_jsxs("div", { className: `flex ${bgClass}`, children: [_jsx("div", { className: "px-2 py-0.5 text-right text-muted-foreground/40 select-none w-12 flex-shrink-0", children: line.oldLineNum || '' }), _jsx("div", { className: "px-2 py-0.5 text-right text-muted-foreground/40 select-none w-12 flex-shrink-0 border-r border-border/50", children: line.newLineNum || '' }), _jsx("div", { className: `px-3 py-0.5 flex-1 min-w-0 whitespace-pre-wrap break-all ${lineClass}`, children: renderedContent })] }, key));
253
+ }) }) }));
254
+ }
255
+ function formatTimestamp(timestamp) {
256
+ const date = new Date(timestamp);
257
+ return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
258
+ }
259
+ export const SessionFilesDiffPanel = memo(function SessionFilesDiffPanel() {
260
+ const isDiffOpen = useSessionFilesStore((state) => state.isDiffOpen);
261
+ const selectedFile = useSessionFilesStore((state) => state.selectedFile);
262
+ const allOperations = useSessionFilesStore((state) => state.allOperations);
263
+ const selectedOperationIndex = useSessionFilesStore((state) => state.selectedOperationIndex);
264
+ const selectOperation = useSessionFilesStore((state) => state.selectOperation);
265
+ const closeDiff = useSessionFilesStore((state) => state.closeDiff);
266
+ const wasCollapsedBeforeDiff = useSidebarStore((state) => state.wasCollapsedBeforeDiff);
267
+ const setWasCollapsedBeforeDiff = useSidebarStore((state) => state.setWasCollapsedBeforeDiff);
268
+ const setCollapsed = useSidebarStore((state) => state.setCollapsed);
269
+ const selectedOperation = allOperations[selectedOperationIndex];
270
+ const patchContent = useMemo(() => {
271
+ if (!selectedOperation || !selectedFile)
272
+ return null;
273
+ let rawPatch = null;
274
+ if (selectedOperation.artifact?.patch) {
275
+ rawPatch = selectedOperation.artifact.patch;
276
+ }
277
+ else if (selectedOperation.patch) {
278
+ rawPatch = selectedOperation.patch;
279
+ }
280
+ else if (selectedOperation.content) {
281
+ const contentLines = selectedOperation.content.split('\n');
282
+ rawPatch = `*** Add File: ${selectedFile}\n${contentLines.map((line) => `+${line}`).join('\n')}`;
283
+ }
284
+ if (!rawPatch)
285
+ return null;
286
+ const hasProperHunkHeader = /@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@/.test(rawPatch);
287
+ if (!hasProperHunkHeader) {
288
+ return transformToUnifiedDiff(rawPatch);
289
+ }
290
+ return rawPatch;
291
+ }, [selectedOperation, selectedFile]);
292
+ useEffect(() => {
293
+ const { isCollapsed } = useSidebarStore.getState();
294
+ if (isDiffOpen) {
295
+ setWasCollapsedBeforeDiff(isCollapsed);
296
+ setCollapsed(true);
297
+ }
298
+ else if (wasCollapsedBeforeDiff !== null) {
299
+ setCollapsed(wasCollapsedBeforeDiff);
300
+ setWasCollapsedBeforeDiff(null);
301
+ }
302
+ }, [
303
+ isDiffOpen,
304
+ setWasCollapsedBeforeDiff,
305
+ setCollapsed,
306
+ wasCollapsedBeforeDiff,
307
+ ]);
308
+ useEffect(() => {
309
+ const handleKeyDown = (e) => {
310
+ const target = e.target;
311
+ const isInInput = target.tagName === 'INPUT' ||
312
+ target.tagName === 'TEXTAREA' ||
313
+ target.isContentEditable;
314
+ if ((e.key === 'Escape' || (e.key === 'q' && !isInInput)) && isDiffOpen) {
315
+ closeDiff();
316
+ }
317
+ if (!isInInput && isDiffOpen && allOperations.length > 1) {
318
+ if (e.key === 'ArrowLeft' || e.key === '[') {
319
+ e.preventDefault();
320
+ selectOperation(Math.max(0, selectedOperationIndex - 1));
321
+ }
322
+ else if (e.key === 'ArrowRight' || e.key === ']') {
323
+ e.preventDefault();
324
+ selectOperation(Math.min(allOperations.length - 1, selectedOperationIndex + 1));
325
+ }
326
+ }
327
+ };
328
+ document.addEventListener('keydown', handleKeyDown);
329
+ return () => document.removeEventListener('keydown', handleKeyDown);
330
+ }, [
331
+ isDiffOpen,
332
+ closeDiff,
333
+ allOperations.length,
334
+ selectedOperationIndex,
335
+ selectOperation,
336
+ ]);
337
+ if (!isDiffOpen || !selectedFile || !selectedOperation)
338
+ return null;
339
+ const hasMultipleOps = allOperations.length > 1;
340
+ return (_jsxs("div", { className: "absolute inset-0 bg-background z-50 flex flex-col animate-in slide-in-from-left duration-300", children: [_jsxs("div", { className: "h-14 border-b border-border px-4 flex items-center gap-3 shrink-0", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: closeDiff, title: "Close diff viewer (ESC)", children: _jsx(X, { className: "w-4 h-4" }) }), _jsxs("div", { className: "flex-1 flex items-center gap-2 min-w-0", children: [_jsx("span", { className: "text-sm font-medium text-foreground font-mono truncate", title: selectedFile, children: selectedFile }), _jsx("span", { className: "text-xs px-2 py-0.5 rounded bg-primary/10 text-primary flex-shrink-0 capitalize", children: selectedOperation.operation }), selectedOperation.artifact?.summary && (_jsxs("div", { className: "flex items-center gap-1 text-xs flex-shrink-0", children: [_jsxs("span", { className: "text-green-500", children: ["+", selectedOperation.artifact.summary.additions] }), _jsxs("span", { className: "text-red-500", children: ["-", selectedOperation.artifact.summary.deletions] })] }))] }), hasMultipleOps && (_jsxs("div", { className: "flex items-center gap-2 shrink-0", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: () => selectOperation(Math.max(0, selectedOperationIndex - 1)), disabled: selectedOperationIndex === 0, title: "Previous operation (\u2190)", children: _jsx(ChevronLeft, { className: "w-4 h-4" }) }), _jsxs("span", { className: "text-xs text-muted-foreground min-w-[60px] text-center", children: [selectedOperationIndex + 1, " / ", allOperations.length] }), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => selectOperation(Math.min(allOperations.length - 1, selectedOperationIndex + 1)), disabled: selectedOperationIndex === allOperations.length - 1, title: "Next operation (\u2192)", children: _jsx(ChevronRight, { className: "w-4 h-4" }) })] }))] }), hasMultipleOps && (_jsx("div", { className: "border-b border-border px-4 py-2 flex gap-2 overflow-x-auto shrink-0", children: allOperations.map((op, idx) => (_jsxs("button", { type: "button", onClick: () => selectOperation(idx), className: `px-3 py-1.5 text-xs rounded-md flex items-center gap-2 shrink-0 transition-colors ${idx === selectedOperationIndex
341
+ ? 'bg-primary text-primary-foreground'
342
+ : 'bg-muted hover:bg-muted/80 text-muted-foreground'}`, children: [_jsx("span", { className: "capitalize", children: op.operation }), _jsx("span", { className: "opacity-70", children: formatTimestamp(op.timestamp) }), op.artifact?.summary && (_jsxs("span", { className: "opacity-70", children: ["+", op.artifact.summary.additions, "/-", op.artifact.summary.deletions] }))] }, op.toolCallId))) })), _jsx("div", { className: "flex-1 overflow-hidden p-4", children: patchContent ? (_jsx(FullHeightDiffView, { patch: patchContent })) : (_jsx("div", { className: "h-full flex items-center justify-center text-muted-foreground", children: "No diff content available" })) })] }));
343
+ });
344
+ //# sourceMappingURL=SessionFilesDiffPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFilesDiffPanel.js","sourceRoot":"","sources":["../../../src/components/session-files/SessionFilesDiffPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface SessionFilesSidebarProps {
2
+ sessionId?: string;
3
+ }
4
+ export declare const SessionFilesSidebar: import("react").NamedExoticComponent<SessionFilesSidebarProps>;
5
+ export {};
6
+ //# sourceMappingURL=SessionFilesSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFilesSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/session-files/SessionFilesSidebar.tsx"],"names":[],"mappings":"AAaA,UAAU,wBAAwB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AA0GD,eAAO,MAAM,mBAAmB,gEA2D9B,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useMemo } from 'react';
3
+ import { ChevronRight, FilePen, FileCode, FilePlus, FileEdit, } from 'lucide-react';
4
+ import { useSessionFilesStore } from '../../stores/sessionFilesStore';
5
+ import { useSessionFiles } from '../../hooks/useSessionFiles';
6
+ import { Button } from '../ui/Button';
7
+ function getOperationIcon(operation) {
8
+ switch (operation) {
9
+ case 'write':
10
+ return _jsx(FilePlus, { className: "w-3 h-3 text-green-500" });
11
+ case 'patch':
12
+ return _jsx(FileEdit, { className: "w-3 h-3 text-blue-500" });
13
+ case 'edit':
14
+ return _jsx(FileCode, { className: "w-3 h-3 text-yellow-500" });
15
+ default:
16
+ return _jsx(FilePen, { className: "w-3 h-3 text-muted-foreground" });
17
+ }
18
+ }
19
+ function getFileName(path) {
20
+ return path.split('/').pop() || path;
21
+ }
22
+ function countLinesFromPatch(op) {
23
+ if (op.artifact?.summary) {
24
+ return {
25
+ additions: op.artifact.summary.additions,
26
+ deletions: op.artifact.summary.deletions,
27
+ };
28
+ }
29
+ const patch = op.artifact?.patch || op.patch;
30
+ if (patch) {
31
+ let additions = 0;
32
+ let deletions = 0;
33
+ const lines = patch.split('\n');
34
+ for (const line of lines) {
35
+ if (line.startsWith('+') && !line.startsWith('+++')) {
36
+ additions++;
37
+ }
38
+ else if (line.startsWith('-') && !line.startsWith('---')) {
39
+ deletions++;
40
+ }
41
+ }
42
+ return { additions, deletions };
43
+ }
44
+ if (op.content) {
45
+ const lineCount = op.content.split('\n').length;
46
+ return { additions: lineCount, deletions: 0 };
47
+ }
48
+ return { additions: 0, deletions: 0 };
49
+ }
50
+ function SessionFileItem({ file }) {
51
+ const openDiff = useSessionFilesStore((state) => state.openDiff);
52
+ const selectedFile = useSessionFilesStore((state) => state.selectedFile);
53
+ const isSelected = selectedFile === file.path;
54
+ const lastOp = file.operations[file.operations.length - 1];
55
+ const { totalAdditions, totalDeletions } = useMemo(() => {
56
+ let additions = 0;
57
+ let deletions = 0;
58
+ for (const op of file.operations) {
59
+ const stats = countLinesFromPatch(op);
60
+ additions += stats.additions;
61
+ deletions += stats.deletions;
62
+ }
63
+ return { totalAdditions: additions, totalDeletions: deletions };
64
+ }, [file.operations]);
65
+ const handleClick = () => {
66
+ if (file.operations.length > 0) {
67
+ openDiff(file.path, file.operations);
68
+ }
69
+ };
70
+ return (_jsx("button", { type: "button", onClick: handleClick, className: `w-full text-left px-3 py-2 hover:bg-muted/50 transition-colors ${isSelected ? 'bg-muted' : ''}`, children: _jsxs("div", { className: "flex items-center gap-2", children: [getOperationIcon(lastOp?.operation || 'write'), _jsx("div", { className: "flex-1 min-w-0", children: _jsx("div", { className: "text-sm font-medium truncate", children: getFileName(file.path) }) }), _jsxs("div", { className: "flex items-center gap-1 text-xs shrink-0", children: [file.operationCount > 1 && (_jsxs("span", { className: "bg-muted text-muted-foreground px-1 rounded mr-1", children: [file.operationCount, "x"] })), _jsxs("span", { className: "text-green-500", children: ["+", totalAdditions] }), _jsxs("span", { className: "text-red-500", children: ["-", totalDeletions] })] })] }) }));
71
+ }
72
+ export const SessionFilesSidebar = memo(function SessionFilesSidebar({ sessionId, }) {
73
+ const isExpanded = useSessionFilesStore((state) => state.isExpanded);
74
+ const collapseSidebar = useSessionFilesStore((state) => state.collapseSidebar);
75
+ const { data, isLoading, error } = useSessionFiles(sessionId);
76
+ if (!isExpanded)
77
+ return null;
78
+ return (_jsxs("div", { className: "w-80 border-l border-border bg-background flex flex-col h-full", children: [_jsxs("div", { className: "h-14 border-b border-border px-4 flex items-center justify-between shrink-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(FilePen, { className: "w-4 h-4 text-muted-foreground" }), _jsx("span", { className: "font-medium", children: "Session Files" }), data && data.totalFiles > 0 && (_jsxs("span", { className: "text-xs text-muted-foreground", children: ["(", data.totalFiles, ")"] }))] }), _jsx(Button, { variant: "ghost", size: "icon", onClick: collapseSidebar, children: _jsx(ChevronRight, { className: "w-4 h-4" }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: isLoading ? (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: "Loading session files..." })) : error ? (_jsx("div", { className: "p-4 text-sm text-orange-500", children: error instanceof Error ? error.message : 'Failed to load files' })) : !data || data.totalFiles === 0 ? (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: "No files modified in this session" })) : (_jsx("div", { className: "divide-y divide-border", children: data.files.map((file) => (_jsx(SessionFileItem, { file: file }, file.path))) })) }), data && data.totalOperations > 0 && (_jsxs("div", { className: "border-t border-border px-4 py-2 text-xs text-muted-foreground", children: [data.totalFiles, " file", data.totalFiles !== 1 ? 's' : '', " \u2022", ' ', data.totalOperations, " operation", data.totalOperations !== 1 ? 's' : ''] }))] }));
79
+ });
80
+ //# sourceMappingURL=SessionFilesSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFilesSidebar.js","sourceRoot":"","sources":["../../../src/components/session-files/SessionFilesSidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface SessionFilesSidebarToggleProps {
2
+ sessionId?: string;
3
+ }
4
+ export declare const SessionFilesSidebarToggle: import("react").NamedExoticComponent<SessionFilesSidebarToggleProps>;
5
+ export {};
6
+ //# sourceMappingURL=SessionFilesSidebarToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFilesSidebarToggle.d.ts","sourceRoot":"","sources":["../../../src/components/session-files/SessionFilesSidebarToggle.tsx"],"names":[],"mappings":"AAKA,UAAU,8BAA8B;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,yBAAyB,sEA8BrC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { FilePen } from 'lucide-react';
4
+ import { useSessionFilesStore } from '../../stores/sessionFilesStore';
5
+ import { useSessionFiles } from '../../hooks/useSessionFiles';
6
+ export const SessionFilesSidebarToggle = memo(function SessionFilesSidebarToggle({ sessionId, }) {
7
+ const isExpanded = useSessionFilesStore((state) => state.isExpanded);
8
+ const toggleSidebar = useSessionFilesStore((state) => state.toggleSidebar);
9
+ const { data } = useSessionFiles(sessionId);
10
+ const fileCount = data?.totalFiles ?? 0;
11
+ return (_jsxs("button", { type: "button", onClick: toggleSidebar, className: `relative p-3 w-full transition-colors touch-manipulation ${isExpanded
12
+ ? 'bg-muted border-r-2 border-primary'
13
+ : 'hover:bg-muted/50'}`, title: "Session Files", children: [_jsx(FilePen, { className: "w-5 h-5 text-muted-foreground mx-auto" }), fileCount > 0 && (_jsx("span", { className: "absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold", children: fileCount > 9 ? '9+' : fileCount }))] }));
14
+ });
15
+ //# sourceMappingURL=SessionFilesSidebarToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionFilesSidebarToggle.js","sourceRoot":"","sources":["../../../src/components/session-files/SessionFilesSidebarToggle.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAC5C,SAAS,yBAAyB,CAAC,EAClC,SAAS,GACuB;IAChC,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3E,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC;IAExC,OAAO,CACN,kBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,4DACV,UAAU;YACT,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,mBACJ,EAAE,EACF,KAAK,EAAC,eAAe,aAErB,KAAC,OAAO,IAAC,SAAS,EAAC,uCAAuC,GAAG,EAC5D,SAAS,GAAG,CAAC,IAAI,CACjB,eAAM,SAAS,EAAC,uIAAuI,YACrJ,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAC3B,CACP,IACO,CACT,CAAC;AACH,CAAC,CACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './SessionFilesSidebar';
2
+ export * from './SessionFilesSidebarToggle';
3
+ export * from './SessionFilesDiffPanel';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/session-files/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './SessionFilesSidebar';
2
+ export * from './SessionFilesSidebarToggle';
3
+ export * from './SessionFilesDiffPanel';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/session-files/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
@@ -8,6 +8,6 @@ export const TerminalsSidebarToggle = memo(function TerminalsSidebarToggle() {
8
8
  const toggleSidebar = useTerminalStore((state) => state.toggleSidebar);
9
9
  const { data } = useTerminals();
10
10
  const terminalCount = data?.count ?? 0;
11
- return (_jsxs("button", { type: "button", onClick: toggleSidebar, className: `relative p-3 w-full transition-colors touch-manipulation ${isExpanded ? 'bg-muted border-r-2 border-primary' : 'hover:bg-muted/50'}`, title: "Terminals", children: [_jsx(Terminal, { className: "w-5 h-5 text-muted-foreground mx-auto" }), terminalCount > 0 && (_jsx("span", { className: "absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold", children: terminalCount > 9 ? '9+' : terminalCount }))] }));
11
+ return (_jsxs("button", { type: "button", onClick: toggleSidebar, className: `relative h-14 w-full transition-colors touch-manipulation flex items-center justify-center ${isExpanded ? 'bg-muted border-r-2 border-primary' : 'hover:bg-muted/50'}`, title: "Terminals", children: [_jsx(Terminal, { className: "w-5 h-5 text-muted-foreground mx-auto" }), terminalCount > 0 && (_jsx("span", { className: "absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold", children: terminalCount > 9 ? '9+' : terminalCount }))] }));
12
12
  });
13
13
  //# sourceMappingURL=TerminalsSidebarToggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TerminalsSidebarToggle.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalsSidebarToggle.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,sBAAsB;IACzE,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAEhC,MAAM,aAAa,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;IAEvC,OAAO,CACN,kBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,4DACV,UAAU,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,mBACrD,EAAE,EACF,KAAK,EAAC,WAAW,aAEjB,KAAC,QAAQ,IAAC,SAAS,EAAC,uCAAuC,GAAG,EAC7D,aAAa,GAAG,CAAC,IAAI,CACrB,eAAM,SAAS,EAAC,uIAAuI,YACrJ,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,GACnC,CACP,IACO,CACT,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"TerminalsSidebarToggle.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalsSidebarToggle.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,sBAAsB;IACzE,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAEhC,MAAM,aAAa,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;IAEvC,OAAO,CACN,kBACC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,8FACV,UAAU,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,mBACrD,EAAE,EACF,KAAK,EAAC,WAAW,aAEjB,KAAC,QAAQ,IAAC,SAAS,EAAC,uCAAuC,GAAG,EAC7D,aAAa,GAAG,CAAC,IAAI,CACrB,eAAM,SAAS,EAAC,uIAAuI,YACrJ,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,GACnC,CACP,IACO,CACT,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -9,4 +9,5 @@ export * from './useTheme';
9
9
  export * from './useWorkingDirectory';
10
10
  export * from './useKeyboardShortcuts';
11
11
  export * from './useImageUpload';
12
+ export * from './useSessionFiles';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -10,4 +10,5 @@ export * from './useTheme';
10
10
  export * from './useWorkingDirectory';
11
11
  export * from './useKeyboardShortcuts';
12
12
  export * from './useImageUpload';
13
+ export * from './useSessionFiles';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useConfig.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS;;;;;;;;UAKxB;AAED,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM;;;;gBAco4L,CAAC;;;UAR/6L;AAED,wBAAgB,YAAY,0FAK3B"}
1
+ {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useConfig.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS;;;;;;;;UAKxB;AAED,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM;;;;gBAc25L,CAAC;;;UARt8L;AAED,wBAAgB,YAAY,0FAK3B"}
@@ -0,0 +1,2 @@
1
+ export declare function useSessionFiles(sessionId: string | undefined): import("@tanstack/react-query").UseQueryResult<import("..").SessionFilesResponse, Error>;
2
+ //# sourceMappingURL=useSessionFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionFiles.d.ts","sourceRoot":"","sources":["../../src/hooks/useSessionFiles.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,4FAW5D"}
@@ -0,0 +1,15 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { apiClient } from '../lib/api-client';
3
+ import { useSessionFilesStore } from '../stores/sessionFilesStore';
4
+ export function useSessionFiles(sessionId) {
5
+ const isExpanded = useSessionFilesStore((state) => state.isExpanded);
6
+ return useQuery({
7
+ queryKey: ['session', sessionId, 'files'],
8
+ queryFn: () => (sessionId ? apiClient.getSessionFiles(sessionId) : null),
9
+ enabled: !!sessionId,
10
+ refetchInterval: isExpanded ? 5000 : false,
11
+ retry: 1,
12
+ staleTime: 3000,
13
+ });
14
+ }
15
+ //# sourceMappingURL=useSessionFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionFiles.js","sourceRoot":"","sources":["../../src/hooks/useSessionFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAErE,OAAO,QAAQ,CAAC;QACf,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;QACzC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QAC1C,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,IAAI;KACf,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Session, Message, CreateSessionRequest, SendMessageRequest, SendMessageResponse, GitStatusResponse, GitDiffResponse, GitStageResponse, GitUnstageResponse, GitCommitResponse, GitGenerateCommitMessageResponse, GitBranchInfo, GitPushResponse, UpdateSessionRequest, AllModelsResponse } from '../types/api';
1
+ import type { Session, Message, CreateSessionRequest, SendMessageRequest, SendMessageResponse, GitStatusResponse, GitDiffResponse, GitStageResponse, GitUnstageResponse, GitCommitResponse, GitGenerateCommitMessageResponse, GitBranchInfo, GitPushResponse, UpdateSessionRequest, AllModelsResponse, SessionFilesResponse } from '../types/api';
2
2
  /**
3
3
  * Configure the API client with the correct base URL
4
4
  * This should be called once at application startup
@@ -55,6 +55,7 @@ declare class ApiClient {
55
55
  }>;
56
56
  truncated: boolean;
57
57
  }>;
58
+ getSessionFiles(sessionId: string): Promise<SessionFilesResponse>;
58
59
  }
59
60
  export declare const apiClient: ApiClient;
60
61
  export {};