Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 45 additions & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,44 @@ export async function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(outputChannel)
outputChannel.appendLine(`${Package.name} extension activated - ${JSON.stringify(Package)}`)

// Check for potential extension conflicts
const claudeCodeExtension = vscode.extensions.getExtension("anthropic.claude-code")
if (claudeCodeExtension) {
outputChannel.appendLine(`[Warning] Claude Code extension detected. Implementing conflict prevention measures.`)

// Add a small delay to prevent race conditions during activation
await new Promise((resolve) => setTimeout(resolve, 100))
}

// Wrap the activation process with a timeout to prevent hanging
const ACTIVATION_TIMEOUT = 30000 // 30 seconds
const activationPromise = performActivation(context, outputChannel)

try {
await Promise.race([
activationPromise,
new Promise((_, reject) => setTimeout(() => reject(new Error("Activation timeout")), ACTIVATION_TIMEOUT)),
])
} catch (error) {
outputChannel.appendLine(`[Error] Extension activation failed: ${error}`)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider logging detailed error information (e.g., using error.message) to improve debuggability.

Suggested change
outputChannel.appendLine(`[Error] Extension activation failed: ${error}`)
outputChannel.appendLine(`[Error] Extension activation failed: ${error instanceof Error ? error.message : error}`)

// Show a user-friendly error message
vscode.window
.showErrorMessage(
`Roo Code activation failed. ${claudeCodeExtension ? "This may be due to a conflict with Claude Code extension. " : ""}Please try reloading the window.`,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User-facing error text here should use i18n translation functions instead of hardcoded strings for consistency.

Suggested change
`Roo Code activation failed. ${claudeCodeExtension ? "This may be due to a conflict with Claude Code extension. " : ""}Please try reloading the window.`,
t(`Roo Code activation failed. ${claudeCodeExtension ? "This may be due to a conflict with Claude Code extension. " : ""}Please try reloading the window.`),

This comment was generated because it violated a code review rule: irule_C0ez7Rji6ANcGkkX.

"Reload Window",
)
.then((selection) => {
if (selection === "Reload Window") {
vscode.commands.executeCommand("workbench.action.reloadWindow")
}
})
throw error
}

return activationPromise
}

async function performActivation(context: vscode.ExtensionContext, outputChannel: vscode.OutputChannel) {
// Migrate old settings to new
await migrateSettings(context, outputChannel)

Expand Down Expand Up @@ -180,7 +218,13 @@ export async function activate(context: vscode.ExtensionContext) {
registerTerminalActions(context)

// Allows other extensions to activate once Roo is ready.
vscode.commands.executeCommand(`${Package.name}.activationCompleted`)
// Use a try-catch to prevent activation completion from blocking
try {
await vscode.commands.executeCommand(`${Package.name}.activationCompleted`)
} catch (error) {
outputChannel.appendLine(`[Warning] Failed to execute activationCompleted command: ${error}`)
// Continue activation even if this fails
}

// Implements the `RooCodeAPI` interface.
const socketPath = process.env.ROO_CODE_IPC_SOCKET_PATH
Expand Down