Skip to content

Commit b4db606

Browse files
authored
[AXON-1316] Update Rovo Dev to 0.12.14 and handle returned cta links (#1256)
1 parent 6ed7626 commit b4db606

File tree

15 files changed

+166
-47
lines changed

15 files changed

+166
-47
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Features
66

77
- Added edit and delete work log support
8+
- Added Call-to-Action links for Rovo Dev enablement errors and credit limit errors
89

910
### Bug Fixes
1011

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
],
4747
"main": "./build/extension/extension",
4848
"rovoDev": {
49-
"version": "0.12.10"
49+
"version": "0.12.14"
5050
},
5151
"scripts": {
5252
"vscode:uninstall": "node ./build/extension/uninstall.js",

src/react/atlascode/rovo-dev/common/DialogMessage.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export const DialogMessageItem: React.FC<{
2020
isRetryAfterErrorButtonEnabled?: (uid: string) => boolean;
2121
retryAfterError?: () => void;
2222
onToolPermissionChoice?: (toolCallId: string, choice: ToolPermissionChoice) => void;
23-
}> = ({ msg, isRetryAfterErrorButtonEnabled, retryAfterError, onToolPermissionChoice }) => {
23+
customButton?: { text: string; onClick: () => void };
24+
}> = ({ msg, isRetryAfterErrorButtonEnabled, retryAfterError, onToolPermissionChoice, customButton }) => {
2425
const [title, icon] = React.useMemo(() => {
2526
let title: string;
2627
let icon: React.JSX.Element;
@@ -89,6 +90,7 @@ export const DialogMessageItem: React.FC<{
8990
</button>
9091
</div>
9192
)}
93+
9294
{msg.type === 'toolPermissionRequest' && onToolPermissionChoice && (
9395
<div
9496
style={{
@@ -113,6 +115,15 @@ export const DialogMessageItem: React.FC<{
113115
</button>
114116
</div>
115117
)}
118+
119+
{customButton && (
120+
<div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%', marginTop: '8px' }}>
121+
<button style={inChatButtonStyles} onClick={customButton.onClick}>
122+
{customButton.text}
123+
</button>
124+
</div>
125+
)}
126+
116127
{msg.statusCode && <div style={{ fontSize: 'smaller', textAlign: 'right' }}>{msg.statusCode}</div>}
117128
</div>
118129
</div>

src/react/atlascode/rovo-dev/common/common.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ export const renderChatHistory = (
134134
msg: ChatMessage,
135135
openFile: OpenFileFunc,
136136
openJira: OpenJiraFunc,
137+
onLinkClick: (link: string) => void,
137138
checkFileExists: CheckFileExistsFunc,
138139
isRetryAfterErrorButtonEnabled: (uid: string) => boolean,
139140
retryAfterError: () => void,
@@ -154,6 +155,15 @@ export const renderChatHistory = (
154155
return <ToolReturnParsedItem msg={message} openFile={openFile} />;
155156
});
156157
case '_RovoDevDialog':
158+
let customButton: { text: string; onClick: () => void } | undefined = undefined;
159+
if (msg.ctaLink) {
160+
const { text, link } = msg.ctaLink;
161+
customButton = {
162+
text,
163+
onClick: () => onLinkClick(link),
164+
};
165+
}
166+
157167
return (
158168
<DialogMessageItem
159169
msg={msg}
@@ -162,6 +172,7 @@ export const renderChatHistory = (
162172
onToolPermissionChoice={
163173
() => {} /* this codepath is not supposed to have tool permissions requests */
164174
}
175+
customButton={customButton}
165176
/>
166177
);
167178
case 'text':

src/react/atlascode/rovo-dev/landing-page/RovoDevLanding.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const RovoDevLanding: React.FC<{
3636
setPromptText: (context: string) => void;
3737
jiraWorkItems: MinimalIssue<DetailedSiteInfo>[] | undefined;
3838
onJiraItemClick: (issue: MinimalIssue<DetailedSiteInfo>) => void;
39+
onLinkClick: (url: string) => void;
3940
}> = ({
4041
currentState,
4142
isHistoryEmpty,
@@ -45,6 +46,7 @@ export const RovoDevLanding: React.FC<{
4546
setPromptText,
4647
jiraWorkItems,
4748
onJiraItemClick,
49+
onLinkClick,
4850
}) => {
4951
const shouldHideSuggestions = React.useMemo(
5052
() =>
@@ -87,6 +89,7 @@ export const RovoDevLanding: React.FC<{
8789
onLoginClick={onLoginClick}
8890
onMcpChoice={onMcpChoice}
8991
onOpenFolder={onOpenFolder}
92+
onLinkClick={onLinkClick}
9093
/>
9194
</div>
9295
);

src/react/atlascode/rovo-dev/landing-page/disabled-messages/DisabledMessage.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ export const DisabledMessage: React.FC<{
1313
currentState: State;
1414
onLoginClick: (openApiTokenLogin: boolean) => void;
1515
onOpenFolder: () => void;
16+
onLinkClick: (url: string) => void;
1617
onMcpChoice: (choice: McpConsentChoice, serverName?: string) => void;
17-
}> = ({ currentState, onLoginClick, onOpenFolder, onMcpChoice }) => {
18+
}> = ({ currentState, onLoginClick, onOpenFolder, onLinkClick, onMcpChoice }) => {
1819
if (currentState.state === 'Disabled' && currentState.subState === 'NeedAuth') {
1920
return (
2021
<div style={messageOuterStyles}>
@@ -53,17 +54,29 @@ export const DisabledMessage: React.FC<{
5354
}
5455

5556
if (currentState.state === 'Disabled' && currentState.subState === 'EntitlementCheckFailed') {
57+
let customButton: { text: string; onClick: () => void } | undefined = undefined;
58+
if (currentState.detail.payload.ctaLink) {
59+
const { text, link } = currentState.detail.payload.ctaLink;
60+
customButton = {
61+
text,
62+
onClick: () => onLinkClick(link),
63+
};
64+
}
65+
66+
const message = currentState.detail.payload.message.replace('{ctaLink}', '').trim();
67+
5668
return (
5769
<div style={{ ...messageOuterStyles, width: '100%' }}>
5870
<DialogMessageItem
5971
msg={{
6072
event_kind: '_RovoDevDialog',
6173
type: 'error',
6274
title: currentState.detail.payload.title,
63-
text: currentState.detail.payload.message,
75+
text: message,
6476
statusCode: `Failure code: ${currentState.detail.payload.status}`,
6577
uid: '',
6678
}}
79+
customButton={customButton}
6780
/>
6881
</div>
6982
);

src/react/atlascode/rovo-dev/messaging/ChatItem.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export const ChatItem = React.memo<ChatItemProps>(
4949
opened={drawerOpen}
5050
renderProps={renderProps}
5151
onCollapsiblePanelExpanded={onCollapsiblePanelExpanded}
52+
onLinkClick={onLinkClick}
5253
/>
5354
);
5455
} else if (block.event_kind === '_RovoDevUserPrompt' || block.event_kind === 'text') {
@@ -79,12 +80,22 @@ export const ChatItem = React.memo<ChatItemProps>(
7980
return <ToolReturnParsedItem msg={message} openFile={renderProps.openFile} />;
8081
});
8182
} else if (block.event_kind === '_RovoDevDialog') {
83+
let customButton: { text: string; onClick: () => void } | undefined = undefined;
84+
if (block.ctaLink) {
85+
const { text, link } = block.ctaLink;
86+
customButton = {
87+
text,
88+
onClick: () => onLinkClick(link),
89+
};
90+
}
91+
8292
return (
8393
<DialogMessageItem
8494
msg={block}
8595
isRetryAfterErrorButtonEnabled={renderProps.isRetryAfterErrorButtonEnabled}
8696
retryAfterError={renderProps.retryPromptAfterError}
8797
onToolPermissionChoice={onToolPermissionChoice}
98+
customButton={customButton}
8899
/>
89100
);
90101
} else if (block.event_kind === '_RovoDevPullRequest') {

src/react/atlascode/rovo-dev/messaging/ChatStream.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ export const ChatStream: React.FC<ChatStreamProps> = ({
252252
setPromptText={setPromptText}
253253
jiraWorkItems={jiraWorkItems}
254254
onJiraItemClick={onJiraItemClick}
255+
onLinkClick={onLinkClick}
255256
/>
256257
)}
257258
{!isChatHistoryDisabled && (

src/react/atlascode/rovo-dev/messaging/MessageDrawer.test.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ describe('MessageDrawer', () => {
5151
messages={mockMessages}
5252
renderProps={mockRenderProps}
5353
onCollapsiblePanelExpanded={() => {}}
54+
onLinkClick={() => {}}
5455
/>,
5556
);
5657

@@ -67,6 +68,7 @@ describe('MessageDrawer', () => {
6768
messages={mockMessages}
6869
renderProps={mockRenderProps}
6970
onCollapsiblePanelExpanded={() => {}}
71+
onLinkClick={() => {}}
7072
/>,
7173
);
7274

@@ -83,6 +85,7 @@ describe('MessageDrawer', () => {
8385
messages={mockMessages}
8486
renderProps={mockRenderProps}
8587
onCollapsiblePanelExpanded={() => {}}
88+
onLinkClick={() => {}}
8689
/>,
8790
);
8891

@@ -109,6 +112,7 @@ describe('MessageDrawer', () => {
109112
messages={emptyMessages}
110113
renderProps={mockRenderProps}
111114
onCollapsiblePanelExpanded={() => {}}
115+
onLinkClick={() => {}}
112116
/>,
113117
);
114118

src/react/atlascode/rovo-dev/messaging/MessageDrawer.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ interface MessageDrawerProps {
1616
};
1717
opened: boolean;
1818
onCollapsiblePanelExpanded: () => void;
19+
onLinkClick: (link: string) => void;
1920
}
2021

2122
export const MessageDrawer: React.FC<MessageDrawerProps> = ({
2223
messages,
2324
renderProps: { openFile, openJira, checkFileExists, isRetryAfterErrorButtonEnabled, retryPromptAfterError },
2425
onCollapsiblePanelExpanded,
2526
opened,
27+
onLinkClick,
2628
}) => {
2729
const [isOpen, setIsOpen] = React.useState(opened);
2830

@@ -62,6 +64,7 @@ export const MessageDrawer: React.FC<MessageDrawerProps> = ({
6264
msg,
6365
openFile,
6466
openJira,
67+
onLinkClick,
6568
checkFileExists,
6669
isRetryAfterErrorButtonEnabled,
6770
retryPromptAfterError,

0 commit comments

Comments
 (0)