mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
fix(i18n): replace English placeholders with native translations (#3442)
This commit is contained in:
+171
-178
@@ -289,7 +289,7 @@ const messages: TranslationMap = {
|
||||
'تصفّح وشغّل الوكلاء المتاحين — لكل منهم أدواته وقدراته ومجال تركيزه.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'إجراءات قابلة لإعادة الاستخدام والتشغيل — هدف مع خطوات تحقيقه. أنشئ واحدة، أو ثبّتها من رابط، أو افتح سير عمل لتشغيله.',
|
||||
'memory.tab.dreams': 'الأحلام',
|
||||
'memory.tab.calls': 'المكالمات',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -298,24 +298,23 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'الإعدادات',
|
||||
'memory.analyzeNow': 'تحليل الآن',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'الجدول الزمني للذاكرة',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'متى تعلّم المساعد عنك — حقائق مجمّعة حسب الشهر الذي تم فيه تعزيزها آخر مرة. تُظهر النمو وفترات النشاط والهدوء.',
|
||||
'memoryTimeline.loading': 'جارٍ بناء الجدول الزمني…',
|
||||
'memoryTimeline.errorPrefix': 'تعذّر تحميل الرسم البياني:',
|
||||
'memoryTimeline.retry': 'إعادة المحاولة',
|
||||
'memoryTimeline.namespaceLabel': 'مساحة الاسم',
|
||||
'memoryTimeline.namespaceAll': 'جميع مساحات الأسماء',
|
||||
'memoryTimeline.empty': 'لا يوجد رسم بياني للمعرفة بعد.',
|
||||
'memoryTimeline.emptyHint': 'عندما يسجّل المساعد حقائق عنك، سيظهر الجدول الزمني هنا.',
|
||||
'memoryTimeline.metricTotal': 'الحقائق',
|
||||
'memoryTimeline.metricMonths': 'الأشهر النشطة',
|
||||
'memoryTimeline.metricRecent': 'آخر 30 يومًا',
|
||||
'memoryTimeline.heading': 'الحقائق المكتسبة شهريًا',
|
||||
'memoryTimeline.busiestCaption': 'الأكثر نشاطًا: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} حقيقة بدون تاريخ مسجّل.',
|
||||
'memoryTimeline.truncated': 'عرض أحدث {shown} من {total} شهر.',
|
||||
'namespaceOverview.title': 'نظرة عامة على مساحات الأسماء',
|
||||
'namespaceOverview.intro':
|
||||
'كيفية توزيع معرفتك عبر السياقات — عدد الحقائق والكيانات المتميزة المسجَّلة في كل مساحة اسم.',
|
||||
@@ -358,51 +357,48 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'موصّل — أكثر تأثيرًا مما يوحي به عدد روابطه',
|
||||
'graphCentrality.degreeTitle': 'Xqx0xxx في ×1x',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'ارتباطات الكيانات',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'الكيانات التي تتشارك العديد من الروابط نفسها تكون مرتبطة — حتى لو لم تربطها حقيقة واحدة مباشرة. تشابه Jaccard يكشف هذه الارتباطات المخفية.',
|
||||
'entityAssociations.loading': 'جارٍ حساب الارتباطات…',
|
||||
'entityAssociations.errorPrefix': 'تعذّر تحميل الرسم البياني:',
|
||||
'entityAssociations.retry': 'إعادة المحاولة',
|
||||
'entityAssociations.empty': 'لا توجد ارتباطات بعد.',
|
||||
'entityAssociations.emptyHint': 'عندما تبدأ الكيانات بمشاركة الروابط، ستظهر أقوى الارتباطات هنا.',
|
||||
'entityAssociations.namespaceLabel': 'مساحة الاسم',
|
||||
'entityAssociations.namespaceAll': 'جميع مساحات الأسماء',
|
||||
'entityAssociations.metricEntities': 'الكيانات',
|
||||
'entityAssociations.metricPairs': 'الارتباطات',
|
||||
'entityAssociations.rankedHeading': 'أقوى الارتباطات',
|
||||
'entityAssociations.linkedBadge': 'مرتبط',
|
||||
'entityAssociations.inferredBadge': 'مُستنتج',
|
||||
'entityAssociations.linkedTitle': 'هذه الكيانات متصلة مباشرة.',
|
||||
'entityAssociations.inferredTitle': 'لا رابط مباشر — مرتبطة فقط من خلال روابط مشتركة.',
|
||||
'entityAssociations.sharedLabel': '{shared} مشترك',
|
||||
'entityAssociations.pairTitle': '{jaccard}% تشابه · {shared} من {union} رابط مشترك',
|
||||
'entityAssociations.truncated': 'عرض {shown} من {total} — الأقوى أولاً.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'حداثة المعرفة',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'الحقائق التي لم يُعد المساعد تأكيدها مؤخرًا تتلاشى وفق منحنى النسيان. هذا يُظهر ما أصبح قديمًا ويستحق إعادة التحقق، لتجنب معاملة الحقائق القديمة على أنها مؤكدة.',
|
||||
'memoryFreshness.loading': 'جارٍ حساب الحداثة…',
|
||||
'memoryFreshness.errorPrefix': 'تعذّر تحميل الرسم البياني:',
|
||||
'memoryFreshness.retry': 'إعادة المحاولة',
|
||||
'memoryFreshness.empty': 'لا يوجد رسم بياني للمعرفة بعد.',
|
||||
'memoryFreshness.emptyHint': 'عندما يسجّل المساعد حقائق عنك، سيتم تتبع حداثتها هنا.',
|
||||
'memoryFreshness.namespaceLabel': 'مساحة الاسم',
|
||||
'memoryFreshness.namespaceAll': 'جميع مساحات الأسماء',
|
||||
'memoryFreshness.metricFresh': 'حديثة',
|
||||
'memoryFreshness.metricFading': 'تتلاشى',
|
||||
'memoryFreshness.metricStale': 'قديمة',
|
||||
'memoryFreshness.recallCaption': 'متوسط الاسترجاع {recall}% من أصل {total} حقيقة',
|
||||
'memoryFreshness.queueHeading': 'قائمة إعادة التأكيد',
|
||||
'memoryFreshness.queueTruncated': 'عرض {shown} من {total} — عالج هذه أولاً.',
|
||||
'memoryFreshness.allFresh': 'جميع الحقائق لا تزال حديثة — لا حاجة لإعادة التأكيد.',
|
||||
'memoryFreshness.statusFading': 'تتلاشى',
|
||||
'memoryFreshness.statusStale': 'قديمة',
|
||||
'memoryFreshness.ageLabel': 'منذ {days} يوم',
|
||||
'memoryFreshness.recallTitle': '{recall}% استرجاع · عمر النصف {halfLife} يوم',
|
||||
'memory.tab.path': 'المسارات',
|
||||
'connectionPath.title': 'مسار الاتصال',
|
||||
'connectionPath.intro':
|
||||
@@ -1807,7 +1803,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'الميكروفون قيد الاستخدام من قبل تطبيق آخر.',
|
||||
'mic.error': 'خطأ في الميكروفون',
|
||||
'mic.transcribing': 'جارٍ النسخ...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'جارٍ إعادة المحاولة… ({attempt} من {max})',
|
||||
'mic.tapToSend': 'انقر للإرسال',
|
||||
'mic.waitingForAgent': 'في انتظار الوكيل...',
|
||||
'mic.tapAndSpeak': 'انقر وتحدث',
|
||||
@@ -3749,9 +3745,9 @@ const messages: TranslationMap = {
|
||||
'تم ضبط OPENHUMAN_ACTION_DIR — قم بإلغاء متغير البيئة لتعديل هذا من الإعدادات.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'تم تجاوزه بواسطة OPENHUMAN_ACTION_DIR — قم بإلغاء متغير البيئة لإدارته من الإعدادات.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'سجل الموافقات',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'مراجعة قرارات الموافقة / الرفض السابقة التي طلبها الوكيل.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'عرض سجل الموافقات',
|
||||
'settings.sandbox.title': 'تنفيذ Sandbox',
|
||||
'settings.sandbox.menuDesc': 'تكوين خلفيات Sandbox لعزل أدوات الوكيل.',
|
||||
@@ -3786,17 +3782,17 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'تمرير متغيرات البيئة',
|
||||
'settings.sandbox.envPassthroughDesc': 'متغيرات البيئة المُمرَّرة إلى داخل Sandbox.',
|
||||
'settings.sandbox.noEnvVars': 'لم يتم تكوين أي متغيرات بيئة.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.approvalHistory.title': 'سجل الموافقات',
|
||||
'settings.approvalHistory.subtitle': 'قرارات الموافقة على الأدوات الأخيرة، الأحدث أولاً.',
|
||||
'settings.approvalHistory.refresh': 'تحديث',
|
||||
'settings.approvalHistory.loading': 'جارٍ تحميل سجل الموافقات…',
|
||||
'settings.approvalHistory.retry': 'إعادة المحاولة',
|
||||
'settings.approvalHistory.emptyState': 'لا توجد قرارات موافقة مسجّلة بعد.',
|
||||
'settings.approvalHistory.errorGeneric': 'تعذّر تحميل سجل الموافقات. حاول مرة أخرى.',
|
||||
'settings.approvalHistory.decidedAt': 'تم القرار في {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'تمت الموافقة مرة واحدة',
|
||||
'settings.approvalHistory.decision.approveAlways': 'مسموح دائمًا',
|
||||
'settings.approvalHistory.decision.deny': 'مرفوض',
|
||||
'settings.appearance.title': 'المظهر',
|
||||
'settings.appearance.themeHeading': 'الموضوع',
|
||||
'settings.appearance.themeAria': 'الموضوع',
|
||||
@@ -4460,49 +4456,49 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'وكيل خلق',
|
||||
'settings.agents.editor.saving': 'إنقاذ...',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.title': 'سير العمل',
|
||||
'workflows.subtitle':
|
||||
'إجراءات قابلة لإعادة الاستخدام والتشغيل — هدف مع خطوات تحقيقه. أنشئ واحدة، أو ثبّتها من رابط، أو افتح سير عمل لتشغيله.',
|
||||
'workflows.createNew': 'سير عمل جديد',
|
||||
'workflows.listHeading': 'مسارات العمل',
|
||||
'workflows.delete': 'حذف سير العمل',
|
||||
'workflows.deleteError': 'فشل حذف سير العمل',
|
||||
'workflows.warnings': '{count} تحذير(ات)',
|
||||
'workflows.empty.title': 'لا توجد سير عمل بعد',
|
||||
'workflows.empty.body': 'أنشئ سير عمل لتحديد القواعد والنصوص البرمجية لمراحل دورة حياة المهام.',
|
||||
'workflows.create.title': 'سير عمل جديد',
|
||||
'workflows.create.subtitle': 'حدد مجموعة قواعد مرتبطة بدورة الحياة للوكيل.',
|
||||
'workflows.create.name': 'الاسم',
|
||||
'workflows.create.namePlaceholder': 'مثال: سير عمل مشروع Python',
|
||||
'workflows.create.description': 'الوصف',
|
||||
'workflows.create.descriptionPlaceholder': 'ماذا يفعل سير العمل هذا؟',
|
||||
'workflows.create.whenToUse': 'متى يُستخدم',
|
||||
'workflows.create.whenToUsePlaceholder': 'متى يجب أن يستخدم الوكيل سير العمل هذا؟',
|
||||
'workflows.create.optional': '(اختياري)',
|
||||
'workflows.create.createBtn': 'إنشاء سير عمل',
|
||||
'workflows.create.creating': 'جارٍ الإنشاء…',
|
||||
'workflows.create.createError': 'تعذّر إنشاء سير العمل',
|
||||
'workflows.create.successTitle': 'تم إنشاء سير العمل',
|
||||
'workflows.create.successMessage': 'تم الإنشاء بنجاح.',
|
||||
'workflows.deleteConfirm.title': 'حذف سير العمل',
|
||||
'workflows.deleteConfirm.body': 'إزالة "{name}"؟ لا يمكن التراجع عن هذا.',
|
||||
'workflows.detail.tags': 'الوسوم',
|
||||
'workflows.detail.location': 'الموقع',
|
||||
'workflows.detail.warnings': 'التحذيرات',
|
||||
'workflows.detail.phases': 'المراحل',
|
||||
'workflows.detail.noPhases': 'لم يتم تحديد مراحل.',
|
||||
'workflows.detail.loadError': 'فشل تحميل سير العمل الكامل',
|
||||
'workflows.phase.rules': 'القواعد',
|
||||
'workflows.phase.rules.empty': 'لا توجد قواعد.',
|
||||
'workflows.phase.scripts': 'البرامج النصية',
|
||||
'workflows.phase.scripts.empty': 'لا توجد نصوص برمجية.',
|
||||
'workflows.phase.toolScope': 'نطاق الأدوات',
|
||||
'workflows.phase.toolScope.allow': 'سماح',
|
||||
'workflows.phase.toolScope.deny': 'رفض',
|
||||
'workflows.phase.toolScope.inherited': 'موروث من الإعداد الافتراضي لسير العمل.',
|
||||
'workflows.phase.toolScope.empty': 'لا توجد قيود على الأدوات.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'لا يوجد مزودو سياق.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'إدارة عواملك واستقلاليتها وما يمكنها الوصول إليه على هذا الجهاز.',
|
||||
@@ -4601,51 +4597,51 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'دردشة',
|
||||
'intelligence.agents.tier.reasoning': 'استدلال',
|
||||
'intelligence.agents.tier.worker': 'عامل',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'مجلس النماذج',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'اطرح سؤالاً واحصل على إجابات مستقلة من عدة نماذج بالتوازي، ثم يوّلف نموذج الرئيس نقاط الاتفاق والاختلاف وما يضيفه كل نموذج.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'اختر مجلسًا محفوظًا، أو عدّل وكلاءه وقاضيه، أو أنشئ مجلسًا جديدًا لنوع محدد من القرارات.',
|
||||
'modelCouncil.addCouncil': 'مجلس جديد',
|
||||
'modelCouncil.openCouncil': 'فتح المجلس',
|
||||
'modelCouncil.editCouncil': 'تعديل المجلس',
|
||||
'modelCouncil.editCurrentCouncil': 'تعديل المجلس الحالي',
|
||||
'modelCouncil.editCouncilAria': 'تعديل {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'حذف {name}',
|
||||
'modelCouncil.backToCouncils': 'العودة إلى المجالس',
|
||||
'modelCouncil.saveCouncil': 'حفظ المجلس',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'جارٍ تحميل المجالس…',
|
||||
'modelCouncil.noCouncils': 'لا توجد مجالس بعد. أضف واحدًا للبدء.',
|
||||
'modelCouncil.noCouncilDescription': 'بدون وصف',
|
||||
'modelCouncil.registryErrorPrefix': 'فشل سجل المجالس:',
|
||||
'modelCouncil.councilNameLabel': 'اسم المجلس',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'متى يُستخدم هذا المجلس',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp': 'اختر تلميح توجيه أو حدد نموذج مزود بدقة.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'المزود + النموذج',
|
||||
'modelCouncil.modelProviderLabel': 'مزود النموذج',
|
||||
'modelCouncil.modelIdLabel': 'معرّف النموذج',
|
||||
'modelCouncil.useProviderModel': 'استخدام نموذج المزود',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'اطرح سؤالاً على المجلس…',
|
||||
'modelCouncil.membersLabel': 'نماذج الأعضاء',
|
||||
'modelCouncil.maxMembersNote': 'حتى {max}',
|
||||
'modelCouncil.memberPlaceholder': 'مثال: gpt-5.2',
|
||||
'modelCouncil.memberAria': 'نموذج العضو {n}',
|
||||
'modelCouncil.removeMemberAria': 'إزالة نموذج العضو {n}',
|
||||
'modelCouncil.addMember': '+ إضافة نموذج',
|
||||
'modelCouncil.settingsTitle': 'إعدادات المجلس',
|
||||
'modelCouncil.settingsSummary': '{count} محلفين · القاضي: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'عدد المحلفين',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'جولات النقاش',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'يستمر كل محلّف في النقاش عبر جولات قبل أن يكتب القاضي التوليف النهائي.',
|
||||
'modelCouncil.judgeAgentLabel': 'وكيل القاضي',
|
||||
'modelCouncil.defaultJudge': 'القاضي الافتراضي',
|
||||
'modelCouncil.savedProfile': 'ملف محفوظ',
|
||||
@@ -4674,52 +4670,49 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'يعمل المجلس على هذه المسودة المشتركة قبل أن يكتب القاضي الخلاصة.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'تُضاف تحديثات المحلّفين هنا بعد كل جولة، ثم تُغذّى في الجولة التالية.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'تحديثات الجولة {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'لا توجد استجابة',
|
||||
'modelCouncil.chairLabel': 'نموذج الرئيس',
|
||||
'modelCouncil.chairPlaceholder': 'مثال: claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'يقرأ الرئيس كل إجابة من الأعضاء ويكتب التوليف.',
|
||||
'modelCouncil.run': 'انعقاد المجلس',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'جارٍ استعلام الأعضاء بالتوازي، ثم التوليف…',
|
||||
'modelCouncil.deliberationHeading': 'مداولات المجلس',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'تُظهر الرموز تفكير كل وكيل أثناء استخدام ملف الاستدلال المشترك.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'ردّ على المحلّفين الآخرين. حافظ على الخلافات، عدّل رأيك عند الضرورة، واجعل استنتاجك الحالي صريحًا.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'هذه جولتك الأخيرة كمحلّف. توافق حيث تدعم الأدلة، أشر إلى الخلافات المتبقية، وقدّم للقاضي استنتاجًا واضحًا.',
|
||||
'modelCouncil.roundLabel': 'الجولة {round}',
|
||||
'modelCouncil.currentRoundThinking': 'متابعة الجولة التالية…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'العمل من هذا المنظور: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'فحص الأدلة والافتراضات وما يحتويه ملف الاستدلال المشترك بالفعل.',
|
||||
'modelCouncil.thought.plan': 'رسم المسار العملي وأين قد يتعثر التنفيذ.',
|
||||
'modelCouncil.thought.risk': 'البحث عن أنماط الفشل والسياق المفقود والاستنتاجات الهشة.',
|
||||
'modelCouncil.thought.tradeoffs': 'مقارنة المفاضلات قبل تقديم موقف موجز للقاضي.',
|
||||
'modelCouncil.thought.synthesis': 'إعداد رؤية مميزة ليتمكن القاضي من مقارنة الخلافات الحقيقية.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'بانتظار إجابات المحلّفين، ثم قراءة ملف الاستدلال المشترك للتوليف.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'جارٍ قراءة أفكار المحلّفين المباشرة وكتابة التوليف النهائي للمجلس.',
|
||||
'modelCouncil.errorPrefix': 'فشل المجلس:',
|
||||
'modelCouncil.resultsHeading': 'نتائج المجلس',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'بواسطة {model}',
|
||||
'modelCouncil.usageHeading': 'استخدام النقاش',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'عدد الرموز المقدّر من مطالبات النقاش والاستجابات. يتطلب التسعير الفعلي استخدام المزود من RPC الخاص بالمجلس.',
|
||||
'modelCouncil.usageEstimatedBadge': 'رموز مقدّرة',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+142
-140
@@ -292,7 +292,7 @@ const messages: TranslationMap = {
|
||||
'আপনার উপলব্ধ এজেন্টগুলি ব্রাউজ করুন এবং চালান — প্রতিটির নিজস্ব টুল, ক্ষমতা এবং ফোকাস এলাকা রয়েছে।',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'পুনর্ব্যবহারযোগ্য, চালানোযোগ্য প্রক্রিয়া — একটি লক্ষ্য এবং তা অর্জনের ধাপগুলো। একটি তৈরি করুন, URL থেকে ইনস্টল করুন, বা চালানোর জন্য ওয়ার্কফ্লো খুলুন।',
|
||||
'memory.tab.dreams': 'স্বপ্ন',
|
||||
'memory.tab.calls': 'কল',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -301,24 +301,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'সেটিংস',
|
||||
'memory.analyzeNow': 'এখনই বিশ্লেষণ করুন',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'স্মৃতি টাইমলাইন',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'সহকারী আপনার সম্পর্কে কখন শিখেছে — তথ্যগুলো সেই মাস অনুসারে গোষ্ঠীবদ্ধ যখন সেগুলো সর্বশেষ শক্তিশালী করা হয়েছে। বৃদ্ধি, কার্যকলাপের উত্থান এবং শান্ত সময়কাল দেখায়।',
|
||||
'memoryTimeline.loading': 'টাইমলাইন তৈরি হচ্ছে…',
|
||||
'memoryTimeline.errorPrefix': 'গ্রাফ লোড করা যায়নি:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.namespaceAll': 'সকল নেমস্পেস',
|
||||
'memoryTimeline.empty': 'এখনো কোনো জ্ঞান গ্রাফ নেই।',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'যখন সহকারী আপনার সম্পর্কে তথ্য রেকর্ড করবে, তাদের টাইমলাইন এখানে দেখা যাবে।',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'সক্রিয় মাস',
|
||||
'memoryTimeline.metricRecent': 'গত ৩০ দিন',
|
||||
'memoryTimeline.heading': 'প্রতি মাসে শেখা তথ্য',
|
||||
'memoryTimeline.busiestCaption': 'সবচেয়ে ব্যস্ত: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} তথ্যে কোনো রেকর্ডকৃত তারিখ নেই।',
|
||||
'memoryTimeline.truncated': '{total} মাসের মধ্যে সবচেয়ে সাম্প্রতিক {shown} দেখানো হচ্ছে।',
|
||||
'namespaceOverview.title': 'নেমস্পেস ওভারভিউ',
|
||||
'namespaceOverview.intro':
|
||||
'প্রসঙ্গভেদে আপনার জ্ঞান কীভাবে বিতরণ করা হয়েছে — প্রতিটি নেমস্পেসে নথিভুক্ত তথ্য ও স্বতন্ত্র সত্তার সংখ্যা।',
|
||||
@@ -363,51 +363,51 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'Connector — এর লিংক গণনায় আরও প্রভাবশালী',
|
||||
'graphCentrality.degreeTitle': 'xqxqx × xx11x এর জন্য',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'সত্তা সম্পর্ক',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'যে সত্তাগুলো অনেক একই সংযোগ ভাগ করে, তারা সম্পর্কিত — এমনকি কোনো একক তথ্য তাদের সরাসরি সংযুক্ত না করলেও। Jaccard সাদৃশ্য এই লুকানো সম্পর্কগুলো প্রকাশ করে।',
|
||||
'entityAssociations.loading': 'সম্পর্ক স্কোর করা হচ্ছে…',
|
||||
'entityAssociations.errorPrefix': 'গ্রাফ লোড করা যায়নি:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'এখনো কোনো সংযোগ নেই।',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'যখন সত্তাগুলো সংযোগ ভাগ করা শুরু করবে, সবচেয়ে শক্তিশালী জোড়াগুলো এখানে দেখা যাবে।',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'সকল নেমস্পেস',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'সবচেয়ে শক্তিশালী সম্পর্ক',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'এই সত্তাগুলো সরাসরি সংযুক্ত।',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'কোনো সরাসরি লিংক নেই — শুধুমাত্র ভাগ করা সংযোগের মাধ্যমে সম্পর্কিত।',
|
||||
'entityAssociations.sharedLabel': '{shared} ভাগ করা',
|
||||
'entityAssociations.pairTitle': '{jaccard}% সাদৃশ্য · {shared}/{union} সংযোগ ভাগ করা',
|
||||
'entityAssociations.truncated': '{shown}/{total} দেখানো হচ্ছে — সবচেয়ে শক্তিশালী প্রথমে।',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'জ্ঞানের তাজাত্ব',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'সহকারী সম্প্রতি যে তথ্যগুলো পুনরায় নিশ্চিত করেনি, সেগুলো বিস্মরণ বক্ররেখা অনুসারে ক্ষয় হয়। এটি দেখায় কোনটি পুরনো হচ্ছে এবং পুনরায় পরীক্ষা করা উচিত, যাতে পুরনো তথ্যকে এখনো নিশ্চিত হিসেবে গণ্য না করা হয়।',
|
||||
'memoryFreshness.loading': 'তাজাত্ব স্কোর করা হচ্ছে…',
|
||||
'memoryFreshness.errorPrefix': 'গ্রাফ লোড করা যায়নি:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'এখনো কোনো জ্ঞান গ্রাফ নেই।',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'যখন সহকারী আপনার সম্পর্কে তথ্য রেকর্ড করবে, তাদের তাজাত্ব এখানে ট্র্যাক করা হবে।',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'সকল নেমস্পেস',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': '{total} তথ্যে গড় রিকল {recall}%',
|
||||
'memoryFreshness.queueHeading': 'পুনরায় নিশ্চিতকরণ সারি',
|
||||
'memoryFreshness.queueTruncated': '{shown}/{total} দেখানো হচ্ছে — প্রথমে এগুলো সমাধান করুন।',
|
||||
'memoryFreshness.allFresh': 'সমস্ত তথ্য এখনো তাজা — পুনরায় নিশ্চিত করার প্রয়োজন নেই।',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} দিন আগে',
|
||||
'memoryFreshness.recallTitle': '{recall}% রিকল · অর্ধ-জীবন {halfLife} দিন',
|
||||
'memory.tab.path': 'পাথ',
|
||||
'connectionPath.title': 'সংযোগ পাথ',
|
||||
'connectionPath.intro':
|
||||
@@ -1845,7 +1845,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'মাইক্রোফোনটি অন্য একটি অ্যাপ্লিকেশন ব্যবহার করছে।',
|
||||
'mic.error': 'মাইক্রোফোন ত্রুটি',
|
||||
'mic.transcribing': 'ট্রান্সক্রাইব হচ্ছে...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'পুনরায় চেষ্টা করা হচ্ছে… ({attempt}/{max})',
|
||||
'mic.tapToSend': 'পাঠাতে ট্যাপ করুন',
|
||||
'mic.waitingForAgent': 'এজেন্টের জন্য অপেক্ষা করছে...',
|
||||
'mic.tapAndSpeak': 'ট্যাপ করুন ও কথা বলুন',
|
||||
@@ -3823,9 +3823,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR সেট করা আছে — সেটিংস থেকে সম্পাদনা করতে এনভ ভ্যারিয়েবলটি আনসেট করুন।',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'OPENHUMAN_ACTION_DIR দ্বারা ওভাররাইড হয়েছে — সেটিংস থেকে পরিচালনা করতে এনভ ভ্যারিয়েবলটি আনসেট করুন।',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'অনুমোদন ইতিহাস',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'এজেন্টের অনুরোধ করা পূর্ববর্তী অনুমোদন/প্রত্যাখ্যান সিদ্ধান্ত পর্যালোচনা করুন।',
|
||||
'settings.agentAccess.viewApprovalHistory': 'অনুমোদনের ইতিহাস দেখুন',
|
||||
'settings.sandbox.title': 'Sandbox কার্যকরী',
|
||||
'settings.sandbox.menuDesc': 'এজেন্ট টুল আইসোলেশনের জন্য Sandbox ব্যাকএন্ড কনফিগার করুন।',
|
||||
@@ -3861,16 +3861,16 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'পরিবেশ পাসথ্রু',
|
||||
'settings.sandbox.envPassthroughDesc': 'Sandbox-এ ফরওয়ার্ড করা পরিবেশ ভেরিয়েবল।',
|
||||
'settings.sandbox.noEnvVars': 'কোনো পরিবেশ ভেরিয়েবল কনফিগার করা হয়নি।',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'অনুমোদন ইতিহাস',
|
||||
'settings.approvalHistory.subtitle': 'সাম্প্রতিক টুল-অনুমোদন সিদ্ধান্ত, নতুনতম প্রথমে।',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': 'অনুমোদন ইতিহাস লোড হচ্ছে…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': 'এখনো কোনো অনুমোদন সিদ্ধান্ত রেকর্ড হয়নি।',
|
||||
'settings.approvalHistory.errorGeneric': 'অনুমোদন ইতিহাস লোড করা যায়নি। আবার চেষ্টা করুন।',
|
||||
'settings.approvalHistory.decidedAt': '{date} তারিখে সিদ্ধান্ত নেওয়া হয়েছে',
|
||||
'settings.approvalHistory.decision.approveOnce': 'একবার অনুমোদিত',
|
||||
'settings.approvalHistory.decision.approveAlways': 'সর্বদা অনুমোদিত',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'উপস্থিতি',
|
||||
'settings.appearance.themeHeading': 'থিম',
|
||||
@@ -4545,49 +4545,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'নির্মাণ করুন',
|
||||
'settings.agents.editor.saving': 'ইনস্টল করা হয়েছে...',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'ওয়ার্কফ্লো',
|
||||
'workflows.subtitle':
|
||||
'পুনর্ব্যবহারযোগ্য, চালানোযোগ্য প্রক্রিয়া — একটি লক্ষ্য এবং তা অর্জনের ধাপগুলো। একটি তৈরি করুন, URL থেকে ইনস্টল করুন, বা চালানোর জন্য ওয়ার্কফ্লো খুলুন।',
|
||||
'workflows.createNew': 'নতুন ওয়ার্কফ্লো',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'ওয়ার্কফ্লো মুছুন',
|
||||
'workflows.deleteError': 'ওয়ার্কফ্লো মুছতে ব্যর্থ',
|
||||
'workflows.warnings': '{count} সতর্কতা',
|
||||
'workflows.empty.title': 'এখনো কোনো ওয়ার্কফ্লো নেই',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'টাস্ক জীবনচক্র পর্যায়ের জন্য নিয়ম ও স্ক্রিপ্ট সংজ্ঞায়িত করতে ওয়ার্কফ্লো তৈরি করুন।',
|
||||
'workflows.create.title': 'নতুন ওয়ার্কফ্লো',
|
||||
'workflows.create.subtitle': 'এজেন্টের জন্য জীবনচক্র-সংযুক্ত নিয়ম সেট সংজ্ঞায়িত করুন।',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'যেমন Python প্রকল্প ওয়ার্কফ্লো',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'এই ওয়ার্কফ্লো কী করে?',
|
||||
'workflows.create.whenToUse': 'কখন ব্যবহার করবেন',
|
||||
'workflows.create.whenToUsePlaceholder': 'এজেন্ট কখন এই ওয়ার্কফ্লো নেবে?',
|
||||
'workflows.create.optional': '(ঐচ্ছিক)',
|
||||
'workflows.create.createBtn': 'ওয়ার্কফ্লো তৈরি করুন',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'ওয়ার্কফ্লো তৈরি করা যায়নি',
|
||||
'workflows.create.successTitle': 'ওয়ার্কফ্লো তৈরি হয়েছে',
|
||||
'workflows.create.successMessage': 'সফলভাবে তৈরি হয়েছে।',
|
||||
'workflows.deleteConfirm.title': 'ওয়ার্কফ্লো মুছুন',
|
||||
'workflows.deleteConfirm.body': '"{name}" সরাবেন? এটি পূর্বাবস্থায় ফেরানো যাবে না।',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'কোনো পর্যায় সংজ্ঞায়িত নেই।',
|
||||
'workflows.detail.loadError': 'সম্পূর্ণ ওয়ার্কফ্লো লোড করতে ব্যর্থ',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'কোনো নিয়ম নেই।',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'কোনো স্ক্রিপ্ট নেই।',
|
||||
'workflows.phase.toolScope': 'টুল স্কোপ',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'ওয়ার্কফ্লো ডিফল্ট থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।',
|
||||
'workflows.phase.toolScope.empty': 'কোনো টুল সীমাবদ্ধতা নেই।',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'কোনো কনটেক্সট প্রদানকারী নেই।',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'আপনার এজেন্ট, তাদের স্বায়ত্তশাসন এবং এই কম্পিউটারে তারা কী অ্যাক্সেস করতে পারে তা পরিচালনা করুন।',
|
||||
@@ -4686,51 +4687,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'চ্যাট',
|
||||
'intelligence.agents.tier.reasoning': 'যুক্তি',
|
||||
'intelligence.agents.tier.worker': 'ওয়ার্কার',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'মডেল পরিষদ',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'একটি প্রশ্ন করুন, সমান্তরালে একাধিক মডেল থেকে স্বতন্ত্র উত্তর পান, তারপর চেয়ার মডেল সংশ্লেষণ করে কোথায় তারা একমত, কোথায় দ্বিমত এবং প্রতিটি কী অনন্যভাবে যোগ করে।',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'সংরক্ষিত পরিষদ চয়ন করুন, এর এজেন্ট ও বিচারক সম্পাদনা করুন, বা নির্দিষ্ট ধরনের সিদ্ধান্তের জন্য নতুন পরিষদ তৈরি করুন।',
|
||||
'modelCouncil.addCouncil': 'নতুন পরিষদ',
|
||||
'modelCouncil.openCouncil': 'পরিষদ খুলুন',
|
||||
'modelCouncil.editCouncil': 'পরিষদ সম্পাদনা করুন',
|
||||
'modelCouncil.editCurrentCouncil': 'বর্তমান পরিষদ সম্পাদনা করুন',
|
||||
'modelCouncil.editCouncilAria': '{name} সম্পাদনা করুন',
|
||||
'modelCouncil.deleteCouncilAria': '{name} মুছুন',
|
||||
'modelCouncil.backToCouncils': 'পরিষদে ফিরে যান',
|
||||
'modelCouncil.saveCouncil': 'পরিষদ সংরক্ষণ করুন',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'পরিষদ লোড হচ্ছে…',
|
||||
'modelCouncil.noCouncils': 'এখনো কোনো পরিষদ নেই। শুরু করতে একটি যোগ করুন।',
|
||||
'modelCouncil.noCouncilDescription': 'কোনো বিবরণ নেই',
|
||||
'modelCouncil.registryErrorPrefix': 'পরিষদ রেজিস্ট্রি ব্যর্থ:',
|
||||
'modelCouncil.councilNameLabel': 'পরিষদের নাম',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'এই পরিষদ কখন ব্যবহার করবেন',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'রাউটিং ইঙ্গিত নির্বাচন করুন বা সুনির্দিষ্ট প্রদানকারী মডেল পিন করুন।',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'প্রদানকারী + মডেল',
|
||||
'modelCouncil.modelProviderLabel': 'মডেল প্রদানকারী',
|
||||
'modelCouncil.modelIdLabel': 'মডেল আইডি',
|
||||
'modelCouncil.useProviderModel': 'প্রদানকারী মডেল ব্যবহার করুন',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'পরিষদকে একটি প্রশ্ন করুন…',
|
||||
'modelCouncil.membersLabel': 'সদস্য মডেল',
|
||||
'modelCouncil.maxMembersNote': 'সর্বোচ্চ {max}',
|
||||
'modelCouncil.memberPlaceholder': 'যেমন gpt-5.2',
|
||||
'modelCouncil.memberAria': 'সদস্য মডেল {n}',
|
||||
'modelCouncil.removeMemberAria': 'সদস্য মডেল {n} সরান',
|
||||
'modelCouncil.addMember': '+ মডেল যোগ করুন',
|
||||
'modelCouncil.settingsTitle': 'কাউন্সিল সেটিংস',
|
||||
'modelCouncil.settingsSummary': '{count} জন জুরর · বিচারক: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'জুরর সংখ্যা',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'বিতর্কের রাউন্ড',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'বিচারক চূড়ান্ত সংশ্লেষণ লেখার আগে প্রতিটি জুরি একাধিক রাউন্ডে বিতর্ক করে।',
|
||||
'modelCouncil.judgeAgentLabel': 'বিচারক এজেন্ট',
|
||||
'modelCouncil.defaultJudge': 'ডিফল্ট বিচারক',
|
||||
'modelCouncil.savedProfile': 'সংরক্ষিত প্রোফাইল',
|
||||
@@ -4759,52 +4761,52 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'বিচারক সংশ্লেষ লেখার আগে কাউন্সিল এই শেয়ার করা খসড়ায় কাজ করে।',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'প্রতিটি রাউন্ডের পর জুরি আপডেট এখানে যোগ হয়, তারপর পরবর্তী রাউন্ডে ব্যবহৃত হয়।',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'রাউন্ড {round} আপডেট',
|
||||
'modelCouncil.scratchpadNoResponse': 'কোনো প্রতিক্রিয়া নেই',
|
||||
'modelCouncil.chairLabel': 'চেয়ার মডেল',
|
||||
'modelCouncil.chairPlaceholder': 'যেমন claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'চেয়ার প্রতিটি সদস্যের উত্তর পড়ে এবং সংশ্লেষণ লেখে।',
|
||||
'modelCouncil.run': 'পরিষদ আহ্বান করুন',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'সমান্তরালে সদস্যদের জিজ্ঞাসা করা হচ্ছে, তারপর সংশ্লেষণ…',
|
||||
'modelCouncil.deliberationHeading': 'পরিষদ আলোচনা',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'ভাগ করা যুক্তি ফাইল ব্যবহার হওয়ার সময় প্রতিটি এজেন্টের চিন্তার অবস্থা মাসকট দেখায়।',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'অন্য জুরিদের উত্তর দিন। মতানৈক্য বজায় রাখুন, যুক্তিসঙ্গত হলে আপনার দৃষ্টিভঙ্গি সংশোধন করুন এবং আপনার বর্তমান সিদ্ধান্ত স্পষ্ট রাখুন।',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'এটি আপনার শেষ জুরি পালা। যেখানে প্রমাণ সমর্থন করে সেখানে সম্মত হন, অবশিষ্ট মতানৈক্য চিহ্নিত করুন এবং বিচারককে একটি স্পষ্ট সিদ্ধান্ত দিন।',
|
||||
'modelCouncil.roundLabel': 'রাউন্ড {round}',
|
||||
'modelCouncil.currentRoundThinking': 'পরবর্তী রাউন্ড চালিয়ে যাচ্ছে…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'এই দৃষ্টিভঙ্গি থেকে কাজ করছে: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'প্রমাণ, অনুমান এবং ভাগ করা যুক্তি ফাইলে ইতোমধ্যে কী আছে তা পরীক্ষা করছে।',
|
||||
'modelCouncil.thought.plan':
|
||||
'ব্যবহারিক পথ এবং কোথায় কার্যকরণ আটকে যেতে পারে তার রূপরেখা তৈরি করছে।',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'ব্যর্থতার ধরন, অনুপস্থিত প্রসঙ্গ এবং ভঙ্গুর সিদ্ধান্তের সন্ধান করছে।',
|
||||
'modelCouncil.thought.tradeoffs': 'বিচারককে সংক্ষিপ্ত অবস্থান দেওয়ার আগে ট্রেডঅফ তুলনা করছে।',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'বিচারক প্রকৃত মতানৈক্য তুলনা করতে পারে এমন একটি স্বতন্ত্র দৃষ্টিভঙ্গি প্রস্তুত করছে।',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'জুরিদের উত্তরের জন্য অপেক্ষা করছে, তারপর সংশ্লেষণের জন্য ভাগ করা যুক্তি ফাইল পড়বে।',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'জুরিদের লাইভ চিন্তা পড়ছে এবং পরিষদের চূড়ান্ত সংশ্লেষণ লিখছে।',
|
||||
'modelCouncil.errorPrefix': 'পরিষদ ব্যর্থ:',
|
||||
'modelCouncil.resultsHeading': 'পরিষদ ফলাফল',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': '{model} দ্বারা',
|
||||
'modelCouncil.usageHeading': 'বিতর্ক ব্যবহার',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'বিতর্কের প্রম্পট ও প্রতিক্রিয়া থেকে আনুমানিক টোকেন সংখ্যা। প্রকৃত মূল্য নির্ধারণের জন্য পরিষদ RPC থেকে প্রদানকারী ব্যবহার প্রয়োজন।',
|
||||
'modelCouncil.usageEstimatedBadge': 'আনুমানিক টোকেন',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+145
-139
@@ -301,7 +301,7 @@ const messages: TranslationMap = {
|
||||
'Verfügbare Agenten durchsuchen und starten — jeder mit eigenen Werkzeugen, Fähigkeiten und Schwerpunkten.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Wiederverwendbare, ausführbare Abläufe — ein Ziel und die Schritte dorthin. Erstellen, über eine URL installieren oder einen Workflow öffnen und ausführen.',
|
||||
'memory.tab.dreams': 'Träume',
|
||||
'memory.tab.calls': 'Anrufe',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -310,24 +310,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Einstellungen',
|
||||
'memory.analyzeNow': 'Jetzt analysieren',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Erinnerungszeitleiste',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'Wann der Assistent über Sie gelernt hat — Fakten gruppiert nach dem Monat der letzten Verstärkung. Zeigt Wachstum, Aktivitätsschübe und ruhige Phasen.',
|
||||
'memoryTimeline.loading': 'Zeitleiste wird erstellt…',
|
||||
'memoryTimeline.errorPrefix': 'Diagramm konnte nicht geladen werden:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.namespaceAll': 'Alle Namensräume',
|
||||
'memoryTimeline.empty': 'Noch kein Wissensgraph.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'Wenn der Assistent Fakten über Sie aufzeichnet, wird die Zeitleiste hier angezeigt.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Aktive Monate',
|
||||
'memoryTimeline.metricRecent': 'Letzte 30 Tage',
|
||||
'memoryTimeline.heading': 'Pro Monat gelernte Fakten',
|
||||
'memoryTimeline.busiestCaption': 'Am aktivsten: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} Fakt(en) ohne aufgezeichnetes Datum.',
|
||||
'memoryTimeline.truncated': 'Die {shown} neuesten von {total} Monaten werden angezeigt.',
|
||||
'namespaceOverview.title': 'Namensraum-Übersicht',
|
||||
'namespaceOverview.intro':
|
||||
'Wie sich dein Wissen über Kontexte verteilt — die Anzahl der Fakten und eindeutigen Entitäten, die in jedem Namensraum erfasst sind.',
|
||||
@@ -374,51 +374,51 @@ const messages: TranslationMap = {
|
||||
'Connector – einflussreicher als die Anzahl der Links vermuten lässt',
|
||||
'graphCentrality.degreeTitle': '{in} rein · {out} raus',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Entitäts-Assoziationen',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Entitäten, die viele gleiche Verbindungen teilen, sind assoziiert — selbst wenn kein einzelnes Fakt sie direkt verknüpft. Die Jaccard-Ähnlichkeit deckt diese verborgenen Paare auf.',
|
||||
'entityAssociations.loading': 'Assoziationen werden berechnet…',
|
||||
'entityAssociations.errorPrefix': 'Diagramm konnte nicht geladen werden:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Noch keine Assoziationen.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Wenn Entitäten Verbindungen teilen, werden die stärksten Paare hier angezeigt.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Alle Namensräume',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Stärkste Assoziationen',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'Diese Entitäten sind direkt verbunden.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Keine direkte Verbindung — nur über gemeinsame Verbindungen assoziiert.',
|
||||
'entityAssociations.sharedLabel': '{shared} geteilt',
|
||||
'entityAssociations.pairTitle': '{jaccard} % ähnlich · {shared} von {union} Verbindungen geteilt',
|
||||
'entityAssociations.truncated': '{shown} von {total} angezeigt — stärkste zuerst.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Wissensfrische',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'Fakten, die der Assistent nicht kürzlich bestätigt hat, verblassen entlang einer Vergessenskurve. Dies zeigt, was veraltet und überprüfenswert ist, damit alte Fakten nicht als gesichert gelten.',
|
||||
'memoryFreshness.loading': 'Frische wird berechnet…',
|
||||
'memoryFreshness.errorPrefix': 'Diagramm konnte nicht geladen werden:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Noch kein Wissensgraph.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'Wenn der Assistent Fakten über Sie aufzeichnet, wird deren Frische hier verfolgt.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Alle Namensräume',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Durchschnittlicher Recall {recall} % über {total} Fakten',
|
||||
'memoryFreshness.queueHeading': 'Bestätigungswarteschlange',
|
||||
'memoryFreshness.queueTruncated': '{shown} von {total} angezeigt — diese zuerst bearbeiten.',
|
||||
'memoryFreshness.allFresh': 'Alle Fakten sind noch frisch — nichts zu bestätigen.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} Tage alt',
|
||||
'memoryFreshness.recallTitle': '{recall} % Recall · Halbwertszeit {halfLife} Tage',
|
||||
'memory.tab.path': 'Pfade',
|
||||
'connectionPath.title': 'Verbindungspfad',
|
||||
'connectionPath.intro':
|
||||
@@ -472,7 +472,7 @@ const messages: TranslationMap = {
|
||||
'memoryTree.status.integrationsEmpty': 'Keine Integrationen verbunden',
|
||||
'memoryTree.status.integrationActive': 'Aktiv',
|
||||
'memoryTree.status.integrationStale': 'Veraltet',
|
||||
'memoryTree.status.integrationChunks': 'Chunks: {count}',
|
||||
'memoryTree.status.integrationChunks': 'Blöcke: {count}',
|
||||
'alerts.title': 'Warnungen',
|
||||
'alerts.empty': 'Noch keine Benachrichtigungen',
|
||||
'alerts.markAllRead': 'Alle als gelesen markieren',
|
||||
@@ -1892,7 +1892,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'Das Mikrofon wird von einer anderen Anwendung verwendet.',
|
||||
'mic.error': 'Mikrofonfehler',
|
||||
'mic.transcribing': 'Transkribieren...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Erneuter Versuch… ({attempt} von {max})',
|
||||
'mic.tapToSend': 'Zum Senden tippen',
|
||||
'mic.waitingForAgent': 'Warten auf Agent...',
|
||||
'mic.tapAndSpeak': 'Tippen und sprechen',
|
||||
@@ -3922,9 +3922,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR ist gesetzt — entferne die Umgebungsvariable, um dies in den Einstellungen zu bearbeiten.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'Durch OPENHUMAN_ACTION_DIR überschrieben — entferne die Umgebungsvariable, um dies in den Einstellungen zu verwalten.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Genehmigungsverlauf',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'Vergangene Genehmigen-/Ablehnen-Entscheidungen des Agenten überprüfen.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'Genehmigungsverlauf anzeigen',
|
||||
'settings.sandbox.title': 'Sandbox-Ausführung',
|
||||
'settings.sandbox.menuDesc':
|
||||
@@ -3961,16 +3961,17 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthroughDesc':
|
||||
'Umgebungsvariablen, die in die Sandbox weitergeleitet werden.',
|
||||
'settings.sandbox.noEnvVars': 'Keine Umgebungsvariablen konfiguriert.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'Genehmigungsverlauf',
|
||||
'settings.approvalHistory.subtitle': 'Aktuelle Tool-Genehmigungsentscheidungen, neueste zuerst.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': 'Genehmigungsverlauf wird geladen…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': 'Noch keine Genehmigungsentscheidungen aufgezeichnet.',
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
'Genehmigungsverlauf konnte nicht geladen werden. Erneut versuchen.',
|
||||
'settings.approvalHistory.decidedAt': 'Entschieden am {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Einmal genehmigt',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Immer erlaubt',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Aussehen',
|
||||
'settings.appearance.themeHeading': 'Thema',
|
||||
@@ -4667,49 +4668,51 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Vermittler erstellen',
|
||||
'settings.agents.editor.saving': 'Sichern…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Workflows',
|
||||
'workflows.subtitle':
|
||||
'Wiederverwendbare, ausführbare Abläufe — ein Ziel und die Schritte dorthin. Erstellen, über eine URL installieren oder einen Workflow öffnen und ausführen.',
|
||||
'workflows.createNew': 'Neuer Workflow',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Workflow löschen',
|
||||
'workflows.deleteError': 'Workflow konnte nicht gelöscht werden',
|
||||
'workflows.warnings': '{count} Warnung(en)',
|
||||
'workflows.empty.title': 'Noch keine Workflows',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Erstellen Sie einen Workflow, um Regeln und Skripte für Aufgaben-Lebenszyklusphasen zu definieren.',
|
||||
'workflows.create.title': 'Neuer Workflow',
|
||||
'workflows.create.subtitle':
|
||||
'Definieren Sie ein lebenszyklus-gebundenes Regelwerk für den Agenten.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'z. B. Python-Projekt-Workflow',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.descriptionPlaceholder': 'Was macht dieser Workflow?',
|
||||
'workflows.create.whenToUse': 'Wann verwenden',
|
||||
'workflows.create.whenToUsePlaceholder': 'Wann soll der Agent diesen Workflow verwenden?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.createBtn': 'Workflow erstellen',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Workflow konnte nicht erstellt werden',
|
||||
'workflows.create.successTitle': 'Workflow erstellt',
|
||||
'workflows.create.successMessage': 'wurde erfolgreich erstellt.',
|
||||
'workflows.deleteConfirm.title': 'Workflow löschen',
|
||||
'workflows.deleteConfirm.body': '„{name}“ entfernen? Dies kann nicht rückgängig gemacht werden.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Keine Phasen definiert.',
|
||||
'workflows.detail.loadError': 'Vollständiger Workflow konnte nicht geladen werden',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Keine Regeln.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Keine Skripte.',
|
||||
'workflows.phase.toolScope': 'Tool-Bereich',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Vom Workflow-Standard geerbt.',
|
||||
'workflows.phase.toolScope.empty': 'Keine Tool-Einschränkungen.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Keine Kontextanbieter.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Verwalten Sie Ihre Agenten, deren Autonomie und worauf sie auf diesem Computer zugreifen dürfen.',
|
||||
@@ -4809,51 +4812,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Chat',
|
||||
'intelligence.agents.tier.reasoning': 'Reasoning',
|
||||
'intelligence.agents.tier.worker': 'Worker',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Modell-Rat',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'Stellen Sie eine Frage, erhalten Sie unabhängige Antworten von mehreren Modellen parallel, dann synthesiert das Vorsitz-Modell Übereinstimmungen, Unterschiede und einzigartige Beiträge.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'Wählen Sie einen gespeicherten Rat, bearbeiten Sie seine Agenten und den Richter, oder erstellen Sie einen neuen Rat für eine bestimmte Art von Entscheidung.',
|
||||
'modelCouncil.addCouncil': 'Neuer Rat',
|
||||
'modelCouncil.openCouncil': 'Rat öffnen',
|
||||
'modelCouncil.editCouncil': 'Rat bearbeiten',
|
||||
'modelCouncil.editCurrentCouncil': 'Aktuellen Rat bearbeiten',
|
||||
'modelCouncil.editCouncilAria': '{name} bearbeiten',
|
||||
'modelCouncil.deleteCouncilAria': '{name} löschen',
|
||||
'modelCouncil.backToCouncils': 'Zurück zu den Räten',
|
||||
'modelCouncil.saveCouncil': 'Rat speichern',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Räte werden geladen…',
|
||||
'modelCouncil.noCouncils': 'Noch keine Räte. Fügen Sie einen hinzu, um zu beginnen.',
|
||||
'modelCouncil.noCouncilDescription': 'Keine Beschreibung',
|
||||
'modelCouncil.registryErrorPrefix': 'Rats-Registry fehlgeschlagen:',
|
||||
'modelCouncil.councilNameLabel': 'Ratsname',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Wann diesen Rat verwenden',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Wählen Sie einen Routing-Hinweis oder pinnen Sie ein genaues Anbietermodell.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Anbieter + Modell',
|
||||
'modelCouncil.modelProviderLabel': 'Modellanbieter',
|
||||
'modelCouncil.modelIdLabel': 'Modell-ID',
|
||||
'modelCouncil.useProviderModel': 'Anbietermodell verwenden',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Stellen Sie dem Rat eine Frage…',
|
||||
'modelCouncil.membersLabel': 'Mitgliedsmodelle',
|
||||
'modelCouncil.maxMembersNote': 'bis zu {max}',
|
||||
'modelCouncil.memberPlaceholder': 'z. B. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Mitgliedsmodell {n}',
|
||||
'modelCouncil.removeMemberAria': 'Mitgliedsmodell {n} entfernen',
|
||||
'modelCouncil.addMember': '+ Modell hinzufügen',
|
||||
'modelCouncil.settingsTitle': 'Council-Einstellungen',
|
||||
'modelCouncil.settingsSummary': '{count} Juroren · Richter: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Anzahl der Juroren',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Debattenrunden',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Jeder Juror debattiert über mehrere Runden, bevor der Richter die endgültige Synthese verfasst.',
|
||||
'modelCouncil.judgeAgentLabel': 'Richter-Agent',
|
||||
'modelCouncil.defaultJudge': 'Standardrichter',
|
||||
'modelCouncil.savedProfile': 'Gespeichertes Profil',
|
||||
@@ -4882,52 +4886,54 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'Der Council arbeitet an diesem gemeinsamen Entwurf, bevor der Richter die Synthese schreibt.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Juroren-Updates werden hier nach jeder Runde angefügt und in die nächste Runde eingespeist.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Runde-{round}-Updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'Keine Antwort',
|
||||
'modelCouncil.chairLabel': 'Vorsitz-Modell',
|
||||
'modelCouncil.chairPlaceholder': 'z. B. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp':
|
||||
'Der Vorsitzende liest jede Mitgliederantwort und verfasst die Synthese.',
|
||||
'modelCouncil.run': 'Rat einberufen',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Mitglieder werden parallel abgefragt, dann Synthese…',
|
||||
'modelCouncil.deliberationHeading': 'Rats-Beratung',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Maskottchen zeigen die Denkphase jedes Agenten, während die gemeinsame Argumentationsdatei aktiv ist.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Antworten Sie auf die anderen Juroren. Bewahren Sie Meinungsverschiedenheiten, revidieren Sie Ihre Sicht wenn nötig und formulieren Sie Ihr aktuelles Fazit deutlich.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'Dies ist Ihre letzte Juroren-Runde. Konvergieren Sie, wo die Beweise es stützen, benennen Sie verbleibende Meinungsverschiedenheiten und geben Sie dem Richter ein klares Fazit.',
|
||||
'modelCouncil.roundLabel': 'Runde {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Nächste Runde wird fortgesetzt…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Arbeite aus dieser Perspektive: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'Prüfe Beweise, Annahmen und was die gemeinsame Argumentationsdatei bereits enthält.',
|
||||
'modelCouncil.thought.plan':
|
||||
'Skizziere den praktischen Weg und wo die Umsetzung scheitern könnte.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Suche nach Fehlermodi, fehlendem Kontext und brüchigen Schlussfolgerungen.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Vergleiche Abwägungen, bevor ich dem Richter eine knappe Position übergebe.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'Bereite eine eigenständige Sicht vor, damit der Richter echte Meinungsverschiedenheiten vergleichen kann.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'Warte auf Juroren-Antworten, dann lese die gemeinsame Argumentationsdatei zur Synthese.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Lese die Live-Gedanken der Juroren und verfasse die endgültige Rats-Synthese.',
|
||||
'modelCouncil.errorPrefix': 'Rat fehlgeschlagen:',
|
||||
'modelCouncil.resultsHeading': 'Rats-Ergebnisse',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'von {model}',
|
||||
'modelCouncil.usageHeading': 'Debatten-Nutzung',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Geschätzte Token-Anzahl aus Debatten-Prompts und -Antworten. Die echte Preisgestaltung erfordert Anbieternutzung aus dem Rats-RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Geschätzte Token',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+179
-173
@@ -301,7 +301,7 @@ const messages: TranslationMap = {
|
||||
'Explora y ejecuta los agentes disponibles — cada uno con sus propias herramientas, capacidades y área de enfoque.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Procedimientos reutilizables y ejecutables — un objetivo y los pasos para alcanzarlo. Crea uno, instala desde una URL o abre un flujo de trabajo para ejecutarlo.',
|
||||
'memory.tab.dreams': 'Sueños',
|
||||
'memory.tab.calls': 'Llamadas',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -310,24 +310,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Configuración',
|
||||
'memory.analyzeNow': 'Analizar ahora',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Línea de tiempo de la memoria',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'Cuándo el asistente aprendió sobre ti — hechos agrupados por el mes en que se reforzaron por última vez. Muestra crecimiento, picos de actividad y períodos tranquilos.',
|
||||
'memoryTimeline.loading': 'Construyendo la línea de tiempo…',
|
||||
'memoryTimeline.errorPrefix': 'No se pudo cargar el grafo:',
|
||||
'memoryTimeline.retry': 'Reintentar',
|
||||
'memoryTimeline.namespaceLabel': 'Espacio de nombres',
|
||||
'memoryTimeline.namespaceAll': 'Todos los espacios de nombres',
|
||||
'memoryTimeline.empty': 'Aún no hay grafo de conocimiento.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'Cuando el asistente registre hechos sobre ti, la línea de tiempo aparecerá aquí.',
|
||||
'memoryTimeline.metricTotal': 'Hechos',
|
||||
'memoryTimeline.metricMonths': 'Meses activos',
|
||||
'memoryTimeline.metricRecent': 'Últimos 30 días',
|
||||
'memoryTimeline.heading': 'Hechos aprendidos por mes',
|
||||
'memoryTimeline.busiestCaption': 'Más activo: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} hecho(s) sin fecha registrada.',
|
||||
'memoryTimeline.truncated': 'Mostrando los {shown} más recientes de {total} meses.',
|
||||
'namespaceOverview.title': 'Resumen de espacios de nombres',
|
||||
'namespaceOverview.intro':
|
||||
'Cómo se distribuye tu conocimiento entre contextos: el número de hechos y entidades distintas registradas en cada espacio de nombres.',
|
||||
@@ -374,51 +374,51 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'Conector: más influyente de lo que sugiere su número de enlaces',
|
||||
'graphCentrality.degreeTitle': '{in} entra · {out} sale',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Asociaciones de entidades',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'Las entidades que comparten muchas conexiones están asociadas — incluso cuando ningún hecho las vincula directamente. La similitud de Jaccard revela estos emparejamientos ocultos.',
|
||||
'entityAssociations.loading': 'Calculando asociaciones…',
|
||||
'entityAssociations.errorPrefix': 'No se pudo cargar el grafo:',
|
||||
'entityAssociations.retry': 'Reintentar',
|
||||
'entityAssociations.empty': 'Aún no hay asociaciones.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'Cuando las entidades compartan conexiones, las asociaciones más fuertes aparecerán aquí.',
|
||||
'entityAssociations.namespaceLabel': 'Espacio de nombres',
|
||||
'entityAssociations.namespaceAll': 'Todos los espacios de nombres',
|
||||
'entityAssociations.metricEntities': 'Entidades',
|
||||
'entityAssociations.metricPairs': 'Asociaciones',
|
||||
'entityAssociations.rankedHeading': 'Asociaciones más fuertes',
|
||||
'entityAssociations.linkedBadge': 'vinculada',
|
||||
'entityAssociations.inferredBadge': 'inferida',
|
||||
'entityAssociations.linkedTitle': 'Estas entidades están conectadas directamente.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Sin enlace directo — asociadas solo a través de conexiones compartidas.',
|
||||
'entityAssociations.sharedLabel': '{shared} compartidas',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} de {union} conexiones compartidas',
|
||||
'entityAssociations.truncated': 'Mostrando {shown} de {total} — las más fuertes primero.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Frescura del conocimiento',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'Los hechos que el asistente no ha reconfirmado recientemente decaen a lo largo de una curva de olvido. Esto muestra qué se está volviendo obsoleto y vale la pena volver a verificar, para no tratar hechos antiguos como certeros.',
|
||||
'memoryFreshness.loading': 'Calculando frescura…',
|
||||
'memoryFreshness.errorPrefix': 'No se pudo cargar el grafo:',
|
||||
'memoryFreshness.retry': 'Reintentar',
|
||||
'memoryFreshness.empty': 'Aún no hay grafo de conocimiento.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'Cuando el asistente registre hechos sobre ti, su frescura se rastreará aquí.',
|
||||
'memoryFreshness.namespaceLabel': 'Espacio de nombres',
|
||||
'memoryFreshness.namespaceAll': 'Todos los espacios de nombres',
|
||||
'memoryFreshness.metricFresh': 'Fresco',
|
||||
'memoryFreshness.metricFading': 'Desvaneciendose',
|
||||
'memoryFreshness.metricStale': 'Obsoleto',
|
||||
'memoryFreshness.recallCaption': 'Recuperación promedio {recall}% en {total} hechos',
|
||||
'memoryFreshness.queueHeading': 'Cola de reconfirmación',
|
||||
'memoryFreshness.queueTruncated': 'Mostrando {shown} de {total} — atiende estos primero.',
|
||||
'memoryFreshness.allFresh': 'Todos los hechos siguen frescos — nada que reconfirmar.',
|
||||
'memoryFreshness.statusFading': 'desvaneciendose',
|
||||
'memoryFreshness.statusStale': 'obsoleto',
|
||||
'memoryFreshness.ageLabel': '{days} días',
|
||||
'memoryFreshness.recallTitle': '{recall}% recuperación · vida media {halfLife} días',
|
||||
'memory.tab.path': 'Rutas',
|
||||
'connectionPath.title': 'Ruta de conexión',
|
||||
'connectionPath.intro':
|
||||
@@ -1884,7 +1884,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'El micrófono está siendo utilizado por otra aplicación.',
|
||||
'mic.error': 'Error del micrófono',
|
||||
'mic.transcribing': 'Transcribiendo...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Reintentando… ({attempt} de {max})',
|
||||
'mic.tapToSend': 'Toca para enviar',
|
||||
'mic.waitingForAgent': 'Esperando al agente...',
|
||||
'mic.tapAndSpeak': 'Toca y habla',
|
||||
@@ -3895,9 +3895,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR está definido — elimina la variable de entorno para editar esto desde Ajustes.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'Anulado por OPENHUMAN_ACTION_DIR — elimina la variable de entorno para gestionarlo desde Ajustes.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Historial de aprobaciones',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'Revisa las decisiones anteriores de Aprobar / Denegar solicitadas por el agente.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'Ver historial de aprobaciones',
|
||||
'settings.sandbox.title': 'Ejecución en sandbox',
|
||||
'settings.sandbox.menuDesc':
|
||||
@@ -3936,17 +3936,19 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'Reenvío de variables de entorno',
|
||||
'settings.sandbox.envPassthroughDesc': 'Variables de entorno reenviadas al sandbox.',
|
||||
'settings.sandbox.noEnvVars': 'No hay variables de entorno configuradas.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.approvalHistory.title': 'Historial de aprobaciones',
|
||||
'settings.approvalHistory.subtitle':
|
||||
'Decisiones recientes de aprobación de herramientas, las más nuevas primero.',
|
||||
'settings.approvalHistory.refresh': 'Actualizar',
|
||||
'settings.approvalHistory.loading': 'Cargando historial de aprobaciones…',
|
||||
'settings.approvalHistory.retry': 'Reintentar',
|
||||
'settings.approvalHistory.emptyState': 'Aún no hay decisiones de aprobación registradas.',
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
'No se pudo cargar el historial de aprobaciones. Inténtalo de nuevo.',
|
||||
'settings.approvalHistory.decidedAt': 'Decidido el {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Aprobado una vez',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Siempre permitido',
|
||||
'settings.approvalHistory.decision.deny': 'Denegado',
|
||||
'settings.appearance.title': 'Apariencia',
|
||||
'settings.appearance.themeHeading': 'Tema',
|
||||
'settings.appearance.themeAria': 'Tema',
|
||||
@@ -4638,49 +4640,51 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Crear agente',
|
||||
'settings.agents.editor.saving': 'Guardando…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Flujos de trabajo',
|
||||
'workflows.subtitle':
|
||||
'Procedimientos reutilizables y ejecutables — un objetivo y los pasos para alcanzarlo. Crea uno, instala desde una URL o abre un flujo de trabajo para ejecutarlo.',
|
||||
'workflows.createNew': 'Nuevo flujo de trabajo',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Eliminar flujo de trabajo',
|
||||
'workflows.deleteError': 'No se pudo eliminar el flujo de trabajo',
|
||||
'workflows.warnings': '{count} advertencia(s)',
|
||||
'workflows.empty.title': 'Aún no hay flujos de trabajo',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Crea un flujo de trabajo para definir reglas y scripts para las fases del ciclo de vida de tareas.',
|
||||
'workflows.create.title': 'Nuevo flujo de trabajo',
|
||||
'workflows.create.subtitle':
|
||||
'Define un conjunto de reglas vinculado al ciclo de vida del agente.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'ej. Flujo de trabajo de proyecto Python',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': '¿Qué hace este flujo de trabajo?',
|
||||
'workflows.create.whenToUse': 'Cuándo usar',
|
||||
'workflows.create.whenToUsePlaceholder': '¿Cuándo debería el agente usar este flujo de trabajo?',
|
||||
'workflows.create.optional': '(opcional)',
|
||||
'workflows.create.createBtn': 'Crear flujo de trabajo',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'No se pudo crear el flujo de trabajo',
|
||||
'workflows.create.successTitle': 'Flujo de trabajo creado',
|
||||
'workflows.create.successMessage': 'se creó exitosamente.',
|
||||
'workflows.deleteConfirm.title': 'Eliminar flujo de trabajo',
|
||||
'workflows.deleteConfirm.body': '¿Eliminar "{name}"? Esto no se puede deshacer.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'No hay fases definidas.',
|
||||
'workflows.detail.loadError': 'No se pudo cargar el flujo de trabajo completo',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Sin reglas.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Sin scripts.',
|
||||
'workflows.phase.toolScope': 'Alcance de herramientas',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Heredado del flujo de trabajo predeterminado.',
|
||||
'workflows.phase.toolScope.empty': 'Sin restricciones de herramientas.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Sin proveedores de contexto.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Administra tus agentes, su autonomía y a qué pueden acceder en este equipo.',
|
||||
@@ -4781,51 +4785,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Chat',
|
||||
'intelligence.agents.tier.reasoning': 'Razonamiento',
|
||||
'intelligence.agents.tier.worker': 'Trabajador',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Consejo de modelos',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'Haz una pregunta, obtén respuestas independientes de varios modelos en paralelo, y luego el modelo presidente sintetiza dónde coinciden, dónde discrepan y qué aporta cada uno.',
|
||||
'modelCouncil.listTitle': 'Consejos',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'Elige un consejo guardado, edita sus agentes y juez, o crea uno nuevo para un tipo específico de decisión.',
|
||||
'modelCouncil.addCouncil': 'Nuevo consejo',
|
||||
'modelCouncil.openCouncil': 'Abrir consejo',
|
||||
'modelCouncil.editCouncil': 'Editar consejo',
|
||||
'modelCouncil.editCurrentCouncil': 'Editar consejo actual',
|
||||
'modelCouncil.editCouncilAria': 'Editar {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Eliminar {name}',
|
||||
'modelCouncil.backToCouncils': 'Volver a los consejos',
|
||||
'modelCouncil.saveCouncil': 'Guardar consejo',
|
||||
'modelCouncil.savingCouncil': 'Guardando…',
|
||||
'modelCouncil.cancelEdit': 'Cancelar',
|
||||
'modelCouncil.loadingCouncils': 'Cargando consejos…',
|
||||
'modelCouncil.noCouncils': 'Aún no hay consejos. Agrega uno para empezar.',
|
||||
'modelCouncil.noCouncilDescription': 'Sin descripción',
|
||||
'modelCouncil.registryErrorPrefix': 'El registro del consejo falló:',
|
||||
'modelCouncil.councilNameLabel': 'Nombre del consejo',
|
||||
'modelCouncil.councilDescriptionLabel': 'Descripción',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Cuándo usar este consejo',
|
||||
'modelCouncil.selectModel': 'Seleccionar',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Selecciona una pista de enrutamiento o fija un modelo de proveedor exacto.',
|
||||
'modelCouncil.closeModelPicker': 'Cerrar',
|
||||
'modelCouncil.modelPickerHints': 'Sugerencias',
|
||||
'modelCouncil.modelPickerProviderModel': 'Proveedor + modelo',
|
||||
'modelCouncil.modelProviderLabel': 'Proveedor del modelo',
|
||||
'modelCouncil.modelIdLabel': 'ID del modelo',
|
||||
'modelCouncil.useProviderModel': 'Usar modelo del proveedor',
|
||||
'modelCouncil.questionLabel': 'Pregunta',
|
||||
'modelCouncil.questionPlaceholder': 'Haz una pregunta al consejo…',
|
||||
'modelCouncil.membersLabel': 'Modelos miembros',
|
||||
'modelCouncil.maxMembersNote': 'hasta {max}',
|
||||
'modelCouncil.memberPlaceholder': 'ej. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Modelo miembro {n}',
|
||||
'modelCouncil.removeMemberAria': 'Eliminar modelo miembro {n}',
|
||||
'modelCouncil.addMember': '+ Agregar modelo',
|
||||
'modelCouncil.settingsTitle': 'Configuración del consejo',
|
||||
'modelCouncil.settingsSummary': '{count} jurados · juez: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Número de jurados',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Rondas de debate',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Cada jurado sigue debatiendo en rondas antes de que el juez escriba la síntesis final.',
|
||||
'modelCouncil.judgeAgentLabel': 'Agente juez',
|
||||
'modelCouncil.defaultJudge': 'Juez predeterminado',
|
||||
'modelCouncil.savedProfile': 'Perfil guardado',
|
||||
@@ -4854,52 +4859,53 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'El consejo trabaja sobre este borrador compartido antes de que el juez escriba la síntesis.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Las actualizaciones de los jurados se agregan aquí después de cada ronda y se usan en la siguiente.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Actualizaciones de la ronda {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Sin respuesta',
|
||||
'modelCouncil.chairLabel': 'Modelo presidente',
|
||||
'modelCouncil.chairPlaceholder': 'ej. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp':
|
||||
'El presidente lee cada respuesta de los miembros y redacta la síntesis.',
|
||||
'modelCouncil.run': 'Convocar consejo',
|
||||
'modelCouncil.running': 'Convocando…',
|
||||
'modelCouncil.runningHint': 'Consultando miembros en paralelo, luego sintetizando…',
|
||||
'modelCouncil.deliberationHeading': 'Deliberación del consejo',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Las mascotas muestran a cada agente pensando mientras el archivo de razonamiento compartido está en uso.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Responde a los otros jurados. Mantén los desacuerdos, revisa tu postura cuando sea justificado y deja tu conclusión actual explícita.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'Esta es tu última ronda como jurado. Converge donde la evidencia lo respalde, señala desacuerdos restantes y dale al juez una conclusión clara.',
|
||||
'modelCouncil.roundLabel': 'Ronda {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuando la siguiente ronda…',
|
||||
'modelCouncil.thinkingBadge': 'Pensando',
|
||||
'modelCouncil.thinkingWithBrief': 'Trabajando desde esta perspectiva: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'Revisando evidencia, suposiciones y lo que el archivo de razonamiento compartido ya contiene.',
|
||||
'modelCouncil.thought.plan': 'Trazando el camino práctico y dónde la ejecución podría atascarse.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Buscando modos de fallo, contexto faltante y conclusiones frágiles.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Comparando compromisos antes de entregar al juez una posición concisa.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'Preparando una vista distinta para que el juez compare desacuerdos reales.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Juez',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'Esperando las respuestas de los jurados, luego leyendo el archivo de razonamiento compartido para sintetizar.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Sintetizando',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'Leyendo los pensamientos en vivo de los jurados y redactando la síntesis final del consejo.',
|
||||
'modelCouncil.errorPrefix': 'El consejo falló:',
|
||||
'modelCouncil.resultsHeading': 'Resultados del consejo',
|
||||
'modelCouncil.memberAnswered': 'Respondido',
|
||||
'modelCouncil.memberFailed': 'Fallido',
|
||||
'modelCouncil.synthesisHeading': 'Síntesis',
|
||||
'modelCouncil.synthesisBy': 'por {model}',
|
||||
'modelCouncil.usageHeading': 'Uso del debate',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Conteos de tokens estimados de los prompts y respuestas del debate. El precio real requiere el uso del proveedor desde el RPC del consejo.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Tokens estimados',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+145
-139
@@ -300,7 +300,7 @@ const messages: TranslationMap = {
|
||||
'Parcourez et exécutez vos agents disponibles — chacun avec ses propres outils, capacités et domaine de spécialisation.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
"Procédures réutilisables et exécutables — un objectif et les étapes pour l'atteindre. Créez-en un, installez depuis une URL ou ouvrez un workflow pour l'exécuter.",
|
||||
'memory.tab.dreams': 'Rêves',
|
||||
'memory.tab.calls': 'Appels',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -309,24 +309,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Paramètres',
|
||||
'memory.analyzeNow': 'Analyser maintenant',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Chronologie de la mémoire',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
"Quand l'assistant a appris sur vous — faits regroupés par le mois de leur dernier renforcement. Montre la croissance, les pics d'activité et les périodes calmes.",
|
||||
'memoryTimeline.loading': 'Construction de la chronologie…',
|
||||
'memoryTimeline.errorPrefix': 'Impossible de charger le graphe :',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.namespaceAll': 'Tous les espaces de noms',
|
||||
'memoryTimeline.empty': 'Pas encore de graphe de connaissances.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
"Lorsque l'assistant enregistrera des faits à votre sujet, la chronologie apparaîtra ici.",
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Mois actifs',
|
||||
'memoryTimeline.metricRecent': '30 derniers jours',
|
||||
'memoryTimeline.heading': 'Faits appris par mois',
|
||||
'memoryTimeline.busiestCaption': 'Le plus actif : {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fait(s) sans date enregistrée.',
|
||||
'memoryTimeline.truncated': 'Affichage des {shown} plus récents sur {total} mois.',
|
||||
'namespaceOverview.title': 'Aperçu des espaces de noms',
|
||||
'namespaceOverview.intro':
|
||||
'Comment vos connaissances sont réparties entre les contextes — le nombre de faits et d’entités distinctes enregistrés dans chaque espace de noms.',
|
||||
@@ -371,51 +371,53 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'Connecteur — plus influent que ne le suggère son nombre de liens',
|
||||
'graphCentrality.degreeTitle': '{in} en · {out} hors',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': "Associations d'entités",
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Les entités partageant de nombreuses connexions sont associées — même sans lien factuel direct. La similarité de Jaccard révèle ces associations cachées.',
|
||||
'entityAssociations.loading': 'Calcul des associations…',
|
||||
'entityAssociations.errorPrefix': 'Impossible de charger le graphe :',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Aucune association pour le moment.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Lorsque les entités partageront des connexions, les associations les plus fortes apparaîtront ici.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Tous les espaces de noms',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Associations les plus fortes',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'Ces entités sont directement connectées.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Aucun lien direct — associées uniquement par des connexions partagées.',
|
||||
'entityAssociations.sharedLabel': '{shared} partagées',
|
||||
'entityAssociations.pairTitle':
|
||||
'{jaccard} % similaires · {shared} sur {union} connexions partagées',
|
||||
'entityAssociations.truncated': "Affichage de {shown} sur {total} — les plus fortes d'abord.",
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Fraîcheur des connaissances',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
"Les faits non reconfirmés récemment par l'assistant se dégradent selon une courbe d'oubli. Cela montre ce qui devient obsolète et mérite une vérification, pour ne pas considérer d'anciens faits comme certains.",
|
||||
'memoryFreshness.loading': 'Calcul de la fraîcheur…',
|
||||
'memoryFreshness.errorPrefix': 'Impossible de charger le graphe :',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Pas encore de graphe de connaissances.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
"Lorsque l'assistant enregistrera des faits à votre sujet, leur fraîcheur sera suivie ici.",
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Tous les espaces de noms',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Rappel moyen {recall} % sur {total} faits',
|
||||
'memoryFreshness.queueHeading': 'File de reconfirmation',
|
||||
'memoryFreshness.queueTruncated':
|
||||
'Affichage de {shown} sur {total} — traitez ceux-ci en priorité.',
|
||||
'memoryFreshness.allFresh': 'Tous les faits sont encore frais — rien à reconfirmer.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} j',
|
||||
'memoryFreshness.recallTitle': '{recall} % rappel · demi-vie {halfLife} j',
|
||||
'memory.tab.path': 'Chemins',
|
||||
'connectionPath.title': 'Chemin de connexion',
|
||||
'connectionPath.intro':
|
||||
@@ -1889,7 +1891,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'Le microphone est utilisé par une autre application.',
|
||||
'mic.error': 'Erreur de microphone',
|
||||
'mic.transcribing': 'Transcription…',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Nouvelle tentative… ({attempt} sur {max})',
|
||||
'mic.tapToSend': 'Appuie pour envoyer',
|
||||
'mic.waitingForAgent': "En attente de l'agent…",
|
||||
'mic.tapAndSpeak': 'Appuie et parle',
|
||||
@@ -3908,9 +3910,9 @@ const messages: TranslationMap = {
|
||||
"OPENHUMAN_ACTION_DIR est défini — désactivez la variable d'environnement pour modifier cela depuis les Paramètres.",
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
"Remplacé par OPENHUMAN_ACTION_DIR — désactivez la variable d'environnement pour gérer cela depuis les Paramètres.",
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Historique des approbations',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
"Consultez les décisions Approuver / Refuser passées demandées par l'agent.",
|
||||
'settings.agentAccess.viewApprovalHistory': "Voir l'historique des approbations",
|
||||
'settings.sandbox.title': 'Exécution en sandbox',
|
||||
'settings.sandbox.menuDesc':
|
||||
@@ -3949,16 +3951,18 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': "Transfert des variables d'environnement",
|
||||
'settings.sandbox.envPassthroughDesc': "Variables d'environnement transmises dans le sandbox.",
|
||||
'settings.sandbox.noEnvVars': "Aucune variable d'environnement configurée.",
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'Historique des approbations',
|
||||
'settings.approvalHistory.subtitle':
|
||||
"Décisions récentes d'approbation d'outils, les plus récentes en premier.",
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': "Chargement de l'historique des approbations…",
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': "Aucune décision d'approbation enregistrée.",
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
"Impossible de charger l'historique des approbations. Réessayez.",
|
||||
'settings.approvalHistory.decidedAt': 'Décidé le {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approuvé une fois',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Toujours autorisé',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Apparence',
|
||||
'settings.appearance.themeHeading': 'Thème',
|
||||
@@ -4651,49 +4655,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Créer un agent',
|
||||
'settings.agents.editor.saving': 'Enregistrement…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Workflows',
|
||||
'workflows.subtitle':
|
||||
"Procédures réutilisables et exécutables — un objectif et les étapes pour l'atteindre. Créez-en un, installez depuis une URL ou ouvrez un workflow pour l'exécuter.",
|
||||
'workflows.createNew': 'Nouveau workflow',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Supprimer le workflow',
|
||||
'workflows.deleteError': 'Échec de la suppression du workflow',
|
||||
'workflows.warnings': '{count} avertissement(s)',
|
||||
'workflows.empty.title': 'Aucun workflow pour le moment',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Créez un workflow pour définir des règles et des scripts pour les phases du cycle de vie des tâches.',
|
||||
'workflows.create.title': 'Nouveau workflow',
|
||||
'workflows.create.subtitle': "Définissez un ensemble de règles lié au cycle de vie de l'agent.",
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'ex. Workflow de projet Python',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'Que fait ce workflow ?',
|
||||
'workflows.create.whenToUse': 'Quand utiliser',
|
||||
'workflows.create.whenToUsePlaceholder': "Quand l'agent doit-il utiliser ce workflow ?",
|
||||
'workflows.create.optional': '(facultatif)',
|
||||
'workflows.create.createBtn': 'Créer un workflow',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Impossible de créer le workflow',
|
||||
'workflows.create.successTitle': 'Workflow créé',
|
||||
'workflows.create.successMessage': 'a été créé avec succès.',
|
||||
'workflows.deleteConfirm.title': 'Supprimer le workflow',
|
||||
'workflows.deleteConfirm.body': 'Supprimer « {name} » ? Cette action est irréversible.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Aucune phase définie.',
|
||||
'workflows.detail.loadError': 'Échec du chargement complet du workflow',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Aucune règle.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Aucun script.',
|
||||
'workflows.phase.toolScope': 'Portée des outils',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Hérité des paramètres par défaut du workflow.',
|
||||
'workflows.phase.toolScope.empty': "Aucune restriction d'outils.",
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Aucun fournisseur de contexte.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Gérez vos agents, leur autonomie et ce à quoi ils peuvent accéder sur cet ordinateur.',
|
||||
@@ -4796,51 +4801,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Chat',
|
||||
'intelligence.agents.tier.reasoning': 'Raisonnement',
|
||||
'intelligence.agents.tier.worker': 'Travailleur',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Conseil de modèles',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
"Posez une question, obtenez des réponses indépendantes de plusieurs modèles en parallèle, puis le modèle président synthétise les points d'accord, de désaccord et les apports uniques de chacun.",
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'Choisissez un conseil sauvegardé, modifiez ses agents et son juge, ou créez-en un nouveau pour un type de décision spécifique.',
|
||||
'modelCouncil.addCouncil': 'Nouveau conseil',
|
||||
'modelCouncil.openCouncil': 'Ouvrir le conseil',
|
||||
'modelCouncil.editCouncil': 'Modifier le conseil',
|
||||
'modelCouncil.editCurrentCouncil': 'Modifier le conseil actuel',
|
||||
'modelCouncil.editCouncilAria': 'Modifier {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Supprimer {name}',
|
||||
'modelCouncil.backToCouncils': 'Retour aux conseils',
|
||||
'modelCouncil.saveCouncil': 'Enregistrer le conseil',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Chargement des conseils…',
|
||||
'modelCouncil.noCouncils': 'Aucun conseil pour le moment. Ajoutez-en un pour commencer.',
|
||||
'modelCouncil.noCouncilDescription': 'Aucune description',
|
||||
'modelCouncil.registryErrorPrefix': 'Le registre du conseil a échoué :',
|
||||
'modelCouncil.councilNameLabel': 'Nom du conseil',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Quand utiliser ce conseil',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Sélectionnez un indice de routage ou épinglez un modèle fournisseur exact.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Fournisseur + modèle',
|
||||
'modelCouncil.modelProviderLabel': 'Fournisseur du modèle',
|
||||
'modelCouncil.modelIdLabel': 'ID du modèle',
|
||||
'modelCouncil.useProviderModel': 'Utiliser le modèle du fournisseur',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Posez une question au conseil…',
|
||||
'modelCouncil.membersLabel': 'Modèles membres',
|
||||
'modelCouncil.maxMembersNote': "jusqu'à {max}",
|
||||
'modelCouncil.memberPlaceholder': 'ex. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Modèle membre {n}',
|
||||
'modelCouncil.removeMemberAria': 'Supprimer le modèle membre {n}',
|
||||
'modelCouncil.addMember': '+ Ajouter un modèle',
|
||||
'modelCouncil.settingsTitle': 'Paramètres du conseil',
|
||||
'modelCouncil.settingsSummary': '{count} jurés · juge : {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Nombre de jurés',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Tours de débat',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Chaque juré débat sur plusieurs tours avant que le juge ne rédige la synthèse finale.',
|
||||
'modelCouncil.judgeAgentLabel': 'Agent juge',
|
||||
'modelCouncil.defaultJudge': 'Juge par défaut',
|
||||
'modelCouncil.savedProfile': 'Profil enregistré',
|
||||
@@ -4869,52 +4875,52 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'Le conseil travaille sur ce brouillon partagé avant que le juge rédige la synthèse.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Les mises à jour des jurés sont ajoutées ici après chaque tour et alimentent le tour suivant.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Mises à jour du tour {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Aucune réponse',
|
||||
'modelCouncil.chairLabel': 'Modèle président',
|
||||
'modelCouncil.chairPlaceholder': 'ex. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'Le président lit chaque réponse des membres et rédige la synthèse.',
|
||||
'modelCouncil.run': 'Convoquer le conseil',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Interrogation des membres en parallèle, puis synthèse…',
|
||||
'modelCouncil.deliberationHeading': 'Délibération du conseil',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
"Les mascottes montrent chaque agent en réflexion pendant que le fichier de raisonnement partagé est en cours d'utilisation.",
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Répondez aux autres jurés. Préservez les désaccords, révisez votre avis si justifié et gardez votre conclusion actuelle explicite.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
"C'est votre dernier tour de juré. Convergez là où les preuves le justifient, signalez les désaccords restants et donnez au juge une conclusion claire.",
|
||||
'modelCouncil.roundLabel': 'Tour {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Poursuite du tour suivant…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Travail depuis cette perspective : {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'Vérification des preuves, des hypothèses et du contenu déjà capturé dans le fichier de raisonnement partagé.',
|
||||
'modelCouncil.thought.plan': 'Esquisse du chemin pratique et des points de blocage possibles.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Recherche de modes de défaillance, de contexte manquant et de conclusions fragiles.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Comparaison des compromis avant de remettre au juge une position concise.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
"Préparation d'un point de vue distinct pour que le juge puisse comparer les vrais désaccords.",
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'En attente des réponses des jurés, puis lecture du fichier de raisonnement partagé pour la synthèse.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Lecture des réflexions en direct des jurés et rédaction de la synthèse finale du conseil.',
|
||||
'modelCouncil.errorPrefix': 'Le conseil a échoué :',
|
||||
'modelCouncil.resultsHeading': 'Résultats du conseil',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'par {model}',
|
||||
'modelCouncil.usageHeading': 'Utilisation du débat',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
"Estimations de tokens issus des prompts et réponses du débat. La tarification réelle nécessite les données d'utilisation du fournisseur via le RPC du conseil.",
|
||||
'modelCouncil.usageEstimatedBadge': 'Tokens estimés',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+141
-141
@@ -291,7 +291,7 @@ const messages: TranslationMap = {
|
||||
'अपने उपलब्ध एजेंट ब्राउज़ करें और चलाएं — प्रत्येक के पास अपने टूल, क्षमताएं और फोकस क्षेत्र हैं।',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'पुन: प्रयोज्य, चलाने योग्य प्रक्रियाएँ — एक लक्ष्य और उसे प्राप्त करने के चरण। एक बनाएँ, URL से इंस्टॉल करें, या चलाने के लिए वर्कफ़्लो खोलें।',
|
||||
'memory.tab.dreams': 'ड्रीम्स',
|
||||
'memory.tab.calls': 'कॉल्स',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -300,24 +300,23 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'सेटिंग्स',
|
||||
'memory.analyzeNow': 'अभी एनालाइज़ करें',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'स्मृति समयरेखा',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'सहायक ने आपके बारे में कब सीखा — तथ्य उस महीने के अनुसार समूहित जब उन्हें आखिरी बार सुदृढ़ किया गया। विकास, गतिविधि के उछाल और शांत अवधि दिखाता है।',
|
||||
'memoryTimeline.loading': 'समयरेखा बना रहे हैं…',
|
||||
'memoryTimeline.errorPrefix': 'ग्राफ़ लोड नहीं हो सका:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.namespaceAll': 'सभी नेमस्पेस',
|
||||
'memoryTimeline.empty': 'अभी तक कोई ज्ञान ग्राफ़ नहीं।',
|
||||
'memoryTimeline.emptyHint': 'जब सहायक आपके बारे में तथ्य दर्ज करेगा, तो समयरेखा यहाँ दिखेगी।',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'सक्रिय महीने',
|
||||
'memoryTimeline.metricRecent': 'पिछले 30 दिन',
|
||||
'memoryTimeline.heading': 'प्रति माह सीखे गए तथ्य',
|
||||
'memoryTimeline.busiestCaption': 'सबसे व्यस्त: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} तथ्यों में कोई दर्ज तिथि नहीं है।',
|
||||
'memoryTimeline.truncated': '{total} महीनों में से सबसे हाल के {shown} दिखा रहे हैं।',
|
||||
'namespaceOverview.title': 'नेमस्पेस अवलोकन',
|
||||
'namespaceOverview.intro':
|
||||
'आपका ज्ञान संदर्भों में कैसे वितरित है — प्रत्येक नेमस्पेस में दर्ज तथ्यों और विशिष्ट इकाइयों की संख्या।',
|
||||
@@ -362,51 +361,51 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'कनेक्टर - इसके लिंक गिनती से अधिक प्रभावशाली सुझाव देते हैं',
|
||||
'graphCentrality.degreeTitle': '{in}',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'इकाई संबंध',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'जो इकाइयाँ कई समान कनेक्शन साझा करती हैं, वे संबंधित होती हैं — भले ही कोई एक तथ्य उन्हें सीधे न जोड़े। Jaccard समानता इन छिपे हुए संबंधों को उजागर करती है।',
|
||||
'entityAssociations.loading': 'संबंध स्कोर कर रहे हैं…',
|
||||
'entityAssociations.errorPrefix': 'ग्राफ़ लोड नहीं हो सका:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'अभी तक कोई संबंध नहीं।',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'जब इकाइयाँ कनेक्शन साझा करना शुरू करेंगी, तो सबसे मजबूत जोड़ियाँ यहाँ दिखेंगी।',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'सभी नेमस्पेस',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'सबसे मजबूत संबंध',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'ये इकाइयाँ सीधे जुड़ी हैं।',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'कोई सीधा लिंक नहीं — केवल साझा कनेक्शन के माध्यम से जुड़े हैं।',
|
||||
'entityAssociations.sharedLabel': '{shared} साझा',
|
||||
'entityAssociations.pairTitle': '{jaccard}% समान · {shared}/{union} कनेक्शन साझा',
|
||||
'entityAssociations.truncated': '{shown}/{total} दिखा रहे हैं — सबसे मजबूत पहले।',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'ज्ञान ताज़गी',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'जिन तथ्यों की सहायक ने हाल ही में पुनः पुष्टि नहीं की है, वे भूलने की वक्र के अनुसार क्षीण होते हैं। यह दिखाता है कि क्या पुराना हो रहा है और पुनः जाँच योग्य है, ताकि पुराने तथ्यों को अभी भी निश्चित न माना जाए।',
|
||||
'memoryFreshness.loading': 'ताज़गी स्कोर कर रहे हैं…',
|
||||
'memoryFreshness.errorPrefix': 'ग्राफ़ लोड नहीं हो सका:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'अभी तक कोई ज्ञान ग्राफ़ नहीं।',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'जब सहायक आपके बारे में तथ्य दर्ज करेगा, तो उनकी ताज़गी यहाँ ट्रैक की जाएगी।',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'सभी नेमस्पेस',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': '{total} तथ्यों में औसत रिकॉल {recall}%',
|
||||
'memoryFreshness.queueHeading': 'पुनः पुष्टि कतार',
|
||||
'memoryFreshness.queueTruncated': '{shown}/{total} दिखा रहे हैं — पहले इन्हें संबोधित करें।',
|
||||
'memoryFreshness.allFresh': 'सभी तथ्य अभी भी ताज़े हैं — पुनः पुष्टि की आवश्यकता नहीं।',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} दिन पुराना',
|
||||
'memoryFreshness.recallTitle': '{recall}% रिकॉल · अर्ध-जीवन {halfLife} दिन',
|
||||
'memory.tab.path': 'पथ',
|
||||
'connectionPath.title': 'कनेक्शन पथ',
|
||||
'connectionPath.intro':
|
||||
@@ -1844,7 +1843,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'माइक्रोफ़ोन किसी अन्य एप्लिकेशन द्वारा उपयोग में है।',
|
||||
'mic.error': 'माइक्रोफ़ोन त्रुटि',
|
||||
'mic.transcribing': 'ट्रांसक्राइब हो रहा है...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'पुनः प्रयास कर रहे हैं… ({attempt}/{max})',
|
||||
'mic.tapToSend': 'भेजने के लिए टैप करें',
|
||||
'mic.waitingForAgent': 'एजेंट का इंतज़ार है...',
|
||||
'mic.tapAndSpeak': 'टैप करें और बोलें',
|
||||
@@ -3831,9 +3830,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR सेट है — सेटिंग्स से संपादित करने के लिए env चर हटाएँ।',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'OPENHUMAN_ACTION_DIR द्वारा ओवरराइड किया गया — सेटिंग्स से प्रबंधित करने के लिए env चर हटाएँ।',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'अनुमोदन इतिहास',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'एजेंट द्वारा अनुरोधित पिछले स्वीकृति/अस्वीकृति निर्णयों की समीक्षा करें।',
|
||||
'settings.agentAccess.viewApprovalHistory': 'अनुमोदन इतिहास देखें',
|
||||
'settings.sandbox.title': 'Sandbox निष्पादन',
|
||||
'settings.sandbox.menuDesc': 'एजेंट टूल आइसोलेशन के लिए Sandbox बैकएंड कॉन्फ़िगर करें।',
|
||||
@@ -3869,16 +3868,16 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'पर्यावरण पासथ्रू',
|
||||
'settings.sandbox.envPassthroughDesc': 'Sandbox में अग्रेषित पर्यावरण चर।',
|
||||
'settings.sandbox.noEnvVars': 'कोई पर्यावरण चर कॉन्फ़िगर नहीं किए गए।',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'अनुमोदन इतिहास',
|
||||
'settings.approvalHistory.subtitle': 'हाल के टूल-अनुमोदन निर्णय, नवीनतम पहले।',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': 'अनुमोदन इतिहास लोड हो रहा है…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': 'अभी तक कोई अनुमोदन निर्णय दर्ज नहीं हुआ।',
|
||||
'settings.approvalHistory.errorGeneric': 'अनुमोदन इतिहास लोड नहीं हो सका। पुनः प्रयास करें।',
|
||||
'settings.approvalHistory.decidedAt': '{date} को निर्णय लिया गया',
|
||||
'settings.approvalHistory.decision.approveOnce': 'एक बार स्वीकृत',
|
||||
'settings.approvalHistory.decision.approveAlways': 'हमेशा अनुमति',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'दिखावट',
|
||||
'settings.appearance.themeHeading': 'थीम',
|
||||
@@ -4555,49 +4554,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'एजेंट बनाना',
|
||||
'settings.agents.editor.saving': 'बचत',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'वर्कफ़्लो',
|
||||
'workflows.subtitle':
|
||||
'पुन: प्रयोज्य, चलाने योग्य प्रक्रियाएँ — एक लक्ष्य और उसे प्राप्त करने के चरण। एक बनाएँ, URL से इंस्टॉल करें, या चलाने के लिए वर्कफ़्लो खोलें।',
|
||||
'workflows.createNew': 'नया वर्कफ़्लो',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'वर्कफ़्लो हटाएँ',
|
||||
'workflows.deleteError': 'वर्कफ़्लो हटाने में विफल',
|
||||
'workflows.warnings': '{count} चेतावनी',
|
||||
'workflows.empty.title': 'अभी तक कोई वर्कफ़्लो नहीं',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'कार्य जीवनचक्र चरणों के लिए नियम और स्क्रिप्ट परिभाषित करने हेतु वर्कफ़्लो बनाएँ।',
|
||||
'workflows.create.title': 'नया वर्कफ़्लो',
|
||||
'workflows.create.subtitle': 'एजेंट के लिए जीवनचक्र-बद्ध नियम सेट परिभाषित करें।',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'उदा. Python प्रोजेक्ट वर्कफ़्लो',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'यह वर्कफ़्लो क्या करता है?',
|
||||
'workflows.create.whenToUse': 'कब उपयोग करें',
|
||||
'workflows.create.whenToUsePlaceholder': 'एजेंट को यह वर्कफ़्लो कब उठाना चाहिए?',
|
||||
'workflows.create.optional': '(वैकल्पिक)',
|
||||
'workflows.create.createBtn': 'वर्कफ़्लो बनाएँ',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'वर्कफ़्लो नहीं बन सका',
|
||||
'workflows.create.successTitle': 'वर्कफ़्लो बनाया गया',
|
||||
'workflows.create.successMessage': 'सफलतापूर्वक बनाया गया।',
|
||||
'workflows.deleteConfirm.title': 'वर्कफ़्लो हटाएँ',
|
||||
'workflows.deleteConfirm.body': '"{name}" हटाएँ? यह पूर्ववत नहीं किया जा सकता।',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'कोई चरण परिभाषित नहीं।',
|
||||
'workflows.detail.loadError': 'पूर्ण वर्कफ़्लो लोड करने में विफल',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'कोई नियम नहीं।',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'कोई स्क्रिप्ट नहीं।',
|
||||
'workflows.phase.toolScope': 'टूल स्कोप',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'वर्कफ़्लो डिफ़ॉल्ट से विरासत में मिला।',
|
||||
'workflows.phase.toolScope.empty': 'कोई टूल प्रतिबंध नहीं।',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'कोई संदर्भ प्रदाता नहीं।',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'अपने एजेंट, उनकी स्वायत्तता और इस कंप्यूटर पर वे क्या एक्सेस कर सकते हैं, यह प्रबंधित करें।',
|
||||
@@ -4696,51 +4696,51 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'चैट',
|
||||
'intelligence.agents.tier.reasoning': 'तर्क',
|
||||
'intelligence.agents.tier.worker': 'वर्कर',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'मॉडल परिषद',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'एक प्रश्न पूछें, कई मॉडलों से समानांतर में स्वतंत्र उत्तर प्राप्त करें, फिर अध्यक्ष मॉडल संश्लेषित करता है कि वे कहाँ सहमत हैं, कहाँ असहमत हैं, और प्रत्येक क्या अद्वितीय जोड़ता है।',
|
||||
'modelCouncil.listTitle': 'काउंसिल',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'सहेजी गई परिषद चुनें, उसके एजेंट और न्यायाधीश संपादित करें, या किसी विशिष्ट निर्णय के लिए नई परिषद बनाएँ।',
|
||||
'modelCouncil.addCouncil': 'नई परिषद',
|
||||
'modelCouncil.openCouncil': 'परिषद खोलें',
|
||||
'modelCouncil.editCouncil': 'परिषद संपादित करें',
|
||||
'modelCouncil.editCurrentCouncil': 'वर्तमान परिषद संपादित करें',
|
||||
'modelCouncil.editCouncilAria': '{name} संपादित करें',
|
||||
'modelCouncil.deleteCouncilAria': '{name} हटाएँ',
|
||||
'modelCouncil.backToCouncils': 'परिषदों पर वापस जाएँ',
|
||||
'modelCouncil.saveCouncil': 'परिषद सहेजें',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'परिषदें लोड हो रही हैं…',
|
||||
'modelCouncil.noCouncils': 'अभी तक कोई परिषद नहीं। शुरू करने के लिए एक जोड़ें।',
|
||||
'modelCouncil.noCouncilDescription': 'कोई विवरण नहीं',
|
||||
'modelCouncil.registryErrorPrefix': 'परिषद रजिस्ट्री विफल:',
|
||||
'modelCouncil.councilNameLabel': 'परिषद का नाम',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'इस परिषद का उपयोग कब करें',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp': 'रूटिंग संकेत चुनें या सटीक प्रदाता मॉडल पिन करें।',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'प्रदाता + मॉडल',
|
||||
'modelCouncil.modelProviderLabel': 'मॉडल प्रदाता',
|
||||
'modelCouncil.modelIdLabel': 'मॉडल आईडी',
|
||||
'modelCouncil.useProviderModel': 'प्रदाता मॉडल का उपयोग करें',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'परिषद से प्रश्न पूछें…',
|
||||
'modelCouncil.membersLabel': 'सदस्य मॉडल',
|
||||
'modelCouncil.maxMembersNote': 'अधिकतम {max}',
|
||||
'modelCouncil.memberPlaceholder': 'उदा. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'सदस्य मॉडल {n}',
|
||||
'modelCouncil.removeMemberAria': 'सदस्य मॉडल {n} हटाएँ',
|
||||
'modelCouncil.addMember': '+ मॉडल जोड़ें',
|
||||
'modelCouncil.settingsTitle': 'काउंसिल सेटिंग्स',
|
||||
'modelCouncil.settingsSummary': '{count} जूरी · जज: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'जूरी संख्या',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'बहस के दौर',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'न्यायाधीश द्वारा अंतिम संश्लेषण लिखने से पहले प्रत्येक जूरी कई दौरों में बहस करता है।',
|
||||
'modelCouncil.judgeAgentLabel': 'जज एजेंट',
|
||||
'modelCouncil.defaultJudge': 'डिफ़ॉल्ट जज',
|
||||
'modelCouncil.savedProfile': 'सहेजी गई प्रोफ़ाइल',
|
||||
@@ -4769,52 +4769,52 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'जज के संश्लेषण से पहले काउंसिल इस साझा ड्राफ़्ट पर काम करती है।',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'प्रत्येक दौर के बाद जूरी अपडेट यहाँ जोड़े जाते हैं, फिर अगले दौर में प्रयुक्त होते हैं।',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'दौर {round} अपडेट',
|
||||
'modelCouncil.scratchpadNoResponse': 'कोई प्रतिक्रिया नहीं',
|
||||
'modelCouncil.chairLabel': 'अध्यक्ष मॉडल',
|
||||
'modelCouncil.chairPlaceholder': 'उदा. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'अध्यक्ष हर सदस्य का उत्तर पढ़ता है और संश्लेषण लिखता है।',
|
||||
'modelCouncil.run': 'परिषद बुलाएँ',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'सदस्यों से समानांतर में पूछताछ कर रहे हैं, फिर संश्लेषण…',
|
||||
'modelCouncil.deliberationHeading': 'परिषद विचार-विमर्श',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'मैस्कॉट दिखाते हैं कि साझा तर्क फ़ाइल उपयोग में होने पर प्रत्येक एजेंट सोच रहा है।',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'अन्य जूरी सदस्यों को जवाब दें। असहमतियाँ बनाए रखें, जब उचित हो तो अपना दृष्टिकोण संशोधित करें, और अपना वर्तमान निष्कर्ष स्पष्ट रखें।',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'यह आपका अंतिम जूरी दौर है। जहाँ साक्ष्य समर्थन करता है वहाँ सहमत हों, शेष असहमति बताएँ, और न्यायाधीश को स्पष्ट निष्कर्ष दें।',
|
||||
'modelCouncil.roundLabel': 'दौर {round}',
|
||||
'modelCouncil.currentRoundThinking': 'अगला दौर जारी रख रहे हैं…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'इस दृष्टिकोण से काम कर रहे हैं: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'साक्ष्य, धारणाओं और साझा तर्क फ़ाइल में पहले से मौजूद सामग्री की जाँच कर रहे हैं।',
|
||||
'modelCouncil.thought.plan': 'व्यावहारिक मार्ग और संभावित बाधाओं की रूपरेखा बना रहे हैं।',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'विफलता पैटर्न, लापता संदर्भ और कमज़ोर निष्कर्षों की तलाश कर रहे हैं।',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'न्यायाधीश को संक्षिप्त स्थिति देने से पहले समझौतों की तुलना कर रहे हैं।',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'एक विशिष्ट दृष्टिकोण तैयार कर रहे हैं ताकि न्यायाधीश वास्तविक असहमति की तुलना कर सके।',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'जूरी के उत्तरों की प्रतीक्षा कर रहे हैं, फिर संश्लेषण के लिए साझा तर्क फ़ाइल पढ़ेंगे।',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'जूरी की लाइव विचारधारा पढ़ रहे हैं और अंतिम परिषद संश्लेषण लिख रहे हैं।',
|
||||
'modelCouncil.errorPrefix': 'परिषद विफल:',
|
||||
'modelCouncil.resultsHeading': 'परिषद परिणाम',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': '{model} द्वारा',
|
||||
'modelCouncil.usageHeading': 'बहस उपयोग',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'बहस प्रॉम्प्ट और प्रतिक्रियाओं से अनुमानित टोकन गणना। वास्तविक मूल्य निर्धारण के लिए परिषद RPC से प्रदाता उपयोग आवश्यक है।',
|
||||
'modelCouncil.usageEstimatedBadge': 'अनुमानित टोकन',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+141
-140
@@ -293,7 +293,7 @@ const messages: TranslationMap = {
|
||||
'Telusuri dan jalankan agen yang tersedia — masing-masing dengan alat, kemampuan, dan area fokusnya sendiri.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Prosedur yang dapat digunakan ulang dan dijalankan — sebuah tujuan beserta langkah-langkah untuk mencapainya. Buat satu, instal dari URL, atau buka alur kerja untuk menjalankannya.',
|
||||
'memory.tab.dreams': 'Mimpi',
|
||||
'memory.tab.calls': 'Panggilan',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -302,24 +302,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Pengaturan',
|
||||
'memory.analyzeNow': 'Analisis Sekarang',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Lini Masa Memori',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'Kapan asisten mempelajari tentang Anda — fakta dikelompokkan berdasarkan bulan terakhir diperkuat. Menunjukkan pertumbuhan, lonjakan aktivitas, dan periode tenang.',
|
||||
'memoryTimeline.loading': 'Membangun lini masa…',
|
||||
'memoryTimeline.errorPrefix': 'Tidak dapat memuat graf:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.namespaceAll': 'Semua namespace',
|
||||
'memoryTimeline.empty': 'Belum ada graf pengetahuan.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'Ketika asisten mencatat fakta tentang Anda, lini masanya akan muncul di sini.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Bulan aktif',
|
||||
'memoryTimeline.metricRecent': '30 hari terakhir',
|
||||
'memoryTimeline.heading': 'Fakta yang dipelajari per bulan',
|
||||
'memoryTimeline.busiestCaption': 'Paling aktif: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fakta tanpa tanggal tercatat.',
|
||||
'memoryTimeline.truncated': 'Menampilkan {shown} terbaru dari {total} bulan.',
|
||||
'namespaceOverview.title': 'Ikhtisar Namespace',
|
||||
'namespaceOverview.intro':
|
||||
'Bagaimana pengetahuan Anda terdistribusi di seluruh konteks — jumlah fakta dan entitas berbeda yang tercatat di setiap namespace.',
|
||||
@@ -365,51 +365,51 @@ const messages: TranslationMap = {
|
||||
'Konektor - lebih berpengaruh daripada jumlah link yang menunjukkan',
|
||||
'graphCentrality.degreeTitle': '{in} keluar',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Asosiasi Entitas',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Entitas yang berbagi banyak koneksi yang sama berasosiasi — meskipun tidak ada satu fakta pun yang menghubungkan mereka secara langsung. Kesamaan Jaccard mengungkap pasangan tersembunyi ini.',
|
||||
'entityAssociations.loading': 'Menghitung asosiasi…',
|
||||
'entityAssociations.errorPrefix': 'Tidak dapat memuat graf:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Belum ada asosiasi.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Ketika entitas mulai berbagi koneksi, pasangan terkuat akan muncul di sini.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Semua namespace',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Asosiasi terkuat',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'Entitas-entitas ini terhubung langsung.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Tidak ada tautan langsung — terkait hanya melalui koneksi bersama.',
|
||||
'entityAssociations.sharedLabel': '{shared} bersama',
|
||||
'entityAssociations.pairTitle': '{jaccard}% mirip · {shared} dari {union} koneksi bersama',
|
||||
'entityAssociations.truncated': 'Menampilkan {shown} dari {total} — terkuat lebih dulu.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Kesegaran Pengetahuan',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'Fakta yang belum dikonfirmasi ulang oleh asisten baru-baru ini akan memudar mengikuti kurva lupa. Ini menunjukkan apa yang menjadi usang dan perlu diperiksa ulang, agar fakta lama tidak dianggap masih pasti.',
|
||||
'memoryFreshness.loading': 'Menghitung kesegaran…',
|
||||
'memoryFreshness.errorPrefix': 'Tidak dapat memuat graf:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Belum ada graf pengetahuan.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'Ketika asisten mencatat fakta tentang Anda, kesegarannya akan dilacak di sini.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Semua namespace',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Rata-rata recall {recall}% dari {total} fakta',
|
||||
'memoryFreshness.queueHeading': 'Antrean konfirmasi ulang',
|
||||
'memoryFreshness.queueTruncated': 'Menampilkan {shown} dari {total} — tangani ini lebih dulu.',
|
||||
'memoryFreshness.allFresh': 'Semua fakta masih segar — tidak perlu dikonfirmasi ulang.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} hari lalu',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · waktu paruh {halfLife} hari',
|
||||
'memory.tab.path': 'Jalur',
|
||||
'connectionPath.title': 'Jalur Koneksi',
|
||||
'connectionPath.intro':
|
||||
@@ -1846,7 +1846,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'Mikrofon sedang digunakan oleh aplikasi lain.',
|
||||
'mic.error': 'Kesalahan mikrofon',
|
||||
'mic.transcribing': 'Mentranskripsi...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Mencoba ulang… ({attempt} dari {max})',
|
||||
'mic.tapToSend': 'Ketuk untuk mengirim',
|
||||
'mic.waitingForAgent': 'Menunggu agen...',
|
||||
'mic.tapAndSpeak': 'Ketuk dan bicara',
|
||||
@@ -3838,9 +3838,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR sudah diatur — hapus variabel env untuk mengedit ini dari Pengaturan.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'Ditimpa oleh OPENHUMAN_ACTION_DIR — hapus variabel env untuk mengelola dari Pengaturan.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Riwayat persetujuan',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'Tinjau keputusan Setuju / Tolak yang diminta oleh agen sebelumnya.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'Lihat riwayat persetujuan',
|
||||
'settings.sandbox.title': 'Eksekusi sandbox',
|
||||
'settings.sandbox.menuDesc': 'Konfigurasikan backend sandbox untuk isolasi alat agen.',
|
||||
@@ -3876,16 +3876,16 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'Terusan variabel lingkungan',
|
||||
'settings.sandbox.envPassthroughDesc': 'Variabel lingkungan yang diteruskan ke dalam sandbox.',
|
||||
'settings.sandbox.noEnvVars': 'Tidak ada variabel lingkungan yang dikonfigurasi.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.title': 'Riwayat persetujuan',
|
||||
'settings.approvalHistory.subtitle': 'Keputusan persetujuan alat terbaru, terbaru lebih dulu.',
|
||||
'settings.approvalHistory.refresh': 'Segarkan',
|
||||
'settings.approvalHistory.loading': 'Memuat riwayat persetujuan…',
|
||||
'settings.approvalHistory.retry': 'Coba lagi',
|
||||
'settings.approvalHistory.emptyState': 'Belum ada keputusan persetujuan yang tercatat.',
|
||||
'settings.approvalHistory.errorGeneric': 'Tidak dapat memuat riwayat persetujuan. Coba lagi.',
|
||||
'settings.approvalHistory.decidedAt': 'Diputuskan {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Disetujui sekali',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Selalu diizinkan',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Tampilan',
|
||||
'settings.appearance.themeHeading': 'Tema',
|
||||
@@ -4562,49 +4562,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Buat agen',
|
||||
'settings.agents.editor.saving': 'Menyimpan...',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Alur Kerja',
|
||||
'workflows.subtitle':
|
||||
'Prosedur yang dapat digunakan ulang dan dijalankan — sebuah tujuan beserta langkah-langkah untuk mencapainya. Buat satu, instal dari URL, atau buka alur kerja untuk menjalankannya.',
|
||||
'workflows.createNew': 'Alur kerja baru',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Hapus Alur Kerja',
|
||||
'workflows.deleteError': 'Gagal menghapus alur kerja',
|
||||
'workflows.warnings': '{count} peringatan',
|
||||
'workflows.empty.title': 'Belum ada alur kerja',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Buat alur kerja untuk menentukan aturan dan skrip untuk fase siklus hidup tugas.',
|
||||
'workflows.create.title': 'Alur Kerja Baru',
|
||||
'workflows.create.subtitle': 'Tentukan kumpulan aturan terikat siklus hidup untuk agen.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'mis. Alur kerja proyek Python',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'Apa yang dilakukan alur kerja ini?',
|
||||
'workflows.create.whenToUse': 'Kapan digunakan',
|
||||
'workflows.create.whenToUsePlaceholder': 'Kapan agen harus menggunakan alur kerja ini?',
|
||||
'workflows.create.optional': '(opsional)',
|
||||
'workflows.create.createBtn': 'Buat alur kerja',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Tidak dapat membuat alur kerja',
|
||||
'workflows.create.successTitle': 'Alur kerja dibuat',
|
||||
'workflows.create.successMessage': 'berhasil dibuat.',
|
||||
'workflows.deleteConfirm.title': 'Hapus alur kerja',
|
||||
'workflows.deleteConfirm.body': 'Hapus "{name}"? Tindakan ini tidak dapat dibatalkan.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Tidak ada fase yang ditentukan.',
|
||||
'workflows.detail.loadError': 'Gagal memuat alur kerja lengkap',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Tidak ada aturan.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Tidak ada skrip.',
|
||||
'workflows.phase.toolScope': 'Cakupan alat',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Diwarisi dari pengaturan default alur kerja.',
|
||||
'workflows.phase.toolScope.empty': 'Tidak ada batasan alat.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Tidak ada penyedia konteks.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Kelola agen Anda, otonomi mereka, dan apa yang dapat mereka akses di komputer ini.',
|
||||
@@ -4704,51 +4705,51 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Chat',
|
||||
'intelligence.agents.tier.reasoning': 'Penalaran',
|
||||
'intelligence.agents.tier.worker': 'Pekerja',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Dewan Model',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'Ajukan satu pertanyaan, dapatkan jawaban independen dari beberapa model secara paralel, lalu model ketua mensintesis di mana mereka sepakat, tidak sepakat, dan apa yang ditambahkan masing-masing secara unik.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'Pilih dewan tersimpan, edit agen dan hakimnya, atau buat dewan baru untuk jenis keputusan tertentu.',
|
||||
'modelCouncil.addCouncil': 'Dewan baru',
|
||||
'modelCouncil.openCouncil': 'Buka dewan',
|
||||
'modelCouncil.editCouncil': 'Edit dewan',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit dewan saat ini',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'modelCouncil.deleteCouncilAria': 'Hapus {name}',
|
||||
'modelCouncil.backToCouncils': 'Kembali ke daftar dewan',
|
||||
'modelCouncil.saveCouncil': 'Simpan dewan',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Memuat dewan…',
|
||||
'modelCouncil.noCouncils': 'Belum ada dewan. Tambahkan satu untuk memulai.',
|
||||
'modelCouncil.noCouncilDescription': 'Tanpa deskripsi',
|
||||
'modelCouncil.registryErrorPrefix': 'Registri dewan gagal:',
|
||||
'modelCouncil.councilNameLabel': 'Nama dewan',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Kapan menggunakan dewan ini',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp': 'Pilih petunjuk routing atau pin model penyedia yang tepat.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Penyedia + model',
|
||||
'modelCouncil.modelProviderLabel': 'Penyedia model',
|
||||
'modelCouncil.modelIdLabel': 'ID model',
|
||||
'modelCouncil.useProviderModel': 'Gunakan model penyedia',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Ajukan pertanyaan ke dewan…',
|
||||
'modelCouncil.membersLabel': 'Model anggota',
|
||||
'modelCouncil.maxMembersNote': 'hingga {max}',
|
||||
'modelCouncil.memberPlaceholder': 'mis. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Model anggota {n}',
|
||||
'modelCouncil.removeMemberAria': 'Hapus model anggota {n}',
|
||||
'modelCouncil.addMember': '+ Tambah model',
|
||||
'modelCouncil.settingsTitle': 'Pengaturan dewan',
|
||||
'modelCouncil.settingsSummary': '{count} juri · hakim: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Jumlah juri',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Putaran debat',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Setiap juri terus berdebat lintas putaran sebelum hakim menulis sintesis akhir.',
|
||||
'modelCouncil.judgeAgentLabel': 'Agen hakim',
|
||||
'modelCouncil.defaultJudge': 'Hakim default',
|
||||
'modelCouncil.savedProfile': 'Profil tersimpan',
|
||||
@@ -4777,52 +4778,52 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'Dewan bekerja pada draf bersama ini sebelum hakim menulis sintesis.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Pembaruan juri ditambahkan di sini setelah setiap putaran, lalu dimasukkan ke putaran berikutnya.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Pembaruan putaran {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Tidak ada respons',
|
||||
'modelCouncil.chairLabel': 'Model ketua',
|
||||
'modelCouncil.chairPlaceholder': 'mis. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'Ketua membaca setiap jawaban anggota dan menulis sintesis.',
|
||||
'modelCouncil.run': 'Kumpulkan dewan',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Menanyai anggota secara paralel, lalu mensintesis…',
|
||||
'modelCouncil.deliberationHeading': 'Deliberasi dewan',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Maskot menunjukkan setiap agen sedang berpikir saat file penalaran bersama sedang digunakan.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Tanggapi juri lainnya. Pertahankan ketidaksepakatan, revisi pandangan Anda jika beralasan, dan tetap eksplisitkan kesimpulan Anda saat ini.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'Ini adalah putaran juri terakhir Anda. Konvergensi di mana bukti mendukung, sebutkan ketidaksepakatan yang tersisa, dan berikan hakim kesimpulan yang jelas.',
|
||||
'modelCouncil.roundLabel': 'Putaran {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Melanjutkan putaran berikutnya…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Bekerja dari perspektif ini: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'Memeriksa bukti, asumsi, dan apa yang sudah tercatat dalam file penalaran bersama.',
|
||||
'modelCouncil.thought.plan': 'Merancang jalur praktis dan di mana eksekusi bisa terhambat.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Mencari modus kegagalan, konteks yang hilang, dan kesimpulan yang rapuh.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Membandingkan pertukaran sebelum memberikan hakim posisi yang ringkas.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'Menyiapkan pandangan berbeda agar hakim dapat membandingkan ketidaksepakatan nyata.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'Menunggu jawaban juri, lalu membaca file penalaran bersama untuk sintesis.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Membaca pemikiran langsung juri dan menulis sintesis akhir dewan.',
|
||||
'modelCouncil.errorPrefix': 'Dewan gagal:',
|
||||
'modelCouncil.resultsHeading': 'Hasil dewan',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'oleh {model}',
|
||||
'modelCouncil.usageHeading': 'Penggunaan debat',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Perkiraan jumlah token dari prompt dan respons debat. Harga sebenarnya memerlukan penggunaan penyedia dari RPC dewan.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimasi token',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+146
-140
@@ -298,7 +298,7 @@ const messages: TranslationMap = {
|
||||
'Sfoglia e avvia gli agenti disponibili — ognuno con i propri strumenti, capacità e area di specializzazione.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Procedure riutilizzabili ed eseguibili — un obiettivo e i passaggi per raggiungerlo. Creane uno, installa da un URL o apri un workflow per eseguirlo.',
|
||||
'memory.tab.dreams': 'Sogni',
|
||||
'memory.tab.calls': 'Chiamate',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -307,24 +307,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Impostazioni',
|
||||
'memory.analyzeNow': 'Analizza ora',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Cronologia della memoria',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
"Quando l'assistente ha appreso su di te — fatti raggruppati per il mese dell'ultimo rinforzo. Mostra crescita, picchi di attività e periodi tranquilli.",
|
||||
'memoryTimeline.loading': 'Costruzione della cronologia…',
|
||||
'memoryTimeline.errorPrefix': 'Impossibile caricare il grafo:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.namespaceAll': 'Tutti i namespace',
|
||||
'memoryTimeline.empty': 'Nessun grafo della conoscenza ancora.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
"Quando l'assistente registrerà fatti su di te, la cronologia apparirà qui.",
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Mesi attivi',
|
||||
'memoryTimeline.metricRecent': 'Ultimi 30 giorni',
|
||||
'memoryTimeline.heading': 'Fatti appresi per mese',
|
||||
'memoryTimeline.busiestCaption': 'Più attivo: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fatto/i senza data registrata.',
|
||||
'memoryTimeline.truncated': 'Visualizzazione dei {shown} più recenti su {total} mesi.',
|
||||
'namespaceOverview.title': 'Panoramica degli spazi dei nomi',
|
||||
'namespaceOverview.intro':
|
||||
'Come la tua conoscenza è distribuita tra i contesti — il numero di fatti ed entità distinte registrate in ogni spazio dei nomi.',
|
||||
@@ -371,51 +371,52 @@ const messages: TranslationMap = {
|
||||
'Connettore — più influente di quanto suggerisca il suo numero di collegamenti',
|
||||
'graphCentrality.degreeTitle': '{in} in entrata · {out} in uscita',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Associazioni di entità',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Le entità che condividono molte delle stesse connessioni sono associate — anche quando nessun singolo fatto le collega direttamente. La similarità di Jaccard rivela questi abbinamenti nascosti.',
|
||||
'entityAssociations.loading': 'Calcolo delle associazioni…',
|
||||
'entityAssociations.errorPrefix': 'Impossibile caricare il grafo:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Nessuna associazione ancora.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Quando le entità inizieranno a condividere connessioni, gli abbinamenti più forti appariranno qui.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Tutti i namespace',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Associazioni più forti',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'Queste entità sono direttamente collegate.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Nessun collegamento diretto — associate solo tramite connessioni condivise.',
|
||||
'entityAssociations.sharedLabel': '{shared} condivise',
|
||||
'entityAssociations.pairTitle': '{jaccard}% simili · {shared} di {union} connessioni condivise',
|
||||
'entityAssociations.truncated': 'Visualizzazione di {shown} su {total} — le più forti per prime.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Freschezza della conoscenza',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
"I fatti che l'assistente non ha riconfermato di recente decadono lungo una curva dell'oblio. Questo mostra cosa sta diventando obsoleto e merita una nuova verifica, affinché i vecchi fatti non vengano trattati come ancora certi.",
|
||||
'memoryFreshness.loading': 'Calcolo della freschezza…',
|
||||
'memoryFreshness.errorPrefix': 'Impossibile caricare il grafo:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Nessun grafo della conoscenza ancora.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
"Quando l'assistente registrerà fatti su di te, la loro freschezza sarà monitorata qui.",
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Tutti i namespace',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Richiamo medio {recall}% su {total} fatti',
|
||||
'memoryFreshness.queueHeading': 'Coda di riconferma',
|
||||
'memoryFreshness.queueTruncated':
|
||||
'Visualizzazione di {shown} su {total} — affronta questi per primi.',
|
||||
'memoryFreshness.allFresh': 'Tutti i fatti sono ancora freschi — nulla da riconfermare.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} giorni fa',
|
||||
'memoryFreshness.recallTitle': '{recall}% richiamo · emivita {halfLife} giorni',
|
||||
'memory.tab.path': 'Percorsi',
|
||||
'connectionPath.title': 'Percorso di connessione',
|
||||
'connectionPath.intro':
|
||||
@@ -1874,7 +1875,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': "Il microfono è in uso da un'altra applicazione.",
|
||||
'mic.error': 'Errore del microfono',
|
||||
'mic.transcribing': 'Trascrizione...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Nuovo tentativo… ({attempt} di {max})',
|
||||
'mic.tapToSend': 'Tocca per inviare',
|
||||
'mic.waitingForAgent': "In attesa dell'agente...",
|
||||
'mic.tapAndSpeak': 'Tocca e parla',
|
||||
@@ -3889,9 +3890,9 @@ const messages: TranslationMap = {
|
||||
"OPENHUMAN_ACTION_DIR è impostata — rimuovi la variabile d'ambiente per modificarla dalle Impostazioni.",
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
"Sovrascritta da OPENHUMAN_ACTION_DIR — rimuovi la variabile d'ambiente per gestirla dalle Impostazioni.",
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Cronologia approvazioni',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
"Rivedi le decisioni Approva / Nega precedenti richieste dall'agente.",
|
||||
'settings.agentAccess.viewApprovalHistory': 'Visualizza cronologia approvazioni',
|
||||
'settings.sandbox.title': 'Esecuzione in sandbox',
|
||||
'settings.sandbox.menuDesc':
|
||||
@@ -3928,16 +3929,18 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': "Passthrough variabili d'ambiente",
|
||||
'settings.sandbox.envPassthroughDesc': "Variabili d'ambiente inoltrate nella sandbox.",
|
||||
'settings.sandbox.noEnvVars': "Nessuna variabile d'ambiente configurata.",
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'Cronologia approvazioni',
|
||||
'settings.approvalHistory.subtitle':
|
||||
'Decisioni recenti di approvazione degli strumenti, le più recenti per prime.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': 'Caricamento cronologia approvazioni…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': 'Nessuna decisione di approvazione registrata.',
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
'Impossibile caricare la cronologia delle approvazioni. Riprova.',
|
||||
'settings.approvalHistory.decidedAt': 'Deciso il {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approvato una volta',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Sempre consentito',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Aspetto',
|
||||
'settings.appearance.themeHeading': 'Tema',
|
||||
@@ -4629,49 +4632,51 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Crea agente',
|
||||
'settings.agents.editor.saving': 'Salvataggio…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Workflow',
|
||||
'workflows.subtitle':
|
||||
'Procedure riutilizzabili ed eseguibili — un obiettivo e i passaggi per raggiungerlo. Creane uno, installa da un URL o apri un workflow per eseguirlo.',
|
||||
'workflows.createNew': 'Nuovo workflow',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Elimina Workflow',
|
||||
'workflows.deleteError': 'Eliminazione del workflow fallita',
|
||||
'workflows.warnings': '{count} avviso/i',
|
||||
'workflows.empty.title': 'Nessun workflow ancora',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Crea un workflow per definire regole e script per le fasi del ciclo di vita delle attività.',
|
||||
'workflows.create.title': 'Nuovo Workflow',
|
||||
'workflows.create.subtitle':
|
||||
"Definisci un insieme di regole legate al ciclo di vita dell'agente.",
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'es. Workflow progetto Python',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'Cosa fa questo workflow?',
|
||||
'workflows.create.whenToUse': 'Quando usare',
|
||||
'workflows.create.whenToUsePlaceholder': "Quando l'agente dovrebbe utilizzare questo workflow?",
|
||||
'workflows.create.optional': '(facoltativo)',
|
||||
'workflows.create.createBtn': 'Crea workflow',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Impossibile creare il workflow',
|
||||
'workflows.create.successTitle': 'Workflow creato',
|
||||
'workflows.create.successMessage': 'è stato creato con successo.',
|
||||
'workflows.deleteConfirm.title': 'Elimina workflow',
|
||||
'workflows.deleteConfirm.body': 'Rimuovere "{name}"? Questa azione non può essere annullata.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Nessuna fase definita.',
|
||||
'workflows.detail.loadError': 'Caricamento completo del workflow fallito',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Nessuna regola.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Nessuno script.',
|
||||
'workflows.phase.toolScope': 'Ambito degli strumenti',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Ereditato dalle impostazioni predefinite del workflow.',
|
||||
'workflows.phase.toolScope.empty': 'Nessuna restrizione sugli strumenti.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Nessun fornitore di contesto.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Gestisci i tuoi agenti, la loro autonomia e a cosa possono accedere su questo computer.',
|
||||
@@ -4741,7 +4746,7 @@ const messages: TranslationMap = {
|
||||
'chat.files.error.resolve_failed': 'Impossibile risolvere l’artefatto. Riprova.',
|
||||
'chat.files.error.download_failed': 'Download non riuscito. Riprova.',
|
||||
'chat.files.error.delete_failed': 'Impossibile eliminare il file. Riprova.',
|
||||
'autocomplete.debounceMs': 'Debounce (ms)',
|
||||
'autocomplete.debounceMs': 'Ritardo (ms)',
|
||||
'autocomplete.maxChars': 'Caratteri massimi di contesto',
|
||||
'autocomplete.overlayTtlMs': 'Timeout overlay (ms)',
|
||||
'memory.tab.council': 'Council',
|
||||
@@ -4772,51 +4777,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Chat',
|
||||
'intelligence.agents.tier.reasoning': 'Ragionamento',
|
||||
'intelligence.agents.tier.worker': 'Worker',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Consiglio dei modelli',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'Fai una domanda, ottieni risposte indipendenti da più modelli in parallelo, poi il modello presidente sintetizza dove concordano, dove divergono e cosa aggiunge ciascuno di unico.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'Scegli un consiglio salvato, modifica i suoi agenti e il giudice, oppure creane uno nuovo per un tipo specifico di decisione.',
|
||||
'modelCouncil.addCouncil': 'Nuovo consiglio',
|
||||
'modelCouncil.openCouncil': 'Apri consiglio',
|
||||
'modelCouncil.editCouncil': 'Modifica consiglio',
|
||||
'modelCouncil.editCurrentCouncil': 'Modifica consiglio attuale',
|
||||
'modelCouncil.editCouncilAria': 'Modifica {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Elimina {name}',
|
||||
'modelCouncil.backToCouncils': 'Torna ai consigli',
|
||||
'modelCouncil.saveCouncil': 'Salva consiglio',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Caricamento dei consigli…',
|
||||
'modelCouncil.noCouncils': 'Nessun consiglio ancora. Aggiungine uno per iniziare.',
|
||||
'modelCouncil.noCouncilDescription': 'Nessuna descrizione',
|
||||
'modelCouncil.registryErrorPrefix': 'Registro del consiglio fallito:',
|
||||
'modelCouncil.councilNameLabel': 'Nome del consiglio',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Quando usare questo consiglio',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Seleziona un suggerimento di routing o fissa un modello fornitore esatto.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Fornitore + modello',
|
||||
'modelCouncil.modelProviderLabel': 'Fornitore del modello',
|
||||
'modelCouncil.modelIdLabel': 'ID modello',
|
||||
'modelCouncil.useProviderModel': 'Usa modello del fornitore',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Fai una domanda al consiglio…',
|
||||
'modelCouncil.membersLabel': 'Modelli membri',
|
||||
'modelCouncil.maxMembersNote': 'fino a {max}',
|
||||
'modelCouncil.memberPlaceholder': 'es. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Modello membro {n}',
|
||||
'modelCouncil.removeMemberAria': 'Rimuovi modello membro {n}',
|
||||
'modelCouncil.addMember': '+ Aggiungi modello',
|
||||
'modelCouncil.settingsTitle': 'Impostazioni del consiglio',
|
||||
'modelCouncil.settingsSummary': '{count} giurati · giudice: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Numero di giurati',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Turni di dibattito',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Ogni giurato continua a dibattere per più turni prima che il giudice scriva la sintesi finale.',
|
||||
'modelCouncil.judgeAgentLabel': 'Agente giudice',
|
||||
'modelCouncil.defaultJudge': 'Giudice predefinito',
|
||||
'modelCouncil.savedProfile': 'Profilo salvato',
|
||||
@@ -4845,52 +4851,52 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'Il consiglio lavora su questa bozza condivisa prima che il giudice scriva la sintesi.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Gli aggiornamenti dei giurati vengono aggiunti qui dopo ogni turno e alimentano il turno successivo.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Aggiornamenti turno {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Nessuna risposta',
|
||||
'modelCouncil.chairLabel': 'Modello presidente',
|
||||
'modelCouncil.chairPlaceholder': 'es. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'Il presidente legge ogni risposta dei membri e scrive la sintesi.',
|
||||
'modelCouncil.run': 'Convoca consiglio',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Interrogazione dei membri in parallelo, poi sintesi…',
|
||||
'modelCouncil.deliberationHeading': 'Deliberazione del consiglio',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Le mascotte mostrano ogni agente che riflette mentre il file di ragionamento condiviso è in uso.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Rispondi agli altri giurati. Mantieni i disaccordi, rivedi la tua posizione quando giustificato e mantieni esplicita la tua conclusione attuale.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'Questo è il tuo ultimo turno da giurato. Convergi dove le prove lo supportano, segnala i disaccordi rimanenti e fornisci al giudice una conclusione chiara.',
|
||||
'modelCouncil.roundLabel': 'Turno {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Prosecuzione del turno successivo…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Lavoro da questa prospettiva: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'Verifica delle prove, delle ipotesi e di quanto il file di ragionamento condiviso già contiene.',
|
||||
'modelCouncil.thought.plan': 'Delineazione del percorso pratico e dei possibili punti di blocco.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Ricerca di modalità di fallimento, contesto mancante e conclusioni fragili.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Confronto dei compromessi prima di consegnare al giudice una posizione concisa.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'Preparazione di un punto di vista distinto affinché il giudice possa confrontare i veri disaccordi.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'In attesa delle risposte dei giurati, poi lettura del file di ragionamento condiviso per la sintesi.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Lettura dei pensieri in tempo reale dei giurati e stesura della sintesi finale del consiglio.',
|
||||
'modelCouncil.errorPrefix': 'Il consiglio è fallito:',
|
||||
'modelCouncil.resultsHeading': 'Risultati del consiglio',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'di {model}',
|
||||
'modelCouncil.usageHeading': 'Utilizzo del dibattito',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Conteggio stimato dei token da prompt e risposte del dibattito. Il prezzo effettivo richiede i dati di utilizzo del fornitore tramite RPC del consiglio.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Token stimati',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+140
-146
@@ -291,7 +291,7 @@ const messages: TranslationMap = {
|
||||
'사용 가능한 에이전트를 탐색하고 실행하세요 — 각 에이전트는 고유한 도구, 기능 및 전문 분야를 갖추고 있습니다.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'재사용 가능하고 실행 가능한 절차 — 목표와 그에 도달하는 단계. 새로 만들거나, URL에서 설치하거나, 워크플로를 열어 실행하세요.',
|
||||
'memory.tab.dreams': '꿈',
|
||||
'memory.tab.calls': '통화',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -300,24 +300,23 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': '설정',
|
||||
'memory.analyzeNow': '지금 분석',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': '기억 타임라인',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'어시스턴트가 당신에 대해 학습한 시기 — 마지막으로 강화된 월별로 그룹화된 사실. 성장, 활동 급증 및 조용한 기간을 보여줍니다.',
|
||||
'memoryTimeline.loading': '타임라인 구축 중…',
|
||||
'memoryTimeline.errorPrefix': '그래프를 로드할 수 없습니다:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.namespaceAll': '모든 네임스페이스',
|
||||
'memoryTimeline.empty': '아직 지식 그래프가 없습니다.',
|
||||
'memoryTimeline.emptyHint': '어시스턴트가 사실을 기록하면 타임라인이 여기에 표시됩니다.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': '활성 월',
|
||||
'memoryTimeline.metricRecent': '최근 30일',
|
||||
'memoryTimeline.heading': '월별 학습된 사실',
|
||||
'memoryTimeline.busiestCaption': '가장 활발: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count}개 사실에 기록된 날짜가 없습니다.',
|
||||
'memoryTimeline.truncated': '{total}개월 중 가장 최근 {shown}개 표시.',
|
||||
'namespaceOverview.title': '네임스페이스 개요',
|
||||
'namespaceOverview.intro':
|
||||
'컨텍스트 전반에 걸쳐 지식이 어떻게 분포되어 있는지 — 각 네임스페이스에 기록된 사실과 고유 엔터티의 수입니다.',
|
||||
@@ -362,51 +361,49 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': '커넥터 - 링크 수보다 더 큰 영향력을 가진 엔터티',
|
||||
'graphCentrality.degreeTitle': '들어옴 {in} · 나감 {out}',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': '엔티티 연관',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'많은 동일한 연결을 공유하는 엔티티들은 연관됩니다 — 단일 사실이 직접 연결하지 않더라도. Jaccard 유사도가 이러한 숨겨진 연관을 드러냅니다.',
|
||||
'entityAssociations.loading': '연관 계산 중…',
|
||||
'entityAssociations.errorPrefix': '그래프를 로드할 수 없습니다:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': '아직 연관이 없습니다.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'엔티티들이 연결을 공유하기 시작하면 가장 강한 쌍이 여기에 표시됩니다.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': '모든 네임스페이스',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': '가장 강한 연관',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'entityAssociations.linkedTitle': '이 엔티티들은 직접 연결되어 있습니다.',
|
||||
'entityAssociations.inferredTitle': '직접적인 링크 없음 — 공유된 연결을 통해서만 연관됨.',
|
||||
'entityAssociations.sharedLabel': '{shared}개 공유',
|
||||
'entityAssociations.pairTitle': '{jaccard}% 유사 · {shared}/{union} 연결 공유',
|
||||
'entityAssociations.truncated': '{shown}/{total} 표시 — 가장 강한 것 먼저.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': '지식 신선도',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'어시스턴트가 최근에 재확인하지 않은 사실은 망각 곡선을 따라 쇠퇴합니다. 이것은 무엇이 오래되었고 재확인할 가치가 있는지 보여주어, 오래된 사실을 여전히 확실한 것으로 취급하지 않도록 합니다.',
|
||||
'memoryFreshness.loading': '신선도 계산 중…',
|
||||
'memoryFreshness.errorPrefix': '그래프를 로드할 수 없습니다:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'memoryFreshness.empty': '아직 지식 그래프가 없습니다.',
|
||||
'memoryFreshness.emptyHint': '어시스턴트가 사실을 기록하면 신선도가 여기에서 추적됩니다.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': '모든 네임스페이스',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': '{total}개 사실에서 평균 재현율 {recall}%',
|
||||
'memoryFreshness.queueHeading': '재확인 대기열',
|
||||
'memoryFreshness.queueTruncated': '{shown}/{total} 표시 — 이것들을 먼저 처리하세요.',
|
||||
'memoryFreshness.allFresh': '모든 사실이 아직 신선합니다 — 재확인할 것이 없습니다.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days}일 전',
|
||||
'memoryFreshness.recallTitle': '{recall}% 재현율 · 반감기 {halfLife}일',
|
||||
'memory.tab.path': '경로',
|
||||
'connectionPath.title': '연결 경로',
|
||||
'connectionPath.intro':
|
||||
@@ -1826,7 +1823,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': '마이크가 다른 애플리케이션에서 사용 중입니다.',
|
||||
'mic.error': '마이크 오류',
|
||||
'mic.transcribing': '전사 중...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': '재시도 중… ({attempt}/{max})',
|
||||
'mic.tapToSend': '탭하여 보내기',
|
||||
'mic.waitingForAgent': '에이전트를 기다리는 중...',
|
||||
'mic.tapAndSpeak': '탭하고 말하기',
|
||||
@@ -3785,9 +3782,8 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR이 설정되어 있습니다 — 설정에서 편집하려면 환경 변수를 해제하세요.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'OPENHUMAN_ACTION_DIR에 의해 재정의됨 — 설정에서 관리하려면 환경 변수를 해제하세요.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'settings.agentAccess.approvalHistory': '승인 이력',
|
||||
'settings.agentAccess.approvalHistoryDesc': '에이전트가 요청한 이전 승인/거부 결정을 검토합니다.',
|
||||
'settings.agentAccess.viewApprovalHistory': '승인 기록 보기',
|
||||
'settings.sandbox.title': '샌드박스 실행',
|
||||
'settings.sandbox.menuDesc': '에이전트 도구 격리를 위한 샌드박스 백엔드를 구성합니다.',
|
||||
@@ -3822,16 +3818,16 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': '환경 변수 전달',
|
||||
'settings.sandbox.envPassthroughDesc': '샌드박스로 전달되는 환경 변수입니다.',
|
||||
'settings.sandbox.noEnvVars': '구성된 환경 변수가 없습니다.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': '승인 이력',
|
||||
'settings.approvalHistory.subtitle': '최근 도구 승인 결정, 최신 순.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': '승인 이력 로드 중…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': '아직 기록된 승인 결정이 없습니다.',
|
||||
'settings.approvalHistory.errorGeneric': '승인 이력을 로드할 수 없습니다. 다시 시도하세요.',
|
||||
'settings.approvalHistory.decidedAt': '{date}에 결정됨',
|
||||
'settings.approvalHistory.decision.approveOnce': '1회 승인',
|
||||
'settings.approvalHistory.decision.approveAlways': '항상 허용',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': '외관',
|
||||
'settings.appearance.themeHeading': '테마',
|
||||
@@ -4504,49 +4500,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': '에이전트 만들기',
|
||||
'settings.agents.editor.saving': '저장 중…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': '워크플로',
|
||||
'workflows.subtitle':
|
||||
'재사용 가능하고 실행 가능한 절차 — 목표와 그에 도달하는 단계. 새로 만들거나, URL에서 설치하거나, 워크플로를 열어 실행하세요.',
|
||||
'workflows.createNew': '새 워크플로',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': '워크플로 삭제',
|
||||
'workflows.deleteError': '워크플로 삭제 실패',
|
||||
'workflows.warnings': '{count}개 경고',
|
||||
'workflows.empty.title': '아직 워크플로가 없습니다',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'작업 생명주기 단계에 대한 규칙과 스크립트를 정의하려면 워크플로를 만드세요.',
|
||||
'workflows.create.title': '새 워크플로',
|
||||
'workflows.create.subtitle': '에이전트를 위한 생명주기 연동 규칙 세트를 정의합니다.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': '예: Python 프로젝트 워크플로',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': '이 워크플로는 무엇을 하나요?',
|
||||
'workflows.create.whenToUse': '사용 시기',
|
||||
'workflows.create.whenToUsePlaceholder': '에이전트가 이 워크플로를 언제 사용해야 하나요?',
|
||||
'workflows.create.optional': '(선택 사항)',
|
||||
'workflows.create.createBtn': '워크플로 만들기',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': '워크플로를 만들 수 없습니다',
|
||||
'workflows.create.successTitle': '워크플로 생성됨',
|
||||
'workflows.create.successMessage': '성공적으로 생성되었습니다.',
|
||||
'workflows.deleteConfirm.title': '워크플로 삭제',
|
||||
'workflows.deleteConfirm.body': '"{name}"을(를) 제거하시겠습니까? 이 작업은 되돌릴 수 없습니다.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': '정의된 단계가 없습니다.',
|
||||
'workflows.detail.loadError': '전체 워크플로 로드 실패',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': '규칙 없음.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': '스크립트 없음.',
|
||||
'workflows.phase.toolScope': '도구 범위',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': '워크플로 기본값에서 상속됨.',
|
||||
'workflows.phase.toolScope.empty': '도구 제한 없음.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': '컨텍스트 제공자 없음.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'에이전트와 그 자율성, 그리고 이 컴퓨터에서 액세스할 수 있는 항목을 관리하세요.',
|
||||
@@ -4645,51 +4642,51 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': '채팅',
|
||||
'intelligence.agents.tier.reasoning': '추론',
|
||||
'intelligence.agents.tier.worker': '작업자',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': '모델 평의회',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'질문 하나를 하면 여러 모델에서 동시에 독립적인 답변을 받고, 의장 모델이 합의점, 이견, 각 모델의 고유한 기여를 종합합니다.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'저장된 평의회를 선택하거나, 에이전트와 판사를 편집하거나, 특정 유형의 결정을 위해 새 평의회를 만드세요.',
|
||||
'modelCouncil.addCouncil': '새 평의회',
|
||||
'modelCouncil.openCouncil': '평의회 열기',
|
||||
'modelCouncil.editCouncil': '평의회 편집',
|
||||
'modelCouncil.editCurrentCouncil': '현재 평의회 편집',
|
||||
'modelCouncil.editCouncilAria': '{name} 편집',
|
||||
'modelCouncil.deleteCouncilAria': '{name} 삭제',
|
||||
'modelCouncil.backToCouncils': '평의회 목록으로 돌아가기',
|
||||
'modelCouncil.saveCouncil': '평의회 저장',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': '평의회 로드 중…',
|
||||
'modelCouncil.noCouncils': '아직 평의회가 없습니다. 하나를 추가하여 시작하세요.',
|
||||
'modelCouncil.noCouncilDescription': '설명 없음',
|
||||
'modelCouncil.registryErrorPrefix': '평의회 레지스트리 실패:',
|
||||
'modelCouncil.councilNameLabel': '평의회 이름',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': '이 평의회를 사용할 시기',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp': '라우팅 힌트를 선택하거나 정확한 공급자 모델을 고정하세요.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': '공급자 + 모델',
|
||||
'modelCouncil.modelProviderLabel': '모델 공급자',
|
||||
'modelCouncil.modelIdLabel': '모델 ID',
|
||||
'modelCouncil.useProviderModel': '공급자 모델 사용',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': '평의회에 질문하세요…',
|
||||
'modelCouncil.membersLabel': '구성원 모델',
|
||||
'modelCouncil.maxMembersNote': '최대 {max}개',
|
||||
'modelCouncil.memberPlaceholder': '예: gpt-5.2',
|
||||
'modelCouncil.memberAria': '구성원 모델 {n}',
|
||||
'modelCouncil.removeMemberAria': '구성원 모델 {n} 제거',
|
||||
'modelCouncil.addMember': '+ 모델 추가',
|
||||
'modelCouncil.settingsTitle': '위원회 설정',
|
||||
'modelCouncil.settingsSummary': '배심원 {count}명 · 판사: {judge}',
|
||||
'modelCouncil.juryCountLabel': '배심원 수',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': '토론 라운드',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'각 배심원은 판사가 최종 종합 의견을 작성하기 전에 여러 라운드에 걸쳐 토론합니다.',
|
||||
'modelCouncil.judgeAgentLabel': '판사 에이전트',
|
||||
'modelCouncil.defaultJudge': '기본 판사',
|
||||
'modelCouncil.savedProfile': '저장된 프로필',
|
||||
@@ -4718,52 +4715,49 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'판사가 종합문을 쓰기 전에 위원회가 이 공유 초안으로 작업합니다.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'각 라운드 후 배심원 업데이트가 여기에 추가되어 다음 라운드에 반영됩니다.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': '라운드 {round} 업데이트',
|
||||
'modelCouncil.scratchpadNoResponse': '응답 없음',
|
||||
'modelCouncil.chairLabel': '의장 모델',
|
||||
'modelCouncil.chairPlaceholder': '예: claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': '의장은 모든 구성원의 답변을 읽고 종합 의견을 작성합니다.',
|
||||
'modelCouncil.run': '평의회 소집',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': '구성원에게 동시 질의 중, 이후 종합…',
|
||||
'modelCouncil.deliberationHeading': '평의회 심의',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'마스코트가 공유 추론 파일 사용 중 각 에이전트의 사고 상태를 보여줍니다.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'다른 배심원들에게 응답하세요. 이견을 유지하고, 근거가 있을 때 견해를 수정하며, 현재 결론을 명시적으로 유지하세요.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'이것은 마지막 배심원 라운드입니다. 증거가 뒷받침하는 곳에서 수렴하고, 남은 이견을 지적하며, 판사에게 명확한 결론을 제시하세요.',
|
||||
'modelCouncil.roundLabel': '라운드 {round}',
|
||||
'modelCouncil.currentRoundThinking': '다음 라운드 진행 중…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'modelCouncil.thinkingWithBrief': '이 관점에서 작업 중: {brief}',
|
||||
'modelCouncil.thought.evidence': '증거, 가정 및 공유 추론 파일에 이미 담긴 내용을 확인 중입니다.',
|
||||
'modelCouncil.thought.plan': '실질적인 경로와 실행이 막힐 수 있는 지점을 구상 중입니다.',
|
||||
'modelCouncil.thought.risk': '실패 모드, 누락된 맥락, 취약한 결론을 탐색 중입니다.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'판사에게 간결한 입장을 전달하기 전에 트레이드오프를 비교 중입니다.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'판사가 실제 이견을 비교할 수 있도록 고유한 견해를 준비 중입니다.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'modelCouncil.judgeWaitingThought': '배심원 답변을 기다린 후 공유 추론 파일을 읽어 종합합니다.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'배심원의 실시간 사고를 읽고 최종 평의회 종합 의견을 작성 중입니다.',
|
||||
'modelCouncil.errorPrefix': '평의회 실패:',
|
||||
'modelCouncil.resultsHeading': '평의회 결과',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': '{model} 작성',
|
||||
'modelCouncil.usageHeading': '토론 사용량',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'토론 프롬프트와 응답에서 추정된 토큰 수. 실제 가격은 평의회 RPC의 공급자 사용량이 필요합니다.',
|
||||
'modelCouncil.usageEstimatedBadge': '추정 토큰',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+145
-142
@@ -296,7 +296,7 @@ const messages: TranslationMap = {
|
||||
'Przeglądaj i uruchamiaj dostępnych agentów — każdy z własnymi narzędziami, możliwościami i obszarem specjalizacji.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Wielokrotnego użytku, uruchamialne procedury — cel i kroki do jego osiągnięcia. Utwórz jeden, zainstaluj z URL-a lub otwórz przepływ pracy, aby go uruchomić.',
|
||||
'memory.tab.dreams': 'Marzenia senne',
|
||||
'memory.tab.calls': 'Połączenia',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -305,24 +305,23 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Ustawienia',
|
||||
'memory.analyzeNow': 'Analizuj teraz',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Oś czasu pamięci',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'Kiedy asystent dowiedział się o Tobie — fakty pogrupowane według miesiąca ostatniego wzmocnienia. Pokazuje wzrost, skoki aktywności i spokojne okresy.',
|
||||
'memoryTimeline.loading': 'Budowanie osi czasu…',
|
||||
'memoryTimeline.errorPrefix': 'Nie udało się załadować grafu:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.namespaceAll': 'Wszystkie przestrzenie nazw',
|
||||
'memoryTimeline.empty': 'Brak grafu wiedzy.',
|
||||
'memoryTimeline.emptyHint': 'Gdy asystent zapisze fakty o Tobie, oś czasu pojawi się tutaj.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Aktywne miesiące',
|
||||
'memoryTimeline.metricRecent': 'Ostatnie 30 dni',
|
||||
'memoryTimeline.heading': 'Fakty poznane w danym miesiącu',
|
||||
'memoryTimeline.busiestCaption': 'Najbardziej aktywny: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fakt(ów) bez zarejestrowanej daty.',
|
||||
'memoryTimeline.truncated': 'Wyświetlanie {shown} najnowszych z {total} miesięcy.',
|
||||
'namespaceOverview.title': 'Przegląd przestrzeni nazw',
|
||||
'namespaceOverview.intro':
|
||||
'Jak Twoja wiedza jest rozłożona w kontekstach — liczba faktów i odrębnych encji zapisanych w każdej przestrzeni nazw.',
|
||||
@@ -367,51 +366,51 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'Łącznik — bardziej wpływowy, niż sugeruje liczba linków',
|
||||
'graphCentrality.degreeTitle': '{in} wej. · {out} wyj.',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Powiązania encji',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Encje dzielące wiele tych samych połączeń są powiązane — nawet gdy żaden pojedynczy fakt nie łączy ich bezpośrednio. Podobieństwo Jaccarda ujawnia te ukryte powiązania.',
|
||||
'entityAssociations.loading': 'Obliczanie powiązań…',
|
||||
'entityAssociations.errorPrefix': 'Nie udało się załadować grafu:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Brak powiązań.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Gdy encje zaczną dzielić połączenia, najsilniejsze pary pojawią się tutaj.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Wszystkie przestrzenie nazw',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Najsilniejsze powiązania',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'Te encje są bezpośrednio połączone.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Brak bezpośredniego powiązania — skojarzone wyłącznie przez wspólne połączenia.',
|
||||
'entityAssociations.sharedLabel': '{shared} wspólnych',
|
||||
'entityAssociations.pairTitle': '{jaccard}% podobieństwa · {shared} z {union} wspólnych połączeń',
|
||||
'entityAssociations.truncated': 'Wyświetlanie {shown} z {total} — najsilniejsze najpierw.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Świeżość wiedzy',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'Fakty, których asystent nie potwierdził ostatnio, zanikają wzdłuż krzywej zapominania. To pokazuje, co staje się nieaktualne i warte ponownego sprawdzenia, aby stare fakty nie były traktowane jako nadal pewne.',
|
||||
'memoryFreshness.loading': 'Obliczanie świeżości…',
|
||||
'memoryFreshness.errorPrefix': 'Nie udało się załadować grafu:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Brak grafu wiedzy.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'Gdy asystent zapisze fakty o Tobie, ich świeżość będzie śledzona tutaj.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Wszystkie przestrzenie nazw',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Średnie odtworzenie {recall}% z {total} faktów',
|
||||
'memoryFreshness.queueHeading': 'Kolejka ponownego potwierdzenia',
|
||||
'memoryFreshness.queueTruncated': 'Wyświetlanie {shown} z {total} — zajmij się tymi najpierw.',
|
||||
'memoryFreshness.allFresh': 'Wszystkie fakty są wciąż świeże — nic do ponownego potwierdzenia.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} dni temu',
|
||||
'memoryFreshness.recallTitle': '{recall}% odtworzenia · okres półtrwania {halfLife} dni',
|
||||
'memory.tab.path': 'Ścieżki',
|
||||
'connectionPath.title': 'Ścieżka połączenia',
|
||||
'connectionPath.intro':
|
||||
@@ -1864,7 +1863,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'Mikrofon jest używany przez inną aplikację.',
|
||||
'mic.error': 'Błąd mikrofonu',
|
||||
'mic.transcribing': 'Transkrypcja...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Ponawianie próby… ({attempt} z {max})',
|
||||
'mic.tapToSend': 'Dotknij, aby wysłać',
|
||||
'mic.waitingForAgent': 'Czekam na agenta...',
|
||||
'mic.tapAndSpeak': 'Dotknij i mów',
|
||||
@@ -3889,9 +3888,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR jest ustawione — usuń zmienną środowiskową, aby edytować to w Ustawieniach.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'Nadpisane przez OPENHUMAN_ACTION_DIR — usuń zmienną środowiskową, aby zarządzać tym w Ustawieniach.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Historia zatwierdzeń',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'Przegląd wcześniejszych decyzji Zatwierdź / Odrzuć żądanych przez agenta.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'Wyświetl historię zatwierdzeń',
|
||||
'settings.sandbox.title': 'Wykonanie w piaskownicy',
|
||||
'settings.sandbox.menuDesc': 'Konfiguruj backendy piaskownicy do izolacji narzędzi agenta.',
|
||||
@@ -3928,16 +3927,18 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'Przekazywanie zmiennych środowiskowych',
|
||||
'settings.sandbox.envPassthroughDesc': 'Zmienne środowiskowe przekazywane do piaskownicy.',
|
||||
'settings.sandbox.noEnvVars': 'Nie skonfigurowano żadnych zmiennych środowiskowych.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'Historia zatwierdzeń',
|
||||
'settings.approvalHistory.subtitle':
|
||||
'Ostatnie decyzje o zatwierdzeniu narzędzi, najnowsze najpierw.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': 'Ładowanie historii zatwierdzeń…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': 'Brak zarejestrowanych decyzji o zatwierdzeniu.',
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
'Nie udało się załadować historii zatwierdzeń. Spróbuj ponownie.',
|
||||
'settings.approvalHistory.decidedAt': 'Zdecydowano {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Zatwierdzone raz',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Zawsze dozwolone',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Wygląd',
|
||||
'settings.appearance.themeHeading': 'Motyw',
|
||||
@@ -4624,49 +4625,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Utwórz agenta',
|
||||
'settings.agents.editor.saving': 'Zapisywanie…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Przepływy pracy',
|
||||
'workflows.subtitle':
|
||||
'Wielokrotnego użytku, uruchamialne procedury — cel i kroki do jego osiągnięcia. Utwórz jeden, zainstaluj z URL-a lub otwórz przepływ pracy, aby go uruchomić.',
|
||||
'workflows.createNew': 'Nowy przepływ pracy',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Usuń przepływ pracy',
|
||||
'workflows.deleteError': 'Nie udało się usunąć przepływu pracy',
|
||||
'workflows.warnings': '{count} ostrzeżeń',
|
||||
'workflows.empty.title': 'Brak przepływów pracy',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Utwórz przepływ pracy, aby zdefiniować reguły i skrypty dla faz cyklu życia zadań.',
|
||||
'workflows.create.title': 'Nowy przepływ pracy',
|
||||
'workflows.create.subtitle': 'Zdefiniuj zestaw reguł powiązany z cyklem życia agenta.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'np. Przepływ pracy projektu Python',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'Co robi ten przepływ pracy?',
|
||||
'workflows.create.whenToUse': 'Kiedy używać',
|
||||
'workflows.create.whenToUsePlaceholder': 'Kiedy agent powinien użyć tego przepływu pracy?',
|
||||
'workflows.create.optional': '(opcjonalne)',
|
||||
'workflows.create.createBtn': 'Utwórz przepływ pracy',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Nie udało się utworzyć przepływu pracy',
|
||||
'workflows.create.successTitle': 'Przepływ pracy utworzony',
|
||||
'workflows.create.successMessage': 'został pomyślnie utworzony.',
|
||||
'workflows.deleteConfirm.title': 'Usuń przepływ pracy',
|
||||
'workflows.deleteConfirm.body': 'Usunąć „{name}”? Tej operacji nie można cofnąć.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Brak zdefiniowanych faz.',
|
||||
'workflows.detail.loadError': 'Nie udało się załadować pełnego przepływu pracy',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Brak reguł.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Brak skryptów.',
|
||||
'workflows.phase.toolScope': 'Zakres narzędzi',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Odziedziczone z domyślnych ustawień przepływu pracy.',
|
||||
'workflows.phase.toolScope.empty': 'Brak ograniczeń narzędzi.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Brak dostawców kontekstu.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Zarządzaj agentami, ich autonomią i tym, do czego mogą uzyskać dostęp na tym komputerze.',
|
||||
@@ -4734,51 +4736,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Czat',
|
||||
'intelligence.agents.tier.reasoning': 'Rozumowanie',
|
||||
'intelligence.agents.tier.worker': 'Wykonawca',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Rada modeli',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'Zadaj jedno pytanie, uzyskaj niezależne odpowiedzi od kilku modeli równolegle, a następnie model przewodniczącego syntetyzuje, w czym się zgadzają, gdzie się różnią i co każdy wnosi unikalnie.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'Wybierz zapisaną radę, edytuj jej agentów i sędziego lub utwórz nową radę dla konkretnego rodzaju decyzji.',
|
||||
'modelCouncil.addCouncil': 'Nowa rada',
|
||||
'modelCouncil.openCouncil': 'Otwórz radę',
|
||||
'modelCouncil.editCouncil': 'Edytuj radę',
|
||||
'modelCouncil.editCurrentCouncil': 'Edytuj bieżącą radę',
|
||||
'modelCouncil.editCouncilAria': 'Edytuj {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Usuń {name}',
|
||||
'modelCouncil.backToCouncils': 'Powrót do rad',
|
||||
'modelCouncil.saveCouncil': 'Zapisz radę',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Ładowanie rad…',
|
||||
'modelCouncil.noCouncils': 'Brak rad. Dodaj jedną, aby rozpocząć.',
|
||||
'modelCouncil.noCouncilDescription': 'Brak opisu',
|
||||
'modelCouncil.registryErrorPrefix': 'Rejestr rady nie powiódł się:',
|
||||
'modelCouncil.councilNameLabel': 'Nazwa rady',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Kiedy używać tej rady',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Wybierz wskazówkę routingu lub przypnij dokładny model dostawcy.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Dostawca + model',
|
||||
'modelCouncil.modelProviderLabel': 'Dostawca modelu',
|
||||
'modelCouncil.modelIdLabel': 'ID modelu',
|
||||
'modelCouncil.useProviderModel': 'Użyj modelu dostawcy',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Zadaj radzie pytanie…',
|
||||
'modelCouncil.membersLabel': 'Modele członków',
|
||||
'modelCouncil.maxMembersNote': 'do {max}',
|
||||
'modelCouncil.memberPlaceholder': 'np. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Model członka {n}',
|
||||
'modelCouncil.removeMemberAria': 'Usuń model członka {n}',
|
||||
'modelCouncil.addMember': '+ Dodaj model',
|
||||
'modelCouncil.settingsTitle': 'Ustawienia rady',
|
||||
'modelCouncil.settingsSummary': '{count} jurorów · sędzia: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Liczba jurorów',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Rundy debaty',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Każdy ławnik debatuje przez wiele rund, zanim sędzia napisze końcową syntezę.',
|
||||
'modelCouncil.judgeAgentLabel': 'Agent sędzia',
|
||||
'modelCouncil.defaultJudge': 'Domyślny sędzia',
|
||||
'modelCouncil.savedProfile': 'Zapisany profil',
|
||||
@@ -4791,7 +4794,7 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.rosterHelp':
|
||||
'Każdy juror może dziedziczyć domyślnego agenta, użyć zapisanego profilu albo stać się profilem niestandardowym dla tego uruchomienia.',
|
||||
'modelCouncil.loadingProfiles': 'Ładowanie profili…',
|
||||
'modelCouncil.jurorLabel': 'Juror {n}',
|
||||
'modelCouncil.jurorLabel': 'Ławnik {n}',
|
||||
'modelCouncil.profileModeLabel': 'Źródło profilu',
|
||||
'modelCouncil.mode.default': 'Domyślny',
|
||||
'modelCouncil.mode.profile': 'Profil',
|
||||
@@ -4807,52 +4810,52 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'Rada pracuje na tym wspólnym szkicu, zanim sędzia napisze syntezę.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Aktualizacje ławników są tutaj dodawane po każdej rundzie i zasilają następną rundę.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Aktualizacje rundy {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Brak odpowiedzi',
|
||||
'modelCouncil.chairLabel': 'Model przewodniczącego',
|
||||
'modelCouncil.chairPlaceholder': 'np. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'Przewodniczący czyta każdą odpowiedź członków i pisze syntezę.',
|
||||
'modelCouncil.run': 'Zwołaj radę',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Odpytywanie członków równolegle, następnie synteza…',
|
||||
'modelCouncil.deliberationHeading': 'Obrady rady',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Maskotki pokazują myślenie każdego agenta, gdy wspólny plik rozumowania jest w użyciu.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Odpowiedz innym ławnikom. Zachowaj rozbieżności, zrewiduj swój pogląd, gdy to uzasadnione, i utrzymaj swój aktualny wniosek w sposób jawny.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'To Twoja ostatnia runda ławnika. Zbieżność tam, gdzie dowody to wspierają, wskaż pozostałe rozbieżności i przekaż sędziemu jasny wniosek.',
|
||||
'modelCouncil.roundLabel': 'Runda {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Kontynuowanie następnej rundy…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Praca z tej perspektywy: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Sprawdzanie dowodów, założeń i tego, co wspólny plik rozumowania już zawiera.',
|
||||
'modelCouncil.thought.plan':
|
||||
'Szkicowanie praktycznej ścieżki i miejsc, gdzie realizacja może utknąć.',
|
||||
'modelCouncil.thought.risk': 'Szukanie trybów awarii, brakującego kontekstu i kruchych wniosków.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Porównywanie kompromisów przed przekazaniem sędziemu zwięzłego stanowiska.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'Przygotowanie odrębnego punktu widzenia, aby sędzia mógł porównać rzeczywiste rozbieżności.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'Oczekiwanie na odpowiedzi ławników, następnie czytanie wspólnego pliku rozumowania w celu syntezy.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Czytanie myśli ławników na żywo i pisanie końcowej syntezy rady.',
|
||||
'modelCouncil.errorPrefix': 'Rada nie powiodła się:',
|
||||
'modelCouncil.resultsHeading': 'Wyniki rady',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'przez {model}',
|
||||
'modelCouncil.usageHeading': 'Użycie debaty',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Szacunkowa liczba tokenów z promptów i odpowiedzi debaty. Rzeczywista wycena wymaga danych o użyciu dostawcy z RPC rady.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Szacunkowe tokeny',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+144
-140
@@ -300,7 +300,7 @@ const messages: TranslationMap = {
|
||||
'Navegue e execute os agentes disponíveis — cada um com suas próprias ferramentas, capacidades e área de foco.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Procedimentos reutilizáveis e executáveis — um objetivo e os passos para alcançá-lo. Crie um, instale a partir de uma URL ou abra um fluxo de trabalho para executá-lo.',
|
||||
'memory.tab.dreams': 'Sonhos',
|
||||
'memory.tab.calls': 'Chamadas',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -309,24 +309,24 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Configurações',
|
||||
'memory.analyzeNow': 'Analisar Agora',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Linha do Tempo da Memória',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'Quando o assistente aprendeu sobre você — fatos agrupados pelo mês em que foram reforçados pela última vez. Mostra crescimento, picos de atividade e períodos tranquilos.',
|
||||
'memoryTimeline.loading': 'Construindo a linha do tempo…',
|
||||
'memoryTimeline.errorPrefix': 'Não foi possível carregar o grafo:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.namespaceAll': 'Todos os namespaces',
|
||||
'memoryTimeline.empty': 'Nenhum grafo de conhecimento ainda.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'Quando o assistente registrar fatos sobre você, a linha do tempo aparecerá aqui.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Meses ativos',
|
||||
'memoryTimeline.metricRecent': 'Últimos 30 dias',
|
||||
'memoryTimeline.heading': 'Fatos aprendidos por mês',
|
||||
'memoryTimeline.busiestCaption': 'Mais ativo: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fato(s) sem data registrada.',
|
||||
'memoryTimeline.truncated': 'Exibindo os {shown} mais recentes de {total} meses.',
|
||||
'namespaceOverview.title': 'Visão geral dos namespaces',
|
||||
'namespaceOverview.intro':
|
||||
'Como o seu conhecimento está distribuído entre os contextos — o número de fatos e entidades distintas registradas em cada namespace.',
|
||||
@@ -372,51 +372,52 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': 'Conector — mais influente do que seu número de links sugere',
|
||||
'graphCentrality.degreeTitle': '{in} entrando · {out} saindo',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Associações de Entidades',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Entidades que compartilham muitas conexões estão associadas — mesmo quando nenhum fato as liga diretamente. A similaridade de Jaccard revela esses pares ocultos.',
|
||||
'entityAssociations.loading': 'Calculando associações…',
|
||||
'entityAssociations.errorPrefix': 'Não foi possível carregar o grafo:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Nenhuma associação ainda.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Quando as entidades começarem a compartilhar conexões, os pares mais fortes aparecerão aqui.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Todos os namespaces',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Associações mais fortes',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.linkedTitle': 'Essas entidades estão diretamente conectadas.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'Sem link direto — associadas apenas por conexões compartilhadas.',
|
||||
'entityAssociations.sharedLabel': '{shared} compartilhadas',
|
||||
'entityAssociations.pairTitle':
|
||||
'{jaccard}% similar · {shared} de {union} conexões compartilhadas',
|
||||
'entityAssociations.truncated': 'Exibindo {shown} de {total} — as mais fortes primeiro.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Frescura do Conhecimento',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'Fatos que o assistente não reconfirmou recentemente decaem ao longo de uma curva de esquecimento. Isso mostra o que está ficando obsoleto e vale a pena reverificar, para que fatos antigos não sejam tratados como ainda certos.',
|
||||
'memoryFreshness.loading': 'Calculando frescura…',
|
||||
'memoryFreshness.errorPrefix': 'Não foi possível carregar o grafo:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Nenhum grafo de conhecimento ainda.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'Quando o assistente registrar fatos sobre você, a frescura deles será rastreada aqui.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Todos os namespaces',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Recuperação média {recall}% em {total} fatos',
|
||||
'memoryFreshness.queueHeading': 'Fila de reconfirmação',
|
||||
'memoryFreshness.queueTruncated': 'Exibindo {shown} de {total} — resolva estes primeiro.',
|
||||
'memoryFreshness.allFresh': 'Todos os fatos ainda estão frescos — nada para reconfirmar.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} dias atrás',
|
||||
'memoryFreshness.recallTitle': '{recall}% recuperação · meia-vida {halfLife} dias',
|
||||
'memory.tab.path': 'Caminhos',
|
||||
'connectionPath.title': 'Caminho de Conexão',
|
||||
'connectionPath.intro':
|
||||
@@ -1881,7 +1882,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'O microfone está sendo usado por outro aplicativo.',
|
||||
'mic.error': 'Erro do microfone',
|
||||
'mic.transcribing': 'Transcrevendo...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Tentando novamente… ({attempt} de {max})',
|
||||
'mic.tapToSend': 'Toque para enviar',
|
||||
'mic.waitingForAgent': 'Aguardando agente...',
|
||||
'mic.tapAndSpeak': 'Toque e fale',
|
||||
@@ -3888,9 +3889,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR está definido — remova a variável de ambiente para editar isto em Configurações.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'Substituído por OPENHUMAN_ACTION_DIR — remova a variável de ambiente para gerenciar em Configurações.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'Histórico de aprovações',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'Revise as decisões anteriores de Aprovar / Negar solicitadas pelo agente.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'Ver histórico de aprovações',
|
||||
'settings.sandbox.title': 'Execução em sandbox',
|
||||
'settings.sandbox.menuDesc':
|
||||
@@ -3928,16 +3929,18 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'Passagem de variáveis de ambiente',
|
||||
'settings.sandbox.envPassthroughDesc': 'Variáveis de ambiente encaminhadas para o sandbox.',
|
||||
'settings.sandbox.noEnvVars': 'Nenhuma variável de ambiente configurada.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': 'Histórico de aprovações',
|
||||
'settings.approvalHistory.subtitle':
|
||||
'Decisões recentes de aprovação de ferramentas, as mais recentes primeiro.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': 'Carregando histórico de aprovações…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': 'Nenhuma decisão de aprovação registrada ainda.',
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
'Não foi possível carregar o histórico de aprovações. Tente novamente.',
|
||||
'settings.approvalHistory.decidedAt': 'Decidido em {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Aprovado uma vez',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Sempre permitido',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Aparência',
|
||||
'settings.appearance.themeHeading': 'Tema',
|
||||
@@ -4624,49 +4627,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Criar agente',
|
||||
'settings.agents.editor.saving': 'Salvando…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Fluxos de Trabalho',
|
||||
'workflows.subtitle':
|
||||
'Procedimentos reutilizáveis e executáveis — um objetivo e os passos para alcançá-lo. Crie um, instale a partir de uma URL ou abra um fluxo de trabalho para executá-lo.',
|
||||
'workflows.createNew': 'Novo fluxo de trabalho',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Excluir Fluxo de Trabalho',
|
||||
'workflows.deleteError': 'Falha ao excluir o fluxo de trabalho',
|
||||
'workflows.warnings': '{count} aviso(s)',
|
||||
'workflows.empty.title': 'Nenhum fluxo de trabalho ainda',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Crie um fluxo de trabalho para definir regras e scripts para as fases do ciclo de vida de tarefas.',
|
||||
'workflows.create.title': 'Novo Fluxo de Trabalho',
|
||||
'workflows.create.subtitle': 'Defina um conjunto de regras vinculado ao ciclo de vida do agente.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'ex. Fluxo de trabalho de projeto Python',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'O que este fluxo de trabalho faz?',
|
||||
'workflows.create.whenToUse': 'Quando usar',
|
||||
'workflows.create.whenToUsePlaceholder': 'Quando o agente deve usar este fluxo de trabalho?',
|
||||
'workflows.create.optional': '(opcional)',
|
||||
'workflows.create.createBtn': 'Criar fluxo de trabalho',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Não foi possível criar o fluxo de trabalho',
|
||||
'workflows.create.successTitle': 'Fluxo de trabalho criado',
|
||||
'workflows.create.successMessage': 'foi criado com sucesso.',
|
||||
'workflows.deleteConfirm.title': 'Excluir fluxo de trabalho',
|
||||
'workflows.deleteConfirm.body': 'Remover "{name}"? Esta ação não pode ser desfeita.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Nenhuma fase definida.',
|
||||
'workflows.detail.loadError': 'Falha ao carregar o fluxo de trabalho completo',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Sem regras.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Sem scripts.',
|
||||
'workflows.phase.toolScope': 'Escopo de ferramentas',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Herdado do padrão do fluxo de trabalho.',
|
||||
'workflows.phase.toolScope.empty': 'Sem restrições de ferramentas.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Sem provedores de contexto.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Gerencie seus agentes, sua autonomia e o que eles podem acessar neste computador.',
|
||||
@@ -4766,51 +4770,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Chat',
|
||||
'intelligence.agents.tier.reasoning': 'Raciocínio',
|
||||
'intelligence.agents.tier.worker': 'Trabalhador',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Conselho de Modelos',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'Faça uma pergunta, obtenha respostas independentes de vários modelos em paralelo, e então o modelo presidente sintetiza onde concordam, onde discordam e o que cada um adiciona de único.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'Escolha um conselho salvo, edite seus agentes e juiz, ou crie um novo para um tipo específico de decisão.',
|
||||
'modelCouncil.addCouncil': 'Novo conselho',
|
||||
'modelCouncil.openCouncil': 'Abrir conselho',
|
||||
'modelCouncil.editCouncil': 'Editar conselho',
|
||||
'modelCouncil.editCurrentCouncil': 'Editar conselho atual',
|
||||
'modelCouncil.editCouncilAria': 'Editar {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Excluir {name}',
|
||||
'modelCouncil.backToCouncils': 'Voltar aos conselhos',
|
||||
'modelCouncil.saveCouncil': 'Salvar conselho',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Carregando conselhos…',
|
||||
'modelCouncil.noCouncils': 'Nenhum conselho ainda. Adicione um para começar.',
|
||||
'modelCouncil.noCouncilDescription': 'Sem descrição',
|
||||
'modelCouncil.registryErrorPrefix': 'O registro do conselho falhou:',
|
||||
'modelCouncil.councilNameLabel': 'Nome do conselho',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Quando usar este conselho',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Selecione uma dica de roteamento ou fixe um modelo de provedor exato.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provedor + modelo',
|
||||
'modelCouncil.modelProviderLabel': 'Provedor do modelo',
|
||||
'modelCouncil.modelIdLabel': 'ID do modelo',
|
||||
'modelCouncil.useProviderModel': 'Usar modelo do provedor',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Faça uma pergunta ao conselho…',
|
||||
'modelCouncil.membersLabel': 'Modelos membros',
|
||||
'modelCouncil.maxMembersNote': 'até {max}',
|
||||
'modelCouncil.memberPlaceholder': 'ex. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Modelo membro {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remover modelo membro {n}',
|
||||
'modelCouncil.addMember': '+ Adicionar modelo',
|
||||
'modelCouncil.settingsTitle': 'Configurações do conselho',
|
||||
'modelCouncil.settingsSummary': '{count} jurados · juiz: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Quantidade de jurados',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Rodadas de debate',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Cada jurado continua debatendo por várias rodadas antes de o juiz escrever a síntese final.',
|
||||
'modelCouncil.judgeAgentLabel': 'Agente juiz',
|
||||
'modelCouncil.defaultJudge': 'Juiz padrão',
|
||||
'modelCouncil.savedProfile': 'Perfil salvo',
|
||||
@@ -4839,52 +4844,51 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'O conselho trabalha neste rascunho compartilhado antes de o juiz escrever a síntese.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'As atualizações dos jurados são adicionadas aqui após cada rodada e alimentam a rodada seguinte.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Atualizações da rodada {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Sem resposta',
|
||||
'modelCouncil.chairLabel': 'Modelo presidente',
|
||||
'modelCouncil.chairPlaceholder': 'ex. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'O presidente lê cada resposta dos membros e escreve a síntese.',
|
||||
'modelCouncil.run': 'Convocar conselho',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Consultando membros em paralelo, depois sintetizando…',
|
||||
'modelCouncil.deliberationHeading': 'Deliberação do conselho',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Os mascotes mostram cada agente pensando enquanto o arquivo de raciocínio compartilhado está em uso.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Responda aos outros jurados. Preserve as divergências, revise seu ponto de vista quando justificado e mantenha sua conclusão atual explícita.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'Esta é sua última rodada como jurado. Convirja onde as evidências sustentam, aponte divergências restantes e entregue ao juiz uma conclusão clara.',
|
||||
'modelCouncil.roundLabel': 'Rodada {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuando a próxima rodada…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Trabalhando a partir desta perspectiva: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'Verificando evidências, suposições e o que o arquivo de raciocínio compartilhado já contém.',
|
||||
'modelCouncil.thought.plan': 'Esboçando o caminho prático e onde a execução pode travar.',
|
||||
'modelCouncil.thought.risk': 'Procurando modos de falha, contexto ausente e conclusões frágeis.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Comparando compensações antes de entregar ao juiz uma posição concisa.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'Preparando uma visão distinta para que o juiz compare as divergências reais.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'Aguardando as respostas dos jurados, depois lendo o arquivo de raciocínio compartilhado para sintetizar.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Lendo os pensamentos ao vivo dos jurados e escrevendo a síntese final do conselho.',
|
||||
'modelCouncil.errorPrefix': 'O conselho falhou:',
|
||||
'modelCouncil.resultsHeading': 'Resultados do conselho',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'por {model}',
|
||||
'modelCouncil.usageHeading': 'Uso do debate',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Contagens estimadas de tokens dos prompts e respostas do debate. A precificação real requer o uso do provedor via RPC do conselho.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Tokens estimados',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+147
-145
@@ -293,7 +293,7 @@ const messages: TranslationMap = {
|
||||
'Просматривайте и запускайте доступных агентов — у каждого свои инструменты, возможности и область специализации.',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'Многоразовые исполняемые процедуры — цель и шаги к её достижению. Создайте, установите по URL или откройте рабочий процесс для запуска.',
|
||||
'memory.tab.dreams': 'Сны',
|
||||
'memory.tab.calls': 'Звонки',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -302,24 +302,23 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': 'Настройки',
|
||||
'memory.analyzeNow': 'Анализировать сейчас',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': 'Хронология памяти',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'Когда ассистент узнавал о вас — факты, сгруппированные по месяцу последнего подкрепления. Показывает рост, всплески активности и спокойные периоды.',
|
||||
'memoryTimeline.loading': 'Построение хронологии…',
|
||||
'memoryTimeline.errorPrefix': 'Не удалось загрузить граф:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.namespaceAll': 'Все пространства имён',
|
||||
'memoryTimeline.empty': 'Граф знаний пока отсутствует.',
|
||||
'memoryTimeline.emptyHint': 'Когда ассистент запишет факты о вас, хронология появится здесь.',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': 'Активные месяцы',
|
||||
'memoryTimeline.metricRecent': 'Последние 30 дней',
|
||||
'memoryTimeline.heading': 'Факты, изученные за месяц',
|
||||
'memoryTimeline.busiestCaption': 'Самый активный: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} факт(ов) без зарегистрированной даты.',
|
||||
'memoryTimeline.truncated': 'Показаны {shown} самых свежих из {total} месяцев.',
|
||||
'namespaceOverview.title': 'Обзор пространств имён',
|
||||
'namespaceOverview.intro':
|
||||
'Как ваши знания распределены по контекстам — количество фактов и уникальных сущностей, записанных в каждом пространстве имён.',
|
||||
@@ -365,51 +364,51 @@ const messages: TranslationMap = {
|
||||
'Коннектор — более влиятельный, чем предполагает количество ссылок.',
|
||||
'graphCentrality.degreeTitle': '{in} вход · {out} выход',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': 'Ассоциации сущностей',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'Сущности, разделяющие множество одинаковых связей, ассоциированы — даже если ни один факт не связывает их напрямую. Сходство Жаккара выявляет эти скрытые связи.',
|
||||
'entityAssociations.loading': 'Вычисление ассоциаций…',
|
||||
'entityAssociations.errorPrefix': 'Не удалось загрузить граф:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.empty': 'Пока нет ассоциаций.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'Когда сущности начнут разделять связи, самые сильные пары появятся здесь.',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': 'Все пространства имён',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': 'Сильнейшие ассоциации',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'entityAssociations.linkedTitle': 'Эти сущности связаны напрямую.',
|
||||
'entityAssociations.inferredTitle': 'Нет прямой связи — ассоциированы только через общие связи.',
|
||||
'entityAssociations.sharedLabel': '{shared} общих',
|
||||
'entityAssociations.pairTitle': '{jaccard}% сходства · {shared} из {union} общих связей',
|
||||
'entityAssociations.truncated': 'Показано {shown} из {total} — сильнейшие первыми.',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': 'Свежесть знаний',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'Факты, которые ассистент не подтверждал в последнее время, угасают по кривой забывания. Это показывает, что устаревает и заслуживает повторной проверки, чтобы старые факты не считались достоверными.',
|
||||
'memoryFreshness.loading': 'Вычисление свежести…',
|
||||
'memoryFreshness.errorPrefix': 'Не удалось загрузить граф:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.empty': 'Граф знаний пока отсутствует.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'Когда ассистент запишет факты о вас, их свежесть будет отслеживаться здесь.',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': 'Все пространства имён',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': 'Средний отзыв {recall}% по {total} фактам',
|
||||
'memoryFreshness.queueHeading': 'Очередь повторного подтверждения',
|
||||
'memoryFreshness.queueTruncated':
|
||||
'Показано {shown} из {total} — обработайте эти в первую очередь.',
|
||||
'memoryFreshness.allFresh': 'Все факты ещё свежие — ничего не нужно подтверждать повторно.',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} дн. назад',
|
||||
'memoryFreshness.recallTitle': '{recall}% отзыва · период полураспада {halfLife} дн.',
|
||||
'memory.tab.path': 'Пути',
|
||||
'connectionPath.title': 'Путь связи',
|
||||
'connectionPath.intro':
|
||||
@@ -1859,7 +1858,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': 'Микрофон используется другим приложением.',
|
||||
'mic.error': 'Ошибка микрофона',
|
||||
'mic.transcribing': 'Транскрипция...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': 'Повторная попытка… ({attempt} из {max})',
|
||||
'mic.tapToSend': 'Нажми для отправки',
|
||||
'mic.waitingForAgent': 'Ожидание агента...',
|
||||
'mic.tapAndSpeak': 'Нажми и говори',
|
||||
@@ -3858,9 +3857,9 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR установлена — снимите переменную окружения, чтобы изменить это в Настройках.',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'Переопределено OPENHUMAN_ACTION_DIR — снимите переменную окружения, чтобы управлять этим в Настройках.',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistory': 'История одобрений',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'Просмотр прошлых решений Одобрить / Отклонить, запрошенных агентом.',
|
||||
'settings.agentAccess.viewApprovalHistory': 'Просмотреть историю утверждений',
|
||||
'settings.sandbox.title': 'Выполнение в песочнице',
|
||||
'settings.sandbox.menuDesc': 'Настройте бэкенды песочницы для изоляции инструментов агента.',
|
||||
@@ -3895,16 +3894,18 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': 'Проброс переменных окружения',
|
||||
'settings.sandbox.envPassthroughDesc': 'Переменные окружения, передаваемые в песочницу.',
|
||||
'settings.sandbox.noEnvVars': 'Переменные окружения не настроены.',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.title': 'История одобрений',
|
||||
'settings.approvalHistory.subtitle':
|
||||
'Последние решения об одобрении инструментов, новейшие первыми.',
|
||||
'settings.approvalHistory.refresh': 'Обновить',
|
||||
'settings.approvalHistory.loading': 'Загрузка истории одобрений…',
|
||||
'settings.approvalHistory.retry': 'Повторить',
|
||||
'settings.approvalHistory.emptyState': 'Решения об одобрении ещё не записаны.',
|
||||
'settings.approvalHistory.errorGeneric':
|
||||
'Не удалось загрузить историю одобрений. Попробуйте снова.',
|
||||
'settings.approvalHistory.decidedAt': 'Решено {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Одобрено однократно',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Всегда разрешено',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': 'Внешний вид',
|
||||
'settings.appearance.themeHeading': 'Тема',
|
||||
@@ -4591,49 +4592,50 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': 'Создать агента',
|
||||
'settings.agents.editor.saving': 'Сохранение…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': 'Рабочие процессы',
|
||||
'workflows.subtitle':
|
||||
'Многоразовые исполняемые процедуры — цель и шаги к её достижению. Создайте, установите по URL или откройте рабочий процесс для запуска.',
|
||||
'workflows.createNew': 'Новый рабочий процесс',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.delete': 'Удалить рабочий процесс',
|
||||
'workflows.deleteError': 'Не удалось удалить рабочий процесс',
|
||||
'workflows.warnings': '{count} предупреждение(й)',
|
||||
'workflows.empty.title': 'Рабочих процессов пока нет',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'Создайте рабочий процесс для определения правил и скриптов фаз жизненного цикла задач.',
|
||||
'workflows.create.title': 'Новый рабочий процесс',
|
||||
'workflows.create.subtitle': 'Определите набор правил, привязанный к жизненному циклу агента.',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': 'напр. Рабочий процесс Python-проекта',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': 'Что делает этот рабочий процесс?',
|
||||
'workflows.create.whenToUse': 'Когда использовать',
|
||||
'workflows.create.whenToUsePlaceholder': 'Когда агент должен использовать этот рабочий процесс?',
|
||||
'workflows.create.optional': '(необязательно)',
|
||||
'workflows.create.createBtn': 'Создать рабочий процесс',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': 'Не удалось создать рабочий процесс',
|
||||
'workflows.create.successTitle': 'Рабочий процесс создан',
|
||||
'workflows.create.successMessage': 'успешно создан.',
|
||||
'workflows.deleteConfirm.title': 'Удалить рабочий процесс',
|
||||
'workflows.deleteConfirm.body': 'Удалить «{name}»? Это действие нельзя отменить.',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': 'Фазы не определены.',
|
||||
'workflows.detail.loadError': 'Не удалось загрузить полный рабочий процесс',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': 'Нет правил.',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': 'Нет скриптов.',
|
||||
'workflows.phase.toolScope': 'Область инструментов',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': 'Унаследовано из настроек рабочего процесса по умолчанию.',
|
||||
'workflows.phase.toolScope.empty': 'Нет ограничений инструментов.',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': 'Нет провайдеров контекста.',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description':
|
||||
'Управляйте агентами, их автономностью и доступом к ресурсам компьютера.',
|
||||
@@ -4733,51 +4735,52 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': 'Чат',
|
||||
'intelligence.agents.tier.reasoning': 'Рассуждение',
|
||||
'intelligence.agents.tier.worker': 'Исполнитель',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': 'Совет моделей',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'Задайте один вопрос, получите независимые ответы от нескольких моделей параллельно, затем модель-председатель синтезирует, в чём они согласны, где расходятся и что уникально привносит каждая.',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'Выберите сохранённый совет, отредактируйте его агентов и судью или создайте новый для определённого типа решений.',
|
||||
'modelCouncil.addCouncil': 'Новый совет',
|
||||
'modelCouncil.openCouncil': 'Открыть совет',
|
||||
'modelCouncil.editCouncil': 'Редактировать совет',
|
||||
'modelCouncil.editCurrentCouncil': 'Редактировать текущий совет',
|
||||
'modelCouncil.editCouncilAria': 'Редактировать {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Удалить {name}',
|
||||
'modelCouncil.backToCouncils': 'Назад к советам',
|
||||
'modelCouncil.saveCouncil': 'Сохранить совет',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': 'Загрузка советов…',
|
||||
'modelCouncil.noCouncils': 'Советов пока нет. Добавьте один, чтобы начать.',
|
||||
'modelCouncil.noCouncilDescription': 'Без описания',
|
||||
'modelCouncil.registryErrorPrefix': 'Реестр советов не удался:',
|
||||
'modelCouncil.councilNameLabel': 'Название совета',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'Когда использовать этот совет',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp':
|
||||
'Выберите подсказку маршрутизации или закрепите точную модель провайдера.',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': 'Провайдер + модель',
|
||||
'modelCouncil.modelProviderLabel': 'Провайдер модели',
|
||||
'modelCouncil.modelIdLabel': 'ID модели',
|
||||
'modelCouncil.useProviderModel': 'Использовать модель провайдера',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': 'Задайте вопрос совету…',
|
||||
'modelCouncil.membersLabel': 'Модели участников',
|
||||
'modelCouncil.maxMembersNote': 'до {max}',
|
||||
'modelCouncil.memberPlaceholder': 'напр. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Модель участника {n}',
|
||||
'modelCouncil.removeMemberAria': 'Удалить модель участника {n}',
|
||||
'modelCouncil.addMember': '+ Добавить модель',
|
||||
'modelCouncil.settingsTitle': 'Настройки совета',
|
||||
'modelCouncil.settingsSummary': '{count} присяжных · судья: {judge}',
|
||||
'modelCouncil.juryCountLabel': 'Число присяжных',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsLabel': 'Раунды дебатов',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'Каждый присяжный продолжает дебатировать в нескольких раундах, прежде чем судья напишет итоговый синтез.',
|
||||
'modelCouncil.judgeAgentLabel': 'Агент-судья',
|
||||
'modelCouncil.defaultJudge': 'Судья по умолчанию',
|
||||
'modelCouncil.savedProfile': 'Сохраненный профиль',
|
||||
@@ -4806,52 +4809,51 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.sharedReasoningHelp':
|
||||
'Совет работает с этим общим черновиком до того, как судья пишет синтез.',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'Обновления присяжных добавляются сюда после каждого раунда и используются в следующем.',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Обновления раунда {round}',
|
||||
'modelCouncil.scratchpadNoResponse': 'Нет ответа',
|
||||
'modelCouncil.chairLabel': 'Модель председателя',
|
||||
'modelCouncil.chairPlaceholder': 'напр. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'Председатель читает каждый ответ участников и пишет синтез.',
|
||||
'modelCouncil.run': 'Созвать совет',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.runningHint': 'Опрос участников параллельно, затем синтез…',
|
||||
'modelCouncil.deliberationHeading': 'Совещание совета',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'Маскоты показывают мыслительный процесс каждого агента во время использования общего файла рассуждений.',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'Ответьте другим присяжным. Сохраняйте разногласия, пересматривайте свою позицию при наличии оснований и явно формулируйте текущее заключение.',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'Это ваш последний раунд в качестве присяжного. Сойдитесь там, где доказательства это поддерживают, укажите оставшиеся разногласия и дайте судье чёткое заключение.',
|
||||
'modelCouncil.roundLabel': 'Раунд {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Продолжение следующего раунда…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thinkingWithBrief': 'Работа с данной перспективы: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'Проверка доказательств, допущений и того, что общий файл рассуждений уже содержит.',
|
||||
'modelCouncil.thought.plan':
|
||||
'Набросок практического пути и возможных затруднений при реализации.',
|
||||
'modelCouncil.thought.risk': 'Поиск режимов сбоя, недостающего контекста и хрупких выводов.',
|
||||
'modelCouncil.thought.tradeoffs': 'Сравнение компромиссов перед передачей судье краткой позиции.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'Подготовка отдельной точки зрения, чтобы судья мог сравнить реальные разногласия.',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'Ожидание ответов присяжных, затем чтение общего файла рассуждений для синтеза.',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'Чтение мыслей присяжных в реальном времени и написание итогового синтеза совета.',
|
||||
'modelCouncil.errorPrefix': 'Совет не удался:',
|
||||
'modelCouncil.resultsHeading': 'Результаты совета',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': 'от {model}',
|
||||
'modelCouncil.usageHeading': 'Использование дебатов',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'Оценочное количество токенов из промптов и ответов дебатов. Реальная стоимость требует данных об использовании провайдера из RPC совета.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Оценочные токены',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
+140
-155
@@ -280,7 +280,7 @@ const messages: TranslationMap = {
|
||||
'浏览并运行可用的智能体——每个智能体都有自己的工具、能力和专注领域。',
|
||||
'memory.tab.workflows': 'Workflows',
|
||||
'memory.tab.workflowsDescription':
|
||||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'可复用的可运行流程——目标加上实现步骤。创建一个、从 URL 安装或打开工作流来运行。',
|
||||
'memory.tab.dreams': '梦境',
|
||||
'memory.tab.calls': '调用记录',
|
||||
'memory.tab.diagram': 'Diagram',
|
||||
@@ -289,24 +289,23 @@ const messages: TranslationMap = {
|
||||
'memory.tab.timeline': 'Timeline',
|
||||
'memory.tab.settings': '设置',
|
||||
'memory.analyzeNow': '立即分析',
|
||||
'memoryTimeline.title': 'Memory Timeline',
|
||||
'memoryTimeline.title': '记忆时间线',
|
||||
'memoryTimeline.intro':
|
||||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||||
'memoryTimeline.loading': 'Building the timeline…',
|
||||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||||
'助手了解您的时间线——按最后一次强化的月份分组的事实。展示增长、活动高峰和平静期。',
|
||||
'memoryTimeline.loading': '正在构建时间线…',
|
||||
'memoryTimeline.errorPrefix': '无法加载图谱:',
|
||||
'memoryTimeline.retry': 'Retry',
|
||||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||||
'memoryTimeline.emptyHint':
|
||||
'As the assistant records facts about you, their timeline will appear here.',
|
||||
'memoryTimeline.namespaceAll': '所有命名空间',
|
||||
'memoryTimeline.empty': '尚无知识图谱。',
|
||||
'memoryTimeline.emptyHint': '当助手记录关于您的事实时,时间线将在此显示。',
|
||||
'memoryTimeline.metricTotal': 'Facts',
|
||||
'memoryTimeline.metricMonths': 'Active months',
|
||||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||||
'memoryTimeline.heading': 'Facts learned per month',
|
||||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||||
'memoryTimeline.metricMonths': '活跃月份',
|
||||
'memoryTimeline.metricRecent': '最近 30 天',
|
||||
'memoryTimeline.heading': '每月学到的事实',
|
||||
'memoryTimeline.busiestCaption': '最活跃:{period}({count})',
|
||||
'memoryTimeline.undatedNote': '{count} 个事实没有记录日期。',
|
||||
'memoryTimeline.truncated': '显示最近 {shown}/{total} 个月。',
|
||||
'namespaceOverview.title': '命名空间概览',
|
||||
'namespaceOverview.intro':
|
||||
'您的知识如何在各个上下文中分布——每个命名空间中记录的事实和不同实体的数量。',
|
||||
@@ -349,51 +348,48 @@ const messages: TranslationMap = {
|
||||
'graphCentrality.bridgeTitle': '连接点,影响力高于其链接数量所暗示的程度',
|
||||
'graphCentrality.degreeTitle': '{in} 入 · {out} 出',
|
||||
'memory.tab.associations': 'Associations',
|
||||
'entityAssociations.title': 'Entity Associations',
|
||||
'entityAssociations.title': '实体关联',
|
||||
'entityAssociations.intro':
|
||||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||||
'entityAssociations.loading': 'Scoring associations…',
|
||||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||||
'共享许多相同连接的实体会被关联——即使没有单一事实直接连接它们。Jaccard 相似度可揭示这些隐含的关联。',
|
||||
'entityAssociations.loading': '正在计算关联…',
|
||||
'entityAssociations.errorPrefix': '无法加载图谱:',
|
||||
'entityAssociations.retry': 'Retry',
|
||||
'entityAssociations.empty': 'No associations yet.',
|
||||
'entityAssociations.emptyHint':
|
||||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||||
'entityAssociations.empty': '暂无关联。',
|
||||
'entityAssociations.emptyHint': '当实体开始共享连接时,最强的关联将在此显示。',
|
||||
'entityAssociations.namespaceLabel': 'Namespace',
|
||||
'entityAssociations.namespaceAll': 'All namespaces',
|
||||
'entityAssociations.namespaceAll': '所有命名空间',
|
||||
'entityAssociations.metricEntities': 'Entities',
|
||||
'entityAssociations.metricPairs': 'Associations',
|
||||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||||
'entityAssociations.rankedHeading': '最强关联',
|
||||
'entityAssociations.linkedBadge': 'linked',
|
||||
'entityAssociations.inferredBadge': 'inferred',
|
||||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||||
'entityAssociations.inferredTitle':
|
||||
'No direct link — associated only through shared connections.',
|
||||
'entityAssociations.sharedLabel': '{shared} shared',
|
||||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||||
'entityAssociations.linkedTitle': '这些实体直接相连。',
|
||||
'entityAssociations.inferredTitle': '无直接关联——仅通过共享连接推断。',
|
||||
'entityAssociations.sharedLabel': '{shared} 个共享',
|
||||
'entityAssociations.pairTitle': '{jaccard}% 相似 · 共享 {shared}/{union} 个连接',
|
||||
'entityAssociations.truncated': '显示 {shown}/{total}——最强优先。',
|
||||
'memory.tab.freshness': 'Freshness',
|
||||
'memoryFreshness.title': 'Knowledge Freshness',
|
||||
'memoryFreshness.title': '知识新鲜度',
|
||||
'memoryFreshness.intro':
|
||||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||||
'memoryFreshness.loading': 'Scoring freshness…',
|
||||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||||
'助手近期未重新确认的事实会沿遗忘曲线衰减。这将显示哪些事实正在过时、值得重新核查,以避免将旧事实视为仍然确定。',
|
||||
'memoryFreshness.loading': '正在计算新鲜度…',
|
||||
'memoryFreshness.errorPrefix': '无法加载图谱:',
|
||||
'memoryFreshness.retry': 'Retry',
|
||||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||||
'memoryFreshness.emptyHint':
|
||||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||||
'memoryFreshness.empty': '尚无知识图谱。',
|
||||
'memoryFreshness.emptyHint': '当助手记录关于您的事实时,其新鲜度将在此跟踪。',
|
||||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||||
'memoryFreshness.namespaceAll': '所有命名空间',
|
||||
'memoryFreshness.metricFresh': 'Fresh',
|
||||
'memoryFreshness.metricFading': 'Fading',
|
||||
'memoryFreshness.metricStale': 'Stale',
|
||||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||||
'memoryFreshness.recallCaption': '在 {total} 个事实中平均召回率 {recall}%',
|
||||
'memoryFreshness.queueHeading': '重新确认队列',
|
||||
'memoryFreshness.queueTruncated': '显示 {shown}/{total}——请优先处理这些。',
|
||||
'memoryFreshness.allFresh': '所有事实仍然新鲜——无需重新确认。',
|
||||
'memoryFreshness.statusFading': 'fading',
|
||||
'memoryFreshness.statusStale': 'stale',
|
||||
'memoryFreshness.ageLabel': '{days}d old',
|
||||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||||
'memoryFreshness.ageLabel': '{days} 天前',
|
||||
'memoryFreshness.recallTitle': '{recall}% 召回率 · 半衰期 {halfLife} 天',
|
||||
'memory.tab.path': '路径',
|
||||
'connectionPath.title': '连接路径',
|
||||
'connectionPath.intro':
|
||||
@@ -1746,7 +1742,7 @@ const messages: TranslationMap = {
|
||||
'mic.deviceInUse': '麦克风正被其他应用程序占用。',
|
||||
'mic.error': '麦克风错误',
|
||||
'mic.transcribing': '转录中...',
|
||||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||||
'mic.retryingTranscription': '正在重试…(第 {attempt} 次,共 {max} 次)',
|
||||
'mic.tapToSend': '点击发送',
|
||||
'mic.waitingForAgent': '等待助手...',
|
||||
'mic.tapAndSpeak': '点击说话',
|
||||
@@ -3639,9 +3635,8 @@ const messages: TranslationMap = {
|
||||
'OPENHUMAN_ACTION_DIR 已设置 — 请取消该环境变量以在设置中编辑此项。',
|
||||
'settings.agentAccess.actionDirEnvOverrideNote':
|
||||
'已被 OPENHUMAN_ACTION_DIR 覆盖 — 请取消该环境变量以在设置中管理。',
|
||||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||||
'settings.agentAccess.approvalHistoryDesc':
|
||||
'Review past Approve / Deny decisions the agent requested.',
|
||||
'settings.agentAccess.approvalHistory': '审批历史',
|
||||
'settings.agentAccess.approvalHistoryDesc': '查看智能体请求的历次批准/拒绝决定。',
|
||||
'settings.agentAccess.viewApprovalHistory': '查看审批历史',
|
||||
'settings.sandbox.title': '沙盒执行',
|
||||
'settings.sandbox.menuDesc': '配置沙盒后端以隔离代理工具。',
|
||||
@@ -3676,16 +3671,16 @@ const messages: TranslationMap = {
|
||||
'settings.sandbox.envPassthrough': '环境变量透传',
|
||||
'settings.sandbox.envPassthroughDesc': '转发到沙盒中的环境变量。',
|
||||
'settings.sandbox.noEnvVars': '未配置任何环境变量。',
|
||||
'settings.approvalHistory.title': 'Approval history',
|
||||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||||
'settings.approvalHistory.title': '审批历史',
|
||||
'settings.approvalHistory.subtitle': '最近的工具审批决定,最新优先。',
|
||||
'settings.approvalHistory.refresh': 'Refresh',
|
||||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||||
'settings.approvalHistory.loading': '正在加载审批历史…',
|
||||
'settings.approvalHistory.retry': 'Retry',
|
||||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||||
'settings.approvalHistory.emptyState': '尚无审批决定记录。',
|
||||
'settings.approvalHistory.errorGeneric': '无法加载审批历史。请重试。',
|
||||
'settings.approvalHistory.decidedAt': '决定于 {date}',
|
||||
'settings.approvalHistory.decision.approveOnce': '批准一次',
|
||||
'settings.approvalHistory.decision.approveAlways': '始终允许',
|
||||
'settings.approvalHistory.decision.deny': 'Denied',
|
||||
'settings.appearance.title': '外观',
|
||||
'settings.appearance.themeHeading': '主题',
|
||||
@@ -4325,49 +4320,49 @@ const messages: TranslationMap = {
|
||||
'settings.agents.editor.create': '创建智能体',
|
||||
'settings.agents.editor.saving': '保存中…',
|
||||
'nav.workflows': 'Workflows',
|
||||
'workflows.title': 'Agent Workflows',
|
||||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||||
'workflows.createNew': 'New Workflow',
|
||||
'workflows.title': '工作流',
|
||||
'workflows.subtitle':
|
||||
'可复用的可运行流程——目标加上实现步骤。创建一个、从 URL 安装或打开工作流来运行。',
|
||||
'workflows.createNew': '新建工作流',
|
||||
'workflows.listHeading': 'Workflows',
|
||||
'workflows.delete': 'Delete Workflow',
|
||||
'workflows.deleteError': 'Failed to delete workflow',
|
||||
'workflows.warnings': '{count} warning(s)',
|
||||
'workflows.empty.title': 'No workflows yet',
|
||||
'workflows.empty.body':
|
||||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||||
'workflows.create.title': 'New Workflow',
|
||||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||||
'workflows.delete': '删除工作流',
|
||||
'workflows.deleteError': '删除工作流失败',
|
||||
'workflows.warnings': '{count} 个警告',
|
||||
'workflows.empty.title': '暂无工作流',
|
||||
'workflows.empty.body': '创建工作流以为任务生命周期阶段定义规则和脚本。',
|
||||
'workflows.create.title': '新建工作流',
|
||||
'workflows.create.subtitle': '为智能体定义生命周期绑定的规则集。',
|
||||
'workflows.create.name': 'Name',
|
||||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||||
'workflows.create.namePlaceholder': '例如 Python 项目工作流',
|
||||
'workflows.create.description': 'Description',
|
||||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||||
'workflows.create.whenToUse': 'When to use',
|
||||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||||
'workflows.create.optional': '(optional)',
|
||||
'workflows.create.createBtn': 'Create workflow',
|
||||
'workflows.create.descriptionPlaceholder': '此工作流的作用是什么?',
|
||||
'workflows.create.whenToUse': '何时使用',
|
||||
'workflows.create.whenToUsePlaceholder': '智能体何时应使用此工作流?',
|
||||
'workflows.create.optional': '(可选)',
|
||||
'workflows.create.createBtn': '创建工作流',
|
||||
'workflows.create.creating': 'Creating…',
|
||||
'workflows.create.createError': 'Could not create workflow',
|
||||
'workflows.create.successTitle': 'Workflow created',
|
||||
'workflows.create.successMessage': 'was created successfully.',
|
||||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||||
'workflows.create.createError': '无法创建工作流',
|
||||
'workflows.create.successTitle': '工作流已创建',
|
||||
'workflows.create.successMessage': '已成功创建。',
|
||||
'workflows.deleteConfirm.title': '删除工作流',
|
||||
'workflows.deleteConfirm.body': '移除“{name}”?此操作无法撤消。',
|
||||
'workflows.detail.tags': 'Tags',
|
||||
'workflows.detail.location': 'Location',
|
||||
'workflows.detail.warnings': 'Warnings',
|
||||
'workflows.detail.phases': 'Phases',
|
||||
'workflows.detail.noPhases': 'No phases defined.',
|
||||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||||
'workflows.detail.noPhases': '未定义阶段。',
|
||||
'workflows.detail.loadError': '加载完整工作流失败',
|
||||
'workflows.phase.rules': 'Rules',
|
||||
'workflows.phase.rules.empty': 'No rules.',
|
||||
'workflows.phase.rules.empty': '无规则。',
|
||||
'workflows.phase.scripts': 'Scripts',
|
||||
'workflows.phase.scripts.empty': 'No scripts.',
|
||||
'workflows.phase.toolScope': 'Tool scope',
|
||||
'workflows.phase.scripts.empty': '无脚本。',
|
||||
'workflows.phase.toolScope': '工具范围',
|
||||
'workflows.phase.toolScope.allow': 'Allow',
|
||||
'workflows.phase.toolScope.deny': 'Deny',
|
||||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||||
'workflows.phase.toolScope.inherited': '继承自工作流默认设置。',
|
||||
'workflows.phase.toolScope.empty': '无工具限制。',
|
||||
'workflows.phase.context': 'Context',
|
||||
'workflows.phase.context.empty': 'No context providers.',
|
||||
'workflows.phase.context.empty': '无上下文提供者。',
|
||||
'settings.agentsSection.title': 'Agents',
|
||||
'settings.agentsSection.description': '管理您的智能体、其自主权及其在本机上的访问权限。',
|
||||
'settings.agentsSection.menuDesc': '注册表、自主权与系统访问',
|
||||
@@ -4462,51 +4457,49 @@ const messages: TranslationMap = {
|
||||
'intelligence.agents.tier.chat': '聊天',
|
||||
'intelligence.agents.tier.reasoning': '推理',
|
||||
'intelligence.agents.tier.worker': '工作者',
|
||||
'modelCouncil.title': 'Model Council',
|
||||
'modelCouncil.title': '模型委员会',
|
||||
'modelCouncil.intro':
|
||||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||||
'提出一个问题,同时从多个模型获取独立回答,然后由主席模型综合各方共识、分歧以及各自的独特贡献。',
|
||||
'modelCouncil.listTitle': 'Councils',
|
||||
'modelCouncil.listIntro':
|
||||
'Choose a saved council, edit its agents and judge, or create a new council for a specific kind of decision.',
|
||||
'modelCouncil.addCouncil': 'New council',
|
||||
'modelCouncil.openCouncil': 'Open council',
|
||||
'modelCouncil.editCouncil': 'Edit council',
|
||||
'modelCouncil.editCurrentCouncil': 'Edit current council',
|
||||
'modelCouncil.editCouncilAria': 'Edit {name}',
|
||||
'modelCouncil.deleteCouncilAria': 'Delete {name}',
|
||||
'modelCouncil.backToCouncils': 'Back to councils',
|
||||
'modelCouncil.saveCouncil': 'Save council',
|
||||
'modelCouncil.listIntro': '选择已保存的委员会,编辑其智能体和法官,或创建新委员会用于特定决策。',
|
||||
'modelCouncil.addCouncil': '新建委员会',
|
||||
'modelCouncil.openCouncil': '打开委员会',
|
||||
'modelCouncil.editCouncil': '编辑委员会',
|
||||
'modelCouncil.editCurrentCouncil': '编辑当前委员会',
|
||||
'modelCouncil.editCouncilAria': '编辑 {name}',
|
||||
'modelCouncil.deleteCouncilAria': '删除 {name}',
|
||||
'modelCouncil.backToCouncils': '返回委员会列表',
|
||||
'modelCouncil.saveCouncil': '保存委员会',
|
||||
'modelCouncil.savingCouncil': 'Saving…',
|
||||
'modelCouncil.cancelEdit': 'Cancel',
|
||||
'modelCouncil.loadingCouncils': 'Loading councils…',
|
||||
'modelCouncil.noCouncils': 'No councils yet. Add one to get started.',
|
||||
'modelCouncil.noCouncilDescription': 'No description',
|
||||
'modelCouncil.registryErrorPrefix': 'Council registry failed:',
|
||||
'modelCouncil.councilNameLabel': 'Council name',
|
||||
'modelCouncil.loadingCouncils': '正在加载委员会…',
|
||||
'modelCouncil.noCouncils': '暂无委员会。添加一个开始使用。',
|
||||
'modelCouncil.noCouncilDescription': '无描述',
|
||||
'modelCouncil.registryErrorPrefix': '委员会注册表失败:',
|
||||
'modelCouncil.councilNameLabel': '委员会名称',
|
||||
'modelCouncil.councilDescriptionLabel': 'Description',
|
||||
'modelCouncil.councilDescriptionPlaceholder': 'When to use this council',
|
||||
'modelCouncil.councilDescriptionPlaceholder': '何时使用此委员会',
|
||||
'modelCouncil.selectModel': 'Select',
|
||||
'modelCouncil.modelPickerHelp': 'Select a routing hint or pin an exact provider model.',
|
||||
'modelCouncil.modelPickerHelp': '选择路由提示或指定精确的供应商模型。',
|
||||
'modelCouncil.closeModelPicker': 'Close',
|
||||
'modelCouncil.modelPickerHints': 'Hints',
|
||||
'modelCouncil.modelPickerProviderModel': 'Provider + model',
|
||||
'modelCouncil.modelProviderLabel': 'Model provider',
|
||||
'modelCouncil.modelIdLabel': 'Model id',
|
||||
'modelCouncil.useProviderModel': 'Use provider model',
|
||||
'modelCouncil.modelPickerProviderModel': '供应商 + 模型',
|
||||
'modelCouncil.modelProviderLabel': '模型供应商',
|
||||
'modelCouncil.modelIdLabel': '模型 ID',
|
||||
'modelCouncil.useProviderModel': '使用供应商模型',
|
||||
'modelCouncil.questionLabel': 'Question',
|
||||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||||
'modelCouncil.membersLabel': 'Member models',
|
||||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||||
'modelCouncil.memberAria': 'Member model {n}',
|
||||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||||
'modelCouncil.addMember': '+ Add model',
|
||||
'modelCouncil.questionPlaceholder': '向委员会提问…',
|
||||
'modelCouncil.membersLabel': '成员模型',
|
||||
'modelCouncil.maxMembersNote': '最多 {max} 个',
|
||||
'modelCouncil.memberPlaceholder': '例如 gpt-5.2',
|
||||
'modelCouncil.memberAria': '成员模型 {n}',
|
||||
'modelCouncil.removeMemberAria': '移除成员模型 {n}',
|
||||
'modelCouncil.addMember': '+ 添加模型',
|
||||
'modelCouncil.settingsTitle': '委员会设置',
|
||||
'modelCouncil.settingsSummary': '{count} 名陪审员 · 法官:{judge}',
|
||||
'modelCouncil.juryCountLabel': '陪审员数量',
|
||||
'modelCouncil.debateRoundsLabel': 'Debate turns',
|
||||
'modelCouncil.debateRoundsHelp':
|
||||
'Each juror keeps debating across turns before the judge writes the final synthesis.',
|
||||
'modelCouncil.debateRoundsLabel': '辩论轮次',
|
||||
'modelCouncil.debateRoundsHelp': '每位陪审员在法官撰写最终综合意见前进行多轮辩论。',
|
||||
'modelCouncil.judgeAgentLabel': '法官代理',
|
||||
'modelCouncil.defaultJudge': '默认法官',
|
||||
'modelCouncil.savedProfile': '已保存配置',
|
||||
@@ -4533,53 +4526,45 @@ const messages: TranslationMap = {
|
||||
'modelCouncil.jurorFallback': '陪审员',
|
||||
'modelCouncil.sharedReasoningLabel': '共享推理文件',
|
||||
'modelCouncil.sharedReasoningHelp': '委员会先围绕这个共享草稿工作,再由法官撰写综合结论。',
|
||||
'modelCouncil.liveScratchpadHelp':
|
||||
'Juror updates are appended here after each round, then fed into the next round.',
|
||||
'modelCouncil.liveScratchpadHelp': '每轮结束后陪审员的更新会追加到此处,然后作为下一轮的输入。',
|
||||
'modelCouncil.liveScratchpadBadge': 'Live',
|
||||
'modelCouncil.scratchpadRoundHeading': 'Round {round} updates',
|
||||
'modelCouncil.scratchpadNoResponse': 'No response',
|
||||
'modelCouncil.chairLabel': 'Chair model',
|
||||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||||
'modelCouncil.run': 'Convene council',
|
||||
'modelCouncil.scratchpadRoundHeading': '第 {round} 轮更新',
|
||||
'modelCouncil.scratchpadNoResponse': '无回复',
|
||||
'modelCouncil.chairLabel': '主席模型',
|
||||
'modelCouncil.chairPlaceholder': '例如 claude-opus-4-8',
|
||||
'modelCouncil.chairHelp': '主席阅读每位成员的回答并撰写综合意见。',
|
||||
'modelCouncil.run': '召集委员会',
|
||||
'modelCouncil.running': 'Convening…',
|
||||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||||
'modelCouncil.deliberationHeading': 'Council deliberation',
|
||||
'modelCouncil.deliberationHelp':
|
||||
'Mascots show each agent thinking while the shared reasoning file is in play.',
|
||||
'modelCouncil.runningHint': '正在并行查询成员,然后综合…',
|
||||
'modelCouncil.deliberationHeading': '委员会审议',
|
||||
'modelCouncil.deliberationHelp': '头像显示每个智能体在共享推理文件使用期间的思考状态。',
|
||||
'modelCouncil.debateRoundInstruction':
|
||||
'Respond to the other jurors so far. Preserve disagreements, revise your view when warranted, and keep your current conclusion explicit.',
|
||||
'回应其他陪审员的观点。保留分歧,在有根据时修正您的观点,并明确表达您当前的结论。',
|
||||
'modelCouncil.debateFinalInstruction':
|
||||
'This is your final juror turn. Converge where the evidence supports it, call out remaining disagreement, and hand the judge a clear conclusion.',
|
||||
'modelCouncil.roundLabel': 'Round {round}',
|
||||
'modelCouncil.currentRoundThinking': 'Continuing the next turn…',
|
||||
'这是您最后一轮陪审发言。在证据支持的地方达成一致,指出仍存在的分歧,并向法官给出清晰结论。',
|
||||
'modelCouncil.roundLabel': '第 {round} 轮',
|
||||
'modelCouncil.currentRoundThinking': '正在继续下一轮…',
|
||||
'modelCouncil.thinkingBadge': 'Thinking',
|
||||
'modelCouncil.thinkingWithBrief': 'Working from this perspective: {brief}',
|
||||
'modelCouncil.thought.evidence':
|
||||
'Checking evidence, assumptions, and what the shared reasoning file already captures.',
|
||||
'modelCouncil.thought.plan': 'Sketching the practical path and where execution could get stuck.',
|
||||
'modelCouncil.thought.risk':
|
||||
'Looking for failure modes, missing context, and brittle conclusions.',
|
||||
'modelCouncil.thought.tradeoffs':
|
||||
'Comparing tradeoffs before handing the judge a concise position.',
|
||||
'modelCouncil.thought.synthesis':
|
||||
'Preparing a distinct view so the judge can compare real disagreement.',
|
||||
'modelCouncil.thinkingWithBrief': '基于此视角工作:{brief}',
|
||||
'modelCouncil.thought.evidence': '正在检查证据、假设以及共享推理文件中已有的内容。',
|
||||
'modelCouncil.thought.plan': '正在规划实际路径以及可能遇到的障碍。',
|
||||
'modelCouncil.thought.risk': '正在寻找失败模式、缺失的上下文和脆弱的结论。',
|
||||
'modelCouncil.thought.tradeoffs': '在向法官给出简明立场前比较权衡。',
|
||||
'modelCouncil.thought.synthesis': '正在准备独特观点,以便法官比较真正的分歧。',
|
||||
'modelCouncil.judgeWaitingBadge': 'Judge',
|
||||
'modelCouncil.judgeWaitingThought':
|
||||
'Waiting for juror answers, then reading the shared reasoning file to synthesize.',
|
||||
'modelCouncil.judgeWaitingThought': '正在等待陪审员回答,然后阅读共享推理文件进行综合。',
|
||||
'modelCouncil.judgeSynthesizingBadge': 'Synthesizing',
|
||||
'modelCouncil.judgeSynthesizingThought':
|
||||
'Reading the live juror thoughts and writing the final council synthesis.',
|
||||
'modelCouncil.errorPrefix': 'Council failed:',
|
||||
'modelCouncil.resultsHeading': 'Council results',
|
||||
'modelCouncil.judgeSynthesizingThought': '正在阅读陪审员的实时想法并撰写最终委员会综合意见。',
|
||||
'modelCouncil.errorPrefix': '委员会失败:',
|
||||
'modelCouncil.resultsHeading': '委员会结果',
|
||||
'modelCouncil.memberAnswered': 'Answered',
|
||||
'modelCouncil.memberFailed': 'Failed',
|
||||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||||
'modelCouncil.synthesisBy': 'by {model}',
|
||||
'modelCouncil.usageHeading': 'Debate usage',
|
||||
'modelCouncil.synthesisBy': '由 {model}',
|
||||
'modelCouncil.usageHeading': '辩论用量',
|
||||
'modelCouncil.usageEstimated':
|
||||
'Estimated from debate prompts and responses until provider usage is attached to council RPC.',
|
||||
'modelCouncil.usageEstimatedBadge': 'Estimated tokens',
|
||||
'辩论提示和回复的预估令牌数。实际定价需要委员会 RPC 提供的供应商用量。',
|
||||
'modelCouncil.usageEstimatedBadge': '预估令牌',
|
||||
'modelCouncil.usageInputTokens': 'Input',
|
||||
'modelCouncil.usageOutputTokens': 'Output',
|
||||
'modelCouncil.usageTotalTokens': 'Total',
|
||||
|
||||
@@ -57,12 +57,16 @@ const INTENTIONAL_ENGLISH = new Set([
|
||||
"composio.integrationSlugsExample",
|
||||
"composio.integrationSlugsPlaceholder",
|
||||
"devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny",
|
||||
"intelligence.agents.subagentCountOne",
|
||||
"intelligence.diagram.skillInstallCommand",
|
||||
"intelligence.memoryChunk.detail.embeddingInfo",
|
||||
"mcp.playground.argsLabel",
|
||||
"memorySources.globPatternPlaceholder",
|
||||
"modelCouncil.editCouncilAria",
|
||||
"modelCouncil.jurorLabel",
|
||||
"memorySources.searchQueryPlaceholder",
|
||||
"migration.vendor.hermes",
|
||||
"namespaceOverview.entitiesShort",
|
||||
"screenAwareness.debug.defaultPanicHotkey",
|
||||
"settings.ai.connectionsPerTick",
|
||||
"settings.ai.localModelResolved",
|
||||
@@ -76,13 +80,18 @@ const INTENTIONAL_ENGLISH = new Set([
|
||||
"settings.localModel.status.expectedChat",
|
||||
"settings.localModel.status.expectedVision",
|
||||
"settings.mcpServer.clientClaudeDesktop",
|
||||
"settings.sandbox.backend.bubblewrap",
|
||||
"settings.sandbox.backend.firejail",
|
||||
"settings.sandbox.backend.landlock",
|
||||
"settings.search.allowedSitesPlaceholder",
|
||||
"settings.search.engineBraveLabel",
|
||||
"settings.taskSources.name",
|
||||
"skills.create.allowedToolsPlaceholder",
|
||||
"skills.create.optional",
|
||||
"skills.meetingBots.wakePhraseHint",
|
||||
"skills.meetingBots.platforms.gmeet",
|
||||
"skills.meetingBots.platforms.teams",
|
||||
"subconscious.interval.minutes",
|
||||
"subconscious.interval.fifteenMinutes",
|
||||
"subconscious.interval.fiveMinutes",
|
||||
"subconscious.interval.tenMinutes",
|
||||
@@ -93,6 +102,7 @@ const INTENTIONAL_ENGLISH = new Set([
|
||||
"voice.providers.chip.whisper",
|
||||
"voice.providers.whisperModelBase",
|
||||
"walkthrough.tooltip.stepCounter",
|
||||
"workflows.create.optional",
|
||||
"workspace.obsidianConfigDirPlaceholder",
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user