Skip to content

Commit 933f9a1

Browse files
authored
AXON-1956: clean up old technical plan code (#1682)
* AXON-1956: clean up old technical plan code * AXON-1956: update changelog * AXON-1956: fix tests * fix more uts
1 parent a767a1c commit 933f9a1

30 files changed

+24
-1053
lines changed

CHANGELOG.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## What's new in 4.0.23
44

5+
### Features
6+
7+
- **Rovo Dev**: Support new `plan` mode with `deferred_request` handling
8+
9+
### Cleanup
10+
11+
- **Rovo Dev**: Removed legacy `create_technical_plan` plan mode implementation in favor of new `deferred_request`-based plan mode
12+
513
### Improvements
614

715
- **RovoDev**: Fixed prompt input performance degradation after extended idle periods by properly disposing Monaco editor resources and event listeners on component cleanup
@@ -12,11 +20,6 @@
1220

1321
- **RovoDev**: Fixed JSON parsing errors in ToolReturnMessage handling - added type checking before JSON.parse() to prevent "Input data should be a String" and invalid JSON errors
1422
- Added comprehensive test coverage for parseToolReturnMessage with both string and pre-parsed object inputs
15-
## What's new in 4.0.23
16-
17-
### Features
18-
19-
- Rovo Dev: Support new `plan` mode with `deferred_request` handling
2023

2124
## What's new in 4.0.22
2225

src/analytics.test.ts

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -884,32 +884,6 @@ describe('analytics', () => {
884884
});
885885
});
886886

