/** * Hermes Agent 配置编辑 */ import { t } from '../../../lib/i18n.js' import { api } from '../../../lib/tauri-api.js' import { toast } from '../../../components/toast.js' import { humanizeError } from '../../../lib/humanize-error.js' export function render() { const el = document.createElement('div') el.className = 'page' el.dataset.engine = 'hermes' let yaml = '' let loading = true let saving = false let error = '' function esc(value) { return String(value || '') .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') } function draw() { el.innerHTML = `
${t('engine.hermesConfigEyebrow')}

${t('engine.hermesConfigTitle')}

~/.hermes/config.yaml
config.yaml
${saving ? t('engine.hermesConfigStatusSaving') : loading ? t('engine.hermesConfigStatusLoading') : t('engine.hermesConfigStatusReady')}
${error ? `
${esc(error)}
` : ''}
` el.querySelector('#hm-config-reload')?.addEventListener('click', load) el.querySelector('#hm-config-save')?.addEventListener('click', save) } async function load() { loading = true error = '' draw() try { const data = await api.hermesConfigRawRead() yaml = data?.yaml || '' } catch (err) { error = humanizeError(err, t('engine.hermesConfigLoadFailed') || 'Load config failed') } finally { loading = false draw() } } async function save() { const textarea = el.querySelector('#hm-config-yaml') yaml = textarea?.value || '' saving = true error = '' draw() try { await api.hermesConfigRawWrite(yaml) toast(t('engine.hermesConfigSaveSuccess'), 'success') } catch (err) { error = humanizeError(err, t('engine.hermesConfigSaveFailed') || 'Save failed') toast(error, 'error') } finally { saving = false draw() } } draw() load() return el }