Skip to content

Commit a22dea5

Browse files
authored
feat: context data selection support in chat-client (#902)
* feat: support context commands in chat UI * chore: updated runtimes dependency * chore: fix tests * chore: renamed method
1 parent 9fd97ea commit a22dea5

File tree

27 files changed

+107
-69
lines changed

27 files changed

+107
-69
lines changed

app/aws-lsp-antlr4-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"webpack": "webpack"
1313
},
1414
"dependencies": {
15-
"@aws/language-server-runtimes": "^0.2.52",
15+
"@aws/language-server-runtimes": "^0.2.53",
1616
"@aws/lsp-antlr4": "*",
1717
"antlr4-c3": "^3.4.1",
1818
"antlr4ng": "^3.0.4"

app/aws-lsp-codewhisperer-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"start": "cross-env NODE_OPTIONS=--max_old_space_size=8172 webpack serve"
1212
},
1313
"dependencies": {
14-
"@aws/language-server-runtimes": "^0.2.52",
14+
"@aws/language-server-runtimes": "^0.2.53",
1515
"@aws/lsp-codewhisperer": "*",
1616
"copyfiles": "^2.4.1",
1717
"cross-env": "^7.0.3",

app/aws-lsp-identity-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"compile": "tsc --build"
88
},
99
"dependencies": {
10-
"@aws/language-server-runtimes": "^0.2.52",
10+
"@aws/language-server-runtimes": "^0.2.53",
1111
"@aws/lsp-identity": "^0.0.1"
1212
}
1313
}

app/aws-lsp-json-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"webpack": "webpack"
1212
},
1313
"dependencies": {
14-
"@aws/language-server-runtimes": "^0.2.52",
14+
"@aws/language-server-runtimes": "^0.2.53",
1515
"@aws/lsp-json": "*"
1616
},
1717
"devDependencies": {

app/aws-lsp-notification-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"compile": "tsc --build"
88
},
99
"dependencies": {
10-
"@aws/language-server-runtimes": "^0.2.52",
10+
"@aws/language-server-runtimes": "^0.2.53",
1111
"@aws/lsp-notification": "^0.0.1"
1212
}
1313
}

app/aws-lsp-yaml-json-webworker/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"serve:webpack": "NODE_ENV=development webpack serve"
1212
},
1313
"dependencies": {
14-
"@aws/language-server-runtimes": "^0.2.52",
14+
"@aws/language-server-runtimes": "^0.2.53",
1515
"@aws/lsp-json": "*",
1616
"@aws/lsp-yaml": "*"
1717
},

