Skip to content

Commit da11663

Browse files
feat(amazonq): implement displayFindings tool (aws#2029)
* feat(amazonq): implement displayFindings tool * feat(amazonq): add unit tests for display findings tool * fix(amazonq): simplify displayFindings unit tests, collapse switch statement * fix(amazonq): emit metrics for displayFindings, fix error handling, improve unit tests
1 parent ab4e0e5 commit da11663

File tree

12 files changed

+930
-4
lines changed

12 files changed

+930
-4
lines changed

server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,10 @@ import { URI } from 'vscode-uri'
201201
import { CommandCategory } from './tools/executeBash'
202202
import { UserWrittenCodeTracker } from '../../shared/userWrittenCodeTracker'
203203
import { CodeReview } from './tools/qCodeAnalysis/codeReview'
204-
import { FINDINGS_MESSAGE_SUFFIX } from './tools/qCodeAnalysis/codeReviewConstants'
204+
import {
205+
CODE_REVIEW_FINDINGS_MESSAGE_SUFFIX,
206+
DISPLAY_FINDINGS_MESSAGE_SUFFIX,
207+
} from './tools/qCodeAnalysis/codeReviewConstants'
205208
import { McpEventHandler } from './tools/mcp/mcpEventHandler'
206209
import { enabledMCP, createNamespacedToolName } from './tools/mcp/mcpUtils'
207210
import { McpManager } from './tools/mcp/mcpManager'
@@ -225,6 +228,7 @@ import { getLatestAvailableModel } from './utils/agenticChatControllerHelper'
225228
import { ActiveUserTracker } from '../../shared/activeUserTracker'
226229
import { UserContext } from '../../client/token/codewhispererbearertokenclient'
227230
import { CodeWhispererServiceToken } from '../../shared/codeWhispererService'
231+
import { DisplayFindings } from './tools/qCodeAnalysis/displayFindings'
228232

229233
type ChatHandlers = Omit<
230234
LspHandlers<Chat>,
@@ -1764,7 +1768,8 @@ export class AgenticChatController implements ChatHandlers {
17641768
break
17651769
}
17661770
case CodeReview.toolName:
1767-
// no need to write tool message for code review
1771+
case DisplayFindings.toolName:
1772+
// no need to write tool message for CodeReview or DisplayFindings
17681773
break
17691774
// — DEFAULT ⇒ Only MCP tools, but can also handle generic tool execution messages
17701775
default:
@@ -1940,11 +1945,27 @@ export class AgenticChatController implements ChatHandlers {
19401945
) {
19411946
await chatResultStream.writeResultBlock({
19421947
type: 'tool',
1943-
messageId: toolUse.toolUseId + FINDINGS_MESSAGE_SUFFIX,
1948+
messageId: toolUse.toolUseId + CODE_REVIEW_FINDINGS_MESSAGE_SUFFIX,
19441949
body: (codeReviewResult.output.content as any).findingsByFile,
19451950
})
19461951
}
19471952
break
1953+
case DisplayFindings.toolName:
1954+
// no need to write tool result for code review, this is handled by model via chat
1955+
// Push result in message so that it is picked by IDE plugin to show in issues panel
1956+
const displayFindingsResult = result as InvokeOutput
1957+
if (
1958+
displayFindingsResult?.output?.kind === 'json' &&
1959+
displayFindingsResult.output.success &&
1960+
displayFindingsResult.output.content !== undefined
1961+
) {
1962+
await chatResultStream.writeResultBlock({
1963+
type: 'tool',
1964+
messageId: toolUse.toolUseId + DISPLAY_FINDINGS_MESSAGE_SUFFIX,
1965+
body: JSON.stringify(displayFindingsResult.output.content),
1966+
})
1967+
}
1968+
break
19481969
// — DEFAULT ⇒ MCP tools
19491970
default:
19501971
await this.#handleMcpToolResult(toolUse, result, session, chatResultStream)

server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ export const SKIP_DIRECTORIES = [
211211
'temp',
212212
]
213213

214-
export const FINDINGS_MESSAGE_SUFFIX = '_codeReviewFindings'
214+
export const CODE_REVIEW_FINDINGS_MESSAGE_SUFFIX = '_codeReviewFindings'
215+
export const DISPLAY_FINDINGS_MESSAGE_SUFFIX = '_displayFindings'
215216

216217
export const CODE_REVIEW_METRICS_PARENT_NAME = 'amazonq_codeReviewTool'

server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,18 @@ export class CodeReviewUtils {
278278
return qCapabilities?.codeReviewInChat || false
279279
}
280280

281+
/**
282+
* Check if storing display findings in the Code Issues panel is enabled.
283+
* @param params Initialize parameters from client
284+
* @returns True if display findings is enabled, false otherwise
285+
*/
286+
public static isDisplayFindingsEnabled(params: InitializeParams | undefined): boolean {
287+
const qCapabilities = params?.initializationOptions?.aws?.awsClientCapabilities?.q as
288+
| QClientCapabilities
289+
| undefined
290+
return qCapabilities?.displayFindings || false
291+
}
292+
281293
/**
282294
* Converts a Windows absolute file path to Unix format and removes the drive letter
283295
* @param windowsPath The Windows path to convert

0 commit comments

Comments
 (0)