Skip to content

Commit 92fd313

Browse files
migrate the rest
1 parent e9c4b3d commit 92fd313

25 files changed

+327
-356
lines changed

packages/web/src/features/chat/agent.ts

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ import {
1414
} from "ai";
1515
import { randomUUID } from "crypto";
1616
import _dedent from "dedent";
17-
import { ANSWER_TAG, FILE_REFERENCE_PREFIX, toolNames } from "./constants";
18-
import { findSymbolDefinitionsTool, findSymbolReferencesTool, searchCodeTool } from "./tools";
19-
import { toVercelAITool } from "@/features/tools/adapters";
17+
import { ANSWER_TAG, FILE_REFERENCE_PREFIX } from "./constants";
18+
import { findSymbolReferencesDefinition } from "@/features/tools/findSymbolReferences";
19+
import { findSymbolDefinitionsDefinition } from "@/features/tools/findSymbolDefinitions";
2020
import { readFileDefinition } from "@/features/tools/readFile";
21-
import { listCommitsDefinition } from "@/features/tools/listCommits";
22-
import { listReposDefinition } from "@/features/tools/listRepos";
21+
import { searchCodeDefinition } from "@/features/tools/searchCode";
2322
import { Source } from "./types";
2423
import { addLineNumbers, fileReferenceToString } from "./utils";
24+
import { tools } from "./tools";
2525

2626
const dedent = _dedent.withOptions({ alignValues: true });
2727

