mindroot 9.3.0__py3-none-any.whl → 9.6.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 +105 -9
- 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-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 +903 -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 +39 -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.6.0.dist-info}/METADATA +7 -2
- {mindroot-9.3.0.dist-info → mindroot-9.6.0.dist-info}/RECORD +143 -113
- mindroot/coreplugins/admin/plugin_manager_backup.py +0 -615
- 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.6.0.dist-info}/WHEEL +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.6.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.6.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.3.0.dist-info → mindroot-9.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,47 +1,148 @@
|
|
|
1
1
|
import nanoid
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
from pathlib import Path
|
|
2
5
|
from fastapi import APIRouter, HTTPException, Request
|
|
3
|
-
from fastapi.responses import HTMLResponse, RedirectResponse
|
|
6
|
+
from fastapi.responses import HTMLResponse, RedirectResponse, JSONResponse, Response
|
|
4
7
|
from lib.plugins import list_enabled
|
|
5
8
|
from lib.templates import render
|
|
6
9
|
from .plugin_manager import router as plugin_manager_router
|
|
7
10
|
from lib.route_decorators import requires_role
|
|
11
|
+
from .mod import get_git_version_info
|
|
8
12
|
|
|
9
|
-
# Create
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
)
|
|
13
|
+
# Create separate routers for public and admin routes
|
|
14
|
+
public_router = APIRouter() # No dependencies - for OAuth callbacks etc.
|
|
15
|
+
admin_router = APIRouter(dependencies=[requires_role('admin')]) # Admin only
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
# === PUBLIC ROUTES (no authentication required) ===
|
|
18
|
+
# Import and include the OAuth callback router in public router
|
|
19
|
+
from .oauth_callback_router import router as oauth_callback_router
|
|
20
|
+
public_router.include_router(oauth_callback_router)
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
# === ADMIN ROUTES (authentication required) ===
|
|
23
|
+
admin_router.include_router(plugin_manager_router, prefix="/plugin-manager", tags=["plugin-manager"])
|
|
24
|
+
|
|
25
|
+
@admin_router.get("/admin", response_class=HTMLResponse)
|
|
17
26
|
async def get_admin_html():
|
|
18
27
|
log_id = nanoid.generate()
|
|
19
28
|
plugins = list_enabled()
|
|
20
29
|
html = await render('admin', {"log_id": log_id})
|
|
21
30
|
return html
|
|
22
31
|
|
|
32
|
+
@admin_router.post("/admin/get-version-info")
|
|
33
|
+
async def get_version_info():
|
|
34
|
+
"""Get version information, trying git first, then falling back to cached file."""
|
|
35
|
+
try:
|
|
36
|
+
# Get the path to this file to determine where to store version.txt
|
|
37
|
+
current_file = Path(__file__)
|
|
38
|
+
version_file = current_file.parent / "version.txt"
|
|
39
|
+
|
|
40
|
+
# Try to get fresh git info using the command
|
|
41
|
+
try:
|
|
42
|
+
if get_git_version_info:
|
|
43
|
+
git_info = await get_git_version_info()
|
|
44
|
+
if git_info:
|
|
45
|
+
# Write to version.txt
|
|
46
|
+
with open(version_file, 'w') as f:
|
|
47
|
+
json.dump(git_info, f, indent=2)
|
|
48
|
+
return JSONResponse(git_info)
|
|
49
|
+
except Exception as e:
|
|
50
|
+
print(f"Failed to get git info: {e}")
|
|
51
|
+
|
|
52
|
+
# Fall back to reading from version.txt
|
|
53
|
+
if version_file.exists():
|
|
54
|
+
with open(version_file, 'r') as f:
|
|
55
|
+
cached_info = json.load(f)
|
|
56
|
+
# Add note that this is cached
|
|
57
|
+
cached_info['note'] = 'Cached version (git not available)'
|
|
58
|
+
return JSONResponse(cached_info)
|
|
59
|
+
|
|
60
|
+
# No version info available
|
|
61
|
+
return JSONResponse({
|
|
62
|
+
'commit_hash': 'Unknown',
|
|
63
|
+
'commit_date': 'Unknown',
|
|
64
|
+
'retrieved_at': 'Unknown',
|
|
65
|
+
'note': 'Version information not available'
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
except Exception as e:
|
|
69
|
+
raise HTTPException(status_code=500, detail=f"Error getting version info: {str(e)}")
|
|
23
70
|
|
|
24
71
|
from lib.logging.log_router import router as log_router
|
|
25
|
-
|
|
72
|
+
admin_router.include_router(log_router)
|
|
26
73
|
|
|
27
74
|
from .command_router import router as command_router
|
|
28
|
-
|
|
75
|
+
admin_router.include_router(command_router)
|
|
29
76
|
|
|
30
77
|
from .settings_router import router as settings_router
|
|
31
|
-
|
|
78
|
+
admin_router.include_router(settings_router)
|
|
79
|
+
|
|
80
|
+
# Use the fixed plugin router instead of the old one
|
|
81
|
+
from .plugin_router_fixed import router as plugin_router_fixed
|
|
82
|
+
admin_router.include_router(plugin_router_fixed, prefix="/admin", tags=["plugins", "mcp"])
|
|
32
83
|
|
|
84
|
+
# Keep the old plugin router for backward compatibility if needed
|
|
33
85
|
from .plugin_router import router as plugin_router
|
|
34
|
-
|
|
86
|
+
admin_router.include_router(plugin_router, prefix="/admin/legacy", tags=["legacy-plugins"])
|
|
35
87
|
|
|
36
88
|
from .persona_router import router as persona_router
|
|
37
|
-
|
|
89
|
+
admin_router.include_router(persona_router)
|
|
38
90
|
|
|
39
91
|
from .agent_router import router as agent_router
|
|
40
|
-
|
|
92
|
+
admin_router.include_router(agent_router)
|
|
41
93
|
|
|
42
94
|
from .server_router import router as server_router
|
|
43
|
-
|
|
95
|
+
admin_router.include_router(server_router, prefix="/admin/server", tags=["server"])
|
|
44
96
|
|
|
45
97
|
# Import and include the env_manager router
|
|
46
98
|
from coreplugins.env_manager.router import router as env_manager_router
|
|
47
|
-
|
|
99
|
+
admin_router.include_router(env_manager_router)
|
|
100
|
+
|
|
101
|
+
@admin_router.post("/admin/update-mindroot")
|
|
102
|
+
async def update_mindroot():
|
|
103
|
+
"""Update MindRoot using pip install --upgrade mindroot"""
|
|
104
|
+
import subprocess
|
|
105
|
+
import sys
|
|
106
|
+
|
|
107
|
+
try:
|
|
108
|
+
# Run pip install --upgrade mindroot in the current environment
|
|
109
|
+
result = subprocess.run(
|
|
110
|
+
[sys.executable, "-m", "pip", "install", "--upgrade", "mindroot"],
|
|
111
|
+
capture_output=True,
|
|
112
|
+
text=True,
|
|
113
|
+
timeout=300 # 5 minute timeout
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
if result.returncode == 0:
|
|
117
|
+
return JSONResponse({
|
|
118
|
+
"success": True,
|
|
119
|
+
"message": "MindRoot updated successfully",
|
|
120
|
+
"output": result.stdout,
|
|
121
|
+
"note": "Restart the application to use the updated version"
|
|
122
|
+
})
|
|
123
|
+
else:
|
|
124
|
+
return JSONResponse({
|
|
125
|
+
"success": False,
|
|
126
|
+
"message": "Failed to update MindRoot",
|
|
127
|
+
"error": result.stderr,
|
|
128
|
+
"output": result.stdout
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
except subprocess.TimeoutExpired:
|
|
132
|
+
return JSONResponse({
|
|
133
|
+
"success": False,
|
|
134
|
+
"message": "Update timed out after 5 minutes",
|
|
135
|
+
"error": "Process timed out"
|
|
136
|
+
})
|
|
137
|
+
except Exception as e:
|
|
138
|
+
return JSONResponse({
|
|
139
|
+
"success": False,
|
|
140
|
+
"message": "Error during update",
|
|
141
|
+
"error": str(e)
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
# === MAIN ROUTER COMBINING PUBLIC AND ADMIN ===
|
|
145
|
+
# Create main router that combines both public and admin routes
|
|
146
|
+
router = APIRouter()
|
|
147
|
+
router.include_router(public_router) # Public routes first (no auth)
|
|
148
|
+
router.include_router(admin_router) # Admin routes (with auth)
|
|
@@ -71,7 +71,7 @@ async def get_service_models_from_providers(timeout: float = 500.0, context=None
|
|
|
71
71
|
print(f"Querying {len(providers)} providers for service models...")
|
|
72
72
|
provider_tasks = [query_provider(provider) for provider in providers]
|
|
73
73
|
provider_results = await asyncio.gather(*provider_tasks)
|
|
74
|
-
print(provider_results)
|
|
74
|
+
#print(provider_results)
|
|
75
75
|
# Organize results by service, then by provider
|
|
76
76
|
service_models: Dict[str, Dict[str, List[str]]] = {}
|
|
77
77
|
|
|
@@ -110,6 +110,7 @@ async def get_providers():
|
|
|
110
110
|
@router.get('/commands', response_model=Dict)
|
|
111
111
|
async def get_commands():
|
|
112
112
|
print("retrieving commands")
|
|
113
|
+
print(f"settings_router: command_manager instance ID: {id(command_manager)}")
|
|
113
114
|
#funcs = command_manager.get_functions()
|
|
114
115
|
funcs = command_manager.get_detailed_functions()
|
|
115
116
|
print("funcs is")
|
|
@@ -138,7 +138,7 @@ details summary .material-icons {
|
|
|
138
138
|
|
|
139
139
|
.commands-grid {
|
|
140
140
|
display: grid;
|
|
141
|
-
grid-template-columns: repeat(auto-fill, minmax(
|
|
141
|
+
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
|
|
142
142
|
gap: 0.5rem;
|
|
143
143
|
margin-top: 0.25rem;
|
|
144
144
|
}
|
|
@@ -147,7 +147,7 @@ details summary .material-icons {
|
|
|
147
147
|
display: flex;
|
|
148
148
|
align-items: center;
|
|
149
149
|
gap: 0.5rem;
|
|
150
|
-
padding: 0.
|
|
150
|
+
padding: 0.5rem 0.75rem;
|
|
151
151
|
background: rgba(255, 255, 255, 0.05);
|
|
152
152
|
border-radius: 4px;
|
|
153
153
|
cursor: pointer;
|
|
@@ -167,6 +167,9 @@ details summary .material-icons {
|
|
|
167
167
|
|
|
168
168
|
.command-name {
|
|
169
169
|
white-space: nowrap;
|
|
170
|
+
flex: 1;
|
|
171
|
+
margin-right: 1rem;
|
|
172
|
+
min-width: 0;
|
|
170
173
|
overflow: hidden;
|
|
171
174
|
text-overflow: ellipsis;
|
|
172
175
|
font-size: 0.9rem;
|
|
@@ -312,3 +315,355 @@ h2, h3, h4 {
|
|
|
312
315
|
.admin-link, .admin-link:visited {
|
|
313
316
|
color: #ddd;
|
|
314
317
|
}
|
|
318
|
+
|
|
319
|
+
/* Category Section Styles */
|
|
320
|
+
.category-section {
|
|
321
|
+
margin-bottom: 2rem;
|
|
322
|
+
background: rgba(5, 5, 15, 0.6);
|
|
323
|
+
border-radius: 12px;
|
|
324
|
+
padding: 1.5rem;
|
|
325
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.category-title {
|
|
329
|
+
display: flex;
|
|
330
|
+
align-items: center;
|
|
331
|
+
gap: 0.75rem;
|
|
332
|
+
font-size: 1.3rem;
|
|
333
|
+
font-weight: 600;
|
|
334
|
+
color: rgba(255, 255, 255, 0.95);
|
|
335
|
+
margin: 0 0 1.5rem 0;
|
|
336
|
+
padding: 0.75rem 1rem;
|
|
337
|
+
background: rgba(255, 255, 255, 0.08);
|
|
338
|
+
border-radius: 8px;
|
|
339
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.category-title .material-icons {
|
|
343
|
+
font-size: 1.4rem;
|
|
344
|
+
opacity: 0.9;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* Adjust details within categories */
|
|
348
|
+
.category-section details {
|
|
349
|
+
margin-bottom: 1rem;
|
|
350
|
+
background: rgba(15, 15, 30, 0.7);
|
|
351
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.category-section details:last-child {
|
|
355
|
+
margin-bottom: 0;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.category-section details summary {
|
|
359
|
+
background: rgba(255, 255, 255, 0.06);
|
|
360
|
+
padding: 1rem 1.25rem;
|
|
361
|
+
font-size: 1.05rem;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.category-section details summary:hover {
|
|
365
|
+
background: rgba(255, 255, 255, 0.12);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.category-section .details-content {
|
|
369
|
+
padding: 1.25rem;
|
|
370
|
+
background: rgba(10, 10, 25, 0.5);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/* Category-specific styling */
|
|
374
|
+
.category-section:nth-child(1) .category-title {
|
|
375
|
+
background: linear-gradient(135deg, rgba(74, 158, 255, 0.15), rgba(74, 158, 255, 0.08));
|
|
376
|
+
border-color: rgba(74, 158, 255, 0.2);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.category-section:nth-child(2) .category-title {
|
|
380
|
+
background: linear-gradient(135deg, rgba(76, 175, 80, 0.15), rgba(76, 175, 80, 0.08));
|
|
381
|
+
border-color: rgba(76, 175, 80, 0.2);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.category-section:nth-child(3) .category-title {
|
|
385
|
+
background: linear-gradient(135deg, rgba(255, 152, 0, 0.15), rgba(255, 152, 0, 0.08));
|
|
386
|
+
border-color: rgba(255, 152, 0, 0.2);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/* Responsive adjustments for categories */
|
|
390
|
+
@media (max-width: 768px) {
|
|
391
|
+
.category-section {
|
|
392
|
+
padding: 1rem;
|
|
393
|
+
margin-bottom: 1.5rem;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.category-title {
|
|
397
|
+
font-size: 1.2rem;
|
|
398
|
+
padding: 0.6rem 0.8rem;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.category-section details summary {
|
|
402
|
+
padding: 0.8rem 1rem;
|
|
403
|
+
font-size: 1rem;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.category-section .details-content {
|
|
407
|
+
padding: 1rem;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/* Navigation Category Styles */
|
|
412
|
+
.nav-category {
|
|
413
|
+
margin-bottom: 0.5rem;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.nav-category-header {
|
|
417
|
+
display: flex;
|
|
418
|
+
align-items: center;
|
|
419
|
+
gap: 0.5rem;
|
|
420
|
+
padding: 0.75rem 1rem;
|
|
421
|
+
background: rgba(255, 255, 255, 0.08);
|
|
422
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
423
|
+
border-radius: 6px;
|
|
424
|
+
cursor: pointer;
|
|
425
|
+
font-weight: 600;
|
|
426
|
+
font-size: 0.95rem;
|
|
427
|
+
color: rgba(255, 255, 255, 0.9);
|
|
428
|
+
margin-bottom: 0.5rem;
|
|
429
|
+
transition: background 0.2s ease;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.nav-category-header:hover {
|
|
433
|
+
background: rgba(255, 255, 255, 0.12);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.nav-category-header .material-icons {
|
|
437
|
+
font-size: 1.1rem;
|
|
438
|
+
opacity: 0.8;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.nav-category-content {
|
|
442
|
+
padding-left: 1rem;
|
|
443
|
+
border-left: 2px solid rgba(255, 255, 255, 0.1);
|
|
444
|
+
margin-left: 1rem;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
.nav-category-content .tab-button {
|
|
448
|
+
width: 100%;
|
|
449
|
+
margin-bottom: 0.25rem;
|
|
450
|
+
justify-content: flex-start;
|
|
451
|
+
padding: 0.6rem 0.75rem;
|
|
452
|
+
font-size: 0.9rem;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* Category-specific colors for headers */
|
|
456
|
+
.nav-category:nth-child(1) .nav-category-header {
|
|
457
|
+
background: linear-gradient(135deg, rgba(74, 158, 255, 0.15), rgba(74, 158, 255, 0.08));
|
|
458
|
+
border-color: rgba(74, 158, 255, 0.2);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.nav-category:nth-child(1) .nav-category-content {
|
|
462
|
+
border-left-color: rgba(74, 158, 255, 0.3);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.nav-category:nth-child(2) .nav-category-header {
|
|
466
|
+
background: linear-gradient(135deg, rgba(76, 175, 80, 0.15), rgba(76, 175, 80, 0.08));
|
|
467
|
+
border-color: rgba(76, 175, 80, 0.2);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
.nav-category:nth-child(2) .nav-category-content {
|
|
471
|
+
border-left-color: rgba(76, 175, 80, 0.3);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
.nav-category:nth-child(3) .nav-category-header {
|
|
475
|
+
background: linear-gradient(135deg, rgba(255, 152, 0, 0.15), rgba(255, 152, 0, 0.08));
|
|
476
|
+
border-color: rgba(255, 152, 0, 0.2);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.nav-category:nth-child(3) .nav-category-content {
|
|
480
|
+
border-left-color: rgba(255, 152, 0, 0.3);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/* Responsive adjustments for navigation categories */
|
|
484
|
+
@media (max-width: 768px) {
|
|
485
|
+
.nav-category-header {
|
|
486
|
+
padding: 0.6rem 0.8rem;
|
|
487
|
+
font-size: 0.9rem;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.nav-category-content {
|
|
491
|
+
padding-left: 0.75rem;
|
|
492
|
+
margin-left: 0.75rem;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.nav-category-content .tab-button {
|
|
496
|
+
padding: 0.5rem 0.6rem;
|
|
497
|
+
font-size: 0.85rem;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/* Enhanced Navigation Category Styles with Expand Indicators */
|
|
502
|
+
.nav-category-header {
|
|
503
|
+
position: relative;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.nav-category-header::after {
|
|
507
|
+
content: '▼';
|
|
508
|
+
position: absolute;
|
|
509
|
+
right: 1rem;
|
|
510
|
+
top: 50%;
|
|
511
|
+
transform: translateY(-50%);
|
|
512
|
+
font-size: 0.8rem;
|
|
513
|
+
opacity: 0.7;
|
|
514
|
+
transition: transform 0.2s ease, opacity 0.2s ease;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
.nav-category:not([open]) .nav-category-header::after {
|
|
518
|
+
transform: translateY(-50%) rotate(-90deg);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.nav-category-header:hover::after {
|
|
522
|
+
opacity: 1;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/* Enhanced hover effects */
|
|
526
|
+
.nav-category-header:hover {
|
|
527
|
+
background: rgba(255, 255, 255, 0.15);
|
|
528
|
+
transform: translateY(-1px);
|
|
529
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* Category-specific hover enhancements */
|
|
533
|
+
.nav-category:nth-child(1) .nav-category-header:hover {
|
|
534
|
+
background: linear-gradient(135deg, rgba(74, 158, 255, 0.25), rgba(74, 158, 255, 0.15));
|
|
535
|
+
border-color: rgba(74, 158, 255, 0.3);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
.nav-category:nth-child(2) .nav-category-header:hover {
|
|
539
|
+
background: linear-gradient(135deg, rgba(76, 175, 80, 0.25), rgba(76, 175, 80, 0.15));
|
|
540
|
+
border-color: rgba(76, 175, 80, 0.3);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.nav-category:nth-child(3) .nav-category-header:hover {
|
|
544
|
+
background: linear-gradient(135deg, rgba(255, 152, 0, 0.25), rgba(255, 152, 0, 0.15));
|
|
545
|
+
border-color: rgba(255, 152, 0, 0.3);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/* Smooth transitions for all category interactions */
|
|
549
|
+
.nav-category-header {
|
|
550
|
+
transition: all 0.2s ease;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
.nav-category-content {
|
|
554
|
+
transition: all 0.2s ease;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/* Enhanced tab button hover within categories */
|
|
558
|
+
.nav-category-content .tab-button:hover {
|
|
559
|
+
background: rgba(255, 255, 255, 0.15);
|
|
560
|
+
transform: translateX(2px);
|
|
561
|
+
border-left: 2px solid rgba(255, 255, 255, 0.3);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/* Active state enhancements */
|
|
565
|
+
.nav-category-content .tab-button.active {
|
|
566
|
+
background: rgba(255, 255, 255, 0.2);
|
|
567
|
+
border-left: 3px solid #4a9eff;
|
|
568
|
+
font-weight: 500;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
.nav-category-content .tab-button.active:hover {
|
|
572
|
+
background: rgba(255, 255, 255, 0.25);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
.publish-details summary {
|
|
577
|
+
list-style: none;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/* Remove webkit default arrow */
|
|
581
|
+
.publish-details summary::-webkit-details-marker {
|
|
582
|
+
display: none;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/* Add custom arrow using ::before pseudo-element */
|
|
586
|
+
.publish-details summary::before {
|
|
587
|
+
content: '▶';
|
|
588
|
+
margin-right: 8px;
|
|
589
|
+
transition: transform 0.2s ease;
|
|
590
|
+
display: inline-block;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/* Rotate arrow when expanded */
|
|
594
|
+
.publish-details details[open] summary::before {
|
|
595
|
+
transform: rotate(90deg);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
/* Override all radio buttons globally */
|
|
601
|
+
input[type="radio"] {
|
|
602
|
+
/* Remove default appearance */
|
|
603
|
+
appearance: none;
|
|
604
|
+
-webkit-appearance: none;
|
|
605
|
+
-moz-appearance: none;
|
|
606
|
+
|
|
607
|
+
/* Size and positioning */
|
|
608
|
+
width: 20px;
|
|
609
|
+
height: 20px;
|
|
610
|
+
margin-right: 8px;
|
|
611
|
+
|
|
612
|
+
/* Dark theme styling */
|
|
613
|
+
background-color: #2a2a2a;
|
|
614
|
+
border: 2px solid #4a4a4a;
|
|
615
|
+
border-radius: 50%;
|
|
616
|
+
|
|
617
|
+
/* Smooth transitions */
|
|
618
|
+
transition: all 0.2s ease;
|
|
619
|
+
cursor: pointer;
|
|
620
|
+
|
|
621
|
+
/* Positioning for the inner dot */
|
|
622
|
+
position: relative;
|
|
623
|
+
vertical-align: middle;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/* Hover state */
|
|
627
|
+
input[type="radio"]:hover {
|
|
628
|
+
border-color: #6366f1;
|
|
629
|
+
box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/* Checked state */
|
|
633
|
+
input[type="radio"]:checked {
|
|
634
|
+
background-color: #6366f1;
|
|
635
|
+
border-color: #6366f1;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
/* Inner dot when checked */
|
|
639
|
+
input[type="radio"]:checked::after {
|
|
640
|
+
content: '';
|
|
641
|
+
position: absolute;
|
|
642
|
+
top: 50%;
|
|
643
|
+
left: 50%;
|
|
644
|
+
transform: translate(-50%, -50%);
|
|
645
|
+
width: 8px;
|
|
646
|
+
height: 8px;
|
|
647
|
+
background-color: white;
|
|
648
|
+
border-radius: 50%;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/* Focus state for accessibility */
|
|
652
|
+
input[type="radio"]:focus {
|
|
653
|
+
outline: none;
|
|
654
|
+
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/* Disabled state */
|
|
658
|
+
input[type="radio"]:disabled {
|
|
659
|
+
opacity: 0.5;
|
|
660
|
+
cursor: not-allowed;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
input[type="radio"]:disabled:hover {
|
|
664
|
+
border-color: #4a4a4a;
|
|
665
|
+
box-shadow: none;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
|
|
@@ -3,6 +3,7 @@ html, body {
|
|
|
3
3
|
color: #f0f0f0;
|
|
4
4
|
padding: 5px 5px;
|
|
5
5
|
font-family: ui-sans-serif, -apple-system, system-ui, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, Helvetica, "Apple Color Emoji", Arial, "Segoe UI Emoji", "Segoe UI Symbol";
|
|
6
|
+
font-size: 16px;
|
|
6
7
|
display: flex;
|
|
7
8
|
flex-direction: column;
|
|
8
9
|
height: 100%;
|