mindroot 9.3.0__py3-none-any.whl → 9.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mindroot/coreplugins/admin/__init__.py +3 -1
- mindroot/coreplugins/admin/agent_router.py +250 -7
- mindroot/coreplugins/admin/asset_manager.py +164 -0
- mindroot/coreplugins/admin/command_router.py +236 -1
- mindroot/coreplugins/admin/mcp_catalog_routes.py +156 -0
- mindroot/coreplugins/admin/mcp_publish_routes.py +450 -0
- mindroot/coreplugins/admin/mcp_registry_routes.py +495 -0
- mindroot/coreplugins/admin/mcp_routes.py +216 -0
- mindroot/coreplugins/admin/mod.py +62 -0
- mindroot/coreplugins/admin/oauth_callback_router.py +84 -0
- mindroot/coreplugins/admin/persona_handler.py +15 -6
- mindroot/coreplugins/admin/persona_router.py +158 -2
- mindroot/coreplugins/admin/plugin_manager.py +63 -0
- mindroot/coreplugins/admin/plugin_router_fixed.py +23 -0
- mindroot/coreplugins/admin/plugin_router_new_not_working.py +145 -0
- mindroot/coreplugins/admin/plugin_routes.py +114 -0
- mindroot/coreplugins/admin/registry_settings_routes.py +140 -0
- mindroot/coreplugins/admin/router.py +116 -15
- mindroot/coreplugins/admin/service_models.py +1 -1
- mindroot/coreplugins/admin/settings_router.py +1 -0
- mindroot/coreplugins/admin/static/css/admin-custom.css +357 -2
- mindroot/coreplugins/admin/static/css/dark.css +1 -0
- mindroot/coreplugins/admin/static/css/default.css +4 -0
- mindroot/coreplugins/admin/static/js/about-info.js +367 -0
- mindroot/coreplugins/admin/static/js/agent-form.js +83 -3
- mindroot/coreplugins/admin/static/js/api-key-script.js +307 -0
- mindroot/coreplugins/admin/static/js/mcp-manager.js +348 -0
- mindroot/coreplugins/admin/static/js/mcp-publisher.js +780 -0
- mindroot/coreplugins/admin/static/js/persona-editor.js +34 -5
- mindroot/coreplugins/admin/static/js/plugin-toggle.js +1 -1
- mindroot/coreplugins/admin/static/js/recommended-plugin-install.js +63 -0
- mindroot/coreplugins/admin/static/js/registry-auth-section.js +132 -0
- mindroot/coreplugins/admin/static/js/registry-manager-base.js +613 -0
- mindroot/coreplugins/admin/static/js/registry-manager-old.js +385 -0
- mindroot/coreplugins/admin/static/js/registry-manager-publish-old-delete.js +166 -0
- mindroot/coreplugins/admin/static/js/registry-manager.js +351 -0
- mindroot/coreplugins/admin/static/js/registry-publish-section.js +377 -0
- mindroot/coreplugins/admin/static/js/registry-search-section.js +400 -0
- mindroot/coreplugins/admin/static/js/registry-search-section.js.bak +3 -0
- mindroot/coreplugins/admin/static/js/registry-settings.js +69 -0
- mindroot/coreplugins/admin/static/js/registry-shared-services.js +857 -0
- mindroot/coreplugins/admin/static/js/registry-simple-sections.js +85 -0
- mindroot/coreplugins/admin/static/js/secure-widget-manager.js +438 -0
- mindroot/coreplugins/admin/static/logo.png +0 -0
- mindroot/coreplugins/admin/templates/admin.jinja2 +275 -110
- mindroot/coreplugins/agent/Assistant/agent.json +27 -11
- mindroot/coreplugins/agent/agent.py +2 -2
- mindroot/coreplugins/agent/command_parser.py +25 -10
- mindroot/coreplugins/agent/templates/system.jinja2 +0 -12
- mindroot/coreplugins/chat/__init__.py +4 -1
- mindroot/coreplugins/chat/router.py +132 -20
- mindroot/coreplugins/chat/router_dedup_patch.py +20 -0
- mindroot/coreplugins/chat/services.py +31 -1
- mindroot/coreplugins/chat/static/css/action-fix.css +32 -0
- mindroot/coreplugins/chat/static/css/admin-custom.css +5 -3
- mindroot/coreplugins/chat/static/css/dark.css +24 -3
- mindroot/coreplugins/chat/static/css/default.css +24 -3
- mindroot/coreplugins/chat/static/css/main.css +1 -0
- mindroot/coreplugins/chat/static/js/action.js +137 -60
- mindroot/coreplugins/chat/static/js/chat-history.js +3 -0
- mindroot/coreplugins/chat/static/js/chat.js +59 -16
- mindroot/coreplugins/chat/static/js/chat.js.diff +221 -0
- mindroot/coreplugins/chat/static/js/chatform.js +2 -2
- mindroot/coreplugins/chat/static/site.webmanifest +1 -1
- mindroot/coreplugins/chat/templates/chat.jinja2 +3 -3
- mindroot/coreplugins/chat/widget_manager.py +139 -0
- mindroot/coreplugins/chat/widget_routes.py +287 -0
- mindroot/coreplugins/check_list/inject/admin.jinja2 +1 -1
- mindroot/coreplugins/email/__init__.py +2 -0
- mindroot/coreplugins/email/email_provider.py +2 -2
- mindroot/coreplugins/email/mod.py +100 -0
- mindroot/coreplugins/email/services.py +5 -3
- mindroot/coreplugins/email/smtp_handler.py +9 -3
- mindroot/coreplugins/email/test_email_service.py +75 -0
- mindroot/coreplugins/env_manager/mod.py +61 -25
- mindroot/coreplugins/home/router.py +37 -2
- mindroot/coreplugins/home/static/imgs/logo.png +0 -0
- mindroot/coreplugins/home/static/imgs/logo.png.bak +0 -0
- mindroot/coreplugins/home/static/imgs/logo_teal.png +0 -0
- mindroot/coreplugins/home/static/imgs/logo_teal2.png +0 -0
- mindroot/coreplugins/home/static/imgs/logo_teal_detailed.png +0 -0
- mindroot/coreplugins/home/static/imgs/logo_teal_python.png +0 -0
- mindroot/coreplugins/home/templates/home.jinja2 +15 -6
- mindroot/coreplugins/index/indices/default/index.json +6 -6
- mindroot/coreplugins/jwt_auth/middleware.py +47 -2
- mindroot/coreplugins/jwt_auth/mod.py +40 -17
- mindroot/coreplugins/l8n/__init__.py +6 -0
- mindroot/coreplugins/l8n/debug_loader.py +85 -0
- mindroot/coreplugins/l8n/debug_middleware.py +74 -0
- mindroot/coreplugins/l8n/l8n_constants.py +19 -0
- mindroot/coreplugins/l8n/language_detection.py +183 -0
- mindroot/coreplugins/l8n/middleware.py +151 -0
- mindroot/coreplugins/l8n/mod.py +277 -0
- mindroot/coreplugins/l8n/monkey_patch_to_delete.py +186 -0
- mindroot/coreplugins/l8n/test_enhanced.py +298 -0
- mindroot/coreplugins/l8n/test_l8n.py +95 -0
- mindroot/coreplugins/l8n/test_l8n_standalone.py +251 -0
- mindroot/coreplugins/l8n/test_middleware.py +272 -0
- mindroot/coreplugins/l8n/utils.py +232 -0
- mindroot/coreplugins/mcp_/__init__.py +14 -0
- mindroot/coreplugins/mcp_/catalog_commands.py +328 -0
- mindroot/coreplugins/mcp_/catalog_manager.py +263 -0
- mindroot/coreplugins/mcp_/dynamic_commands.py +154 -0
- mindroot/coreplugins/mcp_/mcp_manager.py +1031 -0
- mindroot/coreplugins/mcp_/mod.py +367 -0
- mindroot/coreplugins/mcp_/oauth_storage.py +144 -0
- mindroot/coreplugins/mcp_/server_installer.py +79 -0
- mindroot/coreplugins/mcp_/setup.py +26 -0
- mindroot/coreplugins/mcp_/test_dynamic_commands.py +134 -0
- mindroot/coreplugins/mcp_/testmcpclient.py +92 -0
- mindroot/coreplugins/persona/mod.py +12 -7
- mindroot/coreplugins/signup/templates/signup.jinja2 +1 -1
- mindroot/coreplugins/subscriptions/__init__.py +1 -0
- mindroot/coreplugins/subscriptions/mod.py +14 -3
- mindroot/coreplugins/subscriptions/router.py +3 -0
- mindroot/coreplugins/user_service/__init__.py +1 -2
- mindroot/coreplugins/user_service/admin_init.py +1 -0
- mindroot/coreplugins/user_service/email_service.py +72 -17
- mindroot/coreplugins/user_service/mod.py +10 -2
- mindroot/coreplugins/user_service/router.py +2 -0
- mindroot/lib/auth/api_key.py +28 -0
- mindroot/lib/cli/plugins.py +94 -0
- mindroot/lib/plugins/default_plugin_manifest.json +20 -0
- mindroot/lib/plugins/installation.py +5 -5
- mindroot/lib/plugins/l8n_static_handler.py +225 -0
- mindroot/lib/plugins/loader.py +33 -3
- mindroot/lib/plugins/loader_with_l8n.py +281 -0
- mindroot/lib/plugins/manifest.py +236 -24
- mindroot/lib/providers/commands.py +3 -1
- mindroot/lib/route_decorators.py +5 -5
- mindroot/lib/templates.py +183 -11
- mindroot/lib/utils/merge_arrays.py +1 -1
- mindroot/migrate.py +39 -20
- mindroot/registry/data_access.py +1 -1
- mindroot/server.py +42 -13
- mindroot/server_missing_normal_args.py +197 -0
- mindroot/server_prev.py +173 -0
- {mindroot-9.3.0.dist-info → mindroot-9.5.0.dist-info}/METADATA +7 -2
- {mindroot-9.3.0.dist-info → mindroot-9.5.0.dist-info}/RECORD +144 -112
- mindroot/coreplugins/admin/static/favicon/about.txt +0 -6
- mindroot/coreplugins/admin/static/favicon/android-chrome-512x512.png +0 -0
- mindroot/coreplugins/admin/static/favicon/apple-touch-icon.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon-16x16.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon-32x32.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon.ico +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/about.txt +0 -6
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/android-chrome-192x192.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/android-chrome-512x512.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/apple-touch-icon.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/favicon-16x16.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/favicon-32x32.png +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/favicon.ico +0 -0
- mindroot/coreplugins/admin/static/favicon/favicon_io (1)/site.webmanifest +0 -1
- mindroot/coreplugins/admin/static/favicon/logo.png +0 -0
- mindroot/coreplugins/admin/static/favicon/site.webmanifest +0 -1
- mindroot/coreplugins/admin/static/js/backup/agent-editor.js +0 -186
- mindroot/coreplugins/admin/static/js/backup/agent-form.js +0 -1133
- mindroot/coreplugins/admin/static/js/backup/agent-list.js +0 -94
- mindroot/coreplugins/chat/static/favicon/about.txt +0 -6
- mindroot/coreplugins/chat/static/favicon/android-chrome-192x192.png +0 -0
- mindroot/coreplugins/chat/static/favicon/android-chrome-512x512.png +0 -0
- mindroot/coreplugins/chat/static/favicon/apple-touch-icon.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon-16x16.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon-32x32.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon.ico +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/about.txt +0 -6
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/android-chrome-192x192.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/android-chrome-512x512.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/apple-touch-icon.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/favicon-16x16.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/favicon-32x32.png +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/favicon.ico +0 -0
- mindroot/coreplugins/chat/static/favicon/favicon_io (1)/site.webmanifest +0 -1
- mindroot/coreplugins/chat/static/favicon/logo.png +0 -0
- mindroot/coreplugins/chat/static/favicon/site.webmanifest +0 -1
- mindroot/coreplugins/index/default.json +0 -76
- mindroot/coreplugins/user_service/file_trigger_service.py +0 -12
- mindroot/coreplugins/user_service/hooks.py +0 -23
- /mindroot/coreplugins/{admin/static/favicon/android-chrome-192x192.png → home/static/imgs/backuplogo.png} +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.5.0.dist-info}/WHEEL +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.5.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.5.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.5.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { html } from '/admin/static/js/lit-core.min.js';
|
|
2
|
+
import { RegistryManagerBase } from './registry-manager-base.js';
|
|
3
|
+
import { RegistrySharedServices } from './registry-shared-services.js';
|
|
4
|
+
import { RegistryAuthSection } from './registry-auth-section.js';
|
|
5
|
+
import { RegistrySearchSection } from './registry-search-section.js';
|
|
6
|
+
import { RegistryPublishSection } from './registry-publish-section.js';
|
|
7
|
+
import { RegistrySimpleSections } from './registry-simple-sections.js';
|
|
8
|
+
import "./mcp-publisher.js";
|
|
9
|
+
|
|
10
|
+
class RegistryManager extends RegistryManagerBase {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.localMcpServers = [];
|
|
14
|
+
this.searchTimeout = null;
|
|
15
|
+
this.isSecretModalOpen = false;
|
|
16
|
+
this.serverForSecrets = null;
|
|
17
|
+
this.placeholderValues = {};
|
|
18
|
+
this.mcpInstallSecrets = {}; // New state for install-time secrets
|
|
19
|
+
|
|
20
|
+
// Initialize shared state
|
|
21
|
+
this.sharedState = {
|
|
22
|
+
authToken: this.authToken,
|
|
23
|
+
currentUser: this.currentUser,
|
|
24
|
+
isLoggedIn: this.isLoggedIn,
|
|
25
|
+
localContent: {},
|
|
26
|
+
loading: this.loading,
|
|
27
|
+
registryUrl: this.registryUrl,
|
|
28
|
+
localPlugins: this.localPlugins,
|
|
29
|
+
localAgents: this.localAgents
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
this.initializeModules();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
initializeModules() {
|
|
36
|
+
// Initialize services first
|
|
37
|
+
this.services = new RegistrySharedServices(this.sharedState, this);
|
|
38
|
+
|
|
39
|
+
// Initialize sections
|
|
40
|
+
this.authSection = new RegistryAuthSection(this.sharedState, this);
|
|
41
|
+
this.searchSection = new RegistrySearchSection(this.sharedState, this);
|
|
42
|
+
this.publishSection = new RegistryPublishSection(this.sharedState, this);
|
|
43
|
+
this.simpleSections = new RegistrySimpleSections(this.sharedState, this);
|
|
44
|
+
|
|
45
|
+
// Set services reference for all sections
|
|
46
|
+
this.authSection.setServices(this.services);
|
|
47
|
+
this.searchSection.setServices(this.services);
|
|
48
|
+
this.publishSection.setServices(this.services);
|
|
49
|
+
this.simpleSections.setServices(this.services);
|
|
50
|
+
|
|
51
|
+
// Initialize data
|
|
52
|
+
this.services.checkAuthStatus();
|
|
53
|
+
this.services.loadStats();
|
|
54
|
+
this.services.loadLocalContent();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Return true if an agent with this name is already present in localAgents
|
|
58
|
+
isAgentInstalled(name) {
|
|
59
|
+
return (this.localAgents || []).some(a => a.name === name);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// === MCP Server Management (kept in main component for now) ===
|
|
63
|
+
|
|
64
|
+
async toggleMcpServerConnection(serverName, connect) {
|
|
65
|
+
if (!connect) {
|
|
66
|
+
// Disconnecting doesn't require secrets, so proceed directly
|
|
67
|
+
return this.performConnectionToggle(serverName, false);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Check for secrets from the inline form first
|
|
71
|
+
const inlineSecrets = this.mcpInstallSecrets[serverName];
|
|
72
|
+
const hasInlineSecrets = inlineSecrets && Object.keys(inlineSecrets).length > 0;
|
|
73
|
+
|
|
74
|
+
if (hasInlineSecrets) {
|
|
75
|
+
console.log(`[RegistryManager] Found inline secrets for ${serverName}, connecting directly.`);
|
|
76
|
+
return this.performConnectionToggle(serverName, true, inlineSecrets);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Find the full server definition
|
|
80
|
+
const server = this.localMcpServers.find(s => s.name === serverName);
|
|
81
|
+
if (!server) {
|
|
82
|
+
this.showToast(`Error: Could not find local server definition for '${serverName}'.`, 'error');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Scan for placeholders
|
|
87
|
+
const configString = JSON.stringify(server);
|
|
88
|
+
const placeholderRegex = /<([A-Z0-9_]+)>|\${([A-Z0-9_]+)}/g;
|
|
89
|
+
const placeholders = new Set();
|
|
90
|
+
let match;
|
|
91
|
+
while ((match = placeholderRegex.exec(configString)) !== null) {
|
|
92
|
+
placeholders.add(match[1] || match[2]);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (placeholders.size > 0) {
|
|
96
|
+
// Placeholders found, open modal to ask for secrets
|
|
97
|
+
this.serverForSecrets = { name: serverName, placeholders: Array.from(placeholders) };
|
|
98
|
+
this.placeholderValues = {};
|
|
99
|
+
this.isSecretModalOpen = true;
|
|
100
|
+
} else {
|
|
101
|
+
// No placeholders, connect directly
|
|
102
|
+
await this.performConnectionToggle(serverName, true);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async performConnectionToggle(serverName, connect, secrets = null) {
|
|
107
|
+
this.loading = true;
|
|
108
|
+
const action = connect ? 'connect' : 'disconnect';
|
|
109
|
+
try {
|
|
110
|
+
const response = await fetch(`/admin/mcp/${action}`, {
|
|
111
|
+
method: 'POST',
|
|
112
|
+
headers: { 'Content-Type': 'application/json' },
|
|
113
|
+
body: JSON.stringify({ server_name: serverName, secrets })
|
|
114
|
+
});
|
|
115
|
+
if (response.ok) {
|
|
116
|
+
this.showToast(`Server '${serverName}' ${action}ed successfully.`, 'success');
|
|
117
|
+
await this.services.loadLocalContent();
|
|
118
|
+
} else {
|
|
119
|
+
const err = await response.json();
|
|
120
|
+
throw new Error(err.detail || `Failed to ${action} server`);
|
|
121
|
+
}
|
|
122
|
+
} catch (error) {
|
|
123
|
+
this.showToast(`Error: ${error.message}`, 'error');
|
|
124
|
+
} finally {
|
|
125
|
+
this.loading = false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async handleSecretSubmit() {
|
|
130
|
+
const { name } = this.serverForSecrets;
|
|
131
|
+
await this.performConnectionToggle(name, true, this.placeholderValues);
|
|
132
|
+
this.isSecretModalOpen = false;
|
|
133
|
+
this.serverForSecrets = null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
handleMcpInstallSecretChange(key, placeholder, value) {
|
|
137
|
+
console.log(`[RegistryManager] Secret input for key '${key}', placeholder '${placeholder}'`);
|
|
138
|
+
if (!this.mcpInstallSecrets[key]) {
|
|
139
|
+
this.mcpInstallSecrets[key] = {};
|
|
140
|
+
}
|
|
141
|
+
this.mcpInstallSecrets[key][placeholder] = value;
|
|
142
|
+
console.log('[RegistryManager] Current install secrets state:', JSON.stringify(this.mcpInstallSecrets));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async removeMcpServer(serverName) {
|
|
146
|
+
if (!confirm(`Are you sure you want to remove the MCP server '${serverName}'?`)) return;
|
|
147
|
+
this.loading = true;
|
|
148
|
+
try {
|
|
149
|
+
const response = await fetch('/admin/mcp/remove', {
|
|
150
|
+
method: 'POST',
|
|
151
|
+
headers: { 'Content-Type': 'application/json' },
|
|
152
|
+
body: JSON.stringify({ server_name: serverName })
|
|
153
|
+
});
|
|
154
|
+
if (response.ok) {
|
|
155
|
+
this.showToast(`Server '${serverName}' removed.`, 'success');
|
|
156
|
+
await this.services.loadLocalContent();
|
|
157
|
+
} else {
|
|
158
|
+
const err = await response.json();
|
|
159
|
+
throw new Error(err.detail || 'Failed to remove server');
|
|
160
|
+
}
|
|
161
|
+
} catch (error) {
|
|
162
|
+
this.showToast(`Error: ${error.message}`, 'error');
|
|
163
|
+
} finally {
|
|
164
|
+
this.loading = false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// === Main Render Method ===
|
|
169
|
+
|
|
170
|
+
_render() {
|
|
171
|
+
return html`
|
|
172
|
+
<div class="registry-manager">
|
|
173
|
+
${this.renderToasts()}
|
|
174
|
+
${this.isSecretModalOpen ? this.renderSecretPromptModal() : ''}
|
|
175
|
+
${this.authSection.renderHeader()}
|
|
176
|
+
${this.renderTabs()}
|
|
177
|
+
${this.renderContent()}
|
|
178
|
+
</div>
|
|
179
|
+
`;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
renderSecretPromptModal() {
|
|
183
|
+
if (!this.serverForSecrets) return '';
|
|
184
|
+
|
|
185
|
+
return html`
|
|
186
|
+
<div class="modal-overlay">
|
|
187
|
+
<div class="modal-content">
|
|
188
|
+
<h3>Provide Secrets for ${this.serverForSecrets.name}</h3>
|
|
189
|
+
<p class="help-text">Enter the required values to connect. These are not stored.</p>
|
|
190
|
+
<div class="form-group">
|
|
191
|
+
${this.serverForSecrets.placeholders.map(p => html`
|
|
192
|
+
<label for="secret-${p}">${p}</label>
|
|
193
|
+
<input type="password"
|
|
194
|
+
id="secret-${p}"
|
|
195
|
+
@input=${e => this.placeholderValues[p] = e.target.value}>
|
|
196
|
+
`)}
|
|
197
|
+
</div>
|
|
198
|
+
<div class="modal-actions">
|
|
199
|
+
<button @click=${() => this.isSecretModalOpen = false}>Cancel</button>
|
|
200
|
+
<button class="primary" @click=${this.handleSecretSubmit}>Connect</button>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
`;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
renderTabs() {
|
|
208
|
+
return html`
|
|
209
|
+
<div class="tabs">
|
|
210
|
+
<div class="tab ${this.activeTab === 'search' ? 'active' : ''}"
|
|
211
|
+
@click=${() => this.activeTab = 'search'}>Search</div>
|
|
212
|
+
<div class="tab ${this.activeTab === 'publish' ? 'active' : ''}"
|
|
213
|
+
@click=${() => this.activeTab = 'publish'}>Publish</div>
|
|
214
|
+
<div class="tab ${this.activeTab === 'stats' ? 'active' : ''}"
|
|
215
|
+
@click=${() => this.activeTab = 'stats'}>Stats</div>
|
|
216
|
+
<div class="tab ${this.activeTab === 'settings' ? 'active' : ''}"
|
|
217
|
+
@click=${() => this.activeTab = 'settings'}>Settings</div>
|
|
218
|
+
</div>
|
|
219
|
+
`;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
renderContent() {
|
|
223
|
+
switch (this.activeTab) {
|
|
224
|
+
case 'search':
|
|
225
|
+
return this.searchSection.renderSearch();
|
|
226
|
+
case 'publish':
|
|
227
|
+
return this.publishSection.renderPublish();
|
|
228
|
+
case 'stats':
|
|
229
|
+
return this.simpleSections.renderStats();
|
|
230
|
+
case 'settings':
|
|
231
|
+
return this.simpleSections.renderSettings();
|
|
232
|
+
default:
|
|
233
|
+
return this.searchSection.renderSearch();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// === Legacy Methods (for backward compatibility) ===
|
|
238
|
+
// These delegate to the services
|
|
239
|
+
|
|
240
|
+
async checkAuthStatus() {
|
|
241
|
+
return this.services.checkAuthStatus();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
async loadStats() {
|
|
245
|
+
return this.services.loadStats();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
async loadLocalContent() {
|
|
249
|
+
return this.services.loadLocalContent();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
async handleLogin() {
|
|
253
|
+
return this.authSection.handleLogin();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
async login(username, password) {
|
|
257
|
+
return this.services.login(username, password);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
async handleRegister() {
|
|
261
|
+
return this.authSection.handleRegister();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
async register(username, email, password) {
|
|
265
|
+
return this.services.register(username, email, password);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
toggleRegisterForm() {
|
|
269
|
+
return this.authSection.toggleRegisterForm();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
logout() {
|
|
273
|
+
return this.authSection.logout();
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
async loadTopContent() {
|
|
277
|
+
return this.services.loadTopContent();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
async search(query, category) {
|
|
281
|
+
return this.services.search(query, category);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
handleSearchInput(e) {
|
|
285
|
+
return this.searchSection.handleSearchInput(e);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
handleCategoryChange(category) {
|
|
289
|
+
return this.searchSection.handleCategoryChange(category);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
async installFromRegistry(item) {
|
|
293
|
+
return this.services.installFromRegistry(item);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
async installMcpServer(item) {
|
|
297
|
+
return this.services.installMcpServer(item);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
async installOAuthMcpServer(item) {
|
|
301
|
+
return this.services.installOAuthMcpServer(item);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
async installPlugin(item) {
|
|
305
|
+
return this.services.installPlugin(item);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
async installAgent(item) {
|
|
309
|
+
return this.services.installAgent(item);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
async handlePublishPluginFromGithub() {
|
|
313
|
+
return this.publishSection.handlePublishPluginFromGithub();
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
async refreshOwnershipCache() {
|
|
317
|
+
return this.services.refreshOwnershipCache();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
async publishItem(item, type) {
|
|
321
|
+
return this.publishSection.publishItem(item, type);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
async updateRegistryUrl(newUrl) {
|
|
325
|
+
return this.services.updateRegistryUrl(newUrl);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
async testConnection() {
|
|
329
|
+
return this.services.testConnection();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// === Utility Methods ===
|
|
333
|
+
|
|
334
|
+
showSuccessMessage(message) {
|
|
335
|
+
this.error = '';
|
|
336
|
+
this.requestUpdate();
|
|
337
|
+
|
|
338
|
+
setTimeout(() => {
|
|
339
|
+
this.publishSuccess = '';
|
|
340
|
+
this.requestUpdate();
|
|
341
|
+
}, 5000);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
showErrorMessage(message) {
|
|
345
|
+
this.error = message;
|
|
346
|
+
this.publishSuccess = '';
|
|
347
|
+
this.requestUpdate();
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
customElements.define('registry-manager', RegistryManager);
|