Backend: - Chat, Message, ContextFile models + Alembic migration - Chat CRUD with per-user limit enforcement (max_chats) - SSE streaming endpoint: saves user message, streams Claude response, saves assistant message with token usage metadata - Context assembly: primary context file + conversation history - Admin context CRUD (GET/PUT with version tracking) - Anthropic SDK integration with async streaming - Chat ownership isolation (users can't access each other's chats) Frontend: - Chat page with sidebar chat list + main chat window - Real-time SSE streaming via fetch + ReadableStream - Message bubbles with Markdown rendering (react-markdown) - Auto-growing message input (Enter to send, Shift+Enter newline) - Zustand chat store for streaming state management - Admin primary context editor with unsaved changes warning - Updated routing: /chat, /chat/:chatId, /admin/context - Enabled Chat and Admin sidebar navigation - English + Russian translations for all new UI Infrastructure: - nginx: disabled proxy buffering for SSE support - Added ANTHROPIC_API_KEY and CLAUDE_MODEL to config Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
80 lines
2.4 KiB
JSON
80 lines
2.4 KiB
JSON
{
|
|
"auth": {
|
|
"login": "Log In",
|
|
"register": "Sign Up",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"confirmPassword": "Confirm Password",
|
|
"username": "Username",
|
|
"fullName": "Full Name",
|
|
"rememberMe": "Remember me",
|
|
"submit": "Submit",
|
|
"noAccount": "Don't have an account?",
|
|
"hasAccount": "Already have an account?",
|
|
"loginTitle": "Welcome Back",
|
|
"loginSubtitle": "Sign in to your account",
|
|
"registerTitle": "Create Account",
|
|
"registerSubtitle": "Get started with your personal AI assistant",
|
|
"errors": {
|
|
"invalidCredentials": "Invalid email or password",
|
|
"emailExists": "User with this email or username already exists",
|
|
"passwordMismatch": "Passwords do not match",
|
|
"passwordMinLength": "Password must be at least 8 characters",
|
|
"usernameFormat": "Username must be 3-50 characters (letters, numbers, _ or -)",
|
|
"required": "This field is required"
|
|
}
|
|
},
|
|
"layout": {
|
|
"dashboard": "Dashboard",
|
|
"chats": "Chats",
|
|
"documents": "Documents",
|
|
"memory": "Memory",
|
|
"notifications": "Notifications",
|
|
"profile": "Profile",
|
|
"logout": "Log Out",
|
|
"settings": "Settings",
|
|
"admin": "Admin",
|
|
"users": "Users",
|
|
"context": "Context",
|
|
"skills": "Skills"
|
|
},
|
|
"dashboard": {
|
|
"welcome": "Welcome, {{name}}",
|
|
"subtitle": "Your personal AI health assistant"
|
|
},
|
|
"chat": {
|
|
"new_chat": "New Chat",
|
|
"no_chats": "No chats yet. Create one to get started.",
|
|
"no_messages": "Start a conversation...",
|
|
"select_chat": "Select a chat to start messaging",
|
|
"type_message": "Type a message...",
|
|
"send": "Send",
|
|
"archive": "Archive",
|
|
"unarchive": "Unarchive",
|
|
"delete_confirm": "Are you sure you want to delete this chat?",
|
|
"limit_reached": "Chat limit reached",
|
|
"streaming": "AI is thinking..."
|
|
},
|
|
"admin": {
|
|
"context_editor": "Primary Context Editor",
|
|
"context_placeholder": "Enter the system prompt for the AI assistant...",
|
|
"save": "Save",
|
|
"saved": "Saved",
|
|
"unsaved_changes": "Unsaved changes",
|
|
"version": "Version",
|
|
"characters": "characters"
|
|
},
|
|
"common": {
|
|
"loading": "Loading...",
|
|
"error": "An error occurred",
|
|
"notFound": "Page not found",
|
|
"goHome": "Go to Dashboard",
|
|
"save": "Save",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"edit": "Edit",
|
|
"create": "Create",
|
|
"search": "Search"
|
|
}
|
|
}
|