[codex] add customizable profile avatars (#870)

* add customizable profile avatars

* keep profile avatar visible when sidebar collapses

* simplify collapsed profile avatar styling

* force managed gateway startup in docker

* limit gateway autostart to active profile

* restore all profile gateway autostart

* fix managed gateway runtime detection
This commit is contained in:
ekko
2026-05-20 14:15:01 +08:00
committed by GitHub
parent 663afb61ff
commit c90eba226d
27 changed files with 892 additions and 94 deletions
+14
View File
@@ -528,6 +528,20 @@ jobTriggered: 'Job ausgelost',
hasEnv: 'Hat .env',
hasSoulMd: 'Hat soul.md',
noProfiles: 'Keine Profile gefunden. Erstellen Sie eines, um zu beginnen.',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
},
// Logs
+14
View File
@@ -695,6 +695,20 @@ export default {
hasEnv: 'Has .env',
hasSoulMd: 'Has soul.md',
noProfiles: 'No profiles found. Create one to get started.',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
runtime: {
activeProfile: 'Active: {name}',
bridgeWorker: 'Bridge worker',
+14
View File
@@ -528,6 +528,20 @@ jobTriggered: 'Job ejecutado',
hasEnv: 'Tiene .env',
hasSoulMd: 'Tiene soul.md',
noProfiles: 'No se encontraron perfiles. Crea uno para comenzar.',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
},
// Logs
+14
View File
@@ -528,6 +528,20 @@ jobTriggered: 'Job declenche',
hasEnv: 'A un .env',
hasSoulMd: 'A un soul.md',
noProfiles: 'Aucun profil trouve. Creez-en un pour commencer.',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
},
// Logs
+14
View File
@@ -528,6 +528,20 @@ export default {
hasEnv: '.env あり',
hasSoulMd: 'soul.md あり',
noProfiles: 'プロファイルがありません。作成して始めましょう。',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
},
// ログ
+14
View File
@@ -528,6 +528,20 @@ export default {
hasEnv: '.env 있음',
hasSoulMd: 'soul.md 있음',
noProfiles: '프로필이 없습니다. 새로 만들어 시작하세요.',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
},
// 로그
+14
View File
@@ -528,6 +528,20 @@ jobTriggered: 'Job acionado',
hasEnv: 'Tem .env',
hasSoulMd: 'Tem soul.md',
noProfiles: 'Nenhum perfil encontrado. Crie um para comecar.',
avatar: {
title: 'Custom Avatar',
customize: 'Avatar',
upload: 'Upload Image',
random: 'Randomize',
reset: 'Use Default',
hint: 'PNG, JPEG, or WebP. Max 1MB.',
invalidType: 'Please choose a PNG, JPEG, or WebP image',
tooLarge: 'Avatar image must be 1MB or smaller',
saveSuccess: 'Avatar saved',
saveFailed: 'Failed to save avatar',
resetSuccess: 'Default avatar restored',
resetFailed: 'Failed to restore default avatar',
},
},
// Logs
+14
View File
@@ -675,6 +675,20 @@ export default {
hasEnv: '有 .env',
hasSoulMd: '有 soul.md',
noProfiles: '目前無設定檔,建立一個開始吧。',
avatar: {
title: '自訂頭像',
customize: '頭像',
upload: '上傳圖片',
random: '隨機產生',
reset: '恢復預設',
hint: '支援 PNG、JPEG、WebP,最大 1MB',
invalidType: '請選擇 PNG、JPEG 或 WebP 圖片',
tooLarge: '頭像圖片不能超過 1MB',
saveSuccess: '頭像已儲存',
saveFailed: '儲存頭像失敗',
resetSuccess: '已恢復預設頭像',
resetFailed: '恢復預設頭像失敗',
},
},
// 日誌
+14
View File
@@ -687,6 +687,20 @@ export default {
hasEnv: '有 .env',
hasSoulMd: '有 soul.md',
noProfiles: '暂无配置,创建一个开始吧。',
avatar: {
title: '自定义头像',
customize: '头像',
upload: '上传图片',
random: '随机生成',
reset: '恢复默认',
hint: '支持 PNG、JPEG、WebP,最大 1MB',
invalidType: '请选择 PNG、JPEG 或 WebP 图片',
tooLarge: '头像图片不能超过 1MB',
saveSuccess: '头像已保存',
saveFailed: '保存头像失败',
resetSuccess: '已恢复默认头像',
resetFailed: '恢复默认头像失败',
},
runtime: {
activeProfile: '当前:{name}',
bridgeWorker: '桥接状态',