rivet-design 0.1.21 → 0.1.23
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/README.md +15 -5
- package/dist/config/proxy.d.ts.map +1 -1
- package/dist/config/proxy.js +1 -0
- package/dist/config/proxy.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/routes/electron.d.ts +8 -0
- package/dist/routes/electron.d.ts.map +1 -0
- package/dist/routes/electron.js +64 -0
- package/dist/routes/electron.js.map +1 -0
- package/dist/routes/git.d.ts.map +1 -1
- package/dist/routes/git.js +21 -0
- package/dist/routes/git.js.map +1 -1
- package/dist/routes/modifications.d.ts +2 -1
- package/dist/routes/modifications.d.ts.map +1 -1
- package/dist/routes/modifications.js +8 -2
- package/dist/routes/modifications.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +69 -14
- package/dist/server.js.map +1 -1
- package/dist/services/AuthService.d.ts +1 -0
- package/dist/services/AuthService.d.ts.map +1 -1
- package/dist/services/AuthService.js +1 -1
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/ConfigManager.d.ts +7 -2
- package/dist/services/ConfigManager.d.ts.map +1 -1
- package/dist/services/ConfigManager.js +11 -3
- package/dist/services/ConfigManager.js.map +1 -1
- package/dist/services/ElectronBridgeService.d.ts +121 -0
- package/dist/services/ElectronBridgeService.d.ts.map +1 -0
- package/dist/services/ElectronBridgeService.js +299 -0
- package/dist/services/ElectronBridgeService.js.map +1 -0
- package/dist/services/LLMService.d.ts +4 -0
- package/dist/services/LLMService.d.ts.map +1 -1
- package/dist/services/LLMService.js +48 -1
- package/dist/services/LLMService.js.map +1 -1
- package/dist/services/LocalGitService.d.ts +5 -0
- package/dist/services/LocalGitService.d.ts.map +1 -1
- package/dist/services/LocalGitService.js +24 -0
- package/dist/services/LocalGitService.js.map +1 -1
- package/dist/services/ProjectDetectionService.d.ts +2 -2
- package/dist/services/ProjectDetectionService.d.ts.map +1 -1
- package/dist/services/ProjectDetectionService.js +12 -6
- package/dist/services/ProjectDetectionService.js.map +1 -1
- package/dist/services/SessionService.d.ts +1 -0
- package/dist/services/SessionService.d.ts.map +1 -1
- package/dist/services/SessionService.js +13 -0
- package/dist/services/SessionService.js.map +1 -1
- package/package.json +3 -1
- package/src/ui/dist/assets/main-BOyShc8c.js +217 -0
- package/src/ui/dist/assets/main-Bkokm1KG.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/jest.config.d.ts +0 -4
- package/dist/jest.config.d.ts.map +0 -1
- package/dist/jest.config.js +0 -73
- package/dist/jest.config.js.map +0 -1
- package/dist/proxy/proxy-config.d.ts +0 -2
- package/dist/proxy/proxy-config.d.ts.map +0 -1
- package/dist/proxy/proxy-config.js +0 -59
- package/dist/proxy/proxy-config.js.map +0 -1
- package/dist/routes/config.d.ts +0 -2
- package/dist/routes/config.d.ts.map +0 -1
- package/dist/routes/config.js +0 -16
- package/dist/routes/config.js.map +0 -1
- package/dist/routes/selection.d.ts +0 -2
- package/dist/routes/selection.d.ts.map +0 -1
- package/dist/routes/selection.js +0 -32
- package/dist/routes/selection.js.map +0 -1
- package/dist/scripts/selection-script.js +0 -846
- package/dist/services/__tests__/FileModificationService.test.d.ts +0 -2
- package/dist/services/__tests__/FileModificationService.test.d.ts.map +0 -1
- package/dist/services/__tests__/FileModificationService.test.js +0 -297
- package/dist/services/__tests__/FileModificationService.test.js.map +0 -1
- package/dist/services/__tests__/LLMService.spec.d.ts +0 -2
- package/dist/services/__tests__/LLMService.spec.d.ts.map +0 -1
- package/dist/services/__tests__/LLMService.spec.js +0 -270
- package/dist/services/__tests__/LLMService.spec.js.map +0 -1
- package/dist/services/__tests__/LocalGitService.test.d.ts +0 -2
- package/dist/services/__tests__/LocalGitService.test.d.ts.map +0 -1
- package/dist/services/__tests__/LocalGitService.test.js +0 -249
- package/dist/services/__tests__/LocalGitService.test.js.map +0 -1
- package/dist/shared/FileSystemAdapter.d.ts +0 -9
- package/dist/shared/FileSystemAdapter.d.ts.map +0 -1
- package/dist/shared/FileSystemAdapter.js +0 -7
- package/dist/shared/FileSystemAdapter.js.map +0 -1
- package/dist/shared/LLMService.d.ts +0 -58
- package/dist/shared/LLMService.d.ts.map +0 -1
- package/dist/shared/LLMService.js +0 -169
- package/dist/shared/LLMService.js.map +0 -1
- package/dist/shared/types.d.ts +0 -25
- package/dist/shared/types.d.ts.map +0 -1
- package/dist/shared/types.js +0 -6
- package/dist/shared/types.js.map +0 -1
- package/dist/types/types.d.ts +0 -15
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.js +0 -3
- package/dist/types/types.js.map +0 -1
- package/src/ui/dist/assets/main-DqRH7DiB.js +0 -144
- package/src/ui/dist/assets/main-DuoX_Unn.css +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type RivetConfig = {
|
|
2
2
|
authToken?: string;
|
|
3
|
+
refreshToken?: string;
|
|
3
4
|
email?: string;
|
|
4
5
|
proxyUrl?: string;
|
|
5
6
|
};
|
|
@@ -20,13 +21,17 @@ export declare class ConfigManager {
|
|
|
20
21
|
*/
|
|
21
22
|
private saveConfig;
|
|
22
23
|
/**
|
|
23
|
-
* Set authentication
|
|
24
|
+
* Set authentication tokens and email
|
|
24
25
|
*/
|
|
25
|
-
setAuth(token: string, email: string): void;
|
|
26
|
+
setAuth(token: string, email: string, refreshToken?: string): void;
|
|
26
27
|
/**
|
|
27
28
|
* Get authentication token
|
|
28
29
|
*/
|
|
29
30
|
getAuthToken(): string | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Get refresh token
|
|
33
|
+
*/
|
|
34
|
+
getRefreshToken(): string | undefined;
|
|
30
35
|
/**
|
|
31
36
|
* Get user email
|
|
32
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/services/ConfigManager.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAc;;IAiB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/services/ConfigManager.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAc;;IAiB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlE;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,SAAS,IAAI,IAAI;IAQjB;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM9B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,SAAS,IAAI,WAAW;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB;AAKD,eAAO,MAAM,gBAAgB,QAAO,aAKnC,CAAC"}
|
|
@@ -58,13 +58,14 @@ class ConfigManager {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
|
-
* Set authentication
|
|
61
|
+
* Set authentication tokens and email
|
|
62
62
|
*/
|
|
63
|
-
setAuth(token, email) {
|
|
63
|
+
setAuth(token, email, refreshToken) {
|
|
64
64
|
this.config.authToken = token;
|
|
65
|
+
this.config.refreshToken = refreshToken;
|
|
65
66
|
this.config.email = email;
|
|
66
67
|
this.saveConfig();
|
|
67
|
-
log.debug(`Saved auth
|
|
68
|
+
log.debug(`Saved auth tokens for ${email}`);
|
|
68
69
|
}
|
|
69
70
|
/**
|
|
70
71
|
* Get authentication token
|
|
@@ -72,6 +73,12 @@ class ConfigManager {
|
|
|
72
73
|
getAuthToken() {
|
|
73
74
|
return this.config.authToken;
|
|
74
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Get refresh token
|
|
78
|
+
*/
|
|
79
|
+
getRefreshToken() {
|
|
80
|
+
return this.config.refreshToken;
|
|
81
|
+
}
|
|
75
82
|
/**
|
|
76
83
|
* Get user email
|
|
77
84
|
*/
|
|
@@ -89,6 +96,7 @@ class ConfigManager {
|
|
|
89
96
|
*/
|
|
90
97
|
clearAuth() {
|
|
91
98
|
this.config.authToken = undefined;
|
|
99
|
+
this.config.refreshToken = undefined;
|
|
92
100
|
this.config.email = undefined;
|
|
93
101
|
this.saveConfig();
|
|
94
102
|
log.debug('Cleared authentication');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/services/ConfigManager.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,4CAA+C;AAC/C,2CAA4C;AAE5C,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/services/ConfigManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { WebSocket } from 'ws';
|
|
2
|
+
import { ElementContext } from '../types/change-types';
|
|
3
|
+
import type { Response } from 'express';
|
|
4
|
+
/**
|
|
5
|
+
* Message types sent from Rivet server to Electron plugin
|
|
6
|
+
*/
|
|
7
|
+
export type ServerMessage = {
|
|
8
|
+
type: 'enable_selection';
|
|
9
|
+
} | {
|
|
10
|
+
type: 'disable_selection';
|
|
11
|
+
} | {
|
|
12
|
+
type: 'files_modified';
|
|
13
|
+
files: string[];
|
|
14
|
+
} | {
|
|
15
|
+
type: 'ping';
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Message types received from Electron plugin
|
|
19
|
+
*/
|
|
20
|
+
export type ClientMessage = {
|
|
21
|
+
type: 'connected';
|
|
22
|
+
appInfo: {
|
|
23
|
+
name: string;
|
|
24
|
+
version: string;
|
|
25
|
+
framework?: string;
|
|
26
|
+
windowId?: string;
|
|
27
|
+
};
|
|
28
|
+
} | {
|
|
29
|
+
type: 'element_selected';
|
|
30
|
+
element: ElementContext;
|
|
31
|
+
} | {
|
|
32
|
+
type: 'element_hovered';
|
|
33
|
+
element: ElementContext;
|
|
34
|
+
} | {
|
|
35
|
+
type: 'pong';
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Handles WebSocket communication with Electron plugin
|
|
39
|
+
*/
|
|
40
|
+
export declare class ElectronBridgeService {
|
|
41
|
+
private connections;
|
|
42
|
+
private messageHandlers;
|
|
43
|
+
private pingInterval;
|
|
44
|
+
private lastSelectedElement;
|
|
45
|
+
private sseClient;
|
|
46
|
+
private targetWindowId;
|
|
47
|
+
constructor();
|
|
48
|
+
/**
|
|
49
|
+
* Attach WebSocket connection from Electron plugin
|
|
50
|
+
*/
|
|
51
|
+
attachWebSocket(ws: WebSocket): void;
|
|
52
|
+
/**
|
|
53
|
+
* Check if Electron app is connected
|
|
54
|
+
*/
|
|
55
|
+
getIsConnected(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Set which window should receive selection commands
|
|
58
|
+
*/
|
|
59
|
+
setTargetWindow(windowId: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get list of connected windows
|
|
62
|
+
*/
|
|
63
|
+
getConnectedWindows(): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Get the last selected element from Electron app
|
|
66
|
+
*/
|
|
67
|
+
getSelectedElement(): ElementContext | null;
|
|
68
|
+
/**
|
|
69
|
+
* Clear the selected element
|
|
70
|
+
*/
|
|
71
|
+
clearSelectedElement(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Send message to Electron plugin (sends to target window only)
|
|
74
|
+
*/
|
|
75
|
+
send(message: ServerMessage): void;
|
|
76
|
+
/**
|
|
77
|
+
* Register handler for specific message type
|
|
78
|
+
*/
|
|
79
|
+
on<T extends ClientMessage['type']>(type: T, handler: (message: Extract<ClientMessage, {
|
|
80
|
+
type: T;
|
|
81
|
+
}>) => void): void;
|
|
82
|
+
/**
|
|
83
|
+
* Remove handler for message type
|
|
84
|
+
*/
|
|
85
|
+
off<T extends ClientMessage['type']>(type: T, handler: (message: Extract<ClientMessage, {
|
|
86
|
+
type: T;
|
|
87
|
+
}>) => void): void;
|
|
88
|
+
/**
|
|
89
|
+
* Enable element selection mode in Electron app
|
|
90
|
+
*/
|
|
91
|
+
enableSelection(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Disable element selection mode in Electron app
|
|
94
|
+
*/
|
|
95
|
+
disableSelection(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Notify Electron app that files have been modified
|
|
98
|
+
*/
|
|
99
|
+
notifyFilesModified(files: string[]): void;
|
|
100
|
+
/**
|
|
101
|
+
* Register SSE client for element updates
|
|
102
|
+
*/
|
|
103
|
+
setSSEClient(res: Response): void;
|
|
104
|
+
/**
|
|
105
|
+
* Send SSE message to client
|
|
106
|
+
*/
|
|
107
|
+
private sendSSEMessage;
|
|
108
|
+
/**
|
|
109
|
+
* Handle incoming message from Electron
|
|
110
|
+
*/
|
|
111
|
+
private handleMessage;
|
|
112
|
+
/**
|
|
113
|
+
* Start heartbeat ping/pong
|
|
114
|
+
*/
|
|
115
|
+
private startHeartbeat;
|
|
116
|
+
/**
|
|
117
|
+
* Cleanup resources
|
|
118
|
+
*/
|
|
119
|
+
cleanup(): void;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=ElectronBridgeService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElectronBridgeService.d.ts","sourceRoot":"","sources":["../../src/services/ElectronBridgeService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,GACD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,WAAW,CACP;IACZ,OAAO,CAAC,eAAe,CAGT;IACd,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAAuB;;IAiB7C;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAmGpC;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYvC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAM/B;;OAEG;IACH,kBAAkB,IAAI,cAAc,GAAG,IAAI;IAI3C;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAI5B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAqClC;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,EAChC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI,GAC9D,IAAI;IASP;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,EACjC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI,GAC9D,IAAI;IAYP;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI1C;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAsBjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,IAAI,IAAI;CAkBhB"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ElectronBridgeService = void 0;
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
const log = (0, logger_1.createLogger)('ElectronBridgeService');
|
|
6
|
+
/**
|
|
7
|
+
* Handles WebSocket communication with Electron plugin
|
|
8
|
+
*/
|
|
9
|
+
class ElectronBridgeService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.connections = new Map();
|
|
12
|
+
this.messageHandlers = new Map();
|
|
13
|
+
this.pingInterval = null;
|
|
14
|
+
this.lastSelectedElement = null;
|
|
15
|
+
this.sseClient = null;
|
|
16
|
+
this.targetWindowId = null; // Which window to send selection commands to
|
|
17
|
+
log.info('ElectronBridgeService initialized');
|
|
18
|
+
// Set up handler for element selection
|
|
19
|
+
this.on('element_selected', (message) => {
|
|
20
|
+
this.lastSelectedElement = message.element;
|
|
21
|
+
log.info('Element selected in Electron app:', message.element.tagName);
|
|
22
|
+
// Send to SSE client if connected
|
|
23
|
+
if (this.sseClient) {
|
|
24
|
+
this.sendSSEMessage('element_selected', message.element);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Attach WebSocket connection from Electron plugin
|
|
30
|
+
*/
|
|
31
|
+
attachWebSocket(ws) {
|
|
32
|
+
const connectionId = Math.random().toString(36).substring(7);
|
|
33
|
+
log.debug(`Attaching Electron WebSocket connection [${connectionId}]`);
|
|
34
|
+
// Store connection temporarily with connectionId until we get windowId
|
|
35
|
+
this.connections.set(connectionId, { ws, windowId: null });
|
|
36
|
+
// Handle incoming messages
|
|
37
|
+
ws.on('message', (data) => {
|
|
38
|
+
try {
|
|
39
|
+
const message = JSON.parse(data.toString());
|
|
40
|
+
log.debug('Received message from Electron:', message.type);
|
|
41
|
+
// If this is a connection message, extract windowId and rekey the connection
|
|
42
|
+
if (message.type === 'connected' && message.appInfo.windowId) {
|
|
43
|
+
const windowId = message.appInfo.windowId;
|
|
44
|
+
log.info(`Window identified: ${windowId} (connection ${connectionId})`);
|
|
45
|
+
// Check if there's already a connection for this windowId
|
|
46
|
+
const existingEntry = Array.from(this.connections.entries()).find(([_, conn]) => conn.windowId === windowId);
|
|
47
|
+
if (existingEntry) {
|
|
48
|
+
const [existingConnId, existingConn] = existingEntry;
|
|
49
|
+
log.debug(`Replacing existing connection for window ${windowId} (old connection ${existingConnId})`);
|
|
50
|
+
// Close old connection
|
|
51
|
+
existingConn.ws.removeAllListeners();
|
|
52
|
+
setImmediate(() => {
|
|
53
|
+
try {
|
|
54
|
+
existingConn.ws.close();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
log.error('Error closing old connection:', error);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
this.connections.delete(existingConnId);
|
|
61
|
+
}
|
|
62
|
+
// Update this connection with windowId
|
|
63
|
+
this.connections.set(connectionId, { ws, windowId });
|
|
64
|
+
// Set as target only if no target exists yet
|
|
65
|
+
if (!this.targetWindowId) {
|
|
66
|
+
this.targetWindowId = windowId;
|
|
67
|
+
log.info(`Set initial target window to: ${windowId}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Detect user interaction and switch target window
|
|
71
|
+
if (message.type === 'element_selected' ||
|
|
72
|
+
message.type === 'element_hovered') {
|
|
73
|
+
// Find which window sent this message
|
|
74
|
+
const conn = this.connections.get(connectionId);
|
|
75
|
+
if (conn?.windowId && conn.windowId !== this.targetWindowId) {
|
|
76
|
+
this.targetWindowId = conn.windowId;
|
|
77
|
+
log.info(`Switched target window to ${conn.windowId} (user interaction detected)`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this.handleMessage(message);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
log.error('Failed to parse message from Electron:', error);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// Handle connection close
|
|
87
|
+
ws.on('close', () => {
|
|
88
|
+
const conn = this.connections.get(connectionId);
|
|
89
|
+
log.info(`Electron WebSocket connection closed [${connectionId}]${conn?.windowId ? ` (window: ${conn.windowId})` : ''}`);
|
|
90
|
+
this.connections.delete(connectionId);
|
|
91
|
+
// If the closed connection was the target, clear target
|
|
92
|
+
if (conn?.windowId === this.targetWindowId) {
|
|
93
|
+
this.targetWindowId = null;
|
|
94
|
+
log.info('Target window closed, cleared target');
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// Handle errors
|
|
98
|
+
ws.on('error', (error) => {
|
|
99
|
+
log.error('Electron WebSocket error:', error);
|
|
100
|
+
});
|
|
101
|
+
// Start ping/pong heartbeat if not already running
|
|
102
|
+
if (!this.pingInterval) {
|
|
103
|
+
this.startHeartbeat();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if Electron app is connected
|
|
108
|
+
*/
|
|
109
|
+
getIsConnected() {
|
|
110
|
+
return this.connections.size > 0;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Set which window should receive selection commands
|
|
114
|
+
*/
|
|
115
|
+
setTargetWindow(windowId) {
|
|
116
|
+
const hasWindow = Array.from(this.connections.values()).some((conn) => conn.windowId === windowId);
|
|
117
|
+
if (hasWindow) {
|
|
118
|
+
this.targetWindowId = windowId;
|
|
119
|
+
log.info(`Target window set to: ${windowId}`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
log.warn(`Cannot set target to ${windowId} - window not connected`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get list of connected windows
|
|
127
|
+
*/
|
|
128
|
+
getConnectedWindows() {
|
|
129
|
+
return Array.from(this.connections.values())
|
|
130
|
+
.map((conn) => conn.windowId)
|
|
131
|
+
.filter((id) => id !== null);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get the last selected element from Electron app
|
|
135
|
+
*/
|
|
136
|
+
getSelectedElement() {
|
|
137
|
+
return this.lastSelectedElement;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Clear the selected element
|
|
141
|
+
*/
|
|
142
|
+
clearSelectedElement() {
|
|
143
|
+
this.lastSelectedElement = null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Send message to Electron plugin (sends to target window only)
|
|
147
|
+
*/
|
|
148
|
+
send(message) {
|
|
149
|
+
if (!this.targetWindowId) {
|
|
150
|
+
log.warn('Cannot send message - No target window set');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Find the connection for the target window
|
|
154
|
+
const targetConn = Array.from(this.connections.values()).find((conn) => conn.windowId === this.targetWindowId);
|
|
155
|
+
if (!targetConn) {
|
|
156
|
+
log.warn(`Cannot send message - Target window ${this.targetWindowId} not connected`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const ws = targetConn.ws;
|
|
160
|
+
// Check actual WebSocket readyState
|
|
161
|
+
// 0 = CONNECTING, 1 = OPEN, 2 = CLOSING, 3 = CLOSED
|
|
162
|
+
if (ws.readyState !== 1) {
|
|
163
|
+
log.warn(`Cannot send message - WebSocket not ready (state: ${ws.readyState}, message: ${message.type})`);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
ws.send(JSON.stringify(message));
|
|
168
|
+
log.debug(`Sent message to window ${this.targetWindowId}:`, message.type);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
log.error('Failed to send message to Electron:', error);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Register handler for specific message type
|
|
176
|
+
*/
|
|
177
|
+
on(type, handler) {
|
|
178
|
+
if (!this.messageHandlers.has(type)) {
|
|
179
|
+
this.messageHandlers.set(type, []);
|
|
180
|
+
}
|
|
181
|
+
this.messageHandlers
|
|
182
|
+
.get(type)
|
|
183
|
+
.push(handler);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Remove handler for message type
|
|
187
|
+
*/
|
|
188
|
+
off(type, handler) {
|
|
189
|
+
const handlers = this.messageHandlers.get(type);
|
|
190
|
+
if (handlers) {
|
|
191
|
+
const index = handlers.indexOf(handler);
|
|
192
|
+
if (index !== -1) {
|
|
193
|
+
handlers.splice(index, 1);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Enable element selection mode in Electron app
|
|
199
|
+
*/
|
|
200
|
+
enableSelection() {
|
|
201
|
+
this.send({ type: 'enable_selection' });
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Disable element selection mode in Electron app
|
|
205
|
+
*/
|
|
206
|
+
disableSelection() {
|
|
207
|
+
this.send({ type: 'disable_selection' });
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Notify Electron app that files have been modified
|
|
211
|
+
*/
|
|
212
|
+
notifyFilesModified(files) {
|
|
213
|
+
this.send({ type: 'files_modified', files });
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Register SSE client for element updates
|
|
217
|
+
*/
|
|
218
|
+
setSSEClient(res) {
|
|
219
|
+
log.info('Setting SSE client for element updates');
|
|
220
|
+
// Close previous client if exists
|
|
221
|
+
if (this.sseClient) {
|
|
222
|
+
this.sseClient.end();
|
|
223
|
+
}
|
|
224
|
+
this.sseClient = res;
|
|
225
|
+
// Send current element immediately on connection
|
|
226
|
+
if (this.lastSelectedElement) {
|
|
227
|
+
this.sendSSEMessage('element_selected', this.lastSelectedElement);
|
|
228
|
+
}
|
|
229
|
+
// Clear on close
|
|
230
|
+
res.on('close', () => {
|
|
231
|
+
log.info('SSE client disconnected');
|
|
232
|
+
this.sseClient = null;
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Send SSE message to client
|
|
237
|
+
*/
|
|
238
|
+
sendSSEMessage(event, data) {
|
|
239
|
+
if (!this.sseClient)
|
|
240
|
+
return;
|
|
241
|
+
try {
|
|
242
|
+
this.sseClient.write(`event: ${event}\n`);
|
|
243
|
+
this.sseClient.write(`data: ${JSON.stringify(data)}\n\n`);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
log.error('Failed to send SSE message:', error);
|
|
247
|
+
this.sseClient = null;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Handle incoming message from Electron
|
|
252
|
+
*/
|
|
253
|
+
handleMessage(message) {
|
|
254
|
+
const handlers = this.messageHandlers.get(message.type);
|
|
255
|
+
if (handlers) {
|
|
256
|
+
handlers.forEach((handler) => handler(message));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Start heartbeat ping/pong
|
|
261
|
+
*/
|
|
262
|
+
startHeartbeat() {
|
|
263
|
+
this.pingInterval = setInterval(() => {
|
|
264
|
+
// Ping all connected windows
|
|
265
|
+
for (const [connId, conn] of this.connections.entries()) {
|
|
266
|
+
if (conn.ws.readyState === 1) {
|
|
267
|
+
try {
|
|
268
|
+
conn.ws.send(JSON.stringify({ type: 'ping' }));
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
log.error(`Failed to ping connection ${connId}:`, error);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}, 30000); // Ping every 30 seconds
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Cleanup resources
|
|
279
|
+
*/
|
|
280
|
+
cleanup() {
|
|
281
|
+
if (this.pingInterval) {
|
|
282
|
+
clearInterval(this.pingInterval);
|
|
283
|
+
this.pingInterval = null;
|
|
284
|
+
}
|
|
285
|
+
for (const [connId, conn] of this.connections.entries()) {
|
|
286
|
+
try {
|
|
287
|
+
conn.ws.close();
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
log.error(`Error closing connection ${connId}:`, error);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
this.connections.clear();
|
|
294
|
+
this.messageHandlers.clear();
|
|
295
|
+
this.targetWindowId = null;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
exports.ElectronBridgeService = ElectronBridgeService;
|
|
299
|
+
//# sourceMappingURL=ElectronBridgeService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElectronBridgeService.js","sourceRoot":"","sources":["../../src/services/ElectronBridgeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,10 @@ export declare class LLMService {
|
|
|
48
48
|
private fileModService;
|
|
49
49
|
private configManager;
|
|
50
50
|
constructor(proxyUrl?: string);
|
|
51
|
+
/**
|
|
52
|
+
* Refresh access token using refresh token
|
|
53
|
+
*/
|
|
54
|
+
private refreshAccessToken;
|
|
51
55
|
private makeProxyRequest;
|
|
52
56
|
modifyMultipleElements(request: MultiElementLLMRequest): Promise<AppliedModificationResult>;
|
|
53
57
|
private groupElementsByFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMService.d.ts","sourceRoot":"","sources":["../../src/services/LLMService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAyB7C,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,KAAK,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,eAAe,CAAC;CAC/B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAA8B;IACzC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAsB;gBAE/B,QAAQ,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"LLMService.d.ts","sourceRoot":"","sources":["../../src/services/LLMService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAyB7C,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,KAAK,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,eAAe,CAAC;CAC/B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAA8B;IACzC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAsB;gBAE/B,QAAQ,CAAC,EAAE,MAAM;IAM7B;;OAEG;YACW,kBAAkB;YAsClB,gBAAgB;IA2ExB,sBAAsB,CAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,yBAAyB,CAAC;IA2CrC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,oBAAoB;YAyDd,2BAA2B;CAsB1C"}
|
|
@@ -27,7 +27,44 @@ class LLMService {
|
|
|
27
27
|
this.fileModService = new FileModificationService_1.FileModificationService();
|
|
28
28
|
this.log.info(`LLMService initialized with proxy URL: ${this.proxyUrl}`);
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Refresh access token using refresh token
|
|
32
|
+
*/
|
|
33
|
+
async refreshAccessToken() {
|
|
34
|
+
const refreshToken = this.configManager.getRefreshToken();
|
|
35
|
+
if (!refreshToken) {
|
|
36
|
+
this.log.error('No refresh token available');
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
this.log.info('Refreshing access token...');
|
|
41
|
+
const response = await fetch(`${this.proxyUrl}/api/auth/refresh`, {
|
|
42
|
+
method: 'POST',
|
|
43
|
+
headers: {
|
|
44
|
+
'Content-Type': 'application/json',
|
|
45
|
+
},
|
|
46
|
+
body: JSON.stringify({ refreshToken }),
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
this.log.error('Token refresh failed');
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const result = await response.json();
|
|
53
|
+
if (result.success && result.token) {
|
|
54
|
+
// Update stored tokens
|
|
55
|
+
const email = this.configManager.getEmail() || '';
|
|
56
|
+
this.configManager.setAuth(result.token, email, result.refreshToken);
|
|
57
|
+
this.log.info('Access token refreshed successfully');
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.log.error('Error refreshing token:', error);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async makeProxyRequest(prompt, temperature, retryCount = 0) {
|
|
31
68
|
const proxyRequest = {
|
|
32
69
|
provider: 'anthropic',
|
|
33
70
|
model: ANTHROPIC_MODEL,
|
|
@@ -53,6 +90,16 @@ class LLMService {
|
|
|
53
90
|
},
|
|
54
91
|
body: JSON.stringify(proxyRequest),
|
|
55
92
|
});
|
|
93
|
+
// If 401 and we haven't retried yet, try to refresh token
|
|
94
|
+
if (response.status === 401 && retryCount === 0) {
|
|
95
|
+
this.log.warn('Got 401, attempting to refresh token...');
|
|
96
|
+
const refreshed = await this.refreshAccessToken();
|
|
97
|
+
if (refreshed) {
|
|
98
|
+
// Retry the request with new token
|
|
99
|
+
return this.makeProxyRequest(prompt, temperature, retryCount + 1);
|
|
100
|
+
}
|
|
101
|
+
throw new Error('Authentication expired. Please run `rivet logout` and `rivet login` to re-authenticate.');
|
|
102
|
+
}
|
|
56
103
|
if (!response.ok) {
|
|
57
104
|
const errorData = await response
|
|
58
105
|
.json()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMService.js","sourceRoot":"","sources":["../../src/services/LLMService.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4CAA+C;AAG/C,uEAAoE;AACpE,mDAAmD;AACnD,2CAA4C;AAE5C,MAAM,eAAe,GAAG,4BAA4B,CAAC;AACrD,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,0CAA0C;AAC1C,MAAM,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,aAAa,EAAE,OAAC;SACb,KAAK,CACJ,OAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACvE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACvE,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACrE,CAAC,CACH;SACA,QAAQ,CACP,0EAA0E,CAC3E;CACJ,CAAC,CAAC;AAqDH,MAAa,UAAU;IAMrB,YAAY,QAAiB;QALrB,QAAG,GAAG,IAAA,qBAAY,EAAC,YAAY,CAAC,CAAC;QAGjC,kBAAa,GAAG,IAAA,gCAAgB,GAAE,CAAC;QAGzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,iBAAS,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,iDAAuB,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0CAA0C,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,MAAc,EACd,WAAoB;
|
|
1
|
+
{"version":3,"file":"LLMService.js","sourceRoot":"","sources":["../../src/services/LLMService.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,5 +28,10 @@ export declare class LocalGitService {
|
|
|
28
28
|
private parseRepoUrl;
|
|
29
29
|
pushBranch(projectPath: string, branchName: string): Promise<void>;
|
|
30
30
|
generatePullRequestUrl(projectPath: string, branchName: string, defaultBranch?: string): Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Undo the last commit by resetting HEAD to the previous commit.
|
|
33
|
+
* This is a destructive operation that removes the last commit from history.
|
|
34
|
+
*/
|
|
35
|
+
undoLastCommit(projectPath: string): Promise<void>;
|
|
31
36
|
}
|
|
32
37
|
//# sourceMappingURL=LocalGitService.d.ts.map
|