Files
kefu/deploy/recognition-audit-20260916/config_probe.py
T
2026-09-21 10:34:06 +08:00

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')