const getPluginsScript = () => ` // ─── Plugins ─── var topPlugins = (window.__topPlugins || []); var pluginsDisplayedList = null; function formatPluginName(name) { return name.replace(/-/g, ' ').replace(/\\b\\w/g, function(c) { return c.toUpperCase(); }); } function showPluginsModal() { document.getElementById('pluginsModal').style.display = 'flex'; loadInstalledPlugins(); renderAvailablePlugins(topPlugins); } function hidePluginsModal() { document.getElementById('pluginsModal').style.display = 'none'; } function loadInstalledPlugins() { vscode.postMessage({ type: 'loadPlugins' }); } function displayPlugins(data) { var pluginsList = document.getElementById('pluginsList'); pluginsList.innerHTML = ''; var enabled = data.enabled || {}; var keys = Object.keys(enabled); if (keys.length === 0) { pluginsList.innerHTML = '
' + '
' + '
No plugins enabled
' + '
'; return; } keys.forEach(function(installId) { var isEnabled = enabled[installId]; var name = installId.replace(/@.*$/, ''); var displayName = formatPluginName(name); var plugin = topPlugins.find(function(p) { return p.installId === installId; }); var desc = plugin ? plugin.description : ''; var verified = plugin ? plugin.verified : false; var item = document.createElement('div'); item.className = 'mcp-server-item'; var verifiedHtml = verified ? '' : ''; var statusHtml = isEnabled ? 'enabled' : 'disabled'; item.innerHTML = '
' + '
' + escapeHtml(displayName) + verifiedHtml + ' ' + statusHtml + '
' + (desc ? '
' + escapeHtml(desc) + '
' : '') + '
' + '
' + '' + '
'; pluginsList.appendChild(item); }); } function renderAvailablePlugins(plugins) { var grid = document.getElementById('pluginsGrid'); if (!grid) return; if (!plugins || plugins.length === 0) { grid.innerHTML = '
No plugins found.
'; return; } var html = ''; plugins.forEach(function(plugin) { var name = plugin.name || 'Unknown'; var displayName = formatPluginName(name); var desc = escapeHtml(plugin.description || 'No description'); var verified = plugin.verified; var safeId = escapeHtml(plugin.installId || name).replace(/'/g, '''); html += '
' + '
' + '
' + escapeHtml(displayName.charAt(0).toUpperCase()) + '
' + '
' + '
' + escapeHtml(displayName) + '
' + '
' + '
' + '
' + desc + '
' + '
'; }); grid.innerHTML = html; } function searchPlugins(query) { if (!query) { renderAvailablePlugins(topPlugins); return; } var q = query.toLowerCase(); var filtered = topPlugins.filter(function(p) { return (p.name && p.name.toLowerCase().indexOf(q) >= 0) || (p.description && p.description.toLowerCase().indexOf(q) >= 0); }); renderAvailablePlugins(filtered); } function showPluginDetail(installId) { var plugin = topPlugins.find(function(p) { return p.installId === installId; }); if (!plugin) return; var name = plugin.name || 'Unknown'; var displayName = formatPluginName(name); var desc = plugin.description || 'No description available.'; var verified = plugin.verified; var verifiedHtml = verified ? '✓ Anthropic verified' : ''; var grid = document.getElementById('pluginsGrid'); pluginsDisplayedList = grid.innerHTML; grid.innerHTML = '
' + '' + '
' + '
' + escapeHtml(displayName.charAt(0).toUpperCase()) + '
' + '
' + '
' + escapeHtml(displayName) + '
' + '
' + verifiedHtml + '
' + '
' + '' + '
' + '
' + escapeHtml(desc) + '
' + '
View on GitHub
' + '
Adds ' + escapeHtml(installId) + ' to .claude/settings.json
' + '
'; } function backToPluginsList() { var grid = document.getElementById('pluginsGrid'); if (pluginsDisplayedList) { grid.innerHTML = pluginsDisplayedList; } else { renderAvailablePlugins(topPlugins); } } function installPlugin(installId) { vscode.postMessage({ type: 'installPlugin', installId: installId }); hidePluginsModal(); } function removePlugin(installId) { vscode.postMessage({ type: 'removePlugin', installId: installId }); } `; export default getPluginsScript;