Skip to content

Commit ce0464a

Browse files
authored
feat(auth): replace sessionId with generateNewSessionClientId for cross-window communication (#553)
1 parent a4e7ad8 commit ce0464a

File tree

6 files changed

+49
-37
lines changed

6 files changed

+49
-37
lines changed

src/core/costrict/activate.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {
3838
startIPCServer,
3939
stopIPCServer,
4040
} from "./auth/ipc"
41-
import { getClientId } from "../../utils/getClientId"
41+
import { generateNewSessionClientId, getClientId } from "../../utils/getClientId"
4242
import ZgsmCodebaseIndexManager, { zgsmCodebaseIndexManager } from "./codebase-index"
4343
import { workspaceEventMonitor } from "./codebase-index/workspace-event-monitor"
4444
import { initGitCheckoutDetector } from "./codebase-index/git-checkout-detector"
@@ -99,12 +99,12 @@ export async function activate(
9999
provider.log(`new token from other window: ${tokens.access_token}`)
100100
}),
101101
onZgsmLogout((sessionId: string) => {
102-
if (vscode.env.sessionId === sessionId) return
102+
if (generateNewSessionClientId() === sessionId) return
103103
zgsmAuthService.logout(true)
104104
provider.log(`logout from other window`)
105105
}),
106106
onCloseWindow((sessionId: string) => {
107-
if (vscode.env.sessionId === sessionId) return
107+
if (generateNewSessionClientId() === sessionId) return
108108
vscode.commands.executeCommand("workbench.action.closeWindow")
109109
}),
110110
)

src/core/costrict/auth/authService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type { ClineProvider } from "../../webview/ClineProvider"
88
import { getParams, retryWrapper } from "../../../utils/zgsmUtils"
99
import { joinUrl } from "../../../utils/joinUrl"
1010
import { ZgsmAuthStatus, ZgsmAuthTokens, ZgsmLoginState, LoginTokenResponse } from "./types"
11-
import { getClientId } from "../../../utils/getClientId"
11+
import { generateNewSessionClientId, getClientId } from "../../../utils/getClientId"
1212
import { sendZgsmLogout } from "./ipc/client"
1313
import { CompletionStatusBar } from "../completion"
1414
import { t } from "../../../i18n"
@@ -332,7 +332,7 @@ export class ZgsmAuthService {
332332
// Clear stored login information
333333
await ZgsmAuthStorage.getInstance().clearAllLoginState()
334334
if (!auto) {
335-
sendZgsmLogout(vscode.env.sessionId)
335+
sendZgsmLogout(generateNewSessionClientId())
336336
}
337337
}
338338

src/core/costrict/base/common/util.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,17 +107,6 @@ export function formatTimeDifference(differenceInMilliseconds: number): string {
107107
return result.trim() || "0s"
108108
}
109109

110-
/**
111-
* Generate a UUID
112-
*/
113-
export function getUuid() {
114-
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
115-
const r = (Math.random() * 16) | 0,
116-
v = c === "x" ? r : (r & 0x3) | 0x8
117-
return v.toString(16)
118-
})
119-
}
120-
121110
/**
122111
* Return a random string of specified length
123112
*/

src/core/costrict/workflow/CoworkflowFileWatcher.ts

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -386,11 +386,6 @@ export class CoworkflowFileWatcher implements ICoworkflowFileWatcher {
386386
}
387387
}
388388

389-
private getDocumentTypeFromUri(uri: vscode.Uri): CoworkflowDocumentType | undefined {
390-
const documentInfo = this.getDocumentInfoFromUri(uri)
391-
return documentInfo?.type
392-
}
393-
394389
/**
395390
* Initialize file contexts for existing files that match the pattern
396391
*/
@@ -414,15 +409,15 @@ export class CoworkflowFileWatcher implements ICoworkflowFileWatcher {
414409
isActive: true,
415410
})
416411

