Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
### Features

- Added Draft pull requests
- Rovo Dev: Added "Restart Process" button to error dialogs when the Rovo Dev process terminates unexpectedly

### Improvements

Expand Down
4 changes: 4 additions & 0 deletions src/rovo-dev/rovoDevWebviewProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,10 @@ export class RovoDevWebviewProvider extends Disposable implements WebviewViewPro
await this.executeNewSession();
break;

case RovoDevViewResponseType.RestartProcess:
await this.executeRestartProcess();
break;

case RovoDevViewResponseType.MessageRendered:
this._chatProvider.signalMessageRendered(e.promptId);
break;
Expand Down
17 changes: 17 additions & 0 deletions src/rovo-dev/ui/common/DialogMessage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export const DialogMessageItem: React.FC<{
customButton?: { text: string; onClick?: () => void };
onOpenLogFile?: () => void;
onLinkClick: (href: string) => void;
onRestartProcess?: () => void;
}> = ({
msg,
isRetryAfterErrorButtonEnabled,
Expand All @@ -36,6 +37,7 @@ export const DialogMessageItem: React.FC<{
customButton,
onOpenLogFile,
onLinkClick,
onRestartProcess,
}) => {
const [isDetailsExpanded, setIsDetailsExpanded] = React.useState(false);
const [isStackTraceExpanded, setIsStackTraceExpanded] = React.useState(false);
Expand Down Expand Up @@ -140,6 +142,21 @@ export const DialogMessageItem: React.FC<{
</div>
)}

{msg.type === 'error' && msg.isProcessTerminated && onRestartProcess && (
<div
style={{
display: 'flex',
justifyContent: 'flex-start',
width: '100%',
marginTop: '8px',
}}
>
<button style={inChatButtonStyles} onClick={onRestartProcess}>
Restart Process
</button>
</div>
)}

{msg.type === 'toolPermissionRequest' && onToolPermissionChoice && (
<div
style={{
Expand Down
1 change: 1 addition & 0 deletions src/rovo-dev/ui/messaging/ChatItem.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ describe('ChatItem', () => {
checkFileExists: jest.fn(),
isRetryAfterErrorButtonEnabled: jest.fn(),
retryPromptAfterError: jest.fn(),
onRestartProcess: jest.fn(),
onOpenLogFile: jest.fn(),
onError: jest.fn(),
},
Expand Down
2 changes: 2 additions & 0 deletions src/rovo-dev/ui/messaging/ChatItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ interface ChatItemProps {
checkFileExists: CheckFileExistsFunc;
isRetryAfterErrorButtonEnabled: (uid: string) => boolean;
retryPromptAfterError: () => void;
onRestartProcess: () => void;
onOpenLogFile: () => void;
onError: (error: Error, errorMessage: string) => void;
};
Expand Down Expand Up @@ -98,6 +99,7 @@ export const ChatItem = React.memo<ChatItemProps>(
msg={block}
isRetryAfterErrorButtonEnabled={renderProps.isRetryAfterErrorButtonEnabled}
retryAfterError={renderProps.retryPromptAfterError}
onRestartProcess={renderProps.onRestartProcess}
onToolPermissionChoice={onToolPermissionChoice}
customButton={customButton}
onOpenLogFile={renderProps.onOpenLogFile}
Expand Down
2 changes: 2 additions & 0 deletions src/rovo-dev/ui/messaging/ChatStream.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ interface ChatStreamProps {
checkFileExists: CheckFileExistsFunc;
isRetryAfterErrorButtonEnabled: (uid: string) => boolean;
retryPromptAfterError: () => void;
onRestartProcess: () => void;
onOpenLogFile: () => void;
onError: (error: Error, errorMessage: string) => void;
};
Expand Down Expand Up @@ -274,6 +275,7 @@ export const ChatStream: React.FC<ChatStreamProps> = ({
msg={dialog}
isRetryAfterErrorButtonEnabled={renderProps.isRetryAfterErrorButtonEnabled}
retryAfterError={renderProps.retryPromptAfterError}
onRestartProcess={renderProps.onRestartProcess}
onToolPermissionChoice={onToolPermissionChoice}
onOpenLogFile={renderProps.onOpenLogFile}
onLinkClick={onLinkClick}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const mockRenderProps = {
checkFileExists: jest.fn(),
isRetryAfterErrorButtonEnabled: jest.fn(),
retryPromptAfterError: jest.fn(),
onRestartProcess: jest.fn(),
onOpenLogFile: jest.fn(),
onError: jest.fn(),
};
Expand Down
1 change: 1 addition & 0 deletions src/rovo-dev/ui/messaging/ChatStreamMessageRenderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ interface ChatStreamMessageRendererProps {
checkFileExists: CheckFileExistsFunc;
isRetryAfterErrorButtonEnabled: (uid: string) => boolean;
retryPromptAfterError: () => void;
onRestartProcess: () => void;
onOpenLogFile: () => void;
onError: (error: Error, errorMessage: string) => void;
};
Expand Down
7 changes: 7 additions & 0 deletions src/rovo-dev/ui/rovoDevView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,12 @@ const RovoDevView: React.FC = () => {
[retryAfterErrorEnabled],
);

const handleRestartProcess = useCallback(() => {
postMessage({
type: RovoDevViewResponseType.RestartProcess,
});
}, [postMessage]);

const onChangesGitPushed = useCallback(
(msg: PullRequestMessage, pullRequestCreated: boolean) => {
if (totalModifiedFiles.length > 0) {
Expand Down Expand Up @@ -1054,6 +1060,7 @@ const RovoDevView: React.FC = () => {
checkFileExists,
isRetryAfterErrorButtonEnabled,
retryPromptAfterError,
onRestartProcess: handleRestartProcess,
onOpenLogFile: () => postMessage({ type: RovoDevViewResponseType.OpenRovoDevLogFile }),
onError,
}}
Expand Down
2 changes: 2 additions & 0 deletions src/rovo-dev/ui/rovoDevViewMessages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export const enum RovoDevViewResponseType {
MessageRendered = 'messageRendered',
ReportRenderError = 'reportRenderError',
StartNewSession = 'startNewSession',
RestartProcess = 'restartProcess',
ShowSessionHistory = 'showSessionHistory',
FetchSavedPrompts = 'fetchSavedPrompts',
}
Expand Down Expand Up @@ -113,5 +114,6 @@ export type RovoDevViewResponse =
}
>
| ReducerAction<RovoDevViewResponseType.StartNewSession>
| ReducerAction<RovoDevViewResponseType.RestartProcess>
| ReducerAction<RovoDevViewResponseType.ShowSessionHistory>
| ReducerAction<RovoDevViewResponseType.FetchSavedPrompts>;
Loading