Skip to content

Commit cf0f6b3

Browse files
LiGaCuJiatong LiEge Ozcan
authored
feat(amazonq): integrate server side workspace context with inline completion (#1402)
* feat(amazonq): integrate workspace context with inline completion * fix: replace got with axios for s3 uploads in workspace context capability --------- Co-authored-by: Jiatong Li <[email protected]> Co-authored-by: Ege Ozcan <[email protected]>
1 parent 3774f40 commit cf0f6b3

File tree

5 files changed

+25
-15
lines changed

5 files changed

+25
-15
lines changed

app/aws-lsp-codewhisperer-runtimes/webpack.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ const webworkerConfig = {
8383
fs: path.resolve(__dirname, 'src/mock-fs.js'),
8484
child_process: false,
8585
vm: false,
86+
dns: false,
87+
zlib: false,
88+
net: false,
89+
tls: false,
90+
http2: false,
8691
},
8792
extensions: ['.ts', '.tsx', '.js', '.jsx'],
8893
},

package-lock.json

Lines changed: 11 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/aws-lsp-codewhisperer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"adm-zip": "^0.5.10",
4040
"archiver": "^7.0.1",
4141
"aws-sdk": "^2.1403.0",
42+
"axios": "^1.9.0",
4243
"chokidar": "^4.0.3",
4344
"deepmerge": "^4.3.1",
4445
"diff": "^7.0.0",

server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import { getOrThrowBaseTokenServiceManager } from '../../shared/amazonQServiceMa
4949
import { AmazonQWorkspaceConfig } from '../../shared/amazonQServiceManager/configurationUtils'
5050
import { hasConnectionExpired } from '../../shared/utils'
5151
import { getOrThrowBaseIAMServiceManager } from '../../shared/amazonQServiceManager/AmazonQIAMServiceManager'
52-
// import { WorkspaceFolderManager } from '../workspaceContext/workspaceFolderManager'
52+
import { WorkspaceFolderManager } from '../workspaceContext/workspaceFolderManager'
5353
import path = require('path')
5454
import { getRelativePath } from '../workspaceContext/util'
5555
import { UserWrittenCodeTracker } from '../../shared/userWrittenCodeTracker'
@@ -349,8 +349,10 @@ export const CodewhispererServerFactory =
349349
const maxResults = isAutomaticLspTriggerKind ? 1 : 5
350350
const selectionRange = params.context.selectedCompletionInfo?.range
351351
const fileContext = getFileContext({ textDocument, inferredLanguageId, position: params.position })
352-
// const workspaceFolder = WorkspaceFolderManager.getInstance()?.getWorkspaceFolder(params.textDocument.uri)
353-
// const workspaceId = WorkspaceFolderManager.getInstance()?.getWorkspaceId(workspaceFolder)
352+
const workspaceState = WorkspaceFolderManager.getInstance()?.getWorkspaceState()
353+
const workspaceId = workspaceState?.webSocketClient?.isConnected()
354+
? workspaceState.workspaceId
355+
: undefined
354356
// TODO: Can we get this derived from a keyboard event in the future?
355357
// This picks the last non-whitespace character, if any, before the cursor
356358
const triggerCharacter = fileContext.leftFileContent.trim().at(-1) ?? ''
@@ -453,7 +455,7 @@ export const CodewhispererServerFactory =
453455
.slice(0, CONTEXT_CHARACTERS_LIMIT)
454456
.replaceAll('\r\n', '\n'),
455457
},
456-
// workspaceId: workspaceId,
458+
...(workspaceId ? { workspaceId: workspaceId } : {}),
457459
})
458460
.then(async suggestionResponse => {
459461
return processSuggestionResponse(suggestionResponse, newSession, true, selectionRange)

server/aws-lsp-codewhisperer/src/language-server/workspaceContext/util.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { CredentialsProvider, WorkspaceFolder } from '@aws/language-server-runtimes/server-interface'
22
import { CreateUploadUrlResponse } from '../../client/token/codewhispererbearertokenclient'
3-
import got from 'got'
43
import { URI } from 'vscode-uri'
54
import * as fs from 'fs'
65
import * as crypto from 'crypto'
76
import * as path from 'path'
7+
import axios from 'axios'
88

99
export const findWorkspaceRootFolder = (
1010
fileUri: string,
@@ -47,10 +47,7 @@ export const uploadArtifactToS3 = async (content: Buffer, resp: CreateUploadUrlR
4747
'x-amz-server-side-encryption-context': Buffer.from(encryptionContext, 'utf8').toString('base64'),
4848
})
4949
}
50-
await got.put(resp.uploadUrl, {
51-
body: content,
52-
headers: headersObj,
53-
})
50+
await axios.put(resp.uploadUrl, { body: content, headers: headersObj })
5451
}
5552

5653
export const isDirectory = (path: string): boolean => {

0 commit comments

Comments
 (0)