app/aws-lsp-yaml-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"webpack": "webpack"
1212
},
1313
"dependencies": {
14-
"@aws/language-server-runtimes": "^0.2.52",
14+
"@aws/language-server-runtimes": "^0.2.53",
1515
"@aws/lsp-yaml": "*"
1616
},
1717
"devDependencies": {

app/hello-world-lsp-runtimes/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
},
1616
"dependencies": {
1717
"@aws/hello-world-lsp": "^0.0.1",
18-
"@aws/language-server-runtimes": "^0.2.52"
18+
"@aws/language-server-runtimes": "^0.2.53"
1919
},
2020
"devDependencies": {
2121
"@types/chai": "^4.3.5",

chat-client/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
"package": "webpack"
2222
},
2323
"dependencies": {
24-
"@aws/chat-client-ui-types": "^0.1.7",
25-
"@aws/language-server-runtimes-types": "^0.1.5",
26-
"@aws/mynah-ui": "^4.25.0"
24+
"@aws/chat-client-ui-types": "^0.1.12",
25+
"@aws/language-server-runtimes-types": "^0.1.10",
26+
"@aws/mynah-ui": "^4.26.1"
2727
},
2828
"devDependencies": {
2929
"@types/jsdom": "^21.1.6",

chat-client/src/client/chat.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ describe('Chat', () => {
3030
let clientApi: { postMessage: sinon.SinonStub }
3131

3232
before(() => {
33-
// Mock global ResizeObserver for test environment
33+
// Mock global observers for test environment
3434
// @ts-ignore
3535
global.ResizeObserver = null
36+
// @ts-ignore
37+
global.IntersectionObserver = null
3638
})
3739

3840
beforeEach(() => {

chat-client/src/client/chat.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import {
2121
} from '@aws/chat-client-ui-types'
2222
import {
2323
CHAT_REQUEST_METHOD,
24+
CONTEXT_COMMAND_NOTIFICATION_METHOD,
2425
ChatParams,
26+
ContextCommandParams,
2527
FEEDBACK_NOTIFICATION_METHOD,
2628
FOLLOW_UP_CLICK_NOTIFICATION_METHOD,
2729
FeedbackParams,
@@ -93,14 +95,16 @@ export const createChat = (
9395
case ERROR_MESSAGE:
9496
mynahApi.showError((message as ErrorMessage).params)
9597
break
98+
case CONTEXT_COMMAND_NOTIFICATION_METHOD:
99+
mynahApi.sendContextCommands(message.params as ContextCommandParams)
100+
break
96101
case CHAT_OPTIONS: {
97102
const params = (message as ChatOptionsMessage).params
98103
const chatConfig: ChatClientConfig = params?.quickActions?.quickActionsCommandGroups
99104
? {
100105
quickActionCommands: params.quickActions.quickActionsCommandGroups,
101-
disclaimerAcknowledged: config?.disclaimerAcknowledged ?? false,
102106
}
103-
: { disclaimerAcknowledged: config?.disclaimerAcknowledged ?? false }
107+
: {}
104108

105109
tabFactory.updateDefaultTabData(chatConfig)
106110

chat-client/src/client/mynahUi.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
} from '@aws/chat-client-ui-types'
1515
import {
1616
ChatResult,
17+
ContextCommandParams,
1718
FeedbackParams,
1819
FollowUpClickParams,
1920
InfoLinkClickParams,
@@ -33,8 +34,11 @@ export interface InboundChatApi {
3334
sendGenericCommand(params: GenericCommandParams): void
3435
showError(params: ErrorParams): void
3536
openTab(params: OpenTabParams): void
37+
sendContextCommands(params: ContextCommandParams): void
3638
}
3739

40+
type ContextCommandGroups = MynahUIDataModel['contextCommands']
41+
3842
export const handleChatPrompt = (
3943
mynahUi: MynahUI,
4044
tabId: string,
@@ -93,6 +97,7 @@ export const createMynahUi = (
9397
): [MynahUI, InboundChatApi] => {
9498
const initialTabId = TabFactory.generateUniqueId()
9599
let disclaimerCardActive = !disclaimerAcknowledged
100+
let contextCommandGroups: ContextCommandGroups | undefined
96101

97102
const mynahUi = new MynahUI({
98103
onCodeInsertToCursorPosition(
@@ -149,12 +154,13 @@ export const createMynahUi = (
149154
messager.onTabAdd(initialTabId)
150155
},
151156
onTabAdd: (tabId: string) => {
152-
messager.onTabAdd(tabId)
153157
const defaultTabConfig: Partial<MynahUIDataModel> = {
154158
quickActionCommands: tabFactory.getDefaultTabData().quickActionCommands,
159+
contextCommands: contextCommandGroups,
155160
...(disclaimerCardActive ? { promptInputStickyCard: disclaimerCard } : {}),
156161
}
157162
mynahUi.updateStore(tabId, defaultTabConfig)
163+
messager.onTabAdd(tabId)
158164
},
159165
onTabRemove: (tabId: string) => {
160166
messager.onTabRemove(tabId)
@@ -423,12 +429,23 @@ ${params.message}`,
423429
}
424430
}
425431

432+
const sendContextCommands = (params: ContextCommandParams) => {
433+
contextCommandGroups = params.contextCommandGroups
434+
435+
Object.keys(mynahUi.getAllTabs()).forEach(tabId => {
436+
mynahUi.updateStore(tabId, {
437+
contextCommands: contextCommandGroups,
438+
})
439+
})
440+
}
441+
426442
const api = {
427443
addChatResponse: addChatResponse,
428444
sendToPrompt: sendToPrompt,
429445
sendGenericCommand: sendGenericCommand,
430446
showError: showError,
431447
openTab: openTab,
448+
sendContextCommands: sendContextCommands,
432449
}
433450

434451
return [mynahUi, api]

client/vscode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,8 @@
327327
"devDependencies": {
328328
"@aws-sdk/credential-providers": "^3.731.1",
329329
"@aws-sdk/types": "^3.734.0",
330-
"@aws/chat-client-ui-types": "^0.1.7",
331-
"@aws/language-server-runtimes": "^0.2.52",
330+
"@aws/chat-client-ui-types": "^0.1.12",
331+
"@aws/language-server-runtimes": "^0.2.53",
332332
"@types/uuid": "^9.0.8",
333333
"@types/vscode": "^1.98.0",
334334
"jose": "^5.2.4",

client/vscode/src/chatActivation.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
InlineChatParams,
1818
InlineChatResult,
1919
inlineChatRequestType,
20+
contextCommandsNotificationType,
2021
} from '@aws/language-server-runtimes/protocol'
2122
import { v4 as uuidv4 } from 'uuid'
2223
import { Uri, ViewColumn, Webview, WebviewPanel, commands, window } from 'vscode'
@@ -56,6 +57,13 @@ export function registerChat(languageClient: LanguageClient, extensionUri: Uri,
5657
languageClient.info(`[VSCode Client] Received telemetry event from server ${JSON.stringify(e)}`)
5758
})
5859

60+
languageClient.onNotification(contextCommandsNotificationType, params => {
61+
panel.webview.postMessage({
62+
command: contextCommandsNotificationType.method,
63+
params: params,
64+
})
65+
})
66+
5967
panel.webview.onDidReceiveMessage(async message => {
6068
languageClient.info(`[VSCode Client] Received ${JSON.stringify(message)} from chat`)
6169

0 commit comments

Comments
 (0)