887-
describe('api.rovodev.chat.response.timeToTechPlan', () => {
888-
it('should create a performance event with correct tag and measure', async () => {
889-
const measure = 500;
890-
const params = {
891-
rovoDevEnv: 'IDE' as const,
892-
appInstanceId: 'app-789',
893-
rovoDevSessionId: 'session-789',
894-
rovoDevPromptId: 'prompt-789',
895-
};
896-
897-
const event = await analytics.performanceEvent(
898-
'api.rovodev.chat.response.timeToTechPlan',
899-
measure,
900-
params,
901-
);
902-
903-
expect(event.trackEvent.action).toEqual('performanceEvent');
904-
expect(event.trackEvent.actionSubject).toEqual('atlascode');
905-
expect(event.trackEvent.attributes.tag).toEqual('api.rovodev.chat.response.timeToTechPlan');
906-
expect(event.trackEvent.attributes.measure).toEqual(measure);
907-
expect(event.trackEvent.attributes.appInstanceId).toEqual(params.appInstanceId);
908-
expect(event.trackEvent.attributes.rovoDevSessionId).toEqual(params.rovoDevSessionId);
909-
expect(event.trackEvent.attributes.rovoDevPromptId).toEqual(params.rovoDevPromptId);
910-
});
911-
});
912-
913887
describe('api.rovodev.chat.response.timeToLastMessage', () => {
914888
it('should create a performance event with correct tag and measure', async () => {
915889
const measure = 1000;
@@ -1088,18 +1062,6 @@ describe('analytics', () => {
10881062
expect(event.trackEvent.actionSubject).toEqual('atlascode');
10891063
});
10901064

1091-
it('should have consistent action and actionSubject for timeToTechPlan', async () => {
1092-
const event = await analytics.performanceEvent('api.rovodev.chat.response.timeToTechPlan', 100, {
1093-
rovoDevEnv: 'IDE',
1094-
appInstanceId: 'test-app-id',
1095-
rovoDevSessionId: 'test-session',
1096-
rovoDevPromptId: 'test-prompt',
1097-
});
1098-
1099-
expect(event.trackEvent.action).toEqual('performanceEvent');
1100-
expect(event.trackEvent.actionSubject).toEqual('atlascode');
1101-
});
1102-
11031065
it('should have consistent action and actionSubject for timeToLastMessage', async () => {
11041066
const event = await analytics.performanceEvent('api.rovodev.chat.response.timeToLastMessage', 100, {
11051067
rovoDevEnv: 'IDE',

src/rovo-dev/analytics/events.ts

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export type RovoDevEnv = 'IDE' | 'Boysenberry';
66
export const RovodevPerformanceTags = {
77
timeToFirstByte: 'api.rovodev.chat.response.timeToFirstByte',
88
timeToFirstMessage: 'api.rovodev.chat.response.timeToFirstMessage',
9-
timeToTechPlan: 'api.rovodev.chat.response.timeToTechPlan',
109
timeToLastMessage: 'api.rovodev.chat.response.timeToLastMessage',
1110
timeToRender: 'ui.rovodev.chat.response.timeToRender',
1211
} as const;
@@ -50,21 +49,6 @@ export namespace Track {
5049
appInstanceId: string;
5150
sessionId: string;
5251
promptId: string;
53-
deepPlanEnabled: boolean;
54-
};
55-
};
56-
57-
export type TechnicalPlanningShown = {
58-
action: 'rovoDevTechnicalPlanningShown';
59-
subject: 'atlascode';
60-
attributes: {
61-
rovoDevEnv: RovoDevEnv;
62-
appInstanceId: string;
63-
sessionId: string;
64-
promptId: string;
65-
stepsCount: number;
66-
filesCount: number;
67-
questionsCount: number;
6852
};
6953
};
7054

@@ -216,7 +200,6 @@ export namespace Track {
216200
export type TrackEvent =
217201
| Track.NewSessionAction
218202
| Track.PromptSent
219-
| Track.TechnicalPlanningShown
220203
| Track.FilesSummaryShown
221204
| Track.FileChangedAction
222205
| Track.StopAction

src/rovo-dev/client/responseParserInterfaces.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ export type RovoDevToolName =
188188
| 'expand_folder'
189189
| 'grep'
190190
| 'bash'
191-
| 'create_technical_plan'
192191
| 'mcp_invoke_tool'
193192
| 'mcp__atlassian__invoke_tool'
194193
| 'mcp__atlassian__get_tool_schema'

src/rovo-dev/client/rovoDevApiClient.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ describe('RovoDevApiClient', () => {
264264
const message = 'Hello, how can I help?';
265265
const response = await client.chat({
266266
message,
267-
enable_deep_plan: true,
268267
context: [],
269268
});
270269

@@ -275,7 +274,7 @@ describe('RovoDevApiClient', () => {
275274
'Content-Type': 'application/json',
276275
Authorization: 'Bearer sessionToken',
277276
},
278-
body: JSON.stringify({ message, enable_deep_plan: true, context: [] }),
277+
body: JSON.stringify({ message, context: [] }),
279278
});
280279
expect(response).toBe(mockResponse);
281280

src/rovo-dev/client/rovoDevApiClientInterfaces.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export interface RovoDevDeferredToolCallResponse {
2222
export interface RovoDevChatRequest {
2323
message: string | RovoDevDeferredToolCallResponse;
2424
context: RovoDevChatRequestContext[];
25-
enable_deep_plan?: boolean;
2625
}
2726

2827
export interface BaicRovoDevHealthcheckResponse {

src/rovo-dev/performanceLogger.test.ts

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -152,40 +152,6 @@ describe('PerformanceLogger', () => {
152152
});
153153
});
154154

155-
describe('promptTechnicalPlanReceived', () => {
156-
beforeEach(() => {
157-
performanceLogger.sessionStarted('test-session-123');
158-
});
159-
160-
it('should measure performance and send analytics event', async () => {
161-
const rovoDevPromptId = 'test-prompt-123';
162-
const measureValue = 300;
163-
164-
mockPerf.measure.mockReturnValue(measureValue);
165-
166-
await performanceLogger.promptTechnicalPlanReceived(rovoDevPromptId);
167-
168-
expect(mockPerf.measure).toHaveBeenCalledWith(rovoDevPromptId);
169-
expect(mockLogger.debug).toHaveBeenCalledWith(
170-
`Event fired: api.rovodev.chat.response.timeToTechPlan ${measureValue} ms`,
171-
);
172-
173-
const expectedEvent: Track.PerformanceEvent = {
174-
action: 'performanceEvent',
175-
subject: 'atlascode',
176-
attributes: {
177-
tag: 'api.rovodev.chat.response.timeToTechPlan',
178-
measure: measureValue,
179-
rovoDevEnv: 'IDE',
180-
appInstanceId: 'test-instance-id',
181-
rovoDevSessionId: 'test-session-123',
182-
rovoDevPromptId,
183-
},
184-
};
185-
expect(mockAnalyticsClient.sendTrackEvent).toHaveBeenCalledWith(expectedEvent);
186-
});
187-
});
188-
189155
describe('promptLastMessageReceived', () => {
190156
beforeEach(() => {
191157
performanceLogger.sessionStarted('test-session-123');
@@ -251,17 +217,13 @@ describe('PerformanceLogger', () => {
251217
await performanceLogger.promptFirstMessageReceived(rovoDevPromptId);
252218
expect(mockPerf.measure).toHaveBeenCalledWith(rovoDevPromptId);
253219

254-
// Receive technical plan
255-
await performanceLogger.promptTechnicalPlanReceived(rovoDevPromptId);
256-
expect(mockPerf.measure).toHaveBeenCalledWith(rovoDevPromptId);
257-
258220
// Receive last message
259221
await performanceLogger.promptLastMessageReceived(rovoDevPromptId);
260222
expect(mockPerf.measure).toHaveBeenCalledWith(rovoDevPromptId);
261223
expect(mockPerf.clear).toHaveBeenCalledWith(rovoDevPromptId);
262224

263225
// Verify all analytics events were sent
264-
expect(mockAnalyticsClient.sendTrackEvent).toHaveBeenCalledTimes(4);
226+
expect(mockAnalyticsClient.sendTrackEvent).toHaveBeenCalledTimes(3);
265227
});
266228

267229
it('should handle multiple prompts in same session', async () => {

src/rovo-dev/performanceLogger.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,6 @@ export class PerformanceLogger {
5151
await this.fireEvent('api.rovodev.chat.response.timeToFirstMessage', measure, promptId);
5252
}
5353

54-
public async promptTechnicalPlanReceived(promptId: string) {
55-
const measure = Perf.measure(promptId);
56-
await this.fireEvent('api.rovodev.chat.response.timeToTechPlan', measure, promptId);
57-
}
58-
5954
public async promptLastMessageReceived(promptId: string) {
6055
const measure = Perf.measure(promptId);
6156
Perf.clear(promptId);

src/rovo-dev/rovoDevChatProvider.test.ts

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ describe('RovoDevChatProvider', () => {
8888
promptFirstByteReceived: jest.fn(),
8989
promptFirstMessageReceived: jest.fn(),
9090
promptLastMessageReceived: jest.fn(),
91-
promptTechnicalPlanReceived: jest.fn(),
9291
promptLastMessageRendered: jest.fn(),
9392
},
9493
} as any;
@@ -154,7 +153,6 @@ describe('RovoDevChatProvider', () => {
154153
it('should execute pending prompt when API client is set', async () => {
155154
const mockPrompt: RovoDevPrompt = {
156155
text: 'test prompt',
157-
enable_deep_plan: false,
158156
context: [],
159157
};
160158

@@ -184,7 +182,7 @@ describe('RovoDevChatProvider', () => {
184182
describe('shutdown', () => {
185183
it('should clear API client and pending prompts', async () => {
186184
await chatProvider.setReady(mockApiClient);
187-
chatProvider['_pendingPrompt'] = { text: 'test', enable_deep_plan: false, context: [] };
185+
chatProvider['_pendingPrompt'] = { text: 'test', context: [] };
188186

189187
chatProvider.shutdown();
190188

@@ -217,7 +215,6 @@ describe('RovoDevChatProvider', () => {
217215
// First execute a prompt
218216
const mockPrompt: RovoDevPrompt = {
219217
text: 'test prompt',
220-
enable_deep_plan: false,
221218
context: [],
222219
};
223220

@@ -263,7 +260,6 @@ describe('RovoDevChatProvider', () => {
263260

264261
const mockPrompt: RovoDevPrompt = {
265262
text: 'test prompt',
266-
enable_deep_plan: true,
267263
context: [],
268264
};
269265

@@ -416,7 +412,7 @@ describe('RovoDevChatProvider', () => {
416412
providerWithoutClient.setWebview(mockWebview);
417413

418414
// Set a pending prompt
419-
providerWithoutClient['_pendingPrompt'] = { text: 'test', enable_deep_plan: false, context: [] };
415+
providerWithoutClient['_pendingPrompt'] = { text: 'test', context: [] };
420416

421417
const result = await providerWithoutClient.executeCancel(false);
422418

@@ -643,7 +639,6 @@ describe('RovoDevChatProvider', () => {
643639
it('should not execute if text is empty', async () => {
644640
const mockPrompt: RovoDevPrompt = {
645641
text: '',
646-
enable_deep_plan: false,
647642
context: [],
648643
};
649644

@@ -655,7 +650,6 @@ describe('RovoDevChatProvider', () => {
655650
it('should filter out disabled file context', async () => {
656651
const mockPrompt: RovoDevPrompt = {
657652
text: 'test prompt',
658-
enable_deep_plan: false,
659653
context: [
660654
{
661655
contextType: 'file',
@@ -698,7 +692,6 @@ describe('RovoDevChatProvider', () => {
698692
it('should disable deep plan for commands', async () => {
699693
const mockPrompt: RovoDevPrompt = {
700694
text: '/status',
701-
enable_deep_plan: true,
702695
context: [
703696
{
704697
contextType: 'file',
@@ -722,7 +715,6 @@ describe('RovoDevChatProvider', () => {
722715

723716
expect(mockApiClient.chat).toHaveBeenCalledWith(
724717
expect.objectContaining({
725-
enable_deep_plan: false,
726718
context: [],
727719
}),
728720
true,
@@ -735,7 +727,6 @@ describe('RovoDevChatProvider', () => {
735727

736728
const mockPrompt: RovoDevPrompt = {
737729
text: 'test prompt',
738-
enable_deep_plan: false,
739730
context: [],
740731
};
741732

@@ -762,7 +753,6 @@ describe('RovoDevChatProvider', () => {
762753
it('should add reverted files to context', async () => {
763754
const mockPrompt: RovoDevPrompt = {
764755
text: 'test prompt',
765-
enable_deep_plan: false,
766756
context: [],
767757
};
768758

@@ -800,7 +790,6 @@ describe('RovoDevChatProvider', () => {
800790
it('should signal prompt sent to webview', async () => {
801791
const mockPrompt: RovoDevPrompt = {
802792
text: 'test prompt',
803-
enable_deep_plan: true,
804793
context: [],
805794
};
806795

@@ -819,7 +808,6 @@ describe('RovoDevChatProvider', () => {
819808
expect.objectContaining({
820809
type: RovoDevProviderMessageType.SignalPromptSent,
821810
text: 'test prompt',
822-
enable_deep_plan: true,
823811
echoMessage: true,
824812
}),
825813
);
@@ -828,7 +816,6 @@ describe('RovoDevChatProvider', () => {
828816
it('should fire telemetry event when prompt is sent', async () => {
829817
const mockPrompt: RovoDevPrompt = {
830818
text: 'test prompt',
831-
enable_deep_plan: true,
832819
context: [],
833820
};
834821

@@ -849,7 +836,6 @@ describe('RovoDevChatProvider', () => {
849836
subject: 'atlascode',
850837
attributes: {
851838
promptId: 'test-uuid-123',
852-
deepPlanEnabled: true,
853839
},
854840
});
855841
});
@@ -860,7 +846,6 @@ describe('RovoDevChatProvider', () => {
860846

861847
const mockPrompt: RovoDevPrompt = {
862848
text: 'test prompt',
863-
enable_deep_plan: false,
864849
context: [],
865850
};
866851

@@ -873,7 +858,6 @@ describe('RovoDevChatProvider', () => {
873858
it('should process Jira context correctly', async () => {
874859
const mockPrompt: RovoDevPrompt = {
875860
text: 'test prompt',
876-
enable_deep_plan: false,
877861
context: [
878862
{
879863
contextType: 'jiraWorkItem',
@@ -914,7 +898,6 @@ describe('RovoDevChatProvider', () => {
914898

915899
const mockPrompt: RovoDevPrompt = {
916900
text: 'test prompt',
917-
enable_deep_plan: false,
918901
context: [],
919902
};
920903

@@ -934,7 +917,6 @@ describe('RovoDevChatProvider', () => {
934917

935918
const mockPrompt: RovoDevPrompt = {
936919
text: 'test prompt',
937-
enable_deep_plan: false,
938920
context: [],
939921
};
940922

@@ -954,7 +936,6 @@ describe('RovoDevChatProvider', () => {
954936

955937
const mockPrompt: RovoDevPrompt = {
956938
text: 'test prompt',
957-
enable_deep_plan: false,
958939
context: [],
959940
};
960941

@@ -977,7 +958,6 @@ describe('RovoDevChatProvider', () => {
977958

978959
const mockPrompt: RovoDevPrompt = {
979960
text: 'test prompt',
980-
enable_deep_plan: false,
981961
context: [],
982962
};
983963

0 commit comments

Comments
 (0)