Skip to content
Open
Show file tree
Hide file tree
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
58 changes: 51 additions & 7 deletions src/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ export class Container {
if (!process.env.ROVODEV_BBY) {
// refresh Rovo Dev when auth sites change
this._siteManager.onDidSitesAvailableChange(async () => {
console.log('[RovoDev Debug] Sites available changed, triggering refreshRovoDev');
await this.updateFeatureFlagTenantId();
await this.refreshRovoDev(context);
});
Expand All @@ -233,6 +234,9 @@ export class Container {
context.subscriptions.push(
configuration.onDidChange(async (e) => {
if (configuration.changed(e, 'jira.enabled') || configuration.changed(e, 'rovodev.enabled')) {
console.log(
'[RovoDev Debug] Config changed (jira.enabled or rovodev.enabled), triggering refreshRovoDev',
);
await this.refreshRovoDev(context);
}
}, this),
Expand All @@ -250,7 +254,9 @@ export class Container {

this._onboardingProvider = new OnboardingProvider();

this.refreshRovoDev(context);
console.log('[RovoDev Debug] Container initialization: calling refreshRovoDev');
await this.refreshRovoDev(context);
console.log('[RovoDev Debug] Container initialization: complete');
}

private static async initializeFeatureFlagClient() {
Expand Down Expand Up @@ -301,17 +307,42 @@ export class Container {
private static async refreshRovoDev(context: ExtensionContext) {
const shouldEnableRovoDev = (this.config.rovodev.enabled && this.config.jira.enabled) || this.isBoysenberryMode;

console.log('[RovoDev Debug] refreshRovoDev called:', {
shouldEnableRovoDev,
'config.rovodev.enabled': this.config.rovodev.enabled,
'config.jira.enabled': this.config.jira.enabled,
isBoysenberryMode: this.isBoysenberryMode,
currentlyEnabled: this._isRovoDevEnabled,
hasDisposable: !!this._rovodevDisposable,
});

if (shouldEnableRovoDev) {
console.log('[RovoDev Debug] Calling enableRovoDev');
await this.enableRovoDev(context);
} else {
console.log('[RovoDev Debug] Calling disableRovoDev');
await this.disableRovoDev();
}
}

private static async enableRovoDev(context: ExtensionContext) {
console.log('[RovoDev Debug] enableRovoDev: START');

this._isRovoDevEnabled = true;
console.log('[RovoDev Debug] enableRovoDev: Set _isRovoDevEnabled = true');

// Always set context key to ensure it's restored if lost (e.g., after reload or race conditions)
await setCommandContext(CommandContext.RovoDevEnabled, true);
console.log('[RovoDev Debug] enableRovoDev: Set VS Code context RovoDevEnabled = true');

// Always refresh help explorer to ensure UI is updated
if (!this.isBoysenberryMode) {
console.log('[RovoDev Debug] enableRovoDev: Refreshing Help Explorer');
this._helpExplorer.refresh();
}

if (this._rovodevDisposable) {
console.log('[RovoDev Debug] enableRovoDev: Disposable already exists, refreshing credentials');
if (this.isBoysenberryMode) {
return;
}
Expand All @@ -324,6 +355,7 @@ export class Container {
return;
}
} else {
console.log('[RovoDev Debug] enableRovoDev: Creating new disposable');
try {
// don't add anything async before initializing _rovodevDisposable
this._rovodevDisposable = vscode.Disposable.from(
Expand All @@ -332,23 +364,20 @@ export class Container {
}),
(this._rovodevWebviewProvider = new RovoDevWebviewProvider(context, context.extensionPath)),
);
console.log('[RovoDev Debug] enableRovoDev: Disposable created successfully');

context.subscriptions.push(this._rovodevDisposable);

// this enables the Rovo Dev activity bar
await setCommandContext(CommandContext.RovoDevEnabled, true);

// only in Boysenberry, we auto-focus the Rovo Dev view
if (this.isBoysenberryMode) {
await vscode.commands.executeCommand('atlascode.views.rovoDev.webView.focus');
} else {
// Update help explorer to show Rovo Dev content
this._helpExplorer.refresh();

// Start the Rovo Dev process
console.log('[RovoDev Debug] enableRovoDev: Initializing Rovo Dev process');
await RovoDevProcessManager.initializeRovoDev(context);
}
} catch (error) {
console.error('[RovoDev Debug] enableRovoDev: ERROR creating disposable:', error);
RovoDevLogger.error(error, 'Enabling Rovo Dev');
}
}
Expand All @@ -360,32 +389,45 @@ export class Container {
RovoDevLogger.error(error, 'Refreshing Jira issue views');
return;
}

console.log('[RovoDev Debug] enableRovoDev: COMPLETE');
}

private static async disableRovoDev() {
console.log('[RovoDev Debug] disableRovoDev: START');

if (this.isBoysenberryMode) {
console.log('[RovoDev Debug] disableRovoDev: Skipping (Boysenberry mode)');
RovoDevLogger.error(new Error('disableRovoDev called in Boysenberry mode'));
return;
}

this._isRovoDevEnabled = false;
console.log('[RovoDev Debug] disableRovoDev: Set _isRovoDevEnabled = false');

if (!this._rovodevDisposable) {
console.log('[RovoDev Debug] disableRovoDev: Already disabled (no disposable)');
// Already disabled
return;
}

// Update help explorer to hide Rovo Dev content
console.log('[RovoDev Debug] disableRovoDev: Refreshing Help Explorer');
this._helpExplorer.refresh();

try {
// don't add anything async before disposing _rovodevDisposable
console.log('[RovoDev Debug] disableRovoDev: Disposing disposable');
this._rovodevDisposable.dispose();
this._rovodevDisposable = undefined;

await setCommandContext(CommandContext.RovoDevEnabled, false);
console.log('[RovoDev Debug] disableRovoDev: Set VS Code context RovoDevEnabled = false');

await RovoDevProcessManager.deactivateRovoDevProcessManager();
console.log('[RovoDev Debug] disableRovoDev: Deactivated process manager');
} catch (error) {
console.error('[RovoDev Debug] disableRovoDev: ERROR:', error);
RovoDevLogger.error(error, 'Disabling Rovo Dev');
}

Expand All @@ -396,6 +438,8 @@ export class Container {
RovoDevLogger.error(error, 'Refreshing Jira issue views');
return;
}

console.log('[RovoDev Debug] disableRovoDev: COMPLETE');
}

private static pushFeatureUpdatesToUI() {
Expand Down
1 change: 1 addition & 0 deletions src/views/HelpExplorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export class HelpExplorer extends Explorer implements Disposable {
}

refresh() {
console.log('[RovoDev Debug] HelpExplorer.refresh() called - rebuilding tree view');
this.newTreeView();
}
}
11 changes: 11 additions & 0 deletions src/views/helpDataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ export class HelpDataProvider extends BaseTreeDataProvider {
Experiments.AtlascodeNewSettingsExperiment,
);

const isRovoDevEnabled = Container.isRovoDevEnabled;
const hasJiraSites = Container.siteManager.productHasAtLeastOneSite(ProductJira);
const shouldShowRovoDevChat = isRovoDevEnabled && hasJiraSites;

console.log('[RovoDev Debug] HelpDataProvider.getChildren called:', {
isRovoDevEnabled,
hasJiraSites,
shouldShowRovoDevChat,
jiraSitesCount: Container.siteManager.getSitesAvailable(ProductJira).length,
});

if (renderExplorePanel) {
return [
new LinkNode(
Expand Down
Loading