@@ -32,6 +32,7 @@ import {
3232 DocumentReference ,
3333 FileClick ,
3434 RelevantTextDocumentAddition ,
35+ PromptInputOptionChange ,
3536} from './model'
3637import {
3738 AppToWebViewMessageDispatcher ,
@@ -85,6 +86,7 @@ import {
8586 tools ,
8687 workspaceChunkMaxSize ,
8788 defaultContextLengths ,
89+ noWriteTools ,
8890} from '../../constants'
8991import { ChatSession } from '../../clients/chat/v0/chat'
9092import { amazonQTabSuffix } from '../../../shared/constants'
@@ -118,6 +120,7 @@ export interface ChatControllerMessagePublishers {
118120 readonly processCustomFormAction : MessagePublisher < CustomFormActionMessage >
119121 readonly processContextSelected : MessagePublisher < ContextSelectedMessage >
120122 readonly processFileClick : MessagePublisher < FileClick >
123+ readonly processPromptInputOptionChange : MessagePublisher < PromptInputOptionChange >
121124}
122125
123126export interface ChatControllerMessageListeners {
@@ -143,6 +146,7 @@ export interface ChatControllerMessageListeners {
143146 readonly processCustomFormAction : MessageListener < CustomFormActionMessage >
144147 readonly processContextSelected : MessageListener < ContextSelectedMessage >
145148 readonly processFileClick : MessageListener < FileClick >
149+ readonly processPromptInputOptionChange : MessageListener < PromptInputOptionChange >
146150}
147151
148152export class ChatController {
@@ -278,6 +282,9 @@ export class ChatController {
278282 this . chatControllerMessageListeners . processFileClick . onMessage ( ( data ) => {
279283 return this . processFileClickMessage ( data )
280284 } )
285+ this . chatControllerMessageListeners . processPromptInputOptionChange . onMessage ( ( data ) => {
286+ return this . processPromptInputOptionChange ( data )
287+ } )
281288 }
282289
283290 private registerUserPromptsWatcher ( ) {
@@ -760,6 +767,17 @@ export class ChatController {
760767 this . handlePromptCreate ( message . tabID )
761768 }
762769 }
770+
771+ private async processPromptInputOptionChange ( message : PromptInputOptionChange ) {
772+ const promptTypeValue = message . optionsValues [ 'prompt-type' ]
773+ // TODO: display message: You turned off pair programmer mode. Q will not include code diffs or run commands in the chat.
774+ if ( promptTypeValue === 'pair-programming-on' ) {
775+ this . chatHistoryStorage . setTabAvailableTools ( message . tabID , tools )
776+ } else {
777+ this . chatHistoryStorage . setTabAvailableTools ( message . tabID , noWriteTools )
778+ }
779+ }
780+
763781 private async processFileClickMessage ( message : FileClick ) {
764782 const session = this . sessionStorage . getSession ( message . tabID )
765783 // Check if user clicked on filePath in the contextList or in the fileListTree and perform the functionality accordingly.
@@ -1326,6 +1344,7 @@ export class ChatController {
13261344
13271345 triggerPayload . contextLengths . userInputContextLength = triggerPayload . message . length
13281346 triggerPayload . contextLengths . focusFileContextLength = triggerPayload . fileText . length
1347+ triggerPayload . tools = this . chatHistoryStorage . getTabAvailableTools ( tabID )
13291348
13301349 const chatHistory = this . chatHistoryStorage . getTabHistory ( tabID )
13311350 const newUserMessage = {
@@ -1334,7 +1353,7 @@ export class ChatController {
13341353 userIntent : triggerPayload . userIntent ,
13351354 ...( triggerPayload . origin && { origin : triggerPayload . origin } ) ,
13361355 userInputMessageContext : {
1337- tools : tools ,
1356+ tools : triggerPayload . tools ,
13381357 ...( triggerPayload . toolResults && { toolResults : triggerPayload . toolResults } ) ,
13391358 } ,
13401359 } ,
0 commit comments