50 lines
2.4 KiB
Python
50 lines
2.4 KiB
Python
"""Read-only, allowlisted local/remote configuration diagnostics; never print secrets."""
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
from urllib.parse import urlsplit
|
|
|
|
root = Path(sys.argv[1]).resolve()
|
|
sys.path.insert(0, str(root))
|
|
import backend_client
|
|
import ai_config
|
|
|
|
settings = backend_client.load_settings()
|
|
gateway = settings.get('gateway') or {}
|
|
def endpoint(value):
|
|
parts = urlsplit(str(value or ''))
|
|
return {'scheme': parts.scheme, 'host': parts.hostname, 'port': parts.port, 'path': parts.path}
|
|
def knowledge(value):
|
|
value = value if isinstance(value, dict) else {}
|
|
return {key: value[key] for key in ('enabled', 'published', 'draft', 'approved', 'stale', 'retrieval_mode') if key in value}
|
|
token = backend_client.desktop_access_token()
|
|
result = {
|
|
'root': str(root), 'server': endpoint(settings.get('server_url')),
|
|
'gateway': {'enabled': bool(gateway.get('enabled')), 'endpoint': endpoint(gateway.get('url'))},
|
|
'desktop_token_available': bool(token),
|
|
'knowledge_cached': knowledge(settings.get('knowledge_summary')),
|
|
'last_sync_at': settings.get('last_sync_at'),
|
|
'ai': {name: getattr(ai_config, name, None) for name in (
|
|
'AI_ENABLED', 'AI_CONTEXT_ENABLED', 'AI_CONTEXT_MAX_ROUNDS', 'AI_MCP_ENABLED',
|
|
'AI_MODEL', 'AI_API_TYPE', 'AI_VISION_ENABLED', 'AI_UI_GUARD_ENABLED')},
|
|
}
|
|
if '--remote' in sys.argv and token:
|
|
try:
|
|
status, response = backend_client._request(
|
|
'GET', settings['server_url'], backend_client.DESKTOP_CONFIG_PATHS[0], token=token, timeout=8.0)
|
|
config = response.get('config') or {}
|
|
remote_gateway = response.get('gateway') or {}
|
|
result['remote'] = {'http_status': status,
|
|
'knowledge': knowledge(response.get('knowledge')),
|
|
'gateway_enabled': remote_gateway.get('enabled'),
|
|
'context': {key: config.get(key) for key in ('AI_CONTEXT_ENABLED','AI_CONTEXT_MAX_ROUNDS','AI_MCP_ENABLED')},
|
|
'model_count': len(response.get('models') or []),
|
|
'model_protocols': [{key: model.get(key) for key in ('id','kind','model','enabled')} for model in response.get('models') or []],
|
|
'roles': response.get('roles')}
|
|
except Exception as exc:
|
|
result['remote'] = {'error_type': type(exc).__name__}
|
|
text = json.dumps(result, ensure_ascii=False, indent=2)
|
|
print(text)
|
|
if '--output' in sys.argv:
|
|
Path(sys.argv[sys.argv.index('--output')+1]).write_text(text, encoding='utf-8')
|