Created a vs code extension with Claude

This commit is contained in:
2026-04-17 13:35:57 +02:00
parent 923cfd4152
commit 3e1f0f3ca9
12 changed files with 1217 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
import * as vscode from 'vscode';
import { ADClient } from './adClient';
export class StatusBarManager {
private restartADItem: vscode.StatusBarItem;
private restartHAItem: vscode.StatusBarItem;
private productionModeItem: vscode.StatusBarItem;
private errorItem: vscode.StatusBarItem;
private contextualItem: vscode.StatusBarItem;
constructor(private adClient: ADClient) {
// Reload AppDaemon apps
this.restartADItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
this.restartADItem.command = 'appdaemon.restartAD';
this.restartADItem.text = '$(refresh) AD Apps';
this.restartADItem.tooltip = 'Reload all AppDaemon Apps';
this.restartADItem.show();
// Restart Home Assistant
this.restartHAItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 99);
this.restartHAItem.command = 'appdaemon.restartHA';
this.restartHAItem.text = '$(home) HA';
this.restartHAItem.tooltip = 'Restart Home Assistant';
this.restartHAItem.show();
// Production mode toggle
this.productionModeItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 98);
this.productionModeItem.command = 'appdaemon.toggleProductionMode';
this.updateProductionModeDisplay();
this.productionModeItem.show();
// Error log shortcut
this.errorItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 97);
this.errorItem.command = 'appdaemon.showErrors';
this.errorItem.text = '$(check) AD Errors';
this.errorItem.tooltip = 'Show AppDaemon Error Log';
this.errorItem.show();
// Contextual per-file restart button (hidden by default)
this.contextualItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 101);
this.contextualItem.command = 'appdaemon.restartCurrentFileApps';
// React to production mode changes
adClient.onProductionModeChanged(() => this.updateProductionModeDisplay());
}
/**
* Update (or hide) the contextual button based on apps found in the current file.
* @param appNames App names parsed from the active YAML, or empty to hide.
*/
updateContextualApps(appNames: string[]) {
if (appNames.length === 0) {
this.contextualItem.hide();
return;
}
const label = appNames.length <= 2
? appNames.join(', ')
: `${appNames.length} apps`;
this.contextualItem.text = `$(debug-restart) ${label}`;
this.contextualItem.tooltip = `Restart: ${appNames.join(', ')}`;
this.contextualItem.show();
}
updateProductionModeDisplay() {
const isProduction = this.adClient.isProductionMode();
if (isProduction) {
this.productionModeItem.text = '$(eye-closed) Prod ON';
this.productionModeItem.tooltip = 'Production Mode: ON — click to disable';
this.productionModeItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground');
} else {
this.productionModeItem.text = '$(eye) Prod OFF';
this.productionModeItem.tooltip = 'Production Mode: OFF — click to enable';
this.productionModeItem.backgroundColor = undefined;
}
}
setErrorCount(count: number) {
if (count > 0) {
this.errorItem.text = `$(warning) AD Errors (${count})`;
this.errorItem.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground');
this.errorItem.tooltip = `${count} error(s) in AppDaemon log — click to view`;
} else {
this.errorItem.text = '$(check) AD Errors';
this.errorItem.backgroundColor = undefined;
this.errorItem.tooltip = 'No AppDaemon errors — click to view log';
}
}
dispose() {
this.restartADItem.dispose();
this.restartHAItem.dispose();
this.productionModeItem.dispose();
this.errorItem.dispose();
this.contextualItem.dispose();
}
}