417-
this.errorHandler.logError(
418-
this.errorHandler.createError(
419-
"file_system_error",
420-
"info",
421-
`Initialized file context for ${documentInfo.relativePath}`,
422-
undefined,
423-
fileUri,
424-
),
425-
)
412+
// this.errorHandler.logError(
413+
// this.errorHandler.createError(
414+
// "file_system_error",
415+
// "info",
416+
// `Initialized file context for ${documentInfo.relativePath}`,
417+
// undefined,
418+
// fileUri,
419+
// ),
420+
// )
426421
}
427422
} catch (error) {
428423
this.errorHandler.logError(

src/core/webview/ClineProvider.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,12 @@ import { Task } from "../task/Task"
9292
import { getSystemPromptFilePath } from "../prompts/sections/custom-system-prompt"
9393

9494
import { webviewMessageHandler } from "./webviewMessageHandler"
95-
import type { ClineMessage } from "@roo-code/types"
96-
import { readApiMessages, saveApiMessages, saveTaskMessages } from "../task-persistence"
95+
// import type { ClineMessage } from "@roo-code/types"
96+
// import { readApiMessages, saveApiMessages, saveTaskMessages } from "../task-persistence"
9797
import { getNonce } from "./getNonce"
9898
import { getUri } from "./getUri"
9999
import { ZgsmAuthCommands } from "../costrict/auth"
100-
import { getClientId } from "../../utils/getClientId"
100+
import { generateNewSessionClientId, getClientId } from "../../utils/getClientId"
101101
import { defaultCodebaseIndexEnabled } from "../../services/code-index/constants"
102102
import { CodeReviewService, ReviewTargetType } from "../costrict/code-review"
103103
import { defaultLang } from "../../utils/language"
@@ -2372,7 +2372,7 @@ export class ClineProvider
23722372
}
23732373
}
23742374

2375-
sendZgsmCloseWindow(vscode.env.sessionId)
2375+
sendZgsmCloseWindow(generateNewSessionClientId())
23762376
await delay(1000)
23772377
await vscode.commands.executeCommand("workbench.action.closeWindow")
23782378
} catch (error) {
@@ -2495,7 +2495,7 @@ export class ClineProvider
24952495
await BridgeOrchestrator.connectOrDisconnect(userInfo, enabled, {
24962496
...config,
24972497
provider: this,
2498-
sessionId: vscode.env.sessionId,
2498+
sessionId: generateNewSessionClientId(),
24992499
isCloudAgent: CloudService.instance.isCloudAgent,
25002500
})
25012501

src/utils/getClientId.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,25 @@ const getZgsmDirPath = (): string => {
2121

2222
// Generates new client ID
2323
const generateNewClientId = (): string => {
24-
// Use vscode machineId as base, append random UUID prefix if remote
25-
return `${vscode?.env?.machineId}${vscode?.env?.remoteName ? `.${crypto.randomUUID().slice(0, 8)}` : ""}`
24+
let machineId = vscode?.env?.machineId
25+
if (!vscode?.env?.machineId || ["intellij-machine", "development-machine"].includes(vscode?.env?.machineId)) {
26+
machineId = getUuid()
27+
}
28+
return `${machineId}${vscode?.env?.remoteName ? `.${crypto.randomUUID().slice(0, 8)}` : ""}`
29+
}
30+
31+
let sessionId = ""
32+
// Generates new sessionId
33+
export const generateNewSessionClientId = (): string => {
34+
if (sessionId) {
35+
return sessionId
36+
}
37+
sessionId = vscode?.env?.sessionId
38+
if (!sessionId || ["intellij-session", "development-session"].includes(sessionId)) {
39+
sessionId = getUuid()
40+
}
41+
42+
return `${sessionId}${vscode?.env?.remoteName ? `.${crypto.randomUUID().slice(0, 8)}` : ""}`
2643
}
2744

2845
// Exported function to get client ID
@@ -66,3 +83,14 @@ export const getClientId = (): string => {
6683
return fallbackId
6784
}
6885
}
86+
87+
/**
88+
* Generate a UUID
89+
*/
90+
export function getUuid() {
91+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
92+
const r = (Math.random() * 16) | 0,
93+
v = c === "x" ? r : (r & 0x3) | 0x8
94+
return v.toString(16)
95+
})
96+
}

0 commit comments

Comments
 (0)