Skip to content

Commit bcf378a

Browse files
committed
Refactor to use IsSageMaker to differentiate SMUS, remove global state
change and modified unit tests
1 parent b5bd0e7 commit bcf378a

File tree

12 files changed

+44
-182
lines changed

12 files changed

+44
-182
lines changed

packages/amazonq/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@
351351
},
352352
{
353353
"command": "aws.amazonq.signout",
354-
"when": "(view == aws.amazonq.AmazonQChatView) && aws.codewhisperer.connected && !aws.amazonq.isSagemakerUnifiedStudio",
354+
"when": "(view == aws.amazonq.AmazonQChatView) && aws.codewhisperer.connected && !aws.isSageMakerUnifiedStudio",
355355
"group": "2_amazonQ@4"
356356
},
357357
{
@@ -627,7 +627,7 @@
627627
"title": "%AWS.command.codewhisperer.signout%",
628628
"category": "%AWS.amazonq.title%",
629629
"icon": "$(debug-disconnect)",
630-
"enablement": "aws.codewhisperer.connected && !aws.amazonq.isSagemakerUnifiedStudio"
630+
"enablement": "aws.codewhisperer.connected && !aws.isSageMakerUnifiedStudio"
631631
},
632632
{
633633
"command": "aws.amazonq.learnMore",

packages/amazonq/src/app/chat/activation.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as vscode from 'vscode'
77
import { ExtensionContext, window } from 'vscode'
88
import { telemetry } from 'aws-core-vscode/telemetry'
99
import { AuthUtil, CodeWhispererSettings } from 'aws-core-vscode/codewhisperer'
10-
import { Commands, placeholder, funcUtil, getLogger, setContext } from 'aws-core-vscode/shared'
10+
import { Commands, placeholder, funcUtil, setContext, isSageMaker } from 'aws-core-vscode/shared'
1111
import * as amazonq from 'aws-core-vscode/amazonq'
1212
import { scanChatAppInit } from '../amazonqScan'
1313
import { init as inlineChatInit } from '../../inlineChat/app'
@@ -16,7 +16,7 @@ export async function activate(context: ExtensionContext) {
1616
const appInitContext = amazonq.DefaultAmazonQAppInitContext.instance
1717

1818
registerApps(appInitContext, context)
19-
await setupAmazonQState()
19+
await setIsSMUSContext()
2020

2121
const provider = new amazonq.AmazonQChatViewProvider(
2222
context,
@@ -65,12 +65,10 @@ export async function activate(context: ExtensionContext) {
6565
void setupLsp()
6666
void setupAuthNotification()
6767

68-
async function setupAmazonQState() {
69-
const serviceName = process.env.SERVICE_NAME ?? 'AmazonQ' // Fallback service name to a generic name AmazonQ
70-
const amazonQState = amazonq.AmazonQState.initialize(serviceName)
71-
getLogger().info(`In Extension activation - q state is initialized ${amazonQState.serviceName}`)
72-
// Create a context key for SageMaker Studio state and set in context
73-
await setContext('aws.amazonq.isSagemakerUnifiedStudio', amazonQState.isSageMakerUnifiedStudio())
68+
async function setIsSMUSContext() {
69+
// set context key for SageMaker Unified Studio
70+
const isSMUS = isSageMaker(true)
71+
await setContext('aws.isSageMakerUnifiedStudio', isSMUS)
7472
}
7573
}
7674

packages/core/src/amazonq/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ export { ChatItemType } from './commons/model'
4343
export { ExtensionMessage } from '../amazonq/webview/ui/commands'
4444
export { CodeReference } from '../codewhispererChat/view/connector/connector'
4545
export { extractAuthFollowUp } from './util/authUtils'
46-
export { AmazonQState } from './util/amazonQState'
4746
export { Messenger } from './commons/connector/baseMessenger'
4847
export * from './lsp/config'
4948
export * as WorkspaceLspInstaller from './lsp/workspaceInstaller'

packages/core/src/amazonq/util/amazonQState.ts

Lines changed: 0 additions & 37 deletions
This file was deleted.

packages/core/src/amazonq/webview/ui/tabs/constants.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,20 @@ const qChatIntroMessage = `Hi, I'm Amazon Q. I can answer your software developm
1010
Ask me to explain, debug, or optimize your code.
1111
You can enter \`/\` to see a list of quick actions. Use \`@\` to add saved prompts, files, folders, or your entire workspace as context.`
1212

13+
export const qChatIntroMessageForSMUS = `Hi, I'm Amazon Q. I can answer your software development questions.\n\
14+
Ask me to explain, debug, or optimize your code.\n\
15+
You can enter \`/\` to see a list of quick actions. Use \`@\` to add saved prompts, files, folders, or your entire workspace as context.
16+
You are now using Q free tier.\n\
17+
`
18+
export const sageMakerUnifiedStudio = 'SageMakerUnifiedStudio'
19+
1320
export type TabTypeData = {
1421
title: string
1522
placeholder: string
1623
welcome: string
1724
contextCommands?: QuickActionCommandGroup[]
1825
}
1926

20-
export const qChatIntroMessageForSMUS = `Hi, I'm Amazon Q. I can answer your software development questions.\n\
21-
Ask me to explain, debug, or optimize your code.\n\
22-
You can enter \`/\` to see a list of quick actions. Use \`@\` to add saved prompts, files, folders, or your entire workspace as context.
23-
You are now using Q free tier.\n\
24-
`
25-
2627
export const workspaceCommand: QuickActionCommandGroup = {
2728
groupName: 'Mention code',
2829
commands: [

packages/core/src/amazonq/webview/ui/tabs/generator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ChatItemType, MynahUIDataModel, QuickActionCommandGroup } from '@aws/my
77
import { TabType } from '../storages/tabsStorage'
88
import { FollowUpGenerator } from '../followUps/generator'
99
import { QuickActionGenerator } from '../quickActions/generator'
10-
import { qChatIntroMessageForSMUS, TabTypeDataMap } from './constants'
10+
import { qChatIntroMessageForSMUS, sageMakerUnifiedStudio, TabTypeDataMap } from './constants'
1111
import { agentWalkthroughDataModel } from '../walkthrough/agent'
1212
import { FeatureContext } from '../../../../shared/featureConfig'
1313

@@ -53,7 +53,7 @@ export class TabDataGenerator {
5353
return {}
5454
}
5555

56-
const isSMUS = serviceName ? serviceName === 'SageMakerUnifiedStudio' : false
56+
const isSMUS = serviceName ? serviceName === sageMakerUnifiedStudio : false
5757

5858
const tabData: MynahUIDataModel = {
5959
tabTitle: taskName ?? TabTypeDataMap[tabType].title,

packages/core/src/auth/auth.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,10 +1108,12 @@ export class Auth implements AuthService, ConnectionManager {
11081108
*
11091109
* @param isC9 boolean for if Cloud9 is host
11101110
* @param isSM boolean for if SageMaker is host
1111+
* @param isSMUS boolean for if SageMaker Unified Studio is host
11111112
* @returns boolean for if C9 "OR" SM
11121113
*/
1113-
export function hasVendedIamCredentials(isC9?: boolean, isSM?: boolean) {
1114+
export function hasVendedIamCredentials(isC9?: boolean, isSM?: boolean, isSMUS?: boolean) {
11141115
isC9 ??= isCloud9()
11151116
isSM ??= isSageMaker()
1116-
return isSM || isC9
1117+
isSMUS ??= isSageMaker(true)
1118+
return isSM || isC9 || isSMUS
11171119
}

packages/core/src/codewhisperer/ui/statusBarMenu.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import { Commands } from '../../shared/vscode/commands2'
3030
import { createExitButton } from '../../shared/ui/buttons'
3131
import { telemetry } from '../../shared/telemetry/telemetry'
3232
import { getLogger } from '../../shared/logger/logger'
33-
import { AmazonQState } from '../../amazonq/util/amazonQState'
3433

3534
function getAmazonQCodeWhispererNodes() {
3635
const autoTriggerEnabled = CodeSuggestionsState.instance.isSuggestionsEnabled()
@@ -93,11 +92,7 @@ export function getQuickPickItems(): DataQuickPickItem<string>[] {
9392
// Add settings and signout
9493
createSeparator(),
9594
createSettingsNode(),
96-
...(AuthUtil.instance.isConnected() &&
97-
!hasVendedIamCredentials() &&
98-
!AmazonQState.instance.isSageMakerUnifiedStudio()
99-
? [createSignout()]
100-
: []),
95+
...(AuthUtil.instance.isConnected() && !hasVendedIamCredentials() ? [createSignout()] : []),
10196
]
10297

10398
return children

packages/core/src/shared/extensionUtilities.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const cloud9Appname = 'AWS Cloud9'
3030
const cloud9CnAppname = 'Amazon Cloud9'
3131
const sageMakerAppname = 'SageMaker Code Editor'
3232
const notInitialized = 'notInitialized'
33+
const sageMakerUnifiedStudio = 'SageMakerUnifiedStudio'
3334

3435
function _isAmazonQ() {
3536
const id = globals.context.extension.id
@@ -145,6 +146,14 @@ function createCloud9Properties(company: string): IdeProperties {
145146
}
146147
}
147148

149+
function isSageMakerUnifiedStudio(): boolean {
150+
const service = process.env.SERVICE_NAME
151+
if (service) {
152+
return service === sageMakerUnifiedStudio
153+
}
154+
return false
155+
}
156+
148157
/**
149158
* Decides if the current system is (the specified flavor of) Cloud9.
150159
*/
@@ -157,8 +166,12 @@ export function isCloud9(flavor: 'classic' | 'codecatalyst' | 'any' = 'any'): bo
157166
return (flavor === 'classic' && !codecat) || (flavor === 'codecatalyst' && codecat)
158167
}
159168

160-
export function isSageMaker(): boolean {
161-
return vscode.env.appName === sageMakerAppname
169+
export function isSageMaker(isUnifiedStudio?: boolean): boolean {
170+
const isSM = vscode.env.appName === sageMakerAppname
171+
if (isUnifiedStudio) {
172+
return isSM && isSageMakerUnifiedStudio()
173+
}
174+
return isSM
162175
}
163176

164177
export function isCn(): boolean {

packages/core/src/shared/vscode/setContext.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import * as vscode from 'vscode'
1313
export type contextKey =
1414
| 'aws.isDevMode'
1515
| 'aws.isSageMaker'
16+
| 'aws.isSageMakerUnifiedStudio'
1617
| 'aws.isWebExtHost'
1718
| 'aws.isInternalUser'
1819
| 'aws.amazonq.showLoginView'
@@ -37,7 +38,6 @@ export type contextKey =
3738
| 'gumby.wasQCodeTransformationUsed'
3839
| 'amazonq.inline.codelensShortcutEnabled'
3940
| 'aws.toolkit.lambda.walkthroughSelected'
40-
| 'aws.amazonq.isSagemakerUnifiedStudio'
4141

4242
const contextMap: Partial<Record<contextKey, any>> = {}
4343

0 commit comments

Comments
 (0)