2025-07-23 18:25:15 +00:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { useMemo } from "react";
|
|
|
|
|
import { SBChatMessage, FileReference } from "./types";
|
|
|
|
|
import { FILE_REFERENCE_REGEX } from "./constants";
|
|
|
|
|
import { createFileReference } from "./utils";
|
|
|
|
|
|
|
|
|
|
export const useExtractReferences = (message?: SBChatMessage) => {
|
|
|
|
|
return useMemo(() => {
|
|
|
|
|
const references: FileReference[] = [];
|
|
|
|
|
|
|
|
|
|
message?.parts.forEach((part) => {
|
|
|
|
|
switch (part.type) {
|
|
|
|
|
case 'text':
|
|
|
|
|
case 'reasoning': {
|
|
|
|
|
const content = part.text;
|
|
|
|
|
FILE_REFERENCE_REGEX.lastIndex = 0;
|
|
|
|
|
|
|
|
|
|
let match;
|
|
|
|
|
while ((match = FILE_REFERENCE_REGEX.exec(content ?? '')) !== null && match !== null) {
|
2025-07-24 17:21:00 +00:00
|
|
|
const [_, repo, fileName, startLine, endLine] = match;
|
2025-07-23 18:25:15 +00:00
|
|
|
|
|
|
|
|
const fileReference = createFileReference({
|
2025-07-24 17:21:00 +00:00
|
|
|
repo: repo,
|
|
|
|
|
path: fileName,
|
2025-07-23 18:25:15 +00:00
|
|
|
startLine,
|
|
|
|
|
endLine,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
references.push(fileReference);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return references;
|
|
|
|
|
}, [message]);
|
|
|
|
|
};
|