@@ -202,14 +202,7 @@ const createAgentStream = async ({
202202
providerOptions,
203203
messages: inputMessages,
204204
system: systemPrompt,
205-
tools: {
206-
[toolNames.searchCode]: searchCodeTool,
207-
[toolNames.readFile]: toVercelAITool(readFileDefinition),
208-
[toolNames.findSymbolReferences]: findSymbolReferencesTool,
209-
[toolNames.findSymbolDefinitions]: findSymbolDefinitionsTool,
210-
[toolNames.listRepos]: toVercelAITool(listReposDefinition),
211-
[toolNames.listCommits]: toVercelAITool(listCommitsDefinition),
212-
},
205+
tools,
213206
temperature: env.SOURCEBOT_CHAT_MODEL_TEMPERATURE,
214207
stopWhen: [
215208
stepCountIsGTE(env.SOURCEBOT_CHAT_MAX_STEP_COUNT),
@@ -227,7 +220,7 @@ const createAgentStream = async ({
227220
return;
228221
}
229222

230-
if (toolName === toolNames.readFile) {
223+
if (toolName === readFileDefinition.name) {
231224
onWriteSource({
232225
type: 'file',
233226
language: output.metadata.language,
@@ -236,8 +229,8 @@ const createAgentStream = async ({
236229
revision: output.metadata.revision,
237230
name: output.metadata.path.split('/').pop() ?? output.metadata.path,
238231
});
239-
} else if (toolName === toolNames.searchCode) {
240-
output.files.forEach((file) => {
232+
} else if (toolName === searchCodeDefinition.name) {
233+
output.metadata.files.forEach((file) => {
241234
onWriteSource({
242235
type: 'file',
243236
language: file.language,
@@ -247,8 +240,8 @@ const createAgentStream = async ({
247240
name: file.fileName.split('/').pop() ?? file.fileName,
248241
});
249242
});
250-
} else if (toolName === toolNames.findSymbolDefinitions || toolName === toolNames.findSymbolReferences) {
251-
output.forEach((file) => {
243+
} else if (toolName === findSymbolDefinitionsDefinition.name || toolName === findSymbolReferencesDefinition.name) {
244+
output.metadata.files.forEach((file) => {
252245
onWriteSource({
253246
type: 'file',
254247
language: file.language,

packages/web/src/features/chat/components/chatThread/chatThreadListItem.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { AnswerCard } from './answerCard';
1313
import { DetailsCard } from './detailsCard';
1414
import { MarkdownRenderer, REFERENCE_PAYLOAD_ATTRIBUTE } from './markdownRenderer';
1515
import { ReferencedSourcesListView } from './referencedSourcesListView';
16-
import { uiVisiblePartTypes } from '../../constants';
1716
import isEqual from "fast-deep-equal/react";
1817

1918
interface ChatThreadListItemProps {
@@ -102,7 +101,12 @@ const ChatThreadListItemComponent = forwardRef<HTMLDivElement, ChatThreadListIte
102101
return part.text !== answerPart?.text;
103102
})
104103
.filter((part) => {
105-
return uiVisiblePartTypes.includes(part.type);
104+
// Only include text, reasoning, and tool parts
105+
return (
106+
part.type === 'text' ||
107+
part.type === 'reasoning' ||
108+
part.type.startsWith('tool-')
109+
)
106110
})
107111
)
108112
// Then, filter out any steps that are empty

packages/web/src/features/chat/components/chatThread/tools/findSymbolDefinitionsToolComponent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ export const FindSymbolDefinitionsToolComponent = ({ part }: { part: FindSymbolD
4343
</TreeList>
4444
) : (
4545
<>
46-
{part.output.length === 0 ? (
46+
{part.output.metadata.files.length === 0 ? (
4747
<span className="text-sm text-muted-foreground ml-[25px]">No matches found</span>
4848
) : (
4949
<TreeList>
50-
{part.output.map((file) => {
50+
{part.output.metadata.files.map((file) => {
5151
return (
5252
<FileListItem
5353
key={file.fileName}

packages/web/src/features/chat/components/chatThread/tools/findSymbolReferencesToolComponent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ export const FindSymbolReferencesToolComponent = ({ part }: { part: FindSymbolRe
4343
</TreeList>
4444
) : (
4545
<>
46-
{part.output.length === 0 ? (
46+
{part.output.metadata.files.length === 0 ? (
4747
<span className="text-sm text-muted-foreground ml-[25px]">No matches found</span>
4848
) : (
4949
<TreeList>
50-
{part.output.map((file) => {
50+
{part.output.metadata.files.map((file) => {
5151
return (
5252
<FileListItem
5353
key={file.fileName}

packages/web/src/features/chat/components/chatThread/tools/listCommitsToolComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client';
22

3-
import { ListCommitsToolUIPart } from "@/features/tools/registry";
3+
import { ListCommitsToolUIPart } from "@/features/chat/tools";
44
import { isServiceError } from "@/lib/utils";
55
import { useMemo, useState } from "react";
66
import { ToolHeader, TreeList } from "./shared";

packages/web/src/features/chat/components/chatThread/tools/listReposToolComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client';
22

3-
import { ListReposToolUIPart } from "@/features/tools/registry";
3+
import { ListReposToolUIPart } from "@/features/chat/tools";
44
import { isServiceError } from "@/lib/utils";
55
import { useMemo, useState } from "react";
66
import { ToolHeader, TreeList } from "./shared";

packages/web/src/features/chat/components/chatThread/tools/readFileToolComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { CodeSnippet } from "@/app/components/codeSnippet";
44
import { Separator } from "@/components/ui/separator";
5-
import { ReadFileToolUIPart } from "@/features/tools/registry";
5+
import { ReadFileToolUIPart } from "@/features/chat/tools";
66
import { isServiceError } from "@/lib/utils";
77
import { EyeIcon } from "lucide-react";
88
import { useMemo, useState } from "react";

packages/web/src/features/chat/components/chatThread/tools/searchCodeToolComponent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ export const SearchCodeToolComponent = ({ part }: { part: SearchCodeToolUIPart }
4949
</TreeList>
5050
) : (
5151
<>
52-
{part.output.files.length === 0 ? (
52+
{part.output.metadata.files.length === 0 ? (
5353
<span className="text-sm text-muted-foreground ml-[25px]">No matches found</span>
5454
) : (
5555
<TreeList>
56-
{part.output.files.map((file) => {
56+
{part.output.metadata.files.map((file) => {
5757
return (
5858
<FileListItem
5959
key={file.fileName}
Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { SBChatMessagePart } from "./types";
2-
31
export const FILE_REFERENCE_PREFIX = '@file:';
42
export const FILE_REFERENCE_REGEX = new RegExp(
53
// @file:{repoName::fileName:startLine-endLine}
@@ -8,24 +6,3 @@ export const FILE_REFERENCE_REGEX = new RegExp(
86
);
97

108
export const ANSWER_TAG = '<!--answer-->';
11-
12-
export const toolNames = {
13-
searchCode: 'searchCode',
14-
readFile: 'readFile',
15-
findSymbolReferences: 'findSymbolReferences',
16-
findSymbolDefinitions: 'findSymbolDefinitions',
17-
listRepos: 'listRepos',
18-
listCommits: 'listCommits',
19-
} as const;
20-
21-
// These part types are visible in the UI.
22-
export const uiVisiblePartTypes: SBChatMessagePart['type'][] = [
23-
'reasoning',
24-
'text',
25-
'tool-searchCode',
26-
'tool-readFile',
27-
'tool-findSymbolDefinitions',
28-
'tool-findSymbolReferences',
29-
'tool-listRepos',
30-
'tool-listCommits',
31-
] as const;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import {
2+
toVercelAITool,
3+
readFileDefinition,
4+
listCommitsDefinition,
5+
listReposDefinition,
6+
searchCodeDefinition,
7+
findSymbolReferencesDefinition,
8+
findSymbolDefinitionsDefinition,
9+
} from "@/features/tools";
10+
import { ToolUIPart } from "ai";
11+
import { SBChatMessageToolTypes } from "./types";
12+
13+
export const tools = {
14+
[readFileDefinition.name]: toVercelAITool(readFileDefinition),
15+
[listCommitsDefinition.name]: toVercelAITool(listCommitsDefinition),
16+
[listReposDefinition.name]: toVercelAITool(listReposDefinition),
17+
[searchCodeDefinition.name]: toVercelAITool(searchCodeDefinition),
18+
[findSymbolReferencesDefinition.name]: toVercelAITool(findSymbolReferencesDefinition),
19+
[findSymbolDefinitionsDefinition.name]: toVercelAITool(findSymbolDefinitionsDefinition),
20+
} as const;
21+
22+
export type ReadFileToolUIPart = ToolUIPart<{ readFile: SBChatMessageToolTypes['readFile'] }>;
23+
export type ListCommitsToolUIPart = ToolUIPart<{ listCommits: SBChatMessageToolTypes['listCommits'] }>;
24+
export type ListReposToolUIPart = ToolUIPart<{ listRepos: SBChatMessageToolTypes['listRepos'] }>;
25+
export type SearchCodeToolUIPart = ToolUIPart<{ searchCode: SBChatMessageToolTypes['searchCode'] }>;
26+
export type FindSymbolReferencesToolUIPart = ToolUIPart<{ findSymbolReferences: SBChatMessageToolTypes['findSymbolReferences'] }>;
27+
export type FindSymbolDefinitionsToolUIPart = ToolUIPart<{ findSymbolDefinitions: SBChatMessageToolTypes['findSymbolDefinitions'] }>;

0 commit comments

Comments
 (0)