@aws/lsp-codewhisperer 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +19 -0
- package/out/client/sigv4/codewhisperer.d.ts +3 -0
- package/out/client/sigv4/codewhisperer.js +14 -0
- package/out/client/sigv4/codewhisperer.js.map +1 -0
- package/out/client/sigv4/service.json +346 -0
- package/out/client/token/bearer-token-service.json +1627 -0
- package/out/client/token/codewhisperer.d.ts +14 -0
- package/out/client/token/codewhisperer.js +23 -0
- package/out/client/token/codewhisperer.js.map +1 -0
- package/out/index.d.ts +2 -0
- package/out/index.js +19 -0
- package/out/index.js.map +1 -0
- package/out/language-server/auto-trigger/autoTrigger.d.ts +38 -0
- package/out/language-server/auto-trigger/autoTrigger.js +119 -0
- package/out/language-server/auto-trigger/autoTrigger.js.map +1 -0
- package/out/language-server/auto-trigger/autoTrigger.test.d.ts +1 -0
- package/out/language-server/auto-trigger/autoTrigger.test.js +82 -0
- package/out/language-server/auto-trigger/autoTrigger.test.js.map +1 -0
- package/out/language-server/auto-trigger/coefficients.json +405 -0
- package/out/language-server/codeWhispererSecurityScanServer.d.ts +4 -0
- package/out/language-server/codeWhispererSecurityScanServer.js +76 -0
- package/out/language-server/codeWhispererSecurityScanServer.js.map +1 -0
- package/out/language-server/codeWhispererServer.d.ts +7 -0
- package/out/language-server/codeWhispererServer.js +425 -0
- package/out/language-server/codeWhispererServer.js.map +1 -0
- package/out/language-server/codeWhispererServer.test.d.ts +1 -0
- package/out/language-server/codeWhispererServer.test.js +1218 -0
- package/out/language-server/codeWhispererServer.test.js.map +1 -0
- package/out/language-server/codeWhispererService.d.ts +84 -0
- package/out/language-server/codeWhispererService.js +168 -0
- package/out/language-server/codeWhispererService.js.map +1 -0
- package/out/language-server/dependencyGraph/commonUtil.d.ts +2 -0
- package/out/language-server/dependencyGraph/commonUtil.js +20 -0
- package/out/language-server/dependencyGraph/commonUtil.js.map +1 -0
- package/out/language-server/dependencyGraph/constants.d.ts +2 -0
- package/out/language-server/dependencyGraph/constants.js +6 -0
- package/out/language-server/dependencyGraph/constants.js.map +1 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.d.ts +27 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js +145 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js.map +1 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.d.ts +1 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js +341 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js.map +1 -0
- package/out/language-server/dependencyGraph/dependencyGraph.d.ts +125 -0
- package/out/language-server/dependencyGraph/dependencyGraph.js +152 -0
- package/out/language-server/dependencyGraph/dependencyGraph.js.map +1 -0
- package/out/language-server/dependencyGraph/dependencyGraphFactory.d.ts +15 -0
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js +22 -0
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js.map +1 -0
- package/out/language-server/languageDetection.d.ts +3 -0
- package/out/language-server/languageDetection.js +56 -0
- package/out/language-server/languageDetection.js.map +1 -0
- package/out/language-server/mergeRightUtils.d.ts +6 -0
- package/out/language-server/mergeRightUtils.js +37 -0
- package/out/language-server/mergeRightUtils.js.map +1 -0
- package/out/language-server/mergeRightUtils.test.d.ts +1 -0
- package/out/language-server/mergeRightUtils.test.js +53 -0
- package/out/language-server/mergeRightUtils.test.js.map +1 -0
- package/out/language-server/proxy-server.d.ts +2 -0
- package/out/language-server/proxy-server.js +35 -0
- package/out/language-server/proxy-server.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.d.ts +17 -0
- package/out/language-server/securityScan/securityScanHandler.js +139 -0
- package/out/language-server/securityScan/securityScanHandler.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.test.d.ts +1 -0
- package/out/language-server/securityScan/securityScanHandler.test.js +170 -0
- package/out/language-server/securityScan/securityScanHandler.test.js.map +1 -0
- package/out/language-server/securityScan/types.d.ts +49 -0
- package/out/language-server/securityScan/types.js +3 -0
- package/out/language-server/securityScan/types.js.map +1 -0
- package/out/language-server/session/sessionManager.d.ts +91 -0
- package/out/language-server/session/sessionManager.js +234 -0
- package/out/language-server/session/sessionManager.js.map +1 -0
- package/out/language-server/session/sessionManager.test.d.ts +1 -0
- package/out/language-server/session/sessionManager.test.js +584 -0
- package/out/language-server/session/sessionManager.test.js.map +1 -0
- package/out/language-server/telemetry/codePercentage.d.ts +17 -0
- package/out/language-server/telemetry/codePercentage.js +82 -0
- package/out/language-server/telemetry/codePercentage.js.map +1 -0
- package/out/language-server/telemetry/codePercentage.test.d.ts +1 -0
- package/out/language-server/telemetry/codePercentage.test.js +85 -0
- package/out/language-server/telemetry/codePercentage.test.js.map +1 -0
- package/out/language-server/telemetry/types.d.ts +68 -0
- package/out/language-server/telemetry/types.js +3 -0
- package/out/language-server/telemetry/types.js.map +1 -0
- package/out/language-server/telemetry/userTriggerDecision.test.d.ts +1 -0
- package/out/language-server/telemetry/userTriggerDecision.test.js +946 -0
- package/out/language-server/telemetry/userTriggerDecision.test.js.map +1 -0
- package/out/language-server/telemetry.test.d.ts +1 -0
- package/out/language-server/telemetry.test.js +96 -0
- package/out/language-server/telemetry.test.js.map +1 -0
- package/out/language-server/testUtils.d.ts +69 -0
- package/out/language-server/testUtils.js +90 -0
- package/out/language-server/testUtils.js.map +1 -0
- package/out/language-server/utils.d.ts +6 -0
- package/out/language-server/utils.js +31 -0
- package/out/language-server/utils.js.map +1 -0
- package/package.json +53 -0
- package/script/generateServiceClient.ts +242 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface RecommendationDescription {
|
|
2
|
+
text: string;
|
|
3
|
+
markdown: string;
|
|
4
|
+
}
|
|
5
|
+
export interface Recommendation {
|
|
6
|
+
text: string;
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SuggestedFix {
|
|
10
|
+
description: string;
|
|
11
|
+
code: string;
|
|
12
|
+
}
|
|
13
|
+
export interface Remediation {
|
|
14
|
+
recommendation: Recommendation;
|
|
15
|
+
suggestedFixes: SuggestedFix[];
|
|
16
|
+
}
|
|
17
|
+
export interface RawCodeScanIssue {
|
|
18
|
+
filePath: string;
|
|
19
|
+
startLine: number;
|
|
20
|
+
endLine: number;
|
|
21
|
+
title: string;
|
|
22
|
+
description: RecommendationDescription;
|
|
23
|
+
detectorId: string;
|
|
24
|
+
detectorName: string;
|
|
25
|
+
findingId: string;
|
|
26
|
+
ruleId?: string;
|
|
27
|
+
relatedVulnerabilities: string[];
|
|
28
|
+
severity: string;
|
|
29
|
+
remediation: Remediation;
|
|
30
|
+
}
|
|
31
|
+
export interface CodeScanIssue {
|
|
32
|
+
startLine: number;
|
|
33
|
+
endLine: number;
|
|
34
|
+
comment: string;
|
|
35
|
+
title: string;
|
|
36
|
+
description: RecommendationDescription;
|
|
37
|
+
detectorId: string;
|
|
38
|
+
detectorName: string;
|
|
39
|
+
findingId: string;
|
|
40
|
+
ruleId?: string;
|
|
41
|
+
relatedVulnerabilities: string[];
|
|
42
|
+
severity: string;
|
|
43
|
+
recommendation: Recommendation;
|
|
44
|
+
suggestedFixes: SuggestedFix[];
|
|
45
|
+
}
|
|
46
|
+
export interface AggregatedCodeScanIssue {
|
|
47
|
+
filePath: string;
|
|
48
|
+
issues: CodeScanIssue[];
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/language-server/securityScan/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { InlineCompletionStates } from '@aws/language-server-runtimes/out/features/lsp/inline-completions/protocolExtensions';
|
|
2
|
+
import { Position } from 'vscode-languageserver';
|
|
3
|
+
import { CodewhispererAutomatedTriggerType, CodewhispererTriggerType } from '../auto-trigger/autoTrigger';
|
|
4
|
+
import { GenerateSuggestionsRequest, ResponseContext, Suggestion } from '../codeWhispererService';
|
|
5
|
+
import { CodewhispererLanguage } from '../languageDetection';
|
|
6
|
+
type SessionState = 'REQUESTING' | 'ACTIVE' | 'CLOSED' | 'ERROR' | 'DISCARD';
|
|
7
|
+
export type UserDecision = 'Empty' | 'Filter' | 'Discard' | 'Accept' | 'Ignore' | 'Reject' | 'Unseen';
|
|
8
|
+
type UserTriggerDecision = 'Accept' | 'Reject' | 'Empty' | 'Discard';
|
|
9
|
+
export interface SessionData {
|
|
10
|
+
startPosition: Position;
|
|
11
|
+
triggerType: CodewhispererTriggerType;
|
|
12
|
+
autoTriggerType?: CodewhispererAutomatedTriggerType;
|
|
13
|
+
triggerCharacter?: string;
|
|
14
|
+
classifierResult?: number;
|
|
15
|
+
classifierThreshold?: number;
|
|
16
|
+
language: CodewhispererLanguage;
|
|
17
|
+
requestContext: GenerateSuggestionsRequest;
|
|
18
|
+
credentialStartUrl?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class CodeWhispererSession {
|
|
21
|
+
id: string;
|
|
22
|
+
startTime: number;
|
|
23
|
+
closeTime?: number;
|
|
24
|
+
state: SessionState;
|
|
25
|
+
codewhispererSessionId?: string;
|
|
26
|
+
startPosition: Position;
|
|
27
|
+
suggestions: Suggestion[];
|
|
28
|
+
suggestionsStates: Map<string, UserDecision>;
|
|
29
|
+
acceptedSuggestionId?: string;
|
|
30
|
+
responseContext?: ResponseContext;
|
|
31
|
+
triggerType: CodewhispererTriggerType;
|
|
32
|
+
autoTriggerType?: CodewhispererAutomatedTriggerType;
|
|
33
|
+
triggerCharacter?: string;
|
|
34
|
+
classifierResult?: number;
|
|
35
|
+
classifierThreshold?: number;
|
|
36
|
+
language: CodewhispererLanguage;
|
|
37
|
+
requestContext: GenerateSuggestionsRequest;
|
|
38
|
+
timeToFirstRecommendation: number;
|
|
39
|
+
credentialStartUrl?: string;
|
|
40
|
+
completionSessionResult?: {
|
|
41
|
+
[itemId: string]: InlineCompletionStates;
|
|
42
|
+
};
|
|
43
|
+
firstCompletionDisplayLatency?: number;
|
|
44
|
+
totalSessionDisplayTime?: number;
|
|
45
|
+
typeaheadLength?: number;
|
|
46
|
+
previousTriggerDecision?: UserTriggerDecision;
|
|
47
|
+
previousTriggerDecisionTime?: number;
|
|
48
|
+
reportedUserDecision: boolean;
|
|
49
|
+
constructor(data: SessionData);
|
|
50
|
+
generateSessionId(): string;
|
|
51
|
+
get lastSuggestionIndex(): number;
|
|
52
|
+
activate(): void;
|
|
53
|
+
close(): void;
|
|
54
|
+
discard(): void;
|
|
55
|
+
setClientResultData(completionSessionResult: {
|
|
56
|
+
[itemId: string]: InlineCompletionStates;
|
|
57
|
+
}, firstCompletionDisplayLatency?: number, totalSessionDisplayTime?: number, typeaheadLength?: number): void;
|
|
58
|
+
setSuggestionState(id: string, state: UserDecision): void;
|
|
59
|
+
getSuggestionState(id: string): UserDecision | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Aggregate recommendation level user decision to trigger level user decision based on the following rule
|
|
62
|
+
* - Accept if there is an Accept
|
|
63
|
+
* - Reject if there is a Reject
|
|
64
|
+
* - Empty if all decisions are Empty
|
|
65
|
+
* - Discard otherwise
|
|
66
|
+
*/
|
|
67
|
+
getAggregatedUserTriggerDecision(): UserTriggerDecision | undefined;
|
|
68
|
+
}
|
|
69
|
+
export declare class SessionManager {
|
|
70
|
+
private static _instance?;
|
|
71
|
+
private currentSession?;
|
|
72
|
+
private sessionsLog;
|
|
73
|
+
private maxHistorySize;
|
|
74
|
+
private constructor();
|
|
75
|
+
/**
|
|
76
|
+
* Singleton SessionManager class
|
|
77
|
+
*/
|
|
78
|
+
static getInstance(): SessionManager;
|
|
79
|
+
static reset(): void;
|
|
80
|
+
createSession(data: SessionData): CodeWhispererSession;
|
|
81
|
+
closeCurrentSession(): void;
|
|
82
|
+
closeSession(session: CodeWhispererSession): void;
|
|
83
|
+
discardSession(session: CodeWhispererSession): void;
|
|
84
|
+
getCurrentSession(): CodeWhispererSession | undefined;
|
|
85
|
+
getActiveSession(): CodeWhispererSession | undefined;
|
|
86
|
+
getPreviousSession(): CodeWhispererSession | undefined;
|
|
87
|
+
getSessionsLog(): CodeWhispererSession[];
|
|
88
|
+
getSessionById(id: string): CodeWhispererSession | undefined;
|
|
89
|
+
activateSession(session: CodeWhispererSession): void;
|
|
90
|
+
}
|
|
91
|
+
export {};
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionManager = exports.CodeWhispererSession = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
class CodeWhispererSession {
|
|
6
|
+
constructor(data) {
|
|
7
|
+
// Time when Session was closed and final state of user decisions is recorded in suggestionsStates
|
|
8
|
+
this.closeTime = 0;
|
|
9
|
+
this.startPosition = {
|
|
10
|
+
line: 0,
|
|
11
|
+
character: 0,
|
|
12
|
+
};
|
|
13
|
+
this.suggestions = [];
|
|
14
|
+
this.suggestionsStates = new Map();
|
|
15
|
+
this.acceptedSuggestionId = undefined;
|
|
16
|
+
this.timeToFirstRecommendation = 0;
|
|
17
|
+
this.reportedUserDecision = false;
|
|
18
|
+
this.id = this.generateSessionId();
|
|
19
|
+
this.credentialStartUrl = data.credentialStartUrl;
|
|
20
|
+
this.startPosition = data.startPosition;
|
|
21
|
+
this.triggerType = data.triggerType;
|
|
22
|
+
this.language = data.language;
|
|
23
|
+
this.requestContext = data.requestContext;
|
|
24
|
+
this.autoTriggerType = data.autoTriggerType || undefined;
|
|
25
|
+
this.triggerCharacter = data.triggerCharacter;
|
|
26
|
+
this.classifierResult = data.classifierResult;
|
|
27
|
+
this.classifierThreshold = data.classifierThreshold;
|
|
28
|
+
this.state = 'REQUESTING';
|
|
29
|
+
this.startTime = new Date().getTime();
|
|
30
|
+
}
|
|
31
|
+
// This function makes it possible to stub uuidv4 calls in tests
|
|
32
|
+
generateSessionId() {
|
|
33
|
+
return (0, uuid_1.v4)();
|
|
34
|
+
}
|
|
35
|
+
get lastSuggestionIndex() {
|
|
36
|
+
return this.suggestions.length - 1;
|
|
37
|
+
}
|
|
38
|
+
activate() {
|
|
39
|
+
if (this.state !== 'CLOSED' && this.state !== 'DISCARD') {
|
|
40
|
+
this.state = 'ACTIVE';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
close() {
|
|
44
|
+
if (this.state === 'CLOSED' || this.state === 'DISCARD') {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// If completionSessionResult are not set when session is closing, assume all suggestions were discarder by default.
|
|
48
|
+
// We can't assume if they were seen or not to use Unseen state until completionSessionResult are provided.
|
|
49
|
+
// In this implementation session will not wait for result request to close itself
|
|
50
|
+
// and will record Trigger Decision only based on server known states.
|
|
51
|
+
if (!this.completionSessionResult) {
|
|
52
|
+
for (const suggestion of this.suggestions) {
|
|
53
|
+
if (!this.suggestionsStates.has(suggestion.itemId)) {
|
|
54
|
+
this.suggestionsStates.set(suggestion.itemId, 'Discard');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
this.closeTime = new Date().getTime();
|
|
59
|
+
this.state = 'CLOSED';
|
|
60
|
+
}
|
|
61
|
+
discard() {
|
|
62
|
+
if (this.state === 'DISCARD') {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Force Discard trigger decision on every suggestion, if available
|
|
66
|
+
for (const suggestion of this.suggestions) {
|
|
67
|
+
this.suggestionsStates.set(suggestion.itemId, 'Discard');
|
|
68
|
+
}
|
|
69
|
+
this.closeTime = new Date().getTime();
|
|
70
|
+
this.state = 'DISCARD';
|
|
71
|
+
}
|
|
72
|
+
setClientResultData(completionSessionResult, firstCompletionDisplayLatency, totalSessionDisplayTime, typeaheadLength) {
|
|
73
|
+
// Skip if session results were already recorded for session of session is closed
|
|
74
|
+
if (this.state === 'CLOSED' || this.state === 'DISCARD' || this.completionSessionResult) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.completionSessionResult = completionSessionResult;
|
|
78
|
+
let hasAcceptedSuggestion = false;
|
|
79
|
+
const sessionResults = Object.entries(completionSessionResult);
|
|
80
|
+
for (let [itemId, states] of sessionResults) {
|
|
81
|
+
if (states.accepted) {
|
|
82
|
+
this.acceptedSuggestionId = itemId;
|
|
83
|
+
hasAcceptedSuggestion = true;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const validSuggestionIds = this.suggestions.map(s => s.itemId);
|
|
88
|
+
for (let itemId in completionSessionResult) {
|
|
89
|
+
// Skip suggestion ids that were not recorded for this session
|
|
90
|
+
if (!validSuggestionIds.includes(itemId)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Compute sugestion state based on fields.
|
|
94
|
+
// State flags represent suggestions state in client UI at the moment when user made a decision about this siggestions
|
|
95
|
+
const states = completionSessionResult[itemId];
|
|
96
|
+
if (states.discarded) {
|
|
97
|
+
this.setSuggestionState(itemId, 'Discard');
|
|
98
|
+
}
|
|
99
|
+
else if (!states.seen) {
|
|
100
|
+
this.setSuggestionState(itemId, 'Unseen');
|
|
101
|
+
// Seen suggestions:
|
|
102
|
+
}
|
|
103
|
+
else if (states.accepted) {
|
|
104
|
+
this.setSuggestionState(itemId, 'Accept');
|
|
105
|
+
}
|
|
106
|
+
else if (hasAcceptedSuggestion && this.acceptedSuggestionId !== itemId) {
|
|
107
|
+
// User accepted different suggestion
|
|
108
|
+
this.setSuggestionState(itemId, 'Ignore');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// No recommendation was accepted, but user have seen this suggestion
|
|
112
|
+
this.setSuggestionState(itemId, 'Reject');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.firstCompletionDisplayLatency = firstCompletionDisplayLatency;
|
|
116
|
+
this.totalSessionDisplayTime = totalSessionDisplayTime;
|
|
117
|
+
this.typeaheadLength = typeaheadLength;
|
|
118
|
+
}
|
|
119
|
+
setSuggestionState(id, state) {
|
|
120
|
+
this.suggestionsStates.set(id, state);
|
|
121
|
+
}
|
|
122
|
+
getSuggestionState(id) {
|
|
123
|
+
return this.suggestionsStates.get(id);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Aggregate recommendation level user decision to trigger level user decision based on the following rule
|
|
127
|
+
* - Accept if there is an Accept
|
|
128
|
+
* - Reject if there is a Reject
|
|
129
|
+
* - Empty if all decisions are Empty
|
|
130
|
+
* - Discard otherwise
|
|
131
|
+
*/
|
|
132
|
+
getAggregatedUserTriggerDecision() {
|
|
133
|
+
// Force Discard trigger decision when session was explicitly discarded by server
|
|
134
|
+
if (this.state === 'DISCARD') {
|
|
135
|
+
return 'Discard';
|
|
136
|
+
}
|
|
137
|
+
// Can't report trigger decision until session is marked as closed
|
|
138
|
+
if (this.state !== 'CLOSED') {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
let isEmpty = true;
|
|
142
|
+
for (const state of this.suggestionsStates.values()) {
|
|
143
|
+
if (state === 'Accept') {
|
|
144
|
+
return 'Accept';
|
|
145
|
+
}
|
|
146
|
+
else if (state === 'Reject') {
|
|
147
|
+
return 'Reject';
|
|
148
|
+
}
|
|
149
|
+
else if (state !== 'Empty') {
|
|
150
|
+
isEmpty = false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return isEmpty ? 'Empty' : 'Discard';
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.CodeWhispererSession = CodeWhispererSession;
|
|
157
|
+
class SessionManager {
|
|
158
|
+
// TODO, for user decision telemetry: accepted suggestions (not necessarily the full corresponding session) should be stored for 5 minutes
|
|
159
|
+
constructor() {
|
|
160
|
+
this.sessionsLog = [];
|
|
161
|
+
this.maxHistorySize = 5;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Singleton SessionManager class
|
|
165
|
+
*/
|
|
166
|
+
static getInstance() {
|
|
167
|
+
if (!SessionManager._instance) {
|
|
168
|
+
SessionManager._instance = new SessionManager();
|
|
169
|
+
}
|
|
170
|
+
return SessionManager._instance;
|
|
171
|
+
}
|
|
172
|
+
// For unit tests
|
|
173
|
+
static reset() {
|
|
174
|
+
SessionManager._instance = undefined;
|
|
175
|
+
}
|
|
176
|
+
createSession(data) {
|
|
177
|
+
this.closeCurrentSession();
|
|
178
|
+
// Remove oldest session from log
|
|
179
|
+
if (this.sessionsLog.length > this.maxHistorySize) {
|
|
180
|
+
this.sessionsLog.shift();
|
|
181
|
+
}
|
|
182
|
+
// Create new session
|
|
183
|
+
const session = new CodeWhispererSession(data);
|
|
184
|
+
const previousSession = this.getPreviousSession();
|
|
185
|
+
if (previousSession) {
|
|
186
|
+
session.previousTriggerDecision = previousSession.getAggregatedUserTriggerDecision();
|
|
187
|
+
session.previousTriggerDecisionTime = previousSession.closeTime;
|
|
188
|
+
}
|
|
189
|
+
this.currentSession = session;
|
|
190
|
+
this.sessionsLog.push(session);
|
|
191
|
+
return session;
|
|
192
|
+
}
|
|
193
|
+
closeCurrentSession() {
|
|
194
|
+
if (this.currentSession) {
|
|
195
|
+
this.closeSession(this.currentSession);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
closeSession(session) {
|
|
199
|
+
session.close();
|
|
200
|
+
}
|
|
201
|
+
discardSession(session) {
|
|
202
|
+
session.discard();
|
|
203
|
+
}
|
|
204
|
+
getCurrentSession() {
|
|
205
|
+
return this.currentSession;
|
|
206
|
+
}
|
|
207
|
+
getActiveSession() {
|
|
208
|
+
if (this.currentSession && this.currentSession.state == 'ACTIVE')
|
|
209
|
+
return this.currentSession;
|
|
210
|
+
}
|
|
211
|
+
getPreviousSession() {
|
|
212
|
+
if (this.sessionsLog.length > 0)
|
|
213
|
+
return this.sessionsLog.at(-1);
|
|
214
|
+
}
|
|
215
|
+
getSessionsLog() {
|
|
216
|
+
return this.sessionsLog;
|
|
217
|
+
}
|
|
218
|
+
getSessionById(id) {
|
|
219
|
+
if (this.currentSession?.id === id)
|
|
220
|
+
return this.currentSession;
|
|
221
|
+
for (const session of this.sessionsLog) {
|
|
222
|
+
if (session.id === id)
|
|
223
|
+
return session;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// If the session to be activated is the current session, activate it
|
|
227
|
+
activateSession(session) {
|
|
228
|
+
if (this.currentSession === session) {
|
|
229
|
+
this.currentSession.activate();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
exports.SessionManager = SessionManager;
|
|
234
|
+
//# sourceMappingURL=sessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../../src/language-server/session/sessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|