Skip to content

Commit 9e5abb4

Browse files
authored
[AXON-1647] Handle /prompts command (#1388)
1 parent 22ed971 commit 9e5abb4

File tree

6 files changed

+88
-16
lines changed

6 files changed

+88
-16
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### Improvements
66

7-
- Added support for Rovo Dev /usage command
7+
- Added support for Rovo Dev /usage and /prompts commands
88
- Add saving of last chosen issue type
99

1010
### Bug Fixes

src/rovo-dev/client/responseParser.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
RovoDevExceptionResponse,
66
RovoDevOnCallToolStartResponse,
77
RovoDevParsingError,
8+
RovoDevPromptsResponse,
89
RovoDevPruneResponse,
910
RovoDevResponse,
1011
RovoDevRetryPromptResponse,
@@ -146,6 +147,9 @@ type RovoDevStatusChunk = RovoDevStatusResponse;
146147
// doc missing
147148
type RovoDevUsageChunk = RovoDevUsageResponse;
148149

150+
// doc missing
151+
type RovoDevPromptsChunk = RovoDevPromptsResponse;
152+
149153
// https://bitbucket.org/atlassian/acra-python/src/9ce5910e61d00e91f70c7978e067bde2690a1c97/packages/cli-rovodev/docs/serve/streaming-events.md?at=RDA-307-emit-warning-events-related-to-rate-limits-and-other-api-request-problems#:~:text=Server%20Error%20Warnings
150154
interface RovoDevCloseChunk {
151155
event_kind: 'close';
@@ -181,6 +185,7 @@ type RovoDevSingleChunk =
181185
| RovoDevOnCallToolStartChunk
182186
| RovoDevStatusChunk
183187
| RovoDevUsageChunk
188+
| RovoDevPromptsChunk
184189
| RovoDevCloseChunk
185190
| RovoDevReplayEndChunk;
186191

@@ -529,6 +534,11 @@ export class RovoDevResponseParser {
529534
? generateError(Error(`Rovo Dev parser error: ${chunk.event_kind} seem to be split`))
530535
: chunk;
531536

537+
case 'prompts':
538+
return buffer
539+
? generateError(Error(`Rovo Dev parser error: ${chunk.event_kind} seem to be split`))
540+
: chunk;
541+
532542
// events with no payload
533543
case 'close':
534544
case 'replay_end':

src/rovo-dev/client/responseParserInterfaces.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,17 @@ export interface RovoDevUsageResponse {
130130
};
131131
}
132132

133+
export interface RovoDevPromptsResponse {
134+
event_kind: 'prompts';
135+
data: {
136+
prompts: {
137+
name: string;
138+
description: string;
139+
content_file: string;
140+
}[];
141+
};
142+
}
143+
133144
export type RovoDevResponse =
134145
| RovoDevParsingError
135146
| RovoDevUserPromptResponse
@@ -144,6 +155,7 @@ export type RovoDevResponse =
144155
| RovoDevOnCallToolStartResponse
145156
| RovoDevStatusResponse
146157
| RovoDevUsageResponse
158+
| RovoDevPromptsResponse
147159
| RovoDevCloseResponse
148160
| RovoDevReplayEndResponse;
149161

src/rovo-dev/rovoDevChatProvider.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
} from './rovoDevTypes';
2424
import {
2525
parseCustomCliTagsForMarkdown,
26+
promptsJsonResponseToMarkdown,
2627
readLastNLogLines,
2728
statusJsonResponseToMarkdown,
2829
usageJsonResponseToMarkdown,
@@ -565,6 +566,18 @@ export class RovoDevChatProvider {
565566
}
566567
break;
567568

569+
case 'prompts':
570+
await webview.postMessage({
571+
type: RovoDevProviderMessageType.ShowDialog,
572+
message: {
573+
type: 'info',
574+
title: 'Prompts response',
575+
text: promptsJsonResponseToMarkdown(response),
576+
event_kind: '_RovoDevDialog',
577+
},
578+
});
579+
break;
580+
568581
case 'close':
569582
// response terminated
570583
break;

src/rovo-dev/rovoDevUtils.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import * as fs from 'fs';
22
import path from 'path';
33
import { window, workspace } from 'vscode';
44

5-
import { RovoDevMessageWithCtaLink, RovoDevStatusResponse, RovoDevUsageResponse } from './client';
5+
import {
6+
RovoDevMessageWithCtaLink,
7+
RovoDevPromptsResponse,
8+
RovoDevStatusResponse,
9+
RovoDevUsageResponse,
10+
} from './client';
611

712
export type SupportedConfigFiles = 'config.yml' | 'mcp.json' | '.agent.md' | 'rovodev.log';
813

@@ -144,6 +149,22 @@ export function usageJsonResponseToMarkdown(response: RovoDevUsageResponse): {
144149
return { usage_response: buffer, alert_message: data.exceeded_message };
145150
}
146151

152+
export function promptsJsonResponseToMarkdown(response: RovoDevPromptsResponse): string {
153+
const data = response.data.prompts;
154+
155+
if (!Array.isArray(data) || data.length === 0) {
156+
return '';
157+
}
158+
159+
let buffer = '';
160+
161+
for (const prompt of data) {
162+
buffer += `**${prompt.name}**\n- ${prompt.description}\n- ${prompt.content_file}\n\n`;
163+
}
164+
165+
return buffer;
166+
}
167+
147168
function formatText(text: string, cliTags: string[], links: { text: string; link: string }[]) {
148169
if (cliTags.includes('italic')) {
149170
text = `*${text}*`;

src/rovo-dev/ui/prompt-box/prompt-input/utils.tsx

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,29 +82,39 @@ export const SLASH_COMMANDS: SlashCommand[] = [
8282
description: 'Clear the chat',
8383
command: { title: 'Clear', id: 'rovo-dev.clearChat', tooltip: 'Clear the chat' },
8484
},
85-
{
86-
label: '/prune',
87-
insertText: '/prune',
88-
description: 'Prune the chat',
89-
command: { title: 'Prune', id: 'rovo-dev.pruneChat', tooltip: 'Prune the chat' },
90-
},
9185
{
9286
label: '/copy',
9387
insertText: '/copy',
9488
description: 'Copy the last response to clipboard',
9589
command: { title: 'Copy', id: 'rovo-dev.copyResponse', tooltip: 'Copy the last response to clipboard' },
9690
},
91+
{
92+
label: '/feedback',
93+
insertText: '/feedback',
94+
description: 'Provide feedback on Rovo Dev',
95+
command: { title: 'Feedback', id: 'rovo-dev.triggerFeedback', tooltip: 'Provide feedback on Rovo Dev' },
96+
},
9797
{
9898
label: '/memory',
9999
insertText: '/memory',
100100
description: 'Show agent memory',
101101
command: { title: 'Agent Memory', id: 'rovo-dev.agentMemory', tooltip: 'Show agent memory' },
102102
},
103103
{
104-
label: '/yolo',
105-
insertText: '/yolo',
106-
description: 'Toggle tool confirmations',
107-
command: { title: 'Yolo Mode', id: 'rovo-dev.toggleYoloMode', tooltip: 'Toggle tool confirmations' },
104+
label: '/prompts',
105+
insertText: '/prompts',
106+
description: 'Show saved prompts',
107+
command: {
108+
title: 'Prompts',
109+
id: 'rovo-dev.triggerPrompts',
110+
tooltip: 'Show saved prompts',
111+
},
112+
},
113+
{
114+
label: '/prune',
115+
insertText: '/prune',
116+
description: 'Prune the chat',
117+
command: { title: 'Prune', id: 'rovo-dev.pruneChat', tooltip: 'Prune the chat' },
108118
},
109119
{
110120
label: '/status',
@@ -127,10 +137,10 @@ export const SLASH_COMMANDS: SlashCommand[] = [
127137
},
128138
},
129139
{
130-
label: '/feedback',
131-
insertText: '/feedback',
132-
description: 'Provide feedback on Rovo Dev',
133-
command: { title: 'Feedback', id: 'rovo-dev.triggerFeedback', tooltip: 'Provide feedback on Rovo Dev' },
140+
label: '/yolo',
141+
insertText: '/yolo',
142+
description: 'Toggle tool confirmations',
143+
command: { title: 'Yolo Mode', id: 'rovo-dev.toggleYoloMode', tooltip: 'Toggle tool confirmations' },
134144
},
135145
];
136146

@@ -222,6 +232,12 @@ export function setupMonacoCommands(
222232
editor.setValue('');
223233
});
224234

235+
monaco.editor.registerCommand('rovo-dev.triggerPrompts', () => {
236+
if (onSend('/prompts')) {
237+
editor.setValue('');
238+
}
239+
});
240+
225241
monaco.editor.registerCommand('rovo-dev.triggerStatus', () => {
226242
if (onSend('/status')) {
227243
editor.setValue('');

0 commit comments

Comments
 (0)