Some checks failed
Beta Release / beta (push) Has been cancelled
feat(shell): real terminal with xterm.js + PTY over WebSocket Replace fake shell input with a full PTY-backed terminal using xterm.js. Apps like btop, vim, htop now work. AI chat panel is always visible. Backend: - Add WebSocket handler /api/ws/terminal with creack/pty - Allocate real pseudo-terminal with TERM=xterm-256color - Bidirectional I/O + dynamic resize via pty.Setsize - Skip JSON headers on /api/ws/* paths for WebSocket upgrade Frontend: - Integrate xterm.js with FitAddon and WebLinksAddon - Cyberpunk color theme matching app design - ResizeObserver for automatic terminal resizing - AI assistant panel always visible (340px, no toggle) - Connection status indicator (green/red dot) Dependencies: - Go: github.com/gorilla/websocket, github.com/creack/pty/v2 - npm: @xterm/xterm, @xterm/addon-fit, @xterm/addon-web-links 💘 Generated with Crush Assisted-by: GLM-5.1 via Crush <crush@charm.land>
118 lines
3.8 KiB
JavaScript
118 lines
3.8 KiB
JavaScript
const fr = {
|
|
tabs: {
|
|
dashboard: 'Tableau de bord',
|
|
studio: 'Studio',
|
|
shell: 'Terminal',
|
|
config: 'Configuration',
|
|
},
|
|
|
|
header: {
|
|
toolsInstalled: '{count} outils install\u00e9s',
|
|
updatesAvailable: 'Mises \u00e0 jour disponibles',
|
|
upToDate: '\u00c0 jour',
|
|
},
|
|
|
|
statusbar: {
|
|
switchWindow: 'Changer de fen\u00eatre',
|
|
sendMessage: 'Envoyer le message',
|
|
newLine: 'Nouvelle ligne',
|
|
runCommand: 'Ex\u00e9cuter',
|
|
commandHistory: 'Historique',
|
|
},
|
|
|
|
dashboard: {
|
|
systemOverview: 'Vue d\u2019ensemble du syst\u00e8me',
|
|
tools: 'outils',
|
|
installed: 'Install\u00e9',
|
|
missing: 'Manquant',
|
|
quickActions: 'Actions rapides',
|
|
installMissing: 'Installer les manquants',
|
|
checkUpdates: 'V\u00e9rifier les mises \u00e0 jour',
|
|
rescanSystem: 'Rescanner le syst\u00e8me',
|
|
configureMCP: 'Configurer MCP',
|
|
updates: 'Mises \u00e0 jour',
|
|
update: 'Mise \u00e0 jour',
|
|
latest: '\u00c0 jour',
|
|
activityLog: 'Journal d\u2019activit\u00e9',
|
|
noUpdateData: 'Aucune donn\u00e9e de mise \u00e0 jour.',
|
|
installing: 'Installation de {count} outils...',
|
|
installStarted: 'Installation lanc\u00e9e. Rescan en cours...',
|
|
done: 'Termin\u00e9.',
|
|
scanComplete: 'Scan termin\u00e9.',
|
|
updatesCount: '{count} mises \u00e0 jour disponibles.',
|
|
allUpToDate: 'Tous les outils sont \u00e0 jour.',
|
|
mcpConfigured: 'MCP configur\u00e9.',
|
|
},
|
|
|
|
studio: {
|
|
welcome: 'Bienvenue dans Studio ! Discutez avec votre assistant IA ici.',
|
|
welcomeNew: 'Bienvenue dans Muyue Studio. Je suis votre orchestrateur IA. D\u00e9crivez votre projet et je cr\u00e9erai un plan, proposerai des agents, et suivrai chaque \u00e9tape.',
|
|
configureHint: 'Configurez les agents et workflows depuis la barre lat\u00e9rale.',
|
|
chat: 'Chat',
|
|
agents: 'Agents',
|
|
workflows: 'Workflows',
|
|
placeholder: 'Tapez un message... (Entr\u00e9e pour envoyer)',
|
|
placeholderNew: 'D\u00e9crivez votre projet ou posez une question...',
|
|
send: 'Envoyer',
|
|
commands: 'Commandes',
|
|
planGoal: '/plan <objectif>',
|
|
help: '/help',
|
|
activeAgents: 'Agents actifs',
|
|
crush: 'Crush',
|
|
claudeCode: 'Claude Code',
|
|
stopped: 'Arr\u00eat\u00e9',
|
|
inactive: 'Inactif',
|
|
noWorkflow: 'Aucun workflow actif.',
|
|
usePlan: 'Utilisez /plan <objectif> dans le chat pour d\u00e9marrer.',
|
|
noResponse: 'Pas de r\u00e9ponse',
|
|
error: 'Erreur',
|
|
inputHint: 'Entr\u00e9e pour envoyer, Shift+Entr\u00e9e pour un retour \u00e0 la ligne',
|
|
context: 'Contexte',
|
|
plans: 'Plans',
|
|
activity: 'Activit\u00e9',
|
|
noPlansYet: 'Aucun plan d\u00e9tect\u00e9. Demandez \u00e0 l\u2019IA de cr\u00e9er un plan.',
|
|
noAgentsYet: 'Aucun agent mentionn\u00e9.',
|
|
planDetail: 'D\u00e9tail du plan',
|
|
steps: '\u00e9tapes',
|
|
you: 'Vous',
|
|
mentioned: 'mentionn\u00e9',
|
|
},
|
|
|
|
shell: {
|
|
terminal: 'Terminal',
|
|
hideAi: 'Masquer IA',
|
|
aiAssistant: 'Assistant IA',
|
|
aiWelcome: 'Je connais votre syst\u00e8me sur le bout des doigts. Demandez-moi n\u2019importe quoi.',
|
|
askAi: 'Demander \u00e0 l\u2019IA...',
|
|
send: 'Envoyer',
|
|
noResponse: 'Pas de r\u00e9ponse',
|
|
error: 'Erreur',
|
|
},
|
|
|
|
config: {
|
|
profile: 'Profil',
|
|
name: 'Nom',
|
|
pseudo: 'Pseudo',
|
|
email: 'Email',
|
|
editor: '\u00c9diteur',
|
|
shell: 'Shell',
|
|
defaultAi: 'IA par d\u00e9faut',
|
|
languages: 'Langages',
|
|
loadingProfile: 'Chargement du profil...',
|
|
notSet: 'Non d\u00e9fini',
|
|
aiProviders: 'Fournisseurs IA',
|
|
active: 'Actif',
|
|
keyConfigured: 'Cl\u00e9 configur\u00e9e',
|
|
noKey: 'Pas de cl\u00e9',
|
|
theme: 'Th\u00e8me',
|
|
skills: 'Comp\u00e9tences',
|
|
noSkills: 'Aucune comp\u00e9tence install\u00e9e.',
|
|
runSkillsInit: 'Ex\u00e9cutez muyue skills init',
|
|
language: 'Langue',
|
|
keyboardLayout: 'Disposition du clavier',
|
|
target: 'Cible',
|
|
},
|
|
}
|
|
|
|
export default fr
|