Skip to content

Commit 9dc4439

Browse files
committed
Attach preview (#648)
* fix: auto attach file. * add attached files to command preview request. * test: attach file on new chat test
1 parent 457cbbe commit 9dc4439

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

refact-agent/gui/src/components/ChatForm/ChatForm.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ describe("ChatForm", () => {
115115
await user.type(textarea, "foo");
116116
await user.keyboard("{Enter}");
117117
const markdown = "```python\nprint(1)\n```\n";
118-
const expected = `${markdown}\nfoo\n`;
118+
const expected = `${markdown}\n@file foo.txt:3\nfoo\n`;
119119
expect(fakeOnSubmit).toHaveBeenCalledWith(expected);
120120
});
121121

refact-agent/gui/src/components/ChatForm/ChatForm.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ export const ChatForm: React.FC<ChatFormProps> = ({
173173
);
174174

175175
const { previewFiles, commands, requestCompletion } =
176-
useCommandCompletionAndPreviewFiles(checkboxes);
176+
useCommandCompletionAndPreviewFiles(
177+
checkboxes,
178+
attachedFiles.addFilesToInput,
179+
);
177180

178181
const refs = useTourRefs();
179182

@@ -378,7 +381,9 @@ export const ChatForm: React.FC<ChatFormProps> = ({
378381
>
379382
<ThinkingButton />
380383
<Flex gap="2" align="center" className={styles.buttonGroup}>
381-
<TokensPreview currentMessageQuery={value} />
384+
<TokensPreview
385+
currentMessageQuery={attachedFiles.addFilesToInput(value)}
386+
/>
382387

383388
<IconButton
384389
size="1"

refact-agent/gui/src/components/ChatForm/useCheckBoxes.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ const messageLengthSelector = createSelector(
1717

1818
export function useAttachedFiles() {
1919
const [files, setFiles] = useState<FileInfo[]>([]);
20+
const [interacted, setInteracted] = useState<boolean>(false);
2021
const activeFile = useAppSelector(selectActiveFile);
22+
const snippet = useAppSelector(selectSelectedSnippet);
2123

2224
const attached = useMemo(() => {
2325
const maybeAttached = files.find((file) => file.path === activeFile.path);
@@ -29,9 +31,11 @@ export function useAttachedFiles() {
2931
setFiles((prev) => {
3032
return [...prev, activeFile];
3133
});
34+
setInteracted(true);
3235
}, [attached, activeFile]);
3336

3437
const removeFile = useCallback((fileToRemove: FileInfo) => {
38+
setInteracted(true);
3539
setFiles((prev) => {
3640
return prev.filter((file) => file.path !== fileToRemove.path);
3741
});
@@ -53,8 +57,20 @@ export function useAttachedFiles() {
5357

5458
const removeAll = useCallback(() => {
5559
setFiles([]);
60+
setInteracted(false);
5661
}, []);
5762

63+
useEffect(() => {
64+
if (interacted) return;
65+
if (!activeFile.name) return;
66+
if (attached) return;
67+
setFiles(() => {
68+
if (!snippet.code) return [];
69+
return [activeFile];
70+
});
71+
setInteracted(true);
72+
}, [activeFile, attached, interacted, snippet.code]);
73+
5874
useEffect(() => {
5975
const handleIdeAttachFile = (filePath: string) => {
6076
const fileInfo: FileInfo = {
@@ -92,6 +108,7 @@ export function useAttachedFiles() {
92108
attached,
93109
addFilesToInput,
94110
removeAll,
111+
setInteracted,
95112
};
96113
}
97114

refact-agent/gui/src/components/ChatForm/useCommandCompletionAndPreviewFiles.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,16 @@ function useGetPreviewFiles(query: string, checkboxes: Checkboxes) {
130130
return previewFileResponse;
131131
}
132132

133-
export function useCommandCompletionAndPreviewFiles(checkboxes: Checkboxes) {
133+
export function useCommandCompletionAndPreviewFiles(
134+
checkboxes: Checkboxes,
135+
addFilesToInput: (str: string) => string,
136+
) {
134137
const { commands, requestCompletion, query } = useCommandCompletion();
135-
const previewFileResponse = useGetPreviewFiles(query, checkboxes);
138+
139+
const previewFileResponse = useGetPreviewFiles(
140+
addFilesToInput(query),
141+
checkboxes,
142+
);
136143

137144
return {
138145
commands,

0 commit comments

Comments
 (0)