Skip to content

Commit 29860e0

Browse files
willyyhuangkaranA-aws
authored andcommitted
feat(feature dev): Add setting to allow Q to run code and test commands (aws#5853)
Q /dev team is launching a new feature: Allow Q to execute build/test based on customer's configuration 🎉🎉 We have made a couple tweaks to incorporate the user experience - Added a new setting to allow Q to run code and test commands per project ![image](https://github.com/user-attachments/assets/d504ee40-6598-4868-87a4-18e23289945c) - Added a pre-filled prompt option for customer to generate a configuration for this feature - Added a couple follow up buttons throughout the /dev flow and added logic around them ![image](https://github.com/user-attachments/assets/57287301-f295-4394-9cd3-4481edce070b) - Updated copies - Updated `codefileExtensions` set
1 parent 34c8c27 commit 29860e0

File tree

4 files changed

+41
-4
lines changed

4 files changed

+41
-4
lines changed

packages/core/src/amazonqFeatureDev/controllers/chat/controller.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ import { FollowUpTypes } from '../../../amazonq/commons/types'
5050
import { Messenger } from '../../../amazonq/commons/connector/baseMessenger'
5151
import { BaseChatSessionStorage } from '../../../amazonq/commons/baseChatStorage'
5252

53+
export const TotalSteps = 3
54+
5355
export interface ChatControllerEventEmitters {
5456
readonly processHumanChatMessage: EventEmitter<any>
5557
readonly followUpClicked: EventEmitter<any>
@@ -572,8 +574,9 @@ export class FeatureDevController {
572574
if (session?.state?.tokenSource?.token.isCancellationRequested) {
573575
await this.workOnNewTask(
574576
session.tabID,
575-
session.state.codeGenerationRemainingIterationCount,
576-
session.state.codeGenerationTotalIterationCount,
577+
session.state.codeGenerationRemainingIterationCount ||
578+
TotalSteps - (session.state?.currentIteration || 0),
579+
session.state.codeGenerationTotalIterationCount || TotalSteps,
577580
session?.state?.tokenSource?.token.isCancellationRequested
578581
)
579582
this.disposeToken(session)
@@ -614,7 +617,9 @@ export class FeatureDevController {
614617
totalIterations?: number,
615618
isStoppedGeneration: boolean = false
616619
) {
617-
const hasDevFile = await checkForDevFile((await this.sessionStorage.getSession(tabID)).getWorkspaceRoot())
620+
const hasDevFile = await checkForDevFile(
621+
(await this.sessionStorage.getSession(message.tabID)).getWorkspaceRoot()
622+
)
618623

619624
if (isStoppedGeneration) {
620625
this.messenger.sendAnswer({
@@ -673,7 +678,10 @@ export class FeatureDevController {
673678

674679
// Ensure that chat input is enabled so that they can provide additional iterations if they choose
675680
this.messenger.sendChatInputEnabled(tabID, true)
676-
this.messenger.sendUpdatePlaceholder(tabID, i18n('AWS.amazonq.featureDev.placeholder.additionalImprovements'))
681+
this.messenger.sendUpdatePlaceholder(
682+
tabID,
683+
i18n('AWS.amazonq.featureDev.placeholder.additionalImprovements')
684+
)
677685
}
678686

679687
private async processDevCommandWorkspaceSetting(setting: boolean, msg: any) {

packages/core/src/amazonqFeatureDev/types.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ export enum CodeGenerationStatus {
4444
FAILED = 'Failed',
4545
}
4646

47+
export enum FollowUpTypes {
48+
GenerateCode = 'GenerateCode',
49+
InsertCode = 'InsertCode',
50+
ProvideFeedbackAndRegenerateCode = 'ProvideFeedbackAndRegenerateCode',
51+
Retry = 'Retry',
52+
ModifyDefaultSourceFolder = 'ModifyDefaultSourceFolder',
53+
DevExamples = 'DevExamples',
54+
NewTask = 'NewTask',
55+
CloseSession = 'CloseSession',
56+
SendFeedback = 'SendFeedback',
57+
AcceptAutoBuild = 'AcceptAutoBuild',
58+
DenyAutoBuild = 'DenyAutoBuild',
59+
GenerateDevFile = 'GenerateDevFile',
60+
}
61+
4762
export type SessionStatePhase = DevPhase.INIT | DevPhase.CODEGEN
4863

4964
export type CurrentWsFolders = [vscode.WorkspaceFolder, ...vscode.WorkspaceFolder[]]

packages/core/src/codewhisperer/util/codewhispererSettings.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const description = {
1515
workspaceIndexMaxSize: Number,
1616
devCommandWorkspaceConfigurations: Object,
1717
ignoredSecurityIssues: ArrayConstructor(String),
18+
devCommandWorkspaceConfigurations: Object,
1819
}
1920

2021
export class CodeWhispererSettings extends fromExtensionManifest('amazonQ', description) {
@@ -71,6 +72,18 @@ export class CodeWhispererSettings extends fromExtensionManifest('amazonQ', desc
7172
await this.update('ignoredSecurityIssues', [...this.getIgnoredSecurityIssues(), issueTitle])
7273
}
7374

75+
public getDevCommandWorkspaceConfigurations(): { [key: string]: boolean } {
76+
return this.get('devCommandWorkspaceConfigurations', {})
77+
}
78+
79+
public async updateDevCommandWorkspaceConfigurations(projectName: string, setting: boolean) {
80+
const projects = this.getDevCommandWorkspaceConfigurations()
81+
82+
projects[projectName] = setting
83+
84+
await this.update('devCommandWorkspaceConfigurations', projects)
85+
}
86+
7487
static #instance: CodeWhispererSettings
7588

7689
public static get instance() {

packages/core/src/shared/filetypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ export const codefileExtensions = new Set([
167167
'.cc',
168168
'.cfc',
169169
'.cfg',
170+
'.cfg',
170171
'.cfm',
171172
'.cjs',
172173
'.clj',

0 commit comments

Comments
 (0)