@realtimex/email-automator 2.22.1 → 2.22.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/src/lib/setup-knowledge.generated.ts +2 -1
- package/api/src/routes/agent.ts +1 -0
- package/api/src/services/AgentService.ts +2 -0
- package/api/src/services/RAGService.ts +26 -3
- package/dist/api/src/lib/setup-knowledge.generated.js +2 -1
- package/dist/api/src/routes/agent.js +1 -0
- package/dist/api/src/services/AgentService.js +1 -0
- package/dist/api/src/services/RAGService.js +23 -4
- package/dist/assets/es-NQpkAluz.js +49 -0
- package/dist/assets/fr-Dt1serdG.js +49 -0
- package/dist/assets/{index-y96M9yNt.js → index-DR7Pa16U.js} +51 -41
- package/dist/assets/ja-46nRzsm5.js +49 -0
- package/dist/assets/ko-DUNCzc8F.js +49 -0
- package/dist/assets/vi-CA9x3uPA.js +49 -0
- package/dist/index.html +1 -1
- package/docs/README.md +9 -18
- package/docs/en/README.md +23 -0
- package/docs/{marketplace → en/marketplace}/listing.md +1 -1
- package/docs/{user-guide → en/user-guide}/GETTING-STARTED.md +2 -1
- package/docs/en/user-guide/GLOSSARY.md +163 -0
- package/docs/es/README.md +23 -0
- package/docs/es/marketplace/listing.md +34 -0
- package/docs/es/user-guide/ACCOUNT.md +52 -0
- package/docs/es/user-guide/AUTOMATION.md +93 -0
- package/docs/es/user-guide/CONFIGURATION.md +61 -0
- package/docs/es/user-guide/DASHBOARD.md +71 -0
- package/docs/es/user-guide/GETTING-STARTED.md +61 -0
- package/docs/es/user-guide/GLOSSARY.md +160 -0
- package/docs/es/user-guide/TROUBLESHOOTING.md +65 -0
- package/docs/fr/README.md +23 -0
- package/docs/fr/marketplace/listing.md +34 -0
- package/docs/fr/user-guide/ACCOUNT.md +52 -0
- package/docs/fr/user-guide/AUTOMATION.md +93 -0
- package/docs/fr/user-guide/CONFIGURATION.md +61 -0
- package/docs/fr/user-guide/DASHBOARD.md +71 -0
- package/docs/fr/user-guide/GETTING-STARTED.md +61 -0
- package/docs/fr/user-guide/GLOSSARY.md +160 -0
- package/docs/fr/user-guide/TROUBLESHOOTING.md +65 -0
- package/docs/ja/README.md +23 -0
- package/docs/ja/marketplace/listing.md +34 -0
- package/docs/ja/user-guide/ACCOUNT.md +52 -0
- package/docs/ja/user-guide/AUTOMATION.md +93 -0
- package/docs/ja/user-guide/CONFIGURATION.md +61 -0
- package/docs/ja/user-guide/DASHBOARD.md +71 -0
- package/docs/ja/user-guide/GETTING-STARTED.md +61 -0
- package/docs/ja/user-guide/GLOSSARY.md +160 -0
- package/docs/ja/user-guide/TROUBLESHOOTING.md +65 -0
- package/docs/ko/README.md +23 -0
- package/docs/ko/marketplace/listing.md +34 -0
- package/docs/ko/user-guide/ACCOUNT.md +52 -0
- package/docs/ko/user-guide/AUTOMATION.md +93 -0
- package/docs/ko/user-guide/CONFIGURATION.md +61 -0
- package/docs/ko/user-guide/DASHBOARD.md +71 -0
- package/docs/ko/user-guide/GETTING-STARTED.md +61 -0
- package/docs/ko/user-guide/GLOSSARY.md +160 -0
- package/docs/ko/user-guide/TROUBLESHOOTING.md +65 -0
- package/docs/vi/README.md +23 -0
- package/docs/vi/marketplace/listing.md +34 -0
- package/docs/vi/user-guide/ACCOUNT.md +52 -0
- package/docs/vi/user-guide/AUTOMATION.md +93 -0
- package/docs/vi/user-guide/CONFIGURATION.md +61 -0
- package/docs/vi/user-guide/DASHBOARD.md +71 -0
- package/docs/vi/user-guide/GETTING-STARTED.md +61 -0
- package/docs/vi/user-guide/GLOSSARY.md +160 -0
- package/docs/vi/user-guide/TROUBLESHOOTING.md +65 -0
- package/package.json +1 -1
- package/scripts/build-setup-knowledge.ts +1 -1
- package/scripts/ingest-knowledge-rag.ts +42 -26
- package/supabase/migrations/20260203150000_add_lang_to_knowledge_chunks.sql +49 -0
- package/dist/assets/es-BySeIenb.js +0 -4
- package/dist/assets/fr-Cj4xUTOj.js +0 -4
- package/dist/assets/ja-DeBZHkY-.js +0 -4
- package/dist/assets/ko-CHMiWHbo.js +0 -4
- package/dist/assets/vi-B4Rp8hRI.js +0 -4
- /package/docs/{user-guide → en/user-guide}/ACCOUNT.md +0 -0
- /package/docs/{user-guide → en/user-guide}/AUTOMATION.md +0 -0
- /package/docs/{user-guide → en/user-guide}/CONFIGURATION.md +0 -0
- /package/docs/{user-guide → en/user-guide}/DASHBOARD.md +0 -0
- /package/docs/{user-guide → en/user-guide}/TROUBLESHOOTING.md +0 -0
|
@@ -6,6 +6,7 @@ export const SETUP_KNOWLEDGE: Record<string, string> = {
|
|
|
6
6
|
"AUTOMATION.md": "# Automation & Auto-Pilot\n\nThe **Auto-Pilot** tab is the central hub for managing your AI agent's behavior. It consolidates \"System Rules\" (global toggles) and a library of **26 built-in intelligent rules** alongside your own \"Custom Rules.\"\n\n---\n\n## 🛡️ Built-in System Rules\n\nEmail Automator comes with 26 pre-configured rules designed by AI experts to handle common inbox challenges. These are organized into functional categories to help you stay organized.\n\n### 📧 Email Organization\n* **Newsletter Sweeper**: Auto-archives newsletters and marketing emails to keep your inbox clean.\n* **Receipt Organizer**: Automatically files receipts and order confirmations.\n* **CC Organizer**: Labels emails where you are CC'd for quick triage.\n* **Cold Outreach Filter**: Moves cold sales emails to a separate folder.\n* **Social Noise**: Minimizes LinkedIn and social network notifications.\n* **Stack Overflow Digests**: Auto-archives technical digests unless they require immediate attention.\n\n### 🚨 Priority & Alerts\n* **VIP Urgent Messages**: Stars urgent messages from key stakeholders (CEOs, Board members).\n* **Critical Alerts**: Surfaces production incidents and P0/P1 critical alerts.\n* **Urgent Support Tickets**: Highlights high-priority customer issues needing immediate action.\n\n### 💻 Development\n* **GitHub Mentions**: Tracks when you are specifically mentioned in Pull Requests or Issues.\n* **CI/CD Failures**: Highlights build and deployment failures from tools like CircleCI or GitHub Actions.\n* **Code Review Requests**: Organizes incoming requests for code reviews.\n* **Dependabot Noise**: Auto-archives low-priority dependency updates while keeping security alerts visible.\n* **Monitoring Alerts**: Organizes non-urgent monitoring and logging alerts.\n\n### 💼 Sales & Business\n* **Hot Leads**: Prioritizes high-intent prospect replies based on positive sentiment.\n* **Follow-up Reminders**: Tracks prospect responses that specifically request a follow-up.\n* **Referrals & Intros**: Ensures you never miss a warm introduction or referral.\n* **Contracts & Proposals**: Highlights important contract communications and legal documents.\n* **Objections & Concerns**: Flags emails expressing concerns or hesitation for careful handling.\n* **Nurture Campaigns**: Archives automated drip campaign emails to prioritize personal replies.\n* **Financial Updates**: Keeps revenue reports and quarterly budget updates easily accessible.\n\n### ⚙️ Operations\n* **Internal Requests**: Organizes cross-team requests and action items.\n* **Vendor Communications**: Tracks invoices, shipments, and vendor-related updates.\n* **System Alerts**: Organizes infrastructure and system notifications.\n* **Meeting Invites**: Separates calendar invites for easier scheduling management.\n* **Weekly Reports**: Auto-files regular status reports and progress updates.\n\n---\n\n## 🛠️ Building Custom Rules\n\nCustom rules allow you to create precise, AI-driven workflows. You can create, edit, and manage these directly within the **Auto-Pilot** tab.\n\n### 1. Conditions (The \"If\")\nYou can mix and match metadata and AI-powered conditions:\n* **AI Insights**: Category (e.g., Newsletter, Receipt, Personal), Sentiment (Positive, Negative, Neutral), or Priority (High, Medium, Low).\n* **Metadata**: Sender domain (e.g., `github.com`), specific keywords in the subject, or sender's name.\n* **Retention Filter**: \"Only act if the email is older than X days.\" This is perfect for cleaning up old newsletters or notifications.\n\n### 2. Actions (The \"Then\")\nChoose what happens when an email matches your conditions:\n* **Archive / Delete**: Keep your inbox clean automatically.\n* **Star / Flag**: Highlight important items for manual review.\n* **Draft**: The most powerful action. It tells the AI to prepare a reply.\n\n---\n\n## ✍️ Smart Context & Ghostwriting\n\nWhen you use the **Draft** action, you can provide the AI with specific instructions to ensure the reply matches your needs:\n\n* **Ghostwriting Instructions**: Tell the AI *how* to reply (e.g., \"Be polite but firm in declining the invitation,\" or \"Ask for their availability next Tuesday\").\n* **Rule Attachments**: You can upload standard documents (like a pricing sheet or a bio) that the AI will automatically include as attachments whenever this rule triggers a draft.\n\n---\n\n## 🚀 The Auto-Pilot Tab\n\nThe **Auto-Pilot** tab provides a bird's-eye view of your automation engine.\n* **Grouped View**: Rules are organized by their primary intent.\n* **Quick Toggles**: Enable or disable rules instantly without deleting them.\n* **Status Indicators**: See which rules are currently active and how many emails they've processed.\n\n---\n\n## 💡 Best Practices\n\n* **Start Passive**: Set your first rules to **Star** or **Archive** instead of **Delete** until you are confident in the AI's categorization.\n* **Use Retention for Noise**: Use a rule like: `If Category = Newsletter AND Age > 30 Days THEN Delete`. This keeps your \"read\" newsletters from cluttering your archive forever.\n* **Refine with Feedback**: If a rule isn't matching correctly, use the **Feedback** icon on the Dashboard to improve the AI's understanding of that specific email type.\n\n---\n\n**Next Step:** [Account & Security Management](./ACCOUNT.md)\n",
|
|
7
7
|
"CONFIGURATION.md": "# Configuration\n\nThe **Configuration** tab is the command center of Email Automator. Here, you connect your email providers, define your AI's behavior, and set up the rules that drive automation.\n\n---\n\n## 📧 Email Accounts (BYOK)\n\nEmail Automator follows a **\"Bring Your Own Key\" (BYOK)** model. You provide your own OAuth credentials, ensuring that your data access remains entirely under your control.\n\n### 🔴 Gmail Setup (OAuth 2.0)\n1. **Google Cloud Console**: Create a project and enable the **Gmail API**.\n2. **Consent Screen**: Configure the OAuth consent screen and add your email as a **Test User**.\n3. **Credentials**: Create an **OAuth 2.0 Client ID** (Type: Web Application).\n * **Authorized Redirect URI**: `https://<your-project-ref>.supabase.co/functions/v1/auth-gmail/callback`\n4. **Connect**: In Email Automator, click **Connect Gmail**.\n5. **Authorize**: Paste your Client ID and Secret (or upload the JSON), then follow the link to authorize your account.\n\n### 🔵 Outlook Setup (Device Code)\n1. **Azure Portal**: Register a new application in **App Registrations**.\n2. **Account Type**: Select \"Accounts in any organizational directory and personal Microsoft accounts\".\n3. **Authentication**: Ensure \"Allow public client flows\" is set to **Yes**.\n4. **Connect**: In Email Automator, click **Connect Outlook** and enter your **Client ID**.\n5. **Authorize**: Follow the **Device Code** prompt in your browser to complete the sign-in.\n\n---\n\n## 📅 Sync Scope & Limits\n\nBefore starting your first sync, configure the boundaries to ensure performance and cost-efficiency:\n\n* **Sync From**: Choose the starting date (e.g., \"From Now\" or a specific historical date).\n* **Max Emails**: Set the maximum number of emails to process in a single batch (Default: 50).\n* **Sync Interval**: Define how often the background scheduler should check for new mail (e.g., every 15 minutes).\n\n> [!TIP]\n> **Start Small**: For your first run, we recommend setting \"Sync From\" to \"Now\" and \"Max Emails\" to 10-20 to verify your rules are working as expected.\n\n---\n\n## 🤖 Automation & Auto-Pilot\n\nManagement of your AI's behavior—including building custom rules, toggling system automations, and setting retention policies—has been consolidated into the **[Auto-Pilot](./AUTOMATION.md)** tab.\n\n---\n\n## 🧠 AI & System Settings\n\n### Provider Configuration\nEmail Automator detects available models via **RealTimeX Desktop**.\n* **LLM Provider**: Choose your preferred AI engine (e.g., OpenAI, Anthropic, or local models).\n* **Embedding Model**: Used for the RAG (Retrieval-Augmented Generation) system to help the AI understand your specific context.\n\n### Voice & Accessibility (TTS)\nEnable **Text-to-Speech** to have the AI read summaries or important alerts aloud.\n* **Auto-Speak**: Automatically read high-priority notifications.\n* **Voice Profile**: Choose from various high-quality voices available through RealTimeX.\n\n---\n\n**Next Step:** [Monitoring the Dashboard](./DASHBOARD.md)\n",
|
|
8
8
|
"DASHBOARD.md": "# Dashboard & Live Activity\n\nThe **Dashboard** is your primary interface for monitoring your AI agent’s activity and managing your analyzed inbox. It is designed to provide complete transparency into how the AI thinks and acts.\n\n---\n\n## 📊 The Analysis Feed\n\nAs the AI processes your inbox, emails appear in the feed with real-time status updates and intelligent insights.\n\n* **Smart Search**: Quickly find emails by keyword or sender.\n* **AI Filters**: Filter your view by Category (e.g., Newsletter, Personal), Sentiment, or Priority.\n* **Dynamic Sorting**: Toggle between the time an email was *received* and the time it was *processed* by the AI.\n\n### 📌 Email Detail Sidebar\nClicking any email card opens a detailed side panel containing:\n* **AI Summary**: A concise overview of the email's content.\n* **Key Points**: Bulleted highlights extracted by the AI.\n* **Draft Preview**: If a draft reply was generated, you can review it here before it's sent.\n* **Quick Links**: Jump directly to the original email in your Gmail or Outlook web interface.\n\n---\n\n## 🛡️ Trust & Transparency\n\nEmail Automator is built on the principle of **\"Glass Box AI.\"** You should always know *why* an action was taken.\n\n### 📟 Live Activity Terminal\nClick the **Live Activity** button in the bottom-right corner to open the real-time processing feed.\n* **Thinking Logs**: Watch the AI analyze content, evaluate rules, and decide on actions.\n* **Technical Details**: See raw API calls, processing durations, and background sync statuses.\n* **Control**: You can manually stop an active sync directly from the terminal.\n\n### 🕵️ AI Trace\nClick the **Eye icon** on any email card to open the **AI Trace Modal**.\n* **Decision Logic**: View a step-by-step breakdown of why the AI assigned a specific category or priority.\n* **Raw Data**: See the exact prompt sent to the LLM and the raw JSON response it returned.\n* **Performance Stats**: Review token usage and processing time for that specific email.\n\n---\n\n## ⚡ Quick Actions\n\nTake control with one-click actions available on every email card:\n* 🗑️ **Delete / 📦 Archive**: Instant cleanup.\n* ⭐ **Star / Flag**: Mark important items for later.\n* 🔄 **Reprocess**: If you’ve updated your rules, you can ask the AI to analyze an email again.\n* 💬 **Feedback**: Help the AI learn by reporting incorrect categorizations or sentiment analysis.\n\n---\n\n## 🔔 Notifications & Feedback\n\nThe app uses multi-sensory feedback to keep you informed of background activity:\n* **Visual**: Live status badges and toast notifications.\n* **Audio**: Subtle, high-quality chimes for new emails, high-priority alerts, and sync completion.\n* **Haptic**: Physical feedback on supported devices.\n\n> **Note**: Sound and Haptic settings can be customized in [**Account Settings**](./ACCOUNT.md).\n\n---\n\n## 📈 Analytics & History\n\nStay informed about your agent's performance:\n* **Sync History**: View a log of recent sync runs, including the number of emails processed and any actions taken.\n* **Efficiency Stats**: See totals for automated deletions, archives, and drafts over time.\n\n---\n\n**Next Step:** [Creating Automation Rules](./AUTOMATION.md)\n",
|
|
9
|
-
"GETTING-STARTED.md": "# Getting Started\n\nWelcome to **Email Automator**, your AI-powered personal email assistant. This guide will help you set up the application using the **\"Bring Your Own Key\" (BYOK)** model, which ensures your data remains under your control within your own Supabase infrastructure.\n\n## 🛠 Prerequisites\n\nBefore you begin, ensure you have the following:\n\n1. **RealTimeX Desktop**: Installed and running. This is required for AI processing (LLMs) and Text-to-Speech (TTS) capabilities.\n2. **Supabase Account**: A free or paid account at [supabase.com](https://supabase.com).\n\n---\n\n## 🚀 Quick Setup with the Wizard\n\nThe built-in **Setup Wizard** is the recommended way to get started. It automates the technical heavy lifting.\n\n### 1. Purchase & Launch\n* Open **RealTimeX Desktop**.\n* Go to the **Marketplace** tab → **Local Apps**.\n* Search for **\"Email Automator\"** and purchase it (or activate if already owned).\n* Once purchased, click **Launch** from your Local Apps list.\n\n### 2. Run the Setup Wizard\nUpon first launch, the app will guide you through the initial configuration:\n\n* **Choose a Setup Path**:\n * **Managed Provisioning (Recommended)**: Provide a **Supabase Access Token**. The wizard will automatically create a new project, run database migrations, deploy Edge Functions, and ingest the initial knowledge base.\n * **Connect Existing Project**: Use an existing Supabase project by providing your **Project URL** and **Anon Key**. You can optionally provide an Access Token here to have the wizard run migrations for you.\n\n### 3. Create Your Account\nOnce the database is ready, you will be prompted to create your local user account and sign in to access the **Dashboard**.\n\n---\n\n## 🔍 Finding Your Supabase Credentials\n\nIf you choose to connect an existing project manually, you can find your credentials in the [Supabase Dashboard](https://supabase.com/dashboard):\n\n1. Select your project.\n2. Navigate to **Settings** → **API**.\n3. **Project URL**: Copy the URL found under \"Project URL\".\n4. **API Key**: Copy the **anon (public)** key under \"Project API keys\".\n\n> [!WARNING]\n> **Security Note**: Never use the `service_role` key. It has full administrative bypass privileges and should never be exposed in client-side applications.\n\n---\n\n## 🪪 Generating an Access Token\n\nAn Access Token allows the Setup Wizard to manage your Supabase projects (creation, migrations, function deployment) on your behalf.\n\n1. In your Supabase Dashboard, go to **Account** → **Access Tokens**.\n2. Click **Generate new token**, give it a name (e.g., \"Email Automator\"), and copy the result.\n3. Paste this token into the Setup Wizard when prompted.\n\n---\n\n**Next Step:** [Configure your Email Accounts](./CONFIGURATION.md)\n",
|
|
9
|
+
"GETTING-STARTED.md": "# Getting Started\n\nWelcome to **Email Automator**, your AI-powered personal email assistant. This guide will help you set up the application using the **\"Bring Your Own Key\" (BYOK)** model, which ensures your data remains under your control within your own Supabase infrastructure.\n\n## 🛠 Prerequisites\n\nBefore you begin, ensure you have the following:\n\n1. **RealTimeX Desktop**: Installed and running. This is required for AI processing (LLMs) and Text-to-Speech (TTS) capabilities.\n2. **Supabase Account**: A free or paid account at [supabase.com](https://supabase.com).\n\n---\n\n## 🚀 Quick Setup with the Wizard\n\nThe built-in **Setup Wizard** is the recommended way to get started. It automates the technical heavy lifting.\n\n### 1. Purchase & Launch\n* Open **RealTimeX Desktop**.\n* Go to the **Marketplace** tab → **Local Apps**.\n* Search for **\"Email Automator\"** and purchase it (or activate if already owned).\n* Once purchased, click **Launch** from your Local Apps list.\n\n### 2. Run the Setup Wizard\nUpon first launch, the app will guide you through the initial configuration:\n\n* **Choose a Setup Path**:\n * **Managed Provisioning (Recommended)**: Provide a **Supabase Access Token**. The wizard will automatically create a new project, run database migrations, deploy Edge Functions, and ingest the initial knowledge base.\n * **Connect Existing Project**: Use an existing Supabase project by providing your **Project URL** and **Anon Key**. You can optionally provide an Access Token here to have the wizard run migrations for you.\n\n### 3. Create Your Account\nOnce the database is ready, you will be prompted to create your local user account and sign in to access the **Dashboard**.\n\n---\n\n## 🔍 Finding Your Supabase Credentials\n\nIf you choose to connect an existing project manually, you can find your credentials in the [Supabase Dashboard](https://supabase.com/dashboard):\n\n1. Select your project.\n2. Navigate to **Settings** → **API**.\n3. **Project URL**: Copy the URL found under \"Project URL\".\n4. **API Key**: Copy the **anon (public)** key under \"Project API keys\".\n\n> [!WARNING]\n> **Security Note**: Never use the `service_role` key. It has full administrative bypass privileges and should never be exposed in client-side applications.\n\n---\n\n## 🪪 Generating an Access Token\n\nAn Access Token allows the Setup Wizard to manage your Supabase projects (creation, migrations, function deployment) on your behalf.\n\n1. In your Supabase Dashboard, go to **Account** → **Access Tokens**.\n2. Click **Generate new token**, give it a name (e.g., \"Email Automator\"), and copy the result.\n3. Paste this token into the Setup Wizard when prompted.\n\n---\n\n**Next Step:** [Configure your Email Accounts](./CONFIGURATION.md) \n**Glossary:** [Common Terms](./GLOSSARY.md)\n",
|
|
10
|
+
"GLOSSARY.md": "# Glossary\n\nDefinitions of common terms used in Email Automator and the Setup Wizard.\n\n## Supabase\nA backend platform that provides a hosted Postgres database, authentication, storage, and APIs. Email Automator uses Supabase as its database and auth layer.\n\n## BYOK (Bring Your Own Key)\nA setup model where you connect your own Supabase project instead of using a shared backend. This keeps your data in your own infrastructure.\n\n## Supabase Project ID\nThe unique identifier for your Supabase project (often shown in the project URL or settings).\n\n## Supabase Project URL\nThe base URL for your Supabase project, used by the app to connect to the database and APIs.\n\n## Anon Key (Public API Key)\nThe public API key for your Supabase project. It is safe for client-side use but still subject to Row Level Security (RLS).\n\n## Access Token\nA token from your Supabase account that lets the Setup Wizard create or manage projects on your behalf (used in Quick Start).\n\n## Managed Provisioning (Quick Start)\nThe Setup Wizard uses your Access Token to automatically create a Supabase project, apply migrations, deploy Edge Functions, and ingest the knowledge base.\n\n## Manual Sync (Connect Existing Project)\nYou connect an existing Supabase project by providing the Project URL and Anon Key. Migrations can be run by the wizard if an Access Token is provided.\n\n## Managed Provisioning vs Manual Sync\n**Managed Provisioning** creates a new Supabase project for you using an Access Token. \n**Manual Sync** connects to an existing Supabase project using your Project URL and Anon Key.\n\n## Migration\nDatabase changes that create or update tables, views, functions, and policies. Migrations keep your database schema aligned with the app.\n\n## Schema\nThe structure of your database: tables, columns, types, indexes, functions, and policies.\n\n## SQL\nThe language used to define and query database structures and data.\n\n## Version Mismatch\nWhen the app’s expected schema version differs from the database’s actual version. The Setup Wizard or migration tool will prompt you to normalize.\n\n## Database Version (Account Settings)\nThe database major version shown in Account Settings. It’s used to guide migrations and should match your Supabase project’s Postgres version.\n\n## Rollback\nReverting a migration. In Supabase, rollbacks are manual and should be used carefully.\n\n## RLS (Row Level Security)\nA Postgres security feature that restricts which rows a user can read or write. Supabase uses RLS to protect data.\n\n## Edge Functions\nServerless functions hosted by Supabase. Email Automator uses them for OAuth flows and secure operations.\n\n## Service Role Key\nA powerful Supabase key that bypasses RLS. It must never be exposed to clients.\n\n## Anon Key vs Service Role Key\nThe **anon key** is safe for client use and respects RLS. The **service role key** bypasses RLS and must only be used on trusted servers.\n\n## RealTimeX Desktop\nThe local app that provides AI services (LLMs, embeddings, TTS) used by Email Automator.\n\n## Digital Persona\nA profile that defines your tone, style, and preferences for AI-generated drafts and responses.\n\n## Persona Tone\nThe emotional character of replies (e.g., friendly, formal, direct).\n\n## Persona Style\nThe writing style preferences (e.g., concise, detailed, bullet points).\n\n## Persona Voice\nThe overall “sound” of your writing, including phrasing and rhythm.\n\n## Persona Signature\nA standardized sign-off used in replies (name, title, company).\n\n## Persona Role\nYour job title or role, used to shape response framing.\n\n## Persona Company\nThe organization name used in replies when appropriate.\n\n## Persona Language\nThe primary language for generated drafts.\n\n## Edge Functions\nServerless functions hosted by Supabase. Email Automator uses them for OAuth flows and secure operations.\n\n## Express API\nThe local backend that handles email syncing, AI processing, and automation execution.\n\n## Realtime (Supabase)\nLive updates from the database to the app. Used to reflect new emails, sync status, or activity without refreshing.\n\n## LLM (Large Language Model)\nAn AI model used for analysis and generating responses (e.g., categorization, drafting replies).\n\n## Embedding Model\nA model that converts text into vectors for semantic search. Used by the knowledge base and RAG.\n\n## Embeddings\nVector representations of text used for semantic search in the knowledge base.\n\n## RAG (Retrieval-Augmented Generation)\nA method that retrieves relevant documentation and feeds it to the AI so responses stay grounded in your docs.\n\n## Knowledge Base Ingestion\nThe process of converting documentation into searchable embeddings and storing them in the database.\n\n## TTS (Text-to-Speech)\nConverts AI responses into spoken audio.\n\n## TTS Provider vs Voice\nThe provider is the service that generates speech; the voice is the specific speaker/persona within that provider.\n\n## OAuth\nAn authorization standard that lets the app access your email account without storing your password.\n\n## OAuth Consent Screen\nThe screen where you grant Email Automator permission to access your email account.\n\n## Access Token (OAuth)\nA short-lived token used to call email provider APIs. It expires and is refreshed automatically.\n\n## Refresh Token\nA long-lived token used to obtain new access tokens without re‑authenticating.\n\n## Gmail API\nGoogle’s official API for accessing Gmail data and sending emails.\n\n## Microsoft Graph\nMicrosoft’s API for Outlook and Microsoft 365 data (mail, calendar, contacts).\n\n## IMAP / SMTP\nEmail protocols. IMAP reads mail; SMTP sends mail. (Email Automator uses provider APIs rather than raw IMAP/SMTP.)\n\n## App Registration (Microsoft)\nAn app configuration in Azure that provides credentials for Microsoft Graph access.\n\n## Client ID\nThe public identifier for your OAuth app (Google/Microsoft).\n\n## Client Secret\nA private secret for your OAuth app. Treat it like a password.\n\n## Redirect URI\nThe callback URL where the email provider sends users after OAuth authorization.\n\n## Device Code Flow\nAn OAuth flow where you authenticate in a browser using a short code, often used for desktop apps.\n\n## Tenant ID\nThe Microsoft tenant identifier. Use “common” for multi‑tenant or a specific tenant for org‑only access.\n\n## Sync Scope\nDefines how much history to sync (e.g., last X days) and which accounts are included.\n\n## Labels (Gmail) / Folders (Outlook)\nOrganization constructs in email providers. Labels tag messages; folders organize them into containers.\n",
|
|
10
11
|
"TROUBLESHOOTING.md": "# Troubleshooting & Support\n\nIf you encounter issues, this guide covers the most common pitfalls and their solutions.\n\n---\n\n## 📡 Synchronization Issues\n\n### Emails are not appearing in the Dashboard\n* **Check \"Sync From\" Date**: The AI only processes emails received *after* this date.\n* **Reset Checkpoint**: If you’ve changed your start date and want to re-scan old emails, click the **Reset Checkpoint** button in the Sync Scope panel.\n* **Batch Limits**: The **Max Emails** setting limits how many emails are processed per run. If you have a large backlog, it may take several sync cycles to catch up.\n* **Manual Trigger**: Click **Run Sync Now** on the Dashboard to force an immediate check.\n\n### \"Sync Failed\" or \"Backend Not Connected\"\n* **Local Server**: Ensure the Email Automator application is open and running.\n* **Live Activity Feed**: Open the **Live Activity** terminal. It often contains specific technical error messages (e.g., \"Network Error\" or \"401 Unauthorized\").\n\n---\n\n## 🔑 Authentication & Permissions\n\n### Google/Gmail: `redirect_uri_mismatch`\n* **The Fix**: Your Redirect URI in the Google Cloud Console must *exactly* match the one shown in Email Automator.\n* **Example**: `https://your-ref.supabase.co/functions/v1/auth-gmail/callback` (ensure no trailing slashes or spaces).\n\n### Microsoft/Outlook: Login fails or times out\n* **App Registration**: Ensure your Azure App Registration has \"Allow public client flows\" set to **Yes**.\n* **Account Type**: Ensure you selected \"Accounts in any organizational directory and personal Microsoft accounts\" during registration.\n\n### Supabase: \"Invalid API Key\"\n* **The Fix**: Always use the **anon (public)** key. The **service_role** key will be rejected by the app for security reasons.\n\n---\n\n## 🤖 AI & RealTimeX Integration\n\n### AI is slow or unresponsive\n* **Local Models**: If using Ollama or LM Studio, ensure your machine has sufficient RAM and your GPU is not under heavy load.\n* **Discovery**: If no models appear in the dropdown, ensure **RealTimeX Desktop** is running and you have configured at least one AI provider within it.\n\n### \"Smart Drafts\" are not being created\n* **System Toggle**: Ensure **Smart Drafts** is toggled **ON** in the Auto-Pilot tab.\n* **Rule Conflict**: Verify that the rule matching the email actually includes the **Draft** action.\n* **Safety Filter**: The AI automatically skips drafting for `no-reply` addresses and certain automated notifications to prevent \"bot loops.\"\n\n---\n\n## 🗄️ Database & Migrations\n\n### \"Database Migration Required\" Banner\n* **Why it happens**: Your local app has been updated, and your Supabase database schema needs to catch up to support new features.\n* **The Fix**: Click **Update Now** in the banner. You will need your **Supabase Access Token** to run the update automatically.\n\n### Live Terminal is empty or shows \"404\"\n* **Realtime Permissions**: Ensure you have run the latest migrations. The `processing_events` table must exist and have the correct RLS (Row Level Security) policies enabled.\n\n---\n\n## 🆘 Still Need Help?\n\nIf your issue isn't listed here:\n1. Check the **System Logs** in the Account Settings for technical stack traces.\n2. Review the [Developer Documentation](../docs-dev/README.md) for advanced setup details.\n3. Open a ticket or discussion in the project repository.\n"
|
|
11
12
|
};
|
package/api/src/routes/agent.ts
CHANGED
|
@@ -104,6 +104,7 @@ router.post('/chat', async (req: Request, res: Response) => {
|
|
|
104
104
|
# Current Context
|
|
105
105
|
- **Current Page**: ${context?.page_id || 'global'}
|
|
106
106
|
- **Page Data**: ${JSON.stringify(context?.data || {}, null, 2)}
|
|
107
|
+
- **User Language**: ${context?.lang || 'en'} — respond in this language
|
|
107
108
|
|
|
108
109
|
# Response Instructions
|
|
109
110
|
**When Answering:**
|
|
@@ -8,6 +8,7 @@ export interface AgentContextPayload {
|
|
|
8
8
|
system_instruction?: string;
|
|
9
9
|
data?: any;
|
|
10
10
|
tools?: any[];
|
|
11
|
+
lang?: string;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
export interface AgentMessage {
|
|
@@ -58,6 +59,7 @@ export class AgentService {
|
|
|
58
59
|
# Current Context
|
|
59
60
|
- **Current Page**: ${context.page_id}
|
|
60
61
|
- **Page Data**: ${JSON.stringify(context.data || {}, null, 2)}
|
|
62
|
+
- **User Language**: ${context.lang || 'en'} — respond in this language
|
|
61
63
|
`;
|
|
62
64
|
|
|
63
65
|
if (hasRAGContent) {
|
|
@@ -74,6 +74,7 @@ export class RAGService {
|
|
|
74
74
|
topK?: number;
|
|
75
75
|
similarityThreshold?: number;
|
|
76
76
|
sourceFilter?: string[];
|
|
77
|
+
lang?: string;
|
|
77
78
|
settings?: { embedding_provider?: string; embedding_model?: string };
|
|
78
79
|
} = {}
|
|
79
80
|
): Promise<RAGContext> {
|
|
@@ -81,6 +82,7 @@ export class RAGService {
|
|
|
81
82
|
topK = 5,
|
|
82
83
|
similarityThreshold = 0.7,
|
|
83
84
|
sourceFilter,
|
|
85
|
+
lang = 'en',
|
|
84
86
|
settings
|
|
85
87
|
} = options;
|
|
86
88
|
|
|
@@ -89,15 +91,36 @@ export class RAGService {
|
|
|
89
91
|
const queryEmbedding = await this.embedQuery(query, settings);
|
|
90
92
|
|
|
91
93
|
// 2. Search knowledge base
|
|
92
|
-
console.log(`[RAGService] Searching knowledge base (topK=${topK}, threshold=${similarityThreshold})...`);
|
|
94
|
+
console.log(`[RAGService] Searching knowledge base (topK=${topK}, threshold=${similarityThreshold}, lang=${lang})...`);
|
|
93
95
|
console.log(`[RAGService] Query embedding dimensions: ${queryEmbedding.length}`);
|
|
94
96
|
|
|
95
|
-
|
|
97
|
+
// Try searching with language filter
|
|
98
|
+
let { data, error } = await this.supabase.rpc('search_knowledge', {
|
|
96
99
|
query_embedding: queryEmbedding,
|
|
97
100
|
match_threshold: similarityThreshold,
|
|
98
|
-
match_count: topK
|
|
101
|
+
match_count: topK,
|
|
102
|
+
model_filter: null,
|
|
103
|
+
lang_filter: lang
|
|
99
104
|
});
|
|
100
105
|
|
|
106
|
+
// Fallback: If no results found with language filter (or if lang is invalid), try without filter (only if lang wasn't 'en')
|
|
107
|
+
// This handles cases where a specific language might not have content yet, falling back to English (default)
|
|
108
|
+
if (!error && (!data || data.length === 0) && lang !== 'en') {
|
|
109
|
+
console.log(`[RAGService] No results for lang='${lang}', falling back to 'en'...`);
|
|
110
|
+
const fallbackResult = await this.supabase.rpc('search_knowledge', {
|
|
111
|
+
query_embedding: queryEmbedding,
|
|
112
|
+
match_threshold: similarityThreshold,
|
|
113
|
+
match_count: topK,
|
|
114
|
+
model_filter: null,
|
|
115
|
+
lang_filter: 'en'
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
if (!fallbackResult.error) {
|
|
119
|
+
data = fallbackResult.data;
|
|
120
|
+
error = null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
101
124
|
if (error) {
|
|
102
125
|
console.error('[RAGService] Search failed:', error);
|
|
103
126
|
console.error('[RAGService] Error details:', JSON.stringify(error, null, 2));
|
|
@@ -5,6 +5,7 @@ export const SETUP_KNOWLEDGE = {
|
|
|
5
5
|
"AUTOMATION.md": "# Automation & Auto-Pilot\n\nThe **Auto-Pilot** tab is the central hub for managing your AI agent's behavior. It consolidates \"System Rules\" (global toggles) and a library of **26 built-in intelligent rules** alongside your own \"Custom Rules.\"\n\n---\n\n## 🛡️ Built-in System Rules\n\nEmail Automator comes with 26 pre-configured rules designed by AI experts to handle common inbox challenges. These are organized into functional categories to help you stay organized.\n\n### 📧 Email Organization\n* **Newsletter Sweeper**: Auto-archives newsletters and marketing emails to keep your inbox clean.\n* **Receipt Organizer**: Automatically files receipts and order confirmations.\n* **CC Organizer**: Labels emails where you are CC'd for quick triage.\n* **Cold Outreach Filter**: Moves cold sales emails to a separate folder.\n* **Social Noise**: Minimizes LinkedIn and social network notifications.\n* **Stack Overflow Digests**: Auto-archives technical digests unless they require immediate attention.\n\n### 🚨 Priority & Alerts\n* **VIP Urgent Messages**: Stars urgent messages from key stakeholders (CEOs, Board members).\n* **Critical Alerts**: Surfaces production incidents and P0/P1 critical alerts.\n* **Urgent Support Tickets**: Highlights high-priority customer issues needing immediate action.\n\n### 💻 Development\n* **GitHub Mentions**: Tracks when you are specifically mentioned in Pull Requests or Issues.\n* **CI/CD Failures**: Highlights build and deployment failures from tools like CircleCI or GitHub Actions.\n* **Code Review Requests**: Organizes incoming requests for code reviews.\n* **Dependabot Noise**: Auto-archives low-priority dependency updates while keeping security alerts visible.\n* **Monitoring Alerts**: Organizes non-urgent monitoring and logging alerts.\n\n### 💼 Sales & Business\n* **Hot Leads**: Prioritizes high-intent prospect replies based on positive sentiment.\n* **Follow-up Reminders**: Tracks prospect responses that specifically request a follow-up.\n* **Referrals & Intros**: Ensures you never miss a warm introduction or referral.\n* **Contracts & Proposals**: Highlights important contract communications and legal documents.\n* **Objections & Concerns**: Flags emails expressing concerns or hesitation for careful handling.\n* **Nurture Campaigns**: Archives automated drip campaign emails to prioritize personal replies.\n* **Financial Updates**: Keeps revenue reports and quarterly budget updates easily accessible.\n\n### ⚙️ Operations\n* **Internal Requests**: Organizes cross-team requests and action items.\n* **Vendor Communications**: Tracks invoices, shipments, and vendor-related updates.\n* **System Alerts**: Organizes infrastructure and system notifications.\n* **Meeting Invites**: Separates calendar invites for easier scheduling management.\n* **Weekly Reports**: Auto-files regular status reports and progress updates.\n\n---\n\n## 🛠️ Building Custom Rules\n\nCustom rules allow you to create precise, AI-driven workflows. You can create, edit, and manage these directly within the **Auto-Pilot** tab.\n\n### 1. Conditions (The \"If\")\nYou can mix and match metadata and AI-powered conditions:\n* **AI Insights**: Category (e.g., Newsletter, Receipt, Personal), Sentiment (Positive, Negative, Neutral), or Priority (High, Medium, Low).\n* **Metadata**: Sender domain (e.g., `github.com`), specific keywords in the subject, or sender's name.\n* **Retention Filter**: \"Only act if the email is older than X days.\" This is perfect for cleaning up old newsletters or notifications.\n\n### 2. Actions (The \"Then\")\nChoose what happens when an email matches your conditions:\n* **Archive / Delete**: Keep your inbox clean automatically.\n* **Star / Flag**: Highlight important items for manual review.\n* **Draft**: The most powerful action. It tells the AI to prepare a reply.\n\n---\n\n## ✍️ Smart Context & Ghostwriting\n\nWhen you use the **Draft** action, you can provide the AI with specific instructions to ensure the reply matches your needs:\n\n* **Ghostwriting Instructions**: Tell the AI *how* to reply (e.g., \"Be polite but firm in declining the invitation,\" or \"Ask for their availability next Tuesday\").\n* **Rule Attachments**: You can upload standard documents (like a pricing sheet or a bio) that the AI will automatically include as attachments whenever this rule triggers a draft.\n\n---\n\n## 🚀 The Auto-Pilot Tab\n\nThe **Auto-Pilot** tab provides a bird's-eye view of your automation engine.\n* **Grouped View**: Rules are organized by their primary intent.\n* **Quick Toggles**: Enable or disable rules instantly without deleting them.\n* **Status Indicators**: See which rules are currently active and how many emails they've processed.\n\n---\n\n## 💡 Best Practices\n\n* **Start Passive**: Set your first rules to **Star** or **Archive** instead of **Delete** until you are confident in the AI's categorization.\n* **Use Retention for Noise**: Use a rule like: `If Category = Newsletter AND Age > 30 Days THEN Delete`. This keeps your \"read\" newsletters from cluttering your archive forever.\n* **Refine with Feedback**: If a rule isn't matching correctly, use the **Feedback** icon on the Dashboard to improve the AI's understanding of that specific email type.\n\n---\n\n**Next Step:** [Account & Security Management](./ACCOUNT.md)\n",
|
|
6
6
|
"CONFIGURATION.md": "# Configuration\n\nThe **Configuration** tab is the command center of Email Automator. Here, you connect your email providers, define your AI's behavior, and set up the rules that drive automation.\n\n---\n\n## 📧 Email Accounts (BYOK)\n\nEmail Automator follows a **\"Bring Your Own Key\" (BYOK)** model. You provide your own OAuth credentials, ensuring that your data access remains entirely under your control.\n\n### 🔴 Gmail Setup (OAuth 2.0)\n1. **Google Cloud Console**: Create a project and enable the **Gmail API**.\n2. **Consent Screen**: Configure the OAuth consent screen and add your email as a **Test User**.\n3. **Credentials**: Create an **OAuth 2.0 Client ID** (Type: Web Application).\n * **Authorized Redirect URI**: `https://<your-project-ref>.supabase.co/functions/v1/auth-gmail/callback`\n4. **Connect**: In Email Automator, click **Connect Gmail**.\n5. **Authorize**: Paste your Client ID and Secret (or upload the JSON), then follow the link to authorize your account.\n\n### 🔵 Outlook Setup (Device Code)\n1. **Azure Portal**: Register a new application in **App Registrations**.\n2. **Account Type**: Select \"Accounts in any organizational directory and personal Microsoft accounts\".\n3. **Authentication**: Ensure \"Allow public client flows\" is set to **Yes**.\n4. **Connect**: In Email Automator, click **Connect Outlook** and enter your **Client ID**.\n5. **Authorize**: Follow the **Device Code** prompt in your browser to complete the sign-in.\n\n---\n\n## 📅 Sync Scope & Limits\n\nBefore starting your first sync, configure the boundaries to ensure performance and cost-efficiency:\n\n* **Sync From**: Choose the starting date (e.g., \"From Now\" or a specific historical date).\n* **Max Emails**: Set the maximum number of emails to process in a single batch (Default: 50).\n* **Sync Interval**: Define how often the background scheduler should check for new mail (e.g., every 15 minutes).\n\n> [!TIP]\n> **Start Small**: For your first run, we recommend setting \"Sync From\" to \"Now\" and \"Max Emails\" to 10-20 to verify your rules are working as expected.\n\n---\n\n## 🤖 Automation & Auto-Pilot\n\nManagement of your AI's behavior—including building custom rules, toggling system automations, and setting retention policies—has been consolidated into the **[Auto-Pilot](./AUTOMATION.md)** tab.\n\n---\n\n## 🧠 AI & System Settings\n\n### Provider Configuration\nEmail Automator detects available models via **RealTimeX Desktop**.\n* **LLM Provider**: Choose your preferred AI engine (e.g., OpenAI, Anthropic, or local models).\n* **Embedding Model**: Used for the RAG (Retrieval-Augmented Generation) system to help the AI understand your specific context.\n\n### Voice & Accessibility (TTS)\nEnable **Text-to-Speech** to have the AI read summaries or important alerts aloud.\n* **Auto-Speak**: Automatically read high-priority notifications.\n* **Voice Profile**: Choose from various high-quality voices available through RealTimeX.\n\n---\n\n**Next Step:** [Monitoring the Dashboard](./DASHBOARD.md)\n",
|
|
7
7
|
"DASHBOARD.md": "# Dashboard & Live Activity\n\nThe **Dashboard** is your primary interface for monitoring your AI agent’s activity and managing your analyzed inbox. It is designed to provide complete transparency into how the AI thinks and acts.\n\n---\n\n## 📊 The Analysis Feed\n\nAs the AI processes your inbox, emails appear in the feed with real-time status updates and intelligent insights.\n\n* **Smart Search**: Quickly find emails by keyword or sender.\n* **AI Filters**: Filter your view by Category (e.g., Newsletter, Personal), Sentiment, or Priority.\n* **Dynamic Sorting**: Toggle between the time an email was *received* and the time it was *processed* by the AI.\n\n### 📌 Email Detail Sidebar\nClicking any email card opens a detailed side panel containing:\n* **AI Summary**: A concise overview of the email's content.\n* **Key Points**: Bulleted highlights extracted by the AI.\n* **Draft Preview**: If a draft reply was generated, you can review it here before it's sent.\n* **Quick Links**: Jump directly to the original email in your Gmail or Outlook web interface.\n\n---\n\n## 🛡️ Trust & Transparency\n\nEmail Automator is built on the principle of **\"Glass Box AI.\"** You should always know *why* an action was taken.\n\n### 📟 Live Activity Terminal\nClick the **Live Activity** button in the bottom-right corner to open the real-time processing feed.\n* **Thinking Logs**: Watch the AI analyze content, evaluate rules, and decide on actions.\n* **Technical Details**: See raw API calls, processing durations, and background sync statuses.\n* **Control**: You can manually stop an active sync directly from the terminal.\n\n### 🕵️ AI Trace\nClick the **Eye icon** on any email card to open the **AI Trace Modal**.\n* **Decision Logic**: View a step-by-step breakdown of why the AI assigned a specific category or priority.\n* **Raw Data**: See the exact prompt sent to the LLM and the raw JSON response it returned.\n* **Performance Stats**: Review token usage and processing time for that specific email.\n\n---\n\n## ⚡ Quick Actions\n\nTake control with one-click actions available on every email card:\n* 🗑️ **Delete / 📦 Archive**: Instant cleanup.\n* ⭐ **Star / Flag**: Mark important items for later.\n* 🔄 **Reprocess**: If you’ve updated your rules, you can ask the AI to analyze an email again.\n* 💬 **Feedback**: Help the AI learn by reporting incorrect categorizations or sentiment analysis.\n\n---\n\n## 🔔 Notifications & Feedback\n\nThe app uses multi-sensory feedback to keep you informed of background activity:\n* **Visual**: Live status badges and toast notifications.\n* **Audio**: Subtle, high-quality chimes for new emails, high-priority alerts, and sync completion.\n* **Haptic**: Physical feedback on supported devices.\n\n> **Note**: Sound and Haptic settings can be customized in [**Account Settings**](./ACCOUNT.md).\n\n---\n\n## 📈 Analytics & History\n\nStay informed about your agent's performance:\n* **Sync History**: View a log of recent sync runs, including the number of emails processed and any actions taken.\n* **Efficiency Stats**: See totals for automated deletions, archives, and drafts over time.\n\n---\n\n**Next Step:** [Creating Automation Rules](./AUTOMATION.md)\n",
|
|
8
|
-
"GETTING-STARTED.md": "# Getting Started\n\nWelcome to **Email Automator**, your AI-powered personal email assistant. This guide will help you set up the application using the **\"Bring Your Own Key\" (BYOK)** model, which ensures your data remains under your control within your own Supabase infrastructure.\n\n## 🛠 Prerequisites\n\nBefore you begin, ensure you have the following:\n\n1. **RealTimeX Desktop**: Installed and running. This is required for AI processing (LLMs) and Text-to-Speech (TTS) capabilities.\n2. **Supabase Account**: A free or paid account at [supabase.com](https://supabase.com).\n\n---\n\n## 🚀 Quick Setup with the Wizard\n\nThe built-in **Setup Wizard** is the recommended way to get started. It automates the technical heavy lifting.\n\n### 1. Purchase & Launch\n* Open **RealTimeX Desktop**.\n* Go to the **Marketplace** tab → **Local Apps**.\n* Search for **\"Email Automator\"** and purchase it (or activate if already owned).\n* Once purchased, click **Launch** from your Local Apps list.\n\n### 2. Run the Setup Wizard\nUpon first launch, the app will guide you through the initial configuration:\n\n* **Choose a Setup Path**:\n * **Managed Provisioning (Recommended)**: Provide a **Supabase Access Token**. The wizard will automatically create a new project, run database migrations, deploy Edge Functions, and ingest the initial knowledge base.\n * **Connect Existing Project**: Use an existing Supabase project by providing your **Project URL** and **Anon Key**. You can optionally provide an Access Token here to have the wizard run migrations for you.\n\n### 3. Create Your Account\nOnce the database is ready, you will be prompted to create your local user account and sign in to access the **Dashboard**.\n\n---\n\n## 🔍 Finding Your Supabase Credentials\n\nIf you choose to connect an existing project manually, you can find your credentials in the [Supabase Dashboard](https://supabase.com/dashboard):\n\n1. Select your project.\n2. Navigate to **Settings** → **API**.\n3. **Project URL**: Copy the URL found under \"Project URL\".\n4. **API Key**: Copy the **anon (public)** key under \"Project API keys\".\n\n> [!WARNING]\n> **Security Note**: Never use the `service_role` key. It has full administrative bypass privileges and should never be exposed in client-side applications.\n\n---\n\n## 🪪 Generating an Access Token\n\nAn Access Token allows the Setup Wizard to manage your Supabase projects (creation, migrations, function deployment) on your behalf.\n\n1. In your Supabase Dashboard, go to **Account** → **Access Tokens**.\n2. Click **Generate new token**, give it a name (e.g., \"Email Automator\"), and copy the result.\n3. Paste this token into the Setup Wizard when prompted.\n\n---\n\n**Next Step:** [Configure your Email Accounts](./CONFIGURATION.md)\n",
|
|
8
|
+
"GETTING-STARTED.md": "# Getting Started\n\nWelcome to **Email Automator**, your AI-powered personal email assistant. This guide will help you set up the application using the **\"Bring Your Own Key\" (BYOK)** model, which ensures your data remains under your control within your own Supabase infrastructure.\n\n## 🛠 Prerequisites\n\nBefore you begin, ensure you have the following:\n\n1. **RealTimeX Desktop**: Installed and running. This is required for AI processing (LLMs) and Text-to-Speech (TTS) capabilities.\n2. **Supabase Account**: A free or paid account at [supabase.com](https://supabase.com).\n\n---\n\n## 🚀 Quick Setup with the Wizard\n\nThe built-in **Setup Wizard** is the recommended way to get started. It automates the technical heavy lifting.\n\n### 1. Purchase & Launch\n* Open **RealTimeX Desktop**.\n* Go to the **Marketplace** tab → **Local Apps**.\n* Search for **\"Email Automator\"** and purchase it (or activate if already owned).\n* Once purchased, click **Launch** from your Local Apps list.\n\n### 2. Run the Setup Wizard\nUpon first launch, the app will guide you through the initial configuration:\n\n* **Choose a Setup Path**:\n * **Managed Provisioning (Recommended)**: Provide a **Supabase Access Token**. The wizard will automatically create a new project, run database migrations, deploy Edge Functions, and ingest the initial knowledge base.\n * **Connect Existing Project**: Use an existing Supabase project by providing your **Project URL** and **Anon Key**. You can optionally provide an Access Token here to have the wizard run migrations for you.\n\n### 3. Create Your Account\nOnce the database is ready, you will be prompted to create your local user account and sign in to access the **Dashboard**.\n\n---\n\n## 🔍 Finding Your Supabase Credentials\n\nIf you choose to connect an existing project manually, you can find your credentials in the [Supabase Dashboard](https://supabase.com/dashboard):\n\n1. Select your project.\n2. Navigate to **Settings** → **API**.\n3. **Project URL**: Copy the URL found under \"Project URL\".\n4. **API Key**: Copy the **anon (public)** key under \"Project API keys\".\n\n> [!WARNING]\n> **Security Note**: Never use the `service_role` key. It has full administrative bypass privileges and should never be exposed in client-side applications.\n\n---\n\n## 🪪 Generating an Access Token\n\nAn Access Token allows the Setup Wizard to manage your Supabase projects (creation, migrations, function deployment) on your behalf.\n\n1. In your Supabase Dashboard, go to **Account** → **Access Tokens**.\n2. Click **Generate new token**, give it a name (e.g., \"Email Automator\"), and copy the result.\n3. Paste this token into the Setup Wizard when prompted.\n\n---\n\n**Next Step:** [Configure your Email Accounts](./CONFIGURATION.md) \n**Glossary:** [Common Terms](./GLOSSARY.md)\n",
|
|
9
|
+
"GLOSSARY.md": "# Glossary\n\nDefinitions of common terms used in Email Automator and the Setup Wizard.\n\n## Supabase\nA backend platform that provides a hosted Postgres database, authentication, storage, and APIs. Email Automator uses Supabase as its database and auth layer.\n\n## BYOK (Bring Your Own Key)\nA setup model where you connect your own Supabase project instead of using a shared backend. This keeps your data in your own infrastructure.\n\n## Supabase Project ID\nThe unique identifier for your Supabase project (often shown in the project URL or settings).\n\n## Supabase Project URL\nThe base URL for your Supabase project, used by the app to connect to the database and APIs.\n\n## Anon Key (Public API Key)\nThe public API key for your Supabase project. It is safe for client-side use but still subject to Row Level Security (RLS).\n\n## Access Token\nA token from your Supabase account that lets the Setup Wizard create or manage projects on your behalf (used in Quick Start).\n\n## Managed Provisioning (Quick Start)\nThe Setup Wizard uses your Access Token to automatically create a Supabase project, apply migrations, deploy Edge Functions, and ingest the knowledge base.\n\n## Manual Sync (Connect Existing Project)\nYou connect an existing Supabase project by providing the Project URL and Anon Key. Migrations can be run by the wizard if an Access Token is provided.\n\n## Managed Provisioning vs Manual Sync\n**Managed Provisioning** creates a new Supabase project for you using an Access Token. \n**Manual Sync** connects to an existing Supabase project using your Project URL and Anon Key.\n\n## Migration\nDatabase changes that create or update tables, views, functions, and policies. Migrations keep your database schema aligned with the app.\n\n## Schema\nThe structure of your database: tables, columns, types, indexes, functions, and policies.\n\n## SQL\nThe language used to define and query database structures and data.\n\n## Version Mismatch\nWhen the app’s expected schema version differs from the database’s actual version. The Setup Wizard or migration tool will prompt you to normalize.\n\n## Database Version (Account Settings)\nThe database major version shown in Account Settings. It’s used to guide migrations and should match your Supabase project’s Postgres version.\n\n## Rollback\nReverting a migration. In Supabase, rollbacks are manual and should be used carefully.\n\n## RLS (Row Level Security)\nA Postgres security feature that restricts which rows a user can read or write. Supabase uses RLS to protect data.\n\n## Edge Functions\nServerless functions hosted by Supabase. Email Automator uses them for OAuth flows and secure operations.\n\n## Service Role Key\nA powerful Supabase key that bypasses RLS. It must never be exposed to clients.\n\n## Anon Key vs Service Role Key\nThe **anon key** is safe for client use and respects RLS. The **service role key** bypasses RLS and must only be used on trusted servers.\n\n## RealTimeX Desktop\nThe local app that provides AI services (LLMs, embeddings, TTS) used by Email Automator.\n\n## Digital Persona\nA profile that defines your tone, style, and preferences for AI-generated drafts and responses.\n\n## Persona Tone\nThe emotional character of replies (e.g., friendly, formal, direct).\n\n## Persona Style\nThe writing style preferences (e.g., concise, detailed, bullet points).\n\n## Persona Voice\nThe overall “sound” of your writing, including phrasing and rhythm.\n\n## Persona Signature\nA standardized sign-off used in replies (name, title, company).\n\n## Persona Role\nYour job title or role, used to shape response framing.\n\n## Persona Company\nThe organization name used in replies when appropriate.\n\n## Persona Language\nThe primary language for generated drafts.\n\n## Edge Functions\nServerless functions hosted by Supabase. Email Automator uses them for OAuth flows and secure operations.\n\n## Express API\nThe local backend that handles email syncing, AI processing, and automation execution.\n\n## Realtime (Supabase)\nLive updates from the database to the app. Used to reflect new emails, sync status, or activity without refreshing.\n\n## LLM (Large Language Model)\nAn AI model used for analysis and generating responses (e.g., categorization, drafting replies).\n\n## Embedding Model\nA model that converts text into vectors for semantic search. Used by the knowledge base and RAG.\n\n## Embeddings\nVector representations of text used for semantic search in the knowledge base.\n\n## RAG (Retrieval-Augmented Generation)\nA method that retrieves relevant documentation and feeds it to the AI so responses stay grounded in your docs.\n\n## Knowledge Base Ingestion\nThe process of converting documentation into searchable embeddings and storing them in the database.\n\n## TTS (Text-to-Speech)\nConverts AI responses into spoken audio.\n\n## TTS Provider vs Voice\nThe provider is the service that generates speech; the voice is the specific speaker/persona within that provider.\n\n## OAuth\nAn authorization standard that lets the app access your email account without storing your password.\n\n## OAuth Consent Screen\nThe screen where you grant Email Automator permission to access your email account.\n\n## Access Token (OAuth)\nA short-lived token used to call email provider APIs. It expires and is refreshed automatically.\n\n## Refresh Token\nA long-lived token used to obtain new access tokens without re‑authenticating.\n\n## Gmail API\nGoogle’s official API for accessing Gmail data and sending emails.\n\n## Microsoft Graph\nMicrosoft’s API for Outlook and Microsoft 365 data (mail, calendar, contacts).\n\n## IMAP / SMTP\nEmail protocols. IMAP reads mail; SMTP sends mail. (Email Automator uses provider APIs rather than raw IMAP/SMTP.)\n\n## App Registration (Microsoft)\nAn app configuration in Azure that provides credentials for Microsoft Graph access.\n\n## Client ID\nThe public identifier for your OAuth app (Google/Microsoft).\n\n## Client Secret\nA private secret for your OAuth app. Treat it like a password.\n\n## Redirect URI\nThe callback URL where the email provider sends users after OAuth authorization.\n\n## Device Code Flow\nAn OAuth flow where you authenticate in a browser using a short code, often used for desktop apps.\n\n## Tenant ID\nThe Microsoft tenant identifier. Use “common” for multi‑tenant or a specific tenant for org‑only access.\n\n## Sync Scope\nDefines how much history to sync (e.g., last X days) and which accounts are included.\n\n## Labels (Gmail) / Folders (Outlook)\nOrganization constructs in email providers. Labels tag messages; folders organize them into containers.\n",
|
|
9
10
|
"TROUBLESHOOTING.md": "# Troubleshooting & Support\n\nIf you encounter issues, this guide covers the most common pitfalls and their solutions.\n\n---\n\n## 📡 Synchronization Issues\n\n### Emails are not appearing in the Dashboard\n* **Check \"Sync From\" Date**: The AI only processes emails received *after* this date.\n* **Reset Checkpoint**: If you’ve changed your start date and want to re-scan old emails, click the **Reset Checkpoint** button in the Sync Scope panel.\n* **Batch Limits**: The **Max Emails** setting limits how many emails are processed per run. If you have a large backlog, it may take several sync cycles to catch up.\n* **Manual Trigger**: Click **Run Sync Now** on the Dashboard to force an immediate check.\n\n### \"Sync Failed\" or \"Backend Not Connected\"\n* **Local Server**: Ensure the Email Automator application is open and running.\n* **Live Activity Feed**: Open the **Live Activity** terminal. It often contains specific technical error messages (e.g., \"Network Error\" or \"401 Unauthorized\").\n\n---\n\n## 🔑 Authentication & Permissions\n\n### Google/Gmail: `redirect_uri_mismatch`\n* **The Fix**: Your Redirect URI in the Google Cloud Console must *exactly* match the one shown in Email Automator.\n* **Example**: `https://your-ref.supabase.co/functions/v1/auth-gmail/callback` (ensure no trailing slashes or spaces).\n\n### Microsoft/Outlook: Login fails or times out\n* **App Registration**: Ensure your Azure App Registration has \"Allow public client flows\" set to **Yes**.\n* **Account Type**: Ensure you selected \"Accounts in any organizational directory and personal Microsoft accounts\" during registration.\n\n### Supabase: \"Invalid API Key\"\n* **The Fix**: Always use the **anon (public)** key. The **service_role** key will be rejected by the app for security reasons.\n\n---\n\n## 🤖 AI & RealTimeX Integration\n\n### AI is slow or unresponsive\n* **Local Models**: If using Ollama or LM Studio, ensure your machine has sufficient RAM and your GPU is not under heavy load.\n* **Discovery**: If no models appear in the dropdown, ensure **RealTimeX Desktop** is running and you have configured at least one AI provider within it.\n\n### \"Smart Drafts\" are not being created\n* **System Toggle**: Ensure **Smart Drafts** is toggled **ON** in the Auto-Pilot tab.\n* **Rule Conflict**: Verify that the rule matching the email actually includes the **Draft** action.\n* **Safety Filter**: The AI automatically skips drafting for `no-reply` addresses and certain automated notifications to prevent \"bot loops.\"\n\n---\n\n## 🗄️ Database & Migrations\n\n### \"Database Migration Required\" Banner\n* **Why it happens**: Your local app has been updated, and your Supabase database schema needs to catch up to support new features.\n* **The Fix**: Click **Update Now** in the banner. You will need your **Supabase Access Token** to run the update automatically.\n\n### Live Terminal is empty or shows \"404\"\n* **Realtime Permissions**: Ensure you have run the latest migrations. The `processing_events` table must exist and have the correct RLS (Row Level Security) policies enabled.\n\n---\n\n## 🆘 Still Need Help?\n\nIf your issue isn't listed here:\n1. Check the **System Logs** in the Account Settings for technical stack traces.\n2. Review the [Developer Documentation](../docs-dev/README.md) for advanced setup details.\n3. Open a ticket or discussion in the project repository.\n"
|
|
10
11
|
};
|
|
@@ -85,6 +85,7 @@ router.post('/chat', async (req, res) => {
|
|
|
85
85
|
# Current Context
|
|
86
86
|
- **Current Page**: ${context?.page_id || 'global'}
|
|
87
87
|
- **Page Data**: ${JSON.stringify(context?.data || {}, null, 2)}
|
|
88
|
+
- **User Language**: ${context?.lang || 'en'} — respond in this language
|
|
88
89
|
|
|
89
90
|
# Response Instructions
|
|
90
91
|
**When Answering:**
|
|
@@ -33,6 +33,7 @@ export class AgentService {
|
|
|
33
33
|
# Current Context
|
|
34
34
|
- **Current Page**: ${context.page_id}
|
|
35
35
|
- **Page Data**: ${JSON.stringify(context.data || {}, null, 2)}
|
|
36
|
+
- **User Language**: ${context.lang || 'en'} — respond in this language
|
|
36
37
|
`;
|
|
37
38
|
if (hasRAGContent) {
|
|
38
39
|
// Strict mode: Only use retrieved documentation
|
|
@@ -38,18 +38,37 @@ export class RAGService {
|
|
|
38
38
|
* Retrieve relevant knowledge chunks for a query
|
|
39
39
|
*/
|
|
40
40
|
async retrieve(query, options = {}) {
|
|
41
|
-
const { topK = 5, similarityThreshold = 0.7, sourceFilter, settings } = options;
|
|
41
|
+
const { topK = 5, similarityThreshold = 0.7, sourceFilter, lang = 'en', settings } = options;
|
|
42
42
|
// 1. Generate query embedding
|
|
43
43
|
console.log('[RAGService] Generating query embedding...');
|
|
44
44
|
const queryEmbedding = await this.embedQuery(query, settings);
|
|
45
45
|
// 2. Search knowledge base
|
|
46
|
-
console.log(`[RAGService] Searching knowledge base (topK=${topK}, threshold=${similarityThreshold})...`);
|
|
46
|
+
console.log(`[RAGService] Searching knowledge base (topK=${topK}, threshold=${similarityThreshold}, lang=${lang})...`);
|
|
47
47
|
console.log(`[RAGService] Query embedding dimensions: ${queryEmbedding.length}`);
|
|
48
|
-
|
|
48
|
+
// Try searching with language filter
|
|
49
|
+
let { data, error } = await this.supabase.rpc('search_knowledge', {
|
|
49
50
|
query_embedding: queryEmbedding,
|
|
50
51
|
match_threshold: similarityThreshold,
|
|
51
|
-
match_count: topK
|
|
52
|
+
match_count: topK,
|
|
53
|
+
model_filter: null,
|
|
54
|
+
lang_filter: lang
|
|
52
55
|
});
|
|
56
|
+
// Fallback: If no results found with language filter (or if lang is invalid), try without filter (only if lang wasn't 'en')
|
|
57
|
+
// This handles cases where a specific language might not have content yet, falling back to English (default)
|
|
58
|
+
if (!error && (!data || data.length === 0) && lang !== 'en') {
|
|
59
|
+
console.log(`[RAGService] No results for lang='${lang}', falling back to 'en'...`);
|
|
60
|
+
const fallbackResult = await this.supabase.rpc('search_knowledge', {
|
|
61
|
+
query_embedding: queryEmbedding,
|
|
62
|
+
match_threshold: similarityThreshold,
|
|
63
|
+
match_count: topK,
|
|
64
|
+
model_filter: null,
|
|
65
|
+
lang_filter: 'en'
|
|
66
|
+
});
|
|
67
|
+
if (!fallbackResult.error) {
|
|
68
|
+
data = fallbackResult.data;
|
|
69
|
+
error = null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
53
72
|
if (error) {
|
|
54
73
|
console.error('[RAGService] Search failed:', error);
|
|
55
74
|
console.error('[RAGService] Error details:', JSON.stringify(error, null, 2));
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const e={"app.name":"Email Automator","app.connecting":"Conectando cuenta...","app.loadingWorkspace":"Cargando tu espacio de trabajo...","app.loggedOut":"Sesión cerrada exitosamente","app.statusLive":"EN VIVO","app.statusOffline":"DESCONECTADO","common.loading":"Cargando...","common.save":"Guardar cambios","common.cancel":"Cancelar","common.delete":"Eliminar","common.success":"Éxito","common.error":"Error","common.warning":"Advertencia","common.syncNow":"Sincronizar ahora","common.syncing":"Sincronizando...","common.stopSync":"Detener sincronización","common.systemSync":"Sincronización del sistema","common.viewLogs":"Ver registros","common.saveChanges":"Guardar cambios","common.errorOccurred":"Ocurrió un error","common.previous":"Anterior","common.next":"Siguiente","common.of":"de","common.yes":"Sí","common.no":"No","common.archive":"Archivar","common.flag":"Marcar","common.on":"Activado","common.off":"Desactivado","common.enabled":"Habilitado","common.disabled":"Deshabilitado","common.active":"Activo","common.inactive":"Inactivo","common.draft":"Borrador","common.star":"Estrella","nav.dashboard":"Panel de control","nav.drafts":"Borradores","nav.autopilot":"Piloto automático","nav.analytics":"Analítica","nav.configuration":"Configuración","nav.accountSettings":"Configuración de cuenta","nav.signOut":"Cerrar sesión","drafts.title":"Centro de revisión de borradores","drafts.pending":"borradores pendientes","drafts.noDrafts":"No hay borradores pendientes","drafts.noDraftsDesc":"Las respuestas borrador generadas por IA aparecerán aquí para su revisión","drafts.send":"Enviar ahora","drafts.preview":"Vista previa","drafts.dismiss":"Descartar","drafts.regenerate":"Regenerar","drafts.selectAll":"Seleccionar todo","drafts.sendSelected":"Enviar seleccionados","drafts.dismissSelected":"Descartar seleccionados","drafts.filterByAccount":"Todas las cuentas","drafts.filterByDate":"Filtrar por fecha","drafts.originalEmail":"Correo electrónico original","drafts.aiReply":"Respuesta generada por IA","drafts.createdBy":"Creado por regla:","drafts.sendSuccess":"¡Borrador enviado con éxito!","drafts.sendError":"Error al enviar el borrador","drafts.dismissSuccess":"Borrador descartado","drafts.loadError":"Error al cargar borradores","login.title":"Bienvenido de nuevo","login.subtitle":"Inicia sesión en tu agente de email con IA","login.email":"Dirección de correo electrónico","login.password":"Contraseña","login.signIn":"Iniciar sesión","login.noAccount":"¿No tienes una cuenta?","login.alreadyHaveAccount":"¿Ya tienes una cuenta?","login.signUp":"Registrarse","login.forgotPassword":"¿Olvidaste tu contraseña?","login.initialize":"Inicializar Automator","login.secureLogin":"Inicio de sesión seguro","login.firstNamePlaceholder":"Juan","login.lastNamePlaceholder":"Pérez","login.emailPlaceholder":"admin@automator.ai","login.initializeMaster":"Inicializar maestro","login.sendMagicLink":"Enviar enlace mágico","login.openDashboard":"Abrir panel de control","setup.title":"Configuración del sistema","setup.initiation":"Bienvenido","setup.coordinates":"Detalles de conexión","setup.foundation":"Configuración de base de datos","setup.ignition":"Lanzamiento","setup.start":"Iniciar configuración","setup.welcomeTitle":"Inicializando Automator","setup.welcomeSubtitle":"Configurando tu entorno especializado para inteligencia de bandeja de entrada de alta frecuencia.","setup.encryptedTitle":"Encriptado","setup.encryptedDesc":"Seguridad de datos autoalojados.","setup.turboTitle":"Turbo","setup.turboDesc":"Inferencia de IA en menos de un segundo.","setup.getStarted":"Comenzar","setup.connectionMode":"Modo de conexión","setup.selectVector":"Seleccionar modo de implementación","setup.quickIgnition":"Inicio rápido","setup.autoProvision":"Aprovisionamiento automático mediante token","setup.manualSync":"Sincronización manual","setup.existingCredentials":"Credenciales existentes","setup.abortAccess":"Abortar acceso","setup.injectCoordinates":"Ingresar credenciales existentes","setup.platformUrl":"URL de la plataforma","setup.urlHelp":"Ingrese la URL completa o solo el ID del proyecto","setup.anonMatrixKey":"Clave anónima de Supabase","setup.keyHelp":"Se encuentra en la configuración de tu proyecto Supabase","setup.back":"Atrás","setup.engage":"Conectar","setup.installation":"Instalación","setup.applyingSchema":"Configurando base de datos...","setup.emptyProject":"Proyecto vacío detectado. La inicialización es obligatoria para instalar los sistemas de IA principales.","setup.versionMismatch":"Incompatibilidad de versión detectada. Se recomienda normalización.","setup.tokenRequired":"Token de gestión requerido","setup.migrateHelp":"Se usa una vez para ejecutar migraciones en tu backend.","setup.bypassRisk":"Omitir (Arriesgado)","setup.installSystems":"Instalar sistemas","setup.normalizeSystem":"Normalizar sistema","setup.retryInstallation":"Reintentar instalación","setup.agent.systemInstruction":'Eres el asistente del Asistente de configuración. Guía al usuario para conectar Supabase, elegir un modo de configuración y completar las migraciones. Pide solo el siguiente dato requerido y ofrece pasos claros. Si el usuario dice "ayúdame a configurar", enumera inmediatamente los pasos de este asistente.',"agent.intro.setup":`👋 ¡Bienvenido a la configuración! Puedo ayudarte a:
|
|
2
|
+
• Elegir Inicio rápido o configuración manual
|
|
3
|
+
• Conectar tu proyecto de Supabase
|
|
4
|
+
• Ejecutar migraciones de base de datos
|
|
5
|
+
• Solucionar problemas de conexión
|
|
6
|
+
|
|
7
|
+
Díme qué quieres hacer o di "ayúdame a configurar".`,"agent.intro.configuration":`👋 ¡Bienvenido a la configuración! Puedo ayudarte a:
|
|
8
|
+
• Conectar cuentas de correo ({accountsCount} conectadas)
|
|
9
|
+
• Configurar reglas de automatización ({rulesCount} activas)
|
|
10
|
+
• Configurar ajustes de LLM y TTS
|
|
11
|
+
• Solucionar problemas de conexión
|
|
12
|
+
|
|
13
|
+
¿Qué te gustaría configurar?`,"agent.intro.drafts.one":`📧 ¡Soy tu asistente de revisión de borradores!
|
|
14
|
+
|
|
15
|
+
Tienes {count} borrador pendiente.
|
|
16
|
+
|
|
17
|
+
Puedo ayudarte a:
|
|
18
|
+
• Resumir todos los borradores
|
|
19
|
+
• Enviar o descartar borradores específicos
|
|
20
|
+
• Ver el contenido de los borradores
|
|
21
|
+
• Revisar destinatarios y asuntos
|
|
22
|
+
|
|
23
|
+
Intenta: "Resúmeme mis borradores" o "Envía el borrador a Juan"`,"agent.intro.drafts.other":`📧 ¡Soy tu asistente de revisión de borradores!
|
|
24
|
+
|
|
25
|
+
Tienes {count} borradores pendientes.
|
|
26
|
+
|
|
27
|
+
Puedo ayudarte a:
|
|
28
|
+
• Resumir todos los borradores
|
|
29
|
+
• Enviar o descartar borradores específicos
|
|
30
|
+
• Ver el contenido de los borradores
|
|
31
|
+
• Revisar destinatarios y asuntos
|
|
32
|
+
|
|
33
|
+
Intenta: "Resúmeme mis borradores" o "Envía el borrador a Juan"`,"agent.intro.explainer":`🌐 Asistente de traducción y explicación
|
|
34
|
+
|
|
35
|
+
Puedo ayudarte a entender:
|
|
36
|
+
• Qué significan las reglas de automatización
|
|
37
|
+
• Cómo los ajustes afectan tu flujo de trabajo
|
|
38
|
+
• Términos técnicos en lenguaje sencillo
|
|
39
|
+
|
|
40
|
+
¡Pregúntame cualquier cosa sobre lo que estás viendo!`,"agent.intro.global":`👋 ¡Hola! Soy tu asistente de IA.
|
|
41
|
+
|
|
42
|
+
Puedo ayudarte a navegar y entender cualquier parte del Email Automator.
|
|
43
|
+
|
|
44
|
+
¿Qué te gustaría saber?`,"agent.intro.default":`👋 ¡Hola! Estoy aquí para ayudarte con {page}.
|
|
45
|
+
|
|
46
|
+
¿En qué puedo ayudarte?`,"agent.composer.placeholder":"Haz una pregunta, o haz clic en el micrófono...","agent.composer.listening":"Escuchando...","agent.title.setup":"Asistente de Configuración Inicial","agent.title.configuration":"Asistente de Configuración","agent.title.drafts":"Asistente de Borradores","agent.title.explainer":"Asistente de Traducción","agent.title.global":"Asistente de IA","agent.title.default":"Asistente de {page}","agent.status.listening":"Escuchando...","agent.status.analyzing":"Analizando","agent.status.speaking":"Hablando","agent.status.ready":"Listo","agent.recording":"Grabando...","dashboard.recentAnalysis":"Análisis reciente","dashboard.emails":"correos electrónicos","dashboard.noEmails":"No se encontraron correos electrónicos","dashboard.noEmailsConnected":"Conecta tu cuenta de correo electrónico para comenzar.","dashboard.noEmailsFilters":"Intenta sincronizar o ajustar tus filtros.","dashboard.syncInProgress":"Sincronización en progreso...","dashboard.syncInProgressDesc":"Obteniendo y analizando correos electrónicos. Los nuevos correos aparecerán automáticamente a continuación.","dashboard.aiTrace":"Rastreo de procesamiento de IA","dashboard.aiTraceDesc":"Registros paso a paso de cómo la IA analizó y actuó sobre este correo electrónico.","dashboard.noTrace":"No se encontraron eventos de rastreo detallados para este correo electrónico.","dashboard.syncNow":"Sincronizar ahora","dashboard.syncing":"Sincronizando...","dashboard.searchPlaceholder":"Buscar correos electrónicos...","dashboard.search":"Buscar","dashboard.receivedTime":"Hora de recepción","dashboard.processedTime":"Hora de procesamiento","dashboard.receivedAbbr":"REC","dashboard.processedAbbr":"PROC","dashboard.sortOldest":"Ordenar: Más antiguo primero","dashboard.sortNewest":"Ordenar: Más reciente primero","dashboard.category.all":"Todos","dashboard.category.none":"ninguno","dashboard.emailDetails":"Detalles del correo electrónico","dashboard.emailContent":"Contenido del correo electrónico (enviado al LLM)","dashboard.from":"De:","dashboard.subject":"Asunto:","dashboard.summary":"Resumen:","dashboard.keyPoints":"Puntos clave:","dashboard.aiDraftReply":"Borrador de respuesta de IA","dashboard.draftSavedHelp":"* Este borrador ya está guardado en tu carpeta de Borradores de {provider}.","dashboard.syncScope":"Alcance de sincronización","dashboard.syncFrom":"Sincronizar desde","dashboard.maxEmails":"Correos electrónicos máximos","dashboard.lastSync":"Última sincronización:","dashboard.error":"Error:","dashboard.resetCheckpoint":"Restablecer punto de control (Forzar resincronización completa desde la fecha de inicio)","dashboard.syncHistory":"Historial de sincronización","dashboard.noSyncHistory":"No hay historial de sincronización disponible.","dashboard.processed":"Procesado:","dashboard.actioned":"Accionado:","dashboard.running":"En ejecución","dashboard.quickStats":"Estadísticas rápidas","dashboard.totalProcessed":"Total procesado","dashboard.connectedAccounts":"Cuentas conectadas","dashboard.activeRules":"Reglas activas","dashboard.noSubject":"Sin asunto","dashboard.queued":"En cola","dashboard.analyzing":"Analizando","dashboard.analyzed":"Analizado","dashboard.failed":"Fallido","dashboard.retryProcessing":"Reintentar procesamiento","dashboard.suggested":"Sugerido:","dashboard.done":"Hecho:","dashboard.deleteConfirm":"¿Eliminar?","dashboard.openIn":"Abrir en {provider}","dashboard.viewTraceTooltip":"Ver rastreo de IA (Prompt/Respuesta)","dashboard.syncSuccess":"¡Sincronización completada! Revisa tus correos electrónicos.","dashboard.syncFailed":"Sincronización fallida. Verifica el estado de la cuenta para más detalles.","config.title":"Automatización y reglas","config.rules":"Reglas de automatización","config.createRule":"Crear nueva regla","config.llmSettings":"Configuración de inteligencia de IA","config.accounts.title":"Cuentas de correo electrónico","config.accounts.desc":"Conectar y administrar tus cuentas de correo electrónico","config.accounts.addNew":"Agregar nueva cuenta","config.accounts.yourAccounts":"Tus cuentas conectadas","config.accounts.noAccounts":"Aún no hay cuentas de correo electrónico conectadas","config.accounts.connectHelp":"Conecta tu primera cuenta de correo electrónico para comenzar a automatizar","config.accounts.disconnect":"Desconectar","config.gmail.connect":"Conectar Gmail","config.gmail.connectDesc":"OAuth 2.0 o cuenta de servicio","config.gmail.credentialsDesc":"Pega el contenido JSON de las credenciales de Google Cloud","config.gmail.authCodeDesc":"Ingresa el código de autorización de Google","config.gmail.pasteJson":"Pega el contenido de credentials.json","config.gmail.downloadHelp":"Descarga desde Google Cloud Console → APIs & Services → Credentials","config.gmail.orEnterManually":"O ingresa manualmente","config.outlook.connect":"Conectar Outlook","config.outlook.connectDesc":"Microsoft 365 o Outlook.com","config.outlook.credentialsDesc":"Pega el contenido JSON de las credenciales de Azure App","config.outlook.instructions":"Sigue el flujo OAuth para conectarte","config.outlook.signinRequired":"Inicio de sesión requerido","config.outlook.waitingSignin":"Esperando inicio de sesión...","config.model.title":"Configuración del modelo de IA","config.model.desc":"Configura tu modelo de IA y ajustes de procesamiento","config.model.provider":"Proveedor de LLM","config.model.name":"Nombre del modelo","config.model.modelPlaceholder":"p. ej. gpt-4o-mini","config.model.selectModel":"Seleccionar un modelo","config.model.storagePath":"Ruta de almacenamiento","config.model.storagePlaceholder":"Ruta para almacenamiento del modelo","config.model.storageHelp":"Directorio local para almacenar en caché los modelos","config.model.syncInterval":"Intervalo de sincronización (minutos)","config.model.syncHelp":"Frecuencia de verificación de nuevos correos electrónicos","config.model.intelligentRename":"Renombrado inteligente","config.model.renameHelp":"Usar IA para sugerir mejores nombres de archivo","config.model.checkConnection":"Verificar conexión","config.model.saveConfig":"Guardar configuración","config.byok.title":"Trae tu propia clave (BYOK)","config.byok.desc":"Usa tus propias claves API para proveedores de IA","config.byok.systemDefault":"Usar predeterminado del sistema","config.byok.save":"Guardar clave API","config.rules.edit":"Editar regla","config.rules.create":"Crear regla","config.rules.createRule":"Crear regla","config.rules.desc":"Definir condiciones y acciones para la automatización de correo electrónico","config.rules.name":"Nombre de la regla","config.rules.namePlaceholder":"ej. Archivar boletines","config.rules.description":"Descripción","config.rules.descriptionPlaceholder":"Qué hace esta regla","config.rules.semanticHelp":"La IA coincidirá los correos electrónicos según esta descripción","config.rules.intent":"Intención","config.rules.intentPlaceholder":"Qué debería suceder cuando se active esta regla","config.rules.intentHelp":"Se usa para generar respuestas apropiadas","config.rules.conditionField":"Campo de condición","config.rules.aiAnalysis":"Análisis de IA","config.rules.metadata":"Metadatos","config.rules.category":"Categoría","config.rules.sentiment":"Sentimiento","config.rules.priority":"Prioridad","config.rules.senderEmail":"Correo electrónico del remitente","config.rules.senderDomain":"Dominio del remitente","config.rules.senderContains":"El remitente contiene","config.rules.subjectContains":"El asunto contiene","config.rules.bodyContains":"El cuerpo contiene","config.rules.equalsValue":"Valor igual","config.rules.keywordsPlaceholder":"Ingresa palabras clave...","config.rules.olderThan":"Solo si el correo electrónico es más antiguo que (días)","config.rules.olderThanHelp":"Deja vacío o 0 para aplicar inmediatamente","config.rules.performActions":"Luego realizar acciones","config.rules.draftInstructions":"Instrucciones de borrador","config.rules.contextHelp":"Contexto específico para que la IA use al redactar","config.rules.addAttachment":"Agregar archivo adjunto","config.rules.attachmentHelp":"Los archivos se adjuntarán a los borradores generados","config.rules.uploading":"Subiendo...","config.rules.saveChanges":"Guardar cambios","account.title":"Configuración de cuenta","account.subtitle":"Administra tu perfil y preferencias","account.profile":"Perfil","account.security":"Seguridad","account.database":"Supabase","account.logout":"Cerrar sesión","account.logoutSuccess":"Sesión cerrada exitosamente","account.version":"Versión","account.profile.title":"Información del perfil","account.profile.desc":"Actualiza tu información personal","account.profile.firstName":"Nombre","account.profile.firstNamePlaceholder":"Juan","account.profile.lastName":"Apellido","account.profile.lastNamePlaceholder":"Pérez","account.profile.email":"Correo electrónico","account.profile.emailHelp":"Este es tu correo electrónico de inicio de sesión y no se puede cambiar","account.profile.sounds":"Sonido y retroalimentación háptica","account.profile.soundsHelp":"Reproducir sonidos para notificaciones de correo electrónico","account.profile.soundsEnabled":"Sonidos habilitados","account.profile.soundsDisabled":"Sonidos deshabilitados","account.profile.updated":"Perfil actualizado exitosamente","account.profile.avatarUpdated":"Avatar actualizado exitosamente","account.profile.avatarError":"Error al actualizar el avatar","account.security.title":"Seguridad","account.security.desc":"Actualiza tu contraseña","account.security.newPassword":"Nueva contraseña","account.security.confirmPassword":"Confirmar contraseña","account.security.updatePassword":"Actualizar contraseña","account.security.enterPassword":"Por favor ingresa una contraseña","account.security.passwordsMismatch":"Las contraseñas no coinciden","account.security.passwordTooShort":"La contraseña debe tener al menos 6 caracteres","account.security.passwordChanged":"Contraseña cambiada exitosamente","account.database.title":"Conexión a la base de datos","account.database.desc":"Administra tu conexión Supabase","account.database.connected":"Conectado","account.database.noConnection":"Sin conexión","account.database.configureHelp":"Configura tu conexión Supabase en el asistente de configuración","account.database.anonKey":"Clave anónima","account.database.envAlert":"Conexión configurada mediante variables de entorno","account.database.changeConnection":"Cambiar conexión","account.database.clearConfig":"Borrar configuración","account.database.clearConfirm":"¿Estás seguro de que deseas borrar tu configuración de base de datos?","account.database.setup":"Configurar base de datos","trace.runTrace":"Rastreo de ejecución de sincronización","trace.fullLogFor":"Registro completo para la cuenta: {email}","trace.historicalLog":"Registro histórico para esta ejecución de sincronización.","trace.loadingTrace":"Cargando rastreo...","trace.noTraceEvents":"No se encontraron eventos de rastreo granulares para esta ejecución.","analytics.title":"Panel de analítica","analytics.totalEmails":"Total de correos electrónicos","analytics.spamCaught":"Spam capturado","analytics.actionsTaken":"Acciones tomadas","analytics.accounts":"Cuentas","analytics.categories":"Categorías de correo electrónico","analytics.recentActivity":"Actividad de sincronización reciente","analytics.noActivity":"Aún no hay actividad de sincronización","analytics.emails":"{count} correos electrónicos","analytics.deleted":"{count} eliminados","analytics.drafted":"{count} borradores","autopilot.title":"Reglas de piloto automático","autopilot.rulesEnabled":"{enabled} de {total} reglas habilitadas","autopilot.loadingRules":"Cargando reglas...","autopilot.loadError":"Error al cargar reglas","autopilot.deleteConfirm":"¿Estás seguro de que deseas eliminar esta regla?","autopilot.ruleDeleted":"Regla eliminada","autopilot.ruleDeleteFailed":"Error al eliminar regla","autopilot.ruleDeleteError":"Ocurrió un error al eliminar la regla","autopilot.ruleUpdated":"Regla actualizada","autopilot.ruleCreated":"Regla creada","autopilot.ruleUpdateFailed":"Error al actualizar regla","autopilot.ruleCreateFailed":"Error al crear regla","autopilot.ruleSaveError":"Ocurrió un error al guardar la regla","autopilot.fileUploaded":"Archivo subido","autopilot.fileUploadFailed":"Error al subir archivo","autopilot.noRulesTitle":"Aún no hay reglas","autopilot.noRulesDesc":"Las reglas se crearán automáticamente cuando te registres o conectes tu primera cuenta de correo electrónico.","autopilot.addCustomRule":"Agregar regla personalizada","autopilot.refresh":"Actualizar","autopilot.infoDesc":"Las reglas de piloto automático usan IA para organizar automáticamente tu bandeja de entrada. Activa o desactiva cualquier regla para personalizar el comportamiento.","autopilot.customRules":"Reglas personalizadas","autopilot.customRulesDesc":"Reglas que has creado manualmente","autopilot.category.email_organization.label":"Organización de correo electrónico","autopilot.category.email_organization.desc":"Organizar automáticamente tipos comunes de correo electrónico","autopilot.category.priority_alerts.label":"Prioridad y alertas","autopilot.category.priority_alerts.desc":"Resaltar mensajes urgentes e importantes","autopilot.category.development.label":"Desarrollo","autopilot.category.development.desc":"Notificaciones de GitHub, CI/CD y herramientas de desarrollo","autopilot.category.sales_business.label":"Ventas y negocios","autopilot.category.sales_business.desc":"Gestión de clientes potenciales y comunicaciones comerciales","autopilot.category.operations.label":"Operaciones","autopilot.category.operations.desc":"Soporte, solicitudes internas y alertas del sistema","autopilot.enabledCount":"({enabled}/{total} habilitadas)","autopilot.badge":"Piloto automático","autopilot.editRuleTooltip":"Editar regla","autopilot.deleteRuleTooltip":"Eliminar regla","autopilot.triggeredToday":"{count} hoy","autopilot.editDialog.editTitle":"Editar regla","autopilot.editDialog.createTitle":"Crear regla personalizada","autopilot.editDialog.desc":"Definir una condición basada en el análisis de IA para activar una acción.","autopilot.editDialog.ruleName":"Nombre de la regla","autopilot.editDialog.namePlaceholder":"ej. Archivar boletines","autopilot.editDialog.description":"Descripción","autopilot.editDialog.descPlaceholder":"ej. Manejar todos los boletines de marketing y contenido promocional de servicios de suscripción","autopilot.editDialog.descriptionHelp":"Describe para qué es esta regla. La IA usa esto para hacer coincidir semánticamente los correos electrónicos.","autopilot.editDialog.intent":"Intención","autopilot.editDialog.intentPlaceholder":"ej. Rechazar cortésmente todas las propuestas de ventas","autopilot.editDialog.intentHelp":"El objetivo de esta regla. Se usa para generar borradores de respuesta apropiados.","autopilot.editDialog.conditionField":"Campo de condición Si","autopilot.editDialog.aiAnalysisGroup":"Análisis de IA","autopilot.editDialog.metadataGroup":"Metadatos","autopilot.editDialog.category":"Categoría","autopilot.editDialog.sentiment":"Sentimiento","autopilot.editDialog.priority":"Prioridad","autopilot.editDialog.senderEmail":"Correo electrónico específico (Exacto)","autopilot.editDialog.senderDomain":"Dominio de correo electrónico (@...)","autopilot.editDialog.senderContains":"El remitente contiene...","autopilot.editDialog.subjectContains":"El asunto contiene...","autopilot.editDialog.bodyContains":"El cuerpo contiene...","autopilot.editDialog.equalsValue":"Valor igual","autopilot.editDialog.cat.newsletter":"Boletín","autopilot.editDialog.cat.news":"Noticias","autopilot.editDialog.cat.spam":"Spam","autopilot.editDialog.cat.promotional":"Promocional","autopilot.editDialog.cat.transactional":"Transaccional","autopilot.editDialog.cat.social":"Social","autopilot.editDialog.cat.support":"Soporte","autopilot.editDialog.cat.client":"Cliente","autopilot.editDialog.cat.internal":"Interno","autopilot.editDialog.cat.personal":"Personal","autopilot.editDialog.cat.other":"Otro","autopilot.editDialog.sent.positive":"Positivo","autopilot.editDialog.sent.neutral":"Neutral","autopilot.editDialog.sent.negative":"Negativo","autopilot.editDialog.prio.high":"Alto","autopilot.editDialog.prio.medium":"Medio","autopilot.editDialog.prio.low":"Bajo","autopilot.editDialog.keywordsPlaceholder":"Palabras clave...","autopilot.editDialog.olderThan":"Solo si el correo electrónico es más antiguo que... (Opcional)","autopilot.editDialog.days":"días","autopilot.editDialog.olderThanHelp":"Deja vacío o 0 para aplicar la regla inmediatamente al recibirlo.","autopilot.editDialog.performActions":"Luego realizar acción(es)","autopilot.editDialog.actionsDesc":"Selecciona una o más acciones para ejecutar cuando la regla coincida","autopilot.editDialog.action.archive":"Archivar correo electrónico","autopilot.editDialog.action.delete":"Eliminar correo electrónico","autopilot.editDialog.action.draft":"Borrador de respuesta","autopilot.editDialog.action.star":"Estrella / Marcar","autopilot.editDialog.draftInstructions":"Instrucciones de borrador (Contexto)","autopilot.editDialog.draftInstPlaceholder":"ej. Diles que estoy ocupado hasta el viernes, pero interesado en la propuesta.","autopilot.editDialog.draftInstHelp":"Contexto específico para el escritor fantasma de IA.","autopilot.editDialog.attachments":"Archivos adjuntos (Opcional)","autopilot.editDialog.uploading":"Subiendo...","autopilot.editDialog.addAttachment":"Agregar archivo adjunto","autopilot.editDialog.attachmentsHelp":"Los archivos se adjuntarán a cada borrador generado por esta regla.","autopilot.onboarding.allSet":"¡Todo listo!","autopilot.onboarding.enabledDesc":"Hemos habilitado {count} reglas de automatización para ti","autopilot.onboarding.rules":"reglas","autopilot.onboarding.universalDesc":"Reglas esenciales que ayudan a todos a mantenerse organizados","autopilot.onboarding.executiveDesc":"Enfocarse en comunicaciones de alta prioridad y asuntos estratégicos","autopilot.onboarding.developerDesc":"Resaltar alertas críticas y filtrar ruido de herramientas","autopilot.onboarding.salesDesc":"Priorizar clientes potenciales y comunicaciones con clientes","autopilot.onboarding.operationsDesc":"Organizar tickets y comunicaciones internas","autopilot.onboarding.tip":"Consejo: Todas las reglas están habilitadas por defecto, pero puedes personalizarlas o deshabilitarlas en cualquier momento en la sección de Piloto automático.","autopilot.onboarding.start":"Comenzar a usar Email Automator →","autopilot.role.title":"¡Un último paso!","autopilot.role.subtitle":"¿Qué describe mejor tu rol? Configuraremos las reglas de automatización adecuadas para ti.","autopilot.role.executive.label":"Ejecutivo / Liderazgo","autopilot.role.executive.desc":"Enfocarse en VIP, contratos y comunicaciones estratégicas","autopilot.role.executive.preview":"Priorizador de clientes VIP;Organizador de viajes;Legal y contratos","autopilot.role.sales.label":"Ventas / Desarrollo de negocios","autopilot.role.sales.desc":"Priorizar clientes potenciales y comunicaciones con clientes","autopilot.role.sales.preview":"Preguntas de clientes;Organizador de CRM;Seguimiento de propuestas","autopilot.role.developer.label":"Desarrollador / Ingeniero","autopilot.role.developer.desc":"Resaltar alertas críticas y filtrar ruido de herramientas","autopilot.role.developer.preview":"Alertas del sistema;Revisiones de código;Gestión de proyectos","autopilot.role.operations.label":"Operaciones / Soporte","autopilot.role.operations.desc":"Organizar tickets y comunicaciones internas","autopilot.role.operations.preview":"Tickets de soporte;Monitoreo del sistema;Comunicaciones internas","autopilot.role.marketing.label":"Marketing","autopilot.role.marketing.desc":"Seguir campañas y participación de clientes","autopilot.role.marketing.preview":"Seguimiento de campañas;Informes de analítica;Redes sociales","autopilot.role.other.label":"Otro / Configuración manual","autopilot.role.other.desc":"Configuraré mis propias reglas de automatización","autopilot.role.includes":"Incluye:","autopilot.role.skip":"Omitir por ahora","autopilot.role.settingUp":"Configurando...","autopilot.role.continue":"Continuar →","terminal.title":"Terminal del agente","terminal.liveActivity":"Actividad en vivo","terminal.syncing":"SINCRONIZANDO","terminal.live":"EN VIVO","terminal.stopSync":"DETENER SINCRONIZACIÓN","terminal.clear":"Borrar","terminal.waiting":"Esperando actividad del agente...","terminal.details":"Detalles","terminal.useless":"INÚTIL","terminal.relevant":"RELEVANTE","terminal.executionComplete":"Ejecución completada","terminal.batchFinished":"Sincronización por lotes finalizada","terminal.processed":"Procesado","terminal.actions":"Acciones","terminal.action.delete":"Movido a la papelera","terminal.action.archive":"Correo electrónico archivado","terminal.action.draft":"Borrador de respuesta creado","terminal.action.star":"Correo electrónico marcado con estrella","common.edit":"Editar","persona.title":"Persona Digital","persona.subtitle":"Gestiona cómo tu asistente de IA te representa.","persona.identity":"Identidad","persona.communication":"Comunicación","persona.automation":"Automatización","persona.network":"Red","persona.edit.title":"Editar Persona","persona.edit.desc":"Actualiza las preferencias de tu asistente digital.","config.outlook.openLogin":"Abrir inicio de sesión de Microsoft","config.llm.title":"LLM","config.model.defaultProvider":"RealTimeX AI (predeterminado)","config.model.discovering":"Descubriendo...","config.storage.title":"Ruta de almacenamiento","config.storage.desc":"Elige dónde se almacenan localmente los archivos de correo sin procesar","config.storage.label":"Ruta de almacenamiento local","config.storage.placeholder":"p. ej. /Users/you/Documents/email-archive","config.storage.help":"Debe tener permisos de escritura. Déjalo en blanco para usar la carpeta predeterminada de la aplicación.","config.rename.title":"Renombrado inteligente","config.rename.desc":"Controla el formato de nombres de archivo para los correos almacenados","config.rename.label":"Habilitar renombrado inteligente","config.rename.help":"Crea nombres legibles y con slug en lugar de ID de mensaje sin formato.","config.sync.title":"Intervalo de sincronización (minutos)","config.sync.desc":"Controla cada cuánto se ejecuta la sincronización en segundo plano","config.sync.label":"Minutos entre sincronizaciones","config.sync.help":"Valores más bajos aumentan la frescura pero pueden usar más recursos.","config.embed.title":"Embeddings (RAG)","config.embed.desc":"Configura embeddings para la búsqueda en la base de conocimiento (RAG).","config.embed.provider":"Proveedor de embeddings","config.embed.model":"Modelo de embeddings","config.embed.modelPlaceholder":"p. ej. text-embedding-3-small","config.embed.autoModel":"Auto (text-embedding-3-small)","config.embed.help":"Se usa para la búsqueda semántica en la base de conocimiento.","config.embed.discovering":"Descubriendo...","config.embed.defaultProvider":"RealTimeX AI (predeterminado)","config.byok.googleTitle":"Google / Gmail","config.byok.microsoftTitle":"Microsoft / Outlook","config.byok.clientId":"ID de cliente","config.byok.clientSecret":"Secreto de cliente","config.byok.clientSecretOptional":"Secreto de cliente (opcional)","config.byok.tenantId":"ID de inquilino","config.voice.title":"Voz y habla","config.voice.desc":"Configura texto a voz para las respuestas de IA","config.voice.autoTitle":"Auto‑hablar respuestas de IA","config.voice.autoHelp":"Leer automáticamente en voz alta las respuestas de la IA con texto a voz","config.voice.provider":"Proveedor TTS","config.voice.providerHelp":"Selecciona el proveedor de texto a voz","config.voice.loadingProviders":"Cargando proveedores...","config.voice.voice":"Voz","config.voice.selectVoice":"Selecciona una voz","config.voice.noVoices":"No hay voces disponibles","config.voice.voiceHelp":"Elige la personalidad de voz para la síntesis","config.voice.speed":"Velocidad","config.voice.speedSlow":"0.5x (Más lento)","config.voice.speedFast":"2.0x (Más rápido)","config.voice.quality":"Calidad","config.voice.qualityLow":"1 (Menor calidad, más rápido)","config.voice.qualityHigh":"20 (Mayor calidad, más lento)","config.voice.test":"Probar","config.voice.save":"Guardar ajustes","config.voice.testText":"¡Hola! Esta es una prueba del sistema de texto a voz.","config.voice.piperLocal":"Piper (Local)","config.voice.toast.providersFailed":"No se pudieron cargar los proveedores TTS. Asegúrate de que RealTimeX Desktop esté en ejecución.","config.voice.toast.serviceFailed":"No se pudo conectar al servicio TTS","config.voice.toast.testFailed":"No se pudo probar el texto a voz","config.voice.toast.saved":"Ajustes de voz y habla guardados","config.voice.toast.saveFailed":"No se pudieron guardar los ajustes","config.voice.toast.autoOn":"Auto‑hablar respuestas de IA activado","config.voice.toast.autoOff":"Auto‑hablar respuestas de IA desactivado","config.voice.toast.updateFailed":"No se pudo actualizar el ajuste","config.agent.systemInstruction":"Eres el asistente de configuración. Guía al usuario para configurar cuentas, reglas y preferencias del sistema. Explica cada ajuste y ayuda a solucionar conexiones.","config.toast.providersFailed":"No se pudieron cargar los proveedores","config.toast.providersFailedFallback":"No se pudieron cargar los proveedores. Se usan los valores predeterminados.","config.toast.embedProvidersFailed":"No se pudieron cargar los proveedores de embeddings","config.toast.embedProvidersFailedFallback":"No se pudieron cargar los proveedores de embeddings. Se usan los valores predeterminados.","config.toast.connectionFailed":"Conexión fallida","config.toast.systemRuleMissing":"Regla del sistema no encontrada. Sincroniza tu base de datos.","config.toast.startConnectionFailed":"No se pudo iniciar la conexión. Asegúrate de haber iniciado sesión.","config.toast.startGmailFailed":"No se pudo iniciar la conexión con Gmail","config.toast.detectedDesktopCreds":"Se detectaron credenciales de app de escritorio","config.toast.detectedWebCreds":"Se detectó una app web. Asegúrate de configurar el URI de redirección en Google Cloud Console","config.toast.missingGmailCreds":"Proporciona el ID de cliente y el secreto de cliente","config.toast.authorizeAndPaste":"Autoriza en la pestaña abierta y luego pega el código aquí","config.toast.oauthUrlFailed":"No se pudo obtener la URL de OAuth","config.toast.saveCredsFailed":"No se pudieron guardar las credenciales","config.toast.missingAuthCode":"Pega el código de autorización","config.toast.gmailConnected":"¡Cuenta de Gmail conectada correctamente!","config.toast.gmailConnectFailed":"No se pudo conectar Gmail","config.toast.missingOutlookClientId":"Proporciona el ID de cliente","config.toast.deviceFlowFailed":"No se pudo iniciar el flujo de dispositivo","config.toast.outlookStartFailed":"No se pudo iniciar la conexión con Outlook","config.toast.outlookConnected":"Cuenta de Outlook conectada","config.toast.connectionTimedOut":"La conexión agotó el tiempo. Inténtalo de nuevo.","config.toast.ruleNameRequired":"Asigna un nombre a tu regla","config.toast.ruleActionRequired":"Selecciona al menos una acción","config.toast.ruleUpdated":"Regla actualizada","config.toast.ruleCreated":"Regla creada","config.toast.ruleUpdateFailed":"No se pudo actualizar la regla","config.toast.ruleCreateFailed":"No se pudo crear la regla","config.toast.ruleSaveError":"Ocurrió un error al guardar la regla","config.toast.disconnectConfirm":"¿Seguro que quieres desconectar esta cuenta?","config.toast.accountDisconnected":"Cuenta desconectada","config.toast.settingsSaved":"Ajustes guardados","config.toast.fileUploaded":"Archivo subido","config.toast.fileUploadFailed":"No se pudo subir el archivo","config.providers.gmail":"Gmail","config.providers.outlook":"Outlook","config.gmail.authSteps":`1. Se abrió una nueva pestaña con Google Sign-In
|
|
47
|
+
2. Inicia sesión y autoriza la app
|
|
48
|
+
3. Copia el código de autorización mostrado
|
|
49
|
+
4. Pégalo abajo`,"config.gmail.authCode":"Código de autorización","config.gmail.clientIdPlaceholder":"xxx.apps.googleusercontent.com","config.gmail.clientSecretPlaceholder":"GOCSPX-...","config.gmail.authCodePlaceholder":"4/0AQlEd8x...","config.rules.actionsHelp":"Selecciona una o más acciones para ejecutar cuando la regla coincida","config.rules.instructionsPlaceholder":"p. ej. Diles que estoy ocupado hasta el viernes, pero interesado en la propuesta.","config.rules.attachmentsOptional":"Adjuntos (opcional)","config.rules.days":"días","config.rules.placeholder.domain":"rta.vn","config.rules.placeholder.email":"john@example.com","config.rules.category.newsletter":"Boletín","config.rules.category.spam":"Spam","config.rules.category.promotional":"Promocional","config.rules.category.transactional":"Transaccional","config.rules.category.social":"Social","config.rules.category.support":"Soporte","config.rules.category.client":"Cliente","config.rules.category.internal":"Interno","config.rules.category.personal":"Personal","config.rules.category.other":"Otro","config.rules.sentiment.positive":"Positivo","config.rules.sentiment.neutral":"Neutral","config.rules.sentiment.negative":"Negativo","config.rules.priority.high":"Alta","config.rules.priority.medium":"Media","config.rules.priority.low":"Baja","config.outlook.note":"Nota: Necesitas un registro de aplicación de Azure para que funcione.","config.outlook.clientId":"ID de cliente (ID de la aplicación)","config.outlook.tenantIdOptional":"ID de inquilino (opcional)","config.outlook.tenantHelp":'El valor predeterminado es "common". Usa tu ID de inquilino específico para cuentas de organización.',"config.outlook.saveConnect":"Guardar y conectar","config.outlook.actionRequired":"Acción requerida","config.outlook.waitingAuth":"Esperando autorización...","config.outlook.tenantPlaceholder":"common"};export{e as default};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const e={"app.name":"Email Automator","app.connecting":"Connexion du compte...","app.loadingWorkspace":"Chargement de votre espace de travail...","app.loggedOut":"Déconnexion réussie","app.statusLive":"EN DIRECT","app.statusOffline":"HORS LIGNE","common.loading":"Chargement...","common.save":"Enregistrer les modifications","common.cancel":"Annuler","common.delete":"Supprimer","common.success":"Succès","common.error":"Erreur","common.warning":"Avertissement","common.syncNow":"Synchroniser maintenant","common.syncing":"Synchronisation...","common.stopSync":"Arrêter la synchronisation","common.systemSync":"Synchronisation système","common.viewLogs":"Voir les journaux","common.saveChanges":"Enregistrer les modifications","common.errorOccurred":"Une erreur s'est produite","common.previous":"Précédent","common.next":"Suivant","common.of":"sur","common.yes":"Oui","common.no":"Non","common.archive":"Archiver","common.flag":"Marquer","common.on":"Activé","common.off":"Désactivé","common.enabled":"Activé","common.disabled":"Désactivé","common.active":"Actif","common.inactive":"Inactif","common.draft":"Brouillon","common.star":"Étoile","nav.dashboard":"Tableau de bord","nav.drafts":"Brouillons","nav.autopilot":"Pilote automatique","nav.analytics":"Analytique","nav.configuration":"Configuration","nav.accountSettings":"Paramètres du compte","nav.signOut":"Se déconnecter","drafts.title":"Centre de révision des brouillons","drafts.pending":"brouillons en attente","drafts.noDrafts":"Aucun brouillon en attente","drafts.noDraftsDesc":"Les réponses brouillons générées par l'IA apparaîtront ici pour votre révision","drafts.send":"Envoyer maintenant","drafts.preview":"Aperçu","drafts.dismiss":"Ignorer","drafts.regenerate":"Régénérer","drafts.selectAll":"Tout sélectionner","drafts.sendSelected":"Envoyer la sélection","drafts.dismissSelected":"Ignorer la sélection","drafts.filterByAccount":"Tous les comptes","drafts.filterByDate":"Filtrer par date","drafts.originalEmail":"Email original","drafts.aiReply":"Réponse générée par l'IA","drafts.createdBy":"Créé par la règle :","drafts.sendSuccess":"Brouillon envoyé avec succès !","drafts.sendError":"Échec de l'envoi du brouillon","drafts.dismissSuccess":"Brouillon ignoré","drafts.loadError":"Échec du chargement des brouillons","login.title":"Bienvenue","login.subtitle":"Connectez-vous à votre agent email IA","login.email":"Adresse e-mail","login.password":"Mot de passe","login.signIn":"Se connecter","login.noAccount":"Vous n'avez pas de compte ?","login.alreadyHaveAccount":"Vous avez déjà un compte ?","login.signUp":"S'inscrire","login.forgotPassword":"Mot de passe oublié ?","login.initialize":"Initialiser Automator","login.secureLogin":"Connexion sécurisée","login.firstNamePlaceholder":"Jean","login.lastNamePlaceholder":"Dupont","login.emailPlaceholder":"admin@automator.ai","login.initializeMaster":"Initialiser le maître","login.sendMagicLink":"Envoyer le lien magique","login.openDashboard":"Ouvrir le tableau de bord","setup.title":"Configuration du système","setup.initiation":"Bienvenue","setup.coordinates":"Détails de connexion","setup.foundation":"Configuration de la base de données","setup.ignition":"Lancement","setup.start":"Démarrer la configuration","setup.welcomeTitle":"Initialisation d'Automator","setup.welcomeSubtitle":"Configuration de votre environnement spécialisé pour l'intelligence de boîte de réception haute fréquence.","setup.encryptedTitle":"Chiffré","setup.encryptedDesc":"Sécurité des données auto-hébergées.","setup.turboTitle":"Turbo","setup.turboDesc":"Inférence IA en moins d'une seconde.","setup.getStarted":"Commencer","setup.connectionMode":"Mode de connexion","setup.selectVector":"Sélectionner le mode de déploiement","setup.quickIgnition":"Démarrage rapide","setup.autoProvision":"Provisionnement automatique via jeton","setup.manualSync":"Synchronisation manuelle","setup.existingCredentials":"Identifiants existants","setup.abortAccess":"Abandonner l'accès","setup.injectCoordinates":"Entrer les identifiants existants","setup.platformUrl":"URL de la plateforme","setup.urlHelp":"Entrez l'URL complète ou uniquement l'ID du projet","setup.anonMatrixKey":"Clé anonyme Supabase","setup.keyHelp":"Trouvée dans les paramètres de votre projet Supabase","setup.back":"Retour","setup.engage":"Connecter","setup.installation":"Installation","setup.applyingSchema":"Configuration de la base de données...","setup.emptyProject":"Projet vide détecté. L'initialisation est obligatoire pour installer les systèmes IA de base.","setup.versionMismatch":"Incompatibilité de version détectée. Normalisation recommandée.","setup.tokenRequired":"Jeton de gestion requis","setup.migrateHelp":"Utilisé une fois pour exécuter les migrations sur votre backend.","setup.bypassRisk":"Contourner (Risqué)","setup.installSystems":"Installer les systèmes","setup.normalizeSystem":"Normaliser le système","setup.retryInstallation":"Réessayer l'installation","setup.agent.systemInstruction":"Vous êtes l'assistant du guide de configuration. Aidez l'utilisateur à connecter Supabase, choisir un mode de configuration et terminer les migrations. Ne demandez que l'information suivante nécessaire et fournissez des étapes claires. Si l'utilisateur dit « aide-moi à configurer », listez immédiatement les étapes de ce guide.","agent.intro.setup":`👋 Bienvenue dans la configuration ! Je peux vous aider à :
|
|
2
|
+
• Choisir un démarrage rapide ou une configuration manuelle
|
|
3
|
+
• Connecter votre projet Supabase
|
|
4
|
+
• Exécuter les migrations de base de données
|
|
5
|
+
• Résoudre les problèmes de connexion
|
|
6
|
+
|
|
7
|
+
Dites-moi ce que vous souhaitez faire ou dites « aide-moi à configurer ».`,"agent.intro.configuration":`👋 Bienvenue dans la configuration ! Je peux vous aider à :
|
|
8
|
+
• Connecter des comptes e-mail ({accountsCount} connectés)
|
|
9
|
+
• Configurer des règles d'automatisation ({rulesCount} actives)
|
|
10
|
+
• Configurer les paramètres LLM et TTS
|
|
11
|
+
• Résoudre les problèmes de connexion
|
|
12
|
+
|
|
13
|
+
Que souhaitez-vous configurer ?`,"agent.intro.drafts.one":`📧 Je suis votre assistant de révision de brouillons !
|
|
14
|
+
|
|
15
|
+
Vous avez {count} brouillon en attente.
|
|
16
|
+
|
|
17
|
+
Je peux vous aider à :
|
|
18
|
+
• Résumer tous les brouillons
|
|
19
|
+
• Envoyer ou ignorer des brouillons spécifiques
|
|
20
|
+
• Aperçu du contenu des brouillons
|
|
21
|
+
• Réviser les destinataires et les objets
|
|
22
|
+
|
|
23
|
+
Essayez : « Résumez mes brouillons » ou « Envoyez le brouillon à Jean »`,"agent.intro.drafts.other":`📧 Je suis votre assistant de révision de brouillons !
|
|
24
|
+
|
|
25
|
+
Vous avez {count} brouillons en attente.
|
|
26
|
+
|
|
27
|
+
Je peux vous aider à :
|
|
28
|
+
• Résumer tous les brouillons
|
|
29
|
+
• Envoyer ou ignorer des brouillons spécifiques
|
|
30
|
+
• Aperçu du contenu des brouillons
|
|
31
|
+
• Réviser les destinataires et les objets
|
|
32
|
+
|
|
33
|
+
Essayez : « Résumez mes brouillons » ou « Envoyez le brouillon à Jean »`,"agent.intro.explainer":`🌐 Assistant de traduction et d'explication
|
|
34
|
+
|
|
35
|
+
Je peux vous aider à comprendre :
|
|
36
|
+
• Ce que signifient les règles d'automatisation
|
|
37
|
+
• Comment les paramètres affectent votre flux de travail
|
|
38
|
+
• Les termes techniques en langage simple
|
|
39
|
+
|
|
40
|
+
Posez-moi n'importe quelle question sur ce que vous voyez !`,"agent.intro.global":`👋 Bonjour ! Je suis votre assistant IA.
|
|
41
|
+
|
|
42
|
+
Je peux vous aider à naviguer et comprendre n'importe quelle partie de l'Email Automator.
|
|
43
|
+
|
|
44
|
+
Que souhaitez-vous savoir ?`,"agent.intro.default":`👋 Bonjour ! Je suis ici pour vous aider avec {page}.
|
|
45
|
+
|
|
46
|
+
En quoi puis-je vous aider ?`,"agent.composer.placeholder":"Posez une question, ou cliquez sur le microphone...","agent.composer.listening":"Écoute...","agent.title.setup":"Assistant de Configuration","agent.title.configuration":"Assistant de Paramètres","agent.title.drafts":"Assistant des Brouillons","agent.title.explainer":"Assistant de Traduction","agent.title.global":"Assistant IA","agent.title.default":"Assistant {page}","agent.status.listening":"En écoute...","agent.status.analyzing":"Analyse en cours","agent.status.speaking":"En cours de parole","agent.status.ready":"Prêt","agent.recording":"Enregistrement...","dashboard.recentAnalysis":"Analyse récente","dashboard.emails":"e-mails","dashboard.noEmails":"Aucun e-mail trouvé","dashboard.noEmailsConnected":"Connectez votre compte e-mail pour commencer.","dashboard.noEmailsFilters":"Essayez de synchroniser ou d'ajuster vos filtres.","dashboard.syncInProgress":"Synchronisation en cours...","dashboard.syncInProgressDesc":"Récupération et analyse des e-mails. Les nouveaux e-mails apparaîtront automatiquement ci-dessous.","dashboard.aiTrace":"Trace de traitement IA","dashboard.aiTraceDesc":"Journaux étape par étape de la façon dont l'IA a analysé et agi sur cet e-mail.","dashboard.noTrace":"Aucun événement de trace détaillé trouvé pour cet e-mail.","dashboard.syncNow":"Synchroniser maintenant","dashboard.syncing":"Synchronisation...","dashboard.searchPlaceholder":"Rechercher des e-mails...","dashboard.search":"Rechercher","dashboard.receivedTime":"Heure de réception","dashboard.processedTime":"Heure de traitement","dashboard.receivedAbbr":"REC","dashboard.processedAbbr":"PROC","dashboard.sortOldest":"Tri : Plus ancien en premier","dashboard.sortNewest":"Tri : Plus récent en premier","dashboard.category.all":"Tous","dashboard.category.none":"aucun","dashboard.emailDetails":"Détails de l'e-mail","dashboard.emailContent":"Contenu de l'e-mail (envoyé au LLM)","dashboard.from":"De :","dashboard.subject":"Objet :","dashboard.summary":"Résumé :","dashboard.keyPoints":"Points clés :","dashboard.aiDraftReply":"Brouillon de réponse IA","dashboard.draftSavedHelp":"* Ce brouillon est déjà enregistré dans votre dossier Brouillons {provider}.","dashboard.syncScope":"Portée de synchronisation","dashboard.syncFrom":"Synchroniser depuis","dashboard.maxEmails":"E-mails maximum","dashboard.lastSync":"Dernière synchronisation :","dashboard.error":"Erreur :","dashboard.resetCheckpoint":"Réinitialiser le point de contrôle (Forcer la resynchronisation complète depuis la date de début)","dashboard.syncHistory":"Historique de synchronisation","dashboard.noSyncHistory":"Aucun historique de synchronisation disponible.","dashboard.processed":"Traité :","dashboard.actioned":"Action effectuée :","dashboard.running":"En cours","dashboard.quickStats":"Statistiques rapides","dashboard.totalProcessed":"Total traité","dashboard.connectedAccounts":"Comptes connectés","dashboard.activeRules":"Règles actives","dashboard.noSubject":"Pas d'objet","dashboard.queued":"En file d'attente","dashboard.analyzing":"Analyse en cours","dashboard.analyzed":"Analysé","dashboard.failed":"Échoué","dashboard.retryProcessing":"Réessayer le traitement","dashboard.suggested":"Suggéré :","dashboard.done":"Terminé :","dashboard.deleteConfirm":"Supprimer ?","dashboard.openIn":"Ouvrir dans {provider}","dashboard.viewTraceTooltip":"Voir la trace IA (Prompt/Réponse)","dashboard.syncSuccess":"Synchronisation terminée ! Vérifiez vos e-mails.","dashboard.syncFailed":"Échec de la synchronisation. Vérifiez l'état du compte pour plus de détails.","config.title":"Automatisation et règles","config.rules":"Règles d'automatisation","config.createRule":"Créer une nouvelle règle","config.llmSettings":"Paramètres d'intelligence IA","config.accounts.title":"Comptes e-mail","config.accounts.desc":"Connecter et gérer vos comptes e-mail","config.accounts.addNew":"Ajouter un nouveau compte","config.accounts.yourAccounts":"Vos comptes connectés","config.accounts.noAccounts":"Aucun compte e-mail connecté pour le moment","config.accounts.connectHelp":"Connectez votre premier compte e-mail pour commencer l'automatisation","config.accounts.disconnect":"Déconnecter","config.gmail.connect":"Connecter Gmail","config.gmail.connectDesc":"OAuth 2.0 ou compte de service","config.gmail.credentialsDesc":"Collez le contenu JSON des identifiants Google Cloud","config.gmail.authCodeDesc":"Entrez le code d'autorisation de Google","config.gmail.pasteJson":"Collez le contenu de credentials.json","config.gmail.downloadHelp":"Téléchargez depuis Google Cloud Console → APIs & Services → Credentials","config.gmail.orEnterManually":"Ou entrez manuellement","config.outlook.connect":"Connecter Outlook","config.outlook.connectDesc":"Microsoft 365 ou Outlook.com","config.outlook.credentialsDesc":"Collez le contenu JSON des identifiants Azure App","config.outlook.instructions":"Suivez le flux OAuth pour vous connecter","config.outlook.signinRequired":"Connexion requise","config.outlook.waitingSignin":"En attente de connexion...","config.model.title":"Configuration du modèle IA","config.model.desc":"Configurez votre modèle IA et les paramètres de traitement","config.model.provider":"Fournisseur LLM","config.model.name":"Nom du modèle","config.model.modelPlaceholder":"ex. gpt-4o-mini","config.model.selectModel":"Sélectionner un modèle","config.model.storagePath":"Chemin de stockage","config.model.storagePlaceholder":"Chemin pour le stockage du modèle","config.model.storageHelp":"Répertoire local pour la mise en cache des modèles","config.model.syncInterval":"Intervalle de synchronisation (minutes)","config.model.syncHelp":"Fréquence de vérification des nouveaux e-mails","config.model.intelligentRename":"Renommage intelligent","config.model.renameHelp":"Utiliser l'IA pour suggérer de meilleurs noms de fichiers","config.model.checkConnection":"Vérifier la connexion","config.model.saveConfig":"Enregistrer la configuration","config.byok.title":"Apportez votre propre clé (BYOK)","config.byok.desc":"Utilisez vos propres clés API pour les fournisseurs IA","config.byok.systemDefault":"Utiliser la valeur par défaut du système","config.byok.save":"Enregistrer la clé API","config.rules.edit":"Modifier la règle","config.rules.create":"Créer une règle","config.rules.createRule":"Créer une règle","config.rules.desc":"Définir les conditions et les actions pour l'automatisation des e-mails","config.rules.name":"Nom de la règle","config.rules.namePlaceholder":"ex. Archiver les newsletters","config.rules.description":"Description","config.rules.descriptionPlaceholder":"Ce que fait cette règle","config.rules.semanticHelp":"L'IA fera correspondre les e-mails en fonction de cette description","config.rules.intent":"Intention","config.rules.intentPlaceholder":"Ce qui devrait se passer lorsque cette règle se déclenche","config.rules.intentHelp":"Utilisé pour générer des réponses appropriées","config.rules.conditionField":"Champ de condition","config.rules.aiAnalysis":"Analyse IA","config.rules.metadata":"Métadonnées","config.rules.category":"Catégorie","config.rules.sentiment":"Sentiment","config.rules.priority":"Priorité","config.rules.senderEmail":"E-mail de l'expéditeur","config.rules.senderDomain":"Domaine de l'expéditeur","config.rules.senderContains":"L'expéditeur contient","config.rules.subjectContains":"L'objet contient","config.rules.bodyContains":"Le corps contient","config.rules.equalsValue":"Valeur égale","config.rules.keywordsPlaceholder":"Entrez des mots-clés...","config.rules.olderThan":"Seulement si l'e-mail est plus ancien que (jours)","config.rules.olderThanHelp":"Laissez vide ou 0 pour appliquer immédiatement","config.rules.performActions":"Puis effectuer des actions","config.rules.draftInstructions":"Instructions de brouillon","config.rules.contextHelp":"Contexte spécifique pour l'IA à utiliser lors de la rédaction","config.rules.addAttachment":"Ajouter une pièce jointe","config.rules.attachmentHelp":"Les fichiers seront joints aux brouillons générés","config.rules.uploading":"Téléchargement...","config.rules.saveChanges":"Enregistrer les modifications","account.title":"Paramètres du compte","account.subtitle":"Gérer votre profil et vos préférences","account.profile":"Profil","account.security":"Sécurité","account.database":"Supabase","account.logout":"Se déconnecter","account.logoutSuccess":"Déconnexion réussie","account.version":"Version","account.profile.title":"Informations du profil","account.profile.desc":"Mettre à jour vos informations personnelles","account.profile.firstName":"Prénom","account.profile.firstNamePlaceholder":"Jean","account.profile.lastName":"Nom","account.profile.lastNamePlaceholder":"Dupont","account.profile.email":"E-mail","account.profile.emailHelp":"Ceci est votre e-mail de connexion et ne peut pas être modifié","account.profile.sounds":"Son et retour haptique","account.profile.soundsHelp":"Jouer des sons pour les notifications par e-mail","account.profile.soundsEnabled":"Sons activés","account.profile.soundsDisabled":"Sons désactivés","account.profile.updated":"Profil mis à jour avec succès","account.profile.avatarUpdated":"Avatar mis à jour avec succès","account.profile.avatarError":"Échec de la mise à jour de l'avatar","account.security.title":"Sécurité","account.security.desc":"Mettre à jour votre mot de passe","account.security.newPassword":"Nouveau mot de passe","account.security.confirmPassword":"Confirmer le mot de passe","account.security.updatePassword":"Mettre à jour le mot de passe","account.security.enterPassword":"Veuillez entrer un mot de passe","account.security.passwordsMismatch":"Les mots de passe ne correspondent pas","account.security.passwordTooShort":"Le mot de passe doit contenir au moins 6 caractères","account.security.passwordChanged":"Mot de passe modifié avec succès","account.database.title":"Connexion à la base de données","account.database.desc":"Gérer votre connexion Supabase","account.database.connected":"Connecté","account.database.noConnection":"Aucune connexion","account.database.configureHelp":"Configurez votre connexion Supabase dans l'assistant de configuration","account.database.anonKey":"Clé anonyme","account.database.envAlert":"Connexion configurée via des variables d'environnement","account.database.changeConnection":"Changer la connexion","account.database.clearConfig":"Effacer la configuration","account.database.clearConfirm":"Êtes-vous sûr de vouloir effacer votre configuration de base de données ?","account.database.setup":"Configurer la base de données","trace.runTrace":"Trace d'exécution de synchronisation","trace.fullLogFor":"Journal complet pour le compte : {email}","trace.historicalLog":"Journal historique pour cette exécution de synchronisation.","trace.loadingTrace":"Chargement de la trace...","trace.noTraceEvents":"Aucun événement de trace granulaire trouvé pour cette exécution.","analytics.title":"Tableau de bord analytique","analytics.totalEmails":"Total des e-mails","analytics.spamCaught":"Spam attrapé","analytics.actionsTaken":"Actions effectuées","analytics.accounts":"Comptes","analytics.categories":"Catégories d'e-mails","analytics.recentActivity":"Activité de synchronisation récente","analytics.noActivity":"Aucune activité de synchronisation pour le moment","analytics.emails":"{count} e-mails","analytics.deleted":"{count} supprimés","analytics.drafted":"{count} brouillons","autopilot.title":"Règles de pilote automatique","autopilot.rulesEnabled":"{enabled} sur {total} règles activées","autopilot.loadingRules":"Chargement des règles...","autopilot.loadError":"Échec du chargement des règles","autopilot.deleteConfirm":"Êtes-vous sûr de vouloir supprimer cette règle ?","autopilot.ruleDeleted":"Règle supprimée","autopilot.ruleDeleteFailed":"Échec de la suppression de la règle","autopilot.ruleDeleteError":"Une erreur s'est produite lors de la suppression de la règle","autopilot.ruleUpdated":"Règle mise à jour","autopilot.ruleCreated":"Règle créée","autopilot.ruleUpdateFailed":"Échec de la mise à jour de la règle","autopilot.ruleCreateFailed":"Échec de la création de la règle","autopilot.ruleSaveError":"Une erreur s'est produite lors de l'enregistrement de la règle","autopilot.fileUploaded":"Fichier téléchargé","autopilot.fileUploadFailed":"Échec du téléchargement du fichier","autopilot.noRulesTitle":"Aucune règle pour le moment","autopilot.noRulesDesc":"Les règles seront automatiquement créées lorsque vous vous inscrirez ou connecterez votre premier compte e-mail.","autopilot.addCustomRule":"Ajouter une règle personnalisée","autopilot.refresh":"Actualiser","autopilot.infoDesc":"Les règles de pilote automatique utilisent l'IA pour organiser automatiquement votre boîte de réception. Activez ou désactivez n'importe quelle règle pour personnaliser le comportement.","autopilot.customRules":"Règles personnalisées","autopilot.customRulesDesc":"Règles que vous avez créées manuellement","autopilot.category.email_organization.label":"Organisation des e-mails","autopilot.category.email_organization.desc":"Organiser automatiquement les types d'e-mails courants","autopilot.category.priority_alerts.label":"Priorité et alertes","autopilot.category.priority_alerts.desc":"Mettre en évidence les messages urgents et importants","autopilot.category.development.label":"Développement","autopilot.category.development.desc":"Notifications GitHub, CI/CD et outils de développement","autopilot.category.sales_business.label":"Ventes et affaires","autopilot.category.sales_business.desc":"Gestion des prospects et communications commerciales","autopilot.category.operations.label":"Opérations","autopilot.category.operations.desc":"Support, demandes internes et alertes système","autopilot.enabledCount":"({enabled}/{total} activées)","autopilot.badge":"Pilote automatique","autopilot.editRuleTooltip":"Modifier la règle","autopilot.deleteRuleTooltip":"Supprimer la règle","autopilot.triggeredToday":"{count} aujourd'hui","autopilot.editDialog.editTitle":"Modifier la règle","autopilot.editDialog.createTitle":"Créer une règle personnalisée","autopilot.editDialog.desc":"Définir une condition basée sur l'analyse IA pour déclencher une action.","autopilot.editDialog.ruleName":"Nom de la règle","autopilot.editDialog.namePlaceholder":"ex. Archiver les newsletters","autopilot.editDialog.description":"Description","autopilot.editDialog.descPlaceholder":"ex. Gérer toutes les newsletters marketing et le contenu promotionnel des services d'abonnement","autopilot.editDialog.descriptionHelp":"Décrivez à quoi sert cette règle. L'IA utilise cela pour faire correspondre sémantiquement les e-mails.","autopilot.editDialog.intent":"Intention","autopilot.editDialog.intentPlaceholder":"ex. Refuser poliment toutes les propositions de vente","autopilot.editDialog.intentHelp":"L'objectif de cette règle. Utilisé pour générer des brouillons de réponse appropriés.","autopilot.editDialog.conditionField":"Champ de condition Si","autopilot.editDialog.aiAnalysisGroup":"Analyse IA","autopilot.editDialog.metadataGroup":"Métadonnées","autopilot.editDialog.category":"Catégorie","autopilot.editDialog.sentiment":"Sentiment","autopilot.editDialog.priority":"Priorité","autopilot.editDialog.senderEmail":"E-mail spécifique (Exact)","autopilot.editDialog.senderDomain":"Domaine d'e-mail (@...)","autopilot.editDialog.senderContains":"L'expéditeur contient...","autopilot.editDialog.subjectContains":"L'objet contient...","autopilot.editDialog.bodyContains":"Le corps contient...","autopilot.editDialog.equalsValue":"Valeur égale","autopilot.editDialog.cat.newsletter":"Newsletter","autopilot.editDialog.cat.news":"Actualités","autopilot.editDialog.cat.spam":"Spam","autopilot.editDialog.cat.promotional":"Promotionnel","autopilot.editDialog.cat.transactional":"Transactionnel","autopilot.editDialog.cat.social":"Social","autopilot.editDialog.cat.support":"Support","autopilot.editDialog.cat.client":"Client","autopilot.editDialog.cat.internal":"Interne","autopilot.editDialog.cat.personal":"Personnel","autopilot.editDialog.cat.other":"Autre","autopilot.editDialog.sent.positive":"Positif","autopilot.editDialog.sent.neutral":"Neutre","autopilot.editDialog.sent.negative":"Négatif","autopilot.editDialog.prio.high":"Élevé","autopilot.editDialog.prio.medium":"Moyen","autopilot.editDialog.prio.low":"Faible","autopilot.editDialog.keywordsPlaceholder":"Mots-clés...","autopilot.editDialog.olderThan":"Seulement si l'e-mail est plus ancien que... (Facultatif)","autopilot.editDialog.days":"jours","autopilot.editDialog.olderThanHelp":"Laissez vide ou 0 pour appliquer la règle immédiatement à la réception.","autopilot.editDialog.performActions":"Puis effectuer une ou des actions","autopilot.editDialog.actionsDesc":"Sélectionnez une ou plusieurs actions à exécuter lorsque la règle correspond","autopilot.editDialog.action.archive":"Archiver l'e-mail","autopilot.editDialog.action.delete":"Supprimer l'e-mail","autopilot.editDialog.action.draft":"Brouillon de réponse","autopilot.editDialog.action.star":"Étoile / Marquer","autopilot.editDialog.draftInstructions":"Instructions de brouillon (Contexte)","autopilot.editDialog.draftInstPlaceholder":"ex. Dites-leur que je suis occupé jusqu'à vendredi, mais intéressé par la proposition.","autopilot.editDialog.draftInstHelp":"Contexte spécifique pour le rédacteur IA.","autopilot.editDialog.attachments":"Pièces jointes (Facultatif)","autopilot.editDialog.uploading":"Téléchargement...","autopilot.editDialog.addAttachment":"Ajouter une pièce jointe","autopilot.editDialog.attachmentsHelp":"Les fichiers seront joints à chaque brouillon généré par cette règle.","autopilot.onboarding.allSet":"Tout est prêt !","autopilot.onboarding.enabledDesc":"Nous avons activé {count} règles d'automatisation pour vous","autopilot.onboarding.rules":"règles","autopilot.onboarding.universalDesc":"Règles essentielles qui aident tout le monde à rester organisé","autopilot.onboarding.executiveDesc":"Se concentrer sur les communications hautement prioritaires et les questions stratégiques","autopilot.onboarding.developerDesc":"Mettre en évidence les alertes critiques et filtrer le bruit des outils","autopilot.onboarding.salesDesc":"Prioriser les prospects et les communications avec les clients","autopilot.onboarding.operationsDesc":"Organiser les tickets et les communications internes","autopilot.onboarding.tip":"Astuce : Toutes les règles sont activées par défaut, mais vous pouvez les personnaliser ou les désactiver à tout moment dans la section Pilote automatique.","autopilot.onboarding.start":"Commencer à utiliser Email Automator →","autopilot.role.title":"Une dernière étape !","autopilot.role.subtitle":"Quel rôle vous décrit le mieux ? Nous configurerons les bonnes règles d'automatisation pour vous.","autopilot.role.executive.label":"Cadre / Direction","autopilot.role.executive.desc":"Se concentrer sur les VIP, les contrats et les communications stratégiques","autopilot.role.executive.preview":"Priorisation des clients VIP;Organisateur de voyages;Juridique et contrats","autopilot.role.sales.label":"Ventes / Développement commercial","autopilot.role.sales.desc":"Prioriser les prospects et les communications avec les clients","autopilot.role.sales.preview":"Questions des clients;Organisateur CRM;Suivi des propositions","autopilot.role.developer.label":"Développeur / Ingénieur","autopilot.role.developer.desc":"Mettre en évidence les alertes critiques et filtrer le bruit des outils","autopilot.role.developer.preview":"Alertes système;Revues de code;Gestion de projet","autopilot.role.operations.label":"Opérations / Support","autopilot.role.operations.desc":"Organiser les tickets et les communications internes","autopilot.role.operations.preview":"Tickets de support;Surveillance du système;Communications internes","autopilot.role.marketing.label":"Marketing","autopilot.role.marketing.desc":"Suivre les campagnes et l'engagement des clients","autopilot.role.marketing.preview":"Suivi des campagnes;Rapports analytiques;Médias sociaux","autopilot.role.other.label":"Autre / Configuration manuelle","autopilot.role.other.desc":"Je configurerai mes propres règles d'automatisation","autopilot.role.includes":"Comprend :","autopilot.role.skip":"Passer pour l'instant","autopilot.role.settingUp":"Configuration...","autopilot.role.continue":"Continuer →","terminal.title":"Terminal de l'agent","terminal.liveActivity":"Activité en direct","terminal.syncing":"SYNCHRONISATION","terminal.live":"EN DIRECT","terminal.stopSync":"ARRÊTER LA SYNCHRONISATION","terminal.clear":"Effacer","terminal.waiting":"En attente de l'activité de l'agent...","terminal.details":"Détails","terminal.useless":"INUTILE","terminal.relevant":"PERTINENT","terminal.executionComplete":"Exécution terminée","terminal.batchFinished":"Synchronisation par lots terminée","terminal.processed":"Traité","terminal.actions":"Actions","terminal.action.delete":"Déplacé vers la corbeille","terminal.action.archive":"E-mail archivé","terminal.action.draft":"Brouillon de réponse créé","terminal.action.star":"E-mail marqué d'une étoile","common.edit":"Modifier","persona.title":"Persona Numérique","persona.subtitle":"Gérez la façon dont votre assistant IA vous représente.","persona.identity":"Identité","persona.communication":"Communication","persona.automation":"Automatisation","persona.network":"Réseau","persona.edit.title":"Modifier la Persona","persona.edit.desc":"Mettez à jour les préférences de votre assistant numérique.","config.outlook.openLogin":"Ouvrir la connexion Microsoft","config.llm.title":"LLM","config.model.defaultProvider":"RealTimeX AI (par défaut)","config.model.discovering":"Découverte...","config.storage.title":"Chemin de stockage","config.storage.desc":"Choisissez où les e-mails bruts sont stockés localement","config.storage.label":"Chemin de stockage local","config.storage.placeholder":"ex. /Users/you/Documents/email-archive","config.storage.help":"Doit être accessible en écriture. Laissez vide pour utiliser le dossier par défaut de l’application.","config.rename.title":"Renommage intelligent","config.rename.desc":"Contrôle le format des noms de fichiers des e-mails stockés","config.rename.label":"Activer le renommage intelligent","config.rename.help":"Crée des noms lisibles et slugifiés au lieu des ID bruts.","config.sync.title":"Intervalle de synchronisation (minutes)","config.sync.desc":"Contrôle la fréquence de la synchronisation en arrière-plan","config.sync.label":"Minutes entre les synchronisations","config.sync.help":"Des valeurs plus basses augmentent la fraîcheur mais peuvent consommer plus de ressources.","config.embed.title":"Embeddings (RAG)","config.embed.desc":"Configure les embeddings pour la recherche dans la base de connaissances (RAG).","config.embed.provider":"Fournisseur d’embeddings","config.embed.model":"Modèle d’embeddings","config.embed.modelPlaceholder":"ex. text-embedding-3-small","config.embed.autoModel":"Auto (text-embedding-3-small)","config.embed.help":"Utilisé pour la recherche sémantique dans la base de connaissances.","config.embed.discovering":"Découverte...","config.embed.defaultProvider":"RealTimeX AI (par défaut)","config.byok.googleTitle":"Google / Gmail","config.byok.microsoftTitle":"Microsoft / Outlook","config.byok.clientId":"ID client","config.byok.clientSecret":"Secret client","config.byok.clientSecretOptional":"Secret client (optionnel)","config.byok.tenantId":"ID de locataire","config.voice.title":"Voix et parole","config.voice.desc":"Configurer la synthèse vocale pour les réponses IA","config.voice.autoTitle":"Lecture automatique des réponses IA","config.voice.autoHelp":"Lire automatiquement à voix haute les réponses IA via la synthèse vocale","config.voice.provider":"Fournisseur TTS","config.voice.providerHelp":"Sélectionnez le fournisseur de synthèse vocale","config.voice.loadingProviders":"Chargement des fournisseurs...","config.voice.voice":"Voix","config.voice.selectVoice":"Sélectionner une voix","config.voice.noVoices":"Aucune voix disponible","config.voice.voiceHelp":"Choisissez la personnalité vocale pour la synthèse","config.voice.speed":"Vitesse","config.voice.speedSlow":"0,5x (Plus lent)","config.voice.speedFast":"2,0x (Plus rapide)","config.voice.quality":"Qualité","config.voice.qualityLow":"1 (Qualité plus faible, plus rapide)","config.voice.qualityHigh":"20 (Qualité plus élevée, plus lente)","config.voice.test":"Tester","config.voice.save":"Enregistrer les paramètres","config.voice.testText":"Bonjour ! Ceci est un test du système de synthèse vocale.","config.voice.piperLocal":"Piper (Local)","config.voice.toast.providersFailed":"Impossible de charger les fournisseurs TTS. Assurez-vous que RealTimeX Desktop est en cours d’exécution.","config.voice.toast.serviceFailed":"Impossible de se connecter au service TTS","config.voice.toast.testFailed":"Échec du test de synthèse vocale","config.voice.toast.saved":"Paramètres de voix et parole enregistrés","config.voice.toast.saveFailed":"Impossible d’enregistrer les paramètres","config.voice.toast.autoOn":"Lecture automatique des réponses IA activée","config.voice.toast.autoOff":"Lecture automatique des réponses IA désactivée","config.voice.toast.updateFailed":"Impossible de mettre à jour le paramètre","config.agent.systemInstruction":"Vous êtes l’assistant de configuration. Guidez l’utilisateur pour configurer ses comptes, règles et préférences système. Expliquez chaque réglage et aidez au dépannage des connexions.","config.toast.providersFailed":"Impossible de charger les fournisseurs","config.toast.providersFailedFallback":"Impossible de charger les fournisseurs. Utilisation des valeurs par défaut.","config.toast.embedProvidersFailed":"Impossible de charger les fournisseurs d’embeddings","config.toast.embedProvidersFailedFallback":"Impossible de charger les fournisseurs d’embeddings. Utilisation des valeurs par défaut.","config.toast.connectionFailed":"Échec de la connexion","config.toast.systemRuleMissing":"Règle système introuvable. Veuillez synchroniser votre base de données.","config.toast.startConnectionFailed":"Impossible de démarrer la connexion. Veuillez vous connecter.","config.toast.startGmailFailed":"Impossible de démarrer la connexion Gmail","config.toast.detectedDesktopCreds":"Identifiants d’application de bureau détectés","config.toast.detectedWebCreds":"Application web détectée — assurez-vous que l’URI de redirection est configuré dans Google Cloud Console","config.toast.missingGmailCreds":"Veuillez fournir l’ID client et le secret client","config.toast.authorizeAndPaste":"Autorisez dans l’onglet ouvert puis collez le code ici","config.toast.oauthUrlFailed":"Impossible d’obtenir l’URL OAuth","config.toast.saveCredsFailed":"Impossible d’enregistrer les identifiants","config.toast.missingAuthCode":"Veuillez coller le code d’autorisation","config.toast.gmailConnected":"Compte Gmail connecté avec succès !","config.toast.gmailConnectFailed":"Impossible de connecter Gmail","config.toast.missingOutlookClientId":"Veuillez fournir l’ID client","config.toast.deviceFlowFailed":"Impossible de démarrer le flux d’appareil","config.toast.outlookStartFailed":"Impossible de démarrer la connexion Outlook","config.toast.outlookConnected":"Compte Outlook connecté","config.toast.connectionTimedOut":"Délai de connexion dépassé. Veuillez réessayer.","config.toast.ruleNameRequired":"Veuillez nommer votre règle","config.toast.ruleActionRequired":"Veuillez sélectionner au moins une action","config.toast.ruleUpdated":"Règle mise à jour","config.toast.ruleCreated":"Règle créée","config.toast.ruleUpdateFailed":"Impossible de mettre à jour la règle","config.toast.ruleCreateFailed":"Impossible de créer la règle","config.toast.ruleSaveError":"Une erreur s’est produite lors de l’enregistrement de la règle","config.toast.disconnectConfirm":"Voulez-vous vraiment déconnecter ce compte ?","config.toast.accountDisconnected":"Compte déconnecté","config.toast.settingsSaved":"Paramètres enregistrés","config.toast.fileUploaded":"Fichier téléversé","config.toast.fileUploadFailed":"Échec du téléversement du fichier","config.providers.gmail":"Gmail","config.providers.outlook":"Outlook","config.gmail.authSteps":`1. Un nouvel onglet s’est ouvert avec Google Sign-In
|
|
47
|
+
2. Connectez-vous et autorisez l’application
|
|
48
|
+
3. Copiez le code d’autorisation affiché
|
|
49
|
+
4. Collez-le ci-dessous`,"config.gmail.authCode":"Code d’autorisation","config.gmail.clientIdPlaceholder":"xxx.apps.googleusercontent.com","config.gmail.clientSecretPlaceholder":"GOCSPX-...","config.gmail.authCodePlaceholder":"4/0AQlEd8x...","config.rules.actionsHelp":"Sélectionnez une ou plusieurs actions à exécuter lorsque la règle correspond","config.rules.instructionsPlaceholder":"ex. Dites-leur que je suis occupé jusqu’à vendredi, mais intéressé par la proposition.","config.rules.attachmentsOptional":"Pièces jointes (optionnel)","config.rules.days":"jours","config.rules.placeholder.domain":"rta.vn","config.rules.placeholder.email":"john@example.com","config.rules.category.newsletter":"Newsletter","config.rules.category.spam":"Spam","config.rules.category.promotional":"Promotionnel","config.rules.category.transactional":"Transactionnel","config.rules.category.social":"Social","config.rules.category.support":"Support","config.rules.category.client":"Client","config.rules.category.internal":"Interne","config.rules.category.personal":"Personnel","config.rules.category.other":"Autre","config.rules.sentiment.positive":"Positif","config.rules.sentiment.neutral":"Neutre","config.rules.sentiment.negative":"Négatif","config.rules.priority.high":"Élevée","config.rules.priority.medium":"Moyenne","config.rules.priority.low":"Basse","config.outlook.note":"Remarque : vous avez besoin d’une inscription d’application Azure pour que cela fonctionne.","config.outlook.clientId":"ID client (ID d’application)","config.outlook.tenantIdOptional":"ID de locataire (optionnel)","config.outlook.tenantHelp":'La valeur par défaut est "common". Utilisez votre ID de locataire spécifique pour les comptes d’organisation.',"config.outlook.saveConnect":"Enregistrer et connecter","config.outlook.actionRequired":"Action requise","config.outlook.waitingAuth":"En attente d’autorisation...","config.outlook.tenantPlaceholder":"common"};export{e as default};
|