Skip to content

Commit 228199d

Browse files
refactor(amazonq): refactor doc and featureDev SessionState (#6388)
## Problem This is aimed to resolve [jscpd](https://github.com/aws/aws-toolkit-vscode/actions/runs/12778633640/job/35621822359?pr=6370) ## Solution Refactor SessionState in doc and featureDev --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license. --------- Co-authored-by: Avi Alpert <131792194+avi-alpert@users.noreply.github.com>
1 parent f5bc8c2 commit 228199d

File tree

28 files changed

+1135
-1088
lines changed

28 files changed

+1135
-1088
lines changed

packages/amazonq/test/unit/amazonqFeatureDev/session/session.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import {
1818
sessionWriteFile,
1919
assertTelemetry,
2020
} from 'aws-core-vscode/test'
21-
import { CurrentWsFolders, CodeGenState, FeatureDevClient, featureDevScheme } from 'aws-core-vscode/amazonqFeatureDev'
22-
import { Messenger } from 'aws-core-vscode/amazonq'
21+
import { FeatureDevClient, featureDevScheme, FeatureDevCodeGenState } from 'aws-core-vscode/amazonqFeatureDev'
22+
import { Messenger, CurrentWsFolders } from 'aws-core-vscode/amazonq'
2323
import path from 'path'
2424
import { fs } from 'aws-core-vscode/shared'
2525

@@ -75,7 +75,7 @@ describe('session', () => {
7575
workspaceFolders,
7676
}
7777

78-
const codeGenState = new CodeGenState(
78+
const codeGenState = new FeatureDevCodeGenState(
7979
testConfig,
8080
[
8181
{
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import { ServiceOptions } from '../../shared/awsClientBuilder'
7+
8+
export abstract class FeatureClient {
9+
public abstract getClient(options?: Partial<ServiceOptions>): Promise<any>
10+
11+
public abstract createConversation(): Promise<string>
12+
13+
public abstract createUploadUrl(
14+
conversationId: string,
15+
contentChecksumSha256: string,
16+
contentLength: number,
17+
uploadId: string
18+
): Promise<any>
19+
20+
public abstract startCodeGeneration(
21+
conversationId: string,
22+
uploadId: string,
23+
message: string,
24+
intent: any,
25+
codeGenerationId: string,
26+
currentCodeGenerationId?: string,
27+
intentContext?: any
28+
): Promise<any>
29+
30+
public abstract getCodeGeneration(conversationId: string, codeGenerationId: string): Promise<any>
31+
32+
public abstract exportResultArchive(conversationId: string): Promise<any>
33+
}

packages/core/src/amazonq/commons/connector/baseMessenger.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ import {
2424
UpdatePlaceholderMessage,
2525
UpdatePromptProgressMessage,
2626
} from './connectorMessages'
27-
import { FollowUpTypes } from '../types'
27+
import { DeletedFileInfo, FollowUpTypes, NewFileInfo } from '../types'
2828
import { messageWithConversationId } from '../../../amazonqFeatureDev/userFacingText'
29-
import { DeletedFileInfo, NewFileInfo } from '../../../amazonqFeatureDev/types'
3029
import { FeatureAuthState } from '../../../codewhisperer/util/authUtil'
3130

3231
export class Messenger {

packages/core/src/amazonq/commons/connector/connectorMessages.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { MessagePublisher } from '../../messages/messagePublisher'
88
import { CodeReference } from '../../webview/ui/connector'
99
import { ChatItemAction, ProgressField, SourceLink } from '@aws/mynah-ui'
1010
import { ChatItemType } from '../model'
11-
import { DeletedFileInfo, NewFileInfo } from '../../../amazonqFeatureDev/types'
11+
import { DeletedFileInfo, NewFileInfo } from '../types'
1212
import { licenseText } from '../../../amazonqFeatureDev/constants'
1313

1414
class UiMessage {

packages/core/src/amazonq/commons/session/sessionConfigFactory.ts

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

66
import * as vscode from 'vscode'
77
import { WorkspaceFolderNotFoundError } from '../../../amazonqFeatureDev/errors'
8-
import { CurrentWsFolders } from '../../../amazonqFeatureDev/types'
8+
import { CurrentWsFolders } from '../types'
99
import { VirtualFileSystem } from '../../../shared/virtualFilesystem'
1010
import { VirtualMemoryFile } from '../../../shared/virtualMemoryFile'
1111

packages/core/src/amazonq/commons/types.ts

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
import * as vscode from 'vscode'
7+
import { VirtualFileSystem } from '../../shared/virtualFilesystem'
8+
import type { CancellationTokenSource } from 'vscode'
9+
import { CodeReference, UploadHistory } from '../webview/ui/connector'
10+
import { DiffTreeFileInfo } from '../webview/ui/diffTree/types'
11+
import { Messenger } from './connector/baseMessenger'
12+
import { FeatureClient } from '../client/client'
13+
import { TelemetryHelper } from '../util/telemetryHelper'
14+
615
export enum FollowUpTypes {
716
// UnitTestGeneration
817
ViewDiff = 'ViewDiff',
@@ -39,3 +48,119 @@ export enum FollowUpTypes {
3948
ProceedFolderSelection = 'ProceedFolderSelection',
4049
CancelFolderSelection = 'CancelFolderSelection',
4150
}
51+
52+
export type Interaction = {
53+
// content to be sent back to the chat UI
54+
content?: string
55+
responseType?: LLMResponseType
56+
}
57+
58+
export interface SessionStateInteraction {
59+
nextState: SessionState | Omit<SessionState, 'uploadId'> | undefined
60+
interaction: Interaction
61+
currentCodeGenerationId?: string
62+
}
63+
64+
export enum Intent {
65+
DEV = 'DEV',
66+
DOC = 'DOC',
67+
}
68+
69+
export enum DevPhase {
70+
INIT = 'Init',
71+
APPROACH = 'Approach',
72+
CODEGEN = 'Codegen',
73+
}
74+
75+
export enum CodeGenerationStatus {
76+
COMPLETE = 'Complete',
77+
PREDICT_READY = 'predict-ready',
78+
IN_PROGRESS = 'InProgress',
79+
PREDICT_FAILED = 'predict-failed',
80+
DEBATE_FAILED = 'debate-failed',
81+
FAILED = 'Failed',
82+
}
83+
84+
export type SessionStatePhase = DevPhase.INIT | DevPhase.CODEGEN
85+
86+
export type CurrentWsFolders = [vscode.WorkspaceFolder, ...vscode.WorkspaceFolder[]]
87+
88+
export interface SessionState {
89+
readonly filePaths?: NewFileInfo[]
90+
readonly deletedFiles?: DeletedFileInfo[]
91+
readonly references?: CodeReference[]
92+
readonly phase?: SessionStatePhase
93+
readonly uploadId: string
94+
readonly currentIteration?: number
95+
currentCodeGenerationId?: string
96+
tokenSource?: CancellationTokenSource
97+
readonly codeGenerationId?: string
98+
readonly tabID: string
99+
interact(action: SessionStateAction): Promise<SessionStateInteraction>
100+
updateWorkspaceRoot?: (workspaceRoot: string) => void
101+
codeGenerationRemainingIterationCount?: number
102+
codeGenerationTotalIterationCount?: number
103+
uploadHistory?: UploadHistory
104+
}
105+
106+
export interface SessionStateConfig {
107+
workspaceRoots: string[]
108+
workspaceFolders: CurrentWsFolders
109+
conversationId: string
110+
proxyClient: FeatureClient
111+
uploadId: string
112+
currentCodeGenerationId?: string
113+
}
114+
115+
export interface SessionStateAction {
116+
task: string
117+
msg: string
118+
messenger: Messenger
119+
fs: VirtualFileSystem
120+
telemetry: TelemetryHelper
121+
uploadHistory?: UploadHistory
122+
tokenSource?: CancellationTokenSource
123+
}
124+
125+
export type NewFileZipContents = { zipFilePath: string; fileContent: string }
126+
export type NewFileInfo = DiffTreeFileInfo &
127+
NewFileZipContents & {
128+
virtualMemoryUri: vscode.Uri
129+
workspaceFolder: vscode.WorkspaceFolder
130+
}
131+
132+
export type DeletedFileInfo = DiffTreeFileInfo & {
133+
workspaceFolder: vscode.WorkspaceFolder
134+
}
135+
136+
export interface SessionInfo {
137+
// TODO, if it had a summarized name that was better for the UI
138+
name?: string
139+
history: string[]
140+
}
141+
142+
export interface SessionStorage {
143+
[key: string]: SessionInfo
144+
}
145+
146+
export type LLMResponseType = 'EMPTY' | 'INVALID_STATE' | 'VALID'
147+
148+
export interface UpdateFilesPathsParams {
149+
tabID: string
150+
filePaths: NewFileInfo[]
151+
deletedFiles: DeletedFileInfo[]
152+
messageId: string
153+
disableFileActions?: boolean
154+
}
155+
156+
export enum MetricDataOperationName {
157+
StartCodeGeneration = 'StartCodeGeneration',
158+
EndCodeGeneration = 'EndCodeGeneration',
159+
}
160+
161+
export enum MetricDataResult {
162+
Success = 'Success',
163+
Fault = 'Fault',
164+
Error = 'Error',
165+
LlmFailure = 'LLMFailure',
166+
}

0 commit comments

Comments
 (0)